UNPKG

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