uloop-cli 0.60.0 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../node_modules/commander/lib/error.js", "../node_modules/commander/lib/argument.js", "../node_modules/commander/lib/help.js", "../node_modules/commander/lib/option.js", "../node_modules/commander/lib/suggestSimilar.js", "../node_modules/commander/lib/command.js", "../node_modules/commander/index.js", "../node_modules/semver/internal/constants.js", "../node_modules/semver/internal/debug.js", "../node_modules/semver/internal/re.js", "../node_modules/semver/internal/parse-options.js", "../node_modules/semver/internal/identifiers.js", "../node_modules/semver/classes/semver.js", "../node_modules/semver/functions/parse.js", "../node_modules/semver/functions/valid.js", "../node_modules/semver/functions/clean.js", "../node_modules/semver/functions/inc.js", "../node_modules/semver/functions/diff.js", "../node_modules/semver/functions/major.js", "../node_modules/semver/functions/minor.js", "../node_modules/semver/functions/patch.js", "../node_modules/semver/functions/prerelease.js", "../node_modules/semver/functions/compare.js", "../node_modules/semver/functions/rcompare.js", "../node_modules/semver/functions/compare-loose.js", "../node_modules/semver/functions/compare-build.js", "../node_modules/semver/functions/sort.js", "../node_modules/semver/functions/rsort.js", "../node_modules/semver/functions/gt.js", "../node_modules/semver/functions/lt.js", "../node_modules/semver/functions/eq.js", "../node_modules/semver/functions/neq.js", "../node_modules/semver/functions/gte.js", "../node_modules/semver/functions/lte.js", "../node_modules/semver/functions/cmp.js", "../node_modules/semver/functions/coerce.js", "../node_modules/semver/internal/lrucache.js", "../node_modules/semver/classes/range.js", "../node_modules/semver/classes/comparator.js", "../node_modules/semver/functions/satisfies.js", "../node_modules/semver/ranges/to-comparators.js", "../node_modules/semver/ranges/max-satisfying.js", "../node_modules/semver/ranges/min-satisfying.js", "../node_modules/semver/ranges/min-version.js", "../node_modules/semver/ranges/valid.js", "../node_modules/semver/ranges/outside.js", "../node_modules/semver/ranges/gtr.js", "../node_modules/semver/ranges/ltr.js", "../node_modules/semver/ranges/intersects.js", "../node_modules/semver/ranges/simplify.js", "../node_modules/semver/ranges/subset.js", "../node_modules/semver/index.js", "../src/cli.ts", "../node_modules/commander/esm.mjs", "../src/execute-tool.ts", "../src/direct-unity-client.ts", "../src/simple-framer.ts", "../src/port-resolver.ts", "../src/project-root.ts", "../src/tool-cache.ts", "../src/default-tools.json", "../src/version.ts", "../src/spinner.ts", "../src/arg-parser.ts", "../src/skills/skills-manager.ts", "../src/skills/deprecated-skills.ts", "../src/skills/target-config.ts", "../src/skills/skills-command.ts", "../src/commands/launch.ts", "../node_modules/launch-unity/dist/lib.js", "../node_modules/launch-unity/dist/unityHub.js", "../src/commands/focus-window.ts"],
4
- "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\u2013Levenshtein_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", "'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "/**\n * CLI entry point for uloop command.\n * Provides direct Unity communication without MCP server.\n * Commands are dynamically registered from tools.json cache.\n */\n\n// CLI tools output to console by design, file paths are constructed from trusted sources (project root detection),\n// and object keys come from tool definitions which are internal trusted data\n/* eslint-disable no-console, security/detect-non-literal-fs-filename, security/detect-object-injection */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';\nimport { join, basename, dirname } from 'path';\nimport { homedir } from 'os';\nimport { spawn } from 'child_process';\nimport { Command } from 'commander';\nimport {\n executeToolCommand,\n listAvailableTools,\n GlobalOptions,\n syncTools,\n isVersionOlder,\n} from './execute-tool.js';\nimport {\n loadToolsCache,\n hasCacheFile,\n ToolDefinition,\n ToolProperty,\n getCachedServerVersion,\n} from './tool-cache.js';\nimport { pascalToKebabCase } from './arg-parser.js';\nimport { registerSkillsCommand } from './skills/skills-command.js';\nimport { registerLaunchCommand } from './commands/launch.js';\nimport { registerFocusWindowCommand } from './commands/focus-window.js';\nimport { VERSION } from './version.js';\nimport { findUnityProjectRoot } from './project-root.js';\n\ninterface CliOptions extends GlobalOptions {\n [key: string]: unknown;\n}\n\nconst BUILTIN_COMMANDS = [\n 'list',\n 'sync',\n 'completion',\n 'update',\n 'fix',\n 'skills',\n 'launch',\n 'focus-window',\n] as const;\n\nconst program = new Command();\n\nprogram\n .name('uloop')\n .description('Unity MCP CLI - Direct communication with Unity Editor')\n .version(VERSION, '-v, --version', 'Output the version number');\n\n// --list-commands: Output command names for shell completion\nprogram.option('--list-commands', 'List all command names (for shell completion)');\n\n// --list-options <cmd>: Output options for a specific command (for shell completion)\nprogram.option('--list-options <cmd>', 'List options for a command (for shell completion)');\n\n// Built-in commands (not from tools.json)\nprogram\n .command('list')\n .description('List all available tools from Unity')\n .option('-p, --port <port>', 'Unity TCP port')\n .action(async (options: CliOptions) => {\n await runWithErrorHandling(() => listAvailableTools(options));\n });\n\nprogram\n .command('sync')\n .description('Sync tool definitions from Unity to local cache')\n .option('-p, --port <port>', 'Unity TCP port')\n .action(async (options: CliOptions) => {\n await runWithErrorHandling(() => syncTools(options));\n });\n\nprogram\n .command('completion')\n .description('Setup shell completion')\n .option('--install', 'Install completion to shell config file')\n .option('--shell <type>', 'Shell type: bash, zsh, or powershell')\n .action((options: { install?: boolean; shell?: string }) => {\n handleCompletion(options.install ?? false, options.shell);\n });\n\nprogram\n .command('update')\n .description('Update uloop CLI to the latest version')\n .action(() => {\n updateCli();\n });\n\nprogram\n .command('fix')\n .description('Clean up stale lock files that may prevent CLI from connecting')\n .action(() => {\n cleanupLockFiles();\n });\n\n// Register skills subcommand\nregisterSkillsCommand(program);\n\n// Register launch subcommand\nregisterLaunchCommand(program);\n\n// Register focus-window subcommand\nregisterFocusWindowCommand(program);\n\n/**\n * Register a tool as a CLI command dynamically.\n */\nfunction registerToolCommand(tool: ToolDefinition): void {\n // Skip if already registered as a built-in command\n if (BUILTIN_COMMANDS.includes(tool.name as (typeof BUILTIN_COMMANDS)[number])) {\n return;\n }\n const cmd = program.command(tool.name).description(tool.description);\n\n // Add options from inputSchema.properties\n const properties = tool.inputSchema.properties;\n for (const [propName, propInfo] of Object.entries(properties)) {\n const optionStr = generateOptionString(propName, propInfo);\n const description = buildOptionDescription(propInfo);\n const defaultValue = propInfo.default;\n if (defaultValue !== undefined && defaultValue !== null) {\n // Convert default values to strings for consistent CLI handling\n const defaultStr = convertDefaultToString(defaultValue);\n cmd.option(optionStr, description, defaultStr);\n } else {\n cmd.option(optionStr, description);\n }\n }\n\n // Add global options\n cmd.option('-p, --port <port>', 'Unity TCP port');\n\n cmd.action(async (options: CliOptions) => {\n const params = buildParams(options, properties);\n\n // Unescape \\! to ! for execute-dynamic-code\n // Some shells (e.g., Claude Code's bash wrapper) escape ! as \\!\n if (tool.name === 'execute-dynamic-code' && params['Code']) {\n const code = params['Code'] as string;\n params['Code'] = code.replace(/\\\\!/g, '!');\n }\n\n await runWithErrorHandling(() =>\n executeToolCommand(tool.name, params, extractGlobalOptions(options)),\n );\n });\n}\n\n/**\n * Convert default value to string for CLI option registration.\n */\nfunction convertDefaultToString(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'boolean' || typeof value === 'number') {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\n/**\n * Generate commander.js option string from property info.\n * All types use value format (--option <value>) for consistency with MCP.\n */\nfunction generateOptionString(propName: string, propInfo: ToolProperty): string {\n const kebabName = pascalToKebabCase(propName);\n void propInfo; // All types now use value format\n return `--${kebabName} <value>`;\n}\n\n/**\n * Build option description with enum values if present.\n */\nfunction buildOptionDescription(propInfo: ToolProperty): string {\n let desc = propInfo.description || '';\n if (propInfo.enum && propInfo.enum.length > 0) {\n desc += ` (${propInfo.enum.join(', ')})`;\n }\n return desc;\n}\n\n/**\n * Build parameters from CLI options.\n */\nfunction buildParams(\n options: Record<string, unknown>,\n properties: Record<string, ToolProperty>,\n): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n for (const propName of Object.keys(properties)) {\n const camelName = propName.charAt(0).toLowerCase() + propName.slice(1);\n const value = options[camelName];\n\n if (value !== undefined) {\n const propInfo = properties[propName];\n params[propName] = convertValue(value, propInfo);\n }\n }\n\n return params;\n}\n\n/**\n * Convert CLI value to appropriate type based on property info.\n */\nfunction convertValue(value: unknown, propInfo: ToolProperty): unknown {\n const lowerType = propInfo.type.toLowerCase();\n\n if (lowerType === 'boolean' && typeof value === 'string') {\n const lower = value.toLowerCase();\n if (lower === 'true') {\n return true;\n }\n if (lower === 'false') {\n return false;\n }\n throw new Error(`Invalid boolean value: ${value}. Use 'true' or 'false'.`);\n }\n\n if (lowerType === 'array' && typeof value === 'string') {\n // Handle JSON array format (e.g., \"[]\" or \"[\\\"item1\\\",\\\"item2\\\"]\")\n if (value.startsWith('[') && value.endsWith(']')) {\n try {\n const parsed: unknown = JSON.parse(value);\n if (Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Fall through to comma-separated handling\n }\n }\n // Handle comma-separated format (e.g., \"item1,item2\")\n return value.split(',').map((s) => s.trim());\n }\n\n if (lowerType === 'integer' && typeof value === 'string') {\n const parsed = parseInt(value, 10);\n if (isNaN(parsed)) {\n throw new Error(`Invalid integer value: ${value}`);\n }\n return parsed;\n }\n\n if (lowerType === 'number' && typeof value === 'string') {\n const parsed = parseFloat(value);\n if (isNaN(parsed)) {\n throw new Error(`Invalid number value: ${value}`);\n }\n return parsed;\n }\n\n if (lowerType === 'object') {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) {\n throw new Error(`Invalid object value: ${value}. Use JSON object syntax.`);\n }\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // fall through to error below\n }\n throw new Error(`Invalid object value: ${value}. Use JSON object syntax.`);\n }\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return value;\n }\n throw new Error(`Invalid object value: ${String(value)}. Use JSON object syntax.`);\n }\n\n return value;\n}\n\nfunction extractGlobalOptions(options: Record<string, unknown>): GlobalOptions {\n return {\n port: options['port'] as string | undefined,\n };\n}\n\nfunction isConnectionError(message: string): boolean {\n return message.includes('ECONNREFUSED') || message.includes('EADDRNOTAVAIL');\n}\n\nfunction printConnectionError(): void {\n console.error('\\x1b[31mError: Cannot connect to Unity.\\x1b[0m');\n console.error('Make sure Unity Editor is open and uLoopMCP server is running.');\n console.error('');\n console.error('[For AI] Please report the above to the user.');\n}\n\n/**\n * Print version mismatch diagnostic information when errors occur.\n * Only prints if versions are mismatched.\n */\nfunction printVersionMismatchDiagnostic(): void {\n const serverVersion = getCachedServerVersion();\n if (serverVersion === undefined) {\n return;\n }\n\n if (serverVersion === VERSION) {\n return;\n }\n\n const isCliOlder = isVersionOlder(VERSION, serverVersion);\n const action = isCliOlder ? 'Update' : 'Downgrade';\n const updateCommand = `npm install -g uloop-cli@${serverVersion}`;\n\n console.error('');\n console.error('\\x1b[33m\u2501\u2501\u2501 Version Mismatch Diagnostic \u2501\u2501\u2501\\x1b[0m');\n console.error('');\n console.error(` CLI version: ${VERSION}`);\n console.error(` Unity package: ${serverVersion}`);\n console.error(' Version mismatch may cause communication errors.');\n console.error('');\n console.error(` To fix: ${action} CLI to match Unity package version`);\n console.error(` ${updateCommand}`);\n console.error('');\n console.error('[For AI] Please ask the user if they would like to run this command.');\n console.error('\\x1b[33m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\\x1b[0m');\n}\n\nasync function runWithErrorHandling(fn: () => Promise<void>): Promise<void> {\n try {\n await fn();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n // Unity busy states have clear causes - no version diagnostic needed\n if (message === 'UNITY_COMPILING') {\n console.error('\\x1b[33m\u23F3 Unity is compiling scripts.\\x1b[0m');\n console.error('Please wait for compilation to finish and try again.');\n console.error('');\n console.error('If the issue persists, run: uloop fix');\n process.exit(1);\n }\n\n if (message === 'UNITY_DOMAIN_RELOAD') {\n console.error('\\x1b[33m\u23F3 Unity is reloading (Domain Reload in progress).\\x1b[0m');\n console.error('Please wait a moment and try again.');\n console.error('');\n console.error('If the issue persists, run: uloop fix');\n process.exit(1);\n }\n\n if (message === 'UNITY_SERVER_STARTING') {\n console.error('\\x1b[33m\u23F3 Unity server is starting.\\x1b[0m');\n console.error('Please wait a moment and try again.');\n console.error('');\n console.error('If the issue persists, run: uloop fix');\n process.exit(1);\n }\n\n // Errors that may be caused by version mismatch - show diagnostic\n if (message === 'UNITY_NO_RESPONSE') {\n console.error('\\x1b[33m\u23F3 Unity is busy (no response received).\\x1b[0m');\n console.error('Unity may be compiling, reloading, or starting. Please wait and try again.');\n printVersionMismatchDiagnostic();\n process.exit(1);\n }\n\n if (isConnectionError(message)) {\n printConnectionError();\n printVersionMismatchDiagnostic();\n process.exit(1);\n }\n\n // Timeout errors\n if (message.includes('Request timed out')) {\n console.error(`\\x1b[31mError: ${message}\\x1b[0m`);\n printVersionMismatchDiagnostic();\n process.exit(1);\n }\n\n console.error(`\\x1b[31mError: ${message}\\x1b[0m`);\n process.exit(1);\n }\n}\n\n/**\n * Detect shell type from environment.\n */\nfunction detectShell(): 'bash' | 'zsh' | 'powershell' | null {\n // Check $SHELL first (works for bash/zsh including MINGW64)\n const shell = process.env['SHELL'] || '';\n const shellName = basename(shell).replace(/\\.exe$/i, ''); // Remove .exe for Windows\n if (shellName === 'zsh') {\n return 'zsh';\n }\n if (shellName === 'bash') {\n return 'bash';\n }\n\n // Check for PowerShell (only if $SHELL is not set)\n if (process.env['PSModulePath']) {\n return 'powershell';\n }\n\n return null;\n}\n\n/**\n * Get shell config file path.\n */\nfunction getShellConfigPath(shell: 'bash' | 'zsh' | 'powershell'): string {\n const home = homedir();\n if (shell === 'zsh') {\n return join(home, '.zshrc');\n }\n if (shell === 'powershell') {\n // PowerShell profile path\n return join(home, 'Documents', 'WindowsPowerShell', 'Microsoft.PowerShell_profile.ps1');\n }\n return join(home, '.bashrc');\n}\n\n/**\n * Get completion script for a shell.\n */\nfunction getCompletionScript(shell: 'bash' | 'zsh' | 'powershell'): string {\n if (shell === 'bash') {\n return `# uloop bash completion\n_uloop_completions() {\n local cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n local cmd=\"\\${COMP_WORDS[1]}\"\n\n if [[ \\${COMP_CWORD} -eq 1 ]]; then\n COMPREPLY=($(compgen -W \"$(uloop --list-commands 2>/dev/null)\" -- \"\\${cur}\"))\n elif [[ \\${COMP_CWORD} -ge 2 ]]; then\n COMPREPLY=($(compgen -W \"$(uloop --list-options \\${cmd} 2>/dev/null)\" -- \"\\${cur}\"))\n fi\n}\ncomplete -F _uloop_completions uloop`;\n }\n\n if (shell === 'powershell') {\n return `# uloop PowerShell completion\nRegister-ArgumentCompleter -Native -CommandName uloop -ScriptBlock {\n param($wordToComplete, $commandAst, $cursorPosition)\n $commands = $commandAst.CommandElements\n if ($commands.Count -eq 1) {\n uloop --list-commands 2>$null | Where-Object { $_ -like \"$wordToComplete*\" } | ForEach-Object {\n [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)\n }\n } elseif ($commands.Count -ge 2) {\n $cmd = $commands[1].ToString()\n uloop --list-options $cmd 2>$null | Where-Object { $_ -like \"$wordToComplete*\" } | ForEach-Object {\n [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)\n }\n }\n}`;\n }\n\n /* eslint-disable no-useless-escape */\n return `# uloop zsh completion\n_uloop() {\n local -a commands\n local -a options\n local -a used_options\n\n if (( CURRENT == 2 )); then\n commands=(\\${(f)\"$(uloop --list-commands 2>/dev/null)\"})\n _describe 'command' commands\n elif (( CURRENT >= 3 )); then\n options=(\\${(f)\"$(uloop --list-options \\${words[2]} 2>/dev/null)\"})\n used_options=(\\${words:2})\n for opt in \\${used_options}; do\n options=(\\${options:#\\$opt})\n done\n _describe 'option' options\n fi\n}\ncompdef _uloop uloop`;\n /* eslint-enable no-useless-escape */\n}\n\n/**\n * Get the currently installed version of uloop-cli from npm.\n */\nfunction getInstalledVersion(callback: (version: string | null) => void): void {\n const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';\n const child = spawn(npmCommand, ['list', '-g', 'uloop-cli', '--json'], {\n shell: true,\n });\n\n let stdout = '';\n child.stdout.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.on('close', (code) => {\n if (code !== 0) {\n callback(null);\n return;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(stdout);\n } catch {\n callback(null);\n return;\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n callback(null);\n return;\n }\n\n const deps = (parsed as Record<string, unknown>)['dependencies'];\n if (typeof deps !== 'object' || deps === null) {\n callback(null);\n return;\n }\n\n const uloopCli = (deps as Record<string, unknown>)['uloop-cli'];\n if (typeof uloopCli !== 'object' || uloopCli === null) {\n callback(null);\n return;\n }\n\n const version = (uloopCli as Record<string, unknown>)['version'];\n if (typeof version !== 'string') {\n callback(null);\n return;\n }\n\n callback(version);\n });\n\n child.on('error', () => {\n callback(null);\n });\n}\n\n/**\n * Update uloop CLI to the latest version using npm.\n */\nfunction updateCli(): void {\n const previousVersion = VERSION;\n console.log('Updating uloop-cli to the latest version...');\n\n const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';\n const child = spawn(npmCommand, ['install', '-g', 'uloop-cli@latest'], {\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n getInstalledVersion((newVersion) => {\n if (newVersion && newVersion !== previousVersion) {\n console.log(`\\n\u2705 uloop-cli updated: v${previousVersion} -> v${newVersion}`);\n } else {\n console.log(`\\n\u2705 Already up to date (v${previousVersion})`);\n }\n });\n } else {\n console.error(`\\n\u274C Update failed with exit code ${code}`);\n process.exit(1);\n }\n });\n\n child.on('error', (err) => {\n console.error(`\u274C Failed to run npm: ${err.message}`);\n process.exit(1);\n });\n}\n\nconst LOCK_FILES = ['compiling.lock', 'domainreload.lock', 'serverstarting.lock'] as const;\n\n/**\n * Clean up stale lock files that may prevent CLI from connecting to Unity.\n */\nfunction cleanupLockFiles(): void {\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n console.error('Could not find Unity project root.');\n process.exit(1);\n }\n\n const tempDir = join(projectRoot, 'Temp');\n let cleaned = 0;\n\n for (const lockFile of LOCK_FILES) {\n const lockPath = join(tempDir, lockFile);\n if (existsSync(lockPath)) {\n unlinkSync(lockPath);\n console.log(`Removed: ${lockFile}`);\n cleaned++;\n }\n }\n\n if (cleaned === 0) {\n console.log('No lock files found.');\n } else {\n console.log(`\\n\u2705 Cleaned up ${cleaned} lock file(s).`);\n }\n}\n\n/**\n * Handle completion command.\n */\nfunction handleCompletion(install: boolean, shellOverride?: string): void {\n let shell: 'bash' | 'zsh' | 'powershell' | null;\n\n if (shellOverride) {\n const normalized = shellOverride.toLowerCase();\n if (normalized === 'bash' || normalized === 'zsh' || normalized === 'powershell') {\n shell = normalized;\n } else {\n console.error(`Unknown shell: ${shellOverride}. Supported: bash, zsh, powershell`);\n process.exit(1);\n }\n } else {\n shell = detectShell();\n }\n\n if (!shell) {\n console.error('Could not detect shell. Use --shell option: bash, zsh, or powershell');\n process.exit(1);\n }\n\n const script = getCompletionScript(shell);\n\n if (!install) {\n console.log(script);\n return;\n }\n\n // Install to shell config file\n const configPath = getShellConfigPath(shell);\n\n // PowerShell profile directory may not exist on fresh installations\n const configDir = dirname(configPath);\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true });\n }\n\n // Remove existing uloop completion and add new one\n let content = '';\n if (existsSync(configPath)) {\n content = readFileSync(configPath, 'utf-8');\n // Remove existing uloop completion block using markers\n content = content.replace(\n /\\n?# >>> uloop completion >>>[\\s\\S]*?# <<< uloop completion <<<\\n?/g,\n '',\n );\n }\n\n // Add new completion with markers\n const startMarker = '# >>> uloop completion >>>';\n const endMarker = '# <<< uloop completion <<<';\n\n if (shell === 'powershell') {\n const lineToAdd = `\\n${startMarker}\\n${script}\\n${endMarker}\\n`;\n writeFileSync(configPath, content + lineToAdd, 'utf-8');\n } else {\n // Include --shell option to ensure correct shell detection\n const evalLine = `eval \"$(uloop completion --shell ${shell})\"`;\n const lineToAdd = `\\n${startMarker}\\n${evalLine}\\n${endMarker}\\n`;\n writeFileSync(configPath, content + lineToAdd, 'utf-8');\n }\n\n console.log(`Completion installed to ${configPath}`);\n if (shell === 'powershell') {\n console.log('Restart PowerShell to enable completion.');\n } else {\n console.log(`Run 'source ${configPath}' or restart your shell to enable completion.`);\n }\n}\n\n/**\n * Handle --list-commands and --list-options before parsing.\n */\nfunction handleCompletionOptions(): boolean {\n const args = process.argv.slice(2);\n\n if (args.includes('--list-commands')) {\n const tools = loadToolsCache();\n const allCommands = [...BUILTIN_COMMANDS, ...tools.tools.map((t) => t.name)];\n console.log(allCommands.join('\\n'));\n return true;\n }\n\n const listOptionsIdx = args.indexOf('--list-options');\n if (listOptionsIdx !== -1 && args[listOptionsIdx + 1]) {\n const cmdName = args[listOptionsIdx + 1];\n listOptionsForCommand(cmdName);\n return true;\n }\n\n return false;\n}\n\n/**\n * List options for a specific command.\n */\nfunction listOptionsForCommand(cmdName: string): void {\n // Built-in commands have no tool-specific options\n if (BUILTIN_COMMANDS.includes(cmdName as (typeof BUILTIN_COMMANDS)[number])) {\n return;\n }\n\n // Tool commands - only output tool-specific options\n const tools = loadToolsCache();\n const tool = tools.tools.find((t) => t.name === cmdName);\n if (!tool) {\n return;\n }\n\n const options: string[] = [];\n for (const propName of Object.keys(tool.inputSchema.properties)) {\n const kebabName = pascalToKebabCase(propName);\n options.push(`--${kebabName}`);\n }\n\n console.log(options.join('\\n'));\n}\n\n/**\n * Check if a command exists in the current program.\n */\nfunction commandExists(cmdName: string): boolean {\n if (BUILTIN_COMMANDS.includes(cmdName as (typeof BUILTIN_COMMANDS)[number])) {\n return true;\n }\n const tools = loadToolsCache();\n return tools.tools.some((t) => t.name === cmdName);\n}\n\n/**\n * Main entry point with auto-sync for unknown commands.\n */\nasync function main(): Promise<void> {\n if (handleCompletionOptions()) {\n return;\n }\n\n // Check if cache version is outdated and auto-sync if needed\n const cachedVersion = loadToolsCache().version;\n if (hasCacheFile() && cachedVersion !== VERSION) {\n console.log(\n `\\x1b[33mCache outdated (${cachedVersion} \u2192 ${VERSION}). Syncing tools from Unity...\\x1b[0m`,\n );\n try {\n await syncTools({});\n console.log('\\x1b[32m\u2713 Tools synced successfully.\\x1b[0m\\n');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (isConnectionError(message)) {\n console.error('\\x1b[33mWarning: Failed to sync tools. Using cached definitions.\\x1b[0m');\n console.error(\"\\x1b[33mRun 'uloop sync' manually when Unity is available.\\x1b[0m\\n\");\n } else {\n console.error('\\x1b[33mWarning: Failed to sync tools. Using cached definitions.\\x1b[0m');\n console.error(`\\x1b[33mError: ${message}\\x1b[0m`);\n console.error(\"\\x1b[33mRun 'uloop sync' manually when Unity is available.\\x1b[0m\\n\");\n }\n }\n }\n\n // Register tool commands from cache (after potential auto-sync)\n const toolsCache = loadToolsCache();\n for (const tool of toolsCache.tools) {\n registerToolCommand(tool);\n }\n\n const args = process.argv.slice(2);\n const cmdName = args.find((arg) => !arg.startsWith('-'));\n\n if (cmdName && !commandExists(cmdName)) {\n console.log(`\\x1b[33mUnknown command '${cmdName}'. Syncing tools from Unity...\\x1b[0m`);\n try {\n await syncTools({});\n const newCache = loadToolsCache();\n const tool = newCache.tools.find((t) => t.name === cmdName);\n if (tool) {\n registerToolCommand(tool);\n console.log(`\\x1b[32m\u2713 Found '${cmdName}' after sync.\\x1b[0m\\n`);\n } else {\n console.error(`\\x1b[31mError: Command '${cmdName}' not found even after sync.\\x1b[0m`);\n process.exit(1);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (isConnectionError(message)) {\n printConnectionError();\n } else {\n console.error(`\\x1b[31mError: Failed to sync tools: ${message}\\x1b[0m`);\n }\n process.exit(1);\n }\n }\n\n program.parse();\n}\n\nvoid main();\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", "/**\n * Tool execution logic for CLI.\n * Handles dynamic tool execution by connecting to Unity and sending requests.\n */\n\n// CLI tools output to console by design, object keys come from Unity tool responses which are trusted,\n// and lock file paths are constructed from trusted project root detection\n/* eslint-disable no-console, security/detect-object-injection, security/detect-non-literal-fs-filename */\n\nimport * as readline from 'readline';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport * as semver from 'semver';\nimport { DirectUnityClient } from './direct-unity-client.js';\nimport { resolveUnityPort } from './port-resolver.js';\nimport { saveToolsCache, getCacheFilePath, ToolsCache, ToolDefinition } from './tool-cache.js';\nimport { VERSION } from './version.js';\nimport { createSpinner } from './spinner.js';\nimport { findUnityProjectRoot } from './project-root.js';\n\n/**\n * Suppress stdin echo during async operation to prevent escape sequences from being displayed.\n * Returns a cleanup function to restore stdin state.\n */\nfunction suppressStdinEcho(): () => void {\n if (!process.stdin.isTTY) {\n return () => {};\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: false,\n });\n\n process.stdin.setRawMode(true);\n process.stdin.resume();\n\n const onData = (data: Buffer): void => {\n // Ctrl+C (0x03) should trigger process exit\n if (data[0] === 0x03) {\n process.exit(130);\n }\n };\n process.stdin.on('data', onData);\n\n return () => {\n process.stdin.off('data', onData);\n process.stdin.setRawMode(false);\n process.stdin.pause();\n rl.close();\n };\n}\n\nexport interface GlobalOptions {\n port?: string;\n}\n\nconst RETRY_DELAY_MS = 500;\nconst MAX_RETRIES = 3;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isRetryableError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message;\n return (\n message.includes('ECONNREFUSED') ||\n message.includes('EADDRNOTAVAIL') ||\n message === 'UNITY_NO_RESPONSE'\n );\n}\n\n/**\n * Compare two semantic versions safely.\n * Returns true if v1 < v2, false otherwise.\n * Falls back to string comparison if versions are invalid.\n */\nexport function isVersionOlder(v1: string, v2: string): boolean {\n const parsed1 = semver.valid(v1);\n const parsed2 = semver.valid(v2);\n\n if (parsed1 && parsed2) {\n return semver.lt(parsed1, parsed2);\n }\n\n return v1 < v2;\n}\n\n/**\n * Print version mismatch warning to stderr.\n * Does not block execution - just warns the user.\n */\nfunction printVersionWarning(cliVersion: string, serverVersion: string): void {\n const isCliOlder = isVersionOlder(cliVersion, serverVersion);\n const updateCommand = isCliOlder\n ? `npm install -g uloop-cli@${serverVersion}`\n : `Update uLoopMCP package to ${cliVersion} via Unity Package Manager`;\n\n console.error('\\x1b[33m\u26A0\uFE0F Version mismatch detected!\\x1b[0m');\n console.error(` uloop-cli version: ${cliVersion}`);\n console.error(` uloop server version: ${serverVersion}`);\n console.error('');\n console.error(' This may cause unexpected behavior or errors.');\n console.error('');\n console.error(` ${isCliOlder ? 'To update CLI:' : 'To update server:'} ${updateCommand}`);\n console.error('');\n}\n\n/**\n * Check server version from response and print warning if mismatched.\n */\nfunction checkServerVersion(result: Record<string, unknown>): void {\n const serverVersion = result['Ver'] as string | undefined;\n if (serverVersion && serverVersion !== VERSION) {\n printVersionWarning(VERSION, serverVersion);\n }\n}\n\n/**\n * Check if Unity is in a busy state (compiling, reloading, or server starting).\n * Throws an error with appropriate message if busy.\n */\nfunction checkUnityBusyState(): void {\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n return;\n }\n\n const compilingLock = join(projectRoot, 'Temp', 'compiling.lock');\n if (existsSync(compilingLock)) {\n throw new Error('UNITY_COMPILING');\n }\n\n const domainReloadLock = join(projectRoot, 'Temp', 'domainreload.lock');\n if (existsSync(domainReloadLock)) {\n throw new Error('UNITY_DOMAIN_RELOAD');\n }\n\n const serverStartingLock = join(projectRoot, 'Temp', 'serverstarting.lock');\n if (existsSync(serverStartingLock)) {\n throw new Error('UNITY_SERVER_STARTING');\n }\n}\n\nexport async function executeToolCommand(\n toolName: string,\n params: Record<string, unknown>,\n globalOptions: GlobalOptions,\n): Promise<void> {\n let portNumber: number | undefined;\n if (globalOptions.port) {\n const parsed = parseInt(globalOptions.port, 10);\n if (isNaN(parsed)) {\n throw new Error(`Invalid port number: ${globalOptions.port}`);\n }\n portNumber = parsed;\n }\n const port = await resolveUnityPort(portNumber);\n\n const restoreStdin = suppressStdinEcho();\n const spinner = createSpinner('Connecting to Unity...');\n\n let lastError: unknown;\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n checkUnityBusyState();\n\n const client = new DirectUnityClient(port);\n try {\n await client.connect();\n\n spinner.update(`Executing ${toolName}...`);\n const result = await client.sendRequest<Record<string, unknown>>(toolName, params);\n\n if (result === undefined || result === null) {\n throw new Error('UNITY_NO_RESPONSE');\n }\n\n // Success - stop spinner and output result\n spinner.stop();\n restoreStdin();\n\n // Check server version and warn if mismatched\n checkServerVersion(result);\n\n console.log(JSON.stringify(result, null, 2));\n return;\n } catch (error) {\n lastError = error;\n client.disconnect();\n\n if (!isRetryableError(error) || attempt >= MAX_RETRIES) {\n break;\n }\n spinner.update('Retrying connection...');\n await sleep(RETRY_DELAY_MS);\n } finally {\n client.disconnect();\n }\n }\n\n spinner.stop();\n restoreStdin();\n throw lastError;\n}\n\nexport async function listAvailableTools(globalOptions: GlobalOptions): Promise<void> {\n let portNumber: number | undefined;\n if (globalOptions.port) {\n const parsed = parseInt(globalOptions.port, 10);\n if (isNaN(parsed)) {\n throw new Error(`Invalid port number: ${globalOptions.port}`);\n }\n portNumber = parsed;\n }\n const port = await resolveUnityPort(portNumber);\n\n const restoreStdin = suppressStdinEcho();\n const spinner = createSpinner('Connecting to Unity...');\n\n let lastError: unknown;\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n checkUnityBusyState();\n\n const client = new DirectUnityClient(port);\n try {\n await client.connect();\n\n spinner.update('Fetching tool list...');\n const result = await client.sendRequest<{\n Tools: Array<{ name: string; description: string }>;\n }>('get-tool-details', { IncludeDevelopmentOnly: false });\n\n if (!result.Tools || !Array.isArray(result.Tools)) {\n throw new Error('Unexpected response from Unity: missing Tools array');\n }\n\n // Success - stop spinner and output result\n spinner.stop();\n restoreStdin();\n for (const tool of result.Tools) {\n console.log(` - ${tool.name}`);\n }\n return;\n } catch (error) {\n lastError = error;\n client.disconnect();\n\n if (!isRetryableError(error) || attempt >= MAX_RETRIES) {\n break;\n }\n spinner.update('Retrying connection...');\n await sleep(RETRY_DELAY_MS);\n } finally {\n client.disconnect();\n }\n }\n\n spinner.stop();\n restoreStdin();\n throw lastError;\n}\n\ninterface UnityToolInfo {\n name: string;\n description: string;\n parameterSchema: {\n Properties: Record<string, UnityPropertyInfo>;\n Required?: string[];\n };\n}\n\ninterface UnityPropertyInfo {\n Type: string;\n Description?: string;\n DefaultValue?: unknown;\n Enum?: string[] | null;\n}\n\nfunction convertProperties(\n unityProps: Record<string, UnityPropertyInfo>,\n): Record<string, ToolDefinition['inputSchema']['properties'][string]> {\n const result: Record<string, ToolDefinition['inputSchema']['properties'][string]> = {};\n for (const [key, prop] of Object.entries(unityProps)) {\n result[key] = {\n type: prop.Type?.toLowerCase() ?? 'string',\n description: prop.Description,\n default: prop.DefaultValue,\n enum: prop.Enum ?? undefined,\n };\n }\n return result;\n}\n\nexport async function syncTools(globalOptions: GlobalOptions): Promise<void> {\n let portNumber: number | undefined;\n if (globalOptions.port) {\n const parsed = parseInt(globalOptions.port, 10);\n if (isNaN(parsed)) {\n throw new Error(`Invalid port number: ${globalOptions.port}`);\n }\n portNumber = parsed;\n }\n const port = await resolveUnityPort(portNumber);\n\n const restoreStdin = suppressStdinEcho();\n const spinner = createSpinner('Connecting to Unity...');\n\n let lastError: unknown;\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n checkUnityBusyState();\n\n const client = new DirectUnityClient(port);\n try {\n await client.connect();\n\n spinner.update('Syncing tools...');\n const result = await client.sendRequest<{\n Tools: UnityToolInfo[];\n Ver?: string;\n }>('get-tool-details', { IncludeDevelopmentOnly: false });\n\n spinner.stop();\n if (!result.Tools || !Array.isArray(result.Tools)) {\n restoreStdin();\n throw new Error('Unexpected response from Unity: missing Tools array');\n }\n\n const cache: ToolsCache = {\n version: VERSION,\n serverVersion: result.Ver,\n updatedAt: new Date().toISOString(),\n tools: result.Tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: {\n type: 'object',\n properties: convertProperties(tool.parameterSchema.Properties),\n required: tool.parameterSchema.Required,\n },\n })),\n };\n\n saveToolsCache(cache);\n\n console.log(`Synced ${cache.tools.length} tools to ${getCacheFilePath()}`);\n console.log('\\nTools:');\n for (const tool of cache.tools) {\n console.log(` - ${tool.name}`);\n }\n restoreStdin();\n return;\n } catch (error) {\n lastError = error;\n client.disconnect();\n\n if (!isRetryableError(error) || attempt >= MAX_RETRIES) {\n break;\n }\n spinner.update('Retrying connection...');\n await sleep(RETRY_DELAY_MS);\n } finally {\n client.disconnect();\n }\n }\n\n spinner.stop();\n restoreStdin();\n throw lastError;\n}\n", "/**\n * Direct Unity TCP client for CLI usage.\n * Establishes one-shot TCP connections to Unity without going through MCP server.\n */\n\n// Non-null assertions are used after TCP frame parsing where data existence is guaranteed by protocol\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport * as net from 'net';\nimport { createFrame, parseFrameFromBuffer, extractFrameFromBuffer } from './simple-framer.js';\n\nconst JSONRPC_VERSION = '2.0';\nconst DEFAULT_HOST = '127.0.0.1';\nconst NETWORK_TIMEOUT_MS = 180000;\n\nexport interface JsonRpcRequest {\n jsonrpc: string;\n method: string;\n params?: Record<string, unknown>;\n id: number;\n}\n\nexport interface JsonRpcResponse {\n jsonrpc: string;\n result?: unknown;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n id: number;\n}\n\nexport class DirectUnityClient {\n private socket: net.Socket | null = null;\n private requestId: number = 0;\n private receiveBuffer: Buffer = Buffer.alloc(0);\n\n constructor(\n private readonly port: number,\n private readonly host: string = DEFAULT_HOST,\n ) {}\n\n async connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.socket = new net.Socket();\n\n this.socket.on('error', (error: Error) => {\n reject(new Error(`Connection error: ${error.message}`));\n });\n\n this.socket.connect(this.port, this.host, () => {\n resolve();\n });\n });\n }\n\n async sendRequest<T>(method: string, params?: Record<string, unknown>): Promise<T> {\n if (!this.socket) {\n throw new Error('Not connected to Unity');\n }\n\n const request: JsonRpcRequest = {\n jsonrpc: JSONRPC_VERSION,\n method,\n params: params ?? {},\n id: ++this.requestId,\n };\n\n const requestJson = JSON.stringify(request);\n const framedMessage = createFrame(requestJson);\n\n return new Promise((resolve, reject) => {\n const socket = this.socket!;\n const timeoutId = setTimeout(() => {\n reject(\n new Error(\n `Request timed out after ${NETWORK_TIMEOUT_MS}ms. Unity may be frozen or busy. [For AI] Run 'uloop focus-window' to bring Unity to the front, then retry the tool. If the issue persists, report this to the user and ask how to proceed. Do NOT kill Unity processes without user permission.`,\n ),\n );\n }, NETWORK_TIMEOUT_MS);\n\n const onData = (chunk: Buffer): void => {\n this.receiveBuffer = Buffer.concat([this.receiveBuffer, chunk]);\n\n const parseResult = parseFrameFromBuffer(this.receiveBuffer);\n if (!parseResult.isComplete) {\n return;\n }\n\n const extractResult = extractFrameFromBuffer(\n this.receiveBuffer,\n parseResult.contentLength,\n parseResult.headerLength,\n );\n\n if (extractResult.jsonContent === null) {\n return;\n }\n\n clearTimeout(timeoutId);\n socket.off('data', onData);\n\n this.receiveBuffer = extractResult.remainingData;\n\n const response = JSON.parse(extractResult.jsonContent) as JsonRpcResponse;\n\n if (response.error) {\n reject(new Error(`Unity error: ${response.error.message}`));\n return;\n }\n\n resolve(response.result as T);\n };\n\n socket.on('data', onData);\n socket.write(framedMessage);\n });\n }\n\n disconnect(): void {\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n this.receiveBuffer = Buffer.alloc(0);\n }\n\n isConnected(): boolean {\n return this.socket !== null && !this.socket.destroyed;\n }\n}\n", "/**\n * Simple Content-Length framer for CLI usage.\n * Minimal implementation without external dependencies.\n */\n\nconst CONTENT_LENGTH_HEADER = 'Content-Length:';\nconst HEADER_SEPARATOR = '\\r\\n\\r\\n';\n\nexport function createFrame(jsonContent: string): string {\n const contentLength = Buffer.byteLength(jsonContent, 'utf8');\n return `${CONTENT_LENGTH_HEADER} ${contentLength}${HEADER_SEPARATOR}${jsonContent}`;\n}\n\nexport interface FrameParseResult {\n contentLength: number;\n headerLength: number;\n isComplete: boolean;\n}\n\nexport function parseFrameFromBuffer(data: Buffer): FrameParseResult {\n if (!data || data.length === 0) {\n return { contentLength: -1, headerLength: -1, isComplete: false };\n }\n\n const separatorBuffer = Buffer.from(HEADER_SEPARATOR, 'utf8');\n const separatorIndex = data.indexOf(separatorBuffer);\n\n if (separatorIndex === -1) {\n return { contentLength: -1, headerLength: -1, isComplete: false };\n }\n\n const headerSection = data.subarray(0, separatorIndex).toString('utf8');\n const headerLength = separatorIndex + separatorBuffer.length;\n\n const contentLength = parseContentLength(headerSection);\n if (contentLength === -1) {\n return { contentLength: -1, headerLength: -1, isComplete: false };\n }\n\n const expectedTotalLength = headerLength + contentLength;\n const isComplete = data.length >= expectedTotalLength;\n\n return { contentLength, headerLength, isComplete };\n}\n\nexport interface FrameExtractionResult {\n jsonContent: string | null;\n remainingData: Buffer;\n}\n\nexport function extractFrameFromBuffer(\n data: Buffer,\n contentLength: number,\n headerLength: number,\n): FrameExtractionResult {\n if (!data || data.length === 0 || contentLength < 0 || headerLength < 0) {\n return { jsonContent: null, remainingData: data || Buffer.alloc(0) };\n }\n\n const expectedTotalLength = headerLength + contentLength;\n\n if (data.length < expectedTotalLength) {\n return { jsonContent: null, remainingData: data };\n }\n\n const jsonContent = data.subarray(headerLength, headerLength + contentLength).toString('utf8');\n const remainingData = data.subarray(expectedTotalLength);\n\n return { jsonContent, remainingData };\n}\n\nfunction parseContentLength(headerSection: string): number {\n const lines = headerSection.split(/\\r?\\n/);\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n const lowerLine = trimmedLine.toLowerCase();\n\n if (lowerLine.startsWith('content-length:')) {\n const colonIndex = trimmedLine.indexOf(':');\n if (colonIndex === -1 || colonIndex >= trimmedLine.length - 1) {\n continue;\n }\n\n const valueString = trimmedLine.substring(colonIndex + 1).trim();\n const parsedValue = parseInt(valueString, 10);\n\n if (isNaN(parsedValue) || parsedValue < 0) {\n return -1;\n }\n\n return parsedValue;\n }\n }\n\n return -1;\n}\n", "/**\n * Port resolution utility for CLI.\n * Resolves Unity server port from various sources.\n */\n\n// File paths are constructed from Unity project root detection, not from user input\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { findUnityProjectRoot } from './project-root.js';\n\nconst DEFAULT_PORT = 8700;\n\ninterface UnityMcpSettings {\n serverPort?: number;\n customPort?: number;\n}\n\nexport async function resolveUnityPort(explicitPort?: number): Promise<number> {\n if (explicitPort !== undefined) {\n return explicitPort;\n }\n\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n throw new Error('Unity project not found. Use --port option to specify the port explicitly.');\n }\n\n const settingsPort = await readPortFromSettings(projectRoot);\n if (settingsPort !== null) {\n return settingsPort;\n }\n\n return DEFAULT_PORT;\n}\n\nasync function readPortFromSettings(projectRoot: string): Promise<number | null> {\n const settingsPath = join(projectRoot, 'UserSettings/UnityMcpSettings.json');\n\n if (!existsSync(settingsPath)) {\n return null;\n }\n\n let content: string;\n try {\n content = await readFile(settingsPath, 'utf-8');\n } catch {\n return null;\n }\n\n let settings: UnityMcpSettings;\n try {\n settings = JSON.parse(content) as UnityMcpSettings;\n } catch {\n return null;\n }\n\n if (typeof settings.serverPort === 'number') {\n return settings.serverPort;\n }\n\n if (typeof settings.customPort === 'number') {\n return settings.customPort;\n }\n\n return null;\n}\n", "/**\n * Unity project root detection utility.\n * Searches child directories first (up to 3 levels deep), then parent directories.\n */\n\n// Path traversal is intentional for finding Unity project root\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, readdirSync, Dirent } from 'fs';\nimport { join, dirname } from 'path';\n\nconst CHILD_SEARCH_MAX_DEPTH = 3;\n\nconst EXCLUDED_DIRS = new Set([\n 'node_modules',\n '.git',\n 'Temp',\n 'obj',\n 'Build',\n 'Builds',\n 'Logs',\n 'Library',\n]);\n\nfunction isUnityProject(dirPath: string): boolean {\n const hasAssets = existsSync(join(dirPath, 'Assets'));\n const hasProjectSettings = existsSync(join(dirPath, 'ProjectSettings'));\n return hasAssets && hasProjectSettings;\n}\n\nfunction hasUloopInstalled(dirPath: string): boolean {\n return existsSync(join(dirPath, 'UserSettings/UnityMcpSettings.json'));\n}\n\nfunction isUnityProjectWithUloop(dirPath: string): boolean {\n return isUnityProject(dirPath) && hasUloopInstalled(dirPath);\n}\n\nfunction findUnityProjectsInChildren(startPath: string, maxDepth: number): string[] {\n const projects: string[] = [];\n\n function scan(currentPath: string, depth: number): void {\n if (depth > maxDepth) {\n return;\n }\n\n if (!existsSync(currentPath)) {\n return;\n }\n\n if (isUnityProjectWithUloop(currentPath)) {\n projects.push(currentPath);\n return;\n }\n\n let entries: Dirent[];\n try {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- ts-jest requires explicit Dirent[] type due to Node.js 22+ generic Dirent<T> changes\n entries = readdirSync(currentPath, { withFileTypes: true }) as Dirent[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n if (EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n\n const fullPath = join(currentPath, entry.name);\n scan(fullPath, depth + 1);\n }\n }\n\n scan(startPath, 0);\n return projects.sort();\n}\n\nfunction findUnityProjectInParents(startPath: string): string | null {\n let currentPath = startPath;\n\n while (true) {\n if (isUnityProjectWithUloop(currentPath)) {\n return currentPath;\n }\n\n const isGitRoot = existsSync(join(currentPath, '.git'));\n if (isGitRoot) {\n return null;\n }\n\n const parentPath = dirname(currentPath);\n if (parentPath === currentPath) {\n return null;\n }\n currentPath = parentPath;\n }\n}\n\n/**\n * Find Unity project root by searching child directories first, then parent directories.\n * A Unity project is identified by having both Assets/ and ProjectSettings/ directories.\n *\n * Search order:\n * 1. Child directories (up to 3 levels deep)\n * 2. Parent directories (up to root)\n *\n * If multiple Unity projects are found in child search, a warning is printed\n * and the first one (alphabetically) is used.\n *\n * Returns null if no Unity project is found.\n */\nexport function findUnityProjectRoot(startPath: string = process.cwd()): string | null {\n const childProjects = findUnityProjectsInChildren(startPath, CHILD_SEARCH_MAX_DEPTH);\n\n if (childProjects.length > 0) {\n if (childProjects.length > 1) {\n /* eslint-disable no-console -- CLI user-facing warning output */\n console.error('\\x1b[33mWarning: Multiple Unity projects found in child directories:\\x1b[0m');\n for (const project of childProjects) {\n console.error(` - ${project}`);\n }\n console.error(`\\x1b[33mUsing: ${childProjects[0]}\\x1b[0m`);\n console.error('');\n /* eslint-enable no-console */\n }\n return childProjects[0];\n }\n\n return findUnityProjectInParents(startPath);\n}\n\nexport interface UnityProjectStatus {\n found: boolean;\n path: string | null;\n hasUloop: boolean;\n}\n\n/**\n * Check Unity project status with detailed information.\n * Returns whether a Unity project exists and whether uLoopMCP is installed.\n */\nexport function getUnityProjectStatus(startPath: string = process.cwd()): UnityProjectStatus {\n const unityProjectWithUloop = findUnityProjectRoot(startPath);\n if (unityProjectWithUloop) {\n return { found: true, path: unityProjectWithUloop, hasUloop: true };\n }\n\n const unityProjectWithoutUloop = findUnityProjectWithoutUloop(startPath);\n if (unityProjectWithoutUloop) {\n return { found: true, path: unityProjectWithoutUloop, hasUloop: false };\n }\n\n return { found: false, path: null, hasUloop: false };\n}\n\nfunction findUnityProjectWithoutUloop(startPath: string): string | null {\n const childProject = findUnityProjectInChildrenWithoutUloop(startPath, CHILD_SEARCH_MAX_DEPTH);\n if (childProject) {\n return childProject;\n }\n return findUnityProjectInParentsWithoutUloop(startPath);\n}\n\nfunction findUnityProjectInChildrenWithoutUloop(\n startPath: string,\n maxDepth: number,\n): string | null {\n function scan(currentPath: string, depth: number): string | null {\n if (depth > maxDepth || !existsSync(currentPath)) {\n return null;\n }\n\n if (isUnityProject(currentPath)) {\n return currentPath;\n }\n\n let entries: Dirent[];\n try {\n entries = readdirSync(currentPath, { withFileTypes: true });\n } catch {\n return null;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory() || EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n const result = scan(join(currentPath, entry.name), depth + 1);\n if (result) {\n return result;\n }\n }\n return null;\n }\n\n return scan(startPath, 0);\n}\n\nfunction findUnityProjectInParentsWithoutUloop(startPath: string): string | null {\n let currentPath = startPath;\n\n while (true) {\n if (isUnityProject(currentPath)) {\n return currentPath;\n }\n\n const isGitRoot = existsSync(join(currentPath, '.git'));\n if (isGitRoot) {\n return null;\n }\n\n const parentPath = dirname(currentPath);\n if (parentPath === currentPath) {\n return null;\n }\n currentPath = parentPath;\n }\n}\n", "/**\n * Tool cache management for CLI.\n * Handles loading/saving tool definitions from .uloop/tools.json cache.\n */\n\n// File paths are constructed from Unity project root, not from untrusted user input\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join } from 'path';\nimport defaultToolsData from './default-tools.json';\nimport { findUnityProjectRoot } from './project-root.js';\n\nexport interface ToolProperty {\n type: string;\n description?: string;\n default?: unknown;\n enum?: string[];\n items?: { type: string };\n}\n\nexport interface ToolInputSchema {\n type: string;\n properties: Record<string, ToolProperty>;\n required?: string[];\n}\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n inputSchema: ToolInputSchema;\n}\n\nexport interface ToolsCache {\n version: string;\n serverVersion?: string;\n updatedAt?: string;\n tools: ToolDefinition[];\n}\n\nconst CACHE_DIR = '.uloop';\nconst CACHE_FILE = 'tools.json';\n\nfunction getCacheDir(): string {\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n return join(process.cwd(), CACHE_DIR);\n }\n return join(projectRoot, CACHE_DIR);\n}\n\nfunction getCachePath(): string {\n return join(getCacheDir(), CACHE_FILE);\n}\n\n/**\n * Load default tools bundled with npm package.\n */\nexport function getDefaultTools(): ToolsCache {\n return defaultToolsData as ToolsCache;\n}\n\n/**\n * Load tools from cache file, falling back to default tools if cache doesn't exist.\n */\nexport function loadToolsCache(): ToolsCache {\n const cachePath = getCachePath();\n\n if (existsSync(cachePath)) {\n try {\n const content = readFileSync(cachePath, 'utf-8');\n return JSON.parse(content) as ToolsCache;\n } catch {\n return getDefaultTools();\n }\n }\n\n return getDefaultTools();\n}\n\n/**\n * Save tools to cache file.\n */\nexport function saveToolsCache(cache: ToolsCache): void {\n const cacheDir = getCacheDir();\n const cachePath = getCachePath();\n\n if (!existsSync(cacheDir)) {\n mkdirSync(cacheDir, { recursive: true });\n }\n\n const content = JSON.stringify(cache, null, 2);\n writeFileSync(cachePath, content, 'utf-8');\n}\n\n/**\n * Check if cache file exists.\n */\nexport function hasCacheFile(): boolean {\n return existsSync(getCachePath());\n}\n\n/**\n * Get the cache file path for display purposes.\n */\nexport function getCacheFilePath(): string {\n return getCachePath();\n}\n\n/**\n * Get the Unity server version from cache file.\n * Returns undefined if cache doesn't exist, is corrupted, or serverVersion is missing.\n */\nexport function getCachedServerVersion(): string | undefined {\n const cachePath = getCachePath();\n\n if (!existsSync(cachePath)) {\n return undefined;\n }\n\n try {\n const content = readFileSync(cachePath, 'utf-8');\n const cache = JSON.parse(content) as Partial<ToolsCache>;\n return typeof cache.serverVersion === 'string' ? cache.serverVersion : undefined;\n } catch {\n return undefined;\n }\n}\n", "{\n \"version\": \"0.60.0\",\n \"tools\": [\n {\n \"name\": \"compile\",\n \"description\": \"Execute Unity project compilation\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"ForceRecompile\": {\n \"type\": \"boolean\",\n \"description\": \"Force full recompilation\"\n }\n }\n }\n },\n {\n \"name\": \"get-logs\",\n \"description\": \"Retrieve logs from Unity Console\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"LogType\": {\n \"type\": \"string\",\n \"description\": \"Log type filter\",\n \"enum\": [\n \"Error\",\n \"Warning\",\n \"Log\",\n \"All\"\n ],\n \"default\": \"All\"\n },\n \"MaxCount\": {\n \"type\": \"integer\",\n \"description\": \"Maximum number of logs to retrieve\",\n \"default\": 100\n },\n \"SearchText\": {\n \"type\": \"string\",\n \"description\": \"Text to search within logs\"\n },\n \"IncludeStackTrace\": {\n \"type\": \"boolean\",\n \"description\": \"Include stack trace in output\",\n \"default\": false\n },\n \"UseRegex\": {\n \"type\": \"boolean\",\n \"description\": \"Use regex for search\"\n },\n \"SearchInStackTrace\": {\n \"type\": \"boolean\",\n \"description\": \"Search within stack trace\"\n }\n }\n }\n },\n {\n \"name\": \"run-tests\",\n \"description\": \"Execute Unity Test Runner\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"TestMode\": {\n \"type\": \"string\",\n \"description\": \"Test mode\",\n \"enum\": [\n \"EditMode\",\n \"PlayMode\"\n ],\n \"default\": \"EditMode\"\n },\n \"FilterType\": {\n \"type\": \"string\",\n \"description\": \"Filter type\",\n \"enum\": [\n \"all\",\n \"exact\",\n \"regex\",\n \"assembly\"\n ],\n \"default\": \"all\"\n },\n \"FilterValue\": {\n \"type\": \"string\",\n \"description\": \"Filter value\"\n }\n }\n }\n },\n {\n \"name\": \"clear-console\",\n \"description\": \"Clear Unity console logs\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"AddConfirmationMessage\": {\n \"type\": \"boolean\",\n \"description\": \"Add confirmation message after clearing\"\n }\n }\n }\n },\n {\n \"name\": \"focus-window\",\n \"description\": \"Bring Unity Editor window to front\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n }\n },\n {\n \"name\": \"get-hierarchy\",\n \"description\": \"Get Unity Hierarchy structure\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"RootPath\": {\n \"type\": \"string\",\n \"description\": \"Root GameObject path\"\n },\n \"MaxDepth\": {\n \"type\": \"integer\",\n \"description\": \"Maximum depth (-1 for unlimited)\",\n \"default\": -1\n },\n \"IncludeComponents\": {\n \"type\": \"boolean\",\n \"description\": \"Include component information\",\n \"default\": true\n },\n \"IncludeInactive\": {\n \"type\": \"boolean\",\n \"description\": \"Include inactive GameObjects\",\n \"default\": true\n },\n \"IncludePaths\": {\n \"type\": \"boolean\",\n \"description\": \"Include path information\"\n },\n \"UseSelection\": {\n \"type\": \"boolean\",\n \"description\": \"Use selected GameObject(s) as root(s). When true, RootPath is ignored.\",\n \"default\": false\n }\n }\n }\n },\n {\n \"name\": \"unity-search\",\n \"description\": \"Search Unity project\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"SearchQuery\": {\n \"type\": \"string\",\n \"description\": \"Search query\"\n },\n \"Providers\": {\n \"type\": \"array\",\n \"description\": \"Search providers\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"MaxResults\": {\n \"type\": \"integer\",\n \"description\": \"Maximum number of results\",\n \"default\": 50\n },\n \"SaveToFile\": {\n \"type\": \"boolean\",\n \"description\": \"Save results to file\"\n }\n }\n }\n },\n {\n \"name\": \"get-menu-items\",\n \"description\": \"Retrieve Unity MenuItems\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"FilterText\": {\n \"type\": \"string\",\n \"description\": \"Filter text\"\n },\n \"FilterType\": {\n \"type\": \"string\",\n \"description\": \"Filter type\",\n \"enum\": [\n \"contains\",\n \"exact\",\n \"startswith\"\n ],\n \"default\": \"contains\"\n },\n \"MaxCount\": {\n \"type\": \"integer\",\n \"description\": \"Maximum number of items\",\n \"default\": 200\n },\n \"IncludeValidation\": {\n \"type\": \"boolean\",\n \"description\": \"Include validation functions\"\n }\n }\n }\n },\n {\n \"name\": \"execute-menu-item\",\n \"description\": \"Execute Unity MenuItem\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"MenuItemPath\": {\n \"type\": \"string\",\n \"description\": \"Menu item path (e.g., \\\"GameObject/Create Empty\\\")\"\n },\n \"UseReflectionFallback\": {\n \"type\": \"boolean\",\n \"description\": \"Use reflection fallback\",\n \"default\": true\n }\n }\n }\n },\n {\n \"name\": \"find-game-objects\",\n \"description\": \"Find GameObjects with search criteria\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"NamePattern\": {\n \"type\": \"string\",\n \"description\": \"Name pattern to search\"\n },\n \"SearchMode\": {\n \"type\": \"string\",\n \"description\": \"Search mode\",\n \"enum\": [\n \"Exact\",\n \"Path\",\n \"Regex\",\n \"Contains\"\n ],\n \"default\": \"Contains\"\n },\n \"RequiredComponents\": {\n \"type\": \"array\",\n \"description\": \"Required components\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"Tag\": {\n \"type\": \"string\",\n \"description\": \"Tag filter\"\n },\n \"Layer\": {\n \"type\": \"string\",\n \"description\": \"Layer filter\"\n },\n \"MaxResults\": {\n \"type\": \"integer\",\n \"description\": \"Maximum number of results\",\n \"default\": 20\n },\n \"IncludeInactive\": {\n \"type\": \"boolean\",\n \"description\": \"Include inactive GameObjects\"\n }\n }\n }\n },\n {\n \"name\": \"capture-window\",\n \"description\": \"Capture Unity EditorWindow and save as PNG\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"WindowName\": {\n \"type\": \"string\",\n \"description\": \"Window name to capture (e.g., 'Game', 'Scene', 'Console', 'Inspector', 'Project', 'Hierarchy')\",\n \"default\": \"Game\"\n },\n \"ResolutionScale\": {\n \"type\": \"number\",\n \"description\": \"Resolution scale (0.1 to 1.0)\",\n \"default\": 1\n },\n \"MatchMode\": {\n \"type\": \"string\",\n \"description\": \"Window name matching mode (all case-insensitive)\",\n \"enum\": [\n \"exact\",\n \"prefix\",\n \"contains\"\n ],\n \"default\": \"exact\"\n }\n }\n }\n },\n {\n \"name\": \"execute-dynamic-code\",\n \"description\": \"Execute C# code in Unity Editor\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"Code\": {\n \"type\": \"string\",\n \"description\": \"C# code to execute\"\n },\n \"CompileOnly\": {\n \"type\": \"boolean\",\n \"description\": \"Compile only without execution\"\n }\n }\n }\n },\n {\n \"name\": \"get-provider-details\",\n \"description\": \"Get Unity Search provider details\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"ProviderId\": {\n \"type\": \"string\",\n \"description\": \"Specific provider ID\"\n },\n \"ActiveOnly\": {\n \"type\": \"boolean\",\n \"description\": \"Only active providers\"\n },\n \"IncludeDescriptions\": {\n \"type\": \"boolean\",\n \"description\": \"Include descriptions\",\n \"default\": true\n },\n \"SortByPriority\": {\n \"type\": \"boolean\",\n \"description\": \"Sort by priority\",\n \"default\": true\n }\n }\n }\n },\n {\n \"name\": \"get-project-info\",\n \"description\": \"Get Unity project information\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n }\n },\n {\n \"name\": \"get-version\",\n \"description\": \"Get uLoopMCP version information\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n }\n },\n {\n \"name\": \"control-play-mode\",\n \"description\": \"Control Unity Editor play mode (play/stop/pause)\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"Action\": {\n \"type\": \"string\",\n \"description\": \"Action to perform: Play - Start play mode, Stop - Stop play mode, Pause - Pause play mode\",\n \"enum\": [\n \"Play\",\n \"Stop\",\n \"Pause\"\n ],\n \"default\": \"Play\"\n }\n }\n }\n }\n ]\n}\n", "/**\n * CLI version\n *\n * This file exists to avoid bundling the entire package.json into the CLI bundle.\n * This version is automatically updated by release-please.\n */\nexport const VERSION = '0.60.0'; // x-release-please-version\n", "/**\n * Terminal spinner for showing loading state during async operations.\n */\n\n// Array index access is safe here (modulo operation keeps it in bounds)\n/* eslint-disable security/detect-object-injection */\n\nconst SPINNER_FRAMES = ['\u280B', '\u2819', '\u2839', '\u2838', '\u283C', '\u2834', '\u2826', '\u2827', '\u2807', '\u280F'] as const;\nconst FRAME_INTERVAL_MS = 80;\n\nexport interface Spinner {\n update(message: string): void;\n stop(): void;\n}\n\n/**\n * Create a terminal spinner that displays a rotating animation with a message.\n * Returns a Spinner object with update() and stop() methods.\n */\nexport function createSpinner(initialMessage: string): Spinner {\n if (!process.stderr.isTTY) {\n return {\n update: (): void => {},\n stop: (): void => {},\n };\n }\n\n let frameIndex = 0;\n let currentMessage = initialMessage;\n\n const render = (): void => {\n const frame = SPINNER_FRAMES[frameIndex];\n process.stderr.write(`\\r\\x1b[K${frame} ${currentMessage}`);\n frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;\n };\n\n render();\n const intervalId = setInterval(render, FRAME_INTERVAL_MS);\n\n return {\n update(message: string): void {\n currentMessage = message;\n },\n stop(): void {\n clearInterval(intervalId);\n process.stderr.write('\\r\\x1b[K');\n },\n };\n}\n", "/**\n * CLI argument parser for tool parameters.\n * Converts CLI options to Unity tool parameters.\n */\n\n// Object keys come from tool schema definitions which are internal trusted data\n/* eslint-disable security/detect-object-injection */\n\nexport interface ToolParameter {\n Type: string;\n Description: string;\n DefaultValue?: unknown;\n Enum?: string[];\n}\n\nexport interface ToolSchema {\n properties: Record<string, ToolParameter>;\n}\n\n/**\n * Converts kebab-case CLI option name to PascalCase parameter name.\n * e.g., \"force-recompile\" -> \"ForceRecompile\"\n */\nexport function kebabToPascalCase(kebab: string): string {\n return kebab\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Converts PascalCase parameter name to kebab-case CLI option name.\n * e.g., \"ForceRecompile\" -> \"force-recompile\"\n */\nexport function pascalToKebabCase(pascal: string): string {\n const kebab = pascal.replace(/([A-Z])/g, '-$1').toLowerCase();\n return kebab.startsWith('-') ? kebab.slice(1) : kebab;\n}\n\n/**\n * Parses CLI arguments into tool parameters based on the tool schema.\n */\nexport function parseToolArgs(\n args: string[],\n schema: ToolSchema,\n cliOptions: Record<string, unknown>,\n): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n for (const [paramName, paramInfo] of Object.entries(schema.properties)) {\n const kebabName = pascalToKebabCase(paramName);\n const cliValue = cliOptions[kebabName];\n\n if (cliValue === undefined) {\n if (paramInfo.DefaultValue !== undefined) {\n params[paramName] = paramInfo.DefaultValue;\n }\n continue;\n }\n\n params[paramName] = convertValue(cliValue, paramInfo.Type);\n }\n\n return params;\n}\n\nfunction convertValue(value: unknown, type: string): unknown {\n if (value === undefined || value === null) {\n return value;\n }\n\n const lowerType = type.toLowerCase();\n\n switch (lowerType) {\n case 'boolean':\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n return Boolean(value);\n\n case 'number':\n case 'integer':\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n return Number(value);\n\n case 'string':\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n return JSON.stringify(value);\n\n case 'array':\n if (Array.isArray(value)) {\n return value;\n }\n if (typeof value === 'string') {\n return value.split(',').map((s) => s.trim());\n }\n return [value];\n\n default:\n return value;\n }\n}\n\n/**\n * Generates commander.js option string from parameter info.\n * e.g., \"--force-recompile\" for boolean, \"--max-count <value>\" for others\n */\nexport function generateOptionString(paramName: string, paramInfo: ToolParameter): string {\n const kebabName = pascalToKebabCase(paramName);\n const lowerType = paramInfo.Type.toLowerCase();\n\n if (lowerType === 'boolean') {\n return `--${kebabName}`;\n }\n\n return `--${kebabName} <value>`;\n}\n", "/**\n * Claude Code and other AI tools require skills to be in specific directories.\n * This module bridges the gap between bundled/project skills and target tool\n * configurations, handling path resolution and file synchronization.\n */\n\n// File paths are constructed from home directory and skill names, not from untrusted user input\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync, readdirSync } from 'fs';\nimport { join, dirname, resolve, isAbsolute, sep } from 'path';\nimport { homedir } from 'os';\nimport { TargetConfig } from './target-config.js';\nimport { findUnityProjectRoot, getUnityProjectStatus } from '../project-root.js';\nimport { DEPRECATED_SKILLS } from './deprecated-skills.js';\n\nexport type SkillStatus = 'installed' | 'not_installed' | 'outdated';\n\nexport interface SkillInfo {\n name: string;\n status: SkillStatus;\n path?: string;\n source?: 'bundled' | 'project';\n}\n\nexport interface SkillDefinition {\n name: string;\n dirName: string;\n content: string;\n sourcePath: string;\n additionalFiles?: Record<string, Buffer>;\n sourceType: 'package' | 'cli-only' | 'project';\n}\n\nconst EXCLUDED_DIRS = new Set([\n 'node_modules',\n '.git',\n 'Temp',\n 'obj',\n 'Build',\n 'Builds',\n 'Logs',\n 'Skill',\n]);\nconst EXCLUDED_FILES = new Set(['.meta', '.DS_Store', '.gitkeep']);\nclass SkillsPathConstants {\n public static readonly PACKAGES_DIR = 'Packages';\n public static readonly SRC_DIR = 'src';\n public static readonly SKILLS_DIR = 'skills';\n public static readonly EDITOR_DIR = 'Editor';\n public static readonly API_DIR = 'Api';\n public static readonly MCP_TOOLS_DIR = 'McpTools';\n public static readonly SKILL_DIR = 'Skill';\n public static readonly LIBRARY_DIR = 'Library';\n public static readonly PACKAGE_CACHE_DIR = 'PackageCache';\n public static readonly ASSETS_DIR = 'Assets';\n public static readonly MANIFEST_FILE = 'manifest.json';\n public static readonly SKILL_FILE = 'SKILL.md';\n public static readonly CLI_ONLY_DIR = 'skill-definitions';\n public static readonly CLI_ONLY_SUBDIR = 'cli-only';\n public static readonly DIST_PARENT_DIR = '..';\n public static readonly FILE_PROTOCOL = 'file:';\n public static readonly PATH_PROTOCOL = 'path:';\n public static readonly PACKAGE_NAME = 'io.github.hatayama.uloopmcp';\n public static readonly PACKAGE_NAME_ALIAS = 'io.github.hatayama.uLoopMCP';\n public static readonly PACKAGE_NAMES = [\n SkillsPathConstants.PACKAGE_NAME,\n SkillsPathConstants.PACKAGE_NAME_ALIAS,\n ];\n}\n\nfunction getGlobalSkillsDir(target: TargetConfig): string {\n return join(homedir(), target.projectDir, 'skills');\n}\n\nfunction getProjectSkillsDir(target: TargetConfig): string {\n const status = getUnityProjectStatus();\n if (!status.found) {\n throw new Error(\n 'Not inside a Unity project. Run this command from within a Unity project directory.',\n );\n }\n if (!status.hasUloop) {\n throw new Error(\n `uLoopMCP is not installed in this Unity project (${status.path}).\\n` +\n 'Please install uLoopMCP package first, then run this command again.',\n );\n }\n return join(status.path as string, target.projectDir, 'skills');\n}\n\nfunction getSkillPath(skillDirName: string, target: TargetConfig, global: boolean): string {\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n return join(baseDir, skillDirName, target.skillFileName);\n}\n\nfunction isSkillInstalled(skill: SkillDefinition, target: TargetConfig, global: boolean): boolean {\n const skillPath = getSkillPath(skill.dirName, target, global);\n return existsSync(skillPath);\n}\n\nfunction isSkillOutdated(skill: SkillDefinition, target: TargetConfig, global: boolean): boolean {\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n const skillDir = join(baseDir, skill.dirName);\n const skillPath = join(skillDir, target.skillFileName);\n\n if (!existsSync(skillPath)) {\n return false;\n }\n\n const installedContent = readFileSync(skillPath, 'utf-8');\n if (installedContent !== skill.content) {\n return true;\n }\n\n if ('additionalFiles' in skill && skill.additionalFiles) {\n const additionalFiles: Record<string, Buffer> = skill.additionalFiles;\n for (const [relativePath, expectedContent] of Object.entries(additionalFiles)) {\n const filePath = join(skillDir, relativePath);\n if (!existsSync(filePath)) {\n return true;\n }\n const installedFileContent = readFileSync(filePath);\n if (!installedFileContent.equals(expectedContent)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function getSkillStatus(\n skill: SkillDefinition,\n target: TargetConfig,\n global: boolean,\n): SkillStatus {\n if (!isSkillInstalled(skill, target, global)) {\n return 'not_installed';\n }\n if (isSkillOutdated(skill, target, global)) {\n return 'outdated';\n }\n return 'installed';\n}\n\nexport function parseFrontmatter(content: string): Record<string, string | boolean> {\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!frontmatterMatch) {\n return {};\n }\n\n const frontmatterMap = new Map<string, string | boolean>();\n const lines = frontmatterMatch[1].split('\\n');\n\n for (const line of lines) {\n const colonIndex = line.indexOf(':');\n if (colonIndex === -1) {\n continue;\n }\n\n const key = line.slice(0, colonIndex).trim();\n const rawValue = line.slice(colonIndex + 1).trim();\n\n let parsedValue: string | boolean = rawValue;\n if (rawValue === 'true') {\n parsedValue = true;\n } else if (rawValue === 'false') {\n parsedValue = false;\n }\n\n frontmatterMap.set(key, parsedValue);\n }\n\n return Object.fromEntries(frontmatterMap);\n}\n\nconst warnedLegacyPaths = new Set<string>();\n\nfunction warnLegacySkillStructure(toolPath: string, legacySkillMdPath: string): void {\n if (warnedLegacyPaths.has(legacySkillMdPath)) {\n return;\n }\n warnedLegacyPaths.add(legacySkillMdPath);\n\n /* eslint-disable no-console -- CLI user-facing warning output */\n console.error('\\x1b[33m' + '='.repeat(70) + '\\x1b[0m');\n console.error('\\x1b[33mWarning: Legacy skill structure detected\\x1b[0m');\n console.error(` Path: ${legacySkillMdPath}`);\n console.error('');\n console.error(' The skill structure has changed. Please migrate to the new format:');\n console.error(' 1. Create a \"Skill\" folder in the tool directory');\n console.error(' 2. Move SKILL.md and any additional files/folders into Skill/');\n console.error('');\n console.error(' Expected structure:');\n console.error(' ToolName/');\n console.error(' \u2514\u2500\u2500 Skill/');\n console.error(' \u251C\u2500\u2500 SKILL.md');\n console.error(' \u2514\u2500\u2500 (any additional files or directories)');\n console.error('\\x1b[33m' + '='.repeat(70) + '\\x1b[0m');\n console.error('');\n /* eslint-enable no-console */\n}\n\nfunction scanEditorFolderForSkills(\n editorPath: string,\n skills: SkillDefinition[],\n sourceType: SkillDefinition['sourceType'],\n warnLegacy: boolean = true,\n): void {\n if (!existsSync(editorPath)) {\n return;\n }\n\n const entries = readdirSync(editorPath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n\n const fullPath = join(editorPath, entry.name);\n\n if (entry.isDirectory()) {\n const skillDir = join(fullPath, SkillsPathConstants.SKILL_DIR);\n const skillMdPath = join(skillDir, SkillsPathConstants.SKILL_FILE);\n\n const legacySkillMdPath = join(fullPath, SkillsPathConstants.SKILL_FILE);\n if (warnLegacy && !existsSync(skillMdPath) && existsSync(legacySkillMdPath)) {\n warnLegacySkillStructure(fullPath, legacySkillMdPath);\n }\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8');\n const frontmatter = parseFrontmatter(content);\n\n if (frontmatter.internal === true) {\n continue;\n }\n\n const name = typeof frontmatter.name === 'string' ? frontmatter.name : entry.name;\n const additionalFiles = collectSkillFolderFiles(skillDir);\n\n skills.push({\n name,\n dirName: name,\n content,\n sourcePath: skillMdPath,\n additionalFiles,\n sourceType,\n });\n }\n\n scanEditorFolderForSkills(fullPath, skills, sourceType, warnLegacy);\n }\n }\n}\n\nfunction findEditorFolders(basePath: string, maxDepth: number = 2): string[] {\n const editorFolders: string[] = [];\n\n function scan(currentPath: string, depth: number): void {\n if (depth > maxDepth || !existsSync(currentPath)) {\n return;\n }\n\n const entries = readdirSync(currentPath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory() || EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n\n const fullPath = join(currentPath, entry.name);\n\n if (entry.name === 'Editor') {\n editorFolders.push(fullPath);\n } else {\n scan(fullPath, depth + 1);\n }\n }\n }\n\n scan(basePath, 0);\n return editorFolders;\n}\n\nexport function collectProjectSkills(excludedRoots: string[] = []): SkillDefinition[] {\n const projectRoot = findUnityProjectRoot();\n if (!projectRoot) {\n return [];\n }\n const skills: SkillDefinition[] = [];\n const seenNames = new Set<string>();\n\n const searchPaths = [\n join(projectRoot, SkillsPathConstants.ASSETS_DIR),\n join(projectRoot, SkillsPathConstants.PACKAGES_DIR),\n join(projectRoot, SkillsPathConstants.LIBRARY_DIR, SkillsPathConstants.PACKAGE_CACHE_DIR),\n ];\n\n for (const searchPath of searchPaths) {\n if (!existsSync(searchPath)) {\n continue;\n }\n\n const editorFolders = findEditorFolders(searchPath, 3);\n\n for (const editorFolder of editorFolders) {\n scanEditorFolderForSkills(editorFolder, skills, 'project');\n }\n }\n\n const uniqueSkills: SkillDefinition[] = [];\n for (const skill of skills) {\n if (isUnderExcludedRoots(skill.sourcePath, excludedRoots)) {\n continue;\n }\n if (!seenNames.has(skill.name)) {\n seenNames.add(skill.name);\n uniqueSkills.push(skill);\n }\n }\n\n return uniqueSkills;\n}\n\nexport function getAllSkillStatuses(target: TargetConfig, global: boolean): SkillInfo[] {\n const allSkills = collectAllSkills();\n return allSkills.map((skill) => ({\n name: skill.name,\n status: getSkillStatus(skill, target, global),\n path: isSkillInstalled(skill, target, global)\n ? getSkillPath(skill.dirName, target, global)\n : undefined,\n source: skill.sourceType === 'project' ? 'project' : 'bundled',\n }));\n}\n\nexport function installSkill(skill: SkillDefinition, target: TargetConfig, global: boolean): void {\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n const skillDir = join(baseDir, skill.dirName);\n const skillPath = join(skillDir, target.skillFileName);\n\n mkdirSync(skillDir, { recursive: true });\n writeFileSync(skillPath, skill.content, 'utf-8');\n\n if ('additionalFiles' in skill && skill.additionalFiles) {\n const additionalFiles: Record<string, Buffer> = skill.additionalFiles;\n for (const [relativePath, content] of Object.entries(additionalFiles)) {\n const fullPath = join(skillDir, relativePath);\n mkdirSync(dirname(fullPath), { recursive: true });\n writeFileSync(fullPath, content);\n }\n }\n}\n\nexport function uninstallSkill(\n skill: SkillDefinition,\n target: TargetConfig,\n global: boolean,\n): boolean {\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n const skillDir = join(baseDir, skill.dirName);\n\n if (!existsSync(skillDir)) {\n return false;\n }\n\n rmSync(skillDir, { recursive: true, force: true });\n return true;\n}\n\nexport interface InstallResult {\n installed: number;\n updated: number;\n skipped: number;\n bundledCount: number;\n projectCount: number;\n deprecatedRemoved: number;\n}\n\nexport function installAllSkills(target: TargetConfig, global: boolean): InstallResult {\n const result: InstallResult = {\n installed: 0,\n updated: 0,\n skipped: 0,\n bundledCount: 0,\n projectCount: 0,\n deprecatedRemoved: 0,\n };\n\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n for (const deprecatedName of DEPRECATED_SKILLS) {\n const deprecatedDir = join(baseDir, deprecatedName);\n if (existsSync(deprecatedDir)) {\n rmSync(deprecatedDir, { recursive: true, force: true });\n result.deprecatedRemoved++;\n }\n }\n\n const allSkills = collectAllSkills();\n const projectSkills = allSkills.filter((skill) => skill.sourceType === 'project');\n const nonProjectSkills = allSkills.filter((skill) => skill.sourceType !== 'project');\n\n for (const skill of allSkills) {\n const status = getSkillStatus(skill, target, global);\n\n if (status === 'not_installed') {\n installSkill(skill, target, global);\n result.installed++;\n } else if (status === 'outdated') {\n installSkill(skill, target, global);\n result.updated++;\n } else {\n result.skipped++;\n }\n }\n result.bundledCount = nonProjectSkills.length;\n result.projectCount = projectSkills.length;\n\n return result;\n}\n\nexport interface UninstallResult {\n removed: number;\n notFound: number;\n}\n\nexport function uninstallAllSkills(target: TargetConfig, global: boolean): UninstallResult {\n const result: UninstallResult = { removed: 0, notFound: 0 };\n\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n for (const deprecatedName of DEPRECATED_SKILLS) {\n const deprecatedDir = join(baseDir, deprecatedName);\n if (existsSync(deprecatedDir)) {\n rmSync(deprecatedDir, { recursive: true, force: true });\n result.removed++;\n }\n }\n\n const allSkills = collectAllSkills();\n for (const skill of allSkills) {\n if (uninstallSkill(skill, target, global)) {\n result.removed++;\n } else {\n result.notFound++;\n }\n }\n\n return result;\n}\n\nexport function getInstallDir(target: TargetConfig, global: boolean): string {\n return global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n}\n\nexport function getTotalSkillCount(): number {\n return collectAllSkills().length;\n}\n\nfunction collectAllSkills(): SkillDefinition[] {\n const projectRoot = findUnityProjectRoot();\n const packageRoot = projectRoot ? resolvePackageRoot(projectRoot) : null;\n const packageSkills = packageRoot ? collectPackageSkillsFromRoot(packageRoot) : [];\n const cliOnlySkills = collectCliOnlySkills();\n const projectSkills = collectProjectSkills(packageRoot ? [packageRoot] : []);\n\n return dedupeSkillsByName([packageSkills, cliOnlySkills, projectSkills]);\n}\n\nfunction collectPackageSkillsFromRoot(packageRoot: string): SkillDefinition[] {\n const mcpToolsRoot = join(\n packageRoot,\n SkillsPathConstants.EDITOR_DIR,\n SkillsPathConstants.API_DIR,\n SkillsPathConstants.MCP_TOOLS_DIR,\n );\n if (!existsSync(mcpToolsRoot)) {\n return [];\n }\n const skills: SkillDefinition[] = [];\n scanEditorFolderForSkills(mcpToolsRoot, skills, 'package');\n return skills;\n}\n\nfunction collectCliOnlySkills(): SkillDefinition[] {\n const cliOnlyRoot = resolve(\n __dirname,\n SkillsPathConstants.DIST_PARENT_DIR,\n SkillsPathConstants.SRC_DIR,\n SkillsPathConstants.SKILLS_DIR,\n SkillsPathConstants.CLI_ONLY_DIR,\n SkillsPathConstants.CLI_ONLY_SUBDIR,\n );\n if (!existsSync(cliOnlyRoot)) {\n return [];\n }\n const skills: SkillDefinition[] = [];\n scanEditorFolderForSkills(cliOnlyRoot, skills, 'cli-only', false);\n return skills;\n}\n\nfunction isExcludedFile(fileName: string): boolean {\n if (EXCLUDED_FILES.has(fileName)) {\n return true;\n }\n for (const pattern of EXCLUDED_FILES) {\n if (fileName.endsWith(pattern)) {\n return true;\n }\n }\n return false;\n}\n\nfunction collectSkillFolderFilesRecursive(\n baseDir: string,\n currentDir: string,\n additionalFiles: Record<string, Buffer>,\n): void {\n const entries = readdirSync(currentDir, { withFileTypes: true });\n for (const entry of entries) {\n if (isExcludedFile(entry.name)) {\n continue;\n }\n const fullPath = join(currentDir, entry.name);\n const relativePath = fullPath.slice(baseDir.length + 1);\n\n if (entry.isDirectory()) {\n if (EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n collectSkillFolderFilesRecursive(baseDir, fullPath, additionalFiles);\n } else if (entry.isFile()) {\n if (entry.name === SkillsPathConstants.SKILL_FILE) {\n continue;\n }\n // eslint-disable-next-line security/detect-object-injection -- Paths are controlled by package files, not user input.\n additionalFiles[relativePath] = readFileSync(fullPath);\n }\n }\n}\n\nfunction collectSkillFolderFiles(skillDir: string): Record<string, Buffer> | undefined {\n if (!existsSync(skillDir)) {\n return undefined;\n }\n const additionalFiles: Record<string, Buffer> = {};\n collectSkillFolderFilesRecursive(skillDir, skillDir, additionalFiles);\n return Object.keys(additionalFiles).length > 0 ? additionalFiles : undefined;\n}\n\nfunction dedupeSkillsByName(skillGroups: SkillDefinition[][]): SkillDefinition[] {\n const seenNames = new Set<string>();\n const merged: SkillDefinition[] = [];\n for (const group of skillGroups) {\n for (const skill of group) {\n if (seenNames.has(skill.name)) {\n continue;\n }\n seenNames.add(skill.name);\n merged.push(skill);\n }\n }\n return merged;\n}\n\nfunction resolvePackageRoot(projectRoot: string): string | null {\n const candidates: string[] = [];\n candidates.push(join(projectRoot, SkillsPathConstants.PACKAGES_DIR, SkillsPathConstants.SRC_DIR));\n\n const manifestPaths = resolveManifestPackagePaths(projectRoot);\n for (const manifestPath of manifestPaths) {\n candidates.push(manifestPath);\n }\n\n for (const packageName of SkillsPathConstants.PACKAGE_NAMES) {\n candidates.push(join(projectRoot, SkillsPathConstants.PACKAGES_DIR, packageName));\n }\n\n const directRoot = resolveFirstPackageRoot(candidates);\n if (directRoot) {\n return directRoot;\n }\n\n return resolvePackageCacheRoot(projectRoot);\n}\n\nfunction resolveManifestPackagePaths(projectRoot: string): string[] {\n const manifestPath = join(\n projectRoot,\n SkillsPathConstants.PACKAGES_DIR,\n SkillsPathConstants.MANIFEST_FILE,\n );\n if (!existsSync(manifestPath)) {\n return [];\n }\n const manifestContent = readFileSync(manifestPath, 'utf-8');\n let manifestJson: { dependencies?: Record<string, string> };\n try {\n manifestJson = JSON.parse(manifestContent) as { dependencies?: Record<string, string> };\n } catch (error) {\n // Manifest is user-editable; fail-soft to keep skill installation usable.\n // eslint-disable-next-line no-console -- Warning is required; silent failure would hide manifest issues.\n console.warn('Failed to parse manifest.json; skipping manifest-based path resolution.', error);\n return [];\n }\n const dependencies = manifestJson.dependencies;\n if (!dependencies) {\n return [];\n }\n const resolvedPaths: string[] = [];\n for (const [dependencyName, dependencyValue] of Object.entries(dependencies)) {\n if (!isTargetPackageName(dependencyName)) {\n continue;\n }\n const localPath = resolveLocalDependencyPath(dependencyValue, projectRoot);\n if (localPath) {\n resolvedPaths.push(localPath);\n }\n }\n return resolvedPaths;\n}\n\nfunction resolveLocalDependencyPath(dependencyValue: string, projectRoot: string): string | null {\n if (dependencyValue.startsWith(SkillsPathConstants.FILE_PROTOCOL)) {\n const rawPath = dependencyValue.slice(SkillsPathConstants.FILE_PROTOCOL.length);\n return resolveDependencyPath(rawPath, projectRoot);\n }\n if (dependencyValue.startsWith(SkillsPathConstants.PATH_PROTOCOL)) {\n const rawPath = dependencyValue.slice(SkillsPathConstants.PATH_PROTOCOL.length);\n return resolveDependencyPath(rawPath, projectRoot);\n }\n return null;\n}\n\nfunction resolveDependencyPath(rawPath: string, projectRoot: string): string | null {\n const trimmed = rawPath.trim();\n if (!trimmed) {\n return null;\n }\n let normalizedPath = trimmed;\n if (normalizedPath.startsWith('//')) {\n normalizedPath = normalizedPath.slice(2);\n }\n if (isAbsolute(normalizedPath)) {\n return normalizedPath;\n }\n return resolve(projectRoot, normalizedPath);\n}\n\nfunction resolveFirstPackageRoot(candidates: string[]): string | null {\n for (const candidate of candidates) {\n const resolvedRoot = resolvePackageRootCandidate(candidate);\n if (resolvedRoot) {\n return resolvedRoot;\n }\n }\n return null;\n}\n\nfunction resolvePackageCacheRoot(projectRoot: string): string | null {\n const packageCacheDir = join(\n projectRoot,\n SkillsPathConstants.LIBRARY_DIR,\n SkillsPathConstants.PACKAGE_CACHE_DIR,\n );\n if (!existsSync(packageCacheDir)) {\n return null;\n }\n const entries = readdirSync(packageCacheDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n if (!isTargetPackageCacheDir(entry.name)) {\n continue;\n }\n const candidate = join(packageCacheDir, entry.name);\n const resolvedRoot = resolvePackageRootCandidate(candidate);\n if (resolvedRoot) {\n return resolvedRoot;\n }\n }\n return null;\n}\n\nfunction resolvePackageRootCandidate(candidate: string): string | null {\n if (!existsSync(candidate)) {\n return null;\n }\n const directToolsPath = join(\n candidate,\n SkillsPathConstants.EDITOR_DIR,\n SkillsPathConstants.API_DIR,\n SkillsPathConstants.MCP_TOOLS_DIR,\n );\n if (existsSync(directToolsPath)) {\n return candidate;\n }\n\n const nestedRoot = join(candidate, SkillsPathConstants.PACKAGES_DIR, SkillsPathConstants.SRC_DIR);\n const nestedToolsPath = join(\n nestedRoot,\n SkillsPathConstants.EDITOR_DIR,\n SkillsPathConstants.API_DIR,\n SkillsPathConstants.MCP_TOOLS_DIR,\n );\n if (existsSync(nestedToolsPath)) {\n return nestedRoot;\n }\n return null;\n}\n\nfunction isTargetPackageName(name: string): boolean {\n const normalized = name.toLowerCase();\n return SkillsPathConstants.PACKAGE_NAMES.some(\n (packageName) => packageName.toLowerCase() === normalized,\n );\n}\n\nfunction isTargetPackageCacheDir(dirName: string): boolean {\n const normalized = dirName.toLowerCase();\n return SkillsPathConstants.PACKAGE_NAMES.some((packageName) =>\n normalized.startsWith(`${packageName.toLowerCase()}@`),\n );\n}\n\nfunction isUnderExcludedRoots(targetPath: string, excludedRoots: string[]): boolean {\n for (const root of excludedRoots) {\n if (isPathUnder(targetPath, root)) {\n return true;\n }\n }\n return false;\n}\n\nfunction isPathUnder(childPath: string, parentPath: string): boolean {\n const resolvedChild = resolve(childPath);\n const resolvedParent = resolve(parentPath);\n if (resolvedChild === resolvedParent) {\n return true;\n }\n return resolvedChild.startsWith(resolvedParent + sep);\n}\n", "/**\n * List of deprecated skill names that should be automatically removed during install.\n *\n * When a skill is renamed or removed, add the old name here to ensure\n * users don't end up with stale skill folders after updating.\n */\nexport const DEPRECATED_SKILLS: string[] = [\n 'uloop-capture-window', // renamed to uloop-screenshot in v0.54.0\n];\n", "/**\n * Target configuration for multi-AI tool support.\n * Supports Claude Code and Codex CLI, with extensibility for future targets.\n */\n\nexport type TargetId = 'claude' | 'codex';\n\nexport interface TargetConfig {\n id: TargetId;\n displayName: string;\n projectDir: string;\n skillFileName: string;\n}\n\nexport const TARGET_CONFIGS: Record<TargetId, TargetConfig> = {\n claude: {\n id: 'claude',\n displayName: 'Claude Code',\n projectDir: '.claude',\n skillFileName: 'SKILL.md',\n },\n codex: {\n id: 'codex',\n displayName: 'Codex CLI',\n projectDir: '.codex',\n skillFileName: 'SKILL.md',\n },\n};\n\nexport const ALL_TARGET_IDS: TargetId[] = ['claude', 'codex'];\n\nexport function getTargetConfig(id: TargetId): TargetConfig {\n // eslint-disable-next-line security/detect-object-injection -- id is type-constrained to TargetId union type\n return TARGET_CONFIGS[id];\n}\n", "/**\n * CLI command definitions for skills management.\n */\n\n// CLI commands output to console by design\n/* eslint-disable no-console */\n\nimport { Command } from 'commander';\nimport {\n getAllSkillStatuses,\n installAllSkills,\n uninstallAllSkills,\n getInstallDir,\n getTotalSkillCount,\n} from './skills-manager.js';\nimport { TargetConfig, ALL_TARGET_IDS, getTargetConfig } from './target-config.js';\n\ninterface SkillsOptions {\n global?: boolean;\n claude?: boolean;\n codex?: boolean;\n}\n\nexport function registerSkillsCommand(program: Command): void {\n const skillsCmd = program\n .command('skills')\n .description('Manage uloop skills for AI coding tools');\n\n skillsCmd\n .command('list')\n .description('List all uloop skills and their installation status')\n .option('-g, --global', 'Check global installation')\n .option('--claude', 'Check Claude Code installation')\n .option('--codex', 'Check Codex CLI installation')\n .action((options: SkillsOptions) => {\n const targets = resolveTargets(options);\n const global = options.global ?? false;\n listSkills(targets, global);\n });\n\n skillsCmd\n .command('install')\n .description('Install all uloop skills')\n .option('-g, --global', 'Install to global location')\n .option('--claude', 'Install to Claude Code')\n .option('--codex', 'Install to Codex CLI')\n .action((options: SkillsOptions) => {\n const targets = resolveTargets(options);\n if (targets.length === 0) {\n showTargetGuidance('install');\n return;\n }\n installSkills(targets, options.global ?? false);\n });\n\n skillsCmd\n .command('uninstall')\n .description('Uninstall all uloop skills')\n .option('-g, --global', 'Uninstall from global location')\n .option('--claude', 'Uninstall from Claude Code')\n .option('--codex', 'Uninstall from Codex CLI')\n .action((options: SkillsOptions) => {\n const targets = resolveTargets(options);\n if (targets.length === 0) {\n showTargetGuidance('uninstall');\n return;\n }\n uninstallSkills(targets, options.global ?? false);\n });\n}\n\nfunction resolveTargets(options: SkillsOptions): TargetConfig[] {\n const targets: TargetConfig[] = [];\n if (options.claude) {\n targets.push(getTargetConfig('claude'));\n }\n if (options.codex) {\n targets.push(getTargetConfig('codex'));\n }\n return targets;\n}\n\nfunction showTargetGuidance(command: string): void {\n console.log(`\\nPlease specify at least one target for '${command}':`);\n console.log('');\n console.log('Available targets:');\n console.log(' --claude Claude Code (.claude/skills/)');\n console.log(' --codex Codex CLI (.codex/skills/)');\n console.log('');\n console.log('Options:');\n console.log(' -g, --global Use global location (~/.claude/ or ~/.codex/)');\n console.log('');\n console.log('Examples:');\n console.log(` uloop skills ${command} --claude`);\n console.log(` uloop skills ${command} --codex --global`);\n console.log(` uloop skills ${command} --claude --codex`);\n}\n\nfunction listSkills(targets: TargetConfig[], global: boolean): void {\n const location = global ? 'Global' : 'Project';\n const targetConfigs = targets.length > 0 ? targets : ALL_TARGET_IDS.map(getTargetConfig);\n\n console.log(`\\nuloop Skills Status:`);\n console.log('');\n\n for (const target of targetConfigs) {\n const dir = getInstallDir(target, global);\n\n console.log(`${target.displayName} (${location}):`);\n console.log(`Location: ${dir}`);\n console.log('='.repeat(50));\n\n const statuses = getAllSkillStatuses(target, global);\n\n for (const skill of statuses) {\n const icon = getStatusIcon(skill.status);\n const statusText = getStatusText(skill.status);\n console.log(` ${icon} ${skill.name} (${statusText})`);\n }\n\n console.log('');\n }\n\n console.log(`Total: ${getTotalSkillCount()} skills`);\n}\n\nfunction getStatusIcon(status: string): string {\n switch (status) {\n case 'installed':\n return '\\x1b[32m\u2713\\x1b[0m';\n case 'outdated':\n return '\\x1b[33m\u2191\\x1b[0m';\n case 'not_installed':\n return '\\x1b[31m\u2717\\x1b[0m';\n default:\n return '?';\n }\n}\n\nfunction getStatusText(status: string): string {\n switch (status) {\n case 'installed':\n return 'installed';\n case 'outdated':\n return 'outdated';\n case 'not_installed':\n return 'not installed';\n default:\n return 'unknown';\n }\n}\n\nfunction installSkills(targets: TargetConfig[], global: boolean): void {\n const location = global ? 'global' : 'project';\n\n console.log(`\\nInstalling uloop skills (${location})...`);\n console.log('');\n\n for (const target of targets) {\n const dir = getInstallDir(target, global);\n const result = installAllSkills(target, global);\n\n console.log(`${target.displayName}:`);\n console.log(` \\x1b[32m\u2713\\x1b[0m Installed: ${result.installed}`);\n console.log(` \\x1b[33m\u2191\\x1b[0m Updated: ${result.updated}`);\n console.log(` \\x1b[90m-\\x1b[0m Skipped (up-to-date): ${result.skipped}`);\n if (result.deprecatedRemoved > 0) {\n console.log(` \\x1b[31m\u2717\\x1b[0m Deprecated removed: ${result.deprecatedRemoved}`);\n }\n console.log(` Location: ${dir}`);\n console.log('');\n }\n}\n\nfunction uninstallSkills(targets: TargetConfig[], global: boolean): void {\n const location = global ? 'global' : 'project';\n\n console.log(`\\nUninstalling uloop skills (${location})...`);\n console.log('');\n\n for (const target of targets) {\n const dir = getInstallDir(target, global);\n const result = uninstallAllSkills(target, global);\n\n console.log(`${target.displayName}:`);\n console.log(` \\x1b[31m\u2717\\x1b[0m Removed: ${result.removed}`);\n console.log(` \\x1b[90m-\\x1b[0m Not found: ${result.notFound}`);\n console.log(` Location: ${dir}`);\n console.log('');\n }\n}\n", "/**\n * CLI command for launching Unity projects.\n * Integrates launch-unity library into uloop CLI.\n */\n\n// CLI commands output to console by design\n/* eslint-disable no-console */\n\nimport { Command } from 'commander';\nimport { resolve } from 'path';\n\nimport {\n findUnityProjectBfs,\n getUnityVersion,\n launch,\n findRunningUnityProcess,\n focusUnityProcess,\n killRunningUnity,\n handleStaleLockfile,\n ensureProjectEntryAndUpdate,\n updateLastModifiedIfExists,\n LaunchResolvedOptions,\n} from 'launch-unity';\n\ninterface LaunchCommandOptions {\n restart?: boolean;\n platform?: string;\n maxDepth?: string;\n addUnityHub?: boolean;\n favorite?: boolean;\n}\n\nexport function registerLaunchCommand(program: Command): void {\n program\n .command('launch')\n .description('Launch Unity project with matching Editor version')\n .argument('[project-path]', 'Path to Unity project')\n .option('-r, --restart', 'Kill running Unity and restart')\n .option('-p, --platform <platform>', 'Build target (e.g., Android, iOS)')\n .option('--max-depth <n>', 'Search depth when project-path is omitted', '3')\n .option('-a, --add-unity-hub', 'Add to Unity Hub (does not launch)')\n .option('-f, --favorite', 'Add to Unity Hub as favorite (does not launch)')\n .action(async (projectPath: string | undefined, options: LaunchCommandOptions) => {\n await runLaunchCommand(projectPath, options);\n });\n}\n\nfunction parseMaxDepth(value: string | undefined): number {\n if (value === undefined) {\n return 3;\n }\n const parsed = parseInt(value, 10);\n if (Number.isNaN(parsed)) {\n console.error(`Error: Invalid --max-depth value: \"${value}\". Must be an integer.`);\n process.exit(1);\n }\n return parsed;\n}\n\nasync function runLaunchCommand(\n projectPath: string | undefined,\n options: LaunchCommandOptions,\n): Promise<void> {\n const maxDepth = parseMaxDepth(options.maxDepth);\n\n let resolvedProjectPath: string | undefined = projectPath ? resolve(projectPath) : undefined;\n\n if (!resolvedProjectPath) {\n const searchRoot = process.cwd();\n const depthInfo = maxDepth === -1 ? 'unlimited' : String(maxDepth);\n console.log(\n `No project-path provided. Searching under ${searchRoot} (max-depth: ${depthInfo})...`,\n );\n const found = findUnityProjectBfs(searchRoot, maxDepth);\n if (!found) {\n console.error(`Error: Unity project not found under ${searchRoot}.`);\n process.exit(1);\n }\n console.log(`Selected project: ${found}`);\n resolvedProjectPath = found;\n }\n\n const unityVersion = getUnityVersion(resolvedProjectPath);\n\n const unityHubOnlyMode = options.addUnityHub === true || options.favorite === true;\n if (unityHubOnlyMode) {\n console.log(`Detected Unity version: ${unityVersion}`);\n console.log(`Project Path: ${resolvedProjectPath}`);\n const now = new Date();\n await ensureProjectEntryAndUpdate(\n resolvedProjectPath,\n unityVersion,\n now,\n options.favorite === true,\n );\n console.log('Unity Hub entry updated.');\n return;\n }\n\n if (options.restart === true) {\n await killRunningUnity(resolvedProjectPath);\n } else {\n const runningProcess = await findRunningUnityProcess(resolvedProjectPath);\n if (runningProcess) {\n console.log(\n `Unity process already running for project: ${resolvedProjectPath} (PID: ${runningProcess.pid})`,\n );\n await focusUnityProcess(runningProcess.pid);\n return;\n }\n }\n\n await handleStaleLockfile(resolvedProjectPath);\n\n const resolved: LaunchResolvedOptions = {\n projectPath: resolvedProjectPath,\n platform: options.platform,\n unityArgs: [],\n unityVersion,\n };\n await launch(resolved);\n\n const now = new Date();\n await updateLastModifiedIfExists(resolvedProjectPath, now);\n}\n", "/**\n * launch-unity core library functions.\n * Pure library code without CLI entry point or side effects.\n */\nimport { execFile, spawn } from \"node:child_process\";\nimport { existsSync, readFileSync, readdirSync, lstatSync, realpathSync } from \"node:fs\";\nimport { rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { ensureProjectEntryAndUpdate, updateLastModifiedIfExists, getProjectCliArgs, parseCliArgs } from \"./unityHub.js\";\nconst execFileAsync = promisify(execFile);\nconst UNITY_EXECUTABLE_PATTERN_MAC = /Unity\\.app\\/Contents\\/MacOS\\/Unity/i;\nconst UNITY_EXECUTABLE_PATTERN_WINDOWS = /Unity\\.exe/i;\nconst PROJECT_PATH_PATTERN = /-(?:projectPath|projectpath)(?:=|\\s+)(\"[^\"]+\"|'[^']+'|[^\\s\"']+)/i;\nconst PROCESS_LIST_COMMAND_MAC = \"ps\";\nconst PROCESS_LIST_ARGS_MAC = [\"-axo\", \"pid=,command=\", \"-ww\"];\nconst WINDOWS_POWERSHELL = \"powershell\";\nconst UNITY_LOCKFILE_NAME = \"UnityLockfile\";\nconst TEMP_DIRECTORY_NAME = \"Temp\";\nexport function parseArgs(argv) {\n const args = argv.slice(2);\n const doubleDashIndex = args.indexOf(\"--\");\n let cliArgs = doubleDashIndex >= 0 ? args.slice(0, doubleDashIndex) : args;\n const unityArgs = doubleDashIndex >= 0 ? args.slice(doubleDashIndex + 1) : [];\n let subcommand;\n const firstToken = cliArgs[0];\n if (firstToken === \"update\") {\n subcommand = \"update\";\n cliArgs = cliArgs.slice(1);\n }\n const positionals = [];\n let maxDepth = 3; // default 3; -1 means unlimited\n let restart = false;\n let addUnityHub = false;\n let favoriteUnityHub = false;\n let platform;\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i] ?? \"\";\n if (arg === \"--help\" || arg === \"-h\") {\n continue; // Skip help flag - caller should handle\n }\n if (arg === \"--version\" || arg === \"-v\") {\n continue; // Skip version flag - caller should handle\n }\n if (arg === \"-r\" || arg === \"--restart\") {\n restart = true;\n continue;\n }\n if (arg === \"-u\" ||\n arg === \"-a\" ||\n arg === \"--unity-hub-entry\" ||\n arg === \"--add-unity-hub\") {\n addUnityHub = true;\n continue;\n }\n if (arg === \"-f\" || arg === \"--favorite\") {\n favoriteUnityHub = true;\n continue;\n }\n if (arg === \"-p\" || arg === \"--platform\") {\n const next = cliArgs[i + 1];\n if (typeof next === \"string\" && !next.startsWith(\"-\")) {\n platform = next;\n i += 1;\n }\n continue;\n }\n if (arg.startsWith(\"--platform=\")) {\n const value = arg.slice(\"--platform=\".length);\n if (value.length > 0) {\n platform = value;\n }\n continue;\n }\n if (arg.startsWith(\"--max-depth\")) {\n const parts = arg.split(\"=\");\n if (parts.length === 2) {\n const value = Number.parseInt(parts[1] ?? \"\", 10);\n if (Number.isFinite(value)) {\n maxDepth = value;\n }\n continue;\n }\n const next = cliArgs[i + 1];\n if (typeof next === \"string\" && !next.startsWith(\"-\")) {\n const value = Number.parseInt(next, 10);\n if (Number.isFinite(value)) {\n maxDepth = value;\n }\n i += 1;\n continue;\n }\n continue;\n }\n if (arg.startsWith(\"-\")) {\n console.warn(`Warning: Unknown option ignored: ${arg}`);\n continue;\n }\n positionals.push(arg);\n }\n let projectPath;\n if (positionals.length > 0) {\n projectPath = resolve(positionals[0] ?? \"\");\n }\n if (positionals.length > 1) {\n const ignored = positionals.slice(1).join(\", \");\n console.warn(`Warning: Extra arguments ignored: ${ignored}`);\n console.warn(\" Use -p option for platform: launch-unity -p <platform>\");\n }\n const options = {\n unityArgs,\n searchMaxDepth: maxDepth,\n restart,\n addUnityHub,\n favoriteUnityHub,\n };\n if (subcommand) {\n options.subcommand = subcommand;\n }\n if (projectPath !== undefined) {\n options.projectPath = projectPath;\n }\n if (platform !== undefined) {\n options.platform = platform;\n }\n return options;\n}\nexport function getUnityVersion(projectPath) {\n const versionFile = join(projectPath, \"ProjectSettings\", \"ProjectVersion.txt\");\n if (!existsSync(versionFile)) {\n throw new Error(`ProjectVersion.txt not found at ${versionFile}. This does not appear to be a Unity project.`);\n }\n const content = readFileSync(versionFile, \"utf8\");\n const version = content.match(/m_EditorVersion:\\s*([^\\s\\n]+)/)?.[1];\n if (!version) {\n throw new Error(`Could not extract Unity version from ${versionFile}`);\n }\n return version;\n}\nfunction getUnityPathWindows(version) {\n const candidates = [];\n const programFiles = process.env[\"PROGRAMFILES\"];\n const programFilesX86 = process.env[\"PROGRAMFILES(X86)\"];\n const localAppData = process.env[\"LOCALAPPDATA\"];\n const addCandidate = (base) => {\n if (!base) {\n return;\n }\n candidates.push(join(base, \"Unity\", \"Hub\", \"Editor\", version, \"Editor\", \"Unity.exe\"));\n };\n addCandidate(programFiles);\n addCandidate(programFilesX86);\n addCandidate(localAppData);\n candidates.push(join(\"C:\\\\\", \"Program Files\", \"Unity\", \"Hub\", \"Editor\", version, \"Editor\", \"Unity.exe\"));\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return candidates[0] ?? join(\"C:\\\\\", \"Program Files\", \"Unity\", \"Hub\", \"Editor\", version, \"Editor\", \"Unity.exe\");\n}\nfunction getUnityPath(version) {\n if (process.platform === \"darwin\") {\n return `/Applications/Unity/Hub/Editor/${version}/Unity.app/Contents/MacOS/Unity`;\n }\n if (process.platform === \"win32\") {\n return getUnityPathWindows(version);\n }\n return `/Applications/Unity/Hub/Editor/${version}/Unity.app/Contents/MacOS/Unity`;\n}\nconst removeTrailingSeparators = (target) => {\n let trimmed = target;\n while (trimmed.length > 1 && (trimmed.endsWith(\"/\") || trimmed.endsWith(\"\\\\\"))) {\n trimmed = trimmed.slice(0, -1);\n }\n return trimmed;\n};\nconst normalizePath = (target) => {\n const resolvedPath = resolve(target);\n const trimmed = removeTrailingSeparators(resolvedPath);\n return trimmed;\n};\nconst toComparablePath = (value) => {\n return value.replace(/\\\\/g, \"/\").toLocaleLowerCase();\n};\nconst pathsEqual = (left, right) => {\n return toComparablePath(normalizePath(left)) === toComparablePath(normalizePath(right));\n};\nfunction extractProjectPath(command) {\n const match = command.match(PROJECT_PATH_PATTERN);\n if (!match) {\n return undefined;\n }\n const raw = match[1];\n if (!raw) {\n return undefined;\n }\n const trimmed = raw.trim();\n if (trimmed.startsWith(\"\\\"\") && trimmed.endsWith(\"\\\"\")) {\n return trimmed.slice(1, -1);\n }\n if (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\nconst isUnityAuxiliaryProcess = (command) => {\n const normalizedCommand = command.toLowerCase();\n if (normalizedCommand.includes(\"-batchmode\")) {\n return true;\n }\n return normalizedCommand.includes(\"assetimportworker\");\n};\nasync function listUnityProcessesMac() {\n let stdout = \"\";\n try {\n const result = await execFileAsync(PROCESS_LIST_COMMAND_MAC, PROCESS_LIST_ARGS_MAC);\n stdout = result.stdout;\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Failed to retrieve Unity process list: ${message}`);\n return [];\n }\n const lines = stdout\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n const processes = [];\n for (const line of lines) {\n const match = line.match(/^(\\d+)\\s+(.*)$/);\n if (!match) {\n continue;\n }\n const pidValue = Number.parseInt(match[1] ?? \"\", 10);\n if (!Number.isFinite(pidValue)) {\n continue;\n }\n const command = match[2] ?? \"\";\n if (!UNITY_EXECUTABLE_PATTERN_MAC.test(command)) {\n continue;\n }\n if (isUnityAuxiliaryProcess(command)) {\n continue;\n }\n const projectArgument = extractProjectPath(command);\n if (!projectArgument) {\n continue;\n }\n processes.push({\n pid: pidValue,\n projectPath: normalizePath(projectArgument),\n });\n }\n return processes;\n}\nasync function listUnityProcessesWindows() {\n const scriptLines = [\n \"$ErrorActionPreference = 'Stop'\",\n \"$processes = Get-CimInstance Win32_Process -Filter \\\"Name = 'Unity.exe'\\\" | Where-Object { $_.CommandLine }\",\n \"foreach ($process in $processes) {\",\n \" $commandLine = $process.CommandLine -replace \\\"`r\\\", ' ' -replace \\\"`n\\\", ' '\",\n \" Write-Output (\\\"{0}|{1}\\\" -f $process.ProcessId, $commandLine)\",\n \"}\",\n ];\n let stdout = \"\";\n try {\n const result = await execFileAsync(WINDOWS_POWERSHELL, [\"-NoProfile\", \"-Command\", scriptLines.join(\"\\n\")]);\n stdout = result.stdout ?? \"\";\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Failed to retrieve Unity process list on Windows: ${message}`);\n return [];\n }\n const lines = stdout\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n const processes = [];\n for (const line of lines) {\n const delimiterIndex = line.indexOf(\"|\");\n if (delimiterIndex < 0) {\n continue;\n }\n const pidText = line.slice(0, delimiterIndex).trim();\n const command = line.slice(delimiterIndex + 1).trim();\n const pidValue = Number.parseInt(pidText, 10);\n if (!Number.isFinite(pidValue)) {\n continue;\n }\n if (!UNITY_EXECUTABLE_PATTERN_WINDOWS.test(command)) {\n continue;\n }\n if (isUnityAuxiliaryProcess(command)) {\n continue;\n }\n const projectArgument = extractProjectPath(command);\n if (!projectArgument) {\n continue;\n }\n processes.push({\n pid: pidValue,\n projectPath: normalizePath(projectArgument),\n });\n }\n return processes;\n}\nasync function listUnityProcesses() {\n if (process.platform === \"darwin\") {\n return await listUnityProcessesMac();\n }\n if (process.platform === \"win32\") {\n return await listUnityProcessesWindows();\n }\n return [];\n}\nexport async function findRunningUnityProcess(projectPath) {\n const normalizedTarget = normalizePath(projectPath);\n const processes = await listUnityProcesses();\n return processes.find((candidate) => pathsEqual(candidate.projectPath, normalizedTarget));\n}\nexport async function focusUnityProcess(pid) {\n if (process.platform === \"darwin\") {\n await focusUnityProcessMac(pid);\n return;\n }\n if (process.platform === \"win32\") {\n await focusUnityProcessWindows(pid);\n }\n}\nasync function focusUnityProcessMac(pid) {\n const script = `tell application \"System Events\" to set frontmost of (first process whose unix id is ${pid}) to true`;\n try {\n await execFileAsync(\"osascript\", [\"-e\", script]);\n console.log(\"Brought existing Unity to the front.\");\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to bring Unity to front: ${message}`);\n }\n}\nasync function focusUnityProcessWindows(pid) {\n const addTypeLines = [\n \"Add-Type -TypeDefinition @\\\"\",\n \"using System;\",\n \"using System.Runtime.InteropServices;\",\n \"public static class Win32Interop {\",\n \" [DllImport(\\\"user32.dll\\\")] public static extern bool SetForegroundWindow(IntPtr hWnd);\",\n \" [DllImport(\\\"user32.dll\\\")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);\",\n \"}\",\n \"\\\"@\",\n ];\n const scriptLines = [\n \"$ErrorActionPreference = 'Stop'\",\n ...addTypeLines,\n `try { $process = Get-Process -Id ${pid} -ErrorAction Stop } catch { return }`,\n \"$handle = $process.MainWindowHandle\",\n \"if ($handle -eq 0) { return }\",\n \"[Win32Interop]::ShowWindowAsync($handle, 9) | Out-Null\",\n \"[Win32Interop]::SetForegroundWindow($handle) | Out-Null\",\n ];\n try {\n await execFileAsync(WINDOWS_POWERSHELL, [\"-NoProfile\", \"-Command\", scriptLines.join(\"\\n\")]);\n console.log(\"Brought existing Unity to the front.\");\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to bring Unity to front on Windows: ${message}`);\n }\n}\nexport async function handleStaleLockfile(projectPath) {\n const tempDirectoryPath = join(projectPath, TEMP_DIRECTORY_NAME);\n const lockfilePath = join(tempDirectoryPath, UNITY_LOCKFILE_NAME);\n if (!existsSync(lockfilePath)) {\n return;\n }\n console.log(`UnityLockfile found without active Unity process: ${lockfilePath}`);\n console.log(\"Assuming previous crash. Cleaning Temp directory and continuing launch.\");\n try {\n await rm(tempDirectoryPath, { recursive: true, force: true });\n console.log(\"Deleted Temp directory.\");\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to delete Temp directory: ${message}`);\n }\n try {\n await rm(lockfilePath, { force: true });\n console.log(\"Deleted UnityLockfile.\");\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to delete UnityLockfile: ${message}`);\n }\n}\nconst KILL_POLL_INTERVAL_MS = 100;\nconst KILL_TIMEOUT_MS = 10000;\nfunction isProcessAlive(pid) {\n try {\n process.kill(pid, 0);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction killProcess(pid) {\n try {\n process.kill(pid, \"SIGKILL\");\n }\n catch {\n // Process already exited\n }\n}\nasync function waitForProcessExit(pid) {\n const start = Date.now();\n while (Date.now() - start < KILL_TIMEOUT_MS) {\n if (!isProcessAlive(pid)) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, KILL_POLL_INTERVAL_MS));\n }\n return false;\n}\nexport async function killRunningUnity(projectPath) {\n const processInfo = await findRunningUnityProcess(projectPath);\n if (!processInfo) {\n console.log(\"No running Unity process found for this project.\");\n return;\n }\n const pid = processInfo.pid;\n console.log(`Killing Unity (PID: ${pid})...`);\n killProcess(pid);\n const exited = await waitForProcessExit(pid);\n if (!exited) {\n throw new Error(`Failed to kill Unity (PID: ${pid}) within ${KILL_TIMEOUT_MS / 1000}s.`);\n }\n console.log(\"Unity killed.\");\n}\nfunction hasBuildTargetArg(unityArgs) {\n for (const arg of unityArgs) {\n if (arg === \"-buildTarget\") {\n return true;\n }\n if (arg.startsWith(\"-buildTarget=\")) {\n return true;\n }\n }\n return false;\n}\nconst EXCLUDED_DIR_NAMES = new Set([\n \"library\",\n \"temp\",\n \"logs\",\n \"obj\",\n \".git\",\n \"node_modules\",\n \".idea\",\n \".vscode\",\n \".vs\",\n]);\nfunction isUnityProjectRoot(candidateDir) {\n const versionFile = join(candidateDir, \"ProjectSettings\", \"ProjectVersion.txt\");\n return existsSync(versionFile);\n}\nfunction listSubdirectoriesSorted(dir) {\n let entries = [];\n try {\n const dirents = readdirSync(dir, { withFileTypes: true });\n const subdirs = dirents\n .filter((d) => d.isDirectory())\n .map((d) => d.name)\n .filter((name) => !EXCLUDED_DIR_NAMES.has(name.toLocaleLowerCase()));\n subdirs.sort((a, b) => a.localeCompare(b));\n entries = subdirs.map((name) => join(dir, name));\n }\n catch {\n // Ignore directories we cannot read\n entries = [];\n }\n return entries;\n}\nexport function findUnityProjectBfs(rootDir, maxDepth) {\n const queue = [];\n let rootCanonical;\n try {\n rootCanonical = realpathSync(rootDir);\n }\n catch {\n rootCanonical = rootDir;\n }\n queue.push({ dir: rootCanonical, depth: 0 });\n const visited = new Set([toComparablePath(normalizePath(rootCanonical))]);\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current) {\n continue;\n }\n const { dir, depth } = current;\n if (isUnityProjectRoot(dir)) {\n return normalizePath(dir);\n }\n const canDescend = maxDepth === -1 || depth < maxDepth;\n if (!canDescend) {\n continue;\n }\n const children = listSubdirectoriesSorted(dir);\n for (const child of children) {\n let childCanonical = child;\n try {\n const stat = lstatSync(child);\n if (stat.isSymbolicLink()) {\n try {\n childCanonical = realpathSync(child);\n }\n catch {\n // Broken symlink: skip\n continue;\n }\n }\n }\n catch {\n continue;\n }\n const key = toComparablePath(normalizePath(childCanonical));\n if (visited.has(key)) {\n continue;\n }\n visited.add(key);\n queue.push({ dir: childCanonical, depth: depth + 1 });\n }\n }\n return undefined;\n}\nexport async function launch(opts) {\n const { projectPath, platform, unityArgs, unityVersion } = opts;\n const unityPath = getUnityPath(unityVersion);\n console.log(`Detected Unity version: ${unityVersion}`);\n if (!existsSync(unityPath)) {\n throw new Error(`Unity ${unityVersion} not found at ${unityPath}. Please install Unity through Unity Hub.`);\n }\n console.log(\"Opening Unity...\");\n console.log(`Project Path: ${projectPath}`);\n const args = [\"-projectPath\", projectPath];\n const unityArgsContainBuildTarget = hasBuildTargetArg(unityArgs);\n if (platform && platform.length > 0 && !unityArgsContainBuildTarget) {\n args.push(\"-buildTarget\", platform);\n }\n const hubCliArgs = await getProjectCliArgs(projectPath);\n if (hubCliArgs.length > 0) {\n args.push(...hubCliArgs);\n }\n if (unityArgs.length > 0) {\n args.push(...unityArgs);\n }\n const child = spawn(unityPath, args, { stdio: \"ignore\", detached: true });\n child.unref();\n}\n// Re-export Unity Hub functions\nexport { ensureProjectEntryAndUpdate, updateLastModifiedIfExists, getProjectCliArgs, parseCliArgs };\n", "import { readFile, writeFile } from \"node:fs/promises\";\nimport { realpathSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport assert from \"node:assert\";\nconst resolveUnityHubProjectFiles = () => {\n if (process.platform === \"darwin\") {\n const home = process.env.HOME;\n if (!home) {\n return [];\n }\n const base = join(home, \"Library\", \"Application Support\", \"UnityHub\");\n return [join(base, \"projects-v1.json\"), join(base, \"projects.json\")];\n }\n if (process.platform === \"win32\") {\n const appData = process.env.APPDATA;\n if (!appData) {\n return [];\n }\n const base = join(appData, \"UnityHub\");\n return [join(base, \"projects-v1.json\"), join(base, \"projects.json\")];\n }\n return [];\n};\nconst removeTrailingSeparators = (target) => {\n let trimmed = target;\n while (trimmed.length > 1 && (trimmed.endsWith(\"/\") || trimmed.endsWith(\"\\\\\"))) {\n trimmed = trimmed.slice(0, -1);\n }\n return trimmed;\n};\nconst normalizePath = (target) => {\n const resolvedPath = resolve(target);\n return removeTrailingSeparators(resolvedPath);\n};\nconst resolvePathWithActualCase = (target) => {\n try {\n return removeTrailingSeparators(realpathSync.native(target));\n }\n catch {\n return normalizePath(target);\n }\n};\nconst toComparablePath = (value) => {\n return value.replace(/\\\\/g, \"/\").toLocaleLowerCase();\n};\nconst pathsEqual = (left, right) => {\n return toComparablePath(normalizePath(left)) === toComparablePath(normalizePath(right));\n};\nconst safeParseProjectsJson = (content) => {\n try {\n return JSON.parse(content);\n }\n catch {\n return undefined;\n }\n};\nconst logDebug = (message) => {\n if (process.env[\"LAUNCH_UNITY_DEBUG\"] === \"1\") {\n console.log(`[unityHub] ${message}`);\n }\n};\nexport const ensureProjectEntryAndUpdate = async (projectPath, version, when, setFavorite = false) => {\n const canonicalProjectPath = resolvePathWithActualCase(projectPath);\n const projectTitle = basename(canonicalProjectPath);\n const containingFolderPath = dirname(canonicalProjectPath);\n const candidates = resolveUnityHubProjectFiles();\n if (candidates.length === 0) {\n logDebug(\"No Unity Hub project files found.\");\n return;\n }\n for (const path of candidates) {\n logDebug(`Trying Unity Hub file: ${path}`);\n const content = await readFile(path, \"utf8\").catch(() => undefined);\n if (!content) {\n logDebug(\"Read failed or empty content, skipping.\");\n continue;\n }\n const json = safeParseProjectsJson(content);\n if (!json) {\n logDebug(\"Parse failed, skipping.\");\n continue;\n }\n const data = { ...(json.data ?? {}) };\n const existingKey = Object.keys(data).find((key) => {\n const entryPath = data[key]?.path;\n return entryPath ? pathsEqual(entryPath, projectPath) : false;\n });\n const targetKey = existingKey ?? canonicalProjectPath;\n const existingEntry = existingKey ? data[existingKey] : undefined;\n logDebug(existingKey\n ? `Found existing entry for project (key=${existingKey}). Updating lastModified.`\n : `No existing entry. Adding new entry (key=${targetKey}).`);\n const updatedEntry = {\n ...existingEntry,\n path: existingEntry?.path ?? canonicalProjectPath,\n containingFolderPath: existingEntry?.containingFolderPath ?? containingFolderPath,\n version: existingEntry?.version ?? version,\n title: existingEntry?.title ?? projectTitle,\n lastModified: when.getTime(),\n isFavorite: setFavorite ? true : (existingEntry?.isFavorite ?? false),\n };\n const updatedJson = {\n ...json,\n data: {\n ...data,\n [targetKey]: updatedEntry,\n },\n };\n try {\n await writeFile(path, JSON.stringify(updatedJson, undefined, 2), \"utf8\");\n logDebug(\"Write succeeded.\");\n }\n catch (error) {\n logDebug(`Write failed: ${error instanceof Error ? error.message : String(error)}`);\n // Ignore write errors to avoid breaking CLI flow\n }\n return;\n }\n};\nexport const updateLastModifiedIfExists = async (projectPath, when) => {\n const candidates = resolveUnityHubProjectFiles();\n if (candidates.length === 0) {\n return;\n }\n // Try primary then fallback only if read/parse fails\n for (const path of candidates) {\n let content;\n let json;\n try {\n content = await readFile(path, \"utf8\");\n }\n catch {\n // Try next candidate on read error\n continue;\n }\n try {\n json = JSON.parse(content);\n }\n catch {\n // Try next candidate on parse error\n continue;\n }\n if (!json.data) {\n // If file is readable but has no data, do not attempt fallback\n return;\n }\n const projectKey = Object.keys(json.data).find((key) => {\n const entryPath = json.data?.[key]?.path;\n return entryPath ? pathsEqual(entryPath, projectPath) : false;\n });\n if (!projectKey) {\n // Project not registered in Hub; do nothing\n return;\n }\n const original = json.data[projectKey];\n if (!original) {\n return;\n }\n json.data[projectKey] = {\n ...original,\n lastModified: when.getTime(),\n };\n try {\n await writeFile(path, JSON.stringify(json, undefined, 2), \"utf8\");\n }\n catch {\n // Swallow write errors per requirement to not crash CLI\n }\n return;\n }\n};\nconst resolveUnityHubProjectsInfoFile = () => {\n if (process.platform === \"darwin\") {\n const home = process.env.HOME;\n if (!home) {\n return undefined;\n }\n return join(home, \"Library\", \"Application Support\", \"UnityHub\", \"projectsInfo.json\");\n }\n if (process.platform === \"win32\") {\n const appData = process.env.APPDATA;\n if (!appData) {\n return undefined;\n }\n return join(appData, \"UnityHub\", \"projectsInfo.json\");\n }\n return undefined;\n};\nexport const parseCliArgs = (cliArgsString) => {\n assert(cliArgsString !== null && cliArgsString !== undefined, \"cliArgsString must not be null\");\n const trimmed = cliArgsString.trim();\n if (trimmed.length === 0) {\n return [];\n }\n const tokens = [];\n let current = \"\";\n let inQuote = null;\n for (const char of trimmed) {\n if (inQuote !== null) {\n if (char === inQuote) {\n tokens.push(current);\n current = \"\";\n inQuote = null;\n }\n else {\n current += char;\n }\n continue;\n }\n if (char === '\"' || char === \"'\") {\n inQuote = char;\n continue;\n }\n if (char === \" \") {\n if (current.length > 0) {\n tokens.push(current);\n current = \"\";\n }\n continue;\n }\n current += char;\n }\n if (current.length > 0) {\n tokens.push(current);\n }\n return tokens;\n};\nexport const getProjectCliArgs = async (projectPath) => {\n assert(projectPath !== null && projectPath !== undefined, \"projectPath must not be null\");\n const infoFilePath = resolveUnityHubProjectsInfoFile();\n if (!infoFilePath) {\n logDebug(\"projectsInfo.json path could not be resolved.\");\n return [];\n }\n logDebug(`Reading projectsInfo.json: ${infoFilePath}`);\n let content;\n try {\n content = await readFile(infoFilePath, \"utf8\");\n }\n catch {\n logDebug(\"projectsInfo.json not found or not readable.\");\n return [];\n }\n let json;\n try {\n json = JSON.parse(content);\n }\n catch {\n logDebug(\"projectsInfo.json parse failed.\");\n return [];\n }\n const normalizedProjectPath = normalizePath(projectPath);\n const projectKey = Object.keys(json).find((key) => pathsEqual(key, normalizedProjectPath));\n if (!projectKey) {\n logDebug(`No entry found for project: ${normalizedProjectPath}`);\n return [];\n }\n const projectInfo = json[projectKey];\n const cliArgsString = projectInfo?.cliArgs;\n if (!cliArgsString || cliArgsString.trim().length === 0) {\n logDebug(\"cliArgs is empty or not defined.\");\n return [];\n }\n const parsed = parseCliArgs(cliArgsString);\n logDebug(`Parsed Unity Hub cliArgs: ${JSON.stringify(parsed)}`);\n return parsed;\n};\n", "/**\n * CLI command for focusing Unity Editor window.\n * Uses OS-level commands via launch-unity library.\n * Works even when Unity is busy (compiling, domain reload).\n */\n\n// CLI commands output to console by design\n/* eslint-disable no-console */\n\nimport { Command } from 'commander';\nimport { findRunningUnityProcess, focusUnityProcess } from 'launch-unity';\nimport { findUnityProjectRoot } from '../project-root.js';\n\nexport function registerFocusWindowCommand(program: Command): void {\n program\n .command('focus-window')\n .description('Bring Unity Editor window to front using OS-level commands')\n .action(async () => {\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n console.error(\n JSON.stringify({\n Success: false,\n Message: 'Unity project not found',\n }),\n );\n process.exit(1);\n }\n\n const runningProcess = await findRunningUnityProcess(projectRoot);\n if (!runningProcess) {\n console.error(\n JSON.stringify({\n Success: false,\n Message: 'No running Unity process found for this project',\n }),\n );\n process.exit(1);\n }\n\n try {\n await focusUnityProcess(runningProcess.pid);\n console.log(\n JSON.stringify({\n Success: true,\n Message: `Unity Editor window focused (PID: ${runningProcess.pid})`,\n }),\n );\n } catch (error) {\n console.error(\n JSON.stringify({\n Success: false,\n Message: `Failed to focus Unity window: ${error instanceof Error ? error.message : String(error)}`,\n }),\n );\n process.exit(1);\n }\n });\n}\n"],
5
- "mappings": "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",
6
- "names": ["exports", "CommanderError", "InvalidArgumentError", "exports", "InvalidArgumentError", "Argument", "exports", "Help", "cmd", "exports", "InvalidArgumentError", "Option", "str", "exports", "exports", "process", "Argument", "CommanderError", "Help", "Option", "Command", "option", "path", "exports", "Argument", "Command", "CommanderError", "InvalidArgumentError", "Help", "Option", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "valid", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "lt", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "lt", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "require_valid", "exports", "module", "exports", "module", "lt", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "lt", "require_semver", "exports", "module", "valid", "lt", "import_fs", "import_path", "import_os", "commander", "import_fs", "import_path", "resolve", "import_fs", "import_path", "import_fs", "import_path", "resolve", "import_fs", "import_path", "EXCLUDED_DIRS", "program", "import_path", "import_node_fs", "import_promises", "import_node_path", "import_promises", "assert", "removeTrailingSeparators", "normalizePath", "toComparablePath", "pathsEqual", "resolve", "program", "now", "program", "program"]
4
+ "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\u2013Levenshtein_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", "'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "/**\n * CLI entry point for uloop command.\n * Provides direct Unity communication without MCP server.\n * Commands are dynamically registered from tools.json cache.\n */\n\n// CLI tools output to console by design, file paths are constructed from trusted sources (project root detection),\n// and object keys come from tool definitions which are internal trusted data\n/* eslint-disable no-console, security/detect-non-literal-fs-filename, security/detect-object-injection */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';\nimport { join, basename, dirname } from 'path';\nimport { homedir } from 'os';\nimport { spawn } from 'child_process';\nimport { Command } from 'commander';\nimport {\n executeToolCommand,\n listAvailableTools,\n GlobalOptions,\n syncTools,\n isVersionOlder,\n} from './execute-tool.js';\nimport {\n loadToolsCache,\n hasCacheFile,\n ToolDefinition,\n ToolProperty,\n getCachedServerVersion,\n} from './tool-cache.js';\nimport { pascalToKebabCase } from './arg-parser.js';\nimport { registerSkillsCommand } from './skills/skills-command.js';\nimport { registerLaunchCommand } from './commands/launch.js';\nimport { registerFocusWindowCommand } from './commands/focus-window.js';\nimport { VERSION } from './version.js';\nimport { findUnityProjectRoot } from './project-root.js';\n\ninterface CliOptions extends GlobalOptions {\n [key: string]: unknown;\n}\n\nconst BUILTIN_COMMANDS = [\n 'list',\n 'sync',\n 'completion',\n 'update',\n 'fix',\n 'skills',\n 'launch',\n 'focus-window',\n] as const;\n\nconst program = new Command();\n\nprogram\n .name('uloop')\n .description('Unity MCP CLI - Direct communication with Unity Editor')\n .version(VERSION, '-v, --version', 'Output the version number');\n\n// --list-commands: Output command names for shell completion\nprogram.option('--list-commands', 'List all command names (for shell completion)');\n\n// --list-options <cmd>: Output options for a specific command (for shell completion)\nprogram.option('--list-options <cmd>', 'List options for a command (for shell completion)');\n\n// Built-in commands (not from tools.json)\nprogram\n .command('list')\n .description('List all available tools from Unity')\n .option('-p, --port <port>', 'Unity TCP port')\n .action(async (options: CliOptions) => {\n await runWithErrorHandling(() => listAvailableTools(options));\n });\n\nprogram\n .command('sync')\n .description('Sync tool definitions from Unity to local cache')\n .option('-p, --port <port>', 'Unity TCP port')\n .action(async (options: CliOptions) => {\n await runWithErrorHandling(() => syncTools(options));\n });\n\nprogram\n .command('completion')\n .description('Setup shell completion')\n .option('--install', 'Install completion to shell config file')\n .option('--shell <type>', 'Shell type: bash, zsh, or powershell')\n .action((options: { install?: boolean; shell?: string }) => {\n handleCompletion(options.install ?? false, options.shell);\n });\n\nprogram\n .command('update')\n .description('Update uloop CLI to the latest version')\n .action(() => {\n updateCli();\n });\n\nprogram\n .command('fix')\n .description('Clean up stale lock files that may prevent CLI from connecting')\n .action(() => {\n cleanupLockFiles();\n });\n\n// Register skills subcommand\nregisterSkillsCommand(program);\n\n// Register launch subcommand\nregisterLaunchCommand(program);\n\n// Register focus-window subcommand\nregisterFocusWindowCommand(program);\n\n/**\n * Register a tool as a CLI command dynamically.\n */\nfunction registerToolCommand(tool: ToolDefinition): void {\n // Skip if already registered as a built-in command\n if (BUILTIN_COMMANDS.includes(tool.name as (typeof BUILTIN_COMMANDS)[number])) {\n return;\n }\n const cmd = program.command(tool.name).description(tool.description);\n\n // Add options from inputSchema.properties\n const properties = tool.inputSchema.properties;\n for (const [propName, propInfo] of Object.entries(properties)) {\n const optionStr = generateOptionString(propName, propInfo);\n const description = buildOptionDescription(propInfo);\n const defaultValue = propInfo.default;\n if (defaultValue !== undefined && defaultValue !== null) {\n // Convert default values to strings for consistent CLI handling\n const defaultStr = convertDefaultToString(defaultValue);\n cmd.option(optionStr, description, defaultStr);\n } else {\n cmd.option(optionStr, description);\n }\n }\n\n // Add global options\n cmd.option('-p, --port <port>', 'Unity TCP port');\n\n cmd.action(async (options: CliOptions) => {\n const params = buildParams(options, properties);\n\n // Unescape \\! to ! for execute-dynamic-code\n // Some shells (e.g., Claude Code's bash wrapper) escape ! as \\!\n if (tool.name === 'execute-dynamic-code' && params['Code']) {\n const code = params['Code'] as string;\n params['Code'] = code.replace(/\\\\!/g, '!');\n }\n\n await runWithErrorHandling(() =>\n executeToolCommand(tool.name, params, extractGlobalOptions(options)),\n );\n });\n}\n\n/**\n * Convert default value to string for CLI option registration.\n */\nfunction convertDefaultToString(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'boolean' || typeof value === 'number') {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\n/**\n * Generate commander.js option string from property info.\n * All types use value format (--option <value>) for consistency with MCP.\n */\nfunction generateOptionString(propName: string, propInfo: ToolProperty): string {\n const kebabName = pascalToKebabCase(propName);\n void propInfo; // All types now use value format\n return `--${kebabName} <value>`;\n}\n\n/**\n * Build option description with enum values if present.\n */\nfunction buildOptionDescription(propInfo: ToolProperty): string {\n let desc = propInfo.description || '';\n if (propInfo.enum && propInfo.enum.length > 0) {\n desc += ` (${propInfo.enum.join(', ')})`;\n }\n return desc;\n}\n\n/**\n * Build parameters from CLI options.\n */\nfunction buildParams(\n options: Record<string, unknown>,\n properties: Record<string, ToolProperty>,\n): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n for (const propName of Object.keys(properties)) {\n const camelName = propName.charAt(0).toLowerCase() + propName.slice(1);\n const value = options[camelName];\n\n if (value !== undefined) {\n const propInfo = properties[propName];\n params[propName] = convertValue(value, propInfo);\n }\n }\n\n return params;\n}\n\n/**\n * Convert CLI value to appropriate type based on property info.\n */\nfunction convertValue(value: unknown, propInfo: ToolProperty): unknown {\n const lowerType = propInfo.type.toLowerCase();\n\n if (lowerType === 'boolean' && typeof value === 'string') {\n const lower = value.toLowerCase();\n if (lower === 'true') {\n return true;\n }\n if (lower === 'false') {\n return false;\n }\n throw new Error(`Invalid boolean value: ${value}. Use 'true' or 'false'.`);\n }\n\n if (lowerType === 'array' && typeof value === 'string') {\n // Handle JSON array format (e.g., \"[]\" or \"[\\\"item1\\\",\\\"item2\\\"]\")\n if (value.startsWith('[') && value.endsWith(']')) {\n try {\n const parsed: unknown = JSON.parse(value);\n if (Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Fall through to comma-separated handling\n }\n }\n // Handle comma-separated format (e.g., \"item1,item2\")\n return value.split(',').map((s) => s.trim());\n }\n\n if (lowerType === 'integer' && typeof value === 'string') {\n const parsed = parseInt(value, 10);\n if (isNaN(parsed)) {\n throw new Error(`Invalid integer value: ${value}`);\n }\n return parsed;\n }\n\n if (lowerType === 'number' && typeof value === 'string') {\n const parsed = parseFloat(value);\n if (isNaN(parsed)) {\n throw new Error(`Invalid number value: ${value}`);\n }\n return parsed;\n }\n\n if (lowerType === 'object') {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) {\n throw new Error(`Invalid object value: ${value}. Use JSON object syntax.`);\n }\n try {\n const parsed: unknown = JSON.parse(trimmed);\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // fall through to error below\n }\n throw new Error(`Invalid object value: ${value}. Use JSON object syntax.`);\n }\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return value;\n }\n throw new Error(`Invalid object value: ${String(value)}. Use JSON object syntax.`);\n }\n\n return value;\n}\n\nfunction extractGlobalOptions(options: Record<string, unknown>): GlobalOptions {\n return {\n port: options['port'] as string | undefined,\n };\n}\n\nfunction isConnectionError(message: string): boolean {\n return message.includes('ECONNREFUSED') || message.includes('EADDRNOTAVAIL');\n}\n\nfunction printConnectionError(): void {\n console.error('\\x1b[31mError: Cannot connect to Unity.\\x1b[0m');\n console.error('Make sure Unity Editor is open and uLoopMCP server is running.');\n console.error('');\n console.error('[For AI] Please report the above to the user.');\n}\n\n/**\n * Print version mismatch diagnostic information when errors occur.\n * Only prints if versions are mismatched.\n */\nfunction printVersionMismatchDiagnostic(): void {\n const serverVersion = getCachedServerVersion();\n if (serverVersion === undefined) {\n return;\n }\n\n if (serverVersion === VERSION) {\n return;\n }\n\n const isCliOlder = isVersionOlder(VERSION, serverVersion);\n const action = isCliOlder ? 'Update' : 'Downgrade';\n const updateCommand = `npm install -g uloop-cli@${serverVersion}`;\n\n console.error('');\n console.error('\\x1b[33m\u2501\u2501\u2501 Version Mismatch Diagnostic \u2501\u2501\u2501\\x1b[0m');\n console.error('');\n console.error(` CLI version: ${VERSION}`);\n console.error(` Unity package: ${serverVersion}`);\n console.error(' Version mismatch may cause communication errors.');\n console.error('');\n console.error(` To fix: ${action} CLI to match Unity package version`);\n console.error(` ${updateCommand}`);\n console.error('');\n console.error('[For AI] Please ask the user if they would like to run this command.');\n console.error('\\x1b[33m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\\x1b[0m');\n}\n\nasync function runWithErrorHandling(fn: () => Promise<void>): Promise<void> {\n try {\n await fn();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n // Unity busy states have clear causes - no version diagnostic needed\n if (message === 'UNITY_COMPILING') {\n console.error('\\x1b[33m\u23F3 Unity is compiling scripts.\\x1b[0m');\n console.error('Please wait for compilation to finish and try again.');\n console.error('');\n console.error('If the issue persists, run: uloop fix');\n process.exit(1);\n }\n\n if (message === 'UNITY_DOMAIN_RELOAD') {\n console.error('\\x1b[33m\u23F3 Unity is reloading (Domain Reload in progress).\\x1b[0m');\n console.error('Please wait a moment and try again.');\n console.error('');\n console.error('If the issue persists, run: uloop fix');\n process.exit(1);\n }\n\n if (message === 'UNITY_SERVER_STARTING') {\n console.error('\\x1b[33m\u23F3 Unity server is starting.\\x1b[0m');\n console.error('Please wait a moment and try again.');\n console.error('');\n console.error('If the issue persists, run: uloop fix');\n process.exit(1);\n }\n\n // Errors that may be caused by version mismatch - show diagnostic\n if (message === 'UNITY_NO_RESPONSE') {\n console.error('\\x1b[33m\u23F3 Unity is busy (no response received).\\x1b[0m');\n console.error('Unity may be compiling, reloading, or starting. Please wait and try again.');\n printVersionMismatchDiagnostic();\n process.exit(1);\n }\n\n if (isConnectionError(message)) {\n printConnectionError();\n printVersionMismatchDiagnostic();\n process.exit(1);\n }\n\n // Timeout errors\n if (message.includes('Request timed out')) {\n console.error(`\\x1b[31mError: ${message}\\x1b[0m`);\n printVersionMismatchDiagnostic();\n process.exit(1);\n }\n\n console.error(`\\x1b[31mError: ${message}\\x1b[0m`);\n process.exit(1);\n }\n}\n\n/**\n * Detect shell type from environment.\n */\nfunction detectShell(): 'bash' | 'zsh' | 'powershell' | null {\n // Check $SHELL first (works for bash/zsh including MINGW64)\n const shell = process.env['SHELL'] || '';\n const shellName = basename(shell).replace(/\\.exe$/i, ''); // Remove .exe for Windows\n if (shellName === 'zsh') {\n return 'zsh';\n }\n if (shellName === 'bash') {\n return 'bash';\n }\n\n // Check for PowerShell (only if $SHELL is not set)\n if (process.env['PSModulePath']) {\n return 'powershell';\n }\n\n return null;\n}\n\n/**\n * Get shell config file path.\n */\nfunction getShellConfigPath(shell: 'bash' | 'zsh' | 'powershell'): string {\n const home = homedir();\n if (shell === 'zsh') {\n return join(home, '.zshrc');\n }\n if (shell === 'powershell') {\n // PowerShell profile path\n return join(home, 'Documents', 'WindowsPowerShell', 'Microsoft.PowerShell_profile.ps1');\n }\n return join(home, '.bashrc');\n}\n\n/**\n * Get completion script for a shell.\n */\nfunction getCompletionScript(shell: 'bash' | 'zsh' | 'powershell'): string {\n if (shell === 'bash') {\n return `# uloop bash completion\n_uloop_completions() {\n local cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n local cmd=\"\\${COMP_WORDS[1]}\"\n\n if [[ \\${COMP_CWORD} -eq 1 ]]; then\n COMPREPLY=($(compgen -W \"$(uloop --list-commands 2>/dev/null)\" -- \"\\${cur}\"))\n elif [[ \\${COMP_CWORD} -ge 2 ]]; then\n COMPREPLY=($(compgen -W \"$(uloop --list-options \\${cmd} 2>/dev/null)\" -- \"\\${cur}\"))\n fi\n}\ncomplete -F _uloop_completions uloop`;\n }\n\n if (shell === 'powershell') {\n return `# uloop PowerShell completion\nRegister-ArgumentCompleter -Native -CommandName uloop -ScriptBlock {\n param($wordToComplete, $commandAst, $cursorPosition)\n $commands = $commandAst.CommandElements\n if ($commands.Count -eq 1) {\n uloop --list-commands 2>$null | Where-Object { $_ -like \"$wordToComplete*\" } | ForEach-Object {\n [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)\n }\n } elseif ($commands.Count -ge 2) {\n $cmd = $commands[1].ToString()\n uloop --list-options $cmd 2>$null | Where-Object { $_ -like \"$wordToComplete*\" } | ForEach-Object {\n [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)\n }\n }\n}`;\n }\n\n /* eslint-disable no-useless-escape */\n return `# uloop zsh completion\n_uloop() {\n local -a commands\n local -a options\n local -a used_options\n\n if (( CURRENT == 2 )); then\n commands=(\\${(f)\"$(uloop --list-commands 2>/dev/null)\"})\n _describe 'command' commands\n elif (( CURRENT >= 3 )); then\n options=(\\${(f)\"$(uloop --list-options \\${words[2]} 2>/dev/null)\"})\n used_options=(\\${words:2})\n for opt in \\${used_options}; do\n options=(\\${options:#\\$opt})\n done\n _describe 'option' options\n fi\n}\ncompdef _uloop uloop`;\n /* eslint-enable no-useless-escape */\n}\n\n/**\n * Get the currently installed version of uloop-cli from npm.\n */\nfunction getInstalledVersion(callback: (version: string | null) => void): void {\n const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';\n const child = spawn(npmCommand, ['list', '-g', 'uloop-cli', '--json'], {\n shell: true,\n });\n\n let stdout = '';\n child.stdout.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.on('close', (code) => {\n if (code !== 0) {\n callback(null);\n return;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(stdout);\n } catch {\n callback(null);\n return;\n }\n\n if (typeof parsed !== 'object' || parsed === null) {\n callback(null);\n return;\n }\n\n const deps = (parsed as Record<string, unknown>)['dependencies'];\n if (typeof deps !== 'object' || deps === null) {\n callback(null);\n return;\n }\n\n const uloopCli = (deps as Record<string, unknown>)['uloop-cli'];\n if (typeof uloopCli !== 'object' || uloopCli === null) {\n callback(null);\n return;\n }\n\n const version = (uloopCli as Record<string, unknown>)['version'];\n if (typeof version !== 'string') {\n callback(null);\n return;\n }\n\n callback(version);\n });\n\n child.on('error', () => {\n callback(null);\n });\n}\n\n/**\n * Update uloop CLI to the latest version using npm.\n */\nfunction updateCli(): void {\n const previousVersion = VERSION;\n console.log('Updating uloop-cli to the latest version...');\n\n const npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';\n const child = spawn(npmCommand, ['install', '-g', 'uloop-cli@latest'], {\n stdio: 'inherit',\n shell: true,\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n getInstalledVersion((newVersion) => {\n if (newVersion && newVersion !== previousVersion) {\n console.log(`\\n\u2705 uloop-cli updated: v${previousVersion} -> v${newVersion}`);\n } else {\n console.log(`\\n\u2705 Already up to date (v${previousVersion})`);\n }\n });\n } else {\n console.error(`\\n\u274C Update failed with exit code ${code}`);\n process.exit(1);\n }\n });\n\n child.on('error', (err) => {\n console.error(`\u274C Failed to run npm: ${err.message}`);\n process.exit(1);\n });\n}\n\nconst LOCK_FILES = ['compiling.lock', 'domainreload.lock', 'serverstarting.lock'] as const;\n\n/**\n * Clean up stale lock files that may prevent CLI from connecting to Unity.\n */\nfunction cleanupLockFiles(): void {\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n console.error('Could not find Unity project root.');\n process.exit(1);\n }\n\n const tempDir = join(projectRoot, 'Temp');\n let cleaned = 0;\n\n for (const lockFile of LOCK_FILES) {\n const lockPath = join(tempDir, lockFile);\n if (existsSync(lockPath)) {\n unlinkSync(lockPath);\n console.log(`Removed: ${lockFile}`);\n cleaned++;\n }\n }\n\n if (cleaned === 0) {\n console.log('No lock files found.');\n } else {\n console.log(`\\n\u2705 Cleaned up ${cleaned} lock file(s).`);\n }\n}\n\n/**\n * Handle completion command.\n */\nfunction handleCompletion(install: boolean, shellOverride?: string): void {\n let shell: 'bash' | 'zsh' | 'powershell' | null;\n\n if (shellOverride) {\n const normalized = shellOverride.toLowerCase();\n if (normalized === 'bash' || normalized === 'zsh' || normalized === 'powershell') {\n shell = normalized;\n } else {\n console.error(`Unknown shell: ${shellOverride}. Supported: bash, zsh, powershell`);\n process.exit(1);\n }\n } else {\n shell = detectShell();\n }\n\n if (!shell) {\n console.error('Could not detect shell. Use --shell option: bash, zsh, or powershell');\n process.exit(1);\n }\n\n const script = getCompletionScript(shell);\n\n if (!install) {\n console.log(script);\n return;\n }\n\n // Install to shell config file\n const configPath = getShellConfigPath(shell);\n\n // PowerShell profile directory may not exist on fresh installations\n const configDir = dirname(configPath);\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true });\n }\n\n // Remove existing uloop completion and add new one\n let content = '';\n if (existsSync(configPath)) {\n content = readFileSync(configPath, 'utf-8');\n // Remove existing uloop completion block using markers\n content = content.replace(\n /\\n?# >>> uloop completion >>>[\\s\\S]*?# <<< uloop completion <<<\\n?/g,\n '',\n );\n }\n\n // Add new completion with markers\n const startMarker = '# >>> uloop completion >>>';\n const endMarker = '# <<< uloop completion <<<';\n\n if (shell === 'powershell') {\n const lineToAdd = `\\n${startMarker}\\n${script}\\n${endMarker}\\n`;\n writeFileSync(configPath, content + lineToAdd, 'utf-8');\n } else {\n // Include --shell option to ensure correct shell detection\n const evalLine = `eval \"$(uloop completion --shell ${shell})\"`;\n const lineToAdd = `\\n${startMarker}\\n${evalLine}\\n${endMarker}\\n`;\n writeFileSync(configPath, content + lineToAdd, 'utf-8');\n }\n\n console.log(`Completion installed to ${configPath}`);\n if (shell === 'powershell') {\n console.log('Restart PowerShell to enable completion.');\n } else {\n console.log(`Run 'source ${configPath}' or restart your shell to enable completion.`);\n }\n}\n\n/**\n * Handle --list-commands and --list-options before parsing.\n */\nfunction handleCompletionOptions(): boolean {\n const args = process.argv.slice(2);\n\n if (args.includes('--list-commands')) {\n const tools = loadToolsCache();\n const allCommands = [...BUILTIN_COMMANDS, ...tools.tools.map((t) => t.name)];\n console.log(allCommands.join('\\n'));\n return true;\n }\n\n const listOptionsIdx = args.indexOf('--list-options');\n if (listOptionsIdx !== -1 && args[listOptionsIdx + 1]) {\n const cmdName = args[listOptionsIdx + 1];\n listOptionsForCommand(cmdName);\n return true;\n }\n\n return false;\n}\n\n/**\n * List options for a specific command.\n */\nfunction listOptionsForCommand(cmdName: string): void {\n // Built-in commands have no tool-specific options\n if (BUILTIN_COMMANDS.includes(cmdName as (typeof BUILTIN_COMMANDS)[number])) {\n return;\n }\n\n // Tool commands - only output tool-specific options\n const tools = loadToolsCache();\n const tool = tools.tools.find((t) => t.name === cmdName);\n if (!tool) {\n return;\n }\n\n const options: string[] = [];\n for (const propName of Object.keys(tool.inputSchema.properties)) {\n const kebabName = pascalToKebabCase(propName);\n options.push(`--${kebabName}`);\n }\n\n console.log(options.join('\\n'));\n}\n\n/**\n * Check if a command exists in the current program.\n */\nfunction commandExists(cmdName: string): boolean {\n if (BUILTIN_COMMANDS.includes(cmdName as (typeof BUILTIN_COMMANDS)[number])) {\n return true;\n }\n const tools = loadToolsCache();\n return tools.tools.some((t) => t.name === cmdName);\n}\n\n/**\n * Main entry point with auto-sync for unknown commands.\n */\nasync function main(): Promise<void> {\n if (handleCompletionOptions()) {\n return;\n }\n\n // Check if cache version is outdated and auto-sync if needed\n const cachedVersion = loadToolsCache().version;\n if (hasCacheFile() && cachedVersion !== VERSION) {\n console.log(\n `\\x1b[33mCache outdated (${cachedVersion} \u2192 ${VERSION}). Syncing tools from Unity...\\x1b[0m`,\n );\n try {\n await syncTools({});\n console.log('\\x1b[32m\u2713 Tools synced successfully.\\x1b[0m\\n');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (isConnectionError(message)) {\n console.error('\\x1b[33mWarning: Failed to sync tools. Using cached definitions.\\x1b[0m');\n console.error(\"\\x1b[33mRun 'uloop sync' manually when Unity is available.\\x1b[0m\\n\");\n } else {\n console.error('\\x1b[33mWarning: Failed to sync tools. Using cached definitions.\\x1b[0m');\n console.error(`\\x1b[33mError: ${message}\\x1b[0m`);\n console.error(\"\\x1b[33mRun 'uloop sync' manually when Unity is available.\\x1b[0m\\n\");\n }\n }\n }\n\n // Register tool commands from cache (after potential auto-sync)\n const toolsCache = loadToolsCache();\n for (const tool of toolsCache.tools) {\n registerToolCommand(tool);\n }\n\n const args = process.argv.slice(2);\n const cmdName = args.find((arg) => !arg.startsWith('-'));\n\n if (cmdName && !commandExists(cmdName)) {\n console.log(`\\x1b[33mUnknown command '${cmdName}'. Syncing tools from Unity...\\x1b[0m`);\n try {\n await syncTools({});\n const newCache = loadToolsCache();\n const tool = newCache.tools.find((t) => t.name === cmdName);\n if (tool) {\n registerToolCommand(tool);\n console.log(`\\x1b[32m\u2713 Found '${cmdName}' after sync.\\x1b[0m\\n`);\n } else {\n console.error(`\\x1b[31mError: Command '${cmdName}' not found even after sync.\\x1b[0m`);\n process.exit(1);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (isConnectionError(message)) {\n printConnectionError();\n } else {\n console.error(`\\x1b[31mError: Failed to sync tools: ${message}\\x1b[0m`);\n }\n process.exit(1);\n }\n }\n\n program.parse();\n}\n\nvoid main();\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", "/**\n * Tool execution logic for CLI.\n * Handles dynamic tool execution by connecting to Unity and sending requests.\n */\n\n// CLI tools output to console by design, object keys come from Unity tool responses which are trusted,\n// and lock file paths are constructed from trusted project root detection\n/* eslint-disable no-console, security/detect-object-injection, security/detect-non-literal-fs-filename */\n\nimport * as readline from 'readline';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport * as semver from 'semver';\nimport { DirectUnityClient } from './direct-unity-client.js';\nimport { resolveUnityPort } from './port-resolver.js';\nimport { saveToolsCache, getCacheFilePath, ToolsCache, ToolDefinition } from './tool-cache.js';\nimport { VERSION } from './version.js';\nimport { createSpinner } from './spinner.js';\nimport { findUnityProjectRoot } from './project-root.js';\n\n/**\n * Suppress stdin echo during async operation to prevent escape sequences from being displayed.\n * Returns a cleanup function to restore stdin state.\n */\nfunction suppressStdinEcho(): () => void {\n if (!process.stdin.isTTY) {\n return () => {};\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: false,\n });\n\n process.stdin.setRawMode(true);\n process.stdin.resume();\n\n const onData = (data: Buffer): void => {\n // Ctrl+C (0x03) should trigger process exit\n if (data[0] === 0x03) {\n process.exit(130);\n }\n };\n process.stdin.on('data', onData);\n\n return () => {\n process.stdin.off('data', onData);\n process.stdin.setRawMode(false);\n process.stdin.pause();\n rl.close();\n };\n}\n\nexport interface GlobalOptions {\n port?: string;\n}\n\nconst RETRY_DELAY_MS = 500;\nconst MAX_RETRIES = 3;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isRetryableError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message;\n return (\n message.includes('ECONNREFUSED') ||\n message.includes('EADDRNOTAVAIL') ||\n message === 'UNITY_NO_RESPONSE'\n );\n}\n\n/**\n * Compare two semantic versions safely.\n * Returns true if v1 < v2, false otherwise.\n * Falls back to string comparison if versions are invalid.\n */\nexport function isVersionOlder(v1: string, v2: string): boolean {\n const parsed1 = semver.valid(v1);\n const parsed2 = semver.valid(v2);\n\n if (parsed1 && parsed2) {\n return semver.lt(parsed1, parsed2);\n }\n\n return v1 < v2;\n}\n\n/**\n * Print version mismatch warning to stderr.\n * Does not block execution - just warns the user.\n */\nfunction printVersionWarning(cliVersion: string, serverVersion: string): void {\n const isCliOlder = isVersionOlder(cliVersion, serverVersion);\n const updateCommand = isCliOlder\n ? `npm install -g uloop-cli@${serverVersion}`\n : `Update uLoopMCP package to ${cliVersion} via Unity Package Manager`;\n\n console.error('\\x1b[33m\u26A0\uFE0F Version mismatch detected!\\x1b[0m');\n console.error(` uloop-cli version: ${cliVersion}`);\n console.error(` uloop server version: ${serverVersion}`);\n console.error('');\n console.error(' This may cause unexpected behavior or errors.');\n console.error('');\n console.error(` ${isCliOlder ? 'To update CLI:' : 'To update server:'} ${updateCommand}`);\n console.error('');\n}\n\n/**\n * Check server version from response and print warning if mismatched.\n */\nfunction checkServerVersion(result: Record<string, unknown>): void {\n const serverVersion = result['Ver'] as string | undefined;\n if (serverVersion && serverVersion !== VERSION) {\n printVersionWarning(VERSION, serverVersion);\n }\n}\n\n/**\n * Check if Unity is in a busy state (compiling, reloading, or server starting).\n * Throws an error with appropriate message if busy.\n */\nfunction checkUnityBusyState(): void {\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n return;\n }\n\n const compilingLock = join(projectRoot, 'Temp', 'compiling.lock');\n if (existsSync(compilingLock)) {\n throw new Error('UNITY_COMPILING');\n }\n\n const domainReloadLock = join(projectRoot, 'Temp', 'domainreload.lock');\n if (existsSync(domainReloadLock)) {\n throw new Error('UNITY_DOMAIN_RELOAD');\n }\n\n const serverStartingLock = join(projectRoot, 'Temp', 'serverstarting.lock');\n if (existsSync(serverStartingLock)) {\n throw new Error('UNITY_SERVER_STARTING');\n }\n}\n\nexport async function executeToolCommand(\n toolName: string,\n params: Record<string, unknown>,\n globalOptions: GlobalOptions,\n): Promise<void> {\n let portNumber: number | undefined;\n if (globalOptions.port) {\n const parsed = parseInt(globalOptions.port, 10);\n if (isNaN(parsed)) {\n throw new Error(`Invalid port number: ${globalOptions.port}`);\n }\n portNumber = parsed;\n }\n const port = await resolveUnityPort(portNumber);\n\n const restoreStdin = suppressStdinEcho();\n const spinner = createSpinner('Connecting to Unity...');\n\n let lastError: unknown;\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n checkUnityBusyState();\n\n const client = new DirectUnityClient(port);\n try {\n await client.connect();\n\n spinner.update(`Executing ${toolName}...`);\n const result = await client.sendRequest<Record<string, unknown>>(toolName, params);\n\n if (result === undefined || result === null) {\n throw new Error('UNITY_NO_RESPONSE');\n }\n\n // Success - stop spinner and output result\n spinner.stop();\n restoreStdin();\n\n // Check server version and warn if mismatched\n checkServerVersion(result);\n\n console.log(JSON.stringify(result, null, 2));\n return;\n } catch (error) {\n lastError = error;\n client.disconnect();\n\n if (!isRetryableError(error) || attempt >= MAX_RETRIES) {\n break;\n }\n spinner.update('Retrying connection...');\n await sleep(RETRY_DELAY_MS);\n } finally {\n client.disconnect();\n }\n }\n\n spinner.stop();\n restoreStdin();\n throw lastError;\n}\n\nexport async function listAvailableTools(globalOptions: GlobalOptions): Promise<void> {\n let portNumber: number | undefined;\n if (globalOptions.port) {\n const parsed = parseInt(globalOptions.port, 10);\n if (isNaN(parsed)) {\n throw new Error(`Invalid port number: ${globalOptions.port}`);\n }\n portNumber = parsed;\n }\n const port = await resolveUnityPort(portNumber);\n\n const restoreStdin = suppressStdinEcho();\n const spinner = createSpinner('Connecting to Unity...');\n\n let lastError: unknown;\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n checkUnityBusyState();\n\n const client = new DirectUnityClient(port);\n try {\n await client.connect();\n\n spinner.update('Fetching tool list...');\n const result = await client.sendRequest<{\n Tools: Array<{ name: string; description: string }>;\n }>('get-tool-details', { IncludeDevelopmentOnly: false });\n\n if (!result.Tools || !Array.isArray(result.Tools)) {\n throw new Error('Unexpected response from Unity: missing Tools array');\n }\n\n // Success - stop spinner and output result\n spinner.stop();\n restoreStdin();\n for (const tool of result.Tools) {\n console.log(` - ${tool.name}`);\n }\n return;\n } catch (error) {\n lastError = error;\n client.disconnect();\n\n if (!isRetryableError(error) || attempt >= MAX_RETRIES) {\n break;\n }\n spinner.update('Retrying connection...');\n await sleep(RETRY_DELAY_MS);\n } finally {\n client.disconnect();\n }\n }\n\n spinner.stop();\n restoreStdin();\n throw lastError;\n}\n\ninterface UnityToolInfo {\n name: string;\n description: string;\n parameterSchema: {\n Properties: Record<string, UnityPropertyInfo>;\n Required?: string[];\n };\n}\n\ninterface UnityPropertyInfo {\n Type: string;\n Description?: string;\n DefaultValue?: unknown;\n Enum?: string[] | null;\n}\n\nfunction convertProperties(\n unityProps: Record<string, UnityPropertyInfo>,\n): Record<string, ToolDefinition['inputSchema']['properties'][string]> {\n const result: Record<string, ToolDefinition['inputSchema']['properties'][string]> = {};\n for (const [key, prop] of Object.entries(unityProps)) {\n result[key] = {\n type: prop.Type?.toLowerCase() ?? 'string',\n description: prop.Description,\n default: prop.DefaultValue,\n enum: prop.Enum ?? undefined,\n };\n }\n return result;\n}\n\nexport async function syncTools(globalOptions: GlobalOptions): Promise<void> {\n let portNumber: number | undefined;\n if (globalOptions.port) {\n const parsed = parseInt(globalOptions.port, 10);\n if (isNaN(parsed)) {\n throw new Error(`Invalid port number: ${globalOptions.port}`);\n }\n portNumber = parsed;\n }\n const port = await resolveUnityPort(portNumber);\n\n const restoreStdin = suppressStdinEcho();\n const spinner = createSpinner('Connecting to Unity...');\n\n let lastError: unknown;\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n checkUnityBusyState();\n\n const client = new DirectUnityClient(port);\n try {\n await client.connect();\n\n spinner.update('Syncing tools...');\n const result = await client.sendRequest<{\n Tools: UnityToolInfo[];\n Ver?: string;\n }>('get-tool-details', { IncludeDevelopmentOnly: false });\n\n spinner.stop();\n if (!result.Tools || !Array.isArray(result.Tools)) {\n restoreStdin();\n throw new Error('Unexpected response from Unity: missing Tools array');\n }\n\n const cache: ToolsCache = {\n version: VERSION,\n serverVersion: result.Ver,\n updatedAt: new Date().toISOString(),\n tools: result.Tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: {\n type: 'object',\n properties: convertProperties(tool.parameterSchema.Properties),\n required: tool.parameterSchema.Required,\n },\n })),\n };\n\n saveToolsCache(cache);\n\n console.log(`Synced ${cache.tools.length} tools to ${getCacheFilePath()}`);\n console.log('\\nTools:');\n for (const tool of cache.tools) {\n console.log(` - ${tool.name}`);\n }\n restoreStdin();\n return;\n } catch (error) {\n lastError = error;\n client.disconnect();\n\n if (!isRetryableError(error) || attempt >= MAX_RETRIES) {\n break;\n }\n spinner.update('Retrying connection...');\n await sleep(RETRY_DELAY_MS);\n } finally {\n client.disconnect();\n }\n }\n\n spinner.stop();\n restoreStdin();\n throw lastError;\n}\n", "/**\n * Direct Unity TCP client for CLI usage.\n * Establishes one-shot TCP connections to Unity without going through MCP server.\n */\n\n// Non-null assertions are used after TCP frame parsing where data existence is guaranteed by protocol\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport * as net from 'net';\nimport { createFrame, parseFrameFromBuffer, extractFrameFromBuffer } from './simple-framer.js';\n\nconst JSONRPC_VERSION = '2.0';\nconst DEFAULT_HOST = '127.0.0.1';\nconst NETWORK_TIMEOUT_MS = 180000;\n\nexport interface JsonRpcRequest {\n jsonrpc: string;\n method: string;\n params?: Record<string, unknown>;\n id: number;\n}\n\nexport interface JsonRpcResponse {\n jsonrpc: string;\n result?: unknown;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n id: number;\n}\n\nexport class DirectUnityClient {\n private socket: net.Socket | null = null;\n private requestId: number = 0;\n private receiveBuffer: Buffer = Buffer.alloc(0);\n\n constructor(\n private readonly port: number,\n private readonly host: string = DEFAULT_HOST,\n ) {}\n\n async connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.socket = new net.Socket();\n\n this.socket.on('error', (error: Error) => {\n reject(new Error(`Connection error: ${error.message}`));\n });\n\n this.socket.connect(this.port, this.host, () => {\n resolve();\n });\n });\n }\n\n async sendRequest<T>(method: string, params?: Record<string, unknown>): Promise<T> {\n if (!this.socket) {\n throw new Error('Not connected to Unity');\n }\n\n const request: JsonRpcRequest = {\n jsonrpc: JSONRPC_VERSION,\n method,\n params: params ?? {},\n id: ++this.requestId,\n };\n\n const requestJson = JSON.stringify(request);\n const framedMessage = createFrame(requestJson);\n\n return new Promise((resolve, reject) => {\n const socket = this.socket!;\n const timeoutId = setTimeout(() => {\n reject(\n new Error(\n `Request timed out after ${NETWORK_TIMEOUT_MS}ms. Unity may be frozen or busy. [For AI] Run 'uloop focus-window' to bring Unity to the front, then retry the tool. If the issue persists, report this to the user and ask how to proceed. Do NOT kill Unity processes without user permission.`,\n ),\n );\n }, NETWORK_TIMEOUT_MS);\n\n const onData = (chunk: Buffer): void => {\n this.receiveBuffer = Buffer.concat([this.receiveBuffer, chunk]);\n\n const parseResult = parseFrameFromBuffer(this.receiveBuffer);\n if (!parseResult.isComplete) {\n return;\n }\n\n const extractResult = extractFrameFromBuffer(\n this.receiveBuffer,\n parseResult.contentLength,\n parseResult.headerLength,\n );\n\n if (extractResult.jsonContent === null) {\n return;\n }\n\n clearTimeout(timeoutId);\n socket.off('data', onData);\n\n this.receiveBuffer = extractResult.remainingData;\n\n const response = JSON.parse(extractResult.jsonContent) as JsonRpcResponse;\n\n if (response.error) {\n reject(new Error(`Unity error: ${response.error.message}`));\n return;\n }\n\n resolve(response.result as T);\n };\n\n socket.on('data', onData);\n socket.write(framedMessage);\n });\n }\n\n disconnect(): void {\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n this.receiveBuffer = Buffer.alloc(0);\n }\n\n isConnected(): boolean {\n return this.socket !== null && !this.socket.destroyed;\n }\n}\n", "/**\n * Simple Content-Length framer for CLI usage.\n * Minimal implementation without external dependencies.\n */\n\nconst CONTENT_LENGTH_HEADER = 'Content-Length:';\nconst HEADER_SEPARATOR = '\\r\\n\\r\\n';\n\nexport function createFrame(jsonContent: string): string {\n const contentLength = Buffer.byteLength(jsonContent, 'utf8');\n return `${CONTENT_LENGTH_HEADER} ${contentLength}${HEADER_SEPARATOR}${jsonContent}`;\n}\n\nexport interface FrameParseResult {\n contentLength: number;\n headerLength: number;\n isComplete: boolean;\n}\n\nexport function parseFrameFromBuffer(data: Buffer): FrameParseResult {\n if (!data || data.length === 0) {\n return { contentLength: -1, headerLength: -1, isComplete: false };\n }\n\n const separatorBuffer = Buffer.from(HEADER_SEPARATOR, 'utf8');\n const separatorIndex = data.indexOf(separatorBuffer);\n\n if (separatorIndex === -1) {\n return { contentLength: -1, headerLength: -1, isComplete: false };\n }\n\n const headerSection = data.subarray(0, separatorIndex).toString('utf8');\n const headerLength = separatorIndex + separatorBuffer.length;\n\n const contentLength = parseContentLength(headerSection);\n if (contentLength === -1) {\n return { contentLength: -1, headerLength: -1, isComplete: false };\n }\n\n const expectedTotalLength = headerLength + contentLength;\n const isComplete = data.length >= expectedTotalLength;\n\n return { contentLength, headerLength, isComplete };\n}\n\nexport interface FrameExtractionResult {\n jsonContent: string | null;\n remainingData: Buffer;\n}\n\nexport function extractFrameFromBuffer(\n data: Buffer,\n contentLength: number,\n headerLength: number,\n): FrameExtractionResult {\n if (!data || data.length === 0 || contentLength < 0 || headerLength < 0) {\n return { jsonContent: null, remainingData: data || Buffer.alloc(0) };\n }\n\n const expectedTotalLength = headerLength + contentLength;\n\n if (data.length < expectedTotalLength) {\n return { jsonContent: null, remainingData: data };\n }\n\n const jsonContent = data.subarray(headerLength, headerLength + contentLength).toString('utf8');\n const remainingData = data.subarray(expectedTotalLength);\n\n return { jsonContent, remainingData };\n}\n\nfunction parseContentLength(headerSection: string): number {\n const lines = headerSection.split(/\\r?\\n/);\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n const lowerLine = trimmedLine.toLowerCase();\n\n if (lowerLine.startsWith('content-length:')) {\n const colonIndex = trimmedLine.indexOf(':');\n if (colonIndex === -1 || colonIndex >= trimmedLine.length - 1) {\n continue;\n }\n\n const valueString = trimmedLine.substring(colonIndex + 1).trim();\n const parsedValue = parseInt(valueString, 10);\n\n if (isNaN(parsedValue) || parsedValue < 0) {\n return -1;\n }\n\n return parsedValue;\n }\n }\n\n return -1;\n}\n", "/**\n * Port resolution utility for CLI.\n * Resolves Unity server port from various sources.\n */\n\n// File paths are constructed from Unity project root detection, not from user input\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { findUnityProjectRoot } from './project-root.js';\n\nconst DEFAULT_PORT = 8700;\n\ninterface UnityMcpSettings {\n serverPort?: number;\n customPort?: number;\n}\n\nexport async function resolveUnityPort(explicitPort?: number): Promise<number> {\n if (explicitPort !== undefined) {\n return explicitPort;\n }\n\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n throw new Error('Unity project not found. Use --port option to specify the port explicitly.');\n }\n\n const settingsPort = await readPortFromSettings(projectRoot);\n if (settingsPort !== null) {\n return settingsPort;\n }\n\n return DEFAULT_PORT;\n}\n\nasync function readPortFromSettings(projectRoot: string): Promise<number | null> {\n const settingsPath = join(projectRoot, 'UserSettings/UnityMcpSettings.json');\n\n if (!existsSync(settingsPath)) {\n return null;\n }\n\n let content: string;\n try {\n content = await readFile(settingsPath, 'utf-8');\n } catch {\n return null;\n }\n\n let settings: UnityMcpSettings;\n try {\n settings = JSON.parse(content) as UnityMcpSettings;\n } catch {\n return null;\n }\n\n if (typeof settings.serverPort === 'number') {\n return settings.serverPort;\n }\n\n if (typeof settings.customPort === 'number') {\n return settings.customPort;\n }\n\n return null;\n}\n", "/**\n * Unity project root detection utility.\n * Searches child directories first (up to 3 levels deep), then parent directories.\n */\n\n// Path traversal is intentional for finding Unity project root\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, readdirSync, Dirent } from 'fs';\nimport { join, dirname } from 'path';\n\nconst CHILD_SEARCH_MAX_DEPTH = 3;\n\nconst EXCLUDED_DIRS = new Set([\n 'node_modules',\n '.git',\n 'Temp',\n 'obj',\n 'Build',\n 'Builds',\n 'Logs',\n 'Library',\n]);\n\nfunction isUnityProject(dirPath: string): boolean {\n const hasAssets = existsSync(join(dirPath, 'Assets'));\n const hasProjectSettings = existsSync(join(dirPath, 'ProjectSettings'));\n return hasAssets && hasProjectSettings;\n}\n\nfunction hasUloopInstalled(dirPath: string): boolean {\n return existsSync(join(dirPath, 'UserSettings/UnityMcpSettings.json'));\n}\n\nfunction isUnityProjectWithUloop(dirPath: string): boolean {\n return isUnityProject(dirPath) && hasUloopInstalled(dirPath);\n}\n\nfunction findUnityProjectsInChildren(startPath: string, maxDepth: number): string[] {\n const projects: string[] = [];\n\n function scan(currentPath: string, depth: number): void {\n if (depth > maxDepth) {\n return;\n }\n\n if (!existsSync(currentPath)) {\n return;\n }\n\n if (isUnityProjectWithUloop(currentPath)) {\n projects.push(currentPath);\n return;\n }\n\n let entries: Dirent[];\n try {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- ts-jest requires explicit Dirent[] type due to Node.js 22+ generic Dirent<T> changes\n entries = readdirSync(currentPath, { withFileTypes: true }) as Dirent[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n if (EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n\n const fullPath = join(currentPath, entry.name);\n scan(fullPath, depth + 1);\n }\n }\n\n scan(startPath, 0);\n return projects.sort();\n}\n\nfunction findUnityProjectInParents(startPath: string): string | null {\n let currentPath = startPath;\n\n while (true) {\n if (isUnityProjectWithUloop(currentPath)) {\n return currentPath;\n }\n\n const isGitRoot = existsSync(join(currentPath, '.git'));\n if (isGitRoot) {\n return null;\n }\n\n const parentPath = dirname(currentPath);\n if (parentPath === currentPath) {\n return null;\n }\n currentPath = parentPath;\n }\n}\n\n/**\n * Find Unity project root by searching child directories first, then parent directories.\n * A Unity project is identified by having both Assets/ and ProjectSettings/ directories.\n *\n * Search order:\n * 1. Child directories (up to 3 levels deep)\n * 2. Parent directories (up to root)\n *\n * If multiple Unity projects are found in child search, a warning is printed\n * and the first one (alphabetically) is used.\n *\n * Returns null if no Unity project is found.\n */\nexport function findUnityProjectRoot(startPath: string = process.cwd()): string | null {\n const childProjects = findUnityProjectsInChildren(startPath, CHILD_SEARCH_MAX_DEPTH);\n\n if (childProjects.length > 0) {\n if (childProjects.length > 1) {\n /* eslint-disable no-console -- CLI user-facing warning output */\n console.error('\\x1b[33mWarning: Multiple Unity projects found in child directories:\\x1b[0m');\n for (const project of childProjects) {\n console.error(` - ${project}`);\n }\n console.error(`\\x1b[33mUsing: ${childProjects[0]}\\x1b[0m`);\n console.error('');\n /* eslint-enable no-console */\n }\n return childProjects[0];\n }\n\n return findUnityProjectInParents(startPath);\n}\n\nexport interface UnityProjectStatus {\n found: boolean;\n path: string | null;\n hasUloop: boolean;\n}\n\n/**\n * Check Unity project status with detailed information.\n * Returns whether a Unity project exists and whether uLoopMCP is installed.\n */\nexport function getUnityProjectStatus(startPath: string = process.cwd()): UnityProjectStatus {\n const unityProjectWithUloop = findUnityProjectRoot(startPath);\n if (unityProjectWithUloop) {\n return { found: true, path: unityProjectWithUloop, hasUloop: true };\n }\n\n const unityProjectWithoutUloop = findUnityProjectWithoutUloop(startPath);\n if (unityProjectWithoutUloop) {\n return { found: true, path: unityProjectWithoutUloop, hasUloop: false };\n }\n\n return { found: false, path: null, hasUloop: false };\n}\n\nfunction findUnityProjectWithoutUloop(startPath: string): string | null {\n const childProject = findUnityProjectInChildrenWithoutUloop(startPath, CHILD_SEARCH_MAX_DEPTH);\n if (childProject) {\n return childProject;\n }\n return findUnityProjectInParentsWithoutUloop(startPath);\n}\n\nfunction findUnityProjectInChildrenWithoutUloop(\n startPath: string,\n maxDepth: number,\n): string | null {\n function scan(currentPath: string, depth: number): string | null {\n if (depth > maxDepth || !existsSync(currentPath)) {\n return null;\n }\n\n if (isUnityProject(currentPath)) {\n return currentPath;\n }\n\n let entries: Dirent[];\n try {\n entries = readdirSync(currentPath, { withFileTypes: true });\n } catch {\n return null;\n }\n\n for (const entry of entries) {\n if (!entry.isDirectory() || EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n const result = scan(join(currentPath, entry.name), depth + 1);\n if (result) {\n return result;\n }\n }\n return null;\n }\n\n return scan(startPath, 0);\n}\n\nfunction findUnityProjectInParentsWithoutUloop(startPath: string): string | null {\n let currentPath = startPath;\n\n while (true) {\n if (isUnityProject(currentPath)) {\n return currentPath;\n }\n\n const isGitRoot = existsSync(join(currentPath, '.git'));\n if (isGitRoot) {\n return null;\n }\n\n const parentPath = dirname(currentPath);\n if (parentPath === currentPath) {\n return null;\n }\n currentPath = parentPath;\n }\n}\n", "/**\n * Tool cache management for CLI.\n * Handles loading/saving tool definitions from .uloop/tools.json cache.\n */\n\n// File paths are constructed from Unity project root, not from untrusted user input\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join } from 'path';\nimport defaultToolsData from './default-tools.json';\nimport { findUnityProjectRoot } from './project-root.js';\n\nexport interface ToolProperty {\n type: string;\n description?: string;\n default?: unknown;\n enum?: string[];\n items?: { type: string };\n}\n\nexport interface ToolInputSchema {\n type: string;\n properties: Record<string, ToolProperty>;\n required?: string[];\n}\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n inputSchema: ToolInputSchema;\n}\n\nexport interface ToolsCache {\n version: string;\n serverVersion?: string;\n updatedAt?: string;\n tools: ToolDefinition[];\n}\n\nconst CACHE_DIR = '.uloop';\nconst CACHE_FILE = 'tools.json';\n\nfunction getCacheDir(): string {\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n return join(process.cwd(), CACHE_DIR);\n }\n return join(projectRoot, CACHE_DIR);\n}\n\nfunction getCachePath(): string {\n return join(getCacheDir(), CACHE_FILE);\n}\n\n/**\n * Load default tools bundled with npm package.\n */\nexport function getDefaultTools(): ToolsCache {\n return defaultToolsData as ToolsCache;\n}\n\n/**\n * Load tools from cache file, falling back to default tools if cache doesn't exist.\n */\nexport function loadToolsCache(): ToolsCache {\n const cachePath = getCachePath();\n\n if (existsSync(cachePath)) {\n try {\n const content = readFileSync(cachePath, 'utf-8');\n return JSON.parse(content) as ToolsCache;\n } catch {\n return getDefaultTools();\n }\n }\n\n return getDefaultTools();\n}\n\n/**\n * Save tools to cache file.\n */\nexport function saveToolsCache(cache: ToolsCache): void {\n const cacheDir = getCacheDir();\n const cachePath = getCachePath();\n\n if (!existsSync(cacheDir)) {\n mkdirSync(cacheDir, { recursive: true });\n }\n\n const content = JSON.stringify(cache, null, 2);\n writeFileSync(cachePath, content, 'utf-8');\n}\n\n/**\n * Check if cache file exists.\n */\nexport function hasCacheFile(): boolean {\n return existsSync(getCachePath());\n}\n\n/**\n * Get the cache file path for display purposes.\n */\nexport function getCacheFilePath(): string {\n return getCachePath();\n}\n\n/**\n * Get the Unity server version from cache file.\n * Returns undefined if cache doesn't exist, is corrupted, or serverVersion is missing.\n */\nexport function getCachedServerVersion(): string | undefined {\n const cachePath = getCachePath();\n\n if (!existsSync(cachePath)) {\n return undefined;\n }\n\n try {\n const content = readFileSync(cachePath, 'utf-8');\n const cache = JSON.parse(content) as Partial<ToolsCache>;\n return typeof cache.serverVersion === 'string' ? cache.serverVersion : undefined;\n } catch {\n return undefined;\n }\n}\n", "{\n \"version\": \"0.61.0\",\n \"tools\": [\n {\n \"name\": \"compile\",\n \"description\": \"Execute Unity project compilation\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"ForceRecompile\": {\n \"type\": \"boolean\",\n \"description\": \"Force full recompilation\"\n }\n }\n }\n },\n {\n \"name\": \"get-logs\",\n \"description\": \"Retrieve logs from Unity Console\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"LogType\": {\n \"type\": \"string\",\n \"description\": \"Log type filter\",\n \"enum\": [\n \"Error\",\n \"Warning\",\n \"Log\",\n \"All\"\n ],\n \"default\": \"All\"\n },\n \"MaxCount\": {\n \"type\": \"integer\",\n \"description\": \"Maximum number of logs to retrieve\",\n \"default\": 100\n },\n \"SearchText\": {\n \"type\": \"string\",\n \"description\": \"Text to search within logs\"\n },\n \"IncludeStackTrace\": {\n \"type\": \"boolean\",\n \"description\": \"Include stack trace in output\",\n \"default\": false\n },\n \"UseRegex\": {\n \"type\": \"boolean\",\n \"description\": \"Use regex for search\"\n },\n \"SearchInStackTrace\": {\n \"type\": \"boolean\",\n \"description\": \"Search within stack trace\"\n }\n }\n }\n },\n {\n \"name\": \"run-tests\",\n \"description\": \"Execute Unity Test Runner\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"TestMode\": {\n \"type\": \"string\",\n \"description\": \"Test mode\",\n \"enum\": [\n \"EditMode\",\n \"PlayMode\"\n ],\n \"default\": \"EditMode\"\n },\n \"FilterType\": {\n \"type\": \"string\",\n \"description\": \"Filter type\",\n \"enum\": [\n \"all\",\n \"exact\",\n \"regex\",\n \"assembly\"\n ],\n \"default\": \"all\"\n },\n \"FilterValue\": {\n \"type\": \"string\",\n \"description\": \"Filter value\"\n }\n }\n }\n },\n {\n \"name\": \"clear-console\",\n \"description\": \"Clear Unity console logs\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"AddConfirmationMessage\": {\n \"type\": \"boolean\",\n \"description\": \"Add confirmation message after clearing\"\n }\n }\n }\n },\n {\n \"name\": \"focus-window\",\n \"description\": \"Bring Unity Editor window to front\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n }\n },\n {\n \"name\": \"get-hierarchy\",\n \"description\": \"Get Unity Hierarchy structure\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"RootPath\": {\n \"type\": \"string\",\n \"description\": \"Root GameObject path\"\n },\n \"MaxDepth\": {\n \"type\": \"integer\",\n \"description\": \"Maximum depth (-1 for unlimited)\",\n \"default\": -1\n },\n \"IncludeComponents\": {\n \"type\": \"boolean\",\n \"description\": \"Include component information\",\n \"default\": true\n },\n \"IncludeInactive\": {\n \"type\": \"boolean\",\n \"description\": \"Include inactive GameObjects\",\n \"default\": true\n },\n \"IncludePaths\": {\n \"type\": \"boolean\",\n \"description\": \"Include path information\"\n },\n \"UseSelection\": {\n \"type\": \"boolean\",\n \"description\": \"Use selected GameObject(s) as root(s). When true, RootPath is ignored.\",\n \"default\": false\n }\n }\n }\n },\n {\n \"name\": \"unity-search\",\n \"description\": \"Search Unity project\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"SearchQuery\": {\n \"type\": \"string\",\n \"description\": \"Search query\"\n },\n \"Providers\": {\n \"type\": \"array\",\n \"description\": \"Search providers\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"MaxResults\": {\n \"type\": \"integer\",\n \"description\": \"Maximum number of results\",\n \"default\": 50\n },\n \"SaveToFile\": {\n \"type\": \"boolean\",\n \"description\": \"Save results to file\"\n }\n }\n }\n },\n {\n \"name\": \"get-menu-items\",\n \"description\": \"Retrieve Unity MenuItems\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"FilterText\": {\n \"type\": \"string\",\n \"description\": \"Filter text\"\n },\n \"FilterType\": {\n \"type\": \"string\",\n \"description\": \"Filter type\",\n \"enum\": [\n \"contains\",\n \"exact\",\n \"startswith\"\n ],\n \"default\": \"contains\"\n },\n \"MaxCount\": {\n \"type\": \"integer\",\n \"description\": \"Maximum number of items\",\n \"default\": 200\n },\n \"IncludeValidation\": {\n \"type\": \"boolean\",\n \"description\": \"Include validation functions\"\n }\n }\n }\n },\n {\n \"name\": \"execute-menu-item\",\n \"description\": \"Execute Unity MenuItem\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"MenuItemPath\": {\n \"type\": \"string\",\n \"description\": \"Menu item path (e.g., \\\"GameObject/Create Empty\\\")\"\n },\n \"UseReflectionFallback\": {\n \"type\": \"boolean\",\n \"description\": \"Use reflection fallback\",\n \"default\": true\n }\n }\n }\n },\n {\n \"name\": \"find-game-objects\",\n \"description\": \"Find GameObjects with search criteria\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"NamePattern\": {\n \"type\": \"string\",\n \"description\": \"Name pattern to search\"\n },\n \"SearchMode\": {\n \"type\": \"string\",\n \"description\": \"Search mode\",\n \"enum\": [\n \"Exact\",\n \"Path\",\n \"Regex\",\n \"Contains\"\n ],\n \"default\": \"Contains\"\n },\n \"RequiredComponents\": {\n \"type\": \"array\",\n \"description\": \"Required components\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"Tag\": {\n \"type\": \"string\",\n \"description\": \"Tag filter\"\n },\n \"Layer\": {\n \"type\": \"string\",\n \"description\": \"Layer filter\"\n },\n \"MaxResults\": {\n \"type\": \"integer\",\n \"description\": \"Maximum number of results\",\n \"default\": 20\n },\n \"IncludeInactive\": {\n \"type\": \"boolean\",\n \"description\": \"Include inactive GameObjects\"\n }\n }\n }\n },\n {\n \"name\": \"capture-window\",\n \"description\": \"Capture Unity EditorWindow and save as PNG\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"WindowName\": {\n \"type\": \"string\",\n \"description\": \"Window name to capture (e.g., 'Game', 'Scene', 'Console', 'Inspector', 'Project', 'Hierarchy')\",\n \"default\": \"Game\"\n },\n \"ResolutionScale\": {\n \"type\": \"number\",\n \"description\": \"Resolution scale (0.1 to 1.0)\",\n \"default\": 1\n },\n \"MatchMode\": {\n \"type\": \"string\",\n \"description\": \"Window name matching mode (all case-insensitive)\",\n \"enum\": [\n \"exact\",\n \"prefix\",\n \"contains\"\n ],\n \"default\": \"exact\"\n }\n }\n }\n },\n {\n \"name\": \"execute-dynamic-code\",\n \"description\": \"Execute C# code in Unity Editor\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"Code\": {\n \"type\": \"string\",\n \"description\": \"C# code to execute\"\n },\n \"CompileOnly\": {\n \"type\": \"boolean\",\n \"description\": \"Compile only without execution\"\n }\n }\n }\n },\n {\n \"name\": \"get-provider-details\",\n \"description\": \"Get Unity Search provider details\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"ProviderId\": {\n \"type\": \"string\",\n \"description\": \"Specific provider ID\"\n },\n \"ActiveOnly\": {\n \"type\": \"boolean\",\n \"description\": \"Only active providers\"\n },\n \"IncludeDescriptions\": {\n \"type\": \"boolean\",\n \"description\": \"Include descriptions\",\n \"default\": true\n },\n \"SortByPriority\": {\n \"type\": \"boolean\",\n \"description\": \"Sort by priority\",\n \"default\": true\n }\n }\n }\n },\n {\n \"name\": \"get-project-info\",\n \"description\": \"Get Unity project information\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n }\n },\n {\n \"name\": \"get-version\",\n \"description\": \"Get uLoopMCP version information\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n }\n },\n {\n \"name\": \"control-play-mode\",\n \"description\": \"Control Unity Editor play mode (play/stop/pause)\",\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"Action\": {\n \"type\": \"string\",\n \"description\": \"Action to perform: Play - Start play mode, Stop - Stop play mode, Pause - Pause play mode\",\n \"enum\": [\n \"Play\",\n \"Stop\",\n \"Pause\"\n ],\n \"default\": \"Play\"\n }\n }\n }\n }\n ]\n}\n", "/**\n * CLI version\n *\n * This file exists to avoid bundling the entire package.json into the CLI bundle.\n * This version is automatically updated by release-please.\n */\nexport const VERSION = '0.61.0'; // x-release-please-version\n", "/**\n * Terminal spinner for showing loading state during async operations.\n */\n\n// Array index access is safe here (modulo operation keeps it in bounds)\n/* eslint-disable security/detect-object-injection */\n\nconst SPINNER_FRAMES = ['\u280B', '\u2819', '\u2839', '\u2838', '\u283C', '\u2834', '\u2826', '\u2827', '\u2807', '\u280F'] as const;\nconst FRAME_INTERVAL_MS = 80;\n\nexport interface Spinner {\n update(message: string): void;\n stop(): void;\n}\n\n/**\n * Create a terminal spinner that displays a rotating animation with a message.\n * Returns a Spinner object with update() and stop() methods.\n */\nexport function createSpinner(initialMessage: string): Spinner {\n if (!process.stderr.isTTY) {\n return {\n update: (): void => {},\n stop: (): void => {},\n };\n }\n\n let frameIndex = 0;\n let currentMessage = initialMessage;\n\n const render = (): void => {\n const frame = SPINNER_FRAMES[frameIndex];\n process.stderr.write(`\\r\\x1b[K${frame} ${currentMessage}`);\n frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;\n };\n\n render();\n const intervalId = setInterval(render, FRAME_INTERVAL_MS);\n\n return {\n update(message: string): void {\n currentMessage = message;\n },\n stop(): void {\n clearInterval(intervalId);\n process.stderr.write('\\r\\x1b[K');\n },\n };\n}\n", "/**\n * CLI argument parser for tool parameters.\n * Converts CLI options to Unity tool parameters.\n */\n\n// Object keys come from tool schema definitions which are internal trusted data\n/* eslint-disable security/detect-object-injection */\n\nexport interface ToolParameter {\n Type: string;\n Description: string;\n DefaultValue?: unknown;\n Enum?: string[];\n}\n\nexport interface ToolSchema {\n properties: Record<string, ToolParameter>;\n}\n\n/**\n * Converts kebab-case CLI option name to PascalCase parameter name.\n * e.g., \"force-recompile\" -> \"ForceRecompile\"\n */\nexport function kebabToPascalCase(kebab: string): string {\n return kebab\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Converts PascalCase parameter name to kebab-case CLI option name.\n * e.g., \"ForceRecompile\" -> \"force-recompile\"\n */\nexport function pascalToKebabCase(pascal: string): string {\n const kebab = pascal.replace(/([A-Z])/g, '-$1').toLowerCase();\n return kebab.startsWith('-') ? kebab.slice(1) : kebab;\n}\n\n/**\n * Parses CLI arguments into tool parameters based on the tool schema.\n */\nexport function parseToolArgs(\n args: string[],\n schema: ToolSchema,\n cliOptions: Record<string, unknown>,\n): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n for (const [paramName, paramInfo] of Object.entries(schema.properties)) {\n const kebabName = pascalToKebabCase(paramName);\n const cliValue = cliOptions[kebabName];\n\n if (cliValue === undefined) {\n if (paramInfo.DefaultValue !== undefined) {\n params[paramName] = paramInfo.DefaultValue;\n }\n continue;\n }\n\n params[paramName] = convertValue(cliValue, paramInfo.Type);\n }\n\n return params;\n}\n\nfunction convertValue(value: unknown, type: string): unknown {\n if (value === undefined || value === null) {\n return value;\n }\n\n const lowerType = type.toLowerCase();\n\n switch (lowerType) {\n case 'boolean':\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n return Boolean(value);\n\n case 'number':\n case 'integer':\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n return Number(value);\n\n case 'string':\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n return JSON.stringify(value);\n\n case 'array':\n if (Array.isArray(value)) {\n return value;\n }\n if (typeof value === 'string') {\n return value.split(',').map((s) => s.trim());\n }\n return [value];\n\n default:\n return value;\n }\n}\n\n/**\n * Generates commander.js option string from parameter info.\n * e.g., \"--force-recompile\" for boolean, \"--max-count <value>\" for others\n */\nexport function generateOptionString(paramName: string, paramInfo: ToolParameter): string {\n const kebabName = pascalToKebabCase(paramName);\n const lowerType = paramInfo.Type.toLowerCase();\n\n if (lowerType === 'boolean') {\n return `--${kebabName}`;\n }\n\n return `--${kebabName} <value>`;\n}\n", "/**\n * Claude Code and other AI tools require skills to be in specific directories.\n * This module bridges the gap between bundled/project skills and target tool\n * configurations, handling path resolution and file synchronization.\n */\n\n// File paths are constructed from home directory and skill names, not from untrusted user input\n/* eslint-disable security/detect-non-literal-fs-filename */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, rmSync, readdirSync } from 'fs';\nimport { join, dirname, resolve, isAbsolute, sep } from 'path';\nimport { homedir } from 'os';\nimport { TargetConfig } from './target-config.js';\nimport { findUnityProjectRoot, getUnityProjectStatus } from '../project-root.js';\nimport { DEPRECATED_SKILLS } from './deprecated-skills.js';\n\nexport type SkillStatus = 'installed' | 'not_installed' | 'outdated';\n\nexport interface SkillInfo {\n name: string;\n status: SkillStatus;\n path?: string;\n source?: 'bundled' | 'project';\n}\n\nexport interface SkillDefinition {\n name: string;\n dirName: string;\n content: string;\n sourcePath: string;\n additionalFiles?: Record<string, Buffer>;\n sourceType: 'package' | 'cli-only' | 'project';\n}\n\nconst EXCLUDED_DIRS = new Set([\n 'node_modules',\n '.git',\n 'Temp',\n 'obj',\n 'Build',\n 'Builds',\n 'Logs',\n 'Skill',\n]);\nconst EXCLUDED_FILES = new Set(['.meta', '.DS_Store', '.gitkeep']);\nclass SkillsPathConstants {\n public static readonly PACKAGES_DIR = 'Packages';\n public static readonly SRC_DIR = 'src';\n public static readonly SKILLS_DIR = 'skills';\n public static readonly EDITOR_DIR = 'Editor';\n public static readonly API_DIR = 'Api';\n public static readonly MCP_TOOLS_DIR = 'McpTools';\n public static readonly SKILL_DIR = 'Skill';\n public static readonly LIBRARY_DIR = 'Library';\n public static readonly PACKAGE_CACHE_DIR = 'PackageCache';\n public static readonly ASSETS_DIR = 'Assets';\n public static readonly MANIFEST_FILE = 'manifest.json';\n public static readonly SKILL_FILE = 'SKILL.md';\n public static readonly CLI_ONLY_DIR = 'skill-definitions';\n public static readonly CLI_ONLY_SUBDIR = 'cli-only';\n public static readonly DIST_PARENT_DIR = '..';\n public static readonly FILE_PROTOCOL = 'file:';\n public static readonly PATH_PROTOCOL = 'path:';\n public static readonly PACKAGE_NAME = 'io.github.hatayama.uloopmcp';\n public static readonly PACKAGE_NAME_ALIAS = 'io.github.hatayama.uLoopMCP';\n public static readonly PACKAGE_NAMES = [\n SkillsPathConstants.PACKAGE_NAME,\n SkillsPathConstants.PACKAGE_NAME_ALIAS,\n ];\n}\n\nfunction getGlobalSkillsDir(target: TargetConfig): string {\n return join(homedir(), target.projectDir, 'skills');\n}\n\nfunction getProjectSkillsDir(target: TargetConfig): string {\n const status = getUnityProjectStatus();\n if (!status.found) {\n throw new Error(\n 'Not inside a Unity project. Run this command from within a Unity project directory.',\n );\n }\n if (!status.hasUloop) {\n throw new Error(\n `uLoopMCP is not installed in this Unity project (${status.path}).\\n` +\n 'Please install uLoopMCP package first, then run this command again.',\n );\n }\n return join(status.path as string, target.projectDir, 'skills');\n}\n\nfunction getSkillPath(skillDirName: string, target: TargetConfig, global: boolean): string {\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n return join(baseDir, skillDirName, target.skillFileName);\n}\n\nfunction isSkillInstalled(skill: SkillDefinition, target: TargetConfig, global: boolean): boolean {\n const skillPath = getSkillPath(skill.dirName, target, global);\n return existsSync(skillPath);\n}\n\nfunction isSkillOutdated(skill: SkillDefinition, target: TargetConfig, global: boolean): boolean {\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n const skillDir = join(baseDir, skill.dirName);\n const skillPath = join(skillDir, target.skillFileName);\n\n if (!existsSync(skillPath)) {\n return false;\n }\n\n const installedContent = readFileSync(skillPath, 'utf-8');\n if (installedContent !== skill.content) {\n return true;\n }\n\n if ('additionalFiles' in skill && skill.additionalFiles) {\n const additionalFiles: Record<string, Buffer> = skill.additionalFiles;\n for (const [relativePath, expectedContent] of Object.entries(additionalFiles)) {\n const filePath = join(skillDir, relativePath);\n if (!existsSync(filePath)) {\n return true;\n }\n const installedFileContent = readFileSync(filePath);\n if (!installedFileContent.equals(expectedContent)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function getSkillStatus(\n skill: SkillDefinition,\n target: TargetConfig,\n global: boolean,\n): SkillStatus {\n if (!isSkillInstalled(skill, target, global)) {\n return 'not_installed';\n }\n if (isSkillOutdated(skill, target, global)) {\n return 'outdated';\n }\n return 'installed';\n}\n\nexport function parseFrontmatter(content: string): Record<string, string | boolean> {\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!frontmatterMatch) {\n return {};\n }\n\n const frontmatterMap = new Map<string, string | boolean>();\n const lines = frontmatterMatch[1].split('\\n');\n\n for (const line of lines) {\n const colonIndex = line.indexOf(':');\n if (colonIndex === -1) {\n continue;\n }\n\n const key = line.slice(0, colonIndex).trim();\n const rawValue = line.slice(colonIndex + 1).trim();\n\n let parsedValue: string | boolean = rawValue;\n if (rawValue === 'true') {\n parsedValue = true;\n } else if (rawValue === 'false') {\n parsedValue = false;\n }\n\n frontmatterMap.set(key, parsedValue);\n }\n\n return Object.fromEntries(frontmatterMap);\n}\n\nconst warnedLegacyPaths = new Set<string>();\n\nfunction warnLegacySkillStructure(toolPath: string, legacySkillMdPath: string): void {\n if (warnedLegacyPaths.has(legacySkillMdPath)) {\n return;\n }\n warnedLegacyPaths.add(legacySkillMdPath);\n\n /* eslint-disable no-console -- CLI user-facing warning output */\n console.error('\\x1b[33m' + '='.repeat(70) + '\\x1b[0m');\n console.error('\\x1b[33mWarning: Legacy skill structure detected\\x1b[0m');\n console.error(` Path: ${legacySkillMdPath}`);\n console.error('');\n console.error(' The skill structure has changed. Please migrate to the new format:');\n console.error(' 1. Create a \"Skill\" folder in the tool directory');\n console.error(' 2. Move SKILL.md and any additional files/folders into Skill/');\n console.error('');\n console.error(' Expected structure:');\n console.error(' ToolName/');\n console.error(' \u2514\u2500\u2500 Skill/');\n console.error(' \u251C\u2500\u2500 SKILL.md');\n console.error(' \u2514\u2500\u2500 (any additional files or directories)');\n console.error('\\x1b[33m' + '='.repeat(70) + '\\x1b[0m');\n console.error('');\n /* eslint-enable no-console */\n}\n\nfunction scanEditorFolderForSkills(\n editorPath: string,\n skills: SkillDefinition[],\n sourceType: SkillDefinition['sourceType'],\n warnLegacy: boolean = true,\n): void {\n if (!existsSync(editorPath)) {\n return;\n }\n\n const entries = readdirSync(editorPath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n\n const fullPath = join(editorPath, entry.name);\n\n if (entry.isDirectory()) {\n const skillDir = join(fullPath, SkillsPathConstants.SKILL_DIR);\n const skillMdPath = join(skillDir, SkillsPathConstants.SKILL_FILE);\n\n const legacySkillMdPath = join(fullPath, SkillsPathConstants.SKILL_FILE);\n if (warnLegacy && !existsSync(skillMdPath) && existsSync(legacySkillMdPath)) {\n warnLegacySkillStructure(fullPath, legacySkillMdPath);\n }\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8');\n const frontmatter = parseFrontmatter(content);\n\n if (frontmatter.internal === true) {\n continue;\n }\n\n const name = typeof frontmatter.name === 'string' ? frontmatter.name : entry.name;\n const additionalFiles = collectSkillFolderFiles(skillDir);\n\n skills.push({\n name,\n dirName: name,\n content,\n sourcePath: skillMdPath,\n additionalFiles,\n sourceType,\n });\n }\n\n scanEditorFolderForSkills(fullPath, skills, sourceType, warnLegacy);\n }\n }\n}\n\nfunction findEditorFolders(basePath: string, maxDepth: number = 2): string[] {\n const editorFolders: string[] = [];\n\n function scan(currentPath: string, depth: number): void {\n if (depth > maxDepth || !existsSync(currentPath)) {\n return;\n }\n\n const entries = readdirSync(currentPath, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory() || EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n\n const fullPath = join(currentPath, entry.name);\n\n if (entry.name === 'Editor') {\n editorFolders.push(fullPath);\n } else {\n scan(fullPath, depth + 1);\n }\n }\n }\n\n scan(basePath, 0);\n return editorFolders;\n}\n\nexport function collectProjectSkills(excludedRoots: string[] = []): SkillDefinition[] {\n const projectRoot = findUnityProjectRoot();\n if (!projectRoot) {\n return [];\n }\n const skills: SkillDefinition[] = [];\n const seenNames = new Set<string>();\n\n const searchPaths = [\n join(projectRoot, SkillsPathConstants.ASSETS_DIR),\n join(projectRoot, SkillsPathConstants.PACKAGES_DIR),\n join(projectRoot, SkillsPathConstants.LIBRARY_DIR, SkillsPathConstants.PACKAGE_CACHE_DIR),\n ];\n\n for (const searchPath of searchPaths) {\n if (!existsSync(searchPath)) {\n continue;\n }\n\n const editorFolders = findEditorFolders(searchPath, 3);\n\n for (const editorFolder of editorFolders) {\n scanEditorFolderForSkills(editorFolder, skills, 'project');\n }\n }\n\n const uniqueSkills: SkillDefinition[] = [];\n for (const skill of skills) {\n if (isUnderExcludedRoots(skill.sourcePath, excludedRoots)) {\n continue;\n }\n if (!seenNames.has(skill.name)) {\n seenNames.add(skill.name);\n uniqueSkills.push(skill);\n }\n }\n\n return uniqueSkills;\n}\n\nexport function getAllSkillStatuses(target: TargetConfig, global: boolean): SkillInfo[] {\n const allSkills = collectAllSkills();\n return allSkills.map((skill) => ({\n name: skill.name,\n status: getSkillStatus(skill, target, global),\n path: isSkillInstalled(skill, target, global)\n ? getSkillPath(skill.dirName, target, global)\n : undefined,\n source: skill.sourceType === 'project' ? 'project' : 'bundled',\n }));\n}\n\nexport function installSkill(skill: SkillDefinition, target: TargetConfig, global: boolean): void {\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n const skillDir = join(baseDir, skill.dirName);\n const skillPath = join(skillDir, target.skillFileName);\n\n mkdirSync(skillDir, { recursive: true });\n writeFileSync(skillPath, skill.content, 'utf-8');\n\n if ('additionalFiles' in skill && skill.additionalFiles) {\n const additionalFiles: Record<string, Buffer> = skill.additionalFiles;\n for (const [relativePath, content] of Object.entries(additionalFiles)) {\n const fullPath = join(skillDir, relativePath);\n mkdirSync(dirname(fullPath), { recursive: true });\n writeFileSync(fullPath, content);\n }\n }\n}\n\nexport function uninstallSkill(\n skill: SkillDefinition,\n target: TargetConfig,\n global: boolean,\n): boolean {\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n const skillDir = join(baseDir, skill.dirName);\n\n if (!existsSync(skillDir)) {\n return false;\n }\n\n rmSync(skillDir, { recursive: true, force: true });\n return true;\n}\n\nexport interface InstallResult {\n installed: number;\n updated: number;\n skipped: number;\n bundledCount: number;\n projectCount: number;\n deprecatedRemoved: number;\n}\n\nexport function installAllSkills(target: TargetConfig, global: boolean): InstallResult {\n const result: InstallResult = {\n installed: 0,\n updated: 0,\n skipped: 0,\n bundledCount: 0,\n projectCount: 0,\n deprecatedRemoved: 0,\n };\n\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n for (const deprecatedName of DEPRECATED_SKILLS) {\n const deprecatedDir = join(baseDir, deprecatedName);\n if (existsSync(deprecatedDir)) {\n rmSync(deprecatedDir, { recursive: true, force: true });\n result.deprecatedRemoved++;\n }\n }\n\n const allSkills = collectAllSkills();\n const projectSkills = allSkills.filter((skill) => skill.sourceType === 'project');\n const nonProjectSkills = allSkills.filter((skill) => skill.sourceType !== 'project');\n\n for (const skill of allSkills) {\n const status = getSkillStatus(skill, target, global);\n\n if (status === 'not_installed') {\n installSkill(skill, target, global);\n result.installed++;\n } else if (status === 'outdated') {\n installSkill(skill, target, global);\n result.updated++;\n } else {\n result.skipped++;\n }\n }\n result.bundledCount = nonProjectSkills.length;\n result.projectCount = projectSkills.length;\n\n return result;\n}\n\nexport interface UninstallResult {\n removed: number;\n notFound: number;\n}\n\nexport function uninstallAllSkills(target: TargetConfig, global: boolean): UninstallResult {\n const result: UninstallResult = { removed: 0, notFound: 0 };\n\n const baseDir = global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n for (const deprecatedName of DEPRECATED_SKILLS) {\n const deprecatedDir = join(baseDir, deprecatedName);\n if (existsSync(deprecatedDir)) {\n rmSync(deprecatedDir, { recursive: true, force: true });\n result.removed++;\n }\n }\n\n const allSkills = collectAllSkills();\n for (const skill of allSkills) {\n if (uninstallSkill(skill, target, global)) {\n result.removed++;\n } else {\n result.notFound++;\n }\n }\n\n return result;\n}\n\nexport function getInstallDir(target: TargetConfig, global: boolean): string {\n return global ? getGlobalSkillsDir(target) : getProjectSkillsDir(target);\n}\n\nexport function getTotalSkillCount(): number {\n return collectAllSkills().length;\n}\n\nfunction collectAllSkills(): SkillDefinition[] {\n const projectRoot = findUnityProjectRoot();\n const packageRoot = projectRoot ? resolvePackageRoot(projectRoot) : null;\n const packageSkills = packageRoot ? collectPackageSkillsFromRoot(packageRoot) : [];\n const cliOnlySkills = collectCliOnlySkills();\n const projectSkills = collectProjectSkills(packageRoot ? [packageRoot] : []);\n\n return dedupeSkillsByName([packageSkills, cliOnlySkills, projectSkills]);\n}\n\nfunction collectPackageSkillsFromRoot(packageRoot: string): SkillDefinition[] {\n const mcpToolsRoot = join(\n packageRoot,\n SkillsPathConstants.EDITOR_DIR,\n SkillsPathConstants.API_DIR,\n SkillsPathConstants.MCP_TOOLS_DIR,\n );\n if (!existsSync(mcpToolsRoot)) {\n return [];\n }\n const skills: SkillDefinition[] = [];\n scanEditorFolderForSkills(mcpToolsRoot, skills, 'package');\n return skills;\n}\n\nfunction collectCliOnlySkills(): SkillDefinition[] {\n const cliOnlyRoot = resolve(\n __dirname,\n SkillsPathConstants.DIST_PARENT_DIR,\n SkillsPathConstants.SRC_DIR,\n SkillsPathConstants.SKILLS_DIR,\n SkillsPathConstants.CLI_ONLY_DIR,\n SkillsPathConstants.CLI_ONLY_SUBDIR,\n );\n if (!existsSync(cliOnlyRoot)) {\n return [];\n }\n const skills: SkillDefinition[] = [];\n scanEditorFolderForSkills(cliOnlyRoot, skills, 'cli-only', false);\n return skills;\n}\n\nfunction isExcludedFile(fileName: string): boolean {\n if (EXCLUDED_FILES.has(fileName)) {\n return true;\n }\n for (const pattern of EXCLUDED_FILES) {\n if (fileName.endsWith(pattern)) {\n return true;\n }\n }\n return false;\n}\n\nfunction collectSkillFolderFilesRecursive(\n baseDir: string,\n currentDir: string,\n additionalFiles: Record<string, Buffer>,\n): void {\n const entries = readdirSync(currentDir, { withFileTypes: true });\n for (const entry of entries) {\n if (isExcludedFile(entry.name)) {\n continue;\n }\n const fullPath = join(currentDir, entry.name);\n const relativePath = fullPath.slice(baseDir.length + 1);\n\n if (entry.isDirectory()) {\n if (EXCLUDED_DIRS.has(entry.name)) {\n continue;\n }\n collectSkillFolderFilesRecursive(baseDir, fullPath, additionalFiles);\n } else if (entry.isFile()) {\n if (entry.name === SkillsPathConstants.SKILL_FILE) {\n continue;\n }\n // eslint-disable-next-line security/detect-object-injection -- Paths are controlled by package files, not user input.\n additionalFiles[relativePath] = readFileSync(fullPath);\n }\n }\n}\n\nfunction collectSkillFolderFiles(skillDir: string): Record<string, Buffer> | undefined {\n if (!existsSync(skillDir)) {\n return undefined;\n }\n const additionalFiles: Record<string, Buffer> = {};\n collectSkillFolderFilesRecursive(skillDir, skillDir, additionalFiles);\n return Object.keys(additionalFiles).length > 0 ? additionalFiles : undefined;\n}\n\nfunction dedupeSkillsByName(skillGroups: SkillDefinition[][]): SkillDefinition[] {\n const seenNames = new Set<string>();\n const merged: SkillDefinition[] = [];\n for (const group of skillGroups) {\n for (const skill of group) {\n if (seenNames.has(skill.name)) {\n continue;\n }\n seenNames.add(skill.name);\n merged.push(skill);\n }\n }\n return merged;\n}\n\nfunction resolvePackageRoot(projectRoot: string): string | null {\n const candidates: string[] = [];\n candidates.push(join(projectRoot, SkillsPathConstants.PACKAGES_DIR, SkillsPathConstants.SRC_DIR));\n\n const manifestPaths = resolveManifestPackagePaths(projectRoot);\n for (const manifestPath of manifestPaths) {\n candidates.push(manifestPath);\n }\n\n for (const packageName of SkillsPathConstants.PACKAGE_NAMES) {\n candidates.push(join(projectRoot, SkillsPathConstants.PACKAGES_DIR, packageName));\n }\n\n const directRoot = resolveFirstPackageRoot(candidates);\n if (directRoot) {\n return directRoot;\n }\n\n return resolvePackageCacheRoot(projectRoot);\n}\n\nfunction resolveManifestPackagePaths(projectRoot: string): string[] {\n const manifestPath = join(\n projectRoot,\n SkillsPathConstants.PACKAGES_DIR,\n SkillsPathConstants.MANIFEST_FILE,\n );\n if (!existsSync(manifestPath)) {\n return [];\n }\n const manifestContent = readFileSync(manifestPath, 'utf-8');\n let manifestJson: { dependencies?: Record<string, string> };\n try {\n manifestJson = JSON.parse(manifestContent) as { dependencies?: Record<string, string> };\n } catch (error) {\n // Manifest is user-editable; fail-soft to keep skill installation usable.\n // eslint-disable-next-line no-console -- Warning is required; silent failure would hide manifest issues.\n console.warn('Failed to parse manifest.json; skipping manifest-based path resolution.', error);\n return [];\n }\n const dependencies = manifestJson.dependencies;\n if (!dependencies) {\n return [];\n }\n const resolvedPaths: string[] = [];\n for (const [dependencyName, dependencyValue] of Object.entries(dependencies)) {\n if (!isTargetPackageName(dependencyName)) {\n continue;\n }\n const localPath = resolveLocalDependencyPath(dependencyValue, projectRoot);\n if (localPath) {\n resolvedPaths.push(localPath);\n }\n }\n return resolvedPaths;\n}\n\nfunction resolveLocalDependencyPath(dependencyValue: string, projectRoot: string): string | null {\n if (dependencyValue.startsWith(SkillsPathConstants.FILE_PROTOCOL)) {\n const rawPath = dependencyValue.slice(SkillsPathConstants.FILE_PROTOCOL.length);\n return resolveDependencyPath(rawPath, projectRoot);\n }\n if (dependencyValue.startsWith(SkillsPathConstants.PATH_PROTOCOL)) {\n const rawPath = dependencyValue.slice(SkillsPathConstants.PATH_PROTOCOL.length);\n return resolveDependencyPath(rawPath, projectRoot);\n }\n return null;\n}\n\nfunction resolveDependencyPath(rawPath: string, projectRoot: string): string | null {\n const trimmed = rawPath.trim();\n if (!trimmed) {\n return null;\n }\n let normalizedPath = trimmed;\n if (normalizedPath.startsWith('//')) {\n normalizedPath = normalizedPath.slice(2);\n }\n if (isAbsolute(normalizedPath)) {\n return normalizedPath;\n }\n return resolve(projectRoot, normalizedPath);\n}\n\nfunction resolveFirstPackageRoot(candidates: string[]): string | null {\n for (const candidate of candidates) {\n const resolvedRoot = resolvePackageRootCandidate(candidate);\n if (resolvedRoot) {\n return resolvedRoot;\n }\n }\n return null;\n}\n\nfunction resolvePackageCacheRoot(projectRoot: string): string | null {\n const packageCacheDir = join(\n projectRoot,\n SkillsPathConstants.LIBRARY_DIR,\n SkillsPathConstants.PACKAGE_CACHE_DIR,\n );\n if (!existsSync(packageCacheDir)) {\n return null;\n }\n const entries = readdirSync(packageCacheDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n if (!isTargetPackageCacheDir(entry.name)) {\n continue;\n }\n const candidate = join(packageCacheDir, entry.name);\n const resolvedRoot = resolvePackageRootCandidate(candidate);\n if (resolvedRoot) {\n return resolvedRoot;\n }\n }\n return null;\n}\n\nfunction resolvePackageRootCandidate(candidate: string): string | null {\n if (!existsSync(candidate)) {\n return null;\n }\n const directToolsPath = join(\n candidate,\n SkillsPathConstants.EDITOR_DIR,\n SkillsPathConstants.API_DIR,\n SkillsPathConstants.MCP_TOOLS_DIR,\n );\n if (existsSync(directToolsPath)) {\n return candidate;\n }\n\n const nestedRoot = join(candidate, SkillsPathConstants.PACKAGES_DIR, SkillsPathConstants.SRC_DIR);\n const nestedToolsPath = join(\n nestedRoot,\n SkillsPathConstants.EDITOR_DIR,\n SkillsPathConstants.API_DIR,\n SkillsPathConstants.MCP_TOOLS_DIR,\n );\n if (existsSync(nestedToolsPath)) {\n return nestedRoot;\n }\n return null;\n}\n\nfunction isTargetPackageName(name: string): boolean {\n const normalized = name.toLowerCase();\n return SkillsPathConstants.PACKAGE_NAMES.some(\n (packageName) => packageName.toLowerCase() === normalized,\n );\n}\n\nfunction isTargetPackageCacheDir(dirName: string): boolean {\n const normalized = dirName.toLowerCase();\n return SkillsPathConstants.PACKAGE_NAMES.some((packageName) =>\n normalized.startsWith(`${packageName.toLowerCase()}@`),\n );\n}\n\nfunction isUnderExcludedRoots(targetPath: string, excludedRoots: string[]): boolean {\n for (const root of excludedRoots) {\n if (isPathUnder(targetPath, root)) {\n return true;\n }\n }\n return false;\n}\n\nfunction isPathUnder(childPath: string, parentPath: string): boolean {\n const resolvedChild = resolve(childPath);\n const resolvedParent = resolve(parentPath);\n if (resolvedChild === resolvedParent) {\n return true;\n }\n return resolvedChild.startsWith(resolvedParent + sep);\n}\n", "/**\n * List of deprecated skill names that should be automatically removed during install.\n *\n * When a skill is renamed or removed, add the old name here to ensure\n * users don't end up with stale skill folders after updating.\n */\nexport const DEPRECATED_SKILLS: string[] = [\n 'uloop-capture-window', // renamed to uloop-screenshot in v0.54.0\n];\n", "/**\n * Target configuration for multi-AI tool support.\n * Supports Claude Code and Codex CLI, with extensibility for future targets.\n */\n\nexport type TargetId = 'claude' | 'codex';\n\nexport interface TargetConfig {\n id: TargetId;\n displayName: string;\n projectDir: string;\n skillFileName: string;\n}\n\nexport const TARGET_CONFIGS: Record<TargetId, TargetConfig> = {\n claude: {\n id: 'claude',\n displayName: 'Claude Code',\n projectDir: '.claude',\n skillFileName: 'SKILL.md',\n },\n codex: {\n id: 'codex',\n displayName: 'Codex CLI',\n projectDir: '.codex',\n skillFileName: 'SKILL.md',\n },\n};\n\nexport const ALL_TARGET_IDS: TargetId[] = ['claude', 'codex'];\n\nexport function getTargetConfig(id: TargetId): TargetConfig {\n // eslint-disable-next-line security/detect-object-injection -- id is type-constrained to TargetId union type\n return TARGET_CONFIGS[id];\n}\n", "/**\n * CLI command definitions for skills management.\n */\n\n// CLI commands output to console by design\n/* eslint-disable no-console */\n\nimport { Command } from 'commander';\nimport {\n getAllSkillStatuses,\n installAllSkills,\n uninstallAllSkills,\n getInstallDir,\n getTotalSkillCount,\n} from './skills-manager.js';\nimport { TargetConfig, ALL_TARGET_IDS, getTargetConfig } from './target-config.js';\n\ninterface SkillsOptions {\n global?: boolean;\n claude?: boolean;\n codex?: boolean;\n}\n\nexport function registerSkillsCommand(program: Command): void {\n const skillsCmd = program\n .command('skills')\n .description('Manage uloop skills for AI coding tools');\n\n skillsCmd\n .command('list')\n .description('List all uloop skills and their installation status')\n .option('-g, --global', 'Check global installation')\n .option('--claude', 'Check Claude Code installation')\n .option('--codex', 'Check Codex CLI installation')\n .action((options: SkillsOptions) => {\n const targets = resolveTargets(options);\n const global = options.global ?? false;\n listSkills(targets, global);\n });\n\n skillsCmd\n .command('install')\n .description('Install all uloop skills')\n .option('-g, --global', 'Install to global location')\n .option('--claude', 'Install to Claude Code')\n .option('--codex', 'Install to Codex CLI')\n .action((options: SkillsOptions) => {\n const targets = resolveTargets(options);\n if (targets.length === 0) {\n showTargetGuidance('install');\n return;\n }\n installSkills(targets, options.global ?? false);\n });\n\n skillsCmd\n .command('uninstall')\n .description('Uninstall all uloop skills')\n .option('-g, --global', 'Uninstall from global location')\n .option('--claude', 'Uninstall from Claude Code')\n .option('--codex', 'Uninstall from Codex CLI')\n .action((options: SkillsOptions) => {\n const targets = resolveTargets(options);\n if (targets.length === 0) {\n showTargetGuidance('uninstall');\n return;\n }\n uninstallSkills(targets, options.global ?? false);\n });\n}\n\nfunction resolveTargets(options: SkillsOptions): TargetConfig[] {\n const targets: TargetConfig[] = [];\n if (options.claude) {\n targets.push(getTargetConfig('claude'));\n }\n if (options.codex) {\n targets.push(getTargetConfig('codex'));\n }\n return targets;\n}\n\nfunction showTargetGuidance(command: string): void {\n console.log(`\\nPlease specify at least one target for '${command}':`);\n console.log('');\n console.log('Available targets:');\n console.log(' --claude Claude Code (.claude/skills/)');\n console.log(' --codex Codex CLI (.codex/skills/)');\n console.log('');\n console.log('Options:');\n console.log(' -g, --global Use global location (~/.claude/ or ~/.codex/)');\n console.log('');\n console.log('Examples:');\n console.log(` uloop skills ${command} --claude`);\n console.log(` uloop skills ${command} --codex --global`);\n console.log(` uloop skills ${command} --claude --codex`);\n}\n\nfunction listSkills(targets: TargetConfig[], global: boolean): void {\n const location = global ? 'Global' : 'Project';\n const targetConfigs = targets.length > 0 ? targets : ALL_TARGET_IDS.map(getTargetConfig);\n\n console.log(`\\nuloop Skills Status:`);\n console.log('');\n\n for (const target of targetConfigs) {\n const dir = getInstallDir(target, global);\n\n console.log(`${target.displayName} (${location}):`);\n console.log(`Location: ${dir}`);\n console.log('='.repeat(50));\n\n const statuses = getAllSkillStatuses(target, global);\n\n for (const skill of statuses) {\n const icon = getStatusIcon(skill.status);\n const statusText = getStatusText(skill.status);\n console.log(` ${icon} ${skill.name} (${statusText})`);\n }\n\n console.log('');\n }\n\n console.log(`Total: ${getTotalSkillCount()} skills`);\n}\n\nfunction getStatusIcon(status: string): string {\n switch (status) {\n case 'installed':\n return '\\x1b[32m\u2713\\x1b[0m';\n case 'outdated':\n return '\\x1b[33m\u2191\\x1b[0m';\n case 'not_installed':\n return '\\x1b[31m\u2717\\x1b[0m';\n default:\n return '?';\n }\n}\n\nfunction getStatusText(status: string): string {\n switch (status) {\n case 'installed':\n return 'installed';\n case 'outdated':\n return 'outdated';\n case 'not_installed':\n return 'not installed';\n default:\n return 'unknown';\n }\n}\n\nfunction installSkills(targets: TargetConfig[], global: boolean): void {\n const location = global ? 'global' : 'project';\n\n console.log(`\\nInstalling uloop skills (${location})...`);\n console.log('');\n\n for (const target of targets) {\n const dir = getInstallDir(target, global);\n const result = installAllSkills(target, global);\n\n console.log(`${target.displayName}:`);\n console.log(` \\x1b[32m\u2713\\x1b[0m Installed: ${result.installed}`);\n console.log(` \\x1b[33m\u2191\\x1b[0m Updated: ${result.updated}`);\n console.log(` \\x1b[90m-\\x1b[0m Skipped (up-to-date): ${result.skipped}`);\n if (result.deprecatedRemoved > 0) {\n console.log(` \\x1b[31m\u2717\\x1b[0m Deprecated removed: ${result.deprecatedRemoved}`);\n }\n console.log(` Location: ${dir}`);\n console.log('');\n }\n}\n\nfunction uninstallSkills(targets: TargetConfig[], global: boolean): void {\n const location = global ? 'global' : 'project';\n\n console.log(`\\nUninstalling uloop skills (${location})...`);\n console.log('');\n\n for (const target of targets) {\n const dir = getInstallDir(target, global);\n const result = uninstallAllSkills(target, global);\n\n console.log(`${target.displayName}:`);\n console.log(` \\x1b[31m\u2717\\x1b[0m Removed: ${result.removed}`);\n console.log(` \\x1b[90m-\\x1b[0m Not found: ${result.notFound}`);\n console.log(` Location: ${dir}`);\n console.log('');\n }\n}\n", "/**\n * CLI command for launching Unity projects.\n * Delegates to launch-unity's orchestrateLaunch() for all orchestration logic.\n */\n\n// CLI commands output to console by design\n/* eslint-disable no-console */\n\nimport { Command } from 'commander';\nimport { resolve } from 'path';\n\nimport { orchestrateLaunch } from 'launch-unity';\n\ninterface LaunchCommandOptions {\n restart?: boolean;\n quit?: boolean;\n platform?: string;\n maxDepth?: string;\n addUnityHub?: boolean;\n favorite?: boolean;\n}\n\nexport function registerLaunchCommand(program: Command): void {\n program\n .command('launch')\n .description(\n 'Open a Unity project with the matching Editor version installed by Unity Hub.\\n' +\n 'Auto-detects project path and Unity version from ProjectSettings/ProjectVersion.txt.\\n' +\n \"Run 'uloop launch -h' for all options. Details: https://github.com/hatayama/LaunchUnityCommand\",\n )\n .argument('[project-path]', 'Path to Unity project')\n .option('-r, --restart', 'Kill running Unity and restart')\n .option('-q, --quit', 'Gracefully quit running Unity')\n .option('-p, --platform <platform>', 'Build target (e.g., Android, iOS)')\n .option('--max-depth <n>', 'Search depth when project-path is omitted', '3')\n .option('-a, --add-unity-hub', 'Add to Unity Hub (does not launch)')\n .option('-f, --favorite', 'Add to Unity Hub as favorite (does not launch)')\n .action(async (projectPath: string | undefined, options: LaunchCommandOptions) => {\n await runLaunchCommand(projectPath, options);\n });\n}\n\nfunction parseMaxDepth(value: string | undefined): number {\n if (value === undefined) {\n return 3;\n }\n const parsed: number = parseInt(value, 10);\n if (Number.isNaN(parsed)) {\n console.error(`Error: Invalid --max-depth value: \"${value}\". Must be an integer.`);\n process.exit(1);\n }\n return parsed;\n}\n\nasync function runLaunchCommand(\n projectPath: string | undefined,\n options: LaunchCommandOptions,\n): Promise<void> {\n const maxDepth: number = parseMaxDepth(options.maxDepth);\n\n await orchestrateLaunch({\n projectPath: projectPath ? resolve(projectPath) : undefined,\n searchRoot: process.cwd(),\n searchMaxDepth: maxDepth,\n platform: options.platform,\n unityArgs: [],\n restart: options.restart === true,\n quit: options.quit === true,\n addUnityHub: options.addUnityHub === true,\n favoriteUnityHub: options.favorite === true,\n });\n}\n", "/**\n * launch-unity core library functions.\n * Pure library code without CLI entry point or side effects.\n */\nimport { execFile, spawn } from \"node:child_process\";\nimport { existsSync, readFileSync, readdirSync, lstatSync, realpathSync } from \"node:fs\";\nimport { rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { ensureProjectEntryAndUpdate, updateLastModifiedIfExists, getProjectCliArgs, parseCliArgs, groupCliArgs } from \"./unityHub.js\";\nconst execFileAsync = promisify(execFile);\nconst UNITY_EXECUTABLE_PATTERN_MAC = /Unity\\.app\\/Contents\\/MacOS\\/Unity/i;\nconst UNITY_EXECUTABLE_PATTERN_WINDOWS = /Unity\\.exe/i;\nconst PROJECT_PATH_PATTERN = /-(?:projectPath|projectpath)(?:=|\\s+)(\"[^\"]+\"|'[^']+'|[^\\s\"']+)/i;\nconst PROCESS_LIST_COMMAND_MAC = \"ps\";\nconst PROCESS_LIST_ARGS_MAC = [\"-axo\", \"pid=,command=\", \"-ww\"];\nconst WINDOWS_POWERSHELL = \"powershell\";\nconst UNITY_LOCKFILE_NAME = \"UnityLockfile\";\nconst TEMP_DIRECTORY_NAME = \"Temp\";\nexport function parseArgs(argv) {\n const args = argv.slice(2);\n const doubleDashIndex = args.indexOf(\"--\");\n let cliArgs = doubleDashIndex >= 0 ? args.slice(0, doubleDashIndex) : args;\n const unityArgs = doubleDashIndex >= 0 ? args.slice(doubleDashIndex + 1) : [];\n let subcommand;\n const firstToken = cliArgs[0];\n if (firstToken === \"update\") {\n subcommand = \"update\";\n cliArgs = cliArgs.slice(1);\n }\n const positionals = [];\n let maxDepth = 3; // default 3; -1 means unlimited\n let restart = false;\n let quit = false;\n let addUnityHub = false;\n let favoriteUnityHub = false;\n let platform;\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i] ?? \"\";\n if (arg === \"--help\" || arg === \"-h\") {\n continue; // Skip help flag - caller should handle\n }\n if (arg === \"--version\" || arg === \"-v\") {\n continue; // Skip version flag - caller should handle\n }\n if (arg === \"-r\" || arg === \"--restart\") {\n restart = true;\n continue;\n }\n if (arg === \"-q\" || arg === \"--quit\") {\n quit = true;\n continue;\n }\n if (arg === \"-u\" ||\n arg === \"-a\" ||\n arg === \"--unity-hub-entry\" ||\n arg === \"--add-unity-hub\") {\n addUnityHub = true;\n continue;\n }\n if (arg === \"-f\" || arg === \"--favorite\") {\n favoriteUnityHub = true;\n continue;\n }\n if (arg === \"-p\" || arg === \"--platform\") {\n const next = cliArgs[i + 1];\n if (typeof next === \"string\" && !next.startsWith(\"-\")) {\n platform = next;\n i += 1;\n }\n continue;\n }\n if (arg.startsWith(\"--platform=\")) {\n const value = arg.slice(\"--platform=\".length);\n if (value.length > 0) {\n platform = value;\n }\n continue;\n }\n if (arg.startsWith(\"--max-depth\")) {\n const parts = arg.split(\"=\");\n if (parts.length === 2) {\n const value = Number.parseInt(parts[1] ?? \"\", 10);\n if (Number.isFinite(value)) {\n maxDepth = value;\n }\n continue;\n }\n const next = cliArgs[i + 1];\n if (typeof next === \"string\" && !next.startsWith(\"-\")) {\n const value = Number.parseInt(next, 10);\n if (Number.isFinite(value)) {\n maxDepth = value;\n }\n i += 1;\n continue;\n }\n continue;\n }\n if (arg.startsWith(\"-\")) {\n console.warn(`Warning: Unknown option ignored: ${arg}`);\n continue;\n }\n positionals.push(arg);\n }\n let projectPath;\n if (positionals.length > 0) {\n projectPath = resolve(positionals[0] ?? \"\");\n }\n if (positionals.length > 1) {\n const ignored = positionals.slice(1).join(\", \");\n console.warn(`Warning: Extra arguments ignored: ${ignored}`);\n console.warn(\" Use -p option for platform: launch-unity -p <platform>\");\n }\n const options = {\n unityArgs,\n searchMaxDepth: maxDepth,\n restart,\n quit,\n addUnityHub,\n favoriteUnityHub,\n };\n if (subcommand) {\n options.subcommand = subcommand;\n }\n if (projectPath !== undefined) {\n options.projectPath = projectPath;\n }\n if (platform !== undefined) {\n options.platform = platform;\n }\n return options;\n}\nexport function getUnityVersion(projectPath) {\n const versionFile = join(projectPath, \"ProjectSettings\", \"ProjectVersion.txt\");\n if (!existsSync(versionFile)) {\n throw new Error(`ProjectVersion.txt not found at ${versionFile}. This does not appear to be a Unity project.`);\n }\n const content = readFileSync(versionFile, \"utf8\");\n const version = content.match(/m_EditorVersion:\\s*([^\\s\\n]+)/)?.[1];\n if (!version) {\n throw new Error(`Could not extract Unity version from ${versionFile}`);\n }\n return version;\n}\nfunction getUnityPathWindows(version) {\n const candidates = [];\n const programFiles = process.env[\"PROGRAMFILES\"];\n const programFilesX86 = process.env[\"PROGRAMFILES(X86)\"];\n const localAppData = process.env[\"LOCALAPPDATA\"];\n const addCandidate = (base) => {\n if (!base) {\n return;\n }\n candidates.push(join(base, \"Unity\", \"Hub\", \"Editor\", version, \"Editor\", \"Unity.exe\"));\n };\n addCandidate(programFiles);\n addCandidate(programFilesX86);\n addCandidate(localAppData);\n candidates.push(join(\"C:\\\\\", \"Program Files\", \"Unity\", \"Hub\", \"Editor\", version, \"Editor\", \"Unity.exe\"));\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return candidates[0] ?? join(\"C:\\\\\", \"Program Files\", \"Unity\", \"Hub\", \"Editor\", version, \"Editor\", \"Unity.exe\");\n}\nfunction getUnityPath(version) {\n if (process.platform === \"darwin\") {\n return `/Applications/Unity/Hub/Editor/${version}/Unity.app/Contents/MacOS/Unity`;\n }\n if (process.platform === \"win32\") {\n return getUnityPathWindows(version);\n }\n return `/Applications/Unity/Hub/Editor/${version}/Unity.app/Contents/MacOS/Unity`;\n}\nconst removeTrailingSeparators = (target) => {\n let trimmed = target;\n while (trimmed.length > 1 && (trimmed.endsWith(\"/\") || trimmed.endsWith(\"\\\\\"))) {\n trimmed = trimmed.slice(0, -1);\n }\n return trimmed;\n};\nconst normalizePath = (target) => {\n const resolvedPath = resolve(target);\n const trimmed = removeTrailingSeparators(resolvedPath);\n return trimmed;\n};\nconst toComparablePath = (value) => {\n return value.replace(/\\\\/g, \"/\").toLocaleLowerCase();\n};\nconst pathsEqual = (left, right) => {\n return toComparablePath(normalizePath(left)) === toComparablePath(normalizePath(right));\n};\nfunction extractProjectPath(command) {\n const match = command.match(PROJECT_PATH_PATTERN);\n if (!match) {\n return undefined;\n }\n const raw = match[1];\n if (!raw) {\n return undefined;\n }\n const trimmed = raw.trim();\n if (trimmed.startsWith(\"\\\"\") && trimmed.endsWith(\"\\\"\")) {\n return trimmed.slice(1, -1);\n }\n if (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\")) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\nconst isUnityAuxiliaryProcess = (command) => {\n const normalizedCommand = command.toLowerCase();\n if (normalizedCommand.includes(\"-batchmode\")) {\n return true;\n }\n return normalizedCommand.includes(\"assetimportworker\");\n};\nasync function listUnityProcessesMac() {\n let stdout = \"\";\n try {\n const result = await execFileAsync(PROCESS_LIST_COMMAND_MAC, PROCESS_LIST_ARGS_MAC);\n stdout = result.stdout;\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Failed to retrieve Unity process list: ${message}`);\n return [];\n }\n const lines = stdout\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n const processes = [];\n for (const line of lines) {\n const match = line.match(/^(\\d+)\\s+(.*)$/);\n if (!match) {\n continue;\n }\n const pidValue = Number.parseInt(match[1] ?? \"\", 10);\n if (!Number.isFinite(pidValue)) {\n continue;\n }\n const command = match[2] ?? \"\";\n if (!UNITY_EXECUTABLE_PATTERN_MAC.test(command)) {\n continue;\n }\n if (isUnityAuxiliaryProcess(command)) {\n continue;\n }\n const projectArgument = extractProjectPath(command);\n if (!projectArgument) {\n continue;\n }\n processes.push({\n pid: pidValue,\n projectPath: normalizePath(projectArgument),\n });\n }\n return processes;\n}\nasync function listUnityProcessesWindows() {\n const scriptLines = [\n \"$ErrorActionPreference = 'Stop'\",\n \"$processes = Get-CimInstance Win32_Process -Filter \\\"Name = 'Unity.exe'\\\" | Where-Object { $_.CommandLine }\",\n \"foreach ($process in $processes) {\",\n \" $commandLine = $process.CommandLine -replace \\\"`r\\\", ' ' -replace \\\"`n\\\", ' '\",\n \" Write-Output (\\\"{0}|{1}\\\" -f $process.ProcessId, $commandLine)\",\n \"}\",\n ];\n let stdout = \"\";\n try {\n const result = await execFileAsync(WINDOWS_POWERSHELL, [\"-NoProfile\", \"-Command\", scriptLines.join(\"\\n\")]);\n stdout = result.stdout ?? \"\";\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Failed to retrieve Unity process list on Windows: ${message}`);\n return [];\n }\n const lines = stdout\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n const processes = [];\n for (const line of lines) {\n const delimiterIndex = line.indexOf(\"|\");\n if (delimiterIndex < 0) {\n continue;\n }\n const pidText = line.slice(0, delimiterIndex).trim();\n const command = line.slice(delimiterIndex + 1).trim();\n const pidValue = Number.parseInt(pidText, 10);\n if (!Number.isFinite(pidValue)) {\n continue;\n }\n if (!UNITY_EXECUTABLE_PATTERN_WINDOWS.test(command)) {\n continue;\n }\n if (isUnityAuxiliaryProcess(command)) {\n continue;\n }\n const projectArgument = extractProjectPath(command);\n if (!projectArgument) {\n continue;\n }\n processes.push({\n pid: pidValue,\n projectPath: normalizePath(projectArgument),\n });\n }\n return processes;\n}\nasync function listUnityProcesses() {\n if (process.platform === \"darwin\") {\n return await listUnityProcessesMac();\n }\n if (process.platform === \"win32\") {\n return await listUnityProcessesWindows();\n }\n return [];\n}\nexport async function findRunningUnityProcess(projectPath) {\n const normalizedTarget = normalizePath(projectPath);\n const processes = await listUnityProcesses();\n return processes.find((candidate) => pathsEqual(candidate.projectPath, normalizedTarget));\n}\nexport async function focusUnityProcess(pid) {\n if (process.platform === \"darwin\") {\n await focusUnityProcessMac(pid);\n return;\n }\n if (process.platform === \"win32\") {\n await focusUnityProcessWindows(pid);\n }\n}\nasync function focusUnityProcessMac(pid) {\n const script = `tell application \"System Events\" to set frontmost of (first process whose unix id is ${pid}) to true`;\n try {\n await execFileAsync(\"osascript\", [\"-e\", script]);\n console.log(\"Brought existing Unity to the front.\");\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to bring Unity to front: ${message}`);\n }\n}\nasync function focusUnityProcessWindows(pid) {\n const addTypeLines = [\n \"Add-Type -TypeDefinition @\\\"\",\n \"using System;\",\n \"using System.Runtime.InteropServices;\",\n \"public static class Win32Interop {\",\n \" [DllImport(\\\"user32.dll\\\")] public static extern bool SetForegroundWindow(IntPtr hWnd);\",\n \" [DllImport(\\\"user32.dll\\\")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);\",\n \"}\",\n \"\\\"@\",\n ];\n const scriptLines = [\n \"$ErrorActionPreference = 'Stop'\",\n ...addTypeLines,\n `try { $process = Get-Process -Id ${pid} -ErrorAction Stop } catch { return }`,\n \"$handle = $process.MainWindowHandle\",\n \"if ($handle -eq 0) { return }\",\n \"[Win32Interop]::ShowWindowAsync($handle, 9) | Out-Null\",\n \"[Win32Interop]::SetForegroundWindow($handle) | Out-Null\",\n ];\n try {\n await execFileAsync(WINDOWS_POWERSHELL, [\"-NoProfile\", \"-Command\", scriptLines.join(\"\\n\")]);\n console.log(\"Brought existing Unity to the front.\");\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to bring Unity to front on Windows: ${message}`);\n }\n}\nexport async function handleStaleLockfile(projectPath) {\n const tempDirectoryPath = join(projectPath, TEMP_DIRECTORY_NAME);\n const lockfilePath = join(tempDirectoryPath, UNITY_LOCKFILE_NAME);\n if (!existsSync(lockfilePath)) {\n return;\n }\n console.log(`UnityLockfile found without active Unity process: ${lockfilePath}`);\n console.log(\"Assuming previous crash. Cleaning Temp directory and continuing launch.\");\n try {\n await rm(tempDirectoryPath, { recursive: true, force: true });\n console.log(\"Deleted Temp directory.\");\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to delete Temp directory: ${message}`);\n }\n try {\n await rm(lockfilePath, { force: true });\n console.log(\"Deleted UnityLockfile.\");\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to delete UnityLockfile: ${message}`);\n }\n console.log();\n}\nconst KILL_POLL_INTERVAL_MS = 100;\nconst KILL_TIMEOUT_MS = 10000;\nconst GRACEFUL_QUIT_TIMEOUT_MS = 10000;\nfunction isProcessAlive(pid) {\n try {\n process.kill(pid, 0);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction killProcess(pid) {\n try {\n process.kill(pid, \"SIGKILL\");\n }\n catch {\n // Process already exited\n }\n}\nasync function waitForProcessExit(pid, timeoutMs) {\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (!isProcessAlive(pid)) {\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, KILL_POLL_INTERVAL_MS));\n }\n return false;\n}\nexport async function killRunningUnity(projectPath) {\n const processInfo = await findRunningUnityProcess(projectPath);\n if (!processInfo) {\n console.log(\"No running Unity process found for this project.\");\n console.log();\n return;\n }\n const pid = processInfo.pid;\n console.log(`Killing Unity (PID: ${pid})...`);\n killProcess(pid);\n const exited = await waitForProcessExit(pid, KILL_TIMEOUT_MS);\n if (!exited) {\n throw new Error(`Failed to kill Unity (PID: ${pid}) within ${KILL_TIMEOUT_MS / 1000}s.`);\n }\n console.log(\"Unity killed.\");\n console.log();\n}\nasync function sendGracefulQuitMac(pid) {\n // System Events quit and \"tell application to quit\" leave UnityLockfile behind,\n // so we send Cmd+Q keystroke to trigger Unity's normal user-initiated shutdown flow\n const script = [\n 'tell application \"System Events\"',\n ` set frontmost of (first process whose unix id is ${pid}) to true`,\n ' keystroke \"q\" using {command down}',\n \"end tell\",\n ].join(\"\\n\");\n try {\n await execFileAsync(\"osascript\", [\"-e\", script]);\n }\n catch {\n // Process may have already exited\n }\n}\nasync function sendGracefulQuitWindows(pid) {\n // process.kill(pid, \"SIGTERM\") forcefully kills on Windows, so use CloseMainWindow() to send WM_CLOSE\n const scriptLines = [\n \"$ErrorActionPreference = 'Stop'\",\n `try { $proc = Get-Process -Id ${pid} -ErrorAction Stop; $proc.CloseMainWindow() | Out-Null } catch { }`,\n ];\n try {\n await execFileAsync(WINDOWS_POWERSHELL, [\"-NoProfile\", \"-Command\", scriptLines.join(\"\\n\")]);\n }\n catch {\n // Process may have already exited\n }\n}\nasync function sendGracefulQuit(pid) {\n if (process.platform === \"darwin\") {\n await sendGracefulQuitMac(pid);\n return;\n }\n if (process.platform === \"win32\") {\n await sendGracefulQuitWindows(pid);\n return;\n }\n}\nexport async function quitRunningUnity(projectPath) {\n const processInfo = await findRunningUnityProcess(projectPath);\n if (!processInfo) {\n console.log(\"No running Unity process found for this project.\");\n return;\n }\n const pid = processInfo.pid;\n console.log(`Quitting Unity (PID: ${pid})...`);\n await sendGracefulQuit(pid);\n console.log(`Sent graceful quit signal. Waiting up to ${GRACEFUL_QUIT_TIMEOUT_MS / 1000}s...`);\n const exitedGracefully = await waitForProcessExit(pid, GRACEFUL_QUIT_TIMEOUT_MS);\n if (exitedGracefully) {\n console.log(\"Unity quit gracefully.\");\n return;\n }\n console.log(\"Unity did not respond to graceful quit. Force killing...\");\n killProcess(pid);\n const exitedAfterKill = await waitForProcessExit(pid, KILL_TIMEOUT_MS);\n if (!exitedAfterKill) {\n throw new Error(`Failed to kill Unity (PID: ${pid}) within ${KILL_TIMEOUT_MS / 1000}s.`);\n }\n console.log(\"Unity force killed.\");\n}\nfunction hasBuildTargetArg(unityArgs) {\n for (const arg of unityArgs) {\n if (arg === \"-buildTarget\") {\n return true;\n }\n if (arg.startsWith(\"-buildTarget=\")) {\n return true;\n }\n }\n return false;\n}\nconst EXCLUDED_DIR_NAMES = new Set([\n \"library\",\n \"temp\",\n \"logs\",\n \"obj\",\n \".git\",\n \"node_modules\",\n \".idea\",\n \".vscode\",\n \".vs\",\n]);\nfunction isUnityProjectRoot(candidateDir) {\n const versionFile = join(candidateDir, \"ProjectSettings\", \"ProjectVersion.txt\");\n return existsSync(versionFile);\n}\nfunction listSubdirectoriesSorted(dir) {\n let entries = [];\n try {\n const dirents = readdirSync(dir, { withFileTypes: true });\n const subdirs = dirents\n .filter((d) => d.isDirectory())\n .map((d) => d.name)\n .filter((name) => !EXCLUDED_DIR_NAMES.has(name.toLocaleLowerCase()));\n subdirs.sort((a, b) => a.localeCompare(b));\n entries = subdirs.map((name) => join(dir, name));\n }\n catch {\n // Ignore directories we cannot read\n entries = [];\n }\n return entries;\n}\nexport function findUnityProjectBfs(rootDir, maxDepth) {\n const queue = [];\n let rootCanonical;\n try {\n rootCanonical = realpathSync(rootDir);\n }\n catch {\n rootCanonical = rootDir;\n }\n queue.push({ dir: rootCanonical, depth: 0 });\n const visited = new Set([toComparablePath(normalizePath(rootCanonical))]);\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current) {\n continue;\n }\n const { dir, depth } = current;\n if (isUnityProjectRoot(dir)) {\n return normalizePath(dir);\n }\n const canDescend = maxDepth === -1 || depth < maxDepth;\n if (!canDescend) {\n continue;\n }\n const children = listSubdirectoriesSorted(dir);\n for (const child of children) {\n let childCanonical = child;\n try {\n const stat = lstatSync(child);\n if (stat.isSymbolicLink()) {\n try {\n childCanonical = realpathSync(child);\n }\n catch {\n // Broken symlink: skip\n continue;\n }\n }\n }\n catch {\n continue;\n }\n const key = toComparablePath(normalizePath(childCanonical));\n if (visited.has(key)) {\n continue;\n }\n visited.add(key);\n queue.push({ dir: childCanonical, depth: depth + 1 });\n }\n }\n return undefined;\n}\nexport async function launch(opts) {\n const { projectPath, platform, unityArgs, unityVersion } = opts;\n const unityPath = getUnityPath(unityVersion);\n if (!existsSync(unityPath)) {\n throw new Error(`Unity ${unityVersion} not found at ${unityPath}. Please install Unity through Unity Hub.`);\n }\n console.log(\"Opening Unity...\");\n console.log(`Project Path: ${projectPath}`);\n console.log(`Detected Unity version: ${unityVersion}`);\n const args = [\"-projectPath\", projectPath];\n const unityArgsContainBuildTarget = hasBuildTargetArg(unityArgs);\n if (platform && platform.length > 0 && !unityArgsContainBuildTarget) {\n args.push(\"-buildTarget\", platform);\n }\n const hubCliArgs = await getProjectCliArgs(projectPath);\n if (hubCliArgs.length > 0) {\n console.log(\"Unity Hub launch options:\");\n for (const line of groupCliArgs(hubCliArgs)) {\n console.log(` ${line}`);\n }\n args.push(...hubCliArgs);\n }\n else {\n console.log(\"Unity Hub launch options: none\");\n }\n if (unityArgs.length > 0) {\n args.push(...unityArgs);\n }\n return new Promise((resolve, reject) => {\n const child = spawn(unityPath, args, {\n stdio: \"ignore\",\n detached: true,\n // Git Bash (MSYS) \u304CWindows \u30D1\u30B9\u3092Unix \u5F62\u5F0F\u306B\u81EA\u52D5\u5909\u63DB\u3059\u308B\u306E\u3092\u9632\u3050\n env: {\n ...process.env,\n MSYS_NO_PATHCONV: \"1\",\n },\n });\n const handleError = (error) => {\n child.removeListener(\"spawn\", handleSpawn);\n reject(new Error(`Failed to launch Unity: ${error.message}`));\n };\n const handleSpawn = () => {\n child.removeListener(\"error\", handleError);\n child.unref();\n resolve();\n };\n child.once(\"error\", handleError);\n child.once(\"spawn\", handleSpawn);\n });\n}\nexport async function orchestrateLaunch(options) {\n if (options.quit && options.restart) {\n throw new Error(\"--quit and --restart cannot be used together.\");\n }\n let resolvedProjectPath = options.projectPath;\n if (!resolvedProjectPath) {\n const depthInfo = options.searchMaxDepth === -1 ? \"unlimited\" : String(options.searchMaxDepth);\n console.log(`Searching for Unity project under ${options.searchRoot} (max-depth: ${depthInfo})...`);\n const found = findUnityProjectBfs(options.searchRoot, options.searchMaxDepth);\n if (!found) {\n throw new Error(`Unity project not found under ${options.searchRoot}.`);\n }\n console.log();\n resolvedProjectPath = found;\n }\n if (!existsSync(resolvedProjectPath)) {\n throw new Error(`Project directory not found: ${resolvedProjectPath}`);\n }\n const unityVersion = getUnityVersion(resolvedProjectPath);\n if (options.addUnityHub || options.favoriteUnityHub) {\n console.log(`Detected Unity version: ${unityVersion}`);\n console.log(`Project Path: ${resolvedProjectPath}`);\n const now = new Date();\n await ensureProjectEntryAndUpdate(resolvedProjectPath, unityVersion, now, options.favoriteUnityHub);\n console.log(\"Unity Hub entry updated.\");\n return { action: \"hub-updated\", projectPath: resolvedProjectPath, unityVersion };\n }\n if (options.quit) {\n await quitRunningUnity(resolvedProjectPath);\n return { action: \"quit\", projectPath: resolvedProjectPath };\n }\n const isRestart = options.restart;\n if (isRestart) {\n await killRunningUnity(resolvedProjectPath);\n }\n else {\n const runningProcess = await findRunningUnityProcess(resolvedProjectPath);\n if (runningProcess) {\n console.log(`Unity process already running for project: ${resolvedProjectPath} (PID: ${runningProcess.pid})`);\n await focusUnityProcess(runningProcess.pid);\n return { action: \"focused\", projectPath: resolvedProjectPath, pid: runningProcess.pid };\n }\n }\n await handleStaleLockfile(resolvedProjectPath);\n const resolved = {\n projectPath: resolvedProjectPath,\n platform: options.platform,\n unityArgs: options.unityArgs,\n unityVersion,\n };\n await launch(resolved);\n // Hub timestamp update is non-critical external I/O; failure should not block after successful launch\n const now = new Date();\n try {\n await updateLastModifiedIfExists(resolvedProjectPath, now);\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Failed to update Unity Hub lastModified: ${message}`);\n }\n const action = isRestart ? \"killed-and-launched\" : \"launched\";\n return { action, projectPath: resolvedProjectPath, unityVersion };\n}\n// Re-export Unity Hub functions\nexport { ensureProjectEntryAndUpdate, updateLastModifiedIfExists, getProjectCliArgs, parseCliArgs, groupCliArgs };\n", "import { readFile, writeFile } from \"node:fs/promises\";\nimport { realpathSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport assert from \"node:assert\";\nconst resolveUnityHubProjectFiles = () => {\n if (process.platform === \"darwin\") {\n const home = process.env.HOME;\n if (!home) {\n return [];\n }\n const base = join(home, \"Library\", \"Application Support\", \"UnityHub\");\n return [join(base, \"projects-v1.json\"), join(base, \"projects.json\")];\n }\n if (process.platform === \"win32\") {\n const appData = process.env.APPDATA;\n if (!appData) {\n return [];\n }\n const base = join(appData, \"UnityHub\");\n return [join(base, \"projects-v1.json\"), join(base, \"projects.json\")];\n }\n return [];\n};\nconst removeTrailingSeparators = (target) => {\n let trimmed = target;\n while (trimmed.length > 1 && (trimmed.endsWith(\"/\") || trimmed.endsWith(\"\\\\\"))) {\n trimmed = trimmed.slice(0, -1);\n }\n return trimmed;\n};\nconst normalizePath = (target) => {\n const resolvedPath = resolve(target);\n return removeTrailingSeparators(resolvedPath);\n};\nconst resolvePathWithActualCase = (target) => {\n try {\n return removeTrailingSeparators(realpathSync.native(target));\n }\n catch {\n return normalizePath(target);\n }\n};\nconst toComparablePath = (value) => {\n return value.replace(/\\\\/g, \"/\").toLocaleLowerCase();\n};\nconst pathsEqual = (left, right) => {\n return toComparablePath(normalizePath(left)) === toComparablePath(normalizePath(right));\n};\nconst safeParseProjectsJson = (content) => {\n try {\n return JSON.parse(content);\n }\n catch {\n return undefined;\n }\n};\nconst logDebug = (message) => {\n if (process.env[\"LAUNCH_UNITY_DEBUG\"] === \"1\") {\n console.log(`[unityHub] ${message}`);\n }\n};\nexport const ensureProjectEntryAndUpdate = async (projectPath, version, when, setFavorite = false) => {\n const canonicalProjectPath = resolvePathWithActualCase(projectPath);\n const projectTitle = basename(canonicalProjectPath);\n const containingFolderPath = dirname(canonicalProjectPath);\n const candidates = resolveUnityHubProjectFiles();\n if (candidates.length === 0) {\n logDebug(\"No Unity Hub project files found.\");\n return;\n }\n for (const path of candidates) {\n logDebug(`Trying Unity Hub file: ${path}`);\n const content = await readFile(path, \"utf8\").catch(() => undefined);\n if (!content) {\n logDebug(\"Read failed or empty content, skipping.\");\n continue;\n }\n const json = safeParseProjectsJson(content);\n if (!json) {\n logDebug(\"Parse failed, skipping.\");\n continue;\n }\n const data = { ...(json.data ?? {}) };\n const existingKey = Object.keys(data).find((key) => {\n const entryPath = data[key]?.path;\n return entryPath ? pathsEqual(entryPath, projectPath) : false;\n });\n const targetKey = existingKey ?? canonicalProjectPath;\n const existingEntry = existingKey ? data[existingKey] : undefined;\n logDebug(existingKey\n ? `Found existing entry for project (key=${existingKey}). Updating lastModified.`\n : `No existing entry. Adding new entry (key=${targetKey}).`);\n const updatedEntry = {\n ...existingEntry,\n path: existingEntry?.path ?? canonicalProjectPath,\n containingFolderPath: existingEntry?.containingFolderPath ?? containingFolderPath,\n version: existingEntry?.version ?? version,\n title: existingEntry?.title ?? projectTitle,\n lastModified: when.getTime(),\n isFavorite: setFavorite ? true : (existingEntry?.isFavorite ?? false),\n };\n const updatedJson = {\n ...json,\n data: {\n ...data,\n [targetKey]: updatedEntry,\n },\n };\n try {\n await writeFile(path, JSON.stringify(updatedJson, undefined, 2), \"utf8\");\n logDebug(\"Write succeeded.\");\n }\n catch (error) {\n logDebug(`Write failed: ${error instanceof Error ? error.message : String(error)}`);\n // Ignore write errors to avoid breaking CLI flow\n }\n return;\n }\n};\nexport const updateLastModifiedIfExists = async (projectPath, when) => {\n const candidates = resolveUnityHubProjectFiles();\n if (candidates.length === 0) {\n return;\n }\n // Try primary then fallback only if read/parse fails\n for (const path of candidates) {\n let content;\n let json;\n try {\n content = await readFile(path, \"utf8\");\n }\n catch {\n // Try next candidate on read error\n continue;\n }\n try {\n json = JSON.parse(content);\n }\n catch {\n // Try next candidate on parse error\n continue;\n }\n if (!json.data) {\n // If file is readable but has no data, do not attempt fallback\n return;\n }\n const projectKey = Object.keys(json.data).find((key) => {\n const entryPath = json.data?.[key]?.path;\n return entryPath ? pathsEqual(entryPath, projectPath) : false;\n });\n if (!projectKey) {\n // Project not registered in Hub; do nothing\n return;\n }\n const original = json.data[projectKey];\n if (!original) {\n return;\n }\n json.data[projectKey] = {\n ...original,\n lastModified: when.getTime(),\n };\n try {\n await writeFile(path, JSON.stringify(json, undefined, 2), \"utf8\");\n }\n catch {\n // Swallow write errors per requirement to not crash CLI\n }\n return;\n }\n};\nconst resolveUnityHubProjectsInfoFile = () => {\n if (process.platform === \"darwin\") {\n const home = process.env.HOME;\n if (!home) {\n return undefined;\n }\n return join(home, \"Library\", \"Application Support\", \"UnityHub\", \"projectsInfo.json\");\n }\n if (process.platform === \"win32\") {\n const appData = process.env.APPDATA;\n if (!appData) {\n return undefined;\n }\n return join(appData, \"UnityHub\", \"projectsInfo.json\");\n }\n return undefined;\n};\nexport const parseCliArgs = (cliArgsString) => {\n assert(cliArgsString !== null && cliArgsString !== undefined, \"cliArgsString must not be null\");\n const trimmed = cliArgsString.trim();\n if (trimmed.length === 0) {\n return [];\n }\n const tokens = [];\n let current = \"\";\n let inQuote = null;\n for (const char of trimmed) {\n if (inQuote !== null) {\n if (char === inQuote) {\n tokens.push(current);\n current = \"\";\n inQuote = null;\n }\n else {\n current += char;\n }\n continue;\n }\n if (char === '\"' || char === \"'\") {\n inQuote = char;\n continue;\n }\n if (char === \" \") {\n if (current.length > 0) {\n tokens.push(current);\n current = \"\";\n }\n continue;\n }\n current += char;\n }\n if (current.length > 0) {\n tokens.push(current);\n }\n return tokens;\n};\n// \"-flag value\" pairs are grouped into single strings for display (e.g. [\"-foo\", \"bar\", \"-baz\", \"qux\"] -> [\"-foo bar\", \"-baz qux\"])\nexport const groupCliArgs = (args) => {\n const groups = [];\n let current = \"\";\n for (const arg of args) {\n if (arg.startsWith(\"-\") && current.length > 0) {\n groups.push(current);\n current = arg;\n }\n else if (current.length === 0) {\n current = arg;\n }\n else {\n current += ` ${arg}`;\n }\n }\n if (current.length > 0) {\n groups.push(current);\n }\n return groups;\n};\nexport const getProjectCliArgs = async (projectPath) => {\n assert(projectPath !== null && projectPath !== undefined, \"projectPath must not be null\");\n const infoFilePath = resolveUnityHubProjectsInfoFile();\n if (!infoFilePath) {\n logDebug(\"projectsInfo.json path could not be resolved.\");\n return [];\n }\n logDebug(`Reading projectsInfo.json: ${infoFilePath}`);\n let content;\n try {\n content = await readFile(infoFilePath, \"utf8\");\n }\n catch {\n logDebug(\"projectsInfo.json not found or not readable.\");\n return [];\n }\n let json;\n try {\n json = JSON.parse(content);\n }\n catch {\n logDebug(\"projectsInfo.json parse failed.\");\n return [];\n }\n const normalizedProjectPath = normalizePath(projectPath);\n const projectKey = Object.keys(json).find((key) => pathsEqual(key, normalizedProjectPath));\n if (!projectKey) {\n logDebug(`No entry found for project: ${normalizedProjectPath}`);\n return [];\n }\n const projectInfo = json[projectKey];\n const cliArgsString = projectInfo?.cliArgs;\n if (!cliArgsString || cliArgsString.trim().length === 0) {\n logDebug(\"cliArgs is empty or not defined.\");\n return [];\n }\n const parsed = parseCliArgs(cliArgsString);\n logDebug(`Parsed Unity Hub cliArgs: ${JSON.stringify(parsed)}`);\n return parsed;\n};\n", "/**\n * CLI command for focusing Unity Editor window.\n * Uses OS-level commands via launch-unity library.\n * Works even when Unity is busy (compiling, domain reload).\n */\n\n// CLI commands output to console by design\n/* eslint-disable no-console */\n\nimport { Command } from 'commander';\nimport { findRunningUnityProcess, focusUnityProcess } from 'launch-unity';\nimport { findUnityProjectRoot } from '../project-root.js';\n\nexport function registerFocusWindowCommand(program: Command): void {\n program\n .command('focus-window')\n .description('Bring Unity Editor window to front using OS-level commands')\n .action(async () => {\n const projectRoot = findUnityProjectRoot();\n if (projectRoot === null) {\n console.error(\n JSON.stringify({\n Success: false,\n Message: 'Unity project not found',\n }),\n );\n process.exit(1);\n }\n\n const runningProcess = await findRunningUnityProcess(projectRoot);\n if (!runningProcess) {\n console.error(\n JSON.stringify({\n Success: false,\n Message: 'No running Unity process found for this project',\n }),\n );\n process.exit(1);\n }\n\n try {\n await focusUnityProcess(runningProcess.pid);\n console.log(\n JSON.stringify({\n Success: true,\n Message: `Unity Editor window focused (PID: ${runningProcess.pid})`,\n }),\n );\n } catch (error) {\n console.error(\n JSON.stringify({\n Success: false,\n Message: `Failed to focus Unity window: ${error instanceof Error ? error.message : String(error)}`,\n }),\n );\n process.exit(1);\n }\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["exports", "CommanderError", "InvalidArgumentError", "exports", "InvalidArgumentError", "Argument", "exports", "Help", "cmd", "exports", "InvalidArgumentError", "Option", "str", "exports", "exports", "process", "Argument", "CommanderError", "Help", "Option", "Command", "option", "path", "exports", "Argument", "Command", "CommanderError", "InvalidArgumentError", "Help", "Option", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "valid", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "lt", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "lt", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "require_valid", "exports", "module", "exports", "module", "lt", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "lt", "require_semver", "exports", "module", "valid", "lt", "import_fs", "import_path", "import_os", "commander", "import_fs", "import_path", "resolve", "import_fs", "import_path", "import_fs", "import_path", "resolve", "import_fs", "import_path", "EXCLUDED_DIRS", "program", "import_path", "import_node_fs", "import_promises", "import_node_path", "import_promises", "assert", "removeTrailingSeparators", "normalizePath", "toComparablePath", "pathsEqual", "resolve", "now", "program", "program", "program"]
7
7
  }