webcrack
Version:
Deobfuscate, unminify and unpack bundled javascript
43 lines (42 loc) • 1.85 kB
JavaScript
import { program } from "commander";
import debug from "debug";
import { existsSync, readFileSync } from "node:fs";
import { readFile, rm } from "node:fs/promises";
import { join } from "node:path";
import * as url from "node:url";
import { webcrack } from "./index.js";
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
const { version, description } = JSON.parse(
readFileSync(join(__dirname, "..", "package.json"), "utf8")
);
debug.enable("webcrack:*");
async function readStdin() {
let data = "";
process.stdin.setEncoding("utf8");
for await (const chunk of process.stdin) data += chunk;
return data;
}
program.version(version).description(description).option("-o, --output <path>", "output directory for bundled files").option("-f, --force", "overwrite output directory").option("-m, --mangle", "mangle variable names").option("--no-jsx", "do not decompile JSX").option("--no-unpack", "do not extract modules from the bundle").option("--no-deobfuscate", "do not deobfuscate the code").option("--no-unminify", "do not unminify the code").argument("[file]", "input file, defaults to stdin").action(async (input) => {
const { output, force, ...options } = program.opts();
const code = await (input ? readFile(input, "utf8") : readStdin());
if (output) {
if (force || !existsSync(output)) {
await rm(output, { recursive: true, force: true });
} else {
program.error("output directory already exists");
}
}
const result = await webcrack(code, options);
if (output) {
await result.save(output);
} else {
console.log(result.code);
if (result.bundle) {
debug("webcrack:unpack")(
"Modules are not displayed in the terminal. Use the --output option to save them to a directory."
);
}
}
}).parse();
//# sourceMappingURL=cli.js.map