80 lines
2.1 KiB
JavaScript
80 lines
2.1 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import yargs from "yargs";
|
|
import { hideBin } from "yargs/helpers";
|
|
import startCompile, { Target, Targets } from "./process";
|
|
|
|
const pkg = require("../package.json");
|
|
|
|
import dbg from "debug";
|
|
const log = dbg("app");
|
|
|
|
dbg.disable();
|
|
|
|
yargs(hideBin(process.argv))
|
|
.version(pkg.version)
|
|
.command(
|
|
"compile <input>",
|
|
"Compile source",
|
|
(yargs) => {
|
|
return yargs
|
|
.positional("input", {
|
|
describe: "Input file",
|
|
type: "string",
|
|
demandOption: true,
|
|
})
|
|
.option("definition", {
|
|
type: "string",
|
|
describe: "Emit definition json at specified location",
|
|
})
|
|
.option("output", {
|
|
type: "string",
|
|
describe: "Output lang and location 'ts:out/' 'c:/test'",
|
|
alias: "o",
|
|
coerce: (arg: string | string[] | undefined) => {
|
|
if (!arg) return [];
|
|
if (!Array.isArray(arg)) arg = [arg];
|
|
return arg.map((input) => {
|
|
const [type, output] = input.split(":", 2);
|
|
return {
|
|
type,
|
|
output,
|
|
} as Target;
|
|
});
|
|
},
|
|
array: true,
|
|
});
|
|
},
|
|
(argv) => {
|
|
if (argv.verbose) {
|
|
dbg.enable("app");
|
|
}
|
|
log("Received compile command with args", argv);
|
|
|
|
startCompile({
|
|
input: argv.input,
|
|
targets: argv.output as any,
|
|
emitDefinitions: argv.definition,
|
|
});
|
|
}
|
|
)
|
|
.command(
|
|
"targets",
|
|
"List all targets",
|
|
(yargs) => yargs,
|
|
() => {
|
|
console.log("Targets:");
|
|
Targets.forEach((__dirname, target) => {
|
|
console.log(" " + target);
|
|
});
|
|
}
|
|
)
|
|
.option("verbose", {
|
|
alias: "v",
|
|
type: "boolean",
|
|
describe: "Adds additional outputs",
|
|
})
|
|
.strictCommands()
|
|
.demandCommand()
|
|
.parse();
|