burgee 0.0.0 → 0.2.0
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/README.md +28 -1
- package/dist/agent.d.ts +19 -0
- package/dist/agent.js +25 -0
- package/dist/brand.d.ts +186 -0
- package/dist/brand.js +232 -0
- package/dist/cli.d.ts +51 -0
- package/dist/cli.js +105 -0
- package/dist/commander-argument.d.ts +22 -0
- package/dist/commander-argument.js +72 -0
- package/dist/commander-command.d.ts +345 -0
- package/dist/commander-command.js +1605 -0
- package/dist/commander-error.d.ts +10 -0
- package/dist/commander-error.js +20 -0
- package/dist/commander-help.d.ts +67 -0
- package/dist/commander-help.js +319 -0
- package/dist/commander-option.d.ts +58 -0
- package/dist/commander-option.js +164 -0
- package/dist/commander-suggest.d.ts +2 -0
- package/dist/commander-suggest.js +59 -0
- package/dist/commander.d.ts +18 -0
- package/dist/commander.js +12 -0
- package/dist/completions.d.ts +39 -0
- package/dist/completions.js +224 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.js +98 -0
- package/dist/contrast.d.ts +70 -0
- package/dist/contrast.js +93 -0
- package/dist/execute.d.ts +97 -0
- package/dist/execute.js +433 -0
- package/dist/exit-code.d.ts +18 -0
- package/dist/exit-code.js +12 -0
- package/dist/help.d.ts +22 -0
- package/dist/help.js +158 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.js +9 -2
- package/dist/manifest.d.ts +192 -0
- package/dist/manifest.js +55 -0
- package/dist/mcp.d.ts +40 -0
- package/dist/mcp.js +111 -0
- package/dist/names.d.ts +5 -0
- package/dist/names.js +6 -0
- package/dist/pkg.d.ts +5 -0
- package/dist/pkg.js +21 -0
- package/dist/precedence.d.ts +55 -0
- package/dist/precedence.js +100 -0
- package/dist/runtime.d.ts +27 -0
- package/dist/runtime.js +17 -0
- package/dist/schema.d.ts +71 -0
- package/dist/schema.js +108 -0
- package/dist/testing-helpers.d.ts +62 -0
- package/dist/testing-helpers.js +110 -0
- package/dist/testing.d.ts +10 -0
- package/dist/testing.js +3 -0
- package/dist/validate.d.ts +27 -0
- package/dist/validate.js +133 -0
- package/dist/yargs-burgee.d.ts +50 -0
- package/dist/yargs-burgee.js +104 -0
- package/dist/yargs-cliui.d.ts +56 -0
- package/dist/yargs-cliui.js +421 -0
- package/dist/yargs-command.d.ts +82 -0
- package/dist/yargs-command.js +414 -0
- package/dist/yargs-completion.d.ts +41 -0
- package/dist/yargs-completion.js +271 -0
- package/dist/yargs-factory.d.ts +193 -0
- package/dist/yargs-factory.js +1606 -0
- package/dist/yargs-helpers.d.ts +6 -0
- package/dist/yargs-helpers.js +2 -0
- package/dist/yargs-middleware.d.ts +32 -0
- package/dist/yargs-middleware.js +81 -0
- package/dist/yargs-parser.d.ts +41 -0
- package/dist/yargs-parser.js +929 -0
- package/dist/yargs-shim.d.ts +54 -0
- package/dist/yargs-shim.js +84 -0
- package/dist/yargs-usage.d.ts +42 -0
- package/dist/yargs-usage.js +479 -0
- package/dist/yargs-utils.d.ts +33 -0
- package/dist/yargs-utils.js +209 -0
- package/dist/yargs-validation.d.ts +26 -0
- package/dist/yargs-validation.js +261 -0
- package/dist/yargs-y18n.d.ts +21 -0
- package/dist/yargs-y18n.js +117 -0
- package/dist/yargs.d.ts +6 -0
- package/dist/yargs.js +8 -0
- package/locales/be.json +46 -0
- package/locales/cs.json +51 -0
- package/locales/de.json +46 -0
- package/locales/en.json +55 -0
- package/locales/es.json +46 -0
- package/locales/fi.json +49 -0
- package/locales/fr.json +53 -0
- package/locales/he.json +55 -0
- package/locales/hi.json +49 -0
- package/locales/hu.json +46 -0
- package/locales/id.json +50 -0
- package/locales/it.json +46 -0
- package/locales/ja.json +51 -0
- package/locales/ka.json +55 -0
- package/locales/ko.json +49 -0
- package/locales/nb.json +44 -0
- package/locales/nl.json +49 -0
- package/locales/nn.json +44 -0
- package/locales/pirate.json +13 -0
- package/locales/pl.json +49 -0
- package/locales/pt.json +45 -0
- package/locales/pt_BR.json +48 -0
- package/locales/ru.json +51 -0
- package/locales/th.json +46 -0
- package/locales/tr.json +48 -0
- package/locales/uk_UA.json +51 -0
- package/locales/uz.json +52 -0
- package/locales/zh_CN.json +48 -0
- package/locales/zh_TW.json +51 -0
- package/package.json +61 -8
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,929 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { normalize, resolve } from 'node:path';
|
|
4
|
+
import { format } from 'node:util';
|
|
5
|
+
export function camelCase(str) {
|
|
6
|
+
const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();
|
|
7
|
+
if (!isCamelCase)
|
|
8
|
+
str = str.toLowerCase();
|
|
9
|
+
if (str.indexOf('-') === -1 && str.indexOf('_') === -1)
|
|
10
|
+
return str;
|
|
11
|
+
let camelcase = '';
|
|
12
|
+
let nextChrUpper = false;
|
|
13
|
+
const leadingHyphens = /^-+/.exec(str);
|
|
14
|
+
for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) {
|
|
15
|
+
let chr = str.charAt(i);
|
|
16
|
+
if (nextChrUpper) {
|
|
17
|
+
nextChrUpper = false;
|
|
18
|
+
chr = chr.toUpperCase();
|
|
19
|
+
}
|
|
20
|
+
if (i !== 0 && (chr === '-' || chr === '_'))
|
|
21
|
+
nextChrUpper = true;
|
|
22
|
+
else if (chr !== '-' && chr !== '_')
|
|
23
|
+
camelcase += chr;
|
|
24
|
+
}
|
|
25
|
+
return camelcase;
|
|
26
|
+
}
|
|
27
|
+
export function decamelize(str, joinString) {
|
|
28
|
+
const lowercase = str.toLowerCase();
|
|
29
|
+
joinString = joinString || '-';
|
|
30
|
+
let notCamelcase = '';
|
|
31
|
+
for (let i = 0; i < str.length; i++) {
|
|
32
|
+
const chrLower = lowercase.charAt(i);
|
|
33
|
+
const chrString = str.charAt(i);
|
|
34
|
+
if (chrLower !== chrString && i > 0)
|
|
35
|
+
notCamelcase += `${joinString}${lowercase.charAt(i)}`;
|
|
36
|
+
else
|
|
37
|
+
notCamelcase += chrString;
|
|
38
|
+
}
|
|
39
|
+
return notCamelcase;
|
|
40
|
+
}
|
|
41
|
+
export function looksLikeNumber(x) {
|
|
42
|
+
if (x === null || x === undefined)
|
|
43
|
+
return false;
|
|
44
|
+
if (typeof x === 'number')
|
|
45
|
+
return true;
|
|
46
|
+
if (/^0x[0-9a-f]+$/i.test(x))
|
|
47
|
+
return true;
|
|
48
|
+
if (/^0[^.]/.test(x))
|
|
49
|
+
return false;
|
|
50
|
+
return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
|
|
51
|
+
}
|
|
52
|
+
export function tokenizeArgString(argString) {
|
|
53
|
+
if (Array.isArray(argString))
|
|
54
|
+
return argString.map((e) => (typeof e !== 'string' ? `${e}` : e));
|
|
55
|
+
argString = argString.trim();
|
|
56
|
+
let i = 0;
|
|
57
|
+
let prevC = null;
|
|
58
|
+
let c = null;
|
|
59
|
+
let opening = null;
|
|
60
|
+
const args = [];
|
|
61
|
+
for (let ii = 0; ii < argString.length; ii++) {
|
|
62
|
+
prevC = c;
|
|
63
|
+
c = argString.charAt(ii);
|
|
64
|
+
if (c === ' ' && !opening) {
|
|
65
|
+
if (!(prevC === ' '))
|
|
66
|
+
i++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (c === opening)
|
|
70
|
+
opening = null;
|
|
71
|
+
else if ((c === "'" || c === '"') && !opening)
|
|
72
|
+
opening = c;
|
|
73
|
+
if (!args[i])
|
|
74
|
+
args[i] = '';
|
|
75
|
+
args[i] += c;
|
|
76
|
+
}
|
|
77
|
+
return args;
|
|
78
|
+
}
|
|
79
|
+
const DefaultValuesForTypeKey = { BOOLEAN: 'boolean', STRING: 'string', NUMBER: 'number', ARRAY: 'array' };
|
|
80
|
+
export class YargsParser {
|
|
81
|
+
mixin;
|
|
82
|
+
constructor(mixin) {
|
|
83
|
+
this.mixin = mixin;
|
|
84
|
+
}
|
|
85
|
+
parse(argsInput, options) {
|
|
86
|
+
const mixin = this.mixin;
|
|
87
|
+
const opts = Object.assign({
|
|
88
|
+
alias: undefined,
|
|
89
|
+
array: undefined,
|
|
90
|
+
boolean: undefined,
|
|
91
|
+
config: undefined,
|
|
92
|
+
configObjects: undefined,
|
|
93
|
+
configuration: undefined,
|
|
94
|
+
coerce: undefined,
|
|
95
|
+
count: undefined,
|
|
96
|
+
default: undefined,
|
|
97
|
+
envPrefix: undefined,
|
|
98
|
+
narg: undefined,
|
|
99
|
+
normalize: undefined,
|
|
100
|
+
string: undefined,
|
|
101
|
+
number: undefined,
|
|
102
|
+
__: undefined,
|
|
103
|
+
key: undefined,
|
|
104
|
+
}, options);
|
|
105
|
+
const args = tokenizeArgString(argsInput);
|
|
106
|
+
const inputIsString = typeof argsInput === 'string';
|
|
107
|
+
const aliases = combineAliases(Object.assign(Object.create(null), opts.alias));
|
|
108
|
+
const configuration = Object.assign({
|
|
109
|
+
'boolean-negation': true,
|
|
110
|
+
'camel-case-expansion': true,
|
|
111
|
+
'combine-arrays': false,
|
|
112
|
+
'dot-notation': true,
|
|
113
|
+
'duplicate-arguments-array': true,
|
|
114
|
+
'flatten-duplicate-arrays': true,
|
|
115
|
+
'greedy-arrays': true,
|
|
116
|
+
'halt-at-non-option': false,
|
|
117
|
+
'nargs-eats-options': false,
|
|
118
|
+
'negation-prefix': 'no-',
|
|
119
|
+
'parse-numbers': true,
|
|
120
|
+
'parse-positional-numbers': true,
|
|
121
|
+
'populate--': false,
|
|
122
|
+
'set-placeholder-key': false,
|
|
123
|
+
'short-option-groups': true,
|
|
124
|
+
'strip-aliased': false,
|
|
125
|
+
'strip-dashed': false,
|
|
126
|
+
'unknown-options-as-args': false,
|
|
127
|
+
}, opts.configuration);
|
|
128
|
+
const defaults = Object.assign(Object.create(null), opts.default);
|
|
129
|
+
const configObjects = opts.configObjects || [];
|
|
130
|
+
const envPrefix = opts.envPrefix;
|
|
131
|
+
const notFlagsOption = configuration['populate--'];
|
|
132
|
+
const notFlagsArgv = notFlagsOption ? '--' : '_';
|
|
133
|
+
const newAliases = Object.create(null);
|
|
134
|
+
const defaulted = Object.create(null);
|
|
135
|
+
const __ = opts.__ || mixin.format;
|
|
136
|
+
const flags = {
|
|
137
|
+
aliases: Object.create(null),
|
|
138
|
+
arrays: Object.create(null),
|
|
139
|
+
bools: Object.create(null),
|
|
140
|
+
strings: Object.create(null),
|
|
141
|
+
numbers: Object.create(null),
|
|
142
|
+
counts: Object.create(null),
|
|
143
|
+
normalize: Object.create(null),
|
|
144
|
+
configs: Object.create(null),
|
|
145
|
+
nargs: Object.create(null),
|
|
146
|
+
coercions: Object.create(null),
|
|
147
|
+
keys: [],
|
|
148
|
+
};
|
|
149
|
+
const negative = /^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/;
|
|
150
|
+
const negatedBoolean = new RegExp(`^--${configuration['negation-prefix']}(.+)`);
|
|
151
|
+
[].concat(opts.array || []).filter(Boolean).forEach((opt) => {
|
|
152
|
+
const key = typeof opt === 'object' ? opt.key : opt;
|
|
153
|
+
const assignment = Object.keys(opt)
|
|
154
|
+
.map((k) => {
|
|
155
|
+
const arrayFlagKeys = { boolean: 'bools', string: 'strings', number: 'numbers' };
|
|
156
|
+
return arrayFlagKeys[k];
|
|
157
|
+
})
|
|
158
|
+
.filter(Boolean)
|
|
159
|
+
.pop();
|
|
160
|
+
if (assignment)
|
|
161
|
+
flags[assignment][key] = true;
|
|
162
|
+
flags.arrays[key] = true;
|
|
163
|
+
flags.keys.push(key);
|
|
164
|
+
});
|
|
165
|
+
[].concat(opts.boolean || []).filter(Boolean).forEach((key) => {
|
|
166
|
+
flags.bools[key] = true;
|
|
167
|
+
flags.keys.push(key);
|
|
168
|
+
});
|
|
169
|
+
[].concat(opts.string || []).filter(Boolean).forEach((key) => {
|
|
170
|
+
flags.strings[key] = true;
|
|
171
|
+
flags.keys.push(key);
|
|
172
|
+
});
|
|
173
|
+
[].concat(opts.number || []).filter(Boolean).forEach((key) => {
|
|
174
|
+
flags.numbers[key] = true;
|
|
175
|
+
flags.keys.push(key);
|
|
176
|
+
});
|
|
177
|
+
[].concat(opts.count || []).filter(Boolean).forEach((key) => {
|
|
178
|
+
flags.counts[key] = true;
|
|
179
|
+
flags.keys.push(key);
|
|
180
|
+
});
|
|
181
|
+
[].concat(opts.normalize || []).filter(Boolean).forEach((key) => {
|
|
182
|
+
flags.normalize[key] = true;
|
|
183
|
+
flags.keys.push(key);
|
|
184
|
+
});
|
|
185
|
+
if (typeof opts.narg === 'object') {
|
|
186
|
+
Object.entries(opts.narg).forEach(([key, value]) => {
|
|
187
|
+
if (typeof value === 'number') {
|
|
188
|
+
flags.nargs[key] = value;
|
|
189
|
+
flags.keys.push(key);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
if (typeof opts.coerce === 'object') {
|
|
194
|
+
Object.entries(opts.coerce).forEach(([key, value]) => {
|
|
195
|
+
if (typeof value === 'function') {
|
|
196
|
+
flags.coercions[key] = value;
|
|
197
|
+
flags.keys.push(key);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
if (typeof opts.config !== 'undefined') {
|
|
202
|
+
if (Array.isArray(opts.config) || typeof opts.config === 'string') {
|
|
203
|
+
[].concat(opts.config).filter(Boolean).forEach((key) => {
|
|
204
|
+
flags.configs[key] = true;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
else if (typeof opts.config === 'object') {
|
|
208
|
+
Object.entries(opts.config).forEach(([key, value]) => {
|
|
209
|
+
if (typeof value === 'boolean' || typeof value === 'function')
|
|
210
|
+
flags.configs[key] = value;
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
extendAliases(opts.key, aliases, opts.default, flags.arrays);
|
|
215
|
+
Object.keys(defaults).forEach((key) => {
|
|
216
|
+
(flags.aliases[key] || []).forEach((alias) => {
|
|
217
|
+
defaults[alias] = defaults[key];
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
let error = null;
|
|
221
|
+
checkConfiguration();
|
|
222
|
+
let notFlags = [];
|
|
223
|
+
const argv = Object.assign(Object.create(null), { _: [] });
|
|
224
|
+
const argvReturn = {};
|
|
225
|
+
for (let i = 0; i < args.length; i++) {
|
|
226
|
+
const arg = args[i];
|
|
227
|
+
const truncatedArg = arg.replace(/^-{3,}/, '---');
|
|
228
|
+
let broken;
|
|
229
|
+
let key;
|
|
230
|
+
let letters;
|
|
231
|
+
let m;
|
|
232
|
+
let next;
|
|
233
|
+
let value;
|
|
234
|
+
if (arg !== '--' && /^-/.test(arg) && isUnknownOptionAsArg(arg)) {
|
|
235
|
+
pushPositional(arg);
|
|
236
|
+
}
|
|
237
|
+
else if (/^---+(=|$)/.exec(truncatedArg)) {
|
|
238
|
+
pushPositional(arg);
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
else if (/^--.+=/.exec(arg) || (!configuration['short-option-groups'] && /^-.+=/.exec(arg))) {
|
|
242
|
+
m = /^--?([^=]+)=([\s\S]*)$/.exec(arg);
|
|
243
|
+
if (m !== null && Array.isArray(m) && m.length >= 3) {
|
|
244
|
+
if (checkAllAliases(m[1], flags.arrays))
|
|
245
|
+
i = eatArray(i, m[1], args, m[2]);
|
|
246
|
+
else if (checkAllAliases(m[1], flags.nargs) !== false)
|
|
247
|
+
i = eatNargs(i, m[1], args, m[2]);
|
|
248
|
+
else
|
|
249
|
+
setArg(m[1], m[2], true);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else if (negatedBoolean.exec(arg) && configuration['boolean-negation']) {
|
|
253
|
+
m = negatedBoolean.exec(arg);
|
|
254
|
+
if (m !== null && Array.isArray(m) && m.length >= 2) {
|
|
255
|
+
key = m[1];
|
|
256
|
+
setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else if (/^--.+/.exec(arg) || (!configuration['short-option-groups'] && /^-[^-]+/.exec(arg))) {
|
|
260
|
+
m = /^--?(.+)/.exec(arg);
|
|
261
|
+
if (m !== null && Array.isArray(m) && m.length >= 2) {
|
|
262
|
+
key = m[1];
|
|
263
|
+
if (checkAllAliases(key, flags.arrays))
|
|
264
|
+
i = eatArray(i, key, args);
|
|
265
|
+
else if (checkAllAliases(key, flags.nargs) !== false)
|
|
266
|
+
i = eatNargs(i, key, args);
|
|
267
|
+
else {
|
|
268
|
+
next = args[i + 1];
|
|
269
|
+
if (next !== undefined &&
|
|
270
|
+
(!/^-/.exec(next) || negative.exec(next)) &&
|
|
271
|
+
!checkAllAliases(key, flags.bools) &&
|
|
272
|
+
!checkAllAliases(key, flags.counts)) {
|
|
273
|
+
setArg(key, next);
|
|
274
|
+
i++;
|
|
275
|
+
}
|
|
276
|
+
else if (/^(true|false)$/.test(next)) {
|
|
277
|
+
setArg(key, next);
|
|
278
|
+
i++;
|
|
279
|
+
}
|
|
280
|
+
else
|
|
281
|
+
setArg(key, defaultValue(key));
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else if (/^-.\..+=/.exec(arg)) {
|
|
286
|
+
m = /^-([^=]+)=([\s\S]*)$/.exec(arg);
|
|
287
|
+
if (m !== null && Array.isArray(m) && m.length >= 3)
|
|
288
|
+
setArg(m[1], m[2]);
|
|
289
|
+
}
|
|
290
|
+
else if (/^-.\..+/.exec(arg) && !negative.exec(arg)) {
|
|
291
|
+
next = args[i + 1];
|
|
292
|
+
m = /^-(.\..+)/.exec(arg);
|
|
293
|
+
if (m !== null && Array.isArray(m) && m.length >= 2) {
|
|
294
|
+
key = m[1];
|
|
295
|
+
if (next !== undefined && !/^-/.exec(next) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) {
|
|
296
|
+
setArg(key, next);
|
|
297
|
+
i++;
|
|
298
|
+
}
|
|
299
|
+
else
|
|
300
|
+
setArg(key, defaultValue(key));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else if (/^-[^-]+/.exec(arg) && !negative.exec(arg)) {
|
|
304
|
+
letters = arg.slice(1, -1).split('');
|
|
305
|
+
broken = false;
|
|
306
|
+
for (let j = 0; j < letters.length; j++) {
|
|
307
|
+
next = arg.slice(j + 2);
|
|
308
|
+
if (letters[j + 1] && letters[j + 1] === '=') {
|
|
309
|
+
value = arg.slice(j + 3);
|
|
310
|
+
key = letters[j];
|
|
311
|
+
if (checkAllAliases(key, flags.arrays))
|
|
312
|
+
i = eatArray(i, key, args, value);
|
|
313
|
+
else if (checkAllAliases(key, flags.nargs) !== false)
|
|
314
|
+
i = eatNargs(i, key, args, value);
|
|
315
|
+
else
|
|
316
|
+
setArg(key, value);
|
|
317
|
+
broken = true;
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
if (next === '-') {
|
|
321
|
+
setArg(letters[j], next);
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
if (/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next) && checkAllAliases(next, flags.bools) === false) {
|
|
325
|
+
setArg(letters[j], next);
|
|
326
|
+
broken = true;
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
if (letters[j + 1] && /\W/.exec(letters[j + 1])) {
|
|
330
|
+
setArg(letters[j], next);
|
|
331
|
+
broken = true;
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
else
|
|
335
|
+
setArg(letters[j], defaultValue(letters[j]));
|
|
336
|
+
}
|
|
337
|
+
key = arg.slice(-1)[0];
|
|
338
|
+
if (!broken && key !== '-') {
|
|
339
|
+
if (checkAllAliases(key, flags.arrays))
|
|
340
|
+
i = eatArray(i, key, args);
|
|
341
|
+
else if (checkAllAliases(key, flags.nargs) !== false)
|
|
342
|
+
i = eatNargs(i, key, args);
|
|
343
|
+
else {
|
|
344
|
+
next = args[i + 1];
|
|
345
|
+
if (next !== undefined &&
|
|
346
|
+
(!/^(-|--)[^-]/.test(next) || negative.exec(next)) &&
|
|
347
|
+
!checkAllAliases(key, flags.bools) &&
|
|
348
|
+
!checkAllAliases(key, flags.counts)) {
|
|
349
|
+
setArg(key, next);
|
|
350
|
+
i++;
|
|
351
|
+
}
|
|
352
|
+
else if (/^(true|false)$/.test(next)) {
|
|
353
|
+
setArg(key, next);
|
|
354
|
+
i++;
|
|
355
|
+
}
|
|
356
|
+
else
|
|
357
|
+
setArg(key, defaultValue(key));
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
else if (/^-[0-9]$/.exec(arg) && negative.exec(arg) && checkAllAliases(arg.slice(1), flags.bools)) {
|
|
362
|
+
key = arg.slice(1);
|
|
363
|
+
setArg(key, defaultValue(key));
|
|
364
|
+
}
|
|
365
|
+
else if (arg === '--') {
|
|
366
|
+
notFlags = args.slice(i + 1);
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
else if (configuration['halt-at-non-option']) {
|
|
370
|
+
notFlags = args.slice(i);
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
else
|
|
374
|
+
pushPositional(arg);
|
|
375
|
+
}
|
|
376
|
+
applyEnvVars(argv, true);
|
|
377
|
+
applyEnvVars(argv, false);
|
|
378
|
+
setConfig(argv);
|
|
379
|
+
setConfigObjects();
|
|
380
|
+
applyDefaultsAndAliases(argv, flags.aliases, defaults, true);
|
|
381
|
+
applyCoercions(argv);
|
|
382
|
+
if (configuration['set-placeholder-key'])
|
|
383
|
+
setPlaceholderKeys(argv);
|
|
384
|
+
Object.keys(flags.counts).forEach((key) => {
|
|
385
|
+
if (!hasKey(argv, key.split('.')))
|
|
386
|
+
setArg(key, 0);
|
|
387
|
+
});
|
|
388
|
+
if (notFlagsOption && notFlags.length)
|
|
389
|
+
argv[notFlagsArgv] = [];
|
|
390
|
+
notFlags.forEach((key) => {
|
|
391
|
+
argv[notFlagsArgv].push(key);
|
|
392
|
+
});
|
|
393
|
+
if (configuration['camel-case-expansion'] && configuration['strip-dashed']) {
|
|
394
|
+
Object.keys(argv)
|
|
395
|
+
.filter((key) => key !== '--' && key.includes('-'))
|
|
396
|
+
.forEach((key) => {
|
|
397
|
+
delete argv[key];
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
if (configuration['strip-aliased']) {
|
|
401
|
+
[].concat(...Object.keys(aliases).map((k) => aliases[k])).forEach((alias) => {
|
|
402
|
+
if (configuration['camel-case-expansion'] && alias.includes('-')) {
|
|
403
|
+
delete argv[alias.split('.').map((prop) => camelCase(prop)).join('.')];
|
|
404
|
+
}
|
|
405
|
+
delete argv[alias];
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
function pushPositional(arg) {
|
|
409
|
+
const maybeCoercedNumber = maybeCoerceNumber('_', arg);
|
|
410
|
+
if (typeof maybeCoercedNumber === 'string' || typeof maybeCoercedNumber === 'number')
|
|
411
|
+
argv._.push(maybeCoercedNumber);
|
|
412
|
+
}
|
|
413
|
+
function eatNargs(i, key, args, argAfterEqualSign) {
|
|
414
|
+
let ii;
|
|
415
|
+
let toEat = checkAllAliases(key, flags.nargs);
|
|
416
|
+
toEat = typeof toEat !== 'number' || isNaN(toEat) ? 1 : toEat;
|
|
417
|
+
if (toEat === 0) {
|
|
418
|
+
if (!isUndefined(argAfterEqualSign))
|
|
419
|
+
error = Error(__('Argument unexpected for: %s', key));
|
|
420
|
+
setArg(key, defaultValue(key));
|
|
421
|
+
return i;
|
|
422
|
+
}
|
|
423
|
+
let available = isUndefined(argAfterEqualSign) ? 0 : 1;
|
|
424
|
+
if (configuration['nargs-eats-options']) {
|
|
425
|
+
if (args.length - (i + 1) + available < toEat)
|
|
426
|
+
error = Error(__('Not enough arguments following: %s', key));
|
|
427
|
+
available = toEat;
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
for (ii = i + 1; ii < args.length; ii++) {
|
|
431
|
+
const a = args[ii];
|
|
432
|
+
if (!/^-[^0-9]/.exec(a) || negative.exec(a) || isUnknownOptionAsArg(a))
|
|
433
|
+
available++;
|
|
434
|
+
else
|
|
435
|
+
break;
|
|
436
|
+
}
|
|
437
|
+
if (available < toEat)
|
|
438
|
+
error = Error(__('Not enough arguments following: %s', key));
|
|
439
|
+
}
|
|
440
|
+
let consumed = Math.min(available, toEat);
|
|
441
|
+
if (!isUndefined(argAfterEqualSign) && consumed > 0) {
|
|
442
|
+
setArg(key, argAfterEqualSign);
|
|
443
|
+
consumed--;
|
|
444
|
+
}
|
|
445
|
+
for (ii = i + 1; ii < consumed + i + 1; ii++)
|
|
446
|
+
setArg(key, args[ii]);
|
|
447
|
+
return i + consumed;
|
|
448
|
+
}
|
|
449
|
+
function eatArray(i, key, args, argAfterEqualSign) {
|
|
450
|
+
let argsToSet = [];
|
|
451
|
+
let next = argAfterEqualSign || args[i + 1];
|
|
452
|
+
const nargsCount = checkAllAliases(key, flags.nargs);
|
|
453
|
+
if (checkAllAliases(key, flags.bools) && !/^(true|false)$/.test(next)) {
|
|
454
|
+
argsToSet.push(true);
|
|
455
|
+
}
|
|
456
|
+
else if (isUndefined(next) ||
|
|
457
|
+
(isUndefined(argAfterEqualSign) && /^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))) {
|
|
458
|
+
if (defaults[key] !== undefined) {
|
|
459
|
+
const defVal = defaults[key];
|
|
460
|
+
argsToSet = Array.isArray(defVal) ? defVal : [defVal];
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
if (!isUndefined(argAfterEqualSign))
|
|
465
|
+
argsToSet.push(processValue(key, argAfterEqualSign, true));
|
|
466
|
+
for (let ii = i + 1; ii < args.length; ii++) {
|
|
467
|
+
if ((!configuration['greedy-arrays'] && argsToSet.length > 0) || (nargsCount && typeof nargsCount === 'number' && argsToSet.length >= nargsCount))
|
|
468
|
+
break;
|
|
469
|
+
next = args[ii];
|
|
470
|
+
if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))
|
|
471
|
+
break;
|
|
472
|
+
i = ii;
|
|
473
|
+
argsToSet.push(processValue(key, next, inputIsString));
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
if (typeof nargsCount === 'number' && ((nargsCount && argsToSet.length < nargsCount) || (isNaN(nargsCount) && argsToSet.length === 0))) {
|
|
477
|
+
error = Error(__('Not enough arguments following: %s', key));
|
|
478
|
+
}
|
|
479
|
+
setArg(key, argsToSet);
|
|
480
|
+
return i;
|
|
481
|
+
}
|
|
482
|
+
function setArg(key, val, shouldStripQuotes = inputIsString) {
|
|
483
|
+
if (/-/.test(key) && configuration['camel-case-expansion']) {
|
|
484
|
+
const alias = key.split('.').map((prop) => camelCase(prop)).join('.');
|
|
485
|
+
addNewAlias(key, alias);
|
|
486
|
+
}
|
|
487
|
+
const value = processValue(key, val, shouldStripQuotes);
|
|
488
|
+
const splitKey = key.split('.');
|
|
489
|
+
setKey(argv, splitKey, value);
|
|
490
|
+
if (flags.aliases[key]) {
|
|
491
|
+
flags.aliases[key].forEach((x) => {
|
|
492
|
+
const keyProperties = x.split('.');
|
|
493
|
+
setKey(argv, keyProperties, value);
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
if (splitKey.length > 1 && configuration['dot-notation']) {
|
|
497
|
+
(flags.aliases[splitKey[0]] || []).forEach((x) => {
|
|
498
|
+
let keyProperties = x.split('.');
|
|
499
|
+
const a = [].concat(splitKey);
|
|
500
|
+
a.shift();
|
|
501
|
+
keyProperties = keyProperties.concat(a);
|
|
502
|
+
if (!(flags.aliases[key] || []).includes(keyProperties.join('.')))
|
|
503
|
+
setKey(argv, keyProperties, value);
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) {
|
|
507
|
+
const keys = [key].concat(flags.aliases[key] || []);
|
|
508
|
+
keys.forEach((k) => {
|
|
509
|
+
Object.defineProperty(argvReturn, k, {
|
|
510
|
+
enumerable: true,
|
|
511
|
+
get() {
|
|
512
|
+
return val;
|
|
513
|
+
},
|
|
514
|
+
set(v) {
|
|
515
|
+
val = typeof v === 'string' ? mixin.normalize(v) : v;
|
|
516
|
+
},
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
function addNewAlias(key, alias) {
|
|
522
|
+
if (!(flags.aliases[key] && flags.aliases[key].length)) {
|
|
523
|
+
flags.aliases[key] = [alias];
|
|
524
|
+
newAliases[alias] = true;
|
|
525
|
+
}
|
|
526
|
+
if (!(flags.aliases[alias] && flags.aliases[alias].length))
|
|
527
|
+
addNewAlias(alias, key);
|
|
528
|
+
}
|
|
529
|
+
function processValue(key, val, shouldStripQuotes) {
|
|
530
|
+
if (shouldStripQuotes)
|
|
531
|
+
val = stripQuotes(val);
|
|
532
|
+
if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {
|
|
533
|
+
if (typeof val === 'string')
|
|
534
|
+
val = val === 'true';
|
|
535
|
+
}
|
|
536
|
+
let value = Array.isArray(val) ? val.map((v) => maybeCoerceNumber(key, v)) : maybeCoerceNumber(key, val);
|
|
537
|
+
if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean'))
|
|
538
|
+
value = increment();
|
|
539
|
+
if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) {
|
|
540
|
+
if (Array.isArray(val))
|
|
541
|
+
value = val.map((v) => mixin.normalize(v));
|
|
542
|
+
else
|
|
543
|
+
value = mixin.normalize(val);
|
|
544
|
+
}
|
|
545
|
+
return value;
|
|
546
|
+
}
|
|
547
|
+
function maybeCoerceNumber(key, value) {
|
|
548
|
+
if (!configuration['parse-positional-numbers'] && key === '_')
|
|
549
|
+
return value;
|
|
550
|
+
if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) {
|
|
551
|
+
const shouldCoerceNumber = looksLikeNumber(value) && configuration['parse-numbers'] && Number.isSafeInteger(Math.floor(parseFloat(`${value}`)));
|
|
552
|
+
if (shouldCoerceNumber || (!isUndefined(value) && checkAllAliases(key, flags.numbers)))
|
|
553
|
+
value = Number(value);
|
|
554
|
+
}
|
|
555
|
+
return value;
|
|
556
|
+
}
|
|
557
|
+
function setConfig(argv) {
|
|
558
|
+
const configLookup = Object.create(null);
|
|
559
|
+
applyDefaultsAndAliases(configLookup, flags.aliases, defaults);
|
|
560
|
+
Object.keys(flags.configs).forEach((configKey) => {
|
|
561
|
+
const configPath = argv[configKey] || configLookup[configKey];
|
|
562
|
+
if (configPath) {
|
|
563
|
+
try {
|
|
564
|
+
let config = null;
|
|
565
|
+
const resolvedConfigPath = mixin.resolve(mixin.cwd(), configPath);
|
|
566
|
+
const resolveConfig = flags.configs[configKey];
|
|
567
|
+
if (typeof resolveConfig === 'function') {
|
|
568
|
+
try {
|
|
569
|
+
config = resolveConfig(resolvedConfigPath);
|
|
570
|
+
}
|
|
571
|
+
catch (e) {
|
|
572
|
+
config = e;
|
|
573
|
+
}
|
|
574
|
+
if (config instanceof Error) {
|
|
575
|
+
error = config;
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
else
|
|
580
|
+
config = mixin.require(resolvedConfigPath);
|
|
581
|
+
setConfigObject(config);
|
|
582
|
+
}
|
|
583
|
+
catch (ex) {
|
|
584
|
+
if (ex.name === 'PermissionDenied')
|
|
585
|
+
error = ex;
|
|
586
|
+
else if (argv[configKey])
|
|
587
|
+
error = Error(__('Invalid JSON config file: %s', configPath));
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
function setConfigObject(config, prev) {
|
|
593
|
+
Object.keys(config).forEach((key) => {
|
|
594
|
+
const value = config[key];
|
|
595
|
+
const fullKey = prev ? `${prev}.${key}` : key;
|
|
596
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value) && configuration['dot-notation']) {
|
|
597
|
+
setConfigObject(value, fullKey);
|
|
598
|
+
}
|
|
599
|
+
else if (!hasKey(argv, fullKey.split('.')) || (checkAllAliases(fullKey, flags.arrays) && configuration['combine-arrays'])) {
|
|
600
|
+
setArg(fullKey, value);
|
|
601
|
+
}
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
function setConfigObjects() {
|
|
605
|
+
if (typeof configObjects !== 'undefined')
|
|
606
|
+
configObjects.forEach((configObject) => setConfigObject(configObject));
|
|
607
|
+
}
|
|
608
|
+
function applyEnvVars(argv, configOnly) {
|
|
609
|
+
if (typeof envPrefix === 'undefined')
|
|
610
|
+
return;
|
|
611
|
+
const prefix = typeof envPrefix === 'string' ? envPrefix : '';
|
|
612
|
+
const env = mixin.env();
|
|
613
|
+
Object.keys(env).forEach((envVar) => {
|
|
614
|
+
if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) {
|
|
615
|
+
const keys = envVar.split('__').map((key, i) => {
|
|
616
|
+
if (i === 0)
|
|
617
|
+
key = key.substring(prefix.length);
|
|
618
|
+
return camelCase(key);
|
|
619
|
+
});
|
|
620
|
+
if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && !hasKey(argv, keys))
|
|
621
|
+
setArg(keys.join('.'), env[envVar]);
|
|
622
|
+
}
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
function applyCoercions(argv) {
|
|
626
|
+
let coerce;
|
|
627
|
+
const applied = new Set();
|
|
628
|
+
Object.keys(argv).forEach((key) => {
|
|
629
|
+
if (!applied.has(key)) {
|
|
630
|
+
coerce = checkAllAliases(key, flags.coercions);
|
|
631
|
+
if (typeof coerce === 'function') {
|
|
632
|
+
try {
|
|
633
|
+
const value = maybeCoerceNumber(key, coerce(argv[key]));
|
|
634
|
+
[].concat(flags.aliases[key] || [], key).forEach((ali) => {
|
|
635
|
+
applied.add(ali);
|
|
636
|
+
argv[ali] = value;
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
catch (err) {
|
|
640
|
+
error = err;
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
function setPlaceholderKeys(argv) {
|
|
647
|
+
flags.keys.forEach((key) => {
|
|
648
|
+
if (~key.indexOf('.'))
|
|
649
|
+
return;
|
|
650
|
+
if (typeof argv[key] === 'undefined')
|
|
651
|
+
argv[key] = undefined;
|
|
652
|
+
});
|
|
653
|
+
return argv;
|
|
654
|
+
}
|
|
655
|
+
function applyDefaultsAndAliases(obj, aliases, defaults, canLog = false) {
|
|
656
|
+
Object.keys(defaults).forEach((key) => {
|
|
657
|
+
if (!hasKey(obj, key.split('.'))) {
|
|
658
|
+
setKey(obj, key.split('.'), defaults[key]);
|
|
659
|
+
if (canLog)
|
|
660
|
+
defaulted[key] = true;
|
|
661
|
+
(aliases[key] || []).forEach((x) => {
|
|
662
|
+
if (hasKey(obj, x.split('.')))
|
|
663
|
+
return;
|
|
664
|
+
setKey(obj, x.split('.'), defaults[key]);
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
function hasKey(obj, keys) {
|
|
670
|
+
let o = obj;
|
|
671
|
+
if (!configuration['dot-notation'])
|
|
672
|
+
keys = [keys.join('.')];
|
|
673
|
+
keys.slice(0, -1).forEach((key) => {
|
|
674
|
+
o = o[key] || {};
|
|
675
|
+
});
|
|
676
|
+
const key = keys.at(-1);
|
|
677
|
+
if (typeof o !== 'object')
|
|
678
|
+
return false;
|
|
679
|
+
return key in o;
|
|
680
|
+
}
|
|
681
|
+
function setKey(obj, keys, value) {
|
|
682
|
+
let o = obj;
|
|
683
|
+
if (!configuration['dot-notation'])
|
|
684
|
+
keys = [keys.join('.')];
|
|
685
|
+
keys.slice(0, -1).forEach((key) => {
|
|
686
|
+
key = sanitizeKey(key);
|
|
687
|
+
if (typeof o === 'object' && o[key] === undefined)
|
|
688
|
+
o[key] = {};
|
|
689
|
+
if (typeof o[key] !== 'object' || Array.isArray(o[key])) {
|
|
690
|
+
if (Array.isArray(o[key]))
|
|
691
|
+
o[key].push({});
|
|
692
|
+
else
|
|
693
|
+
o[key] = [o[key], {}];
|
|
694
|
+
o = o[key][o[key].length - 1];
|
|
695
|
+
}
|
|
696
|
+
else
|
|
697
|
+
o = o[key];
|
|
698
|
+
});
|
|
699
|
+
const key = sanitizeKey(keys.at(-1));
|
|
700
|
+
const isTypeArray = checkAllAliases(keys.join('.'), flags.arrays);
|
|
701
|
+
const isValueArray = Array.isArray(value);
|
|
702
|
+
let duplicate = configuration['duplicate-arguments-array'];
|
|
703
|
+
if (!duplicate && checkAllAliases(key, flags.nargs)) {
|
|
704
|
+
duplicate = true;
|
|
705
|
+
if ((!isUndefined(o[key]) && flags.nargs[key] === 1) || (Array.isArray(o[key]) && o[key].length === flags.nargs[key]))
|
|
706
|
+
o[key] = undefined;
|
|
707
|
+
}
|
|
708
|
+
if (value === increment())
|
|
709
|
+
o[key] = increment(o[key]);
|
|
710
|
+
else if (Array.isArray(o[key])) {
|
|
711
|
+
if (duplicate && isTypeArray && isValueArray) {
|
|
712
|
+
o[key] = configuration['flatten-duplicate-arrays']
|
|
713
|
+
? o[key].concat(value)
|
|
714
|
+
: (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]);
|
|
715
|
+
}
|
|
716
|
+
else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray))
|
|
717
|
+
o[key] = value;
|
|
718
|
+
else
|
|
719
|
+
o[key] = o[key].concat([value]);
|
|
720
|
+
}
|
|
721
|
+
else if (o[key] === undefined && isTypeArray)
|
|
722
|
+
o[key] = isValueArray ? value : [value];
|
|
723
|
+
else if (duplicate && !(o[key] === undefined || checkAllAliases(key, flags.counts) || checkAllAliases(key, flags.bools)))
|
|
724
|
+
o[key] = [o[key], value];
|
|
725
|
+
else
|
|
726
|
+
o[key] = value;
|
|
727
|
+
}
|
|
728
|
+
function extendAliases(...objs) {
|
|
729
|
+
objs.forEach((obj) => {
|
|
730
|
+
Object.keys(obj || {}).forEach((key) => {
|
|
731
|
+
if (flags.aliases[key])
|
|
732
|
+
return;
|
|
733
|
+
flags.aliases[key] = [].concat(aliases[key] || []);
|
|
734
|
+
flags.aliases[key].concat(key).forEach((x) => {
|
|
735
|
+
if (/-/.test(x) && configuration['camel-case-expansion']) {
|
|
736
|
+
const c = camelCase(x);
|
|
737
|
+
if (c !== key && flags.aliases[key].indexOf(c) === -1) {
|
|
738
|
+
flags.aliases[key].push(c);
|
|
739
|
+
newAliases[c] = true;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
});
|
|
743
|
+
flags.aliases[key].concat(key).forEach((x) => {
|
|
744
|
+
if (x.length > 1 && /[A-Z]/.test(x) && configuration['camel-case-expansion']) {
|
|
745
|
+
const c = decamelize(x, '-');
|
|
746
|
+
if (c !== key && flags.aliases[key].indexOf(c) === -1) {
|
|
747
|
+
flags.aliases[key].push(c);
|
|
748
|
+
newAliases[c] = true;
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
});
|
|
752
|
+
flags.aliases[key].forEach((x) => {
|
|
753
|
+
flags.aliases[x] = [key].concat(flags.aliases[key].filter((y) => x !== y));
|
|
754
|
+
});
|
|
755
|
+
});
|
|
756
|
+
});
|
|
757
|
+
}
|
|
758
|
+
function checkAllAliases(key, flag) {
|
|
759
|
+
const toCheck = [].concat(flags.aliases[key] || [], key);
|
|
760
|
+
const keys = Object.keys(flag);
|
|
761
|
+
const setAlias = toCheck.find((k) => keys.includes(k));
|
|
762
|
+
return setAlias ? flag[setAlias] : false;
|
|
763
|
+
}
|
|
764
|
+
function hasAnyFlag(key) {
|
|
765
|
+
const flagsKeys = Object.keys(flags);
|
|
766
|
+
const toCheck = [].concat(flagsKeys.map((k) => flags[k]));
|
|
767
|
+
return toCheck.some((flag) => (Array.isArray(flag) ? flag.includes(key) : flag[key]));
|
|
768
|
+
}
|
|
769
|
+
function hasFlagsMatching(arg, ...patterns) {
|
|
770
|
+
const toCheck = [].concat(...patterns);
|
|
771
|
+
return toCheck.some((pattern) => {
|
|
772
|
+
const match = pattern.exec(arg);
|
|
773
|
+
return match && hasAnyFlag(match[1]);
|
|
774
|
+
});
|
|
775
|
+
}
|
|
776
|
+
function hasAllShortFlags(arg) {
|
|
777
|
+
if (negative.exec(arg) || !/^-[^-]+/.exec(arg))
|
|
778
|
+
return false;
|
|
779
|
+
let hasAllFlags = true;
|
|
780
|
+
let next;
|
|
781
|
+
const letters = arg.slice(1).split('');
|
|
782
|
+
for (let j = 0; j < letters.length; j++) {
|
|
783
|
+
next = arg.slice(j + 2);
|
|
784
|
+
if (!hasAnyFlag(letters[j])) {
|
|
785
|
+
hasAllFlags = false;
|
|
786
|
+
break;
|
|
787
|
+
}
|
|
788
|
+
if ((letters[j + 1] && letters[j + 1] === '=') ||
|
|
789
|
+
next === '-' ||
|
|
790
|
+
(/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) ||
|
|
791
|
+
(letters[j + 1] && /\W/.exec(letters[j + 1]))) {
|
|
792
|
+
break;
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
return hasAllFlags;
|
|
796
|
+
}
|
|
797
|
+
function isUnknownOptionAsArg(arg) {
|
|
798
|
+
return configuration['unknown-options-as-args'] && isUnknownOption(arg);
|
|
799
|
+
}
|
|
800
|
+
function isUnknownOption(arg) {
|
|
801
|
+
arg = arg.replace(/^-{3,}/, '--');
|
|
802
|
+
if (negative.exec(arg))
|
|
803
|
+
return false;
|
|
804
|
+
if (hasAllShortFlags(arg))
|
|
805
|
+
return false;
|
|
806
|
+
const flagWithEquals = /^-+([^=]+?)=[\s\S]*$/;
|
|
807
|
+
const normalFlag = /^-+([^=]+?)$/;
|
|
808
|
+
const flagEndingInHyphen = /^-+([^=]+?)-$/;
|
|
809
|
+
const flagEndingInDigits = /^-+([^=]+?\d+)$/;
|
|
810
|
+
const flagEndingInNonWordCharacters = /^-+([^=]+?)\W+.*$/;
|
|
811
|
+
return !hasFlagsMatching(arg, [flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters]);
|
|
812
|
+
}
|
|
813
|
+
function defaultValue(key) {
|
|
814
|
+
if (!checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts) && `${key}` in defaults)
|
|
815
|
+
return defaults[key];
|
|
816
|
+
return defaultForType(guessType(key));
|
|
817
|
+
}
|
|
818
|
+
function defaultForType(type) {
|
|
819
|
+
const def = {
|
|
820
|
+
[DefaultValuesForTypeKey.BOOLEAN]: true,
|
|
821
|
+
[DefaultValuesForTypeKey.STRING]: '',
|
|
822
|
+
[DefaultValuesForTypeKey.NUMBER]: undefined,
|
|
823
|
+
[DefaultValuesForTypeKey.ARRAY]: [],
|
|
824
|
+
};
|
|
825
|
+
return def[type];
|
|
826
|
+
}
|
|
827
|
+
function guessType(key) {
|
|
828
|
+
let type = DefaultValuesForTypeKey.BOOLEAN;
|
|
829
|
+
if (checkAllAliases(key, flags.strings))
|
|
830
|
+
type = DefaultValuesForTypeKey.STRING;
|
|
831
|
+
else if (checkAllAliases(key, flags.numbers))
|
|
832
|
+
type = DefaultValuesForTypeKey.NUMBER;
|
|
833
|
+
else if (checkAllAliases(key, flags.bools))
|
|
834
|
+
type = DefaultValuesForTypeKey.BOOLEAN;
|
|
835
|
+
else if (checkAllAliases(key, flags.arrays))
|
|
836
|
+
type = DefaultValuesForTypeKey.ARRAY;
|
|
837
|
+
return type;
|
|
838
|
+
}
|
|
839
|
+
function isUndefined(num) {
|
|
840
|
+
return num === undefined;
|
|
841
|
+
}
|
|
842
|
+
function checkConfiguration() {
|
|
843
|
+
Object.keys(flags.counts).find((key) => {
|
|
844
|
+
if (checkAllAliases(key, flags.arrays)) {
|
|
845
|
+
error = Error(__('Invalid configuration: %s, opts.count excludes opts.array.', key));
|
|
846
|
+
return true;
|
|
847
|
+
}
|
|
848
|
+
else if (checkAllAliases(key, flags.nargs)) {
|
|
849
|
+
error = Error(__('Invalid configuration: %s, opts.count excludes opts.narg.', key));
|
|
850
|
+
return true;
|
|
851
|
+
}
|
|
852
|
+
return false;
|
|
853
|
+
});
|
|
854
|
+
}
|
|
855
|
+
return {
|
|
856
|
+
aliases: Object.assign({}, flags.aliases),
|
|
857
|
+
argv: Object.assign(argvReturn, argv),
|
|
858
|
+
configuration,
|
|
859
|
+
defaulted: Object.assign({}, defaulted),
|
|
860
|
+
error,
|
|
861
|
+
newAliases: Object.assign({}, newAliases),
|
|
862
|
+
};
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
function combineAliases(aliases) {
|
|
866
|
+
const aliasArrays = [];
|
|
867
|
+
const combined = Object.create(null);
|
|
868
|
+
let change = true;
|
|
869
|
+
Object.keys(aliases).forEach((key) => {
|
|
870
|
+
aliasArrays.push([].concat(aliases[key], key));
|
|
871
|
+
});
|
|
872
|
+
while (change) {
|
|
873
|
+
change = false;
|
|
874
|
+
for (let i = 0; i < aliasArrays.length; i++) {
|
|
875
|
+
for (let ii = i + 1; ii < aliasArrays.length; ii++) {
|
|
876
|
+
const intersect = aliasArrays[i].filter((v) => aliasArrays[ii].indexOf(v) !== -1);
|
|
877
|
+
if (intersect.length) {
|
|
878
|
+
aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]);
|
|
879
|
+
aliasArrays.splice(ii, 1);
|
|
880
|
+
change = true;
|
|
881
|
+
break;
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
aliasArrays.forEach((aliasArray) => {
|
|
887
|
+
aliasArray = aliasArray.filter((v, i, self) => self.indexOf(v) === i);
|
|
888
|
+
const lastAlias = aliasArray.pop();
|
|
889
|
+
if (lastAlias !== undefined && typeof lastAlias === 'string')
|
|
890
|
+
combined[lastAlias] = aliasArray;
|
|
891
|
+
});
|
|
892
|
+
return combined;
|
|
893
|
+
}
|
|
894
|
+
function increment(orig) {
|
|
895
|
+
return orig !== undefined ? orig + 1 : 1;
|
|
896
|
+
}
|
|
897
|
+
function sanitizeKey(key) {
|
|
898
|
+
if (key === '__proto__')
|
|
899
|
+
return '___proto___';
|
|
900
|
+
return key;
|
|
901
|
+
}
|
|
902
|
+
function stripQuotes(val) {
|
|
903
|
+
return typeof val === 'string' && (val[0] === "'" || val[0] === '"') && val.at(-1) === val[0] ? val.substring(1, val.length - 1) : val;
|
|
904
|
+
}
|
|
905
|
+
const env = process.env;
|
|
906
|
+
const nodeRequire = createRequire(import.meta.url);
|
|
907
|
+
const parser = new YargsParser({
|
|
908
|
+
cwd: process.cwd,
|
|
909
|
+
env: () => env,
|
|
910
|
+
format,
|
|
911
|
+
normalize,
|
|
912
|
+
resolve,
|
|
913
|
+
require: (path) => {
|
|
914
|
+
if (typeof nodeRequire !== 'undefined')
|
|
915
|
+
return nodeRequire(path);
|
|
916
|
+
if (/\.json$/.exec(path))
|
|
917
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
918
|
+
throw Error('only .json config files are supported in ESM');
|
|
919
|
+
},
|
|
920
|
+
});
|
|
921
|
+
const yargsParser = function Parser(args, opts) {
|
|
922
|
+
return parser.parse(args.slice(), opts).argv;
|
|
923
|
+
};
|
|
924
|
+
yargsParser.detailed = (args, opts) => parser.parse(args.slice(), opts);
|
|
925
|
+
yargsParser.camelCase = camelCase;
|
|
926
|
+
yargsParser.decamelize = decamelize;
|
|
927
|
+
yargsParser.looksLikeNumber = looksLikeNumber;
|
|
928
|
+
export { yargsParser as Parser };
|
|
929
|
+
export default yargsParser;
|