2021-12-16 09:21:15 +08:00
|
|
|
"use strict";
|
|
|
|
|
const pick = require("lodash/pick");
|
2021-12-18 11:11:49 +08:00
|
|
|
const camelCase = require("camelcase");
|
2022-01-28 09:24:48 +08:00
|
|
|
const chalk = require("chalk");
|
2021-12-16 09:21:15 +08:00
|
|
|
const {
|
|
|
|
|
optionsNormalizer: { normalizeCliOptions },
|
|
|
|
|
} = require("../prettier-internal.js");
|
|
|
|
|
const getContextOptions = require("./get-context-options.js");
|
|
|
|
|
const minimist = require("./minimist.js");
|
|
|
|
|
const createMinimistOptions = require("./create-minimist-options.js");
|
|
|
|
|
|
|
|
|
|
function parseArgv(rawArguments, detailedOptions, logger, keys) {
|
|
|
|
|
const minimistOptions = createMinimistOptions(detailedOptions);
|
|
|
|
|
let argv = minimist(rawArguments, minimistOptions);
|
|
|
|
|
|
|
|
|
|
if (keys) {
|
2022-02-18 16:36:53 +08:00
|
|
|
if (keys.includes("plugin-search-dir") && !keys.includes("plugin-search")) {
|
|
|
|
|
keys.push("plugin-search");
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-16 09:21:15 +08:00
|
|
|
detailedOptions = detailedOptions.filter((option) =>
|
|
|
|
|
keys.includes(option.name)
|
|
|
|
|
);
|
|
|
|
|
argv = pick(argv, keys);
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-28 09:24:48 +08:00
|
|
|
const normalized = normalizeCliOptions(argv, detailedOptions, {
|
|
|
|
|
logger,
|
|
|
|
|
colorsModule: chalk,
|
|
|
|
|
});
|
2021-12-18 11:11:49 +08:00
|
|
|
|
2022-02-18 16:36:53 +08:00
|
|
|
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;
|
|
|
|
|
},
|
|
|
|
|
};
|
2021-12-16 09:21:15 +08:00
|
|
|
}
|
|
|
|
|
|
2022-02-18 16:36:53 +08:00
|
|
|
const detailedOptionsWithoutPlugins = getContextOptions(
|
|
|
|
|
[],
|
|
|
|
|
false
|
|
|
|
|
).detailedOptions;
|
2021-12-16 09:21:15 +08:00
|
|
|
function parseArgvWithoutPlugins(rawArguments, logger, keys) {
|
|
|
|
|
return parseArgv(
|
|
|
|
|
rawArguments,
|
|
|
|
|
detailedOptionsWithoutPlugins,
|
|
|
|
|
logger,
|
|
|
|
|
typeof keys === "string" ? [keys] : keys
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = { parseArgv, parseArgvWithoutPlugins };
|