hereby
Version:
A simple task runner
68 lines (61 loc) • 2.32 kB
JavaScript
import * as style from "./style.js";
import { UserError } from "./utils.js";
export function parseArgs(argv) {
const run = [];
let help = false, version = false, collect = true, tasks = false, tasksSimple = false;
let herebyfile;
for (let i = 0; i < argv.length; i++) {
const arg = argv[i];
if (arg === "--")
break;
if (!arg.startsWith("-") || arg === "-") {
if (collect)
run.push(arg);
continue;
}
const eq = arg.indexOf("=");
const name = (eq === -1 ? arg : arg.slice(0, eq)).replace(/^--?/, "");
const peek = eq !== -1 ? arg.slice(eq + 1) : argv[i + 1];
const consume = (pred) => eq !== -1 || (pred(peek) && ++i) ? peek : undefined;
const bool = () => consume((s) => s === "true" || s === "false") !== "false";
const str = () => {
const v = consume((s) => s !== undefined && !s.startsWith("-"));
if (!v)
throw new UserError(`Option --${name} requires a value.`);
return v;
};
if (name === "h" || name === "help")
help = bool();
else if (name === "T" || name === "tasks")
tasks = bool();
else if (name === "tasks-simple")
tasksSimple = bool();
else if (name === "version")
version = bool();
else if (name === "herebyfile")
herebyfile = str();
else
collect = false;
}
return { help, run, herebyfile, printTasks: tasks ? "normal" : tasksSimple ? "simple" : undefined, version };
}
export function getUsage() {
const header = (text) => style.bold(style.underline(text));
return `
${header("hereby")}
A simple task runner.
${header("Synopsis")}
$ hereby <task>
${header("Options")}
${style.bold("-h, --help")} Display this usage guide.
${style.bold("--herebyfile")} ${style.underline("path")} A path to a Herebyfile. Optional.
${style.bold("-T, --tasks")} Print a listing of the available tasks.
${style.bold("--version")} Print the current hereby version.
${header("Example usage")}
$ hereby build
$ hereby build lint
$ hereby test --skip someTest --lint=false
$ hereby --tasks
`;
}
//# sourceMappingURL=parseArgs.js.map