@@ -19,17 +19,52 @@ async function generateIndexTypes(from, to) {
1919 const files = glob
2020 . sync ( `${ from } /*/` )
2121 . 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 ( ) } ';
3065export * from './${ file . split ( '.' ) . shift ( ) } ';
31- `
32- ) } `. replace ( / , / g, '' ) ;
66+ ` ;
67+ } ) } `. replace ( / , / g, '' ) ;
3368 return Promise . all ( [ fse . writeFile ( path . resolve ( to , 'index.d.ts' ) , content ) ] ) ;
3469}
3570
0 commit comments