1 | export type CliParsedCommandHandler = (parsed: ParsedCliCommand) => Promise<void | number> | void | number;
|
2 | export type CliCommandHandler = <TOptions extends {} = {}, TArgs extends {} = {}>(
|
3 | args: TArgs,
|
4 | options: TOptions,
|
5 | parsedCmd?: ParsedCliCommand<TOptions, TArgs>
|
6 | ) => Promise<void | number> | void | number;
|
7 |
|
8 | export type CliValueType = 'boolean' | 'string' | 'number';
|
9 | export type CliValue = boolean | string | number | undefined;
|
10 |
|
11 | import { CliCommandDefinitionParameterPromptQuestion, CliPromptHandler } from './prompt';
|
12 |
|
13 | export interface CliOptions {
|
14 | globalHandler?: CliParsedCommandHandler;
|
15 | showPrompts?: boolean;
|
16 | }
|
17 |
|
18 | export interface CliBaseCommandDefinition<TCliOptions extends {} = {}, TTransformedOptions extends {} = TCliOptions> {
|
19 | name: string;
|
20 |
|
21 | description?: string;
|
22 | options?: CliCommandDefinitionOption[];
|
23 | allowDynamicOptions?: boolean;
|
24 | examples?: string[];
|
25 | transformOptions?: (options: TCliOptions) => TTransformedOptions;
|
26 | }
|
27 |
|
28 | export interface CliProgramDefinition extends CliBaseCommandDefinition {
|
29 | defaultCommandName?: string;
|
30 | commands?: CliCommandDefinition[];
|
31 | }
|
32 |
|
33 | export 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 |
|
45 | export type CliValueValidatorFunction = (value: CliValue) => boolean | string;
|
46 |
|
47 | export 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 |
|
57 | export interface CliCommandDefinitionArgument extends CliCommandDefinitionParameter {
|
58 | isOptional?: boolean;
|
59 | isVariadic?: boolean;
|
60 | }
|
61 |
|
62 | export interface CliCommandDefinitionOption extends CliCommandDefinitionParameter {
|
63 | syntax?: string;
|
64 | flag?: string;
|
65 | commandHandler?: CliParsedCommandHandler;
|
66 | }
|
67 |
|
68 | export interface CliParsedCommandDefinitionArgument extends CliCommandDefinitionArgument {
|
69 | wasPassed: boolean;
|
70 | value: CliValue | CliValue[];
|
71 | }
|
72 |
|
73 | export interface CliParsedCommandDefinitionOption extends CliCommandDefinitionOption {
|
74 | wasPassed: boolean;
|
75 | value: CliValue;
|
76 | }
|
77 |
|
78 | export type ParserErrorType = 'command' | 'argument' | 'option';
|
79 |
|
80 | export interface ParserErrors {
|
81 | commandErrors: string[];
|
82 | argumentErrors: string[];
|
83 | optionErrors: string[];
|
84 | allErrors: string[];
|
85 | hasErrors: boolean;
|
86 | }
|
87 |
|
88 | export 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 |
|
106 | export interface CliRunResult<TOptions extends {} = {}, TArgs extends {} = {}> {
|
107 | parsedCommand: ParsedCliCommand<TOptions, TArgs>;
|
108 | exitCode: number | undefined;
|
109 | }
|
110 |
|
111 | export interface MriOpts {
|
112 |
|
113 | alias?: { [name: string]: string | string[] };
|
114 |
|
115 | unknown?: (flag: string) => any;
|
116 |
|
117 | default?: { [name: string]: string | boolean | number };
|
118 |
|
119 | string?: string | string[];
|
120 |
|
121 | boolean?: string | string[];
|
122 | lazy?: boolean;
|
123 | }
|