@@ -11,12 +11,6 @@ const TYPE_ROOT = process.cwd();
1111const packageName = '@ownego/polaris-vue' ;
1212const fileName = 'volar.d.ts' ;
1313
14- const excludeComponents = [ ] ;
15-
16- function exist ( path ) {
17- return fs . existsSync ( path ) ;
18- }
19-
2014function parseComponentsDeclaration ( code ) {
2115 if ( ! code ) {
2216 return { } ;
@@ -28,8 +22,12 @@ function parseComponentsDeclaration (code) {
2822 ) ;
2923}
3024
31- async function generateComponentsType ( ) {
32- const mainImports = await fs . readFile ( path . resolve ( TYPE_ROOT , 'src/components/index.ts' ) , 'utf-8' ) ;
25+ function generateImportString ( key ) {
26+ return `typeof import('${ packageName } ')['${ key } ']` ;
27+ }
28+
29+ function generateComponentsType ( ) {
30+ const mainImports = fs . readFileSync ( path . resolve ( TYPE_ROOT , 'src/components/index.ts' ) , 'utf-8' ) ;
3331
3432 const pattern = / \' \. \/ ( .* ) \' / g;
3533
@@ -39,14 +37,21 @@ async function generateComponentsType () {
3937 const componentList = mainImports . match ( pattern ) . map ( ( i ) => i . replace ( / [ ^ \w ] / g, '' ) ) ;
4038
4139 componentList . forEach ( ( key ) => {
42- const entry = `typeof import('${ packageName } ')['${ key } ']`
43- if ( ! excludeComponents . includes ( key ) ) {
44- components [ key ] = entry ;
40+ const isSubComponentsExist = fs . existsSync ( `src/components/${ key } /components` ) ;
41+ const getSubComponentsPattern = / \s \w + \s } / g;
42+
43+ if ( isSubComponentsExist ) {
44+ const subImports = fs . readFileSync ( path . resolve ( TYPE_ROOT , `src/components/${ key } /index.ts` ) , 'utf-8' ) ;
45+ const subComponentList = subImports . match ( getSubComponentsPattern ) . map ( ( i ) => i . replace ( / } | \s / g, '' ) ) ;
46+
47+ subComponentList . forEach ( ( subKey ) => components [ subKey ] = generateImportString ( subKey ) ) ;
48+ } else {
49+ components [ key ] = generateImportString ( key ) ;
4550 }
4651 } ) ;
4752
48- const originalContent = exist ( path . resolve ( TYPE_ROOT , fileName ) )
49- ? await fs . readFile ( path . resolve ( TYPE_ROOT , fileName ) , 'utf-8' )
53+ const originalContent = fs . existsSync ( path . resolve ( TYPE_ROOT , fileName ) )
54+ ? fs . readFileSync ( path . resolve ( TYPE_ROOT , fileName ) , 'utf-8' )
5055 : '' ;
5156
5257 const originImports = parseComponentsDeclaration ( originalContent ) ;
@@ -63,6 +68,7 @@ async function generateComponentsType () {
6368 }
6469 return `${ name } : ${ v } `
6570 } ) ;
71+
6672 const code = `// Auto generated component declarations
6773declare module 'vue' {
6874 export interface GlobalComponents {
@@ -72,8 +78,10 @@ declare module 'vue' {
7278}
7379export {}
7480` ;
81+
7582 if ( code !== originalContent ) {
76- await fs . writeFile ( path . resolve ( TYPE_ROOT , fileName ) , code , 'utf-8' ) ;
83+ fs . writeFileSync ( path . resolve ( TYPE_ROOT , fileName ) , code , 'utf-8' ) ;
7784 }
7885}
79- generateComponentsType ( )
86+
87+ generateComponentsType ( ) ;
0 commit comments