fy-convertor
Version:
Convert excel/xml/json/bin/protocl/ts/as ...
86 lines • 3.59 kB
JavaScript
import { install } from 'source-map-support';
install();
import { Command } from 'commander';
import fs from 'fs-extra';
import path from 'path';
import { Convertor } from './Convertor.js';
import dotenv from 'dotenv';
import { toolchain } from './tools/toolchain.js';
import { fileURLToPath } from 'url';
import { ProjIniCfgParser } from './core/ProjIniCfgParser.js';
import { SvnHolder } from './core/SvnHolder.js';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const myPackage = await fs.readJSON(path.join(__dirname, '../package.json'));
const rmQuotes = (val) => {
let rst = val.match(/(['"])(.*)\1/);
if (rst)
return rst[2];
return val;
};
const program = new Command();
program
.version(myPackage.version, "-v, --version")
.option("-c, --cmd <xml2json>", "[MUST] command to be executed.")
.option("-p, --project <string>", "[MUST] Project code.")
.option("-e, --env <file>", "[MUST] .env file which contains enviroment configurations.", rmQuotes)
.option("-i, --input [path]", "Input parameter of xls2xml cmd.", rmQuotes)
.option("-w, --workspace [path]", "Temporary workspace path. Direction only. If workspace is omitted, '.' is assumed.", rmQuotes)
.option("-d, --debug", "Use debug mode, no svn commit.")
.option("-f, --force", "Force rebuild and ignore md5 cache.")
.option("--publish", "Publish mode.")
.option("--xml2json", "Do xml2json concurrently while executing xls2xml.")
.option("--remote [string]", "Call by remote command, format: 'code:${code};msgId:${msgId}'.", rmQuotes)
.parse(process.argv);
const options = program.opts();
if (fs.existsSync(options.env)) {
// 读取环境配置
let envOutput = dotenv.config({ path: options.env });
if (envOutput.error) {
console.error('[ERROR]env configuration read error', envOutput.error);
process.exit(1);
}
}
else if (options.cmd != 'xls2xml') {
// 转表不需要.env
console.error('[ERROR].env file not exists:', options.env);
process.exit(1);
}
if (options.cmd != 'xls2xml') {
const env = process.env;
if (!env.CFG_LOCAL) {
console.error('[ERROR]"CFG_LOCAL" value not found in the .evn file.');
process.exit(1);
}
if (!env.CFG_SVN) {
console.error('[ERROR]"CFG_ENV" value not found in the .evn file.');
process.exit(1);
}
await SvnHolder.Instance.checkSVN(!toolchain.options.debug, env.CFG_LOCAL, env.CFG_SVN);
if (!options.workspace) {
options.workspace = process.cwd();
}
}
let replyMsgId = '';
if (options.remote) {
// 飞书远程执行任务,remote参数格式为:code:${code};msgId:${msgId},其中code为项目群组代号,msgId为飞书聊天消息ID
const arr = options.remote.split(';');
if (arr.length == 2) {
const [codePairs, msgIdPairs] = arr;
const code = codePairs.split(':')[1];
replyMsgId = msgIdPairs.split(':')[1];
const iCfg = await ProjIniCfgParser.Instance.getProjIniCfgByChatCode(code);
if (!iCfg) {
console.error('[ERROR]Project not found via chat code:', code);
process.exit(1);
}
options.project = iCfg.Project.code;
console.log('real project:', options.project);
}
}
toolchain.options = options;
const cvt = new Convertor(myPackage.version);
cvt.execute(replyMsgId).catch((reason) => {
console.error('[ERROR]Error encoutered!', reason);
process.exit(1);
});
//# sourceMappingURL=index.js.map