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