UNPKG

@oclif/core

Version:

base library for oclif CLIs

191 lines (190 loc) 7.29 kB
import { Config } from './config'; import { PrettyPrintableError } from './errors'; import { LoadOptions } from './interfaces/config'; import { CommandError } from './interfaces/errors'; import { ArgInput, ArgOutput, ArgProps, BooleanFlagProps, Deprecation, FlagInput, FlagOutput, Arg as IArg, Flag as IFlag, Input, OptionFlagProps, ParserOutput } from './interfaces/parser'; import { Plugin } from './interfaces/plugin'; /** * An abstract class which acts as the base for each command * in your project. */ export declare abstract class Command { argv: string[]; config: Config; private static readonly _base; /** An array of aliases for this command. */ static aliases: string[]; /** An order-dependent object of arguments for the command */ static args: ArgInput; static baseFlags: FlagInput; /** * Emit deprecation warning when a command alias is used */ static deprecateAliases?: boolean; static deprecationOptions?: Deprecation; /** * A full description of how to use the command. * * If no summary, the first line of the description will be used as the summary. */ static description: string | undefined; static enableJsonFlag: boolean; /** * An array of examples to show at the end of the command's help. * * IF only a string is provided, it will try to look for a line that starts * with the cmd.bin as the example command and the rest as the description. * If found, the command will be formatted appropriately. * * ``` * EXAMPLES: * A description of a particular use case. * * $ <%= config.bin => command flags * ``` */ static examples: Command.Example[]; /** A hash of flags for the command */ static flags: FlagInput; static hasDynamicHelp: boolean; static help: string | undefined; /** Hide the command from help */ static hidden: boolean; /** An array of aliases for this command that are hidden from help. */ static hiddenAliases: string[]; /** A command ID, used mostly in error or verbose reporting. */ static id: string; static plugin: Plugin | undefined; static readonly pluginAlias?: string; static readonly pluginName?: string; static readonly pluginType?: string; /** Mark the command as a given state (e.g. beta or deprecated) in help */ static state?: 'beta' | 'deprecated' | string; /** When set to false, allows a variable amount of arguments */ static strict: boolean; /** * The tweet-sized description for your class, used in a parent-commands * sub-command listing and as the header for the command help. */ static summary?: string; /** * An override string (or strings) for the default usage documentation. */ static usage: string | string[] | undefined; protected debug: (...args: any[]) => void; id: string | undefined; constructor(argv: string[], config: Config); /** * instantiate and run the command * * @param {Command.Class} this - the command class * @param {string[]} argv argv * @param {LoadOptions} opts options * @returns {Promise<unknown>} result */ static run<T extends Command>(this: new (argv: string[], config: Config) => T, argv?: string[], opts?: LoadOptions): Promise<ReturnType<T['run']>>; protected get ctor(): typeof Command; protected _run<T>(): Promise<T>; protected catch(err: CommandError): Promise<any>; error(input: Error | string, options: { code?: string; exit: false; } & PrettyPrintableError): void; error(input: Error | string, options?: { code?: string; exit?: number; } & PrettyPrintableError): never; exit(code?: number): never; protected finally(_: Error | undefined): Promise<any>; protected init(): Promise<any>; /** * Determine if the command is being run with the --json flag in a command that supports it. * * @returns {boolean} true if the command supports json and the --json flag is present */ jsonEnabled(): boolean; log(message?: string, ...args: any[]): void; protected logJson(json: unknown): void; logToStderr(message?: string, ...args: any[]): void; protected parse<F extends FlagOutput, B extends FlagOutput, A extends ArgOutput>(options?: Input<F, B, A>, argv?: string[]): Promise<ParserOutput<F, B, A>>; /** * actual command run code goes here */ abstract run(): Promise<any>; protected toErrorJson(err: unknown): any; protected toSuccessJson(result: unknown): any; warn(input: Error | string): Error | string; protected warnIfCommandDeprecated(): void; protected warnIfFlagDeprecated(flags: Record<string, unknown>): void; private removeEnvVar; } export declare namespace Command { /** * The Command class exported by a command file. */ type Class = typeof Command & { id: string; run(argv?: string[], config?: LoadOptions): Promise<any>; }; /** * A cached command that's had a `load` method attached to it. * * The `Plugin` class loads the commands from the manifest (if it exists) or requires and caches * the commands directly from the commands directory inside the plugin. At this point the plugin * is working with `Command.Cached`. It then appends a `load` method to each one. If the a command * is executed then the `load` method is used to require the command class. */ type Loadable = Cached & { load(): Promise<Command.Class>; }; /** * A cached version of the command. This is created by the cachedCommand utility and * stored in the oclif.manifest.json. */ type Cached = { [key: string]: unknown; aliasPermutations?: string[] | undefined; aliases: string[]; args: { [name: string]: Arg.Cached; }; deprecateAliases?: boolean | undefined; deprecationOptions?: Deprecation | undefined; description?: string | undefined; examples?: Example[] | undefined; flags: { [name: string]: Flag.Cached; }; hasDynamicHelp?: boolean; hidden: boolean; hiddenAliases: string[]; id: string; isESM?: boolean | undefined; permutations?: string[] | undefined; pluginAlias?: string | undefined; pluginName?: string | undefined; pluginType?: string | undefined; relativePath?: string[] | undefined; state?: 'beta' | 'deprecated' | string | undefined; strict?: boolean | undefined; summary?: string | undefined; type?: string | undefined; usage?: string | string[] | undefined; }; type Flag = IFlag<any>; namespace Flag { type Cached = Omit<Flag, 'input' | 'parse'> & (BooleanFlagProps | OptionFlagProps) & { hasDynamicHelp?: boolean | undefined; }; type Any = Cached | Flag; } type Arg = IArg<any>; namespace Arg { type Cached = Omit<Arg, 'input' | 'parse'> & ArgProps; type Any = Arg | Cached; } type Example = { command: string; description: string; } | string; }