import { Command, CommandOptions } from 'commander'; abstract class CommanderCommand { protected abstract commandName: string; protected aliasNames: Array<string> = []; protected options: CommandOptions = {}; command: Command = new Command(); registerOnCommand(parent: Command) { this.command = parent.command(this.commandName, this.options).aliases(this.aliasNames); this.defineCommand(); this.defineSubCommands(); } protected abstract defineCommand(): void; protected defineSubCommands() {} protected abstract commandAction(...args: Array<unknown>): Promise<void>; } export default CommanderCommand;