-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgenerate.js
62 lines (53 loc) · 2 KB
/
generate.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import { readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
import { basename, resolve } from 'node:path';
const categories = {};
['src/lib'].forEach((dirPath) => {
const fileData = [];
const libNames = [];
const dirNames = [];
// 自动生成导出和单文件
readdirSync(dirPath).forEach((dir) => {
dirNames.push(dir);
const metaFilePath = resolve(dirPath, dir, '_meta.json');
let metaData = {};
try {
metaData = JSON.parse(readFileSync(metaFilePath, 'utf-8'));
} catch (error) {
console.error(`Error reading metadata for ${dir}:`, error);
}
categories[dir] = { displayName: metaData.name || 'Unknown Name' };
const files = readdirSync(resolve(dirPath, dir));
files.forEach((file) => {
if (file === '_meta.json') return;
if (file.endsWith('.test.js')) return;
const filePath = resolve(dirPath, dir, file);
const stat = statSync(filePath);
if (stat.isFile() && file.endsWith('.js')) {
const fileName = basename(file, '.js');
let exportName = ''
if (fileName == 'index') {
exportName = dir;
}else if(/^\d+$/.test(fileName)) {
exportName = `${dir}${fileName}`;
} else {
exportName = `${dir}_${fileName}`;
}
libNames.push(exportName);
fileData.push(
`export { default as ${exportName} } from './lib/${dir}/${file}';\n`
);
// 判断是否有相关标签
const fileContent = readFileSync(filePath, { encoding: 'utf8' });
if (!fileContent.includes('@author')) {
console.log(`${filePath} 文件缺少 [作者]`);
}
} else {
console.log(`${dir}/${file} 不是一个函数文件`);
}
});
});
writeFileSync(`./src/index.js`, fileData.join(''));
writeFileSync(`./${dirPath}Names.js`, `export const libNames = ${JSON.stringify(libNames)};`);
console.log(`${dirPath} 数据生成完毕`);
});
writeFileSync('./categories.json', JSON.stringify(categories));