@cookielab.io/oopst 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@6.0.3/node_modules/tsup/assets/esm_shims.js","../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/error.js","../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/argument.js","../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/help.js","../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/option.js","../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/suggestSimilar.js","../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/command.js","../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/index.js","../src/index.ts","../../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/esm.mjs","../src/config.ts","../src/sync/errors.ts","../src/sync/parser-factory.ts","../../../packages/parsers/src/index.ts","../../../packages/parsers/src/claude/index.ts","../../../packages/parsers/src/config.ts","../../../packages/parsers/src/types.ts","../../../packages/parsers/src/walk.ts","../../../packages/parsers/src/claude/bucketize.ts","../../../packages/parsers/src/codex/bucketize.ts","../../../packages/parsers/src/codex/events.ts","../../../packages/parsers/src/claude/events.ts","../../../packages/parsers/src/codex/index.ts","../../../packages/parsers/src/pi/index.ts","../../../packages/parsers/src/pi/bucketize.ts","../../../packages/parsers/src/pi/events.ts","../src/sync/run.ts","../src/sync/aggregate.ts","../src/sync/client.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/dist/observable/index.mjs","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/observable/observable.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/observable/operators.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/observable/behaviorSubject.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/internals/createChain.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/splitLink.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/dist/unstable-core-do-not-import.mjs","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/utils.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/rpc/codes.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/createProxy.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/http/getHTTPStatusCode.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/error/getErrorShape.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/error/formatter.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/error/TRPCError.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/transformer.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/router.ts","../../../node_modules/.pnpm/@trpc+server@11.17.0_typescript@6.0.3/node_modules/@trpc/server/src/unstable-core-do-not-import/stream/tracked.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/TRPCClientError.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/internals/transformer.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/getFetch.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/internals/httpUtils.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/internals/dataLoader.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/internals/signals.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/httpBatchLink.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/wsLink/wsClient/encoder.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/wsLink/wsClient/options.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/internals/urlWithConnectionParams.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/wsLink/wsClient/utils.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/wsLink/wsClient/requestManager.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/wsLink/wsClient/wsConnection.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/wsLink/wsClient/wsClient.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/wsLink/createWsClient.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/wsLink/wsLink.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/internals/TRPCUntypedClient.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/createTRPCUntypedClient.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/createTRPCClient.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/httpBatchStreamLink.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/internals/inputWithTrackedEventId.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/httpSubscriptionLink.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/retryLink.ts","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js","../../../node_modules/.pnpm/@trpc+client@11.17.0_@trpc+server@11.17.0_typescript@6.0.3__typescript@6.0.3/node_modules/@trpc/client/src/links/localLink.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * CommanderError class\n */\nclass CommanderError extends Error {\n /**\n * Constructs the CommanderError class\n * @param {number} exitCode suggested exit code which could be used with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n */\n constructor(exitCode, code, message) {\n super(message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n this.code = code;\n this.exitCode = exitCode;\n this.nestedError = undefined;\n }\n}\n\n/**\n * InvalidArgumentError class\n */\nclass InvalidArgumentError extends CommanderError {\n /**\n * Constructs the InvalidArgumentError class\n * @param {string} [message] explanation of why argument is invalid\n */\n constructor(message) {\n super(1, 'commander.invalidArgument', message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n /**\n * Initialize a new command argument with the given name and description.\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @param {string} name\n * @param {string} [description]\n */\n\n constructor(name, description) {\n this.description = description || '';\n this.variadic = false;\n this.parseArg = undefined;\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.argChoices = undefined;\n\n switch (name[0]) {\n case '<': // e.g. <required>\n this.required = true;\n this._name = name.slice(1, -1);\n break;\n case '[': // e.g. [optional]\n this.required = false;\n this._name = name.slice(1, -1);\n break;\n default:\n this.required = true;\n this._name = name;\n break;\n }\n\n if (this._name.endsWith('...')) {\n this.variadic = true;\n this._name = this._name.slice(0, -3);\n }\n }\n\n /**\n * Return argument name.\n *\n * @return {string}\n */\n\n name() {\n return this._name;\n }\n\n /**\n * @package\n */\n\n _collectValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n previous.push(value);\n return previous;\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Argument}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI command arguments into argument values.\n *\n * @param {Function} [fn]\n * @return {Argument}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Only allow argument value to be one of choices.\n *\n * @param {string[]} values\n * @return {Argument}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(\n `Allowed choices are ${this.argChoices.join(', ')}.`,\n );\n }\n if (this.variadic) {\n return this._collectValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Make argument required.\n *\n * @returns {Argument}\n */\n argRequired() {\n this.required = true;\n return this;\n }\n\n /**\n * Make argument optional.\n *\n * @returns {Argument}\n */\n argOptional() {\n this.required = false;\n return this;\n }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nfunction humanReadableArgName(arg) {\n const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n","const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n constructor() {\n this.helpWidth = undefined;\n this.minWidthToWrap = 40;\n this.sortSubcommands = false;\n this.sortOptions = false;\n this.showGlobalOptions = false;\n }\n\n /**\n * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n * and just before calling `formatHelp()`.\n *\n * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n *\n * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n */\n prepareContext(contextOptions) {\n this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n *\n * @param {Command} cmd\n * @returns {Command[]}\n */\n\n visibleCommands(cmd) {\n const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n const helpCommand = cmd._getHelpCommand();\n if (helpCommand && !helpCommand._hidden) {\n visibleCommands.push(helpCommand);\n }\n if (this.sortSubcommands) {\n visibleCommands.sort((a, b) => {\n // @ts-ignore: because overloaded return type\n return a.name().localeCompare(b.name());\n });\n }\n return visibleCommands;\n }\n\n /**\n * Compare options for sort.\n *\n * @param {Option} a\n * @param {Option} b\n * @returns {number}\n */\n compareOptions(a, b) {\n const getSortKey = (option) => {\n // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n return option.short\n ? option.short.replace(/^-/, '')\n : option.long.replace(/^--/, '');\n };\n return getSortKey(a).localeCompare(getSortKey(b));\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleOptions(cmd) {\n const visibleOptions = cmd.options.filter((option) => !option.hidden);\n // Built-in help option.\n const helpOption = cmd._getHelpOption();\n if (helpOption && !helpOption.hidden) {\n // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n if (!removeShort && !removeLong) {\n visibleOptions.push(helpOption); // no changes needed\n } else if (helpOption.long && !removeLong) {\n visibleOptions.push(\n cmd.createOption(helpOption.long, helpOption.description),\n );\n } else if (helpOption.short && !removeShort) {\n visibleOptions.push(\n cmd.createOption(helpOption.short, helpOption.description),\n );\n }\n }\n if (this.sortOptions) {\n visibleOptions.sort(this.compareOptions);\n }\n return visibleOptions;\n }\n\n /**\n * Get an array of the visible global options. (Not including help.)\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleGlobalOptions(cmd) {\n if (!this.showGlobalOptions) return [];\n\n const globalOptions = [];\n for (\n let ancestorCmd = cmd.parent;\n ancestorCmd;\n ancestorCmd = ancestorCmd.parent\n ) {\n const visibleOptions = ancestorCmd.options.filter(\n (option) => !option.hidden,\n );\n globalOptions.push(...visibleOptions);\n }\n if (this.sortOptions) {\n globalOptions.sort(this.compareOptions);\n }\n return globalOptions;\n }\n\n /**\n * Get an array of the arguments if any have a description.\n *\n * @param {Command} cmd\n * @returns {Argument[]}\n */\n\n visibleArguments(cmd) {\n // Side effect! Apply the legacy descriptions before the arguments are displayed.\n if (cmd._argsDescription) {\n cmd.registeredArguments.forEach((argument) => {\n argument.description =\n argument.description || cmd._argsDescription[argument.name()] || '';\n });\n }\n\n // If there are any arguments with a description then return all the arguments.\n if (cmd.registeredArguments.find((argument) => argument.description)) {\n return cmd.registeredArguments;\n }\n return [];\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandTerm(cmd) {\n // Legacy. Ignores custom usage string, and nested commands.\n const args = cmd.registeredArguments\n .map((arg) => humanReadableArgName(arg))\n .join(' ');\n return (\n cmd._name +\n (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n (args ? ' ' + args : '')\n );\n }\n\n /**\n * Get the option term to show in the list of options.\n *\n * @param {Option} option\n * @returns {string}\n */\n\n optionTerm(option) {\n return option.flags;\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n *\n * @param {Argument} argument\n * @returns {string}\n */\n\n argumentTerm(argument) {\n return argument.name();\n }\n\n /**\n * Get the longest command term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestSubcommandTermLength(cmd, helper) {\n return helper.visibleCommands(cmd).reduce((max, command) => {\n return Math.max(\n max,\n this.displayWidth(\n helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n ),\n );\n }, 0);\n }\n\n /**\n * Get the longest option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestOptionTermLength(cmd, helper) {\n return helper.visibleOptions(cmd).reduce((max, option) => {\n return Math.max(\n max,\n this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n );\n }, 0);\n }\n\n /**\n * Get the longest global option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestGlobalOptionTermLength(cmd, helper) {\n return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n return Math.max(\n max,\n this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n );\n }, 0);\n }\n\n /**\n * Get the longest argument term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestArgumentTermLength(cmd, helper) {\n return helper.visibleArguments(cmd).reduce((max, argument) => {\n return Math.max(\n max,\n this.displayWidth(\n helper.styleArgumentTerm(helper.argumentTerm(argument)),\n ),\n );\n }, 0);\n }\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandUsage(cmd) {\n // Usage\n let cmdName = cmd._name;\n if (cmd._aliases[0]) {\n cmdName = cmdName + '|' + cmd._aliases[0];\n }\n let ancestorCmdNames = '';\n for (\n let ancestorCmd = cmd.parent;\n ancestorCmd;\n ancestorCmd = ancestorCmd.parent\n ) {\n ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n }\n return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n }\n\n /**\n * Get the description for the command.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandDescription(cmd) {\n // @ts-ignore: because overloaded return type\n return cmd.description();\n }\n\n /**\n * Get the subcommand summary to show in the list of subcommands.\n * (Fallback to description for backwards compatibility.)\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandDescription(cmd) {\n // @ts-ignore: because overloaded return type\n return cmd.summary() || cmd.description();\n }\n\n /**\n * Get the option description to show in the list of options.\n *\n * @param {Option} option\n * @return {string}\n */\n\n optionDescription(option) {\n const extraInfo = [];\n\n if (option.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n );\n }\n if (option.defaultValue !== undefined) {\n // default for boolean and negated more for programmer than end user,\n // but show true/false for boolean option as may be for hand-rolled env or config processing.\n const showDefault =\n option.required ||\n option.optional ||\n (option.isBoolean() && typeof option.defaultValue === 'boolean');\n if (showDefault) {\n extraInfo.push(\n `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n );\n }\n }\n // preset for boolean and negated are more for programmer than end user\n if (option.presetArg !== undefined && option.optional) {\n extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n }\n if (option.envVar !== undefined) {\n extraInfo.push(`env: ${option.envVar}`);\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`;\n if (option.description) {\n return `${option.description} ${extraDescription}`;\n }\n return extraDescription;\n }\n\n return option.description;\n }\n\n /**\n * Get the argument description to show in the list of arguments.\n *\n * @param {Argument} argument\n * @return {string}\n */\n\n argumentDescription(argument) {\n const extraInfo = [];\n if (argument.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n );\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(\n `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n );\n }\n if (extraInfo.length > 0) {\n const extraDescription = `(${extraInfo.join(', ')})`;\n if (argument.description) {\n return `${argument.description} ${extraDescription}`;\n }\n return extraDescription;\n }\n return argument.description;\n }\n\n /**\n * Format a list of items, given a heading and an array of formatted items.\n *\n * @param {string} heading\n * @param {string[]} items\n * @param {Help} helper\n * @returns string[]\n */\n formatItemList(heading, items, helper) {\n if (items.length === 0) return [];\n\n return [helper.styleTitle(heading), ...items, ''];\n }\n\n /**\n * Group items by their help group heading.\n *\n * @param {Command[] | Option[]} unsortedItems\n * @param {Command[] | Option[]} visibleItems\n * @param {Function} getGroup\n * @returns {Map<string, Command[] | Option[]>}\n */\n groupItems(unsortedItems, visibleItems, getGroup) {\n const result = new Map();\n // Add groups in order of appearance in unsortedItems.\n unsortedItems.forEach((item) => {\n const group = getGroup(item);\n if (!result.has(group)) result.set(group, []);\n });\n // Add items in order of appearance in visibleItems.\n visibleItems.forEach((item) => {\n const group = getGroup(item);\n if (!result.has(group)) {\n result.set(group, []);\n }\n result.get(group).push(item);\n });\n return result;\n }\n\n /**\n * Generate the built-in help text.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {string}\n */\n\n formatHelp(cmd, helper) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth ?? 80; // in case prepareContext() was not called\n\n function callFormatItem(term, description) {\n return helper.formatItem(term, termWidth, description, helper);\n }\n\n // Usage\n let output = [\n `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n '',\n ];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([\n helper.boxWrap(\n helper.styleCommandDescription(commandDescription),\n helpWidth,\n ),\n '',\n ]);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument) => {\n return callFormatItem(\n helper.styleArgumentTerm(helper.argumentTerm(argument)),\n helper.styleArgumentDescription(helper.argumentDescription(argument)),\n );\n });\n output = output.concat(\n this.formatItemList('Arguments:', argumentList, helper),\n );\n\n // Options\n const optionGroups = this.groupItems(\n cmd.options,\n helper.visibleOptions(cmd),\n (option) => option.helpGroupHeading ?? 'Options:',\n );\n optionGroups.forEach((options, group) => {\n const optionList = options.map((option) => {\n return callFormatItem(\n helper.styleOptionTerm(helper.optionTerm(option)),\n helper.styleOptionDescription(helper.optionDescription(option)),\n );\n });\n output = output.concat(this.formatItemList(group, optionList, helper));\n });\n\n if (helper.showGlobalOptions) {\n const globalOptionList = helper\n .visibleGlobalOptions(cmd)\n .map((option) => {\n return callFormatItem(\n helper.styleOptionTerm(helper.optionTerm(option)),\n helper.styleOptionDescription(helper.optionDescription(option)),\n );\n });\n output = output.concat(\n this.formatItemList('Global Options:', globalOptionList, helper),\n );\n }\n\n // Commands\n const commandGroups = this.groupItems(\n cmd.commands,\n helper.visibleCommands(cmd),\n (sub) => sub.helpGroup() || 'Commands:',\n );\n commandGroups.forEach((commands, group) => {\n const commandList = commands.map((sub) => {\n return callFormatItem(\n helper.styleSubcommandTerm(helper.subcommandTerm(sub)),\n helper.styleSubcommandDescription(helper.subcommandDescription(sub)),\n );\n });\n output = output.concat(this.formatItemList(group, commandList, helper));\n });\n\n return output.join('\\n');\n }\n\n /**\n * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n *\n * @param {string} str\n * @returns {number}\n */\n displayWidth(str) {\n return stripColor(str).length;\n }\n\n /**\n * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n *\n * @param {string} str\n * @returns {string}\n */\n styleTitle(str) {\n return str;\n }\n\n styleUsage(str) {\n // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n // command subcommand [options] [command] <foo> [bar]\n return str\n .split(' ')\n .map((word) => {\n if (word === '[options]') return this.styleOptionText(word);\n if (word === '[command]') return this.styleSubcommandText(word);\n if (word[0] === '[' || word[0] === '<')\n return this.styleArgumentText(word);\n return this.styleCommandText(word); // Restrict to initial words?\n })\n .join(' ');\n }\n styleCommandDescription(str) {\n return this.styleDescriptionText(str);\n }\n styleOptionDescription(str) {\n return this.styleDescriptionText(str);\n }\n styleSubcommandDescription(str) {\n return this.styleDescriptionText(str);\n }\n styleArgumentDescription(str) {\n return this.styleDescriptionText(str);\n }\n styleDescriptionText(str) {\n return str;\n }\n styleOptionTerm(str) {\n return this.styleOptionText(str);\n }\n styleSubcommandTerm(str) {\n // This is very like usage with lots of parts! Assume default string which is formed like:\n // subcommand [options] <foo> [bar]\n return str\n .split(' ')\n .map((word) => {\n if (word === '[options]') return this.styleOptionText(word);\n if (word[0] === '[' || word[0] === '<')\n return this.styleArgumentText(word);\n return this.styleSubcommandText(word); // Restrict to initial words?\n })\n .join(' ');\n }\n styleArgumentTerm(str) {\n return this.styleArgumentText(str);\n }\n styleOptionText(str) {\n return str;\n }\n styleArgumentText(str) {\n return str;\n }\n styleSubcommandText(str) {\n return str;\n }\n styleCommandText(str) {\n return str;\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n padWidth(cmd, helper) {\n return Math.max(\n helper.longestOptionTermLength(cmd, helper),\n helper.longestGlobalOptionTermLength(cmd, helper),\n helper.longestSubcommandTermLength(cmd, helper),\n helper.longestArgumentTermLength(cmd, helper),\n );\n }\n\n /**\n * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n *\n * @param {string} str\n * @returns {boolean}\n */\n preformatted(str) {\n return /\\n[^\\S\\r\\n]/.test(str);\n }\n\n /**\n * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n *\n * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n * TTT DDD DDDD\n * DD DDD\n *\n * @param {string} term\n * @param {number} termWidth\n * @param {string} description\n * @param {Help} helper\n * @returns {string}\n */\n formatItem(term, termWidth, description, helper) {\n const itemIndent = 2;\n const itemIndentStr = ' '.repeat(itemIndent);\n if (!description) return itemIndentStr + term;\n\n // Pad the term out to a consistent width, so descriptions are aligned.\n const paddedTerm = term.padEnd(\n termWidth + term.length - helper.displayWidth(term),\n );\n\n // Format the description.\n const spacerWidth = 2; // between term and description\n const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n let formattedDescription;\n if (\n remainingWidth < this.minWidthToWrap ||\n helper.preformatted(description)\n ) {\n formattedDescription = description;\n } else {\n const wrappedDescription = helper.boxWrap(description, remainingWidth);\n formattedDescription = wrappedDescription.replace(\n /\\n/g,\n '\\n' + ' '.repeat(termWidth + spacerWidth),\n );\n }\n\n // Construct and overall indent.\n return (\n itemIndentStr +\n paddedTerm +\n ' '.repeat(spacerWidth) +\n formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n );\n }\n\n /**\n * Wrap a string at whitespace, preserving existing line breaks.\n * Wrapping is skipped if the width is less than `minWidthToWrap`.\n *\n * @param {string} str\n * @param {number} width\n * @returns {string}\n */\n boxWrap(str, width) {\n if (width < this.minWidthToWrap) return str;\n\n const rawLines = str.split(/\\r\\n|\\n/);\n // split up text by whitespace\n const chunkPattern = /[\\s]*[^\\s]+/g;\n const wrappedLines = [];\n rawLines.forEach((line) => {\n const chunks = line.match(chunkPattern);\n if (chunks === null) {\n wrappedLines.push('');\n return;\n }\n\n let sumChunks = [chunks.shift()];\n let sumWidth = this.displayWidth(sumChunks[0]);\n chunks.forEach((chunk) => {\n const visibleWidth = this.displayWidth(chunk);\n // Accumulate chunks while they fit into width.\n if (sumWidth + visibleWidth <= width) {\n sumChunks.push(chunk);\n sumWidth += visibleWidth;\n return;\n }\n wrappedLines.push(sumChunks.join(''));\n\n const nextChunk = chunk.trimStart(); // trim space at line break\n sumChunks = [nextChunk];\n sumWidth = this.displayWidth(nextChunk);\n });\n wrappedLines.push(sumChunks.join(''));\n });\n\n return wrappedLines.join('\\n');\n }\n}\n\n/**\n * Strip style ANSI escape sequences from the string. In particular, SGR (Select Graphic Rendition) codes.\n *\n * @param {string} str\n * @returns {string}\n * @package\n */\n\nfunction stripColor(str) {\n // eslint-disable-next-line no-control-regex\n const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g;\n return str.replace(sgrPattern, '');\n}\n\nexports.Help = Help;\nexports.stripColor = stripColor;\n","const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n /**\n * Initialize a new `Option` with the given `flags` and `description`.\n *\n * @param {string} flags\n * @param {string} [description]\n */\n\n constructor(flags, description) {\n this.flags = flags;\n this.description = description || '';\n\n this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n this.optional = flags.includes('['); // A value is optional when the option is specified.\n // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n const optionFlags = splitOptionFlags(flags);\n this.short = optionFlags.shortFlag; // May be a short flag, undefined, or even a long flag (if option has two long flags).\n this.long = optionFlags.longFlag;\n this.negate = false;\n if (this.long) {\n this.negate = this.long.startsWith('--no-');\n }\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.presetArg = undefined;\n this.envVar = undefined;\n this.parseArg = undefined;\n this.hidden = false;\n this.argChoices = undefined;\n this.conflictsWith = [];\n this.implied = undefined;\n this.helpGroupHeading = undefined; // soft initialised when option added to command\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {*} value\n * @param {string} [description]\n * @return {Option}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n }\n\n /**\n * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n * The custom processing (parseArg) is called.\n *\n * @example\n * new Option('--color').default('GREYSCALE').preset('RGB');\n * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n *\n * @param {*} arg\n * @return {Option}\n */\n\n preset(arg) {\n this.presetArg = arg;\n return this;\n }\n\n /**\n * Add option name(s) that conflict with this option.\n * An error will be displayed if conflicting options are found during parsing.\n *\n * @example\n * new Option('--rgb').conflicts('cmyk');\n * new Option('--js').conflicts(['ts', 'jsx']);\n *\n * @param {(string | string[])} names\n * @return {Option}\n */\n\n conflicts(names) {\n this.conflictsWith = this.conflictsWith.concat(names);\n return this;\n }\n\n /**\n * Specify implied option values for when this option is set and the implied options are not.\n *\n * The custom processing (parseArg) is not called on the implied values.\n *\n * @example\n * program\n * .addOption(new Option('--log', 'write logging information to file'))\n * .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n *\n * @param {object} impliedOptionValues\n * @return {Option}\n */\n implies(impliedOptionValues) {\n let newImplied = impliedOptionValues;\n if (typeof impliedOptionValues === 'string') {\n // string is not documented, but easy mistake and we can do what user probably intended.\n newImplied = { [impliedOptionValues]: true };\n }\n this.implied = Object.assign(this.implied || {}, newImplied);\n return this;\n }\n\n /**\n * Set environment variable to check for option value.\n *\n * An environment variable is only used if when processed the current option value is\n * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n *\n * @param {string} name\n * @return {Option}\n */\n\n env(name) {\n this.envVar = name;\n return this;\n }\n\n /**\n * Set the custom handler for processing CLI option arguments into option values.\n *\n * @param {Function} [fn]\n * @return {Option}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n }\n\n /**\n * Whether the option is mandatory and must have a value after parsing.\n *\n * @param {boolean} [mandatory=true]\n * @return {Option}\n */\n\n makeOptionMandatory(mandatory = true) {\n this.mandatory = !!mandatory;\n return this;\n }\n\n /**\n * Hide option in help.\n *\n * @param {boolean} [hide=true]\n * @return {Option}\n */\n\n hideHelp(hide = true) {\n this.hidden = !!hide;\n return this;\n }\n\n /**\n * @package\n */\n\n _collectValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n previous.push(value);\n return previous;\n }\n\n /**\n * Only allow option value to be one of choices.\n *\n * @param {string[]} values\n * @return {Option}\n */\n\n choices(values) {\n this.argChoices = values.slice();\n this.parseArg = (arg, previous) => {\n if (!this.argChoices.includes(arg)) {\n throw new InvalidArgumentError(\n `Allowed choices are ${this.argChoices.join(', ')}.`,\n );\n }\n if (this.variadic) {\n return this._collectValue(arg, previous);\n }\n return arg;\n };\n return this;\n }\n\n /**\n * Return option name.\n *\n * @return {string}\n */\n\n name() {\n if (this.long) {\n return this.long.replace(/^--/, '');\n }\n return this.short.replace(/^-/, '');\n }\n\n /**\n * Return option name, in a camelcase format that can be used\n * as an object attribute key.\n *\n * @return {string}\n */\n\n attributeName() {\n if (this.negate) {\n return camelcase(this.name().replace(/^no-/, ''));\n }\n return camelcase(this.name());\n }\n\n /**\n * Set the help group heading.\n *\n * @param {string} heading\n * @return {Option}\n */\n helpGroup(heading) {\n this.helpGroupHeading = heading;\n return this;\n }\n\n /**\n * Check if `arg` matches the short or long flag.\n *\n * @param {string} arg\n * @return {boolean}\n * @package\n */\n\n is(arg) {\n return this.short === arg || this.long === arg;\n }\n\n /**\n * Return whether a boolean option.\n *\n * Options are one of boolean, negated, required argument, or optional argument.\n *\n * @return {boolean}\n * @package\n */\n\n isBoolean() {\n return !this.required && !this.optional && !this.negate;\n }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n /**\n * @param {Option[]} options\n */\n constructor(options) {\n this.positiveOptions = new Map();\n this.negativeOptions = new Map();\n this.dualOptions = new Set();\n options.forEach((option) => {\n if (option.negate) {\n this.negativeOptions.set(option.attributeName(), option);\n } else {\n this.positiveOptions.set(option.attributeName(), option);\n }\n });\n this.negativeOptions.forEach((value, key) => {\n if (this.positiveOptions.has(key)) {\n this.dualOptions.add(key);\n }\n });\n }\n\n /**\n * Did the value come from the option, and not from possible matching dual option?\n *\n * @param {*} value\n * @param {Option} option\n * @returns {boolean}\n */\n valueFromOption(value, option) {\n const optionKey = option.attributeName();\n if (!this.dualOptions.has(optionKey)) return true;\n\n // Use the value to deduce if (probably) came from the option.\n const preset = this.negativeOptions.get(optionKey).presetArg;\n const negativeValue = preset !== undefined ? preset : false;\n return option.negate === (negativeValue === value);\n }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n return str.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1);\n });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n let shortFlag;\n let longFlag;\n // short flag, single dash and single character\n const shortFlagExp = /^-[^-]$/;\n // long flag, double dash and at least one character\n const longFlagExp = /^--[^-]/;\n\n const flagParts = flags.split(/[ |,]+/).concat('guard');\n // Normal is short and/or long.\n if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n // Long then short. Rarely used but fine.\n if (!shortFlag && shortFlagExp.test(flagParts[0]))\n shortFlag = flagParts.shift();\n // Allow two long flags, like '--ws, --workspace'\n // This is the supported way to have a shortish option flag.\n if (!shortFlag && longFlagExp.test(flagParts[0])) {\n shortFlag = longFlag;\n longFlag = flagParts.shift();\n }\n\n // Check for unprocessed flag. Fail noisily rather than silently ignore.\n if (flagParts[0].startsWith('-')) {\n const unsupportedFlag = flagParts[0];\n const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n if (/^-[^-][^-]/.test(unsupportedFlag))\n throw new Error(\n `${baseError}\n- a short flag is a single dash and a single character\n - either use a single dash and a single character (for a short flag)\n - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n );\n if (shortFlagExp.test(unsupportedFlag))\n throw new Error(`${baseError}\n- too many short flags`);\n if (longFlagExp.test(unsupportedFlag))\n throw new Error(`${baseError}\n- too many long flags`);\n\n throw new Error(`${baseError}\n- unrecognised flag format`);\n }\n if (shortFlag === undefined && longFlag === undefined)\n throw new Error(\n `option creation failed due to no flags found in '${flags}'.`,\n );\n\n return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.DualOptions = DualOptions;\n","const maxDistance = 3;\n\nfunction editDistance(a, b) {\n // https://en.wikipedia.org/wiki/Damerau–Levenshtein_distance\n // Calculating optimal string alignment distance, no substring is edited more than once.\n // (Simple implementation.)\n\n // Quick early exit, return worst case.\n if (Math.abs(a.length - b.length) > maxDistance)\n return Math.max(a.length, b.length);\n\n // distance between prefix substrings of a and b\n const d = [];\n\n // pure deletions turn a into empty string\n for (let i = 0; i <= a.length; i++) {\n d[i] = [i];\n }\n // pure insertions turn empty string into b\n for (let j = 0; j <= b.length; j++) {\n d[0][j] = j;\n }\n\n // fill matrix\n for (let j = 1; j <= b.length; j++) {\n for (let i = 1; i <= a.length; i++) {\n let cost = 1;\n if (a[i - 1] === b[j - 1]) {\n cost = 0;\n } else {\n cost = 1;\n }\n d[i][j] = Math.min(\n d[i - 1][j] + 1, // deletion\n d[i][j - 1] + 1, // insertion\n d[i - 1][j - 1] + cost, // substitution\n );\n // transposition\n if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n }\n }\n }\n\n return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n if (!candidates || candidates.length === 0) return '';\n // remove possible duplicates\n candidates = Array.from(new Set(candidates));\n\n const searchingOptions = word.startsWith('--');\n if (searchingOptions) {\n word = word.slice(2);\n candidates = candidates.map((candidate) => candidate.slice(2));\n }\n\n let similar = [];\n let bestDistance = maxDistance;\n const minSimilarity = 0.4;\n candidates.forEach((candidate) => {\n if (candidate.length <= 1) return; // no one character guesses\n\n const distance = editDistance(word, candidate);\n const length = Math.max(word.length, candidate.length);\n const similarity = (length - distance) / length;\n if (similarity > minSimilarity) {\n if (distance < bestDistance) {\n // better edit distance, throw away previous worse matches\n bestDistance = distance;\n similar = [candidate];\n } else if (distance === bestDistance) {\n similar.push(candidate);\n }\n }\n });\n\n similar.sort((a, b) => a.localeCompare(b));\n if (searchingOptions) {\n similar = similar.map((candidate) => `--${candidate}`);\n }\n\n if (similar.length > 1) {\n return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n }\n if (similar.length === 1) {\n return `\\n(Did you mean ${similar[0]}?)`;\n }\n return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n","const EventEmitter = require('node:events').EventEmitter;\nconst childProcess = require('node:child_process');\nconst path = require('node:path');\nconst fs = require('node:fs');\nconst process = require('node:process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help, stripColor } = require('./help.js');\nconst { Option, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n /**\n * Initialize a new `Command`.\n *\n * @param {string} [name]\n */\n\n constructor(name) {\n super();\n /** @type {Command[]} */\n this.commands = [];\n /** @type {Option[]} */\n this.options = [];\n this.parent = null;\n this._allowUnknownOption = false;\n this._allowExcessArguments = false;\n /** @type {Argument[]} */\n this.registeredArguments = [];\n this._args = this.registeredArguments; // deprecated old name\n /** @type {string[]} */\n this.args = []; // cli args with options removed\n this.rawArgs = [];\n this.processedArgs = []; // like .args but after custom processing and collecting variadic\n this._scriptPath = null;\n this._name = name || '';\n this._optionValues = {};\n this._optionValueSources = {}; // default, env, cli etc\n this._storeOptionsAsProperties = false;\n this._actionHandler = null;\n this._executableHandler = false;\n this._executableFile = null; // custom name for executable\n this._executableDir = null; // custom search directory for subcommands\n this._defaultCommandName = null;\n this._exitCallback = null;\n this._aliases = [];\n this._combineFlagAndOptionalValue = true;\n this._description = '';\n this._summary = '';\n this._argsDescription = undefined; // legacy\n this._enablePositionalOptions = false;\n this._passThroughOptions = false;\n this._lifeCycleHooks = {}; // a hash of arrays\n /** @type {(boolean | string)} */\n this._showHelpAfterError = false;\n this._showSuggestionAfterError = true;\n this._savedState = null; // used in save/restoreStateBeforeParse\n\n // see configureOutput() for docs\n this._outputConfiguration = {\n writeOut: (str) => process.stdout.write(str),\n writeErr: (str) => process.stderr.write(str),\n outputError: (str, write) => write(str),\n getOutHelpWidth: () =>\n process.stdout.isTTY ? process.stdout.columns : undefined,\n getErrHelpWidth: () =>\n process.stderr.isTTY ? process.stderr.columns : undefined,\n getOutHasColors: () =>\n useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n getErrHasColors: () =>\n useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n stripColor: (str) => stripColor(str),\n };\n\n this._hidden = false;\n /** @type {(Option | null | undefined)} */\n this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n /** @type {Command} */\n this._helpCommand = undefined; // lazy initialised, inherited\n this._helpConfiguration = {};\n /** @type {string | undefined} */\n this._helpGroupHeading = undefined; // soft initialised when added to parent\n /** @type {string | undefined} */\n this._defaultCommandGroup = undefined;\n /** @type {string | undefined} */\n this._defaultOptionGroup = undefined;\n }\n\n /**\n * Copy settings that are useful to have in common across root command and subcommands.\n *\n * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n *\n * @param {Command} sourceCommand\n * @return {Command} `this` command for chaining\n */\n copyInheritedSettings(sourceCommand) {\n this._outputConfiguration = sourceCommand._outputConfiguration;\n this._helpOption = sourceCommand._helpOption;\n this._helpCommand = sourceCommand._helpCommand;\n this._helpConfiguration = sourceCommand._helpConfiguration;\n this._exitCallback = sourceCommand._exitCallback;\n this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n this._combineFlagAndOptionalValue =\n sourceCommand._combineFlagAndOptionalValue;\n this._allowExcessArguments = sourceCommand._allowExcessArguments;\n this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n this._showHelpAfterError = sourceCommand._showHelpAfterError;\n this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n return this;\n }\n\n /**\n * @returns {Command[]}\n * @private\n */\n\n _getCommandAndAncestors() {\n const result = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n for (let command = this; command; command = command.parent) {\n result.push(command);\n }\n return result;\n }\n\n /**\n * Define a command.\n *\n * There are two styles of command: pay attention to where to put the description.\n *\n * @example\n * // Command implemented using action handler (description is supplied separately to `.command`)\n * program\n * .command('clone <source> [destination]')\n * .description('clone a repository into a newly created directory')\n * .action((source, destination) => {\n * console.log('clone command called');\n * });\n *\n * // Command implemented using separate executable file (description is second parameter to `.command`)\n * program\n * .command('start <service>', 'start named service')\n * .command('stop [service]', 'stop named service, or all if no name supplied');\n *\n * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n * @param {object} [execOpts] - configuration options (for executable)\n * @return {Command} returns new command for action handler, or `this` for executable command\n */\n\n command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n let desc = actionOptsOrExecDesc;\n let opts = execOpts;\n if (typeof desc === 'object' && desc !== null) {\n opts = desc;\n desc = null;\n }\n opts = opts || {};\n const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n const cmd = this.createCommand(name);\n if (desc) {\n cmd.description(desc);\n cmd._executableHandler = true;\n }\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n if (args) cmd.arguments(args);\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd.copyInheritedSettings(this);\n\n if (desc) return this;\n return cmd;\n }\n\n /**\n * Factory routine to create a new unattached command.\n *\n * See .command() for creating an attached subcommand, which uses this routine to\n * create the command. You can override createCommand to customise subcommands.\n *\n * @param {string} [name]\n * @return {Command} new command\n */\n\n createCommand(name) {\n return new Command(name);\n }\n\n /**\n * You can customise the help with a subclass of Help by overriding createHelp,\n * or by overriding Help properties using configureHelp().\n *\n * @return {Help}\n */\n\n createHelp() {\n return Object.assign(new Help(), this.configureHelp());\n }\n\n /**\n * You can customise the help by overriding Help properties using configureHelp(),\n * or with a subclass of Help by overriding createHelp().\n *\n * @param {object} [configuration] - configuration options\n * @return {(Command | object)} `this` command for chaining, or stored configuration\n */\n\n configureHelp(configuration) {\n if (configuration === undefined) return this._helpConfiguration;\n\n this._helpConfiguration = configuration;\n return this;\n }\n\n /**\n * The default output goes to stdout and stderr. You can customise this for special\n * applications. You can also customise the display of errors by overriding outputError.\n *\n * The configuration properties are all functions:\n *\n * // change how output being written, defaults to stdout and stderr\n * writeOut(str)\n * writeErr(str)\n * // change how output being written for errors, defaults to writeErr\n * outputError(str, write) // used for displaying errors and not used for displaying help\n * // specify width for wrapping help\n * getOutHelpWidth()\n * getErrHelpWidth()\n * // color support, currently only used with Help\n * getOutHasColors()\n * getErrHasColors()\n * stripColor() // used to remove ANSI escape codes if output does not have colors\n *\n * @param {object} [configuration] - configuration options\n * @return {(Command | object)} `this` command for chaining, or stored configuration\n */\n\n configureOutput(configuration) {\n if (configuration === undefined) return this._outputConfiguration;\n\n this._outputConfiguration = {\n ...this._outputConfiguration,\n ...configuration,\n };\n return this;\n }\n\n /**\n * Display the help or a custom message after an error occurs.\n *\n * @param {(boolean|string)} [displayHelp]\n * @return {Command} `this` command for chaining\n */\n showHelpAfterError(displayHelp = true) {\n if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n this._showHelpAfterError = displayHelp;\n return this;\n }\n\n /**\n * Display suggestion of similar commands for unknown commands, or options for unknown options.\n *\n * @param {boolean} [displaySuggestion]\n * @return {Command} `this` command for chaining\n */\n showSuggestionAfterError(displaySuggestion = true) {\n this._showSuggestionAfterError = !!displaySuggestion;\n return this;\n }\n\n /**\n * Add a prepared subcommand.\n *\n * See .command() for creating an attached subcommand which inherits settings from its parent.\n *\n * @param {Command} cmd - new subcommand\n * @param {object} [opts] - configuration options\n * @return {Command} `this` command for chaining\n */\n\n addCommand(cmd, opts) {\n if (!cmd._name) {\n throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n }\n\n opts = opts || {};\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n this._registerCommand(cmd);\n cmd.parent = this;\n cmd._checkForBrokenPassThrough();\n\n return this;\n }\n\n /**\n * Factory routine to create a new unattached argument.\n *\n * See .argument() for creating an attached argument, which uses this routine to\n * create the argument. You can override createArgument to return a custom argument.\n *\n * @param {string} name\n * @param {string} [description]\n * @return {Argument} new argument\n */\n\n createArgument(name, description) {\n return new Argument(name, description);\n }\n\n /**\n * Define argument syntax for command.\n *\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @example\n * program.argument('<input-file>');\n * program.argument('[output-file]');\n *\n * @param {string} name\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom argument processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n argument(name, description, parseArg, defaultValue) {\n const argument = this.createArgument(name, description);\n if (typeof parseArg === 'function') {\n argument.default(defaultValue).argParser(parseArg);\n } else {\n argument.default(parseArg);\n }\n this.addArgument(argument);\n return this;\n }\n\n /**\n * Define argument syntax for command, adding multiple at once (without descriptions).\n *\n * See also .argument().\n *\n * @example\n * program.arguments('<cmd> [env]');\n *\n * @param {string} names\n * @return {Command} `this` command for chaining\n */\n\n arguments(names) {\n names\n .trim()\n .split(/ +/)\n .forEach((detail) => {\n this.argument(detail);\n });\n return this;\n }\n\n /**\n * Define argument syntax for command, adding a prepared argument.\n *\n * @param {Argument} argument\n * @return {Command} `this` command for chaining\n */\n addArgument(argument) {\n const previousArgument = this.registeredArguments.slice(-1)[0];\n if (previousArgument?.variadic) {\n throw new Error(\n `only the last argument can be variadic '${previousArgument.name()}'`,\n );\n }\n if (\n argument.required &&\n argument.defaultValue !== undefined &&\n argument.parseArg === undefined\n ) {\n throw new Error(\n `a default value for a required argument is never used: '${argument.name()}'`,\n );\n }\n this.registeredArguments.push(argument);\n return this;\n }\n\n /**\n * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n *\n * @example\n * program.helpCommand('help [cmd]');\n * program.helpCommand('help [cmd]', 'show help');\n * program.helpCommand(false); // suppress default help command\n * program.helpCommand(true); // add help command even if no subcommands\n *\n * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n * @param {string} [description] - custom description\n * @return {Command} `this` command for chaining\n */\n\n helpCommand(enableOrNameAndArgs, description) {\n if (typeof enableOrNameAndArgs === 'boolean') {\n this._addImplicitHelpCommand = enableOrNameAndArgs;\n if (enableOrNameAndArgs && this._defaultCommandGroup) {\n // make the command to store the group\n this._initCommandGroup(this._getHelpCommand());\n }\n return this;\n }\n\n const nameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n const [, helpName, helpArgs] = nameAndArgs.match(/([^ ]+) *(.*)/);\n const helpDescription = description ?? 'display help for command';\n\n const helpCommand = this.createCommand(helpName);\n helpCommand.helpOption(false);\n if (helpArgs) helpCommand.arguments(helpArgs);\n if (helpDescription) helpCommand.description(helpDescription);\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n // init group unless lazy create\n if (enableOrNameAndArgs || description) this._initCommandGroup(helpCommand);\n\n return this;\n }\n\n /**\n * Add prepared custom help command.\n *\n * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n * @return {Command} `this` command for chaining\n */\n addHelpCommand(helpCommand, deprecatedDescription) {\n // If not passed an object, call through to helpCommand for backwards compatibility,\n // as addHelpCommand was originally used like helpCommand is now.\n if (typeof helpCommand !== 'object') {\n this.helpCommand(helpCommand, deprecatedDescription);\n return this;\n }\n\n this._addImplicitHelpCommand = true;\n this._helpCommand = helpCommand;\n this._initCommandGroup(helpCommand);\n return this;\n }\n\n /**\n * Lazy create help command.\n *\n * @return {(Command|null)}\n * @package\n */\n _getHelpCommand() {\n const hasImplicitHelpCommand =\n this._addImplicitHelpCommand ??\n (this.commands.length &&\n !this._actionHandler &&\n !this._findCommand('help'));\n\n if (hasImplicitHelpCommand) {\n if (this._helpCommand === undefined) {\n this.helpCommand(undefined, undefined); // use default name and description\n }\n return this._helpCommand;\n }\n return null;\n }\n\n /**\n * Add hook for life cycle event.\n *\n * @param {string} event\n * @param {Function} listener\n * @return {Command} `this` command for chaining\n */\n\n hook(event, listener) {\n const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n if (!allowedValues.includes(event)) {\n throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n if (this._lifeCycleHooks[event]) {\n this._lifeCycleHooks[event].push(listener);\n } else {\n this._lifeCycleHooks[event] = [listener];\n }\n return this;\n }\n\n /**\n * Register callback to use as replacement for calling process.exit.\n *\n * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n * @return {Command} `this` command for chaining\n */\n\n exitOverride(fn) {\n if (fn) {\n this._exitCallback = fn;\n } else {\n this._exitCallback = (err) => {\n if (err.code !== 'commander.executeSubCommandAsync') {\n throw err;\n } else {\n // Async callback from spawn events, not useful to throw.\n }\n };\n }\n return this;\n }\n\n /**\n * Call process.exit, and _exitCallback if defined.\n *\n * @param {number} exitCode exit code for using with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @return never\n * @private\n */\n\n _exit(exitCode, code, message) {\n if (this._exitCallback) {\n this._exitCallback(new CommanderError(exitCode, code, message));\n // Expecting this line is not reached.\n }\n process.exit(exitCode);\n }\n\n /**\n * Register callback `fn` for the command.\n *\n * @example\n * program\n * .command('serve')\n * .description('start service')\n * .action(function() {\n * // do work here\n * });\n *\n * @param {Function} fn\n * @return {Command} `this` command for chaining\n */\n\n action(fn) {\n const listener = (args) => {\n // The .action callback takes an extra parameter which is the command or options.\n const expectedArgsCount = this.registeredArguments.length;\n const actionArgs = args.slice(0, expectedArgsCount);\n if (this._storeOptionsAsProperties) {\n actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n } else {\n actionArgs[expectedArgsCount] = this.opts();\n }\n actionArgs.push(this);\n\n return fn.apply(this, actionArgs);\n };\n this._actionHandler = listener;\n return this;\n }\n\n /**\n * Factory routine to create a new unattached option.\n *\n * See .option() for creating an attached option, which uses this routine to\n * create the option. You can override createOption to return a custom option.\n *\n * @param {string} flags\n * @param {string} [description]\n * @return {Option} new option\n */\n\n createOption(flags, description) {\n return new Option(flags, description);\n }\n\n /**\n * Wrap parseArgs to catch 'commander.invalidArgument'.\n *\n * @param {(Option | Argument)} target\n * @param {string} value\n * @param {*} previous\n * @param {string} invalidArgumentMessage\n * @private\n */\n\n _callParseArg(target, value, previous, invalidArgumentMessage) {\n try {\n return target.parseArg(value, previous);\n } catch (err) {\n if (err.code === 'commander.invalidArgument') {\n const message = `${invalidArgumentMessage} ${err.message}`;\n this.error(message, { exitCode: err.exitCode, code: err.code });\n }\n throw err;\n }\n }\n\n /**\n * Check for option flag conflicts.\n * Register option if no conflicts found, or throw on conflict.\n *\n * @param {Option} option\n * @private\n */\n\n _registerOption(option) {\n const matchingOption =\n (option.short && this._findOption(option.short)) ||\n (option.long && this._findOption(option.long));\n if (matchingOption) {\n const matchingFlag =\n option.long && this._findOption(option.long)\n ? option.long\n : option.short;\n throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n- already used by option '${matchingOption.flags}'`);\n }\n\n this._initOptionGroup(option);\n this.options.push(option);\n }\n\n /**\n * Check for command name and alias conflicts with existing commands.\n * Register command if no conflicts found, or throw on conflict.\n *\n * @param {Command} command\n * @private\n */\n\n _registerCommand(command) {\n const knownBy = (cmd) => {\n return [cmd.name()].concat(cmd.aliases());\n };\n\n const alreadyUsed = knownBy(command).find((name) =>\n this._findCommand(name),\n );\n if (alreadyUsed) {\n const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n const newCmd = knownBy(command).join('|');\n throw new Error(\n `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n );\n }\n\n this._initCommandGroup(command);\n this.commands.push(command);\n }\n\n /**\n * Add an option.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addOption(option) {\n this._registerOption(option);\n\n const oname = option.name();\n const name = option.attributeName();\n\n // store default value\n if (option.negate) {\n // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n const positiveLongFlag = option.long.replace(/^--no-/, '--');\n if (!this._findOption(positiveLongFlag)) {\n this.setOptionValueWithSource(\n name,\n option.defaultValue === undefined ? true : option.defaultValue,\n 'default',\n );\n }\n } else if (option.defaultValue !== undefined) {\n this.setOptionValueWithSource(name, option.defaultValue, 'default');\n }\n\n // handler for cli and env supplied values\n const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n // val is null for optional option used without an optional-argument.\n // val is undefined for boolean and negated option.\n if (val == null && option.presetArg !== undefined) {\n val = option.presetArg;\n }\n\n // custom processing\n const oldValue = this.getOptionValue(name);\n if (val !== null && option.parseArg) {\n val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n } else if (val !== null && option.variadic) {\n val = option._collectValue(val, oldValue);\n }\n\n // Fill-in appropriate missing values. Long winded but easy to follow.\n if (val == null) {\n if (option.negate) {\n val = false;\n } else if (option.isBoolean() || option.optional) {\n val = true;\n } else {\n val = ''; // not normal, parseArg might have failed or be a mock function for testing\n }\n }\n this.setOptionValueWithSource(name, val, valueSource);\n };\n\n this.on('option:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'cli');\n });\n\n if (option.envVar) {\n this.on('optionEnv:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'env');\n });\n }\n\n return this;\n }\n\n /**\n * Internal implementation shared by .option() and .requiredOption()\n *\n * @return {Command} `this` command for chaining\n * @private\n */\n _optionEx(config, flags, description, fn, defaultValue) {\n if (typeof flags === 'object' && flags instanceof Option) {\n throw new Error(\n 'To add an Option object use addOption() instead of option() or requiredOption()',\n );\n }\n const option = this.createOption(flags, description);\n option.makeOptionMandatory(!!config.mandatory);\n if (typeof fn === 'function') {\n option.default(defaultValue).argParser(fn);\n } else if (fn instanceof RegExp) {\n // deprecated\n const regex = fn;\n fn = (val, def) => {\n const m = regex.exec(val);\n return m ? m[0] : def;\n };\n option.default(defaultValue).argParser(fn);\n } else {\n option.default(fn);\n }\n\n return this.addOption(option);\n }\n\n /**\n * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n *\n * See the README for more details, and see also addOption() and requiredOption().\n *\n * @example\n * program\n * .option('-p, --pepper', 'add pepper')\n * .option('--pt, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n * .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n * .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n option(flags, description, parseArg, defaultValue) {\n return this._optionEx({}, flags, description, parseArg, defaultValue);\n }\n\n /**\n * Add a required option which must have a value after parsing. This usually means\n * the option must be specified on the command line. (Otherwise the same as .option().)\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {(Function|*)} [parseArg] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n requiredOption(flags, description, parseArg, defaultValue) {\n return this._optionEx(\n { mandatory: true },\n flags,\n description,\n parseArg,\n defaultValue,\n );\n }\n\n /**\n * Alter parsing of short flags with optional values.\n *\n * @example\n * // for `.option('-f,--flag [value]'):\n * program.combineFlagAndOptionalValue(true); // `-f80` is treated like `--flag=80`, this is the default behaviour\n * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n *\n * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n * @return {Command} `this` command for chaining\n */\n combineFlagAndOptionalValue(combine = true) {\n this._combineFlagAndOptionalValue = !!combine;\n return this;\n }\n\n /**\n * Allow unknown options on the command line.\n *\n * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n * @return {Command} `this` command for chaining\n */\n allowUnknownOption(allowUnknown = true) {\n this._allowUnknownOption = !!allowUnknown;\n return this;\n }\n\n /**\n * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n *\n * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n * @return {Command} `this` command for chaining\n */\n allowExcessArguments(allowExcess = true) {\n this._allowExcessArguments = !!allowExcess;\n return this;\n }\n\n /**\n * Enable positional options. Positional means global options are specified before subcommands which lets\n * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n * The default behaviour is non-positional and global options may appear anywhere on the command line.\n *\n * @param {boolean} [positional]\n * @return {Command} `this` command for chaining\n */\n enablePositionalOptions(positional = true) {\n this._enablePositionalOptions = !!positional;\n return this;\n }\n\n /**\n * Pass through options that come after command-arguments rather than treat them as command-options,\n * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n * positional options to have been enabled on the program (parent commands).\n * The default behaviour is non-positional and options may appear before or after command-arguments.\n *\n * @param {boolean} [passThrough] for unknown options.\n * @return {Command} `this` command for chaining\n */\n passThroughOptions(passThrough = true) {\n this._passThroughOptions = !!passThrough;\n this._checkForBrokenPassThrough();\n return this;\n }\n\n /**\n * @private\n */\n\n _checkForBrokenPassThrough() {\n if (\n this.parent &&\n this._passThroughOptions &&\n !this.parent._enablePositionalOptions\n ) {\n throw new Error(\n `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n );\n }\n }\n\n /**\n * Whether to store option values as properties on command object,\n * or store separately (specify false). In both cases the option values can be accessed using .opts().\n *\n * @param {boolean} [storeAsProperties=true]\n * @return {Command} `this` command for chaining\n */\n\n storeOptionsAsProperties(storeAsProperties = true) {\n if (this.options.length) {\n throw new Error('call .storeOptionsAsProperties() before adding options');\n }\n if (Object.keys(this._optionValues).length) {\n throw new Error(\n 'call .storeOptionsAsProperties() before setting option values',\n );\n }\n this._storeOptionsAsProperties = !!storeAsProperties;\n return this;\n }\n\n /**\n * Retrieve option value.\n *\n * @param {string} key\n * @return {object} value\n */\n\n getOptionValue(key) {\n if (this._storeOptionsAsProperties) {\n return this[key];\n }\n return this._optionValues[key];\n }\n\n /**\n * Store option value.\n *\n * @param {string} key\n * @param {object} value\n * @return {Command} `this` command for chaining\n */\n\n setOptionValue(key, value) {\n return this.setOptionValueWithSource(key, value, undefined);\n }\n\n /**\n * Store option value and where the value came from.\n *\n * @param {string} key\n * @param {object} value\n * @param {string} source - expected values are default/config/env/cli/implied\n * @return {Command} `this` command for chaining\n */\n\n setOptionValueWithSource(key, value, source) {\n if (this._storeOptionsAsProperties) {\n this[key] = value;\n } else {\n this._optionValues[key] = value;\n }\n this._optionValueSources[key] = source;\n return this;\n }\n\n /**\n * Get source of option value.\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSource(key) {\n return this._optionValueSources[key];\n }\n\n /**\n * Get source of option value. See also .optsWithGlobals().\n * Expected values are default | config | env | cli | implied\n *\n * @param {string} key\n * @return {string}\n */\n\n getOptionValueSourceWithGlobals(key) {\n // global overwrites local, like optsWithGlobals\n let source;\n this._getCommandAndAncestors().forEach((cmd) => {\n if (cmd.getOptionValueSource(key) !== undefined) {\n source = cmd.getOptionValueSource(key);\n }\n });\n return source;\n }\n\n /**\n * Get user arguments from implied or explicit arguments.\n * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n *\n * @private\n */\n\n _prepareUserArgs(argv, parseOptions) {\n if (argv !== undefined && !Array.isArray(argv)) {\n throw new Error('first parameter to parse must be array or undefined');\n }\n parseOptions = parseOptions || {};\n\n // auto-detect argument conventions if nothing supplied\n if (argv === undefined && parseOptions.from === undefined) {\n if (process.versions?.electron) {\n parseOptions.from = 'electron';\n }\n // check node specific options for scenarios where user CLI args follow executable without scriptname\n const execArgv = process.execArgv ?? [];\n if (\n execArgv.includes('-e') ||\n execArgv.includes('--eval') ||\n execArgv.includes('-p') ||\n execArgv.includes('--print')\n ) {\n parseOptions.from = 'eval'; // internal usage, not documented\n }\n }\n\n // default to using process.argv\n if (argv === undefined) {\n argv = process.argv;\n }\n this.rawArgs = argv.slice();\n\n // extract the user args and scriptPath\n let userArgs;\n switch (parseOptions.from) {\n case undefined:\n case 'node':\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n break;\n case 'electron':\n // @ts-ignore: because defaultApp is an unknown property\n if (process.defaultApp) {\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n } else {\n userArgs = argv.slice(1);\n }\n break;\n case 'user':\n userArgs = argv.slice(0);\n break;\n case 'eval':\n userArgs = argv.slice(1);\n break;\n default:\n throw new Error(\n `unexpected parse option { from: '${parseOptions.from}' }`,\n );\n }\n\n // Find default name for program from arguments.\n if (!this._name && this._scriptPath)\n this.nameFromFilename(this._scriptPath);\n this._name = this._name || 'program';\n\n return userArgs;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Use parseAsync instead of parse if any of your action handlers are async.\n *\n * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n *\n * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n * - `'user'`: just user arguments\n *\n * @example\n * program.parse(); // parse process.argv and auto-detect electron and special node flags\n * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv] - optional, defaults to process.argv\n * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n * @return {Command} `this` command for chaining\n */\n\n parse(argv, parseOptions) {\n this._prepareForParse();\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n this._parseCommand([], userArgs);\n\n return this;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n *\n * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n * - `'user'`: just user arguments\n *\n * @example\n * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv]\n * @param {object} [parseOptions]\n * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n * @return {Promise}\n */\n\n async parseAsync(argv, parseOptions) {\n this._prepareForParse();\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n await this._parseCommand([], userArgs);\n\n return this;\n }\n\n _prepareForParse() {\n if (this._savedState === null) {\n this.saveStateBeforeParse();\n } else {\n this.restoreStateBeforeParse();\n }\n }\n\n /**\n * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n * Not usually called directly, but available for subclasses to save their custom state.\n *\n * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n */\n saveStateBeforeParse() {\n this._savedState = {\n // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n _name: this._name,\n // option values before parse have default values (including false for negated options)\n // shallow clones\n _optionValues: { ...this._optionValues },\n _optionValueSources: { ...this._optionValueSources },\n };\n }\n\n /**\n * Restore state before parse for calls after the first.\n * Not usually called directly, but available for subclasses to save their custom state.\n *\n * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n */\n restoreStateBeforeParse() {\n if (this._storeOptionsAsProperties)\n throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n // clear state from _prepareUserArgs\n this._name = this._savedState._name;\n this._scriptPath = null;\n this.rawArgs = [];\n // clear state from setOptionValueWithSource\n this._optionValues = { ...this._savedState._optionValues };\n this._optionValueSources = { ...this._savedState._optionValueSources };\n // clear state from _parseCommand\n this.args = [];\n // clear state from _processArguments\n this.processedArgs = [];\n }\n\n /**\n * Throw if expected executable is missing. Add lots of help for author.\n *\n * @param {string} executableFile\n * @param {string} executableDir\n * @param {string} subcommandName\n */\n _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n if (fs.existsSync(executableFile)) return;\n\n const executableDirMessage = executableDir\n ? `searched for local subcommand relative to directory '${executableDir}'`\n : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n const executableMissing = `'${executableFile}' does not exist\n - if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n throw new Error(executableMissing);\n }\n\n /**\n * Execute a sub-command executable.\n *\n * @private\n */\n\n _executeSubCommand(subcommand, args) {\n args = args.slice();\n let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n function findFile(baseDir, baseName) {\n // Look for specified file\n const localBin = path.resolve(baseDir, baseName);\n if (fs.existsSync(localBin)) return localBin;\n\n // Stop looking if candidate already has an expected extension.\n if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n // Try all the extensions.\n const foundExt = sourceExt.find((ext) =>\n fs.existsSync(`${localBin}${ext}`),\n );\n if (foundExt) return `${localBin}${foundExt}`;\n\n return undefined;\n }\n\n // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // executableFile and executableDir might be full path, or just a name\n let executableFile =\n subcommand._executableFile || `${this._name}-${subcommand._name}`;\n let executableDir = this._executableDir || '';\n if (this._scriptPath) {\n let resolvedScriptPath; // resolve possible symlink for installed npm binary\n try {\n resolvedScriptPath = fs.realpathSync(this._scriptPath);\n } catch {\n resolvedScriptPath = this._scriptPath;\n }\n executableDir = path.resolve(\n path.dirname(resolvedScriptPath),\n executableDir,\n );\n }\n\n // Look for a local file in preference to a command in PATH.\n if (executableDir) {\n let localFile = findFile(executableDir, executableFile);\n\n // Legacy search using prefix of script name instead of command name\n if (!localFile && !subcommand._executableFile && this._scriptPath) {\n const legacyName = path.basename(\n this._scriptPath,\n path.extname(this._scriptPath),\n );\n if (legacyName !== this._name) {\n localFile = findFile(\n executableDir,\n `${legacyName}-${subcommand._name}`,\n );\n }\n }\n executableFile = localFile || executableFile;\n }\n\n launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n let proc;\n if (process.platform !== 'win32') {\n if (launchWithNode) {\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n } else {\n proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n }\n } else {\n this._checkForMissingExecutable(\n executableFile,\n executableDir,\n subcommand._name,\n );\n args.unshift(executableFile);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n }\n\n if (!proc.killed) {\n // testing mainly to avoid leak warnings during unit tests with mocked spawn\n const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n signals.forEach((signal) => {\n process.on(signal, () => {\n if (proc.killed === false && proc.exitCode === null) {\n // @ts-ignore because signals not typed to known strings\n proc.kill(signal);\n }\n });\n });\n }\n\n // By default terminate process when spawned process terminates.\n const exitCallback = this._exitCallback;\n proc.on('close', (code) => {\n code = code ?? 1; // code is null if spawned process terminated due to a signal\n if (!exitCallback) {\n process.exit(code);\n } else {\n exitCallback(\n new CommanderError(\n code,\n 'commander.executeSubCommandAsync',\n '(close)',\n ),\n );\n }\n });\n proc.on('error', (err) => {\n // @ts-ignore: because err.code is an unknown property\n if (err.code === 'ENOENT') {\n this._checkForMissingExecutable(\n executableFile,\n executableDir,\n subcommand._name,\n );\n // @ts-ignore: because err.code is an unknown property\n } else if (err.code === 'EACCES') {\n throw new Error(`'${executableFile}' not executable`);\n }\n if (!exitCallback) {\n process.exit(1);\n } else {\n const wrappedError = new CommanderError(\n 1,\n 'commander.executeSubCommandAsync',\n '(error)',\n );\n wrappedError.nestedError = err;\n exitCallback(wrappedError);\n }\n });\n\n // Store the reference to the child process\n this.runningCommand = proc;\n }\n\n /**\n * @private\n */\n\n _dispatchSubcommand(commandName, operands, unknown) {\n const subCommand = this._findCommand(commandName);\n if (!subCommand) this.help({ error: true });\n\n subCommand._prepareForParse();\n let promiseChain;\n promiseChain = this._chainOrCallSubCommandHook(\n promiseChain,\n subCommand,\n 'preSubcommand',\n );\n promiseChain = this._chainOrCall(promiseChain, () => {\n if (subCommand._executableHandler) {\n this._executeSubCommand(subCommand, operands.concat(unknown));\n } else {\n return subCommand._parseCommand(operands, unknown);\n }\n });\n return promiseChain;\n }\n\n /**\n * Invoke help directly if possible, or dispatch if necessary.\n * e.g. help foo\n *\n * @private\n */\n\n _dispatchHelpCommand(subcommandName) {\n if (!subcommandName) {\n this.help();\n }\n const subCommand = this._findCommand(subcommandName);\n if (subCommand && !subCommand._executableHandler) {\n subCommand.help();\n }\n\n // Fallback to parsing the help flag to invoke the help.\n return this._dispatchSubcommand(\n subcommandName,\n [],\n [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n );\n }\n\n /**\n * Check this.args against expected this.registeredArguments.\n *\n * @private\n */\n\n _checkNumberOfArguments() {\n // too few\n this.registeredArguments.forEach((arg, i) => {\n if (arg.required && this.args[i] == null) {\n this.missingArgument(arg.name());\n }\n });\n // too many\n if (\n this.registeredArguments.length > 0 &&\n this.registeredArguments[this.registeredArguments.length - 1].variadic\n ) {\n return;\n }\n if (this.args.length > this.registeredArguments.length) {\n this._excessArguments(this.args);\n }\n }\n\n /**\n * Process this.args using this.registeredArguments and save as this.processedArgs!\n *\n * @private\n */\n\n _processArguments() {\n const myParseArg = (argument, value, previous) => {\n // Extra processing for nice error message on parsing failure.\n let parsedValue = value;\n if (value !== null && argument.parseArg) {\n const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n parsedValue = this._callParseArg(\n argument,\n value,\n previous,\n invalidValueMessage,\n );\n }\n return parsedValue;\n };\n\n this._checkNumberOfArguments();\n\n const processedArgs = [];\n this.registeredArguments.forEach((declaredArg, index) => {\n let value = declaredArg.defaultValue;\n if (declaredArg.variadic) {\n // Collect together remaining arguments for passing together as an array.\n if (index < this.args.length) {\n value = this.args.slice(index);\n if (declaredArg.parseArg) {\n value = value.reduce((processed, v) => {\n return myParseArg(declaredArg, v, processed);\n }, declaredArg.defaultValue);\n }\n } else if (value === undefined) {\n value = [];\n }\n } else if (index < this.args.length) {\n value = this.args[index];\n if (declaredArg.parseArg) {\n value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n }\n }\n processedArgs[index] = value;\n });\n this.processedArgs = processedArgs;\n }\n\n /**\n * Once we have a promise we chain, but call synchronously until then.\n *\n * @param {(Promise|undefined)} promise\n * @param {Function} fn\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCall(promise, fn) {\n // thenable\n if (promise?.then && typeof promise.then === 'function') {\n // already have a promise, chain callback\n return promise.then(() => fn());\n }\n // callback might return a promise\n return fn();\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallHooks(promise, event) {\n let result = promise;\n const hooks = [];\n this._getCommandAndAncestors()\n .reverse()\n .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n .forEach((hookedCommand) => {\n hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n hooks.push({ hookedCommand, callback });\n });\n });\n if (event === 'postAction') {\n hooks.reverse();\n }\n\n hooks.forEach((hookDetail) => {\n result = this._chainOrCall(result, () => {\n return hookDetail.callback(hookDetail.hookedCommand, this);\n });\n });\n return result;\n }\n\n /**\n *\n * @param {(Promise|undefined)} promise\n * @param {Command} subCommand\n * @param {string} event\n * @return {(Promise|undefined)}\n * @private\n */\n\n _chainOrCallSubCommandHook(promise, subCommand, event) {\n let result = promise;\n if (this._lifeCycleHooks[event] !== undefined) {\n this._lifeCycleHooks[event].forEach((hook) => {\n result = this._chainOrCall(result, () => {\n return hook(this, subCommand);\n });\n });\n }\n return result;\n }\n\n /**\n * Process arguments in context of this command.\n * Returns action result, in case it is a promise.\n *\n * @private\n */\n\n _parseCommand(operands, unknown) {\n const parsed = this.parseOptions(unknown);\n this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n this._parseOptionsImplied();\n operands = operands.concat(parsed.operands);\n unknown = parsed.unknown;\n this.args = operands.concat(unknown);\n\n if (operands && this._findCommand(operands[0])) {\n return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n }\n if (\n this._getHelpCommand() &&\n operands[0] === this._getHelpCommand().name()\n ) {\n return this._dispatchHelpCommand(operands[1]);\n }\n if (this._defaultCommandName) {\n this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n return this._dispatchSubcommand(\n this._defaultCommandName,\n operands,\n unknown,\n );\n }\n if (\n this.commands.length &&\n this.args.length === 0 &&\n !this._actionHandler &&\n !this._defaultCommandName\n ) {\n // probably missing subcommand and no handler, user needs help (and exit)\n this.help({ error: true });\n }\n\n this._outputHelpIfRequested(parsed.unknown);\n this._checkForMissingMandatoryOptions();\n this._checkForConflictingOptions();\n\n // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n const checkForUnknownOptions = () => {\n if (parsed.unknown.length > 0) {\n this.unknownOption(parsed.unknown[0]);\n }\n };\n\n const commandEvent = `command:${this.name()}`;\n if (this._actionHandler) {\n checkForUnknownOptions();\n this._processArguments();\n\n let promiseChain;\n promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n promiseChain = this._chainOrCall(promiseChain, () =>\n this._actionHandler(this.processedArgs),\n );\n if (this.parent) {\n promiseChain = this._chainOrCall(promiseChain, () => {\n this.parent.emit(commandEvent, operands, unknown); // legacy\n });\n }\n promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n return promiseChain;\n }\n if (this.parent?.listenerCount(commandEvent)) {\n checkForUnknownOptions();\n this._processArguments();\n this.parent.emit(commandEvent, operands, unknown); // legacy\n } else if (operands.length) {\n if (this._findCommand('*')) {\n // legacy default command\n return this._dispatchSubcommand('*', operands, unknown);\n }\n if (this.listenerCount('command:*')) {\n // skip option check, emit event for possible misspelling suggestion\n this.emit('command:*', operands, unknown);\n } else if (this.commands.length) {\n this.unknownCommand();\n } else {\n checkForUnknownOptions();\n this._processArguments();\n }\n } else if (this.commands.length) {\n checkForUnknownOptions();\n // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n this.help({ error: true });\n } else {\n checkForUnknownOptions();\n this._processArguments();\n // fall through for caller to handle after calling .parse()\n }\n }\n\n /**\n * Find matching command.\n *\n * @private\n * @return {Command | undefined}\n */\n _findCommand(name) {\n if (!name) return undefined;\n return this.commands.find(\n (cmd) => cmd._name === name || cmd._aliases.includes(name),\n );\n }\n\n /**\n * Return an option matching `arg` if any.\n *\n * @param {string} arg\n * @return {Option}\n * @package\n */\n\n _findOption(arg) {\n return this.options.find((option) => option.is(arg));\n }\n\n /**\n * Display an error message if a mandatory option does not have a value.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n\n _checkForMissingMandatoryOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd.options.forEach((anOption) => {\n if (\n anOption.mandatory &&\n cmd.getOptionValue(anOption.attributeName()) === undefined\n ) {\n cmd.missingMandatoryOptionValue(anOption);\n }\n });\n });\n }\n\n /**\n * Display an error message if conflicting options are used together in this.\n *\n * @private\n */\n _checkForConflictingLocalOptions() {\n const definedNonDefaultOptions = this.options.filter((option) => {\n const optionKey = option.attributeName();\n if (this.getOptionValue(optionKey) === undefined) {\n return false;\n }\n return this.getOptionValueSource(optionKey) !== 'default';\n });\n\n const optionsWithConflicting = definedNonDefaultOptions.filter(\n (option) => option.conflictsWith.length > 0,\n );\n\n optionsWithConflicting.forEach((option) => {\n const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n option.conflictsWith.includes(defined.attributeName()),\n );\n if (conflictingAndDefined) {\n this._conflictingOption(option, conflictingAndDefined);\n }\n });\n }\n\n /**\n * Display an error message if conflicting options are used together.\n * Called after checking for help flags in leaf subcommand.\n *\n * @private\n */\n _checkForConflictingOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n this._getCommandAndAncestors().forEach((cmd) => {\n cmd._checkForConflictingLocalOptions();\n });\n }\n\n /**\n * Parse options from `argv` removing known options,\n * and return argv split into operands and unknown arguments.\n *\n * Side effects: modifies command by storing options. Does not reset state if called again.\n *\n * Examples:\n *\n * argv => operands, unknown\n * --known kkk op => [op], []\n * op --known kkk => [op], []\n * sub --unknown uuu op => [sub], [--unknown uuu op]\n * sub -- --unknown uuu op => [sub --unknown uuu op], []\n *\n * @param {string[]} args\n * @return {{operands: string[], unknown: string[]}}\n */\n\n parseOptions(args) {\n const operands = []; // operands, not options or values\n const unknown = []; // first unknown option and remaining unknown args\n let dest = operands;\n\n function maybeOption(arg) {\n return arg.length > 1 && arg[0] === '-';\n }\n\n const negativeNumberArg = (arg) => {\n // return false if not a negative number\n if (!/^-(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?$/.test(arg)) return false;\n // negative number is ok unless digit used as an option in command hierarchy\n return !this._getCommandAndAncestors().some((cmd) =>\n cmd.options\n .map((opt) => opt.short)\n .some((short) => /^-\\d$/.test(short)),\n );\n };\n\n // parse options\n let activeVariadicOption = null;\n let activeGroup = null; // working through group of short options, like -abc\n let i = 0;\n while (i < args.length || activeGroup) {\n const arg = activeGroup ?? args[i++];\n activeGroup = null;\n\n // literal\n if (arg === '--') {\n if (dest === unknown) dest.push(arg);\n dest.push(...args.slice(i));\n break;\n }\n\n if (\n activeVariadicOption &&\n (!maybeOption(arg) || negativeNumberArg(arg))\n ) {\n this.emit(`option:${activeVariadicOption.name()}`, arg);\n continue;\n }\n activeVariadicOption = null;\n\n if (maybeOption(arg)) {\n const option = this._findOption(arg);\n // recognised option, call listener to assign value with possible custom processing\n if (option) {\n if (option.required) {\n const value = args[i++];\n if (value === undefined) this.optionMissingArgument(option);\n this.emit(`option:${option.name()}`, value);\n } else if (option.optional) {\n let value = null;\n // historical behaviour is optional value is following arg unless an option\n if (\n i < args.length &&\n (!maybeOption(args[i]) || negativeNumberArg(args[i]))\n ) {\n value = args[i++];\n }\n this.emit(`option:${option.name()}`, value);\n } else {\n // boolean flag\n this.emit(`option:${option.name()}`);\n }\n activeVariadicOption = option.variadic ? option : null;\n continue;\n }\n }\n\n // Look for combo options following single dash, eat first one if known.\n if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n const option = this._findOption(`-${arg[1]}`);\n if (option) {\n if (\n option.required ||\n (option.optional && this._combineFlagAndOptionalValue)\n ) {\n // option with value following in same argument\n this.emit(`option:${option.name()}`, arg.slice(2));\n } else {\n // boolean option\n this.emit(`option:${option.name()}`);\n // remove the processed option and keep processing group\n activeGroup = `-${arg.slice(2)}`;\n }\n continue;\n }\n }\n\n // Look for known long flag with value, like --foo=bar\n if (/^--[^=]+=/.test(arg)) {\n const index = arg.indexOf('=');\n const option = this._findOption(arg.slice(0, index));\n if (option && (option.required || option.optional)) {\n this.emit(`option:${option.name()}`, arg.slice(index + 1));\n continue;\n }\n }\n\n // Not a recognised option by this command.\n // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n // A negative number in a leaf command is not an unknown option.\n if (\n dest === operands &&\n maybeOption(arg) &&\n !(this.commands.length === 0 && negativeNumberArg(arg))\n ) {\n dest = unknown;\n }\n\n // If using positionalOptions, stop processing our options at subcommand.\n if (\n (this._enablePositionalOptions || this._passThroughOptions) &&\n operands.length === 0 &&\n unknown.length === 0\n ) {\n if (this._findCommand(arg)) {\n operands.push(arg);\n unknown.push(...args.slice(i));\n break;\n } else if (\n this._getHelpCommand() &&\n arg === this._getHelpCommand().name()\n ) {\n operands.push(arg, ...args.slice(i));\n break;\n } else if (this._defaultCommandName) {\n unknown.push(arg, ...args.slice(i));\n break;\n }\n }\n\n // If using passThroughOptions, stop processing options at first command-argument.\n if (this._passThroughOptions) {\n dest.push(arg, ...args.slice(i));\n break;\n }\n\n // add arg\n dest.push(arg);\n }\n\n return { operands, unknown };\n }\n\n /**\n * Return an object containing local option values as key-value pairs.\n *\n * @return {object}\n */\n opts() {\n if (this._storeOptionsAsProperties) {\n // Preserve original behaviour so backwards compatible when still using properties\n const result = {};\n const len = this.options.length;\n\n for (let i = 0; i < len; i++) {\n const key = this.options[i].attributeName();\n result[key] =\n key === this._versionOptionName ? this._version : this[key];\n }\n return result;\n }\n\n return this._optionValues;\n }\n\n /**\n * Return an object containing merged local and global option values as key-value pairs.\n *\n * @return {object}\n */\n optsWithGlobals() {\n // globals overwrite locals\n return this._getCommandAndAncestors().reduce(\n (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n {},\n );\n }\n\n /**\n * Display error message and exit (or call exitOverride).\n *\n * @param {string} message\n * @param {object} [errorOptions]\n * @param {string} [errorOptions.code] - an id string representing the error\n * @param {number} [errorOptions.exitCode] - used with process.exit\n */\n error(message, errorOptions) {\n // output handling\n this._outputConfiguration.outputError(\n `${message}\\n`,\n this._outputConfiguration.writeErr,\n );\n if (typeof this._showHelpAfterError === 'string') {\n this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n } else if (this._showHelpAfterError) {\n this._outputConfiguration.writeErr('\\n');\n this.outputHelp({ error: true });\n }\n\n // exit handling\n const config = errorOptions || {};\n const exitCode = config.exitCode || 1;\n const code = config.code || 'commander.error';\n this._exit(exitCode, code, message);\n }\n\n /**\n * Apply any option related environment variables, if option does\n * not have a value from cli or client code.\n *\n * @private\n */\n _parseOptionsEnv() {\n this.options.forEach((option) => {\n if (option.envVar && option.envVar in process.env) {\n const optionKey = option.attributeName();\n // Priority check. Do not overwrite cli or options from unknown source (client-code).\n if (\n this.getOptionValue(optionKey) === undefined ||\n ['default', 'config', 'env'].includes(\n this.getOptionValueSource(optionKey),\n )\n ) {\n if (option.required || option.optional) {\n // option can take a value\n // keep very simple, optional always takes value\n this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n } else {\n // boolean\n // keep very simple, only care that envVar defined and not the value\n this.emit(`optionEnv:${option.name()}`);\n }\n }\n }\n });\n }\n\n /**\n * Apply any implied option values, if option is undefined or default value.\n *\n * @private\n */\n _parseOptionsImplied() {\n const dualHelper = new DualOptions(this.options);\n const hasCustomOptionValue = (optionKey) => {\n return (\n this.getOptionValue(optionKey) !== undefined &&\n !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n );\n };\n this.options\n .filter(\n (option) =>\n option.implied !== undefined &&\n hasCustomOptionValue(option.attributeName()) &&\n dualHelper.valueFromOption(\n this.getOptionValue(option.attributeName()),\n option,\n ),\n )\n .forEach((option) => {\n Object.keys(option.implied)\n .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n .forEach((impliedKey) => {\n this.setOptionValueWithSource(\n impliedKey,\n option.implied[impliedKey],\n 'implied',\n );\n });\n });\n }\n\n /**\n * Argument `name` is missing.\n *\n * @param {string} name\n * @private\n */\n\n missingArgument(name) {\n const message = `error: missing required argument '${name}'`;\n this.error(message, { code: 'commander.missingArgument' });\n }\n\n /**\n * `Option` is missing an argument.\n *\n * @param {Option} option\n * @private\n */\n\n optionMissingArgument(option) {\n const message = `error: option '${option.flags}' argument missing`;\n this.error(message, { code: 'commander.optionMissingArgument' });\n }\n\n /**\n * `Option` does not have a value, and is a mandatory option.\n *\n * @param {Option} option\n * @private\n */\n\n missingMandatoryOptionValue(option) {\n const message = `error: required option '${option.flags}' not specified`;\n this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n }\n\n /**\n * `Option` conflicts with another option.\n *\n * @param {Option} option\n * @param {Option} conflictingOption\n * @private\n */\n _conflictingOption(option, conflictingOption) {\n // The calling code does not know whether a negated option is the source of the\n // value, so do some work to take an educated guess.\n const findBestOptionFromValue = (option) => {\n const optionKey = option.attributeName();\n const optionValue = this.getOptionValue(optionKey);\n const negativeOption = this.options.find(\n (target) => target.negate && optionKey === target.attributeName(),\n );\n const positiveOption = this.options.find(\n (target) => !target.negate && optionKey === target.attributeName(),\n );\n if (\n negativeOption &&\n ((negativeOption.presetArg === undefined && optionValue === false) ||\n (negativeOption.presetArg !== undefined &&\n optionValue === negativeOption.presetArg))\n ) {\n return negativeOption;\n }\n return positiveOption || option;\n };\n\n const getErrorMessage = (option) => {\n const bestOption = findBestOptionFromValue(option);\n const optionKey = bestOption.attributeName();\n const source = this.getOptionValueSource(optionKey);\n if (source === 'env') {\n return `environment variable '${bestOption.envVar}'`;\n }\n return `option '${bestOption.flags}'`;\n };\n\n const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n this.error(message, { code: 'commander.conflictingOption' });\n }\n\n /**\n * Unknown option `flag`.\n *\n * @param {string} flag\n * @private\n */\n\n unknownOption(flag) {\n if (this._allowUnknownOption) return;\n let suggestion = '';\n\n if (flag.startsWith('--') && this._showSuggestionAfterError) {\n // Looping to pick up the global options too\n let candidateFlags = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let command = this;\n do {\n const moreFlags = command\n .createHelp()\n .visibleOptions(command)\n .filter((option) => option.long)\n .map((option) => option.long);\n candidateFlags = candidateFlags.concat(moreFlags);\n command = command.parent;\n } while (command && !command._enablePositionalOptions);\n suggestion = suggestSimilar(flag, candidateFlags);\n }\n\n const message = `error: unknown option '${flag}'${suggestion}`;\n this.error(message, { code: 'commander.unknownOption' });\n }\n\n /**\n * Excess arguments, more than expected.\n *\n * @param {string[]} receivedArgs\n * @private\n */\n\n _excessArguments(receivedArgs) {\n if (this._allowExcessArguments) return;\n\n const expected = this.registeredArguments.length;\n const s = expected === 1 ? '' : 's';\n const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n this.error(message, { code: 'commander.excessArguments' });\n }\n\n /**\n * Unknown command.\n *\n * @private\n */\n\n unknownCommand() {\n const unknownName = this.args[0];\n let suggestion = '';\n\n if (this._showSuggestionAfterError) {\n const candidateNames = [];\n this.createHelp()\n .visibleCommands(this)\n .forEach((command) => {\n candidateNames.push(command.name());\n // just visible alias\n if (command.alias()) candidateNames.push(command.alias());\n });\n suggestion = suggestSimilar(unknownName, candidateNames);\n }\n\n const message = `error: unknown command '${unknownName}'${suggestion}`;\n this.error(message, { code: 'commander.unknownCommand' });\n }\n\n /**\n * Get or set the program version.\n *\n * This method auto-registers the \"-V, --version\" option which will print the version number.\n *\n * You can optionally supply the flags and description to override the defaults.\n *\n * @param {string} [str]\n * @param {string} [flags]\n * @param {string} [description]\n * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n */\n\n version(str, flags, description) {\n if (str === undefined) return this._version;\n this._version = str;\n flags = flags || '-V, --version';\n description = description || 'output the version number';\n const versionOption = this.createOption(flags, description);\n this._versionOptionName = versionOption.attributeName();\n this._registerOption(versionOption);\n\n this.on('option:' + versionOption.name(), () => {\n this._outputConfiguration.writeOut(`${str}\\n`);\n this._exit(0, 'commander.version', str);\n });\n return this;\n }\n\n /**\n * Set the description.\n *\n * @param {string} [str]\n * @param {object} [argsDescription]\n * @return {(string|Command)}\n */\n description(str, argsDescription) {\n if (str === undefined && argsDescription === undefined)\n return this._description;\n this._description = str;\n if (argsDescription) {\n this._argsDescription = argsDescription;\n }\n return this;\n }\n\n /**\n * Set the summary. Used when listed as subcommand of parent.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n summary(str) {\n if (str === undefined) return this._summary;\n this._summary = str;\n return this;\n }\n\n /**\n * Set an alias for the command.\n *\n * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n *\n * @param {string} [alias]\n * @return {(string|Command)}\n */\n\n alias(alias) {\n if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n /** @type {Command} */\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let command = this;\n if (\n this.commands.length !== 0 &&\n this.commands[this.commands.length - 1]._executableHandler\n ) {\n // assume adding alias for last added executable subcommand, rather than this\n command = this.commands[this.commands.length - 1];\n }\n\n if (alias === command._name)\n throw new Error(\"Command alias can't be the same as its name\");\n const matchingCommand = this.parent?._findCommand(alias);\n if (matchingCommand) {\n // c.f. _registerCommand\n const existingCmd = [matchingCommand.name()]\n .concat(matchingCommand.aliases())\n .join('|');\n throw new Error(\n `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n );\n }\n\n command._aliases.push(alias);\n return this;\n }\n\n /**\n * Set aliases for the command.\n *\n * Only the first alias is shown in the auto-generated help.\n *\n * @param {string[]} [aliases]\n * @return {(string[]|Command)}\n */\n\n aliases(aliases) {\n // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n if (aliases === undefined) return this._aliases;\n\n aliases.forEach((alias) => this.alias(alias));\n return this;\n }\n\n /**\n * Set / get the command usage `str`.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n usage(str) {\n if (str === undefined) {\n if (this._usage) return this._usage;\n\n const args = this.registeredArguments.map((arg) => {\n return humanReadableArgName(arg);\n });\n return []\n .concat(\n this.options.length || this._helpOption !== null ? '[options]' : [],\n this.commands.length ? '[command]' : [],\n this.registeredArguments.length ? args : [],\n )\n .join(' ');\n }\n\n this._usage = str;\n return this;\n }\n\n /**\n * Get or set the name of the command.\n *\n * @param {string} [str]\n * @return {(string|Command)}\n */\n\n name(str) {\n if (str === undefined) return this._name;\n this._name = str;\n return this;\n }\n\n /**\n * Set/get the help group heading for this subcommand in parent command's help.\n *\n * @param {string} [heading]\n * @return {Command | string}\n */\n\n helpGroup(heading) {\n if (heading === undefined) return this._helpGroupHeading ?? '';\n this._helpGroupHeading = heading;\n return this;\n }\n\n /**\n * Set/get the default help group heading for subcommands added to this command.\n * (This does not override a group set directly on the subcommand using .helpGroup().)\n *\n * @example\n * program.commandsGroup('Development Commands:);\n * program.command('watch')...\n * program.command('lint')...\n * ...\n *\n * @param {string} [heading]\n * @returns {Command | string}\n */\n commandsGroup(heading) {\n if (heading === undefined) return this._defaultCommandGroup ?? '';\n this._defaultCommandGroup = heading;\n return this;\n }\n\n /**\n * Set/get the default help group heading for options added to this command.\n * (This does not override a group set directly on the option using .helpGroup().)\n *\n * @example\n * program\n * .optionsGroup('Development Options:')\n * .option('-d, --debug', 'output extra debugging')\n * .option('-p, --profile', 'output profiling information')\n *\n * @param {string} [heading]\n * @returns {Command | string}\n */\n optionsGroup(heading) {\n if (heading === undefined) return this._defaultOptionGroup ?? '';\n this._defaultOptionGroup = heading;\n return this;\n }\n\n /**\n * @param {Option} option\n * @private\n */\n _initOptionGroup(option) {\n if (this._defaultOptionGroup && !option.helpGroupHeading)\n option.helpGroup(this._defaultOptionGroup);\n }\n\n /**\n * @param {Command} cmd\n * @private\n */\n _initCommandGroup(cmd) {\n if (this._defaultCommandGroup && !cmd.helpGroup())\n cmd.helpGroup(this._defaultCommandGroup);\n }\n\n /**\n * Set the name of the command from script filename, such as process.argv[1],\n * or require.main.filename, or __filename.\n *\n * (Used internally and public although not documented in README.)\n *\n * @example\n * program.nameFromFilename(require.main.filename);\n *\n * @param {string} filename\n * @return {Command}\n */\n\n nameFromFilename(filename) {\n this._name = path.basename(filename, path.extname(filename));\n\n return this;\n }\n\n /**\n * Get or set the directory for searching for executable subcommands of this command.\n *\n * @example\n * program.executableDir(__dirname);\n * // or\n * program.executableDir('subcommands');\n *\n * @param {string} [path]\n * @return {(string|null|Command)}\n */\n\n executableDir(path) {\n if (path === undefined) return this._executableDir;\n this._executableDir = path;\n return this;\n }\n\n /**\n * Return program help documentation.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n * @return {string}\n */\n\n helpInformation(contextOptions) {\n const helper = this.createHelp();\n const context = this._getOutputContext(contextOptions);\n helper.prepareContext({\n error: context.error,\n helpWidth: context.helpWidth,\n outputHasColors: context.hasColors,\n });\n const text = helper.formatHelp(this, helper);\n if (context.hasColors) return text;\n return this._outputConfiguration.stripColor(text);\n }\n\n /**\n * @typedef HelpContext\n * @type {object}\n * @property {boolean} error\n * @property {number} helpWidth\n * @property {boolean} hasColors\n * @property {function} write - includes stripColor if needed\n *\n * @returns {HelpContext}\n * @private\n */\n\n _getOutputContext(contextOptions) {\n contextOptions = contextOptions || {};\n const error = !!contextOptions.error;\n let baseWrite;\n let hasColors;\n let helpWidth;\n if (error) {\n baseWrite = (str) => this._outputConfiguration.writeErr(str);\n hasColors = this._outputConfiguration.getErrHasColors();\n helpWidth = this._outputConfiguration.getErrHelpWidth();\n } else {\n baseWrite = (str) => this._outputConfiguration.writeOut(str);\n hasColors = this._outputConfiguration.getOutHasColors();\n helpWidth = this._outputConfiguration.getOutHelpWidth();\n }\n const write = (str) => {\n if (!hasColors) str = this._outputConfiguration.stripColor(str);\n return baseWrite(str);\n };\n return { error, write, hasColors, helpWidth };\n }\n\n /**\n * Output help information for this command.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n outputHelp(contextOptions) {\n let deprecatedCallback;\n if (typeof contextOptions === 'function') {\n deprecatedCallback = contextOptions;\n contextOptions = undefined;\n }\n\n const outputContext = this._getOutputContext(contextOptions);\n /** @type {HelpTextEventContext} */\n const eventContext = {\n error: outputContext.error,\n write: outputContext.write,\n command: this,\n };\n\n this._getCommandAndAncestors()\n .reverse()\n .forEach((command) => command.emit('beforeAllHelp', eventContext));\n this.emit('beforeHelp', eventContext);\n\n let helpInformation = this.helpInformation({ error: outputContext.error });\n if (deprecatedCallback) {\n helpInformation = deprecatedCallback(helpInformation);\n if (\n typeof helpInformation !== 'string' &&\n !Buffer.isBuffer(helpInformation)\n ) {\n throw new Error('outputHelp callback must return a string or a Buffer');\n }\n }\n outputContext.write(helpInformation);\n\n if (this._getHelpOption()?.long) {\n this.emit(this._getHelpOption().long); // deprecated\n }\n this.emit('afterHelp', eventContext);\n this._getCommandAndAncestors().forEach((command) =>\n command.emit('afterAllHelp', eventContext),\n );\n }\n\n /**\n * You can pass in flags and a description to customise the built-in help option.\n * Pass in false to disable the built-in help option.\n *\n * @example\n * program.helpOption('-?, --help' 'show help'); // customise\n * program.helpOption(false); // disable\n *\n * @param {(string | boolean)} flags\n * @param {string} [description]\n * @return {Command} `this` command for chaining\n */\n\n helpOption(flags, description) {\n // Support enabling/disabling built-in help option.\n if (typeof flags === 'boolean') {\n if (flags) {\n if (this._helpOption === null) this._helpOption = undefined; // reenable\n if (this._defaultOptionGroup) {\n // make the option to store the group\n this._initOptionGroup(this._getHelpOption());\n }\n } else {\n this._helpOption = null; // disable\n }\n return this;\n }\n\n // Customise flags and description.\n this._helpOption = this.createOption(\n flags ?? '-h, --help',\n description ?? 'display help for command',\n );\n // init group unless lazy create\n if (flags || description) this._initOptionGroup(this._helpOption);\n\n return this;\n }\n\n /**\n * Lazy create help option.\n * Returns null if has been disabled with .helpOption(false).\n *\n * @returns {(Option | null)} the help option\n * @package\n */\n _getHelpOption() {\n // Lazy create help option on demand.\n if (this._helpOption === undefined) {\n this.helpOption(undefined, undefined);\n }\n return this._helpOption;\n }\n\n /**\n * Supply your own option to use for the built-in help option.\n * This is an alternative to using helpOption() to customise the flags and description etc.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addHelpOption(option) {\n this._helpOption = option;\n this._initOptionGroup(option);\n return this;\n }\n\n /**\n * Output help information and exit.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n help(contextOptions) {\n this.outputHelp(contextOptions);\n let exitCode = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\n if (\n exitCode === 0 &&\n contextOptions &&\n typeof contextOptions !== 'function' &&\n contextOptions.error\n ) {\n exitCode = 1;\n }\n // message: do not have all displayed text available so only passing placeholder.\n this._exit(exitCode, 'commander.help', '(outputHelp)');\n }\n\n /**\n * // Do a little typing to coordinate emit and listener for the help text events.\n * @typedef HelpTextEventContext\n * @type {object}\n * @property {boolean} error\n * @property {Command} command\n * @property {function} write\n */\n\n /**\n * Add additional text to be displayed with the built-in help.\n *\n * Position is 'before' or 'after' to affect just this command,\n * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n *\n * @param {string} position - before or after built-in help\n * @param {(string | Function)} text - string to add, or a function returning a string\n * @return {Command} `this` command for chaining\n */\n\n addHelpText(position, text) {\n const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n if (!allowedValues.includes(position)) {\n throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n\n const helpEvent = `${position}Help`;\n this.on(helpEvent, (/** @type {HelpTextEventContext} */ context) => {\n let helpStr;\n if (typeof text === 'function') {\n helpStr = text({ error: context.error, command: context.command });\n } else {\n helpStr = text;\n }\n // Ignore falsy value when nothing to output.\n if (helpStr) {\n context.write(`${helpStr}\\n`);\n }\n });\n return this;\n }\n\n /**\n * Output help information if help flags specified\n *\n * @param {Array} args - array of options to search for help flags\n * @private\n */\n\n _outputHelpIfRequested(args) {\n const helpOption = this._getHelpOption();\n const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n if (helpRequested) {\n this.outputHelp();\n // (Do not have all displayed text available so only passing placeholder.)\n this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n }\n }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n // Testing for these options:\n // --inspect[=[host:]port]\n // --inspect-brk[=[host:]port]\n // --inspect-port=[host:]port\n return args.map((arg) => {\n if (!arg.startsWith('--inspect')) {\n return arg;\n }\n let debugOption;\n let debugHost = '127.0.0.1';\n let debugPort = '9229';\n let match;\n if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n // e.g. --inspect\n debugOption = match[1];\n } else if (\n (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n ) {\n debugOption = match[1];\n if (/^\\d+$/.test(match[3])) {\n // e.g. --inspect=1234\n debugPort = match[3];\n } else {\n // e.g. --inspect=localhost\n debugHost = match[3];\n }\n } else if (\n (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n ) {\n // e.g. --inspect=localhost:1234\n debugOption = match[1];\n debugHost = match[3];\n debugPort = match[4];\n }\n\n if (debugOption && debugPort !== '0') {\n return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n }\n return arg;\n });\n}\n\n/**\n * @returns {boolean | undefined}\n * @package\n */\nfunction useColor() {\n // Test for common conventions.\n // NB: the observed behaviour is in combination with how author adds color! For example:\n // - we do not test NODE_DISABLE_COLORS, but util:styletext does\n // - we do test NO_COLOR, but Chalk does not\n //\n // References:\n // https://no-color.org\n // https://bixense.com/clicolors/\n // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n if (\n process.env.NO_COLOR ||\n process.env.FORCE_COLOR === '0' ||\n process.env.FORCE_COLOR === 'false'\n )\n return false;\n if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n return true;\n return undefined;\n}\n\nexports.Command = Command;\nexports.useColor = useColor; // exporting for tests\n","const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\nexports.program = new Command();\n\nexports.createCommand = (name) => new Command(name);\nexports.createOption = (flags, description) => new Option(flags, description);\nexports.createArgument = (name, description) => new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\n","#!/usr/bin/env node\nimport { readFileSync, realpathSync } from \"node:fs\";\nimport process from \"node:process\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Harness } from \"@oopst/parsers\";\nimport { Command } from \"commander\";\nimport { DEFAULT_LOOKBACK_DAYS, readCliEnv } from \"./config\";\nimport { EXIT, SyncError } from \"./sync/errors\";\nimport { buildRealParserFactory } from \"./sync/parser-factory\";\nimport { runSync } from \"./sync/run\";\n\ntype PackageJson = {\n\tversion?: string;\n};\n\nfunction readPackageVersion(): string {\n\tconst raw = readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\");\n\tconst parsed = JSON.parse(raw) as PackageJson;\n\tif (typeof parsed.version === \"string\" && parsed.version.length > 0) {\n\t\treturn parsed.version;\n\t}\n\treturn \"0.0.0\";\n}\n\nconst VERSION = readPackageVersion();\nconst SUPPORTED_HARNESSES = [\"codex\", \"claude_code\", \"pi\", \"hermes\"] as const satisfies readonly Harness[];\n\nfunction writeStdoutLine(msg: string): void {\n\tprocess.stdout.write(`${msg}\\n`);\n}\n\nfunction writeStderrLine(msg: string): void {\n\tprocess.stderr.write(`${msg}\\n`);\n}\n\nfunction writeUnknownError(err: unknown): void {\n\twriteStderrLine(err instanceof Error ? (err.stack ?? err.message) : String(err));\n}\n\nfunction isEntrypoint(): boolean {\n\tconst [, argvPath] = process.argv;\n\treturn argvPath ? realpathSync(fileURLToPath(import.meta.url)) === realpathSync(argvPath) : false;\n}\n\nfunction isCommanderInfoExit(err: unknown): boolean {\n\tconst { code } = err as { code?: string };\n\treturn code === \"commander.version\" || code === \"commander.help\" || code === \"commander.helpDisplayed\";\n}\n\nfunction parseHarnessFilter(value: string | undefined): Harness | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tif ((SUPPORTED_HARNESSES as readonly string[]).includes(value)) {\n\t\treturn value as Harness;\n\t}\n\twriteStderrLine(`error: --harness must be one of ${SUPPORTED_HARNESSES.join(\"|\")}`);\n\tprocess.exit(EXIT.invalidArguments);\n}\n\nfunction buildCli(): Command {\n\tconst env = readCliEnv();\n\tconst program = new Command();\n\n\tprogram\n\t\t.name(\"oopst\")\n\t\t.description(\"OopsT — track AI coding token usage across users and devices\")\n\t\t.version(VERSION)\n\t\t.exitOverride();\n\n\tprogram\n\t\t.command(\"sync\")\n\t\t.description(\"Scan local Codex and Claude Code logs and upload hourly usage records\")\n\t\t.option(\"--token <token>\", \"CLI API token (or OOPST_TOKEN env)\")\n\t\t.option(\"--device <name>\", \"Device name (or OOPST_DEVICE env)\")\n\t\t.option(\"--server <url>\", \"Server base URL\", env.serverUrl)\n\t\t.option(\"--lookback-days <days>\", \"Override watermark lookback\", DEFAULT_LOOKBACK_DAYS)\n\t\t.option(\"--harness <harness>\", \"Restrict to codex|claude_code|pi|hermes\")\n\t\t.option(\"--dry-run\", \"Parse and print without uploading\", false)\n\t\t.option(\"--verbose\", \"Verbose logs\", false)\n\t\t.action(\n\t\t\tasync (raw: {\n\t\t\t\ttoken?: string;\n\t\t\t\tdevice?: string;\n\t\t\t\tserver: string;\n\t\t\t\tlookbackDays: string;\n\t\t\t\tharness?: string;\n\t\t\t\tdryRun: boolean;\n\t\t\t\tverbose: boolean;\n\t\t\t}) => {\n\t\t\t\tconst token = raw.token ?? env.token;\n\t\t\t\tconst device = raw.device ?? env.device;\n\t\t\t\tconst harness = parseHarnessFilter(raw.harness);\n\n\t\t\t\tif (!(token && device)) {\n\t\t\t\t\twriteStderrLine(\"error: --token and --device are required (or set OOPST_TOKEN / OOPST_DEVICE)\");\n\t\t\t\t\tprocess.exit(EXIT.invalidArguments);\n\t\t\t\t}\n\n\t\t\t\tconst lookbackDays = Number.parseInt(raw.lookbackDays, 10);\n\t\t\t\tif (!Number.isFinite(lookbackDays) || lookbackDays < 0) {\n\t\t\t\t\twriteStderrLine(\"error: --lookback-days must be a non-negative integer\");\n\t\t\t\t\tprocess.exit(EXIT.invalidArguments);\n\t\t\t\t}\n\n\t\t\t\tconst factory = buildRealParserFactory();\n\t\t\t\tlet sourcesExistedHint = false;\n\t\t\t\tconst parserFactory = (ctx: Parameters<typeof factory>[0]): ReturnType<typeof factory> => {\n\t\t\t\t\tconst real = factory(ctx);\n\t\t\t\t\tsourcesExistedHint = real.anySourceExisted;\n\t\t\t\t\treturn real;\n\t\t\t\t};\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await runSync({\n\t\t\t\t\t\ttoken: token,\n\t\t\t\t\t\tdevice: device,\n\t\t\t\t\t\tserverUrl: raw.server,\n\t\t\t\t\t\tlookbackDays: lookbackDays,\n\t\t\t\t\t\tharness: harness,\n\t\t\t\t\t\tdryRun: raw.dryRun,\n\t\t\t\t\t\tverbose: raw.verbose,\n\t\t\t\t\t\tcolor: process.stdout.isTTY === true,\n\t\t\t\t\t\tlogger: {\n\t\t\t\t\t\t\tinfo: writeStdoutLine,\n\t\t\t\t\t\t\terror: writeStderrLine,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tparserFactory: parserFactory,\n\t\t\t\t\t\tget sourcesExistedHint() {\n\t\t\t\t\t\t\treturn sourcesExistedHint;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tprocess.exit(result.exitCode);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof SyncError) {\n\t\t\t\t\t\twriteStderrLine(err.message);\n\t\t\t\t\t\tprocess.exit(err.exitCode);\n\t\t\t\t\t}\n\t\t\t\t\twriteUnknownError(err);\n\t\t\t\t\tprocess.exit(EXIT.generalFailure);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\treturn program;\n}\n\nif (isEntrypoint()) {\n\tbuildCli()\n\t\t.parseAsync(process.argv)\n\t\t.catch((err: unknown) => {\n\t\t\tif (isCommanderInfoExit(err)) {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t\twriteUnknownError(err);\n\t\t\tprocess.exit(EXIT.generalFailure);\n\t\t});\n}\n\nexport { buildCli };\n","import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n program,\n createCommand,\n createArgument,\n createOption,\n CommanderError,\n InvalidArgumentError,\n InvalidOptionArgumentError, // deprecated old name\n Command,\n Argument,\n Option,\n Help,\n} = commander;\n","import process from \"node:process\";\n\nconst DEFAULT_SERVER_URL = \"http://localhost:15433\";\nconst DEFAULT_LOOKBACK_DAYS = \"2\";\nconst runtimeEnv = process[\"env\"] as Record<string, string | undefined>;\n\ntype CliEnv = {\n\ttoken: string | undefined;\n\tdevice: string | undefined;\n\tserverUrl: string;\n\tclaudeConfigDir: string | undefined;\n\tpiAgentDir: string | undefined;\n\tpiSessionDir: string | undefined;\n\thermesAgentDir: string | undefined;\n\thermesSessionDir: string | undefined;\n};\n\nfunction readCliEnv(): CliEnv {\n\treturn {\n\t\ttoken: runtimeEnv[\"OOPST_TOKEN\"],\n\t\tdevice: runtimeEnv[\"OOPST_DEVICE\"],\n\t\tserverUrl: runtimeEnv[\"OOPST_SERVER\"] ?? DEFAULT_SERVER_URL,\n\t\tclaudeConfigDir: runtimeEnv[\"CLAUDE_CONFIG_DIR\"],\n\t\tpiAgentDir: runtimeEnv[\"PI_CODING_AGENT_DIR\"],\n\t\tpiSessionDir: runtimeEnv[\"PI_CODING_AGENT_SESSION_DIR\"],\n\t\thermesAgentDir: runtimeEnv[\"HERMES_CODING_AGENT_DIR\"],\n\t\thermesSessionDir: runtimeEnv[\"HERMES_CODING_AGENT_SESSION_DIR\"],\n\t};\n}\n\nexport type { CliEnv };\nexport { DEFAULT_LOOKBACK_DAYS, DEFAULT_SERVER_URL, readCliEnv };\n","/**\n * Phase-4 CLI exit codes. The mapping is part of the public contract — schedulers\n * (cron, launchd) rely on these to distinguish transient from permanent failures.\n */\nconst SUCCESS_EXIT_CODE = 0;\nconst ZERO_BUCKETS_EXIT_CODE = 1;\nconst UNAUTHORIZED_EXIT_CODE = 2;\nconst NETWORK_ERROR_EXIT_CODE = 3;\nconst INVALID_ARGUMENTS_EXIT_CODE = 4;\nconst GENERAL_FAILURE_EXIT_CODE = 5;\n\nconst EXIT = {\n\tsuccess: SUCCESS_EXIT_CODE,\n\tzeroBucketsButSourcesExist: ZERO_BUCKETS_EXIT_CODE,\n\tunauthorized: UNAUTHORIZED_EXIT_CODE,\n\tnetworkError: NETWORK_ERROR_EXIT_CODE,\n\tinvalidArguments: INVALID_ARGUMENTS_EXIT_CODE,\n\tgeneralFailure: GENERAL_FAILURE_EXIT_CODE,\n} as const;\n\ntype ExitCode = (typeof EXIT)[keyof typeof EXIT];\n\nclass SyncError extends Error {\n\tpublic readonly exitCode: ExitCode;\n\tpublic constructor(exitCode: ExitCode, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SyncError\";\n\t\tthis.exitCode = exitCode;\n\t}\n}\n\nfunction isTrpcUnauthorized(err: unknown): boolean {\n\tif (typeof err !== \"object\" || err === null) {\n\t\treturn false;\n\t}\n\tconst candidate = err as { data?: { code?: string }; message?: string };\n\treturn candidate.data?.code === \"UNAUTHORIZED\";\n}\n\nconst NETWORK_ERROR_CODES = [\"ECONNREFUSED\", \"ENOTFOUND\", \"ECONNRESET\", \"EAI_AGAIN\", \"ETIMEDOUT\"];\nconst NETWORK_ERROR_PATTERN = /fetch failed|network|ECONN|ENOTFOUND|ETIMEDOUT/iu;\n\nfunction isNetworkError(err: unknown): boolean {\n\tif (typeof err !== \"object\" || err === null) {\n\t\treturn false;\n\t}\n\tconst code = (err as { cause?: { code?: string } }).cause?.code;\n\tif (code && NETWORK_ERROR_CODES.includes(code)) {\n\t\treturn true;\n\t}\n\tconst message = (err as Error).message ?? \"\";\n\treturn NETWORK_ERROR_PATTERN.test(message);\n}\n\nexport type { ExitCode };\nexport { EXIT, isNetworkError, isTrpcUnauthorized, SyncError };\n","import { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { parseClaude, parseCodex, parseHermes, parsePi } from \"@oopst/parsers\";\nimport { readCliEnv } from \"../config\";\nimport type { ParserBundle, ParserFactoryContext } from \"./run\";\n\ntype RealParserResult = ParserBundle & {\n\t/** Reports whether ANY source root existed for any harness. */\n\tanySourceExisted: boolean;\n};\n\nfunction sessionsRoot(agentDir: string | undefined, sessionDir: string | undefined, fallbackAgentDir: string): string {\n\treturn sessionDir ?? join(agentDir ?? fallbackAgentDir, \"sessions\");\n}\n\nfunction buildRealParserFactory(): (ctx: ParserFactoryContext) => RealParserResult {\n\treturn (ctx) => {\n\t\tconst home = homedir();\n\t\tconst env = readCliEnv();\n\t\tconst codexSessionsRoot = join(home, \".codex\", \"sessions\");\n\t\tconst codexArchivedRoot = join(home, \".codex\", \"archived_sessions\");\n\t\tconst codexExists = existsSync(codexSessionsRoot) || existsSync(codexArchivedRoot);\n\n\t\tconst envDir = env.claudeConfigDir;\n\t\tconst claudeRoot = envDir == null ? join(home, \".claude\", \"projects\") : join(envDir, \"projects\");\n\t\tconst claudeExists = existsSync(claudeRoot);\n\n\t\tconst piRoot = sessionsRoot(env.piAgentDir, env.piSessionDir, join(home, \".pi\", \"agent\"));\n\t\tconst piExists = existsSync(piRoot);\n\n\t\tconst hermesRoot = sessionsRoot(env.hermesAgentDir, env.hermesSessionDir, join(home, \".hermes\", \"agent\"));\n\t\tconst hermesExists = existsSync(hermesRoot);\n\n\t\treturn {\n\t\t\tanySourceExisted: codexExists || claudeExists || piExists || hermesExists,\n\t\t\tcodex: parseCodex({ cutoff: ctx.cutoff }),\n\t\t\tclaudeCode: parseClaude({ cutoff: ctx.cutoff, root: claudeRoot }),\n\t\t\tpi: parsePi({ cutoff: ctx.cutoff, root: piRoot }),\n\t\t\thermes: parseHermes({ cutoff: ctx.cutoff, root: hermesRoot }),\n\t\t};\n\t};\n}\n\nexport type { RealParserResult };\nexport { buildRealParserFactory };\n","export { parseClaude } from \"./claude/index\";\nexport { parseCodex } from \"./codex/index\";\nexport { parseHermes, parsePi } from \"./pi/index\";\nexport type { Harness, Logger, ParsedBucket } from \"./types\";\nexport { consoleLogger } from \"./types\";\nexport { walk } from \"./walk\";\n","import { stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { readClaudeConfigDir } from \"../config\";\nimport { consoleLogger, type Logger, type ParsedBucket } from \"../types\";\nimport { walk } from \"../walk\";\nimport { bucketizeClaudeFile } from \"./bucketize\";\n\ntype ParseClaudeOptions = {\n\t/**\n\t * Absolute path to the Claude `projects` root. Defaults are derived in this order:\n\t * 1. `$CLAUDE_CONFIG_DIR/projects` if `CLAUDE_CONFIG_DIR` is set\n\t * 2. `~/.claude/projects`\n\t */\n\treadonly root?: string;\n\t/** Files with mtime < cutoff are skipped. */\n\treadonly cutoff: Date;\n\t/** Logger for malformed-line warnings. Defaults to `consoleLogger`. */\n\treadonly logger?: Logger;\n};\n\nasync function isFile(path: string): Promise<boolean> {\n\ttry {\n\t\treturn (await stat(path)).isFile();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction defaultRoot(): string {\n\tconst envDir = readClaudeConfigDir();\n\tif (envDir !== undefined) {\n\t\treturn join(envDir, \"projects\");\n\t}\n\treturn join(homedir(), \".claude\", \"projects\");\n}\n\n/**\n * Walk the Claude `projects` root and yield `ParsedBucket` values for every\n * (model, hourUtc) tuple encountered. Passing a single `.jsonl` file as `root`\n * parses just that file (useful for tests).\n */\nasync function* parseClaude(opts: ParseClaudeOptions): AsyncIterable<ParsedBucket> {\n\tconst logger = opts.logger ?? consoleLogger;\n\tconst root = opts.root ?? defaultRoot();\n\n\tif (await isFile(root)) {\n\t\tyield* bucketizeClaudeFile(root, logger);\n\t\treturn;\n\t}\n\n\tfor await (const file of walk(root, opts.cutoff)) {\n\t\tyield* bucketizeClaudeFile(file, logger);\n\t}\n}\n\nexport type { ParseClaudeOptions };\nexport { parseClaude };\n","import process from \"node:process\";\n\nconst runtimeEnv = process[\"env\"] as Record<string, string | undefined>;\n\nfunction readClaudeConfigDir(): string | undefined {\n\tconst value = runtimeEnv[\"CLAUDE_CONFIG_DIR\"]?.trim();\n\treturn value === undefined || value.length === 0 ? undefined : value;\n}\n\nfunction readPiAgentDir(): string | undefined {\n\tconst value = runtimeEnv[\"PI_CODING_AGENT_DIR\"]?.trim();\n\treturn value === undefined || value.length === 0 ? undefined : value;\n}\n\nfunction readPiSessionDir(): string | undefined {\n\tconst value = runtimeEnv[\"PI_CODING_AGENT_SESSION_DIR\"]?.trim();\n\treturn value === undefined || value.length === 0 ? undefined : value;\n}\n\nfunction readHermesAgentDir(): string | undefined {\n\tconst value = runtimeEnv[\"HERMES_CODING_AGENT_DIR\"]?.trim();\n\treturn value === undefined || value.length === 0 ? undefined : value;\n}\n\nfunction readHermesSessionDir(): string | undefined {\n\tconst value = runtimeEnv[\"HERMES_CODING_AGENT_SESSION_DIR\"]?.trim();\n\treturn value === undefined || value.length === 0 ? undefined : value;\n}\n\nexport { readClaudeConfigDir, readHermesAgentDir, readHermesSessionDir, readPiAgentDir, readPiSessionDir };\n","import process from \"node:process\";\n\n/** Top-level AI coding harness the bucket originates from. */\ntype Harness = \"codex\" | \"claude_code\" | \"pi\" | \"hermes\";\n\n/**\n * One hourly bucket of token usage emitted by a parser.\n *\n * PRIVACY CONTRACT (enforced by test/privacy.test.ts):\n * No string field beyond `harness` (a literal union) and `model` (the raw model\n * id from the source log) may appear on this type. `sessionIds` holds opaque\n * ids — for MVP we use absolute file paths, which leak local paths off the\n * device only if a future change carries `sessionIds` over the wire. The CLI\n * MUST translate `sessionIds` to `sessionCount` (its `.size`) before upload.\n */\ntype ParsedBucket = {\n\t/** Harness that produced the underlying events. */\n\treadonly harness: Harness;\n\t/** Raw model id from the source log (e.g. \"gpt-5\", \"claude-sonnet-4-5-20250929\"). */\n\treadonly model: string;\n\t/** Start of the UTC hour the events fall into. */\n\treadonly hourUtc: Date;\n\t/** Sum of input tokens, >= 0. */\n\treadonly inputTokens: number;\n\t/** Sum of output tokens, >= 0. */\n\treadonly outputTokens: number;\n\t/** Sum of cache-read tokens, >= 0. */\n\treadonly cacheReadTokens: number;\n\t/** Sum of cache-create / cache-write tokens, >= 0. */\n\treadonly cacheCreateTokens: number;\n\t/** Opaque session identifiers contributing to this bucket. CLI uses `.size` as `session_count`. */\n\treadonly sessionIds: ReadonlySet<string>;\n\t/** First token-bearing event timestamp for the source session. */\n\treadonly sessionStartedAt: Date;\n\t/** Last token-bearing event timestamp for the source session. */\n\treadonly sessionLastSeenAt: Date;\n};\n\n/** Logger shape used by parsers to report skipped lines, malformed events, etc. */\ntype Logger = {\n\twarn: (msg: string, meta?: Record<string, unknown>) => void;\n};\n\nfunction formatLogMeta(meta: Record<string, unknown>): string {\n\treturn JSON.stringify(meta);\n}\n\n/** Default logger writing warnings to stderr. */\nconst consoleLogger: Logger = {\n\twarn: (msg, meta) => {\n\t\tif (meta === undefined) {\n\t\t\tprocess.stderr.write(`${msg}\\n`);\n\t\t} else {\n\t\t\tprocess.stderr.write(`${msg} ${formatLogMeta(meta)}\\n`);\n\t\t}\n\t},\n};\n\nexport type { Harness, Logger, ParsedBucket };\nexport { consoleLogger };\n","import { readdir, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\n/**\n * Yield absolute paths of all `.jsonl` files under `root` whose mtime is at or\n * after `cutoff`. A missing or unreadable root yields nothing (no throw).\n * Subdirectories are recursed; symlinks are followed by `stat`.\n */\nexport async function* walk(root: string, cutoff: Date): AsyncIterable<string> {\n\tlet entries: { name: string; isDirectory: () => boolean; isFile: () => boolean }[];\n\ttry {\n\t\tentries = await readdir(root, { withFileTypes: true });\n\t} catch {\n\t\treturn;\n\t}\n\n\tfor (const entry of entries) {\n\t\tconst full = join(root, String(entry.name));\n\t\tif (entry.isDirectory()) {\n\t\t\tyield* walk(full, cutoff);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!entry.isFile()) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!entry.name.endsWith(\".jsonl\")) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet mtime: Date;\n\t\ttry {\n\t\t\t// biome-ignore lint/performance/noAwaitInLoops: sequential stat per file is intentional\n\t\t\t({ mtime } = await stat(full));\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (mtime.getTime() >= cutoff.getTime()) {\n\t\t\tyield full;\n\t\t}\n\t}\n}\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\nimport { startOfUtcHour } from \"../codex/bucketize\";\nimport type { Logger, ParsedBucket } from \"../types\";\nimport { isClaudeAssistantEvent } from \"./events\";\n\ntype BucketAccumulator = {\n\thourUtc: Date;\n\tmodel: string;\n\tinputTokens: number;\n\toutputTokens: number;\n\tcacheReadTokens: number;\n\tcacheCreateTokens: number;\n};\n\nfunction key(hourUtc: Date, model: string): string {\n\treturn `${hourUtc.toISOString()}|${model}`;\n}\n\n/**\n * Parse one Claude Code jsonl file into per-(model, hourUtc) buckets.\n *\n * Dedup rule: when both `message.id` and root `requestId` are present, the\n * tuple is recorded on first sight; subsequent lines with the same tuple are\n * ignored (their token counts are dropped). When either is missing, every\n * line contributes (matches CodexBar's behaviour for older logs).\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: line-by-line parser with necessary branching\nexport async function* bucketizeClaudeFile(path: string, logger: Logger): AsyncIterable<ParsedBucket> {\n\tconst buckets = new Map<string, BucketAccumulator>();\n\tconst seenTuples = new Set<string>();\n\tlet lineNo = 0;\n\tlet sessionStartedAt: Date | undefined;\n\tlet sessionLastSeenAt: Date | undefined;\n\n\tconst stream = createReadStream(path, { encoding: \"utf8\" });\n\tconst rl = createInterface({ input: stream, crlfDelay: Number.POSITIVE_INFINITY });\n\n\ttry {\n\t\tfor await (const raw of rl) {\n\t\t\tlineNo += 1;\n\t\t\tconst trimmed = raw.trim();\n\t\t\tif (trimmed.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(trimmed);\n\t\t\t} catch {\n\t\t\t\tlogger.warn(\"malformed jsonl line\", { path: path, line: lineNo });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!isClaudeAssistantEvent(parsed)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst tsMs = Date.parse(parsed.timestamp);\n\t\t\tif (!Number.isFinite(tsMs)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst { message, requestId } = parsed;\n\t\t\tif (message.id !== undefined && requestId !== undefined) {\n\t\t\t\tconst tuple = `${message.id}::${requestId}`;\n\t\t\t\tif (seenTuples.has(tuple)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tseenTuples.add(tuple);\n\t\t\t}\n\n\t\t\tconst { usage } = message;\n\t\t\tconst inputTokens = Math.max(0, usage.input_tokens ?? 0);\n\t\t\tconst outputTokens = Math.max(0, usage.output_tokens ?? 0);\n\t\t\tconst cacheReadTokens = Math.max(0, usage.cache_read_input_tokens ?? 0);\n\t\t\tconst cacheCreateTokens = Math.max(0, usage.cache_creation_input_tokens ?? 0);\n\t\t\tif (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheCreateTokens === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst eventAt = new Date(tsMs);\n\t\t\tif (sessionStartedAt === undefined || eventAt.getTime() < sessionStartedAt.getTime()) {\n\t\t\t\tsessionStartedAt = eventAt;\n\t\t\t}\n\t\t\tif (sessionLastSeenAt === undefined || eventAt.getTime() > sessionLastSeenAt.getTime()) {\n\t\t\t\tsessionLastSeenAt = eventAt;\n\t\t\t}\n\n\t\t\tconst hourUtc = startOfUtcHour(eventAt);\n\t\t\tconst k = key(hourUtc, message.model);\n\t\t\tconst existing = buckets.get(k);\n\t\t\tif (existing === undefined) {\n\t\t\t\tbuckets.set(k, {\n\t\t\t\t\thourUtc: hourUtc,\n\t\t\t\t\tmodel: message.model,\n\t\t\t\t\tinputTokens: inputTokens,\n\t\t\t\t\toutputTokens: outputTokens,\n\t\t\t\t\tcacheReadTokens: cacheReadTokens,\n\t\t\t\t\tcacheCreateTokens: cacheCreateTokens,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texisting.inputTokens += inputTokens;\n\t\t\t\texisting.outputTokens += outputTokens;\n\t\t\t\texisting.cacheReadTokens += cacheReadTokens;\n\t\t\t\texisting.cacheCreateTokens += cacheCreateTokens;\n\t\t\t}\n\t\t}\n\t} finally {\n\t\trl.close();\n\t\tstream.destroy();\n\t}\n\n\tif (sessionStartedAt === undefined || sessionLastSeenAt === undefined) {\n\t\treturn;\n\t}\n\n\tconst sessionIds: ReadonlySet<string> = new Set([path]);\n\tfor (const acc of buckets.values()) {\n\t\tyield {\n\t\t\tharness: \"claude_code\",\n\t\t\tmodel: acc.model,\n\t\t\thourUtc: acc.hourUtc,\n\t\t\tinputTokens: acc.inputTokens,\n\t\t\toutputTokens: acc.outputTokens,\n\t\t\tcacheReadTokens: acc.cacheReadTokens,\n\t\t\tcacheCreateTokens: acc.cacheCreateTokens,\n\t\t\tsessionIds: sessionIds,\n\t\t\tsessionStartedAt: sessionStartedAt,\n\t\t\tsessionLastSeenAt: sessionLastSeenAt,\n\t\t};\n\t}\n}\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\nimport type { Logger, ParsedBucket } from \"../types\";\nimport { isCodexTokenCountEvent, isCodexTurnContextEvent, pickCodexDelta, pickCodexEventModel } from \"./events\";\n\n/** Truncate a Date to the start of its UTC hour. Returns a new Date. */\nfunction startOfUtcHour(d: Date): Date {\n\treturn new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), 0, 0, 0));\n}\n\ntype BucketAccumulator = {\n\thourUtc: Date;\n\tmodel: string;\n\tinputTokens: number;\n\toutputTokens: number;\n\tcacheReadTokens: number;\n\tcacheCreateTokens: number;\n};\n\nfunction key(hourUtc: Date, model: string): string {\n\treturn `${hourUtc.toISOString()}|${model}`;\n}\n\n/**\n * Parse one Codex jsonl file into per-(model, hourUtc) buckets.\n * Malformed JSON lines are skipped; each skip is reported to `logger.warn`\n * once with `{ path, line }` metadata. Yields one ParsedBucket per Map entry.\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: line-by-line parser with necessary branching\nasync function* bucketizeCodexFile(path: string, logger: Logger): AsyncIterable<ParsedBucket> {\n\tconst buckets = new Map<string, BucketAccumulator>();\n\tlet currentModel: string | undefined;\n\tlet sawTurnContext = false;\n\tlet lineNo = 0;\n\tlet sessionStartedAt: Date | undefined;\n\tlet sessionLastSeenAt: Date | undefined;\n\n\tconst stream = createReadStream(path, { encoding: \"utf8\" });\n\tconst rl = createInterface({ input: stream, crlfDelay: Number.POSITIVE_INFINITY });\n\n\ttry {\n\t\tfor await (const raw of rl) {\n\t\t\tlineNo += 1;\n\t\t\tconst trimmed = raw.trim();\n\t\t\tif (trimmed.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(trimmed);\n\t\t\t} catch {\n\t\t\t\tlogger.warn(\"malformed jsonl line\", { path: path, line: lineNo });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (isCodexTurnContextEvent(parsed)) {\n\t\t\t\tconst model = parsed.payload.model ?? parsed.payload.info?.model;\n\t\t\t\tif (model !== undefined) {\n\t\t\t\t\tcurrentModel = model;\n\t\t\t\t\tsawTurnContext = true;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!isCodexTokenCountEvent(parsed)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst tsMs = Date.parse(parsed.timestamp);\n\t\t\tif (!Number.isFinite(tsMs)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst eventModel = pickCodexEventModel(parsed);\n\t\t\tconst model = sawTurnContext ? (currentModel ?? eventModel) : (eventModel ?? currentModel);\n\t\t\tif (model === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst delta = pickCodexDelta(parsed);\n\t\t\tif (delta === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst inputTokens = Math.max(0, delta.input_tokens ?? 0);\n\t\t\tconst outputTokens = Math.max(0, delta.output_tokens ?? 0);\n\t\t\tconst cacheReadTokens = Math.max(0, delta.cached_input_tokens ?? delta.cache_read_input_tokens ?? 0);\n\t\t\tif (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst eventAt = new Date(tsMs);\n\t\t\tif (sessionStartedAt === undefined || eventAt.getTime() < sessionStartedAt.getTime()) {\n\t\t\t\tsessionStartedAt = eventAt;\n\t\t\t}\n\t\t\tif (sessionLastSeenAt === undefined || eventAt.getTime() > sessionLastSeenAt.getTime()) {\n\t\t\t\tsessionLastSeenAt = eventAt;\n\t\t\t}\n\n\t\t\tconst hourUtc = startOfUtcHour(eventAt);\n\t\t\tconst k = key(hourUtc, model);\n\t\t\tconst existing = buckets.get(k);\n\t\t\tif (existing === undefined) {\n\t\t\t\tbuckets.set(k, {\n\t\t\t\t\thourUtc: hourUtc,\n\t\t\t\t\tmodel: model,\n\t\t\t\t\tinputTokens: inputTokens,\n\t\t\t\t\toutputTokens: outputTokens,\n\t\t\t\t\tcacheReadTokens: cacheReadTokens,\n\t\t\t\t\tcacheCreateTokens: 0,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texisting.inputTokens += inputTokens;\n\t\t\t\texisting.outputTokens += outputTokens;\n\t\t\t\texisting.cacheReadTokens += cacheReadTokens;\n\t\t\t}\n\t\t}\n\t} finally {\n\t\trl.close();\n\t\tstream.destroy();\n\t}\n\n\tif (sessionStartedAt === undefined || sessionLastSeenAt === undefined) {\n\t\treturn;\n\t}\n\n\tconst sessionIds: ReadonlySet<string> = new Set([path]);\n\tfor (const acc of buckets.values()) {\n\t\tyield {\n\t\t\tharness: \"codex\",\n\t\t\tmodel: acc.model,\n\t\t\thourUtc: acc.hourUtc,\n\t\t\tinputTokens: acc.inputTokens,\n\t\t\toutputTokens: acc.outputTokens,\n\t\t\tcacheReadTokens: acc.cacheReadTokens,\n\t\t\tcacheCreateTokens: acc.cacheCreateTokens,\n\t\t\tsessionIds: sessionIds,\n\t\t\tsessionStartedAt: sessionStartedAt,\n\t\t\tsessionLastSeenAt: sessionLastSeenAt,\n\t\t};\n\t}\n}\n\nexport { bucketizeCodexFile, startOfUtcHour };\n","/**\n * Subset of Codex jsonl event shapes that the parser consumes.\n *\n * The full Codex format carries many other event types (`session_meta`,\n * `task_started`, etc.); they are silently ignored. We never look at any\n * field that could contain prompt or tool-call text.\n */\n\ntype CodexTokenCountEvent = {\n\treadonly type: \"event_msg\";\n\treadonly timestamp: string;\n\treadonly payload: {\n\t\treadonly type: \"token_count\";\n\t\treadonly info?: {\n\t\t\treadonly model?: string;\n\t\t\t// biome-ignore lint/style/useNamingConvention: JSON field names from Codex log format\n\t\t\treadonly last_token_usage?: CodexUsageDelta;\n\t\t\t// biome-ignore lint/style/useNamingConvention: JSON field names from Codex log format\n\t\t\treadonly total_token_usage?: CodexUsageDelta;\n\t\t};\n\t\treadonly model?: string;\n\t};\n\treadonly model?: string;\n};\n\ntype CodexTurnContextEvent = {\n\treadonly type: \"turn_context\";\n\treadonly timestamp: string;\n\treadonly payload: {\n\t\treadonly model?: string;\n\t\treadonly info?: {\n\t\t\treadonly model?: string;\n\t\t};\n\t};\n};\n\ntype CodexUsageDelta = {\n\t// biome-ignore lint/style/useNamingConvention: JSON field names from Codex log format\n\treadonly input_tokens?: number;\n\t// biome-ignore lint/style/useNamingConvention: JSON field names from Codex log format\n\treadonly output_tokens?: number;\n\t// biome-ignore lint/style/useNamingConvention: JSON field names from Codex log format\n\treadonly cached_input_tokens?: number;\n\t// biome-ignore lint/style/useNamingConvention: JSON field names from Codex log format\n\treadonly cache_read_input_tokens?: number;\n};\n\ntype CodexEvent = CodexTokenCountEvent | CodexTurnContextEvent;\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction isCodexUsageDelta(value: unknown): value is CodexUsageDelta {\n\tif (!isObject(value)) {\n\t\treturn false;\n\t}\n\tconst keys = [\"input_tokens\", \"output_tokens\", \"cached_input_tokens\", \"cache_read_input_tokens\"] as const;\n\tfor (const k of keys) {\n\t\tconst v = value[k];\n\t\tif (v !== undefined && !isFiniteNumber(v)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: type guard for nested jsonl structure\nfunction isCodexTokenCountEvent(value: unknown): value is CodexTokenCountEvent {\n\tif (!isObject(value)) {\n\t\treturn false;\n\t}\n\tif (value[\"type\"] !== \"event_msg\") {\n\t\treturn false;\n\t}\n\tif (typeof value[\"timestamp\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tconst payload = value[\"payload\"];\n\tif (!isObject(payload)) {\n\t\treturn false;\n\t}\n\tif (payload[\"type\"] !== \"token_count\") {\n\t\treturn false;\n\t}\n\tconst info = payload[\"info\"];\n\tif (info !== undefined) {\n\t\tif (!isObject(info)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (info[\"model\"] !== undefined && typeof info[\"model\"] !== \"string\") {\n\t\t\treturn false;\n\t\t}\n\t\tif (info[\"last_token_usage\"] !== undefined && !isCodexUsageDelta(info[\"last_token_usage\"])) {\n\t\t\treturn false;\n\t\t}\n\t\tif (info[\"total_token_usage\"] !== undefined && !isCodexUsageDelta(info[\"total_token_usage\"])) {\n\t\t\treturn false;\n\t\t}\n\t}\n\tif (payload[\"model\"] !== undefined && typeof payload[\"model\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tif (value[\"model\"] !== undefined && typeof value[\"model\"] !== \"string\") {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isCodexTurnContextEvent(value: unknown): value is CodexTurnContextEvent {\n\tif (!isObject(value)) {\n\t\treturn false;\n\t}\n\tif (value[\"type\"] !== \"turn_context\") {\n\t\treturn false;\n\t}\n\tif (typeof value[\"timestamp\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tconst payload = value[\"payload\"];\n\tif (!isObject(payload)) {\n\t\treturn false;\n\t}\n\tif (payload[\"model\"] !== undefined && typeof payload[\"model\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tconst info = payload[\"info\"];\n\tif (info !== undefined) {\n\t\tif (!isObject(info)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (info[\"model\"] !== undefined && typeof info[\"model\"] !== \"string\") {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/** Convenience: extract `last_token_usage` if present, otherwise `total_token_usage`. */\nfunction pickCodexDelta(event: CodexTokenCountEvent): CodexUsageDelta | undefined {\n\treturn event.payload.info?.last_token_usage ?? event.payload.info?.total_token_usage;\n}\n\n/** Convenience: extract the model attribution from a token_count event (excluding turn_context). */\nfunction pickCodexEventModel(event: CodexTokenCountEvent): string | undefined {\n\treturn event.payload.info?.model ?? event.payload.model ?? event.model;\n}\n\nexport type { CodexEvent, CodexTokenCountEvent, CodexTurnContextEvent, CodexUsageDelta };\nexport { isCodexTokenCountEvent, isCodexTurnContextEvent, pickCodexDelta, pickCodexEventModel };\n","/**\n * Subset of Claude Code jsonl event shapes the parser consumes.\n *\n * We never read `message.content`, `text`, or anything that could carry\n * prompt or completion text. Only ids and numeric usage counts.\n */\n\ntype ClaudeAssistantEvent = {\n\treadonly type: \"assistant\";\n\treadonly timestamp: string;\n\treadonly requestId?: string;\n\treadonly message: {\n\t\treadonly id?: string;\n\t\treadonly model: string;\n\t\treadonly usage: ClaudeUsage;\n\t};\n};\n\ntype ClaudeUsage = {\n\t// biome-ignore lint/style/useNamingConvention: JSON field names from Claude Code log format\n\treadonly input_tokens?: number;\n\t// biome-ignore lint/style/useNamingConvention: JSON field names from Claude Code log format\n\treadonly output_tokens?: number;\n\t// biome-ignore lint/style/useNamingConvention: JSON field names from Claude Code log format\n\treadonly cache_creation_input_tokens?: number;\n\t// biome-ignore lint/style/useNamingConvention: JSON field names from Claude Code log format\n\treadonly cache_read_input_tokens?: number;\n};\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction isClaudeUsage(value: unknown): value is ClaudeUsage {\n\tif (!isObject(value)) {\n\t\treturn false;\n\t}\n\tconst keys = [\"input_tokens\", \"output_tokens\", \"cache_creation_input_tokens\", \"cache_read_input_tokens\"] as const;\n\tfor (const k of keys) {\n\t\tconst v = value[k];\n\t\tif (v !== undefined && !isFiniteNumber(v)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction isClaudeAssistantEvent(value: unknown): value is ClaudeAssistantEvent {\n\tif (!isObject(value)) {\n\t\treturn false;\n\t}\n\tif (value[\"type\"] !== \"assistant\") {\n\t\treturn false;\n\t}\n\tif (typeof value[\"timestamp\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tif (value[\"requestId\"] !== undefined && typeof value[\"requestId\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tconst message = value[\"message\"];\n\tif (!isObject(message)) {\n\t\treturn false;\n\t}\n\tif (message[\"id\"] !== undefined && typeof message[\"id\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tif (typeof message[\"model\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tif (!isClaudeUsage(message[\"usage\"])) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport type { ClaudeAssistantEvent, ClaudeUsage };\nexport { isClaudeAssistantEvent };\n","import { stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { consoleLogger, type Logger, type ParsedBucket } from \"../types\";\nimport { walk } from \"../walk\";\nimport { bucketizeCodexFile } from \"./bucketize\";\n\ntype ParseCodexOptions = {\n\t/** Absolute path to the Codex sessions root. Defaults to `~/.codex/sessions`. */\n\treadonly root?: string;\n\t/** Additional root scanned alongside `root`. Defaults to `~/.codex/archived_sessions`. */\n\treadonly archivedRoot?: string;\n\t/** Files with mtime < cutoff are skipped. */\n\treadonly cutoff: Date;\n\t/** Logger for malformed-line warnings. Defaults to `consoleLogger`. */\n\treadonly logger?: Logger;\n};\n\nasync function isFile(path: string): Promise<boolean> {\n\ttry {\n\t\treturn (await stat(path)).isFile();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Walk one or two Codex source roots and yield `ParsedBucket` values for\n * every (model, hourUtc) tuple encountered. Passing a single `.jsonl` file\n * as `root` parses just that file (useful for tests).\n */\nasync function* parseCodex(opts: ParseCodexOptions): AsyncIterable<ParsedBucket> {\n\tconst logger = opts.logger ?? consoleLogger;\n\tconst home = homedir();\n\tconst root = opts.root ?? join(home, \".codex\", \"sessions\");\n\n\tif (await isFile(root)) {\n\t\tyield* bucketizeCodexFile(root, logger);\n\t\treturn;\n\t}\n\n\tconst roots: string[] = [root];\n\tif (opts.root === undefined && opts.archivedRoot === undefined) {\n\t\troots.push(join(home, \".codex\", \"archived_sessions\"));\n\t} else if (opts.archivedRoot !== undefined) {\n\t\troots.push(opts.archivedRoot);\n\t}\n\n\tfor (const r of roots) {\n\t\t// biome-ignore lint/performance/noAwaitInLoops: sequential root scanning is intentional\n\t\tfor await (const file of walk(r, opts.cutoff)) {\n\t\t\tyield* bucketizeCodexFile(file, logger);\n\t\t}\n\t}\n}\n\nexport type { ParseCodexOptions };\nexport { parseCodex };\n","import { stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { readHermesAgentDir, readHermesSessionDir, readPiAgentDir, readPiSessionDir } from \"../config\";\nimport { consoleLogger, type Logger, type ParsedBucket } from \"../types\";\nimport { walk } from \"../walk\";\nimport { bucketizePiStyleFile, type PiStyleHarness } from \"./bucketize\";\n\ntype ParsePiOptions = {\n\t/** Absolute path to the Pi/Hermes sessions root. Defaults to the harness-specific session directory. */\n\treadonly root?: string;\n\t/** Files with mtime < cutoff are skipped. */\n\treadonly cutoff: Date;\n\t/** Logger for malformed-line warnings. Defaults to `consoleLogger`. */\n\treadonly logger?: Logger;\n};\n\nasync function isFile(path: string): Promise<boolean> {\n\ttry {\n\t\treturn (await stat(path)).isFile();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction defaultPiRoot(): string {\n\tconst sessionDir = readPiSessionDir();\n\tif (sessionDir !== undefined) {\n\t\treturn sessionDir;\n\t}\n\treturn join(readPiAgentDir() ?? join(homedir(), \".pi\", \"agent\"), \"sessions\");\n}\n\nfunction defaultHermesRoot(): string {\n\tconst sessionDir = readHermesSessionDir();\n\tif (sessionDir !== undefined) {\n\t\treturn sessionDir;\n\t}\n\treturn join(readHermesAgentDir() ?? join(homedir(), \".hermes\", \"agent\"), \"sessions\");\n}\n\nasync function* parsePiStyle(\n\topts: ParsePiOptions,\n\tharness: PiStyleHarness,\n\tdefaultRoot: () => string,\n): AsyncIterable<ParsedBucket> {\n\tconst logger = opts.logger ?? consoleLogger;\n\tconst root = opts.root ?? defaultRoot();\n\n\tif (await isFile(root)) {\n\t\tyield* bucketizePiStyleFile(root, harness, logger);\n\t\treturn;\n\t}\n\n\tfor await (const file of walk(root, opts.cutoff)) {\n\t\tyield* bucketizePiStyleFile(file, harness, logger);\n\t}\n}\n\nasync function* parsePi(opts: ParsePiOptions): AsyncIterable<ParsedBucket> {\n\tyield* parsePiStyle(opts, \"pi\", defaultPiRoot);\n}\n\nasync function* parseHermes(opts: ParsePiOptions): AsyncIterable<ParsedBucket> {\n\tyield* parsePiStyle(opts, \"hermes\", defaultHermesRoot);\n}\n\nexport type { ParsePiOptions };\nexport { parseHermes, parsePi };\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\nimport { startOfUtcHour } from \"../codex/bucketize\";\nimport type { Harness, Logger, ParsedBucket } from \"../types\";\nimport { isPiAssistantMessageEntry } from \"./events\";\n\ntype PiStyleHarness = Extract<Harness, \"pi\" | \"hermes\">;\n\ntype BucketAccumulator = {\n\thourUtc: Date;\n\tmodel: string;\n\tinputTokens: number;\n\toutputTokens: number;\n\tcacheReadTokens: number;\n\tcacheCreateTokens: number;\n};\n\nfunction key(hourUtc: Date, model: string): string {\n\treturn `${hourUtc.toISOString()}|${model}`;\n}\n\nfunction eventTimestampMs(entry: { timestamp: string; message: { timestamp?: number } }): number {\n\tif (entry.message.timestamp !== undefined) {\n\t\treturn entry.message.timestamp;\n\t}\n\treturn Date.parse(entry.timestamp);\n}\n\nfunction modelId(provider: string, model: string): string | undefined {\n\tconst trimmedProvider = provider.trim();\n\tconst trimmedModel = model.trim();\n\tif (trimmedProvider.length === 0 || trimmedModel.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn `${trimmedProvider}/${trimmedModel}`;\n}\n\n/**\n * Parse one Pi-style session JSONL file into per-(provider/model, hourUtc)\n * buckets. Pi and Hermes share the same session format; callers choose the\n * harness label.\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: line-by-line parser with necessary branching\nasync function* bucketizePiStyleFile(\n\tpath: string,\n\tharness: PiStyleHarness,\n\tlogger: Logger,\n): AsyncIterable<ParsedBucket> {\n\tconst buckets = new Map<string, BucketAccumulator>();\n\tlet lineNo = 0;\n\tlet sessionStartedAt: Date | undefined;\n\tlet sessionLastSeenAt: Date | undefined;\n\n\tconst stream = createReadStream(path, { encoding: \"utf8\" });\n\tconst rl = createInterface({ input: stream, crlfDelay: Number.POSITIVE_INFINITY });\n\n\ttry {\n\t\tfor await (const raw of rl) {\n\t\t\tlineNo += 1;\n\t\t\tconst trimmed = raw.trim();\n\t\t\tif (trimmed.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet parsed: unknown;\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(trimmed);\n\t\t\t} catch {\n\t\t\t\tlogger.warn(\"malformed jsonl line\", { path: path, line: lineNo });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!isPiAssistantMessageEntry(parsed)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (parsed.message.stopReason === \"aborted\" || parsed.message.stopReason === \"error\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst tsMs = eventTimestampMs(parsed);\n\t\t\tif (!Number.isFinite(tsMs)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst model = modelId(parsed.message.provider, parsed.message.model);\n\t\t\tif (model === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst { usage } = parsed.message;\n\t\t\tconst inputTokens = Math.max(0, usage.input ?? 0);\n\t\t\tconst outputTokens = Math.max(0, usage.output ?? 0);\n\t\t\tconst cacheReadTokens = Math.max(0, usage.cacheRead ?? 0);\n\t\t\tconst cacheCreateTokens = Math.max(0, usage.cacheWrite ?? 0);\n\t\t\tif (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheCreateTokens === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst eventAt = new Date(tsMs);\n\t\t\tif (sessionStartedAt === undefined || eventAt.getTime() < sessionStartedAt.getTime()) {\n\t\t\t\tsessionStartedAt = eventAt;\n\t\t\t}\n\t\t\tif (sessionLastSeenAt === undefined || eventAt.getTime() > sessionLastSeenAt.getTime()) {\n\t\t\t\tsessionLastSeenAt = eventAt;\n\t\t\t}\n\n\t\t\tconst hourUtc = startOfUtcHour(eventAt);\n\t\t\tconst k = key(hourUtc, model);\n\t\t\tconst existing = buckets.get(k);\n\t\t\tif (existing === undefined) {\n\t\t\t\tbuckets.set(k, {\n\t\t\t\t\thourUtc: hourUtc,\n\t\t\t\t\tmodel: model,\n\t\t\t\t\tinputTokens: inputTokens,\n\t\t\t\t\toutputTokens: outputTokens,\n\t\t\t\t\tcacheReadTokens: cacheReadTokens,\n\t\t\t\t\tcacheCreateTokens: cacheCreateTokens,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texisting.inputTokens += inputTokens;\n\t\t\t\texisting.outputTokens += outputTokens;\n\t\t\t\texisting.cacheReadTokens += cacheReadTokens;\n\t\t\t\texisting.cacheCreateTokens += cacheCreateTokens;\n\t\t\t}\n\t\t}\n\t} finally {\n\t\trl.close();\n\t\tstream.destroy();\n\t}\n\n\tif (sessionStartedAt === undefined || sessionLastSeenAt === undefined) {\n\t\treturn;\n\t}\n\n\tconst sessionIds: ReadonlySet<string> = new Set([path]);\n\tfor (const acc of buckets.values()) {\n\t\tyield {\n\t\t\tharness: harness,\n\t\t\tmodel: acc.model,\n\t\t\thourUtc: acc.hourUtc,\n\t\t\tinputTokens: acc.inputTokens,\n\t\t\toutputTokens: acc.outputTokens,\n\t\t\tcacheReadTokens: acc.cacheReadTokens,\n\t\t\tcacheCreateTokens: acc.cacheCreateTokens,\n\t\t\tsessionIds: sessionIds,\n\t\t\tsessionStartedAt: sessionStartedAt,\n\t\t\tsessionLastSeenAt: sessionLastSeenAt,\n\t\t};\n\t}\n}\n\nexport type { PiStyleHarness };\nexport { bucketizePiStyleFile };\n","/**\n * Subset of Pi/Hermes session entries the parser consumes.\n *\n * We intentionally ignore session headers, message content, tool details, cwd,\n * and extension data. Only assistant message metadata and numeric usage counts\n * are read.\n */\n\ntype PiAssistantMessageEntry = {\n\treadonly type: \"message\";\n\treadonly timestamp: string;\n\treadonly message: {\n\t\treadonly role: \"assistant\";\n\t\treadonly provider: string;\n\t\treadonly model: string;\n\t\treadonly usage: PiUsage;\n\t\treadonly stopReason?: string;\n\t\treadonly timestamp?: number;\n\t};\n};\n\ntype PiUsage = {\n\treadonly input?: number;\n\treadonly output?: number;\n\treadonly cacheRead?: number;\n\treadonly cacheWrite?: number;\n};\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction isPiUsage(value: unknown): value is PiUsage {\n\tif (!isObject(value)) {\n\t\treturn false;\n\t}\n\tconst keys = [\"input\", \"output\", \"cacheRead\", \"cacheWrite\"] as const;\n\tfor (const k of keys) {\n\t\tconst v = value[k];\n\t\tif (v !== undefined && !isFiniteNumber(v)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction isPiAssistantMessageEntry(value: unknown): value is PiAssistantMessageEntry {\n\tif (!isObject(value)) {\n\t\treturn false;\n\t}\n\tif (value[\"type\"] !== \"message\") {\n\t\treturn false;\n\t}\n\tif (typeof value[\"timestamp\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tconst message = value[\"message\"];\n\tif (!isObject(message)) {\n\t\treturn false;\n\t}\n\tif (message[\"role\"] !== \"assistant\") {\n\t\treturn false;\n\t}\n\tif (typeof message[\"provider\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tif (typeof message[\"model\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tif (message[\"stopReason\"] !== undefined && typeof message[\"stopReason\"] !== \"string\") {\n\t\treturn false;\n\t}\n\tif (message[\"timestamp\"] !== undefined && !isFiniteNumber(message[\"timestamp\"])) {\n\t\treturn false;\n\t}\n\tif (!isPiUsage(message[\"usage\"])) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport type { PiAssistantMessageEntry, PiUsage };\nexport { isPiAssistantMessageEntry };\n","import type { AppRouter } from \"@oopst/api\";\nimport type { ParsedBucket } from \"@oopst/parsers\";\nimport type { TRPCClient } from \"@trpc/client\";\nimport { aggregateUsage, type UsageBatch } from \"./aggregate\";\nimport { createClient } from \"./client\";\nimport { EXIT, type ExitCode, isNetworkError, isTrpcUnauthorized, SyncError } from \"./errors\";\n\ntype Logger = {\n\tinfo: (msg: string) => void;\n\terror: (msg: string) => void;\n};\n\ntype ParserBundle = {\n\tcodex: AsyncIterable<ParsedBucket>;\n\tclaudeCode: AsyncIterable<ParsedBucket>;\n\tpi: AsyncIterable<ParsedBucket>;\n\thermes: AsyncIterable<ParsedBucket>;\n};\n\ntype ParserFactoryContext = {\n\tcutoff: Date;\n\tdevice: string;\n};\n\ntype RunSyncOptions = {\n\ttoken: string;\n\tdevice: string;\n\tserverUrl: string;\n\tlookbackDays: number;\n\tharness: ParsedBucket[\"harness\"] | undefined;\n\tdryRun: boolean;\n\tverbose: boolean;\n\tcolor?: boolean;\n\tlogger: Logger;\n\t/**\n\t * DI seam: injectors supply a parser bundle keyed on the (cutoff, device).\n\t * The CLI entrypoint passes a factory that drives the real Codex + Claude parsers.\n\t * Tests pass a factory returning fixture async iterables.\n\t */\n\tparserFactory: (ctx: ParserFactoryContext) => ParserBundle;\n\t/** Signal that source files were found on disk even though parsing yielded nothing. */\n\tsourcesExistedHint?: boolean;\n\t/** Optional override; defaults to globalThis.fetch. */\n\tfetch?: typeof fetch;\n\t/** Optional override for tests that need a constructed client. */\n\tclient?: TRPCClient<AppRouter>;\n};\n\ntype RunSyncResult = {\n\texitCode: ExitCode;\n\tbatchesUploaded: number;\n\tbucketsUploaded: number;\n\tsessionsUploaded: number;\n};\n\nconst HOURS_PER_DAY = 24;\nconst MINUTES_PER_HOUR = 60;\nconst SECONDS_PER_MINUTE = 60;\nconst MS_PER_SECOND = 1000;\nconst SYNC_BATCH_SIZE = 500;\nconst MS_PER_DAY = HOURS_PER_DAY * MINUTES_PER_HOUR * SECONDS_PER_MINUTE * MS_PER_SECOND;\nconst SCAN_PROGRESS_SESSION_STEP = 500;\n\ntype SelectedSource = {\n\tlabel: string;\n\tsource: AsyncIterable<ParsedBucket>;\n};\n\ntype PendingNext<T> = {\n\tindex: number;\n\tresult: IteratorResult<T>;\n};\n\n/**\n * Run one CLI sync cycle: fetch watermark, parse local sources newer than\n * (watermark - lookbackDays), aggregate to hourly buckets, batch-upload to\n * the server. Returns an exit-code result; callers map this to process.exit.\n *\n * Exit codes (also in src/sync/errors.ts):\n * 0 success\n * 1 zero buckets produced but parser reported source files existed\n * 2 tRPC UNAUTHORIZED — token rejected\n * 3 network error reaching the server\n * 4 missing / invalid CLI arguments\n */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: orchestration function inherently combines multiple flow paths\nasync function runSync(options: RunSyncOptions): Promise<RunSyncResult> {\n\tif (!options.token) {\n\t\tthrow new SyncError(EXIT.invalidArguments, \"missing --token\");\n\t}\n\tif (!options.device) {\n\t\tthrow new SyncError(EXIT.invalidArguments, \"missing --device\");\n\t}\n\n\tconst client =\n\t\toptions.client ?? createClient({ token: options.token, serverUrl: options.serverUrl, fetch: options.fetch });\n\n\tconst color = options.color === true;\n\tlet watermark: Date | null = null;\n\ttry {\n\t\toptions.logger.info(phase(\"Checking server sync point...\", color));\n\t\tconst wm = await client.sync.getWatermark.query({ device: options.device });\n\t\twatermark = wm.watermarkHourUtc ? new Date(wm.watermarkHourUtc) : null;\n\t} catch (err) {\n\t\treturn failureFromTrpcError(err, options.logger);\n\t}\n\n\tconst cutoff = new Date((watermark?.getTime() ?? 0) - options.lookbackDays * MS_PER_DAY);\n\n\tif (options.verbose) {\n\t\toptions.logger.info(`watermark=${watermark?.toISOString() ?? \"null\"} cutoff=${cutoff.toISOString()}`);\n\t}\n\n\tconst parsers = options.parserFactory({ cutoff: cutoff, device: options.device });\n\n\tconst sources: SelectedSource[] = [];\n\tif (options.harness === undefined || options.harness === \"codex\") {\n\t\tsources.push({ label: \"Codex\", source: parsers.codex });\n\t}\n\tif (options.harness === undefined || options.harness === \"claude_code\") {\n\t\tsources.push({ label: \"Claude Code\", source: parsers.claudeCode });\n\t}\n\tif (options.harness === undefined || options.harness === \"pi\") {\n\t\tsources.push({ label: \"Pi\", source: parsers.pi });\n\t}\n\tif (options.harness === undefined || options.harness === \"hermes\") {\n\t\tsources.push({ label: \"Hermes\", source: parsers.hermes });\n\t}\n\n\tlet bucketsUploaded = 0;\n\tlet sessionsUploaded = 0;\n\tlet batchesUploaded = 0;\n\tconst batches: UsageBatch[] = [];\n\n\ttry {\n\t\tconst progressSources = sources.map((source) => withScanProgress(source, options.logger, color));\n\t\tfor await (const batch of aggregateUsage(merge(progressSources), { batchSize: SYNC_BATCH_SIZE })) {\n\t\t\tif (batch.buckets.length === 0 && batch.sessions.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbatches.push(batch);\n\t\t}\n\t} catch (err) {\n\t\treturn failureFromTrpcError(err, options.logger);\n\t}\n\n\tconst plannedBuckets = batches.reduce((sum, batch) => sum + batch.buckets.length, 0);\n\tconst plannedSessions = batches.reduce((sum, batch) => sum + batch.sessions.length, 0);\n\n\tif (plannedBuckets === 0 && options.sourcesExistedHint === true) {\n\t\toptions.logger.error(\n\t\t\terrorLine(\n\t\t\t\t\"produced zero usage records but parser reported source files existed - likely parser regression\",\n\t\t\t\tcolor,\n\t\t\t),\n\t\t);\n\t\treturn { exitCode: EXIT.zeroBucketsButSourcesExist, batchesUploaded: 0, bucketsUploaded: 0, sessionsUploaded: 0 };\n\t}\n\n\tif (batches.length === 0) {\n\t\toptions.logger.info(`${successPrefix(color)} no usage records to upload.`);\n\t\treturn { exitCode: EXIT.success, batchesUploaded: 0, bucketsUploaded: 0, sessionsUploaded: 0 };\n\t}\n\n\toptions.logger.info(phase(`Aggregated usage by hour and model: ${usageRecordText(plannedBuckets)} ready.`, color));\n\n\tif (options.dryRun) {\n\t\toptions.logger.info(\n\t\t\t`${dryRunPrefix(color)} ${usageRecordText(plannedBuckets)} from ${localSessionText(plannedSessions)} would be uploaded in ${uploadRequestText(batches.length)}.`,\n\t\t);\n\t\toptions.logger.info(muted(\"No data was sent.\", color));\n\t\treturn {\n\t\t\texitCode: EXIT.success,\n\t\t\tbatchesUploaded: batches.length,\n\t\t\tbucketsUploaded: plannedBuckets,\n\t\t\tsessionsUploaded: plannedSessions,\n\t\t};\n\t}\n\n\ttry {\n\t\tfor (const [index, batch] of batches.entries()) {\n\t\t\toptions.logger.info(phase(`Uploading usage... ${index + 1}/${batches.length}`, color));\n\t\t\t// biome-ignore lint/performance/noAwaitInLoops: upload requests are sequential so progress reflects completed writes.\n\t\t\tconst result = await client.sync.upsertBuckets.mutate({\n\t\t\t\tdevice: options.device,\n\t\t\t\tbuckets: batch.buckets,\n\t\t\t\tsessions: batch.sessions,\n\t\t\t});\n\t\t\tbucketsUploaded += result.upserted;\n\t\t\tsessionsUploaded += result.upsertedSessions;\n\t\t\tbatchesUploaded += 1;\n\t\t}\n\t} catch (err) {\n\t\treturn failureFromTrpcError(err, options.logger);\n\t}\n\n\toptions.logger.info(\n\t\t`${successPrefix(color)} uploaded ${usageRecordText(bucketsUploaded)} from ${localSessionText(sessionsUploaded)}${options.verbose ? ` in ${uploadRequestText(batchesUploaded)}` : \"\"}.`,\n\t);\n\n\treturn {\n\t\texitCode: EXIT.success,\n\t\tbatchesUploaded: batchesUploaded,\n\t\tbucketsUploaded: bucketsUploaded,\n\t\tsessionsUploaded: sessionsUploaded,\n\t};\n}\n\nfunction colorize(enabled: boolean, code: string, text: string): string {\n\treturn enabled ? `\\x1b[${code}m${text}\\x1b[0m` : text;\n}\n\nfunction phase(text: string, color: boolean): string {\n\treturn colorize(color, \"36\", text);\n}\n\nfunction muted(text: string, color: boolean): string {\n\treturn colorize(color, \"2\", text);\n}\n\nfunction successPrefix(color: boolean): string {\n\treturn colorize(color, \"32\", \"Done:\");\n}\n\nfunction dryRunPrefix(color: boolean): string {\n\treturn colorize(color, \"33\", \"Dry run complete:\");\n}\n\nfunction errorLine(text: string, color: boolean): string {\n\treturn colorize(color, \"31\", text);\n}\n\nfunction formatNumber(value: number): string {\n\treturn new Intl.NumberFormat(\"en-US\").format(value);\n}\n\nfunction plural(value: number, noun: string): string {\n\treturn `${formatNumber(value)} ${noun}${value === 1 ? \"\" : \"s\"}`;\n}\n\nfunction usageRecordText(value: number): string {\n\treturn plural(value, \"hourly usage record\");\n}\n\nfunction localSessionText(value: number): string {\n\treturn plural(value, \"local session\");\n}\n\nfunction uploadRequestText(value: number): string {\n\treturn plural(value, \"upload request\");\n}\n\nasync function* withScanProgress(\n\tselected: SelectedSource,\n\tlogger: Logger,\n\tcolor: boolean,\n): AsyncIterable<ParsedBucket> {\n\tconst sessionIds = new Set<string>();\n\tlet nextProgressAt = SCAN_PROGRESS_SESSION_STEP;\n\n\tlogger.info(phase(`Scanning ${selected.label} sessions...`, color));\n\n\tfor await (const bucket of selected.source) {\n\t\tfor (const id of bucket.sessionIds) {\n\t\t\tsessionIds.add(id);\n\t\t}\n\n\t\tif (sessionIds.size >= nextProgressAt) {\n\t\t\tlogger.info(phase(`Scanning ${selected.label} sessions... ${localSessionText(sessionIds.size)} found`, color));\n\t\t\twhile (nextProgressAt <= sessionIds.size) {\n\t\t\t\tnextProgressAt += SCAN_PROGRESS_SESSION_STEP;\n\t\t\t}\n\t\t}\n\n\t\tyield bucket;\n\t}\n\n\tlogger.info(phase(`Scanned ${selected.label} sessions: ${localSessionText(sessionIds.size)} found.`, color));\n}\n\nasync function* merge<T>(sources: AsyncIterable<T>[]): AsyncIterable<T> {\n\tconst iterators = sources.map((source) => source[Symbol.asyncIterator]());\n\tconst pending = new Map<number, Promise<PendingNext<T>>>();\n\n\tconst queueNext = (index: number): void => {\n\t\tconst iterator = iterators[index];\n\t\tif (!iterator) {\n\t\t\treturn;\n\t\t}\n\t\tpending.set(\n\t\t\tindex,\n\t\t\titerator.next().then((result) => ({ index: index, result: result })),\n\t\t);\n\t};\n\n\tfor (const index of iterators.keys()) {\n\t\tqueueNext(index);\n\t}\n\n\ttry {\n\t\twhile (pending.size > 0) {\n\t\t\t// biome-ignore lint/performance/noAwaitInLoops: each race advances whichever parser is ready next.\n\t\t\tconst next = await Promise.race(pending.values());\n\t\t\tpending.delete(next.index);\n\n\t\t\tif (next.result.done === true) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tyield next.result.value;\n\t\t\tqueueNext(next.index);\n\t\t}\n\t} finally {\n\t\tawait Promise.allSettled(iterators.map((iterator) => iterator.return?.()));\n\t}\n}\n\nfunction failureFromTrpcError(err: unknown, logger: Logger): RunSyncResult {\n\tif (isTrpcUnauthorized(err)) {\n\t\tlogger.error(\"auth failure: token rejected by server\");\n\t\treturn { exitCode: EXIT.unauthorized, batchesUploaded: 0, bucketsUploaded: 0, sessionsUploaded: 0 };\n\t}\n\tif (isNetworkError(err)) {\n\t\tlogger.error(`network error: ${(err as Error).message}`);\n\t\treturn { exitCode: EXIT.networkError, batchesUploaded: 0, bucketsUploaded: 0, sessionsUploaded: 0 };\n\t}\n\tthrow err;\n}\n\nexport type { Logger, ParserBundle, ParserFactoryContext, RunSyncOptions, RunSyncResult };\nexport { runSync };\n","import { createHash } from \"node:crypto\";\nimport type { BucketInput, SessionInput } from \"@oopst/api\";\nimport type { ParsedBucket } from \"@oopst/parsers\";\n\ntype AggregateOptions = {\n\tbatchSize: number;\n};\n\ntype Accumulator = {\n\tharness: BucketInput[\"harness\"];\n\tmodel: string;\n\thourUtc: string;\n\tinputTokens: number;\n\toutputTokens: number;\n\tcacheReadTokens: number;\n\tcacheCreateTokens: number;\n\tsessionIds: Set<string>;\n};\n\ntype SessionAccumulator = {\n\tharness: SessionInput[\"harness\"];\n\tsessionKey: string;\n\tstartedAt: Date;\n\tlastSeenAt: Date;\n};\n\ntype UsageBatch = {\n\tbuckets: BucketInput[];\n\tsessions: SessionInput[];\n};\n\nfunction toIso(hourUtc: Date | string): string {\n\treturn hourUtc instanceof Date ? hourUtc.toISOString() : hourUtc;\n}\n\nfunction key(b: { harness: string; model: string; hourUtc: Date | string }): string {\n\treturn `${b.harness} ${b.model} ${toIso(b.hourUtc)}`;\n}\n\nfunction finalize(acc: Accumulator): BucketInput {\n\treturn {\n\t\tharness: acc.harness,\n\t\tmodel: acc.model,\n\t\thourUtc: acc.hourUtc,\n\t\tinputTokens: acc.inputTokens,\n\t\toutputTokens: acc.outputTokens,\n\t\tcacheReadTokens: acc.cacheReadTokens,\n\t\tcacheCreateTokens: acc.cacheCreateTokens,\n\t\tsessionCount: acc.sessionIds.size,\n\t};\n}\n\nfunction createSessionKey(harness: string, localSessionId: string): string {\n\treturn createHash(\"sha256\").update(harness).update(\"\\0\").update(localSessionId).digest(\"hex\");\n}\n\nfunction sessionMapKey(harness: string, sessionKey: string): string {\n\treturn `${harness} ${sessionKey}`;\n}\n\nfunction finalizeSession(acc: SessionAccumulator): SessionInput {\n\treturn {\n\t\tharness: acc.harness,\n\t\tsessionKey: acc.sessionKey,\n\t\tstartedAt: acc.startedAt.toISOString(),\n\t\tlastSeenAt: acc.lastSeenAt.toISOString(),\n\t};\n}\n\nfunction addSessionAccumulator(\n\tsessionAccumulators: Map<string, SessionAccumulator>,\n\tbucket: ParsedBucket,\n\tlocalSessionId: string,\n): void {\n\tconst sessionKey = createSessionKey(bucket.harness, localSessionId);\n\tconst sessionAccumulatorKey = sessionMapKey(bucket.harness, sessionKey);\n\tconst existingSession = sessionAccumulators.get(sessionAccumulatorKey);\n\tif (existingSession) {\n\t\tif (bucket.sessionStartedAt.getTime() < existingSession.startedAt.getTime()) {\n\t\t\texistingSession.startedAt = bucket.sessionStartedAt;\n\t\t}\n\t\tif (bucket.sessionLastSeenAt.getTime() > existingSession.lastSeenAt.getTime()) {\n\t\t\texistingSession.lastSeenAt = bucket.sessionLastSeenAt;\n\t\t}\n\t\treturn;\n\t}\n\n\tsessionAccumulators.set(sessionAccumulatorKey, {\n\t\tharness: bucket.harness,\n\t\tsessionKey: sessionKey,\n\t\tstartedAt: bucket.sessionStartedAt,\n\t\tlastSeenAt: bucket.sessionLastSeenAt,\n\t});\n}\n\n/**\n * Group an async iterable of parser-emitted buckets by (harness, model, hourUtc),\n * summing token columns and counting distinct sessionIds → sessionCount.\n * Yields batches of at most `batchSize` finalized buckets.\n */\nasync function* aggregate(\n\tsource: AsyncIterable<ParsedBucket>,\n\toptions: AggregateOptions,\n): AsyncIterable<BucketInput[]> {\n\tfor await (const batch of aggregateUsage(source, options)) {\n\t\tif (batch.buckets.length > 0) {\n\t\t\tyield batch.buckets;\n\t\t}\n\t}\n}\n\n/**\n * Group parser output into uploadable hourly buckets and exact session facts.\n * Session facts use privacy-safe deterministic keys derived on-device from\n * local-only parser session ids.\n */\nasync function* aggregateUsage(\n\tsource: AsyncIterable<ParsedBucket>,\n\toptions: AggregateOptions,\n): AsyncIterable<UsageBatch> {\n\tconst accumulators = new Map<string, Accumulator>();\n\tconst sessionAccumulators = new Map<string, SessionAccumulator>();\n\n\tfor await (const bucket of source) {\n\t\tconst k = key(bucket);\n\t\tlet acc = accumulators.get(k);\n\t\tif (!acc) {\n\t\t\tacc = {\n\t\t\t\tharness: bucket.harness,\n\t\t\t\tmodel: bucket.model,\n\t\t\t\thourUtc: toIso(bucket.hourUtc),\n\t\t\t\tinputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\tcacheReadTokens: 0,\n\t\t\t\tcacheCreateTokens: 0,\n\t\t\t\tsessionIds: new Set(),\n\t\t\t};\n\t\t\taccumulators.set(k, acc);\n\t\t}\n\t\tacc.inputTokens += bucket.inputTokens;\n\t\tacc.outputTokens += bucket.outputTokens;\n\t\tacc.cacheReadTokens += bucket.cacheReadTokens;\n\t\tacc.cacheCreateTokens += bucket.cacheCreateTokens;\n\t\tfor (const id of bucket.sessionIds) {\n\t\t\tacc.sessionIds.add(id);\n\t\t\taddSessionAccumulator(sessionAccumulators, bucket, id);\n\t\t}\n\t}\n\n\tconst finalized: BucketInput[] = [];\n\tfor (const acc of accumulators.values()) {\n\t\tfinalized.push(finalize(acc));\n\t}\n\n\tconst finalizedSessions: SessionInput[] = [];\n\tfor (const acc of sessionAccumulators.values()) {\n\t\tfinalizedSessions.push(finalizeSession(acc));\n\t}\n\n\tconst maxLength = Math.max(finalized.length, finalizedSessions.length);\n\tfor (let i = 0; i < maxLength; i += options.batchSize) {\n\t\tyield {\n\t\t\tbuckets: finalized.slice(i, i + options.batchSize),\n\t\t\tsessions: finalizedSessions.slice(i, i + options.batchSize),\n\t\t};\n\t}\n}\n\nexport type { AggregateOptions, UsageBatch };\nexport { aggregate, aggregateUsage, createSessionKey };\n","import type { AppRouter } from \"@oopst/api\";\nimport { createTRPCClient, httpBatchLink, type TRPCClient } from \"@trpc/client\";\n\nconst AUTHORIZATION_HEADER = \"Authorization\";\n\ntype CreateClientOptions = {\n\ttoken: string;\n\tserverUrl: string;\n\t/** Allow tests to inject a fetch mock; defaults to global fetch (Node 24+). */\n\tfetch?: typeof fetch;\n};\n\nfunction createClient(options: CreateClientOptions): TRPCClient<AppRouter> {\n\treturn createTRPCClient<AppRouter>({\n\t\tlinks: [\n\t\t\thttpBatchLink({\n\t\t\t\turl: `${stripTrailingSlash(options.serverUrl)}/trpc`,\n\t\t\t\theaders: () => ({\n\t\t\t\t\t[AUTHORIZATION_HEADER]: `Bearer ${options.token}`,\n\t\t\t\t}),\n\t\t\t\tfetch: options.fetch ?? fetch,\n\t\t\t}),\n\t\t],\n\t});\n}\n\nfunction stripTrailingSlash(url: string): string {\n\treturn url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\n\nexport type { CreateClientOptions };\nexport { createClient };\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { isObservable, observable, observableToAsyncIterable, observableToPromise } from \"../observable-UMO3vUa_.mjs\";\nimport { behaviorSubject, distinctUntilChanged, distinctUntilDeepChanged, map, share, tap } from \"../observable-CUiPknO-.mjs\";\n\nexport { behaviorSubject, distinctUntilChanged, distinctUntilDeepChanged, isObservable, map, observable, observableToAsyncIterable, observableToPromise, share, tap };","import type { Result } from '../unstable-core-do-not-import';\nimport type {\n Observable,\n Observer,\n OperatorFunction,\n TeardownLogic,\n UnaryFunction,\n Unsubscribable,\n} from './types';\n\n/** @public */\nexport type inferObservableValue<TObservable> =\n TObservable extends Observable<infer TValue, unknown> ? TValue : never;\n\n/** @public */\nexport function isObservable(x: unknown): x is Observable<unknown, unknown> {\n return typeof x === 'object' && x !== null && 'subscribe' in x;\n}\n\n/** @public */\nexport function observable<TValue, TError = unknown>(\n subscribe: (observer: Observer<TValue, TError>) => TeardownLogic,\n): Observable<TValue, TError> {\n const self: Observable<TValue, TError> = {\n subscribe(observer) {\n let teardownRef: TeardownLogic | null = null;\n let isDone = false;\n let unsubscribed = false;\n let teardownImmediately = false;\n function unsubscribe() {\n if (teardownRef === null) {\n teardownImmediately = true;\n return;\n }\n if (unsubscribed) {\n return;\n }\n unsubscribed = true;\n\n if (typeof teardownRef === 'function') {\n teardownRef();\n } else if (teardownRef) {\n teardownRef.unsubscribe();\n }\n }\n teardownRef = subscribe({\n next(value) {\n if (isDone) {\n return;\n }\n observer.next?.(value);\n },\n error(err) {\n if (isDone) {\n return;\n }\n isDone = true;\n observer.error?.(err);\n unsubscribe();\n },\n complete() {\n if (isDone) {\n return;\n }\n isDone = true;\n observer.complete?.();\n unsubscribe();\n },\n });\n if (teardownImmediately) {\n unsubscribe();\n }\n return {\n unsubscribe,\n };\n },\n pipe(\n ...operations: OperatorFunction<any, any, any, any>[]\n ): Observable<any, any> {\n return operations.reduce(pipeReducer, self);\n },\n };\n return self;\n}\n\nfunction pipeReducer(prev: any, fn: UnaryFunction<any, any>) {\n return fn(prev);\n}\n\n/** @internal */\nexport function observableToPromise<TValue>(\n observable: Observable<TValue, unknown>,\n) {\n const ac = new AbortController();\n const promise = new Promise<TValue>((resolve, reject) => {\n let isDone = false;\n function onDone() {\n if (isDone) {\n return;\n }\n isDone = true;\n obs$.unsubscribe();\n }\n ac.signal.addEventListener('abort', () => {\n reject(ac.signal.reason);\n });\n const obs$ = observable.subscribe({\n next(data) {\n isDone = true;\n resolve(data);\n onDone();\n },\n error(data) {\n reject(data);\n },\n complete() {\n ac.abort();\n onDone();\n },\n });\n });\n return promise;\n}\n\n/**\n * @internal\n */\nfunction observableToReadableStream<TValue>(\n observable: Observable<TValue, unknown>,\n signal: AbortSignal,\n): ReadableStream<Result<TValue>> {\n let unsub: Unsubscribable | null = null;\n\n const onAbort = () => {\n unsub?.unsubscribe();\n unsub = null;\n signal.removeEventListener('abort', onAbort);\n };\n\n return new ReadableStream<Result<TValue>>({\n start(controller) {\n unsub = observable.subscribe({\n next(data) {\n controller.enqueue({ ok: true, value: data });\n },\n error(error) {\n controller.enqueue({ ok: false, error });\n controller.close();\n },\n complete() {\n controller.close();\n },\n });\n\n if (signal.aborted) {\n onAbort();\n } else {\n signal.addEventListener('abort', onAbort, { once: true });\n }\n },\n cancel() {\n onAbort();\n },\n });\n}\n\n/** @internal */\nexport function observableToAsyncIterable<TValue>(\n observable: Observable<TValue, unknown>,\n signal: AbortSignal,\n): AsyncIterable<TValue> {\n const stream = observableToReadableStream(observable, signal);\n\n const reader = stream.getReader();\n const iterator: AsyncIterator<TValue> = {\n async next() {\n const value = await reader.read();\n if (value.done) {\n return {\n value: undefined,\n done: true,\n };\n }\n const { value: result } = value;\n if (!result.ok) {\n throw result.error;\n }\n return {\n value: result.value,\n done: false,\n };\n },\n async return() {\n await reader.cancel();\n return {\n value: undefined,\n done: true,\n };\n },\n };\n return {\n [Symbol.asyncIterator]() {\n return iterator;\n },\n };\n}\n","import { observable } from './observable';\nimport type {\n MonoTypeOperatorFunction,\n Observer,\n OperatorFunction,\n Unsubscribable,\n} from './types';\n\nexport function map<TValueBefore, TError, TValueAfter>(\n project: (value: TValueBefore, index: number) => TValueAfter,\n): OperatorFunction<TValueBefore, TError, TValueAfter, TError> {\n return (source) => {\n return observable((destination) => {\n let index = 0;\n const subscription = source.subscribe({\n next(value) {\n destination.next(project(value, index++));\n },\n error(error) {\n destination.error(error);\n },\n complete() {\n destination.complete();\n },\n });\n return subscription;\n });\n };\n}\n\ninterface ShareConfig {}\nexport function share<TValue, TError>(\n _opts?: ShareConfig,\n): MonoTypeOperatorFunction<TValue, TError> {\n return (source) => {\n let refCount = 0;\n\n let subscription: Unsubscribable | null = null;\n const observers: Partial<Observer<TValue, TError>>[] = [];\n\n function startIfNeeded() {\n if (subscription) {\n return;\n }\n subscription = source.subscribe({\n next(value) {\n for (const observer of observers) {\n observer.next?.(value);\n }\n },\n error(error) {\n for (const observer of observers) {\n observer.error?.(error);\n }\n },\n complete() {\n for (const observer of observers) {\n observer.complete?.();\n }\n },\n });\n }\n function resetIfNeeded() {\n // \"resetOnRefCountZero\"\n if (refCount === 0 && subscription) {\n const _sub = subscription;\n subscription = null;\n _sub.unsubscribe();\n }\n }\n\n return observable((subscriber) => {\n refCount++;\n\n observers.push(subscriber);\n startIfNeeded();\n return {\n unsubscribe() {\n refCount--;\n resetIfNeeded();\n\n const index = observers.findIndex((v) => v === subscriber);\n\n if (index > -1) {\n observers.splice(index, 1);\n }\n },\n };\n });\n };\n}\n\nexport function tap<TValue, TError>(\n observer: Partial<Observer<TValue, TError>>,\n): MonoTypeOperatorFunction<TValue, TError> {\n return (source) => {\n return observable((destination) => {\n return source.subscribe({\n next(value) {\n observer.next?.(value);\n destination.next(value);\n },\n error(error) {\n observer.error?.(error);\n destination.error(error);\n },\n complete() {\n observer.complete?.();\n destination.complete();\n },\n });\n });\n };\n}\n\nconst distinctUnsetMarker = Symbol();\nexport function distinctUntilChanged<TValue, TError>(\n compare: (a: TValue, b: TValue) => boolean = (a, b) => a === b,\n): MonoTypeOperatorFunction<TValue, TError> {\n return (source) => {\n return observable((destination) => {\n let lastValue: TValue | typeof distinctUnsetMarker = distinctUnsetMarker;\n\n return source.subscribe({\n next(value) {\n if (lastValue !== distinctUnsetMarker && compare(lastValue, value)) {\n return;\n }\n lastValue = value;\n destination.next(value);\n },\n error(error) {\n destination.error(error);\n },\n complete() {\n destination.complete();\n },\n });\n });\n };\n}\n\nconst isDeepEqual = <T>(a: T, b: T): boolean => {\n if (a === b) {\n return true;\n }\n const bothAreObjects =\n a && b && typeof a === 'object' && typeof b === 'object';\n\n return (\n !!bothAreObjects &&\n Object.keys(a).length === Object.keys(b).length &&\n Object.entries(a).every(([k, v]) => isDeepEqual(v, b[k as keyof T]))\n );\n};\nexport function distinctUntilDeepChanged<\n TValue,\n TError,\n>(): MonoTypeOperatorFunction<TValue, TError> {\n return distinctUntilChanged(isDeepEqual);\n}\n","import { observable } from './observable';\nimport type { Observable, Observer } from './types';\n\nexport interface BehaviorSubject<TValue> extends Observable<TValue, never> {\n observable: Observable<TValue, never>;\n next: (value: TValue) => void;\n get: () => TValue;\n}\n\nexport interface ReadonlyBehaviorSubject<TValue>\n extends Omit<BehaviorSubject<TValue>, 'next'> {}\n\n/**\n * @internal\n * An observable that maintains and provides a \"current value\" to subscribers\n * @see https://www.learnrxjs.io/learn-rxjs/subjects/behaviorsubject\n */\nexport function behaviorSubject<TValue>(\n initialValue: TValue,\n): BehaviorSubject<TValue> {\n let value: TValue = initialValue;\n\n const observerList: Observer<TValue, never>[] = [];\n\n const addObserver = (observer: Observer<TValue, never>) => {\n if (value !== undefined) {\n observer.next(value);\n }\n observerList.push(observer);\n };\n const removeObserver = (observer: Observer<TValue, never>) => {\n observerList.splice(observerList.indexOf(observer), 1);\n };\n\n const obs = observable<TValue, never>((observer) => {\n addObserver(observer);\n return () => {\n removeObserver(observer);\n };\n }) as BehaviorSubject<TValue>;\n\n obs.next = (nextValue: TValue) => {\n if (value === nextValue) {\n return;\n }\n value = nextValue;\n for (const observer of observerList) {\n observer.next(nextValue);\n }\n };\n\n obs.get = () => value;\n\n return obs;\n}\n","import { observable } from '@trpc/server/observable';\nimport type { AnyRouter } from '@trpc/server/unstable-core-do-not-import';\nimport type {\n Operation,\n OperationLink,\n OperationResultObservable,\n} from '../types';\n\n/** @internal */\nexport function createChain<\n TRouter extends AnyRouter,\n TInput = unknown,\n TOutput = unknown,\n>(opts: {\n links: OperationLink<TRouter, TInput, TOutput>[];\n op: Operation<TInput>;\n}): OperationResultObservable<TRouter, TOutput> {\n return observable((observer) => {\n function execute(index = 0, op = opts.op) {\n const next = opts.links[index];\n if (!next) {\n throw new Error(\n 'No more links to execute - did you forget to add an ending link?',\n );\n }\n const subscription = next({\n op,\n next(nextOp) {\n const nextObserver = execute(index + 1, nextOp);\n\n return nextObserver;\n },\n });\n return subscription;\n }\n\n const obs$ = execute();\n return obs$.subscribe(observer);\n });\n}\n","import { observable } from '@trpc/server/observable';\nimport type { AnyRouter } from '@trpc/server/unstable-core-do-not-import';\nimport { createChain } from './internals/createChain';\nimport type { Operation, TRPCLink } from './types';\n\nfunction asArray<TType>(value: TType | TType[]) {\n return Array.isArray(value) ? value : [value];\n}\nexport function splitLink<TRouter extends AnyRouter = AnyRouter>(opts: {\n condition: (op: Operation) => boolean;\n /**\n * The link to execute next if the test function returns `true`.\n */\n true: TRPCLink<TRouter> | TRPCLink<TRouter>[];\n /**\n * The link to execute next if the test function returns `false`.\n */\n false: TRPCLink<TRouter> | TRPCLink<TRouter>[];\n}): TRPCLink<TRouter> {\n return (runtime) => {\n const yes = asArray(opts.true).map((link) => link(runtime));\n const no = asArray(opts.false).map((link) => link(runtime));\n return (props) => {\n return observable((observer) => {\n const links = opts.condition(props.op) ? yes : no;\n return createChain({ op: props.op, links }).subscribe(observer);\n });\n };\n };\n}\n","import { HTTP_CODE_TO_JSONRPC2, JSONRPC2_TO_HTTP_CODE, createFlatProxy, createRecursiveProxy, getErrorShape, getHTTPStatusCode, getHTTPStatusCodeFromError, getStatusCodeFromKey, getStatusKeyFromCode } from \"./getErrorShape-BPSzUA7W.mjs\";\nimport { TRPC_ERROR_CODES_BY_KEY, TRPC_ERROR_CODES_BY_NUMBER, abortSignalsAnyPonyfill, assert, emptyObject, identity, isAsyncIterable, isFunction, isObject, mergeWithoutOverrides, noop, retryableRpcCodes, run, sleep } from \"./codes-DagpWZLc.mjs\";\nimport { TRPCError, callProcedure, createCallerFactory, createRouterFactory, defaultFormatter, defaultTransformer, getCauseFromUnknown, getDataTransformer, getProcedureAtPath, getTRPCErrorFromUnknown, isTrackedEnvelope, lazy, mergeRouters, sse, tracked, transformResult, transformTRPCResponse } from \"./tracked-DWInO6EQ.mjs\";\nimport { parseTRPCMessage, procedureTypes } from \"./parseTRPCMessage-CTow-umk.mjs\";\nimport { Unpromise, createDeferred, getAcceptHeader, getRequestInfo, isAbortError, isPromise, iteratorResource, jsonlStreamConsumer, jsonlStreamProducer, makeAsyncResource, makeResource, parseConnectionParamsFromString, parseConnectionParamsFromUnknown, resolveResponse, sseHeaders, sseStreamConsumer, sseStreamProducer, takeWithGrace, throwAbortError } from \"./resolveResponse-CdASWfAV.mjs\";\nimport { octetInputParser } from \"./contentTypeParsers-SN4WL9ze.mjs\";\nimport { formDataToObject } from \"./unstable-core-do-not-import-9NNw8uQM.mjs\";\nimport \"./observable-UMO3vUa_.mjs\";\nimport { StandardSchemaV1Error, createBuilder, createInputMiddleware, createMiddlewareFactory, createOutputMiddleware, experimental_standaloneMiddleware, getParseFn, initTRPC, isServerDefault, middlewareMarker } from \"./initTRPC-BRf4imah.mjs\";\n\nexport { HTTP_CODE_TO_JSONRPC2, JSONRPC2_TO_HTTP_CODE, StandardSchemaV1Error, TRPCError, TRPC_ERROR_CODES_BY_KEY, TRPC_ERROR_CODES_BY_NUMBER, Unpromise, abortSignalsAnyPonyfill, assert, callProcedure, createBuilder, createCallerFactory, createDeferred, createFlatProxy, createInputMiddleware, createMiddlewareFactory, createOutputMiddleware, createRecursiveProxy, createRouterFactory, defaultFormatter, defaultTransformer, emptyObject, experimental_standaloneMiddleware, formDataToObject, getAcceptHeader, getCauseFromUnknown, getDataTransformer, getErrorShape, getHTTPStatusCode, getHTTPStatusCodeFromError, getParseFn, getProcedureAtPath, getRequestInfo, getStatusCodeFromKey, getStatusKeyFromCode, getTRPCErrorFromUnknown, identity, initTRPC, isAbortError, isAsyncIterable, isFunction, isObject, isPromise, isServerDefault, isTrackedEnvelope, iteratorResource, jsonlStreamConsumer, jsonlStreamProducer, lazy, makeAsyncResource, makeResource, mergeRouters, mergeWithoutOverrides, middlewareMarker, noop, octetInputParser, parseConnectionParamsFromString, parseConnectionParamsFromUnknown, parseTRPCMessage, procedureTypes, resolveResponse, retryableRpcCodes, run, sleep, sse, sseHeaders, sseStreamConsumer, sseStreamProducer, takeWithGrace, throwAbortError, tracked, transformResult, transformTRPCResponse };","/** @internal */\nexport type UnsetMarker = 'unsetMarker' & {\n __brand: 'unsetMarker';\n};\n\n/**\n * Ensures there are no duplicate keys when building a procedure.\n * @internal\n */\nexport function mergeWithoutOverrides<TType extends Record<string, unknown>>(\n obj1: TType,\n ...objs: Partial<TType>[]\n): TType {\n const newObj: TType = Object.assign(emptyObject(), obj1);\n\n for (const overrides of objs) {\n for (const key in overrides) {\n if (key in newObj && newObj[key] !== overrides[key]) {\n throw new Error(`Duplicate key ${key}`);\n }\n newObj[key as keyof TType] = overrides[key] as TType[keyof TType];\n }\n }\n return newObj;\n}\n\n/**\n * Check that value is object\n * @internal\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return !!value && !Array.isArray(value) && typeof value === 'object';\n}\n\ntype AnyFn = ((...args: any[]) => unknown) & Record<keyof any, unknown>;\nexport function isFunction(fn: unknown): fn is AnyFn {\n return typeof fn === 'function';\n}\n\n/**\n * Create an object without inheriting anything from `Object.prototype`\n * @internal\n */\nexport function emptyObject<TObj extends Record<string, unknown>>(): TObj {\n return Object.create(null);\n}\n\nconst asyncIteratorsSupported =\n typeof Symbol === 'function' && !!Symbol.asyncIterator;\n\nexport function isAsyncIterable<TValue>(\n value: unknown,\n): value is AsyncIterable<TValue> {\n return (\n asyncIteratorsSupported && isObject(value) && Symbol.asyncIterator in value\n );\n}\n\n/**\n * Run an IIFE\n */\nexport const run = <TValue>(fn: () => TValue): TValue => fn();\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop(): void {}\n\nexport function identity<T>(it: T): T {\n return it;\n}\n\n/**\n * Generic runtime assertion function. Throws, if the condition is not `true`.\n *\n * Can be used as a slightly less dangerous variant of type assertions. Code\n * mistakes would be revealed at runtime then (hopefully during testing).\n */\nexport function assert(\n condition: boolean,\n msg = 'no additional info',\n): asserts condition {\n if (!condition) {\n throw new Error(`AssertionError: ${msg}`);\n }\n}\n\nexport function sleep(ms = 0): Promise<void> {\n return new Promise<void>((res) => setTimeout(res, ms));\n}\n\n/**\n * Ponyfill for\n * [`AbortSignal.any`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static).\n */\nexport function abortSignalsAnyPonyfill(signals: AbortSignal[]): AbortSignal {\n if (typeof AbortSignal.any === 'function') {\n return AbortSignal.any(signals);\n }\n\n const ac = new AbortController();\n\n for (const signal of signals) {\n if (signal.aborted) {\n trigger();\n break;\n }\n signal.addEventListener('abort', trigger, { once: true });\n }\n\n return ac.signal;\n\n function trigger() {\n ac.abort();\n for (const signal of signals) {\n signal.removeEventListener('abort', trigger);\n }\n }\n}\n","import type { InvertKeyValue, ValueOf } from '../types';\n\n// reference: https://www.jsonrpc.org/specification\n\n/**\n * JSON-RPC 2.0 Error codes\n *\n * `-32000` to `-32099` are reserved for implementation-defined server-errors.\n * For tRPC we're copying the last digits of HTTP 4XX errors.\n */\nexport const TRPC_ERROR_CODES_BY_KEY = {\n /**\n * Invalid JSON was received by the server.\n * An error occurred on the server while parsing the JSON text.\n */\n PARSE_ERROR: -32700,\n /**\n * The JSON sent is not a valid Request object.\n */\n BAD_REQUEST: -32600, // 400\n\n // Internal JSON-RPC error\n INTERNAL_SERVER_ERROR: -32603, // 500\n NOT_IMPLEMENTED: -32603, // 501\n BAD_GATEWAY: -32603, // 502\n SERVICE_UNAVAILABLE: -32603, // 503\n GATEWAY_TIMEOUT: -32603, // 504\n\n // Implementation specific errors\n UNAUTHORIZED: -32001, // 401\n PAYMENT_REQUIRED: -32002, // 402\n FORBIDDEN: -32003, // 403\n NOT_FOUND: -32004, // 404\n METHOD_NOT_SUPPORTED: -32005, // 405\n TIMEOUT: -32008, // 408\n CONFLICT: -32009, // 409\n PRECONDITION_FAILED: -32012, // 412\n PAYLOAD_TOO_LARGE: -32013, // 413\n UNSUPPORTED_MEDIA_TYPE: -32015, // 415\n UNPROCESSABLE_CONTENT: -32022, // 422\n PRECONDITION_REQUIRED: -32028, // 428\n TOO_MANY_REQUESTS: -32029, // 429\n CLIENT_CLOSED_REQUEST: -32099, // 499\n} as const;\n\n// pure\nexport const TRPC_ERROR_CODES_BY_NUMBER: InvertKeyValue<\n typeof TRPC_ERROR_CODES_BY_KEY\n> = {\n [-32700]: 'PARSE_ERROR',\n [-32600]: 'BAD_REQUEST',\n [-32603]: 'INTERNAL_SERVER_ERROR',\n [-32001]: 'UNAUTHORIZED',\n [-32002]: 'PAYMENT_REQUIRED',\n [-32003]: 'FORBIDDEN',\n [-32004]: 'NOT_FOUND',\n [-32005]: 'METHOD_NOT_SUPPORTED',\n [-32008]: 'TIMEOUT',\n [-32009]: 'CONFLICT',\n [-32012]: 'PRECONDITION_FAILED',\n [-32013]: 'PAYLOAD_TOO_LARGE',\n [-32015]: 'UNSUPPORTED_MEDIA_TYPE',\n [-32022]: 'UNPROCESSABLE_CONTENT',\n [-32028]: 'PRECONDITION_REQUIRED',\n [-32029]: 'TOO_MANY_REQUESTS',\n [-32099]: 'CLIENT_CLOSED_REQUEST',\n};\n\nexport type TRPC_ERROR_CODE_NUMBER = ValueOf<typeof TRPC_ERROR_CODES_BY_KEY>;\nexport type TRPC_ERROR_CODE_KEY = keyof typeof TRPC_ERROR_CODES_BY_KEY;\n\n/**\n * tRPC error codes that are considered retryable\n * With out of the box SSE, the client will reconnect when these errors are encountered\n */\nexport const retryableRpcCodes: TRPC_ERROR_CODE_NUMBER[] = [\n TRPC_ERROR_CODES_BY_KEY.BAD_GATEWAY,\n TRPC_ERROR_CODES_BY_KEY.SERVICE_UNAVAILABLE,\n TRPC_ERROR_CODES_BY_KEY.GATEWAY_TIMEOUT,\n TRPC_ERROR_CODES_BY_KEY.INTERNAL_SERVER_ERROR,\n];\n","import { emptyObject } from './utils';\n\ninterface ProxyCallbackOptions {\n path: readonly string[];\n args: readonly unknown[];\n}\ntype ProxyCallback = (opts: ProxyCallbackOptions) => unknown;\n\nconst noop = () => {\n // noop\n};\n\nconst freezeIfAvailable = (obj: object) => {\n if (Object.freeze) {\n Object.freeze(obj);\n }\n};\n\nfunction createInnerProxy(\n callback: ProxyCallback,\n path: readonly string[],\n memo: Record<string, unknown>,\n) {\n const cacheKey = path.join('.');\n\n memo[cacheKey] ??= new Proxy(noop, {\n get(_obj, key) {\n if (typeof key !== 'string' || key === 'then') {\n // special case for if the proxy is accidentally treated\n // like a PromiseLike (like in `Promise.resolve(proxy)`)\n return undefined;\n }\n return createInnerProxy(callback, [...path, key], memo);\n },\n apply(_1, _2, args) {\n const lastOfPath = path[path.length - 1];\n\n // React 19 may call valueOf / toString / toJSON when coercing a proxy\n // to a primitive (e.g. during rendering or logging). Return a debug\n // string so the coercion does not recurse into the proxy. This only\n // triggers for direct calls (proxy.toString()), not for chained access\n // (proxy.toString.query()), preserving route naming freedom.\n if (\n lastOfPath === 'valueOf' ||\n lastOfPath === 'toString' ||\n lastOfPath === 'toJSON'\n ) {\n const debugPath = path.slice(0, -1).join('.');\n return `tRPC.proxy(${debugPath})`;\n }\n\n let opts = { args, path };\n // special handling for e.g. `trpc.hello.call(this, 'there')` and `trpc.hello.apply(this, ['there'])\n if (lastOfPath === 'call') {\n opts = {\n args: args.length >= 2 ? [args[1]] : [],\n path: path.slice(0, -1),\n };\n } else if (lastOfPath === 'apply') {\n opts = {\n args: args.length >= 2 ? args[1] : [],\n path: path.slice(0, -1),\n };\n }\n freezeIfAvailable(opts.args);\n freezeIfAvailable(opts.path);\n return callback(opts);\n },\n });\n\n return memo[cacheKey];\n}\n\n/**\n * Creates a proxy that calls the callback with the path and arguments\n *\n * @internal\n */\nexport const createRecursiveProxy = <TFaux = unknown>(\n callback: ProxyCallback,\n): TFaux => createInnerProxy(callback, [], emptyObject()) as TFaux;\n\n/**\n * Used in place of `new Proxy` where each handler will map 1 level deep to another value.\n *\n * @internal\n */\nexport const createFlatProxy = <TFaux>(\n callback: (path: keyof TFaux) => any,\n): TFaux => {\n return new Proxy(noop, {\n get(_obj, name) {\n if (name === 'then') {\n // special case for if the proxy is accidentally treated\n // like a PromiseLike (like in `Promise.resolve(proxy)`)\n return undefined;\n }\n return callback(name as any);\n },\n }) as TFaux;\n};\n","import type { TRPCError } from '../error/TRPCError';\nimport type { TRPC_ERROR_CODES_BY_KEY, TRPCResponse } from '../rpc';\nimport { TRPC_ERROR_CODES_BY_NUMBER } from '../rpc';\nimport type { InvertKeyValue, ValueOf } from '../types';\nimport { isObject } from '../utils';\n\nexport const JSONRPC2_TO_HTTP_CODE: Record<\n keyof typeof TRPC_ERROR_CODES_BY_KEY,\n number\n> = {\n PARSE_ERROR: 400,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n PAYMENT_REQUIRED: 402,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n METHOD_NOT_SUPPORTED: 405,\n TIMEOUT: 408,\n CONFLICT: 409,\n PRECONDITION_FAILED: 412,\n PAYLOAD_TOO_LARGE: 413,\n UNSUPPORTED_MEDIA_TYPE: 415,\n UNPROCESSABLE_CONTENT: 422,\n PRECONDITION_REQUIRED: 428,\n TOO_MANY_REQUESTS: 429,\n CLIENT_CLOSED_REQUEST: 499,\n INTERNAL_SERVER_ERROR: 500,\n NOT_IMPLEMENTED: 501,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n};\n\nexport const HTTP_CODE_TO_JSONRPC2: InvertKeyValue<\n typeof JSONRPC2_TO_HTTP_CODE\n> = {\n 400: 'BAD_REQUEST',\n 401: 'UNAUTHORIZED',\n 402: 'PAYMENT_REQUIRED',\n 403: 'FORBIDDEN',\n 404: 'NOT_FOUND',\n 405: 'METHOD_NOT_SUPPORTED',\n 408: 'TIMEOUT',\n 409: 'CONFLICT',\n 412: 'PRECONDITION_FAILED',\n 413: 'PAYLOAD_TOO_LARGE',\n 415: 'UNSUPPORTED_MEDIA_TYPE',\n 422: 'UNPROCESSABLE_CONTENT',\n 428: 'PRECONDITION_REQUIRED',\n 429: 'TOO_MANY_REQUESTS',\n 499: 'CLIENT_CLOSED_REQUEST',\n 500: 'INTERNAL_SERVER_ERROR',\n 501: 'NOT_IMPLEMENTED',\n 502: 'BAD_GATEWAY',\n 503: 'SERVICE_UNAVAILABLE',\n 504: 'GATEWAY_TIMEOUT',\n} as const;\n\nexport function getStatusCodeFromKey(\n code: keyof typeof TRPC_ERROR_CODES_BY_KEY,\n) {\n return JSONRPC2_TO_HTTP_CODE[code] ?? 500;\n}\n\nexport function getStatusKeyFromCode(\n code: keyof typeof HTTP_CODE_TO_JSONRPC2,\n): ValueOf<typeof HTTP_CODE_TO_JSONRPC2> {\n return HTTP_CODE_TO_JSONRPC2[code] ?? 'INTERNAL_SERVER_ERROR';\n}\n\nexport function getHTTPStatusCode(json: TRPCResponse | TRPCResponse[]) {\n const arr = Array.isArray(json) ? json : [json];\n const httpStatuses = new Set<number>(\n arr.map((res) => {\n if ('error' in res && isObject(res.error.data)) {\n if (typeof res.error.data?.['httpStatus'] === 'number') {\n return res.error.data['httpStatus'];\n }\n const code = TRPC_ERROR_CODES_BY_NUMBER[res.error.code];\n return getStatusCodeFromKey(code);\n }\n return 200;\n }),\n );\n\n if (httpStatuses.size !== 1) {\n return 207;\n }\n\n const httpStatus = httpStatuses.values().next().value;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return httpStatus!;\n}\n\nexport function getHTTPStatusCodeFromError(error: TRPCError) {\n return getStatusCodeFromKey(error.code);\n}\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { getHTTPStatusCodeFromError } from '../http/getHTTPStatusCode';\nimport type { ProcedureType } from '../procedure';\nimport type { AnyRootTypes, RootConfig } from '../rootConfig';\nimport { TRPC_ERROR_CODES_BY_KEY } from '../rpc';\nimport type { DefaultErrorShape } from './formatter';\nimport type { TRPCError } from './TRPCError';\n\n/**\n * @internal\n */\nexport function getErrorShape<TRoot extends AnyRootTypes>(opts: {\n config: RootConfig<TRoot>;\n error: TRPCError;\n type: ProcedureType | 'unknown';\n path: string | undefined;\n input: unknown;\n ctx: TRoot['ctx'] | undefined;\n}): TRoot['errorShape'] {\n const { path, error, config } = opts;\n const { code } = opts.error;\n const shape: DefaultErrorShape = {\n message: error.message,\n code: TRPC_ERROR_CODES_BY_KEY[code],\n data: {\n code,\n httpStatus: getHTTPStatusCodeFromError(error),\n },\n };\n if (config.isDev && typeof opts.error.stack === 'string') {\n shape.data.stack = opts.error.stack;\n }\n if (typeof path === 'string') {\n shape.data.path = path;\n }\n return config.errorFormatter({ ...opts, shape });\n}\n","import type { ProcedureType } from '../procedure';\nimport type {\n TRPC_ERROR_CODE_KEY,\n TRPC_ERROR_CODE_NUMBER,\n TRPCErrorShape,\n} from '../rpc';\nimport type { TRPCError } from './TRPCError';\n\n/**\n * @internal\n */\nexport type ErrorFormatter<TContext, TShape extends TRPCErrorShape> = (opts: {\n error: TRPCError;\n type: ProcedureType | 'unknown';\n path: string | undefined;\n input: unknown;\n ctx: TContext | undefined;\n shape: DefaultErrorShape;\n}) => TShape;\n\n/**\n * @internal\n */\nexport type DefaultErrorData = {\n code: TRPC_ERROR_CODE_KEY;\n httpStatus: number;\n /**\n * Path to the procedure that threw the error\n */\n path?: string;\n /**\n * Stack trace of the error (only in development)\n */\n stack?: string;\n};\n\n/**\n * @internal\n */\nexport interface DefaultErrorShape extends TRPCErrorShape<DefaultErrorData> {\n message: string;\n code: TRPC_ERROR_CODE_NUMBER;\n}\n\nexport const defaultFormatter: ErrorFormatter<any, any> = ({ shape }) => {\n return shape;\n};\n","import type { TRPC_ERROR_CODE_KEY } from '../rpc/codes';\nimport { isObject } from '../utils';\n\nclass UnknownCauseError extends Error {\n [key: string]: unknown;\n\n constructor(cause: object) {\n super(getMessage(cause));\n Object.assign(this, cause);\n }\n}\n\nfunction getMessage(cause: object) {\n if ('message' in cause) return String(cause.message);\n\n return undefined;\n}\n\nexport function getCauseFromUnknown(cause: unknown): Error | undefined {\n if (cause instanceof Error) {\n return cause;\n }\n\n const type = typeof cause;\n if (type === 'undefined' || type === 'function' || cause === null) {\n return undefined;\n }\n\n // Primitive types just get wrapped in an error\n if (type !== 'object') {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return new Error(String(cause));\n }\n\n // If it's an object, we'll create a synthetic error\n if (isObject(cause)) {\n return new UnknownCauseError(cause);\n }\n\n return undefined;\n}\n\nexport function getTRPCErrorFromUnknown(cause: unknown): TRPCError {\n if (cause instanceof TRPCError) {\n return cause;\n }\n if (cause instanceof Error && cause.name === 'TRPCError') {\n // https://github.com/trpc/trpc/pull/4848\n return cause as TRPCError;\n }\n\n const trpcError = new TRPCError({\n code: 'INTERNAL_SERVER_ERROR',\n cause,\n });\n\n // Inherit stack from error\n if (cause instanceof Error && cause.stack) {\n trpcError.stack = cause.stack;\n }\n\n return trpcError;\n}\n\nexport class TRPCError extends Error {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause?: Error;\n public readonly code;\n\n constructor(opts: {\n message?: string;\n code: TRPC_ERROR_CODE_KEY;\n cause?: unknown;\n }) {\n const cause = getCauseFromUnknown(opts.cause);\n const message = opts.message ?? cause?.message ?? opts.code;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause });\n\n this.code = opts.code;\n this.name = 'TRPCError';\n this.cause ??= cause;\n }\n}\n","import type { AnyRootTypes, RootConfig } from './rootConfig';\nimport type { AnyRouter, inferRouterError } from './router';\nimport type {\n TRPCResponse,\n TRPCResponseMessage,\n TRPCResultMessage,\n} from './rpc';\nimport { isObject } from './utils';\n\n/**\n * @public\n */\nexport interface DataTransformer {\n serialize(object: any): any;\n deserialize(object: any): any;\n}\n\ninterface InputDataTransformer extends DataTransformer {\n /**\n * This function runs **on the client** before sending the data to the server.\n */\n serialize(object: any): any;\n /**\n * This function runs **on the server** to transform the data before it is passed to the resolver\n */\n deserialize(object: any): any;\n}\n\ninterface OutputDataTransformer extends DataTransformer {\n /**\n * This function runs **on the server** before sending the data to the client.\n */\n serialize(object: any): any;\n /**\n * This function runs **only on the client** to transform the data sent from the server.\n */\n deserialize(object: any): any;\n}\n\n/**\n * @public\n */\nexport interface CombinedDataTransformer {\n /**\n * Specify how the data sent from the client to the server should be transformed.\n */\n input: InputDataTransformer;\n /**\n * Specify how the data sent from the server to the client should be transformed.\n */\n output: OutputDataTransformer;\n}\n\n/**\n * @public\n */\nexport type CombinedDataTransformerClient = {\n input: Pick<CombinedDataTransformer['input'], 'serialize'>;\n output: Pick<CombinedDataTransformer['output'], 'deserialize'>;\n};\n\n/**\n * @public\n */\nexport type DataTransformerOptions = CombinedDataTransformer | DataTransformer;\n\n/**\n * @internal\n */\nexport function getDataTransformer(\n transformer: DataTransformerOptions,\n): CombinedDataTransformer {\n if ('input' in transformer) {\n return transformer;\n }\n return { input: transformer, output: transformer };\n}\n\n/**\n * @internal\n */\nexport const defaultTransformer: CombinedDataTransformer = {\n input: { serialize: (obj) => obj, deserialize: (obj) => obj },\n output: { serialize: (obj) => obj, deserialize: (obj) => obj },\n};\n\nfunction transformTRPCResponseItem<\n TResponseItem extends TRPCResponse | TRPCResponseMessage,\n>(config: RootConfig<AnyRootTypes>, item: TResponseItem): TResponseItem {\n if ('error' in item) {\n return {\n ...item,\n error: config.transformer.output.serialize(item.error),\n };\n }\n\n if ('data' in item.result) {\n return {\n ...item,\n result: {\n ...item.result,\n data: config.transformer.output.serialize(item.result.data),\n },\n };\n }\n\n return item;\n}\n\n/**\n * Takes a unserialized `TRPCResponse` and serializes it with the router's transformers\n **/\nexport function transformTRPCResponse<\n TResponse extends\n | TRPCResponse\n | TRPCResponse[]\n | TRPCResponseMessage\n | TRPCResponseMessage[],\n>(config: RootConfig<AnyRootTypes>, itemOrItems: TResponse) {\n return Array.isArray(itemOrItems)\n ? itemOrItems.map((item) => transformTRPCResponseItem(config, item))\n : transformTRPCResponseItem(config, itemOrItems);\n}\n\n// FIXME:\n// - the generics here are probably unnecessary\n// - the RPC-spec could probably be simplified to combine HTTP + WS\n/** @internal */\nfunction transformResultInner<TRouter extends AnyRouter, TOutput>(\n response:\n | TRPCResponse<TOutput, inferRouterError<TRouter>>\n | TRPCResponseMessage<TOutput, inferRouterError<TRouter>>,\n transformer: DataTransformer,\n) {\n if ('error' in response) {\n const error = transformer.deserialize(\n response.error,\n ) as inferRouterError<TRouter>;\n return {\n ok: false,\n error: {\n ...response,\n error,\n },\n } as const;\n }\n\n const result = {\n ...response.result,\n ...((!response.result.type || response.result.type === 'data') && {\n type: 'data',\n data: transformer.deserialize(response.result.data),\n }),\n } as TRPCResultMessage<TOutput>['result'];\n return { ok: true, result } as const;\n}\n\nclass TransformResultError extends Error {\n constructor() {\n super('Unable to transform response from server');\n }\n}\n\n/**\n * Transforms and validates that the result is a valid TRPCResponse\n * @internal\n */\nexport function transformResult<TRouter extends AnyRouter, TOutput>(\n response:\n | TRPCResponse<TOutput, inferRouterError<TRouter>>\n | TRPCResponseMessage<TOutput, inferRouterError<TRouter>>,\n transformer: DataTransformer,\n): ReturnType<typeof transformResultInner> {\n let result: ReturnType<typeof transformResultInner>;\n try {\n // Use the data transformers on the JSON-response\n result = transformResultInner(response, transformer);\n } catch {\n throw new TransformResultError();\n }\n\n // check that output of the transformers is a valid TRPCResponse\n if (\n !result.ok &&\n (!isObject(result.error.error) ||\n typeof result.error.error['code'] !== 'number')\n ) {\n throw new TransformResultError();\n }\n if (result.ok && !isObject(result.result)) {\n throw new TransformResultError();\n }\n return result;\n}\n","import type { Observable } from '../observable';\nimport { createRecursiveProxy } from './createProxy';\nimport { defaultFormatter } from './error/formatter';\nimport { getTRPCErrorFromUnknown, TRPCError } from './error/TRPCError';\nimport type {\n AnyProcedure,\n ErrorHandlerOptions,\n inferProcedureInput,\n inferProcedureOutput,\n LegacyObservableSubscriptionProcedure,\n} from './procedure';\nimport type { ProcedureCallOptions } from './procedureBuilder';\nimport type { AnyRootTypes, RootConfig } from './rootConfig';\nimport { defaultTransformer } from './transformer';\nimport type { MaybePromise, ValueOf } from './types';\nimport {\n emptyObject,\n isFunction,\n isObject,\n mergeWithoutOverrides,\n} from './utils';\n\nexport interface RouterRecord {\n [key: string]: AnyProcedure | RouterRecord;\n}\n\ntype DecorateProcedure<TProcedure extends AnyProcedure> = (\n input: inferProcedureInput<TProcedure>,\n) => Promise<\n TProcedure['_def']['type'] extends 'subscription'\n ? TProcedure extends LegacyObservableSubscriptionProcedure<any>\n ? Observable<inferProcedureOutput<TProcedure>, TRPCError>\n : inferProcedureOutput<TProcedure>\n : inferProcedureOutput<TProcedure>\n>;\n\n/**\n * @internal\n */\nexport type DecorateRouterRecord<TRecord extends RouterRecord> = {\n [TKey in keyof TRecord]: TRecord[TKey] extends infer $Value\n ? $Value extends AnyProcedure\n ? DecorateProcedure<$Value>\n : $Value extends RouterRecord\n ? DecorateRouterRecord<$Value>\n : never\n : never;\n};\n\n/**\n * @internal\n */\n\nexport type RouterCallerErrorHandler<TContext> = (\n opts: ErrorHandlerOptions<TContext>,\n) => void;\n\n/**\n * @internal\n */\nexport type RouterCaller<\n TRoot extends AnyRootTypes,\n TRecord extends RouterRecord,\n> = (\n /**\n * @note\n * If passing a function, we recommend it's a cached function\n * e.g. wrapped in `React.cache` to avoid unnecessary computations\n */\n ctx: TRoot['ctx'] | (() => MaybePromise<TRoot['ctx']>),\n options?: {\n onError?: RouterCallerErrorHandler<TRoot['ctx']>;\n signal?: AbortSignal;\n },\n) => DecorateRouterRecord<TRecord>;\n\n/**\n * @internal\n */\nconst lazyMarker = 'lazyMarker' as 'lazyMarker' & {\n __brand: 'lazyMarker';\n};\nexport type Lazy<TAny> = (() => Promise<TAny>) & { [lazyMarker]: true };\n\ntype LazyLoader<TAny> = {\n load: () => Promise<void>;\n ref: Lazy<TAny>;\n};\n\nfunction once<T>(fn: () => T): () => T {\n const uncalled = Symbol();\n let result: T | typeof uncalled = uncalled;\n return (): T => {\n if (result === uncalled) {\n result = fn();\n }\n return result;\n };\n}\n\n/**\n * Lazy load a router\n * @see https://trpc.io/docs/server/merging-routers#lazy-load\n */\nexport function lazy<TRouter extends AnyRouter>(\n importRouter: () => Promise<\n | TRouter\n | {\n [key: string]: TRouter;\n }\n >,\n): Lazy<NoInfer<TRouter>> {\n async function resolve(): Promise<TRouter> {\n const mod = await importRouter();\n\n // if the module is a router, return it\n if (isRouter(mod)) {\n return mod;\n }\n\n const routers = Object.values(mod);\n\n if (routers.length !== 1 || !isRouter(routers[0])) {\n throw new Error(\n \"Invalid router module - either define exactly 1 export or return the router directly.\\nExample: `lazy(() => import('./slow.js').then((m) => m.slowRouter))`\",\n );\n }\n\n return routers[0];\n }\n\n (resolve as Lazy<NoInfer<TRouter>>)[lazyMarker] = true as const;\n\n return resolve as Lazy<NoInfer<TRouter>>;\n}\n\nfunction isLazy<TAny>(input: unknown): input is Lazy<TAny> {\n return typeof input === 'function' && lazyMarker in input;\n}\n\n/**\n * @internal\n */\nexport interface RouterDef<\n TRoot extends AnyRootTypes,\n TRecord extends RouterRecord,\n> {\n _config: RootConfig<TRoot>;\n router: true;\n procedure?: never;\n procedures: TRecord;\n record: TRecord;\n lazy: Record<string, LazyLoader<AnyRouter>>;\n}\n\nexport interface Router<\n TRoot extends AnyRootTypes,\n TRecord extends RouterRecord,\n> {\n _def: RouterDef<TRoot, TRecord>;\n /**\n * @see https://trpc.io/docs/v11/server/server-side-calls\n */\n createCaller: RouterCaller<TRoot, TRecord>;\n}\n\nexport type BuiltRouter<\n TRoot extends AnyRootTypes,\n TRecord extends RouterRecord,\n> = Router<TRoot, TRecord> & TRecord;\n\nexport interface RouterBuilder<TRoot extends AnyRootTypes> {\n <TIn extends CreateRouterOptions>(\n _: TIn,\n ): BuiltRouter<TRoot, DecorateCreateRouterOptions<TIn>>;\n}\n\nexport type AnyRouter = Router<any, any>;\n\nexport type inferRouterRootTypes<TRouter extends AnyRouter> =\n TRouter['_def']['_config']['$types'];\n\nexport type inferRouterContext<TRouter extends AnyRouter> =\n inferRouterRootTypes<TRouter>['ctx'];\nexport type inferRouterError<TRouter extends AnyRouter> =\n inferRouterRootTypes<TRouter>['errorShape'];\nexport type inferRouterMeta<TRouter extends AnyRouter> =\n inferRouterRootTypes<TRouter>['meta'];\n\nfunction isRouter(value: unknown): value is AnyRouter {\n return (\n isObject(value) && isObject(value['_def']) && 'router' in value['_def']\n );\n}\n\nconst emptyRouter = {\n _ctx: null as any,\n _errorShape: null as any,\n _meta: null as any,\n queries: {},\n mutations: {},\n subscriptions: {},\n errorFormatter: defaultFormatter,\n transformer: defaultTransformer,\n};\n\n/**\n * Reserved words that can't be used as router or procedure names\n */\nconst reservedWords = [\n /**\n * Then is a reserved word because otherwise we can't return a promise that returns a Proxy\n * since JS will think that `.then` is something that exists\n */\n 'then',\n /**\n * `fn.call()` and `fn.apply()` are reserved words because otherwise we can't call a function using `.call` or `.apply`\n */\n 'call',\n 'apply',\n];\n\n/** @internal */\nexport type CreateRouterOptions = {\n [key: string]:\n | AnyProcedure\n | AnyRouter\n | CreateRouterOptions\n | Lazy<AnyRouter>;\n};\n\n/** @internal */\nexport type DecorateCreateRouterOptions<\n TRouterOptions extends CreateRouterOptions,\n> = {\n [K in keyof TRouterOptions]: TRouterOptions[K] extends infer $Value\n ? $Value extends AnyProcedure\n ? $Value\n : $Value extends Router<any, infer TRecord>\n ? TRecord\n : $Value extends Lazy<Router<any, infer TRecord>>\n ? TRecord\n : $Value extends CreateRouterOptions\n ? DecorateCreateRouterOptions<$Value>\n : never\n : never;\n};\n\n/**\n * @internal\n */\nexport function createRouterFactory<TRoot extends AnyRootTypes>(\n config: RootConfig<TRoot>,\n) {\n function createRouterInner<TInput extends CreateRouterOptions>(\n input: TInput,\n ): BuiltRouter<TRoot, DecorateCreateRouterOptions<TInput>> {\n const reservedWordsUsed = new Set(\n Object.keys(input).filter((v) => reservedWords.includes(v)),\n );\n if (reservedWordsUsed.size > 0) {\n throw new Error(\n 'Reserved words used in `router({})` call: ' +\n Array.from(reservedWordsUsed).join(', '),\n );\n }\n\n const procedures: Record<string, AnyProcedure> = emptyObject();\n const lazy: Record<string, LazyLoader<AnyRouter>> = emptyObject();\n\n function createLazyLoader(opts: {\n ref: Lazy<AnyRouter>;\n path: readonly string[];\n key: string;\n aggregate: RouterRecord;\n }): LazyLoader<AnyRouter> {\n return {\n ref: opts.ref,\n load: once(async () => {\n const router = await opts.ref();\n const lazyPath = [...opts.path, opts.key];\n const lazyKey = lazyPath.join('.');\n\n opts.aggregate[opts.key] = step(router._def.record, lazyPath);\n\n delete lazy[lazyKey];\n\n // add lazy loaders for nested routers\n for (const [nestedKey, nestedItem] of Object.entries(\n router._def.lazy,\n )) {\n const nestedRouterKey = [...lazyPath, nestedKey].join('.');\n\n // console.log('adding lazy', nestedRouterKey);\n lazy[nestedRouterKey] = createLazyLoader({\n ref: nestedItem.ref,\n path: lazyPath,\n key: nestedKey,\n aggregate: opts.aggregate[opts.key] as RouterRecord,\n });\n }\n }),\n };\n }\n\n function step(from: CreateRouterOptions, path: readonly string[] = []) {\n const aggregate: RouterRecord = emptyObject();\n for (const [key, item] of Object.entries(from ?? {})) {\n if (isLazy(item)) {\n lazy[[...path, key].join('.')] = createLazyLoader({\n path,\n ref: item,\n key,\n aggregate,\n });\n continue;\n }\n if (isRouter(item)) {\n aggregate[key] = step(item._def.record, [...path, key]);\n continue;\n }\n if (!isProcedure(item)) {\n // RouterRecord\n aggregate[key] = step(item, [...path, key]);\n continue;\n }\n\n const newPath = [...path, key].join('.');\n\n if (procedures[newPath]) {\n throw new Error(`Duplicate key: ${newPath}`);\n }\n\n procedures[newPath] = item;\n aggregate[key] = item;\n }\n\n return aggregate;\n }\n const record = step(input);\n\n const _def: AnyRouter['_def'] = {\n _config: config,\n router: true,\n procedures,\n lazy,\n ...emptyRouter,\n record,\n };\n\n const router: BuiltRouter<TRoot, {}> = {\n ...(record as {}),\n _def,\n createCaller: createCallerFactory<TRoot>()({\n _def,\n }),\n };\n return router as BuiltRouter<TRoot, DecorateCreateRouterOptions<TInput>>;\n }\n\n return createRouterInner;\n}\n\nfunction isProcedure(\n procedureOrRouter: ValueOf<CreateRouterOptions>,\n): procedureOrRouter is AnyProcedure {\n return typeof procedureOrRouter === 'function';\n}\n\n/**\n * @internal\n */\nexport async function getProcedureAtPath(\n router: Pick<Router<any, any>, '_def'>,\n path: string,\n): Promise<AnyProcedure | null> {\n const { _def } = router;\n let procedure = _def.procedures[path];\n\n while (!procedure) {\n const key = Object.keys(_def.lazy).find((key) => path.startsWith(key));\n // console.log(`found lazy: ${key ?? 'NOPE'} (fullPath: ${fullPath})`);\n\n if (!key) {\n return null;\n }\n // console.log('loading', key, '.......');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const lazyRouter = _def.lazy[key]!;\n await lazyRouter.load();\n\n procedure = _def.procedures[path];\n }\n\n return procedure;\n}\n\n/**\n * @internal\n */\nexport async function callProcedure(\n opts: ProcedureCallOptions<unknown> & {\n router: AnyRouter;\n allowMethodOverride?: boolean;\n },\n) {\n const { type, path } = opts;\n const proc = await getProcedureAtPath(opts.router, path);\n if (\n !proc ||\n !isProcedure(proc) ||\n (proc._def.type !== type && !opts.allowMethodOverride)\n ) {\n throw new TRPCError({\n code: 'NOT_FOUND',\n message: `No \"${type}\"-procedure on path \"${path}\"`,\n });\n }\n\n /* istanbul ignore if -- @preserve */\n if (\n proc._def.type !== type &&\n opts.allowMethodOverride &&\n proc._def.type === 'subscription'\n ) {\n throw new TRPCError({\n code: 'METHOD_NOT_SUPPORTED',\n message: `Method override is not supported for subscriptions`,\n });\n }\n\n return proc(opts);\n}\n\nexport interface RouterCallerFactory<TRoot extends AnyRootTypes> {\n <TRecord extends RouterRecord>(\n router: Pick<Router<TRoot, TRecord>, '_def'>,\n ): RouterCaller<TRoot, TRecord>;\n}\n\nexport function createCallerFactory<\n TRoot extends AnyRootTypes,\n>(): RouterCallerFactory<TRoot> {\n return function createCallerInner<TRecord extends RouterRecord>(\n router: Pick<Router<TRoot, TRecord>, '_def'>,\n ): RouterCaller<TRoot, TRecord> {\n const { _def } = router;\n type Context = TRoot['ctx'];\n\n return function createCaller(ctxOrCallback, opts) {\n return createRecursiveProxy<ReturnType<RouterCaller<any, any>>>(\n async (innerOpts) => {\n const { path, args } = innerOpts;\n const fullPath = path.join('.');\n\n if (path.length === 1 && path[0] === '_def') {\n return _def;\n }\n\n const procedure = await getProcedureAtPath(router, fullPath);\n\n let ctx: Context | undefined = undefined;\n try {\n if (!procedure) {\n throw new TRPCError({\n code: 'NOT_FOUND',\n message: `No procedure found on path \"${path}\"`,\n });\n }\n ctx = isFunction(ctxOrCallback)\n ? await Promise.resolve(ctxOrCallback())\n : ctxOrCallback;\n\n return await procedure({\n path: fullPath,\n getRawInput: async () => args[0],\n ctx,\n type: procedure._def.type,\n signal: opts?.signal,\n batchIndex: 0,\n });\n } catch (cause) {\n opts?.onError?.({\n ctx,\n error: getTRPCErrorFromUnknown(cause),\n input: args[0],\n path: fullPath,\n type: procedure?._def.type ?? 'unknown',\n });\n throw cause;\n }\n },\n );\n };\n };\n}\n\n/** @internal */\nexport type MergeRouters<\n TRouters extends AnyRouter[],\n TRoot extends AnyRootTypes = TRouters[0]['_def']['_config']['$types'],\n TRecord extends RouterRecord = {},\n> = TRouters extends [\n infer Head extends AnyRouter,\n ...infer Tail extends AnyRouter[],\n]\n ? MergeRouters<Tail, TRoot, Head['_def']['record'] & TRecord>\n : BuiltRouter<TRoot, TRecord>;\n\nexport function mergeRouters<TRouters extends AnyRouter[]>(\n ...routerList: [...TRouters]\n): MergeRouters<TRouters> {\n const record = mergeWithoutOverrides(\n {},\n ...routerList.map((r) => r._def.record),\n );\n const errorFormatter = routerList.reduce(\n (currentErrorFormatter, nextRouter) => {\n if (\n nextRouter._def._config.errorFormatter &&\n nextRouter._def._config.errorFormatter !== defaultFormatter\n ) {\n if (\n currentErrorFormatter !== defaultFormatter &&\n currentErrorFormatter !== nextRouter._def._config.errorFormatter\n ) {\n throw new Error('You seem to have several error formatters');\n }\n return nextRouter._def._config.errorFormatter;\n }\n return currentErrorFormatter;\n },\n defaultFormatter,\n );\n\n const transformer = routerList.reduce((prev, current) => {\n if (\n current._def._config.transformer &&\n current._def._config.transformer !== defaultTransformer\n ) {\n if (\n prev !== defaultTransformer &&\n prev !== current._def._config.transformer\n ) {\n throw new Error('You seem to have several transformers');\n }\n return current._def._config.transformer;\n }\n return prev;\n }, defaultTransformer);\n\n const router = createRouterFactory({\n errorFormatter,\n transformer,\n isDev: routerList.every((r) => r._def._config.isDev),\n allowOutsideOfServer: routerList.every(\n (r) => r._def._config.allowOutsideOfServer,\n ),\n isServer: routerList.every((r) => r._def._config.isServer),\n $types: routerList[0]?._def._config.$types,\n sse: routerList[0]?._def._config.sse,\n })(record);\n\n return router as MergeRouters<TRouters>;\n}\n","const trackedSymbol = Symbol();\n\ntype TrackedId = string & {\n __brand: 'TrackedId';\n};\nexport type TrackedEnvelope<TData> = [TrackedId, TData, typeof trackedSymbol];\n\nexport interface TrackedData<TData> {\n /**\n * The id of the message to keep track of in case the connection gets lost\n */\n id: string;\n /**\n * The data field of the message\n */\n data: TData;\n}\n/**\n * Produce a typed server-sent event message\n * @deprecated use `tracked(id, data)` instead\n */\nexport function sse<TData>(event: { id: string; data: TData }) {\n return tracked(event.id, event.data);\n}\n\nexport function isTrackedEnvelope<TData>(\n value: unknown,\n): value is TrackedEnvelope<TData> {\n return Array.isArray(value) && value[2] === trackedSymbol;\n}\n\n/**\n * Automatically track an event so that it can be resumed from a given id if the connection is lost\n */\nexport function tracked<TData>(\n id: string,\n data: TData,\n): TrackedEnvelope<TData> {\n if (id === '') {\n // This limitation could be removed by using different SSE event names / channels for tracked event and non-tracked event\n throw new Error(\n '`id` must not be an empty string as empty string is the same as not setting the id at all',\n );\n }\n return [id as TrackedId, data, trackedSymbol];\n}\n\nexport type inferTrackedOutput<TData> =\n TData extends TrackedEnvelope<infer $Data> ? TrackedData<$Data> : TData;\n","import type {\n inferClientTypes,\n InferrableClientTypes,\n Maybe,\n TRPCErrorResponse,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n isObject,\n type DefaultErrorShape,\n} from '@trpc/server/unstable-core-do-not-import';\n\ntype inferErrorShape<TInferrable extends InferrableClientTypes> =\n inferClientTypes<TInferrable>['errorShape'];\nexport interface TRPCClientErrorBase<TShape extends DefaultErrorShape> {\n readonly message: string;\n readonly shape: Maybe<TShape>;\n readonly data: Maybe<TShape['data']>;\n}\nexport type TRPCClientErrorLike<TInferrable extends InferrableClientTypes> =\n TRPCClientErrorBase<inferErrorShape<TInferrable>>;\n\nexport function isTRPCClientError<TInferrable extends InferrableClientTypes>(\n cause: unknown,\n): cause is TRPCClientError<TInferrable> {\n return cause instanceof TRPCClientError;\n}\n\nfunction isTRPCErrorResponse(obj: unknown): obj is TRPCErrorResponse<any> {\n return (\n isObject(obj) &&\n isObject(obj['error']) &&\n typeof obj['error']['code'] === 'number' &&\n typeof obj['error']['message'] === 'string'\n );\n}\n\nfunction getMessageFromUnknownError(err: unknown, fallback: string): string {\n if (typeof err === 'string') {\n return err;\n }\n if (isObject(err) && typeof err['message'] === 'string') {\n return err['message'];\n }\n return fallback;\n}\n\nexport class TRPCClientError<TRouterOrProcedure extends InferrableClientTypes>\n extends Error\n implements TRPCClientErrorBase<inferErrorShape<TRouterOrProcedure>>\n{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause;\n public readonly shape: Maybe<inferErrorShape<TRouterOrProcedure>>;\n public readonly data: Maybe<inferErrorShape<TRouterOrProcedure>['data']>;\n\n /**\n * Additional meta data about the error\n * In the case of HTTP-errors, we'll have `response` and potentially `responseJSON` here\n */\n public meta;\n\n constructor(\n message: string,\n opts?: {\n result?: Maybe<TRPCErrorResponse<inferErrorShape<TRouterOrProcedure>>>;\n cause?: Error;\n meta?: Record<string, unknown>;\n },\n ) {\n const cause = opts?.cause;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause });\n\n this.meta = opts?.meta;\n\n this.cause = cause;\n this.shape = opts?.result?.error;\n this.data = opts?.result?.error.data;\n this.name = 'TRPCClientError';\n\n Object.setPrototypeOf(this, TRPCClientError.prototype);\n }\n\n public static from<TRouterOrProcedure extends InferrableClientTypes>(\n _cause: Error | TRPCErrorResponse<any> | object,\n opts: { meta?: Record<string, unknown>; cause?: Error } = {},\n ): TRPCClientError<TRouterOrProcedure> {\n const cause = _cause as unknown;\n\n if (isTRPCClientError(cause)) {\n if (opts.meta) {\n // Decorate with meta error data\n cause.meta = {\n ...cause.meta,\n ...opts.meta,\n };\n }\n return cause;\n }\n if (isTRPCErrorResponse(cause)) {\n return new TRPCClientError(cause.error.message, {\n ...opts,\n result: cause,\n cause: opts.cause,\n });\n }\n return new TRPCClientError(\n getMessageFromUnknownError(cause, 'Unknown error'),\n {\n ...opts,\n cause: cause as any,\n },\n );\n }\n}\n","import type {\n AnyClientTypes,\n CombinedDataTransformer,\n DataTransformerOptions,\n TypeError,\n} from '@trpc/server/unstable-core-do-not-import';\n\n/**\n * @internal\n */\nexport type CoercedTransformerParameters = {\n transformer?: DataTransformerOptions;\n};\n\ntype TransformerOptionYes = {\n /**\n * Data transformer\n *\n * You must use the same transformer on the backend and frontend\n * @see https://trpc.io/docs/v11/data-transformers\n **/\n transformer: DataTransformerOptions;\n};\ntype TransformerOptionNo = {\n /**\n * Data transformer\n *\n * You must use the same transformer on the backend and frontend\n * @see https://trpc.io/docs/v11/data-transformers\n **/\n transformer?: TypeError<'You must define a transformer on your your `initTRPC`-object first'>;\n};\n\n/**\n * @internal\n */\nexport type TransformerOptions<\n TRoot extends Pick<AnyClientTypes, 'transformer'>,\n> = TRoot['transformer'] extends true\n ? TransformerOptionYes\n : TransformerOptionNo;\n/**\n * @internal\n */\n\n/**\n * @internal\n */\nexport function getTransformer(\n transformer:\n | TransformerOptions<{ transformer: false }>['transformer']\n | TransformerOptions<{ transformer: true }>['transformer']\n | undefined,\n): CombinedDataTransformer {\n const _transformer =\n transformer as CoercedTransformerParameters['transformer'];\n if (!_transformer) {\n return {\n input: {\n serialize: (data) => data,\n deserialize: (data) => data,\n },\n output: {\n serialize: (data) => data,\n deserialize: (data) => data,\n },\n };\n }\n if ('input' in _transformer) {\n return _transformer;\n }\n return {\n input: _transformer,\n output: _transformer,\n };\n}\n","import type { FetchEsque, NativeFetchEsque } from './internals/types';\n\ntype AnyFn = (...args: any[]) => unknown;\n\nconst isFunction = (fn: unknown): fn is AnyFn => typeof fn === 'function';\n\nexport function getFetch(\n customFetchImpl?: FetchEsque | NativeFetchEsque,\n): FetchEsque {\n if (customFetchImpl) {\n return customFetchImpl as FetchEsque;\n }\n\n if (typeof window !== 'undefined' && isFunction(window.fetch)) {\n return window.fetch as FetchEsque;\n }\n\n if (typeof globalThis !== 'undefined' && isFunction(globalThis.fetch)) {\n return globalThis.fetch as FetchEsque;\n }\n\n throw new Error('No fetch implementation found');\n}\n","import type {\n AnyClientTypes,\n CombinedDataTransformer,\n Maybe,\n ProcedureType,\n TRPCAcceptHeader,\n TRPCResponse,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { getFetch } from '../../getFetch';\nimport type {\n FetchEsque,\n RequestInitEsque,\n ResponseEsque,\n} from '../../internals/types';\nimport type { TransformerOptions } from '../../unstable-internals';\nimport { getTransformer } from '../../unstable-internals';\nimport type { HTTPHeaders } from '../types';\n\n/**\n * @internal\n */\nexport type HTTPLinkBaseOptions<\n TRoot extends Pick<AnyClientTypes, 'transformer'>,\n> = {\n url: string | URL;\n /**\n * Add ponyfill for fetch\n */\n fetch?: FetchEsque;\n /**\n * Send all requests `as POST`s requests regardless of the procedure type\n * The HTTP handler must separately allow overriding the method. See:\n * @see https://trpc.io/docs/rpc\n */\n methodOverride?: 'POST';\n} & TransformerOptions<TRoot>;\n\nexport interface ResolvedHTTPLinkOptions {\n url: string;\n fetch?: FetchEsque;\n transformer: CombinedDataTransformer;\n methodOverride?: 'POST';\n}\n\nexport function resolveHTTPLinkOptions(\n opts: HTTPLinkBaseOptions<AnyClientTypes>,\n): ResolvedHTTPLinkOptions {\n return {\n url: opts.url.toString(),\n fetch: opts.fetch,\n transformer: getTransformer(opts.transformer),\n methodOverride: opts.methodOverride,\n };\n}\n\n// https://github.com/trpc/trpc/pull/669\nfunction arrayToDict(array: unknown[]) {\n const dict: Record<number, unknown> = {};\n for (let index = 0; index < array.length; index++) {\n const element = array[index];\n dict[index] = element;\n }\n return dict;\n}\n\nconst METHOD = {\n query: 'GET',\n mutation: 'POST',\n subscription: 'PATCH',\n} as const;\n\nexport interface HTTPResult {\n json: TRPCResponse;\n meta: {\n response: ResponseEsque;\n responseJSON?: unknown;\n };\n}\n\ntype GetInputOptions = {\n transformer: CombinedDataTransformer;\n} & ({ input: unknown } | { inputs: unknown[] });\n\nexport function getInput(opts: GetInputOptions) {\n return 'input' in opts\n ? opts.transformer.input.serialize(opts.input)\n : arrayToDict(\n opts.inputs.map((_input) => opts.transformer.input.serialize(_input)),\n );\n}\n\nexport type HTTPBaseRequestOptions = GetInputOptions &\n ResolvedHTTPLinkOptions & {\n type: ProcedureType;\n path: string;\n signal: Maybe<AbortSignal>;\n };\n\ntype GetUrl = (opts: HTTPBaseRequestOptions) => string;\ntype GetBody = (opts: HTTPBaseRequestOptions) => RequestInitEsque['body'];\n\nexport type ContentOptions = {\n trpcAcceptHeader?: TRPCAcceptHeader;\n trpcAcceptHeaderKey?: 'trpc-accept' | 'accept';\n contentTypeHeader?: string;\n getUrl: GetUrl;\n getBody: GetBody;\n};\n\nexport const getUrl: GetUrl = (opts) => {\n const parts = opts.url.split('?') as [string, string?];\n const base = parts[0].replace(/\\/$/, ''); // Remove any trailing slashes\n\n let url = base + '/' + opts.path;\n const queryParts: string[] = [];\n\n if (parts[1]) {\n queryParts.push(parts[1]);\n }\n if ('inputs' in opts) {\n queryParts.push('batch=1');\n }\n if (opts.type === 'query' || opts.type === 'subscription') {\n const input = getInput(opts);\n if (input !== undefined && opts.methodOverride !== 'POST') {\n queryParts.push(`input=${encodeURIComponent(JSON.stringify(input))}`);\n }\n }\n if (queryParts.length) {\n url += '?' + queryParts.join('&');\n }\n return url;\n};\n\nexport const getBody: GetBody = (opts) => {\n if (opts.type === 'query' && opts.methodOverride !== 'POST') {\n return undefined;\n }\n const input = getInput(opts);\n return input !== undefined ? JSON.stringify(input) : undefined;\n};\n\nexport type Requester = (\n opts: HTTPBaseRequestOptions & {\n headers: () => HTTPHeaders | Promise<HTTPHeaders>;\n },\n) => Promise<HTTPResult>;\n\nexport const jsonHttpRequester: Requester = (opts) => {\n return httpRequest({\n ...opts,\n contentTypeHeader: 'application/json',\n getUrl,\n getBody,\n });\n};\n\n/**\n * Polyfill for DOMException with AbortError name\n */\nclass AbortError extends Error {\n constructor() {\n const name = 'AbortError';\n super(name);\n this.name = name;\n this.message = name;\n }\n}\n\nexport type HTTPRequestOptions = ContentOptions &\n HTTPBaseRequestOptions & {\n headers: () => HTTPHeaders | Promise<HTTPHeaders>;\n };\n\n/**\n * Polyfill for `signal.throwIfAborted()`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/throwIfAborted\n */\nconst throwIfAborted = (signal: Maybe<AbortSignal>) => {\n if (!signal?.aborted) {\n return;\n }\n // If available, use the native implementation\n signal.throwIfAborted?.();\n\n // If we have `DOMException`, use it\n if (typeof DOMException !== 'undefined') {\n throw new DOMException('AbortError', 'AbortError');\n }\n\n // Otherwise, use our own implementation\n throw new AbortError();\n};\n\nexport async function fetchHTTPResponse(opts: HTTPRequestOptions) {\n throwIfAborted(opts.signal);\n\n const url = opts.getUrl(opts);\n const body = opts.getBody(opts);\n const method = opts.methodOverride ?? METHOD[opts.type];\n const resolvedHeaders = await (async () => {\n const heads = await opts.headers();\n if (Symbol.iterator in heads) {\n return Object.fromEntries(heads);\n }\n return heads;\n })();\n const headers = {\n ...(opts.contentTypeHeader && method !== 'GET'\n ? { 'content-type': opts.contentTypeHeader }\n : {}),\n ...(opts.trpcAcceptHeader\n ? { [opts.trpcAcceptHeaderKey ?? 'trpc-accept']: opts.trpcAcceptHeader }\n : undefined),\n ...resolvedHeaders,\n };\n\n return getFetch(opts.fetch)(url, {\n method,\n signal: opts.signal,\n body,\n headers,\n });\n}\n\nexport async function httpRequest(\n opts: HTTPRequestOptions,\n): Promise<HTTPResult> {\n const meta = {} as HTTPResult['meta'];\n\n const res = await fetchHTTPResponse(opts);\n meta.response = res;\n\n const json = await res.json();\n\n meta.responseJSON = json;\n\n return {\n json: json as TRPCResponse,\n meta,\n };\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\ntype BatchItem<TKey, TValue> = {\n aborted: boolean;\n key: TKey;\n resolve: ((value: TValue) => void) | null;\n reject: ((error: Error) => void) | null;\n batch: Batch<TKey, TValue> | null;\n};\ntype Batch<TKey, TValue> = {\n items: BatchItem<TKey, TValue>[];\n};\nexport type BatchLoader<TKey, TValue> = {\n validate: (keys: TKey[]) => boolean;\n fetch: (keys: TKey[]) => Promise<TValue[] | Promise<TValue>[]>;\n};\n\n/**\n * A function that should never be called unless we messed something up.\n */\nconst throwFatalError = () => {\n throw new Error(\n 'Something went wrong. Please submit an issue at https://github.com/trpc/trpc/issues/new',\n );\n};\n\n/**\n * Dataloader that's very inspired by https://github.com/graphql/dataloader\n * Less configuration, no caching, and allows you to cancel requests\n * When cancelling a single fetch the whole batch will be cancelled only when _all_ items are cancelled\n */\nexport function dataLoader<TKey, TValue>(\n batchLoader: BatchLoader<TKey, TValue>,\n) {\n let pendingItems: BatchItem<TKey, TValue>[] | null = null;\n let dispatchTimer: ReturnType<typeof setTimeout> | null = null;\n\n const destroyTimerAndPendingItems = () => {\n clearTimeout(dispatchTimer as any);\n dispatchTimer = null;\n pendingItems = null;\n };\n\n /**\n * Iterate through the items and split them into groups based on the `batchLoader`'s validate function\n */\n function groupItems(items: BatchItem<TKey, TValue>[]) {\n const groupedItems: BatchItem<TKey, TValue>[][] = [[]];\n let index = 0;\n while (true) {\n const item = items[index];\n if (!item) {\n // we're done\n break;\n }\n const lastGroup = groupedItems[groupedItems.length - 1]!;\n\n if (item.aborted) {\n // Item was aborted before it was dispatched\n item.reject?.(new Error('Aborted'));\n index++;\n continue;\n }\n\n const isValid = batchLoader.validate(\n lastGroup.concat(item).map((it) => it.key),\n );\n\n if (isValid) {\n lastGroup.push(item);\n index++;\n continue;\n }\n\n if (lastGroup.length === 0) {\n item.reject?.(new Error('Input is too big for a single dispatch'));\n index++;\n continue;\n }\n // Create new group, next iteration will try to add the item to that\n groupedItems.push([]);\n }\n return groupedItems;\n }\n\n function dispatch() {\n const groupedItems = groupItems(pendingItems!);\n destroyTimerAndPendingItems();\n\n // Create batches for each group of items\n for (const items of groupedItems) {\n if (!items.length) {\n continue;\n }\n const batch: Batch<TKey, TValue> = {\n items,\n };\n for (const item of items) {\n item.batch = batch;\n }\n const promise = batchLoader.fetch(batch.items.map((_item) => _item.key));\n\n promise\n .then(async (result) => {\n await Promise.all(\n result.map(async (valueOrPromise, index) => {\n const item = batch.items[index]!;\n try {\n const value = await Promise.resolve(valueOrPromise);\n\n item.resolve?.(value);\n } catch (cause) {\n item.reject?.(cause as Error);\n }\n\n item.batch = null;\n item.reject = null;\n item.resolve = null;\n }),\n );\n\n for (const item of batch.items) {\n item.reject?.(new Error('Missing result'));\n item.batch = null;\n }\n })\n .catch((cause) => {\n for (const item of batch.items) {\n item.reject?.(cause);\n item.batch = null;\n }\n });\n }\n }\n function load(key: TKey): Promise<TValue> {\n const item: BatchItem<TKey, TValue> = {\n aborted: false,\n key,\n batch: null,\n resolve: throwFatalError,\n reject: throwFatalError,\n };\n\n const promise = new Promise<TValue>((resolve, reject) => {\n item.reject = reject;\n item.resolve = resolve;\n\n pendingItems ??= [];\n pendingItems.push(item);\n });\n\n dispatchTimer ??= setTimeout(dispatch);\n\n return promise;\n }\n\n return {\n load,\n };\n}\n","import type { Maybe } from '@trpc/server/unstable-core-do-not-import';\n\n/**\n * Like `Promise.all()` but for abort signals\n * - When all signals have been aborted, the merged signal will be aborted\n * - If one signal is `null`, no signal will be aborted\n */\nexport function allAbortSignals(...signals: Maybe<AbortSignal>[]): AbortSignal {\n const ac = new AbortController();\n\n const count = signals.length;\n\n let abortedCount = 0;\n\n const onAbort = () => {\n if (++abortedCount === count) {\n ac.abort();\n }\n };\n\n for (const signal of signals) {\n if (signal?.aborted) {\n onAbort();\n } else {\n signal?.addEventListener('abort', onAbort, {\n once: true,\n });\n }\n }\n\n return ac.signal;\n}\n\n/**\n * Like `Promise.race` but for abort signals\n *\n * Basically, a ponyfill for\n * [`AbortSignal.any`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static).\n */\nexport function raceAbortSignals(\n ...signals: Maybe<AbortSignal>[]\n): AbortSignal {\n const ac = new AbortController();\n\n for (const signal of signals) {\n if (signal?.aborted) {\n ac.abort();\n } else {\n signal?.addEventListener('abort', () => ac.abort(), { once: true });\n }\n }\n\n return ac.signal;\n}\n\nexport function abortSignalToPromise(signal: AbortSignal): Promise<never> {\n return new Promise((_, reject) => {\n if (signal.aborted) {\n reject(signal.reason);\n return;\n }\n signal.addEventListener(\n 'abort',\n () => {\n reject(signal.reason);\n },\n { once: true },\n );\n });\n}\n","import type { AnyRouter, ProcedureType } from '@trpc/server';\nimport { observable } from '@trpc/server/observable';\nimport { transformResult } from '@trpc/server/unstable-core-do-not-import';\nimport type { BatchLoader } from '../internals/dataLoader';\nimport { dataLoader } from '../internals/dataLoader';\nimport { allAbortSignals } from '../internals/signals';\nimport type { NonEmptyArray } from '../internals/types';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type { HTTPBatchLinkOptions } from './HTTPBatchLinkOptions';\nimport type { HTTPResult } from './internals/httpUtils';\nimport {\n getUrl,\n jsonHttpRequester,\n resolveHTTPLinkOptions,\n} from './internals/httpUtils';\nimport type { Operation, TRPCLink } from './types';\n\n/**\n * @see https://trpc.io/docs/client/links/httpBatchLink\n */\nexport function httpBatchLink<TRouter extends AnyRouter>(\n opts: HTTPBatchLinkOptions<TRouter['_def']['_config']['$types']>,\n): TRPCLink<TRouter> {\n const resolvedOpts = resolveHTTPLinkOptions(opts);\n const maxURLLength = opts.maxURLLength ?? Infinity;\n const maxItems = opts.maxItems ?? Infinity;\n\n return () => {\n const batchLoader = (\n type: ProcedureType,\n ): BatchLoader<Operation, HTTPResult> => {\n return {\n validate(batchOps) {\n if (maxURLLength === Infinity && maxItems === Infinity) {\n // escape hatch for quick calcs\n return true;\n }\n if (batchOps.length > maxItems) {\n return false;\n }\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n\n const url = getUrl({\n ...resolvedOpts,\n type,\n path,\n inputs,\n signal: null,\n });\n\n return url.length <= maxURLLength;\n },\n async fetch(batchOps) {\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n const signal = allAbortSignals(...batchOps.map((op) => op.signal));\n\n const res = await jsonHttpRequester({\n ...resolvedOpts,\n path,\n inputs,\n type,\n headers() {\n if (!opts.headers) {\n return {};\n }\n if (typeof opts.headers === 'function') {\n return opts.headers({\n opList: batchOps as NonEmptyArray<Operation>,\n });\n }\n return opts.headers;\n },\n signal,\n });\n const resJSON = Array.isArray(res.json)\n ? res.json\n : batchOps.map(() => res.json);\n const result = resJSON.map((item) => ({\n meta: res.meta,\n json: item,\n }));\n return result;\n },\n };\n };\n\n const query = dataLoader(batchLoader('query'));\n const mutation = dataLoader(batchLoader('mutation'));\n\n const loaders = { query, mutation };\n return ({ op }) => {\n return observable((observer) => {\n /* istanbul ignore if -- @preserve */\n if (op.type === 'subscription') {\n throw new Error(\n 'Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`',\n );\n }\n const loader = loaders[op.type];\n const promise = loader.load(op);\n\n let _res = undefined as HTTPResult | undefined;\n promise\n .then((res) => {\n _res = res;\n const transformed = transformResult(\n res.json,\n resolvedOpts.transformer.output,\n );\n\n if (!transformed.ok) {\n observer.error(\n TRPCClientError.from(transformed.error, {\n meta: res.meta,\n }),\n );\n return;\n }\n observer.next({\n context: res.meta,\n result: transformed.result,\n });\n observer.complete();\n })\n .catch((err) => {\n observer.error(\n TRPCClientError.from(err, {\n meta: _res?.meta,\n }),\n );\n });\n\n return () => {\n // noop\n };\n });\n };\n };\n}\n","import type { Encoder } from '@trpc/server/adapters/ws';\n\nexport type { Encoder };\n\nexport const jsonEncoder: Encoder = {\n encode: (data) => JSON.stringify(data),\n decode: (data) => {\n if (typeof data !== 'string') {\n throw new Error(\n 'jsonEncoder received binary data. JSON uses text frames. ' +\n 'Use a binary encoder for binary data.',\n );\n }\n return JSON.parse(data);\n },\n};\n","import type { UrlOptionsWithConnectionParams } from '../../internals/urlWithConnectionParams';\nimport type { Encoder } from './encoder';\n\nexport interface WebSocketClientOptions extends UrlOptionsWithConnectionParams {\n /**\n * Ponyfill which WebSocket implementation to use\n */\n WebSocket?: typeof WebSocket;\n /**\n * The number of milliseconds before a reconnect is attempted.\n * @default {@link exponentialBackoff}\n */\n retryDelayMs?: (attemptIndex: number) => number;\n /**\n * Triggered when a WebSocket connection is established\n */\n onOpen?: () => void;\n /**\n * Triggered when a WebSocket connection encounters an error\n */\n onError?: (evt?: Event) => void;\n /**\n * Triggered when a WebSocket connection is closed\n */\n onClose?: (cause?: { code?: number }) => void;\n /**\n * Lazy mode will close the WebSocket automatically after a period of inactivity (no messages sent or received and no pending requests)\n */\n lazy?: {\n /**\n * Enable lazy mode\n * @default false\n */\n enabled: boolean;\n /**\n * Close the WebSocket after this many milliseconds\n * @default 0\n */\n closeMs: number;\n };\n /**\n * Send ping messages to the server and kill the connection if no pong message is returned\n */\n keepAlive?: {\n /**\n * @default false\n */\n enabled: boolean;\n /**\n * Send a ping message every this many milliseconds\n * @default 5_000\n */\n intervalMs?: number;\n /**\n * Close the WebSocket after this many milliseconds if the server does not respond\n * @default 1_000\n */\n pongTimeoutMs?: number;\n };\n /**\n * Custom encoder for wire encoding (e.g. custom binary formats)\n * @default jsonEncoder\n */\n experimental_encoder?: Encoder;\n}\n\n/**\n * Default options for lazy WebSocket connections.\n * Determines whether the connection should be established lazily and defines the delay before closure.\n */\nexport type LazyOptions = Required<NonNullable<WebSocketClientOptions['lazy']>>;\nexport const lazyDefaults: LazyOptions = {\n enabled: false,\n closeMs: 0,\n};\n\n/**\n * Default options for the WebSocket keep-alive mechanism.\n * Configures whether keep-alive is enabled and specifies the timeout and interval for ping-pong messages.\n */\nexport type KeepAliveOptions = Required<\n NonNullable<WebSocketClientOptions['keepAlive']>\n>;\nexport const keepAliveDefaults: KeepAliveOptions = {\n enabled: false,\n pongTimeoutMs: 1_000,\n intervalMs: 5_000,\n};\n\n/**\n * Calculates a delay for exponential backoff based on the retry attempt index.\n * The delay starts at 0 for the first attempt and doubles for each subsequent attempt,\n * capped at 30 seconds.\n */\nexport const exponentialBackoff = (attemptIndex: number) => {\n return attemptIndex === 0 ? 0 : Math.min(1000 * 2 ** attemptIndex, 30000);\n};\n","import { type TRPCRequestInfo } from '@trpc/server/http';\n\n/**\n * Get the result of a value or function that returns a value\n * It also optionally accepts typesafe arguments for the function\n */\nexport const resultOf = <T, TArgs extends any[]>(\n value: T | ((...args: TArgs) => T),\n ...args: TArgs\n): T => {\n return typeof value === 'function'\n ? (value as (...args: TArgs) => T)(...args)\n : value;\n};\n\n/**\n * A value that can be wrapped in callback\n */\nexport type CallbackOrValue<T> = T | (() => T | Promise<T>);\n\nexport interface UrlOptionsWithConnectionParams {\n /**\n * The URL to connect to (can be a function that returns a URL)\n */\n url: CallbackOrValue<string>;\n\n /**\n * Connection params that are available in `createContext()`\n * - For `wsLink`/`wsClient`, these are sent as the first message\n * - For `httpSubscriptionLink`, these are serialized as part of the URL under the `connectionParams` query\n */\n connectionParams?: CallbackOrValue<TRPCRequestInfo['connectionParams']>;\n}\n","import type {\n TRPCConnectionParamsMessage,\n TRPCRequestInfo,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type {\n CallbackOrValue,\n UrlOptionsWithConnectionParams,\n} from '../../internals/urlWithConnectionParams';\nimport { resultOf } from '../../internals/urlWithConnectionParams';\nimport type { Encoder } from './encoder';\n\nexport class TRPCWebSocketClosedError extends Error {\n constructor(opts: { message: string; cause?: unknown }) {\n super(opts.message, {\n cause: opts.cause,\n });\n this.name = 'TRPCWebSocketClosedError';\n Object.setPrototypeOf(this, TRPCWebSocketClosedError.prototype);\n }\n}\n\n/**\n * Utility class for managing a timeout that can be started, stopped, and reset.\n * Useful for scenarios where the timeout duration is reset dynamically based on events.\n */\nexport class ResettableTimeout {\n private timeout: ReturnType<typeof setTimeout> | undefined;\n\n constructor(\n private readonly onTimeout: () => void,\n private readonly timeoutMs: number,\n ) {}\n\n /**\n * Resets the current timeout, restarting it with the same duration.\n * Does nothing if no timeout is active.\n */\n public reset() {\n if (!this.timeout) return;\n\n clearTimeout(this.timeout);\n this.timeout = setTimeout(this.onTimeout, this.timeoutMs);\n }\n\n public start() {\n clearTimeout(this.timeout);\n this.timeout = setTimeout(this.onTimeout, this.timeoutMs);\n }\n\n public stop() {\n clearTimeout(this.timeout);\n this.timeout = undefined;\n }\n}\n\n// Ponyfill for Promise.withResolvers https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\nexport function withResolvers<T>() {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { promise, resolve: resolve!, reject: reject! };\n}\n\n/**\n * Resolves a WebSocket URL and optionally appends connection parameters.\n *\n * If connectionParams are provided, appends 'connectionParams=1' query parameter.\n */\nexport async function prepareUrl(urlOptions: UrlOptionsWithConnectionParams) {\n const url = await resultOf(urlOptions.url);\n\n if (!urlOptions.connectionParams) return url;\n\n // append `?connectionParams=1` when connection params are used\n const prefix = url.includes('?') ? '&' : '?';\n const connectionParams = `${prefix}connectionParams=1`;\n\n return url + connectionParams;\n}\n\nexport async function buildConnectionMessage(\n connectionParams: CallbackOrValue<TRPCRequestInfo['connectionParams']>,\n encoder: Encoder,\n) {\n const message: TRPCConnectionParamsMessage = {\n method: 'connectionParams',\n data: await resultOf(connectionParams),\n };\n\n return encoder.encode(message);\n}\n","import type { AnyTRPCRouter, inferRouterError } from '@trpc/server';\nimport type { Observer } from '@trpc/server/observable';\nimport type {\n TRPCClientOutgoingMessage,\n TRPCResponseMessage,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type { TRPCClientError } from '../../../TRPCClientError';\nimport { withResolvers } from './utils';\n\nexport type TCallbacks = Observer<\n TRPCResponseMessage<unknown, inferRouterError<AnyTRPCRouter>>,\n TRPCClientError<AnyTRPCRouter>\n>;\n\ntype MessageId = string;\ntype MessageIdLike = string | number | null;\n\n/**\n * Represents a WebSocket request managed by the RequestManager.\n * Combines the network message, a utility promise (`end`) that mirrors the lifecycle\n * handled by `callbacks`, and a set of state monitoring callbacks.\n */\ninterface Request {\n message: TRPCClientOutgoingMessage;\n end: Promise<void>;\n callbacks: TCallbacks;\n}\n\n/**\n * Manages WebSocket requests, tracking their lifecycle and providing utility methods\n * for handling outgoing and pending requests.\n *\n * - **Outgoing requests**: Requests that are queued and waiting to be sent.\n * - **Pending requests**: Requests that have been sent and are in flight awaiting a response.\n * For subscriptions, multiple responses may be received until the subscription is closed.\n */\nexport class RequestManager {\n /**\n * Stores requests that are outgoing, meaning they are registered but not yet sent over the WebSocket.\n */\n private outgoingRequests = new Array<Request & { id: MessageId }>();\n\n /**\n * Stores requests that are pending (in flight), meaning they have been sent over the WebSocket\n * and are awaiting responses. For subscriptions, this includes requests\n * that may receive multiple responses.\n */\n private pendingRequests: Record<MessageId, Request> = {};\n\n /**\n * Registers a new request by adding it to the outgoing queue and setting up\n * callbacks for lifecycle events such as completion or error.\n *\n * @param message - The outgoing message to be sent.\n * @param callbacks - Callback functions to observe the request's state.\n * @returns A cleanup function to manually remove the request.\n */\n public register(message: TRPCClientOutgoingMessage, callbacks: TCallbacks) {\n const { promise: end, resolve } = withResolvers<void>();\n\n this.outgoingRequests.push({\n id: String(message.id),\n message,\n end,\n callbacks: {\n next: callbacks.next,\n complete: () => {\n callbacks.complete();\n resolve();\n },\n error: (e) => {\n callbacks.error(e);\n resolve();\n },\n },\n });\n\n return () => {\n this.delete(message.id);\n callbacks.complete();\n resolve();\n };\n }\n\n /**\n * Deletes a request from both the outgoing and pending collections, if it exists.\n */\n public delete(messageId: MessageIdLike) {\n if (messageId === null) return;\n\n this.outgoingRequests = this.outgoingRequests.filter(\n ({ id }) => id !== String(messageId),\n );\n delete this.pendingRequests[String(messageId)];\n }\n\n /**\n * Moves all outgoing requests to the pending state and clears the outgoing queue.\n *\n * The caller is expected to handle the actual sending of the requests\n * (e.g., sending them over the network) after this method is called.\n *\n * @returns The list of requests that were transitioned to the pending state.\n */\n public flush() {\n const requests = this.outgoingRequests;\n this.outgoingRequests = [];\n\n for (const request of requests) {\n this.pendingRequests[request.id] = request;\n }\n return requests;\n }\n\n /**\n * Retrieves all currently pending requests, which are in flight awaiting responses\n * or handling ongoing subscriptions.\n */\n public getPendingRequests() {\n return Object.values(this.pendingRequests);\n }\n\n /**\n * Retrieves a specific pending request by its message ID.\n */\n public getPendingRequest(messageId: MessageIdLike) {\n if (messageId === null) return null;\n\n return this.pendingRequests[String(messageId)];\n }\n\n /**\n * Retrieves all outgoing requests, which are waiting to be sent.\n */\n public getOutgoingRequests() {\n return this.outgoingRequests;\n }\n\n /**\n * Retrieves all requests, both outgoing and pending, with their respective states.\n *\n * @returns An array of all requests with their state (\"outgoing\" or \"pending\").\n */\n public getRequests() {\n return [\n ...this.getOutgoingRequests().map((request) => ({\n state: 'outgoing' as const,\n message: request.message,\n end: request.end,\n callbacks: request.callbacks,\n })),\n ...this.getPendingRequests().map((request) => ({\n state: 'pending' as const,\n message: request.message,\n end: request.end,\n callbacks: request.callbacks,\n })),\n ];\n }\n\n /**\n * Checks if there are any pending requests, including ongoing subscriptions.\n */\n public hasPendingRequests() {\n return this.getPendingRequests().length > 0;\n }\n\n /**\n * Checks if there are any pending subscriptions\n */\n public hasPendingSubscriptions() {\n return this.getPendingRequests().some(\n (request) => request.message.method === 'subscription',\n );\n }\n\n /**\n * Checks if there are any outgoing requests waiting to be sent.\n */\n public hasOutgoingRequests() {\n return this.outgoingRequests.length > 0;\n }\n}\n","import { behaviorSubject } from '@trpc/server/observable';\nimport type { UrlOptionsWithConnectionParams } from '../../internals/urlWithConnectionParams';\nimport type { Encoder } from './encoder';\nimport { buildConnectionMessage, prepareUrl, withResolvers } from './utils';\n\n/**\n * Opens a WebSocket connection asynchronously and returns a promise\n * that resolves when the connection is successfully established.\n * The promise rejects if an error occurs during the connection attempt.\n */\nfunction asyncWsOpen(ws: WebSocket) {\n const { promise, resolve, reject } = withResolvers<void>();\n\n ws.addEventListener('open', () => {\n ws.removeEventListener('error', reject);\n resolve();\n });\n ws.addEventListener('error', reject);\n\n return promise;\n}\n\ninterface PingPongOptions {\n /**\n * The interval (in milliseconds) between \"PING\" messages.\n */\n intervalMs: number;\n\n /**\n * The timeout (in milliseconds) to wait for a \"PONG\" response before closing the connection.\n */\n pongTimeoutMs: number;\n}\n\n/**\n * Sets up a periodic ping-pong mechanism to keep the WebSocket connection alive.\n *\n * - Sends \"PING\" messages at regular intervals defined by `intervalMs`.\n * - If a \"PONG\" response is not received within the `pongTimeoutMs`, the WebSocket is closed.\n * - The ping timer resets upon receiving any message to maintain activity.\n * - Automatically starts the ping process when the WebSocket connection is opened.\n * - Cleans up timers when the WebSocket is closed.\n *\n * @param ws - The WebSocket instance to manage.\n * @param options - Configuration options for ping-pong intervals and timeouts.\n */\nfunction setupPingInterval(\n ws: WebSocket,\n { intervalMs, pongTimeoutMs }: PingPongOptions,\n) {\n let pingTimeout: ReturnType<typeof setTimeout> | undefined;\n let pongTimeout: ReturnType<typeof setTimeout> | undefined;\n\n function start() {\n pingTimeout = setTimeout(() => {\n ws.send('PING');\n pongTimeout = setTimeout(() => {\n ws.close();\n }, pongTimeoutMs);\n }, intervalMs);\n }\n\n function reset() {\n clearTimeout(pingTimeout);\n start();\n }\n\n function pong() {\n clearTimeout(pongTimeout);\n reset();\n }\n\n ws.addEventListener('open', start);\n ws.addEventListener('message', ({ data }) => {\n clearTimeout(pingTimeout);\n start();\n\n if (data === 'PONG') {\n pong();\n }\n });\n ws.addEventListener('close', () => {\n clearTimeout(pingTimeout);\n clearTimeout(pongTimeout);\n });\n}\n\nexport interface WebSocketConnectionOptions {\n WebSocketPonyfill?: typeof WebSocket;\n urlOptions: UrlOptionsWithConnectionParams;\n keepAlive: PingPongOptions & {\n enabled: boolean;\n };\n encoder: Encoder;\n}\n\n/**\n * Manages a WebSocket connection with support for reconnection, keep-alive mechanisms,\n * and observable state tracking.\n */\nexport class WsConnection {\n static connectCount = 0;\n public id = ++WsConnection.connectCount;\n\n private readonly WebSocketPonyfill: typeof WebSocket;\n private readonly urlOptions: UrlOptionsWithConnectionParams;\n private readonly keepAliveOpts: WebSocketConnectionOptions['keepAlive'];\n private readonly encoder: Encoder;\n public readonly wsObservable = behaviorSubject<WebSocket | null>(null);\n\n constructor(opts: WebSocketConnectionOptions) {\n this.WebSocketPonyfill = opts.WebSocketPonyfill ?? WebSocket;\n if (!this.WebSocketPonyfill) {\n throw new Error(\n \"No WebSocket implementation found - you probably don't want to use this on the server, but if you do you need to pass a `WebSocket`-ponyfill\",\n );\n }\n\n this.urlOptions = opts.urlOptions;\n this.keepAliveOpts = opts.keepAlive;\n this.encoder = opts.encoder;\n }\n\n public get ws() {\n return this.wsObservable.get();\n }\n\n private set ws(ws) {\n this.wsObservable.next(ws);\n }\n\n /**\n * Checks if the WebSocket connection is open and ready to communicate.\n */\n public isOpen(): this is { ws: WebSocket } {\n return (\n !!this.ws &&\n this.ws.readyState === this.WebSocketPonyfill.OPEN &&\n !this.openPromise\n );\n }\n\n /**\n * Checks if the WebSocket connection is closed or in the process of closing.\n */\n public isClosed(): this is { ws: WebSocket } {\n return (\n !!this.ws &&\n (this.ws.readyState === this.WebSocketPonyfill.CLOSING ||\n this.ws.readyState === this.WebSocketPonyfill.CLOSED)\n );\n }\n\n /**\n * Manages the WebSocket opening process, ensuring that only one open operation\n * occurs at a time. Tracks the ongoing operation with `openPromise` to avoid\n * redundant calls and ensure proper synchronization.\n *\n * Sets up the keep-alive mechanism and necessary event listeners for the connection.\n *\n * @returns A promise that resolves once the WebSocket connection is successfully opened.\n */\n private openPromise: Promise<void> | null = null;\n public async open() {\n if (this.openPromise) return this.openPromise;\n\n this.id = ++WsConnection.connectCount;\n const wsPromise = prepareUrl(this.urlOptions).then(\n (url) => new this.WebSocketPonyfill(url),\n );\n this.openPromise = wsPromise.then(async (ws) => {\n this.ws = ws;\n\n // Set binaryType to handle both text and binary messages consistently\n ws.binaryType = 'arraybuffer';\n\n // Setup ping listener\n ws.addEventListener('message', function ({ data }) {\n if (data === 'PING') {\n this.send('PONG');\n }\n });\n\n if (this.keepAliveOpts.enabled) {\n setupPingInterval(ws, this.keepAliveOpts);\n }\n\n ws.addEventListener('close', () => {\n if (this.ws === ws) {\n this.ws = null;\n }\n });\n\n await asyncWsOpen(ws);\n\n if (this.urlOptions.connectionParams) {\n ws.send(\n await buildConnectionMessage(\n this.urlOptions.connectionParams,\n this.encoder,\n ),\n );\n }\n });\n\n try {\n await this.openPromise;\n } finally {\n this.openPromise = null;\n }\n }\n\n /**\n * Closes the WebSocket connection gracefully.\n * Waits for any ongoing open operation to complete before closing.\n */\n public async close() {\n try {\n await this.openPromise;\n } finally {\n this.ws?.close();\n }\n }\n}\n\n/**\n * Provides a backward-compatible representation of the connection state.\n */\nexport function backwardCompatibility(connection: WsConnection) {\n if (connection.isOpen()) {\n return {\n id: connection.id,\n state: 'open',\n ws: connection.ws,\n } as const;\n }\n\n if (connection.isClosed()) {\n return {\n id: connection.id,\n state: 'closed',\n ws: connection.ws,\n } as const;\n }\n\n if (!connection.ws) {\n return null;\n }\n\n return {\n id: connection.id,\n state: 'connecting',\n ws: connection.ws,\n } as const;\n}\n","import type { AnyTRPCRouter } from '@trpc/server';\nimport type { BehaviorSubject } from '@trpc/server/observable';\nimport { behaviorSubject, observable } from '@trpc/server/observable';\nimport type {\n CombinedDataTransformer,\n TRPCClientIncomingMessage,\n TRPCClientIncomingRequest,\n TRPCClientOutgoingMessage,\n TRPCResponseMessage,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n run,\n sleep,\n transformResult,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { TRPCClientError } from '../../../TRPCClientError';\nimport type { TRPCConnectionState } from '../../internals/subscriptions';\nimport type { Operation, OperationResultEnvelope } from '../../types';\nimport type { Encoder } from './encoder';\nimport { jsonEncoder } from './encoder';\nimport type { WebSocketClientOptions } from './options';\nimport { exponentialBackoff, keepAliveDefaults, lazyDefaults } from './options';\nimport type { TCallbacks } from './requestManager';\nimport { RequestManager } from './requestManager';\nimport { ResettableTimeout, TRPCWebSocketClosedError } from './utils';\nimport { backwardCompatibility, WsConnection } from './wsConnection';\n\n/**\n * A WebSocket client for managing TRPC operations, supporting lazy initialization,\n * reconnection, keep-alive, and request management.\n */\nexport class WsClient {\n /**\n * Observable tracking the current connection state, including errors.\n */\n public readonly connectionState: BehaviorSubject<\n TRPCConnectionState<TRPCClientError<AnyTRPCRouter>>\n >;\n\n private allowReconnect = false;\n private requestManager = new RequestManager();\n private readonly activeConnection: WsConnection;\n private readonly reconnectRetryDelay: (attemptIndex: number) => number;\n private inactivityTimeout: ResettableTimeout;\n private readonly callbacks: Pick<\n WebSocketClientOptions,\n 'onOpen' | 'onClose' | 'onError'\n >;\n private readonly lazyMode: boolean;\n private readonly encoder: Encoder;\n\n constructor(opts: WebSocketClientOptions) {\n this.encoder = opts.experimental_encoder ?? jsonEncoder;\n // Initialize callbacks, connection parameters, and options.\n this.callbacks = {\n onOpen: opts.onOpen,\n onClose: opts.onClose,\n onError: opts.onError,\n };\n\n const lazyOptions = {\n ...lazyDefaults,\n ...opts.lazy,\n };\n\n // Set up inactivity timeout for lazy connections.\n this.inactivityTimeout = new ResettableTimeout(() => {\n if (\n this.requestManager.hasOutgoingRequests() ||\n this.requestManager.hasPendingRequests()\n ) {\n this.inactivityTimeout.reset();\n return;\n }\n\n this.close().catch(() => null);\n }, lazyOptions.closeMs);\n\n // Initialize the WebSocket connection.\n this.activeConnection = new WsConnection({\n WebSocketPonyfill: opts.WebSocket,\n urlOptions: opts,\n keepAlive: {\n ...keepAliveDefaults,\n ...opts.keepAlive,\n },\n encoder: this.encoder,\n });\n this.activeConnection.wsObservable.subscribe({\n next: (ws) => {\n if (!ws) return;\n this.setupWebSocketListeners(ws);\n },\n });\n this.reconnectRetryDelay = opts.retryDelayMs ?? exponentialBackoff;\n\n this.lazyMode = lazyOptions.enabled;\n\n this.connectionState = behaviorSubject<\n TRPCConnectionState<TRPCClientError<AnyTRPCRouter>>\n >({\n type: 'state',\n state: lazyOptions.enabled ? 'idle' : 'connecting',\n error: null,\n });\n\n // Automatically open the connection if lazy mode is disabled.\n if (!this.lazyMode) {\n this.open().catch(() => null);\n }\n }\n\n /**\n * Opens the WebSocket connection. Handles reconnection attempts and updates\n * the connection state accordingly.\n */\n private async open() {\n this.allowReconnect = true;\n if (this.connectionState.get().state === 'idle') {\n this.connectionState.next({\n type: 'state',\n state: 'connecting',\n error: null,\n });\n }\n\n try {\n await this.activeConnection.open();\n } catch (error) {\n this.reconnect(\n new TRPCWebSocketClosedError({\n message: 'Initialization error',\n cause: error,\n }),\n );\n return this.reconnecting;\n }\n }\n\n /**\n * Closes the WebSocket connection and stops managing requests.\n * Ensures all outgoing and pending requests are properly finalized.\n */\n public async close() {\n this.allowReconnect = false;\n this.inactivityTimeout.stop();\n\n const requestsToAwait: Promise<void>[] = [];\n for (const request of this.requestManager.getRequests()) {\n if (request.message.method === 'subscription') {\n request.callbacks.complete();\n } else if (request.state === 'outgoing') {\n request.callbacks.error(\n TRPCClientError.from(\n new TRPCWebSocketClosedError({\n message: 'Closed before connection was established',\n }),\n ),\n );\n } else {\n requestsToAwait.push(request.end);\n }\n }\n\n await Promise.all(requestsToAwait).catch(() => null);\n await this.activeConnection.close().catch(() => null);\n\n this.connectionState.next({\n type: 'state',\n state: 'idle',\n error: null,\n });\n }\n\n /**\n * Method to request the server.\n * Handles data transformation, batching of requests, and subscription lifecycle.\n *\n * @param op - The operation details including id, type, path, input and signal\n * @param transformer - Data transformer for serializing requests and deserializing responses\n * @param lastEventId - Optional ID of the last received event for subscriptions\n *\n * @returns An observable that emits operation results and handles cleanup\n */\n public request({\n op: { id, type, path, input, signal },\n transformer,\n lastEventId,\n }: {\n op: Pick<Operation, 'id' | 'type' | 'path' | 'input' | 'signal'>;\n transformer: CombinedDataTransformer;\n lastEventId?: string;\n }) {\n return observable<\n OperationResultEnvelope<unknown, TRPCClientError<AnyTRPCRouter>>,\n TRPCClientError<AnyTRPCRouter>\n >((observer) => {\n const abort = this.batchSend(\n {\n id,\n method: type,\n params: {\n input: transformer.input.serialize(input),\n path,\n lastEventId,\n },\n },\n {\n ...observer,\n next(event) {\n const transformed = transformResult(event, transformer.output);\n\n if (!transformed.ok) {\n observer.error(TRPCClientError.from(transformed.error));\n return;\n }\n\n observer.next({\n result: transformed.result,\n });\n },\n },\n );\n\n return () => {\n abort();\n\n if (type === 'subscription' && this.activeConnection.isOpen()) {\n this.send({\n id,\n method: 'subscription.stop',\n });\n }\n\n signal?.removeEventListener('abort', abort);\n };\n });\n }\n\n public get connection() {\n return backwardCompatibility(this.activeConnection);\n }\n\n /**\n * Manages the reconnection process for the WebSocket using retry logic.\n * Ensures that only one reconnection attempt is active at a time by tracking the current\n * reconnection state in the `reconnecting` promise.\n */\n private reconnecting: Promise<void> | null = null;\n private reconnect(closedError: TRPCWebSocketClosedError) {\n this.connectionState.next({\n type: 'state',\n state: 'connecting',\n error: TRPCClientError.from(closedError),\n });\n if (this.reconnecting) return;\n\n const tryReconnect = async (attemptIndex: number) => {\n try {\n await sleep(this.reconnectRetryDelay(attemptIndex));\n if (this.allowReconnect) {\n await this.activeConnection.close();\n await this.activeConnection.open();\n\n if (this.requestManager.hasPendingRequests()) {\n this.send(\n this.requestManager\n .getPendingRequests()\n .map(({ message }) => message),\n );\n }\n }\n this.reconnecting = null;\n } catch {\n await tryReconnect(attemptIndex + 1);\n }\n };\n\n this.reconnecting = tryReconnect(0);\n }\n\n private setupWebSocketListeners(ws: WebSocket) {\n const handleCloseOrError = (cause: unknown) => {\n const reqs = this.requestManager.getPendingRequests();\n for (const { message, callbacks } of reqs) {\n if (message.method === 'subscription') continue;\n\n callbacks.error(\n TRPCClientError.from(\n cause ??\n new TRPCWebSocketClosedError({\n message: 'WebSocket closed',\n cause,\n }),\n ),\n );\n this.requestManager.delete(message.id);\n }\n };\n\n ws.addEventListener('open', () => {\n run(async () => {\n if (this.lazyMode) {\n this.inactivityTimeout.start();\n }\n\n this.callbacks.onOpen?.();\n\n this.connectionState.next({\n type: 'state',\n state: 'pending',\n error: null,\n });\n }).catch((error) => {\n ws.close(3000);\n handleCloseOrError(error);\n });\n });\n\n ws.addEventListener('message', ({ data }) => {\n this.inactivityTimeout.reset();\n\n // Handle PING/PONG as text regardless of encoder\n if (['PING', 'PONG'].includes(data)) return;\n\n const incomingMessage = this.encoder.decode(\n data,\n ) as TRPCClientIncomingMessage;\n if ('method' in incomingMessage) {\n this.handleIncomingRequest(incomingMessage);\n return;\n }\n\n this.handleResponseMessage(incomingMessage);\n });\n\n ws.addEventListener('close', (event) => {\n handleCloseOrError(event);\n this.callbacks.onClose?.(event);\n\n if (!this.lazyMode || this.requestManager.hasPendingSubscriptions()) {\n this.reconnect(\n new TRPCWebSocketClosedError({\n message: 'WebSocket closed',\n cause: event,\n }),\n );\n }\n });\n\n ws.addEventListener('error', (event) => {\n handleCloseOrError(event);\n this.callbacks.onError?.(event);\n\n this.reconnect(\n new TRPCWebSocketClosedError({\n message: 'WebSocket closed',\n cause: event,\n }),\n );\n });\n }\n\n private handleResponseMessage(message: TRPCResponseMessage) {\n const request = this.requestManager.getPendingRequest(message.id);\n if (!request) return;\n\n request.callbacks.next(message);\n\n let completed = true;\n if ('result' in message && request.message.method === 'subscription') {\n if (message.result.type === 'data') {\n request.message.params.lastEventId = message.result.id;\n }\n\n if (message.result.type !== 'stopped') {\n completed = false;\n }\n }\n\n if (completed) {\n request.callbacks.complete();\n this.requestManager.delete(message.id);\n }\n }\n\n private handleIncomingRequest(message: TRPCClientIncomingRequest) {\n if (message.method === 'reconnect') {\n this.reconnect(\n new TRPCWebSocketClosedError({\n message: 'Server requested reconnect',\n }),\n );\n }\n }\n\n /**\n * Sends a message or batch of messages directly to the server.\n */\n private send(\n messageOrMessages: TRPCClientOutgoingMessage | TRPCClientOutgoingMessage[],\n ) {\n if (!this.activeConnection.isOpen()) {\n throw new Error('Active connection is not open');\n }\n\n const messages =\n messageOrMessages instanceof Array\n ? messageOrMessages\n : [messageOrMessages];\n this.activeConnection.ws.send(\n this.encoder.encode(messages.length === 1 ? messages[0] : messages),\n );\n }\n\n /**\n * Groups requests for batch sending.\n *\n * @returns A function to abort the batched request.\n */\n private batchSend(message: TRPCClientOutgoingMessage, callbacks: TCallbacks) {\n this.inactivityTimeout.reset();\n\n run(async () => {\n if (!this.activeConnection.isOpen()) {\n await this.open();\n }\n await sleep(0);\n\n if (!this.requestManager.hasOutgoingRequests()) return;\n\n this.send(this.requestManager.flush().map(({ message }) => message));\n }).catch((err) => {\n this.requestManager.delete(message.id);\n callbacks.error(TRPCClientError.from(err));\n });\n\n return this.requestManager.register(message, callbacks);\n }\n}\n","import type { Encoder } from './wsClient/encoder';\nimport { jsonEncoder } from './wsClient/encoder';\nimport type { WebSocketClientOptions } from './wsClient/options';\nimport { WsClient } from './wsClient/wsClient';\n\nexport function createWSClient(opts: WebSocketClientOptions) {\n return new WsClient(opts);\n}\n\nexport type TRPCWebSocketClient = ReturnType<typeof createWSClient>;\n\nexport { jsonEncoder, type Encoder, type WebSocketClientOptions };\n","import { observable } from '@trpc/server/observable';\nimport type {\n AnyRouter,\n inferClientTypes,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type { TransformerOptions } from '../../unstable-internals';\nimport { getTransformer } from '../../unstable-internals';\nimport type { TRPCLink } from '../types';\nimport type {\n Encoder,\n TRPCWebSocketClient,\n WebSocketClientOptions,\n} from './createWsClient';\nimport { createWSClient, jsonEncoder } from './createWsClient';\n\nexport type WebSocketLinkOptions<TRouter extends AnyRouter> = {\n client: TRPCWebSocketClient;\n} & TransformerOptions<inferClientTypes<TRouter>>;\n\nexport function wsLink<TRouter extends AnyRouter>(\n opts: WebSocketLinkOptions<TRouter>,\n): TRPCLink<TRouter> {\n const { client } = opts;\n const transformer = getTransformer(opts.transformer);\n return () => {\n return ({ op }) => {\n return observable((observer) => {\n const connStateSubscription =\n op.type === 'subscription'\n ? client.connectionState.subscribe({\n next(result) {\n observer.next({\n result,\n context: op.context,\n });\n },\n })\n : null;\n\n const requestSubscription = client\n .request({\n op,\n transformer,\n })\n .subscribe(observer);\n\n return () => {\n requestSubscription.unsubscribe();\n connStateSubscription?.unsubscribe();\n };\n });\n };\n };\n}\n\nexport {\n createWSClient,\n jsonEncoder,\n type Encoder,\n type TRPCWebSocketClient,\n type WebSocketClientOptions,\n};\n","import type {\n inferObservableValue,\n Unsubscribable,\n} from '@trpc/server/observable';\nimport { observableToPromise, share } from '@trpc/server/observable';\nimport type {\n AnyRouter,\n inferAsyncIterableYield,\n InferrableClientTypes,\n Maybe,\n TypeError,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { createChain } from '../links/internals/createChain';\nimport type { TRPCConnectionState } from '../links/internals/subscriptions';\nimport type {\n OperationContext,\n OperationLink,\n TRPCClientRuntime,\n TRPCLink,\n} from '../links/types';\nimport { TRPCClientError } from '../TRPCClientError';\n\ntype TRPCType = 'mutation' | 'query' | 'subscription';\nexport interface TRPCRequestOptions {\n /**\n * Pass additional context to links\n */\n context?: OperationContext;\n signal?: AbortSignal;\n}\n\nexport interface TRPCSubscriptionObserver<TValue, TError> {\n onStarted: (opts: { context: OperationContext | undefined }) => void;\n onData: (value: inferAsyncIterableYield<TValue>) => void;\n onError: (err: TError) => void;\n onStopped: () => void;\n onComplete: () => void;\n onConnectionStateChange: (state: TRPCConnectionState<TError>) => void;\n}\n\n/** @internal */\nexport type CreateTRPCClientOptions<TRouter extends InferrableClientTypes> = {\n links: TRPCLink<TRouter>[];\n transformer?: TypeError<'The transformer property has moved to httpLink/httpBatchLink/wsLink'>;\n};\n\nexport class TRPCUntypedClient<TInferrable extends InferrableClientTypes> {\n private readonly links: OperationLink<TInferrable>[];\n public readonly runtime: TRPCClientRuntime;\n private requestId: number;\n\n constructor(opts: CreateTRPCClientOptions<TInferrable>) {\n this.requestId = 0;\n\n this.runtime = {};\n\n // Initialize the links\n this.links = opts.links.map((link) => link(this.runtime));\n }\n\n private $request<TInput = unknown, TOutput = unknown>(opts: {\n type: TRPCType;\n input: TInput;\n path: string;\n context?: OperationContext;\n signal: Maybe<AbortSignal>;\n }) {\n const chain$ = createChain<AnyRouter, TInput, TOutput>({\n links: this.links as OperationLink<any, any, any>[],\n op: {\n ...opts,\n context: opts.context ?? {},\n id: ++this.requestId,\n },\n });\n return chain$.pipe(share());\n }\n\n private async requestAsPromise<TInput = unknown, TOutput = unknown>(opts: {\n type: TRPCType;\n input: TInput;\n path: string;\n context?: OperationContext;\n signal: Maybe<AbortSignal>;\n }): Promise<TOutput> {\n try {\n const req$ = this.$request<TInput, TOutput>(opts);\n type TValue = inferObservableValue<typeof req$>;\n\n const envelope = await observableToPromise<TValue>(req$);\n const data = (envelope.result as any).data;\n return data;\n } catch (err) {\n throw TRPCClientError.from(err as Error);\n }\n }\n public query(path: string, input?: unknown, opts?: TRPCRequestOptions) {\n return this.requestAsPromise<unknown, unknown>({\n type: 'query',\n path,\n input,\n context: opts?.context,\n signal: opts?.signal,\n });\n }\n public mutation(path: string, input?: unknown, opts?: TRPCRequestOptions) {\n return this.requestAsPromise<unknown, unknown>({\n type: 'mutation',\n path,\n input,\n context: opts?.context,\n signal: opts?.signal,\n });\n }\n public subscription(\n path: string,\n input: unknown,\n opts: Partial<\n TRPCSubscriptionObserver<unknown, TRPCClientError<AnyRouter>>\n > &\n TRPCRequestOptions,\n ): Unsubscribable {\n const observable$ = this.$request({\n type: 'subscription',\n path,\n input,\n context: opts.context,\n signal: opts.signal,\n });\n return observable$.subscribe({\n next(envelope) {\n switch (envelope.result.type) {\n case 'state': {\n opts.onConnectionStateChange?.(envelope.result);\n break;\n }\n case 'started': {\n opts.onStarted?.({\n context: envelope.context,\n });\n break;\n }\n case 'stopped': {\n opts.onStopped?.();\n break;\n }\n case 'data':\n case undefined: {\n opts.onData?.(envelope.result.data);\n break;\n }\n }\n },\n error(err) {\n opts.onError?.(err);\n },\n complete() {\n opts.onComplete?.();\n },\n });\n }\n}\n","import type { AnyRouter } from '@trpc/server/unstable-core-do-not-import';\nimport type { CreateTRPCClientOptions } from './internals/TRPCUntypedClient';\nimport { TRPCUntypedClient } from './internals/TRPCUntypedClient';\n\nexport function createTRPCUntypedClient<TRouter extends AnyRouter>(\n opts: CreateTRPCClientOptions<TRouter>,\n): TRPCUntypedClient<TRouter> {\n return new TRPCUntypedClient(opts);\n}\n\nexport type {\n CreateTRPCClientOptions,\n TRPCRequestOptions,\n} from './internals/TRPCUntypedClient';\nexport { TRPCUntypedClient } from './internals/TRPCUntypedClient';\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport type { Unsubscribable } from '@trpc/server/observable';\nimport type {\n AnyProcedure,\n AnyRouter,\n inferClientTypes,\n inferProcedureInput,\n InferrableClientTypes,\n inferTransformedProcedureOutput,\n ProcedureType,\n RouterRecord,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n createFlatProxy,\n createRecursiveProxy,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type { CreateTRPCClientOptions } from './createTRPCUntypedClient';\nimport type { TRPCSubscriptionObserver } from './internals/TRPCUntypedClient';\nimport { TRPCUntypedClient } from './internals/TRPCUntypedClient';\nimport type { TRPCProcedureOptions } from './internals/types';\nimport type { TRPCClientError } from './TRPCClientError';\n\n/**\n * @public\n * @deprecated use {@link TRPCClient} instead, will be removed in v12\n **/\nexport type inferRouterClient<TRouter extends AnyRouter> = TRPCClient<TRouter>;\n\n/**\n * @public\n * @deprecated use {@link TRPCClient} instead, will be removed in v12\n **/\nexport type CreateTRPCClient<TRouter extends AnyRouter> = TRPCClient<TRouter>;\n\nconst untypedClientSymbol = Symbol.for('trpc_untypedClient');\n\n/**\n * @public\n **/\nexport type TRPCClient<TRouter extends AnyRouter> = DecoratedProcedureRecord<\n {\n transformer: TRouter['_def']['_config']['$types']['transformer'];\n errorShape: TRouter['_def']['_config']['$types']['errorShape'];\n },\n TRouter['_def']['record']\n> & {\n [untypedClientSymbol]: TRPCUntypedClient<TRouter>;\n};\n\n/** @internal */\nexport type TRPCResolverDef = {\n input: any;\n output: any;\n transformer: boolean;\n errorShape: any;\n};\n\ntype coerceAsyncGeneratorToIterable<T> =\n T extends AsyncGenerator<infer $T, infer $Return, infer $Next>\n ? AsyncIterable<$T, $Return, $Next>\n : T;\n\n/** @internal */\nexport type Resolver<TDef extends TRPCResolverDef> = (\n input: TDef['input'],\n opts?: TRPCProcedureOptions,\n) => Promise<coerceAsyncGeneratorToIterable<TDef['output']>>;\n\n/** @internal */\nexport type SubscriptionResolver<TDef extends TRPCResolverDef> = (\n input: TDef['input'],\n opts: Partial<\n TRPCSubscriptionObserver<TDef['output'], TRPCClientError<TDef>>\n > &\n TRPCProcedureOptions,\n) => Unsubscribable;\n\ntype DecorateProcedure<\n TType extends ProcedureType,\n TDef extends TRPCResolverDef,\n> = TType extends 'query'\n ? {\n query: Resolver<TDef>;\n }\n : TType extends 'mutation'\n ? {\n mutate: Resolver<TDef>;\n }\n : TType extends 'subscription'\n ? {\n subscribe: SubscriptionResolver<TDef>;\n }\n : never;\n\n/**\n * @internal\n */\ntype DecoratedProcedureRecord<\n TRoot extends InferrableClientTypes,\n TRecord extends RouterRecord,\n> = {\n [TKey in keyof TRecord]: TRecord[TKey] extends infer $Value\n ? $Value extends AnyProcedure\n ? DecorateProcedure<\n $Value['_def']['type'],\n {\n input: inferProcedureInput<$Value>;\n output: inferTransformedProcedureOutput<\n inferClientTypes<TRoot>,\n $Value\n >;\n errorShape: inferClientTypes<TRoot>['errorShape'];\n transformer: inferClientTypes<TRoot>['transformer'];\n }\n >\n : $Value extends RouterRecord\n ? DecoratedProcedureRecord<TRoot, $Value>\n : never\n : never;\n};\n\nconst clientCallTypeMap: Record<\n keyof DecorateProcedure<any, any>,\n ProcedureType\n> = {\n query: 'query',\n mutate: 'mutation',\n subscribe: 'subscription',\n};\n\n/** @internal */\nexport const clientCallTypeToProcedureType = (\n clientCallType: string,\n): ProcedureType => {\n return clientCallTypeMap[clientCallType as keyof typeof clientCallTypeMap];\n};\n\n/**\n * @internal\n */\nexport function createTRPCClientProxy<TRouter extends AnyRouter>(\n client: TRPCUntypedClient<TRouter>,\n): TRPCClient<TRouter> {\n const proxy = createRecursiveProxy<TRPCClient<TRouter>>(({ path, args }) => {\n const pathCopy = [...path];\n const procedureType = clientCallTypeToProcedureType(pathCopy.pop()!);\n\n const fullPath = pathCopy.join('.');\n\n return (client[procedureType] as any)(fullPath, ...(args as any));\n });\n return createFlatProxy<TRPCClient<TRouter>>((key) => {\n if (key === untypedClientSymbol) {\n return client;\n }\n return proxy[key];\n });\n}\n\nexport function createTRPCClient<TRouter extends AnyRouter>(\n opts: CreateTRPCClientOptions<TRouter>,\n): TRPCClient<TRouter> {\n const client = new TRPCUntypedClient(opts);\n const proxy = createTRPCClientProxy<TRouter>(client);\n return proxy;\n}\n\n/**\n * Get an untyped client from a proxy client\n * @internal\n */\nexport function getUntypedClient<TRouter extends AnyRouter>(\n client: TRPCClient<TRouter>,\n): TRPCUntypedClient<TRouter> {\n return client[untypedClientSymbol];\n}\n","import type { AnyRouter, ProcedureType } from '@trpc/server';\nimport { observable } from '@trpc/server/observable';\nimport type { TRPCErrorShape, TRPCResponse } from '@trpc/server/rpc';\nimport type { AnyClientTypes } from '@trpc/server/unstable-core-do-not-import';\nimport { jsonlStreamConsumer } from '@trpc/server/unstable-core-do-not-import';\nimport type { BatchLoader } from '../internals/dataLoader';\nimport { dataLoader } from '../internals/dataLoader';\nimport { allAbortSignals, raceAbortSignals } from '../internals/signals';\nimport type { NonEmptyArray } from '../internals/types';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type { HTTPBatchLinkOptions } from './HTTPBatchLinkOptions';\nimport type { HTTPResult } from './internals/httpUtils';\nimport {\n fetchHTTPResponse,\n getBody,\n getUrl,\n resolveHTTPLinkOptions,\n} from './internals/httpUtils';\nimport type { Operation, TRPCLink } from './types';\n\nexport type HTTPBatchStreamLinkOptions<TRoot extends AnyClientTypes> =\n HTTPBatchLinkOptions<TRoot> & {\n /**\n * Which header to use to signal the server that the client wants a streaming response.\n * - `'trpc-accept'` (default): sends `trpc-accept: application/jsonl` header\n * - `'accept'`: sends `Accept: application/jsonl` header, which can avoid CORS preflight for cross-origin streaming queries. Be aware that `application/jsonl` is not an official MIME type and so this is not completely spec-compliant - you should test that your infrastructure supports this value.\n * @default 'trpc-accept'\n */\n streamHeader?: 'trpc-accept' | 'accept';\n };\n\n/**\n * @see https://trpc.io/docs/client/links/httpBatchStreamLink\n */\nexport function httpBatchStreamLink<TRouter extends AnyRouter>(\n opts: HTTPBatchStreamLinkOptions<TRouter['_def']['_config']['$types']>,\n): TRPCLink<TRouter> {\n const resolvedOpts = resolveHTTPLinkOptions(opts);\n const maxURLLength = opts.maxURLLength ?? Infinity;\n const maxItems = opts.maxItems ?? Infinity;\n\n return () => {\n const batchLoader = (\n type: ProcedureType,\n ): BatchLoader<Operation, HTTPResult> => {\n return {\n validate(batchOps) {\n if (maxURLLength === Infinity && maxItems === Infinity) {\n // escape hatch for quick calcs\n return true;\n }\n if (batchOps.length > maxItems) {\n return false;\n }\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n\n const url = getUrl({\n ...resolvedOpts,\n type,\n path,\n inputs,\n signal: null,\n });\n\n return url.length <= maxURLLength;\n },\n async fetch(batchOps) {\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n\n const batchSignals = allAbortSignals(\n ...batchOps.map((op) => op.signal),\n );\n const abortController = new AbortController();\n\n const responsePromise = fetchHTTPResponse({\n ...resolvedOpts,\n signal: raceAbortSignals(batchSignals, abortController.signal),\n type,\n contentTypeHeader: 'application/json',\n trpcAcceptHeader: 'application/jsonl',\n trpcAcceptHeaderKey: opts.streamHeader ?? 'trpc-accept',\n getUrl,\n getBody,\n inputs,\n path,\n headers() {\n if (!opts.headers) {\n return {};\n }\n if (typeof opts.headers === 'function') {\n return opts.headers({\n opList: batchOps as NonEmptyArray<Operation>,\n });\n }\n return opts.headers;\n },\n });\n\n const res = await responsePromise;\n\n if (!res.ok) {\n // Server returned a non-2xx response (e.g. batching disabled).\n // The body is plain JSON, not JSONL, so parse it directly and\n // propagate the same error to every operation in the batch.\n const json = (await res.json()) as TRPCResponse;\n if ('error' in json) {\n json.error = resolvedOpts.transformer.output.deserialize(\n json.error,\n );\n }\n\n return batchOps.map(\n (): Promise<HTTPResult> =>\n Promise.resolve({\n json,\n meta: {\n response: res,\n },\n }),\n );\n }\n\n const [head] = await jsonlStreamConsumer<\n Record<string, Promise<any>>\n >({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n from: res.body!,\n deserialize: (data) =>\n resolvedOpts.transformer.output.deserialize(data),\n // onError: console.error,\n formatError(opts) {\n const error = opts.error as TRPCErrorShape;\n return TRPCClientError.from({\n error,\n });\n },\n abortController,\n });\n const promises = Object.keys(batchOps).map(\n async (key): Promise<HTTPResult> => {\n let json: TRPCResponse = await Promise.resolve(head[key]);\n\n if ('result' in json) {\n /**\n * Not very pretty, but we need to unwrap nested data as promises\n * Our stream producer will only resolve top-level async values or async values that are directly nested in another async value\n */\n const result = await Promise.resolve(json.result);\n json = {\n result: {\n data: await Promise.resolve(result.data),\n },\n };\n }\n\n return {\n json,\n meta: {\n response: res,\n },\n };\n },\n );\n return promises;\n },\n };\n };\n\n const query = dataLoader(batchLoader('query'));\n const mutation = dataLoader(batchLoader('mutation'));\n\n const loaders = { query, mutation };\n return ({ op }) => {\n return observable((observer) => {\n /* istanbul ignore if -- @preserve */\n if (op.type === 'subscription') {\n throw new Error(\n 'Subscriptions are unsupported by `httpBatchStreamLink` - use `httpSubscriptionLink` or `wsLink`',\n );\n }\n const loader = loaders[op.type];\n const promise = loader.load(op);\n\n let _res = undefined as HTTPResult | undefined;\n promise\n .then((res) => {\n _res = res;\n if ('error' in res.json) {\n observer.error(\n TRPCClientError.from(res.json, {\n meta: res.meta,\n }),\n );\n return;\n } else if ('result' in res.json) {\n observer.next({\n context: res.meta,\n result: res.json.result,\n });\n observer.complete();\n return;\n }\n\n observer.complete();\n })\n .catch((err) => {\n observer.error(\n TRPCClientError.from(err, {\n meta: _res?.meta,\n }),\n );\n });\n\n return () => {\n // noop\n };\n });\n };\n };\n}\n\n/**\n * @deprecated use {@link httpBatchStreamLink} instead\n */\nexport const unstable_httpBatchStreamLink = httpBatchStreamLink;\n","export function inputWithTrackedEventId(\n input: unknown,\n lastEventId: string | undefined,\n) {\n if (!lastEventId) {\n return input;\n }\n if (input != null && typeof input !== 'object') {\n return input;\n }\n return {\n ...(input ?? {}),\n lastEventId,\n };\n}\n","function _asyncIterator(r) {\n var n,\n t,\n o,\n e = 2;\n for (\"undefined\" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {\n if (t && null != (n = r[t])) return n.call(r);\n if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));\n t = \"@@asyncIterator\", o = \"@@iterator\";\n }\n throw new TypeError(\"Object is not async iterable\");\n}\nfunction AsyncFromSyncIterator(r) {\n function AsyncFromSyncIteratorContinuation(r) {\n if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\"));\n var n = r.done;\n return Promise.resolve(r.value).then(function (r) {\n return {\n value: r,\n done: n\n };\n });\n }\n return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) {\n this.s = r, this.n = r.next;\n }, AsyncFromSyncIterator.prototype = {\n s: null,\n n: null,\n next: function next() {\n return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n },\n \"return\": function _return(r) {\n var n = this.s[\"return\"];\n return void 0 === n ? Promise.resolve({\n value: r,\n done: !0\n }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n },\n \"throw\": function _throw(r) {\n var n = this.s[\"return\"];\n return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));\n }\n }, new AsyncFromSyncIterator(r);\n}\nmodule.exports = _asyncIterator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { behaviorSubject, observable } from '@trpc/server/observable';\nimport type { TRPCErrorShape, TRPCResult } from '@trpc/server/rpc';\nimport type {\n AnyClientTypes,\n EventSourceLike,\n inferClientTypes,\n InferrableClientTypes,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n retryableRpcCodes,\n run,\n sseStreamConsumer,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { inputWithTrackedEventId } from '../internals/inputWithTrackedEventId';\nimport { raceAbortSignals } from '../internals/signals';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type { TRPCConnectionState } from '../unstable-internals';\nimport { getTransformer, type TransformerOptions } from '../unstable-internals';\nimport { getUrl } from './internals/httpUtils';\nimport {\n resultOf,\n type UrlOptionsWithConnectionParams,\n} from './internals/urlWithConnectionParams';\nimport type { Operation, TRPCLink } from './types';\n\nasync function urlWithConnectionParams(\n opts: UrlOptionsWithConnectionParams,\n): Promise<string> {\n let url = await resultOf(opts.url);\n if (opts.connectionParams) {\n const params = await resultOf(opts.connectionParams);\n\n const prefix = url.includes('?') ? '&' : '?';\n url +=\n prefix + 'connectionParams=' + encodeURIComponent(JSON.stringify(params));\n }\n\n return url;\n}\n\ntype HTTPSubscriptionLinkOptions<\n TRoot extends AnyClientTypes,\n TEventSource extends EventSourceLike.AnyConstructor = typeof EventSource,\n> = {\n /**\n * EventSource ponyfill\n */\n EventSource?: TEventSource;\n /**\n * EventSource options or a callback that returns them\n */\n eventSourceOptions?:\n | EventSourceLike.InitDictOf<TEventSource>\n | ((opts: {\n op: Operation;\n }) =>\n | EventSourceLike.InitDictOf<TEventSource>\n | Promise<EventSourceLike.InitDictOf<TEventSource>>);\n} & TransformerOptions<TRoot> &\n UrlOptionsWithConnectionParams;\n\n/**\n * @see https://trpc.io/docs/client/links/httpSubscriptionLink\n */\nexport function httpSubscriptionLink<\n TInferrable extends InferrableClientTypes,\n TEventSource extends EventSourceLike.AnyConstructor,\n>(\n opts: HTTPSubscriptionLinkOptions<\n inferClientTypes<TInferrable>,\n TEventSource\n >,\n): TRPCLink<TInferrable> {\n const transformer = getTransformer(opts.transformer);\n\n return () => {\n return ({ op }) => {\n return observable((observer) => {\n const { type, path, input } = op;\n\n /* istanbul ignore if -- @preserve */\n if (type !== 'subscription') {\n throw new Error('httpSubscriptionLink only supports subscriptions');\n }\n\n let lastEventId: string | undefined = undefined;\n const ac = new AbortController();\n const signal = raceAbortSignals(op.signal, ac.signal);\n const eventSourceStream = sseStreamConsumer<{\n EventSource: TEventSource;\n data: Partial<{\n id?: string;\n data: unknown;\n }>;\n error: TRPCErrorShape;\n }>({\n url: async () =>\n getUrl({\n transformer,\n url: await urlWithConnectionParams(opts),\n input: inputWithTrackedEventId(input, lastEventId),\n path,\n type,\n signal: null,\n }),\n init: () => resultOf(opts.eventSourceOptions, { op }),\n signal,\n deserialize: (data) => transformer.output.deserialize(data),\n EventSource:\n opts.EventSource ??\n (globalThis.EventSource as never as TEventSource),\n });\n\n const connectionState = behaviorSubject<\n TRPCConnectionState<TRPCClientError<any>>\n >({\n type: 'state',\n state: 'connecting',\n error: null,\n });\n\n const connectionSub = connectionState.subscribe({\n next(state) {\n observer.next({\n result: state,\n });\n },\n });\n run(async () => {\n for await (const chunk of eventSourceStream) {\n switch (chunk.type) {\n case 'ping':\n // do nothing\n break;\n case 'data':\n const chunkData = chunk.data;\n\n let result: TRPCResult<unknown>;\n if (chunkData.id) {\n // if the `tracked()`-helper is used, we always have an `id` field\n lastEventId = chunkData.id;\n result = {\n id: chunkData.id,\n data: chunkData,\n };\n } else {\n result = {\n data: chunkData.data,\n };\n }\n\n observer.next({\n result,\n context: {\n eventSource: chunk.eventSource,\n },\n });\n break;\n case 'connected': {\n observer.next({\n result: {\n type: 'started',\n },\n context: {\n eventSource: chunk.eventSource,\n },\n });\n connectionState.next({\n type: 'state',\n state: 'pending',\n error: null,\n });\n break;\n }\n case 'serialized-error': {\n const error = TRPCClientError.from({ error: chunk.error });\n\n if (retryableRpcCodes.includes(chunk.error.code)) {\n //\n connectionState.next({\n type: 'state',\n state: 'connecting',\n error,\n });\n break;\n }\n //\n // non-retryable error, cancel the subscription\n throw error;\n }\n case 'connecting': {\n const lastState = connectionState.get();\n\n const error = chunk.event && TRPCClientError.from(chunk.event);\n if (!error && lastState.state === 'connecting') {\n break;\n }\n\n connectionState.next({\n type: 'state',\n state: 'connecting',\n error,\n });\n break;\n }\n case 'timeout': {\n connectionState.next({\n type: 'state',\n state: 'connecting',\n error: new TRPCClientError(\n `Timeout of ${chunk.ms}ms reached while waiting for a response`,\n ),\n });\n }\n }\n }\n observer.next({\n result: {\n type: 'stopped',\n },\n });\n connectionState.next({\n type: 'state',\n state: 'idle',\n error: null,\n });\n observer.complete();\n }).catch((error) => {\n observer.error(TRPCClientError.from(error));\n });\n\n return () => {\n observer.complete();\n ac.abort();\n connectionSub.unsubscribe();\n };\n });\n };\n };\n}\n\n/**\n * @deprecated use {@link httpSubscriptionLink} instead\n */\nexport const unstable_httpSubscriptionLink = httpSubscriptionLink;\n","/* istanbul ignore file -- @preserve */\n// We're not actually exporting this link\nimport type { Unsubscribable } from '@trpc/server/observable';\nimport { observable } from '@trpc/server/observable';\nimport type { InferrableClientTypes } from '@trpc/server/unstable-core-do-not-import';\nimport { inputWithTrackedEventId } from '../internals/inputWithTrackedEventId';\nimport type { TRPCClientError } from '../TRPCClientError';\nimport type { Operation, TRPCLink } from './types';\n\ninterface RetryLinkOptions<TInferrable extends InferrableClientTypes> {\n /**\n * The retry function\n */\n retry: (opts: RetryFnOptions<TInferrable>) => boolean;\n /**\n * The delay between retries in ms (defaults to 0)\n */\n retryDelayMs?: (attempt: number) => number;\n}\n\ninterface RetryFnOptions<TInferrable extends InferrableClientTypes> {\n /**\n * The operation that failed\n */\n op: Operation;\n /**\n * The error that occurred\n */\n error: TRPCClientError<TInferrable>;\n /**\n * The number of attempts that have been made (including the first call)\n */\n attempts: number;\n}\n\n/**\n * @see https://trpc.io/docs/v11/client/links/retryLink\n */\nexport function retryLink<TInferrable extends InferrableClientTypes>(\n opts: RetryLinkOptions<TInferrable>,\n): TRPCLink<TInferrable> {\n // initialized config\n return () => {\n // initialized in app\n return (callOpts) => {\n // initialized for request\n return observable((observer) => {\n let next$: Unsubscribable;\n let callNextTimeout: ReturnType<typeof setTimeout> | undefined =\n undefined;\n\n let lastEventId: string | undefined = undefined;\n\n attempt(1);\n\n function opWithLastEventId() {\n const op = callOpts.op;\n if (!lastEventId) {\n return op;\n }\n\n return {\n ...op,\n input: inputWithTrackedEventId(op.input, lastEventId),\n };\n }\n\n function attempt(attempts: number) {\n const op = opWithLastEventId();\n\n next$ = callOpts.next(op).subscribe({\n error(error) {\n const shouldRetry = opts.retry({\n op,\n attempts,\n error,\n });\n if (!shouldRetry) {\n observer.error(error);\n return;\n }\n const delayMs = opts.retryDelayMs?.(attempts) ?? 0;\n\n if (delayMs <= 0) {\n attempt(attempts + 1);\n return;\n }\n callNextTimeout = setTimeout(\n () => attempt(attempts + 1),\n delayMs,\n );\n },\n next(envelope) {\n //\n if (\n (!envelope.result.type || envelope.result.type === 'data') &&\n envelope.result.id\n ) {\n //\n lastEventId = envelope.result.id;\n }\n\n observer.next(envelope);\n },\n complete() {\n observer.complete();\n },\n });\n }\n return () => {\n next$.unsubscribe();\n clearTimeout(callNextTimeout);\n };\n });\n };\n };\n}\n","function _usingCtx() {\n var r = \"function\" == typeof SuppressedError ? SuppressedError : function (r, e) {\n var n = Error();\n return n.name = \"SuppressedError\", n.error = r, n.suppressed = e, n;\n },\n e = {},\n n = [];\n function using(r, e) {\n if (null != e) {\n if (Object(e) !== e) throw new TypeError(\"using declarations can only be used with objects, functions, null, or undefined.\");\n if (r) var o = e[Symbol.asyncDispose || Symbol[\"for\"](\"Symbol.asyncDispose\")];\n if (void 0 === o && (o = e[Symbol.dispose || Symbol[\"for\"](\"Symbol.dispose\")], r)) var t = o;\n if (\"function\" != typeof o) throw new TypeError(\"Object is not disposable.\");\n t && (o = function o() {\n try {\n t.call(e);\n } catch (r) {\n return Promise.reject(r);\n }\n }), n.push({\n v: e,\n d: o,\n a: r\n });\n } else r && n.push({\n d: e,\n a: r\n });\n return e;\n }\n return {\n e: e,\n u: using.bind(null, !1),\n a: using.bind(null, !0),\n d: function d() {\n var o,\n t = this.e,\n s = 0;\n function next() {\n for (; o = n.pop();) try {\n if (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);\n if (o.d) {\n var r = o.d.call(o.v);\n if (o.a) return s |= 2, Promise.resolve(r).then(next, err);\n } else s |= 1;\n } catch (r) {\n return err(r);\n }\n if (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();\n if (t !== e) throw t;\n }\n function err(n) {\n return t = t !== e ? new r(n, t) : n, next();\n }\n return next();\n }\n };\n}\nmodule.exports = _usingCtx, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _OverloadYield(e, d) {\n this.v = e, this.k = d;\n}\nmodule.exports = _OverloadYield, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var OverloadYield = require(\"./OverloadYield.js\");\nfunction _awaitAsyncGenerator(e) {\n return new OverloadYield(e, 0);\n}\nmodule.exports = _awaitAsyncGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var OverloadYield = require(\"./OverloadYield.js\");\nfunction _wrapAsyncGenerator(e) {\n return function () {\n return new AsyncGenerator(e.apply(this, arguments));\n };\n}\nfunction AsyncGenerator(e) {\n var r, t;\n function resume(r, t) {\n try {\n var n = e[r](t),\n o = n.value,\n u = o instanceof OverloadYield;\n Promise.resolve(u ? o.v : o).then(function (t) {\n if (u) {\n var i = \"return\" === r ? \"return\" : \"next\";\n if (!o.k || t.done) return resume(i, t);\n t = e[i](t).value;\n }\n settle(n.done ? \"return\" : \"normal\", t);\n }, function (e) {\n resume(\"throw\", e);\n });\n } catch (e) {\n settle(\"throw\", e);\n }\n }\n function settle(e, n) {\n switch (e) {\n case \"return\":\n r.resolve({\n value: n,\n done: !0\n });\n break;\n case \"throw\":\n r.reject(n);\n break;\n default:\n r.resolve({\n value: n,\n done: !1\n });\n }\n (r = r.next) ? resume(r.key, r.arg) : t = null;\n }\n this._invoke = function (e, n) {\n return new Promise(function (o, u) {\n var i = {\n key: e,\n arg: n,\n resolve: o,\n reject: u,\n next: null\n };\n t ? t = t.next = i : (r = t = i, resume(e, n));\n });\n }, \"function\" != typeof e[\"return\"] && (this[\"return\"] = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n return this;\n}, AsyncGenerator.prototype.next = function (e) {\n return this._invoke(\"next\", e);\n}, AsyncGenerator.prototype[\"throw\"] = function (e) {\n return this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype[\"return\"] = function (e) {\n return this._invoke(\"return\", e);\n};\nmodule.exports = _wrapAsyncGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import {\n getTRPCErrorFromUnknown,\n getTRPCErrorShape,\n isTrackedEnvelope,\n} from '@trpc/server';\nimport { behaviorSubject, observable } from '@trpc/server/observable';\nimport { TRPC_ERROR_CODES_BY_KEY, type TRPCResult } from '@trpc/server/rpc';\nimport {\n callProcedure,\n isAbortError,\n isAsyncIterable,\n iteratorResource,\n makeResource,\n retryableRpcCodes,\n run,\n type AnyRouter,\n type ErrorHandlerOptions,\n type inferClientTypes,\n type inferRouterContext,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { inputWithTrackedEventId } from '../internals/inputWithTrackedEventId';\nimport { abortSignalToPromise, raceAbortSignals } from '../internals/signals';\nimport { getTransformer } from '../internals/transformer';\nimport type { TransformerOptions } from '../internals/transformer';\nimport { isTRPCClientError, TRPCClientError } from '../TRPCClientError';\nimport type { TRPCConnectionState } from './internals/subscriptions';\nimport type { TRPCLink } from './types';\n\nexport type LocalLinkOptions<TRouter extends AnyRouter> = {\n router: TRouter;\n createContext: () => Promise<inferRouterContext<TRouter>>;\n onError?: (opts: ErrorHandlerOptions<inferRouterContext<TRouter>>) => void;\n} & TransformerOptions<inferClientTypes<TRouter>>;\n\n/**\n * localLink is a terminating link that allows you to make tRPC procedure calls directly in your application without going through HTTP.\n *\n * @see https://trpc.io/docs/links/localLink\n */\nexport function unstable_localLink<TRouter extends AnyRouter>(\n opts: LocalLinkOptions<TRouter>,\n): TRPCLink<TRouter> {\n const transformer = getTransformer(opts.transformer);\n\n const transformChunk = (chunk: unknown) => {\n if (opts.transformer) {\n // assume transformer will do the right thing\n return chunk;\n }\n // Special case for undefined, because `JSON.stringify(undefined)` throws\n if (chunk === undefined) {\n return chunk;\n }\n const serialized = JSON.stringify(transformer.input.serialize(chunk));\n const deserialized = JSON.parse(transformer.output.deserialize(serialized));\n return deserialized;\n };\n\n return () =>\n ({ op }) =>\n observable((observer) => {\n let ctx: inferRouterContext<TRouter> | undefined = undefined;\n const ac = new AbortController();\n\n const signal = raceAbortSignals(op.signal, ac.signal);\n const signalPromise = abortSignalToPromise(signal);\n\n signalPromise.catch(() => {\n // prevent unhandled rejection\n });\n\n let input = op.input;\n async function runProcedure(newInput: unknown): Promise<unknown> {\n input = newInput;\n\n ctx = await opts.createContext();\n\n return callProcedure({\n router: opts.router,\n path: op.path,\n getRawInput: async () => newInput,\n ctx,\n type: op.type,\n signal,\n batchIndex: 0,\n });\n }\n\n function onErrorCallback(cause: unknown) {\n if (isAbortError(cause)) {\n return;\n }\n opts.onError?.({\n error: getTRPCErrorFromUnknown(cause),\n type: op.type,\n path: op.path,\n input,\n ctx,\n });\n }\n\n function coerceToTRPCClientError(cause: unknown) {\n if (isTRPCClientError<TRouter>(cause)) {\n return cause;\n }\n const error = getTRPCErrorFromUnknown(cause);\n\n const shape = getTRPCErrorShape({\n config: opts.router._def._config,\n ctx,\n error,\n input,\n path: op.path,\n type: op.type,\n });\n return TRPCClientError.from(\n { error: transformChunk(shape) },\n { cause: cause instanceof Error ? cause : undefined },\n );\n }\n\n run(async () => {\n switch (op.type) {\n case 'query':\n case 'mutation': {\n const result = await runProcedure(op.input);\n if (!isAsyncIterable(result)) {\n observer.next({\n result: { data: transformChunk(result) },\n });\n observer.complete();\n break;\n }\n\n observer.next({\n result: {\n data: (async function* () {\n await using iterator = iteratorResource(result);\n using _finally = makeResource({}, () => {\n observer.complete();\n });\n try {\n while (true) {\n const res = await Promise.race([\n iterator.next(),\n signalPromise,\n ]);\n if (res.done) {\n return transformChunk(res.value);\n }\n yield transformChunk(res.value);\n }\n } catch (cause) {\n onErrorCallback(cause);\n throw coerceToTRPCClientError(cause);\n }\n })(),\n },\n });\n break;\n }\n case 'subscription': {\n const connectionState = behaviorSubject<\n TRPCConnectionState<TRPCClientError<any>>\n >({\n type: 'state',\n state: 'connecting',\n error: null,\n });\n\n const connectionSub = connectionState.subscribe({\n next(state) {\n observer.next({\n result: state,\n });\n },\n });\n let lastEventId: string | undefined = undefined;\n\n using _finally = makeResource({}, async () => {\n observer.complete();\n\n connectionState.next({\n type: 'state',\n state: 'idle',\n error: null,\n });\n connectionSub.unsubscribe();\n });\n while (true) {\n const result = await runProcedure(\n inputWithTrackedEventId(op.input, lastEventId),\n );\n if (!isAsyncIterable(result)) {\n throw new Error('Expected an async iterable');\n }\n await using iterator = iteratorResource(result);\n\n observer.next({\n result: {\n type: 'started',\n },\n });\n connectionState.next({\n type: 'state',\n state: 'pending',\n error: null,\n });\n\n // Use a while loop to handle errors and reconnects\n while (true) {\n let res;\n try {\n res = await Promise.race([iterator.next(), signalPromise]);\n } catch (cause) {\n if (isAbortError(cause)) {\n return;\n }\n const error = getTRPCErrorFromUnknown(cause);\n\n if (\n !retryableRpcCodes.includes(\n TRPC_ERROR_CODES_BY_KEY[error.code],\n )\n ) {\n throw coerceToTRPCClientError(error);\n }\n\n onErrorCallback(error);\n connectionState.next({\n type: 'state',\n state: 'connecting',\n error: coerceToTRPCClientError(error),\n });\n\n break;\n }\n\n if (res.done) {\n return;\n }\n let chunk: TRPCResult<unknown>;\n if (isTrackedEnvelope(res.value)) {\n lastEventId = res.value[0];\n\n chunk = {\n id: res.value[0],\n data: {\n id: res.value[0],\n data: res.value[1],\n },\n };\n } else {\n chunk = {\n data: res.value,\n };\n }\n\n observer.next({\n result: {\n ...chunk,\n data: transformChunk(chunk.data),\n },\n });\n }\n }\n break;\n }\n }\n }).catch((cause) => {\n onErrorCallback(cause);\n observer.error(coerceToTRPCClientError(cause));\n });\n\n return () => {\n ac.abort();\n };\n });\n}\n/**\n * @deprecated Renamed to `unstable_localLink`. This alias will be removed in a future major release.\n */\nexport const experimental_localLink: typeof unstable_localLink =\n unstable_localLink;\n"],"mappings":"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","names":["CommanderError","InvalidArgumentError","InvalidArgumentError","Argument","Help","cmd","InvalidArgumentError","Option","key","str","path","process","Argument","CommanderError","Help","Option","Command","key","option","Argument","Command","CommanderError","InvalidArgumentError","Help","Option","process","fileURLToPath","commander","homedir","join","stat","join","process","runtimeEnv","process","createReadStream","createInterface","path","model","isObject","isFiniteNumber","key","path","createReadStream","createInterface","path","stat","join","stat","homedir","join","isFile","path","stat","homedir","join","stat","homedir","join","createReadStream","createInterface","isObject","isFiniteNumber","key","path","createReadStream","createInterface","isFile","path","stat","join","homedir","defaultRoot","join","homedir","key","key","_typeof","o","toPrimitive","toPropertyKey","r","subscribe: (observer: Observer<TValue, TError>) => TeardownLogic","self: Observable<TValue, TError>","teardownRef: TeardownLogic | null","prev: any","fn: UnaryFunction<any, any>","observable: Observable<TValue, unknown>","_opts?: ShareConfig","subscription: Unsubscribable | null","observers: Partial<Observer<TValue, TError>>[]","initialValue: TValue","value: TValue","observerList: Observer<TValue, never>[]","observer: Observer<TValue, never>","nextValue: TValue","opts: {\n links: OperationLink<TRouter, TInput, TOutput>[];\n op: Operation<TInput>;\n}","isObject","value: unknown","retryableRpcCodes: TRPC_ERROR_CODE_NUMBER[]","obj: object","callback: ProxyCallback","path: readonly string[]","memo: Record<string, unknown>","path","key","callback: (path: keyof TFaux) => any","_typeof","o","toPrimitive","require_typeof","require_toPrimitive","toPropertyKey","require_toPropertyKey","require_defineProperty","r","response:\n | TRPCResponse<TOutput, inferRouterError<TRouter>>\n | TRPCResponseMessage<TOutput, inferRouterError<TRouter>>","transformer: DataTransformer","result: ReturnType<typeof transformResultInner>","isObject","cause: unknown","obj: unknown","isObject","err: unknown","fallback: string","TRPCClientError","message: string","opts?: {\n result?: Maybe<TRPCErrorResponse<inferErrorShape<TRouterOrProcedure>>>;\n cause?: Error;\n meta?: Record<string, unknown>;\n }","_cause: Error | TRPCErrorResponse<any> | object","opts: { meta?: Record<string, unknown>; cause?: Error }","import_objectSpread2","transformer:\n | TransformerOptions<{ transformer: false }>['transformer']\n | TransformerOptions<{ transformer: true }>['transformer']\n | undefined","isFunction","fn: unknown","customFetchImpl?: FetchEsque | NativeFetchEsque","opts: HTTPLinkBaseOptions<AnyClientTypes>","array: unknown[]","dict: Record<number, unknown>","opts: GetInputOptions","getUrl: GetUrl","queryParts: string[]","getBody: GetBody","jsonHttpRequester: Requester","import_objectSpread2","signal: Maybe<AbortSignal>","opts: HTTPRequestOptions","batchLoader: BatchLoader<TKey, TValue>","pendingItems: BatchItem<TKey, TValue>[] | null","dispatchTimer: ReturnType<typeof setTimeout> | null","items: BatchItem<TKey, TValue>[]","groupedItems: BatchItem<TKey, TValue>[][]","batch: Batch<TKey, TValue>","key: TKey","item: BatchItem<TKey, TValue>","key","opts: HTTPBatchLinkOptions<TRouter['_def']['_config']['$types']>","type: ProcedureType","path","import_objectSpread2","value: T | ((...args: TArgs) => T)","resolve: (value: T | PromiseLike<T>) => void","reject: (reason?: any) => void","urlOptions: UrlOptionsWithConnectionParams","connectionParams: CallbackOrValue<TRPCRequestInfo['connectionParams']>","encoder: Encoder","message: TRPCConnectionParamsMessage","ws: WebSocket","pingTimeout: ReturnType<typeof setTimeout> | undefined","pongTimeout: ReturnType<typeof setTimeout> | undefined","WsConnection","opts: WebSocketConnectionOptions","this","opts: CreateTRPCClientOptions<TInferrable>","opts: {\n type: TRPCType;\n input: TInput;\n path: string;\n context?: OperationContext;\n signal: Maybe<AbortSignal>;\n }","path: string","input?: unknown","opts?: TRPCRequestOptions","path","input: unknown","opts: Partial<\n TRPCSubscriptionObserver<unknown, TRPCClientError<AnyRouter>>\n > &\n TRPCRequestOptions","clientCallTypeMap: Record<\n keyof DecorateProcedure<any, any>,\n ProcedureType\n>","clientCallType: string","client: TRPCUntypedClient<TRouter>","path","key","opts: CreateTRPCClientOptions<TRouter>","_asyncIterator","r","AsyncFromSyncIterator","r","e","n","o","OverloadYield","_awaitAsyncGenerator","_wrapAsyncGenerator","t","process","fileURLToPath","program"]}