UNPKG

4.53 kBPlain TextView Raw
1export type CliParsedCommandHandler = (parsed: ParsedCliCommand) => Promise<void | number> | void | number;
2export type CliCommandHandler = <TOptions extends {} = {}, TArgs extends {} = {}>(
3 args: TArgs,
4 options: TOptions
5) => Promise<void | number> | void | number;
6
7export type CliValueType = 'boolean' | 'string' | 'number';
8export type CliValue = boolean | string | number | undefined;
9
10import { CliCommandDefinitionParameterPromptQuestion, CliPromptHandler } from './prompt';
11
12export interface CliOptions {
13 globalHandler?: CliParsedCommandHandler;
14 showPrompts?: boolean;
15}
16
17export interface CliBaseCommandDefinition<TCliOptions extends {} = {}, TTransformedOptions extends {} = TCliOptions> {
18 name: string;
19 // syntax?: string;
20 description?: string;
21 options?: CliCommandDefinitionOption[];
22 examples?: string[];
23 transformOptions?: (options: TCliOptions) => TTransformedOptions;
24}
25
26export interface CliProgramDefinition extends CliBaseCommandDefinition {
27 defaultCommandName?: string;
28 commands?: CliCommandDefinition[];
29}
30
31export interface CliCommandDefinition<
32 TCliOptions extends {} = {},
33 TTransformedOptions extends {} = TCliOptions,
34 TCliArgs extends {} = {},
35 TTransformedArgs extends {} = TCliArgs
36> extends CliBaseCommandDefinition<TCliOptions, TTransformedOptions> {
37 arguments?: CliCommandDefinitionArgument[];
38 handler?: CliCommandHandler;
39 env?: { [name: string]: string };
40 transformArguments?: (options: TCliArgs) => TTransformedArgs;
41}
42
43export type CliValueValidatorFunction = (value: CliValue) => boolean | string;
44
45export interface CliCommandDefinitionParameter {
46 name: string;
47 description?: string;
48 valueType?: CliValueType;
49 default?: CliValue;
50 transform?: (value: CliValue) => CliValue;
51 validate?: CliValueValidatorFunction | RegExp;
52 prompt?: CliCommandDefinitionParameterPromptQuestion;
53}
54
55export interface CliCommandDefinitionArgument extends CliCommandDefinitionParameter {
56 isOptional?: boolean;
57 isVariadic?: boolean;
58}
59
60export interface CliCommandDefinitionOption extends CliCommandDefinitionParameter {
61 syntax?: string;
62 flag?: string;
63 commandHandler?: CliParsedCommandHandler;
64}
65
66export interface CliParsedCommandDefinitionArgument extends CliCommandDefinitionArgument {
67 wasPassed: boolean;
68 value: CliValue | CliValue[];
69}
70
71export interface CliParsedCommandDefinitionOption extends CliCommandDefinitionOption {
72 wasPassed: boolean;
73 value: CliValue;
74}
75
76export type ParserErrorType = 'command' | 'argument' | 'option';
77
78export interface ParserErrors {
79 commandErrors: string[];
80 argumentErrors: string[];
81 optionErrors: string[];
82 allErrors: string[];
83 hasErrors: boolean;
84}
85
86export interface ParsedCliCommand<TOptions extends {} = {}, TArgs extends {} = {}> {
87 program: CliProgramDefinition;
88 command: CliCommandDefinition;
89 optionDefinitions: { [name: string]: CliCommandDefinitionOption };
90 parsedOptions: { [name: string]: CliParsedCommandDefinitionOption };
91 parsedArguments: { [name: string]: CliParsedCommandDefinitionArgument };
92 parsedCommandName: string;
93 arguments: TArgs;
94 options: TOptions;
95 passedArguments: string[];
96 passedOptions: string[];
97 errors: ParserErrors;
98 version: string | undefined;
99 env: { [name: string]: string };
100 run: () => Promise<CliRunResult<TOptions, TArgs>>;
101}
102
103export interface CliRunResult<TOptions extends {} = {}, TArgs extends {} = {}> {
104 parsedCommand: ParsedCliCommand<TOptions, TArgs>;
105 exitCode: number | undefined;
106}
107
108export interface MriOpts {
109 // An object of keys whose values are Strings or Array<String> of aliases. These will be added to the parsed output with matching values.
110 alias?: { [name: string]: string | string[] };
111 // Callback that is run when a parsed flag has not been defined as a known key or alias. Its only parameter is the unknown flag
112 unknown?: (flag: string) => any;
113 // An key:value object of defaults. If a default is provided for a key, its type (typeof) will be used to cast parsed arguments.
114 default?: { [name: string]: string | boolean | number };
115 // A single key (or array of keys) that should be parsed as Strings.
116 string?: string | string[];
117 // A single key (or array of keys) that should be parsed as Booleans.
118 boolean?: string | string[];
119 lazy?: boolean;
120}