unity-find-fault
Version:
A tool to find fault in unity project.
89 lines • 3.45 kB
JavaScript
import os from 'os';
import { spawn } from "child_process";
export class Cmd {
_output = '';
runNodeModule(moduleName, params, options) {
if (os.type() == 'Windows_NT' && !moduleName.match(/\.cmd$/)) {
moduleName += '.cmd';
}
return this.run(moduleName, params, options);
}
run(command, params, options) {
this._output = '';
// options = Object.assign(options || {}, { cwd: this.cfg.cwd });
return new Promise((resolve, reject) => {
if (!options?.silent)
console.log(`run command: ${command}, params:`, params, options);
if (!options) {
options = {};
}
if (!params)
params = [];
options.stdio = 'pipe';
let proc = spawn(command, params, options);
let lastData = undefined;
proc.stdout.on('data', (data) => {
let dataStr = String(data);
if (options?.outputFormatter)
dataStr = options.outputFormatter(dataStr);
if (dataStr) {
if (dataStr !== lastData) {
if (options?.logPrefix) {
dataStr = options.logPrefix + dataStr;
}
this._output += dataStr;
if (!options?.silent)
process.stdout.write(dataStr);
lastData = dataStr;
}
}
});
proc.stderr.on('data', (data) => {
// 不一定代表进程exitcode != 0,可能只是进程调用了console.error
let dataStr = String(data);
if (options?.outputFormatter)
dataStr = options.outputFormatter(dataStr);
if (dataStr) {
if (dataStr !== lastData) {
if (options?.logPrefix) {
dataStr = options.logPrefix + dataStr;
}
this._output += dataStr;
if (!options?.silent)
process.stderr.write(dataStr);
lastData = dataStr;
}
}
});
// 进程错误
proc.on('error', (error) => {
if (!options?.silent)
console.error(error);
reject({ code: 1, error });
});
// 进程关闭
proc.on('close', (code) => {
if (!options?.silent)
console.log(`process closed with exit code ${code}: ${command} ${params?.join(' ')}`);
if (code == 0) {
resolve(0);
}
else {
let errMsg = `process closed with exit code ${code}: ${command} ${params?.join(' ')}`;
if (options?.logPrefix) {
errMsg = options.logPrefix + errMsg;
}
reject({ code, error: new Error(errMsg) });
}
});
proc.on('exit', (code, signal) => {
if (!options?.silent)
console.log(`process exits`);
});
});
}
get output() {
return this._output;
}
}
//# sourceMappingURL=Cmd.js.map