@rnm/tscx
Version:
A tsc wrapper with many convenient features.
39 lines • 7.63 kB
JavaScript
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 minimist from "minimist";
import { Action } from "../action.js";
const version = JSON.parse(await fs.readFile(path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json"), "utf8")).version;
new Command()
.name("tscx")
.version(version)
.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'.", "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("-s, --script <scr>", "Run 'npm run <scr>' after every successful compilation. This will run before --exec option.")
.option("-e, --exec <path>", "Execute or restart the specified js file after every successful compilation.")
.option("-h, --help", "Display help for command.")
.allowUnknownOption()
.action(async (options, cmd) => {
if (options.help) {
cmd.outputHelp();
console.log(`\n${"=".repeat(process.stdout.columns)}\n`);
// TODO: using npx seems not good
childProcess.spawnSync("npx", ["tsc", "--help"], { stdio: "inherit" });
return;
}
const isDir = async (p) => (await fs.stat(path.resolve(process.cwd(), p))).isDirectory();
if (options.project && (await isDir(options.project))) {
options.project = path.join(options.project, "tsconfig.json");
}
const { _, ...extraOptions } = minimist(cmd.args);
new Action({ ...options, ...extraOptions }).start();
})
.parse();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNjeC5jbGkubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi90c2N4LmNsaS5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLE1BQU0sT0FBTyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQ2hDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FDZixJQUFJLENBQUMsT0FBTyxDQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDNUMsSUFBSSxFQUNKLElBQUksRUFDSixjQUFjLENBQ2YsRUFDRCxNQUFNLENBQ1AsQ0FDRixDQUFDLE9BQU8sQ0FBQztBQUVWLElBQUksT0FBTyxFQUFFO0tBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNaLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDaEIsV0FBVyxDQUFDLG9EQUFvRCxDQUFDO0tBQ2pFLE1BQU0sQ0FDTCxzQkFBc0IsRUFDdEIsc0dBQXNHLEVBQ3RHLGVBQWUsQ0FDaEI7S0FDQSxNQUFNLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLEtBQUssQ0FBQztLQUNsRCxNQUFNLENBQ0wsY0FBYyxFQUNkLGdEQUFnRCxFQUNoRCxLQUFLLENBQ047S0FDQSxNQUFNLENBQ0wsaUJBQWlCLEVBQ2pCLDZEQUE2RCxFQUM3RCxLQUFLLENBQ047S0FDQSxNQUFNLENBQ0wsb0JBQW9CLEVBQ3BCLDZGQUE2RixDQUM5RjtLQUNBLE1BQU0sQ0FDTCxtQkFBbUIsRUFDbkIsOEVBQThFLENBQy9FO0tBQ0EsTUFBTSxDQUFDLFlBQVksRUFBRSwyQkFBMkIsQ0FBQztLQUNqRCxrQkFBa0IsRUFBRTtLQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtJQUM3QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsaUNBQWlDO1FBQ2pDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FDaEMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hFLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xELElBQUksTUFBTSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RELENBQUMsQ0FBQztLQUNELEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IGNoaWxkUHJvY2VzcyBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgbWluaW1pc3QgZnJvbSBcIm1pbmltaXN0XCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vYWN0aW9uLnRzXCI7XG5cbmNvbnN0IHZlcnNpb246IHN0cmluZyA9IEpTT04ucGFyc2UoXG4gIGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgIHBhdGgucmVzb2x2ZShcbiAgICAgIHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLFxuICAgICAgXCIuLlwiLFxuICAgICAgXCIuLlwiLFxuICAgICAgXCJwYWNrYWdlLmpzb25cIixcbiAgICApLFxuICAgIFwidXRmOFwiLFxuICApLFxuKS52ZXJzaW9uO1xuXG5uZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwidHNjeFwiKVxuICAudmVyc2lvbih2ZXJzaW9uKVxuICAuZGVzY3JpcHRpb24oXCJUaGUgVHlwZVNjcmlwdCBDb21waWxlci4gUnVuIGB0c2NgIHVuZGVyIHRoZSBob29kLlwiKVxuICAub3B0aW9uKFxuICAgIFwiLXAsIC0tcHJvamVjdCA8cGF0aD5cIixcbiAgICBcIkNvbXBpbGUgdGhlIHByb2plY3QgZ2l2ZW4gdGhlIHBhdGggdG8gaXRzIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgdG8gYSBmb2xkZXIgd2l0aCBhICd0c2NvbmZpZy5qc29uJy5cIixcbiAgICBcInRzY29uZmlnLmpzb25cIixcbiAgKVxuICAub3B0aW9uKFwiLXcsIC0td2F0Y2hcIiwgXCJXYXRjaCBpbnB1dCBmaWxlcy5cIiwgZmFsc2UpXG4gIC5vcHRpb24oXG4gICAgXCItciwgLS1yZW1vdmVcIixcbiAgICBcIlJlbW92ZSBvdXRwdXQgZm9sZGVyIGJlZm9yZSBldmVyeSBjb21waWxhdGlvbi5cIixcbiAgICBmYWxzZSxcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLWMsIC0tY29weWZpbGVzXCIsXG4gICAgXCJDb3B5IG5vbi10cyBmaWxlcyB0byBvdXRwdXQgZm9sZGVyIGFmdGVyIGV2ZXJ5IGNvbXBpbGF0aW9uLlwiLFxuICAgIGZhbHNlLFxuICApXG4gIC5vcHRpb24oXG4gICAgXCItcywgLS1zY3JpcHQgPHNjcj5cIixcbiAgICBcIlJ1biAnbnBtIHJ1biA8c2NyPicgYWZ0ZXIgZXZlcnkgc3VjY2Vzc2Z1bCBjb21waWxhdGlvbi4gVGhpcyB3aWxsIHJ1biBiZWZvcmUgLS1leGVjIG9wdGlvbi5cIixcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLWUsIC0tZXhlYyA8cGF0aD5cIixcbiAgICBcIkV4ZWN1dGUgb3IgcmVzdGFydCB0aGUgc3BlY2lmaWVkIGpzIGZpbGUgYWZ0ZXIgZXZlcnkgc3VjY2Vzc2Z1bCBjb21waWxhdGlvbi5cIixcbiAgKVxuICAub3B0aW9uKFwiLWgsIC0taGVscFwiLCBcIkRpc3BsYXkgaGVscCBmb3IgY29tbWFuZC5cIilcbiAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMsIGNtZCkgPT4ge1xuICAgIGlmIChvcHRpb25zLmhlbHApIHtcbiAgICAgIGNtZC5vdXRwdXRIZWxwKCk7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuJHtcIj1cIi5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyl9XFxuYCk7XG4gICAgICAvLyBUT0RPOiB1c2luZyBucHggc2VlbXMgbm90IGdvb2RcbiAgICAgIGNoaWxkUHJvY2Vzcy5zcGF3blN5bmMoXCJucHhcIiwgW1widHNjXCIsIFwiLS1oZWxwXCJdLCB7IHN0ZGlvOiBcImluaGVyaXRcIiB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNEaXIgPSBhc3luYyAocDogc3RyaW5nKSA9PlxuICAgICAgKGF3YWl0IGZzLnN0YXQocGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHApKSkuaXNEaXJlY3RvcnkoKTtcbiAgICBpZiAob3B0aW9ucy5wcm9qZWN0ICYmIChhd2FpdCBpc0RpcihvcHRpb25zLnByb2plY3QpKSkge1xuICAgICAgb3B0aW9ucy5wcm9qZWN0ID0gcGF0aC5qb2luKG9wdGlvbnMucHJvamVjdCwgXCJ0c2NvbmZpZy5qc29uXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IF8sIC4uLmV4dHJhT3B0aW9ucyB9ID0gbWluaW1pc3QoY21kLmFyZ3MpO1xuICAgIG5ldyBBY3Rpb24oeyAuLi5vcHRpb25zLCAuLi5leHRyYU9wdGlvbnMgfSkuc3RhcnQoKTtcbiAgfSlcbiAgLnBhcnNlKCk7XG4iXX0=