@actsecurity/cli 0.2.66

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.
Files changed (117) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +143 -0
  3. package/dist/cjs/arguments/argument.d.ts +63 -0
  4. package/dist/cjs/arguments/argument.d.ts.map +1 -0
  5. package/dist/cjs/arguments/argument.js +3 -0
  6. package/dist/cjs/arguments/argument.js.map +1 -0
  7. package/dist/cjs/arguments/arrayValueArgument.d.ts +17 -0
  8. package/dist/cjs/arguments/arrayValueArgument.d.ts.map +1 -0
  9. package/dist/cjs/arguments/arrayValueArgument.js +38 -0
  10. package/dist/cjs/arguments/arrayValueArgument.js.map +1 -0
  11. package/dist/cjs/arguments/booleanArgument.d.ts +11 -0
  12. package/dist/cjs/arguments/booleanArgument.d.ts.map +1 -0
  13. package/dist/cjs/arguments/booleanArgument.js +25 -0
  14. package/dist/cjs/arguments/booleanArgument.js.map +1 -0
  15. package/dist/cjs/arguments/enumArgument.d.ts +20 -0
  16. package/dist/cjs/arguments/enumArgument.d.ts.map +1 -0
  17. package/dist/cjs/arguments/enumArgument.js +35 -0
  18. package/dist/cjs/arguments/enumArgument.js.map +1 -0
  19. package/dist/cjs/arguments/enumArrayArgument.d.ts +20 -0
  20. package/dist/cjs/arguments/enumArrayArgument.d.ts.map +1 -0
  21. package/dist/cjs/arguments/enumArrayArgument.js +43 -0
  22. package/dist/cjs/arguments/enumArrayArgument.js.map +1 -0
  23. package/dist/cjs/arguments/mapArgument.d.ts +20 -0
  24. package/dist/cjs/arguments/mapArgument.d.ts.map +1 -0
  25. package/dist/cjs/arguments/mapArgument.js +35 -0
  26. package/dist/cjs/arguments/mapArgument.js.map +1 -0
  27. package/dist/cjs/arguments/numberArguments.d.ts +17 -0
  28. package/dist/cjs/arguments/numberArguments.d.ts.map +1 -0
  29. package/dist/cjs/arguments/numberArguments.js +15 -0
  30. package/dist/cjs/arguments/numberArguments.js.map +1 -0
  31. package/dist/cjs/arguments/singleValueArgument.d.ts +17 -0
  32. package/dist/cjs/arguments/singleValueArgument.d.ts.map +1 -0
  33. package/dist/cjs/arguments/singleValueArgument.js +35 -0
  34. package/dist/cjs/arguments/singleValueArgument.js.map +1 -0
  35. package/dist/cjs/arguments/stringArguments.d.ts +17 -0
  36. package/dist/cjs/arguments/stringArguments.d.ts.map +1 -0
  37. package/dist/cjs/arguments/stringArguments.js +14 -0
  38. package/dist/cjs/arguments/stringArguments.js.map +1 -0
  39. package/dist/cjs/cli.d.ts +131 -0
  40. package/dist/cjs/cli.d.ts.map +1 -0
  41. package/dist/cjs/cli.js +499 -0
  42. package/dist/cjs/cli.js.map +1 -0
  43. package/dist/cjs/index.d.ts +13 -0
  44. package/dist/cjs/index.d.ts.map +1 -0
  45. package/dist/cjs/index.js +28 -0
  46. package/dist/cjs/index.js.map +1 -0
  47. package/dist/cjs/package.json +3 -0
  48. package/dist/cjs/readRelative.d.ts +35 -0
  49. package/dist/cjs/readRelative.d.ts.map +1 -0
  50. package/dist/cjs/readRelative.js +81 -0
  51. package/dist/cjs/readRelative.js.map +1 -0
  52. package/dist/cjs/stdin.d.ts +7 -0
  53. package/dist/cjs/stdin.d.ts.map +1 -0
  54. package/dist/cjs/stdin.js +38 -0
  55. package/dist/cjs/stdin.js.map +1 -0
  56. package/dist/cjs/utils.d.ts +14 -0
  57. package/dist/cjs/utils.d.ts.map +1 -0
  58. package/dist/cjs/utils.js +21 -0
  59. package/dist/cjs/utils.js.map +1 -0
  60. package/dist/esm/arguments/argument.d.ts +63 -0
  61. package/dist/esm/arguments/argument.d.ts.map +1 -0
  62. package/dist/esm/arguments/argument.js +2 -0
  63. package/dist/esm/arguments/argument.js.map +1 -0
  64. package/dist/esm/arguments/arrayValueArgument.d.ts +17 -0
  65. package/dist/esm/arguments/arrayValueArgument.d.ts.map +1 -0
  66. package/dist/esm/arguments/arrayValueArgument.js +36 -0
  67. package/dist/esm/arguments/arrayValueArgument.js.map +1 -0
  68. package/dist/esm/arguments/booleanArgument.d.ts +11 -0
  69. package/dist/esm/arguments/booleanArgument.d.ts.map +1 -0
  70. package/dist/esm/arguments/booleanArgument.js +23 -0
  71. package/dist/esm/arguments/booleanArgument.js.map +1 -0
  72. package/dist/esm/arguments/enumArgument.d.ts +20 -0
  73. package/dist/esm/arguments/enumArgument.d.ts.map +1 -0
  74. package/dist/esm/arguments/enumArgument.js +34 -0
  75. package/dist/esm/arguments/enumArgument.js.map +1 -0
  76. package/dist/esm/arguments/enumArrayArgument.d.ts +20 -0
  77. package/dist/esm/arguments/enumArrayArgument.d.ts.map +1 -0
  78. package/dist/esm/arguments/enumArrayArgument.js +42 -0
  79. package/dist/esm/arguments/enumArrayArgument.js.map +1 -0
  80. package/dist/esm/arguments/mapArgument.d.ts +20 -0
  81. package/dist/esm/arguments/mapArgument.d.ts.map +1 -0
  82. package/dist/esm/arguments/mapArgument.js +33 -0
  83. package/dist/esm/arguments/mapArgument.js.map +1 -0
  84. package/dist/esm/arguments/numberArguments.d.ts +17 -0
  85. package/dist/esm/arguments/numberArguments.d.ts.map +1 -0
  86. package/dist/esm/arguments/numberArguments.js +13 -0
  87. package/dist/esm/arguments/numberArguments.js.map +1 -0
  88. package/dist/esm/arguments/singleValueArgument.d.ts +17 -0
  89. package/dist/esm/arguments/singleValueArgument.d.ts.map +1 -0
  90. package/dist/esm/arguments/singleValueArgument.js +33 -0
  91. package/dist/esm/arguments/singleValueArgument.js.map +1 -0
  92. package/dist/esm/arguments/stringArguments.d.ts +17 -0
  93. package/dist/esm/arguments/stringArguments.d.ts.map +1 -0
  94. package/dist/esm/arguments/stringArguments.js +11 -0
  95. package/dist/esm/arguments/stringArguments.js.map +1 -0
  96. package/dist/esm/cli.d.ts +131 -0
  97. package/dist/esm/cli.d.ts.map +1 -0
  98. package/dist/esm/cli.js +494 -0
  99. package/dist/esm/cli.js.map +1 -0
  100. package/dist/esm/index.d.ts +13 -0
  101. package/dist/esm/index.d.ts.map +1 -0
  102. package/dist/esm/index.js +13 -0
  103. package/dist/esm/index.js.map +1 -0
  104. package/dist/esm/package.json +3 -0
  105. package/dist/esm/readRelative.d.ts +35 -0
  106. package/dist/esm/readRelative.d.ts.map +1 -0
  107. package/dist/esm/readRelative.js +74 -0
  108. package/dist/esm/readRelative.js.map +1 -0
  109. package/dist/esm/stdin.d.ts +7 -0
  110. package/dist/esm/stdin.d.ts.map +1 -0
  111. package/dist/esm/stdin.js +35 -0
  112. package/dist/esm/stdin.js.map +1 -0
  113. package/dist/esm/utils.d.ts +14 -0
  114. package/dist/esm/utils.d.ts.map +1 -0
  115. package/dist/esm/utils.js +18 -0
  116. package/dist/esm/utils.js.map +1 -0
  117. package/package.json +114 -0
@@ -0,0 +1,494 @@
1
+ import {} from './arguments/argument.js';
2
+ import { exit } from './utils.js';
3
+ /**
4
+ * Parse CLI Arguments and return the parsed typesafe results.
5
+ *
6
+ * @param command the name of the command arguments are being parsed for.
7
+ * @param subcommands the list of subcommands that can be used, if any.
8
+ * @param cliArgs the configuration options for the CLI command.
9
+ * @param additionalOptions additional arguments to be used for parsing and displaying help.
10
+ * @returns the parsed arguments, operands, and subcommand if applicable.
11
+ */
12
+ export async function parseCliArguments(command, subcommands, cliArgs, additionalOptions) {
13
+ const args = additionalOptions?.args ?? process.argv.slice(2);
14
+ const env = additionalOptions?.env ?? process.env;
15
+ const parsedArgs = {};
16
+ const operands = [];
17
+ const booleanOptions = {};
18
+ const subcommandKeys = Object.keys(subcommands);
19
+ const numberOfSubcommands = subcommandKeys.length;
20
+ const combinedOptions = { ...cliArgs };
21
+ const logger = additionalOptions?.consoleLogger ?? console;
22
+ let subcommand;
23
+ const expectOperands = Object.hasOwn(additionalOptions || {}, 'expectOperands')
24
+ ? !!additionalOptions?.expectOperands
25
+ : true;
26
+ if (args.length === 0 && additionalOptions?.showHelpIfNoArgs) {
27
+ printHelpContents(command, subcommands, cliArgs, additionalOptions);
28
+ exit(0, undefined);
29
+ return {};
30
+ }
31
+ const allDefaults = {};
32
+ const isSetByCli = {};
33
+ // Step 1: Initialize defaults
34
+ const parsedEnvironmentArgs = {};
35
+ initializeOptionDefaults(allDefaults, booleanOptions, cliArgs);
36
+ // Step 2: Handle environment variables
37
+ await parseEnvironmentVariables(cliArgs, parsedEnvironmentArgs, env, additionalOptions?.envPrefix, isSetByCli);
38
+ // Step 3: Group arguments into objects
39
+ const commandChunks = groupArguments(args);
40
+ // Step 4: Validation and parsing arguments
41
+ for (const { first, rest, isLast, isFirst } of commandChunks) {
42
+ // Handle --help and --version
43
+ if (first === '--help') {
44
+ printHelpContents(command, subcommands, cliArgs, additionalOptions, subcommand);
45
+ exit(0, undefined);
46
+ return {};
47
+ }
48
+ if (first === '--version') {
49
+ if (additionalOptions?.version) {
50
+ await printVersion(additionalOptions.version, logger);
51
+ exit(0, undefined);
52
+ return {};
53
+ }
54
+ }
55
+ // Handle commands if applicable
56
+ if (isFirst && !first.startsWith('-')) {
57
+ if (numberOfSubcommands === 0) {
58
+ if (isLast) {
59
+ operands.push(first, ...rest);
60
+ }
61
+ else {
62
+ exit(2, `Invalid: ${first}, all arguments must specified using a --argument`);
63
+ }
64
+ }
65
+ else {
66
+ if (!isLast && rest.length > 0) {
67
+ exit(2, `Arguments must be specified using a --argument, ${rest.join(' ')} is ambiguous`);
68
+ }
69
+ const matchingCommands = subcommandKeys.filter((cmd) => cmd.toLowerCase().startsWith(first.toLowerCase()));
70
+ if (matchingCommands.length === 0) {
71
+ exit(2, `Unknown command: ${first}`);
72
+ return {};
73
+ }
74
+ else if (matchingCommands.length > 1) {
75
+ exit(2, `Ambiguous command: ${first}`);
76
+ return {};
77
+ }
78
+ subcommand = matchingCommands.at(0);
79
+ const subcommandOptions = subcommands[subcommand].arguments;
80
+ initializeOptionDefaults(allDefaults, booleanOptions, subcommandOptions);
81
+ await parseEnvironmentVariables(subcommandOptions, parsedEnvironmentArgs, env, additionalOptions?.envPrefix, isSetByCli);
82
+ for (const [key, option] of Object.entries(subcommandOptions)) {
83
+ combinedOptions[key] = option;
84
+ }
85
+ operands.push(...rest);
86
+ }
87
+ }
88
+ // Validate options
89
+ if (first == '--') {
90
+ if (!expectOperands) {
91
+ exit(2, `Operands are not expected but '--' separator was used`);
92
+ }
93
+ operands.push(...rest);
94
+ }
95
+ else if (first.startsWith('--')) {
96
+ const key = first.slice(2).replaceAll('-', '').toLowerCase();
97
+ const matchingOptions = Object.keys(combinedOptions).filter((k) => k.toLowerCase().startsWith(key));
98
+ let matchingOption = undefined;
99
+ if (matchingOptions.length === 1) {
100
+ matchingOption = matchingOptions[0];
101
+ }
102
+ else if (matchingOptions.length > 1) {
103
+ //Look for an exact match, it's possible that one option name is the beginning of another
104
+ const exactMatch = matchingOptions.find((k) => k.toLowerCase() === key);
105
+ if (!exactMatch) {
106
+ exit(2, `Ambiguous argument: ${first}`);
107
+ }
108
+ matchingOption = exactMatch;
109
+ }
110
+ else {
111
+ if ('--help'.startsWith(first)) {
112
+ printHelpContents(command, subcommands, cliArgs, additionalOptions, subcommand);
113
+ exit(0, undefined);
114
+ return {};
115
+ }
116
+ else if ('--version'.startsWith(first) && additionalOptions?.version) {
117
+ await printVersion(additionalOptions.version, logger);
118
+ exit(0, undefined);
119
+ return {};
120
+ }
121
+ exit(2, `Unknown argument: ${first}`);
122
+ }
123
+ if (!matchingOption) {
124
+ exit(2, `Unknown argument: ${first}`);
125
+ return {};
126
+ }
127
+ const selectedArgument = matchingOption;
128
+ const fullArgumentName = `--${camelToKebabCase(selectedArgument)}`;
129
+ const optionConfig = combinedOptions[selectedArgument];
130
+ initializeDefault(parsedArgs, combinedOptions, selectedArgument);
131
+ if (optionConfig.present) {
132
+ parsedArgs[selectedArgument] = await optionConfig.present(parsedArgs[selectedArgument]);
133
+ }
134
+ if (rest.length > 0 && optionConfig.character) {
135
+ if (!isLast) {
136
+ exit(2, `Validation error for ${fullArgumentName}: does not accept values but received ${rest.join(', ')}`);
137
+ return {};
138
+ }
139
+ else {
140
+ // If we're at the last argument and there are values, check if operands are expected
141
+ if (!expectOperands) {
142
+ exit(2, `Validation error for ${fullArgumentName}: does not accept values but received ${rest.join(', ')}`);
143
+ return {};
144
+ }
145
+ else {
146
+ operands.push(...rest);
147
+ }
148
+ }
149
+ }
150
+ else {
151
+ const acceptsMultiple = optionConfig.acceptMultipleValues
152
+ ? optionConfig.acceptMultipleValues()
153
+ : false;
154
+ let theRest = rest;
155
+ if (!acceptsMultiple && rest.length > 1) {
156
+ if (isLast && expectOperands) {
157
+ theRest = [rest[0]];
158
+ operands.push(...rest.slice(1));
159
+ }
160
+ }
161
+ const currentValue = parsedArgs[selectedArgument];
162
+ const validation = await optionConfig.validateValues(currentValue, theRest, isSetByCli[selectedArgument] === undefined);
163
+ if (!validation.valid) {
164
+ exit(2, `Validation error for ${fullArgumentName}: ${validation.message}`);
165
+ return {};
166
+ }
167
+ else {
168
+ parsedArgs[selectedArgument] = await optionConfig.reduceValues(currentValue, validation.value, isSetByCli[selectedArgument] === undefined);
169
+ isSetByCli[selectedArgument] = true;
170
+ }
171
+ }
172
+ }
173
+ else if (first.startsWith('-')) {
174
+ if (rest.length > 0 && !isLast) {
175
+ exit(2, `Boolean flag(s) ${first} should not have values but received ${rest.join(', ')}`);
176
+ return {};
177
+ }
178
+ else if (isLast && rest.length > 0) {
179
+ // If we're at the last argument and there are values, check if operands are expected
180
+ if (!expectOperands) {
181
+ exit(2, `Boolean flag(s) ${first} should not have values but received ${rest.join(', ')}`);
182
+ return {};
183
+ }
184
+ else {
185
+ operands.push(...rest);
186
+ }
187
+ }
188
+ // Short options (-s, -spq)
189
+ for (const char of first.slice(1)) {
190
+ if (!(char in booleanOptions)) {
191
+ exit(2, `Unknown flag: -${char}`);
192
+ }
193
+ const key = booleanOptions[char];
194
+ parsedArgs[key] = true;
195
+ }
196
+ }
197
+ }
198
+ if (numberOfSubcommands > 0 && additionalOptions?.requireSubcommand && !subcommand) {
199
+ exit(2, `A subcommand is required`);
200
+ }
201
+ // Step 5: Validate operands if expectOperands is false
202
+ if (!expectOperands && operands.length > 0) {
203
+ exit(2, `Operands are not expected but received: ${operands.join(', ')}`);
204
+ }
205
+ // Step 4: Return results
206
+ return {
207
+ args: { ...allDefaults, ...parsedEnvironmentArgs, ...parsedArgs },
208
+ operands: expectOperands ? operands : [],
209
+ subcommand: subcommand,
210
+ anyValues: args.length > 0,
211
+ printHelp: () => {
212
+ printHelpContents(command, subcommands, cliArgs, additionalOptions, subcommand);
213
+ }
214
+ };
215
+ }
216
+ /**
217
+ * Initialize the default values for arguments.
218
+ *
219
+ * Will populate the parsedArgs object with default values from the cliArguments.
220
+ * Will also populate the booleanOptions map with single character boolean options.
221
+ *
222
+ * @param parsedArgs the parsed arguments to default the values in
223
+ * @param booleanOptions a map of single character boolean options to their full names
224
+ * @param cliArguments the configuration options for the CLI commands
225
+ */
226
+ function initializeOptionDefaults(parsedArgs, booleanOptions, cliArguments) {
227
+ for (const [key, option] of Object.entries(cliArguments)) {
228
+ parsedArgs[key] = option.defaultValue;
229
+ if (option.character) {
230
+ booleanOptions[option.character.toLowerCase()] = key;
231
+ }
232
+ }
233
+ }
234
+ /**
235
+ * Initialize the default value for a specific argument if it is not already set.
236
+ *
237
+ * If the argument is not already present in parsedArgs, it will be set to the default value from cliArguments.
238
+ *
239
+ * @param parsedArgs the parsed arguments so far.
240
+ * @param cliArguments the CLI arguments configuration
241
+ * @param key the specific argument key to initialize
242
+ */
243
+ function initializeDefault(parsedArgs, cliArguments, key) {
244
+ if (!Object.hasOwn(parsedArgs, key)) {
245
+ parsedArgs[key] = cliArguments[key].defaultValue;
246
+ }
247
+ }
248
+ /**
249
+ * Parse environment variables and set the values in the parsed arguments.
250
+ *
251
+ * @param cliArguments the configuration options for the CLI commands
252
+ * @param parsedArgs the parsed arguments to set the values in
253
+ * @param env the environment variables to get values from
254
+ * @param envPrefix the prefix to use for environment variables, if any
255
+ */
256
+ async function parseEnvironmentVariables(cliArguments, parsedArgs, env, envPrefix, valuesSetByCli) {
257
+ if (!envPrefix) {
258
+ return;
259
+ }
260
+ const prefix = envPrefix + '_';
261
+ const envToKeys = Object.keys(cliArguments).reduce((acc, key) => {
262
+ acc[camelToCapitalSnakeCase(key)] = key;
263
+ return acc;
264
+ }, {});
265
+ for (const [key, value] of Object.entries(env)) {
266
+ if (key.startsWith(prefix)) {
267
+ const optionKey = key.slice(prefix.length);
268
+ const option = envToKeys[optionKey];
269
+ if (option) {
270
+ const config = cliArguments[option];
271
+ initializeDefault(parsedArgs, cliArguments, option);
272
+ if (config.present) {
273
+ parsedArgs[option] = await config.present(parsedArgs[option]);
274
+ }
275
+ if (!config.character) {
276
+ const values = value.split(' ');
277
+ const validation = await config.validateValues(parsedArgs[option], values, valuesSetByCli[option] === undefined);
278
+ if (!validation.valid) {
279
+ const s = values.length > 1 ? 's' : '';
280
+ exit(2, `Invalid value${s} for environment ${key}: ${validation.message}`);
281
+ return;
282
+ }
283
+ parsedArgs[option] = await config.reduceValues(parsedArgs[option], validation.value, valuesSetByCli[option] === undefined);
284
+ valuesSetByCli[option] = true;
285
+ }
286
+ }
287
+ }
288
+ }
289
+ }
290
+ /**
291
+ * Groups arguments into chunks based on the -- separator.
292
+ *
293
+ * @param args
294
+ * @returns
295
+ */
296
+ function groupArguments(args) {
297
+ const grouped = [];
298
+ let currentChunk = [];
299
+ for (let i = 0; i < args.length; i++) {
300
+ const arg = args[i];
301
+ if (arg === '--') {
302
+ grouped.push({
303
+ first: arg,
304
+ rest: args.slice(i + 1),
305
+ isFirst: grouped.length === 0,
306
+ isLast: true
307
+ });
308
+ break;
309
+ }
310
+ if (arg.startsWith('-') && currentChunk.length > 0) {
311
+ grouped.push({
312
+ first: currentChunk.at(0),
313
+ rest: currentChunk.slice(1),
314
+ isFirst: grouped.length === 0,
315
+ isLast: false
316
+ });
317
+ currentChunk = [];
318
+ }
319
+ currentChunk.push(arg);
320
+ }
321
+ if (currentChunk.length > 0) {
322
+ grouped.push({
323
+ first: currentChunk.at(0),
324
+ rest: currentChunk.slice(1),
325
+ isFirst: grouped.length === 0,
326
+ isLast: true
327
+ });
328
+ }
329
+ return grouped;
330
+ }
331
+ export function camelToCapitalSnakeCase(input) {
332
+ return input
333
+ .replace(/([a-z0-9])([A-Z])/g, '$1_$2') // Insert underscore before capital letters
334
+ .toUpperCase(); // Convert to uppercase
335
+ }
336
+ export function camelToKebabCase(input) {
337
+ return input
338
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2') // Insert dash before capital letters
339
+ .toLowerCase(); // Convert to lowercase
340
+ }
341
+ export function printHelpContents(command, subcommands, cliOptions, additionalArgs, selectedSubcommand) {
342
+ const logger = additionalArgs?.consoleLogger ?? console;
343
+ const operandsExpected = additionalArgs?.expectOperands != undefined ? additionalArgs?.expectOperands : true;
344
+ const operandsName = additionalArgs?.operandsName ?? 'operand';
345
+ const operandsString = operandsExpected ? ` [--] [${operandsName}1] [${operandsName}2]` : '';
346
+ const anyGlobalFlags = Object.values(cliOptions).some((option) => option.character);
347
+ if (selectedSubcommand) {
348
+ const anyCommandFlags = Object.values(subcommands[selectedSubcommand].arguments).some((option) => option.character);
349
+ const flags = anyGlobalFlags || anyCommandFlags ? ' [flags]' : '';
350
+ let usageString = `Usage: ${command} ${selectedSubcommand} [options]${flags}${operandsString}`;
351
+ if (additionalArgs?.allowOperandsFromStdin) {
352
+ usageString += `\n <${operandsName}s to stdout> | ${command} ${selectedSubcommand} [options]${flags}`;
353
+ }
354
+ logger.log(usageString);
355
+ logger.log('');
356
+ logger.log(`${subcommands[selectedSubcommand].description}`);
357
+ logger.log(`${selectedSubcommand} Options:`);
358
+ printOptions(subcommands[selectedSubcommand].arguments, logger);
359
+ logger.log('');
360
+ }
361
+ else {
362
+ const anyCommandFlags = Object.values(subcommands).some((subcommand) => Object.values(subcommand.arguments).some((option) => option.character));
363
+ const flags = anyGlobalFlags || anyCommandFlags ? ' [flags]' : '';
364
+ let singleUseString = `${command}`;
365
+ const subcommandKeys = Object.keys(subcommands);
366
+ if (subcommandKeys.length > 0 && additionalArgs?.requireSubcommand) {
367
+ singleUseString += ' <subcommand>';
368
+ }
369
+ else if (subcommandKeys.length > 0) {
370
+ singleUseString += ' [subcommand]';
371
+ }
372
+ singleUseString += ` [options]${flags}`;
373
+ let usageString = `Usage: ${singleUseString}${operandsString}`;
374
+ if (additionalArgs?.allowOperandsFromStdin) {
375
+ usageString += `\n <${operandsName}s to stdout> | ${singleUseString}`;
376
+ }
377
+ logger.log(usageString);
378
+ const longestCommand = subcommandKeys.reduce((acc, cmd) => Math.max(acc, cmd.length), 0);
379
+ if (subcommandKeys.length > 0) {
380
+ logger.log('Subcommands:');
381
+ for (const cmd of subcommandKeys) {
382
+ const description = subcommands[cmd].description;
383
+ logger.log(` ${(cmd + ':').padEnd(longestCommand + 1)} ${description}`);
384
+ }
385
+ logger.log('');
386
+ logger.log(` Use ${command} <subcommand> --help for more information about a subcommand`);
387
+ }
388
+ }
389
+ logger.log('Global Options:');
390
+ const globalOptions = {
391
+ ...cliOptions,
392
+ ...{
393
+ help: {
394
+ description: 'Print the help contents and exit'
395
+ }
396
+ }
397
+ };
398
+ if (additionalArgs?.version) {
399
+ globalOptions['version'] = {
400
+ description: 'Print the version and exit'
401
+ };
402
+ }
403
+ printOptions(globalOptions, logger);
404
+ }
405
+ function printOptions(cliOptions, logger) {
406
+ const longestOption = Object.keys(cliOptions).reduce((acc, key) => Math.max(acc, camelToKebabCase(key).length + 2), 0) + 1;
407
+ const terminalWidth = process.stdout.columns ?? 80;
408
+ const nonBooleanBuffer = ' ';
409
+ for (const [key, option] of Object.entries(cliOptions)) {
410
+ let optionString = ` --${camelToKebabCase(key)}:`.padEnd(longestOption + 3);
411
+ if (option.character) {
412
+ optionString += `(-${option.character}) `;
413
+ }
414
+ else {
415
+ optionString += nonBooleanBuffer;
416
+ }
417
+ const leftBar = optionString.length;
418
+ optionString += option.description;
419
+ logger.log(optionString.slice(0, terminalWidth));
420
+ let stringToPrint = optionString.slice(terminalWidth);
421
+ const secondLineLength = terminalWidth - leftBar;
422
+ while (stringToPrint.length > 0) {
423
+ logger.log(' '.repeat(leftBar) + stringToPrint.slice(0, secondLineLength).trimStart());
424
+ stringToPrint = stringToPrint.slice(secondLineLength);
425
+ }
426
+ }
427
+ }
428
+ async function printVersion(versionInfo, logger) {
429
+ if (!versionInfo) {
430
+ logger.log('Version information not available. This is a bug.');
431
+ return;
432
+ }
433
+ if (typeof versionInfo === 'string') {
434
+ logger.log(versionInfo);
435
+ return;
436
+ }
437
+ let currentVersion = null;
438
+ if (typeof versionInfo.currentVersion === 'string') {
439
+ currentVersion = versionInfo.currentVersion;
440
+ }
441
+ else if (typeof versionInfo.currentVersion === 'function') {
442
+ currentVersion = await versionInfo.currentVersion();
443
+ }
444
+ if (!currentVersion) {
445
+ logger.log('Current version not available');
446
+ return;
447
+ }
448
+ let latestVersion = null;
449
+ if (typeof versionInfo.checkForUpdates == 'string') {
450
+ latestVersion = await getLatestVersionFromNpm(versionInfo.checkForUpdates);
451
+ }
452
+ else if (typeof versionInfo.checkForUpdates === 'function') {
453
+ latestVersion = await versionInfo.checkForUpdates();
454
+ }
455
+ let updateMessage = undefined;
456
+ if (currentVersion && latestVersion && currentVersion !== latestVersion) {
457
+ if (versionInfo.updateMessage) {
458
+ updateMessage = versionInfo.updateMessage(currentVersion, latestVersion);
459
+ }
460
+ else if (typeof versionInfo.checkForUpdates === 'string') {
461
+ updateMessage = `Latest: ${latestVersion}. To update run: npm update -g ${versionInfo.checkForUpdates}`;
462
+ }
463
+ else {
464
+ updateMessage = `Latest: ${latestVersion}.`;
465
+ }
466
+ }
467
+ else if (currentVersion && latestVersion && currentVersion === latestVersion) {
468
+ // updateMessage = 'You are using the latest version.'
469
+ }
470
+ logger.log(currentVersion);
471
+ if (updateMessage) {
472
+ logger.log(updateMessage);
473
+ }
474
+ }
475
+ /**
476
+ * Fetch the latest version of a package from the npm registry.
477
+ *
478
+ * @param packageName the name of the npm package to check, e.g. "my-cli-tool" or "@my-org/my-cli-tool"
479
+ * @returns the latest version of the package published on npm or null if any error occurs
480
+ */
481
+ async function getLatestVersionFromNpm(packageName) {
482
+ try {
483
+ const res = await fetch(`https://registry.npmjs.org/${packageName}/latest`);
484
+ if (res.ok) {
485
+ const data = await res.json();
486
+ return data.version || null;
487
+ }
488
+ }
489
+ catch (e) {
490
+ // Ignore errors fetching latest version
491
+ }
492
+ return null;
493
+ }
494
+ //# 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,13 @@
1
+ export { type CustomArgument } from './arguments/argument.js';
2
+ export { arrayValueArgument } from './arguments/arrayValueArgument.js';
3
+ export { booleanArgument } from './arguments/booleanArgument.js';
4
+ export { enumArgument } from './arguments/enumArgument.js';
5
+ export { enumArrayArgument } from './arguments/enumArrayArgument.js';
6
+ export { mapArgument } from './arguments/mapArgument.js';
7
+ export { numberArgument, numberArrayArgument } from './arguments/numberArguments.js';
8
+ export { singleValueArgument } from './arguments/singleValueArgument.js';
9
+ export { stringArgument, stringArrayArgument } from './arguments/stringArguments.js';
10
+ export { parseCliArguments, type AdditionalCliOptions, type Config } from './cli.js';
11
+ export { createPackageFileReader, type PackageFileReader } from './readRelative.js';
12
+ export { readStdin } from './stdin.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EAAE,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,13 @@
1
+ export {} from './arguments/argument.js';
2
+ export { arrayValueArgument } from './arguments/arrayValueArgument.js';
3
+ export { booleanArgument } from './arguments/booleanArgument.js';
4
+ export { enumArgument } from './arguments/enumArgument.js';
5
+ export { enumArrayArgument } from './arguments/enumArrayArgument.js';
6
+ export { mapArgument } from './arguments/mapArgument.js';
7
+ export { numberArgument, numberArrayArgument } from './arguments/numberArguments.js';
8
+ export { singleValueArgument } from './arguments/singleValueArgument.js';
9
+ export { stringArgument, stringArrayArgument } from './arguments/stringArguments.js';
10
+ export { parseCliArguments } from './cli.js';
11
+ export { createPackageFileReader } from './readRelative.js';
12
+ export { readStdin } from './stdin.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAA0C,MAAM,UAAU,CAAA;AACpF,OAAO,EAAE,uBAAuB,EAA0B,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * An interface for reading files from a relative path inside your packaged cli app. For instance to
3
+ * read the package.json inside your package. Works on ESM and CommonJS modules.
4
+ */
5
+ export interface PackageFileReader {
6
+ /**
7
+ * Read a file from a relative path inside your packaged cli app. For instance to
8
+ * read the package.json inside your package. Works on ESM and CommonJS modules.
9
+ *
10
+ * @param pathParts the path to the file, relative to the root of your project with each
11
+ * directory as a separate string in the array and the file name as the last string in the array.
12
+ */
13
+ readFile(pathParts: string[]): Promise<string>;
14
+ }
15
+ /**
16
+ * A relatively sane way to read a file from a relative path inside your packaged cli app. For instance to
17
+ * read the package.json inside your package. Works on ESM and CommonJS modules. Use __filename
18
+ * or import.meta.url to get the path of the file you are in and pass it to this function. Set the `levelsUp`
19
+ * based on how your project is packaged. For instance, if your file is packaged in `dist/cli.js` and you would use `1` if
20
+ * you packaged your file is in `dist/src/cli.js` and you would use `2`. Whatever you need to get to the root.
21
+ *
22
+ * You get back a `PackageFileReader` which has a `readFile` method. You can then call that method
23
+ * with the path parts to the file you want to read, relative to the root of your project.
24
+ * For instance, to read the `package.json` file in the root of your project, you would call:
25
+ * ```ts
26
+ * const reader = await createPackageFileReader(import.meta.url, 1) // if your file is in dist/cli.js
27
+ * const packageJson = await reader.readFile(['package.json'])
28
+ * ```
29
+ *
30
+ * @param currentFile the path to start from use `import.meta.url` for esm or `__filename` for CommonJS in most cases
31
+ * @param levelsUp since __import.meta.url or __filename is the file you are in, you need to go up a few levels to ge to the root of your project. Use 0 for the current directory of the file you're calling from.
32
+ * @returns a `PackageFileReader` you can use to read files relative to the root of your project.
33
+ */
34
+ export declare function createPackageFileReader(currentFile: string, levelsUp: number): PackageFileReader;
35
+ //# sourceMappingURL=readRelative.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readRelative.d.ts","sourceRoot":"","sources":["../../src/readRelative.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC/C;AA+CD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAMhG"}