type OptionType = 'string' | 'boolean' | 'number' | 'positional'; type OutputType = string | boolean | number | undefined; type BuilderConfig = { name?: string | undefined; aliases: string[]; type: TType; description?: string; default?: OutputType; isHidden?: boolean; isRequired?: boolean; isInt?: boolean; minVal?: number; maxVal?: number; enumVals?: [string, ...string[]]; }; type ProcessedBuilderConfig = { name: string; aliases: string[]; type: OptionType; description?: string; default?: OutputType; isHidden?: boolean; isRequired?: boolean; isInt?: boolean; minVal?: number; maxVal?: number; enumVals?: [string, ...string[]]; }; type BuilderConfigLimited = BuilderConfig & { type: Exclude; }; declare class OptionBuilderBase { _: { config: TBuilderConfig; /** * Type-level only field * * Do not attempt to access at a runtime */ $output: TOutput; }; private config; constructor(config?: TBuilderConfig); string(name: TName): Omit, string | undefined, TOmit | OptionType | 'min' | 'max' | 'int'>, TOmit | OptionType | 'min' | 'max' | 'int'>; string(): Omit, string | undefined, TOmit | OptionType | 'min' | 'max' | 'int'>, TOmit | OptionType | 'min' | 'max' | 'int'>; number(name: TName): Omit, number | undefined, TOmit | OptionType | 'enum'>, TOmit | OptionType | 'enum'>; number(): Omit, string | undefined, TOmit | OptionType | 'enum'>, TOmit | OptionType | 'enum'>; boolean(name: TName): Omit, boolean | undefined, TOmit | OptionType | 'min' | 'max' | 'enum' | 'int'>, TOmit | OptionType | 'min' | 'max' | 'enum' | 'int'>; boolean(): Omit, boolean | undefined, TOmit | OptionType | 'min' | 'max' | 'enum' | 'int'>, TOmit | OptionType | 'min' | 'max' | 'enum' | 'int'>; positional(displayName: TName): Omit, string | undefined, TOmit | OptionType | 'min' | 'max' | 'int' | 'alias'>, TOmit | OptionType | 'min' | 'max' | 'int' | 'alias'>; positional(): Omit, string | undefined, TOmit | OptionType | 'min' | 'max' | 'int' | 'alias'>, TOmit | OptionType | 'min' | 'max' | 'int' | 'alias'>; alias(...aliases: string[]): Omit, TOmit | 'alias'>; desc(description: TDescription): Omit, TOmit | 'desc'>; hidden(): Omit, TOmit | 'hidden'>; required(): Omit, TOmit | 'required' | 'default'>, TOmit | 'required' | 'default'>; default : TEnums>(value: TDefVal): Omit, TOmit | 'enum' | 'required' | 'default', TEnums>, TOmit | 'enum' | 'required' | 'default'>; enum(...values: TValues): Omit, TOmit | 'enum'>; min(value: number): Omit, TOmit | 'min'>; max(value: number): Omit, TOmit | 'max'>; int(): Omit, TOmit | 'int'>; } type GenericBuilderInternalsFields = { /** * Type-level only field * * Do not attempt to access at a runtime */ $output: OutputType; config: BuilderConfig; }; type GenericBuilderInternals = { _: GenericBuilderInternalsFields; }; type GenericBuilderInternalsFieldsLimited = { /** * Type-level only field * * Do not attempt to access at a runtime */ $output: OutputType; config: BuilderConfigLimited; }; type GenericBuilderInternalsLimited = { _: GenericBuilderInternalsFieldsLimited; }; type ProcessedOptions = Record> = { [K in keyof TOptionConfig]: K extends string ? { config: ProcessedBuilderConfig; /** * Type-level only field * * Do not attempt to access at a runtime */ $output: TOptionConfig[K]['_']['$output']; } : never; }; type Simplify = { [K in keyof T]: T[K]; } & {}; type TypeOf> = Simplify<{ [K in keyof TOptions]: TOptions[K]['_']['$output']; }>; declare function string(name: TName): Omit, string | undefined, OptionType | 'min' | 'max' | 'int'>, OptionType | 'min' | 'max' | 'int'>; declare function string(): Omit, string | undefined, OptionType | 'min' | 'max' | 'int'>, OptionType | 'min' | 'max' | 'int'>; declare function number(name: TName): Omit, number | undefined, OptionType | 'enum'>, OptionType | 'enum'>; declare function number(): Omit, number | undefined, OptionType | 'enum'>, OptionType | 'enum'>; declare function boolean(name: TName): Omit, boolean | undefined, OptionType | 'min' | 'max' | 'int' | 'enum'>, OptionType | 'min' | 'max' | 'int' | 'enum'>; declare function boolean(): Omit, boolean | undefined, OptionType | 'min' | 'max' | 'int' | 'enum'>, OptionType | 'min' | 'max' | 'int' | 'enum'>; declare function positional(displayName: TName): Omit, string | undefined, OptionType | 'min' | 'max' | 'int' | 'alias'>, OptionType | 'min' | 'max' | 'int' | 'alias'>; declare function positional(): Omit, string | undefined, OptionType | 'min' | 'max' | 'int' | 'alias'>, OptionType | 'min' | 'max' | 'int' | 'alias'>; type CommandHandler | undefined = Record | undefined> = (options: TOpts extends Record ? TypeOf : undefined) => any; type CommandInfo = { name: string; aliases?: [string, ...string[]]; desc?: string; shortDesc?: string; hidden?: boolean; options?: Record; metadata?: any; subcommands?: CommandsInfo; }; type CommandsInfo = Record; type EventType = 'before' | 'after'; type BroCliConfig = { name?: string; description?: string; argSource?: string[]; help?: string | Function; version?: string | Function; omitKeysOfUndefinedOptions?: boolean; hook?: (event: EventType, command: Command) => any; theme?: EventHandler; }; type GenericCommandHandler = (options?: Record | undefined) => any; type RawCommand | undefined = Record | undefined, TOptsData = TOpts extends Record ? TypeOf : undefined, TTransformed = TOptsData extends undefined ? undefined : TOptsData> = { name?: string; aliases?: [string, ...string[]]; desc?: string; shortDesc?: string; hidden?: boolean; options?: TOpts; help?: string | Function; transform?: (options: TOptsData) => TTransformed; handler?: (options: Awaited) => any; subcommands?: [Command, ...Command[]]; metadata?: any; }; type AnyRawCommand | undefined = Record | undefined> = { name?: string; aliases?: [string, ...string[]]; desc?: string; shortDesc?: string; hidden?: boolean; options?: TOpts; help?: string | Function; transform?: GenericCommandHandler; handler?: GenericCommandHandler; subcommands?: [Command, ...Command[]]; metadata?: any; }; type Command = { name: string; aliases?: [string, ...string[]]; desc?: string; shortDesc?: string; hidden?: boolean; options?: ProcessedOptions; help?: string | Function; transform?: GenericCommandHandler; handler?: GenericCommandHandler; subcommands?: [Command, ...Command[]]; parent?: Command; metadata?: any; }; type CommandCandidate = { data: string; originalIndex: number; }; type InnerCommandParseRes = { command: Command | undefined; args: string[]; }; type TestResult = { type: 'handler'; options: THandlerInput; } | { type: 'help' | 'version'; } | { type: 'error'; error: unknown; }; declare const command: | undefined, TOptsData = TOpts extends Record ? { [K_1 in keyof { [K in keyof TOpts]: TOpts[K]["_"]["$output"]; }]: { [K in keyof TOpts]: TOpts[K]["_"]["$output"]; }[K_1]; } : undefined, TTransformed = TOptsData>(command: RawCommand) => Command>; declare const getCommandNameWithParents: (command: Command) => string; /** * Runs CLI commands * * @param commands - command collection * * @param config - additional settings */ declare const run: (commands: Command[], config?: BroCliConfig) => Promise; declare const handler: >(options: TOpts, handler: CommandHandler) => CommandHandler; declare const test: (command: Command, args: string) => Promise>; declare const commandsInfo: (commands: Command[]) => CommandsInfo; type CommandHelpEvent = { type: 'command_help'; name: string | undefined; description: string | undefined; command: Command; }; type GlobalHelpEvent = { type: 'global_help'; description: string | undefined; name: string | undefined; commands: Command[]; }; type MissingArgsEvent = { type: 'error'; violation: 'missing_args_error'; name: string | undefined; description: string | undefined; command: Command; missing: [string[], ...string[][]]; }; type UnrecognizedArgsEvent = { type: 'error'; violation: 'unrecognized_args_error'; name: string | undefined; description: string | undefined; command: Command; unrecognized: [string, ...string[]]; }; type UnknownCommandEvent = { type: 'error'; violation: 'unknown_command_error'; name: string | undefined; description: string | undefined; commands: Command[]; offender: string; }; type UnknownSubcommandEvent = { type: 'error'; violation: 'unknown_subcommand_error'; name: string | undefined; description: string | undefined; command: Command; offender: string; }; type UnknownErrorEvent = { type: 'error'; violation: 'unknown_error'; name: string | undefined; description: string | undefined; error: unknown; }; type VersionEvent = { type: 'version'; name: string | undefined; description: string | undefined; }; type GenericValidationViolation = 'above_max' | 'below_min' | 'expected_int' | 'invalid_boolean_syntax' | 'invalid_string_syntax' | 'invalid_number_syntax' | 'invalid_number_value' | 'enum_violation'; type ValidationViolation = BroCliEvent extends infer Event ? Event extends { violation: string; } ? Event['violation'] : never : never; type ValidationErrorEvent = { type: 'error'; violation: GenericValidationViolation; name: string | undefined; description: string | undefined; command: Command; option: ProcessedBuilderConfig; offender: { namePart?: string; dataPart?: string; }; }; type BroCliEvent = CommandHelpEvent | GlobalHelpEvent | MissingArgsEvent | UnrecognizedArgsEvent | UnknownCommandEvent | UnknownSubcommandEvent | ValidationErrorEvent | VersionEvent | UnknownErrorEvent; type BroCliEventType = BroCliEvent['type']; /** * Return `true` if your handler processes the event * * Return `false` to process event with a built-in handler */ type EventHandler = (event: BroCliEvent) => boolean | Promise; /** * Internal error class used to bypass runCli's logging without stack trace * * Used only for malformed commands and options */ declare class BroCliError extends Error { event?: BroCliEvent | undefined; constructor(message: string | undefined, event?: BroCliEvent | undefined); } export { type AnyRawCommand, type BroCliConfig, BroCliError, type BroCliEvent, type BroCliEventType, type BuilderConfig, type BuilderConfigLimited, type Command, type CommandCandidate, type CommandHandler, type CommandHelpEvent, type CommandInfo, type CommandsInfo, type EventHandler, type EventType, type GenericBuilderInternals, type GenericBuilderInternalsFields, type GenericBuilderInternalsFieldsLimited, type GenericBuilderInternalsLimited, type GenericCommandHandler, type GenericValidationViolation, type GlobalHelpEvent, type InnerCommandParseRes, type MissingArgsEvent, OptionBuilderBase, type OptionType, type OutputType, type ProcessedBuilderConfig, type ProcessedOptions, type RawCommand, type Simplify, type TestResult, type TypeOf, type UnknownCommandEvent, type UnknownErrorEvent, type UnknownSubcommandEvent, type UnrecognizedArgsEvent, type ValidationErrorEvent, type ValidationViolation, type VersionEvent, boolean, command, commandsInfo, getCommandNameWithParents, handler, number, positional, run, string, test };