Skip to content

Commit b698095

Browse files
authored
Merge pull request #136 from ownego/fix/133-missing-sub-components
Fix: generate sub components for volar.d.ts
2 parents 9ef6de5 + a20fab3 commit b698095

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

build/gen-component-declaration.js

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@ const TYPE_ROOT = process.cwd();
1111
const packageName = '@ownego/polaris-vue';
1212
const fileName = 'volar.d.ts';
1313

14-
const excludeComponents = [];
15-
16-
function exist (path) {
17-
return fs.existsSync(path);
18-
}
19-
2014
function 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
6773
declare module 'vue' {
6874
export interface GlobalComponents {
@@ -72,8 +78,10 @@ declare module 'vue' {
7278
}
7379
export {}
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

Comments
 (0)