import { Arguments, Argv, CommandModule } from "yargs";
import signale from "signale";
declare const RESOLVE: unique symbol;
declare const REJECT: unique symbol;
declare const HANDLED: unique symbol;
declare const LOGGER: unique symbol;
export interface Context {
    [RESOLVE]: (value?: any) => void;
    [REJECT]: (reason?: any) => void;
    [LOGGER]?: signale.Signale;
    [HANDLED]?: boolean;
}
export interface RootArguments {
    cwd: string;
    silent: boolean;
}
declare type CommandHandler<T> = (args: Arguments<T> & Context) => Promise<void>;
declare type RootCommandModule<T> = CommandModule<RootArguments, T>;
export interface Command<T> extends Pick<RootCommandModule<T>, Exclude<keyof RootCommandModule<T>, "handler">> {
    handler: CommandHandler<T>;
}
export declare function getLogger(ctx: Context): signale.Signale;
export declare function setLogger<T extends Context>(ctx: T, logger: signale.Signale): T;
export declare function wrapHandler<T extends RootArguments>(handler: CommandHandler<T>): CommandHandler<T>;
export declare function wrapCommand<T extends RootArguments>(cmd: Command<T>): RootCommandModule<T>;
export declare function parse(input: Argv, argv: string[]): Promise<void>;
export {};
