Skip to content

Commit 59a83fe

Browse files
committed
Generate defauly exports names based on the default export.
1 parent c1380d2 commit 59a83fe

File tree

1 file changed

+45
-10
lines changed

1 file changed

+45
-10
lines changed

scripts/generate-typings.js

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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(/export default *[a-zA-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()}';
3065
export * 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

Comments
 (0)