import App from "@pagedip/lib-app"; export type AppPlugins = AppPlugin | AppPlugin[]; export type AppPlugin = (this: App, app: App) => AppPlugins | void; export type FlagType = string | boolean | number; export interface Flags { [flag: string]: FlagType | FlagType[] | Flags; } export interface FlagDefinition { type: string; describe?: string; alias?: string | string[]; usageFlag?: string; defaultDescription?: string; default?: any; required?: boolean; conflicts?: string | string[]; choices?: string | string[]; hidden?: boolean; usageHidden?: boolean; group?: string; } export interface Params { _: string[]; "--": string[]; [param: string]: string | string[]; } export interface Argv { flags: Flags; params: Params; args: string[]; unknownFlags: string[]; parsed: Array<{ type: string; parsed: string[]; args: string[]; keys: string[]; }>; errors: string[]; } export interface HandlerContext { argv: Argv; app: App; args: string[]; name: string; command: Command; } export interface FlagDefinitionMap { [key: string]: FlagDefinition; } export interface CommandSpec { command?: string; alias?: string | string[]; describe?: string; description?: string; desc?: string; notes?: string; flags?: FlagDefinitionMap; params?: FlagDefinitionMap; configKey?: string | string[]; use?: AppPlugins; builder?: (app: App) => any; handler?: (ctx: HandlerContext) => any; passthrough?: boolean; strictValidation?: boolean; defaults?: { [key: string]: any; }; } export interface CommandSyntax { name: string; required: string[]; optional: string[]; remaining: boolean; } export interface Command { name: string; syntax: CommandSyntax; alias?: string | string[]; description?: string; notes?: string; flags?: FlagDefinitionMap; params?: FlagDefinitionMap; configKey?: string | string[]; use?: AppPlugins; builder?: (app: App) => any; handler?: (ctx: HandlerContext) => any; passthrough?: boolean; strictValidation?: boolean; defaults?: { [key: string]: any; }; } export class Cli { version(v: string): this; version(): string; command(spec: CommandSpec): this; getCommand(name: string): Command | undefined; getCommands(): Record; run(name: string, args?: string[]): any; run(args?: string[]): any; bin(): void; } export default function createCli(): Cli; type Omit = Pick>; type Partialize = Omit & Partial>; export function adjustFlags( flags: FlagDefinitionMap, options?: | string | { prefix?: string; alias?: string; include?: string | string[]; exclude?: string | string[]; defaults?: Partialize; override?: Partialize; } ): FlagDefinitionMap; declare global { namespace Pagedip { interface App { defineFlag(key: string, spec: FlagDefinition): void; defineFlags(specs: FlagDefinitionMap, defaults?: Partial): this; version(): string; version(ver: string): this; help(opts: any): string; cliValidationError(error: any): void; } } }