@cloud-copilot/cli 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +21 -0
- package/README.md +258 -0
- package/dist/cjs/cli.d.ts +140 -0
- package/dist/cjs/cli.d.ts.map +1 -0
- package/dist/cjs/cli.js +546 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +10 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/stdin.d.ts +7 -0
- package/dist/cjs/stdin.d.ts.map +1 -0
- package/dist/cjs/stdin.js +36 -0
- package/dist/cjs/stdin.js.map +1 -0
- package/dist/cjs/utils.d.ts +8 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +21 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/cli.d.ts +140 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +541 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/stdin.d.ts +7 -0
- package/dist/esm/stdin.d.ts.map +1 -0
- package/dist/esm/stdin.js +33 -0
- package/dist/esm/stdin.js.map +1 -0
- package/dist/esm/utils.d.ts +8 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +18 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +45 -0
package/dist/esm/cli.js
ADDED
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
import { exit } from './utils.js';
|
|
2
|
+
function isBooleanOption(option) {
|
|
3
|
+
return option.values === 'none';
|
|
4
|
+
}
|
|
5
|
+
function isEnumOption(option) {
|
|
6
|
+
return option.type === 'enum';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Create a type safe configuration for CLI arguments.
|
|
10
|
+
*
|
|
11
|
+
* @param config the configuration for the CLI arguments.
|
|
12
|
+
* @returns the configuration object.
|
|
13
|
+
*/
|
|
14
|
+
export function createConfig(config) {
|
|
15
|
+
return config;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse CLI Arguments and return the parsed typesafe results.
|
|
19
|
+
*
|
|
20
|
+
* @param command the name of the command arguments are being parsed for.
|
|
21
|
+
* @param subcommands the list of subcommands that can be used, if any.
|
|
22
|
+
* @param cliOptions the configuration options for the CLI command.
|
|
23
|
+
* @param additionalArgs additional arguments to be used for parsing and displaying help.
|
|
24
|
+
* @returns the parsed arguments, operands, and subcommand if applicable.
|
|
25
|
+
*/
|
|
26
|
+
export function parseCliArguments(command, subcommands, cliOptions, additionalArgs) {
|
|
27
|
+
const args = additionalArgs?.args ?? process.argv.slice(2);
|
|
28
|
+
const env = additionalArgs?.env ?? process.env;
|
|
29
|
+
const parsedArgs = {};
|
|
30
|
+
const operands = [];
|
|
31
|
+
const booleanOptions = {};
|
|
32
|
+
const subcommandKeys = Object.keys(subcommands);
|
|
33
|
+
const numberOfSubcommands = subcommandKeys.length;
|
|
34
|
+
const combinedOptions = { ...cliOptions };
|
|
35
|
+
let subcommand;
|
|
36
|
+
if (args.length === 0 && additionalArgs?.showHelpIfNoArgs) {
|
|
37
|
+
printHelpContents(command, subcommands, cliOptions, additionalArgs);
|
|
38
|
+
exit(0, undefined);
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
// Step 1: Initialize defaults
|
|
42
|
+
initializeOptionDefaults(parsedArgs, booleanOptions, cliOptions);
|
|
43
|
+
// Step 2: Handle environment variables
|
|
44
|
+
parseEnvironmentVariables(cliOptions, parsedArgs, env, additionalArgs?.envPrefix);
|
|
45
|
+
if (additionalArgs?.envPrefix) {
|
|
46
|
+
const prefix = additionalArgs.envPrefix + '_';
|
|
47
|
+
const envToKeys = Object.keys(cliOptions).reduce((acc, key) => {
|
|
48
|
+
acc[camelToCapitalSnakeCase(key)] = key;
|
|
49
|
+
return acc;
|
|
50
|
+
}, {});
|
|
51
|
+
for (const [key, value] of Object.entries(env)) {
|
|
52
|
+
if (key.startsWith(prefix)) {
|
|
53
|
+
const optionKey = key.slice(prefix.length);
|
|
54
|
+
const option = envToKeys[optionKey];
|
|
55
|
+
if (option) {
|
|
56
|
+
const config = combinedOptions[option];
|
|
57
|
+
if (isEnumOption(config)) {
|
|
58
|
+
if (config.values === 'single') {
|
|
59
|
+
const matchingValue = config.validValues.find((v) => v.toLowerCase() === value.toLowerCase());
|
|
60
|
+
if (!matchingValue) {
|
|
61
|
+
exit(2, `Environment ${key} allows only the following values: ${config.validValues.join(', ')}`);
|
|
62
|
+
}
|
|
63
|
+
parsedArgs[option] = matchingValue;
|
|
64
|
+
}
|
|
65
|
+
else if (config.values === 'multiple') {
|
|
66
|
+
const invalidValues = [];
|
|
67
|
+
const validValues = [];
|
|
68
|
+
const values = value.split(' ');
|
|
69
|
+
for (const v of values) {
|
|
70
|
+
const matchingValue = config.validValues.find((valid) => valid.toLowerCase() === v.toLowerCase());
|
|
71
|
+
if (matchingValue) {
|
|
72
|
+
validValues.push(matchingValue);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
invalidValues.push(value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (invalidValues.length > 0) {
|
|
79
|
+
exit(2, `Environment ${key} allows only the following values: ${config.validValues.join(', ')}`);
|
|
80
|
+
}
|
|
81
|
+
parsedArgs[option] = validValues;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else if (config.values === 'none') {
|
|
85
|
+
parsedArgs[option] = true;
|
|
86
|
+
}
|
|
87
|
+
else if (config.values === 'single') {
|
|
88
|
+
const { parsed, invalid } = validateTypes(config.type, value);
|
|
89
|
+
if (invalid.length > 0) {
|
|
90
|
+
exit(2, `Environment ${key} expects a valid ${config.type}, but received: ${invalid.join(', ')}`);
|
|
91
|
+
}
|
|
92
|
+
parsedArgs[option] = parsed;
|
|
93
|
+
}
|
|
94
|
+
else if (config.values === 'multiple') {
|
|
95
|
+
const values = value.split(' ');
|
|
96
|
+
const { parsed, invalid } = validateTypes(config.type, values);
|
|
97
|
+
if (invalid.length > 0) {
|
|
98
|
+
exit(2, `Environment ${key} expects a valid ${config.type}, but received: ${invalid.join(', ')}`);
|
|
99
|
+
}
|
|
100
|
+
parsedArgs[option] = parsed;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Step 3: Group arguments into objects
|
|
107
|
+
const commandChunks = groupArguments(args);
|
|
108
|
+
// Step 4: Validation and parsing arguments
|
|
109
|
+
for (const { first, rest, isLast, isFirst } of commandChunks) {
|
|
110
|
+
// Handle --help and --version
|
|
111
|
+
if (first === '--help') {
|
|
112
|
+
printHelpContents(command, subcommands, cliOptions, additionalArgs, subcommand);
|
|
113
|
+
exit(0, undefined);
|
|
114
|
+
}
|
|
115
|
+
if (first === '--version') {
|
|
116
|
+
if (additionalArgs?.version) {
|
|
117
|
+
exit(0, additionalArgs?.version);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Handle commands if applicable
|
|
121
|
+
if (isFirst && !first.startsWith('-')) {
|
|
122
|
+
if (numberOfSubcommands === 0) {
|
|
123
|
+
if (isLast) {
|
|
124
|
+
operands.push(first, ...rest);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
exit(2, `Invalid: ${first}, all options must specified using a --argument`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
if (!isLast && rest.length > 0) {
|
|
132
|
+
exit(2, `Options must be specified using a --argument, ${rest.join(' ')} is ambiguous`);
|
|
133
|
+
}
|
|
134
|
+
const matchingCommands = subcommandKeys.filter((cmd) => cmd.toLowerCase().startsWith(first.toLowerCase()));
|
|
135
|
+
if (matchingCommands.length === 0) {
|
|
136
|
+
exit(2, `Unknown command: ${first}`);
|
|
137
|
+
return {};
|
|
138
|
+
}
|
|
139
|
+
else if (matchingCommands.length > 1) {
|
|
140
|
+
exit(2, `Ambiguous command: ${first}`);
|
|
141
|
+
return {};
|
|
142
|
+
}
|
|
143
|
+
subcommand = matchingCommands.at(0);
|
|
144
|
+
const subcommandOptions = subcommands[subcommand].options;
|
|
145
|
+
initializeOptionDefaults(parsedArgs, booleanOptions, subcommandOptions);
|
|
146
|
+
parseEnvironmentVariables(subcommandOptions, parsedArgs, env, additionalArgs?.envPrefix);
|
|
147
|
+
for (const [key, option] of Object.entries(subcommandOptions)) {
|
|
148
|
+
combinedOptions[key] = option;
|
|
149
|
+
}
|
|
150
|
+
operands.push(...rest);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Validate options
|
|
154
|
+
if (first == '--') {
|
|
155
|
+
operands.push(...rest);
|
|
156
|
+
}
|
|
157
|
+
else if (first.startsWith('--')) {
|
|
158
|
+
const key = first.slice(2).replaceAll('-', '').toLowerCase();
|
|
159
|
+
const matchingOptions = Object.keys(combinedOptions).filter((k) => k.toLowerCase().startsWith(key));
|
|
160
|
+
let matchingOption = undefined;
|
|
161
|
+
if (matchingOptions.length === 1) {
|
|
162
|
+
matchingOption = matchingOptions[0];
|
|
163
|
+
}
|
|
164
|
+
else if (matchingOptions.length > 1) {
|
|
165
|
+
exit(2, `Ambiguous argument: ${first}`);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
exit(2, `Unknown argument: ${first}`);
|
|
169
|
+
}
|
|
170
|
+
if (!matchingOption) {
|
|
171
|
+
exit(2, `Unknown option: ${first}`);
|
|
172
|
+
return {};
|
|
173
|
+
}
|
|
174
|
+
const optionConfig = combinedOptions[matchingOption];
|
|
175
|
+
if (isEnumOption(optionConfig)) {
|
|
176
|
+
if (rest.length === 0) {
|
|
177
|
+
if (optionConfig.values === 'single') {
|
|
178
|
+
exit(2, `Option ${first} expects a value, but received none`);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
exit(2, `Option ${first} expects at least one value, but received none`);
|
|
182
|
+
}
|
|
183
|
+
return {};
|
|
184
|
+
}
|
|
185
|
+
if (optionConfig.values === 'single') {
|
|
186
|
+
if (rest.length > 1 && !isLast) {
|
|
187
|
+
exit(2, `Option ${first} expects a single value, but received multiple: ${rest.join(', ')}`);
|
|
188
|
+
}
|
|
189
|
+
const value = rest[0];
|
|
190
|
+
const matchingValue = optionConfig.validValues.find((v) => v.toLowerCase() === value.toLowerCase());
|
|
191
|
+
if (!matchingValue) {
|
|
192
|
+
exit(2, `Option ${first} allows only the following values: ${optionConfig.validValues.join(', ')}`);
|
|
193
|
+
}
|
|
194
|
+
parsedArgs[matchingOption] = matchingValue;
|
|
195
|
+
operands.push(...rest.slice(1));
|
|
196
|
+
}
|
|
197
|
+
else if (optionConfig.values === 'multiple') {
|
|
198
|
+
const invalidValues = [];
|
|
199
|
+
const validValues = [];
|
|
200
|
+
for (const value of rest) {
|
|
201
|
+
const matchingValue = optionConfig.validValues.find((v) => v.toLowerCase() === value.toLowerCase());
|
|
202
|
+
if (matchingValue) {
|
|
203
|
+
validValues.push(matchingValue);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
invalidValues.push(value);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (invalidValues.length > 0) {
|
|
210
|
+
exit(2, `Option ${first} allows only the following values: ${optionConfig.validValues.join(', ')}`);
|
|
211
|
+
}
|
|
212
|
+
parsedArgs[matchingOption] = validValues;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else if (optionConfig.values === 'none') {
|
|
216
|
+
//set boolean value
|
|
217
|
+
parsedArgs[matchingOption] = true;
|
|
218
|
+
//Handle extra values
|
|
219
|
+
if (rest.length > 0) {
|
|
220
|
+
if (!isLast) {
|
|
221
|
+
exit(2, `Boolean option ${first} does not accept values`);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
operands.push(...rest);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else if (optionConfig.values === 'single') {
|
|
229
|
+
if (rest.length === 0) {
|
|
230
|
+
exit(2, `Option ${first} expects a value, but received none`);
|
|
231
|
+
}
|
|
232
|
+
//Validate the value
|
|
233
|
+
const { parsed, invalid } = validateTypes(optionConfig.type, rest[0]);
|
|
234
|
+
if (invalid.length > 0) {
|
|
235
|
+
exit(2, `Option ${first} expects a valid ${optionConfig.type}, but received: ${invalid.join(', ')}`);
|
|
236
|
+
}
|
|
237
|
+
//Set the value
|
|
238
|
+
parsedArgs[matchingOption] = parsed;
|
|
239
|
+
if (rest.length > 1) {
|
|
240
|
+
if (!isLast) {
|
|
241
|
+
exit(2, `Option ${first} expects a single value, but received multiple: ${rest.join(', ')}`);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
operands.push(...rest.slice(1));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (optionConfig.values === 'multiple') {
|
|
249
|
+
if (rest.length === 0) {
|
|
250
|
+
exit(2, `Option ${first} expects at least one value, but received none`);
|
|
251
|
+
}
|
|
252
|
+
//Set the Value
|
|
253
|
+
//Validate the value
|
|
254
|
+
const { parsed, invalid } = validateTypes(optionConfig.type, rest);
|
|
255
|
+
if (invalid.length > 0) {
|
|
256
|
+
exit(2, `Option ${first} expects a valid ${optionConfig.type}, but received: ${invalid.join(', ')}`);
|
|
257
|
+
}
|
|
258
|
+
parsedArgs[matchingOption] = parsed;
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
throw new Error(`Unrecognized option values ${optionConfig.values}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else if (first.startsWith('-')) {
|
|
265
|
+
if (rest.length > 0 && !isLast) {
|
|
266
|
+
exit(2, `Boolean option(s) ${first} should not have values`);
|
|
267
|
+
return {};
|
|
268
|
+
}
|
|
269
|
+
else if (isLast) {
|
|
270
|
+
operands.push(...rest);
|
|
271
|
+
}
|
|
272
|
+
// Short options (-s, -spq)
|
|
273
|
+
for (const char of first.slice(1)) {
|
|
274
|
+
if (!(char in booleanOptions)) {
|
|
275
|
+
exit(2, `Unknown flag: -${char}`);
|
|
276
|
+
}
|
|
277
|
+
const key = booleanOptions[char];
|
|
278
|
+
parsedArgs[key] = true;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (numberOfSubcommands > 0 && additionalArgs?.requireSubcommand && !subcommand) {
|
|
283
|
+
exit(2, `A subcommand is required`);
|
|
284
|
+
}
|
|
285
|
+
// Step 4: Return results
|
|
286
|
+
return { args: parsedArgs, operands, command: subcommand, anyValues: args.length > 0 };
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Initialize the default values for arguments
|
|
290
|
+
*
|
|
291
|
+
* @param parsedArgs the parsed arguments to default the values in
|
|
292
|
+
* @param cliOptions the configuration options for the CLI commands
|
|
293
|
+
*/
|
|
294
|
+
function initializeOptionDefaults(parsedArgs, booleanOptions, cliOptions) {
|
|
295
|
+
for (const [key, option] of Object.entries(cliOptions)) {
|
|
296
|
+
if (option.values === 'none') {
|
|
297
|
+
parsedArgs[key] = false; //(option as BooleanOption).default
|
|
298
|
+
if (option.character) {
|
|
299
|
+
booleanOptions[option.character.toLowerCase()] = key;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else if (option.values === 'single') {
|
|
303
|
+
parsedArgs[key] = undefined;
|
|
304
|
+
}
|
|
305
|
+
else if (option.values === 'multiple') {
|
|
306
|
+
parsedArgs[key] = [];
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Parse environment variables and set the values in the parsed arguments.
|
|
312
|
+
*
|
|
313
|
+
* @param options the configuration options for the CLI commands
|
|
314
|
+
* @param parsedArgs the parsed arguments to set the values in
|
|
315
|
+
* @param env the environment variables to get values from
|
|
316
|
+
* @param envPrefix the prefix to use for environment variables, if any
|
|
317
|
+
*/
|
|
318
|
+
function parseEnvironmentVariables(options, parsedArgs, env, envPrefix) {
|
|
319
|
+
if (!envPrefix) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const prefix = envPrefix + '_';
|
|
323
|
+
const envToKeys = Object.keys(options).reduce((acc, key) => {
|
|
324
|
+
acc[camelToCapitalSnakeCase(key)] = key;
|
|
325
|
+
return acc;
|
|
326
|
+
}, {});
|
|
327
|
+
for (const [key, value] of Object.entries(env)) {
|
|
328
|
+
if (key.startsWith(prefix)) {
|
|
329
|
+
const optionKey = key.slice(prefix.length);
|
|
330
|
+
const option = envToKeys[optionKey];
|
|
331
|
+
if (option) {
|
|
332
|
+
const config = options[option];
|
|
333
|
+
if (isEnumOption(config)) {
|
|
334
|
+
if (config.values === 'single') {
|
|
335
|
+
const matchingValue = config.validValues.find((v) => v.toLowerCase() === value.toLowerCase());
|
|
336
|
+
if (!matchingValue) {
|
|
337
|
+
exit(2, `Environment ${key} allows only the following values: ${config.validValues.join(', ')}`);
|
|
338
|
+
}
|
|
339
|
+
parsedArgs[option] = matchingValue;
|
|
340
|
+
}
|
|
341
|
+
else if (config.values === 'multiple') {
|
|
342
|
+
const invalidValues = [];
|
|
343
|
+
const validValues = [];
|
|
344
|
+
const values = value.split(' ');
|
|
345
|
+
for (const v of values) {
|
|
346
|
+
const matchingValue = config.validValues.find((valid) => valid.toLowerCase() === v.toLowerCase());
|
|
347
|
+
if (matchingValue) {
|
|
348
|
+
validValues.push(matchingValue);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
invalidValues.push(value);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
if (invalidValues.length > 0) {
|
|
355
|
+
exit(2, `Environment ${key} allows only the following values: ${config.validValues.join(', ')}`);
|
|
356
|
+
}
|
|
357
|
+
parsedArgs[option] = validValues;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
else if (config.values === 'none') {
|
|
361
|
+
parsedArgs[option] = true;
|
|
362
|
+
}
|
|
363
|
+
else if (config.values === 'single') {
|
|
364
|
+
const { parsed, invalid } = validateTypes(config.type, value);
|
|
365
|
+
if (invalid.length > 0) {
|
|
366
|
+
exit(2, `Environment ${key} expects a valid ${config.type}, but received: ${invalid.join(', ')}`);
|
|
367
|
+
}
|
|
368
|
+
parsedArgs[option] = parsed;
|
|
369
|
+
}
|
|
370
|
+
else if (config.values === 'multiple') {
|
|
371
|
+
const values = value.split(' ');
|
|
372
|
+
const { parsed, invalid } = validateTypes(config.type, values);
|
|
373
|
+
if (invalid.length > 0) {
|
|
374
|
+
exit(2, `Environment ${key} expects a valid ${config.type}, but received: ${invalid.join(', ')}`);
|
|
375
|
+
}
|
|
376
|
+
parsedArgs[option] = parsed;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Groups arguments into chunks based on the -- separator.
|
|
384
|
+
*
|
|
385
|
+
* @param args
|
|
386
|
+
* @returns
|
|
387
|
+
*/
|
|
388
|
+
function groupArguments(args) {
|
|
389
|
+
const grouped = [];
|
|
390
|
+
let currentChunk = [];
|
|
391
|
+
for (let i = 0; i < args.length; i++) {
|
|
392
|
+
const arg = args[i];
|
|
393
|
+
if (arg === '--') {
|
|
394
|
+
grouped.push({
|
|
395
|
+
first: arg,
|
|
396
|
+
rest: args.slice(i + 1),
|
|
397
|
+
isFirst: grouped.length === 0,
|
|
398
|
+
isLast: true
|
|
399
|
+
});
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
if (arg.startsWith('-') && currentChunk.length > 0) {
|
|
403
|
+
grouped.push({
|
|
404
|
+
first: currentChunk.at(0),
|
|
405
|
+
rest: currentChunk.slice(1),
|
|
406
|
+
isFirst: grouped.length === 0,
|
|
407
|
+
isLast: false
|
|
408
|
+
});
|
|
409
|
+
currentChunk = [];
|
|
410
|
+
}
|
|
411
|
+
currentChunk.push(arg);
|
|
412
|
+
}
|
|
413
|
+
if (currentChunk.length > 0) {
|
|
414
|
+
grouped.push({
|
|
415
|
+
first: currentChunk.at(0),
|
|
416
|
+
rest: currentChunk.slice(1),
|
|
417
|
+
isFirst: grouped.length === 0,
|
|
418
|
+
isLast: true
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
return grouped;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Validate the types of a standard argument
|
|
425
|
+
*
|
|
426
|
+
* @param type the type the argument accepts
|
|
427
|
+
* @param values the values to validate
|
|
428
|
+
* @returns an object with the invalid values and the parsed values
|
|
429
|
+
*/
|
|
430
|
+
function validateTypes(type, values) {
|
|
431
|
+
if (type === 'string') {
|
|
432
|
+
return { invalid: [], parsed: values };
|
|
433
|
+
}
|
|
434
|
+
if (!Array.isArray(values)) {
|
|
435
|
+
const isValid = !isNaN(Number(values));
|
|
436
|
+
if (isValid) {
|
|
437
|
+
return { invalid: [], parsed: Number(values) };
|
|
438
|
+
}
|
|
439
|
+
return { invalid: [values], parsed: 0 };
|
|
440
|
+
}
|
|
441
|
+
const invalid = values.filter((v) => isNaN(Number(v)));
|
|
442
|
+
if (invalid.length > 0) {
|
|
443
|
+
return { invalid, parsed: [] };
|
|
444
|
+
}
|
|
445
|
+
return { invalid: [], parsed: values.map(Number) };
|
|
446
|
+
}
|
|
447
|
+
function camelToCapitalSnakeCase(input) {
|
|
448
|
+
return input
|
|
449
|
+
.replace(/([a-z])([A-Z])/g, '$1_$2') // Insert underscore before capital letters
|
|
450
|
+
.toUpperCase(); // Convert to uppercase
|
|
451
|
+
}
|
|
452
|
+
function camelToKebabCase(input) {
|
|
453
|
+
return input
|
|
454
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2') // Insert underscore before capital letters
|
|
455
|
+
.toLowerCase(); // Convert to uppercase
|
|
456
|
+
}
|
|
457
|
+
export function printHelpContents(command, subcommands, cliOptions, additionalArgs, selectedSubcommand) {
|
|
458
|
+
const operandsName = additionalArgs?.operandsName ?? 'operands';
|
|
459
|
+
if (selectedSubcommand) {
|
|
460
|
+
let usageString = `Usage: ${command} ${selectedSubcommand} [options] [flags] [--] [${operandsName}1] [${operandsName}2]`;
|
|
461
|
+
console.log(usageString);
|
|
462
|
+
console.log(`\n${subcommands[selectedSubcommand].description}`);
|
|
463
|
+
console.log(`${selectedSubcommand} Options:`);
|
|
464
|
+
printOptions(subcommands[selectedSubcommand].options);
|
|
465
|
+
console.log('');
|
|
466
|
+
}
|
|
467
|
+
else {
|
|
468
|
+
let usageString = `Usage: ${command}`;
|
|
469
|
+
const subcommandKeys = Object.keys(subcommands);
|
|
470
|
+
if (subcommandKeys.length > 0 && additionalArgs?.requireSubcommand) {
|
|
471
|
+
usageString += ' <subcommand>';
|
|
472
|
+
}
|
|
473
|
+
else if (subcommandKeys.length > 0) {
|
|
474
|
+
usageString += ' [subcommand]';
|
|
475
|
+
}
|
|
476
|
+
usageString += ` [options] [flags] [--] [${operandsName}1] [${operandsName}2]`;
|
|
477
|
+
console.log(usageString);
|
|
478
|
+
const longestCommand = subcommandKeys.reduce((acc, cmd) => Math.max(acc, cmd.length), 0);
|
|
479
|
+
if (subcommandKeys.length > 0) {
|
|
480
|
+
console.log('Commands:');
|
|
481
|
+
for (const cmd of subcommandKeys) {
|
|
482
|
+
const description = subcommands[cmd].description;
|
|
483
|
+
console.log(` ${(cmd + ':').padEnd(longestCommand + 1)} ${description}`);
|
|
484
|
+
}
|
|
485
|
+
console.log(`\n Use ${command} <subcommand> --help for more information about a subcommand`);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
console.log('Global Options:');
|
|
489
|
+
const globalOptions = {
|
|
490
|
+
...cliOptions,
|
|
491
|
+
...{
|
|
492
|
+
help: {
|
|
493
|
+
description: 'Print the help contents and exit'
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
if (additionalArgs?.version) {
|
|
498
|
+
globalOptions['version'] = {
|
|
499
|
+
description: 'Print the version and exit'
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
printOptions(globalOptions);
|
|
503
|
+
}
|
|
504
|
+
function printOptions(cliOptions) {
|
|
505
|
+
const longestOption = Object.keys(cliOptions).reduce((acc, key) => Math.max(acc, camelToKebabCase(key).length + 2), 0) + 1;
|
|
506
|
+
const terminalWidth = process.stdout.columns ?? 80;
|
|
507
|
+
const nonBooleanBuffer = ' ';
|
|
508
|
+
for (const [key, option] of Object.entries(cliOptions)) {
|
|
509
|
+
let optionString = ` --${camelToKebabCase(key)}:`.padEnd(longestOption + 3);
|
|
510
|
+
if (isBooleanOption(option)) {
|
|
511
|
+
optionString += `(-${option.character}) `;
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
optionString += nonBooleanBuffer;
|
|
515
|
+
}
|
|
516
|
+
const leftBar = optionString.length;
|
|
517
|
+
optionString += option.description + '. ';
|
|
518
|
+
if (isEnumOption(option)) {
|
|
519
|
+
if (option.values === 'single') {
|
|
520
|
+
optionString += `Must be one of: ${option.validValues.join(', ')}.`;
|
|
521
|
+
}
|
|
522
|
+
else {
|
|
523
|
+
optionString += `Valid values: ${option.validValues.join(', ')}.`;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
else if (option.values === 'single') {
|
|
527
|
+
optionString += `One ${option.type} required`;
|
|
528
|
+
}
|
|
529
|
+
else if (option.values === 'multiple') {
|
|
530
|
+
optionString += `Multiple ${option.type}s allowed`;
|
|
531
|
+
}
|
|
532
|
+
console.log(optionString.slice(0, terminalWidth));
|
|
533
|
+
let stringToPrint = optionString.slice(terminalWidth);
|
|
534
|
+
const secondLineLength = terminalWidth - leftBar;
|
|
535
|
+
while (stringToPrint.length > 0) {
|
|
536
|
+
console.log(' '.repeat(leftBar) + stringToPrint.slice(0, secondLineLength));
|
|
537
|
+
stringToPrint = stringToPrint.slice(secondLineLength);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,MAAM,EACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EAGlB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin.d.ts","sourceRoot":"","sources":["../../src/stdin.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B7E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { stdin } from 'process';
|
|
2
|
+
/**
|
|
3
|
+
* Read from stdin until the stream ends, timeout, or an error occurs
|
|
4
|
+
*
|
|
5
|
+
* @returns the string input from stdin
|
|
6
|
+
*/
|
|
7
|
+
export async function readStdin(readWait) {
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
// If the input is not a TTY, we are most likely receiving data from a pipe.
|
|
10
|
+
const definitelyReceivingData = !process.stdin.isTTY;
|
|
11
|
+
if (!readWait || readWait <= 0) {
|
|
12
|
+
readWait = definitelyReceivingData ? 10000 : 20;
|
|
13
|
+
}
|
|
14
|
+
let data = '';
|
|
15
|
+
const timeout = setTimeout(() => {
|
|
16
|
+
if (data.length === 0) {
|
|
17
|
+
resolve(data);
|
|
18
|
+
}
|
|
19
|
+
}, readWait);
|
|
20
|
+
stdin.on('data', (chunk) => {
|
|
21
|
+
data += chunk;
|
|
22
|
+
});
|
|
23
|
+
stdin.on('end', () => {
|
|
24
|
+
resolve(data);
|
|
25
|
+
clearTimeout(timeout);
|
|
26
|
+
});
|
|
27
|
+
stdin.on('error', (err) => {
|
|
28
|
+
reject(err);
|
|
29
|
+
clearTimeout(timeout);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=stdin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/stdin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAA4B;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,4EAA4E;QAC5E,MAAM,uBAAuB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAA;QACpD,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAC/B,QAAQ,GAAG,uBAAuB,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QAClD,CAAC;QAED,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,CAAA;YACf,CAAC;QACH,CAAC,EAAE,QAAQ,CAAC,CAAA;QAEZ,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,CAAA;YACb,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,CAAA;YACX,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optionally print a message and exit the process with the given exit code.
|
|
3
|
+
*
|
|
4
|
+
* @param exitCode the exit code to use
|
|
5
|
+
* @param message the message to print
|
|
6
|
+
*/
|
|
7
|
+
export declare function exit(exitCode: number, message: string | undefined): void;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,QASjE"}
|