{"version":3,"file":"cli.mjs","names":["CommanderError","InvalidArgumentError","Argument","InvalidArgumentError","humanReadableArgName","Help","cmd","humanReadableArgName","stripColor","Option","InvalidArgumentError","DualOptions","str","suggestSimilar","path","process","Command","Help","Argument","CommanderError","Option","option","Command","Option","Argument","Help","CommanderError","InvalidArgumentError","commander","headers: Record<string, string>","files: RepoTreeEntry[]","err: unknown"],"sources":["../../../../../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/error.js","../../../../../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/argument.js","../../../../../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/help.js","../../../../../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/option.js","../../../../../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/suggestSimilar.js","../../../../../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/command.js","../../../../../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/index.js","../../../../../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/esm.mjs","../../src/new/build/generate-index.ts","../../src/new/build/build.ts","../../src/new/build/dev.ts","../../src/new/create.ts","../../src/new/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.endsWith('...')) {\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  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\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._collectValue(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.minWidthToWrap = 40;\n    this.sortSubcommands = false;\n    this.sortOptions = false;\n    this.showGlobalOptions = false;\n  }\n\n  /**\n   * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n   * and just before calling `formatHelp()`.\n   *\n   * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n   *\n   * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n   */\n  prepareContext(contextOptions) {\n    this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\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(\n        max,\n        this.displayWidth(\n          helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n        ),\n      );\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(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\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(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\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(\n        max,\n        this.displayWidth(\n          helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        ),\n      );\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      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (option.description) {\n        return `${option.description} ${extraDescription}`;\n      }\n      return extraDescription;\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 extraDescription = `(${extraInfo.join(', ')})`;\n      if (argument.description) {\n        return `${argument.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n    return argument.description;\n  }\n\n  /**\n   * Format a list of items, given a heading and an array of formatted items.\n   *\n   * @param {string} heading\n   * @param {string[]} items\n   * @param {Help} helper\n   * @returns string[]\n   */\n  formatItemList(heading, items, helper) {\n    if (items.length === 0) return [];\n\n    return [helper.styleTitle(heading), ...items, ''];\n  }\n\n  /**\n   * Group items by their help group heading.\n   *\n   * @param {Command[] | Option[]} unsortedItems\n   * @param {Command[] | Option[]} visibleItems\n   * @param {Function} getGroup\n   * @returns {Map<string, Command[] | Option[]>}\n   */\n  groupItems(unsortedItems, visibleItems, getGroup) {\n    const result = new Map();\n    // Add groups in order of appearance in unsortedItems.\n    unsortedItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) result.set(group, []);\n    });\n    // Add items in order of appearance in visibleItems.\n    visibleItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) {\n        result.set(group, []);\n      }\n      result.get(group).push(item);\n    });\n    return result;\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; // in case prepareContext() was not called\n\n    function callFormatItem(term, description) {\n      return helper.formatItem(term, termWidth, description, helper);\n    }\n\n    // Usage\n    let output = [\n      `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n      '',\n    ];\n\n    // Description\n    const commandDescription = helper.commandDescription(cmd);\n    if (commandDescription.length > 0) {\n      output = output.concat([\n        helper.boxWrap(\n          helper.styleCommandDescription(commandDescription),\n          helpWidth,\n        ),\n        '',\n      ]);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return callFormatItem(\n        helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        helper.styleArgumentDescription(helper.argumentDescription(argument)),\n      );\n    });\n    output = output.concat(\n      this.formatItemList('Arguments:', argumentList, helper),\n    );\n\n    // Options\n    const optionGroups = this.groupItems(\n      cmd.options,\n      helper.visibleOptions(cmd),\n      (option) => option.helpGroupHeading ?? 'Options:',\n    );\n    optionGroups.forEach((options, group) => {\n      const optionList = options.map((option) => {\n        return callFormatItem(\n          helper.styleOptionTerm(helper.optionTerm(option)),\n          helper.styleOptionDescription(helper.optionDescription(option)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, optionList, helper));\n    });\n\n    if (helper.showGlobalOptions) {\n      const globalOptionList = helper\n        .visibleGlobalOptions(cmd)\n        .map((option) => {\n          return callFormatItem(\n            helper.styleOptionTerm(helper.optionTerm(option)),\n            helper.styleOptionDescription(helper.optionDescription(option)),\n          );\n        });\n      output = output.concat(\n        this.formatItemList('Global Options:', globalOptionList, helper),\n      );\n    }\n\n    // Commands\n    const commandGroups = this.groupItems(\n      cmd.commands,\n      helper.visibleCommands(cmd),\n      (sub) => sub.helpGroup() || 'Commands:',\n    );\n    commandGroups.forEach((commands, group) => {\n      const commandList = commands.map((sub) => {\n        return callFormatItem(\n          helper.styleSubcommandTerm(helper.subcommandTerm(sub)),\n          helper.styleSubcommandDescription(helper.subcommandDescription(sub)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, commandList, helper));\n    });\n\n    return output.join('\\n');\n  }\n\n  /**\n   * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n   *\n   * @param {string} str\n   * @returns {number}\n   */\n  displayWidth(str) {\n    return stripColor(str).length;\n  }\n\n  /**\n   * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  styleTitle(str) {\n    return str;\n  }\n\n  styleUsage(str) {\n    // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n    //    command subcommand [options] [command] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word === '[command]') return this.styleSubcommandText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleCommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleCommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleOptionDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleSubcommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleArgumentDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleDescriptionText(str) {\n    return str;\n  }\n  styleOptionTerm(str) {\n    return this.styleOptionText(str);\n  }\n  styleSubcommandTerm(str) {\n    // This is very like usage with lots of parts! Assume default string which is formed like:\n    //    subcommand [options] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleSubcommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleArgumentTerm(str) {\n    return this.styleArgumentText(str);\n  }\n  styleOptionText(str) {\n    return str;\n  }\n  styleArgumentText(str) {\n    return str;\n  }\n  styleSubcommandText(str) {\n    return str;\n  }\n  styleCommandText(str) {\n    return str;\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   * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n   *\n   * @param {string} str\n   * @returns {boolean}\n   */\n  preformatted(str) {\n    return /\\n[^\\S\\r\\n]/.test(str);\n  }\n\n  /**\n   * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n   *\n   * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n   *   TTT  DDD DDDD\n   *        DD DDD\n   *\n   * @param {string} term\n   * @param {number} termWidth\n   * @param {string} description\n   * @param {Help} helper\n   * @returns {string}\n   */\n  formatItem(term, termWidth, description, helper) {\n    const itemIndent = 2;\n    const itemIndentStr = ' '.repeat(itemIndent);\n    if (!description) return itemIndentStr + term;\n\n    // Pad the term out to a consistent width, so descriptions are aligned.\n    const paddedTerm = term.padEnd(\n      termWidth + term.length - helper.displayWidth(term),\n    );\n\n    // Format the description.\n    const spacerWidth = 2; // between term and description\n    const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n    const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n    let formattedDescription;\n    if (\n      remainingWidth < this.minWidthToWrap ||\n      helper.preformatted(description)\n    ) {\n      formattedDescription = description;\n    } else {\n      const wrappedDescription = helper.boxWrap(description, remainingWidth);\n      formattedDescription = wrappedDescription.replace(\n        /\\n/g,\n        '\\n' + ' '.repeat(termWidth + spacerWidth),\n      );\n    }\n\n    // Construct and overall indent.\n    return (\n      itemIndentStr +\n      paddedTerm +\n      ' '.repeat(spacerWidth) +\n      formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n    );\n  }\n\n  /**\n   * Wrap a string at whitespace, preserving existing line breaks.\n   * Wrapping is skipped if the width is less than `minWidthToWrap`.\n   *\n   * @param {string} str\n   * @param {number} width\n   * @returns {string}\n   */\n  boxWrap(str, width) {\n    if (width < this.minWidthToWrap) return str;\n\n    const rawLines = str.split(/\\r\\n|\\n/);\n    // split up text by whitespace\n    const chunkPattern = /[\\s]*[^\\s]+/g;\n    const wrappedLines = [];\n    rawLines.forEach((line) => {\n      const chunks = line.match(chunkPattern);\n      if (chunks === null) {\n        wrappedLines.push('');\n        return;\n      }\n\n      let sumChunks = [chunks.shift()];\n      let sumWidth = this.displayWidth(sumChunks[0]);\n      chunks.forEach((chunk) => {\n        const visibleWidth = this.displayWidth(chunk);\n        // Accumulate chunks while they fit into width.\n        if (sumWidth + visibleWidth <= width) {\n          sumChunks.push(chunk);\n          sumWidth += visibleWidth;\n          return;\n        }\n        wrappedLines.push(sumChunks.join(''));\n\n        const nextChunk = chunk.trimStart(); // trim space at line break\n        sumChunks = [nextChunk];\n        sumWidth = this.displayWidth(nextChunk);\n      });\n      wrappedLines.push(sumChunks.join(''));\n    });\n\n    return wrappedLines.join('\\n');\n  }\n}\n\n/**\n * Strip style ANSI escape sequences from the string. In particular, SGR (Select Graphic Rendition) codes.\n *\n * @param {string} str\n * @returns {string}\n * @package\n */\n\nfunction stripColor(str) {\n  // eslint-disable-next-line no-control-regex\n  const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g;\n  return str.replace(sgrPattern, '');\n}\n\nexports.Help = Help;\nexports.stripColor = stripColor;\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; // May be a short flag, undefined, or even a long flag (if option has two long flags).\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    this.helpGroupHeading = undefined; // soft initialised when option added to command\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  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\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._collectValue(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 an object attribute key.\n   *\n   * @return {string}\n   */\n\n  attributeName() {\n    if (this.negate) {\n      return camelcase(this.name().replace(/^no-/, ''));\n    }\n    return camelcase(this.name());\n  }\n\n  /**\n   * Set the help group heading.\n   *\n   * @param {string} heading\n   * @return {Option}\n   */\n  helpGroup(heading) {\n    this.helpGroupHeading = heading;\n    return this;\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  // short flag, single dash and single character\n  const shortFlagExp = /^-[^-]$/;\n  // long flag, double dash and at least one character\n  const longFlagExp = /^--[^-]/;\n\n  const flagParts = flags.split(/[ |,]+/).concat('guard');\n  // Normal is short and/or long.\n  if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n  // Long then short. Rarely used but fine.\n  if (!shortFlag && shortFlagExp.test(flagParts[0]))\n    shortFlag = flagParts.shift();\n  // Allow two long flags, like '--ws, --workspace'\n  // This is the supported way to have a shortish option flag.\n  if (!shortFlag && longFlagExp.test(flagParts[0])) {\n    shortFlag = longFlag;\n    longFlag = flagParts.shift();\n  }\n\n  // Check for unprocessed flag. Fail noisily rather than silently ignore.\n  if (flagParts[0].startsWith('-')) {\n    const unsupportedFlag = flagParts[0];\n    const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n    if (/^-[^-][^-]/.test(unsupportedFlag))\n      throw new Error(\n        `${baseError}\n- a short flag is a single dash and a single character\n  - either use a single dash and a single character (for a short flag)\n  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n      );\n    if (shortFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many short flags`);\n    if (longFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many long flags`);\n\n    throw new Error(`${baseError}\n- unrecognised flag format`);\n  }\n  if (shortFlag === undefined && longFlag === undefined)\n    throw new Error(\n      `option creation failed due to no flags found in '${flags}'.`,\n    );\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, stripColor } = 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 = false;\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    this._savedState = null; // used in save/restoreStateBeforeParse\n\n    // see configureOutput() for docs\n    this._outputConfiguration = {\n      writeOut: (str) => process.stdout.write(str),\n      writeErr: (str) => process.stderr.write(str),\n      outputError: (str, write) => write(str),\n      getOutHelpWidth: () =>\n        process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () =>\n        process.stderr.isTTY ? process.stderr.columns : undefined,\n      getOutHasColors: () =>\n        useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n      getErrHasColors: () =>\n        useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n      stripColor: (str) => stripColor(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    /** @type {string | undefined} */\n    this._helpGroupHeading = undefined; // soft initialised when added to parent\n    /** @type {string | undefined} */\n    this._defaultCommandGroup = undefined;\n    /** @type {string | undefined} */\n    this._defaultOptionGroup = undefined;\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   *     // change how output being written, defaults to stdout and stderr\n   *     writeOut(str)\n   *     writeErr(str)\n   *     // change how output being written for errors, defaults to writeErr\n   *     outputError(str, write) // used for displaying errors and not used for displaying help\n   *     // specify width for wrapping help\n   *     getOutHelpWidth()\n   *     getErrHelpWidth()\n   *     // color support, currently only used with Help\n   *     getOutHasColors()\n   *     getErrHasColors()\n   *     stripColor() // used to remove ANSI escape codes if output does not have colors\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    this._outputConfiguration = {\n      ...this._outputConfiguration,\n      ...configuration,\n    };\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|*)} [parseArg] - custom argument processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n  argument(name, description, parseArg, defaultValue) {\n    const argument = this.createArgument(name, description);\n    if (typeof parseArg === 'function') {\n      argument.default(defaultValue).argParser(parseArg);\n    } else {\n      argument.default(parseArg);\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?.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      if (enableOrNameAndArgs && this._defaultCommandGroup) {\n        // make the command to store the group\n        this._initCommandGroup(this._getHelpCommand());\n      }\n      return this;\n    }\n\n    const nameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n    const [, helpName, helpArgs] = nameAndArgs.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    // init group unless lazy create\n    if (enableOrNameAndArgs || description) this._initCommandGroup(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    this._initCommandGroup(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._initOptionGroup(option);\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._initCommandGroup(command);\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._collectValue(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('--pt, --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    this._prepareForParse();\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    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    await this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  _prepareForParse() {\n    if (this._savedState === null) {\n      this.saveStateBeforeParse();\n    } else {\n      this.restoreStateBeforeParse();\n    }\n  }\n\n  /**\n   * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n   */\n  saveStateBeforeParse() {\n    this._savedState = {\n      // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n      _name: this._name,\n      // option values before parse have default values (including false for negated options)\n      // shallow clones\n      _optionValues: { ...this._optionValues },\n      _optionValueSources: { ...this._optionValueSources },\n    };\n  }\n\n  /**\n   * Restore state before parse for calls after the first.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n   */\n  restoreStateBeforeParse() {\n    if (this._storeOptionsAsProperties)\n      throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n    // clear state from _prepareUserArgs\n    this._name = this._savedState._name;\n    this._scriptPath = null;\n    this.rawArgs = [];\n    // clear state from setOptionValueWithSource\n    this._optionValues = { ...this._savedState._optionValues };\n    this._optionValueSources = { ...this._savedState._optionValueSources };\n    // clear state from _parseCommand\n    this.args = [];\n    // clear state from _processArguments\n    this.processedArgs = [];\n  }\n\n  /**\n   * Throw if expected executable is missing. Add lots of help for author.\n   *\n   * @param {string} executableFile\n   * @param {string} executableDir\n   * @param {string} subcommandName\n   */\n  _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n    if (fs.existsSync(executableFile)) return;\n\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 '${subcommandName}' 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  }\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 {\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      this._checkForMissingExecutable(\n        executableFile,\n        executableDir,\n        subcommand._name,\n      );\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        this._checkForMissingExecutable(\n          executableFile,\n          executableDir,\n          subcommand._name,\n        );\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    subCommand._prepareForParse();\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?.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?.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   * Side effects: modifies command by storing options. Does not reset state if called again.\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[]} args\n   * @return {{operands: string[], unknown: string[]}}\n   */\n\n  parseOptions(args) {\n    const operands = []; // operands, not options or values\n    const unknown = []; // first unknown option and remaining unknown args\n    let dest = operands;\n\n    function maybeOption(arg) {\n      return arg.length > 1 && arg[0] === '-';\n    }\n\n    const negativeNumberArg = (arg) => {\n      // return false if not a negative number\n      if (!/^-(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?$/.test(arg)) return false;\n      // negative number is ok unless digit used as an option in command hierarchy\n      return !this._getCommandAndAncestors().some((cmd) =>\n        cmd.options\n          .map((opt) => opt.short)\n          .some((short) => /^-\\d$/.test(short)),\n      );\n    };\n\n    // parse options\n    let activeVariadicOption = null;\n    let activeGroup = null; // working through group of short options, like -abc\n    let i = 0;\n    while (i < args.length || activeGroup) {\n      const arg = activeGroup ?? args[i++];\n      activeGroup = null;\n\n      // literal\n      if (arg === '--') {\n        if (dest === unknown) dest.push(arg);\n        dest.push(...args.slice(i));\n        break;\n      }\n\n      if (\n        activeVariadicOption &&\n        (!maybeOption(arg) || negativeNumberArg(arg))\n      ) {\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[i++];\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 (\n              i < args.length &&\n              (!maybeOption(args[i]) || negativeNumberArg(args[i]))\n            ) {\n              value = args[i++];\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\n            this.emit(`option:${option.name()}`);\n            // remove the processed option and keep processing group\n            activeGroup = `-${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      // A negative number in a leaf command is not an unknown option.\n      if (\n        dest === operands &&\n        maybeOption(arg) &&\n        !(this.commands.length === 0 && negativeNumberArg(arg))\n      ) {\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          unknown.push(...args.slice(i));\n          break;\n        } else if (\n          this._getHelpCommand() &&\n          arg === this._getHelpCommand().name()\n        ) {\n          operands.push(arg, ...args.slice(i));\n          break;\n        } else if (this._defaultCommandName) {\n          unknown.push(arg, ...args.slice(i));\n          break;\n        }\n      }\n\n      // If using passThroughOptions, stop processing options at first command-argument.\n      if (this._passThroughOptions) {\n        dest.push(arg, ...args.slice(i));\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/get the help group heading for this subcommand in parent command's help.\n   *\n   * @param {string} [heading]\n   * @return {Command | string}\n   */\n\n  helpGroup(heading) {\n    if (heading === undefined) return this._helpGroupHeading ?? '';\n    this._helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for subcommands added to this command.\n   * (This does not override a group set directly on the subcommand using .helpGroup().)\n   *\n   * @example\n   * program.commandsGroup('Development Commands:);\n   * program.command('watch')...\n   * program.command('lint')...\n   * ...\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  commandsGroup(heading) {\n    if (heading === undefined) return this._defaultCommandGroup ?? '';\n    this._defaultCommandGroup = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for options added to this command.\n   * (This does not override a group set directly on the option using .helpGroup().)\n   *\n   * @example\n   * program\n   *   .optionsGroup('Development Options:')\n   *   .option('-d, --debug', 'output extra debugging')\n   *   .option('-p, --profile', 'output profiling information')\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  optionsGroup(heading) {\n    if (heading === undefined) return this._defaultOptionGroup ?? '';\n    this._defaultOptionGroup = heading;\n    return this;\n  }\n\n  /**\n   * @param {Option} option\n   * @private\n   */\n  _initOptionGroup(option) {\n    if (this._defaultOptionGroup && !option.helpGroupHeading)\n      option.helpGroup(this._defaultOptionGroup);\n  }\n\n  /**\n   * @param {Command} cmd\n   * @private\n   */\n  _initCommandGroup(cmd) {\n    if (this._defaultCommandGroup && !cmd.helpGroup())\n      cmd.helpGroup(this._defaultCommandGroup);\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    const context = this._getOutputContext(contextOptions);\n    helper.prepareContext({\n      error: context.error,\n      helpWidth: context.helpWidth,\n      outputHasColors: context.hasColors,\n    });\n    const text = helper.formatHelp(this, helper);\n    if (context.hasColors) return text;\n    return this._outputConfiguration.stripColor(text);\n  }\n\n  /**\n   * @typedef HelpContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {number} helpWidth\n   * @property {boolean} hasColors\n   * @property {function} write - includes stripColor if needed\n   *\n   * @returns {HelpContext}\n   * @private\n   */\n\n  _getOutputContext(contextOptions) {\n    contextOptions = contextOptions || {};\n    const error = !!contextOptions.error;\n    let baseWrite;\n    let hasColors;\n    let helpWidth;\n    if (error) {\n      baseWrite = (str) => this._outputConfiguration.writeErr(str);\n      hasColors = this._outputConfiguration.getErrHasColors();\n      helpWidth = this._outputConfiguration.getErrHelpWidth();\n    } else {\n      baseWrite = (str) => this._outputConfiguration.writeOut(str);\n      hasColors = this._outputConfiguration.getOutHasColors();\n      helpWidth = this._outputConfiguration.getOutHelpWidth();\n    }\n    const write = (str) => {\n      if (!hasColors) str = this._outputConfiguration.stripColor(str);\n      return baseWrite(str);\n    };\n    return { error, write, hasColors, helpWidth };\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\n    const outputContext = this._getOutputContext(contextOptions);\n    /** @type {HelpTextEventContext} */\n    const eventContext = {\n      error: outputContext.error,\n      write: outputContext.write,\n      command: this,\n    };\n\n    this._getCommandAndAncestors()\n      .reverse()\n      .forEach((command) => command.emit('beforeAllHelp', eventContext));\n    this.emit('beforeHelp', eventContext);\n\n    let helpInformation = this.helpInformation({ error: outputContext.error });\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    outputContext.write(helpInformation);\n\n    if (this._getHelpOption()?.long) {\n      this.emit(this._getHelpOption().long); // deprecated\n    }\n    this.emit('afterHelp', eventContext);\n    this._getCommandAndAncestors().forEach((command) =>\n      command.emit('afterAllHelp', eventContext),\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 enabling/disabling built-in help option.\n    if (typeof flags === 'boolean') {\n      if (flags) {\n        if (this._helpOption === null) this._helpOption = undefined; // reenable\n        if (this._defaultOptionGroup) {\n          // make the option to store the group\n          this._initOptionGroup(this._getHelpOption());\n        }\n      } else {\n        this._helpOption = null; // disable\n      }\n      return this;\n    }\n\n    // Customise flags and description.\n    this._helpOption = this.createOption(\n      flags ?? '-h, --help',\n      description ?? 'display help for command',\n    );\n    // init group unless lazy create\n    if (flags || description) this._initOptionGroup(this._helpOption);\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    this._initOptionGroup(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 = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\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   * // Do a little typing to coordinate emit and listener for the help text events.\n   * @typedef HelpTextEventContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {Command} command\n   * @property {function} write\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\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\n    const helpEvent = `${position}Help`;\n    this.on(helpEvent, (/** @type {HelpTextEventContext} */ 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\n/**\n * @returns {boolean | undefined}\n * @package\n */\nfunction useColor() {\n  // Test for common conventions.\n  // NB: the observed behaviour is in combination with how author adds color! For example:\n  //   - we do not test NODE_DISABLE_COLORS, but util:styletext does\n  //   - we do test NO_COLOR, but Chalk does not\n  //\n  // References:\n  // https://no-color.org\n  // https://bixense.com/clicolors/\n  // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n  // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n  // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n  if (\n    process.env.NO_COLOR ||\n    process.env.FORCE_COLOR === '0' ||\n    process.env.FORCE_COLOR === 'false'\n  )\n    return false;\n  if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n    return true;\n  return undefined;\n}\n\nexports.Command = Command;\nexports.useColor = useColor; // exporting for tests\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","import { existsSync, readFileSync } from 'fs'\nimport { globSync } from 'glob'\nimport path from 'path'\n\nconst toRelativePosix = (file: string): string => {\n  return './' + path.relative(process.cwd(), file).replace(/\\\\/g, '/')\n}\n\nexport const getStreamFilesFromDir = (dir: string): string[] => {\n  if (!existsSync(dir)) {\n    return []\n  }\n  return globSync('**/*.stream.{ts,js}', { absolute: true, cwd: dir }).map(toRelativePosix)\n}\n\nexport const getStepFilesFromDir = (dir: string): string[] => {\n  if (!existsSync(dir)) {\n    return []\n  }\n  return globSync('**/*.step.{ts,js}', { absolute: true, cwd: dir }).map(toRelativePosix)\n}\n\nconst toSnakeCaseConst = (filePath: string) => {\n  // Get file path relative to cwd to not have disk-specific prefixes\n  let relPath = path.relative(process.cwd(), filePath).replace(/\\\\/g, '/')\n  // Remove extension\n  relPath = relPath.replace(/\\.[^/.]+$/, '')\n  // Replace invalid JS identifier chars with underscore\n  let identifier = relPath.replace(/[^a-zA-Z0-9]+/g, '_')\n  // Remove leading/trailing underscores\n  identifier = identifier.replace(/^_+|_+$/g, '')\n  // To lower case\n  return identifier.toLowerCase()\n}\n\nexport const generateIndex = () => {\n  const motiaConfigPath = path.join(process.cwd(), 'motia.config.ts')\n  const hasMotiaConfig = existsSync(motiaConfigPath)\n  const motiaConfigContent = hasMotiaConfig ? readFileSync(motiaConfigPath, 'utf8') : ''\n  const hasAuthenticateStream = motiaConfigContent.includes('export const authenticateStream')\n  const hasOtelConfig = motiaConfigContent.includes('export const otel')\n\n  const streamsFiles = [\n    ...getStreamFilesFromDir(path.join(process.cwd(), 'streams')),\n    ...getStreamFilesFromDir(path.join(process.cwd(), 'src')),\n    ...getStreamFilesFromDir(path.join(process.cwd(), 'steps')),\n  ]\n\n  const streams = streamsFiles.map((file) => {\n    const constName = toSnakeCaseConst(file)\n\n    return {\n      importStatement: `import * as ${constName} from '${file}';`,\n      content: `motia.addStream(${constName}.config, '${file}')`,\n    }\n  })\n\n  const stepFiles = [\n    ...getStepFilesFromDir(path.join(process.cwd(), 'steps')),\n    ...getStepFilesFromDir(path.join(process.cwd(), 'src')),\n  ]\n\n  const steps = stepFiles.map((file) => {\n    const constName = toSnakeCaseConst(file)\n\n    return {\n      importStatement: `import * as ${constName} from '${file}';`,\n      content: `motia.addStep(${constName}.config, '${file}', ${constName}.handler, '${file}');`,\n    }\n  })\n\n  return [\n    \"import { Motia, initIII } from 'motia'\",\n    hasMotiaConfig ? `import * as motiaConfig from './motia.config';` : '// No motia.config.ts found',\n\n    ...streams.map((stream) => stream.importStatement),\n    ...steps.map((step) => step.importStatement),\n    '',\n    hasOtelConfig ? 'initIII(motiaConfig.otel);' : 'initIII();',\n    'const motia = new Motia();',\n    ...streams.map((stream) => stream.content),\n\n    '',\n    ...steps.map((step) => step.content),\n\n    hasMotiaConfig && hasAuthenticateStream\n      ? `motia.authenticateStream = motiaConfig.authenticateStream;`\n      : '// No authenticateStream found in motia.config.ts',\n\n    'motia.initialize();',\n  ].join('\\n')\n}\n","import * as esbuild from 'esbuild'\nimport { generateIndex } from './generate-index'\n\ntype BuildOptions = {\n  external: string[]\n}\n\nexport const build = (options: BuildOptions) => {\n  return esbuild.build({\n    stdin: {\n      contents: generateIndex(),\n      sourcefile: 'index-production.js',\n      resolveDir: process.cwd(),\n      loader: 'js',\n    },\n    external: [...options.external, 'ws'],\n    platform: 'node',\n    target: ['node22'],\n    format: 'esm',\n    bundle: true,\n    minify: true,\n    sourcemap: true,\n    treeShaking: true,\n    outfile: 'dist/index-production.js',\n  })\n}\n","import * as esbuild from 'esbuild'\nimport { generateIndex } from './generate-index'\n\nexport const dev = async () => {\n  return esbuild.build({\n    stdin: {\n      contents: generateIndex(),\n      sourcefile: 'index-dev.js',\n      resolveDir: process.cwd(),\n      loader: 'js',\n    },\n    packages: 'external',\n    platform: 'node',\n    target: ['node22'],\n    format: 'esm',\n    bundle: true,\n    sourcemap: true,\n    outfile: 'dist/index-dev.js',\n  })\n}\n","import { execSync } from 'child_process'\nimport { existsSync } from 'fs'\nimport { mkdir, rm, writeFile } from 'fs/promises'\nimport { join } from 'path'\nimport { createInterface } from 'readline'\n\nconst REPO = 'MotiaDev/motia-iii-example'\nconst BRANCH = 'main'\nconst TEMPLATE_PREFIX = 'nodejs'\n\nconst BLUE = '\\x1b[1;34m'\nconst LIGHT_BLUE = '\\x1b[94m'\nconst R = '\\x1b[0m'\nconst WHITE = '\\x1b[97m'\nconst GRAY = '\\x1b[90m'\nconst YELLOW = '\\x1b[33m'\nconst LIGHT_YELLOW = '\\x1b[93m'\n\nconst BANNER = `\n  ${LIGHT_BLUE}╭───────────────────────────────────────╮${R}\n  ${LIGHT_BLUE}│${R}  ${LIGHT_YELLOW}==${R} Welcome to ${BLUE}Motia${R} powered by iii   ${LIGHT_BLUE}│${R}\n  ${LIGHT_BLUE}╰───────────────────────────────────────╯${R}\n\n${LIGHT_BLUE}░${BLUE}███     ░███               ░██    ░██                ${LIGHT_YELLOW}░${YELLOW}████████████         \n${LIGHT_BLUE}░${BLUE}████   ░████               ░██                      ${LIGHT_YELLOW}░${YELLOW}██         ░██              \n${LIGHT_BLUE}░${BLUE}██░██ ░██░██  ░███████  ░████████ ░██ ░██████      ${LIGHT_YELLOW}░${YELLOW}██  ░██████  ░██    ${GRAY}░${WHITE}██${GRAY}░${WHITE}██${GRAY}░${WHITE}██\n${LIGHT_BLUE}░${BLUE}██ ░████ ░██ ░██    ░██    ░██    ░██      ░██     ${LIGHT_YELLOW}░${YELLOW}██       ░██ ░██    \n${LIGHT_BLUE}░${BLUE}██  ░██  ░██ ░██    ░██    ░██    ░██ ░███████     ${LIGHT_YELLOW}░${YELLOW}██  ░███████ ░██    ${GRAY}░${WHITE}██${GRAY}░${WHITE}██${GRAY}░${WHITE}██\n${LIGHT_BLUE}░${BLUE}██       ░██ ░██    ░██    ░██    ░██░██   ░██     ${LIGHT_YELLOW}░${YELLOW}██ ░██   ░██ ░██    ${GRAY}░${WHITE}██${GRAY}░${WHITE}██${GRAY}░${WHITE}██\n${LIGHT_BLUE}░${BLUE}██       ░██  ░███████      ░████ ░██ ░█████░██    ${LIGHT_YELLOW}░${YELLOW}██  ░█████░████     ${GRAY}░${WHITE}██${GRAY}░${WHITE}██${GRAY}░${WHITE}██\n                                                     ${LIGHT_YELLOW}░${YELLOW}██                          \n                                                      ${LIGHT_YELLOW}░${YELLOW}████████████               \n\n  ${LIGHT_YELLOW}-${LIGHT_BLUE} Create a new Motia project powered by iii${R}\n`\n\nconst SKIP_FILES = new Set(['package-lock.json', 'README.md'])\nconst BOLD = '\\x1b[1m'\nconst RED = '\\x1b[31m'\nconst FETCH_TIMEOUT_MS = 30_000\n\ninterface RepoTreeEntry {\n  path: string\n  type: string\n}\n\nfunction ask(rl: ReturnType<typeof createInterface>, question: string): Promise<string> {\n  return new Promise((resolve) => {\n    rl.question(question, (answer) => resolve(answer.trim()))\n  })\n}\n\nfunction fetchHeaders(): Record<string, string> {\n  const headers: Record<string, string> = { 'User-Agent': 'motia-cli' }\n  const token = process.env.GITHUB_TOKEN\n  if (token) {\n    headers.Authorization = `Bearer ${token}`\n  }\n  return headers\n}\n\nasync function fetchRepoTree(): Promise<RepoTreeEntry[]> {\n  const url = `https://api.github.com/repos/${REPO}/git/trees/${BRANCH}?recursive=1`\n  const res = await fetch(url, {\n    headers: fetchHeaders(),\n    signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),\n  })\n\n  if (res.status === 403 || res.status === 429) {\n    const resetHeader = res.headers.get('x-ratelimit-reset')\n    const resetMsg = resetHeader\n      ? ` Rate limit resets at ${new Date(Number(resetHeader) * 1000).toLocaleTimeString()}.`\n      : ''\n    throw new Error(`GitHub API rate limit exceeded.${resetMsg} Set GITHUB_TOKEN to increase your limit.`)\n  }\n\n  if (!res.ok) {\n    throw new Error(`Failed to fetch template repository: ${res.statusText}`)\n  }\n\n  const data = (await res.json()) as { tree: RepoTreeEntry[] }\n  const prefix = `${TEMPLATE_PREFIX}/`\n  return data.tree.filter(\n    (entry) =>\n      entry.type === 'blob' && entry.path.startsWith(prefix) && !SKIP_FILES.has(entry.path.split('/').pop() ?? ''),\n  )\n}\n\nasync function downloadFile(filePath: string): Promise<string> {\n  const url = `https://raw.githubusercontent.com/${REPO}/${BRANCH}/${filePath}`\n  const res = await fetch(url, {\n    headers: fetchHeaders(),\n    signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),\n  })\n\n  if (!res.ok) {\n    throw new Error(`Failed to download ${filePath}: ${res.statusText}`)\n  }\n\n  return res.text()\n}\n\nexport async function create() {\n  console.log(BANNER)\n\n  const rl = createInterface({ input: process.stdin, output: process.stdout })\n\n  try {\n    let folderName = ''\n    let targetDir = ''\n    let emptyCount = 0\n\n    while (true) {\n      folderName = await ask(rl, '  Project folder name: ')\n\n      if (!folderName) {\n        emptyCount++\n        if (emptyCount >= 2) {\n          console.log('\\n  Project creation cancelled.\\n')\n          return\n        }\n        console.error('\\n  Project folder name is required. Press Enter again to cancel.\\n')\n        continue\n      }\n      emptyCount = 0\n\n      targetDir = join(process.cwd(), folderName)\n\n      if (existsSync(targetDir)) {\n        console.error(`\\n  Directory \"${folderName}\" already exists. Please choose a different name.\\n`)\n        continue\n      }\n\n      break\n    }\n\n    const hasIII = await ask(rl, '  Do you have iii installed? (Y/n): ')\n\n    if (hasIII.toLowerCase() === 'n' || hasIII.toLowerCase() === 'no') {\n      console.log('')\n      console.log('  Motia is now powered by iii for step orchestration.')\n      console.log('  iii is the backend engine that runs your Motia steps,')\n      console.log('  handling APIs, queues, state, and workflows in a single runtime.')\n      console.log('')\n      console.log(`  Install iii → ${BOLD}https://iii.dev/docs${R}`)\n      console.log('')\n\n      const cont = await ask(rl, '  Continue creating project? (Y/n): ')\n      if (cont.toLowerCase() === 'n' || cont.toLowerCase() === 'no') {\n        console.log('\\n  Project creation cancelled.\\n')\n        return\n      }\n    }\n\n    console.log('')\n    console.log(`  Creating project in ./${folderName}`)\n    console.log('')\n\n    let files: RepoTreeEntry[]\n    try {\n      files = await fetchRepoTree()\n    } catch (err: unknown) {\n      const name = err instanceof Error ? err.name : ''\n      const msg = err instanceof Error ? err.message : String(err)\n      if (name === 'TimeoutError' || name === 'AbortError') {\n        console.error(`\\n  ${RED}Connection timed out.${R} Check your internet connection and try again.\\n`)\n      } else if (msg.includes('rate limit')) {\n        console.error(`\\n  ${RED}${msg}${R}\\n`)\n      } else {\n        console.error(`\\n  ${RED}Failed to fetch project template:${R} ${msg}\\n`)\n      }\n      process.exitCode = 1\n      return\n    }\n\n    const prefix = `${TEMPLATE_PREFIX}/`\n    const dirs = new Set<string>()\n    for (const file of files) {\n      const relPath = file.path.startsWith(prefix) ? file.path.slice(prefix.length) : file.path\n      const lastSlash = relPath.lastIndexOf('/')\n      if (lastSlash > 0) dirs.add(relPath.substring(0, lastSlash))\n    }\n\n    await mkdir(targetDir, { recursive: true })\n\n    for (const dir of dirs) {\n      await mkdir(join(targetDir, dir), { recursive: true })\n    }\n\n    try {\n      for (const file of files) {\n        const relPath = file.path.startsWith(prefix) ? file.path.slice(prefix.length) : file.path\n        process.stdout.write(`  ↓ ${relPath}\\n`)\n        let content = await downloadFile(file.path)\n\n        if (relPath === 'package.json') {\n          const pkg = JSON.parse(content)\n          pkg.name = folderName\n          content = JSON.stringify(pkg, null, 2) + '\\n'\n        }\n\n        await writeFile(join(targetDir, relPath), content)\n      }\n    } catch (err: unknown) {\n      const name = err instanceof Error ? err.name : ''\n      const msg = err instanceof Error ? err.message : String(err)\n      if (name === 'TimeoutError' || name === 'AbortError') {\n        console.error(`\\n  ${RED}Download timed out.${R} Check your internet connection and try again.\\n`)\n      } else {\n        console.error(`\\n  ${RED}Failed to download files:${R} ${msg}\\n`)\n      }\n      try {\n        await rm(targetDir, { recursive: true, force: true })\n        console.error(`  Cleaned up partial directory ./${folderName}\\n`)\n      } catch {\n        // cleanup is best-effort; ignore errors\n      }\n      process.exitCode = 1\n      return\n    }\n\n    console.log('')\n    console.log('  Installing dependencies...')\n    console.log('')\n\n    try {\n      execSync('npm install', { cwd: targetDir, stdio: 'inherit' })\n    } catch {\n      console.error(`\\n  ${RED}Failed to install dependencies.${R} Run \"npm install\" manually in ./${folderName}\\n`)\n      process.exitCode = 1\n      return\n    }\n\n    console.log('')\n    console.log('  ✓ Project created successfully!')\n    console.log('')\n    console.log('  Next steps:')\n    console.log(`    cd ${folderName}`)\n    console.log('    iii -c iii-config.yaml')\n    console.log('')\n  } finally {\n    rl.close()\n  }\n}\n","import { Command } from 'commander'\nimport { build } from './build/build'\nimport { dev } from './build/dev'\nimport { create } from './create'\n\nconst program = new Command()\n\nprogram\n  .command('dev')\n  .description('Build the project for development')\n  .action(() => {\n    dev().catch((err) => {\n      console.error(err)\n      process.exitCode = 1\n    })\n  })\n\nprogram\n  .command('build')\n  .description('Build the project for production')\n  .option('-e, --external <external>', 'External dependencies')\n  .action((options) => {\n    const external = options.external ? options.external.split(',') : []\n\n    build({ external }).catch((err) => {\n      console.error(err)\n      process.exitCode = 1\n    })\n  })\n\nprogram\n  .command('create')\n  .description('Create a new Motia project powered by iii')\n  .action(() => {\n    create().catch((err) => {\n      console.error(err)\n      process.exitCode = 1\n    })\n  })\n\nprogram.parse(process.argv)\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7],"mappings":"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"}