commandzen
Version:
A command-line argument parsing library that allows for quick and easy parsing of command-line arguments.
84 lines (83 loc) • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CliBuilder = void 0;
const command_1 = require("./command");
const Option_1 = require("./option/Option");
class CliBuilder {
defaultCommand;
constructor({ name, description }) {
this.defaultCommand = command_1.Command.create({ name, description });
this.addHelpToDefaultCommand();
}
static create(props) {
return new CliBuilder(props);
}
addCommand(command) {
command.addOption({
flag: "-h, --help",
description: "Display help information for this command.",
});
this.defaultCommand.addSubcommand(command);
return this;
}
addOption(props) {
this.defaultCommand.addOption(props);
return this;
}
addGlobalOption(props) {
const addOptionToCommand = (command) => {
command.addOption(props);
command.subcommands.forEach((subcommand) => {
addOptionToCommand(subcommand);
});
};
addOptionToCommand(this.defaultCommand);
return this;
}
setDefaultCommand(command) {
this.defaultCommand = command;
this.addHelpToDefaultCommand();
return this;
}
parse(argv = process.argv.slice(2)) {
const command = command_1.CommandParser.parse(this.defaultCommand, argv);
command_1.CommandRunner.run(command.command, command.options);
}
addHelpToDefaultCommand() {
this.addHelpOptionToCommand(this.defaultCommand);
const helpCommand = this.createCommandHelp();
this.defaultCommand.addSubcommand(helpCommand);
}
addHelpOptionToCommand(command) {
command.addOption({
flag: "-h, --help",
description: "Display help information",
});
}
createCommandHelp() {
return command_1.Command.create({
name: "help",
description: "Display help information",
options: [
Option_1.Option.create({
flag: "-c, --command <command>",
description: "Display help information for a specific command",
}),
],
}).registerAction(({ command }) => {
if (command) {
const subcommand = this.defaultCommand.findSubcommand(command);
if (subcommand) {
subcommand.help();
}
else {
console.warn(`Command '${command}' not found.`);
}
}
else {
this.defaultCommand.help();
}
});
}
}
exports.CliBuilder = CliBuilder;