///
import { SpawnOptions, ChildProcess, SpawnSyncReturns, SpawnSyncOptions } from 'child_process';
import { PargvCommand } from './';
import { IAnsiStyles } from 'colurs';
export declare type ErrorHandler = (err: Error) => void;
export declare type NodeCallback = (err?: Error, data?: any) => void;
export declare type LogHandler = (message: string) => void;
export declare type CoerceHandler = (val: any, command?: PargvCommand) => any;
export declare type ActionHandler = (...args: any[]) => void;
export declare type SpawnAsyncMethod = (command: string | IPargvSpawnConfig, args?: string[], options?: SpawnOptions) => ChildProcess;
export declare type SpawnSyncMethod = (command: string, args?: string[], options?: SpawnSyncOptions) => SpawnSyncReturns;
export declare type SpawnMethod = SpawnAsyncMethod;
export declare type SpawnActionHandler = (method: SpawnMethod, config: IPargvSpawnConfig, parsed?: IPargvParsedResult, cmd?: Partial) => void | ChildProcess;
export declare type CompletionHandler = (current: string, argv: any[] | NodeCallback, done?: CompletionHandlerCallback) => any[];
export declare type CompletionHandlerCallback = (completions: any[]) => void;
export declare type HelpHandler = (command: string, commands?: IMap) => any;
export declare type LocalizeInit = (singular: string, plural?: string) => IPargvLocalize;
export declare type AnsiStyles = keyof IAnsiStyles;
export interface IMap {
[key: string]: T;
}
export interface IPargvSpawnConfig {
command: string;
args: any[];
options: SpawnOptions;
}
export interface IPargvOptions {
cast?: boolean;
splitArgs?: string | null;
colorize?: boolean;
displayHeader?: boolean;
displayFooter?: boolean;
displayNone?: boolean;
displayTitles?: boolean;
headingDivider?: string;
commandDivider?: string;
itemDivider?: string;
locale?: string;
localeDir?: string;
defaultHelp?: boolean;
castBeforeCoerce?: boolean;
extendArguments?: boolean;
spreadArguments?: boolean;
extendAliases?: boolean;
extendStats?: boolean;
allowAnonymous?: boolean;
ignoreTypeErrors?: boolean;
layoutWidth?: number;
colors?: {
primary?: AnsiStyles | AnsiStyles[];
accent?: AnsiStyles | AnsiStyles[];
alert?: AnsiStyles | AnsiStyles[];
muted?: AnsiStyles | AnsiStyles[];
};
fallbackHelp?: boolean | HelpHandler;
autoHelp?: boolean;
exitHelp?: boolean;
extendCommands?: boolean;
spreadCommands?: boolean;
displayStackTrace?: boolean;
}
export interface IPargvEnv {
CWD: string;
EXEC: string;
EXEC_PATH: string;
NODE_PATH: string;
HOME_PATH: string;
NODE_ENV: string;
PLATFORM: string;
PKG: any;
}
export interface IPargvCompletionPaths {
appName: string;
appPath: string;
bashPath: string | boolean;
completionsDir: string;
completionsPath: string;
}
export interface IPargvCompletionsConfig {
paths: IPargvCompletionPaths;
command: string;
script: string;
sourceScript: string;
}
export interface IPargvCompletions {
getPaths(path: string): IPargvCompletionPaths;
ensureDir(dir: string): boolean;
generate(path?: string, command?: string, template?: string): IPargvCompletionsConfig;
write(path: string, script: string, append?: boolean): boolean;
install(path?: string, command?: string, template?: string, force?: boolean): any;
handler(current: string, args: any[], done?: CompletionHandlerCallback): any[];
}
export interface IPargvMetadata {
name?: string;
description?: string;
version?: string;
license?: string;
epilog?: string;
[key: string]: any;
}
export interface IPargvCommandOption {
key?: string;
usage?: string[];
describe?: string;
default?: any;
aliases?: string[];
as?: string;
index?: number;
type?: string | RegExp | CoerceHandler;
flag?: boolean;
bool?: boolean;
required?: boolean;
isVariadic: boolean;
}
export interface IPargvParsedResult {
$exec?: string;
$command?: string;
$external?: string;
$arguments?: any[];
$variadics?: any[];
$source?: string[];
$stats?: IPargvStats;
[key: string]: any;
$commands?: any[];
}
export interface IPargvCoerceConfig {
fn: string | RegExp | CoerceHandler;
def?: any;
}
export interface IPargvWhenConfig {
demand: string;
converse?: boolean;
}
export interface IPargvLayout {
div(...elements: any[]): IPargvLayout;
span(...elements: any[]): IPargvLayout;
repeat(char: string, len?: number, padding?: number | number[]): IPargvLayout;
section(title: string, padding?: number | number[]): IPargvLayout;
join(by: string, ...elements: any[]): IPargvLayout;
show(...elements: any[]): void;
get(): string;
ui: any;
}
export interface IPargvLogo {
fonts(): any[];
show(): void;
get(): string;
}
export interface IPargvStats {
arguments?: any[];
options?: any[];
map?: any[];
normalized: any[];
missing?: any[];
anonymous?: any[];
whens?: any[];
argumentsCount?: number;
optionsCount?: number;
commands?: any[];
commandsCount?: number;
}
export interface IPargvLocalize {
args(...args: any[]): IPargvLocalize;
setArg(singular: string, plural?: string | number, index?: number): IPargvLocalize;
styles(...styles: any[]): IPargvLocalize;
count(count: number): IPargvLocalize;
done(): string;
}