parser.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { d as decamelizeKeys, b as constructParserOptions } from './dependencies.js';
  2. const buildParserFlags = ({flags, booleanDefault}) => {
  3. const parserFlags = {};
  4. for (const [flagKey, flagValue] of Object.entries(flags)) {
  5. const flag = {...flagValue};
  6. // `minimist-options` expects `flag.alias`
  7. if (flag.shortFlag) {
  8. flag.alias = flag.shortFlag;
  9. delete flag.shortFlag;
  10. }
  11. if (
  12. booleanDefault !== undefined
  13. && flag.type === 'boolean'
  14. && !Object.hasOwn(flag, 'default')
  15. ) {
  16. flag.default = flag.isMultiple ? [booleanDefault] : booleanDefault;
  17. }
  18. if (flag.isMultiple) {
  19. flag.type = flag.type ? `${flag.type}-array` : 'array';
  20. flag.default = flag.default ?? [];
  21. delete flag.isMultiple;
  22. }
  23. if (Array.isArray(flag.aliases)) {
  24. if (flag.alias) {
  25. flag.aliases.push(flag.alias);
  26. }
  27. flag.alias = flag.aliases;
  28. delete flag.aliases;
  29. }
  30. parserFlags[flagKey] = flag;
  31. }
  32. return parserFlags;
  33. };
  34. const buildParserOptions = options => {
  35. let parserOptions = buildParserFlags(options);
  36. parserOptions.arguments = options.input;
  37. parserOptions = decamelizeKeys(parserOptions, {separator: '-', exclude: ['stopEarly', '--']});
  38. if (options.inferType) {
  39. delete parserOptions.arguments;
  40. }
  41. // Add --help and --version to known flags if autoHelp or autoVersion are set
  42. if (!options.allowUnknownFlags) {
  43. if (options.autoHelp && !parserOptions.help) {
  44. parserOptions.help = {type: 'boolean'};
  45. }
  46. if (options.autoVersion && !parserOptions.version) {
  47. parserOptions.version = {type: 'boolean'};
  48. }
  49. }
  50. parserOptions = constructParserOptions(parserOptions);
  51. parserOptions.configuration = {
  52. ...parserOptions.configuration,
  53. 'greedy-arrays': false,
  54. };
  55. if (parserOptions['--']) {
  56. parserOptions.configuration['populate--'] = true;
  57. }
  58. if (!options.allowUnknownFlags) {
  59. // Collect unknown options in `argv._` to be checked later.
  60. parserOptions.configuration['unknown-options-as-args'] = true;
  61. }
  62. return parserOptions;
  63. };
  64. export { buildParserOptions };