1 | import { Flags as Flags$1, TypeFlag } from 'type-flag';
|
2 | import { Options } from 'terminal-columns';
|
3 |
|
4 | declare type CommandOptions<Parameters = string[]> = {
|
5 | |
6 |
|
7 |
|
8 | name: string;
|
9 | |
10 |
|
11 |
|
12 | alias?: string | string[];
|
13 | |
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | parameters?: Parameters;
|
22 | |
23 |
|
24 |
|
25 | flags?: Flags;
|
26 | |
27 |
|
28 |
|
29 | help?: false | HelpOptions;
|
30 | };
|
31 | declare function command<Options extends CommandOptions<[...Parameters]>, Parameters extends string[]>(options: Readonly<Options> & CommandOptions<[...Parameters]>, callback?: CallbackFunction<ParseArgv<Options, Parameters>>): Command<Options, ParseArgv<Options, Parameters, Options['name']>>;
|
32 | declare type Command<Options extends CommandOptions = CommandOptions, ParsedType = any> = {
|
33 | readonly options: Options;
|
34 | readonly callback?: CallbackFunction<any>;
|
35 | [parsedType]: ParsedType;
|
36 | };
|
37 |
|
38 | declare type FlagData = {
|
39 | name: string;
|
40 | flag: Flags[string];
|
41 | flagFormatted: string;
|
42 | aliasesEnabled: boolean;
|
43 | aliasFormatted: string | undefined;
|
44 | };
|
45 |
|
46 | declare type TypeFunction = (value: any) => any;
|
47 | declare type HelpDocumentNodeOrString<Type extends PropertyKey> = string | HelpDocumentNode<Type>;
|
48 | declare class Renderers {
|
49 | text(text: string): string;
|
50 | bold(text: string): string;
|
51 | indentText({ text, spaces }: {
|
52 | text: string;
|
53 | spaces: number;
|
54 | }): string;
|
55 | heading(text: string): string;
|
56 | section({ title, body, indentBody, }: {
|
57 | title?: string;
|
58 | body?: string;
|
59 | indentBody?: number;
|
60 | }): string;
|
61 | table({ tableData, tableOptions, tableBreakpoints, }: {
|
62 | tableData: string[][];
|
63 | tableOptions?: Options;
|
64 | tableBreakpoints?: Record<string, Options>;
|
65 | }): string;
|
66 | flagParameter(typeFunction: TypeFunction | readonly [TypeFunction]): string;
|
67 | flagOperator(_: FlagData): string;
|
68 | flagName(flagData: FlagData): string;
|
69 | flagDefault(value: any): string;
|
70 | flagDescription({ flag }: FlagData): string;
|
71 | render(nodes: (HelpDocumentNodeOrString<keyof this> | HelpDocumentNodeOrString<keyof this>[])): string;
|
72 | }
|
73 |
|
74 | declare const parsedType: unique symbol;
|
75 | declare type Flags = Flags$1<{
|
76 | |
77 |
|
78 |
|
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 | description?: string;
|
85 | |
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | placeholder?: string;
|
94 | }>;
|
95 | declare type CallbackFunction<Parsed> = (parsed: {
|
96 | [Key in keyof Parsed]: Parsed[Key];
|
97 | }) => void;
|
98 | declare type HasVersion<Options extends {
|
99 | flags?: Flags;
|
100 | }> = (Options extends {
|
101 | version: string;
|
102 | } ? Options['flags'] & {
|
103 | version: BooleanConstructor;
|
104 | } : Options['flags']);
|
105 | declare type HasHelp<Options extends {
|
106 | flags?: Flags;
|
107 | }> = (Options extends {
|
108 | help: false;
|
109 | } ? Options['flags'] : Options['flags'] & {
|
110 | help: BooleanConstructor;
|
111 | });
|
112 | declare type HasHelpOrVersion<Options> = HasVersion<Options> & HasHelp<Options>;
|
113 | declare type HelpDocumentNode<Types extends PropertyKey = keyof Renderers> = {
|
114 | id?: string;
|
115 | type: Types;
|
116 | data: any;
|
117 | };
|
118 | declare type HelpOptions = {
|
119 | |
120 |
|
121 |
|
122 | version?: string;
|
123 | |
124 |
|
125 |
|
126 | description?: string;
|
127 | |
128 |
|
129 |
|
130 | usage?: false | string | string[];
|
131 | |
132 |
|
133 |
|
134 | examples?: string | string[];
|
135 | |
136 |
|
137 |
|
138 | render?: (nodes: HelpDocumentNode<keyof Renderers>[], renderers: Renderers) => string;
|
139 | };
|
140 | declare type CliOptions<Commands = Command[], Parameters extends string[] = string[]> = {
|
141 | |
142 |
|
143 |
|
144 | name?: string;
|
145 | |
146 |
|
147 |
|
148 | version?: string;
|
149 | |
150 |
|
151 |
|
152 |
|
153 |
|
154 |
|
155 |
|
156 |
|
157 | parameters?: Parameters;
|
158 | |
159 |
|
160 |
|
161 | commands?: Commands;
|
162 | |
163 |
|
164 |
|
165 | flags?: Flags;
|
166 | |
167 |
|
168 |
|
169 | help?: false | HelpOptions;
|
170 | };
|
171 | declare type kebabToCamel<Word extends string> = (Word extends `${infer Prefix}-${infer Suffix}` | `${infer Prefix} ${infer Suffix}` ? `${Prefix}${Capitalize<kebabToCamel<Suffix>>}` : Word);
|
172 | declare type StripBrackets<Parameter extends string> = (Parameter extends `<${infer ParameterName}>` | `[${infer ParameterName}]` ? (ParameterName extends `${infer SpreadName}...` ? SpreadName : ParameterName) : never);
|
173 | declare type ParameterType<Parameter extends string> = (Parameter extends `<${infer _ParameterName}...>` | `[${infer _ParameterName}...]` ? string[] : Parameter extends `<${infer _ParameterName}>` ? string : Parameter extends `[${infer _ParameterName}]` ? string | undefined : never);
|
174 | declare type WithCommand<Options extends {
|
175 | flags?: Flags;
|
176 | }, Command extends string | undefined = undefined> = {
|
177 | command: Command;
|
178 | } & Options;
|
179 | declare type TypeFlagWrapper<Options extends {
|
180 | flags?: Flags;
|
181 | }, Parameters extends string[]> = TypeFlag<HasHelpOrVersion<Options>> & {
|
182 | _: {
|
183 | [Parameter in Parameters[number] as kebabToCamel<StripBrackets<Parameter>>]: ParameterType<Parameter>;
|
184 | };
|
185 | showHelp: (options?: HelpOptions) => void;
|
186 | showVersion: () => void;
|
187 | };
|
188 | declare type ParseArgv<Options extends {
|
189 | flags?: Flags;
|
190 | }, Parameters extends string[], Command extends string | undefined = ''> = (Command extends '' ? TypeFlagWrapper<Options, Parameters> : WithCommand<TypeFlagWrapper<Options, Parameters>, Command>);
|
191 |
|
192 | declare function cli<Options extends CliOptions<undefined, [...Parameters]>, Parameters extends string[]>(options: Options & CliOptions<undefined, [...Parameters]>, callback?: CallbackFunction<ParseArgv<Options, Parameters>>, argv?: string[]): {
|
193 | [Key in keyof ParseArgv<Options, Parameters, undefined>]: ParseArgv<Options, Parameters, undefined>[Key];
|
194 | };
|
195 | declare function cli<Options extends CliOptions<[...Commands], [...Parameters]>, Commands extends Command[], Parameters extends string[]>(options: Options & CliOptions<[...Commands], [...Parameters]>, callback?: CallbackFunction<ParseArgv<Options, Parameters>>, argv?: string[]): ({
|
196 | [Key in keyof ParseArgv<Options, Parameters, undefined>]: ParseArgv<Options, Parameters, undefined>[Key];
|
197 | } | {
|
198 | [KeyA in keyof Commands]: (Commands[KeyA] extends Command ? ({
|
199 | [KeyB in keyof Commands[KeyA][typeof parsedType]]: Commands[KeyA][typeof parsedType][KeyB];
|
200 | }) : never);
|
201 | }[number]);
|
202 |
|
203 | export { cli, command };
|