/// import { EventEmitter } from 'events'; import { CommandInstanceInfo, CommandMetadata, CommandMetadataInput, CommandMetadataOption, ICommand, IExecutor, INamespace, NamespaceLocateResult } from '../definitions'; import { Colors } from './colors'; import { Command, Namespace } from './command'; import { CommandHelpSchema, NamespaceHelpSchema } from './help'; export declare type HelpRPC = import('../utils/ipc').RPC<'help', [readonly string[]], S>; export interface ExecutorOperations { readonly RPC: string; } export declare const EXECUTOR_OPS: ExecutorOperations; export declare const HELP_FLAGS: string[]; export declare abstract class AbstractExecutor, N extends INamespace, M extends CommandMetadata, I extends CommandMetadataInput, O extends CommandMetadataOption> extends EventEmitter implements IExecutor { abstract readonly namespace: N; abstract locate(argv: readonly string[]): Promise>; abstract execute(location: NamespaceLocateResult): Promise; abstract execute(argv: readonly string[], env: NodeJS.ProcessEnv): Promise; abstract run(command: C, cmdargs: readonly string[], runinfo?: Partial>): Promise; resolveExecuteInput(argvOrLocation: readonly string[] | NamespaceLocateResult): Promise<[NamespaceLocateResult, string[]]>; } export interface BaseExecutorFormatHelpOptions { format?: 'terminal' | 'json'; } export interface BaseExecutorDeps, N extends INamespace, M extends CommandMetadata, I extends CommandMetadataInput, O extends CommandMetadataOption> { readonly namespace: N; readonly colors?: Colors; readonly stdout?: NodeJS.WriteStream; readonly stderr?: NodeJS.WriteStream; } export interface BaseExecutor, N extends INamespace, M extends CommandMetadata, I extends CommandMetadataInput, O extends CommandMetadataOption> extends AbstractExecutor { on(event: 'operation-rpc', callback: (rpc: import('../utils/ipc').RPCProcess) => void): this; emit(event: 'operation-rpc', rpc: import('../utils/ipc').RPCProcess): boolean; } export declare class BaseExecutor, N extends INamespace, M extends CommandMetadata, I extends CommandMetadataInput, O extends CommandMetadataOption> extends AbstractExecutor { readonly colors: Colors; readonly namespace: N; readonly stdout: NodeJS.WriteStream; readonly stderr: NodeJS.WriteStream; constructor({ namespace, stdout, stderr, colors }: BaseExecutorDeps); /** * Locate a command or namespace given an array of positional arguments * (argv). * * @param argv Command arguments sliced to the root for the namespace of this * executor. Usually, this means `process.argv.slice(2)`. */ locate(argv: readonly string[]): Promise>; /** * Locate and execute a command given an array of positional command * arguments (argv) and a set of environment variables. * * If a command is not found, formatted help is automatically output for the * right-most namespace found. * * @param argv Command arguments sliced to the root for the namespace of this * executor. Usually, this means `process.argv.slice(2)`. * @param env Environment variables for this execution. */ execute(argvOrLocation: readonly string[] | NamespaceLocateResult, env?: NodeJS.ProcessEnv): Promise; run(command: C, cmdargs: readonly string[], runinfo?: Partial>): Promise; formatHelp(location: NamespaceLocateResult, { format }?: BaseExecutorFormatHelpOptions): Promise; /** * Initiate RPC operation. * * This means the CLI has been executed by a parent Node process with an IPC * channel, allowing request/response communication via RPC. */ rpc(): Promise; } export declare class Executor extends BaseExecutor { } export declare function execute, N extends INamespace, M extends CommandMetadata, I extends CommandMetadataInput, O extends CommandMetadataOption>({ namespace, argv, env, ...rest }: { namespace: N; argv: string[]; env: NodeJS.ProcessEnv; } & Partial>): Promise;