forked from fanruan/fineui
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.2 KiB
107 lines
2.2 KiB
2 years ago
|
const fs = require("fs");
|
||
|
|
||
|
const srcName = process.argv[2];
|
||
|
|
||
|
const sourceCode = fs.readFileSync(srcName).toString();
|
||
|
|
||
|
const clzName = /BI\.(.*?)\s\=\sBI\.inherit\(/.exec(sourceCode)[1];
|
||
|
|
||
|
const superName = /inherit\(BI\.(.*?),/.exec(sourceCode)[1];
|
||
|
|
||
|
// const xtype = /BI.shortcut\(\"(.*?)\"/.exec(sourceCode)[1];
|
||
|
|
||
|
const collection = {
|
||
|
static: {}
|
||
|
};
|
||
|
|
||
|
const BI = {
|
||
|
inherit(_, options) {
|
||
|
collection.methods = Object.keys(options).map((key) => options[key]);
|
||
|
return collection.static;
|
||
|
},
|
||
|
shortcut(xtype) {
|
||
|
collection.xtype = xtype;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
eval(sourceCode);
|
||
|
|
||
|
let M = "";
|
||
|
let E = "";
|
||
|
let I = "";
|
||
|
|
||
|
const coreImport = {
|
||
|
shortcut: true
|
||
|
};
|
||
|
|
||
|
if (superName === "Widget") {
|
||
|
coreImport.Widget = true;
|
||
|
}
|
||
|
|
||
|
// 静态方法
|
||
|
Object.keys(collection.static).forEach((key) => {
|
||
|
E += `\tstatic ${key} = "${collection.static[key]}"\n`;
|
||
|
});
|
||
|
|
||
|
// 对函数进行替换
|
||
|
collection.methods.forEach((el) => {
|
||
|
let f = el.toString().replace(/^function/, el.name) + "\n";
|
||
|
|
||
|
|
||
|
// 换 BI.Button.superclass
|
||
|
f = f.replace(`BI.${clzName}.superclass`, "super");
|
||
|
// 换 super._defaultConfig
|
||
|
f = f.replace(
|
||
|
`super\._defaultConfig\.apply\(this\,\sarguments\)`,
|
||
|
"super._defaultConfig(arguments)"
|
||
|
);
|
||
|
// 换 super.xxx.apply
|
||
|
f = f.replace(/super\.(.*?)\.apply\(this\,\sarguments\)/, (a) => {
|
||
|
const f = /super\.(.*?)\.apply\(this\,\sarguments\)/.exec(a);
|
||
|
return `super.${f[1]}(...arguments)`;
|
||
|
});
|
||
|
|
||
|
const target = [
|
||
|
"isNull",
|
||
|
"toPix",
|
||
|
"isKey",
|
||
|
"isObject",
|
||
|
"map",
|
||
|
"extend",
|
||
|
"isFunction",
|
||
|
"isEmptyArray",
|
||
|
"isArray"
|
||
|
];
|
||
|
|
||
|
target.forEach((t) => {
|
||
|
const arr = f.split(`BI.${t}`);
|
||
|
// nodejs 低版本没有 replaceAll
|
||
|
if (arr.length > 1) {
|
||
|
coreImport[t] = true;
|
||
|
f = arr.join(t);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
M += f;
|
||
|
});
|
||
|
|
||
|
Object.keys(coreImport).forEach((el) => {
|
||
|
I += `${el},`;
|
||
|
});
|
||
|
|
||
|
const outputCode = `
|
||
|
import {${I}} from "@/core"
|
||
|
|
||
|
@shortcut()
|
||
|
export class ${clzName} extends ${superName} {
|
||
|
\tstatic xtype = "${collection.xtype}"
|
||
|
|
||
|
${E}
|
||
|
|
||
|
${M}
|
||
|
}
|
||
|
`;
|
||
|
|
||
|
fs.writeFileSync(srcName + ".js", outputCode);
|