UNPKG

commandzen

Version:

A command-line argument parsing library that allows for quick and easy parsing of command-line arguments.

80 lines (79 loc) 2.58 kB
import { Command, CommandParser, CommandRunner } from "./command"; import { Option } from "./option/Option"; export class CliBuilder { defaultCommand; constructor({ name, description }) { this.defaultCommand = 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 = CommandParser.parse(this.defaultCommand, argv); 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.create({ name: "help", description: "Display help information", options: [ 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(); } }); } }