awais-tool
Version:
Get to know via `npx itishaawais`
87 lines (67 loc) • 2.14 kB
JavaScript
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;
};