immosquare-cleaner 0.1.31 → 0.1.32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/immosquare-cleaner/version.rb +1 -1
  3. data/lib/immosquare-cleaner.rb +1 -0
  4. data/node_modules/@eslint/js/package.json +1 -1
  5. data/node_modules/eslint/lib/api.js +29 -1
  6. data/node_modules/eslint/lib/config/flat-config-schema.js +35 -20
  7. data/node_modules/eslint/lib/eslint/eslint.js +7 -0
  8. data/node_modules/eslint/lib/eslint/flat-eslint.js +17 -4
  9. data/node_modules/eslint/lib/options.js +1 -1
  10. data/node_modules/eslint/lib/rule-tester/flat-rule-tester.js +10 -1
  11. data/node_modules/eslint/package.json +4 -4
  12. data/node_modules/npm-check-updates/README.md +8 -4
  13. data/node_modules/npm-check-updates/build/cli.d.ts +1 -0
  14. data/node_modules/npm-check-updates/build/cli.js +28 -0
  15. data/node_modules/npm-check-updates/build/cli.js.map +1 -0
  16. data/node_modules/npm-check-updates/build/index-BnIU43YD.js +2 -0
  17. data/node_modules/npm-check-updates/build/index-BnIU43YD.js.map +1 -0
  18. data/node_modules/npm-check-updates/build/index-CI_x-D21.js +593 -0
  19. data/node_modules/npm-check-updates/build/index-CI_x-D21.js.map +1 -0
  20. data/node_modules/npm-check-updates/build/index-Ci8A2QXv.js +6 -0
  21. data/node_modules/npm-check-updates/build/index-Ci8A2QXv.js.map +1 -0
  22. data/node_modules/npm-check-updates/build/index-DgVn3Gax.js +36 -0
  23. data/node_modules/npm-check-updates/build/index-DgVn3Gax.js.map +1 -0
  24. data/node_modules/npm-check-updates/build/index-_DliZFxU.js +5 -0
  25. data/node_modules/npm-check-updates/build/index-_DliZFxU.js.map +1 -0
  26. data/node_modules/npm-check-updates/build/index.d.ts +209 -0
  27. data/node_modules/npm-check-updates/build/index.js +2 -0
  28. data/node_modules/npm-check-updates/build/index.js.map +1 -0
  29. data/node_modules/npm-check-updates/build/package.json +1 -1
  30. data/node_modules/npm-check-updates/build/src/cli-options.js +10 -4
  31. data/node_modules/npm-check-updates/build/src/cli-options.js.map +1 -1
  32. data/node_modules/npm-check-updates/build/src/lib/upgradePackageDefinitions.js +2 -1
  33. data/node_modules/npm-check-updates/build/src/lib/upgradePackageDefinitions.js.map +1 -1
  34. data/node_modules/npm-check-updates/build/src/package-managers/gitTags.d.ts +2 -0
  35. data/node_modules/npm-check-updates/build/src/package-managers/gitTags.js +10 -3
  36. data/node_modules/npm-check-updates/build/src/package-managers/gitTags.js.map +1 -1
  37. data/node_modules/npm-check-updates/build/src/package-managers/npm.js +1 -5
  38. data/node_modules/npm-check-updates/build/src/package-managers/npm.js.map +1 -1
  39. data/node_modules/npm-check-updates/package.json +1 -1
  40. data/package.json +2 -2
  41. metadata +20 -7
  42. data/node_modules/npm-check-updates/build/src/lib/queryVersions.d.mts +0 -13
  43. data/node_modules/npm-check-updates/build/src/lib/queryVersions.mjs +0 -111
  44. data/node_modules/npm-check-updates/build/src/lib/queryVersions.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sources":["../node_modules/commander/lib/error.js","../node_modules/commander/lib/argument.js","../node_modules/commander/lib/help.js","../node_modules/commander/lib/option.js","../node_modules/commander/lib/suggestSimilar.js","../node_modules/commander/lib/command.js","../node_modules/commander/index.js","../node_modules/commander/esm.mjs","../node_modules/lodash/cloneDeep.js","../src/bin/cli.ts"],"sourcesContent":["/**\n * CommanderError class\n * @class\n */\nclass CommanderError extends Error {\n /**\n * Constructs the CommanderError class\n * @param {number} exitCode suggested exit code which could be used with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @constructor\n */\n constructor(exitCode, code, message) {\n super(message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n this.code = code;\n this.exitCode = exitCode;\n this.nestedError = undefined;\n }\n}\n\n/**\n * InvalidArgumentError class\n * @class\n */\nclass InvalidArgumentError extends CommanderError {\n /**\n * Constructs the InvalidArgumentError class\n * @param {string} [message] explanation of why argument is invalid\n * @constructor\n */\n constructor(message) {\n super(1, 'commander.invalidArgument', message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n /**\n * Initialize a new command argument with the given name and description.\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @param {string} name\n * @param {string} [description]\n */\n\n constructor(name, description) {\n this.description = description || '';\n this.variadic = false;\n this.parseArg = undefined;\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.argChoices = undefined;\n\n switch (name[0]) {\n case '<': // e.g. <required>\n this.required = true;\n this._name = name.slice(1, -1);\n break;\n case '[': // e.g. [optional]\n this.required = false;\n this._name = name.slice(1, -1);\n break;\n default:\n this.required = true;\n this._name = name;\n break;\n }\n\n if (this._name.length > 3 && this._name.slice(-3) === '...') {\n this.variadic = true;\n this._name = this._name.slice(0, -3);\n }\n }\n\n /**\n * Return argument name.\n *\n * @return {string}\n */\n\n name() {\n return this._name;\n }\n\n /**\n * @package internal use only\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Argument}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI command arguments into argument values.\n *\n * @param {Function} [fn]\n * @return {Argument}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Only allow argument value to be one of choices.\n *\n * @param {string[]} values\n * @return {Argument}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(', ')}.`);\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Make argument required.\n */\n argRequired() {\n this.required = true;\n return this;\n }\n\n /**\n * Make argument optional.\n */\n argOptional() {\n this.required = false;\n return this;\n }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nfunction humanReadableArgName(arg) {\n const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n return arg.required\n ? '<' + nameOutput + '>'\n : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n","const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n constructor() {\n this.helpWidth = undefined;\n this.sortSubcommands = false;\n this.sortOptions = false;\n this.showGlobalOptions = false;\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n *\n * @param {Command} cmd\n * @returns {Command[]}\n */\n\n visibleCommands(cmd) {\n const visibleCommands = cmd.commands.filter(cmd => !cmd._hidden);\n const helpCommand = cmd._getHelpCommand();\n if (helpCommand && !helpCommand._hidden) {\n visibleCommands.push(helpCommand);\n }\n if (this.sortSubcommands) {\n visibleCommands.sort((a, b) => {\n // @ts-ignore: overloaded return type\n return a.name().localeCompare(b.name());\n });\n }\n return visibleCommands;\n }\n\n /**\n * Compare options for sort.\n *\n * @param {Option} a\n * @param {Option} b\n * @returns number\n */\n compareOptions(a, b) {\n const getSortKey = (option) => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short ? option.short.replace(/^-/, '') : option.long.replace(/^--/, '');\n };\n return getSortKey(a).localeCompare(getSortKey(b));\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleOptions(cmd) {\n const visibleOptions = cmd.options.filter((option) => !option.hidden);\n // Built-in help option.\n const helpOption = cmd._getHelpOption();\n if (helpOption && !helpOption.hidden) {\n // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n if (!removeShort && !removeLong) {\n visibleOptions.push(helpOption); // no changes needed\n } else if (helpOption.long && !removeLong) {\n visibleOptions.push(cmd.createOption(helpOption.long, helpOption.description));\n } else if (helpOption.short && !removeShort) {\n visibleOptions.push(cmd.createOption(helpOption.short, helpOption.description));\n }\n }\n if (this.sortOptions) {\n visibleOptions.sort(this.compareOptions);\n }\n return visibleOptions;\n }\n\n /**\n * Get an array of the visible global options. (Not including help.)\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleGlobalOptions(cmd) {\n if (!this.showGlobalOptions) return [];\n\n const globalOptions = [];\n for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) {\n const visibleOptions = ancestorCmd.options.filter((option) => !option.hidden);\n globalOptions.push(...visibleOptions);\n }\n if (this.sortOptions) {\n globalOptions.sort(this.compareOptions);\n }\n return globalOptions;\n }\n\n /**\n * Get an array of the arguments if any have a description.\n *\n * @param {Command} cmd\n * @returns {Argument[]}\n */\n\n visibleArguments(cmd) {\n // Side effect! Apply the legacy descriptions before the arguments are displayed.\n if (cmd._argsDescription) {\n cmd.registeredArguments.forEach(argument => {\n argument.description = argument.description || cmd._argsDescription[argument.name()] || '';\n });\n }\n\n // If there are any arguments with a description then return all the arguments.\n if (cmd.registeredArguments.find(argument => argument.description)) {\n return cmd.registeredArguments;\n }\n return [];\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandTerm(cmd) {\n // Legacy. Ignores custom usage string, and nested commands.\n const args = cmd.registeredArguments.map(arg => humanReadableArgName(arg)).join(' ');\n return cmd._name +\n (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n (args ? ' ' + args : '');\n }\n\n /**\n * Get the option term to show in the list of options.\n *\n * @param {Option} option\n * @returns {string}\n */\n\n optionTerm(option) {\n return option.flags;\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n *\n * @param {Argument} argument\n * @returns {string}\n */\n\n argumentTerm(argument) {\n return argument.name();\n }\n\n /**\n * Get the longest command term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestSubcommandTermLength(cmd, helper) {\n return helper.visibleCommands(cmd).reduce((max, command) => {\n return Math.max(max, helper.subcommandTerm(command).length);\n }, 0);\n }\n\n /**\n * Get the longest option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestOptionTermLength(cmd, helper) {\n return helper.visibleOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n }\n\n /**\n * Get the longest global option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestGlobalOptionTermLength(cmd, helper) {\n return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n }\n\n /**\n * Get the longest argument term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestArgumentTermLength(cmd, helper) {\n return helper.visibleArguments(cmd).reduce((max, argument) => {\n return Math.max(max, helper.argumentTerm(argument).length);\n }, 0);\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandUsage(cmd) {\n // Usage\n let cmdName = cmd._name;\n if (cmd._aliases[0]) {\n cmdName = cmdName + '|' + cmd._aliases[0];\n }\n let ancestorCmdNames = '';\n for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) {\n ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n }\n return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n }\n\n /**\n * Get the description for the command.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandDescription(cmd) {\n // @ts-ignore: overloaded return type\n return cmd.description();\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandDescription(cmd) {\n // @ts-ignore: overloaded return type\n return cmd.summary() || cmd.description();\n }\n\n /**\n * Get the option description to show in the list of options.\n *\n * @param {Option} option\n * @return {string}\n */\n\n optionDescription(option) {\n const extraInfo = [];\n\n if (option.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);\n }\n if (option.defaultValue !== undefined) {\n // default for boolean and negated more for programmer than end user,\n // but show true/false for boolean option as may be for hand-rolled env or config processing.\n const showDefault = option.required || option.optional ||\n (option.isBoolean() && typeof option.defaultValue === 'boolean');\n if (showDefault) {\n extraInfo.push(`default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`);\n }\n }\n // preset for boolean and negated are more for programmer than end user\n if (option.presetArg !== undefined && option.optional) {\n extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n }\n if (option.envVar !== undefined) {\n extraInfo.push(`env: ${option.envVar}`);\n }\n if (extraInfo.length > 0) {\n return `${option.description} (${extraInfo.join(', ')})`;\n }\n\n return option.description;\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n *\n * @param {Argument} argument\n * @return {string}\n */\n\n argumentDescription(argument) {\n const extraInfo = [];\n if (argument.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(`default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`);\n }\n if (extraInfo.length > 0) {\n const extraDescripton = `(${extraInfo.join(', ')})`;\n if (argument.description) {\n return `${argument.description} ${extraDescripton}`;\n }\n return extraDescripton;\n }\n return argument.description;\n }\n\n /**\n * Generate the built-in help text.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {string}\n */\n\n formatHelp(cmd, helper) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n const itemIndentWidth = 2;\n const itemSeparatorWidth = 2; // between term and description\n function formatItem(term, description) {\n if (description) {\n const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;\n return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth);\n }\n return term;\n }\n function formatList(textArray) {\n return textArray.join('\\n').replace(/^/gm, ' '.repeat(itemIndentWidth));\n }\n\n // Usage\n let output = [`Usage: ${helper.commandUsage(cmd)}`, ''];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([helper.wrap(commandDescription, helpWidth, 0), '']);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument) => {\n return formatItem(helper.argumentTerm(argument), helper.argumentDescription(argument));\n });\n if (argumentList.length > 0) {\n output = output.concat(['Arguments:', formatList(argumentList), '']);\n }\n\n // Options\n const optionList = helper.visibleOptions(cmd).map((option) => {\n return formatItem(helper.optionTerm(option), helper.optionDescription(option));\n });\n if (optionList.length > 0) {\n output = output.concat(['Options:', formatList(optionList), '']);\n }\n\n if (this.showGlobalOptions) {\n const globalOptionList = helper.visibleGlobalOptions(cmd).map((option) => {\n return formatItem(helper.optionTerm(option), helper.optionDescription(option));\n });\n if (globalOptionList.length > 0) {\n output = output.concat(['Global Options:', formatList(globalOptionList), '']);\n }\n }\n\n // Commands\n const commandList = helper.visibleCommands(cmd).map((cmd) => {\n return formatItem(helper.subcommandTerm(cmd), helper.subcommandDescription(cmd));\n });\n if (commandList.length > 0) {\n output = output.concat(['Commands:', formatList(commandList), '']);\n }\n\n return output.join('\\n');\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n padWidth(cmd, helper) {\n return Math.max(\n helper.longestOptionTermLength(cmd, helper),\n helper.longestGlobalOptionTermLength(cmd, helper),\n helper.longestSubcommandTermLength(cmd, helper),\n helper.longestArgumentTermLength(cmd, helper)\n );\n }\n\n /**\n * Wrap the given string to width characters per line, with lines after the first indented.\n * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.\n *\n * @param {string} str\n * @param {number} width\n * @param {number} indent\n * @param {number} [minColumnWidth=40]\n * @return {string}\n *\n */\n\n wrap(str, width, indent, minColumnWidth = 40) {\n // Full \\s characters, minus the linefeeds.\n const indents = ' \\\\f\\\\t\\\\v\\u00a0\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff';\n // Detect manually wrapped and indented strings by searching for line break followed by spaces.\n const manualIndent = new RegExp(`[\\\\n][${indents}]+`);\n if (str.match(manualIndent)) return str;\n // Do not wrap if not enough room for a wrapped column of text (as could end up with a word per line).\n const columnWidth = width - indent;\n if (columnWidth < minColumnWidth) return str;\n\n const leadingStr = str.slice(0, indent);\n const columnText = str.slice(indent).replace('\\r\\n', '\\n');\n const indentString = ' '.repeat(indent);\n const zeroWidthSpace = '\\u200B';\n const breaks = `\\\\s${zeroWidthSpace}`;\n // Match line end (so empty lines don't collapse),\n // or as much text as will fit in column, or excess text up to first break.\n const regex = new RegExp(`\\n|.{1,${columnWidth - 1}}([${breaks}]|$)|[^${breaks}]+?([${breaks}]|$)`, 'g');\n const lines = columnText.match(regex) || [];\n return leadingStr + lines.map((line, i) => {\n if (line === '\\n') return ''; // preserve empty lines\n return ((i > 0) ? indentString : '') + line.trimEnd();\n }).join('\\n');\n }\n}\n\nexports.Help = Help;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n /**\n * Initialize a new `Option` with the given `flags` and `description`.\n *\n * @param {string} flags\n * @param {string} [description]\n */\n\n constructor(flags, description) {\n this.flags = flags;\n this.description = description || '';\n\n this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n this.optional = flags.includes('['); // A value is optional when the option is specified.\n // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n const optionFlags = splitOptionFlags(flags);\n this.short = optionFlags.shortFlag;\n this.long = optionFlags.longFlag;\n this.negate = false;\n if (this.long) {\n this.negate = this.long.startsWith('--no-');\n }\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.presetArg = undefined;\n this.envVar = undefined;\n this.parseArg = undefined;\n this.hidden = false;\n this.argChoices = undefined;\n this.conflictsWith = [];\n this.implied = undefined;\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Option}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n * The custom processing (parseArg) is called.\n *\n * @example\n * new Option('--color').default('GREYSCALE').preset('RGB');\n * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n *\n * @param {*} arg\n * @return {Option}\n */\n\n preset(arg) {\n this.presetArg = arg;\n return this;\n }\n\n /**\n * Add option name(s) that conflict with this option.\n * An error will be displayed if conflicting options are found during parsing.\n *\n * @example\n * new Option('--rgb').conflicts('cmyk');\n * new Option('--js').conflicts(['ts', 'jsx']);\n *\n * @param {(string | string[])} names\n * @return {Option}\n */\n\n conflicts(names) {\n this.conflictsWith = this.conflictsWith.concat(names);\n return this;\n }\n\n /**\n * Specify implied option values for when this option is set and the implied options are not.\n *\n * The custom processing (parseArg) is not called on the implied values.\n *\n * @example\n * program\n * .addOption(new Option('--log', 'write logging information to file'))\n * .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n *\n * @param {Object} impliedOptionValues\n * @return {Option}\n */\n implies(impliedOptionValues) {\n let newImplied = impliedOptionValues;\n if (typeof impliedOptionValues === 'string') {\n // string is not documented, but easy mistake and we can do what user probably intended.\n newImplied = { [impliedOptionValues]: true };\n }\n this.implied = Object.assign(this.implied || {}, newImplied);\n return this;\n }\n\n /**\n * Set environment variable to check for option value.\n *\n * An environment variable is only used if when processed the current option value is\n * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n *\n * @param {string} name\n * @return {Option}\n */\n\n env(name) {\n this.envVar = name;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI option arguments into option values.\n *\n * @param {Function} [fn]\n * @return {Option}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Whether the option is mandatory and must have a value after parsing.\n *\n * @param {boolean} [mandatory=true]\n * @return {Option}\n */\n\n makeOptionMandatory(mandatory = true) {\n this.mandatory = !!mandatory;\n return this;\n }\n\n /**\n * Hide option in help.\n *\n * @param {boolean} [hide=true]\n * @return {Option}\n */\n\n hideHelp(hide = true) {\n this.hidden = !!hide;\n return this;\n }\n\n /**\n * @package internal use only\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Only allow option value to be one of choices.\n *\n * @param {string[]} values\n * @return {Option}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(`Allowed choices are ${this.argChoices.join(', ')}.`);\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Return option name.\n *\n * @return {string}\n */\n\n name() {\n if (this.long) {\n return this.long.replace(/^--/, '');\n }\n return this.short.replace(/^-/, '');\n }\n\n /**\n * Return option name, in a camelcase format that can be used\n * as a object attribute key.\n *\n * @return {string}\n */\n\n attributeName() {\n return camelcase(this.name().replace(/^no-/, ''));\n }\n\n /**\n * Check if `arg` matches the short or long flag.\n *\n * @param {string} arg\n * @return {boolean}\n * @package internal use only\n */\n\n is(arg) {\n return this.short === arg || this.long === arg;\n }\n\n /**\n * Return whether a boolean option.\n *\n * Options are one of boolean, negated, required argument, or optional argument.\n *\n * @return {boolean}\n * @package internal use only\n */\n\n isBoolean() {\n return !this.required && !this.optional && !this.negate;\n }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n /**\n * @param {Option[]} options\n */\n constructor(options) {\n this.positiveOptions = new Map();\n this.negativeOptions = new Map();\n this.dualOptions = new Set();\n options.forEach(option => {\n if (option.negate) {\n this.negativeOptions.set(option.attributeName(), option);\n } else {\n this.positiveOptions.set(option.attributeName(), option);\n }\n });\n this.negativeOptions.forEach((value, key) => {\n if (this.positiveOptions.has(key)) {\n this.dualOptions.add(key);\n }\n });\n }\n\n /**\n * Did the value come from the option, and not from possible matching dual option?\n *\n * @param {*} value\n * @param {Option} option\n * @returns {boolean}\n */\n valueFromOption(value, option) {\n const optionKey = option.attributeName();\n if (!this.dualOptions.has(optionKey)) return true;\n\n // Use the value to deduce if (probably) came from the option.\n const preset = this.negativeOptions.get(optionKey).presetArg;\n const negativeValue = (preset !== undefined) ? preset : false;\n return option.negate === (negativeValue === value);\n }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n return str.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1);\n });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n let shortFlag;\n let longFlag;\n // Use original very loose parsing to maintain backwards compatibility for now,\n // which allowed for example unintended `-sw, --short-word` [sic].\n const flagParts = flags.split(/[ |,]+/);\n if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift();\n longFlag = flagParts.shift();\n // Add support for lone short flag without significantly changing parsing!\n if (!shortFlag && /^-[^-]$/.test(longFlag)) {\n shortFlag = longFlag;\n longFlag = undefined;\n }\n return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.DualOptions = DualOptions;\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n // Calculating optimal string alignment distance, no substring is edited more than once.\n // (Simple implementation.)\n\n // Quick early exit, return worst case.\n if (Math.abs(a.length - b.length) > maxDistance) return Math.max(a.length, b.length);\n\n // distance between prefix substrings of a and b\n const d = [];\n\n // pure deletions turn a into empty string\n for (let i = 0; i <= a.length; i++) {\n d[i] = [i];\n }\n // pure insertions turn empty string into b\n for (let j = 0; j <= b.length; j++) {\n d[0][j] = j;\n }\n\n // fill matrix\n for (let j = 1; j <= b.length; j++) {\n for (let i = 1; i <= a.length; i++) {\n let cost = 1;\n if (a[i - 1] === b[j - 1]) {\n cost = 0;\n } else {\n cost = 1;\n }\n d[i][j] = Math.min(\n d[i - 1][j] + 1, // deletion\n d[i][j - 1] + 1, // insertion\n d[i - 1][j - 1] + cost // substitution\n );\n // transposition\n if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n }\n }\n }\n\n return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n if (!candidates || candidates.length === 0) return '';\n // remove possible duplicates\n candidates = Array.from(new Set(candidates));\n\n const searchingOptions = word.startsWith('--');\n if (searchingOptions) {\n word = word.slice(2);\n candidates = candidates.map(candidate => candidate.slice(2));\n }\n\n let similar = [];\n let bestDistance = maxDistance;\n const minSimilarity = 0.4;\n candidates.forEach((candidate) => {\n if (candidate.length <= 1) return; // no one character guesses\n\n const distance = editDistance(word, candidate);\n const length = Math.max(word.length, candidate.length);\n const similarity = (length - distance) / length;\n if (similarity > minSimilarity) {\n if (distance < bestDistance) {\n // better edit distance, throw away previous worse matches\n bestDistance = distance;\n similar = [candidate];\n } else if (distance === bestDistance) {\n similar.push(candidate);\n }\n }\n });\n\n similar.sort((a, b) => a.localeCompare(b));\n if (searchingOptions) {\n similar = similar.map(candidate => `--${candidate}`);\n }\n\n if (similar.length > 1) {\n return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n }\n if (similar.length === 1) {\n return `\\n(Did you mean ${similar[0]}?)`;\n }\n return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n","const EventEmitter = require('events').EventEmitter;\nconst childProcess = require('child_process');\nconst path = require('path');\nconst fs = require('fs');\nconst process = require('process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help } = require('./help.js');\nconst { Option, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n /**\n * Initialize a new `Command`.\n *\n * @param {string} [name]\n */\n\n constructor(name) {\n super();\n /** @type {Command[]} */\n this.commands = [];\n /** @type {Option[]} */\n this.options = [];\n this.parent = null;\n this._allowUnknownOption = false;\n this._allowExcessArguments = true;\n /** @type {Argument[]} */\n this.registeredArguments = [];\n this._args = this.registeredArguments; // deprecated old name\n /** @type {string[]} */\n this.args = []; // cli args with options removed\n this.rawArgs = [];\n this.processedArgs = []; // like .args but after custom processing and collecting variadic\n this._scriptPath = null;\n this._name = name || '';\n this._optionValues = {};\n this._optionValueSources = {}; // default, env, cli etc\n this._storeOptionsAsProperties = false;\n this._actionHandler = null;\n this._executableHandler = false;\n this._executableFile = null; // custom name for executable\n this._executableDir = null; // custom search directory for subcommands\n this._defaultCommandName = null;\n this._exitCallback = null;\n this._aliases = [];\n this._combineFlagAndOptionalValue = true;\n this._description = '';\n this._summary = '';\n this._argsDescription = undefined; // legacy\n this._enablePositionalOptions = false;\n this._passThroughOptions = false;\n this._lifeCycleHooks = {}; // a hash of arrays\n /** @type {(boolean | string)} */\n this._showHelpAfterError = false;\n this._showSuggestionAfterError = true;\n\n // see .configureOutput() for docs\n this._outputConfiguration = {\n writeOut: (str) => process.stdout.write(str),\n writeErr: (str) => process.stderr.write(str),\n getOutHelpWidth: () => process.stdout.isTTY ? process.stdout.columns : undefined,\n getErrHelpWidth: () => process.stderr.isTTY ? process.stderr.columns : undefined,\n outputError: (str, write) => write(str)\n };\n\n this._hidden = false;\n /** @type {(Option | null | undefined)} */\n this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n /** @type {Command} */\n this._helpCommand = undefined; // lazy initialised, inherited\n this._helpConfiguration = {};\n }\n\n /**\n * Copy settings that are useful to have in common across root command and subcommands.\n *\n * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n *\n * @param {Command} sourceCommand\n * @return {Command} `this` command for chaining\n */\n copyInheritedSettings(sourceCommand) {\n this._outputConfiguration = sourceCommand._outputConfiguration;\n this._helpOption = sourceCommand._helpOption;\n this._helpCommand = sourceCommand._helpCommand;\n this._helpConfiguration = sourceCommand._helpConfiguration;\n this._exitCallback = sourceCommand._exitCallback;\n this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n this._combineFlagAndOptionalValue = sourceCommand._combineFlagAndOptionalValue;\n this._allowExcessArguments = sourceCommand._allowExcessArguments;\n this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n this._showHelpAfterError = sourceCommand._showHelpAfterError;\n this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n return this;\n }\n\n /**\n * @returns {Command[]}\n * @private\n */\n\n _getCommandAndAncestors() {\n const result = [];\n for (let command = this; command; command = command.parent) {\n result.push(command);\n }\n return result;\n }\n\n /**\n * Define a command.\n *\n * There are two styles of command: pay attention to where to put the description.\n *\n * @example\n * // Command implemented using action handler (description is supplied separately to `.command`)\n * program\n * .command('clone <source> [destination]')\n * .description('clone a repository into a newly created directory')\n * .action((source, destination) => {\n * console.log('clone command called');\n * });\n *\n * // Command implemented using separate executable file (description is second parameter to `.command`)\n * program\n * .command('start <service>', 'start named service')\n * .command('stop [service]', 'stop named service, or all if no name supplied');\n *\n * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n * @param {(Object|string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n * @param {Object} [execOpts] - configuration options (for executable)\n * @return {Command} returns new command for action handler, or `this` for executable command\n */\n\n command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n let desc = actionOptsOrExecDesc;\n let opts = execOpts;\n if (typeof desc === 'object' && desc !== null) {\n opts = desc;\n desc = null;\n }\n opts = opts || {};\n const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n const cmd = this.createCommand(name);\n if (desc) {\n cmd.description(desc);\n cmd._executableHandler = true;\n }\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n if (args) cmd.arguments(args);\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd.copyInheritedSettings(this);\n\n if (desc) return this;\n return cmd;\n }\n\n /**\n * Factory routine to create a new unattached command.\n *\n * See .command() for creating an attached subcommand, which uses this routine to\n * create the command. You can override createCommand to customise subcommands.\n *\n * @param {string} [name]\n * @return {Command} new command\n */\n\n createCommand(name) {\n return new Command(name);\n }\n\n /**\n * You can customise the help with a subclass of Help by overriding createHelp,\n * or by overriding Help properties using configureHelp().\n *\n * @return {Help}\n */\n\n createHelp() {\n return Object.assign(new Help(), this.configureHelp());\n }\n\n /**\n * You can customise the help by overriding Help properties using configureHelp(),\n * or with a subclass of Help by overriding createHelp().\n *\n * @param {Object} [configuration] - configuration options\n * @return {(Command|Object)} `this` command for chaining, or stored configuration\n */\n\n configureHelp(configuration) {\n if (configuration === undefined) return this._helpConfiguration;\n\n this._helpConfiguration = configuration;\n return this;\n }\n\n /**\n * The default output goes to stdout and stderr. You can customise this for special\n * applications. You can also customise the display of errors by overriding outputError.\n *\n * The configuration properties are all functions:\n *\n * // functions to change where being written, stdout and stderr\n * writeOut(str)\n * writeErr(str)\n * // matching functions to specify width for wrapping help\n * getOutHelpWidth()\n * getErrHelpWidth()\n * // functions based on what is being written out\n * outputError(str, write) // used for displaying errors, and not used for displaying help\n *\n * @param {Object} [configuration] - configuration options\n * @return {(Command|Object)} `this` command for chaining, or stored configuration\n */\n\n configureOutput(configuration) {\n if (configuration === undefined) return this._outputConfiguration;\n\n Object.assign(this._outputConfiguration, configuration);\n return this;\n }\n\n /**\n * Display the help or a custom message after an error occurs.\n *\n * @param {(boolean|string)} [displayHelp]\n * @return {Command} `this` command for chaining\n */\n showHelpAfterError(displayHelp = true) {\n if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n this._showHelpAfterError = displayHelp;\n return this;\n }\n\n /**\n * Display suggestion of similar commands for unknown commands, or options for unknown options.\n *\n * @param {boolean} [displaySuggestion]\n * @return {Command} `this` command for chaining\n */\n showSuggestionAfterError(displaySuggestion = true) {\n this._showSuggestionAfterError = !!displaySuggestion;\n return this;\n }\n\n /**\n * Add a prepared subcommand.\n *\n * See .command() for creating an attached subcommand which inherits settings from its parent.\n *\n * @param {Command} cmd - new subcommand\n * @param {Object} [opts] - configuration options\n * @return {Command} `this` command for chaining\n */\n\n addCommand(cmd, opts) {\n if (!cmd._name) {\n throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n }\n\n opts = opts || {};\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd._checkForBrokenPassThrough();\n\n return this;\n }\n\n /**\n * Factory routine to create a new unattached argument.\n *\n * See .argument() for creating an attached argument, which uses this routine to\n * create the argument. You can override createArgument to return a custom argument.\n *\n * @param {string} name\n * @param {string} [description]\n * @return {Argument} new argument\n */\n\n createArgument(name, description) {\n return new Argument(name, description);\n }\n\n /**\n * Define argument syntax for command.\n *\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @example\n * program.argument('<input-file>');\n * program.argument('[output-file]');\n *\n * @param {string} name\n * @param {string} [description]\n * @param {(Function|*)} [fn] - custom argument processing function\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n argument(name, description, fn, defaultValue) {\n const argument = this.createArgument(name, description);\n if (typeof fn === 'function') {\n argument.default(defaultValue).argParser(fn);\n } else {\n argument.default(fn);\n }\n this.addArgument(argument);\n return this;\n }\n\n /**\n * Define argument syntax for command, adding multiple at once (without descriptions).\n *\n * See also .argument().\n *\n * @example\n * program.arguments('<cmd> [env]');\n *\n * @param {string} names\n * @return {Command} `this` command for chaining\n */\n\n arguments(names) {\n names.trim().split(/ +/).forEach((detail) => {\n this.argument(detail);\n });\n return this;\n }\n\n /**\n * Define argument syntax for command, adding a prepared argument.\n *\n * @param {Argument} argument\n * @return {Command} `this` command for chaining\n */\n addArgument(argument) {\n const previousArgument = this.registeredArguments.slice(-1)[0];\n if (previousArgument && previousArgument.variadic) {\n throw new Error(`only the last argument can be variadic '${previousArgument.name()}'`);\n }\n if (argument.required && argument.defaultValue !== undefined && argument.parseArg === undefined) {\n throw new Error(`a default value for a required argument is never used: '${argument.name()}'`);\n }\n this.registeredArguments.push(argument);\n return this;\n }\n\n /**\n * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n *\n * program.helpCommand('help [cmd]');\n * program.helpCommand('help [cmd]', 'show help');\n * program.helpCommand(false); // suppress default help command\n * program.helpCommand(true); // add help command even if no subcommands\n *\n * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n * @param {string} [description] - custom description\n * @return {Command} `this` command for chaining\n */\n\n helpCommand(enableOrNameAndArgs, description) {\n if (typeof enableOrNameAndArgs === 'boolean') {\n this._addImplicitHelpCommand = enableOrNameAndArgs;\n return this;\n }\n\n enableOrNameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n const [, helpName, helpArgs] = enableOrNameAndArgs.match(/([^ ]+) *(.*)/);\n const helpDescription = description ?? 'display help for command';\n\n const helpCommand = this.createCommand(helpName);\n helpCommand.helpOption(false);\n if (helpArgs) helpCommand.arguments(helpArgs);\n if (helpDescription) helpCommand.description(helpDescription);\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n\n return this;\n }\n\n /**\n * Add prepared custom help command.\n *\n * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n * @return {Command} `this` command for chaining\n */\n addHelpCommand(helpCommand, deprecatedDescription) {\n // If not passed an object, call through to helpCommand for backwards compatibility,\n // as addHelpCommand was originally used like helpCommand is now.\n if (typeof helpCommand !== 'object') {\n this.helpCommand(helpCommand, deprecatedDescription);\n return this;\n }\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n return this;\n }\n\n /**\n * Lazy create help command.\n *\n * @return {(Command|null)}\n * @package\n */\n _getHelpCommand() {\n const hasImplicitHelpCommand = this._addImplicitHelpCommand ??\n (this.commands.length && !this._actionHandler && !this._findCommand('help'));\n\n if (hasImplicitHelpCommand) {\n if (this._helpCommand === undefined) {\n this.helpCommand(undefined, undefined); // use default name and description\n }\n return this._helpCommand;\n }\n return null;\n }\n\n /**\n * Add hook for life cycle event.\n *\n * @param {string} event\n * @param {Function} listener\n * @return {Command} `this` command for chaining\n */\n\n hook(event, listener) {\n const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n if (!allowedValues.includes(event)) {\n throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n if (this._lifeCycleHooks[event]) {\n this._lifeCycleHooks[event].push(listener);\n } else {\n this._lifeCycleHooks[event] = [listener];\n }\n return this;\n }\n\n /**\n * Register callback to use as replacement for calling process.exit.\n *\n * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n * @return {Command} `this` command for chaining\n */\n\n exitOverride(fn) {\n if (fn) {\n this._exitCallback = fn;\n } else {\n this._exitCallback = (err) => {\n if (err.code !== 'commander.executeSubCommandAsync') {\n throw err;\n } else {\n // Async callback from spawn events, not useful to throw.\n }\n };\n }\n return this;\n }\n\n /**\n * Call process.exit, and _exitCallback if defined.\n *\n * @param {number} exitCode exit code for using with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @return never\n * @private\n */\n\n _exit(exitCode, code, message) {\n if (this._exitCallback) {\n this._exitCallback(new CommanderError(exitCode, code, message));\n // Expecting this line is not reached.\n }\n process.exit(exitCode);\n }\n\n /**\n * Register callback `fn` for the command.\n *\n * @example\n * program\n * .command('serve')\n * .description('start service')\n * .action(function() {\n * // do work here\n * });\n *\n * @param {Function} fn\n * @return {Command} `this` command for chaining\n */\n\n action(fn) {\n const listener = (args) => {\n // The .action callback takes an extra parameter which is the command or options.\n const expectedArgsCount = this.registeredArguments.length;\n const actionArgs = args.slice(0, expectedArgsCount);\n if (this._storeOptionsAsProperties) {\n actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n } else {\n actionArgs[expectedArgsCount] = this.opts();\n }\n actionArgs.push(this);\n\n return fn.apply(this, actionArgs);\n };\n this._actionHandler = listener;\n return this;\n }\n\n /**\n * Factory routine to create a new unattached option.\n *\n * See .option() for creating an attached option, which uses this routine to\n * create the option. You can override createOption to return a custom option.\n *\n * @param {string} flags\n * @param {string} [description]\n * @return {Option} new option\n */\n\n createOption(flags, description) {\n return new Option(flags, description);\n }\n\n /**\n * Wrap parseArgs to catch 'commander.invalidArgument'.\n *\n * @param {(Option | Argument)} target\n * @param {string} value\n * @param {*} previous\n * @param {string} invalidArgumentMessage\n * @private\n */\n\n _callParseArg(target, value, previous, invalidArgumentMessage) {\n try {\n return target.parseArg(value, previous);\n } catch (err) {\n if (err.code === 'commander.invalidArgument') {\n const message = `${invalidArgumentMessage} ${err.message}`;\n this.error(message, { exitCode: err.exitCode, code: err.code });\n }\n throw err;\n }\n }\n\n /**\n * Check for option flag conflicts.\n * Register option if no conflicts found, or throw on conflict.\n *\n * @param {Option} option\n * @api private\n */\n\n _registerOption(option) {\n const matchingOption = (option.short && this._findOption(option.short)) ||\n (option.long && this._findOption(option.long));\n if (matchingOption) {\n const matchingFlag = (option.long && this._findOption(option.long)) ? option.long : option.short;\n throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n- already used by option '${matchingOption.flags}'`);\n }\n\n this.options.push(option);\n }\n\n /**\n * Check for command name and alias conflicts with existing commands.\n * Register command if no conflicts found, or throw on conflict.\n *\n * @param {Command} command\n * @api private\n */\n\n _registerCommand(command) {\n const knownBy = (cmd) => {\n return [cmd.name()].concat(cmd.aliases());\n };\n\n const alreadyUsed = knownBy(command).find((name) => this._findCommand(name));\n if (alreadyUsed) {\n const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n const newCmd = knownBy(command).join('|');\n throw new Error(`cannot add command '${newCmd}' as already have command '${existingCmd}'`);\n }\n\n this.commands.push(command);\n }\n\n /**\n * Add an option.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addOption(option) {\n this._registerOption(option);\n\n const oname = option.name();\n const name = option.attributeName();\n\n // store default value\n if (option.negate) {\n // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n const positiveLongFlag = option.long.replace(/^--no-/, '--');\n if (!this._findOption(positiveLongFlag)) {\n this.setOptionValueWithSource(name, option.defaultValue === undefined ? true : option.defaultValue, 'default');\n }\n } else if (option.defaultValue !== undefined) {\n this.setOptionValueWithSource(name, option.defaultValue, 'default');\n }\n\n // handler for cli and env supplied values\n const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n // val is null for optional option used without an optional-argument.\n // val is undefined for boolean and negated option.\n if (val == null && option.presetArg !== undefined) {\n val = option.presetArg;\n }\n\n // custom processing\n const oldValue = this.getOptionValue(name);\n if (val !== null && option.parseArg) {\n val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n } else if (val !== null && option.variadic) {\n val = option._concatValue(val, oldValue);\n }\n\n // Fill-in appropriate missing values. Long winded but easy to follow.\n if (val == null) {\n if (option.negate) {\n val = false;\n } else if (option.isBoolean() || option.optional) {\n val = true;\n } else {\n val = ''; // not normal, parseArg might have failed or be a mock function for testing\n }\n }\n this.setOptionValueWithSource(name, val, valueSource);\n };\n\n this.on('option:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'cli');\n });\n\n if (option.envVar) {\n this.on('optionEnv:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'env');\n });\n }\n\n return this;\n }\n\n /**\n * Internal implementation shared by .option() and .requiredOption()\n *\n * @private\n */\n _optionEx(config, flags, description, fn, defaultValue) {\n if (typeof flags === 'object' && flags instanceof Option) {\n throw new Error('To add an Option object use addOption() instead of option() or requiredOption()');\n }\n const option = this.createOption(flags, description);\n option.makeOptionMandatory(!!config.mandatory);\n if (typeof fn === 'function') {\n option.default(defaultValue).argParser(fn);\n } else if (fn instanceof RegExp) {\n // deprecated\n const regex = fn;\n fn = (val, def) => {\n const m = regex.exec(val);\n return m ? m[0] : def;\n };\n option.default(defaultValue).argParser(fn);\n } else {\n option.default(fn);\n }\n\n return this.addOption(option);\n }\n\n /**\n * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n *\n * See the README for more details, and see also addOption() and requiredOption().\n *\n * @example\n * program\n * .option('-p, --pepper', 'add pepper')\n * .option('-p, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n * .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n * .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n option(flags, description, parseArg, defaultValue) {\n return this._optionEx({}, flags, description, parseArg, defaultValue);\n }\n\n /**\n * Add a required option which must have a value after parsing. This usually means\n * the option must be specified on the command line. (Otherwise the same as .option().)\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n requiredOption(flags, description, parseArg, defaultValue) {\n return this._optionEx({ mandatory: true }, flags, description, parseArg, defaultValue);\n }\n\n /**\n * Alter parsing of short flags with optional values.\n *\n * @example\n * // for `.option('-f,--flag [value]'):\n * program.combineFlagAndOptionalValue(true); // `-f80` is treated like `--flag=80`, this is the default behaviour\n * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n *\n * @param {boolean} [combine=true] - if `true` or omitted, an optional value can be specified directly after the flag.\n */\n combineFlagAndOptionalValue(combine = true) {\n this._combineFlagAndOptionalValue = !!combine;\n return this;\n }\n\n /**\n * Allow unknown options on the command line.\n *\n * @param {boolean} [allowUnknown=true] - if `true` or omitted, no error will be thrown\n * for unknown options.\n */\n allowUnknownOption(allowUnknown = true) {\n this._allowUnknownOption = !!allowUnknown;\n return this;\n }\n\n /**\n * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n *\n * @param {boolean} [allowExcess=true] - if `true` or omitted, no error will be thrown\n * for excess arguments.\n */\n allowExcessArguments(allowExcess = true) {\n this._allowExcessArguments = !!allowExcess;\n return this;\n }\n\n /**\n * Enable positional options. Positional means global options are specified before subcommands which lets\n * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n * The default behaviour is non-positional and global options may appear anywhere on the command line.\n *\n * @param {boolean} [positional=true]\n */\n enablePositionalOptions(positional = true) {\n this._enablePositionalOptions = !!positional;\n return this;\n }\n\n /**\n * Pass through options that come after command-arguments rather than treat them as command-options,\n * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n * positional options to have been enabled on the program (parent commands).\n * The default behaviour is non-positional and options may appear before or after command-arguments.\n *\n * @param {boolean} [passThrough=true]\n * for unknown options.\n */\n passThroughOptions(passThrough = true) {\n this._passThroughOptions = !!passThrough;\n this._checkForBrokenPassThrough();\n return this;\n }\n\n /**\n * @private\n */\n\n _checkForBrokenPassThrough() {\n if (this.parent && this._passThroughOptions && !this.parent._enablePositionalOptions) {\n throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`);\n }\n }\n\n /**\n * Whether to store option values as properties on command object,\n * or store separately (specify false). In both cases the option values can be accessed using .opts().\n *\n * @param {boolean} [storeAsProperties=true]\n * @return {Command} `this` command for chaining\n */\n\n storeOptionsAsProperties(storeAsProperties = true) {\n if (this.options.length) {\n throw new Error('call .storeOptionsAsProperties() before adding options');\n }\n if (Object.keys(this._optionValues).length) {\n throw new Error('call .storeOptionsAsProperties() before setting option values');\n }\n this._storeOptionsAsProperties = !!storeAsProperties;\n return this;\n }\n\n /**\n * Retrieve option value.\n *\n * @param {string} key\n * @return {Object} value\n */\n\n getOptionValue(key) {\n if (this._storeOptionsAsProperties) {\n return this[key];\n }\n return this._optionValues[key];\n }\n\n /**\n * Store option value.\n *\n * @param {string} key\n * @param {Object} value\n * @return {Command} `this` command for chaining\n */\n\n setOptionValue(key, value) {\n return this.setOptionValueWithSource(key, value, undefined);\n }\n\n /**\n * Store option value and where the value came from.\n *\n * @param {string} key\n * @param {Object} value\n * @param {string} source - expected values are default/config/env/cli/implied\n * @return {Command} `this` command for chaining\n */\n\n setOptionValueWithSource(key, value, source) {\n if (this._storeOptionsAsProperties) {\n this[key] = value;\n } else {\n this._optionValues[key] = value;\n }\n this._optionValueSources[key] = source;\n return this;\n }\n\n /**\n * Get source of option value.\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSource(key) {\n return this._optionValueSources[key];\n }\n\n /**\n * Get source of option value. See also .optsWithGlobals().\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSourceWithGlobals(key) {\n // global overwrites local, like optsWithGlobals\n let source;\n this._getCommandAndAncestors().forEach((cmd) => {\n if (cmd.getOptionValueSource(key) !== undefined) {\n source = cmd.getOptionValueSource(key);\n }\n });\n return source;\n }\n\n /**\n * Get user arguments from implied or explicit arguments.\n * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n *\n * @private\n */\n\n _prepareUserArgs(argv, parseOptions) {\n if (argv !== undefined && !Array.isArray(argv)) {\n throw new Error('first parameter to parse must be array or undefined');\n }\n parseOptions = parseOptions || {};\n\n // Default to using process.argv\n if (argv === undefined) {\n argv = process.argv;\n // @ts-ignore: unknown property\n if (process.versions && process.versions.electron) {\n parseOptions.from = 'electron';\n }\n }\n this.rawArgs = argv.slice();\n\n // make it a little easier for callers by supporting various argv conventions\n let userArgs;\n switch (parseOptions.from) {\n case undefined:\n case 'node':\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n break;\n case 'electron':\n // @ts-ignore: unknown property\n if (process.defaultApp) {\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n } else {\n userArgs = argv.slice(1);\n }\n break;\n case 'user':\n userArgs = argv.slice(0);\n break;\n default:\n throw new Error(`unexpected parse option { from: '${parseOptions.from}' }`);\n }\n\n // Find default name for program from arguments.\n if (!this._name && this._scriptPath) this.nameFromFilename(this._scriptPath);\n this._name = this._name || 'program';\n\n return userArgs;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * The default expectation is that the arguments are from node and have the application as argv[0]\n * and the script being run in argv[1], with user parameters after that.\n *\n * @example\n * program.parse(process.argv);\n * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions\n * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv] - optional, defaults to process.argv\n * @param {Object} [parseOptions] - optionally specify style of options with from: node/user/electron\n * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n * @return {Command} `this` command for chaining\n */\n\n parse(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.\n *\n * The default expectation is that the arguments are from node and have the application as argv[0]\n * and the script being run in argv[1], with user parameters after that.\n *\n * @example\n * await program.parseAsync(process.argv);\n * await program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions\n * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv]\n * @param {Object} [parseOptions]\n * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n * @return {Promise}\n */\n\n async parseAsync(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n await this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Execute a sub-command executable.\n *\n * @private\n */\n\n _executeSubCommand(subcommand, args) {\n args = args.slice();\n let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n function findFile(baseDir, baseName) {\n // Look for specified file\n const localBin = path.resolve(baseDir, baseName);\n if (fs.existsSync(localBin)) return localBin;\n\n // Stop looking if candidate already has an expected extension.\n if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n // Try all the extensions.\n const foundExt = sourceExt.find(ext => fs.existsSync(`${localBin}${ext}`));\n if (foundExt) return `${localBin}${foundExt}`;\n\n return undefined;\n }\n\n // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // executableFile and executableDir might be full path, or just a name\n let executableFile = subcommand._executableFile || `${this._name}-${subcommand._name}`;\n let executableDir = this._executableDir || '';\n if (this._scriptPath) {\n let resolvedScriptPath; // resolve possible symlink for installed npm binary\n try {\n resolvedScriptPath = fs.realpathSync(this._scriptPath);\n } catch (err) {\n resolvedScriptPath = this._scriptPath;\n }\n executableDir = path.resolve(path.dirname(resolvedScriptPath), executableDir);\n }\n\n // Look for a local file in preference to a command in PATH.\n if (executableDir) {\n let localFile = findFile(executableDir, executableFile);\n\n // Legacy search using prefix of script name instead of command name\n if (!localFile && !subcommand._executableFile && this._scriptPath) {\n const legacyName = path.basename(this._scriptPath, path.extname(this._scriptPath));\n if (legacyName !== this._name) {\n localFile = findFile(executableDir, `${legacyName}-${subcommand._name}`);\n }\n }\n executableFile = localFile || executableFile;\n }\n\n launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n let proc;\n if (process.platform !== 'win32') {\n if (launchWithNode) {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n } else {\n proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n }\n } else {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n }\n\n if (!proc.killed) { // testing mainly to avoid leak warnings during unit tests with mocked spawn\n const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n signals.forEach((signal) => {\n // @ts-ignore\n process.on(signal, () => {\n if (proc.killed === false && proc.exitCode === null) {\n proc.kill(signal);\n }\n });\n });\n }\n\n // By default terminate process when spawned process terminates.\n const exitCallback = this._exitCallback;\n proc.on('close', (code, _signal) => {\n code = code ?? 1; // code is null if spawned process terminated due to a signal\n if (!exitCallback) {\n process.exit(code);\n } else {\n exitCallback(new CommanderError(code, 'commander.executeSubCommandAsync', '(close)'));\n }\n });\n proc.on('error', (err) => {\n // @ts-ignore\n if (err.code === 'ENOENT') {\n const executableDirMessage = executableDir\n ? `searched for local subcommand relative to directory '${executableDir}'`\n : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n const executableMissing = `'${executableFile}' does not exist\n - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n throw new Error(executableMissing);\n // @ts-ignore\n } else if (err.code === 'EACCES') {\n throw new Error(`'${executableFile}' not executable`);\n }\n if (!exitCallback) {\n process.exit(1);\n } else {\n const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)');\n wrappedError.nestedError = err;\n exitCallback(wrappedError);\n }\n });\n\n // Store the reference to the child process\n this.runningCommand = proc;\n }\n\n /**\n * @private\n */\n\n _dispatchSubcommand(commandName, operands, unknown) {\n const subCommand = this._findCommand(commandName);\n if (!subCommand) this.help({ error: true });\n\n let promiseChain;\n promiseChain = this._chainOrCallSubCommandHook(promiseChain, subCommand, 'preSubcommand');\n promiseChain = this._chainOrCall(promiseChain, () => {\n if (subCommand._executableHandler) {\n this._executeSubCommand(subCommand, operands.concat(unknown));\n } else {\n return subCommand._parseCommand(operands, unknown);\n }\n });\n return promiseChain;\n }\n\n /**\n * Invoke help directly if possible, or dispatch if necessary.\n * e.g. help foo\n *\n * @private\n */\n\n _dispatchHelpCommand(subcommandName) {\n if (!subcommandName) {\n this.help();\n }\n const subCommand = this._findCommand(subcommandName);\n if (subCommand && !subCommand._executableHandler) {\n subCommand.help();\n }\n\n // Fallback to parsing the help flag to invoke the help.\n return this._dispatchSubcommand(subcommandName, [], [\n this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'\n ]);\n }\n\n /**\n * Check this.args against expected this.registeredArguments.\n *\n * @private\n */\n\n _checkNumberOfArguments() {\n // too few\n this.registeredArguments.forEach((arg, i) => {\n if (arg.required && this.args[i] == null) {\n this.missingArgument(arg.name());\n }\n });\n // too many\n if (this.registeredArguments.length > 0 && this.registeredArguments[this.registeredArguments.length - 1].variadic) {\n return;\n }\n if (this.args.length > this.registeredArguments.length) {\n this._excessArguments(this.args);\n }\n }\n\n /**\n * Process this.args using this.registeredArguments and save as this.processedArgs!\n *\n * @private\n */\n\n _processArguments() {\n const myParseArg = (argument, value, previous) => {\n // Extra processing for nice error message on parsing failure.\n let parsedValue = value;\n if (value !== null && argument.parseArg) {\n const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n parsedValue = this._callParseArg(argument, value, previous, invalidValueMessage);\n }\n return parsedValue;\n };\n\n this._checkNumberOfArguments();\n\n const processedArgs = [];\n this.registeredArguments.forEach((declaredArg, index) => {\n let value = declaredArg.defaultValue;\n if (declaredArg.variadic) {\n // Collect together remaining arguments for passing together as an array.\n if (index < this.args.length) {\n value = this.args.slice(index);\n if (declaredArg.parseArg) {\n value = value.reduce((processed, v) => {\n return myParseArg(declaredArg, v, processed);\n }, declaredArg.defaultValue);\n }\n } else if (value === undefined) {\n value = [];\n }\n } else if (index < this.args.length) {\n value = this.args[index];\n if (declaredArg.parseArg) {\n value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n }\n }\n processedArgs[index] = value;\n });\n this.processedArgs = processedArgs;\n }\n\n /**\n * Once we have a promise we chain, but call synchronously until then.\n *\n * @param {(Promise|undefined)} promise\n * @param {Function} fn\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCall(promise, fn) {\n // thenable\n if (promise && promise.then && typeof promise.then === 'function') {\n // already have a promise, chain callback\n return promise.then(() => fn());\n }\n // callback might return a promise\n return fn();\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallHooks(promise, event) {\n let result = promise;\n const hooks = [];\n this._getCommandAndAncestors()\n .reverse()\n .filter(cmd => cmd._lifeCycleHooks[event] !== undefined)\n .forEach(hookedCommand => {\n hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n hooks.push({ hookedCommand, callback });\n });\n });\n if (event === 'postAction') {\n hooks.reverse();\n }\n\n hooks.forEach((hookDetail) => {\n result = this._chainOrCall(result, () => {\n return hookDetail.callback(hookDetail.hookedCommand, this);\n });\n });\n return result;\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {Command} subCommand\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallSubCommandHook(promise, subCommand, event) {\n let result = promise;\n if (this._lifeCycleHooks[event] !== undefined) {\n this._lifeCycleHooks[event].forEach((hook) => {\n result = this._chainOrCall(result, () => {\n return hook(this, subCommand);\n });\n });\n }\n return result;\n }\n\n /**\n * Process arguments in context of this command.\n * Returns action result, in case it is a promise.\n *\n * @private\n */\n\n _parseCommand(operands, unknown) {\n const parsed = this.parseOptions(unknown);\n this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n this._parseOptionsImplied();\n operands = operands.concat(parsed.operands);\n unknown = parsed.unknown;\n this.args = operands.concat(unknown);\n\n if (operands && this._findCommand(operands[0])) {\n return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n }\n if (this._getHelpCommand() && operands[0] === this._getHelpCommand().name()) {\n return this._dispatchHelpCommand(operands[1]);\n }\n if (this._defaultCommandName) {\n this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n return this._dispatchSubcommand(this._defaultCommandName, operands, unknown);\n }\n if (this.commands.length && this.args.length === 0 && !this._actionHandler && !this._defaultCommandName) {\n // probably missing subcommand and no handler, user needs help (and exit)\n this.help({ error: true });\n }\n\n this._outputHelpIfRequested(parsed.unknown);\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n const checkForUnknownOptions = () => {\n if (parsed.unknown.length > 0) {\n this.unknownOption(parsed.unknown[0]);\n }\n };\n\n const commandEvent = `command:${this.name()}`;\n if (this._actionHandler) {\n checkForUnknownOptions();\n this._processArguments();\n\n let promiseChain;\n promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n promiseChain = this._chainOrCall(promiseChain, () => this._actionHandler(this.processedArgs));\n if (this.parent) {\n promiseChain = this._chainOrCall(promiseChain, () => {\n this.parent.emit(commandEvent, operands, unknown); // legacy\n });\n }\n promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n return promiseChain;\n }\n if (this.parent && this.parent.listenerCount(commandEvent)) {\n checkForUnknownOptions();\n this._processArguments();\n this.parent.emit(commandEvent, operands, unknown); // legacy\n } else if (operands.length) {\n if (this._findCommand('*')) { // legacy default command\n return this._dispatchSubcommand('*', operands, unknown);\n }\n if (this.listenerCount('command:*')) {\n // skip option check, emit event for possible misspelling suggestion\n this.emit('command:*', operands, unknown);\n } else if (this.commands.length) {\n this.unknownCommand();\n } else {\n checkForUnknownOptions();\n this._processArguments();\n }\n } else if (this.commands.length) {\n checkForUnknownOptions();\n // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n this.help({ error: true });\n } else {\n checkForUnknownOptions();\n this._processArguments();\n // fall through for caller to handle after calling .parse()\n }\n }\n\n /**\n * Find matching command.\n *\n * @private\n */\n _findCommand(name) {\n if (!name) return undefined;\n return this.commands.find(cmd => cmd._name === name || cmd._aliases.includes(name));\n }\n\n /**\n * Return an option matching `arg` if any.\n *\n * @param {string} arg\n * @return {Option}\n * @package internal use only\n */\n\n _findOption(arg) {\n return this.options.find(option => option.is(arg));\n }\n\n /**\n * Display an error message if a mandatory option does not have a value.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n\n _checkForMissingMandatoryOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd.options.forEach((anOption) => {\n if (anOption.mandatory && (cmd.getOptionValue(anOption.attributeName()) === undefined)) {\n cmd.missingMandatoryOptionValue(anOption);\n }\n });\n });\n }\n\n /**\n * Display an error message if conflicting options are used together in this.\n *\n * @private\n */\n _checkForConflictingLocalOptions() {\n const definedNonDefaultOptions = this.options.filter(\n (option) => {\n const optionKey = option.attributeName();\n if (this.getOptionValue(optionKey) === undefined) {\n return false;\n }\n return this.getOptionValueSource(optionKey) !== 'default';\n }\n );\n\n const optionsWithConflicting = definedNonDefaultOptions.filter(\n (option) => option.conflictsWith.length > 0\n );\n\n optionsWithConflicting.forEach((option) => {\n const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n option.conflictsWith.includes(defined.attributeName())\n );\n if (conflictingAndDefined) {\n this._conflictingOption(option, conflictingAndDefined);\n }\n });\n }\n\n /**\n * Display an error message if conflicting options are used together.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n _checkForConflictingOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd._checkForConflictingLocalOptions();\n });\n }\n\n /**\n * Parse options from `argv` removing known options,\n * and return argv split into operands and unknown arguments.\n *\n * Examples:\n *\n * argv => operands, unknown\n * --known kkk op => [op], []\n * op --known kkk => [op], []\n * sub --unknown uuu op => [sub], [--unknown uuu op]\n * sub -- --unknown uuu op => [sub --unknown uuu op], []\n *\n * @param {string[]} argv\n * @return {{operands: string[], unknown: string[]}}\n */\n\n parseOptions(argv) {\n const operands = []; // operands, not options or values\n const unknown = []; // first unknown option and remaining unknown args\n let dest = operands;\n const args = argv.slice();\n\n function maybeOption(arg) {\n return arg.length > 1 && arg[0] === '-';\n }\n\n // parse options\n let activeVariadicOption = null;\n while (args.length) {\n const arg = args.shift();\n\n // literal\n if (arg === '--') {\n if (dest === unknown) dest.push(arg);\n dest.push(...args);\n break;\n }\n\n if (activeVariadicOption && !maybeOption(arg)) {\n this.emit(`option:${activeVariadicOption.name()}`, arg);\n continue;\n }\n activeVariadicOption = null;\n\n if (maybeOption(arg)) {\n const option = this._findOption(arg);\n // recognised option, call listener to assign value with possible custom processing\n if (option) {\n if (option.required) {\n const value = args.shift();\n if (value === undefined) this.optionMissingArgument(option);\n this.emit(`option:${option.name()}`, value);\n } else if (option.optional) {\n let value = null;\n // historical behaviour is optional value is following arg unless an option\n if (args.length > 0 && !maybeOption(args[0])) {\n value = args.shift();\n }\n this.emit(`option:${option.name()}`, value);\n } else { // boolean flag\n this.emit(`option:${option.name()}`);\n }\n activeVariadicOption = option.variadic ? option : null;\n continue;\n }\n }\n\n // Look for combo options following single dash, eat first one if known.\n if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n const option = this._findOption(`-${arg[1]}`);\n if (option) {\n if (option.required || (option.optional && this._combineFlagAndOptionalValue)) {\n // option with value following in same argument\n this.emit(`option:${option.name()}`, arg.slice(2));\n } else {\n // boolean option, emit and put back remainder of arg for further processing\n this.emit(`option:${option.name()}`);\n args.unshift(`-${arg.slice(2)}`);\n }\n continue;\n }\n }\n\n // Look for known long flag with value, like --foo=bar\n if (/^--[^=]+=/.test(arg)) {\n const index = arg.indexOf('=');\n const option = this._findOption(arg.slice(0, index));\n if (option && (option.required || option.optional)) {\n this.emit(`option:${option.name()}`, arg.slice(index + 1));\n continue;\n }\n }\n\n // Not a recognised option by this command.\n // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n if (maybeOption(arg)) {\n dest = unknown;\n }\n\n // If using positionalOptions, stop processing our options at subcommand.\n if ((this._enablePositionalOptions || this._passThroughOptions) && operands.length === 0 && unknown.length === 0) {\n if (this._findCommand(arg)) {\n operands.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n } else if (this._getHelpCommand() && arg === this._getHelpCommand().name()) {\n operands.push(arg);\n if (args.length > 0) operands.push(...args);\n break;\n } else if (this._defaultCommandName) {\n unknown.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n }\n }\n\n // If using passThroughOptions, stop processing options at first command-argument.\n if (this._passThroughOptions) {\n dest.push(arg);\n if (args.length > 0) dest.push(...args);\n break;\n }\n\n // add arg\n dest.push(arg);\n }\n\n return { operands, unknown };\n }\n\n /**\n * Return an object containing local option values as key-value pairs.\n *\n * @return {Object}\n */\n opts() {\n if (this._storeOptionsAsProperties) {\n // Preserve original behaviour so backwards compatible when still using properties\n const result = {};\n const len = this.options.length;\n\n for (let i = 0; i < len; i++) {\n const key = this.options[i].attributeName();\n result[key] = key === this._versionOptionName ? this._version : this[key];\n }\n return result;\n }\n\n return this._optionValues;\n }\n\n /**\n * Return an object containing merged local and global option values as key-value pairs.\n *\n * @return {Object}\n */\n optsWithGlobals() {\n // globals overwrite locals\n return this._getCommandAndAncestors().reduce(\n (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n {}\n );\n }\n\n /**\n * Display error message and exit (or call exitOverride).\n *\n * @param {string} message\n * @param {Object} [errorOptions]\n * @param {string} [errorOptions.code] - an id string representing the error\n * @param {number} [errorOptions.exitCode] - used with process.exit\n */\n error(message, errorOptions) {\n // output handling\n this._outputConfiguration.outputError(`${message}\\n`, this._outputConfiguration.writeErr);\n if (typeof this._showHelpAfterError === 'string') {\n this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n } else if (this._showHelpAfterError) {\n this._outputConfiguration.writeErr('\\n');\n this.outputHelp({ error: true });\n }\n\n // exit handling\n const config = errorOptions || {};\n const exitCode = config.exitCode || 1;\n const code = config.code || 'commander.error';\n this._exit(exitCode, code, message);\n }\n\n /**\n * Apply any option related environment variables, if option does\n * not have a value from cli or client code.\n *\n * @private\n */\n _parseOptionsEnv() {\n this.options.forEach((option) => {\n if (option.envVar && option.envVar in process.env) {\n const optionKey = option.attributeName();\n // Priority check. Do not overwrite cli or options from unknown source (client-code).\n if (this.getOptionValue(optionKey) === undefined || ['default', 'config', 'env'].includes(this.getOptionValueSource(optionKey))) {\n if (option.required || option.optional) { // option can take a value\n // keep very simple, optional always takes value\n this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n } else { // boolean\n // keep very simple, only care that envVar defined and not the value\n this.emit(`optionEnv:${option.name()}`);\n }\n }\n }\n });\n }\n\n /**\n * Apply any implied option values, if option is undefined or default value.\n *\n * @private\n */\n _parseOptionsImplied() {\n const dualHelper = new DualOptions(this.options);\n const hasCustomOptionValue = (optionKey) => {\n return this.getOptionValue(optionKey) !== undefined && !['default', 'implied'].includes(this.getOptionValueSource(optionKey));\n };\n this.options\n .filter(option => (option.implied !== undefined) &&\n hasCustomOptionValue(option.attributeName()) &&\n dualHelper.valueFromOption(this.getOptionValue(option.attributeName()), option))\n .forEach((option) => {\n Object.keys(option.implied)\n .filter(impliedKey => !hasCustomOptionValue(impliedKey))\n .forEach(impliedKey => {\n this.setOptionValueWithSource(impliedKey, option.implied[impliedKey], 'implied');\n });\n });\n }\n\n /**\n * Argument `name` is missing.\n *\n * @param {string} name\n * @private\n */\n\n missingArgument(name) {\n const message = `error: missing required argument '${name}'`;\n this.error(message, { code: 'commander.missingArgument' });\n }\n\n /**\n * `Option` is missing an argument.\n *\n * @param {Option} option\n * @private\n */\n\n optionMissingArgument(option) {\n const message = `error: option '${option.flags}' argument missing`;\n this.error(message, { code: 'commander.optionMissingArgument' });\n }\n\n /**\n * `Option` does not have a value, and is a mandatory option.\n *\n * @param {Option} option\n * @private\n */\n\n missingMandatoryOptionValue(option) {\n const message = `error: required option '${option.flags}' not specified`;\n this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n }\n\n /**\n * `Option` conflicts with another option.\n *\n * @param {Option} option\n * @param {Option} conflictingOption\n * @private\n */\n _conflictingOption(option, conflictingOption) {\n // The calling code does not know whether a negated option is the source of the\n // value, so do some work to take an educated guess.\n const findBestOptionFromValue = (option) => {\n const optionKey = option.attributeName();\n const optionValue = this.getOptionValue(optionKey);\n const negativeOption = this.options.find(target => target.negate && optionKey === target.attributeName());\n const positiveOption = this.options.find(target => !target.negate && optionKey === target.attributeName());\n if (negativeOption && (\n (negativeOption.presetArg === undefined && optionValue === false) ||\n (negativeOption.presetArg !== undefined && optionValue === negativeOption.presetArg)\n )) {\n return negativeOption;\n }\n return positiveOption || option;\n };\n\n const getErrorMessage = (option) => {\n const bestOption = findBestOptionFromValue(option);\n const optionKey = bestOption.attributeName();\n const source = this.getOptionValueSource(optionKey);\n if (source === 'env') {\n return `environment variable '${bestOption.envVar}'`;\n }\n return `option '${bestOption.flags}'`;\n };\n\n const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n this.error(message, { code: 'commander.conflictingOption' });\n }\n\n /**\n * Unknown option `flag`.\n *\n * @param {string} flag\n * @private\n */\n\n unknownOption(flag) {\n if (this._allowUnknownOption) return;\n let suggestion = '';\n\n if (flag.startsWith('--') && this._showSuggestionAfterError) {\n // Looping to pick up the global options too\n let candidateFlags = [];\n let command = this;\n do {\n const moreFlags = command.createHelp().visibleOptions(command)\n .filter(option => option.long)\n .map(option => option.long);\n candidateFlags = candidateFlags.concat(moreFlags);\n command = command.parent;\n } while (command && !command._enablePositionalOptions);\n suggestion = suggestSimilar(flag, candidateFlags);\n }\n\n const message = `error: unknown option '${flag}'${suggestion}`;\n this.error(message, { code: 'commander.unknownOption' });\n }\n\n /**\n * Excess arguments, more than expected.\n *\n * @param {string[]} receivedArgs\n * @private\n */\n\n _excessArguments(receivedArgs) {\n if (this._allowExcessArguments) return;\n\n const expected = this.registeredArguments.length;\n const s = (expected === 1) ? '' : 's';\n const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n this.error(message, { code: 'commander.excessArguments' });\n }\n\n /**\n * Unknown command.\n *\n * @private\n */\n\n unknownCommand() {\n const unknownName = this.args[0];\n let suggestion = '';\n\n if (this._showSuggestionAfterError) {\n const candidateNames = [];\n this.createHelp().visibleCommands(this).forEach((command) => {\n candidateNames.push(command.name());\n // just visible alias\n if (command.alias()) candidateNames.push(command.alias());\n });\n suggestion = suggestSimilar(unknownName, candidateNames);\n }\n\n const message = `error: unknown command '${unknownName}'${suggestion}`;\n this.error(message, { code: 'commander.unknownCommand' });\n }\n\n /**\n * Get or set the program version.\n *\n * This method auto-registers the \"-V, --version\" option which will print the version number.\n *\n * You can optionally supply the flags and description to override the defaults.\n *\n * @param {string} [str]\n * @param {string} [flags]\n * @param {string} [description]\n * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n */\n\n version(str, flags, description) {\n if (str === undefined) return this._version;\n this._version = str;\n flags = flags || '-V, --version';\n description = description || 'output the version number';\n const versionOption = this.createOption(flags, description);\n this._versionOptionName = versionOption.attributeName();\n this._registerOption(versionOption);\n\n this.on('option:' + versionOption.name(), () => {\n this._outputConfiguration.writeOut(`${str}\\n`);\n this._exit(0, 'commander.version', str);\n });\n return this;\n }\n\n /**\n * Set the description.\n *\n * @param {string} [str]\n * @param {Object} [argsDescription]\n * @return {(string|Command)}\n */\n description(str, argsDescription) {\n if (str === undefined && argsDescription === undefined) return this._description;\n this._description = str;\n if (argsDescription) {\n this._argsDescription = argsDescription;\n }\n return this;\n }\n\n /**\n * Set the summary. Used when listed as subcommand of parent.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n summary(str) {\n if (str === undefined) return this._summary;\n this._summary = str;\n return this;\n }\n\n /**\n * Set an alias for the command.\n *\n * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n *\n * @param {string} [alias]\n * @return {(string|Command)}\n */\n\n alias(alias) {\n if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n /** @type {Command} */\n let command = this;\n if (this.commands.length !== 0 && this.commands[this.commands.length - 1]._executableHandler) {\n // assume adding alias for last added executable subcommand, rather than this\n command = this.commands[this.commands.length - 1];\n }\n\n if (alias === command._name) throw new Error('Command alias can\\'t be the same as its name');\n const matchingCommand = this.parent?._findCommand(alias);\n if (matchingCommand) {\n // c.f. _registerCommand\n const existingCmd = [matchingCommand.name()].concat(matchingCommand.aliases()).join('|');\n throw new Error(`cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`);\n }\n\n command._aliases.push(alias);\n return this;\n }\n\n /**\n * Set aliases for the command.\n *\n * Only the first alias is shown in the auto-generated help.\n *\n * @param {string[]} [aliases]\n * @return {(string[]|Command)}\n */\n\n aliases(aliases) {\n // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n if (aliases === undefined) return this._aliases;\n\n aliases.forEach((alias) => this.alias(alias));\n return this;\n }\n\n /**\n * Set / get the command usage `str`.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n usage(str) {\n if (str === undefined) {\n if (this._usage) return this._usage;\n\n const args = this.registeredArguments.map((arg) => {\n return humanReadableArgName(arg);\n });\n return [].concat(\n (this.options.length || (this._helpOption !== null) ? '[options]' : []),\n (this.commands.length ? '[command]' : []),\n (this.registeredArguments.length ? args : [])\n ).join(' ');\n }\n\n this._usage = str;\n return this;\n }\n\n /**\n * Get or set the name of the command.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n name(str) {\n if (str === undefined) return this._name;\n this._name = str;\n return this;\n }\n\n /**\n * Set the name of the command from script filename, such as process.argv[1],\n * or require.main.filename, or __filename.\n *\n * (Used internally and public although not documented in README.)\n *\n * @example\n * program.nameFromFilename(require.main.filename);\n *\n * @param {string} filename\n * @return {Command}\n */\n\n nameFromFilename(filename) {\n this._name = path.basename(filename, path.extname(filename));\n\n return this;\n }\n\n /**\n * Get or set the directory for searching for executable subcommands of this command.\n *\n * @example\n * program.executableDir(__dirname);\n * // or\n * program.executableDir('subcommands');\n *\n * @param {string} [path]\n * @return {(string|null|Command)}\n */\n\n executableDir(path) {\n if (path === undefined) return this._executableDir;\n this._executableDir = path;\n return this;\n }\n\n /**\n * Return program help documentation.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n * @return {string}\n */\n\n helpInformation(contextOptions) {\n const helper = this.createHelp();\n if (helper.helpWidth === undefined) {\n helper.helpWidth = (contextOptions && contextOptions.error) ? this._outputConfiguration.getErrHelpWidth() : this._outputConfiguration.getOutHelpWidth();\n }\n return helper.formatHelp(this, helper);\n }\n\n /**\n * @private\n */\n\n _getHelpContext(contextOptions) {\n contextOptions = contextOptions || {};\n const context = { error: !!contextOptions.error };\n let write;\n if (context.error) {\n write = (arg) => this._outputConfiguration.writeErr(arg);\n } else {\n write = (arg) => this._outputConfiguration.writeOut(arg);\n }\n context.write = contextOptions.write || write;\n context.command = this;\n return context;\n }\n\n /**\n * Output help information for this command.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n outputHelp(contextOptions) {\n let deprecatedCallback;\n if (typeof contextOptions === 'function') {\n deprecatedCallback = contextOptions;\n contextOptions = undefined;\n }\n const context = this._getHelpContext(contextOptions);\n\n this._getCommandAndAncestors().reverse().forEach(command => command.emit('beforeAllHelp', context));\n this.emit('beforeHelp', context);\n\n let helpInformation = this.helpInformation(context);\n if (deprecatedCallback) {\n helpInformation = deprecatedCallback(helpInformation);\n if (typeof helpInformation !== 'string' && !Buffer.isBuffer(helpInformation)) {\n throw new Error('outputHelp callback must return a string or a Buffer');\n }\n }\n context.write(helpInformation);\n\n if (this._getHelpOption()?.long) {\n this.emit(this._getHelpOption().long); // deprecated\n }\n this.emit('afterHelp', context);\n this._getCommandAndAncestors().forEach(command => command.emit('afterAllHelp', context));\n }\n\n /**\n * You can pass in flags and a description to customise the built-in help option.\n * Pass in false to disable the built-in help option.\n *\n * @example\n * program.helpOption('-?, --help' 'show help'); // customise\n * program.helpOption(false); // disable\n *\n * @param {(string | boolean)} flags\n * @param {string} [description]\n * @return {Command} `this` command for chaining\n */\n\n helpOption(flags, description) {\n // Support disabling built-in help option.\n if (typeof flags === 'boolean') {\n if (flags) {\n this._helpOption = this._helpOption ?? undefined; // preserve existing option\n } else {\n this._helpOption = null; // disable\n }\n return this;\n }\n\n // Customise flags and description.\n flags = flags ?? '-h, --help';\n description = description ?? 'display help for command';\n this._helpOption = this.createOption(flags, description);\n\n return this;\n }\n\n /**\n * Lazy create help option.\n * Returns null if has been disabled with .helpOption(false).\n *\n * @returns {(Option | null)} the help option\n * @package internal use only\n */\n _getHelpOption() {\n // Lazy create help option on demand.\n if (this._helpOption === undefined) {\n this.helpOption(undefined, undefined);\n }\n return this._helpOption;\n }\n\n /**\n * Supply your own option to use for the built-in help option.\n * This is an alternative to using helpOption() to customise the flags and description etc.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addHelpOption(option) {\n this._helpOption = option;\n return this;\n }\n\n /**\n * Output help information and exit.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n help(contextOptions) {\n this.outputHelp(contextOptions);\n let exitCode = process.exitCode || 0;\n if (exitCode === 0 && contextOptions && typeof contextOptions !== 'function' && contextOptions.error) {\n exitCode = 1;\n }\n // message: do not have all displayed text available so only passing placeholder.\n this._exit(exitCode, 'commander.help', '(outputHelp)');\n }\n\n /**\n * Add additional text to be displayed with the built-in help.\n *\n * Position is 'before' or 'after' to affect just this command,\n * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n *\n * @param {string} position - before or after built-in help\n * @param {(string | Function)} text - string to add, or a function returning a string\n * @return {Command} `this` command for chaining\n */\n addHelpText(position, text) {\n const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n if (!allowedValues.includes(position)) {\n throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n const helpEvent = `${position}Help`;\n this.on(helpEvent, (context) => {\n let helpStr;\n if (typeof text === 'function') {\n helpStr = text({ error: context.error, command: context.command });\n } else {\n helpStr = text;\n }\n // Ignore falsy value when nothing to output.\n if (helpStr) {\n context.write(`${helpStr}\\n`);\n }\n });\n return this;\n }\n\n /**\n * Output help information if help flags specified\n *\n * @param {Array} args - array of options to search for help flags\n * @private\n */\n\n _outputHelpIfRequested(args) {\n const helpOption = this._getHelpOption();\n const helpRequested = helpOption && args.find(arg => helpOption.is(arg));\n if (helpRequested) {\n this.outputHelp();\n // (Do not have all displayed text available so only passing placeholder.)\n this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n }\n }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n // Testing for these options:\n // --inspect[=[host:]port]\n // --inspect-brk[=[host:]port]\n // --inspect-port=[host:]port\n return args.map((arg) => {\n if (!arg.startsWith('--inspect')) {\n return arg;\n }\n let debugOption;\n let debugHost = '127.0.0.1';\n let debugPort = '9229';\n let match;\n if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n // e.g. --inspect\n debugOption = match[1];\n } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) {\n debugOption = match[1];\n if (/^\\d+$/.test(match[3])) {\n // e.g. --inspect=1234\n debugPort = match[3];\n } else {\n // e.g. --inspect=localhost\n debugHost = match[3];\n }\n } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null) {\n // e.g. --inspect=localhost:1234\n debugOption = match[1];\n debugHost = match[3];\n debugPort = match[4];\n }\n\n if (debugOption && debugPort !== '0') {\n return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n }\n return arg;\n });\n}\n\nexports.Command = Command;\n","const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\nexports.program = new Command();\n\nexports.createCommand = (name) => new Command(name);\nexports.createOption = (flags, description) => new Option(flags, description);\nexports.createArgument = (name, description) => new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\n","import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n program,\n createCommand,\n createArgument,\n createOption,\n CommanderError,\n InvalidArgumentError,\n InvalidOptionArgumentError, // deprecated old name\n Command,\n Argument,\n Option,\n Help\n} = commander;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","#!/usr/bin/env node\nimport { Help, Option, program } from 'commander'\nimport cloneDeep from 'lodash/cloneDeep'\nimport pickBy from 'lodash/pickBy'\nimport semver from 'semver'\nimport pkg from '../../package.json'\nimport cliOptions, { renderExtendedHelp } from '../cli-options'\nimport ncu from '../index'\nimport { chalkInit } from '../lib/chalk'\n// async global contexts are only available in esm modules -> function\nimport getNcuRc from '../lib/getNcuRc'\n\n/** Removes inline code ticks. */\nconst uncode = (s: string) => s.replace(/`/g, '')\n\n;(async () => {\n // importing update-notifier dynamically as esm modules are only allowed to be dynamically imported inside of cjs modules\n const { default: updateNotifier } = await import('update-notifier')\n\n // check if a new version of ncu is available and print an update notification\n //\n // For testing from specific versions, use:\n //\n // updateNotifier({\n // pkg: {\n // name: 'npm-check-updates',\n // version: x.y.z\n // },\n // updateCheckInterval: 0\n // })\n\n const notifier = updateNotifier({ pkg })\n if (notifier.update && notifier.update.latest !== pkg.version) {\n const { default: chalk } = await import('chalk')\n\n // generate release urls for all the major versions from the current version up to the latest\n const currentMajor = semver.parse(notifier.update.current)?.major\n const latestMajor = semver.parse(notifier.update.latest)?.major\n const majorVersions =\n // Greater than or equal to (>=) will always return false if either operant is NaN or undefined.\n // Without this condition, it can result in a RangeError: Invalid array length.\n // See: https://github.com/raineorshine/npm-check-updates/issues/1200\n currentMajor && latestMajor && latestMajor >= currentMajor\n ? new Array(latestMajor - currentMajor).fill(0).map((x, i) => currentMajor + i + 1)\n : []\n const releaseUrls = majorVersions.map(majorVersion => `${pkg.homepage ?? ''}/releases/tag/v${majorVersion}.0.0`)\n\n // for non-major updates, generate a URL to view all commits since the current version\n const compareUrl = `${pkg.homepage ?? ''}/compare/v${notifier.update.current}...v${notifier.update.latest}`\n\n notifier.notify({\n defer: false,\n isGlobal: true,\n message: `Update available ${chalk.dim('{currentVersion}')}${chalk.reset(' → ')}${\n notifier.update.type === 'major'\n ? chalk.red('{latestVersion}')\n : notifier.update.type === 'minor'\n ? chalk.yellow('{latestVersion}')\n : chalk.green('{latestVersion}')\n }\nRun ${chalk.cyan('{updateCommand}')} to update\n${chalk.dim.underline(\n notifier.update.type === 'major' ? releaseUrls.map(url => chalk.dim.underline(url)).join('\\n') : compareUrl,\n)}`,\n })\n }\n\n // manually detect option-specific help\n // https://github.com/raineorshine/npm-check-updates/issues/787\n const rawArgs = process.argv.slice(2)\n if (rawArgs.includes('--help') && rawArgs.length > 1) {\n const color = rawArgs.includes('--color')\n await chalkInit(color)\n const nonHelpArgs = rawArgs.filter(arg => arg !== '--help')\n nonHelpArgs.forEach(arg => {\n // match option by long or short\n const query = arg.replace(/^-*/, '')\n const option = cliOptions.find(\n option =>\n query === option.long ||\n query === option.short ||\n (query === `no-${option.long}` && option.type === 'boolean'),\n )\n if (option) {\n console.info(renderExtendedHelp(option) + '\\n')\n } else {\n console.info(`Unknown option: ${arg}`)\n }\n })\n if (rawArgs.length - nonHelpArgs.length > 1) {\n console.info('Would you like some help with your help?')\n }\n process.exit(0)\n }\n\n // a set of options that only work in an rc config file, not on the command line\n const noCli = new Set(cliOptions.filter(option => option.cli === false).map(option => `--${option.long}`))\n\n // start commander program\n program\n .description('[filter] is a list or regex of package names to check (all others will be ignored).')\n .usage('[options] [filter]')\n // See: boolean optional arg below\n .configureHelp({\n optionTerm: option =>\n option.long && noCli.has(option.long)\n ? option.long.replace('--', '') + '*'\n : option.long === '--version'\n ? '-v, -V, --version'\n : option.flags.replace('[bool]', ''),\n optionDescription: option =>\n option.long === '--version'\n ? 'Output the version number of npm-check-updates.'\n : option.long === '--help'\n ? `You're lookin' at it.`\n : Help.prototype.optionDescription(option),\n })\n // add hidden -v alias for --V/--version\n .addOption(new Option('-v, --versionAlias').hideHelp())\n .on('option:versionAlias', () => {\n console.info(pkg.version)\n process.exit(0)\n })\n\n // add cli options\n cliOptions.forEach(({ long, short, arg, description, default: defaultValue, help, parse, type }) => {\n const flags = `${short ? `-${short}, ` : ''}--${long}${arg ? ` <${arg}>` : ''}`\n // format description for cli by removing inline code ticks\n // point to help in description if extended help text is available\n const descriptionFormatted = `${uncode(description)}${help ? ` Run \"ncu --help ${long}\" for details.` : ''}`\n\n // handle 3rd/4th argument polymorphism\n program.option(flags, descriptionFormatted, parse || defaultValue, parse ? defaultValue : undefined)\n\n // add --no- prefixed boolean options\n // necessary for overriding booleans set to true in the ncurc\n if (type === 'boolean') {\n program.addOption(new Option(`--no-${long}`).default(false).hideHelp())\n }\n })\n\n // set version option at the end\n program.version(pkg.version)\n\n // commander mutates its optionValues with program.parse\n // In order to call program.parse again and parse the rc file options, we need to clear commander's internal optionValues\n // Otherwise array options will be duplicated\n const defaultOptionValues = cloneDeep((program as any)._optionValues)\n program.parse(process.argv)\n\n const programOpts = program.opts()\n const programArgs = process.argv.slice(2)\n\n const { color, configFileName, configFilePath, global, packageFile, mergeConfig } = programOpts\n\n // Force color on all chalk instances.\n // See: /src/lib/chalk.ts\n await chalkInit(color)\n\n // load .ncurc\n // Do not load when tests are running (can be overridden if configFilePath is set explicitly, or --mergeConfig option specified)\n const rcResult =\n !process.env.NCU_TESTS || configFilePath || mergeConfig\n ? await getNcuRc({\n configFileName,\n configFilePath,\n global,\n packageFile,\n options: { ...programOpts, cli: true },\n })\n : null\n\n // override rc args with program args\n const rcArgs = (rcResult?.args || []).filter(\n (arg, i, args) =>\n (typeof arg !== 'string' || !arg.startsWith('-') || !programArgs.includes(arg)) &&\n (typeof args[i - 1] !== 'string' || !args[i - 1].startsWith('-') || !programArgs.includes(args[i - 1])),\n )\n\n // insert config arguments into command line arguments so they can all be parsed by commander\n const combinedArguments = [...process.argv.slice(0, 2), ...rcArgs, ...programArgs]\n\n // See defaultOptionValues comment above\n ;(program as any)._optionValues = defaultOptionValues\n program.parse(combinedArguments)\n const combinedProgramOpts = program.opts()\n\n // filter out undefined program options and combine cli options with config file options\n const options = {\n ...(rcResult && Object.keys(rcResult.config).length > 0 ? { rcConfigPath: rcResult.filePath } : null),\n ...pickBy(program.opts(), value => value !== undefined),\n args: program.args,\n ...(combinedProgramOpts.filter ? { filter: combinedProgramOpts.filter } : null),\n ...(combinedProgramOpts.reject ? { reject: combinedProgramOpts.reject } : null),\n }\n\n // NOTE: Options handling and defaults go in initOptions in index.js\n\n ncu(options, { cli: true })\n})()\n"],"names":["exitCode","code","message","CommanderError","error","InvalidArgumentError","require$$0","Argument$3","name","description","value","previous","fn","values","arg","humanReadableArgName","nameOutput","argument","Argument","Help$3","cmd","visibleCommands","helpCommand","a","b","getSortKey","option","visibleOptions","helpOption","removeShort","removeLong","globalOptions","ancestorCmd","args","helper","max","command","cmdName","ancestorCmdNames","extraInfo","choice","extraDescripton","termWidth","helpWidth","itemIndentWidth","itemSeparatorWidth","formatItem","term","fullText","formatList","textArray","output","commandDescription","argumentList","optionList","globalOptionList","commandList","str","width","indent","minColumnWidth","indents","manualIndent","columnWidth","leadingStr","columnText","indentString","breaks","regex","lines","line","i","help","Help","Option$3","flags","optionFlags","splitOptionFlags","names","impliedOptionValues","newImplied","mandatory","hide","camelcase","DualOptions$1","options","key","optionKey","preset","negativeValue","word","shortFlag","longFlag","flagParts","Option","DualOptions","maxDistance","editDistance","d","j","cost","suggestSimilar","candidates","searchingOptions","candidate","similar","bestDistance","minSimilarity","distance","length","suggestSimilar_1","EventEmitter","childProcess","require$$1","path","require$$2","fs","require$$3","process","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","Command","write","sourceCommand","result","nameAndArgs","actionOptsOrExecDesc","execOpts","desc","opts","configuration","displayHelp","displaySuggestion","defaultValue","detail","previousArgument","enableOrNameAndArgs","helpName","helpArgs","helpDescription","deprecatedDescription","event","listener","allowedValues","err","expectedArgsCount","actionArgs","target","invalidArgumentMessage","matchingOption","matchingFlag","knownBy","alreadyUsed","existingCmd","newCmd","oname","positiveLongFlag","handleOptionValue","val","invalidValueMessage","valueSource","oldValue","config","def","m","parseArg","combine","allowUnknown","allowExcess","positional","passThrough","storeAsProperties","source","argv","parseOptions","userArgs","subcommand","launchWithNode","sourceExt","findFile","baseDir","baseName","localBin","foundExt","ext","executableFile","executableDir","resolvedScriptPath","localFile","legacyName","proc","incrementNodeInspectorPort","signal","exitCallback","_signal","executableDirMessage","executableMissing","wrappedError","commandName","operands","unknown","subCommand","promiseChain","subcommandName","myParseArg","parsedValue","processedArgs","declaredArg","index","processed","v","promise","hooks","hookedCommand","callback","hookDetail","hook","parsed","checkForUnknownOptions","commandEvent","anOption","definedNonDefaultOptions","conflictingAndDefined","defined","dest","maybeOption","activeVariadicOption","len","combinedOptions","errorOptions","dualHelper","hasCustomOptionValue","impliedKey","conflictingOption","findBestOptionFromValue","optionValue","negativeOption","positiveOption","getErrorMessage","bestOption","flag","suggestion","candidateFlags","moreFlags","receivedArgs","expected","s","unknownName","candidateNames","versionOption","argsDescription","alias","matchingCommand","aliases","filename","contextOptions","context","deprecatedCallback","helpInformation","position","text","helpEvent","helpStr","debugOption","debugHost","debugPort","match","commander","program","createCommand","createArgument","createOption","InvalidOptionArgumentError","baseClone","CLONE_DEEP_FLAG","CLONE_SYMBOLS_FLAG","cloneDeep","cloneDeep_1","uncode","updateNotifier","notifier","pkg","chalk","currentMajor","semver","latestMajor","releaseUrls","x","majorVersion","compareUrl","url","rawArgs","color","chalkInit","nonHelpArgs","query","cliOptions","renderExtendedHelp","noCli","long","short","parse","type","descriptionFormatted","defaultOptionValues","programOpts","programArgs","configFileName","configFilePath","global","packageFile","mergeConfig","rcResult","getNcuRc","rcArgs","combinedArguments","combinedProgramOpts","pickBy","ncu"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function n({onlyFirst:e=!1}={}){const t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}const r=n();function o(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(r,"")}exports.default=o;
2
+ //# sourceMappingURL=index-BnIU43YD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BnIU43YD.js","sources":["../node_modules/ansi-regex/index.js","../node_modules/strip-ansi/index.js"],"sourcesContent":["export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n"],"names":["ansiRegex","onlyFirst","pattern","regex","stripAnsi","string"],"mappings":"gFAAe,SAASA,EAAU,CAAC,UAAAC,EAAY,EAAK,EAAI,CAAA,EAAI,CAC3D,MAAMC,EAAU,CACZ,+HACH,0DACF,EAAG,KAAK,GAAG,EAEV,OAAO,IAAI,OAAOA,EAASD,EAAY,OAAY,GAAG,CACvD,CCLA,MAAME,EAAQH,EAAS,EAER,SAASI,EAAUC,EAAQ,CACzC,GAAI,OAAOA,GAAW,SACrB,MAAM,IAAI,UAAU,gCAAgC,OAAOA,CAAM,IAAI,EAMtE,OAAOA,EAAO,QAAQF,EAAO,EAAE,CAChC","x_google_ignoreList":[0,1]}