2022-05-10 20:41:14 +08:00

91 lines
2.7 KiB
JavaScript
Executable File

#!/usr/bin/env node
// wcsc.exe md5 = "d45f45f109afa238cd83c8ad1d0e2a5e"
const version = "20220423";
const { spawn } = require("child_process");
const fs = require("fs");
const path = require("path");
const args = process.argv.slice(2);
const wcscPath = path.resolve(__dirname, "./wcsc.bin");
const DEBUG_OUTPUT = process.env["WX_DEBUG_COMPILER_OUTPUT"];
// 向错误输出流写入信息
process.stderr.write(`环境及执行信息:
编译器版本: ${version}
node版本: ${process.version}
参数: ${args.join(' ')}
具体报错:
`);
function encode1(s) {
return encodeURI(s).replace(
/%(u[0-9A-F]{4})|(%[0-9A-F]{2})/gm,
function ($0, $1, $2) {
return ($1 && "\\" + $1.toLowerCase()) || decodeURI($2);
}
);
}
if (args.includes("-ll")) {
const wcsc = spawn(wcscPath, args, {
cwd: process.cwd(),
});
const spwanData = [],
errData = [];
wcsc.stdout.on("data", (e) => {
spwanData.push(e);
});
wcsc.stderr.on("data", (e) => {
errData.push(e);
});
wcsc.on("close", (n) => {
if (0 === n) {
let str = Buffer.concat(spwanData).toString();
DEBUG_OUTPUT &&
fs.writeFileSync(`${DEBUG_OUTPUT}/linux_output.js`, str);
const resultSplit = str.split("=");
const tempObj = {};
for (
let i = 0, total = resultSplit.length;
i < total && resultSplit[i + 1];
i += 2
) {
// a=b ---> a: b
const key = resultSplit[i];
if (key === "version") continue;
tempObj[key] = resultSplit[i + 1].replace(
/[^\\]((\\x[\da-f]{2}|\\u[\da-f]{4})){1,}/g,
function ($0, $1, $2) {
return eval('"' + $0 + '"');
}
);
}
const resultObj = {
common: tempObj.comm,
pageWxss: {},
};
for (const key in tempObj) {
if (key.endsWith(".wxss")) {
resultObj.pageWxss[key] = tempObj[key];
}
}
let result = JSON.stringify(resultObj);
result = result.replace(/\\\\/g, "\\");
process.stdout.write(result);
} else {
const err = Buffer.concat(errData).toString();
DEBUG_OUTPUT &&
fs.writeFileSync(`${DEBUG_OUTPUT}/linux_err.js`, err);
process.stderr.write(err);
process.exitCode = n;
}
});
} else {
const wcsc = spawn(wcscPath, args, {
cwd: process.cwd(),
stdio: "inherit",
});
wcsc.on("close", (code) => {
process.exitCode = code;
});
}