import Option, { OptionConfig } from './Option'; interface CommandArg { required: boolean; value: string; variadic: boolean; } interface HelpConfig { bin: string; subCommands?: Command[]; versionNumber?: string; globalOptions?: Option[]; } interface HelpSection { title?: string; body: string; } interface CommandConfig { allowUnknownOptions?: boolean; } declare type HelpCallback = (sections: HelpSection[]) => void; declare type CommandExample = ((bin: string) => string) | string; export default class Command { rawName: string; description: string; options: Option[]; aliasNames: string[]; name: string; args: CommandArg[]; commandAction?: (...args: any[]) => any; usageText?: string; versionNumber?: string; examples: CommandExample[]; config: CommandConfig; helpCallback?: HelpCallback; constructor(rawName: string, description: string); usage(text: string): this; allowUnknownOptions(): this; version(version: string, customFlags?: string): this; example(example: CommandExample): this; /** * Add a option for this command * @param rawName Raw option name(s) * @param description Option description * @param config Option config */ option(rawName: string, description: string, config?: OptionConfig): this; alias(name: string): this; action(callback: (...args: any[]) => any): this; /** * Check if a command name is matched by this command * @param name Command name */ isMatched(name: string): boolean; readonly isDefaultCommand: boolean; /** * Check if an option is registered in this command * @param name Option name */ hasOption(name: string): Option | undefined; outputHelp(config: HelpConfig): void; outputVersion(bin: string): void; /** * Check if the parsed options contain any unknown options * Exit and output error when true * @param options Original options, i.e. not camelCased one * @param globalCommand */ checkUnknownOptions(options: { [k: string]: any; }, globalCommand: Command): void; } export { HelpCallback, CommandExample };