@@ -19,17 +19,52 @@ async function generateIndexTypes(from, to) {
19
19
const files = glob
20
20
. sync ( `${ from } /*/` )
21
21
. filter ( ( name ) => ! name . includes ( '/tests/' ) )
22
- . map ( ( path ) =>
23
- path
24
- . replace ( / \/ $ / , '' )
25
- . split ( '/' )
26
- . pop ( )
27
- ) ;
28
- const content = `${ files . map (
29
- ( file ) => `export { default as ${ kebabToCamel ( file . split ( '/' ) . shift ( ) ) } } from './${ file . split ( '.' ) . shift ( ) } ';
22
+ . map ( ( path ) => path . replace ( / \/ $ / , '' ) . split ( '/' ) . pop ( ) ) ;
23
+ const content = `${ files . map ( ( file ) => {
24
+ let module ;
25
+ let exportName ;
26
+ const moduleSource = `${ from } /${ file . split ( '.' ) . shift ( ) } /${ file } .js` . replace ( '//' , '/' ) ;
27
+ try {
28
+ module = require ( `${ to } /${ file . split ( '.' ) . shift ( ) } ` ) ;
29
+ } catch ( error ) {
30
+ console . log ( 'Unable to find module: ' , moduleSource ) ;
31
+ module = { } ;
32
+ exportName = kebabToCamel ( file . split ( '/' ) . shift ( ) ) ;
33
+ }
34
+
35
+ let fileSource ;
36
+ /**
37
+ * Transform default module name to build index.d.ts export name
38
+ */
39
+ if ( module . default ) {
40
+ try {
41
+ fileSource = fse . readFileSync ( moduleSource , { encoding : 'utf-8' } ) ;
42
+ } catch ( error ) {
43
+ console . error ( `Unable to read file ${ moduleSource } ` ) ;
44
+ exportName = kebabToCamel ( file . split ( '/' ) . shift ( ) ) ;
45
+ }
46
+
47
+ let name = fileSource . match ( / e x p o r t d e f a u l t * [ a - z A - Z \d ; ] + \n / gm) ;
48
+ if ( name !== null ) {
49
+ name = name . pop ( ) . replace ( 'export default' , '' ) . replace ( / \n / , '' ) . replace ( ';' , '' ) . trim ( ) ;
50
+ } else {
51
+ name = kebabToCamel ( file . split ( '/' ) . shift ( ) ) ;
52
+ }
53
+
54
+ exportName = name ;
55
+ if ( ! name ) {
56
+ throw new Error ( `module name missing!: ${ file } \n` ) ;
57
+ }
58
+ }
59
+
60
+ if ( ! exportName ) {
61
+ exportName = kebabToCamel ( file . split ( '/' ) . shift ( ) ) ;
62
+ }
63
+
64
+ return `export { default as ${ exportName } } from './${ file . split ( '.' ) . shift ( ) } ';
30
65
export * from './${ file . split ( '.' ) . shift ( ) } ';
31
- `
32
- ) } `. replace ( / , / g, '' ) ;
66
+ ` ;
67
+ } ) } `. replace ( / , / g, '' ) ;
33
68
return Promise . all ( [ fse . writeFile ( path . resolve ( to , 'index.d.ts' ) , content ) ] ) ;
34
69
}
35
70
0 commit comments