{"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/rfdc/index.js","../src/bin/cli.ts"],"sourcesContent":["/**\n * CommanderError 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   */\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 */\nclass InvalidArgumentError extends CommanderError {\n  /**\n   * Constructs the InvalidArgumentError class\n   * @param {string} [message] explanation of why argument is invalid\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\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(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\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   * @returns {Argument}\n   */\n  argRequired() {\n    this.required = true;\n    return this;\n  }\n\n  /**\n   * Make argument optional.\n   *\n   * @returns {Argument}\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 ? '<' + nameOutput + '>' : '[' + 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: because 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\n        ? option.short.replace(/^-/, '')\n        : 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(\n          cmd.createOption(helpOption.long, helpOption.description),\n        );\n      } else if (helpOption.short && !removeShort) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.short, helpOption.description),\n        );\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 (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      const visibleOptions = ancestorCmd.options.filter(\n        (option) => !option.hidden,\n      );\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 =\n          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\n      .map((arg) => humanReadableArgName(arg))\n      .join(' ');\n    return (\n      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  /**\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 (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\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: because 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: because 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    }\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 =\n        option.required ||\n        option.optional ||\n        (option.isBoolean() && typeof option.defaultValue === 'boolean');\n      if (showDefault) {\n        extraInfo.push(\n          `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n        );\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    }\n    if (argument.defaultValue !== undefined) {\n      extraInfo.push(\n        `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n      );\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(\n          fullText,\n          helpWidth - itemIndentWidth,\n          termWidth + itemSeparatorWidth,\n        );\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([\n        helper.wrap(commandDescription, helpWidth, 0),\n        '',\n      ]);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return formatItem(\n        helper.argumentTerm(argument),\n        helper.argumentDescription(argument),\n      );\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(\n        helper.optionTerm(option),\n        helper.optionDescription(option),\n      );\n    });\n    if (optionList.length > 0) {\n      output = output.concat(['Options:', formatList(optionList), '']);\n    }\n\n    if (this.showGlobalOptions) {\n      const globalOptionList = helper\n        .visibleGlobalOptions(cmd)\n        .map((option) => {\n          return formatItem(\n            helper.optionTerm(option),\n            helper.optionDescription(option),\n          );\n        });\n      if (globalOptionList.length > 0) {\n        output = output.concat([\n          'Global Options:',\n          formatList(globalOptionList),\n          '',\n        ]);\n      }\n    }\n\n    // Commands\n    const commandList = helper.visibleCommands(cmd).map((cmd) => {\n      return formatItem(\n        helper.subcommandTerm(cmd),\n        helper.subcommandDescription(cmd),\n      );\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 =\n      ' \\\\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      `\\n|.{1,${columnWidth - 1}}([${breaks}]|$)|[^${breaks}]+?([${breaks}]|$)`,\n      'g',\n    );\n    const lines = columnText.match(regex) || [];\n    return (\n      leadingStr +\n      lines\n        .map((line, i) => {\n          if (line === '\\n') return ''; // preserve empty lines\n          return (i > 0 ? indentString : '') + line.trimEnd();\n        })\n        .join('\\n')\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\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(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\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\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\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]))\n    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)\n    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('node:events').EventEmitter;\nconst childProcess = require('node:child_process');\nconst path = require('node:path');\nconst fs = require('node:fs');\nconst process = require('node: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: () =>\n        process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () =>\n        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 =\n      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    // eslint-disable-next-line @typescript-eslint/no-this-alias\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\n      .trim()\n      .split(/ +/)\n      .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(\n        `only the last argument can be variadic '${previousArgument.name()}'`,\n      );\n    }\n    if (\n      argument.required &&\n      argument.defaultValue !== undefined &&\n      argument.parseArg === undefined\n    ) {\n      throw new Error(\n        `a default value for a required argument is never used: '${argument.name()}'`,\n      );\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   * @example\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 =\n      this._addImplicitHelpCommand ??\n      (this.commands.length &&\n        !this._actionHandler &&\n        !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   * @private\n   */\n\n  _registerOption(option) {\n    const matchingOption =\n      (option.short && this._findOption(option.short)) ||\n      (option.long && this._findOption(option.long));\n    if (matchingOption) {\n      const matchingFlag =\n        option.long && this._findOption(option.long)\n          ? option.long\n          : 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   * @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) =>\n      this._findCommand(name),\n    );\n    if (alreadyUsed) {\n      const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n      const newCmd = knownBy(command).join('|');\n      throw new Error(\n        `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n      );\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(\n          name,\n          option.defaultValue === undefined ? true : option.defaultValue,\n          'default',\n        );\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   * @return {Command} `this` command for chaining\n   * @private\n   */\n  _optionEx(config, flags, description, fn, defaultValue) {\n    if (typeof flags === 'object' && flags instanceof Option) {\n      throw new Error(\n        'To add an Option object use addOption() instead of option() or requiredOption()',\n      );\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(\n      { mandatory: true },\n      flags,\n      description,\n      parseArg,\n      defaultValue,\n    );\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] - if `true` or omitted, an optional value can be specified directly after the flag.\n   * @return {Command} `this` command for chaining\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] - if `true` or omitted, no error will be thrown for unknown options.\n   * @return {Command} `this` command for chaining\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] - if `true` or omitted, no error will be thrown for excess arguments.\n   * @return {Command} `this` command for chaining\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]\n   * @return {Command} `this` command for chaining\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] for unknown options.\n   * @return {Command} `this` command for chaining\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 (\n      this.parent &&\n      this._passThroughOptions &&\n      !this.parent._enablePositionalOptions\n    ) {\n      throw new Error(\n        `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n      );\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(\n        'call .storeOptionsAsProperties() before setting option values',\n      );\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    // auto-detect argument conventions if nothing supplied\n    if (argv === undefined && parseOptions.from === undefined) {\n      if (process.versions?.electron) {\n        parseOptions.from = 'electron';\n      }\n      // check node specific options for scenarios where user CLI args follow executable without scriptname\n      const execArgv = process.execArgv ?? [];\n      if (\n        execArgv.includes('-e') ||\n        execArgv.includes('--eval') ||\n        execArgv.includes('-p') ||\n        execArgv.includes('--print')\n      ) {\n        parseOptions.from = 'eval'; // internal usage, not documented\n      }\n    }\n\n    // default to using process.argv\n    if (argv === undefined) {\n      argv = process.argv;\n    }\n    this.rawArgs = argv.slice();\n\n    // extract the user args and scriptPath\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: because defaultApp is an 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      case 'eval':\n        userArgs = argv.slice(1);\n        break;\n      default:\n        throw new Error(\n          `unexpected parse option { from: '${parseOptions.from}' }`,\n        );\n    }\n\n    // Find default name for program from arguments.\n    if (!this._name && this._scriptPath)\n      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   * Use parseAsync instead of parse if any of your action handlers are async.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * program.parse(); // parse process.argv and auto-detect electron and special node flags\n   * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\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   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n   * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\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) =>\n        fs.existsSync(`${localBin}${ext}`),\n      );\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 =\n      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(\n        path.dirname(resolvedScriptPath),\n        executableDir,\n      );\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(\n          this._scriptPath,\n          path.extname(this._scriptPath),\n        );\n        if (legacyName !== this._name) {\n          localFile = findFile(\n            executableDir,\n            `${legacyName}-${subcommand._name}`,\n          );\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) {\n      // 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        process.on(signal, () => {\n          if (proc.killed === false && proc.exitCode === null) {\n            // @ts-ignore because signals not typed to known strings\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) => {\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(\n          new CommanderError(\n            code,\n            'commander.executeSubCommandAsync',\n            '(close)',\n          ),\n        );\n      }\n    });\n    proc.on('error', (err) => {\n      // @ts-ignore: because err.code is an unknown property\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: because err.code is an unknown property\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(\n          1,\n          'commander.executeSubCommandAsync',\n          '(error)',\n        );\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(\n      promiseChain,\n      subCommand,\n      'preSubcommand',\n    );\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(\n      subcommandName,\n      [],\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 (\n      this.registeredArguments.length > 0 &&\n      this.registeredArguments[this.registeredArguments.length - 1].variadic\n    ) {\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(\n          argument,\n          value,\n          previous,\n          invalidValueMessage,\n        );\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 (\n      this._getHelpCommand() &&\n      operands[0] === this._getHelpCommand().name()\n    ) {\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(\n        this._defaultCommandName,\n        operands,\n        unknown,\n      );\n    }\n    if (\n      this.commands.length &&\n      this.args.length === 0 &&\n      !this._actionHandler &&\n      !this._defaultCommandName\n    ) {\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, () =>\n        this._actionHandler(this.processedArgs),\n      );\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('*')) {\n        // 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   * @return {Command | undefined}\n   */\n  _findCommand(name) {\n    if (!name) return undefined;\n    return this.commands.find(\n      (cmd) => cmd._name === name || cmd._aliases.includes(name),\n    );\n  }\n\n  /**\n   * Return an option matching `arg` if any.\n   *\n   * @param {string} arg\n   * @return {Option}\n   * @package\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 (\n          anOption.mandatory &&\n          cmd.getOptionValue(anOption.attributeName()) === undefined\n        ) {\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((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    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 {\n            // 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 (\n            option.required ||\n            (option.optional && this._combineFlagAndOptionalValue)\n          ) {\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 (\n        (this._enablePositionalOptions || this._passThroughOptions) &&\n        operands.length === 0 &&\n        unknown.length === 0\n      ) {\n        if (this._findCommand(arg)) {\n          operands.push(arg);\n          if (args.length > 0) unknown.push(...args);\n          break;\n        } else if (\n          this._getHelpCommand() &&\n          arg === this._getHelpCommand().name()\n        ) {\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] =\n          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(\n      `${message}\\n`,\n      this._outputConfiguration.writeErr,\n    );\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 (\n          this.getOptionValue(optionKey) === undefined ||\n          ['default', 'config', 'env'].includes(\n            this.getOptionValueSource(optionKey),\n          )\n        ) {\n          if (option.required || option.optional) {\n            // 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 {\n            // 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 (\n        this.getOptionValue(optionKey) !== undefined &&\n        !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n      );\n    };\n    this.options\n      .filter(\n        (option) =>\n          option.implied !== undefined &&\n          hasCustomOptionValue(option.attributeName()) &&\n          dualHelper.valueFromOption(\n            this.getOptionValue(option.attributeName()),\n            option,\n          ),\n      )\n      .forEach((option) => {\n        Object.keys(option.implied)\n          .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n          .forEach((impliedKey) => {\n            this.setOptionValueWithSource(\n              impliedKey,\n              option.implied[impliedKey],\n              'implied',\n            );\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(\n        (target) => target.negate && optionKey === target.attributeName(),\n      );\n      const positiveOption = this.options.find(\n        (target) => !target.negate && optionKey === target.attributeName(),\n      );\n      if (\n        negativeOption &&\n        ((negativeOption.presetArg === undefined && optionValue === false) ||\n          (negativeOption.presetArg !== undefined &&\n            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      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      let command = this;\n      do {\n        const moreFlags = command\n          .createHelp()\n          .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()\n        .visibleCommands(this)\n        .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)\n      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    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let command = this;\n    if (\n      this.commands.length !== 0 &&\n      this.commands[this.commands.length - 1]._executableHandler\n    ) {\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)\n      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()]\n        .concat(matchingCommand.aliases())\n        .join('|');\n      throw new Error(\n        `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n      );\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 []\n        .concat(\n          this.options.length || this._helpOption !== null ? '[options]' : [],\n          this.commands.length ? '[command]' : [],\n          this.registeredArguments.length ? args : [],\n        )\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 =\n        contextOptions && contextOptions.error\n          ? this._outputConfiguration.getErrHelpWidth()\n          : 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()\n      .reverse()\n      .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 (\n        typeof helpInformation !== 'string' &&\n        !Buffer.isBuffer(helpInformation)\n      ) {\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) =>\n      command.emit('afterAllHelp', context),\n    );\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\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 (\n      exitCode === 0 &&\n      contextOptions &&\n      typeof contextOptions !== 'function' &&\n      contextOptions.error\n    ) {\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 (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n    ) {\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 (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n    ) {\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","'use strict'\nmodule.exports = rfdc\n\nfunction copyBuffer (cur) {\n  if (cur instanceof Buffer) {\n    return Buffer.from(cur)\n  }\n\n  return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length)\n}\n\nfunction rfdc (opts) {\n  opts = opts || {}\n  if (opts.circles) return rfdcCircles(opts)\n\n  const constructorHandlers = new Map()\n  constructorHandlers.set(Date, (o) => new Date(o))\n  constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)))\n  constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)))\n  if (opts.constructorHandlers) {\n    for (const handler of opts.constructorHandlers) {\n      constructorHandlers.set(handler[0], handler[1])\n    }\n  }\n\n  let handler = null\n\n  return opts.proto ? cloneProto : clone\n\n  function cloneArray (a, fn) {\n    const keys = Object.keys(a)\n    const a2 = new Array(keys.length)\n    for (let i = 0; i < keys.length; i++) {\n      const k = keys[i]\n      const cur = a[k]\n      if (typeof cur !== 'object' || cur === null) {\n        a2[k] = cur\n      } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n        a2[k] = handler(cur, fn)\n      } else if (ArrayBuffer.isView(cur)) {\n        a2[k] = copyBuffer(cur)\n      } else {\n        a2[k] = fn(cur)\n      }\n    }\n    return a2\n  }\n\n  function clone (o) {\n    if (typeof o !== 'object' || o === null) return o\n    if (Array.isArray(o)) return cloneArray(o, clone)\n    if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n      return handler(o, clone)\n    }\n    const o2 = {}\n    for (const k in o) {\n      if (Object.hasOwnProperty.call(o, k) === false) continue\n      const cur = o[k]\n      if (typeof cur !== 'object' || cur === null) {\n        o2[k] = cur\n      } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n        o2[k] = handler(cur, clone)\n      } else if (ArrayBuffer.isView(cur)) {\n        o2[k] = copyBuffer(cur)\n      } else {\n        o2[k] = clone(cur)\n      }\n    }\n    return o2\n  }\n\n  function cloneProto (o) {\n    if (typeof o !== 'object' || o === null) return o\n    if (Array.isArray(o)) return cloneArray(o, cloneProto)\n    if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n      return handler(o, cloneProto)\n    }\n    const o2 = {}\n    for (const k in o) {\n      const cur = o[k]\n      if (typeof cur !== 'object' || cur === null) {\n        o2[k] = cur\n      } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n        o2[k] = handler(cur, cloneProto)\n      } else if (ArrayBuffer.isView(cur)) {\n        o2[k] = copyBuffer(cur)\n      } else {\n        o2[k] = cloneProto(cur)\n      }\n    }\n    return o2\n  }\n}\n\nfunction rfdcCircles (opts) {\n  const refs = []\n  const refsNew = []\n\n  const constructorHandlers = new Map()\n  constructorHandlers.set(Date, (o) => new Date(o))\n  constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)))\n  constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)))\n  if (opts.constructorHandlers) {\n    for (const handler of opts.constructorHandlers) {\n      constructorHandlers.set(handler[0], handler[1])\n    }\n  }\n\n  let handler = null\n  return opts.proto ? cloneProto : clone\n\n  function cloneArray (a, fn) {\n    const keys = Object.keys(a)\n    const a2 = new Array(keys.length)\n    for (let i = 0; i < keys.length; i++) {\n      const k = keys[i]\n      const cur = a[k]\n      if (typeof cur !== 'object' || cur === null) {\n        a2[k] = cur\n      } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n        a2[k] = handler(cur, fn)\n      } else if (ArrayBuffer.isView(cur)) {\n        a2[k] = copyBuffer(cur)\n      } else {\n        const index = refs.indexOf(cur)\n        if (index !== -1) {\n          a2[k] = refsNew[index]\n        } else {\n          a2[k] = fn(cur)\n        }\n      }\n    }\n    return a2\n  }\n\n  function clone (o) {\n    if (typeof o !== 'object' || o === null) return o\n    if (Array.isArray(o)) return cloneArray(o, clone)\n    if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n      return handler(o, clone)\n    }\n    const o2 = {}\n    refs.push(o)\n    refsNew.push(o2)\n    for (const k in o) {\n      if (Object.hasOwnProperty.call(o, k) === false) continue\n      const cur = o[k]\n      if (typeof cur !== 'object' || cur === null) {\n        o2[k] = cur\n      } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n        o2[k] = handler(cur, clone)\n      } else if (ArrayBuffer.isView(cur)) {\n        o2[k] = copyBuffer(cur)\n      } else {\n        const i = refs.indexOf(cur)\n        if (i !== -1) {\n          o2[k] = refsNew[i]\n        } else {\n          o2[k] = clone(cur)\n        }\n      }\n    }\n    refs.pop()\n    refsNew.pop()\n    return o2\n  }\n\n  function cloneProto (o) {\n    if (typeof o !== 'object' || o === null) return o\n    if (Array.isArray(o)) return cloneArray(o, cloneProto)\n    if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n      return handler(o, cloneProto)\n    }\n    const o2 = {}\n    refs.push(o)\n    refsNew.push(o2)\n    for (const k in o) {\n      const cur = o[k]\n      if (typeof cur !== 'object' || cur === null) {\n        o2[k] = cur\n      } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n        o2[k] = handler(cur, cloneProto)\n      } else if (ArrayBuffer.isView(cur)) {\n        o2[k] = copyBuffer(cur)\n      } else {\n        const i = refs.indexOf(cur)\n        if (i !== -1) {\n          o2[k] = refsNew[i]\n        } else {\n          o2[k] = cloneProto(cur)\n        }\n      }\n    }\n    refs.pop()\n    refsNew.pop()\n    return o2\n  }\n}\n","#!/usr/bin/env node\nimport { Help, Option, program } from 'commander'\nimport createCloneDeep from 'rfdc'\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'\nimport { pickBy } from '../lib/pick'\n\nconst optionVersionDescription = 'Output the version number of npm-check-updates.'\n\n/** Removes inline code ticks. */\nconst uncode = (s: string) => s.replace(/`/g, '')\n\nconst cloneDeep = createCloneDeep()\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  const indexHelp = rawArgs.findIndex(arg => arg === '--help' || arg === '-h')\n  if (indexHelp !== -1 && rawArgs[indexHelp + 1]) {\n    const helpOption = rawArgs[indexHelp + 1].replace(/^-*/, '')\n    if (helpOption === 'help' || helpOption === 'h') {\n      console.info('Would you like some help with your help?')\n    } else {\n      await chalkInit()\n      const nonHelpArgs = [...rawArgs.slice(0, indexHelp), ...rawArgs.slice(indexHelp + 1)]\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 if (query === 'version' || query === 'v' || query === 'V') {\n          console.info(\n            renderExtendedHelp({\n              long: 'version',\n              short: 'v',\n              description: optionVersionDescription,\n              // do not pass boolean or it will print --no-version\n              type: 'string',\n            }) + '\\n',\n          )\n        } else {\n          console.info(`Unknown option: ${arg}`)\n        }\n      })\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            ? // add -v to version help to cover the alias added below\n              '-v, -V, --version'\n            : option.flags.replace('[bool]', ''),\n      optionDescription: option =>\n        option.long === '--version'\n          ? optionVersionDescription\n          : option.long === '--help'\n            ? `You're lookin' at it. Run \"ncu --help <option>\" for a specific option.`\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: unknown) => 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","execArgv","userArgs","subcommand","launchWithNode","sourceExt","findFile","baseDir","baseName","localBin","foundExt","ext","executableFile","executableDir","resolvedScriptPath","localFile","legacyName","proc","incrementNodeInspectorPort","signal","exitCallback","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","rfdc_1","rfdc","copyBuffer","cur","rfdcCircles","constructorHandlers","o","cloneArray","handler","cloneProto","clone","keys","a2","k","o2","refs","refsNew","optionVersionDescription","uncode","cloneDeep","createCloneDeep","updateNotifier","notifier","pkg","chalk","currentMajor","semver","latestMajor","releaseUrls","majorVersion","compareUrl","url","rawArgs","indexHelp","chalkInit","query","cliOptions","renderExtendedHelp","noCli","long","short","parse","type","descriptionFormatted","defaultOptionValues","programOpts","programArgs","color","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]}