@selfage/cli
Version:
Basic CLI to buid, run and format TypeScript code.
62 lines • 9.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const path = require("path");
const cleaner_1 = require("./build/cleaner");
const compiler_1 = require("./build/compiler");
const formatter_1 = require("./formatter");
const forever_runner_1 = require("./run/forever_runner");
const runner_1 = require("./run/runner");
const commander_1 = require("commander");
require("source-map-support/register");
let FIXED_FILE_EXT = ` can be neglected and is always fixed as `;
let TSCONFIG_FILE_OPTION = [
"-c, --tsconfig-file <file>",
`The file path to tsconfig.json. If not provided, it will try to look for ` +
`it at the current working directory.`,
];
async function main() {
let packageConfig = JSON.parse((await fs.promises.readFile(path.join(__dirname, "package.json"))).toString());
let program = new commander_1.Command();
program.version(packageConfig.version);
program
.command("compile <file>")
.alias("cpl")
.description(`Compile a single TypeScript source file while respecting ` +
`compilerOptions in tsconfig.json. Its file ext` +
FIXED_FILE_EXT +
`.ts.`)
.option(TSCONFIG_FILE_OPTION[0], TSCONFIG_FILE_OPTION[1])
.option("-s, --extra-files <files...>", `Extra files to be compiled together with and before the source file.`)
.action((file, options) => (0, compiler_1.compile)(file, options.tsconfigFile, options.extraFiles));
program
.command("clean")
.description("Clean all ignored files by .gitignore, except node_modules/.")
.action(() => (0, cleaner_1.clean)());
program
.command("run <file> [pass-through-args...]")
.description(`Compile and run the specified file under Node environment. Its file ` +
`ext` +
FIXED_FILE_EXT +
`.ts. "--" is needed in between <file> and pass through arguments.`)
.option(TSCONFIG_FILE_OPTION[0], TSCONFIG_FILE_OPTION[1])
.action((file, passThroughArgs, options) => (0, runner_1.run)(file, options.tsconfigFile, passThroughArgs));
program
.command("runForever <file> [pass-through-args...]")
.alias("frun")
.description(`Run the already compiled file under Node environment while auto ` +
`restart when it crashes/ends. Its file ext` +
FIXED_FILE_EXT +
`.js. "--" is needed in between <file> and pass through arguments.`)
.action((file, passThroughArgs) => (0, forever_runner_1.runForever)(file, passThroughArgs));
program
.command("format <file>")
.alias("fmt")
.description(`Format the specified file. Its file ext` + FIXED_FILE_EXT + ".ts.")
.option("--dry-run", "Print the formatted content instead of overwriting the file.")
.action((file, options) => (0, formatter_1.format)(file, options.dryRun));
await program.parseAsync();
}
main();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUJBQTBCO0FBQzFCLDZCQUE4QjtBQUM5Qiw2Q0FBd0M7QUFDeEMsK0NBQTJDO0FBQzNDLDJDQUFxQztBQUNyQyx5REFBa0Q7QUFDbEQseUNBQW1DO0FBQ25DLHlDQUFvQztBQUNwQyx1Q0FBcUM7QUFFckMsSUFBSSxjQUFjLEdBQUcsMkNBQTJDLENBQUM7QUFDakUsSUFBSSxvQkFBb0IsR0FBRztJQUN6Qiw0QkFBNEI7SUFDNUIsMkVBQTJFO1FBQ3pFLHNDQUFzQztDQUN6QyxDQUFDO0FBRUYsS0FBSyxVQUFVLElBQUk7SUFDakIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDNUIsQ0FDRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQ2pFLENBQUMsUUFBUSxFQUFFLENBQ2IsQ0FBQztJQUNGLElBQUksT0FBTyxHQUFHLElBQUksbUJBQU8sRUFBRSxDQUFDO0lBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE9BQU87U0FDSixPQUFPLENBQUMsZ0JBQWdCLENBQUM7U0FDekIsS0FBSyxDQUFDLEtBQUssQ0FBQztTQUNaLFdBQVcsQ0FDViwyREFBMkQ7UUFDekQsZ0RBQWdEO1FBQ2hELGNBQWM7UUFDZCxNQUFNLENBQ1Q7U0FDQSxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEQsTUFBTSxDQUNMLDhCQUE4QixFQUM5QixzRUFBc0UsQ0FDdkU7U0FDQSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FDeEIsSUFBQSxrQkFBTyxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FDeEQsQ0FBQztJQUNKLE9BQU87U0FDSixPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ2hCLFdBQVcsQ0FBQyw4REFBOEQsQ0FBQztTQUMzRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxlQUFLLEdBQUUsQ0FBQyxDQUFDO0lBQ3pCLE9BQU87U0FDSixPQUFPLENBQUMsbUNBQW1DLENBQUM7U0FDNUMsV0FBVyxDQUNWLHNFQUFzRTtRQUNwRSxLQUFLO1FBQ0wsY0FBYztRQUNkLG1FQUFtRSxDQUN0RTtTQUNBLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQ3pDLElBQUEsWUFBRyxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUNqRCxDQUFDO0lBQ0osT0FBTztTQUNKLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQztTQUNuRCxLQUFLLENBQUMsTUFBTSxDQUFDO1NBQ2IsV0FBVyxDQUNWLGtFQUFrRTtRQUNoRSw0Q0FBNEM7UUFDNUMsY0FBYztRQUNkLG1FQUFtRSxDQUN0RTtTQUNBLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLElBQUEsMkJBQVUsRUFBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUN4RSxPQUFPO1NBQ0osT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUN4QixLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ1osV0FBVyxDQUNWLHlDQUF5QyxHQUFHLGNBQWMsR0FBRyxNQUFNLENBQ3BFO1NBQ0EsTUFBTSxDQUNMLFdBQVcsRUFDWCw4REFBOEQsQ0FDL0Q7U0FDQSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGtCQUFNLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzdCLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmltcG9ydCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5pbXBvcnQgeyBjbGVhbiB9IGZyb20gXCIuL2J1aWxkL2NsZWFuZXJcIjtcbmltcG9ydCB7IGNvbXBpbGUgfSBmcm9tIFwiLi9idWlsZC9jb21waWxlclwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcIi4vZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBydW5Gb3JldmVyIH0gZnJvbSBcIi4vcnVuL2ZvcmV2ZXJfcnVubmVyXCI7XG5pbXBvcnQgeyBydW4gfSBmcm9tIFwiLi9ydW4vcnVubmVyXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IFwic291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyXCI7XG5cbmxldCBGSVhFRF9GSUxFX0VYVCA9IGAgY2FuIGJlIG5lZ2xlY3RlZCBhbmQgaXMgYWx3YXlzIGZpeGVkIGFzIGA7XG5sZXQgVFNDT05GSUdfRklMRV9PUFRJT04gPSBbXG4gIFwiLWMsIC0tdHNjb25maWctZmlsZSA8ZmlsZT5cIixcbiAgYFRoZSBmaWxlIHBhdGggdG8gdHNjb25maWcuanNvbi4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIHRyeSB0byBsb29rIGZvciBgICtcbiAgICBgaXQgYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuYCxcbl07XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBwYWNrYWdlQ29uZmlnID0gSlNPTi5wYXJzZShcbiAgICAoXG4gICAgICBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhY2thZ2UuanNvblwiKSlcbiAgICApLnRvU3RyaW5nKClcbiAgKTtcbiAgbGV0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuICBwcm9ncmFtLnZlcnNpb24ocGFja2FnZUNvbmZpZy52ZXJzaW9uKTtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiY29tcGlsZSA8ZmlsZT5cIilcbiAgICAuYWxpYXMoXCJjcGxcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBgQ29tcGlsZSBhIHNpbmdsZSBUeXBlU2NyaXB0IHNvdXJjZSBmaWxlIHdoaWxlIHJlc3BlY3RpbmcgYCArXG4gICAgICAgIGBjb21waWxlck9wdGlvbnMgaW4gdHNjb25maWcuanNvbi4gSXRzIGZpbGUgZXh0YCArXG4gICAgICAgIEZJWEVEX0ZJTEVfRVhUICtcbiAgICAgICAgYC50cy5gXG4gICAgKVxuICAgIC5vcHRpb24oVFNDT05GSUdfRklMRV9PUFRJT05bMF0sIFRTQ09ORklHX0ZJTEVfT1BUSU9OWzFdKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi1zLCAtLWV4dHJhLWZpbGVzIDxmaWxlcy4uLj5cIixcbiAgICAgIGBFeHRyYSBmaWxlcyB0byBiZSBjb21waWxlZCB0b2dldGhlciB3aXRoIGFuZCBiZWZvcmUgdGhlIHNvdXJjZSBmaWxlLmBcbiAgICApXG4gICAgLmFjdGlvbigoZmlsZSwgb3B0aW9ucykgPT5cbiAgICAgIGNvbXBpbGUoZmlsZSwgb3B0aW9ucy50c2NvbmZpZ0ZpbGUsIG9wdGlvbnMuZXh0cmFGaWxlcylcbiAgICApO1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJjbGVhblwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkNsZWFuIGFsbCBpZ25vcmVkIGZpbGVzIGJ5IC5naXRpZ25vcmUsIGV4Y2VwdCBub2RlX21vZHVsZXMvLlwiKVxuICAgIC5hY3Rpb24oKCkgPT4gY2xlYW4oKSk7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJ1biA8ZmlsZT4gW3Bhc3MtdGhyb3VnaC1hcmdzLi4uXVwiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIGBDb21waWxlIGFuZCBydW4gdGhlIHNwZWNpZmllZCBmaWxlIHVuZGVyIE5vZGUgZW52aXJvbm1lbnQuIEl0cyBmaWxlIGAgK1xuICAgICAgICBgZXh0YCArXG4gICAgICAgIEZJWEVEX0ZJTEVfRVhUICtcbiAgICAgICAgYC50cy4gXCItLVwiIGlzIG5lZWRlZCBpbiBiZXR3ZWVuIDxmaWxlPiBhbmQgcGFzcyB0aHJvdWdoIGFyZ3VtZW50cy5gXG4gICAgKVxuICAgIC5vcHRpb24oVFNDT05GSUdfRklMRV9PUFRJT05bMF0sIFRTQ09ORklHX0ZJTEVfT1BUSU9OWzFdKVxuICAgIC5hY3Rpb24oKGZpbGUsIHBhc3NUaHJvdWdoQXJncywgb3B0aW9ucykgPT5cbiAgICAgIHJ1bihmaWxlLCBvcHRpb25zLnRzY29uZmlnRmlsZSwgcGFzc1Rocm91Z2hBcmdzKVxuICAgICk7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJ1bkZvcmV2ZXIgPGZpbGU+IFtwYXNzLXRocm91Z2gtYXJncy4uLl1cIilcbiAgICAuYWxpYXMoXCJmcnVuXCIpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgYFJ1biB0aGUgYWxyZWFkeSBjb21waWxlZCBmaWxlIHVuZGVyIE5vZGUgZW52aXJvbm1lbnQgd2hpbGUgYXV0byBgICtcbiAgICAgICAgYHJlc3RhcnQgd2hlbiBpdCBjcmFzaGVzL2VuZHMuIEl0cyBmaWxlIGV4dGAgK1xuICAgICAgICBGSVhFRF9GSUxFX0VYVCArXG4gICAgICAgIGAuanMuIFwiLS1cIiBpcyBuZWVkZWQgaW4gYmV0d2VlbiA8ZmlsZT4gYW5kIHBhc3MgdGhyb3VnaCBhcmd1bWVudHMuYFxuICAgIClcbiAgICAuYWN0aW9uKChmaWxlLCBwYXNzVGhyb3VnaEFyZ3MpID0+IHJ1bkZvcmV2ZXIoZmlsZSwgcGFzc1Rocm91Z2hBcmdzKSk7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImZvcm1hdCA8ZmlsZT5cIilcbiAgICAuYWxpYXMoXCJmbXRcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBgRm9ybWF0IHRoZSBzcGVjaWZpZWQgZmlsZS4gSXRzIGZpbGUgZXh0YCArIEZJWEVEX0ZJTEVfRVhUICsgXCIudHMuXCJcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1kcnktcnVuXCIsXG4gICAgICBcIlByaW50IHRoZSBmb3JtYXR0ZWQgY29udGVudCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZSBmaWxlLlwiXG4gICAgKVxuICAgIC5hY3Rpb24oKGZpbGUsIG9wdGlvbnMpID0+IGZvcm1hdChmaWxlLCBvcHRpb25zLmRyeVJ1bikpO1xuICBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMoKTtcbn1cblxubWFpbigpO1xuIl19