UNPKG

@rnm/tscx

Version:

A tsc wrapper with many convenient features.

39 lines 7.63 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 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=