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