88 lines
2.6 KiB
JavaScript
88 lines
2.6 KiB
JavaScript
const fs = require('fs');
|
|
const child_process = require('child_process');
|
|
|
|
var importStr = '';
|
|
var interfaceStr = `\ninterface uc<T extends UiComponent> extends UiClass {
|
|
uiComponent: T;
|
|
}`;
|
|
var root = './assets/src/game';
|
|
var obj = {};
|
|
|
|
function loopDir(dir) {
|
|
|
|
let files = fs.readdirSync(dir);
|
|
files.forEach(file => {
|
|
if (fs.statSync(dir + '/' + file).isDirectory()) {
|
|
loopDir(dir + '/' + file);
|
|
} else {
|
|
if (file.indexOf('.meta') == -1 && file.indexOf('.ts') != -1) {
|
|
readTs(dir + '/' + file);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function readTs(file) {
|
|
let str = fs.readFileSync(file, 'utf-8');
|
|
let uiComponent = str.match(/\export class.*?\extends UiComponent/g);
|
|
let uiClass = str.match(/\export class.*?\extends UiClass/g);
|
|
|
|
if (!uiComponent && !uiClass) return;
|
|
let uiComponentName;
|
|
let uiClassName;
|
|
let arr = [];
|
|
if (uiComponent) {
|
|
uiComponentName = uiComponent[0].split(' ')[2];
|
|
arr.push(uiComponentName);
|
|
}
|
|
if (uiClass) {
|
|
uiClassName = uiClass[0].split(' ')[2];
|
|
arr.push(uiClassName);
|
|
}
|
|
|
|
importStr += `import { ${arr.join(', ')} } from '${file.replace('.ts', '')}';\n`;
|
|
if (uiComponentName && !uiClassName && str.match(/new UiClass.*\'/gi)) {
|
|
let ptl = str.match(/new UiClass.*\'/gi);
|
|
let name = ptl[0].split(',')[2]?.trim().replaceAll(`"`, '').replaceAll(`'`, '');
|
|
if (name) {
|
|
obj[name] = `uc<${uiComponentName}>`;
|
|
}
|
|
}
|
|
if (uiClassName) {
|
|
let ptl = str.match(/new .*\'/gi);
|
|
|
|
if (ptl) {
|
|
ptl = ptl.filter(v => v.indexOf('new ' + uiClassName) != -1)[0];
|
|
|
|
if (!ptl) {
|
|
return;
|
|
}
|
|
let uClassName = ptl.split(',')[1]?.trim();
|
|
if (!uClassName) return;
|
|
let name = ptl.split(',')[2].trim().replaceAll(`"`, '').replaceAll(`'`, '');
|
|
|
|
interfaceStr += `\ninterface ${'_' + uiClassName} extends ${uiClassName} {`;
|
|
interfaceStr += `\n uiComponent: ${uClassName};`;
|
|
interfaceStr += `\n}`;
|
|
|
|
obj[name] = '_' + uiClassName;
|
|
}
|
|
}
|
|
|
|
// console.log(uiComponentName, uiClassName);
|
|
}
|
|
|
|
loopDir(root);
|
|
|
|
let ts = importStr + interfaceStr + '\n';
|
|
ts += '\ndeclare global {';
|
|
ts += '\n interface UiList {';
|
|
for (let name in obj) {
|
|
ts += `\n ${name}: ${obj[name]};`;
|
|
}
|
|
ts += '\n }';
|
|
ts += '\n}';
|
|
|
|
child_process.execSync('svn up type_ui.d.ts');
|
|
fs.writeFileSync('type_ui.d.ts', ts);
|
|
child_process.execSync('svn ci -m 自动提交UiClass提示文件 type_ui.d.ts'); |