mirror of
https://github.com/fooflington/selfdefined.git
synced 2025-04-23 01:29:08 +00:00
83 lines
1.7 KiB
JavaScript
83 lines
1.7 KiB
JavaScript
const EleventyBaseError = require("./EleventyBaseError");
|
||
const debug = require("debug")("Eleventy:CommandCheck");
|
||
|
||
class EleventyCommandCheckError extends EleventyBaseError {}
|
||
|
||
class EleventyCommandCheck {
|
||
constructor(argv) {
|
||
this.valueArgs = [
|
||
"input",
|
||
"output",
|
||
"formats",
|
||
"config",
|
||
"pathprefix",
|
||
"port"
|
||
];
|
||
|
||
this.booleanArgs = [
|
||
"quiet",
|
||
"version",
|
||
"watch",
|
||
"dryrun",
|
||
"help",
|
||
"serve",
|
||
"passthroughall"
|
||
];
|
||
|
||
this.args = argv;
|
||
this.argsMap = this.getArgumentLookupMap();
|
||
|
||
debug("command: eleventy ", this.toString());
|
||
}
|
||
|
||
toString() {
|
||
let cmd = [];
|
||
|
||
for (let valueArgName of this.valueArgs) {
|
||
if (this.args[valueArgName]) {
|
||
cmd.push(`--${valueArgName}=${this.args[valueArgName]}`);
|
||
}
|
||
}
|
||
|
||
for (let booleanArgName of this.booleanArgs) {
|
||
if (this.args[booleanArgName]) {
|
||
cmd.push(`--${booleanArgName}`);
|
||
}
|
||
}
|
||
|
||
return cmd.join(" ");
|
||
}
|
||
|
||
getArgumentLookupMap() {
|
||
let obj = {};
|
||
for (let valueArgName of this.valueArgs) {
|
||
obj[valueArgName] = true;
|
||
}
|
||
for (let booleanArgName of this.booleanArgs) {
|
||
obj[booleanArgName] = true;
|
||
}
|
||
return obj;
|
||
}
|
||
|
||
isKnownArgument(name) {
|
||
// _ is the default keyless parameter
|
||
if (name === "_") {
|
||
return true;
|
||
}
|
||
|
||
return !!this.argsMap[name];
|
||
}
|
||
|
||
hasUnknownArguments() {
|
||
for (let argName in this.args) {
|
||
if (!this.isKnownArgument(argName)) {
|
||
throw new EleventyCommandCheckError(
|
||
`We don’t know what '${argName}' is. Use --help to see the list of supported commands.`
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = EleventyCommandCheck;
|