forked from sindresorhus/meow
-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser.js
83 lines (64 loc) 路 1.96 KB
/
parser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import constructParserOptions from 'minimist-options';
import decamelizeKeys from 'decamelize-keys';
const buildParserFlags = ({flags, booleanDefault}) => {
const parserFlags = {};
for (const [flagKey, flagValue] of Object.entries(flags)) {
const flag = {...flagValue};
// `minimist-options` expects `flag.alias`
if (flag.shortFlag) {
flag.alias = flag.shortFlag;
delete flag.shortFlag;
}
if (
booleanDefault !== undefined
&& flag.type === 'boolean'
&& !Object.hasOwn(flag, 'default')
) {
flag.default = flag.isMultiple ? [booleanDefault] : booleanDefault;
}
if (flag.isMultiple) {
flag.type = flag.type ? `${flag.type}-array` : 'array';
flag.default ??= [];
delete flag.isMultiple;
}
if (Array.isArray(flag.aliases)) {
if (flag.alias) {
flag.aliases.push(flag.alias);
}
flag.alias = flag.aliases;
delete flag.aliases;
}
parserFlags[flagKey] = flag;
}
return parserFlags;
};
export const buildParserOptions = options => {
let parserOptions = buildParserFlags(options);
parserOptions.arguments = options.input;
parserOptions = decamelizeKeys(parserOptions, {separator: '-', exclude: ['stopEarly', '--']});
if (options.inferType) {
delete parserOptions.arguments;
}
// Add --help and --version to known flags if autoHelp or autoVersion are set
if (!options.allowUnknownFlags) {
if (options.autoHelp && !parserOptions.help) {
parserOptions.help = {type: 'boolean'};
}
if (options.autoVersion && !parserOptions.version) {
parserOptions.version = {type: 'boolean'};
}
}
parserOptions = constructParserOptions(parserOptions);
parserOptions.configuration = {
...parserOptions.configuration,
'greedy-arrays': false,
};
if (parserOptions['--']) {
parserOptions.configuration['populate--'] = true;
}
if (!options.allowUnknownFlags) {
// Collect unknown options in `argv._` to be checked later.
parserOptions.configuration['unknown-options-as-args'] = true;
}
return parserOptions;
};