ariaa
Version:
A CLI for music lovers
54 lines • 1.78 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
import { createArgument, createCommand, createOption } from "commander";
class Command {
constructor(options) {
this.options = options;
}
static {
__name(this, "Command");
}
parse() {
const parsedOptions = this.parseOptions();
const command = createCommand(this.options.name).description(this.options.description ?? "").action((...args) => this.options.run(...args));
if (this.options.args) {
for (const { name, description, default: def } of this.options.args) {
const arg = createArgument(name, description).default(def).argOptional();
command.addArgument(arg);
}
}
if (parsedOptions) {
for (const [flag, description, defaultValue] of parsedOptions) {
const option = createOption(flag, description).default(defaultValue);
command.addOption(option);
}
}
command.option("--verbose", "Verbose");
if (this.options.alias) command.alias(this.options.alias);
return command;
}
parseOptions() {
let flags = "";
const parsedOptions = [];
if (!this.options.flags) return;
for (const option of this.options.flags) {
const { shortFlags, longFlags, rawFlags, description, default: def } = option;
if (shortFlags) {
flags += `-${shortFlags}, `;
}
if (longFlags) {
flags += `--${longFlags}`;
}
if (rawFlags) flags = rawFlags;
flags = flags.trim();
flags = flags.endsWith(",") ? flags.slice(0, -1) : flags;
parsedOptions.push([flags, description, def]);
flags = "";
}
return parsedOptions;
}
}
export {
Command
};
//# sourceMappingURL=Command.js.map