#!/usr/bin/env node // wcsc.exe md5 = "3999c590c57c764b152bc6db3b3288c4" const version = "20220308"; const { spawn } = require("child_process"); const path = require("path"); const args = process.argv.slice(2); const wcscPath = path.resolve(__dirname, "./wcsc.bin"); 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) { const str = Buffer.concat(spwanData) .toString() .replace(/\\\\/g, "\\\\u005c"); const resultSplit = encode1(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,}/gi, 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); String.prototype.splice = function (start, newStr) { return this.slice(0, start) + newStr + this.slice(start + 1); }; result = result.replace(/\\\\/g, "\\"); result = result.replace(/\\[\s\S]{1}/gi, function ($0, $1, $2) { const c = $0 === "\\n" ? "\n" : $0[1]; return "\\u" + c.charCodeAt(0).toString(16).padStart(4, "0"); }); process.stdout.write(result); } else { process.stderr.write(Buffer.concat(errData).toString()); process.exitCode = n; } }); } else { const wcsc = spawn(wcscPath, args, { cwd: process.cwd(), stdio: "inherit", }); wcsc.on("close", (code) => { process.exitCode = code; }); }