/
parse-cli-arguments.js
56 lines (49 loc) · 1.7 KB
/
parse-cli-arguments.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
"use strict";
const pick = require("lodash/pick");
const camelCase = require("camelcase");
const getContextOptions = require("./get-context-options.js");
const minimist = require("./minimist.js");
const createMinimistOptions = require("./create-minimist-options.js");
const normalizeCliOptions = require("./normalize-cli-options.js");
function parseArgv(rawArguments, detailedOptions, logger, keys) {
const minimistOptions = createMinimistOptions(detailedOptions);
let argv = minimist(rawArguments, minimistOptions);
if (keys) {
if (keys.includes("plugin-search-dir") && !keys.includes("plugin-search")) {
keys.push("plugin-search");
}
detailedOptions = detailedOptions.filter((option) =>
keys.includes(option.name)
);
argv = pick(argv, keys);
}
const normalized = normalizeCliOptions(argv, detailedOptions, { logger });
return {
...Object.fromEntries(
Object.entries(normalized).map(([key, value]) => {
const option = detailedOptions.find(({ name }) => name === key) || {};
// If the flag is a prettier option, use the option name
// `--plugin-search-dir` -> `pluginSearchDirs`
// Otherwise use camel case for readability
// `--ignore-unknown` -> `ignoreUnknown`
return [option.forwardToApi || camelCase(key), value];
})
),
get __raw() {
return argv;
},
};
}
const detailedOptionsWithoutPlugins = getContextOptions(
[],
false
).detailedOptions;
function parseArgvWithoutPlugins(rawArguments, logger, keys) {
return parseArgv(
rawArguments,
detailedOptionsWithoutPlugins,
logger,
typeof keys === "string" ? [keys] : keys
);
}
module.exports = { parseArgv, parseArgvWithoutPlugins };