HJ_Client/node_uiType.js
DESKTOP-15R5JU0\legu 62fef0360c init
2023-11-17 14:13:11 +08:00

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');