meow
Version:
CLI app helper
114 lines (84 loc) • 2.67 kB
JavaScript
import { d as decamelizeKeys, b as constructParserOptions, e as decamelize } from './dependencies.js';
const addCamelCaseAlias = (flagKey, flag) => {
if (flagKey === '--') {
return;
}
const decamelizedKey = decamelize(flagKey, {separator: '-'});
if (decamelizedKey === flagKey) {
return;
}
let aliases = [];
if (flag.alias !== undefined) {
aliases = Array.isArray(flag.alias) ? flag.alias : [flag.alias];
}
if (aliases.includes(flagKey)) {
return;
}
aliases.push(flagKey);
flag.alias = aliases.length === 1 ? aliases[0] : aliases;
};
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)) {
const aliases = [...flag.aliases];
if (flag.alias) {
aliases.push(flag.alias);
}
flag.alias = aliases;
delete flag.aliases;
}
addCamelCaseAlias(flagKey, flag);
parserFlags[flagKey] = flag;
}
return parserFlags;
};
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,
'parse-numbers': options.inferType,
};
if (options.commands) {
parserOptions.configuration['halt-at-non-option'] = true;
}
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;
};
export { buildParserOptions };