UNPKG

@rnm/tscx

Version:

A tsc wrapper with many convenient options.

67 lines 9.71 kB
#!/usr/bin/env node import childProcess from "node:child_process"; import fs from "node:fs/promises"; import path from "node:path"; import process from "node:process"; import { fileURLToPath } from "node:url"; import { Command } from "commander"; import { tscPath } from "../common.js"; import { Main } from "../main.js"; new Command() .name("tscx") .description("The TypeScript Compiler. Run `tsc` under the hood.") .option("-p, --project <path>", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'.") .option("-w, --watch", "Watch input files.", false) .option("-r, --remove", "Remove output folder before every compilation.", false) .option("-c, --copyfiles", "Copy non-ts files to output folder after every compilation.", false) .option("-e, --exec <path>", "Execute or restart the specified js file after every successful compilation.") .option("-v, --version", "Print the compiler's version.") .option("-h, --help", "Display help for command.") .argument("[paths...]", "File paths to compile.") .allowUnknownOption() .action(async (args, options, cmd) => { if (options.version) { const version = JSON.parse(await fs.readFile(path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json"), "utf8")).version; const tscVersion = childProcess .execSync(`node ${tscPath} --version`, { encoding: "utf8" }) .trim(); console.log(`${version} (TypeScript ${tscVersion})`); return; } if (options.help) { cmd.outputHelp(); console.log(`\n${"=".repeat(process.stdout.columns)}\n`); childProcess.spawnSync("node", [tscPath, "--help"], { stdio: "inherit" }); return; } const { watch, ...otherOptions } = options; const main = new Main(otherOptions, [ ...(otherOptions.project ? ["--project", otherOptions.project] : []), ...args, ]); process.on("SIGINT", () => { main .stop() .then((code) => process.exit(code)) .catch((e) => { throw e; }); }); process.on("SIGTERM", () => { main .stop() .then((code) => process.exit(code)) .catch((e) => { throw e; }); }); if (watch) { main.watch(); } else { const code = await main.compile(); process.exit(code); } }) .parse(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNjeC5jbGkubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi90c2N4LmNsaS5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVsQyxJQUFJLE9BQU8sRUFBRTtLQUNWLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDWixXQUFXLENBQUMsb0RBQW9ELENBQUM7S0FDakUsTUFBTSxDQUNMLHNCQUFzQixFQUN0QixzR0FBc0csQ0FDdkc7S0FDQSxNQUFNLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLEtBQUssQ0FBQztLQUNsRCxNQUFNLENBQ0wsY0FBYyxFQUNkLGdEQUFnRCxFQUNoRCxLQUFLLENBQ047S0FDQSxNQUFNLENBQ0wsaUJBQWlCLEVBQ2pCLDZEQUE2RCxFQUM3RCxLQUFLLENBQ047S0FDQSxNQUFNLENBQ0wsbUJBQW1CLEVBQ25CLDhFQUE4RSxDQUMvRTtLQUNBLE1BQU0sQ0FBQyxlQUFlLEVBQUUsK0JBQStCLENBQUM7S0FDeEQsTUFBTSxDQUFDLFlBQVksRUFBRSwyQkFBMkIsQ0FBQztLQUNqRCxRQUFRLENBQUMsWUFBWSxFQUFFLHdCQUF3QixDQUFDO0tBQ2hELGtCQUFrQixFQUFFO0tBQ3BCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFZLEVBQUUsRUFBRTtJQUM1QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLE9BQU8sR0FBVyxJQUFJLENBQUMsS0FBSyxDQUNoQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FDVixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzVDLElBQUksRUFDSixJQUFJLEVBQ0osY0FBYyxDQUNmLEVBQ0QsTUFBTSxDQUNQLENBQ0YsQ0FBQyxPQUFPLENBQUM7UUFDVixNQUFNLFVBQVUsR0FBRyxZQUFZO2FBQzVCLFFBQVEsQ0FBQyxRQUFRLE9BQU8sWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzNELElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sZ0JBQWdCLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDckQsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMxRSxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2xDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxHQUFHLElBQUk7S0FDUixDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDeEIsSUFBSTthQUNELElBQUksRUFBRTthQUNOLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsQyxLQUFLLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDekIsSUFBSTthQUNELElBQUksRUFBRTthQUNOLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsQyxLQUFLLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDLENBQUM7S0FDRCxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCBjaGlsZFByb2Nlc3MgZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgdHNjUGF0aCB9IGZyb20gXCIuLi9jb21tb24udHNcIjtcbmltcG9ydCB7IE1haW4gfSBmcm9tIFwiLi4vbWFpbi50c1wiO1xuXG5uZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwidHNjeFwiKVxuICAuZGVzY3JpcHRpb24oXCJUaGUgVHlwZVNjcmlwdCBDb21waWxlci4gUnVuIGB0c2NgIHVuZGVyIHRoZSBob29kLlwiKVxuICAub3B0aW9uKFxuICAgIFwiLXAsIC0tcHJvamVjdCA8cGF0aD5cIixcbiAgICBcIkNvbXBpbGUgdGhlIHByb2plY3QgZ2l2ZW4gdGhlIHBhdGggdG8gaXRzIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgdG8gYSBmb2xkZXIgd2l0aCBhICd0c2NvbmZpZy5qc29uJy5cIixcbiAgKVxuICAub3B0aW9uKFwiLXcsIC0td2F0Y2hcIiwgXCJXYXRjaCBpbnB1dCBmaWxlcy5cIiwgZmFsc2UpXG4gIC5vcHRpb24oXG4gICAgXCItciwgLS1yZW1vdmVcIixcbiAgICBcIlJlbW92ZSBvdXRwdXQgZm9sZGVyIGJlZm9yZSBldmVyeSBjb21waWxhdGlvbi5cIixcbiAgICBmYWxzZSxcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLWMsIC0tY29weWZpbGVzXCIsXG4gICAgXCJDb3B5IG5vbi10cyBmaWxlcyB0byBvdXRwdXQgZm9sZGVyIGFmdGVyIGV2ZXJ5IGNvbXBpbGF0aW9uLlwiLFxuICAgIGZhbHNlLFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItZSwgLS1leGVjIDxwYXRoPlwiLFxuICAgIFwiRXhlY3V0ZSBvciByZXN0YXJ0IHRoZSBzcGVjaWZpZWQganMgZmlsZSBhZnRlciBldmVyeSBzdWNjZXNzZnVsIGNvbXBpbGF0aW9uLlwiLFxuICApXG4gIC5vcHRpb24oXCItdiwgLS12ZXJzaW9uXCIsIFwiUHJpbnQgdGhlIGNvbXBpbGVyJ3MgdmVyc2lvbi5cIilcbiAgLm9wdGlvbihcIi1oLCAtLWhlbHBcIiwgXCJEaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQuXCIpXG4gIC5hcmd1bWVudChcIltwYXRocy4uLl1cIiwgXCJGaWxlIHBhdGhzIHRvIGNvbXBpbGUuXCIpXG4gIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAuYWN0aW9uKGFzeW5jIChhcmdzLCBvcHRpb25zLCBjbWQ6IENvbW1hbmQpID0+IHtcbiAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uOiBzdHJpbmcgPSBKU09OLnBhcnNlKFxuICAgICAgICBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICAgICAgICBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgICBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKSxcbiAgICAgICAgICAgIFwiLi5cIixcbiAgICAgICAgICAgIFwiLi5cIixcbiAgICAgICAgICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBcInV0ZjhcIixcbiAgICAgICAgKSxcbiAgICAgICkudmVyc2lvbjtcbiAgICAgIGNvbnN0IHRzY1ZlcnNpb24gPSBjaGlsZFByb2Nlc3NcbiAgICAgICAgLmV4ZWNTeW5jKGBub2RlICR7dHNjUGF0aH0gLS12ZXJzaW9uYCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgLnRyaW0oKTtcbiAgICAgIGNvbnNvbGUubG9nKGAke3ZlcnNpb259IChUeXBlU2NyaXB0ICR7dHNjVmVyc2lvbn0pYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmhlbHApIHtcbiAgICAgIGNtZC5vdXRwdXRIZWxwKCk7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuJHtcIj1cIi5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyl9XFxuYCk7XG4gICAgICBjaGlsZFByb2Nlc3Muc3Bhd25TeW5jKFwibm9kZVwiLCBbdHNjUGF0aCwgXCItLWhlbHBcIl0sIHsgc3RkaW86IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHdhdGNoLCAuLi5vdGhlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbWFpbiA9IG5ldyBNYWluKG90aGVyT3B0aW9ucywgW1xuICAgICAgLi4uKG90aGVyT3B0aW9ucy5wcm9qZWN0ID8gW1wiLS1wcm9qZWN0XCIsIG90aGVyT3B0aW9ucy5wcm9qZWN0XSA6IFtdKSxcbiAgICAgIC4uLmFyZ3MsXG4gICAgXSk7XG4gICAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgICBtYWluXG4gICAgICAgIC5zdG9wKClcbiAgICAgICAgLnRoZW4oKGNvZGUpID0+IHByb2Nlc3MuZXhpdChjb2RlKSlcbiAgICAgICAgLmNhdGNoKChlOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgKCkgPT4ge1xuICAgICAgbWFpblxuICAgICAgICAuc3RvcCgpXG4gICAgICAgIC50aGVuKChjb2RlKSA9PiBwcm9jZXNzLmV4aXQoY29kZSkpXG4gICAgICAgIC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmICh3YXRjaCkge1xuICAgICAgbWFpbi53YXRjaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb2RlID0gYXdhaXQgbWFpbi5jb21waWxlKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgfVxuICB9KVxuICAucGFyc2UoKTtcbiJdfQ==