/
collectExtraArgs.js
56 lines (48 loc) · 1.28 KB
/
collectExtraArgs.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
const _ = require('lodash');
const parseArgv = require('yargs-parser');
function collectBlacklistedArgs(builder) {
return Object.entries(builder).reduce(
(set, [key, option]) => {
if (option.alias) {
if (Array.isArray(option.alias)) {
for (const value of option.alias) {
set.add(value);
}
} else {
set.add(option.alias);
}
}
return set.add(key);
},
new Set(['$0', '_', '--'])
);
}
function configureCollectExtraArgs(builder) {
const blacklistedArgs = collectBlacklistedArgs(builder);
/***
* @param {Object} argv
* @returns {string[]}
*/
function collectExtraArgs(argv) {
const parsed = parseArgv(argv, {
configuration: {
'boolean-negation': false,
'camel-case-expansion': false,
'dot-notation': false,
'parse-numbers': false,
'duplicate-arguments-array': false
}
});
const passthrough = _.chain(parsed)
.omitBy((_value, key) => blacklistedArgs.has(key))
.entries()
.map(([key, value]) => {
return value === true ? `--${key}` : `--${key} ${value}`;
})
.concat(parsed['_'])
.value();
return passthrough;
}
return collectExtraArgs;
}
module.exports = configureCollectExtraArgs;