@igniter-js/cli 0.2.72 → 0.4.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.
Files changed (45) hide show
  1. package/README.md +213 -27
  2. package/dist/index.d.mts +2 -1
  3. package/dist/index.mjs +3556 -19993
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +38 -53
  6. package/templates/add-ons/auth/better-auth/auth.hbs +37 -0
  7. package/templates/add-ons/bots/nextjs/route-handler.hbs +10 -0
  8. package/templates/add-ons/bots/sample-bot.hbs +26 -0
  9. package/templates/add-ons/bots/tanstack-start/route-handler.hbs +15 -0
  10. package/templates/add-ons/database/prisma/lib.hbs +11 -0
  11. package/templates/add-ons/database/prisma/prisma.config.hbs +13 -0
  12. package/templates/add-ons/database/prisma/schema.hbs +15 -0
  13. package/templates/add-ons/jobs/jobs.ts.hbs +32 -0
  14. package/templates/add-ons/jobs/redis.ts.hbs +13 -0
  15. package/templates/add-ons/jobs/store.ts.hbs +12 -0
  16. package/templates/add-ons/logging/logger.ts.hbs +14 -0
  17. package/templates/add-ons/mcp/mcp.ts.hbs +21 -0
  18. package/templates/add-ons/mcp/nextjs/route-handler.hbs +11 -0
  19. package/templates/add-ons/mcp/tanstack-start/route-handler.hbs +19 -0
  20. package/templates/add-ons/store/redis.ts.hbs +13 -0
  21. package/templates/add-ons/store/store.ts.hbs +12 -0
  22. package/templates/add-ons/telemetry/telemetry.ts.hbs +20 -0
  23. package/templates/generate/feature/empty.controller.hbs +20 -0
  24. package/templates/generate/feature/empty.interfaces.hbs +5 -0
  25. package/templates/generate/feature/procedure.hbs +23 -0
  26. package/templates/generate/feature/schema.controller.hbs +73 -0
  27. package/templates/generate/feature/schema.interfaces.hbs +23 -0
  28. package/templates/generate/feature/schema.procedure.hbs +23 -0
  29. package/templates/scaffold/example-feature/example.controller.hbs +23 -0
  30. package/templates/scaffold/example-feature/example.interfaces.hbs +14 -0
  31. package/templates/scaffold/example-feature/example.procedure.hbs +28 -0
  32. package/templates/scaffold/igniter.schema.hbs +21 -0
  33. package/templates/starters/igniter.client.hbs +52 -0
  34. package/templates/starters/igniter.context.hbs +10 -0
  35. package/templates/starters/igniter.hbs +43 -0
  36. package/templates/starters/igniter.router.hbs +14 -0
  37. package/templates/starters/nextjs/route-handler.hbs +8 -0
  38. package/templates/starters/nextjs/tsconfig.hbs +35 -0
  39. package/templates/starters/open-api.hbs +45 -0
  40. package/templates/starters/tanstack-start/route-handler.hbs +13 -0
  41. package/templates/starters/tanstack-start/tsconfig.hbs +15 -0
  42. package/bin/igniter +0 -2
  43. package/dist/index.d.ts +0 -1
  44. package/dist/index.js +0 -20309
  45. package/dist/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/spinner.ts","../src/adapters/logger.ts","../../../node_modules/@ioredis/commands/built/commands.json","../../../node_modules/@ioredis/commands/built/index.js","../../../node_modules/standard-as-callback/built/utils.js","../../../node_modules/standard-as-callback/built/index.js","../../../node_modules/redis-errors/lib/old.js","../../../node_modules/redis-errors/lib/modern.js","../../../node_modules/redis-errors/index.js","../../../node_modules/cluster-key-slot/lib/index.js","../../../node_modules/lodash.defaults/index.js","../../../node_modules/lodash.isarguments/index.js","../../../node_modules/ioredis/built/utils/lodash.js","../../../node_modules/ms/index.js","../../../node_modules/debug/src/common.js","../../../node_modules/debug/src/browser.js","../../../node_modules/has-flag/index.js","../../../node_modules/supports-color/index.js","../../../node_modules/debug/src/node.js","../../../node_modules/debug/src/index.js","../../../node_modules/ioredis/built/utils/debug.js","../../../node_modules/ioredis/built/constants/TLSProfiles.js","../../../node_modules/ioredis/built/utils/index.js","../../../node_modules/ioredis/built/Command.js","../../../node_modules/ioredis/built/errors/ClusterAllFailedError.js","../../../node_modules/ioredis/built/ScanStream.js","../../../node_modules/ioredis/built/autoPipelining.js","../../../node_modules/ioredis/built/Script.js","../../../node_modules/ioredis/built/utils/Commander.js","../../../node_modules/ioredis/built/Pipeline.js","../../../node_modules/ioredis/built/transaction.js","../../../node_modules/ioredis/built/utils/applyMixin.js","../../../node_modules/ioredis/built/cluster/ClusterOptions.js","../../../node_modules/ioredis/built/cluster/util.js","../../../node_modules/ioredis/built/cluster/ClusterSubscriber.js","../../../node_modules/ioredis/built/cluster/ConnectionPool.js","../../../node_modules/denque/index.js","../../../node_modules/ioredis/built/cluster/DelayQueue.js","../../../node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js","../../../node_modules/ioredis/built/cluster/index.js","../../../node_modules/ioredis/built/connectors/AbstractConnector.js","../../../node_modules/ioredis/built/connectors/StandaloneConnector.js","../../../node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js","../../../node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js","../../../node_modules/ioredis/built/connectors/SentinelConnector/index.js","../../../node_modules/ioredis/built/connectors/index.js","../../../node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js","../../../node_modules/ioredis/built/errors/index.js","../../../node_modules/redis-parser/lib/parser.js","../../../node_modules/redis-parser/index.js","../../../node_modules/ioredis/built/SubscriptionSet.js","../../../node_modules/ioredis/built/DataHandler.js","../../../node_modules/ioredis/built/redis/event_handler.js","../../../node_modules/ioredis/built/redis/RedisOptions.js","../../../node_modules/ioredis/built/Redis.js","../../../node_modules/ioredis/built/index.js","../src/adapters/framework/concurrent-processes.ts","../src/lib/timeline-manager.ts","../../../node_modules/zod-to-json-schema/dist/esm/Options.js","../../../node_modules/zod-to-json-schema/dist/esm/Refs.js","../../../node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../../../node_modules/zod-to-json-schema/dist/esm/getRelativePath.js","../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/typeAliases.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/index.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../../../node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../../../node_modules/zod-to-json-schema/dist/esm/selectParser.js","../../../node_modules/zod-to-json-schema/dist/esm/parseDef.js","../../../node_modules/zod-to-json-schema/dist/esm/parseTypes.js","../../../node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../../../node_modules/zod-to-json-schema/dist/esm/index.js","../src/adapters/build/introspector.ts","../src/adapters/build/generator.ts","../src/adapters/docs/openapi-generator.ts","../src/adapters/build/watcher.ts","../src/index.ts","../src/adapters/framework/framework-detector.ts","../src/adapters/framework/index.ts","../src/adapters/setup/init.setup.ts","../src/adapters/setup/prompts.ts","../src/adapters/setup/generator.ts","../src/adapters/setup/features.ts","../src/adapters/setup/templates.ts","../src/adapters/scaffold.ts","../src/adapters/scaffold/providers/prisma.ts","../src/lib/port-manager.ts"],"sourcesContent":["import chalk from 'chalk';\n\n// Browser detection - check for Node.js specific objects\nconst isBrowser = typeof process === 'undefined' || typeof process.versions === 'undefined' || typeof process.versions.node === 'undefined';\n\n// Dynamic import for yocto-spinner (only on server)\nlet yoctoSpinner: any = null;\nif (!isBrowser) {\n try {\n yoctoSpinner = require('yocto-spinner');\n } catch (error) {\n // Fallback if yocto-spinner is not available\n }\n}\n\nexport class SpinnerManager {\n private readonly colorize: boolean;\n private readonly disableSpinner: boolean;\n private readonly indentLevel: number;\n private activeSpinners: Map<string, any> = new Map();\n\n constructor(options: { colorize: boolean; disableSpinner: boolean; indentLevel: number }) {\n this.colorize = options.colorize;\n this.disableSpinner = options.disableSpinner;\n this.indentLevel = options.indentLevel;\n }\n\n /**\n * Create a spinner with Igniter.js styling\n * If disableSpinner is true or running in browser, uses static ANSI icons instead\n */\n createSpinner(text: string, id?: string): {\n start: () => any,\n success: (successText?: string) => void,\n error: (errorText?: string) => void,\n warn: (warnText?: string) => void,\n stop: (finalText?: string) => void,\n update: (newText: string) => void\n } {\n const spinnerId = id || Math.random().toString(36).substr(2, 9);\n\n // If spinners are disabled, in browser, or yocto-spinner not available, use static icons\n if (this.disableSpinner || isBrowser || !yoctoSpinner) {\n return this.createStaticSpinner(text, spinnerId);\n }\n\n return {\n start: () => {\n // Clear any existing spinner with the same ID\n const existingSpinner = this.activeSpinners.get(spinnerId);\n if (existingSpinner) {\n existingSpinner.stop();\n this.activeSpinners.delete(spinnerId);\n }\n\n const spinner = yoctoSpinner.default || yoctoSpinner;\n const spinnerInstance = spinner({\n text: this.colorize ? chalk.white(text) : text,\n color: 'cyan',\n spinner: {\n frames: ['◒', '◐', '◓', '◑'], // Igniter.js spinner frames\n interval: 120\n }\n });\n\n this.activeSpinners.set(spinnerId, spinnerInstance);\n return spinnerInstance.start();\n },\n\n success: (successText?: string) => {\n const spinner = this.activeSpinners.get(spinnerId);\n if (spinner) {\n const finalText = successText || text;\n spinner.success(this.colorize ? chalk.green(finalText) : finalText);\n this.activeSpinners.delete(spinnerId);\n // Ensure clean line after spinner completion\n process.stdout.write('');\n }\n },\n\n error: (errorText?: string) => {\n const spinner = this.activeSpinners.get(spinnerId);\n if (spinner) {\n const finalText = errorText || text;\n spinner.error(this.colorize ? chalk.red(finalText) : finalText);\n this.activeSpinners.delete(spinnerId);\n // Ensure clean line after spinner completion\n process.stdout.write('');\n }\n },\n\n warn: (warnText?: string) => {\n const spinner = this.activeSpinners.get(spinnerId);\n if (spinner) {\n const finalText = warnText || text;\n spinner.warning(this.colorize ? chalk.yellow(finalText) : finalText);\n this.activeSpinners.delete(spinnerId);\n // Ensure clean line after spinner completion\n process.stdout.write('');\n }\n },\n\n stop: (finalText?: string) => {\n const spinner = this.activeSpinners.get(spinnerId);\n if (spinner) {\n if (finalText) {\n spinner.stop(finalText);\n } else {\n spinner.stop();\n }\n this.activeSpinners.delete(spinnerId);\n // Ensure clean line after spinner stop\n process.stdout.write('');\n }\n },\n\n update: (newText: string) => {\n const spinner = this.activeSpinners.get(spinnerId);\n if (spinner) {\n spinner.text = this.colorize ? chalk.white(newText) : newText;\n }\n }\n };\n }\n\n /**\n * Create a static spinner (no animation, just ANSI icons)\n * Perfect for multi-process environments to avoid terminal pollution\n */\n private createStaticSpinner(text: string, spinnerId: string): {\n start: () => any,\n success: (successText?: string) => void,\n error: (errorText?: string) => void,\n warn: (warnText?: string) => void,\n stop: (finalText?: string) => void,\n update: (newText: string) => void\n } {\n let currentText = text;\n let isActive = false;\n\n const connector = this.indentLevel > 0 ? '│ ' : '';\n\n return {\n start: () => {\n isActive = true;\n const line = this.colorize\n ? `${connector}${chalk.cyan('◐')} ${chalk.white(currentText)}`\n : `${connector}◐ ${currentText}`;\n console.log(line);\n return { stop: () => { } }; // Mock spinner interface\n },\n\n success: (successText?: string) => {\n if (isActive) {\n const finalText = successText || currentText;\n const line = this.colorize\n ? `${connector}${chalk.green('◆')} ${chalk.green(finalText)}`\n : `${connector}◆ ${finalText}`;\n console.log(line);\n isActive = false;\n }\n },\n\n error: (errorText?: string) => {\n if (isActive) {\n const finalText = errorText || currentText;\n const line = this.colorize\n ? `${connector}${chalk.red('◇')} ${chalk.red(finalText)}`\n : `${connector}◇ ${finalText}`;\n console.log(line);\n isActive = false;\n }\n },\n\n warn: (warnText?: string) => {\n if (isActive) {\n const finalText = warnText || currentText;\n const line = this.colorize\n ? `${connector}${chalk.yellow('◇')} ${chalk.yellow(finalText)}`\n : `${connector}◇ ${finalText}`;\n console.log(line);\n isActive = false;\n }\n },\n\n stop: (finalText?: string) => {\n if (isActive) {\n if (finalText) {\n const line = this.colorize\n ? `${connector}${chalk.gray('○')} ${chalk.gray(finalText)}`\n : `${connector}○ ${finalText}`;\n console.log(line);\n }\n isActive = false;\n }\n },\n\n update: (newText: string) => {\n currentText = newText;\n if (isActive) {\n const line = this.colorize\n ? `${connector}${chalk.cyan('◐')} ${chalk.white(newText)}`\n : `${connector}◐ ${newText}`;\n console.log(line);\n }\n }\n };\n }\n\n clearSpinners(): void {\n for (const [id, spinner] of this.activeSpinners) {\n spinner.stop();\n }\n this.activeSpinners.clear();\n }\n\n pauseSpinners(): void {\n for (const [id, spinner] of this.activeSpinners) {\n if (spinner && typeof spinner.stop === 'function') {\n spinner.stop();\n }\n }\n // Clear the line to ensure clean output\n process.stdout.write('\\r\\x1b[K');\n }\n\n resumeSpinners(): void {\n // Note: Due to yocto-spinner's design, we can't truly \"resume\" a stopped spinner\n // This method is kept for API compatibility but won't restart spinners\n // Users should handle spinner lifecycle manually for better control\n }\n}\n\n/**\n * Create a detached spinner (not tied to logger instance)\n * Browser-safe implementation\n */\nexport function createDetachedSpinner(text: string, options?: { color?: string }): {\n start: () => any,\n success: (successText?: string) => void,\n error: (errorText?: string) => void,\n warn: (warnText?: string) => void,\n stop: (finalText?: string) => void,\n update: (newText: string) => void\n} {\n let spinner: any = null;\n\n // Browser-safe fallback\n if (isBrowser || !yoctoSpinner) {\n return {\n start: () => {\n console.log(chalk.cyan('◐') + ' ' + chalk.white(text));\n return {};\n },\n success: (successText?: string) => {\n console.log(chalk.green('◆') + ' ' + chalk.green(successText || text));\n },\n error: (errorText?: string) => {\n console.log(chalk.red('◇') + ' ' + chalk.red(errorText || text));\n },\n warn: (warnText?: string) => {\n console.log(chalk.yellow('◇') + ' ' + chalk.yellow(warnText || text));\n },\n stop: (finalText?: string) => {\n if (finalText) {\n console.log(chalk.gray('○') + ' ' + chalk.gray(finalText));\n }\n },\n update: (newText: string) => {\n console.log(chalk.cyan('◐') + ' ' + chalk.white(newText));\n }\n };\n }\n\n return {\n start: () => {\n // Clear any existing spinner first\n if (spinner) {\n spinner.stop();\n spinner = null;\n }\n\n const spinnerFn = yoctoSpinner.default || yoctoSpinner;\n spinner = spinnerFn({\n text: chalk.white(text),\n color: options?.color || 'cyan',\n spinner: {\n frames: ['◒', '◐', '◓', '◑'], // Igniter.js spinner frames\n interval: 120\n },\n });\n return spinner.start();\n },\n\n success: (successText?: string) => {\n if (spinner) {\n const finalText = successText || text;\n spinner.success(chalk.green(finalText));\n process.stdout.write(''); // Ensure clean line after completion\n spinner = null;\n }\n },\n\n error: (errorText?: string) => {\n if (spinner) {\n const finalText = errorText || text;\n spinner.error(chalk.red(finalText));\n process.stdout.write(''); // Ensure clean line after completion\n spinner = null;\n }\n },\n\n warn: (warnText?: string) => {\n if (spinner) {\n const finalText = warnText || text;\n spinner.warning(chalk.yellow(finalText));\n process.stdout.write(''); // Ensure clean line after completion\n spinner = null;\n }\n },\n\n stop: (finalText?: string) => {\n if (spinner) {\n if (finalText) {\n spinner.stop(finalText);\n } else {\n spinner.stop();\n }\n process.stdout.write('\\r\\x1b[K'); // Clear the line and ensure clean output\n spinner = null;\n }\n },\n\n update: (newText: string) => {\n if (spinner) {\n spinner.text = chalk.white(newText);\n }\n }\n };\n}","import { IgniterLogLevel, createConsoleLogger } from '@igniter-js/core';\n\n/**\n * Get the log level from environment variables\n * Supports DEBUG=true for debug level and LOG_LEVEL for explicit level\n */\nfunction getLogLevel(): IgniterLogLevel {\n if (process.env.DEBUG === 'true') {\n return IgniterLogLevel.DEBUG;\n }\n\n const envLevel = process.env.LOG_LEVEL?.toUpperCase();\n if (envLevel && envLevel in IgniterLogLevel) {\n return IgniterLogLevel[envLevel as keyof typeof IgniterLogLevel];\n }\n\n return IgniterLogLevel.INFO;\n}\n\n/**\n * Detect if we're running in concurrent mode (as a child process)\n * This helps us avoid spinner conflicts in concurrently\n */\nfunction isConcurrentMode(): boolean {\n return !!(\n process.env.FORCE_COLOR || // concurrently sets this\n process.env.npm_config_color ||\n process.argv.includes('--concurrent') ||\n process.title.includes('concurrently')\n );\n}\n\n/**\n * Detect if we're running in interactive mode\n * This helps us avoid spinner conflicts in interactive process switching\n */\nfunction isInteractiveMode(): boolean {\n return !!(\n process.argv.includes('--interactive') ||\n process.env.IGNITER_INTERACTIVE_MODE === 'true'\n );\n}\n\n/**\n * Centralized logger instance for the CLI\n * Uses the ConsoleLogger adapter with CLI-specific configuration\n * Automatically disables spinners in concurrent/interactive mode\n */\nimport { SpinnerManager } from '../lib/spinner';\n\nexport const logger = createConsoleLogger({\n level: getLogLevel(),\n colorize: true,\n context: {\n concurrent: isConcurrentMode(),\n interactive: isInteractiveMode()\n }\n});\n\n// Initialize SpinnerManager with CLI-specific options\nconst cliSpinnerManager = new SpinnerManager({\n colorize: true,\n disableSpinner: isConcurrentMode() || isInteractiveMode(),\n indentLevel: 0 // CLI usually starts at indent level 0\n});\n\n// Override the logger's spinner method to use the CLI's SpinnerManager\n// This is a temporary measure until the core logger is refactored to remove spinner logic\n(logger as any).spinner = (text: string, id?: string) => cliSpinnerManager.createSpinner(text, id);\n\n/**\n * Creates a child logger with additional context\n * @param context Additional context to add to log entries\n * @param options Optional logger configuration overrides\n */\nexport function createChildLogger(\n context: Record<string, unknown>,\n options: { level?: IgniterLogLevel; colorize?: boolean } = {}\n) {\n const childLogger = logger.child(context);\n\n // Ensure the child logger also has access to the spinner factory\n (childLogger as any).spinner = (text: string, id?: string) => cliSpinnerManager.createSpinner(text, id);\n\n if (options.level) {\n childLogger?.setLevel?.(options.level);\n }\n\n return childLogger;\n}\n\n/**\n * Reconfigures the CLI logger based on command-line options\n * @param options CLI options, e.g., { debug: true }\n */\nexport function setupCliLogger(options: { debug?: boolean }) {\n if (options.debug) {\n logger.setLevel(IgniterLogLevel.DEBUG);\n logger.debug('Debug mode enabled.');\n }\n}\n\n\n\n/**\n * Helper to format error objects for logging\n * Extracts useful information from various error types\n */\nexport function formatError(error: unknown): Record<string, unknown> {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n ...(error as any).code ? { code: (error as any).code } : {},\n ...(error as any).syscall ? { syscall: (error as any).syscall } : {},\n };\n }\n\n if (typeof error === 'string') {\n return { message: error };\n }\n\n return { error };\n}\n","{\n \"acl\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"append\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"asking\": {\n \"arity\": 1,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"auth\": {\n \"arity\": -2,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bgrewriteaof\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bgsave\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bitcount\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitfield\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitfield_ro\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 2,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"bitpos\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"blmove\": {\n \"arity\": 6,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"blmpop\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"blpop\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"brpop\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"brpoplpush\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"bzmpop\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bzpopmax\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"bzpopmin\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"client\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"cluster\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"command\": {\n \"arity\": -1,\n \"flags\": [\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"config\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"copy\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"dbsize\": {\n \"arity\": 1,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"debug\": {\n \"arity\": -2,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"decr\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"decrby\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"del\": {\n \"arity\": -2,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"discard\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"dump\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"echo\": {\n \"arity\": 2,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"eval\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"eval_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"evalsha\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"evalsha_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"exec\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"skip_slowlog\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"exists\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"expire\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"expireat\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"expiretime\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"failover\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"fcall\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"fcall_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"flushall\": {\n \"arity\": -1,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"flushdb\": {\n \"arity\": -1,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"function\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"geoadd\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geodist\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geohash\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geopos\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadius\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadius_ro\": {\n \"arity\": -6,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadiusbymember\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadiusbymember_ro\": {\n \"arity\": -5,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geosearch\": {\n \"arity\": -7,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geosearchstore\": {\n \"arity\": -8,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"get\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getbit\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getdel\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getex\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getrange\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getset\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hdel\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hello\": {\n \"arity\": -1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"hexists\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hget\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hgetall\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hincrby\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hincrbyfloat\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hkeys\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hmget\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hmset\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hrandfield\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hset\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hsetnx\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hstrlen\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hvals\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incr\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incrby\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incrbyfloat\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"info\": {\n \"arity\": -1,\n \"flags\": [\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"keys\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lastsave\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"latency\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lcs\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"lindex\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"linsert\": {\n \"arity\": 5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"llen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lmove\": {\n \"arity\": 5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"lmpop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lolwut\": {\n \"arity\": -1,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lpop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpos\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpush\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpushx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lrange\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lrem\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lset\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"ltrim\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"memory\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"mget\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"migrate\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 3,\n \"keyStop\": 3,\n \"step\": 1\n },\n \"module\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"monitor\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"move\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"mset\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 2\n },\n \"msetnx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 2\n },\n \"multi\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"object\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"persist\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpire\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpireat\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpiretime\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pfadd\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pfcount\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"pfdebug\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"admin\"\n ],\n \"keyStart\": 2,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"pfmerge\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"pfselftest\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"ping\": {\n \"arity\": -1,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"psetex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"psubscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"psync\": {\n \"arity\": -3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"pttl\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"publish\": {\n \"arity\": 3,\n \"flags\": [\n \"pubsub\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"pubsub\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"punsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"quit\": {\n \"arity\": -1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"randomkey\": {\n \"arity\": 1,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"readonly\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"readwrite\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"rename\": {\n \"arity\": 3,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"renamenx\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"replconf\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"replicaof\": {\n \"arity\": 3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"reset\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"restore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"restore-asking\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"asking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"role\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"rpop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"rpoplpush\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"rpush\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"rpushx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sadd\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"save\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"scan\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"scard\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"script\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sdiff\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sdiffstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"select\": {\n \"arity\": 2,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"set\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setbit\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setnx\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setrange\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"shutdown\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\",\n \"no_multi\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sinter\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sintercard\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sinterstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sismember\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"slaveof\": {\n \"arity\": 3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"slowlog\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"smembers\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"smismember\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"smove\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"sort\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sort_ro\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"spop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"spublish\": {\n \"arity\": 3,\n \"flags\": [\n \"pubsub\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"srandmember\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"srem\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"ssubscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"strlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"subscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"substr\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sunion\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sunionstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sunsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"swapdb\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sync\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"time\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"touch\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"ttl\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"type\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"unlink\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"unsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"unwatch\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"wait\": {\n \"arity\": 3,\n \"flags\": [\n \"noscript\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"watch\": {\n \"arity\": -2,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"xack\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xadd\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xautoclaim\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xclaim\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xdel\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xgroup\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xinfo\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xpending\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xread\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xreadgroup\": {\n \"arity\": -7,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xrevrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xsetid\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xtrim\": {\n \"arity\": -4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zadd\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zcard\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zcount\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zdiff\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zdiffstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zincrby\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zinter\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zintercard\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zinterstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zlexcount\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zmpop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zmscore\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zpopmax\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zpopmin\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrandmember\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangebylex\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangebyscore\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangestore\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"zrank\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrem\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebylex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebyrank\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebyscore\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrangebylex\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrangebyscore\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrank\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zscore\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zunion\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zunionstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getKeyIndexes = exports.hasFlag = exports.exists = exports.list = void 0;\nconst commands_json_1 = __importDefault(require(\"./commands.json\"));\n/**\n * Redis command list\n *\n * All commands are lowercased.\n */\nexports.list = Object.keys(commands_json_1.default);\nconst flags = {};\nexports.list.forEach((commandName) => {\n flags[commandName] = commands_json_1.default[commandName].flags.reduce(function (flags, flag) {\n flags[flag] = true;\n return flags;\n }, {});\n});\n/**\n * Check if the command exists\n */\nfunction exists(commandName) {\n return Boolean(commands_json_1.default[commandName]);\n}\nexports.exists = exists;\n/**\n * Check if the command has the flag\n *\n * Some of possible flags: readonly, noscript, loading\n */\nfunction hasFlag(commandName, flag) {\n if (!flags[commandName]) {\n throw new Error(\"Unknown command \" + commandName);\n }\n return Boolean(flags[commandName][flag]);\n}\nexports.hasFlag = hasFlag;\n/**\n * Get indexes of keys in the command arguments\n *\n * @example\n * ```javascript\n * getKeyIndexes('set', ['key', 'value']) // [0]\n * getKeyIndexes('mget', ['key1', 'key2']) // [0, 1]\n * ```\n */\nfunction getKeyIndexes(commandName, args, options) {\n const command = commands_json_1.default[commandName];\n if (!command) {\n throw new Error(\"Unknown command \" + commandName);\n }\n if (!Array.isArray(args)) {\n throw new Error(\"Expect args to be an array\");\n }\n const keys = [];\n const parseExternalKey = Boolean(options && options.parseExternalKey);\n const takeDynamicKeys = (args, startIndex) => {\n const keys = [];\n const keyStop = Number(args[startIndex]);\n for (let i = 0; i < keyStop; i++) {\n keys.push(i + startIndex + 1);\n }\n return keys;\n };\n const takeKeyAfterToken = (args, startIndex, token) => {\n for (let i = startIndex; i < args.length - 1; i += 1) {\n if (String(args[i]).toLowerCase() === token.toLowerCase()) {\n return i + 1;\n }\n }\n return null;\n };\n switch (commandName) {\n case \"zunionstore\":\n case \"zinterstore\":\n case \"zdiffstore\":\n keys.push(0, ...takeDynamicKeys(args, 1));\n break;\n case \"eval\":\n case \"evalsha\":\n case \"eval_ro\":\n case \"evalsha_ro\":\n case \"fcall\":\n case \"fcall_ro\":\n case \"blmpop\":\n case \"bzmpop\":\n keys.push(...takeDynamicKeys(args, 1));\n break;\n case \"sintercard\":\n case \"lmpop\":\n case \"zunion\":\n case \"zinter\":\n case \"zmpop\":\n case \"zintercard\":\n case \"zdiff\": {\n keys.push(...takeDynamicKeys(args, 0));\n break;\n }\n case \"georadius\": {\n keys.push(0);\n const storeKey = takeKeyAfterToken(args, 5, \"STORE\");\n if (storeKey)\n keys.push(storeKey);\n const distKey = takeKeyAfterToken(args, 5, \"STOREDIST\");\n if (distKey)\n keys.push(distKey);\n break;\n }\n case \"georadiusbymember\": {\n keys.push(0);\n const storeKey = takeKeyAfterToken(args, 4, \"STORE\");\n if (storeKey)\n keys.push(storeKey);\n const distKey = takeKeyAfterToken(args, 4, \"STOREDIST\");\n if (distKey)\n keys.push(distKey);\n break;\n }\n case \"sort\":\n case \"sort_ro\":\n keys.push(0);\n for (let i = 1; i < args.length - 1; i++) {\n let arg = args[i];\n if (typeof arg !== \"string\") {\n continue;\n }\n const directive = arg.toUpperCase();\n if (directive === \"GET\") {\n i += 1;\n arg = args[i];\n if (arg !== \"#\") {\n if (parseExternalKey) {\n keys.push([i, getExternalKeyNameLength(arg)]);\n }\n else {\n keys.push(i);\n }\n }\n }\n else if (directive === \"BY\") {\n i += 1;\n if (parseExternalKey) {\n keys.push([i, getExternalKeyNameLength(args[i])]);\n }\n else {\n keys.push(i);\n }\n }\n else if (directive === \"STORE\") {\n i += 1;\n keys.push(i);\n }\n }\n break;\n case \"migrate\":\n if (args[2] === \"\") {\n for (let i = 5; i < args.length - 1; i++) {\n const arg = args[i];\n if (typeof arg === \"string\" && arg.toUpperCase() === \"KEYS\") {\n for (let j = i + 1; j < args.length; j++) {\n keys.push(j);\n }\n break;\n }\n }\n }\n else {\n keys.push(2);\n }\n break;\n case \"xreadgroup\":\n case \"xread\":\n // Keys are 1st half of the args after STREAMS argument.\n for (let i = commandName === \"xread\" ? 0 : 3; i < args.length - 1; i++) {\n if (String(args[i]).toUpperCase() === \"STREAMS\") {\n for (let j = i + 1; j <= i + (args.length - 1 - i) / 2; j++) {\n keys.push(j);\n }\n break;\n }\n }\n break;\n default:\n // Step has to be at least one in this case, otherwise the command does\n // not contain a key.\n if (command.step > 0) {\n const keyStart = command.keyStart - 1;\n const keyStop = command.keyStop > 0\n ? command.keyStop\n : args.length + command.keyStop + 1;\n for (let i = keyStart; i < keyStop; i += command.step) {\n keys.push(i);\n }\n }\n break;\n }\n return keys;\n}\nexports.getKeyIndexes = getKeyIndexes;\nfunction getExternalKeyNameLength(key) {\n if (typeof key !== \"string\") {\n key = String(key);\n }\n const hashPos = key.indexOf(\"->\");\n return hashPos === -1 ? key.length : hashPos;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryCatch = exports.errorObj = void 0;\n//Try catch is not supported in optimizing\n//compiler, so it is isolated\nexports.errorObj = { e: {} };\nlet tryCatchTarget;\nfunction tryCatcher(err, val) {\n try {\n const target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n }\n catch (e) {\n exports.errorObj.e = e;\n return exports.errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\nexports.tryCatch = tryCatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"./utils\");\nfunction throwLater(e) {\n setTimeout(function () {\n throw e;\n }, 0);\n}\nfunction asCallback(promise, nodeback, options) {\n if (typeof nodeback === \"function\") {\n promise.then((val) => {\n let ret;\n if (options !== undefined &&\n Object(options).spread &&\n Array.isArray(val)) {\n ret = utils_1.tryCatch(nodeback).apply(undefined, [null].concat(val));\n }\n else {\n ret =\n val === undefined\n ? utils_1.tryCatch(nodeback)(null)\n : utils_1.tryCatch(nodeback)(null, val);\n }\n if (ret === utils_1.errorObj) {\n throwLater(ret.e);\n }\n }, (cause) => {\n if (!cause) {\n const newReason = new Error(cause + \"\");\n Object.assign(newReason, { cause });\n cause = newReason;\n }\n const ret = utils_1.tryCatch(nodeback)(cause);\n if (ret === utils_1.errorObj) {\n throwLater(ret.e);\n }\n });\n }\n return promise;\n}\nexports.default = asCallback;\n","'use strict'\n\nconst assert = require('assert')\nconst util = require('util')\n\n// RedisError\n\nfunction RedisError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(RedisError, Error)\n\nObject.defineProperty(RedisError.prototype, 'name', {\n value: 'RedisError',\n configurable: true,\n writable: true\n})\n\n// ParserError\n\nfunction ParserError (message, buffer, offset) {\n assert(buffer)\n assert.strictEqual(typeof offset, 'number')\n\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n Error.captureStackTrace(this, this.constructor)\n Error.stackTraceLimit = tmp\n this.offset = offset\n this.buffer = buffer\n}\n\nutil.inherits(ParserError, RedisError)\n\nObject.defineProperty(ParserError.prototype, 'name', {\n value: 'ParserError',\n configurable: true,\n writable: true\n})\n\n// ReplyError\n\nfunction ReplyError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n Error.captureStackTrace(this, this.constructor)\n Error.stackTraceLimit = tmp\n}\n\nutil.inherits(ReplyError, RedisError)\n\nObject.defineProperty(ReplyError.prototype, 'name', {\n value: 'ReplyError',\n configurable: true,\n writable: true\n})\n\n// AbortError\n\nfunction AbortError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(AbortError, RedisError)\n\nObject.defineProperty(AbortError.prototype, 'name', {\n value: 'AbortError',\n configurable: true,\n writable: true\n})\n\n// InterruptError\n\nfunction InterruptError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(InterruptError, AbortError)\n\nObject.defineProperty(InterruptError.prototype, 'name', {\n value: 'InterruptError',\n configurable: true,\n writable: true\n})\n\nmodule.exports = {\n RedisError,\n ParserError,\n ReplyError,\n AbortError,\n InterruptError\n}\n","'use strict'\n\nconst assert = require('assert')\n\nclass RedisError extends Error {\n get name () {\n return this.constructor.name\n }\n}\n\nclass ParserError extends RedisError {\n constructor (message, buffer, offset) {\n assert(buffer)\n assert.strictEqual(typeof offset, 'number')\n\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n super(message)\n Error.stackTraceLimit = tmp\n this.offset = offset\n this.buffer = buffer\n }\n\n get name () {\n return this.constructor.name\n }\n}\n\nclass ReplyError extends RedisError {\n constructor (message) {\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n super(message)\n Error.stackTraceLimit = tmp\n }\n get name () {\n return this.constructor.name\n }\n}\n\nclass AbortError extends RedisError {\n get name () {\n return this.constructor.name\n }\n}\n\nclass InterruptError extends AbortError {\n get name () {\n return this.constructor.name\n }\n}\n\nmodule.exports = {\n RedisError,\n ParserError,\n ReplyError,\n AbortError,\n InterruptError\n}\n","'use strict'\n\nconst Errors = process.version.charCodeAt(1) < 55 && process.version.charCodeAt(2) === 46\n ? require('./lib/old') // Node.js < 7\n : require('./lib/modern')\n\nmodule.exports = Errors\n","/*\n * Copyright 2001-2010 Georges Menie (www.menie.org)\n * Copyright 2010 Salvatore Sanfilippo (adapted to Redis coding style)\n * Copyright 2015 Zihua Li (http://zihua.li) (ported to JavaScript)\n * Copyright 2016 Mike Diarmid (http://github.com/salakar) (re-write for performance, ~700% perf inc)\n * All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of the University of California, Berkeley nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* CRC16 implementation according to CCITT standards.\n *\n * Note by @antirez: this is actually the XMODEM CRC 16 algorithm, using the\n * following parameters:\n *\n * Name : \"XMODEM\", also known as \"ZMODEM\", \"CRC-16/ACORN\"\n * Width : 16 bit\n * Poly : 1021 (That is actually x^16 + x^12 + x^5 + 1)\n * Initialization : 0000\n * Reflect Input byte : False\n * Reflect Output CRC : False\n * Xor constant to output CRC : 0000\n * Output for \"123456789\" : 31C3\n */\n\nvar lookup = [\n 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n\n/**\n * Convert a string to a UTF8 array - faster than via buffer\n * @param str\n * @returns {Array}\n */\nvar toUTF8Array = function toUTF8Array(str) {\n var char;\n var i = 0;\n var p = 0;\n var utf8 = [];\n var len = str.length;\n\n for (; i < len; i++) {\n char = str.charCodeAt(i);\n if (char < 128) {\n utf8[p++] = char;\n } else if (char < 2048) {\n utf8[p++] = (char >> 6) | 192;\n utf8[p++] = (char & 63) | 128;\n } else if (\n ((char & 0xFC00) === 0xD800) && (i + 1) < str.length &&\n ((str.charCodeAt(i + 1) & 0xFC00) === 0xDC00)) {\n char = 0x10000 + ((char & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);\n utf8[p++] = (char >> 18) | 240;\n utf8[p++] = ((char >> 12) & 63) | 128;\n utf8[p++] = ((char >> 6) & 63) | 128;\n utf8[p++] = (char & 63) | 128;\n } else {\n utf8[p++] = (char >> 12) | 224;\n utf8[p++] = ((char >> 6) & 63) | 128;\n utf8[p++] = (char & 63) | 128;\n }\n }\n\n return utf8;\n};\n\n/**\n * Convert a string into a redis slot hash.\n * @param str\n * @returns {number}\n */\nvar generate = module.exports = function generate(str) {\n var char;\n var i = 0;\n var start = -1;\n var result = 0;\n var resultHash = 0;\n var utf8 = typeof str === 'string' ? toUTF8Array(str) : str;\n var len = utf8.length;\n\n while (i < len) {\n char = utf8[i++];\n if (start === -1) {\n if (char === 0x7B) {\n start = i;\n }\n } else if (char !== 0x7D) {\n resultHash = lookup[(char ^ (resultHash >> 8)) & 0xFF] ^ (resultHash << 8);\n } else if (i - 1 !== start) {\n return resultHash & 0x3FFF;\n }\n\n result = lookup[(char ^ (result >> 8)) & 0xFF] ^ (result << 8);\n }\n\n return result & 0x3FFF;\n};\n\n/**\n * Convert an array of multiple strings into a redis slot hash.\n * Returns -1 if one of the keys is not for the same slot as the others\n * @param keys\n * @returns {number}\n */\nmodule.exports.generateMulti = function generateMulti(keys) {\n var i = 1;\n var len = keys.length;\n var base = generate(keys[0]);\n\n while (i < len) {\n if (generate(keys[i++]) !== base) return -1;\n }\n\n return base;\n};\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Used by `_.defaults` to customize its `_.assignIn` use.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\nfunction assignInDefaults(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n});\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(args) {\n args.push(undefined, assignInDefaults);\n return apply(assignInWith, undefined, args);\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = defaults;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isArguments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isArguments = exports.defaults = exports.noop = void 0;\nconst defaults = require(\"lodash.defaults\");\nexports.defaults = defaults;\nconst isArguments = require(\"lodash.isarguments\");\nexports.isArguments = isArguments;\nfunction noop() { }\nexports.noop = noop;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.genRedactedString = exports.getStringValue = exports.MAX_ARGUMENT_LENGTH = void 0;\nconst debug_1 = require(\"debug\");\nconst MAX_ARGUMENT_LENGTH = 200;\nexports.MAX_ARGUMENT_LENGTH = MAX_ARGUMENT_LENGTH;\nconst NAMESPACE_PREFIX = \"ioredis\";\n/**\n * helper function that tried to get a string value for\n * arbitrary \"debug\" arg\n */\nfunction getStringValue(v) {\n if (v === null) {\n return;\n }\n switch (typeof v) {\n case \"boolean\":\n return;\n case \"number\":\n return;\n case \"object\":\n if (Buffer.isBuffer(v)) {\n return v.toString(\"hex\");\n }\n if (Array.isArray(v)) {\n return v.join(\",\");\n }\n try {\n return JSON.stringify(v);\n }\n catch (e) {\n return;\n }\n case \"string\":\n return v;\n }\n}\nexports.getStringValue = getStringValue;\n/**\n * helper function that redacts a string representation of a \"debug\" arg\n */\nfunction genRedactedString(str, maxLen) {\n const { length } = str;\n return length <= maxLen\n ? str\n : str.slice(0, maxLen) + ' ... <REDACTED full-length=\"' + length + '\">';\n}\nexports.genRedactedString = genRedactedString;\n/**\n * a wrapper for the `debug` module, used to generate\n * \"debug functions\" that trim the values in their output\n */\nfunction genDebugFunction(namespace) {\n const fn = (0, debug_1.default)(`${NAMESPACE_PREFIX}:${namespace}`);\n function wrappedDebug(...args) {\n if (!fn.enabled) {\n return; // no-op\n }\n // we skip the first arg because that is the message\n for (let i = 1; i < args.length; i++) {\n const str = getStringValue(args[i]);\n if (typeof str === \"string\" && str.length > MAX_ARGUMENT_LENGTH) {\n args[i] = genRedactedString(str, MAX_ARGUMENT_LENGTH);\n }\n }\n return fn.apply(null, args);\n }\n Object.defineProperties(wrappedDebug, {\n namespace: {\n get() {\n return fn.namespace;\n },\n },\n enabled: {\n get() {\n return fn.enabled;\n },\n },\n destroy: {\n get() {\n return fn.destroy;\n },\n },\n log: {\n get() {\n return fn.log;\n },\n set(l) {\n fn.log = l;\n },\n },\n });\n return wrappedDebug;\n}\nexports.default = genDebugFunction;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * TLS settings for Redis Cloud. Updated on 2022-08-19.\n */\nconst RedisCloudCA = `-----BEGIN CERTIFICATE-----\nMIIDTzCCAjegAwIBAgIJAKSVpiDswLcwMA0GCSqGSIb3DQEBBQUAMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTAeFw0xMzEwMDExMjE0NTVaFw0yMzA5MjkxMjE0NTVaMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZqkh/DczWP\nJnxnHLQ7QL0T4B4CDKWBKCcisriGbA6ZePWVNo4hfKQC6JrzfR+081NeD6VcWUiz\nrmd+jtPhIY4c+WVQYm5PKaN6DT1imYdxQw7aqO5j2KUCEh/cznpLxeSHoTxlR34E\nQwF28Wl3eg2vc5ct8LjU3eozWVk3gb7alx9mSA2SgmuX5lEQawl++rSjsBStemY2\nBDwOpAMXIrdEyP/cVn8mkvi/BDs5M5G+09j0gfhyCzRWMQ7Hn71u1eolRxwVxgi3\nTMn+/vTaFSqxKjgck6zuAYjBRPaHe7qLxHNr1So/Mc9nPy+3wHebFwbIcnUojwbp\n4nctkWbjb2cCAwEAAaNQME4wHQYDVR0OBBYEFP1whtcrydmW3ZJeuSoKZIKjze3w\nMB8GA1UdIwQYMBaAFP1whtcrydmW3ZJeuSoKZIKjze3wMAwGA1UdEwQFMAMBAf8w\nDQYJKoZIhvcNAQEFBQADggEBAG2erXhwRAa7+ZOBs0B6X57Hwyd1R4kfmXcs0rta\nlbPpvgULSiB+TCbf3EbhJnHGyvdCY1tvlffLjdA7HJ0PCOn+YYLBA0pTU/dyvrN6\nSu8NuS5yubnt9mb13nDGYo1rnt0YRfxN+8DM3fXIVr038A30UlPX2Ou1ExFJT0MZ\nuFKY6ZvLdI6/1cbgmguMlAhM+DhKyV6Sr5699LM3zqeI816pZmlREETYkGr91q7k\nBpXJu/dtHaGxg1ZGu6w/PCsYGUcECWENYD4VQPd8N32JjOfu6vEgoEAwfPP+3oGp\nZ4m3ewACcWOAenqflb+cQYC4PsF7qbXDmRaWrbKntOlZ3n0=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIGMTCCBBmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwajELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJzMS0w\nKwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN\nMTgwMjI1MTUzNzM3WhcNMjgwMjIzMTUzNzM3WjBfMQswCQYDVQQGEwJVUzELMAkG\nA1UECAwCQ0ExEjAQBgNVBAoMCVJlZGlzTGFiczEvMC0GA1UEAwwmUkNQIEludGVy\nbWVkaWF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA\nA4ICDwAwggIKAoICAQDf9dqbxc8Bq7Ctq9rWcxrGNKKHivqLAFpPq02yLPx6fsOv\nTq7GsDChAYBBc4v7Y2Ap9RD5Vs3dIhEANcnolf27QwrG9RMnnvzk8pCvp1o6zSU4\nVuOE1W66/O1/7e2rVxyrnTcP7UgK43zNIXu7+tiAqWsO92uSnuMoGPGpeaUm1jym\nhjWKtkAwDFSqvHY+XL5qDVBEjeUe+WHkYUg40cAXjusAqgm2hZt29c2wnVrxW25W\nP0meNlzHGFdA2AC5z54iRiqj57dTfBTkHoBczQxcyw6hhzxZQ4e5I5zOKjXXEhZN\nr0tA3YC14CTabKRus/JmZieyZzRgEy2oti64tmLYTqSlAD78pRL40VNoaSYetXLw\nhhNsXCHgWaY6d5bLOc/aIQMAV5oLvZQKvuXAF1IDmhPA+bZbpWipp0zagf1P1H3s\nUzsMdn2KM0ejzgotbtNlj5TcrVwpmvE3ktvUAuA+hi3FkVx1US+2Gsp5x4YOzJ7u\nP1WPk6ShF0JgnJH2ILdj6kttTWwFzH17keSFICWDfH/+kM+k7Y1v3EXMQXE7y0T9\nMjvJskz6d/nv+sQhY04xt64xFMGTnZjlJMzfQNi7zWFLTZnDD0lPowq7l3YiPoTT\nt5Xky83lu0KZsZBo0WlWaDG00gLVdtRgVbcuSWxpi5BdLb1kRab66JptWjxwXQID\nAQABo4HrMIHoMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHBzOi8vcmwtY2Etc2VydmVy\nLnJlZGlzbGFicy5jb20vdjEvY3JsMEYGCCsGAQUFBwEBBDowODA2BggrBgEFBQcw\nAYYqaHR0cHM6Ly9ybC1jYS1zZXJ2ZXIucmVkaXNsYWJzLmNvbS92MS9vY3NwMB0G\nA1UdDgQWBBQHar5OKvQUpP2qWt6mckzToeCOHDAfBgNVHSMEGDAWgBQi42wH6hM4\nL2sujEvLM0/u8lRXTzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nhjANBgkqhkiG9w0BAQsFAAOCAgEAirEn/iTsAKyhd+pu2W3Z5NjCko4NPU0EYUbr\nAP7+POK2rzjIrJO3nFYQ/LLuC7KCXG+2qwan2SAOGmqWst13Y+WHp44Kae0kaChW\nvcYLXXSoGQGC8QuFSNUdaeg3RbMDYFT04dOkqufeWVccoHVxyTSg9eD8LZuHn5jw\n7QDLiEECBmIJHk5Eeo2TAZrx4Yx6ufSUX5HeVjlAzqwtAqdt99uCJ/EL8bgpWbe+\nXoSpvUv0SEC1I1dCAhCKAvRlIOA6VBcmzg5Am12KzkqTul12/VEFIgzqu0Zy2Jbc\nAUPrYVu/+tOGXQaijy7YgwH8P8n3s7ZeUa1VABJHcxrxYduDDJBLZi+MjheUDaZ1\njQRHYevI2tlqeSBqdPKG4zBY5lS0GiAlmuze5oENt0P3XboHoZPHiqcK3VECgTVh\n/BkJcuudETSJcZDmQ8YfoKfBzRQNg2sv/hwvUv73Ss51Sco8GEt2lD8uEdib1Q6z\nzDT5lXJowSzOD5ZA9OGDjnSRL+2riNtKWKEqvtEG3VBJoBzu9GoxbAc7wIZLxmli\niF5a/Zf5X+UXD3s4TMmy6C4QZJpAA2egsSQCnraWO2ULhh7iXMysSkF/nzVfZn43\niqpaB8++9a37hWq14ZmOv0TJIDz//b2+KC4VFXWQ5W5QC6whsjT+OlG4p5ZYG0jo\n616pxqo=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIEjzCCA3egAwIBAgIQe55B/ALCKJDZtdNT8kD6hTANBgkqhkiG9w0BAQsFADBM\nMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xv\nYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMjAxMjYxMjAwMDBaFw0y\nNTAxMjYwMDAwMDBaMFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu\nIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIE9WIFRMUyBDQSAy\nMDIyIFEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmGmg1LW9b7Lf\n8zDD83yBDTEkt+FOxKJZqF4veWc5KZsQj9HfnUS2e5nj/E+JImlGPsQuoiosLuXD\nBVBNAMcUFa11buFMGMeEMwiTmCXoXRrXQmH0qjpOfKgYc5gHG3BsRGaRrf7VR4eg\nofNMG9wUBw4/g/TT7+bQJdA4NfE7Y4d5gEryZiBGB/swaX6Jp/8MF4TgUmOWmalK\ndZCKyb4sPGQFRTtElk67F7vU+wdGcrcOx1tDcIB0ncjLPMnaFicagl+daWGsKqTh\ncounQb6QJtYHa91KvCfKWocMxQ7OIbB5UARLPmC4CJ1/f8YFm35ebfzAeULYdGXu\njE9CLor0OwIDAQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG\nCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\nBBSH5Zq7a7B/t95GfJWkDBpA8HHqdjAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpj\nmove4t0bvDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw\nMi5nbG9iYWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1\ncmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0w\nK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yMy5jcmwwIQYD\nVR0gBBowGDAIBgZngQwBAgIwDAYKKwYBBAGgMgoBAjANBgkqhkiG9w0BAQsFAAOC\nAQEAKRic9/f+nmhQU/wz04APZLjgG5OgsuUOyUEZjKVhNGDwxGTvKhyXGGAMW2B/\n3bRi+aElpXwoxu3pL6fkElbX3B0BeS5LoDtxkyiVEBMZ8m+sXbocwlPyxrPbX6mY\n0rVIvnuUeBH8X0L5IwfpNVvKnBIilTbcebfHyXkPezGwz7E1yhUULjJFm2bt0SdX\ny+4X/WeiiYIv+fTVgZZgl+/2MKIsu/qdBJc3f3TvJ8nz+Eax1zgZmww+RSQWeOj3\n15Iw6Z5FX+NwzY/Ab+9PosR5UosSeq+9HhtaxZttXG1nVh+avYPGYddWmiMT90J5\nZgKnO/Fx2hBgTxhOTMYaD312kg==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G\nA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp\nZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4\nMTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG\nA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8\nRgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT\ngHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm\nKPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd\nQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ\nXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw\nDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o\nLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU\nRUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp\njjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK\n6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX\nmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs\nMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH\nWD9f\n-----END CERTIFICATE-----`;\nconst TLSProfiles = {\n RedisCloudFixed: { ca: RedisCloudCA },\n RedisCloudFlexible: { ca: RedisCloudCA },\n};\nexports.default = TLSProfiles;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.noop = exports.defaults = exports.Debug = exports.zipMap = exports.CONNECTION_CLOSED_ERROR_MSG = exports.shuffle = exports.sample = exports.resolveTLSProfile = exports.parseURL = exports.optimizeErrorStack = exports.toArg = exports.convertMapToArray = exports.convertObjectToArray = exports.timeout = exports.packObject = exports.isInt = exports.wrapMultiResult = exports.convertBufferToString = void 0;\nconst url_1 = require(\"url\");\nconst lodash_1 = require(\"./lodash\");\nObject.defineProperty(exports, \"defaults\", { enumerable: true, get: function () { return lodash_1.defaults; } });\nObject.defineProperty(exports, \"noop\", { enumerable: true, get: function () { return lodash_1.noop; } });\nconst debug_1 = require(\"./debug\");\nexports.Debug = debug_1.default;\nconst TLSProfiles_1 = require(\"../constants/TLSProfiles\");\n/**\n * Convert a buffer to string, supports buffer array\n *\n * @example\n * ```js\n * const input = [Buffer.from('foo'), [Buffer.from('bar')]]\n * const res = convertBufferToString(input, 'utf8')\n * expect(res).to.eql(['foo', ['bar']])\n * ```\n */\nfunction convertBufferToString(value, encoding) {\n if (value instanceof Buffer) {\n return value.toString(encoding);\n }\n if (Array.isArray(value)) {\n const length = value.length;\n const res = Array(length);\n for (let i = 0; i < length; ++i) {\n res[i] =\n value[i] instanceof Buffer && encoding === \"utf8\"\n ? value[i].toString()\n : convertBufferToString(value[i], encoding);\n }\n return res;\n }\n return value;\n}\nexports.convertBufferToString = convertBufferToString;\n/**\n * Convert a list of results to node-style\n *\n * @example\n * ```js\n * const input = ['a', 'b', new Error('c'), 'd']\n * const output = exports.wrapMultiResult(input)\n * expect(output).to.eql([[null, 'a'], [null, 'b'], [new Error('c')], [null, 'd'])\n * ```\n */\nfunction wrapMultiResult(arr) {\n // When using WATCH/EXEC transactions, the EXEC will return\n // a null instead of an array\n if (!arr) {\n return null;\n }\n const result = [];\n const length = arr.length;\n for (let i = 0; i < length; ++i) {\n const item = arr[i];\n if (item instanceof Error) {\n result.push([item]);\n }\n else {\n result.push([null, item]);\n }\n }\n return result;\n}\nexports.wrapMultiResult = wrapMultiResult;\n/**\n * Detect if the argument is a int\n * @example\n * ```js\n * > isInt('123')\n * true\n * > isInt('123.3')\n * false\n * > isInt('1x')\n * false\n * > isInt(123)\n * true\n * > isInt(true)\n * false\n * ```\n */\nfunction isInt(value) {\n const x = parseFloat(value);\n return !isNaN(value) && (x | 0) === x;\n}\nexports.isInt = isInt;\n/**\n * Pack an array to an Object\n *\n * @example\n * ```js\n * > packObject(['a', 'b', 'c', 'd'])\n * { a: 'b', c: 'd' }\n * ```\n */\nfunction packObject(array) {\n const result = {};\n const length = array.length;\n for (let i = 1; i < length; i += 2) {\n result[array[i - 1]] = array[i];\n }\n return result;\n}\nexports.packObject = packObject;\n/**\n * Return a callback with timeout\n */\nfunction timeout(callback, timeout) {\n let timer = null;\n const run = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n callback.apply(this, arguments);\n }\n };\n timer = setTimeout(run, timeout, new Error(\"timeout\"));\n return run;\n}\nexports.timeout = timeout;\n/**\n * Convert an object to an array\n * @example\n * ```js\n * > convertObjectToArray({ a: '1' })\n * ['a', '1']\n * ```\n */\nfunction convertObjectToArray(obj) {\n const result = [];\n const keys = Object.keys(obj); // Object.entries requires node 7+\n for (let i = 0, l = keys.length; i < l; i++) {\n result.push(keys[i], obj[keys[i]]);\n }\n return result;\n}\nexports.convertObjectToArray = convertObjectToArray;\n/**\n * Convert a map to an array\n * @example\n * ```js\n * > convertMapToArray(new Map([[1, '2']]))\n * [1, '2']\n * ```\n */\nfunction convertMapToArray(map) {\n const result = [];\n let pos = 0;\n map.forEach(function (value, key) {\n result[pos] = key;\n result[pos + 1] = value;\n pos += 2;\n });\n return result;\n}\nexports.convertMapToArray = convertMapToArray;\n/**\n * Convert a non-string arg to a string\n */\nfunction toArg(arg) {\n if (arg === null || typeof arg === \"undefined\") {\n return \"\";\n }\n return String(arg);\n}\nexports.toArg = toArg;\n/**\n * Optimize error stack\n *\n * @param error actually error\n * @param friendlyStack the stack that more meaningful\n * @param filterPath only show stacks with the specified path\n */\nfunction optimizeErrorStack(error, friendlyStack, filterPath) {\n const stacks = friendlyStack.split(\"\\n\");\n let lines = \"\";\n let i;\n for (i = 1; i < stacks.length; ++i) {\n if (stacks[i].indexOf(filterPath) === -1) {\n break;\n }\n }\n for (let j = i; j < stacks.length; ++j) {\n lines += \"\\n\" + stacks[j];\n }\n if (error.stack) {\n const pos = error.stack.indexOf(\"\\n\");\n error.stack = error.stack.slice(0, pos) + lines;\n }\n return error;\n}\nexports.optimizeErrorStack = optimizeErrorStack;\n/**\n * Parse the redis protocol url\n */\nfunction parseURL(url) {\n if (isInt(url)) {\n return { port: url };\n }\n let parsed = (0, url_1.parse)(url, true, true);\n if (!parsed.slashes && url[0] !== \"/\") {\n url = \"//\" + url;\n parsed = (0, url_1.parse)(url, true, true);\n }\n const options = parsed.query || {};\n const result = {};\n if (parsed.auth) {\n const index = parsed.auth.indexOf(\":\");\n result.username = index === -1 ? parsed.auth : parsed.auth.slice(0, index);\n result.password = index === -1 ? \"\" : parsed.auth.slice(index + 1);\n }\n if (parsed.pathname) {\n if (parsed.protocol === \"redis:\" || parsed.protocol === \"rediss:\") {\n if (parsed.pathname.length > 1) {\n result.db = parsed.pathname.slice(1);\n }\n }\n else {\n result.path = parsed.pathname;\n }\n }\n if (parsed.host) {\n result.host = parsed.hostname;\n }\n if (parsed.port) {\n result.port = parsed.port;\n }\n if (typeof options.family === \"string\") {\n const intFamily = Number.parseInt(options.family, 10);\n if (!Number.isNaN(intFamily)) {\n result.family = intFamily;\n }\n }\n (0, lodash_1.defaults)(result, options);\n return result;\n}\nexports.parseURL = parseURL;\n/**\n * Resolve TLS profile shortcut in connection options\n */\nfunction resolveTLSProfile(options) {\n let tls = options === null || options === void 0 ? void 0 : options.tls;\n if (typeof tls === \"string\")\n tls = { profile: tls };\n const profile = TLSProfiles_1.default[tls === null || tls === void 0 ? void 0 : tls.profile];\n if (profile) {\n tls = Object.assign({}, profile, tls);\n delete tls.profile;\n options = Object.assign({}, options, { tls });\n }\n return options;\n}\nexports.resolveTLSProfile = resolveTLSProfile;\n/**\n * Get a random element from `array`\n */\nfunction sample(array, from = 0) {\n const length = array.length;\n if (from >= length) {\n return null;\n }\n return array[from + Math.floor(Math.random() * (length - from))];\n}\nexports.sample = sample;\n/**\n * Shuffle the array using the Fisher-Yates Shuffle.\n * This method will mutate the original array.\n */\nfunction shuffle(array) {\n let counter = array.length;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n const index = Math.floor(Math.random() * counter);\n // Decrease counter by 1\n counter--;\n // And swap the last element with it\n [array[counter], array[index]] = [array[index], array[counter]];\n }\n return array;\n}\nexports.shuffle = shuffle;\n/**\n * Error message for connection being disconnected\n */\nexports.CONNECTION_CLOSED_ERROR_MSG = \"Connection is closed.\";\nfunction zipMap(keys, values) {\n const map = new Map();\n keys.forEach((key, index) => {\n map.set(key, values[index]);\n });\n return map;\n}\nexports.zipMap = zipMap;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst calculateSlot = require(\"cluster-key-slot\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst utils_1 = require(\"./utils\");\n/**\n * Command instance\n *\n * It's rare that you need to create a Command instance yourself.\n *\n * ```js\n * var infoCommand = new Command('info', null, function (err, result) {\n * console.log('result', result);\n * });\n *\n * redis.sendCommand(infoCommand);\n *\n * // When no callback provided, Command instance will have a `promise` property,\n * // which will resolve/reject with the result of the command.\n * var getCommand = new Command('get', ['foo']);\n * getCommand.promise.then(function (result) {\n * console.log('result', result);\n * });\n * ```\n */\nclass Command {\n /**\n * Creates an instance of Command.\n * @param name Command name\n * @param args An array of command arguments\n * @param options\n * @param callback The callback that handles the response.\n * If omit, the response will be handled via Promise\n */\n constructor(name, args = [], options = {}, callback) {\n this.name = name;\n this.inTransaction = false;\n this.isResolved = false;\n this.transformed = false;\n this.replyEncoding = options.replyEncoding;\n this.errorStack = options.errorStack;\n this.args = args.flat();\n this.callback = callback;\n this.initPromise();\n if (options.keyPrefix) {\n // @ts-expect-error\n const isBufferKeyPrefix = options.keyPrefix instanceof Buffer;\n // @ts-expect-error\n let keyPrefixBuffer = isBufferKeyPrefix\n ? options.keyPrefix\n : null;\n this._iterateKeys((key) => {\n if (key instanceof Buffer) {\n if (keyPrefixBuffer === null) {\n keyPrefixBuffer = Buffer.from(options.keyPrefix);\n }\n return Buffer.concat([keyPrefixBuffer, key]);\n }\n else if (isBufferKeyPrefix) {\n // @ts-expect-error\n return Buffer.concat([options.keyPrefix, Buffer.from(String(key))]);\n }\n return options.keyPrefix + key;\n });\n }\n if (options.readOnly) {\n this.isReadOnly = true;\n }\n }\n /**\n * Check whether the command has the flag\n */\n static checkFlag(flagName, commandName) {\n return !!this.getFlagMap()[flagName][commandName];\n }\n static setArgumentTransformer(name, func) {\n this._transformer.argument[name] = func;\n }\n static setReplyTransformer(name, func) {\n this._transformer.reply[name] = func;\n }\n static getFlagMap() {\n if (!this.flagMap) {\n this.flagMap = Object.keys(Command.FLAGS).reduce((map, flagName) => {\n map[flagName] = {};\n Command.FLAGS[flagName].forEach((commandName) => {\n map[flagName][commandName] = true;\n });\n return map;\n }, {});\n }\n return this.flagMap;\n }\n getSlot() {\n if (typeof this.slot === \"undefined\") {\n const key = this.getKeys()[0];\n this.slot = key == null ? null : calculateSlot(key);\n }\n return this.slot;\n }\n getKeys() {\n return this._iterateKeys();\n }\n /**\n * Convert command to writable buffer or string\n */\n toWritable(_socket) {\n let result;\n const commandStr = \"*\" +\n (this.args.length + 1) +\n \"\\r\\n$\" +\n Buffer.byteLength(this.name) +\n \"\\r\\n\" +\n this.name +\n \"\\r\\n\";\n if (this.bufferMode) {\n const buffers = new MixedBuffers();\n buffers.push(commandStr);\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (arg instanceof Buffer) {\n if (arg.length === 0) {\n buffers.push(\"$0\\r\\n\\r\\n\");\n }\n else {\n buffers.push(\"$\" + arg.length + \"\\r\\n\");\n buffers.push(arg);\n buffers.push(\"\\r\\n\");\n }\n }\n else {\n buffers.push(\"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\");\n }\n }\n result = buffers.toBuffer();\n }\n else {\n result = commandStr;\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n result +=\n \"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\";\n }\n }\n return result;\n }\n stringifyArguments() {\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (typeof arg === \"string\") {\n // buffers and strings don't need any transformation\n }\n else if (arg instanceof Buffer) {\n this.bufferMode = true;\n }\n else {\n this.args[i] = (0, utils_1.toArg)(arg);\n }\n }\n }\n /**\n * Convert buffer/buffer[] to string/string[],\n * and apply reply transformer.\n */\n transformReply(result) {\n if (this.replyEncoding) {\n result = (0, utils_1.convertBufferToString)(result, this.replyEncoding);\n }\n const transformer = Command._transformer.reply[this.name];\n if (transformer) {\n result = transformer(result);\n }\n return result;\n }\n /**\n * Set the wait time before terminating the attempt to execute a command\n * and generating an error.\n */\n setTimeout(ms) {\n if (!this._commandTimeoutTimer) {\n this._commandTimeoutTimer = setTimeout(() => {\n if (!this.isResolved) {\n this.reject(new Error(\"Command timed out\"));\n }\n }, ms);\n }\n }\n initPromise() {\n const promise = new Promise((resolve, reject) => {\n if (!this.transformed) {\n this.transformed = true;\n const transformer = Command._transformer.argument[this.name];\n if (transformer) {\n this.args = transformer(this.args);\n }\n this.stringifyArguments();\n }\n this.resolve = this._convertValue(resolve);\n if (this.errorStack) {\n this.reject = (err) => {\n reject((0, utils_1.optimizeErrorStack)(err, this.errorStack.stack, __dirname));\n };\n }\n else {\n this.reject = reject;\n }\n });\n this.promise = (0, standard_as_callback_1.default)(promise, this.callback);\n }\n /**\n * Iterate through the command arguments that are considered keys.\n */\n _iterateKeys(transform = (key) => key) {\n if (typeof this.keys === \"undefined\") {\n this.keys = [];\n if ((0, commands_1.exists)(this.name)) {\n // @ts-expect-error\n const keyIndexes = (0, commands_1.getKeyIndexes)(this.name, this.args);\n for (const index of keyIndexes) {\n this.args[index] = transform(this.args[index]);\n this.keys.push(this.args[index]);\n }\n }\n }\n return this.keys;\n }\n /**\n * Convert the value from buffer to the target encoding.\n */\n _convertValue(resolve) {\n return (value) => {\n try {\n const existingTimer = this._commandTimeoutTimer;\n if (existingTimer) {\n clearTimeout(existingTimer);\n delete this._commandTimeoutTimer;\n }\n resolve(this.transformReply(value));\n this.isResolved = true;\n }\n catch (err) {\n this.reject(err);\n }\n return this.promise;\n };\n }\n}\nexports.default = Command;\nCommand.FLAGS = {\n VALID_IN_SUBSCRIBER_MODE: [\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"punsubscribe\",\n \"ssubscribe\",\n \"sunsubscribe\",\n \"ping\",\n \"quit\",\n ],\n VALID_IN_MONITOR_MODE: [\"monitor\", \"auth\"],\n ENTER_SUBSCRIBER_MODE: [\"subscribe\", \"psubscribe\", \"ssubscribe\"],\n EXIT_SUBSCRIBER_MODE: [\"unsubscribe\", \"punsubscribe\", \"sunsubscribe\"],\n WILL_DISCONNECT: [\"quit\"],\n};\nCommand._transformer = {\n argument: {},\n reply: {},\n};\nconst msetArgumentTransformer = function (args) {\n if (args.length === 1) {\n if (args[0] instanceof Map) {\n return (0, utils_1.convertMapToArray)(args[0]);\n }\n if (typeof args[0] === \"object\" && args[0] !== null) {\n return (0, utils_1.convertObjectToArray)(args[0]);\n }\n }\n return args;\n};\nconst hsetArgumentTransformer = function (args) {\n if (args.length === 2) {\n if (args[1] instanceof Map) {\n return [args[0]].concat((0, utils_1.convertMapToArray)(args[1]));\n }\n if (typeof args[1] === \"object\" && args[1] !== null) {\n return [args[0]].concat((0, utils_1.convertObjectToArray)(args[1]));\n }\n }\n return args;\n};\nCommand.setArgumentTransformer(\"mset\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"msetnx\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"hset\", hsetArgumentTransformer);\nCommand.setArgumentTransformer(\"hmset\", hsetArgumentTransformer);\nCommand.setReplyTransformer(\"hgetall\", function (result) {\n if (Array.isArray(result)) {\n const obj = {};\n for (let i = 0; i < result.length; i += 2) {\n const key = result[i];\n const value = result[i + 1];\n if (key in obj) {\n // can only be truthy if the property is special somehow, like '__proto__' or 'constructor'\n // https://github.com/luin/ioredis/issues/1267\n Object.defineProperty(obj, key, {\n value,\n configurable: true,\n enumerable: true,\n writable: true,\n });\n }\n else {\n obj[key] = value;\n }\n }\n return obj;\n }\n return result;\n});\nclass MixedBuffers {\n constructor() {\n this.length = 0;\n this.items = [];\n }\n push(x) {\n this.length += Buffer.byteLength(x);\n this.items.push(x);\n }\n toBuffer() {\n const result = Buffer.allocUnsafe(this.length);\n let offset = 0;\n for (const item of this.items) {\n const length = Buffer.byteLength(item);\n Buffer.isBuffer(item)\n ? item.copy(result, offset)\n : result.write(item, offset, length);\n offset += length;\n }\n return result;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst redis_errors_1 = require(\"redis-errors\");\nclass ClusterAllFailedError extends redis_errors_1.RedisError {\n constructor(message, lastNodeError) {\n super(message);\n this.lastNodeError = lastNodeError;\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports.default = ClusterAllFailedError;\nClusterAllFailedError.defaultMessage = \"Failed to refresh slots cache.\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\n/**\n * Convenient class to convert the process of scanning keys to a readable stream.\n */\nclass ScanStream extends stream_1.Readable {\n constructor(opt) {\n super(opt);\n this.opt = opt;\n this._redisCursor = \"0\";\n this._redisDrained = false;\n }\n _read() {\n if (this._redisDrained) {\n this.push(null);\n return;\n }\n const args = [this._redisCursor];\n if (this.opt.key) {\n args.unshift(this.opt.key);\n }\n if (this.opt.match) {\n args.push(\"MATCH\", this.opt.match);\n }\n if (this.opt.type) {\n args.push(\"TYPE\", this.opt.type);\n }\n if (this.opt.count) {\n args.push(\"COUNT\", String(this.opt.count));\n }\n if (this.opt.noValues) {\n args.push(\"NOVALUES\");\n }\n this.opt.redis[this.opt.command](args, (err, res) => {\n if (err) {\n this.emit(\"error\", err);\n return;\n }\n this._redisCursor = res[0] instanceof Buffer ? res[0].toString() : res[0];\n if (this._redisCursor === \"0\") {\n this._redisDrained = true;\n }\n this.push(res[1]);\n });\n }\n close() {\n this._redisDrained = true;\n }\n}\nexports.default = ScanStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.executeWithAutoPipelining = exports.getFirstValueInFlattenedArray = exports.shouldUseAutoPipelining = exports.notAllowedAutoPipelineCommands = exports.kCallbacks = exports.kExec = void 0;\nconst lodash_1 = require(\"./utils/lodash\");\nconst calculateSlot = require(\"cluster-key-slot\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nexports.kExec = Symbol(\"exec\");\nexports.kCallbacks = Symbol(\"callbacks\");\nexports.notAllowedAutoPipelineCommands = [\n \"auth\",\n \"info\",\n \"script\",\n \"quit\",\n \"cluster\",\n \"pipeline\",\n \"multi\",\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"unpsubscribe\",\n \"select\",\n];\nfunction executeAutoPipeline(client, slotKey) {\n /*\n If a pipeline is already executing, keep queueing up commands\n since ioredis won't serve two pipelines at the same time\n */\n if (client._runningAutoPipelines.has(slotKey)) {\n return;\n }\n if (!client._autoPipelines.has(slotKey)) {\n /*\n Rare edge case. Somehow, something has deleted this running autopipeline in an immediate\n call to executeAutoPipeline.\n \n Maybe the callback in the pipeline.exec is sometimes called in the same tick,\n e.g. if redis is disconnected?\n */\n return;\n }\n client._runningAutoPipelines.add(slotKey);\n // Get the pipeline and immediately delete it so that new commands are queued on a new pipeline\n const pipeline = client._autoPipelines.get(slotKey);\n client._autoPipelines.delete(slotKey);\n const callbacks = pipeline[exports.kCallbacks];\n // Stop keeping a reference to callbacks immediately after the callbacks stop being used.\n // This allows the GC to reclaim objects referenced by callbacks, especially with 16384 slots\n // in Redis.Cluster\n pipeline[exports.kCallbacks] = null;\n // Perform the call\n pipeline.exec(function (err, results) {\n client._runningAutoPipelines.delete(slotKey);\n /*\n Invoke all callback in nextTick so the stack is cleared\n and callbacks can throw errors without affecting other callbacks.\n */\n if (err) {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], err);\n }\n }\n else {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], ...results[i]);\n }\n }\n // If there is another pipeline on the same node, immediately execute it without waiting for nextTick\n if (client._autoPipelines.has(slotKey)) {\n executeAutoPipeline(client, slotKey);\n }\n });\n}\nfunction shouldUseAutoPipelining(client, functionName, commandName) {\n return (functionName &&\n client.options.enableAutoPipelining &&\n !client.isPipeline &&\n !exports.notAllowedAutoPipelineCommands.includes(commandName) &&\n !client.options.autoPipeliningIgnoredCommands.includes(commandName));\n}\nexports.shouldUseAutoPipelining = shouldUseAutoPipelining;\nfunction getFirstValueInFlattenedArray(args) {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (typeof arg === \"string\") {\n return arg;\n }\n else if (Array.isArray(arg) || (0, lodash_1.isArguments)(arg)) {\n if (arg.length === 0) {\n continue;\n }\n return arg[0];\n }\n const flattened = [arg].flat();\n if (flattened.length > 0) {\n return flattened[0];\n }\n }\n return undefined;\n}\nexports.getFirstValueInFlattenedArray = getFirstValueInFlattenedArray;\nfunction executeWithAutoPipelining(client, functionName, commandName, args, callback) {\n // On cluster mode let's wait for slots to be available\n if (client.isCluster && !client.slots.length) {\n if (client.status === \"wait\")\n client.connect().catch(lodash_1.noop);\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n client.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n executeWithAutoPipelining(client, functionName, commandName, args, null).then(resolve, reject);\n });\n }), callback);\n }\n // If we have slot information, we can improve routing by grouping slots served by the same subset of nodes\n // Note that the first value in args may be a (possibly empty) array.\n // ioredis will only flatten one level of the array, in the Command constructor.\n const prefix = client.options.keyPrefix || \"\";\n const slotKey = client.isCluster\n ? client.slots[calculateSlot(`${prefix}${getFirstValueInFlattenedArray(args)}`)].join(\",\")\n : \"main\";\n if (!client._autoPipelines.has(slotKey)) {\n const pipeline = client.pipeline();\n pipeline[exports.kExec] = false;\n pipeline[exports.kCallbacks] = [];\n client._autoPipelines.set(slotKey, pipeline);\n }\n const pipeline = client._autoPipelines.get(slotKey);\n /*\n Mark the pipeline as scheduled.\n The symbol will make sure that the pipeline is only scheduled once per tick.\n New commands are appended to an already scheduled pipeline.\n */\n if (!pipeline[exports.kExec]) {\n pipeline[exports.kExec] = true;\n /*\n Deferring with setImmediate so we have a chance to capture multiple\n commands that can be scheduled by I/O events already in the event loop queue.\n */\n setImmediate(executeAutoPipeline, client, slotKey);\n }\n // Create the promise which will execute the command in the pipeline.\n const autoPipelinePromise = new Promise(function (resolve, reject) {\n pipeline[exports.kCallbacks].push(function (err, value) {\n if (err) {\n reject(err);\n return;\n }\n resolve(value);\n });\n if (functionName === \"call\") {\n args.unshift(commandName);\n }\n pipeline[functionName](...args);\n });\n return (0, standard_as_callback_1.default)(autoPipelinePromise, callback);\n}\nexports.executeWithAutoPipelining = executeWithAutoPipelining;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst Command_1 = require(\"./Command\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nclass Script {\n constructor(lua, numberOfKeys = null, keyPrefix = \"\", readOnly = false) {\n this.lua = lua;\n this.numberOfKeys = numberOfKeys;\n this.keyPrefix = keyPrefix;\n this.readOnly = readOnly;\n this.sha = (0, crypto_1.createHash)(\"sha1\").update(lua).digest(\"hex\");\n const sha = this.sha;\n const socketHasScriptLoaded = new WeakSet();\n this.Command = class CustomScriptCommand extends Command_1.default {\n toWritable(socket) {\n const origReject = this.reject;\n this.reject = (err) => {\n if (err.message.indexOf(\"NOSCRIPT\") !== -1) {\n socketHasScriptLoaded.delete(socket);\n }\n origReject.call(this, err);\n };\n if (!socketHasScriptLoaded.has(socket)) {\n socketHasScriptLoaded.add(socket);\n this.name = \"eval\";\n this.args[0] = lua;\n }\n else if (this.name === \"eval\") {\n this.name = \"evalsha\";\n this.args[0] = sha;\n }\n return super.toWritable(socket);\n }\n };\n }\n execute(container, args, options, callback) {\n if (typeof this.numberOfKeys === \"number\") {\n args.unshift(this.numberOfKeys);\n }\n if (this.keyPrefix) {\n options.keyPrefix = this.keyPrefix;\n }\n if (this.readOnly) {\n options.readOnly = true;\n }\n const evalsha = new this.Command(\"evalsha\", [this.sha, ...args], options);\n evalsha.promise = evalsha.promise.catch((err) => {\n if (err.message.indexOf(\"NOSCRIPT\") === -1) {\n throw err;\n }\n // Resend the same custom evalsha command that gets transformed\n // to an eval in case it's not loaded yet on the connection.\n const resend = new this.Command(\"evalsha\", [this.sha, ...args], options);\n const client = container.isPipeline ? container.redis : container;\n return client.sendCommand(resend);\n });\n (0, standard_as_callback_1.default)(evalsha.promise, callback);\n return container.sendCommand(evalsha);\n }\n}\nexports.default = Script;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst autoPipelining_1 = require(\"../autoPipelining\");\nconst Command_1 = require(\"../Command\");\nconst Script_1 = require(\"../Script\");\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nclass Commander {\n constructor() {\n this.options = {};\n /**\n * @ignore\n */\n this.scriptsSet = {};\n /**\n * @ignore\n */\n this.addedBuiltinSet = new Set();\n }\n /**\n * Return supported builtin commands\n */\n getBuiltinCommands() {\n return commands.slice(0);\n }\n /**\n * Create a builtin command\n */\n createBuiltinCommand(commandName) {\n return {\n string: generateFunction(null, commandName, \"utf8\"),\n buffer: generateFunction(null, commandName, null),\n };\n }\n /**\n * Create add builtin command\n */\n addBuiltinCommand(commandName) {\n this.addedBuiltinSet.add(commandName);\n this[commandName] = generateFunction(commandName, commandName, \"utf8\");\n this[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n }\n /**\n * Define a custom command using lua script\n */\n defineCommand(name, definition) {\n const script = new Script_1.default(definition.lua, definition.numberOfKeys, this.options.keyPrefix, definition.readOnly);\n this.scriptsSet[name] = script;\n this[name] = generateScriptingFunction(name, name, script, \"utf8\");\n this[name + \"Buffer\"] = generateScriptingFunction(name + \"Buffer\", name, script, null);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n throw new Error('\"sendCommand\" is not implemented');\n }\n}\nconst commands = commands_1.list.filter((command) => command !== \"monitor\");\ncommands.push(\"sentinel\");\ncommands.forEach(function (commandName) {\n Commander.prototype[commandName] = generateFunction(commandName, commandName, \"utf8\");\n Commander.prototype[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n});\nCommander.prototype.call = generateFunction(\"call\", \"utf8\");\nCommander.prototype.callBuffer = generateFunction(\"callBuffer\", null);\n// @ts-expect-error\nCommander.prototype.send_command = Commander.prototype.call;\nfunction generateFunction(functionName, _commandName, _encoding) {\n if (typeof _encoding === \"undefined\") {\n _encoding = _commandName;\n _commandName = null;\n }\n return function (...args) {\n const commandName = (_commandName || args.shift());\n let callback = args[args.length - 1];\n if (typeof callback === \"function\") {\n args.pop();\n }\n else {\n callback = undefined;\n }\n const options = {\n errorStack: this.options.showFriendlyErrorStack ? new Error() : undefined,\n keyPrefix: this.options.keyPrefix,\n replyEncoding: _encoding,\n };\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return this.sendCommand(\n // @ts-expect-error\n new Command_1.default(commandName, args, options, callback));\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, \n // @ts-expect-error\n args, callback);\n };\n}\nfunction generateScriptingFunction(functionName, commandName, script, encoding) {\n return function (...args) {\n const callback = typeof args[args.length - 1] === \"function\" ? args.pop() : undefined;\n const options = {\n replyEncoding: encoding,\n };\n if (this.options.showFriendlyErrorStack) {\n options.errorStack = new Error();\n }\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return script.execute(this, args, options, callback);\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, args, callback);\n };\n}\nexports.default = Commander;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst calculateSlot = require(\"cluster-key-slot\");\nconst commands_1 = require(\"@ioredis/commands\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst util_1 = require(\"util\");\nconst Command_1 = require(\"./Command\");\nconst utils_1 = require(\"./utils\");\nconst Commander_1 = require(\"./utils/Commander\");\n/*\n This function derives from the cluster-key-slot implementation.\n Instead of checking that all keys have the same slot, it checks that all slots are served by the same set of nodes.\n If this is satisfied, it returns the first key's slot.\n*/\nfunction generateMultiWithNodes(redis, keys) {\n const slot = calculateSlot(keys[0]);\n const target = redis._groupsBySlot[slot];\n for (let i = 1; i < keys.length; i++) {\n if (redis._groupsBySlot[calculateSlot(keys[i])] !== target) {\n return -1;\n }\n }\n return slot;\n}\nclass Pipeline extends Commander_1.default {\n constructor(redis) {\n super();\n this.redis = redis;\n this.isPipeline = true;\n this.replyPending = 0;\n this._queue = [];\n this._result = [];\n this._transactions = 0;\n this._shaToScript = {};\n this.isCluster =\n this.redis.constructor.name === \"Cluster\" || this.redis.isCluster;\n this.options = redis.options;\n Object.keys(redis.scriptsSet).forEach((name) => {\n const script = redis.scriptsSet[name];\n this._shaToScript[script.sha] = script;\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n redis.addedBuiltinSet.forEach((name) => {\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n const _this = this;\n Object.defineProperty(this, \"length\", {\n get: function () {\n return _this._queue.length;\n },\n });\n }\n fillResult(value, position) {\n if (this._queue[position].name === \"exec\" && Array.isArray(value[1])) {\n const execLength = value[1].length;\n for (let i = 0; i < execLength; i++) {\n if (value[1][i] instanceof Error) {\n continue;\n }\n const cmd = this._queue[position - (execLength - i)];\n try {\n value[1][i] = cmd.transformReply(value[1][i]);\n }\n catch (err) {\n value[1][i] = err;\n }\n }\n }\n this._result[position] = value;\n if (--this.replyPending) {\n return;\n }\n if (this.isCluster) {\n let retriable = true;\n let commonError;\n for (let i = 0; i < this._result.length; ++i) {\n const error = this._result[i][0];\n const command = this._queue[i];\n if (error) {\n if (command.name === \"exec\" &&\n error.message ===\n \"EXECABORT Transaction discarded because of previous errors.\") {\n continue;\n }\n if (!commonError) {\n commonError = {\n name: error.name,\n message: error.message,\n };\n }\n else if (commonError.name !== error.name ||\n commonError.message !== error.message) {\n retriable = false;\n break;\n }\n }\n else if (!command.inTransaction) {\n const isReadOnly = (0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\");\n if (!isReadOnly) {\n retriable = false;\n break;\n }\n }\n }\n if (commonError && retriable) {\n const _this = this;\n const errv = commonError.message.split(\" \");\n const queue = this._queue;\n let inTransaction = false;\n this._queue = [];\n for (let i = 0; i < queue.length; ++i) {\n if (errv[0] === \"ASK\" &&\n !inTransaction &&\n queue[i].name !== \"asking\" &&\n (!queue[i - 1] || queue[i - 1].name !== \"asking\")) {\n const asking = new Command_1.default(\"asking\");\n asking.ignore = true;\n this.sendCommand(asking);\n }\n queue[i].initPromise();\n this.sendCommand(queue[i]);\n inTransaction = queue[i].inTransaction;\n }\n let matched = true;\n if (typeof this.leftRedirections === \"undefined\") {\n this.leftRedirections = {};\n }\n const exec = function () {\n _this.exec();\n };\n const cluster = this.redis;\n cluster.handleError(commonError, this.leftRedirections, {\n moved: function (_slot, key) {\n _this.preferKey = key;\n cluster.slots[errv[1]] = [key];\n cluster._groupsBySlot[errv[1]] =\n cluster._groupsIds[cluster.slots[errv[1]].join(\";\")];\n cluster.refreshSlotsCache();\n _this.exec();\n },\n ask: function (_slot, key) {\n _this.preferKey = key;\n _this.exec();\n },\n tryagain: exec,\n clusterDown: exec,\n connectionClosed: exec,\n maxRedirections: () => {\n matched = false;\n },\n defaults: () => {\n matched = false;\n },\n });\n if (matched) {\n return;\n }\n }\n }\n let ignoredCount = 0;\n for (let i = 0; i < this._queue.length - ignoredCount; ++i) {\n if (this._queue[i + ignoredCount].ignore) {\n ignoredCount += 1;\n }\n this._result[i] = this._result[i + ignoredCount];\n }\n this.resolve(this._result.slice(0, this._result.length - ignoredCount));\n }\n sendCommand(command) {\n if (this._transactions > 0) {\n command.inTransaction = true;\n }\n const position = this._queue.length;\n command.pipelineIndex = position;\n command.promise\n .then((result) => {\n this.fillResult([null, result], position);\n })\n .catch((error) => {\n this.fillResult([error], position);\n });\n this._queue.push(command);\n return this;\n }\n addBatch(commands) {\n let command, commandName, args;\n for (let i = 0; i < commands.length; ++i) {\n command = commands[i];\n commandName = command[0];\n args = command.slice(1);\n this[commandName].apply(this, args);\n }\n return this;\n }\n}\nexports.default = Pipeline;\n// @ts-expect-error\nconst multi = Pipeline.prototype.multi;\n// @ts-expect-error\nPipeline.prototype.multi = function () {\n this._transactions += 1;\n return multi.apply(this, arguments);\n};\n// @ts-expect-error\nconst execBuffer = Pipeline.prototype.execBuffer;\n// @ts-expect-error\nPipeline.prototype.execBuffer = (0, util_1.deprecate)(function () {\n if (this._transactions > 0) {\n this._transactions -= 1;\n }\n return execBuffer.apply(this, arguments);\n}, \"Pipeline#execBuffer: Use Pipeline#exec instead\");\n// NOTE: To avoid an unhandled promise rejection, this will unconditionally always return this.promise,\n// which always has the rejection handled by standard-as-callback\n// adding the provided rejection callback.\n//\n// If a different promise instance were returned, that promise would cause its own unhandled promise rejection\n// errors, even if that promise unconditionally resolved to **the resolved value of** this.promise.\nPipeline.prototype.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n if (callback && !this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n this.redis.delayUntilReady((err) => {\n if (err) {\n this.reject(err);\n return;\n }\n this.exec(callback);\n });\n return this.promise;\n }\n if (this._transactions > 0) {\n this._transactions -= 1;\n return execBuffer.apply(this, arguments);\n }\n if (!this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n if (!this._queue.length) {\n this.resolve([]);\n }\n let pipelineSlot;\n if (this.isCluster) {\n // List of the first key for each command\n const sampleKeys = [];\n for (let i = 0; i < this._queue.length; i++) {\n const keys = this._queue[i].getKeys();\n if (keys.length) {\n sampleKeys.push(keys[0]);\n }\n // For each command, check that the keys belong to the same slot\n if (keys.length && calculateSlot.generateMulti(keys) < 0) {\n this.reject(new Error(\"All the keys in a pipeline command should belong to the same slot\"));\n return this.promise;\n }\n }\n if (sampleKeys.length) {\n pipelineSlot = generateMultiWithNodes(this.redis, sampleKeys);\n if (pipelineSlot < 0) {\n this.reject(new Error(\"All keys in the pipeline should belong to the same slots allocation group\"));\n return this.promise;\n }\n }\n else {\n // Send the pipeline to a random node\n pipelineSlot = (Math.random() * 16384) | 0;\n }\n }\n const _this = this;\n execPipeline();\n return this.promise;\n function execPipeline() {\n let writePending = (_this.replyPending = _this._queue.length);\n let node;\n if (_this.isCluster) {\n node = {\n slot: pipelineSlot,\n redis: _this.redis.connectionPool.nodes.all[_this.preferKey],\n };\n }\n let data = \"\";\n let buffers;\n const stream = {\n isPipeline: true,\n destination: _this.isCluster ? node : { redis: _this.redis },\n write(writable) {\n if (typeof writable !== \"string\") {\n if (!buffers) {\n buffers = [];\n }\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n data = \"\";\n }\n buffers.push(writable);\n }\n else {\n data += writable;\n }\n if (!--writePending) {\n if (buffers) {\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n }\n stream.destination.redis.stream.write(Buffer.concat(buffers));\n }\n else {\n stream.destination.redis.stream.write(data);\n }\n // Reset writePending for resending\n writePending = _this._queue.length;\n data = \"\";\n buffers = undefined;\n }\n },\n };\n for (let i = 0; i < _this._queue.length; ++i) {\n _this.redis.sendCommand(_this._queue[i], stream, node);\n }\n return _this.promise;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addTransactionSupport = void 0;\nconst utils_1 = require(\"./utils\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst Pipeline_1 = require(\"./Pipeline\");\nfunction addTransactionSupport(redis) {\n redis.pipeline = function (commands) {\n const pipeline = new Pipeline_1.default(this);\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n return pipeline;\n };\n const { multi } = redis;\n redis.multi = function (commands, options) {\n if (typeof options === \"undefined\" && !Array.isArray(commands)) {\n options = commands;\n commands = null;\n }\n if (options && options.pipeline === false) {\n return multi.call(this);\n }\n const pipeline = new Pipeline_1.default(this);\n // @ts-expect-error\n pipeline.multi();\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n const exec = pipeline.exec;\n pipeline.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n return (0, standard_as_callback_1.default)(new Promise((resolve, reject) => {\n this.redis.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n this.exec(pipeline).then(resolve, reject);\n });\n }), callback);\n }\n if (this._transactions > 0) {\n exec.call(pipeline);\n }\n // Returns directly when the pipeline\n // has been called multiple times (retries).\n if (this.nodeifiedPromise) {\n return exec.call(pipeline);\n }\n const promise = exec.call(pipeline);\n return (0, standard_as_callback_1.default)(promise.then(function (result) {\n const execResult = result[result.length - 1];\n if (typeof execResult === \"undefined\") {\n throw new Error(\"Pipeline cannot be used to send any commands when the `exec()` has been called on it.\");\n }\n if (execResult[0]) {\n execResult[0].previousErrors = [];\n for (let i = 0; i < result.length - 1; ++i) {\n if (result[i][0]) {\n execResult[0].previousErrors.push(result[i][0]);\n }\n }\n throw execResult[0];\n }\n return (0, utils_1.wrapMultiResult)(execResult[1]);\n }), callback);\n };\n // @ts-expect-error\n const { execBuffer } = pipeline;\n // @ts-expect-error\n pipeline.execBuffer = function (callback) {\n if (this._transactions > 0) {\n execBuffer.call(pipeline);\n }\n return pipeline.exec(callback);\n };\n return pipeline;\n };\n const { exec } = redis;\n redis.exec = function (callback) {\n return (0, standard_as_callback_1.default)(exec.call(this).then(function (results) {\n if (Array.isArray(results)) {\n results = (0, utils_1.wrapMultiResult)(results);\n }\n return results;\n }), callback);\n };\n}\nexports.addTransactionSupport = addTransactionSupport;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyMixin(derivedConstructor, mixinConstructor) {\n Object.getOwnPropertyNames(mixinConstructor.prototype).forEach((name) => {\n Object.defineProperty(derivedConstructor.prototype, name, Object.getOwnPropertyDescriptor(mixinConstructor.prototype, name));\n });\n}\nexports.default = applyMixin;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_CLUSTER_OPTIONS = void 0;\nconst dns_1 = require(\"dns\");\nexports.DEFAULT_CLUSTER_OPTIONS = {\n clusterRetryStrategy: (times) => Math.min(100 + times * 2, 2000),\n enableOfflineQueue: true,\n enableReadyCheck: true,\n scaleReads: \"master\",\n maxRedirections: 16,\n retryDelayOnMoved: 0,\n retryDelayOnFailover: 100,\n retryDelayOnClusterDown: 100,\n retryDelayOnTryAgain: 100,\n slotsRefreshTimeout: 1000,\n useSRVRecords: false,\n resolveSrv: dns_1.resolveSrv,\n dnsLookup: dns_1.lookup,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n shardedSubscribers: false,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getConnectionName = exports.weightSrvRecords = exports.groupSrvRecords = exports.getUniqueHostnamesFromOptions = exports.normalizeNodeOptions = exports.nodeKeyToRedisOptions = exports.getNodeKey = void 0;\nconst utils_1 = require(\"../utils\");\nconst net_1 = require(\"net\");\nfunction getNodeKey(node) {\n node.port = node.port || 6379;\n node.host = node.host || \"127.0.0.1\";\n return node.host + \":\" + node.port;\n}\nexports.getNodeKey = getNodeKey;\nfunction nodeKeyToRedisOptions(nodeKey) {\n const portIndex = nodeKey.lastIndexOf(\":\");\n if (portIndex === -1) {\n throw new Error(`Invalid node key ${nodeKey}`);\n }\n return {\n host: nodeKey.slice(0, portIndex),\n port: Number(nodeKey.slice(portIndex + 1)),\n };\n}\nexports.nodeKeyToRedisOptions = nodeKeyToRedisOptions;\nfunction normalizeNodeOptions(nodes) {\n return nodes.map((node) => {\n const options = {};\n if (typeof node === \"object\") {\n Object.assign(options, node);\n }\n else if (typeof node === \"string\") {\n Object.assign(options, (0, utils_1.parseURL)(node));\n }\n else if (typeof node === \"number\") {\n options.port = node;\n }\n else {\n throw new Error(\"Invalid argument \" + node);\n }\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n // Cluster mode only support db 0\n delete options.db;\n if (!options.port) {\n options.port = 6379;\n }\n if (!options.host) {\n options.host = \"127.0.0.1\";\n }\n return (0, utils_1.resolveTLSProfile)(options);\n });\n}\nexports.normalizeNodeOptions = normalizeNodeOptions;\nfunction getUniqueHostnamesFromOptions(nodes) {\n const uniqueHostsMap = {};\n nodes.forEach((node) => {\n uniqueHostsMap[node.host] = true;\n });\n return Object.keys(uniqueHostsMap).filter((host) => !(0, net_1.isIP)(host));\n}\nexports.getUniqueHostnamesFromOptions = getUniqueHostnamesFromOptions;\nfunction groupSrvRecords(records) {\n const recordsByPriority = {};\n for (const record of records) {\n if (!recordsByPriority.hasOwnProperty(record.priority)) {\n recordsByPriority[record.priority] = {\n totalWeight: record.weight,\n records: [record],\n };\n }\n else {\n recordsByPriority[record.priority].totalWeight += record.weight;\n recordsByPriority[record.priority].records.push(record);\n }\n }\n return recordsByPriority;\n}\nexports.groupSrvRecords = groupSrvRecords;\nfunction weightSrvRecords(recordsGroup) {\n if (recordsGroup.records.length === 1) {\n recordsGroup.totalWeight = 0;\n return recordsGroup.records.shift();\n }\n // + `recordsGroup.records.length` to support `weight` 0\n const random = Math.floor(Math.random() * (recordsGroup.totalWeight + recordsGroup.records.length));\n let total = 0;\n for (const [i, record] of recordsGroup.records.entries()) {\n total += 1 + record.weight;\n if (total > random) {\n recordsGroup.totalWeight -= record.weight;\n recordsGroup.records.splice(i, 1);\n return record;\n }\n }\n}\nexports.weightSrvRecords = weightSrvRecords;\nfunction getConnectionName(component, nodeConnectionName) {\n const prefix = `ioredis-cluster(${component})`;\n return nodeConnectionName ? `${prefix}:${nodeConnectionName}` : prefix;\n}\nexports.getConnectionName = getConnectionName;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"./util\");\nconst utils_1 = require(\"../utils\");\nconst Redis_1 = require(\"../Redis\");\nconst debug = (0, utils_1.Debug)(\"cluster:subscriber\");\nclass ClusterSubscriber {\n constructor(connectionPool, emitter, isSharded = false) {\n this.connectionPool = connectionPool;\n this.emitter = emitter;\n this.isSharded = isSharded;\n this.started = false;\n //There is only one connection for the entire pool\n this.subscriber = null;\n //The slot range for which this subscriber is responsible\n this.slotRange = [];\n this.onSubscriberEnd = () => {\n if (!this.started) {\n debug(\"subscriber has disconnected, but ClusterSubscriber is not started, so not reconnecting.\");\n return;\n }\n // If the subscriber closes whilst it's still the active connection,\n // we might as well try to connecting to a new node if possible to\n // minimise the number of missed publishes.\n debug(\"subscriber has disconnected, selecting a new one...\");\n this.selectSubscriber();\n };\n // If the current node we're using as the subscriber disappears\n // from the node pool for some reason, we will select a new one\n // to connect to.\n // Note that this event is only triggered if the connection to\n // the node has been used; cluster subscriptions are setup with\n // lazyConnect = true. It's possible for the subscriber node to\n // disappear without this method being called!\n // See https://github.com/luin/ioredis/pull/1589\n this.connectionPool.on(\"-node\", (_, key) => {\n if (!this.started || !this.subscriber) {\n return;\n }\n if ((0, util_1.getNodeKey)(this.subscriber.options) === key) {\n debug(\"subscriber has left, selecting a new one...\");\n this.selectSubscriber();\n }\n });\n this.connectionPool.on(\"+node\", () => {\n if (!this.started || this.subscriber) {\n return;\n }\n debug(\"a new node is discovered and there is no subscriber, selecting a new one...\");\n this.selectSubscriber();\n });\n }\n getInstance() {\n return this.subscriber;\n }\n /**\n * Associate this subscriber to a specific slot range.\n *\n * Returns the range or an empty array if the slot range couldn't be associated.\n *\n * BTW: This is more for debugging and testing purposes.\n *\n * @param range\n */\n associateSlotRange(range) {\n if (this.isSharded) {\n this.slotRange = range;\n }\n return this.slotRange;\n }\n start() {\n this.started = true;\n this.selectSubscriber();\n debug(\"started\");\n }\n stop() {\n this.started = false;\n if (this.subscriber) {\n this.subscriber.disconnect();\n this.subscriber = null;\n }\n }\n isStarted() {\n return this.started;\n }\n selectSubscriber() {\n const lastActiveSubscriber = this.lastActiveSubscriber;\n // Disconnect the previous subscriber even if there\n // will not be a new one.\n if (lastActiveSubscriber) {\n lastActiveSubscriber.off(\"end\", this.onSubscriberEnd);\n lastActiveSubscriber.disconnect();\n }\n if (this.subscriber) {\n this.subscriber.off(\"end\", this.onSubscriberEnd);\n this.subscriber.disconnect();\n }\n const sampleNode = (0, utils_1.sample)(this.connectionPool.getNodes());\n if (!sampleNode) {\n debug(\"selecting subscriber failed since there is no node discovered in the cluster yet\");\n this.subscriber = null;\n return;\n }\n const { options } = sampleNode;\n debug(\"selected a subscriber %s:%s\", options.host, options.port);\n /*\n * Create a specialized Redis connection for the subscription.\n * Note that auto reconnection is enabled here.\n *\n * `enableReadyCheck` is also enabled because although subscription is allowed\n * while redis is loading data from the disk, we can check if the password\n * provided for the subscriber is correct, and if not, the current subscriber\n * will be disconnected and a new subscriber will be selected.\n */\n let connectionPrefix = \"subscriber\";\n if (this.isSharded)\n connectionPrefix = \"ssubscriber\";\n this.subscriber = new Redis_1.default({\n port: options.port,\n host: options.host,\n username: options.username,\n password: options.password,\n enableReadyCheck: true,\n connectionName: (0, util_1.getConnectionName)(connectionPrefix, options.connectionName),\n lazyConnect: true,\n tls: options.tls,\n // Don't try to reconnect the subscriber connection. If the connection fails\n // we will get an end event (handled below), at which point we'll pick a new\n // node from the pool and try to connect to that as the subscriber connection.\n retryStrategy: null,\n });\n // Ignore the errors since they're handled in the connection pool.\n this.subscriber.on(\"error\", utils_1.noop);\n // The node we lost connection to may not come back up in a\n // reasonable amount of time (e.g. a slave that's taken down\n // for maintainence), we could potentially miss many published\n // messages so we should reconnect as quickly as possible, to\n // a different node if needed.\n this.subscriber.once(\"end\", this.onSubscriberEnd);\n // Re-subscribe previous channels\n const previousChannels = { subscribe: [], psubscribe: [], ssubscribe: [] };\n if (lastActiveSubscriber) {\n const condition = lastActiveSubscriber.condition || lastActiveSubscriber.prevCondition;\n if (condition && condition.subscriber) {\n previousChannels.subscribe = condition.subscriber.channels(\"subscribe\");\n previousChannels.psubscribe =\n condition.subscriber.channels(\"psubscribe\");\n previousChannels.ssubscribe =\n condition.subscriber.channels(\"ssubscribe\");\n }\n }\n if (previousChannels.subscribe.length ||\n previousChannels.psubscribe.length ||\n previousChannels.ssubscribe.length) {\n let pending = 0;\n for (const type of [\"subscribe\", \"psubscribe\", \"ssubscribe\"]) {\n const channels = previousChannels[type];\n if (channels.length) {\n pending += 1;\n debug(\"%s %d channels\", type, channels.length);\n this.subscriber[type](channels)\n .then(() => {\n if (!--pending) {\n this.lastActiveSubscriber = this.subscriber;\n }\n })\n .catch(() => {\n // TODO: should probably disconnect the subscriber and try again.\n debug(\"failed to %s %d channels\", type, channels.length);\n });\n }\n }\n }\n else {\n this.lastActiveSubscriber = this.subscriber;\n }\n for (const event of [\n \"message\",\n \"messageBuffer\",\n ]) {\n this.subscriber.on(event, (arg1, arg2) => {\n this.emitter.emit(event, arg1, arg2);\n });\n }\n for (const event of [\"pmessage\", \"pmessageBuffer\"]) {\n this.subscriber.on(event, (arg1, arg2, arg3) => {\n this.emitter.emit(event, arg1, arg2, arg3);\n });\n }\n if (this.isSharded == true) {\n for (const event of [\n \"smessage\",\n \"smessageBuffer\",\n ]) {\n this.subscriber.on(event, (arg1, arg2) => {\n this.emitter.emit(event, arg1, arg2);\n });\n }\n }\n }\n}\nexports.default = ClusterSubscriber;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst utils_1 = require(\"../utils\");\nconst util_1 = require(\"./util\");\nconst Redis_1 = require(\"../Redis\");\nconst debug = (0, utils_1.Debug)(\"cluster:connectionPool\");\nclass ConnectionPool extends events_1.EventEmitter {\n constructor(redisOptions) {\n super();\n this.redisOptions = redisOptions;\n // master + slave = all\n this.nodes = {\n all: {},\n master: {},\n slave: {},\n };\n this.specifiedOptions = {};\n }\n getNodes(role = \"all\") {\n const nodes = this.nodes[role];\n return Object.keys(nodes).map((key) => nodes[key]);\n }\n getInstanceByKey(key) {\n return this.nodes.all[key];\n }\n getSampleInstance(role) {\n const keys = Object.keys(this.nodes[role]);\n const sampleKey = (0, utils_1.sample)(keys);\n return this.nodes[role][sampleKey];\n }\n /**\n * Add a master node to the pool\n * @param node\n */\n addMasterNode(node) {\n const key = (0, util_1.getNodeKey)(node.options);\n const redis = this.createRedisFromOptions(node, node.options.readOnly);\n //Master nodes aren't read-only\n if (!node.options.readOnly) {\n this.nodes.all[key] = redis;\n this.nodes.master[key] = redis;\n return true;\n }\n return false;\n }\n /**\n * Creates a Redis connection instance from the node options\n * @param node\n * @param readOnly\n */\n createRedisFromOptions(node, readOnly) {\n const redis = new Redis_1.default((0, utils_1.defaults)({\n // Never try to reconnect when a node is lose,\n // instead, waiting for a `MOVED` error and\n // fetch the slots again.\n retryStrategy: null,\n // Offline queue should be enabled so that\n // we don't need to wait for the `ready` event\n // before sending commands to the node.\n enableOfflineQueue: true,\n readOnly: readOnly,\n }, node, this.redisOptions, { lazyConnect: true }));\n return redis;\n }\n /**\n * Find or create a connection to the node\n */\n findOrCreate(node, readOnly = false) {\n const key = (0, util_1.getNodeKey)(node);\n readOnly = Boolean(readOnly);\n if (this.specifiedOptions[key]) {\n Object.assign(node, this.specifiedOptions[key]);\n }\n else {\n this.specifiedOptions[key] = node;\n }\n let redis;\n if (this.nodes.all[key]) {\n redis = this.nodes.all[key];\n if (redis.options.readOnly !== readOnly) {\n redis.options.readOnly = readOnly;\n debug(\"Change role of %s to %s\", key, readOnly ? \"slave\" : \"master\");\n redis[readOnly ? \"readonly\" : \"readwrite\"]().catch(utils_1.noop);\n if (readOnly) {\n delete this.nodes.master[key];\n this.nodes.slave[key] = redis;\n }\n else {\n delete this.nodes.slave[key];\n this.nodes.master[key] = redis;\n }\n }\n }\n else {\n debug(\"Connecting to %s as %s\", key, readOnly ? \"slave\" : \"master\");\n redis = this.createRedisFromOptions(node, readOnly);\n this.nodes.all[key] = redis;\n this.nodes[readOnly ? \"slave\" : \"master\"][key] = redis;\n redis.once(\"end\", () => {\n this.removeNode(key);\n this.emit(\"-node\", redis, key);\n if (!Object.keys(this.nodes.all).length) {\n this.emit(\"drain\");\n }\n });\n this.emit(\"+node\", redis, key);\n redis.on(\"error\", function (error) {\n this.emit(\"nodeError\", error, key);\n });\n }\n return redis;\n }\n /**\n * Reset the pool with a set of nodes.\n * The old node will be removed.\n */\n reset(nodes) {\n debug(\"Reset with %O\", nodes);\n const newNodes = {};\n nodes.forEach((node) => {\n const key = (0, util_1.getNodeKey)(node);\n // Don't override the existing (master) node\n // when the current one is slave.\n if (!(node.readOnly && newNodes[key])) {\n newNodes[key] = node;\n }\n });\n Object.keys(this.nodes.all).forEach((key) => {\n if (!newNodes[key]) {\n debug(\"Disconnect %s because the node does not hold any slot\", key);\n this.nodes.all[key].disconnect();\n this.removeNode(key);\n }\n });\n Object.keys(newNodes).forEach((key) => {\n const node = newNodes[key];\n this.findOrCreate(node, node.readOnly);\n });\n }\n /**\n * Remove a node from the pool.\n */\n removeNode(key) {\n const { nodes } = this;\n if (nodes.all[key]) {\n debug(\"Remove %s from the pool\", key);\n delete nodes.all[key];\n }\n delete nodes.master[key];\n delete nodes.slave[key];\n }\n}\nexports.default = ConnectionPool;\n","'use strict';\n\n/**\n * Custom implementation of a double ended queue.\n */\nfunction Denque(array, options) {\n var options = options || {};\n this._capacity = options.capacity;\n\n this._head = 0;\n this._tail = 0;\n\n if (Array.isArray(array)) {\n this._fromArray(array);\n } else {\n this._capacityMask = 0x3;\n this._list = new Array(4);\n }\n}\n\n/**\n * --------------\n * PUBLIC API\n * -------------\n */\n\n/**\n * Returns the item at the specified index from the list.\n * 0 is the first element, 1 is the second, and so on...\n * Elements at negative values are that many from the end: -1 is one before the end\n * (the last element), -2 is two before the end (one before last), etc.\n * @param index\n * @returns {*}\n */\nDenque.prototype.peekAt = function peekAt(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var len = this.size();\n if (i >= len || i < -len) return undefined;\n if (i < 0) i += len;\n i = (this._head + i) & this._capacityMask;\n return this._list[i];\n};\n\n/**\n * Alias for peekAt()\n * @param i\n * @returns {*}\n */\nDenque.prototype.get = function get(i) {\n return this.peekAt(i);\n};\n\n/**\n * Returns the first item in the list without removing it.\n * @returns {*}\n */\nDenque.prototype.peek = function peek() {\n if (this._head === this._tail) return undefined;\n return this._list[this._head];\n};\n\n/**\n * Alias for peek()\n * @returns {*}\n */\nDenque.prototype.peekFront = function peekFront() {\n return this.peek();\n};\n\n/**\n * Returns the item that is at the back of the queue without removing it.\n * Uses peekAt(-1)\n */\nDenque.prototype.peekBack = function peekBack() {\n return this.peekAt(-1);\n};\n\n/**\n * Returns the current length of the queue\n * @return {Number}\n */\nObject.defineProperty(Denque.prototype, 'length', {\n get: function length() {\n return this.size();\n }\n});\n\n/**\n * Return the number of items on the list, or 0 if empty.\n * @returns {number}\n */\nDenque.prototype.size = function size() {\n if (this._head === this._tail) return 0;\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Add an item at the beginning of the list.\n * @param item\n */\nDenque.prototype.unshift = function unshift(item) {\n if (arguments.length === 0) return this.size();\n var len = this._list.length;\n this._head = (this._head - 1 + len) & this._capacityMask;\n this._list[this._head] = item;\n if (this._tail === this._head) this._growArray();\n if (this._capacity && this.size() > this._capacity) this.pop();\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the first item on the list,\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.shift = function shift() {\n var head = this._head;\n if (head === this._tail) return undefined;\n var item = this._list[head];\n this._list[head] = undefined;\n this._head = (head + 1) & this._capacityMask;\n if (head < 2 && this._tail > 10000 && this._tail <= this._list.length >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Add an item to the bottom of the list.\n * @param item\n */\nDenque.prototype.push = function push(item) {\n if (arguments.length === 0) return this.size();\n var tail = this._tail;\n this._list[tail] = item;\n this._tail = (tail + 1) & this._capacityMask;\n if (this._tail === this._head) {\n this._growArray();\n }\n if (this._capacity && this.size() > this._capacity) {\n this.shift();\n }\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the last item on the list.\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.pop = function pop() {\n var tail = this._tail;\n if (tail === this._head) return undefined;\n var len = this._list.length;\n this._tail = (tail - 1 + len) & this._capacityMask;\n var item = this._list[this._tail];\n this._list[this._tail] = undefined;\n if (this._head < 2 && tail > 10000 && tail <= len >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Remove and return the item at the specified index from the list.\n * Returns undefined if the list is empty.\n * @param index\n * @returns {*}\n */\nDenque.prototype.removeOne = function removeOne(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size) return void 0;\n if (i < 0) i += size;\n i = (this._head + i) & this._capacityMask;\n var item = this._list[i];\n var k;\n if (index < size / 2) {\n for (k = index; k > 0; k--) {\n this._list[i] = this._list[i = (i - 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._head = (this._head + 1 + len) & this._capacityMask;\n } else {\n for (k = size - 1 - index; k > 0; k--) {\n this._list[i] = this._list[i = (i + 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._tail = (this._tail - 1 + len) & this._capacityMask;\n }\n return item;\n};\n\n/**\n * Remove number of items from the specified index from the list.\n * Returns array of removed items.\n * Returns undefined if the list is empty.\n * @param index\n * @param count\n * @returns {array}\n */\nDenque.prototype.remove = function remove(index, count) {\n var i = index;\n var removed;\n var del_count = count;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size || count < 1) return void 0;\n if (i < 0) i += size;\n if (count === 1 || !count) {\n removed = new Array(1);\n removed[0] = this.removeOne(i);\n return removed;\n }\n if (i === 0 && i + count >= size) {\n removed = this.toArray();\n this.clear();\n return removed;\n }\n if (i + count > size) count = size - i;\n var k;\n removed = new Array(count);\n for (k = 0; k < count; k++) {\n removed[k] = this._list[(this._head + i + k) & this._capacityMask];\n }\n i = (this._head + i) & this._capacityMask;\n if (index + count === size) {\n this._tail = (this._tail - count + len) & this._capacityMask;\n for (k = count; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (index === 0) {\n this._head = (this._head + count + len) & this._capacityMask;\n for (k = count - 1; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (i < size / 2) {\n this._head = (this._head + index + count + len) & this._capacityMask;\n for (k = index; k > 0; k--) {\n this.unshift(this._list[i = (i - 1 + len) & this._capacityMask]);\n }\n i = (this._head - 1 + len) & this._capacityMask;\n while (del_count > 0) {\n this._list[i = (i - 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n if (index < 0) this._tail = i;\n } else {\n this._tail = i;\n i = (i + count + len) & this._capacityMask;\n for (k = size - (count + index); k > 0; k--) {\n this.push(this._list[i++]);\n }\n i = this._tail;\n while (del_count > 0) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n }\n if (this._head < 2 && this._tail > 10000 && this._tail <= len >>> 2) this._shrinkArray();\n return removed;\n};\n\n/**\n * Native splice implementation.\n * Remove number of items from the specified index from the list and/or add new elements.\n * Returns array of removed items or empty array if count == 0.\n * Returns undefined if the list is empty.\n *\n * @param index\n * @param count\n * @param {...*} [elements]\n * @returns {array}\n */\nDenque.prototype.splice = function splice(index, count) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var size = this.size();\n if (i < 0) i += size;\n if (i > size) return void 0;\n if (arguments.length > 2) {\n var k;\n var temp;\n var removed;\n var arg_len = arguments.length;\n var len = this._list.length;\n var arguments_index = 2;\n if (!size || i < size / 2) {\n temp = new Array(i);\n for (k = 0; k < i; k++) {\n temp[k] = this._list[(this._head + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i > 0) {\n this._head = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._head = (this._head + i + len) & this._capacityMask;\n }\n while (arg_len > arguments_index) {\n this.unshift(arguments[--arg_len]);\n }\n for (k = i; k > 0; k--) {\n this.unshift(temp[k - 1]);\n }\n } else {\n temp = new Array(size - (i + count));\n var leng = temp.length;\n for (k = 0; k < leng; k++) {\n temp[k] = this._list[(this._head + i + count + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i != size) {\n this._tail = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._tail = (this._tail - leng + len) & this._capacityMask;\n }\n while (arguments_index < arg_len) {\n this.push(arguments[arguments_index++]);\n }\n for (k = 0; k < leng; k++) {\n this.push(temp[k]);\n }\n }\n return removed;\n } else {\n return this.remove(i, count);\n }\n};\n\n/**\n * Soft clear - does not reset capacity.\n */\nDenque.prototype.clear = function clear() {\n this._list = new Array(this._list.length);\n this._head = 0;\n this._tail = 0;\n};\n\n/**\n * Returns true or false whether the list is empty.\n * @returns {boolean}\n */\nDenque.prototype.isEmpty = function isEmpty() {\n return this._head === this._tail;\n};\n\n/**\n * Returns an array of all queue items.\n * @returns {Array}\n */\nDenque.prototype.toArray = function toArray() {\n return this._copyArray(false);\n};\n\n/**\n * -------------\n * INTERNALS\n * -------------\n */\n\n/**\n * Fills the queue with items from an array\n * For use in the constructor\n * @param array\n * @private\n */\nDenque.prototype._fromArray = function _fromArray(array) {\n var length = array.length;\n var capacity = this._nextPowerOf2(length);\n\n this._list = new Array(capacity);\n this._capacityMask = capacity - 1;\n this._tail = length;\n\n for (var i = 0; i < length; i++) this._list[i] = array[i];\n};\n\n/**\n *\n * @param fullCopy\n * @param size Initialize the array with a specific size. Will default to the current list size\n * @returns {Array}\n * @private\n */\nDenque.prototype._copyArray = function _copyArray(fullCopy, size) {\n var src = this._list;\n var capacity = src.length;\n var length = this.length;\n size = size | length;\n\n // No prealloc requested and the buffer is contiguous\n if (size == length && this._head < this._tail) {\n // Simply do a fast slice copy\n return this._list.slice(this._head, this._tail);\n }\n\n var dest = new Array(size);\n\n var k = 0;\n var i;\n if (fullCopy || this._head > this._tail) {\n for (i = this._head; i < capacity; i++) dest[k++] = src[i];\n for (i = 0; i < this._tail; i++) dest[k++] = src[i];\n } else {\n for (i = this._head; i < this._tail; i++) dest[k++] = src[i];\n }\n\n return dest;\n}\n\n/**\n * Grows the internal list array.\n * @private\n */\nDenque.prototype._growArray = function _growArray() {\n if (this._head != 0) {\n // double array size and copy existing data, head to end, then beginning to tail.\n var newList = this._copyArray(true, this._list.length << 1);\n\n this._tail = this._list.length;\n this._head = 0;\n\n this._list = newList;\n } else {\n this._tail = this._list.length;\n this._list.length <<= 1;\n }\n\n this._capacityMask = (this._capacityMask << 1) | 1;\n};\n\n/**\n * Shrinks the internal list array.\n * @private\n */\nDenque.prototype._shrinkArray = function _shrinkArray() {\n this._list.length >>>= 1;\n this._capacityMask >>>= 1;\n};\n\n/**\n * Find the next power of 2, at least 4\n * @private\n * @param {number} num \n * @returns {number}\n */\nDenque.prototype._nextPowerOf2 = function _nextPowerOf2(num) {\n var log2 = Math.log(num) / Math.log(2);\n var nextPow2 = 1 << (log2 + 1);\n\n return Math.max(nextPow2, 4);\n}\n\nmodule.exports = Denque;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"../utils\");\nconst Deque = require(\"denque\");\nconst debug = (0, utils_1.Debug)(\"delayqueue\");\n/**\n * Queue that runs items after specified duration\n */\nclass DelayQueue {\n constructor() {\n this.queues = {};\n this.timeouts = {};\n }\n /**\n * Add a new item to the queue\n *\n * @param bucket bucket name\n * @param item function that will run later\n * @param options\n */\n push(bucket, item, options) {\n const callback = options.callback || process.nextTick;\n if (!this.queues[bucket]) {\n this.queues[bucket] = new Deque();\n }\n const queue = this.queues[bucket];\n queue.push(item);\n if (!this.timeouts[bucket]) {\n this.timeouts[bucket] = setTimeout(() => {\n callback(() => {\n this.timeouts[bucket] = null;\n this.execute(bucket);\n });\n }, options.timeout);\n }\n }\n execute(bucket) {\n const queue = this.queues[bucket];\n if (!queue) {\n return;\n }\n const { length } = queue;\n if (!length) {\n return;\n }\n debug(\"send %d commands in %s queue\", length, bucket);\n this.queues[bucket] = null;\n while (queue.length > 0) {\n queue.shift()();\n }\n }\n}\nexports.default = DelayQueue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"../utils\");\nconst ClusterSubscriber_1 = require(\"./ClusterSubscriber\");\nconst ConnectionPool_1 = require(\"./ConnectionPool\");\nconst util_1 = require(\"./util\");\nconst calculateSlot = require(\"cluster-key-slot\");\nconst debug = (0, utils_1.Debug)(\"cluster:subscriberGroup\");\n/**\n * Redis differs between \"normal\" and sharded PubSub. If using the \"normal\" PubSub feature, exactly one\n * ClusterSubscriber exists per cluster instance. This works because the Redis cluster bus forwards m\n * messages between shards. However, this has scalability limitations, which is the reason why the sharded\n * PubSub feature was added to Redis. With sharded PubSub, each shard is responsible for its own messages.\n * Given that, we need at least one ClusterSubscriber per master endpoint/node.\n *\n * This class leverages the previously exising ClusterSubscriber by adding support for multiple such subscribers\n * in alignment to the master nodes of the cluster. The ClusterSubscriber class was extended in a non-breaking way\n * to support this feature.\n */\nclass ClusterSubscriberGroup {\n /**\n * Register callbacks\n *\n * @param cluster\n */\n constructor(cluster) {\n this.cluster = cluster;\n this.shardedSubscribers = new Map();\n this.clusterSlots = [];\n //Simple [min, max] slot ranges aren't enough because you can migrate single slots\n this.subscriberToSlotsIndex = new Map();\n this.channels = new Map();\n cluster.on(\"+node\", (redis) => {\n this._addSubscriber(redis);\n });\n cluster.on(\"-node\", (redis) => {\n this._removeSubscriber(redis);\n });\n cluster.on(\"refresh\", () => {\n this._refreshSlots(cluster);\n });\n }\n /**\n * Get the responsible subscriber.\n *\n * Returns null if no subscriber was found\n *\n * @param slot\n */\n getResponsibleSubscriber(slot) {\n const nodeKey = this.clusterSlots[slot][0];\n return this.shardedSubscribers.get(nodeKey);\n }\n /**\n * Adds a channel for which this subscriber group is responsible\n *\n * @param channels\n */\n addChannels(channels) {\n const slot = calculateSlot(channels[0]);\n //Check if the all channels belong to the same slot and otherwise reject the operation\n channels.forEach((c) => {\n if (calculateSlot(c) != slot)\n return -1;\n });\n const currChannels = this.channels.get(slot);\n if (!currChannels) {\n this.channels.set(slot, channels);\n }\n else {\n this.channels.set(slot, currChannels.concat(channels));\n }\n return [...this.channels.values()].flatMap(v => v).length;\n }\n /**\n * Removes channels for which the subscriber group is responsible by optionally unsubscribing\n * @param channels\n */\n removeChannels(channels) {\n const slot = calculateSlot(channels[0]);\n //Check if the all channels belong to the same slot and otherwise reject the operation\n channels.forEach((c) => {\n if (calculateSlot(c) != slot)\n return -1;\n });\n const slotChannels = this.channels.get(slot);\n if (slotChannels) {\n const updatedChannels = slotChannels.filter(c => !channels.includes(c));\n this.channels.set(slot, updatedChannels);\n }\n return [...this.channels.values()].flatMap(v => v).length;\n }\n /**\n * Disconnect all subscribers\n */\n stop() {\n for (const s of this.shardedSubscribers.values()) {\n s.stop();\n }\n }\n /**\n * Start all not yet started subscribers\n */\n start() {\n for (const s of this.shardedSubscribers.values()) {\n if (!s.isStarted()) {\n s.start();\n }\n }\n }\n /**\n * Add a subscriber to the group of subscribers\n *\n * @param redis\n */\n _addSubscriber(redis) {\n const pool = new ConnectionPool_1.default(redis.options);\n if (pool.addMasterNode(redis)) {\n const sub = new ClusterSubscriber_1.default(pool, this.cluster, true);\n const nodeKey = (0, util_1.getNodeKey)(redis.options);\n this.shardedSubscribers.set(nodeKey, sub);\n sub.start();\n // We need to attempt to resubscribe them in case the new node serves their slot\n this._resubscribe();\n this.cluster.emit(\"+subscriber\");\n return sub;\n }\n return null;\n }\n /**\n * Removes a subscriber from the group\n * @param redis\n */\n _removeSubscriber(redis) {\n const nodeKey = (0, util_1.getNodeKey)(redis.options);\n const sub = this.shardedSubscribers.get(nodeKey);\n if (sub) {\n sub.stop();\n this.shardedSubscribers.delete(nodeKey);\n // Even though the subscriber to this node is going down, we might have another subscriber\n // handling the same slots, so we need to attempt to subscribe the orphaned channels\n this._resubscribe();\n this.cluster.emit(\"-subscriber\");\n }\n return this.shardedSubscribers;\n }\n /**\n * Refreshes the subscriber-related slot ranges\n *\n * Returns false if no refresh was needed\n *\n * @param cluster\n */\n _refreshSlots(cluster) {\n //If there was an actual change, then reassign the slot ranges\n if (this._slotsAreEqual(cluster.slots)) {\n debug(\"Nothing to refresh because the new cluster map is equal to the previous one.\");\n }\n else {\n debug(\"Refreshing the slots of the subscriber group.\");\n //Rebuild the slots index\n this.subscriberToSlotsIndex = new Map();\n for (let slot = 0; slot < cluster.slots.length; slot++) {\n const node = cluster.slots[slot][0];\n if (!this.subscriberToSlotsIndex.has(node)) {\n this.subscriberToSlotsIndex.set(node, []);\n }\n this.subscriberToSlotsIndex.get(node).push(Number(slot));\n }\n //Update the subscribers from the index\n this._resubscribe();\n //Update the cached slots map\n this.clusterSlots = JSON.parse(JSON.stringify(cluster.slots));\n this.cluster.emit(\"subscribersReady\");\n return true;\n }\n return false;\n }\n /**\n * Resubscribes to the previous channels\n *\n * @private\n */\n _resubscribe() {\n if (this.shardedSubscribers) {\n this.shardedSubscribers.forEach((s, nodeKey) => {\n const subscriberSlots = this.subscriberToSlotsIndex.get(nodeKey);\n if (subscriberSlots) {\n //More for debugging purposes\n s.associateSlotRange(subscriberSlots);\n //Resubscribe on the underlying connection\n subscriberSlots.forEach((ss) => {\n //Might return null if being disconnected\n const redis = s.getInstance();\n const channels = this.channels.get(ss);\n if (channels && channels.length > 0) {\n //Try to subscribe now\n if (redis) {\n redis.ssubscribe(channels);\n //If the instance isn't ready yet, then register the re-subscription for later\n redis.on(\"ready\", () => {\n redis.ssubscribe(channels);\n });\n }\n }\n });\n }\n });\n }\n }\n /**\n * Deep equality of the cluster slots objects\n *\n * @param other\n * @private\n */\n _slotsAreEqual(other) {\n if (this.clusterSlots === undefined)\n return false;\n else\n return JSON.stringify(this.clusterSlots) === JSON.stringify(other);\n }\n}\nexports.default = ClusterSubscriberGroup;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst events_1 = require(\"events\");\nconst redis_errors_1 = require(\"redis-errors\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst Command_1 = require(\"../Command\");\nconst ClusterAllFailedError_1 = require(\"../errors/ClusterAllFailedError\");\nconst Redis_1 = require(\"../Redis\");\nconst ScanStream_1 = require(\"../ScanStream\");\nconst transaction_1 = require(\"../transaction\");\nconst utils_1 = require(\"../utils\");\nconst applyMixin_1 = require(\"../utils/applyMixin\");\nconst Commander_1 = require(\"../utils/Commander\");\nconst ClusterOptions_1 = require(\"./ClusterOptions\");\nconst ClusterSubscriber_1 = require(\"./ClusterSubscriber\");\nconst ConnectionPool_1 = require(\"./ConnectionPool\");\nconst DelayQueue_1 = require(\"./DelayQueue\");\nconst util_1 = require(\"./util\");\nconst Deque = require(\"denque\");\nconst ClusterSubscriberGroup_1 = require(\"./ClusterSubscriberGroup\");\nconst debug = (0, utils_1.Debug)(\"cluster\");\nconst REJECT_OVERWRITTEN_COMMANDS = new WeakSet();\n/**\n * Client for the official Redis Cluster\n */\nclass Cluster extends Commander_1.default {\n /**\n * Creates an instance of Cluster.\n */\n //TODO: Add an option that enables or disables sharded PubSub\n constructor(startupNodes, options = {}) {\n super();\n this.slots = [];\n /**\n * @ignore\n */\n this._groupsIds = {};\n /**\n * @ignore\n */\n this._groupsBySlot = Array(16384);\n /**\n * @ignore\n */\n this.isCluster = true;\n this.retryAttempts = 0;\n this.delayQueue = new DelayQueue_1.default();\n this.offlineQueue = new Deque();\n this.isRefreshing = false;\n this._refreshSlotsCacheCallbacks = [];\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this._readyDelayedCallbacks = [];\n /**\n * Every time Cluster#connect() is called, this value will be\n * auto-incrementing. The purpose of this value is used for\n * discarding previous connect attampts when creating a new\n * connection.\n */\n this.connectionEpoch = 0;\n events_1.EventEmitter.call(this);\n this.startupNodes = startupNodes;\n this.options = (0, utils_1.defaults)({}, options, ClusterOptions_1.DEFAULT_CLUSTER_OPTIONS, this.options);\n if (this.options.shardedSubscribers == true)\n this.shardedSubscribers = new ClusterSubscriberGroup_1.default(this);\n if (this.options.redisOptions &&\n this.options.redisOptions.keyPrefix &&\n !this.options.keyPrefix) {\n this.options.keyPrefix = this.options.redisOptions.keyPrefix;\n }\n // validate options\n if (typeof this.options.scaleReads !== \"function\" &&\n [\"all\", \"master\", \"slave\"].indexOf(this.options.scaleReads) === -1) {\n throw new Error('Invalid option scaleReads \"' +\n this.options.scaleReads +\n '\". Expected \"all\", \"master\", \"slave\" or a custom function');\n }\n this.connectionPool = new ConnectionPool_1.default(this.options.redisOptions);\n this.connectionPool.on(\"-node\", (redis, key) => {\n this.emit(\"-node\", redis);\n });\n this.connectionPool.on(\"+node\", (redis) => {\n this.emit(\"+node\", redis);\n });\n this.connectionPool.on(\"drain\", () => {\n this.setStatus(\"close\");\n });\n this.connectionPool.on(\"nodeError\", (error, key) => {\n this.emit(\"node error\", error, key);\n });\n this.subscriber = new ClusterSubscriber_1.default(this.connectionPool, this);\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch((err) => {\n debug(\"connecting failed: %s\", err);\n });\n }\n }\n /**\n * Connect to a cluster\n */\n connect() {\n return new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n const epoch = ++this.connectionEpoch;\n this.setStatus(\"connecting\");\n this.resolveStartupNodeHostnames()\n .then((nodes) => {\n if (this.connectionEpoch !== epoch) {\n debug(\"discard connecting after resolving startup nodes because epoch not match: %d != %d\", epoch, this.connectionEpoch);\n reject(new redis_errors_1.RedisError(\"Connection is discarded because a new connection is made\"));\n return;\n }\n if (this.status !== \"connecting\") {\n debug(\"discard connecting after resolving startup nodes because the status changed to %s\", this.status);\n reject(new redis_errors_1.RedisError(\"Connection is aborted\"));\n return;\n }\n this.connectionPool.reset(nodes);\n const readyHandler = () => {\n this.setStatus(\"ready\");\n this.retryAttempts = 0;\n this.executeOfflineCommands();\n this.resetNodesRefreshInterval();\n resolve();\n };\n let closeListener = undefined;\n const refreshListener = () => {\n this.invokeReadyDelayedCallbacks(undefined);\n this.removeListener(\"close\", closeListener);\n this.manuallyClosing = false;\n this.setStatus(\"connect\");\n if (this.options.enableReadyCheck) {\n this.readyCheck((err, fail) => {\n if (err || fail) {\n debug(\"Ready check failed (%s). Reconnecting...\", err || fail);\n if (this.status === \"connect\") {\n this.disconnect(true);\n }\n }\n else {\n readyHandler();\n }\n });\n }\n else {\n readyHandler();\n }\n };\n closeListener = () => {\n const error = new Error(\"None of startup nodes is available\");\n this.removeListener(\"refresh\", refreshListener);\n this.invokeReadyDelayedCallbacks(error);\n reject(error);\n };\n this.once(\"refresh\", refreshListener);\n this.once(\"close\", closeListener);\n this.once(\"close\", this.handleCloseEvent.bind(this));\n this.refreshSlotsCache((err) => {\n if (err && err.message === ClusterAllFailedError_1.default.defaultMessage) {\n Redis_1.default.prototype.silentEmit.call(this, \"error\", err);\n this.connectionPool.reset([]);\n }\n });\n this.subscriber.start();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.start();\n }\n })\n .catch((err) => {\n this.setStatus(\"close\");\n this.handleCloseEvent(err);\n this.invokeReadyDelayedCallbacks(err);\n reject(err);\n });\n });\n }\n /**\n * Disconnect from every node in the cluster.\n */\n disconnect(reconnect = false) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n debug(\"Canceled reconnecting attempts\");\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.stop();\n }\n if (status === \"wait\") {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }\n else {\n this.connectionPool.reset([]);\n }\n }\n /**\n * Quit the cluster gracefully.\n */\n quit(callback) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n this.manuallyClosing = true;\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (this.options.shardedSubscribers) {\n this.shardedSubscribers.stop();\n }\n if (status === \"wait\") {\n const ret = (0, standard_as_callback_1.default)(Promise.resolve(\"OK\"), callback);\n // use setImmediate to make sure \"close\" event\n // being emitted after quit() is returned\n setImmediate(function () {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }.bind(this));\n return ret;\n }\n return (0, standard_as_callback_1.default)(Promise.all(this.nodes().map((node) => node.quit().catch((err) => {\n // Ignore the error caused by disconnecting since\n // we're disconnecting...\n if (err.message === utils_1.CONNECTION_CLOSED_ERROR_MSG) {\n return \"OK\";\n }\n throw err;\n }))).then(() => \"OK\"), callback);\n }\n /**\n * Create a new instance with the same startup nodes and options as the current one.\n *\n * @example\n * ```js\n * var cluster = new Redis.Cluster([{ host: \"127.0.0.1\", port: \"30001\" }]);\n * var anotherCluster = cluster.duplicate();\n * ```\n */\n duplicate(overrideStartupNodes = [], overrideOptions = {}) {\n const startupNodes = overrideStartupNodes.length > 0\n ? overrideStartupNodes\n : this.startupNodes.slice(0);\n const options = Object.assign({}, this.options, overrideOptions);\n return new Cluster(startupNodes, options);\n }\n /**\n * Get nodes with the specified role\n */\n nodes(role = \"all\") {\n if (role !== \"all\" && role !== \"master\" && role !== \"slave\") {\n throw new Error('Invalid role \"' + role + '\". Expected \"all\", \"master\" or \"slave\"');\n }\n return this.connectionPool.getNodes(role);\n }\n /**\n * This is needed in order not to install a listener for each auto pipeline\n *\n * @ignore\n */\n delayUntilReady(callback) {\n this._readyDelayedCallbacks.push(callback);\n }\n /**\n * Get the number of commands queued in automatic pipelines.\n *\n * This is not available (and returns 0) until the cluster is connected and slots information have been received.\n */\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Refresh the slot cache\n *\n * @ignore\n */\n refreshSlotsCache(callback) {\n if (callback) {\n this._refreshSlotsCacheCallbacks.push(callback);\n }\n if (this.isRefreshing) {\n return;\n }\n this.isRefreshing = true;\n const _this = this;\n const wrapper = (error) => {\n this.isRefreshing = false;\n for (const callback of this._refreshSlotsCacheCallbacks) {\n callback(error);\n }\n this._refreshSlotsCacheCallbacks = [];\n };\n const nodes = (0, utils_1.shuffle)(this.connectionPool.getNodes());\n let lastNodeError = null;\n function tryNode(index) {\n if (index === nodes.length) {\n const error = new ClusterAllFailedError_1.default(ClusterAllFailedError_1.default.defaultMessage, lastNodeError);\n return wrapper(error);\n }\n const node = nodes[index];\n const key = `${node.options.host}:${node.options.port}`;\n debug(\"getting slot cache from %s\", key);\n _this.getInfoFromNode(node, function (err) {\n switch (_this.status) {\n case \"close\":\n case \"end\":\n return wrapper(new Error(\"Cluster is disconnected.\"));\n case \"disconnecting\":\n return wrapper(new Error(\"Cluster is disconnecting.\"));\n }\n if (err) {\n _this.emit(\"node error\", err, key);\n lastNodeError = err;\n tryNode(index + 1);\n }\n else {\n _this.emit(\"refresh\");\n wrapper();\n }\n });\n }\n tryNode(0);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n if (this.status === \"wait\") {\n this.connect().catch(utils_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n let to = this.options.scaleReads;\n if (to !== \"master\") {\n const isCommandReadOnly = command.isReadOnly ||\n ((0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\"));\n if (!isCommandReadOnly) {\n to = \"master\";\n }\n }\n let targetSlot = node ? node.slot : command.getSlot();\n const ttl = {};\n const _this = this;\n if (!node && !REJECT_OVERWRITTEN_COMMANDS.has(command)) {\n REJECT_OVERWRITTEN_COMMANDS.add(command);\n const reject = command.reject;\n command.reject = function (err) {\n const partialTry = tryConnection.bind(null, true);\n _this.handleError(err, ttl, {\n moved: function (slot, key) {\n debug(\"command %s is moved to %s\", command.name, key);\n targetSlot = Number(slot);\n if (_this.slots[slot]) {\n _this.slots[slot][0] = key;\n }\n else {\n _this.slots[slot] = [key];\n }\n _this._groupsBySlot[slot] =\n _this._groupsIds[_this.slots[slot].join(\";\")];\n _this.connectionPool.findOrCreate(_this.natMapper(key));\n tryConnection();\n debug(\"refreshing slot caches... (triggered by MOVED error)\");\n _this.refreshSlotsCache();\n },\n ask: function (slot, key) {\n debug(\"command %s is required to ask %s:%s\", command.name, key);\n const mapped = _this.natMapper(key);\n _this.connectionPool.findOrCreate(mapped);\n tryConnection(false, `${mapped.host}:${mapped.port}`);\n },\n tryagain: partialTry,\n clusterDown: partialTry,\n connectionClosed: partialTry,\n maxRedirections: function (redirectionError) {\n reject.call(command, redirectionError);\n },\n defaults: function () {\n reject.call(command, err);\n },\n });\n };\n }\n tryConnection();\n function tryConnection(random, asking) {\n if (_this.status === \"end\") {\n command.reject(new redis_errors_1.AbortError(\"Cluster is ended.\"));\n return;\n }\n let redis;\n if (_this.status === \"ready\" || command.name === \"cluster\") {\n if (node && node.redis) {\n redis = node.redis;\n }\n else if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", command.name) ||\n Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", command.name)) {\n if (_this.options.shardedSubscribers == true &&\n (command.name == \"ssubscribe\" || command.name == \"sunsubscribe\")) {\n const sub = _this.shardedSubscribers.getResponsibleSubscriber(targetSlot);\n let status = -1;\n if (command.name == \"ssubscribe\")\n status = _this.shardedSubscribers.addChannels(command.getKeys());\n if (command.name == \"sunsubscribe\")\n status = _this.shardedSubscribers.removeChannels(command.getKeys());\n if (status !== -1) {\n redis = sub.getInstance();\n }\n else {\n command.reject(new redis_errors_1.AbortError(\"Can't add or remove the given channels. Are they in the same slot?\"));\n }\n }\n else {\n redis = _this.subscriber.getInstance();\n }\n if (!redis) {\n command.reject(new redis_errors_1.AbortError(\"No subscriber for the cluster\"));\n return;\n }\n }\n else {\n if (!random) {\n if (typeof targetSlot === \"number\" && _this.slots[targetSlot]) {\n const nodeKeys = _this.slots[targetSlot];\n if (typeof to === \"function\") {\n const nodes = nodeKeys.map(function (key) {\n return _this.connectionPool.getInstanceByKey(key);\n });\n redis = to(nodes, command);\n if (Array.isArray(redis)) {\n redis = (0, utils_1.sample)(redis);\n }\n if (!redis) {\n redis = nodes[0];\n }\n }\n else {\n let key;\n if (to === \"all\") {\n key = (0, utils_1.sample)(nodeKeys);\n }\n else if (to === \"slave\" && nodeKeys.length > 1) {\n key = (0, utils_1.sample)(nodeKeys, 1);\n }\n else {\n key = nodeKeys[0];\n }\n redis = _this.connectionPool.getInstanceByKey(key);\n }\n }\n if (asking) {\n redis = _this.connectionPool.getInstanceByKey(asking);\n redis.asking();\n }\n }\n if (!redis) {\n redis =\n (typeof to === \"function\"\n ? null\n : _this.connectionPool.getSampleInstance(to)) ||\n _this.connectionPool.getSampleInstance(\"all\");\n }\n }\n if (node && !node.redis) {\n node.redis = redis;\n }\n }\n if (redis) {\n redis.sendCommand(command, stream);\n }\n else if (_this.options.enableOfflineQueue) {\n _this.offlineQueue.push({\n command: command,\n stream: stream,\n node: node,\n });\n }\n else {\n command.reject(new Error(\"Cluster isn't ready and enableOfflineQueue options is false\"));\n }\n }\n return command.promise;\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * @ignore\n */\n handleError(error, ttl, handlers) {\n if (typeof ttl.value === \"undefined\") {\n ttl.value = this.options.maxRedirections;\n }\n else {\n ttl.value -= 1;\n }\n if (ttl.value <= 0) {\n handlers.maxRedirections(new Error(\"Too many Cluster redirections. Last error: \" + error));\n return;\n }\n const errv = error.message.split(\" \");\n if (errv[0] === \"MOVED\") {\n const timeout = this.options.retryDelayOnMoved;\n if (timeout && typeof timeout === \"number\") {\n this.delayQueue.push(\"moved\", handlers.moved.bind(null, errv[1], errv[2]), { timeout });\n }\n else {\n handlers.moved(errv[1], errv[2]);\n }\n }\n else if (errv[0] === \"ASK\") {\n handlers.ask(errv[1], errv[2]);\n }\n else if (errv[0] === \"TRYAGAIN\") {\n this.delayQueue.push(\"tryagain\", handlers.tryagain, {\n timeout: this.options.retryDelayOnTryAgain,\n });\n }\n else if (errv[0] === \"CLUSTERDOWN\" &&\n this.options.retryDelayOnClusterDown > 0) {\n this.delayQueue.push(\"clusterdown\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnClusterDown,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else if (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG &&\n this.options.retryDelayOnFailover > 0 &&\n this.status === \"ready\") {\n this.delayQueue.push(\"failover\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnFailover,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else {\n handlers.defaults();\n }\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n clearNodesRefreshInterval() {\n if (this.slotsTimer) {\n clearTimeout(this.slotsTimer);\n this.slotsTimer = null;\n }\n }\n resetNodesRefreshInterval() {\n if (this.slotsTimer || !this.options.slotsRefreshInterval) {\n return;\n }\n const nextRound = () => {\n this.slotsTimer = setTimeout(() => {\n debug('refreshing slot caches... (triggered by \"slotsRefreshInterval\" option)');\n this.refreshSlotsCache(() => {\n nextRound();\n });\n }, this.options.slotsRefreshInterval);\n };\n nextRound();\n }\n /**\n * Change cluster instance's status\n */\n setStatus(status) {\n debug(\"status: %s -> %s\", this.status || \"[empty]\", status);\n this.status = status;\n process.nextTick(() => {\n this.emit(status);\n });\n }\n /**\n * Called when closed to check whether a reconnection should be made\n */\n handleCloseEvent(reason) {\n if (reason) {\n debug(\"closed because %s\", reason);\n }\n let retryDelay;\n if (!this.manuallyClosing &&\n typeof this.options.clusterRetryStrategy === \"function\") {\n retryDelay = this.options.clusterRetryStrategy.call(this, ++this.retryAttempts, reason);\n }\n if (typeof retryDelay === \"number\") {\n this.setStatus(\"reconnecting\");\n this.reconnectTimeout = setTimeout(() => {\n this.reconnectTimeout = null;\n debug(\"Cluster is disconnected. Retrying after %dms\", retryDelay);\n this.connect().catch(function (err) {\n debug(\"Got error %s when reconnecting. Ignoring...\", err);\n });\n }, retryDelay);\n }\n else {\n this.setStatus(\"end\");\n this.flushQueue(new Error(\"None of startup nodes is available\"));\n }\n }\n /**\n * Flush offline queue with error.\n */\n flushQueue(error) {\n let item;\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n executeOfflineCommands() {\n if (this.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", this.offlineQueue.length);\n const offlineQueue = this.offlineQueue;\n this.resetOfflineQueue();\n let item;\n while ((item = offlineQueue.shift())) {\n this.sendCommand(item.command, item.stream, item.node);\n }\n }\n }\n natMapper(nodeKey) {\n const key = typeof nodeKey === \"string\"\n ? nodeKey\n : `${nodeKey.host}:${nodeKey.port}`;\n let mapped = null;\n if (this.options.natMap && typeof this.options.natMap === \"function\") {\n mapped = this.options.natMap(key);\n }\n else if (this.options.natMap && typeof this.options.natMap === \"object\") {\n mapped = this.options.natMap[key];\n }\n if (mapped) {\n debug(\"NAT mapping %s -> %O\", key, mapped);\n return Object.assign({}, mapped);\n }\n return typeof nodeKey === \"string\"\n ? (0, util_1.nodeKeyToRedisOptions)(nodeKey)\n : nodeKey;\n }\n getInfoFromNode(redis, callback) {\n if (!redis) {\n return callback(new Error(\"Node is disconnected\"));\n }\n // Use a duplication of the connection to avoid\n // timeouts when the connection is in the blocking\n // mode (e.g. waiting for BLPOP).\n const duplicatedConnection = redis.duplicate({\n enableOfflineQueue: true,\n enableReadyCheck: false,\n retryStrategy: null,\n connectionName: (0, util_1.getConnectionName)(\"refresher\", this.options.redisOptions && this.options.redisOptions.connectionName),\n });\n // Ignore error events since we will handle\n // exceptions for the CLUSTER SLOTS command.\n duplicatedConnection.on(\"error\", utils_1.noop);\n duplicatedConnection.cluster(\"SLOTS\", (0, utils_1.timeout)((err, result) => {\n duplicatedConnection.disconnect();\n if (err) {\n debug(\"error encountered running CLUSTER.SLOTS: %s\", err);\n return callback(err);\n }\n if (this.status === \"disconnecting\" ||\n this.status === \"close\" ||\n this.status === \"end\") {\n debug(\"ignore CLUSTER.SLOTS results (count: %d) since cluster status is %s\", result.length, this.status);\n callback();\n return;\n }\n const nodes = [];\n debug(\"cluster slots result count: %d\", result.length);\n for (let i = 0; i < result.length; ++i) {\n const items = result[i];\n const slotRangeStart = items[0];\n const slotRangeEnd = items[1];\n const keys = [];\n for (let j = 2; j < items.length; j++) {\n if (!items[j][0]) {\n continue;\n }\n const node = this.natMapper({\n host: items[j][0],\n port: items[j][1],\n });\n node.readOnly = j !== 2;\n nodes.push(node);\n keys.push(node.host + \":\" + node.port);\n }\n debug(\"cluster slots result [%d]: slots %d~%d served by %s\", i, slotRangeStart, slotRangeEnd, keys);\n for (let slot = slotRangeStart; slot <= slotRangeEnd; slot++) {\n this.slots[slot] = keys;\n }\n }\n // Assign to each node keys a numeric value to make autopipeline comparison faster.\n this._groupsIds = Object.create(null);\n let j = 0;\n for (let i = 0; i < 16384; i++) {\n const target = (this.slots[i] || []).join(\";\");\n if (!target.length) {\n this._groupsBySlot[i] = undefined;\n continue;\n }\n if (!this._groupsIds[target]) {\n this._groupsIds[target] = ++j;\n }\n this._groupsBySlot[i] = this._groupsIds[target];\n }\n this.connectionPool.reset(nodes);\n callback();\n }, this.options.slotsRefreshTimeout));\n }\n invokeReadyDelayedCallbacks(err) {\n for (const c of this._readyDelayedCallbacks) {\n process.nextTick(c, err);\n }\n this._readyDelayedCallbacks = [];\n }\n /**\n * Check whether Cluster is able to process commands\n */\n readyCheck(callback) {\n this.cluster(\"INFO\", (err, res) => {\n if (err) {\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback();\n }\n let state;\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const parts = lines[i].split(\":\");\n if (parts[0] === \"cluster_state\") {\n state = parts[1];\n break;\n }\n }\n if (state === \"fail\") {\n debug(\"cluster state not ok (%s)\", state);\n callback(null, state);\n }\n else {\n callback();\n }\n });\n }\n resolveSrv(hostname) {\n return new Promise((resolve, reject) => {\n this.options.resolveSrv(hostname, (err, records) => {\n if (err) {\n return reject(err);\n }\n const self = this, groupedRecords = (0, util_1.groupSrvRecords)(records), sortedKeys = Object.keys(groupedRecords).sort((a, b) => parseInt(a) - parseInt(b));\n function tryFirstOne(err) {\n if (!sortedKeys.length) {\n return reject(err);\n }\n const key = sortedKeys[0], group = groupedRecords[key], record = (0, util_1.weightSrvRecords)(group);\n if (!group.records.length) {\n sortedKeys.shift();\n }\n self.dnsLookup(record.name).then((host) => resolve({\n host,\n port: record.port,\n }), tryFirstOne);\n }\n tryFirstOne();\n });\n });\n }\n dnsLookup(hostname) {\n return new Promise((resolve, reject) => {\n this.options.dnsLookup(hostname, (err, address) => {\n if (err) {\n debug(\"failed to resolve hostname %s to IP: %s\", hostname, err.message);\n reject(err);\n }\n else {\n debug(\"resolved hostname %s to IP %s\", hostname, address);\n resolve(address);\n }\n });\n });\n }\n /**\n * Normalize startup nodes, and resolving hostnames to IPs.\n *\n * This process happens every time when #connect() is called since\n * #startupNodes and DNS records may chanage.\n */\n async resolveStartupNodeHostnames() {\n if (!Array.isArray(this.startupNodes) || this.startupNodes.length === 0) {\n throw new Error(\"`startupNodes` should contain at least one node.\");\n }\n const startupNodes = (0, util_1.normalizeNodeOptions)(this.startupNodes);\n const hostnames = (0, util_1.getUniqueHostnamesFromOptions)(startupNodes);\n if (hostnames.length === 0) {\n return startupNodes;\n }\n const configs = await Promise.all(hostnames.map((this.options.useSRVRecords ? this.resolveSrv : this.dnsLookup).bind(this)));\n const hostnameToConfig = (0, utils_1.zipMap)(hostnames, configs);\n return startupNodes.map((node) => {\n const config = hostnameToConfig.get(node.host);\n if (!config) {\n return node;\n }\n if (this.options.useSRVRecords) {\n return Object.assign({}, node, config);\n }\n return Object.assign({}, node, { host: config });\n });\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n}\n(0, applyMixin_1.default)(Cluster, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Cluster.prototype);\nexports.default = Cluster;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"../utils\");\nconst debug = (0, utils_1.Debug)(\"AbstractConnector\");\nclass AbstractConnector {\n constructor(disconnectTimeout) {\n this.connecting = false;\n this.disconnectTimeout = disconnectTimeout;\n }\n check(info) {\n return true;\n }\n disconnect() {\n this.connecting = false;\n if (this.stream) {\n const stream = this.stream; // Make sure callbacks refer to the same instance\n const timeout = setTimeout(() => {\n debug(\"stream %s:%s still open, destroying it\", stream.remoteAddress, stream.remotePort);\n stream.destroy();\n }, this.disconnectTimeout);\n stream.on(\"close\", () => clearTimeout(timeout));\n stream.end();\n }\n }\n}\nexports.default = AbstractConnector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst net_1 = require(\"net\");\nconst tls_1 = require(\"tls\");\nconst utils_1 = require(\"../utils\");\nconst AbstractConnector_1 = require(\"./AbstractConnector\");\nclass StandaloneConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n }\n connect(_) {\n const { options } = this;\n this.connecting = true;\n let connectionOptions;\n if (\"path\" in options && options.path) {\n connectionOptions = {\n path: options.path,\n };\n }\n else {\n connectionOptions = {};\n if (\"port\" in options && options.port != null) {\n connectionOptions.port = options.port;\n }\n if (\"host\" in options && options.host != null) {\n connectionOptions.host = options.host;\n }\n if (\"family\" in options && options.family != null) {\n connectionOptions.family = options.family;\n }\n }\n if (options.tls) {\n Object.assign(connectionOptions, options.tls);\n }\n // TODO:\n // We use native Promise here since other Promise\n // implementation may use different schedulers that\n // cause issue when the stream is resolved in the\n // next tick.\n // Should use the provided promise in the next major\n // version and do not connect before resolved.\n return new Promise((resolve, reject) => {\n process.nextTick(() => {\n if (!this.connecting) {\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return;\n }\n try {\n if (options.tls) {\n this.stream = (0, tls_1.connect)(connectionOptions);\n }\n else {\n this.stream = (0, net_1.createConnection)(connectionOptions);\n }\n }\n catch (err) {\n reject(err);\n return;\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n resolve(this.stream);\n });\n });\n }\n}\nexports.default = StandaloneConnector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isSentinelEql(a, b) {\n return ((a.host || \"127.0.0.1\") === (b.host || \"127.0.0.1\") &&\n (a.port || 26379) === (b.port || 26379));\n}\nclass SentinelIterator {\n constructor(sentinels) {\n this.cursor = 0;\n this.sentinels = sentinels.slice(0);\n }\n next() {\n const done = this.cursor >= this.sentinels.length;\n return { done, value: done ? undefined : this.sentinels[this.cursor++] };\n }\n reset(moveCurrentEndpointToFirst) {\n if (moveCurrentEndpointToFirst &&\n this.sentinels.length > 1 &&\n this.cursor !== 1) {\n this.sentinels.unshift(...this.sentinels.splice(this.cursor - 1));\n }\n this.cursor = 0;\n }\n add(sentinel) {\n for (let i = 0; i < this.sentinels.length; i++) {\n if (isSentinelEql(sentinel, this.sentinels[i])) {\n return false;\n }\n }\n this.sentinels.push(sentinel);\n return true;\n }\n toString() {\n return `${JSON.stringify(this.sentinels)} @${this.cursor}`;\n }\n}\nexports.default = SentinelIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FailoverDetector = void 0;\nconst utils_1 = require(\"../../utils\");\nconst debug = (0, utils_1.Debug)(\"FailoverDetector\");\nconst CHANNEL_NAME = \"+switch-master\";\nclass FailoverDetector {\n // sentinels can't be used for regular commands after this\n constructor(connector, sentinels) {\n this.isDisconnected = false;\n this.connector = connector;\n this.sentinels = sentinels;\n }\n cleanup() {\n this.isDisconnected = true;\n for (const sentinel of this.sentinels) {\n sentinel.client.disconnect();\n }\n }\n async subscribe() {\n debug(\"Starting FailoverDetector\");\n const promises = [];\n for (const sentinel of this.sentinels) {\n const promise = sentinel.client.subscribe(CHANNEL_NAME).catch((err) => {\n debug(\"Failed to subscribe to failover messages on sentinel %s:%s (%s)\", sentinel.address.host || \"127.0.0.1\", sentinel.address.port || 26739, err.message);\n });\n promises.push(promise);\n sentinel.client.on(\"message\", (channel) => {\n if (!this.isDisconnected && channel === CHANNEL_NAME) {\n this.disconnect();\n }\n });\n }\n await Promise.all(promises);\n }\n disconnect() {\n // Avoid disconnecting more than once per failover.\n // A new FailoverDetector will be created after reconnecting.\n this.isDisconnected = true;\n debug(\"Failover detected, disconnecting\");\n // Will call this.cleanup()\n this.connector.disconnect();\n }\n}\nexports.FailoverDetector = FailoverDetector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SentinelIterator = void 0;\nconst net_1 = require(\"net\");\nconst utils_1 = require(\"../../utils\");\nconst tls_1 = require(\"tls\");\nconst SentinelIterator_1 = require(\"./SentinelIterator\");\nexports.SentinelIterator = SentinelIterator_1.default;\nconst AbstractConnector_1 = require(\"../AbstractConnector\");\nconst Redis_1 = require(\"../../Redis\");\nconst FailoverDetector_1 = require(\"./FailoverDetector\");\nconst debug = (0, utils_1.Debug)(\"SentinelConnector\");\nclass SentinelConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n this.emitter = null;\n this.failoverDetector = null;\n if (!this.options.sentinels.length) {\n throw new Error(\"Requires at least one sentinel to connect to.\");\n }\n if (!this.options.name) {\n throw new Error(\"Requires the name of master.\");\n }\n this.sentinelIterator = new SentinelIterator_1.default(this.options.sentinels);\n }\n check(info) {\n const roleMatches = !info.role || this.options.role === info.role;\n if (!roleMatches) {\n debug(\"role invalid, expected %s, but got %s\", this.options.role, info.role);\n // Start from the next item.\n // Note that `reset` will move the cursor to the previous element,\n // so we advance two steps here.\n this.sentinelIterator.next();\n this.sentinelIterator.next();\n this.sentinelIterator.reset(true);\n }\n return roleMatches;\n }\n disconnect() {\n super.disconnect();\n if (this.failoverDetector) {\n this.failoverDetector.cleanup();\n }\n }\n connect(eventEmitter) {\n this.connecting = true;\n this.retryAttempts = 0;\n let lastError;\n const connectToNext = async () => {\n const endpoint = this.sentinelIterator.next();\n if (endpoint.done) {\n this.sentinelIterator.reset(false);\n const retryDelay = typeof this.options.sentinelRetryStrategy === \"function\"\n ? this.options.sentinelRetryStrategy(++this.retryAttempts)\n : null;\n let errorMsg = typeof retryDelay !== \"number\"\n ? \"All sentinels are unreachable and retry is disabled.\"\n : `All sentinels are unreachable. Retrying from scratch after ${retryDelay}ms.`;\n if (lastError) {\n errorMsg += ` Last error: ${lastError.message}`;\n }\n debug(errorMsg);\n const error = new Error(errorMsg);\n if (typeof retryDelay === \"number\") {\n eventEmitter(\"error\", error);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n return connectToNext();\n }\n else {\n throw error;\n }\n }\n let resolved = null;\n let err = null;\n try {\n resolved = await this.resolve(endpoint.value);\n }\n catch (error) {\n err = error;\n }\n if (!this.connecting) {\n throw new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG);\n }\n const endpointAddress = endpoint.value.host + \":\" + endpoint.value.port;\n if (resolved) {\n debug(\"resolved: %s:%s from sentinel %s\", resolved.host, resolved.port, endpointAddress);\n if (this.options.enableTLSForSentinelMode && this.options.tls) {\n Object.assign(resolved, this.options.tls);\n this.stream = (0, tls_1.connect)(resolved);\n this.stream.once(\"secureConnect\", this.initFailoverDetector.bind(this));\n }\n else {\n this.stream = (0, net_1.createConnection)(resolved);\n this.stream.once(\"connect\", this.initFailoverDetector.bind(this));\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n return this.stream;\n }\n else {\n const errorMsg = err\n ? \"failed to connect to sentinel \" +\n endpointAddress +\n \" because \" +\n err.message\n : \"connected to sentinel \" +\n endpointAddress +\n \" successfully, but got an invalid reply: \" +\n resolved;\n debug(errorMsg);\n eventEmitter(\"sentinelError\", new Error(errorMsg));\n if (err) {\n lastError = err;\n }\n return connectToNext();\n }\n };\n return connectToNext();\n }\n async updateSentinels(client) {\n if (!this.options.updateSentinels) {\n return;\n }\n const result = await client.sentinel(\"sentinels\", this.options.name);\n if (!Array.isArray(result)) {\n return;\n }\n result\n .map(utils_1.packObject)\n .forEach((sentinel) => {\n const flags = sentinel.flags ? sentinel.flags.split(\",\") : [];\n if (flags.indexOf(\"disconnected\") === -1 &&\n sentinel.ip &&\n sentinel.port) {\n const endpoint = this.sentinelNatResolve(addressResponseToAddress(sentinel));\n if (this.sentinelIterator.add(endpoint)) {\n debug(\"adding sentinel %s:%s\", endpoint.host, endpoint.port);\n }\n }\n });\n debug(\"Updated internal sentinels: %s\", this.sentinelIterator);\n }\n async resolveMaster(client) {\n const result = await client.sentinel(\"get-master-addr-by-name\", this.options.name);\n await this.updateSentinels(client);\n return this.sentinelNatResolve(Array.isArray(result)\n ? { host: result[0], port: Number(result[1]) }\n : null);\n }\n async resolveSlave(client) {\n const result = await client.sentinel(\"slaves\", this.options.name);\n if (!Array.isArray(result)) {\n return null;\n }\n const availableSlaves = result\n .map(utils_1.packObject)\n .filter((slave) => slave.flags && !slave.flags.match(/(disconnected|s_down|o_down)/));\n return this.sentinelNatResolve(selectPreferredSentinel(availableSlaves, this.options.preferredSlaves));\n }\n sentinelNatResolve(item) {\n if (!item || !this.options.natMap)\n return item;\n const key = `${item.host}:${item.port}`;\n let result = item;\n if (typeof this.options.natMap === \"function\") {\n result = this.options.natMap(key) || item;\n }\n else if (typeof this.options.natMap === \"object\") {\n result = this.options.natMap[key] || item;\n }\n return result;\n }\n connectToSentinel(endpoint, options) {\n const redis = new Redis_1.default({\n port: endpoint.port || 26379,\n host: endpoint.host,\n username: this.options.sentinelUsername || null,\n password: this.options.sentinelPassword || null,\n family: endpoint.family ||\n // @ts-expect-error\n (\"path\" in this.options && this.options.path\n ? undefined\n : // @ts-expect-error\n this.options.family),\n tls: this.options.sentinelTLS,\n retryStrategy: null,\n enableReadyCheck: false,\n connectTimeout: this.options.connectTimeout,\n commandTimeout: this.options.sentinelCommandTimeout,\n ...options,\n });\n // @ts-expect-error\n return redis;\n }\n async resolve(endpoint) {\n const client = this.connectToSentinel(endpoint);\n // ignore the errors since resolve* methods will handle them\n client.on(\"error\", noop);\n try {\n if (this.options.role === \"slave\") {\n return await this.resolveSlave(client);\n }\n else {\n return await this.resolveMaster(client);\n }\n }\n finally {\n client.disconnect();\n }\n }\n async initFailoverDetector() {\n var _a;\n if (!this.options.failoverDetector) {\n return;\n }\n // Move the current sentinel to the first position\n this.sentinelIterator.reset(true);\n const sentinels = [];\n // In case of a large amount of sentinels, limit the number of concurrent connections\n while (sentinels.length < this.options.sentinelMaxConnections) {\n const { done, value } = this.sentinelIterator.next();\n if (done) {\n break;\n }\n const client = this.connectToSentinel(value, {\n lazyConnect: true,\n retryStrategy: this.options.sentinelReconnectStrategy,\n });\n client.on(\"reconnecting\", () => {\n var _a;\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"sentinelReconnecting\");\n });\n sentinels.push({ address: value, client });\n }\n this.sentinelIterator.reset(false);\n if (this.failoverDetector) {\n // Clean up previous detector\n this.failoverDetector.cleanup();\n }\n this.failoverDetector = new FailoverDetector_1.FailoverDetector(this, sentinels);\n await this.failoverDetector.subscribe();\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"failoverSubscribed\");\n }\n}\nexports.default = SentinelConnector;\nfunction selectPreferredSentinel(availableSlaves, preferredSlaves) {\n if (availableSlaves.length === 0) {\n return null;\n }\n let selectedSlave;\n if (typeof preferredSlaves === \"function\") {\n selectedSlave = preferredSlaves(availableSlaves);\n }\n else if (preferredSlaves !== null && typeof preferredSlaves === \"object\") {\n const preferredSlavesArray = Array.isArray(preferredSlaves)\n ? preferredSlaves\n : [preferredSlaves];\n // sort by priority\n preferredSlavesArray.sort((a, b) => {\n // default the priority to 1\n if (!a.prio) {\n a.prio = 1;\n }\n if (!b.prio) {\n b.prio = 1;\n }\n // lowest priority first\n if (a.prio < b.prio) {\n return -1;\n }\n if (a.prio > b.prio) {\n return 1;\n }\n return 0;\n });\n // loop over preferred slaves and return the first match\n for (let p = 0; p < preferredSlavesArray.length; p++) {\n for (let a = 0; a < availableSlaves.length; a++) {\n const slave = availableSlaves[a];\n if (slave.ip === preferredSlavesArray[p].ip) {\n if (slave.port === preferredSlavesArray[p].port) {\n selectedSlave = slave;\n break;\n }\n }\n }\n if (selectedSlave) {\n break;\n }\n }\n }\n // if none of the preferred slaves are available, a random available slave is returned\n if (!selectedSlave) {\n selectedSlave = (0, utils_1.sample)(availableSlaves);\n }\n return addressResponseToAddress(selectedSlave);\n}\nfunction addressResponseToAddress(input) {\n return { host: input.ip, port: Number(input.port) };\n}\nfunction noop() { }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SentinelConnector = exports.StandaloneConnector = void 0;\nconst StandaloneConnector_1 = require(\"./StandaloneConnector\");\nexports.StandaloneConnector = StandaloneConnector_1.default;\nconst SentinelConnector_1 = require(\"./SentinelConnector\");\nexports.SentinelConnector = SentinelConnector_1.default;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst redis_errors_1 = require(\"redis-errors\");\nclass MaxRetriesPerRequestError extends redis_errors_1.AbortError {\n constructor(maxRetriesPerRequest) {\n const message = `Reached the max retries per request limit (which is ${maxRetriesPerRequest}). Refer to \"maxRetriesPerRequest\" option for details.`;\n super(message);\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports.default = MaxRetriesPerRequestError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaxRetriesPerRequestError = void 0;\nconst MaxRetriesPerRequestError_1 = require(\"./MaxRetriesPerRequestError\");\nexports.MaxRetriesPerRequestError = MaxRetriesPerRequestError_1.default;\n","'use strict'\n\nconst Buffer = require('buffer').Buffer\nconst StringDecoder = require('string_decoder').StringDecoder\nconst decoder = new StringDecoder()\nconst errors = require('redis-errors')\nconst ReplyError = errors.ReplyError\nconst ParserError = errors.ParserError\nvar bufferPool = Buffer.allocUnsafe(32 * 1024)\nvar bufferOffset = 0\nvar interval = null\nvar counter = 0\nvar notDecreased = 0\n\n/**\n * Used for integer numbers only\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number}\n */\nfunction parseSimpleNumbers (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n var sign = 1\n\n if (parser.buffer[offset] === 45) {\n sign = -1\n offset++\n }\n\n while (offset < length) {\n const c1 = parser.buffer[offset++]\n if (c1 === 13) { // \\r\\n\n parser.offset = offset + 1\n return sign * number\n }\n number = (number * 10) + (c1 - 48)\n }\n}\n\n/**\n * Used for integer numbers in case of the returnNumbers option\n *\n * Reading the string as parts of n SMI is more efficient than\n * using a string directly.\n *\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|string}\n */\nfunction parseStringNumbers (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n var res = ''\n\n if (parser.buffer[offset] === 45) {\n res += '-'\n offset++\n }\n\n while (offset < length) {\n var c1 = parser.buffer[offset++]\n if (c1 === 13) { // \\r\\n\n parser.offset = offset + 1\n if (number !== 0) {\n res += number\n }\n return res\n } else if (number > 429496728) {\n res += (number * 10) + (c1 - 48)\n number = 0\n } else if (c1 === 48 && number === 0) {\n res += 0\n } else {\n number = (number * 10) + (c1 - 48)\n }\n }\n}\n\n/**\n * Parse a '+' redis simple string response but forward the offsets\n * onto convertBufferRange to generate a string.\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|string|Buffer}\n */\nfunction parseSimpleString (parser) {\n const start = parser.offset\n const buffer = parser.buffer\n const length = buffer.length - 1\n var offset = start\n\n while (offset < length) {\n if (buffer[offset++] === 13) { // \\r\\n\n parser.offset = offset + 1\n if (parser.optionReturnBuffers === true) {\n return parser.buffer.slice(start, offset - 1)\n }\n return parser.buffer.toString('utf8', start, offset - 1)\n }\n }\n}\n\n/**\n * Returns the read length\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number}\n */\nfunction parseLength (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n\n while (offset < length) {\n const c1 = parser.buffer[offset++]\n if (c1 === 13) {\n parser.offset = offset + 1\n return number\n }\n number = (number * 10) + (c1 - 48)\n }\n}\n\n/**\n * Parse a ':' redis integer response\n *\n * If stringNumbers is activated the parser always returns numbers as string\n * This is important for big numbers (number > Math.pow(2, 53)) as js numbers\n * are 64bit floating point numbers with reduced precision\n *\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number|string}\n */\nfunction parseInteger (parser) {\n if (parser.optionStringNumbers === true) {\n return parseStringNumbers(parser)\n }\n return parseSimpleNumbers(parser)\n}\n\n/**\n * Parse a '$' redis bulk string response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|null|string}\n */\nfunction parseBulkString (parser) {\n const length = parseLength(parser)\n if (length === undefined) {\n return\n }\n if (length < 0) {\n return null\n }\n const offset = parser.offset + length\n if (offset + 2 > parser.buffer.length) {\n parser.bigStrSize = offset + 2\n parser.totalChunkSize = parser.buffer.length\n parser.bufferCache.push(parser.buffer)\n return\n }\n const start = parser.offset\n parser.offset = offset + 2\n if (parser.optionReturnBuffers === true) {\n return parser.buffer.slice(start, offset)\n }\n return parser.buffer.toString('utf8', start, offset)\n}\n\n/**\n * Parse a '-' redis error response\n * @param {JavascriptRedisParser} parser\n * @returns {ReplyError}\n */\nfunction parseError (parser) {\n var string = parseSimpleString(parser)\n if (string !== undefined) {\n if (parser.optionReturnBuffers === true) {\n string = string.toString()\n }\n return new ReplyError(string)\n }\n}\n\n/**\n * Parsing error handler, resets parser buffer\n * @param {JavascriptRedisParser} parser\n * @param {number} type\n * @returns {undefined}\n */\nfunction handleError (parser, type) {\n const err = new ParserError(\n 'Protocol error, got ' + JSON.stringify(String.fromCharCode(type)) + ' as reply type byte',\n JSON.stringify(parser.buffer),\n parser.offset\n )\n parser.buffer = null\n parser.returnFatalError(err)\n}\n\n/**\n * Parse a '*' redis array response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|null|any[]}\n */\nfunction parseArray (parser) {\n const length = parseLength(parser)\n if (length === undefined) {\n return\n }\n if (length < 0) {\n return null\n }\n const responses = new Array(length)\n return parseArrayElements(parser, responses, 0)\n}\n\n/**\n * Push a partly parsed array to the stack\n *\n * @param {JavascriptRedisParser} parser\n * @param {any[]} array\n * @param {number} pos\n * @returns {undefined}\n */\nfunction pushArrayCache (parser, array, pos) {\n parser.arrayCache.push(array)\n parser.arrayPos.push(pos)\n}\n\n/**\n * Parse chunked redis array response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|any[]}\n */\nfunction parseArrayChunks (parser) {\n const tmp = parser.arrayCache.pop()\n var pos = parser.arrayPos.pop()\n if (parser.arrayCache.length) {\n const res = parseArrayChunks(parser)\n if (res === undefined) {\n pushArrayCache(parser, tmp, pos)\n return\n }\n tmp[pos++] = res\n }\n return parseArrayElements(parser, tmp, pos)\n}\n\n/**\n * Parse redis array response elements\n * @param {JavascriptRedisParser} parser\n * @param {Array} responses\n * @param {number} i\n * @returns {undefined|null|any[]}\n */\nfunction parseArrayElements (parser, responses, i) {\n const bufferLength = parser.buffer.length\n while (i < responses.length) {\n const offset = parser.offset\n if (parser.offset >= bufferLength) {\n pushArrayCache(parser, responses, i)\n return\n }\n const response = parseType(parser, parser.buffer[parser.offset++])\n if (response === undefined) {\n if (!(parser.arrayCache.length || parser.bufferCache.length)) {\n parser.offset = offset\n }\n pushArrayCache(parser, responses, i)\n return\n }\n responses[i] = response\n i++\n }\n\n return responses\n}\n\n/**\n * Called the appropriate parser for the specified type.\n *\n * 36: $\n * 43: +\n * 42: *\n * 58: :\n * 45: -\n *\n * @param {JavascriptRedisParser} parser\n * @param {number} type\n * @returns {*}\n */\nfunction parseType (parser, type) {\n switch (type) {\n case 36:\n return parseBulkString(parser)\n case 43:\n return parseSimpleString(parser)\n case 42:\n return parseArray(parser)\n case 58:\n return parseInteger(parser)\n case 45:\n return parseError(parser)\n default:\n return handleError(parser, type)\n }\n}\n\n/**\n * Decrease the bufferPool size over time\n *\n * Balance between increasing and decreasing the bufferPool.\n * Decrease the bufferPool by 10% by removing the first 10% of the current pool.\n * @returns {undefined}\n */\nfunction decreaseBufferPool () {\n if (bufferPool.length > 50 * 1024) {\n if (counter === 1 || notDecreased > counter * 2) {\n const minSliceLen = Math.floor(bufferPool.length / 10)\n const sliceLength = minSliceLen < bufferOffset\n ? bufferOffset\n : minSliceLen\n bufferOffset = 0\n bufferPool = bufferPool.slice(sliceLength, bufferPool.length)\n } else {\n notDecreased++\n counter--\n }\n } else {\n clearInterval(interval)\n counter = 0\n notDecreased = 0\n interval = null\n }\n}\n\n/**\n * Check if the requested size fits in the current bufferPool.\n * If it does not, reset and increase the bufferPool accordingly.\n *\n * @param {number} length\n * @returns {undefined}\n */\nfunction resizeBuffer (length) {\n if (bufferPool.length < length + bufferOffset) {\n const multiplier = length > 1024 * 1024 * 75 ? 2 : 3\n if (bufferOffset > 1024 * 1024 * 111) {\n bufferOffset = 1024 * 1024 * 50\n }\n bufferPool = Buffer.allocUnsafe(length * multiplier + bufferOffset)\n bufferOffset = 0\n counter++\n if (interval === null) {\n interval = setInterval(decreaseBufferPool, 50)\n }\n }\n}\n\n/**\n * Concat a bulk string containing multiple chunks\n *\n * Notes:\n * 1) The first chunk might contain the whole bulk string including the \\r\n * 2) We are only safe to fully add up elements that are neither the first nor any of the last two elements\n *\n * @param {JavascriptRedisParser} parser\n * @returns {String}\n */\nfunction concatBulkString (parser) {\n const list = parser.bufferCache\n const oldOffset = parser.offset\n var chunks = list.length\n var offset = parser.bigStrSize - parser.totalChunkSize\n parser.offset = offset\n if (offset <= 2) {\n if (chunks === 2) {\n return list[0].toString('utf8', oldOffset, list[0].length + offset - 2)\n }\n chunks--\n offset = list[list.length - 2].length + offset\n }\n var res = decoder.write(list[0].slice(oldOffset))\n for (var i = 1; i < chunks - 1; i++) {\n res += decoder.write(list[i])\n }\n res += decoder.end(list[i].slice(0, offset - 2))\n return res\n}\n\n/**\n * Concat the collected chunks from parser.bufferCache.\n *\n * Increases the bufferPool size beforehand if necessary.\n *\n * @param {JavascriptRedisParser} parser\n * @returns {Buffer}\n */\nfunction concatBulkBuffer (parser) {\n const list = parser.bufferCache\n const oldOffset = parser.offset\n const length = parser.bigStrSize - oldOffset - 2\n var chunks = list.length\n var offset = parser.bigStrSize - parser.totalChunkSize\n parser.offset = offset\n if (offset <= 2) {\n if (chunks === 2) {\n return list[0].slice(oldOffset, list[0].length + offset - 2)\n }\n chunks--\n offset = list[list.length - 2].length + offset\n }\n resizeBuffer(length)\n const start = bufferOffset\n list[0].copy(bufferPool, start, oldOffset, list[0].length)\n bufferOffset += list[0].length - oldOffset\n for (var i = 1; i < chunks - 1; i++) {\n list[i].copy(bufferPool, bufferOffset)\n bufferOffset += list[i].length\n }\n list[i].copy(bufferPool, bufferOffset, 0, offset - 2)\n bufferOffset += offset - 2\n return bufferPool.slice(start, bufferOffset)\n}\n\nclass JavascriptRedisParser {\n /**\n * Javascript Redis Parser constructor\n * @param {{returnError: Function, returnReply: Function, returnFatalError?: Function, returnBuffers: boolean, stringNumbers: boolean }} options\n * @constructor\n */\n constructor (options) {\n if (!options) {\n throw new TypeError('Options are mandatory.')\n }\n if (typeof options.returnError !== 'function' || typeof options.returnReply !== 'function') {\n throw new TypeError('The returnReply and returnError options have to be functions.')\n }\n this.setReturnBuffers(!!options.returnBuffers)\n this.setStringNumbers(!!options.stringNumbers)\n this.returnError = options.returnError\n this.returnFatalError = options.returnFatalError || options.returnError\n this.returnReply = options.returnReply\n this.reset()\n }\n\n /**\n * Reset the parser values to the initial state\n *\n * @returns {undefined}\n */\n reset () {\n this.offset = 0\n this.buffer = null\n this.bigStrSize = 0\n this.totalChunkSize = 0\n this.bufferCache = []\n this.arrayCache = []\n this.arrayPos = []\n }\n\n /**\n * Set the returnBuffers option\n *\n * @param {boolean} returnBuffers\n * @returns {undefined}\n */\n setReturnBuffers (returnBuffers) {\n if (typeof returnBuffers !== 'boolean') {\n throw new TypeError('The returnBuffers argument has to be a boolean')\n }\n this.optionReturnBuffers = returnBuffers\n }\n\n /**\n * Set the stringNumbers option\n *\n * @param {boolean} stringNumbers\n * @returns {undefined}\n */\n setStringNumbers (stringNumbers) {\n if (typeof stringNumbers !== 'boolean') {\n throw new TypeError('The stringNumbers argument has to be a boolean')\n }\n this.optionStringNumbers = stringNumbers\n }\n\n /**\n * Parse the redis buffer\n * @param {Buffer} buffer\n * @returns {undefined}\n */\n execute (buffer) {\n if (this.buffer === null) {\n this.buffer = buffer\n this.offset = 0\n } else if (this.bigStrSize === 0) {\n const oldLength = this.buffer.length\n const remainingLength = oldLength - this.offset\n const newBuffer = Buffer.allocUnsafe(remainingLength + buffer.length)\n this.buffer.copy(newBuffer, 0, this.offset, oldLength)\n buffer.copy(newBuffer, remainingLength, 0, buffer.length)\n this.buffer = newBuffer\n this.offset = 0\n if (this.arrayCache.length) {\n const arr = parseArrayChunks(this)\n if (arr === undefined) {\n return\n }\n this.returnReply(arr)\n }\n } else if (this.totalChunkSize + buffer.length >= this.bigStrSize) {\n this.bufferCache.push(buffer)\n var tmp = this.optionReturnBuffers ? concatBulkBuffer(this) : concatBulkString(this)\n this.bigStrSize = 0\n this.bufferCache = []\n this.buffer = buffer\n if (this.arrayCache.length) {\n this.arrayCache[0][this.arrayPos[0]++] = tmp\n tmp = parseArrayChunks(this)\n if (tmp === undefined) {\n return\n }\n }\n this.returnReply(tmp)\n } else {\n this.bufferCache.push(buffer)\n this.totalChunkSize += buffer.length\n return\n }\n\n while (this.offset < this.buffer.length) {\n const offset = this.offset\n const type = this.buffer[this.offset++]\n const response = parseType(this, type)\n if (response === undefined) {\n if (!(this.arrayCache.length || this.bufferCache.length)) {\n this.offset = offset\n }\n return\n }\n\n if (type === 45) {\n this.returnError(response)\n } else {\n this.returnReply(response)\n }\n }\n\n this.buffer = null\n }\n}\n\nmodule.exports = JavascriptRedisParser\n","'use strict'\n\nmodule.exports = require('./lib/parser')\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Tiny class to simplify dealing with subscription set\n */\nclass SubscriptionSet {\n constructor() {\n this.set = {\n subscribe: {},\n psubscribe: {},\n ssubscribe: {},\n };\n }\n add(set, channel) {\n this.set[mapSet(set)][channel] = true;\n }\n del(set, channel) {\n delete this.set[mapSet(set)][channel];\n }\n channels(set) {\n return Object.keys(this.set[mapSet(set)]);\n }\n isEmpty() {\n return (this.channels(\"subscribe\").length === 0 &&\n this.channels(\"psubscribe\").length === 0 &&\n this.channels(\"ssubscribe\").length === 0);\n }\n}\nexports.default = SubscriptionSet;\nfunction mapSet(set) {\n if (set === \"unsubscribe\") {\n return \"subscribe\";\n }\n if (set === \"punsubscribe\") {\n return \"psubscribe\";\n }\n if (set === \"sunsubscribe\") {\n return \"ssubscribe\";\n }\n return set;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Command_1 = require(\"./Command\");\nconst utils_1 = require(\"./utils\");\nconst RedisParser = require(\"redis-parser\");\nconst SubscriptionSet_1 = require(\"./SubscriptionSet\");\nconst debug = (0, utils_1.Debug)(\"dataHandler\");\nclass DataHandler {\n constructor(redis, parserOptions) {\n this.redis = redis;\n const parser = new RedisParser({\n stringNumbers: parserOptions.stringNumbers,\n returnBuffers: true,\n returnError: (err) => {\n this.returnError(err);\n },\n returnFatalError: (err) => {\n this.returnFatalError(err);\n },\n returnReply: (reply) => {\n this.returnReply(reply);\n },\n });\n // prependListener ensures the parser receives and processes data before socket timeout checks are performed\n redis.stream.prependListener(\"data\", (data) => {\n parser.execute(data);\n });\n // prependListener() doesn't enable flowing mode automatically - we need to resume the stream manually\n redis.stream.resume();\n }\n returnFatalError(err) {\n err.message += \". Please report this.\";\n this.redis.recoverFromFatalError(err, err, { offlineQueue: false });\n }\n returnError(err) {\n const item = this.shiftCommand(err);\n if (!item) {\n return;\n }\n err.command = {\n name: item.command.name,\n args: item.command.args,\n };\n this.redis.handleReconnection(err, item);\n }\n returnReply(reply) {\n if (this.handleMonitorReply(reply)) {\n return;\n }\n if (this.handleSubscriberReply(reply)) {\n return;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", item.command.name)) {\n this.redis.condition.subscriber = new SubscriptionSet_1.default();\n this.redis.condition.subscriber.add(item.command.name, reply[1].toString());\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else if (Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", item.command.name)) {\n if (!fillUnsubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else {\n item.command.resolve(reply);\n }\n }\n handleSubscriberReply(reply) {\n if (!this.redis.condition.subscriber) {\n return false;\n }\n const replyType = Array.isArray(reply) ? reply[0].toString() : null;\n debug('receive reply \"%s\" in subscriber mode', replyType);\n switch (replyType) {\n case \"message\":\n if (this.redis.listeners(\"message\").length > 0) {\n // Check if there're listeners to avoid unnecessary `toString()`.\n this.redis.emit(\"message\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"messageBuffer\", reply[1], reply[2]);\n break;\n case \"pmessage\": {\n const pattern = reply[1].toString();\n if (this.redis.listeners(\"pmessage\").length > 0) {\n this.redis.emit(\"pmessage\", pattern, reply[2].toString(), reply[3].toString());\n }\n this.redis.emit(\"pmessageBuffer\", pattern, reply[2], reply[3]);\n break;\n }\n case \"smessage\": {\n if (this.redis.listeners(\"smessage\").length > 0) {\n this.redis.emit(\"smessage\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"smessageBuffer\", reply[1], reply[2]);\n break;\n }\n case \"ssubscribe\":\n case \"subscribe\":\n case \"psubscribe\": {\n const channel = reply[1].toString();\n this.redis.condition.subscriber.add(replyType, channel);\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n case \"sunsubscribe\":\n case \"unsubscribe\":\n case \"punsubscribe\": {\n const channel = reply[1] ? reply[1].toString() : null;\n if (channel) {\n this.redis.condition.subscriber.del(replyType, channel);\n }\n const count = reply[2];\n if (Number(count) === 0) {\n this.redis.condition.subscriber = false;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillUnsubCommand(item.command, count)) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n default: {\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n item.command.resolve(reply);\n }\n }\n return true;\n }\n handleMonitorReply(reply) {\n if (this.redis.status !== \"monitoring\") {\n return false;\n }\n const replyStr = reply.toString();\n if (replyStr === \"OK\") {\n // Valid commands in the monitoring mode are AUTH and MONITOR,\n // both of which always reply with 'OK'.\n // So if we got an 'OK', we can make certain that\n // the reply is made to AUTH & MONITOR.\n return false;\n }\n // Since commands sent in the monitoring mode will trigger an exception,\n // any replies we received in the monitoring mode should consider to be\n // realtime monitor data instead of result of commands.\n const len = replyStr.indexOf(\" \");\n const timestamp = replyStr.slice(0, len);\n const argIndex = replyStr.indexOf('\"');\n const args = replyStr\n .slice(argIndex + 1, -1)\n .split('\" \"')\n .map((elem) => elem.replace(/\\\\\"/g, '\"'));\n const dbAndSource = replyStr.slice(len + 2, argIndex - 2).split(\" \");\n this.redis.emit(\"monitor\", timestamp, args, dbAndSource[1], dbAndSource[0]);\n return true;\n }\n shiftCommand(reply) {\n const item = this.redis.commandQueue.shift();\n if (!item) {\n const message = \"Command queue state error. If you can reproduce this, please report it.\";\n const error = new Error(message +\n (reply instanceof Error\n ? ` Last error: ${reply.message}`\n : ` Last reply: ${reply.toString()}`));\n this.redis.emit(\"error\", error);\n return null;\n }\n return item;\n }\n}\nexports.default = DataHandler;\nconst remainingRepliesMap = new WeakMap();\nfunction fillSubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n remainingRepliesMap.delete(command);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\nfunction fillUnsubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n if (remainingReplies === 0) {\n if (Number(count) === 0) {\n remainingRepliesMap.delete(command);\n command.resolve(count);\n return true;\n }\n return false;\n }\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readyHandler = exports.errorHandler = exports.closeHandler = exports.connectHandler = void 0;\nconst redis_errors_1 = require(\"redis-errors\");\nconst Command_1 = require(\"../Command\");\nconst errors_1 = require(\"../errors\");\nconst utils_1 = require(\"../utils\");\nconst DataHandler_1 = require(\"../DataHandler\");\nconst debug = (0, utils_1.Debug)(\"connection\");\nfunction connectHandler(self) {\n return function () {\n self.setStatus(\"connect\");\n self.resetCommandQueue();\n // AUTH command should be processed before any other commands\n let flushed = false;\n const { connectionEpoch } = self;\n if (self.condition.auth) {\n self.auth(self.condition.auth, function (err) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (err.message.indexOf(\"no password is set\") !== -1) {\n console.warn(\"[WARN] Redis server does not require a password, but a password was supplied.\");\n }\n else if (err.message.indexOf(\"without any password configured for the default user\") !== -1) {\n console.warn(\"[WARN] This Redis server's `default` user does not require a password, but a password was supplied\");\n }\n else if (err.message.indexOf(\"wrong number of arguments for 'auth' command\") !== -1) {\n console.warn(`[ERROR] The server returned \"wrong number of arguments for 'auth' command\". You are probably passing both username and password to Redis version 5 or below. You should only pass the 'password' option for Redis version 5 and under.`);\n }\n else {\n flushed = true;\n self.recoverFromFatalError(err, err);\n }\n }\n });\n }\n if (self.condition.select) {\n self.select(self.condition.select).catch((err) => {\n // If the node is in cluster mode, select is disallowed.\n // In this case, reconnect won't help.\n self.silentEmit(\"error\", err);\n });\n }\n if (!self.options.enableReadyCheck) {\n exports.readyHandler(self)();\n }\n /*\n No need to keep the reference of DataHandler here\n because we don't need to do the cleanup.\n `Stream#end()` will remove all listeners for us.\n */\n new DataHandler_1.default(self, {\n stringNumbers: self.options.stringNumbers,\n });\n if (self.options.enableReadyCheck) {\n self._readyCheck(function (err, info) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (!flushed) {\n self.recoverFromFatalError(new Error(\"Ready check failed: \" + err.message), err);\n }\n }\n else {\n if (self.connector.check(info)) {\n exports.readyHandler(self)();\n }\n else {\n self.disconnect(true);\n }\n }\n });\n }\n };\n}\nexports.connectHandler = connectHandler;\nfunction abortError(command) {\n const err = new redis_errors_1.AbortError(\"Command aborted due to connection close\");\n err.command = {\n name: command.name,\n args: command.args,\n };\n return err;\n}\n// If a contiguous set of pipeline commands starts from index zero then they\n// can be safely reattempted. If however we have a chain of pipelined commands\n// starting at index 1 or more it means we received a partial response before\n// the connection close and those pipelined commands must be aborted. For\n// example, if the queue looks like this: [2, 3, 4, 0, 1, 2] then after\n// aborting and purging we'll have a queue that looks like this: [0, 1, 2]\nfunction abortIncompletePipelines(commandQueue) {\n var _a;\n let expectedIndex = 0;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n const pipelineIndex = command.pipelineIndex;\n if (pipelineIndex === undefined || pipelineIndex === 0) {\n expectedIndex = 0;\n }\n if (pipelineIndex !== undefined && pipelineIndex !== expectedIndex++) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n continue;\n }\n i++;\n }\n}\n// If only a partial transaction result was received before connection close,\n// we have to abort any transaction fragments that may have ended up in the\n// offline queue\nfunction abortTransactionFragments(commandQueue) {\n var _a;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n if (command.name === \"multi\") {\n break;\n }\n if (command.name === \"exec\") {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n break;\n }\n if (command.inTransaction) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n }\n else {\n i++;\n }\n }\n}\nfunction closeHandler(self) {\n return function () {\n const prevStatus = self.status;\n self.setStatus(\"close\");\n if (self.commandQueue.length) {\n abortIncompletePipelines(self.commandQueue);\n }\n if (self.offlineQueue.length) {\n abortTransactionFragments(self.offlineQueue);\n }\n if (prevStatus === \"ready\") {\n if (!self.prevCondition) {\n self.prevCondition = self.condition;\n }\n if (self.commandQueue.length) {\n self.prevCommandQueue = self.commandQueue;\n }\n }\n if (self.manuallyClosing) {\n self.manuallyClosing = false;\n debug(\"skip reconnecting since the connection is manually closed.\");\n return close();\n }\n if (typeof self.options.retryStrategy !== \"function\") {\n debug(\"skip reconnecting because `retryStrategy` is not a function\");\n return close();\n }\n const retryDelay = self.options.retryStrategy(++self.retryAttempts);\n if (typeof retryDelay !== \"number\") {\n debug(\"skip reconnecting because `retryStrategy` doesn't return a number\");\n return close();\n }\n debug(\"reconnect in %sms\", retryDelay);\n self.setStatus(\"reconnecting\", retryDelay);\n self.reconnectTimeout = setTimeout(function () {\n self.reconnectTimeout = null;\n self.connect().catch(utils_1.noop);\n }, retryDelay);\n const { maxRetriesPerRequest } = self.options;\n if (typeof maxRetriesPerRequest === \"number\") {\n if (maxRetriesPerRequest < 0) {\n debug(\"maxRetriesPerRequest is negative, ignoring...\");\n }\n else {\n const remainder = self.retryAttempts % (maxRetriesPerRequest + 1);\n if (remainder === 0) {\n debug(\"reach maxRetriesPerRequest limitation, flushing command queue...\");\n self.flushQueue(new errors_1.MaxRetriesPerRequestError(maxRetriesPerRequest));\n }\n }\n }\n };\n function close() {\n self.setStatus(\"end\");\n self.flushQueue(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n }\n}\nexports.closeHandler = closeHandler;\nfunction errorHandler(self) {\n return function (error) {\n debug(\"error: %s\", error);\n self.silentEmit(\"error\", error);\n };\n}\nexports.errorHandler = errorHandler;\nfunction readyHandler(self) {\n return function () {\n self.setStatus(\"ready\");\n self.retryAttempts = 0;\n if (self.options.monitor) {\n self.call(\"monitor\").then(() => self.setStatus(\"monitoring\"), (error) => self.emit(\"error\", error));\n const { sendCommand } = self;\n self.sendCommand = function (command) {\n if (Command_1.default.checkFlag(\"VALID_IN_MONITOR_MODE\", command.name)) {\n return sendCommand.call(self, command);\n }\n command.reject(new Error(\"Connection is in monitoring mode, can't process commands.\"));\n return command.promise;\n };\n self.once(\"close\", function () {\n delete self.sendCommand;\n });\n return;\n }\n const finalSelect = self.prevCondition\n ? self.prevCondition.select\n : self.condition.select;\n if (self.options.connectionName) {\n debug(\"set the connection name [%s]\", self.options.connectionName);\n self.client(\"setname\", self.options.connectionName).catch(utils_1.noop);\n }\n if (self.options.readOnly) {\n debug(\"set the connection to readonly mode\");\n self.readonly().catch(utils_1.noop);\n }\n if (self.prevCondition) {\n const condition = self.prevCondition;\n self.prevCondition = null;\n if (condition.subscriber && self.options.autoResubscribe) {\n // We re-select the previous db first since\n // `SELECT` command is not valid in sub mode.\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n const subscribeChannels = condition.subscriber.channels(\"subscribe\");\n if (subscribeChannels.length) {\n debug(\"subscribe %d channels\", subscribeChannels.length);\n self.subscribe(subscribeChannels);\n }\n const psubscribeChannels = condition.subscriber.channels(\"psubscribe\");\n if (psubscribeChannels.length) {\n debug(\"psubscribe %d channels\", psubscribeChannels.length);\n self.psubscribe(psubscribeChannels);\n }\n const ssubscribeChannels = condition.subscriber.channels(\"ssubscribe\");\n if (ssubscribeChannels.length) {\n debug(\"ssubscribe %d channels\", ssubscribeChannels.length);\n self.ssubscribe(ssubscribeChannels);\n }\n }\n }\n if (self.prevCommandQueue) {\n if (self.options.autoResendUnfulfilledCommands) {\n debug(\"resend %d unfulfilled commands\", self.prevCommandQueue.length);\n while (self.prevCommandQueue.length > 0) {\n const item = self.prevCommandQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n else {\n self.prevCommandQueue = null;\n }\n }\n if (self.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", self.offlineQueue.length);\n const offlineQueue = self.offlineQueue;\n self.resetOfflineQueue();\n while (offlineQueue.length > 0) {\n const item = offlineQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n };\n}\nexports.readyHandler = readyHandler;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_REDIS_OPTIONS = void 0;\nexports.DEFAULT_REDIS_OPTIONS = {\n // Connection\n port: 6379,\n host: \"localhost\",\n family: 4,\n connectTimeout: 10000,\n disconnectTimeout: 2000,\n retryStrategy: function (times) {\n return Math.min(times * 50, 2000);\n },\n keepAlive: 0,\n noDelay: true,\n connectionName: null,\n // Sentinel\n sentinels: null,\n name: null,\n role: \"master\",\n sentinelRetryStrategy: function (times) {\n return Math.min(times * 10, 1000);\n },\n sentinelReconnectStrategy: function () {\n // This strategy only applies when sentinels are used for detecting\n // a failover, not during initial master resolution.\n // The deployment can still function when some of the sentinels are down\n // for a long period of time, so we may not want to attempt reconnection\n // very often. Therefore the default interval is fairly long (1 minute).\n return 60000;\n },\n natMap: null,\n enableTLSForSentinelMode: false,\n updateSentinels: true,\n failoverDetector: false,\n // Status\n username: null,\n password: null,\n db: 0,\n // Others\n enableOfflineQueue: true,\n enableReadyCheck: true,\n autoResubscribe: true,\n autoResendUnfulfilledCommands: true,\n lazyConnect: false,\n keyPrefix: \"\",\n reconnectOnError: null,\n readOnly: false,\n stringNumbers: false,\n maxRetriesPerRequest: 20,\n maxLoadingRetryTime: 10000,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n sentinelMaxConnections: 10,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst events_1 = require(\"events\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst cluster_1 = require(\"./cluster\");\nconst Command_1 = require(\"./Command\");\nconst connectors_1 = require(\"./connectors\");\nconst SentinelConnector_1 = require(\"./connectors/SentinelConnector\");\nconst eventHandler = require(\"./redis/event_handler\");\nconst RedisOptions_1 = require(\"./redis/RedisOptions\");\nconst ScanStream_1 = require(\"./ScanStream\");\nconst transaction_1 = require(\"./transaction\");\nconst utils_1 = require(\"./utils\");\nconst applyMixin_1 = require(\"./utils/applyMixin\");\nconst Commander_1 = require(\"./utils/Commander\");\nconst lodash_1 = require(\"./utils/lodash\");\nconst Deque = require(\"denque\");\nconst debug = (0, utils_1.Debug)(\"redis\");\n/**\n * This is the major component of ioredis.\n * Use it to connect to a standalone Redis server or Sentinels.\n *\n * ```typescript\n * const redis = new Redis(); // Default port is 6379\n * async function main() {\n * redis.set(\"foo\", \"bar\");\n * redis.get(\"foo\", (err, result) => {\n * // `result` should be \"bar\"\n * console.log(err, result);\n * });\n * // Or use Promise\n * const result = await redis.get(\"foo\");\n * }\n * ```\n */\nclass Redis extends Commander_1.default {\n constructor(arg1, arg2, arg3) {\n super();\n this.status = \"wait\";\n /**\n * @ignore\n */\n this.isCluster = false;\n this.reconnectTimeout = null;\n this.connectionEpoch = 0;\n this.retryAttempts = 0;\n this.manuallyClosing = false;\n // Prepare autopipelines structures\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this.parseOptions(arg1, arg2, arg3);\n events_1.EventEmitter.call(this);\n this.resetCommandQueue();\n this.resetOfflineQueue();\n if (this.options.Connector) {\n this.connector = new this.options.Connector(this.options);\n }\n else if (this.options.sentinels) {\n const sentinelConnector = new SentinelConnector_1.default(this.options);\n sentinelConnector.emitter = this;\n this.connector = sentinelConnector;\n }\n else {\n this.connector = new connectors_1.StandaloneConnector(this.options);\n }\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n // end(or wait) -> connecting -> connect -> ready -> end\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch(lodash_1.noop);\n }\n }\n /**\n * Create a Redis instance.\n * This is the same as `new Redis()` but is included for compatibility with node-redis.\n */\n static createClient(...args) {\n return new Redis(...args);\n }\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Create a connection to Redis.\n * This method will be invoked automatically when creating a new Redis instance\n * unless `lazyConnect: true` is passed.\n *\n * When calling this method manually, a Promise is returned, which will\n * be resolved when the connection status is ready.\n */\n connect(callback) {\n const promise = new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n this.connectionEpoch += 1;\n this.setStatus(\"connecting\");\n const { options } = this;\n this.condition = {\n select: options.db,\n auth: options.username\n ? [options.username, options.password]\n : options.password,\n subscriber: false,\n };\n const _this = this;\n (0, standard_as_callback_1.default)(this.connector.connect(function (type, err) {\n _this.silentEmit(type, err);\n }), function (err, stream) {\n if (err) {\n _this.flushQueue(err);\n _this.silentEmit(\"error\", err);\n reject(err);\n _this.setStatus(\"end\");\n return;\n }\n let CONNECT_EVENT = options.tls ? \"secureConnect\" : \"connect\";\n if (\"sentinels\" in options &&\n options.sentinels &&\n !options.enableTLSForSentinelMode) {\n CONNECT_EVENT = \"connect\";\n }\n _this.stream = stream;\n if (options.noDelay) {\n stream.setNoDelay(true);\n }\n // Node ignores setKeepAlive before connect, therefore we wait for the event:\n // https://github.com/nodejs/node/issues/31663\n if (typeof options.keepAlive === \"number\") {\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, () => {\n stream.setKeepAlive(true, options.keepAlive);\n });\n }\n else {\n stream.setKeepAlive(true, options.keepAlive);\n }\n }\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, eventHandler.connectHandler(_this));\n if (options.connectTimeout) {\n /*\n * Typically, Socket#setTimeout(0) will clear the timer\n * set before. However, in some platforms (Electron 3.x~4.x),\n * the timer will not be cleared. So we introduce a variable here.\n *\n * See https://github.com/electron/electron/issues/14915\n */\n let connectTimeoutCleared = false;\n stream.setTimeout(options.connectTimeout, function () {\n if (connectTimeoutCleared) {\n return;\n }\n stream.setTimeout(0);\n stream.destroy();\n const err = new Error(\"connect ETIMEDOUT\");\n // @ts-expect-error\n err.errorno = \"ETIMEDOUT\";\n // @ts-expect-error\n err.code = \"ETIMEDOUT\";\n // @ts-expect-error\n err.syscall = \"connect\";\n eventHandler.errorHandler(_this)(err);\n });\n stream.once(CONNECT_EVENT, function () {\n connectTimeoutCleared = true;\n stream.setTimeout(0);\n });\n }\n }\n else if (stream.destroyed) {\n const firstError = _this.connector.firstError;\n if (firstError) {\n process.nextTick(() => {\n eventHandler.errorHandler(_this)(firstError);\n });\n }\n process.nextTick(eventHandler.closeHandler(_this));\n }\n else {\n process.nextTick(eventHandler.connectHandler(_this));\n }\n if (!stream.destroyed) {\n stream.once(\"error\", eventHandler.errorHandler(_this));\n stream.once(\"close\", eventHandler.closeHandler(_this));\n }\n const connectionReadyHandler = function () {\n _this.removeListener(\"close\", connectionCloseHandler);\n resolve();\n };\n var connectionCloseHandler = function () {\n _this.removeListener(\"ready\", connectionReadyHandler);\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n };\n _this.once(\"ready\", connectionReadyHandler);\n _this.once(\"close\", connectionCloseHandler);\n });\n });\n return (0, standard_as_callback_1.default)(promise, callback);\n }\n /**\n * Disconnect from Redis.\n *\n * This method closes the connection immediately,\n * and may lose some pending replies that haven't written to client.\n * If you want to wait for the pending replies, use Redis#quit instead.\n */\n disconnect(reconnect = false) {\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.status === \"wait\") {\n eventHandler.closeHandler(this)();\n }\n else {\n this.connector.disconnect();\n }\n }\n /**\n * Disconnect from Redis.\n *\n * @deprecated\n */\n end() {\n this.disconnect();\n }\n /**\n * Create a new instance with the same options as the current one.\n *\n * @example\n * ```js\n * var redis = new Redis(6380);\n * var anotherRedis = redis.duplicate();\n * ```\n */\n duplicate(override) {\n return new Redis({ ...this.options, ...override });\n }\n /**\n * Mode of the connection.\n *\n * One of `\"normal\"`, `\"subscriber\"`, or `\"monitor\"`. When the connection is\n * not in `\"normal\"` mode, certain commands are not allowed.\n */\n get mode() {\n var _a;\n return this.options.monitor\n ? \"monitor\"\n : ((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber)\n ? \"subscriber\"\n : \"normal\";\n }\n /**\n * Listen for all requests received by the server in real time.\n *\n * This command will create a new connection to Redis and send a\n * MONITOR command via the new connection in order to avoid disturbing\n * the current connection.\n *\n * @param callback The callback function. If omit, a promise will be returned.\n * @example\n * ```js\n * var redis = new Redis();\n * redis.monitor(function (err, monitor) {\n * // Entering monitoring mode.\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n *\n * // supports promise as well as other commands\n * redis.monitor().then(function (monitor) {\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n * ```\n */\n monitor(callback) {\n const monitorInstance = this.duplicate({\n monitor: true,\n lazyConnect: false,\n });\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n monitorInstance.once(\"error\", reject);\n monitorInstance.once(\"monitoring\", function () {\n resolve(monitorInstance);\n });\n }), callback);\n }\n /**\n * Send a command to Redis\n *\n * This method is used internally and in most cases you should not\n * use it directly. If you need to send a command that is not supported\n * by the library, you can use the `call` method:\n *\n * ```js\n * const redis = new Redis();\n *\n * redis.call('set', 'foo', 'bar');\n * // or\n * redis.call(['set', 'foo', 'bar']);\n * ```\n *\n * @ignore\n */\n sendCommand(command, stream) {\n var _a, _b;\n if (this.status === \"wait\") {\n this.connect().catch(lodash_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber) &&\n !Command_1.default.checkFlag(\"VALID_IN_SUBSCRIBER_MODE\", command.name)) {\n command.reject(new Error(\"Connection in subscriber mode, only subscriber commands may be used\"));\n return command.promise;\n }\n if (typeof this.options.commandTimeout === \"number\") {\n command.setTimeout(this.options.commandTimeout);\n }\n let writable = this.status === \"ready\" ||\n (!stream &&\n this.status === \"connect\" &&\n (0, commands_1.exists)(command.name) &&\n (0, commands_1.hasFlag)(command.name, \"loading\"));\n if (!this.stream) {\n writable = false;\n }\n else if (!this.stream.writable) {\n writable = false;\n // @ts-expect-error\n }\n else if (this.stream._writableState && this.stream._writableState.ended) {\n // TODO: We should be able to remove this as the PR has already been merged.\n // https://github.com/iojs/io.js/pull/1217\n writable = false;\n }\n if (!writable) {\n if (!this.options.enableOfflineQueue) {\n command.reject(new Error(\"Stream isn't writeable and enableOfflineQueue options is false\"));\n return command.promise;\n }\n if (command.name === \"quit\" && this.offlineQueue.length === 0) {\n this.disconnect();\n command.resolve(Buffer.from(\"OK\"));\n return command.promise;\n }\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"queue command[%s]: %d -> %s(%o)\", this._getDescription(), this.condition.select, command.name, command.args);\n }\n this.offlineQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n }\n else {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"write command[%s]: %d -> %s(%o)\", this._getDescription(), (_b = this.condition) === null || _b === void 0 ? void 0 : _b.select, command.name, command.args);\n }\n if (stream) {\n if (\"isPipeline\" in stream && stream.isPipeline) {\n stream.write(command.toWritable(stream.destination.redis.stream));\n }\n else {\n stream.write(command.toWritable(stream));\n }\n }\n else {\n this.stream.write(command.toWritable(this.stream));\n }\n this.commandQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n if (Command_1.default.checkFlag(\"WILL_DISCONNECT\", command.name)) {\n this.manuallyClosing = true;\n }\n if (this.options.socketTimeout !== undefined && this.socketTimeoutTimer === undefined) {\n this.setSocketTimeout();\n }\n }\n if (command.name === \"select\" && (0, utils_1.isInt)(command.args[0])) {\n const db = parseInt(command.args[0], 10);\n if (this.condition.select !== db) {\n this.condition.select = db;\n this.emit(\"select\", db);\n debug(\"switch to db [%d]\", this.condition.select);\n }\n }\n return command.promise;\n }\n setSocketTimeout() {\n this.socketTimeoutTimer = setTimeout(() => {\n this.stream.destroy(new Error(`Socket timeout. Expecting data, but didn't receive any in ${this.options.socketTimeout}ms.`));\n this.socketTimeoutTimer = undefined;\n }, this.options.socketTimeout);\n // this handler must run after the \"data\" handler in \"DataHandler\"\n // so that `this.commandQueue.length` will be updated\n this.stream.once(\"data\", () => {\n clearTimeout(this.socketTimeoutTimer);\n this.socketTimeoutTimer = undefined;\n if (this.commandQueue.length === 0)\n return;\n this.setSocketTimeout();\n });\n }\n scanStream(options) {\n return this.createScanStream(\"scan\", { options });\n }\n scanBufferStream(options) {\n return this.createScanStream(\"scanBuffer\", { options });\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * Emit only when there's at least one listener.\n *\n * @ignore\n */\n silentEmit(eventName, arg) {\n let error;\n if (eventName === \"error\") {\n error = arg;\n if (this.status === \"end\") {\n return;\n }\n if (this.manuallyClosing) {\n // ignore connection related errors when manually disconnecting\n if (error instanceof Error &&\n (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG ||\n // @ts-expect-error\n error.syscall === \"connect\" ||\n // @ts-expect-error\n error.syscall === \"read\")) {\n return;\n }\n }\n }\n if (this.listeners(eventName).length > 0) {\n return this.emit.apply(this, arguments);\n }\n if (error && error instanceof Error) {\n console.error(\"[ioredis] Unhandled error event:\", error.stack);\n }\n return false;\n }\n /**\n * @ignore\n */\n recoverFromFatalError(_commandError, err, options) {\n this.flushQueue(err, options);\n this.silentEmit(\"error\", err);\n this.disconnect(true);\n }\n /**\n * @ignore\n */\n handleReconnection(err, item) {\n var _a;\n let needReconnect = false;\n if (this.options.reconnectOnError) {\n needReconnect = this.options.reconnectOnError(err);\n }\n switch (needReconnect) {\n case 1:\n case true:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n item.command.reject(err);\n break;\n case 2:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.select) !== item.select &&\n item.command.name !== \"select\") {\n this.select(item.select);\n }\n // TODO\n // @ts-expect-error\n this.sendCommand(item.command);\n break;\n default:\n item.command.reject(err);\n }\n }\n /**\n * Get description of the connection. Used for debugging.\n */\n _getDescription() {\n let description;\n if (\"path\" in this.options && this.options.path) {\n description = this.options.path;\n }\n else if (this.stream &&\n this.stream.remoteAddress &&\n this.stream.remotePort) {\n description = this.stream.remoteAddress + \":\" + this.stream.remotePort;\n }\n else if (\"host\" in this.options && this.options.host) {\n description = this.options.host + \":\" + this.options.port;\n }\n else {\n // Unexpected\n description = \"\";\n }\n if (this.options.connectionName) {\n description += ` (${this.options.connectionName})`;\n }\n return description;\n }\n resetCommandQueue() {\n this.commandQueue = new Deque();\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n parseOptions(...args) {\n const options = {};\n let isTls = false;\n for (let i = 0; i < args.length; ++i) {\n const arg = args[i];\n if (arg === null || typeof arg === \"undefined\") {\n continue;\n }\n if (typeof arg === \"object\") {\n (0, lodash_1.defaults)(options, arg);\n }\n else if (typeof arg === \"string\") {\n (0, lodash_1.defaults)(options, (0, utils_1.parseURL)(arg));\n if (arg.startsWith(\"rediss://\")) {\n isTls = true;\n }\n }\n else if (typeof arg === \"number\") {\n options.port = arg;\n }\n else {\n throw new Error(\"Invalid argument \" + arg);\n }\n }\n if (isTls) {\n (0, lodash_1.defaults)(options, { tls: true });\n }\n (0, lodash_1.defaults)(options, Redis.defaultOptions);\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n if (typeof options.db === \"string\") {\n options.db = parseInt(options.db, 10);\n }\n // @ts-expect-error\n this.options = (0, utils_1.resolveTLSProfile)(options);\n }\n /**\n * Change instance's status\n */\n setStatus(status, arg) {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"status[%s]: %s -> %s\", this._getDescription(), this.status || \"[empty]\", status);\n }\n this.status = status;\n process.nextTick(this.emit.bind(this, status, arg));\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n /**\n * Flush offline queue and command queue with error.\n *\n * @param error The error object to send to the commands\n * @param options options\n */\n flushQueue(error, options) {\n options = (0, lodash_1.defaults)({}, options, {\n offlineQueue: true,\n commandQueue: true,\n });\n let item;\n if (options.offlineQueue) {\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n if (options.commandQueue) {\n if (this.commandQueue.length > 0) {\n if (this.stream) {\n this.stream.removeAllListeners(\"data\");\n }\n while ((item = this.commandQueue.shift())) {\n item.command.reject(error);\n }\n }\n }\n }\n /**\n * Check whether Redis has finished loading the persistent data and is able to\n * process commands.\n */\n _readyCheck(callback) {\n const _this = this;\n this.info(function (err, res) {\n if (err) {\n if (err.message && err.message.includes(\"NOPERM\")) {\n console.warn(`Skipping the ready check because INFO command fails: \"${err.message}\". You can disable ready check with \"enableReadyCheck\". More: https://github.com/luin/ioredis/wiki/Disable-ready-check.`);\n return callback(null, {});\n }\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback(null, res);\n }\n const info = {};\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const [fieldName, ...fieldValueParts] = lines[i].split(\":\");\n const fieldValue = fieldValueParts.join(\":\");\n if (fieldValue) {\n info[fieldName] = fieldValue;\n }\n }\n if (!info.loading || info.loading === \"0\") {\n callback(null, info);\n }\n else {\n const loadingEtaMs = (info.loading_eta_seconds || 1) * 1000;\n const retryTime = _this.options.maxLoadingRetryTime &&\n _this.options.maxLoadingRetryTime < loadingEtaMs\n ? _this.options.maxLoadingRetryTime\n : loadingEtaMs;\n debug(\"Redis server still loading, trying again in \" + retryTime + \"ms\");\n setTimeout(function () {\n _this._readyCheck(callback);\n }, retryTime);\n }\n }).catch(lodash_1.noop);\n }\n}\nRedis.Cluster = cluster_1.default;\nRedis.Command = Command_1.default;\n/**\n * Default options\n */\nRedis.defaultOptions = RedisOptions_1.DEFAULT_REDIS_OPTIONS;\n(0, applyMixin_1.default)(Redis, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Redis.prototype);\nexports.default = Redis;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.print = exports.ReplyError = exports.SentinelIterator = exports.SentinelConnector = exports.AbstractConnector = exports.Pipeline = exports.ScanStream = exports.Command = exports.Cluster = exports.Redis = exports.default = void 0;\nexports = module.exports = require(\"./Redis\").default;\nvar Redis_1 = require(\"./Redis\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return Redis_1.default; } });\nvar Redis_2 = require(\"./Redis\");\nObject.defineProperty(exports, \"Redis\", { enumerable: true, get: function () { return Redis_2.default; } });\nvar cluster_1 = require(\"./cluster\");\nObject.defineProperty(exports, \"Cluster\", { enumerable: true, get: function () { return cluster_1.default; } });\n/**\n * @ignore\n */\nvar Command_1 = require(\"./Command\");\nObject.defineProperty(exports, \"Command\", { enumerable: true, get: function () { return Command_1.default; } });\n/**\n * @ignore\n */\nvar ScanStream_1 = require(\"./ScanStream\");\nObject.defineProperty(exports, \"ScanStream\", { enumerable: true, get: function () { return ScanStream_1.default; } });\n/**\n * @ignore\n */\nvar Pipeline_1 = require(\"./Pipeline\");\nObject.defineProperty(exports, \"Pipeline\", { enumerable: true, get: function () { return Pipeline_1.default; } });\n/**\n * @ignore\n */\nvar AbstractConnector_1 = require(\"./connectors/AbstractConnector\");\nObject.defineProperty(exports, \"AbstractConnector\", { enumerable: true, get: function () { return AbstractConnector_1.default; } });\n/**\n * @ignore\n */\nvar SentinelConnector_1 = require(\"./connectors/SentinelConnector\");\nObject.defineProperty(exports, \"SentinelConnector\", { enumerable: true, get: function () { return SentinelConnector_1.default; } });\nObject.defineProperty(exports, \"SentinelIterator\", { enumerable: true, get: function () { return SentinelConnector_1.SentinelIterator; } });\n// No TS typings\nexports.ReplyError = require(\"redis-errors\").ReplyError;\n/**\n * @ignore\n */\nObject.defineProperty(exports, \"Promise\", {\n get() {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n return Promise;\n },\n set(_lib) {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n },\n});\n/**\n * @ignore\n */\nfunction print(err, reply) {\n if (err) {\n console.log(\"Error: \" + err);\n }\n else {\n console.log(\"Reply: \" + reply);\n }\n}\nexports.print = print;\n","import concurrently, { ConcurrentlyResult } from 'concurrently';\nimport { createChildLogger, formatError } from '../logger';\nimport { SupportedFramework } from './framework-detector';\nimport readline from 'readline';\nimport { ChildProcess } from 'child_process';\nimport spawn from 'cross-spawn';\nimport kill from 'tree-kill';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface ProcessConfig {\n name: string;\n command: string;\n color?: string;\n cwd?: string;\n env?: Record<string, string>;\n}\n\nexport interface ConcurrentProcessesOptions {\n processes: ProcessConfig[];\n /**\n * Kill all processes when one fails\n * @default true\n */\n killOthers?: boolean;\n /**\n * Prefix type for process identification\n * @default 'name'\n */\n prefixFormat?: 'name' | 'pid' | 'index' | 'time';\n /**\n * Colorize prefixes\n * @default true\n */\n prefixColors?: boolean;\n /**\n * Maximum length for process name prefix\n * @default 10\n */\n prefixLength?: number;\n /**\n * Custom prefix template\n */\n prefix?: string;\n /**\n * Enable interactive mode for switching between processes\n * @default false\n */\n interactive?: boolean;\n}\n\n/**\n * Color palette for different process types\n */\nconst PROCESS_COLORS = {\n igniter: 'blue',\n nextjs: 'green', \n vite: 'yellow',\n nuxt: 'cyan',\n sveltekit: 'magenta',\n remix: 'red',\n astro: 'white',\n generic: 'gray'\n} as const;\n\n/**\n * ANSI color codes for terminal output\n */\nconst ANSI_COLORS = {\n blue: '\\x1b[34m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n cyan: '\\x1b[36m',\n magenta: '\\x1b[35m',\n red: '\\x1b[31m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m'\n} as const;\n\n/**\n * Simplified tab colors - only 3 states\n */\nconst TAB_COLORS = {\n active: ANSI_COLORS.blue,\n default: ANSI_COLORS.dim,\n failed: ANSI_COLORS.red\n} as const;\n\n/**\n * Log entry for process buffer\n */\ninterface ProcessLogEntry {\n timestamp: Date;\n type: 'stdout' | 'stderr' | 'info' | 'error' | 'success' | 'warn';\n message: string;\n process: string;\n}\n\n/**\n * HTTP Request entry for API monitoring\n */\ninterface ApiRequestEntry {\n timestamp: Date;\n method: string;\n path: string;\n statusCode: number;\n responseTime: number;\n ip: string;\n userAgent?: string;\n bodySize?: number;\n controller?: string;\n action?: string;\n}\n\n/**\n * Job entry for job monitoring\n */\ninterface JobEntry {\n id: string;\n name: string;\n queue: string;\n status: 'waiting' | 'active' | 'completed' | 'failed' | 'delayed' | 'paused' | 'stalled';\n priority: number;\n createdAt: Date;\n processedAt?: Date;\n completedAt?: Date;\n attemptsMade: number;\n maxAttempts: number;\n progress?: number;\n data: any;\n result?: any;\n error?: string;\n delay?: number;\n}\n\n/**\n * Telemetry entry for real-time observability\n */\ninterface TelemetryEntry {\n id: string;\n timestamp: Date;\n type: 'span' | 'metric' | 'event';\n name: string;\n operation: 'http' | 'job' | 'db' | 'cache' | 'custom';\n duration?: number;\n status: 'active' | 'completed' | 'failed';\n tags: Record<string, string | number>;\n error?: string;\n parentId?: string;\n traceId?: string;\n}\n\n/**\n * Telemetry metric for aggregated data\n */\ninterface TelemetryMetric {\n name: string;\n type: 'counter' | 'histogram' | 'gauge' | 'timer';\n value: number;\n tags: Record<string, string>;\n timestamp: Date;\n}\n\n/**\n * Telemetry statistics for dashboard\n */\ninterface TelemetryStats {\n totalSpans: number;\n activeSpans: number;\n avgDuration: number;\n errorRate: number;\n throughput: number; // spans per minute\n topOperations: Array<{ name: string; count: number; avgDuration: number }>;\n}\n\n/**\n * Queue information\n */\ninterface QueueInfo {\n name: string;\n prefix?: string;\n waiting: number;\n active: number;\n completed: number;\n failed: number;\n delayed: number;\n paused: boolean;\n isPaused: boolean;\n}\n\n/**\n * System capabilities detection\n */\ninterface SystemCapabilities {\n hasRedisStore: boolean;\n hasJobQueue: boolean;\n redisConnection?: {\n host: string;\n port: number;\n status: 'connected' | 'disconnected' | 'error';\n };\n detectedPackages: {\n ioredis?: string;\n bullmq?: string;\n redisAdapter?: boolean;\n bullmqAdapter?: boolean;\n };\n}\n\n/**\n * Process status for dashboard\n */\ninterface ProcessStatus {\n name: string;\n status: 'starting' | 'running' | 'error' | 'stopped';\n pid?: number;\n uptime?: string;\n lastActivity?: Date;\n color: string;\n}\n\n/**\n * Project information\n */\ninterface ProjectInfo {\n name: string;\n igniterVersion?: string;\n}\n\n/**\n * Interactive Process Manager\n * Allows switching between multiple processes like Turborepo\n * Uses static dashboard interface instead of scrolling logs\n */\nclass InteractiveProcessManager {\n private processes: ChildProcess[] = [];\n private processConfigs: ProcessConfig[] = [];\n private currentProcess = 0;\n private rl: readline.Interface;\n private logger = createChildLogger({ component: 'interactive-process-manager' });\n \n // Static dashboard state\n private processLogs: Map<number, ProcessLogEntry[]> = new Map();\n private processStatus: Map<number, ProcessStatus> = new Map();\n private apiRequests: ApiRequestEntry[] = [];\n private jobs: JobEntry[] = [];\n private queues: Map<string, QueueInfo> = new Map();\n private systemCapabilities: SystemCapabilities = {\n hasRedisStore: false,\n hasJobQueue: false,\n detectedPackages: {}\n };\n private maxLogBuffer = 100; // Keep last 100 log entries per process\n private maxApiBuffer = 200; // Keep last 200 API requests\n private maxJobBuffer = 500; // Keep last 500 jobs\n private dashboardHeight = 25; // Fixed dashboard height\n private startTime = Date.now();\n private refreshInterval: NodeJS.Timeout | null = null;\n private apiMonitoringInterval: NodeJS.Timeout | null = null;\n private jobMonitoringInterval: NodeJS.Timeout | null = null;\n private igniterTabIndex: number; // Index of the Igniter tab\n private apiTabIndex: number; // Index of the API tab\n private jobsTabIndex: number; // Index of the Jobs tab\n private telemetryTabIndex: number; // Index of the Telemetry tab\n private selectedQueue: string | null = null; // Currently selected queue in jobs tab\n private projectInfo: ProjectInfo;\n\n // Telemetry dashboard state\n private telemetryEntries: TelemetryEntry[] = [];\n private telemetryMetrics: TelemetryMetric[] = [];\n private telemetryStats: TelemetryStats = {\n totalSpans: 0,\n activeSpans: 0,\n avgDuration: 0,\n errorRate: 0,\n throughput: 0,\n topOperations: []\n };\n private maxTelemetryBuffer = 1000; // Keep last 1000 telemetry entries\n private telemetrySubTab: 'spans' | 'metrics' | 'events' = 'spans';\n\n constructor(configs: ProcessConfig[]) {\n // Reorganize configs: Framework first, then Igniter\n this.processConfigs = this.reorganizeConfigs(configs);\n \n // Set tab indices based on new order\n this.igniterTabIndex = 1; // Igniter is always second\n this.apiTabIndex = 2; // API tab is third\n this.jobsTabIndex = 3; // Jobs tab is fourth\n this.telemetryTabIndex = 4; // Telemetry tab is fifth\n \n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n \n // Enable raw mode to capture individual keystrokes\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n \n // Get project information\n this.projectInfo = this.getProjectInfo();\n \n // Initialize log buffers and status for each process\n this.processConfigs.forEach((config, index) => {\n this.processLogs.set(index, []);\n this.processStatus.set(index, {\n name: config.name,\n status: 'starting',\n color: this.getSimplifiedColor(config.name, 'default'),\n lastActivity: new Date()\n });\n });\n \n // Initialize API tab status\n this.processStatus.set(this.apiTabIndex, {\n name: 'Igniter.js API',\n status: 'running',\n color: this.getSimplifiedColor('api', 'default'),\n lastActivity: new Date()\n });\n \n // Initialize Jobs tab status\n this.processStatus.set(this.jobsTabIndex, {\n name: 'Igniter.js Jobs',\n status: 'running',\n color: this.getSimplifiedColor('jobs', 'default'),\n lastActivity: new Date()\n });\n \n // Initialize Telemetry tab status\n this.processStatus.set(this.telemetryTabIndex, {\n name: 'Telemetry',\n status: 'running',\n color: this.getSimplifiedColor('telemetry', 'default'),\n lastActivity: new Date()\n });\n \n // Detect system capabilities\n this.detectSystemCapabilities();\n \n this.setupKeyHandlers();\n }\n\n /**\n * Reorganize configs to put framework first, then Igniter\n */\n private reorganizeConfigs(configs: ProcessConfig[]): ProcessConfig[] {\n const frameworkConfig = configs.find(c => \n c.name.toLowerCase().includes('next') || \n c.name.toLowerCase().includes('vite') || \n c.name.toLowerCase().includes('nuxt') || \n c.name.toLowerCase().includes('svelte') || \n c.name.toLowerCase().includes('remix') || \n c.name.toLowerCase().includes('astro')\n );\n \n const igniterConfig = configs.find(c => \n c.name.toLowerCase().includes('igniter')\n );\n \n const otherConfigs = configs.filter(c => c !== frameworkConfig && c !== igniterConfig);\n \n const result = [];\n if (frameworkConfig) result.push(frameworkConfig);\n if (igniterConfig) result.push(igniterConfig);\n result.push(...otherConfigs);\n \n return result;\n }\n\n /**\n * Get project information from package.json\n */\n private getProjectInfo(): ProjectInfo {\n try {\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n \n // Try to find Igniter version from dependencies\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies\n };\n \n const igniterVersion = allDeps['@igniter-js/core'] || \n allDeps['@igniter-js/cli'] || \n allDeps['igniter-js'];\n \n return {\n name: packageJson.name || 'Unknown Project',\n igniterVersion: igniterVersion ? igniterVersion.replace(/[\\^~]/, '') : undefined\n };\n }\n } catch (error) {\n console.warn('Could not read project information:', error);\n }\n \n return {\n name: 'Unknown Project'\n };\n }\n\n /**\n * Get simplified color based on tab state\n */\n private getSimplifiedColor(name: string, state: 'active' | 'default' | 'failed'): string {\n return TAB_COLORS[state];\n }\n\n /**\n * Detect system capabilities (Redis, Jobs, etc.)\n */\n private async detectSystemCapabilities() {\n try {\n // Check package.json for dependencies\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n ...packageJson.peerDependencies\n };\n\n // Detect Redis-related packages\n if (allDeps['ioredis']) {\n this.systemCapabilities.detectedPackages.ioredis = allDeps['ioredis'];\n this.systemCapabilities.hasRedisStore = true;\n }\n\n // Detect Job Queue-related packages\n if (allDeps['bullmq']) {\n this.systemCapabilities.detectedPackages.bullmq = allDeps['bullmq'];\n this.systemCapabilities.hasJobQueue = true;\n }\n\n // Detect Igniter adapters\n if (allDeps['@igniter-js/adapter-redis'] || allDeps['@igniter-js/adapter-redis']) {\n this.systemCapabilities.detectedPackages.redisAdapter = true;\n this.systemCapabilities.hasRedisStore = true;\n }\n\n if (allDeps['@igniter-js/adapter-bullmq'] || allDeps['@igniter-js/adapter-bullmq']) {\n this.systemCapabilities.detectedPackages.bullmqAdapter = true;\n this.systemCapabilities.hasJobQueue = true;\n }\n }\n\n // Try to connect to Redis if detected\n if (this.systemCapabilities.hasRedisStore) {\n this.testRedisConnection();\n }\n\n } catch (error) {\n console.error('Error detecting system capabilities:', error);\n }\n }\n\n /**\n * Test Redis connection\n */\n private async testRedisConnection() {\n try {\n const Redis = await import('ioredis').then(m => m.default).catch(() => null);\n if (!Redis) return;\n\n const host = process.env.REDIS_HOST || 'localhost';\n const port = parseInt(process.env.REDIS_PORT || '6379');\n\n const redis = new Redis(port, host, {\n lazyConnect: true,\n maxRetriesPerRequest: null,\n retryStrategy: (times) => {\n if (times > 3) {\n return null;\n }\n return Math.min(times * 50, 1000);\n },\n });\n\n await redis.ping();\n \n this.systemCapabilities.redisConnection = {\n host: process.env.REDIS_HOST || 'localhost',\n port: parseInt(process.env.REDIS_PORT || '6379'),\n status: 'connected'\n };\n\n // Update Jobs tab status if Redis is connected\n const jobsStatus = this.processStatus.get(this.jobsTabIndex);\n if (jobsStatus) {\n jobsStatus.status = 'running';\n }\n\n await redis.disconnect();\n\n // Subscribe to API requests and telemetry channels\n const subscriber = redis.duplicate();\n await subscriber.subscribe('igniter:api-requests', 'igniter:telemetry');\n \n subscriber.on('message', (channel, message) => {\n if (channel === 'igniter:api-requests') {\n try {\n const data = JSON.parse(message);\n if (data.type === 'api-request' && data.data) {\n // Convert timestamp string back to Date object\n data.data.timestamp = new Date(data.data.timestamp);\n this.addApiRequest(data.data);\n }\n } catch (error) {\n console.warn('Failed to parse API request message:', error);\n }\n } else if (channel === 'igniter:telemetry') {\n try {\n const data = JSON.parse(message);\n if (data.type === 'telemetry-event' && data.data) {\n // Convert timestamp string back to Date object\n data.data.timestamp = new Date(data.data.timestamp);\n this.addTelemetryEntry(data.data);\n }\n } catch (error) {\n console.warn('Failed to parse telemetry message:', error);\n }\n }\n });\n \n } catch (error) {\n this.systemCapabilities.redisConnection = {\n host: process.env.REDIS_HOST || 'localhost',\n port: parseInt(process.env.REDIS_PORT || '6379'),\n status: 'error'\n };\n\n // Update Jobs tab status if Redis connection failed\n const jobsStatus = this.processStatus.get(this.jobsTabIndex);\n if (jobsStatus) {\n jobsStatus.status = 'error';\n }\n }\n }\n\n private setupKeyHandlers() {\n process.stdin.on('data', (key) => {\n const keyStr = key.toString();\n \n switch (keyStr) {\n case '\\u0003': // Ctrl+C\n this.cleanup();\n process.exit(0);\n break;\n case 'q':\n case 'Q':\n this.cleanup();\n process.exit(0);\n break;\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8': // Support up to 8 tabs (processes + API + Jobs + Telemetry)\n const processIndex = parseInt(keyStr) - 1;\n if (processIndex >= 0 && processIndex <= this.telemetryTabIndex) {\n this.switchToProcess(processIndex);\n }\n break;\n case '\\t': // Tab key\n this.switchToNextProcess();\n break;\n case 'h':\n case 'H':\n case '?':\n this.showHelp();\n break;\n case 'c':\n case 'C':\n this.clearCurrentTab();\n break;\n case 'r':\n case 'R':\n this.forceRefresh();\n break;\n case 'j':\n case 'J':\n // Quick switch to Jobs tab\n if (this.systemCapabilities.hasJobQueue) {\n this.switchToProcess(this.jobsTabIndex);\n }\n break;\n case 's':\n case 'S':\n // Quick switch to Store status (API tab shows store info too)\n if (this.systemCapabilities.hasRedisStore) {\n this.switchToProcess(this.apiTabIndex);\n }\n break;\n case 't':\n case 'T':\n // Quick switch to Telemetry tab\n this.switchToProcess(this.telemetryTabIndex);\n break;\n // Subtab navigation within telemetry\n case 'p':\n case 'P':\n if (this.currentProcess === this.telemetryTabIndex) {\n this.telemetrySubTab = 'spans';\n this.renderDashboard();\n }\n break;\n case 'm':\n case 'M':\n if (this.currentProcess === this.telemetryTabIndex) {\n this.telemetrySubTab = 'metrics';\n this.renderDashboard();\n }\n break;\n case 'e':\n case 'E':\n if (this.currentProcess === this.telemetryTabIndex) {\n this.telemetrySubTab = 'events';\n this.renderDashboard();\n }\n break;\n }\n });\n }\n\n private switchToProcess(index: number) {\n if (index === this.currentProcess) return;\n \n this.currentProcess = index;\n this.renderDashboard();\n }\n\n private switchToNextProcess() {\n this.currentProcess = (this.currentProcess + 1) % (this.processConfigs.length + 3); // +3 for API, Jobs and Telemetry tabs\n this.renderDashboard();\n }\n\n private clearCurrentTab() {\n if (this.currentProcess === this.apiTabIndex) {\n // Clear API requests\n this.apiRequests.splice(0);\n } else if (this.currentProcess === this.jobsTabIndex) {\n // Clear jobs\n this.jobs.splice(0);\n this.queues.clear();\n } else if (this.currentProcess === this.telemetryTabIndex) {\n // Clear telemetry data\n this.telemetryEntries.splice(0);\n this.telemetryMetrics.splice(0);\n } else {\n // Clear process logs\n this.processLogs.get(this.currentProcess)?.splice(0);\n }\n this.renderDashboard();\n }\n\n private forceRefresh() {\n this.renderDashboard();\n }\n\n private showHelp() {\n console.clear();\n this.drawHeader();\n \n console.log(`${ANSI_COLORS.bold}Keyboard Shortcuts:${ANSI_COLORS.reset}`);\n console.log(` ${ANSI_COLORS.cyan}1-${this.processConfigs.length + 3}${ANSI_COLORS.reset} Switch to tab by number`);\n console.log(` ${ANSI_COLORS.cyan}Tab${ANSI_COLORS.reset} Switch to next tab`);\n console.log(` ${ANSI_COLORS.cyan}c${ANSI_COLORS.reset} Clear current tab (logs/requests/jobs/telemetry)`);\n console.log(` ${ANSI_COLORS.cyan}r${ANSI_COLORS.reset} Refresh dashboard`);\n console.log(` ${ANSI_COLORS.cyan}j${ANSI_COLORS.reset} Quick switch to Jobs tab`);\n console.log(` ${ANSI_COLORS.cyan}s${ANSI_COLORS.reset} Quick switch to Store/API tab`);\n console.log(` ${ANSI_COLORS.cyan}t${ANSI_COLORS.reset} Quick switch to Telemetry tab`);\n console.log(` ${ANSI_COLORS.cyan}p/m/e${ANSI_COLORS.reset} Switch telemetry subtabs (spans/metrics/events)`);\n console.log(` ${ANSI_COLORS.cyan}h, ?${ANSI_COLORS.reset} Show this help`);\n console.log(` ${ANSI_COLORS.cyan}q${ANSI_COLORS.reset} Quit interactive mode`);\n console.log(` ${ANSI_COLORS.cyan}Ctrl+C${ANSI_COLORS.reset} Force quit\\n`);\n \n console.log(`${ANSI_COLORS.bold}Available Tabs:${ANSI_COLORS.reset}`);\n this.processConfigs.forEach((config, index) => {\n const status = this.processStatus.get(index);\n const color = ANSI_COLORS[config.color as keyof typeof ANSI_COLORS] || ANSI_COLORS.gray;\n const statusDisplay = status ? this.getStatusDisplay(status.status) : 'Unknown';\n console.log(` ${color}${index + 1}. ${config.name}${ANSI_COLORS.reset} - ${statusDisplay}`);\n });\n \n // Show API tab\n console.log(` ${ANSI_COLORS.green}${this.apiTabIndex + 1}. API Requests${ANSI_COLORS.reset}`);\n console.log(` Real-time HTTP request monitoring`);\n console.log(` Method, path, status code, response time`);\n console.log(` Statistics: total, recent, avg response time`);\n if (this.systemCapabilities.hasRedisStore) {\n const status = this.systemCapabilities.redisConnection?.status || 'unknown';\n const statusColor = status === 'connected' ? ANSI_COLORS.green : \n status === 'error' ? ANSI_COLORS.red : ANSI_COLORS.yellow;\n console.log(` ${statusColor}Redis Store: ${status}${ANSI_COLORS.reset}`);\n }\n \n // Show Jobs tab\n console.log(` ${ANSI_COLORS.cyan}${this.jobsTabIndex + 1}. Background Jobs${ANSI_COLORS.reset}`);\n if (this.systemCapabilities.hasJobQueue) {\n console.log(` Job queue monitoring and management`);\n console.log(` Queue list, job status, real-time updates`);\n console.log(` Job details: status, attempts, progress`);\n if (this.systemCapabilities.detectedPackages.bullmq) {\n console.log(` ${ANSI_COLORS.green}BullMQ: ${this.systemCapabilities.detectedPackages.bullmq}${ANSI_COLORS.reset}`);\n }\n } else {\n console.log(` ${ANSI_COLORS.dim}No job queue detected - install BullMQ adapter${ANSI_COLORS.reset}`);\n }\n \n // Show Telemetry tab\n console.log(` ${ANSI_COLORS.magenta}${this.telemetryTabIndex + 1}. Telemetry Dashboard${ANSI_COLORS.reset}`);\n console.log(` Real-time observability and performance monitoring`);\n console.log(` Spans: trace execution, duration, errors`);\n console.log(` Metrics: counters, histograms, gauges, timers`);\n console.log(` Events: custom telemetry events and logs`);\n console.log(` Statistics: throughput, error rates, top operations`);\n console.log(` ${ANSI_COLORS.dim}Requires OpenTelemetry adapter configuration${ANSI_COLORS.reset}`);\n \n // Show system capabilities\n console.log(`\\n${ANSI_COLORS.bold}System Capabilities:${ANSI_COLORS.reset}`);\n console.log(` Redis Store: ${this.systemCapabilities.hasRedisStore ? ANSI_COLORS.green + '✓' : ANSI_COLORS.red + '✗'}${ANSI_COLORS.reset}`);\n console.log(` Job Queue: ${this.systemCapabilities.hasJobQueue ? ANSI_COLORS.green + '✓' : ANSI_COLORS.red + '✗'}${ANSI_COLORS.reset}`);\n \n console.log(`\\n${ANSI_COLORS.dim}Press any key to return to dashboard...${ANSI_COLORS.reset}`);\n \n // Wait for keypress\n process.stdin.once('data', () => {\n this.renderDashboard();\n });\n }\n\n private addLogEntry(processIndex: number, type: ProcessLogEntry['type'], message: string) {\n const logs = this.processLogs.get(processIndex);\n if (!logs) return;\n\n const entry: ProcessLogEntry = {\n timestamp: new Date(),\n type,\n message: message.trim(),\n process: this.processConfigs[processIndex].name\n };\n\n logs.push(entry);\n \n // Keep buffer size manageable\n if (logs.length > this.maxLogBuffer) {\n logs.splice(0, logs.length - this.maxLogBuffer);\n }\n\n // Update process status\n const status = this.processStatus.get(processIndex);\n if (status) {\n status.lastActivity = new Date();\n if (type === 'error' || type === 'stderr') {\n status.status = 'error';\n } else if (status.status === 'starting') {\n status.status = 'running';\n }\n }\n\n // Only re-render if this is the active process or if it's an important message\n if (processIndex === this.currentProcess || type === 'error' || type === 'success') {\n this.renderDashboard();\n }\n }\n\n private addApiRequest(request: ApiRequestEntry) {\n this.apiRequests.push(request);\n \n // Keep buffer size manageable\n if (this.apiRequests.length > this.maxApiBuffer) {\n this.apiRequests.splice(0, this.apiRequests.length - this.maxApiBuffer);\n }\n\n // Re-render if we're viewing API requests\n if (this.currentProcess === this.apiTabIndex) {\n this.renderDashboard();\n }\n }\n\n private addTelemetryEntry(entry: TelemetryEntry) {\n this.telemetryEntries.push(entry);\n \n // Keep buffer size manageable\n if (this.telemetryEntries.length > this.maxTelemetryBuffer) {\n this.telemetryEntries.splice(0, this.telemetryEntries.length - this.maxTelemetryBuffer);\n }\n\n // Update statistics\n this.updateTelemetryStats();\n\n // Re-render if we're viewing telemetry\n if (this.currentProcess === this.telemetryTabIndex) {\n this.renderDashboard();\n }\n }\n\n private updateTelemetryStats() {\n const now = Date.now();\n const last5min = this.telemetryEntries.filter(entry => \n now - entry.timestamp.getTime() < 5 * 60 * 1000\n );\n \n const spans = this.telemetryEntries.filter(entry => entry.type === 'span');\n const activeSpans = spans.filter(span => span.status === 'active');\n const completedSpans = spans.filter(span => span.status === 'completed');\n const failedSpans = spans.filter(span => span.status === 'failed');\n \n const totalDuration = completedSpans.reduce((sum, span) => sum + (span.duration || 0), 0);\n const avgDuration = completedSpans.length > 0 ? totalDuration / completedSpans.length : 0;\n \n const errorRate = spans.length > 0 ? (failedSpans.length / spans.length) * 100 : 0;\n const throughput = last5min.length / 5; // per minute\n \n // Calculate top operations\n const operationCounts = spans.reduce((acc, span) => {\n const key = span.name;\n if (!acc[key]) {\n acc[key] = { count: 0, totalDuration: 0 };\n }\n acc[key].count++;\n acc[key].totalDuration += span.duration || 0;\n return acc;\n }, {} as Record<string, { count: number; totalDuration: number }>);\n \n const topOperations = Object.entries(operationCounts)\n .map(([name, data]) => ({\n name,\n count: data.count,\n avgDuration: data.count > 0 ? data.totalDuration / data.count : 0\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 5);\n \n this.telemetryStats = {\n totalSpans: spans.length,\n activeSpans: activeSpans.length,\n avgDuration,\n errorRate,\n throughput,\n topOperations\n };\n }\n\n private renderDashboard() {\n // Clear screen and move cursor to top\n console.clear();\n process.stdout.write('\\x1b[H');\n\n this.drawHeader();\n this.drawTabs();\n this.drawCurrentTabStatus();\n this.drawSeparator();\n this.drawCurrentTabContent();\n this.drawFooter();\n }\n\n private drawHeader() {\n const uptime = this.formatUptime(Date.now() - this.startTime);\n const versionInfo = this.projectInfo.igniterVersion ? `v${this.projectInfo.igniterVersion}` : '';\n const projectName = this.projectInfo.name !== 'Unknown Project' ? ` - ${this.projectInfo.name}` : '';\n \n const title = `${ANSI_COLORS.bold}${ANSI_COLORS.blue}Igniter.js ${versionInfo}${projectName}${ANSI_COLORS.reset}`;\n const subtitle = `${ANSI_COLORS.dim}Uptime: ${uptime} | Press h for help${ANSI_COLORS.reset}`;\n \n console.log(`\\n${title}`);\n console.log(`${subtitle}\\n`);\n }\n\n private drawTabs() {\n const tabs = [];\n \n // Add process tabs with simplified colors\n this.processConfigs.forEach((config, index) => {\n const isActive = index === this.currentProcess;\n const status = this.processStatus.get(index);\n \n let statusIcon = '○';\n let colorState: 'active' | 'default' | 'failed' = 'default';\n \n if (isActive) {\n statusIcon = '●';\n colorState = 'active';\n } else if (status?.status === 'error') {\n statusIcon = '✗';\n colorState = 'failed';\n } else if (status?.status === 'running') {\n statusIcon = '●';\n colorState = 'default';\n }\n \n const color = this.getSimplifiedColor(config.name, colorState);\n const style = isActive ? ANSI_COLORS.bold : '';\n \n tabs.push(`${style}${color}${statusIcon} ${index + 1}. ${config.name}${ANSI_COLORS.reset}`);\n });\n \n // Add API tab\n const isApiActive = this.currentProcess === this.apiTabIndex;\n const apiStatus = this.processStatus.get(this.apiTabIndex);\n let apiColorState: 'active' | 'default' | 'failed' = 'default';\n let apiIcon = '○';\n \n if (isApiActive) {\n apiIcon = '●';\n apiColorState = 'active';\n } else if (apiStatus?.status === 'error') {\n apiIcon = '✗';\n apiColorState = 'failed';\n } else if (apiStatus?.status === 'running') {\n apiIcon = '●';\n apiColorState = 'default';\n }\n \n const apiColor = this.getSimplifiedColor('api', apiColorState);\n const apiStyle = isApiActive ? ANSI_COLORS.bold : '';\n tabs.push(`${apiStyle}${apiColor}${apiIcon} ${this.apiTabIndex + 1}. Igniter.js API${ANSI_COLORS.reset}`);\n \n // Add Jobs tab with queue count\n const isJobsActive = this.currentProcess === this.jobsTabIndex;\n const jobsStatus = this.processStatus.get(this.jobsTabIndex);\n let jobsColorState: 'active' | 'default' | 'failed' = 'default';\n let jobsIcon = '○';\n \n if (isJobsActive) {\n jobsIcon = '●';\n jobsColorState = 'active';\n } else if (jobsStatus?.status === 'error') {\n jobsIcon = '✗';\n jobsColorState = 'failed';\n } else if (jobsStatus?.status === 'running') {\n jobsIcon = '●';\n jobsColorState = 'default';\n }\n \n const jobsColor = this.getSimplifiedColor('jobs', jobsColorState);\n const jobsStyle = isJobsActive ? ANSI_COLORS.bold : '';\n const queueCount = this.queues.size;\n const queueDisplay = queueCount > 0 ? ` (${queueCount} Queue${queueCount !== 1 ? 's' : ''})` : '';\n tabs.push(`${jobsStyle}${jobsColor}${jobsIcon} ${this.jobsTabIndex + 1}. Igniter.js Jobs${queueDisplay}${ANSI_COLORS.reset}`);\n \n // Add Telemetry tab\n const isTelemetryActive = this.currentProcess === this.telemetryTabIndex;\n const telemetryStatus = this.processStatus.get(this.telemetryTabIndex);\n let telemetryIcon = '○';\n \n if (isTelemetryActive) {\n telemetryIcon = '●';\n } else if (telemetryStatus?.status === 'error') {\n telemetryIcon = '✗';\n } else if (telemetryStatus?.status === 'running') {\n telemetryIcon = '●';\n }\n \n const telemetryColor = this.getSimplifiedColor('telemetry', isTelemetryActive ? 'active' : telemetryStatus?.status === 'error' ? 'failed' : 'default');\n const telemetryStyle = isTelemetryActive ? ANSI_COLORS.bold : '';\n tabs.push(`${telemetryStyle}${telemetryColor}${telemetryIcon} ${this.telemetryTabIndex + 1}. Telemetry Dashboard${ANSI_COLORS.reset}`);\n \n console.log(`${tabs.join(' ')}\\n`);\n }\n\n private drawCurrentTabStatus() {\n if (this.currentProcess === this.apiTabIndex) {\n // API tab statistics\n const last5min = this.apiRequests.filter(req => \n Date.now() - req.timestamp.getTime() < 5 * 60 * 1000\n );\n \n const statusCounts = this.apiRequests.reduce((acc, req) => {\n const statusClass = this.getStatusClass(req.statusCode);\n acc[statusClass] = (acc[statusClass] || 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n\n const avgResponseTime = this.apiRequests.length > 0 \n ? (this.apiRequests.reduce((sum, req) => sum + req.responseTime, 0) / this.apiRequests.length).toFixed(0)\n : '0';\n\n const statsLine = [\n `Total: ${this.apiRequests.length}`,\n `Last 5m: ${last5min.length}`,\n `2xx: ${statusCounts['success'] || 0}`,\n `4xx: ${statusCounts['client-error'] || 0}`,\n `5xx: ${statusCounts['server-error'] || 0}`,\n `Avg: ${avgResponseTime}ms`\n ].join(' | ');\n\n // Add Redis status if available\n let fullStats = statsLine;\n if (this.systemCapabilities.hasRedisStore && this.systemCapabilities.redisConnection) {\n const redisStatus = this.systemCapabilities.redisConnection.status;\n const redisColor = redisStatus === 'connected' ? ANSI_COLORS.green : ANSI_COLORS.red;\n fullStats += ` | Redis: ${redisColor}${redisStatus}${ANSI_COLORS.reset}${ANSI_COLORS.dim}`;\n }\n\n console.log(`${ANSI_COLORS.dim}${fullStats}${ANSI_COLORS.reset}\\n`);\n } else if (this.currentProcess === this.jobsTabIndex) {\n // Jobs tab statistics\n const statusCounts = this.jobs.reduce((acc, job) => {\n acc[job.status] = (acc[job.status] || 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n\n const queueCount = this.queues.size;\n const totalJobs = this.jobs.length;\n const activeJobs = statusCounts['active'] || 0;\n const failedJobs = statusCounts['failed'] || 0;\n\n const statsLine = [\n `Queues: ${queueCount}`,\n `Total Jobs: ${totalJobs}`,\n `Active: ${activeJobs}`,\n `Waiting: ${statusCounts['waiting'] || 0}`,\n `Completed: ${statusCounts['completed'] || 0}`,\n `Failed: ${failedJobs}`\n ].join(' | ');\n\n // Add capability status\n let fullStats = statsLine;\n if (this.systemCapabilities.hasJobQueue) {\n fullStats += ` | BullMQ: ${ANSI_COLORS.green}enabled${ANSI_COLORS.reset}${ANSI_COLORS.dim}`;\n } else {\n fullStats += ` | BullMQ: ${ANSI_COLORS.yellow}not detected${ANSI_COLORS.reset}${ANSI_COLORS.dim}`;\n }\n\n console.log(`${ANSI_COLORS.dim}${fullStats}${ANSI_COLORS.reset}\\n`);\n } else {\n // Process status\n const currentStatus = this.processStatus.get(this.currentProcess);\n if (!currentStatus) return;\n\n const statusLine = [\n `Status: ${this.getStatusDisplay(currentStatus.status)}`,\n currentStatus.pid ? `PID: ${currentStatus.pid}` : '',\n currentStatus.lastActivity ? `Last: ${this.formatTime(currentStatus.lastActivity)}` : ''\n ].filter(Boolean).join(' | ');\n\n console.log(`${ANSI_COLORS.dim}${statusLine}${ANSI_COLORS.reset}\\n`);\n }\n }\n\n private drawCurrentTabContent() {\n if (this.currentProcess === this.apiTabIndex) {\n this.drawApiRequests();\n } else if (this.currentProcess === this.jobsTabIndex) {\n this.drawJobsInterface();\n } else if (this.currentProcess === this.telemetryTabIndex) {\n this.drawTelemetryInterface();\n } else {\n this.drawCurrentProcessLogs();\n }\n }\n\n private drawApiRequests() {\n const visibleRequests = this.apiRequests.slice(-15); // Show last 15 requests\n \n if (visibleRequests.length === 0) {\n console.log(`${ANSI_COLORS.dim}No API requests yet. See docs at https://igniterjs.com/docs/api${ANSI_COLORS.reset}\\n`);\n return;\n }\n\n visibleRequests.forEach(req => {\n const timestamp = this.formatTime(req.timestamp);\n const methodColor = this.getMethodColor(req.method);\n const statusColor = this.getStatusColor(req.statusCode);\n const responseTime = req.responseTime.toFixed(0);\n \n // Format: 14:30:25 GET /api/users 200 45ms\n console.log(`${ANSI_COLORS.dim}${timestamp}${ANSI_COLORS.reset} ${methodColor}${req.method.padEnd(4)}${ANSI_COLORS.reset} ${req.path.padEnd(20)} ${statusColor}${req.statusCode}${ANSI_COLORS.reset} ${ANSI_COLORS.dim}${responseTime}ms${ANSI_COLORS.reset}`);\n });\n \n console.log(); // Empty line for spacing\n }\n\n /**\n * Draw the Jobs interface with sidebar (queues) and main content (jobs)\n */\n private drawJobsInterface() {\n if (!this.systemCapabilities.hasJobQueue) {\n // Show setup instructions if job queue is not detected\n console.log(`${ANSI_COLORS.dim}Background Jobs not configured${ANSI_COLORS.reset}\\n`);\n console.log(`${ANSI_COLORS.yellow}To enable job monitoring:${ANSI_COLORS.reset}`);\n console.log(` 1. Install BullMQ: ${ANSI_COLORS.cyan}npm install bullmq${ANSI_COLORS.reset}`);\n console.log(` 2. Install adapter: ${ANSI_COLORS.cyan}npm install @igniter-js/adapter-bullmq${ANSI_COLORS.reset}`);\n console.log(` 3. Configure in your Igniter router:\\n`);\n console.log(`${ANSI_COLORS.dim} import { createBullMQAdapter } from '@igniter-js/adapter-bullmq'${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim} const jobs = createBullMQAdapter({ store: redisStore })${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim} const igniter = Igniter.context().store(store).jobs(jobs).create()${ANSI_COLORS.reset}\\n`);\n return;\n }\n\n const terminalWidth = process.stdout.columns || 80;\n const sidebarWidth = Math.min(25, Math.floor(terminalWidth * 0.3)); // 30% of terminal or max 25 chars\n const contentWidth = terminalWidth - sidebarWidth - 3; // 3 chars for separator\n\n // Show jobs interface\n this.drawJobsContent();\n }\n\n /**\n * Draw the jobs content area\n */\n private drawJobsContent() {\n const filteredJobs = this.selectedQueue \n ? this.jobs.filter(job => job.queue === this.selectedQueue)\n : this.jobs;\n\n const visibleJobs = filteredJobs.slice(-12); // Show last 12 jobs\n \n if (visibleJobs.length === 0) {\n console.log(`${ANSI_COLORS.dim}No jobs found. See docs at igniter.js.org/docs/jobs${ANSI_COLORS.reset}\\n`);\n return;\n }\n\n // Job list header\n console.log(`${ANSI_COLORS.bold}BACKGROUND JOBS${this.selectedQueue ? ` - ${this.selectedQueue}` : ''}${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim}${'─'.repeat(60)}${ANSI_COLORS.reset}`);\n \n visibleJobs.forEach(job => {\n const timestamp = this.formatTime(job.createdAt);\n const statusColor = this.getJobStatusColor(job.status);\n const statusIcon = this.getJobStatusIcon(job.status);\n const progress = job.progress ? ` ${job.progress}%` : '';\n \n // Format: 14:30:25 ✓ sendEmail completed (3/3)\n const nameWidth = 15;\n const name = job.name.length > nameWidth ? \n job.name.substring(0, nameWidth - 3) + '...' : job.name.padEnd(nameWidth);\n \n const attempts = `(${job.attemptsMade}/${job.maxAttempts})`;\n \n console.log(`${ANSI_COLORS.dim}${timestamp}${ANSI_COLORS.reset} ${statusColor}${statusIcon}${ANSI_COLORS.reset} ${name} ${statusColor}${job.status}${progress}${ANSI_COLORS.reset} ${ANSI_COLORS.dim}${attempts}${ANSI_COLORS.reset}`);\n \n // Show error if job failed\n if (job.status === 'failed' && job.error) {\n const errorMsg = job.error.length > 50 ? \n job.error.substring(0, 47) + '...' : job.error;\n console.log(`${ANSI_COLORS.dim} ${ANSI_COLORS.red}Error: ${errorMsg}${ANSI_COLORS.reset}`);\n }\n });\n \n console.log(); // Empty line for spacing\n }\n\n /**\n * Get color for job status\n */\n private getJobStatusColor(status: JobEntry['status']): string {\n switch (status) {\n case 'completed': return ANSI_COLORS.green;\n case 'failed': return ANSI_COLORS.red;\n case 'active': return ANSI_COLORS.blue;\n case 'waiting': return ANSI_COLORS.yellow;\n case 'delayed': return ANSI_COLORS.cyan;\n case 'paused': return ANSI_COLORS.gray;\n case 'stalled': return ANSI_COLORS.magenta;\n default: return ANSI_COLORS.white;\n }\n }\n\n /**\n * Get icon for job status\n */\n private getJobStatusIcon(status: JobEntry['status']): string {\n switch (status) {\n case 'completed': return '✓';\n case 'failed': return '✗';\n case 'active': return '⚡';\n case 'waiting': return '⏳';\n case 'delayed': return '⏰';\n case 'paused': return '⏸';\n case 'stalled': return '⚠';\n default: return '◦';\n }\n }\n\n /**\n * Draw the Telemetry interface with subtabs and statistics\n */\n private drawTelemetryInterface() {\n // Draw subtab navigation\n const subtabs = [\n { key: 'spans', label: 'Spans', active: this.telemetrySubTab === 'spans' },\n { key: 'metrics', label: 'Metrics', active: this.telemetrySubTab === 'metrics' },\n { key: 'events', label: 'Events', active: this.telemetrySubTab === 'events' }\n ];\n\n console.log(`${ANSI_COLORS.bold}TELEMETRY DASHBOARD${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim}${'─'.repeat(60)}${ANSI_COLORS.reset}`);\n \n // Subtab navigation\n const subtabDisplay = subtabs.map(tab => {\n const color = tab.active ? ANSI_COLORS.cyan : ANSI_COLORS.dim;\n const indicator = tab.active ? '●' : '○';\n return `${color}${indicator} ${tab.label}${ANSI_COLORS.reset}`;\n }).join(' ');\n \n console.log(`${subtabDisplay} ${ANSI_COLORS.dim}(p/m/e to switch)${ANSI_COLORS.reset}\\n`);\n\n // Statistics overview\n this.drawTelemetryStats();\n \n // Content based on selected subtab\n switch (this.telemetrySubTab) {\n case 'spans':\n this.drawTelemetrySpans();\n break;\n case 'metrics':\n this.drawTelemetryMetrics();\n break;\n case 'events':\n this.drawTelemetryEvents();\n break;\n }\n }\n\n /**\n * Draw telemetry statistics overview\n */\n private drawTelemetryStats() {\n const stats = this.telemetryStats;\n \n console.log(`${ANSI_COLORS.bold}OVERVIEW${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim}${'─'.repeat(40)}${ANSI_COLORS.reset}`);\n \n const totalColor = stats.totalSpans > 0 ? ANSI_COLORS.green : ANSI_COLORS.dim;\n const activeColor = stats.activeSpans > 0 ? ANSI_COLORS.yellow : ANSI_COLORS.dim;\n const errorColor = stats.errorRate > 10 ? ANSI_COLORS.red : \n stats.errorRate > 5 ? ANSI_COLORS.yellow : ANSI_COLORS.green;\n \n console.log(`Total Spans: ${totalColor}${stats.totalSpans}${ANSI_COLORS.reset}`);\n console.log(`Active Spans: ${activeColor}${stats.activeSpans}${ANSI_COLORS.reset}`);\n console.log(`Avg Duration: ${ANSI_COLORS.cyan}${stats.avgDuration.toFixed(2)}ms${ANSI_COLORS.reset}`);\n console.log(`Error Rate: ${errorColor}${stats.errorRate.toFixed(1)}%${ANSI_COLORS.reset}`);\n console.log(`Throughput: ${ANSI_COLORS.blue}${stats.throughput.toFixed(1)}/min${ANSI_COLORS.reset}`);\n \n // Top operations\n if (stats.topOperations.length > 0) {\n console.log(`\\n${ANSI_COLORS.bold}TOP OPERATIONS${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim}${'─'.repeat(40)}${ANSI_COLORS.reset}`);\n \n stats.topOperations.slice(0, 3).forEach((op, index) => {\n const rank = `${index + 1}.`;\n const name = op.name.length > 20 ? op.name.substring(0, 17) + '...' : op.name;\n console.log(`${ANSI_COLORS.dim}${rank.padEnd(3)}${ANSI_COLORS.reset}${name.padEnd(20)} ${ANSI_COLORS.cyan}${op.count}x${ANSI_COLORS.reset} ${ANSI_COLORS.dim}(${op.avgDuration.toFixed(1)}ms avg)${ANSI_COLORS.reset}`);\n });\n }\n \n console.log(); // Empty line\n }\n\n /**\n * Draw telemetry spans\n */\n private drawTelemetrySpans() {\n const spans = this.telemetryEntries\n .filter(entry => entry.type === 'span')\n .slice(-10); // Show last 10 spans\n \n if (spans.length === 0) {\n console.log(`${ANSI_COLORS.dim}No spans yet. Telemetry will appear here when your app processes requests.${ANSI_COLORS.reset}\\n`);\n return;\n }\n\n console.log(`${ANSI_COLORS.bold}RECENT SPANS${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim}${'─'.repeat(60)}${ANSI_COLORS.reset}`);\n \n spans.forEach(span => {\n const timestamp = this.formatTime(span.timestamp);\n const statusColor = this.getTelemetryStatusColor(span.status);\n const statusIcon = this.getTelemetryStatusIcon(span.status);\n const operationColor = this.getOperationColor(span.operation);\n const duration = span.duration ? `${span.duration.toFixed(1)}ms` : 'active';\n \n // Format: 14:30:25 ✓ HTTP user.create 45.2ms\n const nameWidth = 20;\n const name = span.name.length > nameWidth ? \n span.name.substring(0, nameWidth - 3) + '...' : span.name.padEnd(nameWidth);\n \n console.log(`${ANSI_COLORS.dim}${timestamp}${ANSI_COLORS.reset} ${statusColor}${statusIcon}${ANSI_COLORS.reset} ${operationColor}${span.operation.toUpperCase().padEnd(4)}${ANSI_COLORS.reset} ${name} ${ANSI_COLORS.cyan}${duration}${ANSI_COLORS.reset}`);\n \n // Show trace ID if available\n if (span.traceId) {\n console.log(`${ANSI_COLORS.dim} Trace: ${span.traceId.substring(0, 16)}...${ANSI_COLORS.reset}`);\n }\n \n // Show error if span failed\n if (span.status === 'failed' && span.error) {\n const errorMsg = span.error.length > 50 ? \n span.error.substring(0, 47) + '...' : span.error;\n console.log(`${ANSI_COLORS.dim} ${ANSI_COLORS.red}Error: ${errorMsg}${ANSI_COLORS.reset}`);\n }\n });\n \n console.log(); // Empty line\n }\n\n /**\n * Draw telemetry metrics\n */\n private drawTelemetryMetrics() {\n const metrics = this.telemetryMetrics.slice(-10); // Show last 10 metrics\n \n if (metrics.length === 0) {\n console.log(`${ANSI_COLORS.dim}No metrics yet. Metrics will appear here when telemetry is active.${ANSI_COLORS.reset}\\n`);\n return;\n }\n\n console.log(`${ANSI_COLORS.bold}RECENT METRICS${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim}${'─'.repeat(60)}${ANSI_COLORS.reset}`);\n \n metrics.forEach(metric => {\n const timestamp = this.formatTime(metric.timestamp);\n const typeColor = this.getMetricTypeColor(metric.type);\n const typeIcon = this.getMetricTypeIcon(metric.type);\n \n // Format: 14:30:25 📊 COUNTER http_requests_total 1247\n const nameWidth = 25;\n const name = metric.name.length > nameWidth ? \n metric.name.substring(0, nameWidth - 3) + '...' : metric.name.padEnd(nameWidth);\n \n console.log(`${ANSI_COLORS.dim}${timestamp}${ANSI_COLORS.reset} ${typeColor}${typeIcon}${ANSI_COLORS.reset} ${typeColor}${metric.type.toUpperCase().padEnd(8)}${ANSI_COLORS.reset} ${name} ${ANSI_COLORS.cyan}${metric.value}${ANSI_COLORS.reset}`);\n \n // Show tags if available\n const tags = Object.entries(metric.tags);\n if (tags.length > 0) {\n const tagStr = tags.map(([key, value]) => `${key}=${value}`).join(', ');\n const displayTags = tagStr.length > 40 ? tagStr.substring(0, 37) + '...' : tagStr;\n console.log(`${ANSI_COLORS.dim} Tags: ${displayTags}${ANSI_COLORS.reset}`);\n }\n });\n \n console.log(); // Empty line\n }\n\n /**\n * Draw telemetry events\n */\n private drawTelemetryEvents() {\n const events = this.telemetryEntries\n .filter(entry => entry.type === 'event')\n .slice(-10); // Show last 10 events\n \n if (events.length === 0) {\n console.log(`${ANSI_COLORS.dim}No events yet. Events will appear here when telemetry is active.${ANSI_COLORS.reset}\\n`);\n return;\n }\n\n console.log(`${ANSI_COLORS.bold}RECENT EVENTS${ANSI_COLORS.reset}`);\n console.log(`${ANSI_COLORS.dim}${'─'.repeat(60)}${ANSI_COLORS.reset}`);\n \n events.forEach(event => {\n const timestamp = this.formatTime(event.timestamp);\n const operationColor = this.getOperationColor(event.operation);\n \n // Format: 14:30:25 🔔 HTTP user.login\n const nameWidth = 30;\n const name = event.name.length > nameWidth ? \n event.name.substring(0, nameWidth - 3) + '...' : event.name.padEnd(nameWidth);\n \n console.log(`${ANSI_COLORS.dim}${timestamp}${ANSI_COLORS.reset} ${ANSI_COLORS.blue}🔔${ANSI_COLORS.reset} ${operationColor}${event.operation.toUpperCase().padEnd(4)}${ANSI_COLORS.reset} ${name}`);\n \n // Show tags if available\n const tags = Object.entries(event.tags);\n if (tags.length > 0) {\n const tagStr = tags.map(([key, value]) => `${key}=${value}`).join(', ');\n const displayTags = tagStr.length > 40 ? tagStr.substring(0, 37) + '...' : tagStr;\n console.log(`${ANSI_COLORS.dim} ${displayTags}${ANSI_COLORS.reset}`);\n }\n });\n \n console.log(); // Empty line\n }\n\n /**\n * Get color for telemetry status\n */\n private getTelemetryStatusColor(status: TelemetryEntry['status']): string {\n switch (status) {\n case 'completed': return ANSI_COLORS.green;\n case 'failed': return ANSI_COLORS.red;\n case 'active': return ANSI_COLORS.yellow;\n default: return ANSI_COLORS.white;\n }\n }\n\n /**\n * Get icon for telemetry status\n */\n private getTelemetryStatusIcon(status: TelemetryEntry['status']): string {\n switch (status) {\n case 'completed': return '✓';\n case 'failed': return '✗';\n case 'active': return '⚡';\n default: return '◦';\n }\n }\n\n /**\n * Get color for operation type\n */\n private getOperationColor(operation: TelemetryEntry['operation']): string {\n switch (operation) {\n case 'http': return ANSI_COLORS.green;\n case 'job': return ANSI_COLORS.blue;\n case 'db': return ANSI_COLORS.magenta;\n case 'cache': return ANSI_COLORS.cyan;\n case 'custom': return ANSI_COLORS.yellow;\n default: return ANSI_COLORS.white;\n }\n }\n\n /**\n * Get color for metric type\n */\n private getMetricTypeColor(type: TelemetryMetric['type']): string {\n switch (type) {\n case 'counter': return ANSI_COLORS.blue;\n case 'histogram': return ANSI_COLORS.green;\n case 'gauge': return ANSI_COLORS.yellow;\n case 'timer': return ANSI_COLORS.cyan;\n default: return ANSI_COLORS.white;\n }\n }\n\n /**\n * Get icon for metric type\n */\n private getMetricTypeIcon(type: TelemetryMetric['type']): string {\n switch (type) {\n case 'counter': return '📊';\n case 'histogram': return '📈';\n case 'gauge': return '⚡';\n case 'timer': return '⏱';\n default: return '📋';\n }\n }\n\n private drawFooter() {\n const maxTabs = this.processConfigs.length + 1;\n const shortcuts = [\n `1-${maxTabs}: Switch tab`,\n 'Tab: Next',\n 'c: Clear',\n 'r: Refresh',\n 'h: Help',\n 'q: Quit'\n ];\n \n console.log(`${ANSI_COLORS.dim}${shortcuts.join(' | ')}${ANSI_COLORS.reset}`);\n }\n\n private drawSeparator() {\n const width = process.stdout.columns || 80;\n const separator = '─'.repeat(width);\n console.log(`${ANSI_COLORS.dim}${separator}${ANSI_COLORS.reset}`);\n }\n\n private drawCurrentProcessLogs() {\n const logs = this.processLogs.get(this.currentProcess) || [];\n const visibleLogs = logs.slice(-15); // Show last 15 log entries\n \n if (visibleLogs.length === 0) {\n console.log(`${ANSI_COLORS.dim}No logs yet...${ANSI_COLORS.reset}\\n`);\n return;\n }\n\n visibleLogs.forEach(log => {\n const timestamp = this.formatTime(log.timestamp);\n const icon = this.getLogIcon(log.type);\n const color = this.getLogColor(log.type);\n \n console.log(`${ANSI_COLORS.dim}${timestamp}${ANSI_COLORS.reset} ${color}${icon}${ANSI_COLORS.reset} ${log.message}`);\n });\n \n console.log(); // Empty line for spacing\n }\n\n private getMethodColor(method: string): string {\n switch (method.toUpperCase()) {\n case 'GET': return ANSI_COLORS.green;\n case 'POST': return ANSI_COLORS.blue;\n case 'PUT': return ANSI_COLORS.yellow;\n case 'PATCH': return ANSI_COLORS.cyan;\n case 'DELETE': return ANSI_COLORS.red;\n default: return ANSI_COLORS.white;\n }\n }\n\n private getStatusColor(statusCode: number): string {\n if (statusCode >= 200 && statusCode < 300) return ANSI_COLORS.green;\n if (statusCode >= 300 && statusCode < 400) return ANSI_COLORS.cyan;\n if (statusCode >= 400 && statusCode < 500) return ANSI_COLORS.yellow;\n if (statusCode >= 500) return ANSI_COLORS.red;\n return ANSI_COLORS.white;\n }\n\n private getStatusClass(statusCode: number): string {\n if (statusCode >= 200 && statusCode < 300) return 'success';\n if (statusCode >= 300 && statusCode < 400) return 'redirect';\n if (statusCode >= 400 && statusCode < 500) return 'client-error';\n if (statusCode >= 500) return 'server-error';\n return 'unknown';\n }\n\n private getLogIcon(type: ProcessLogEntry['type']): string {\n switch (type) {\n case 'success': return '◆';\n case 'error': case 'stderr': return '◇';\n case 'warn': return '◇';\n case 'info': return '◇';\n default: return '○';\n }\n }\n\n private getLogColor(type: ProcessLogEntry['type']): string {\n switch (type) {\n case 'success': return ANSI_COLORS.green;\n case 'error': case 'stderr': return ANSI_COLORS.red;\n case 'warn': return ANSI_COLORS.yellow;\n case 'info': return ANSI_COLORS.cyan;\n default: return ANSI_COLORS.white;\n }\n }\n\n private formatTime(date: Date): string {\n return date.toLocaleTimeString('en-US', { \n hour12: false, \n hour: '2-digit', \n minute: '2-digit', \n second: '2-digit' \n });\n }\n\n private formatUptime(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n \n if (hours > 0) return `${hours}h ${minutes % 60}m`;\n if (minutes > 0) return `${minutes}m ${seconds % 60}s`;\n return `${seconds}s`;\n }\n\n private getStatusDisplay(status: ProcessStatus['status']): string {\n switch (status) {\n case 'starting': return `${ANSI_COLORS.yellow}Starting${ANSI_COLORS.reset}`;\n case 'running': return `${ANSI_COLORS.green}Running${ANSI_COLORS.reset}`;\n case 'error': return `${ANSI_COLORS.red}Error${ANSI_COLORS.reset}`;\n case 'stopped': return `${ANSI_COLORS.gray}Stopped${ANSI_COLORS.reset}`;\n default: return status;\n }\n }\n\n private startApiMonitoring() {\n // Try to connect to Redis for real-time API monitoring\n this.connectToRedis();\n }\n \n private async connectToRedis() {\n try {\n // Try to import Redis client dynamically\n const Redis = await import('ioredis').then(m => m.default).catch(() => null);\n \n if (!Redis) {\n console.warn('Redis not installed - API monitoring will use demo mode only');\n return;\n }\n \n const url = process.env.REDIS_URL || 'redis://localhost:6379';\n\n const redis = new Redis(url);\n \n // Test connection\n await redis.ping();\n \n // Subscribe to API requests and telemetry channels\n const subscriber = redis.duplicate();\n await subscriber.subscribe('igniter:api-requests', 'igniter:telemetry');\n \n subscriber.on('message', (channel, message) => {\n if (channel === 'igniter:api-requests') {\n try {\n const data = JSON.parse(message);\n if (data.type === 'api-request' && data.data) {\n // Convert timestamp string back to Date object\n data.data.timestamp = new Date(data.data.timestamp);\n this.addApiRequest(data.data);\n }\n } catch (error) {\n console.warn('Failed to parse API request message:', error);\n }\n } else if (channel === 'igniter:telemetry') {\n try {\n const data = JSON.parse(message);\n if (data.type === 'telemetry-event' && data.data) {\n // Convert timestamp string back to Date object\n data.data.timestamp = new Date(data.data.timestamp);\n this.addTelemetryEntry(data.data);\n }\n } catch (error) {\n console.warn('Failed to parse telemetry message:', error);\n }\n }\n });\n \n } catch (error) {\n // Redis connection failed - continue with demo mode\n console.warn('Redis connection failed - API monitoring will use demo mode only');\n }\n }\n\n async start() {\n this.logger.info('Starting interactive dashboard', {\n processCount: this.processConfigs.length\n });\n\n // Set environment variable to indicate interactive mode for child processes\n process.env.IGNITER_INTERACTIVE_MODE = 'true';\n\n // Start all processes\n this.processes = this.processConfigs.map((config, index) => {\n const proc = spawn(config.command, [], {\n cwd: config.cwd || process.cwd(),\n env: { \n ...process.env, \n ...config.env,\n IGNITER_INTERACTIVE_MODE: 'true'\n },\n stdio: ['pipe', 'pipe', 'pipe'],\n shell: true\n });\n\n // Update status with PID\n const status = this.processStatus.get(index);\n if (status && proc.pid) {\n status.pid = proc.pid;\n status.status = 'running';\n }\n\n // Handle process output - buffer instead of direct output\n proc.stdout?.on('data', (data: Buffer) => {\n const lines = data.toString().split('\\n').filter((line: string) => line.trim());\n lines.forEach((line: string) => {\n this.addLogEntry(index, 'stdout', line);\n });\n });\n\n proc.stderr?.on('data', (data: Buffer) => {\n const lines = data.toString().split('\\n').filter((line: string) => line.trim());\n lines.forEach((line: string) => {\n this.addLogEntry(index, 'stderr', line);\n });\n });\n\n proc.on('exit', (code: number | null) => {\n const status = this.processStatus.get(index);\n if (status) {\n status.status = code === 0 ? 'stopped' : 'error';\n }\n this.addLogEntry(index, code === 0 ? 'info' : 'error', `Process exited with code ${code}`);\n });\n\n proc.on('error', (error: Error) => {\n const status = this.processStatus.get(index);\n if (status) {\n status.status = 'error';\n }\n this.addLogEntry(index, 'error', `Process error: ${error.message}`);\n });\n\n return proc;\n });\n\n // Initial dashboard render\n this.renderDashboard();\n\n // Set up periodic refresh for status updates (every 5 seconds)\n this.refreshInterval = setInterval(() => {\n this.renderDashboard();\n }, 5000);\n\n // Start API monitoring for demo purposes\n this.startApiMonitoring();\n\n // Wait for all processes to complete\n await Promise.all(\n this.processes.map(proc => new Promise<void>((resolve) => {\n proc.on('exit', resolve);\n }))\n );\n }\n\n private cleanup() {\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval);\n }\n \n if (this.apiMonitoringInterval) {\n clearInterval(this.apiMonitoringInterval);\n }\n \n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n \n this.rl.close();\n \n // Kill all processes\n this.processes.forEach(proc => {\n if (!proc.killed && proc.pid) {\n kill(proc.pid, 'SIGTERM', (err?: Error) => {\n if (err) {\n // Fallback to force kill if graceful termination fails\n setTimeout(() => {\n if (proc.pid && !proc.killed) {\n kill(proc.pid, 'SIGKILL');\n }\n }, 5000);\n }\n });\n }\n });\n }\n}\n\n/**\n * Get the appropriate color for a framework\n */\nfunction getFrameworkColor(framework: SupportedFramework): string {\n return PROCESS_COLORS[framework as keyof typeof PROCESS_COLORS] || PROCESS_COLORS.generic;\n}\n\n/**\n * Run multiple processes with interactive switching capability\n */\nexport async function runInteractiveProcesses(\n configs: ProcessConfig[]\n): Promise<void> {\n const manager = new InteractiveProcessManager(configs);\n await manager.start();\n}\n\n/**\n * Run multiple processes concurrently with visual separation\n */\nexport async function runConcurrentProcesses(\n options: ConcurrentProcessesOptions\n): Promise<void> {\n const logger = createChildLogger({ component: 'concurrent-processes' });\n \n // Use interactive mode if requested\n if (options.interactive) {\n return runInteractiveProcesses(options.processes);\n }\n \n logger.info('Starting concurrent processes', {\n processCount: options.processes.length,\n processes: options.processes.map(p => ({ name: p.name, command: p.command }))\n });\n\n try {\n\n const result: ConcurrentlyResult = await concurrently(\n options.processes.map(process => ({\n command: process.command,\n name: process.name,\n cwd: process.cwd,\n env: process.env ? { ...process.env } : undefined\n })),\n {\n prefix: 'name' as const,\n killOthers: ['failure', 'success'] as const,\n prefixLength: 10,\n restartTries: 0,\n successCondition: 'first' as const,\n raw: false,\n }\n );\n\n await result;\n logger.success('All processes completed successfully');\n \n } catch (error) {\n logger.error('Concurrent processes failed', { error: formatError(error) });\n throw error;\n }\n}\n\n/**\n * Create a process config for the Igniter watcher\n */\nexport function createIgniterWatcherProcess(options: {\n cwd?: string;\n debug?: boolean;\n}): ProcessConfig {\n return {\n name: 'Igniter',\n command: `npx @igniter-js/cli@latest generate schema --watch${options.debug ? ' --debug' : ''}`,\n color: PROCESS_COLORS.igniter,\n cwd: options.cwd,\n env: {\n NODE_ENV: 'development',\n ...(options.debug && { DEBUG: 'true' })\n }\n };\n}\n\n/**\n * Create a process config for a framework dev server\n */\nexport function createFrameworkDevProcess(\n framework: SupportedFramework,\n command: string,\n options: {\n cwd?: string;\n port?: number;\n env?: Record<string, string>;\n } = {}\n): ProcessConfig {\n return {\n name: framework === 'nextjs' ? 'Next.js' : \n framework === 'sveltekit' ? 'SvelteKit' :\n framework.charAt(0).toUpperCase() + framework.slice(1),\n command,\n color: getFrameworkColor(framework),\n cwd: options.cwd,\n env: {\n NODE_ENV: 'development',\n ...(options.port && { PORT: options.port.toString() }),\n ...options.env\n }\n };\n}\n\n/**\n * Start both Igniter watcher and framework dev server concurrently\n */\nexport async function startIgniterWithFramework(options: {\n framework: SupportedFramework;\n frameworkCommand: string;\n cwd?: string;\n port?: number;\n debug?: boolean;\n igniterWatcherCommand?: string;\n}): Promise<void> {\n const logger = createChildLogger({ component: 'igniter-with-framework' });\n \n logger.info('Starting Igniter with framework', {\n framework: options.framework,\n frameworkCommand: options.frameworkCommand,\n port: options.port,\n debug: options.debug\n });\n\n const processes: ProcessConfig[] = [\n createIgniterWatcherProcess({\n cwd: options.cwd,\n debug: options.debug\n }),\n createFrameworkDevProcess(\n options.framework,\n options.frameworkCommand,\n {\n cwd: options.cwd,\n port: options.port\n }\n )\n ];\n\n // Override igniter process command if provided\n if (options.igniterWatcherCommand) {\n processes[0].command = options.igniterWatcherCommand;\n }\n\n await runConcurrentProcesses({\n processes,\n killOthers: true,\n prefixFormat: 'name',\n prefixColors: true,\n prefixLength: 8\n });\n}","import type { IgniterLogger } from '@igniter-js/core';\n\n/**\n * Simple timeline manager that leverages existing logger functionality\n * to create a visual step-by-step process with ANSI icons\n */\nexport class TimelineManager {\n private logger: IgniterLogger;\n private currentStep: number = 0;\n private totalSteps: number = 0;\n private startTime: number = Date.now();\n\n constructor(logger: IgniterLogger) {\n this.logger = logger;\n }\n\n /**\n * Start a new timeline process\n */\n start(title: string, totalSteps: number): void {\n this.totalSteps = totalSteps;\n this.currentStep = 0;\n this.startTime = Date.now();\n \n // Use existing logger group method for the main title\n this.logger.group(title);\n }\n\n /**\n * Start a new step in the timeline\n */\n step(description: string): void {\n this.currentStep++;\n const progress = `[${this.currentStep}/${this.totalSteps}]`;\n \n // Use existing logger info method with custom context\n this.logger.info(`${progress} ▶ ${description}`, { _type: 'step' });\n }\n\n /**\n * Mark current step as successful with optional details\n */\n stepSuccess(message: string, details?: Record<string, any>): void {\n // Use existing logger success method\n this.logger.success(message, details);\n }\n\n /**\n * Add sub-step information\n */\n substep(message: string, details?: Record<string, any>): void {\n // Use existing logger info method for substeps\n this.logger.info(`└─ ${message}`, details);\n }\n\n /**\n * Mark step as failed\n */\n stepError(message: string, error?: Error): void {\n this.logger.error(message, undefined, error);\n }\n\n /**\n * Complete the timeline process\n */\n complete(message?: string): void {\n const duration = ((Date.now() - this.startTime) / 1000).toFixed(1);\n const finalMessage = message || 'Process completed';\n \n // Use existing logger success method for completion\n this.logger.success(`${finalMessage} (${duration}s)`);\n \n // End the group\n this.logger.groupEnd();\n }\n\n /**\n * Fail the timeline process\n */\n fail(message: string, error?: Error): void {\n this.logger.error(message, undefined, error);\n this.logger.groupEnd();\n }\n}\n\n/**\n * Factory function to create a TimelineManager\n */\nexport function createTimelineManager(logger: IgniterLogger): TimelineManager {\n return new TimelineManager(logger);\n}","export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n }\n catch { }\n }\n return jsonSchema;\n};\nexport const defaultOptions = {\n name: undefined,\n $refStrategy: \"root\",\n basePath: [\"#\"],\n effectStrategy: \"input\",\n pipeStrategy: \"all\",\n dateStrategy: \"format:date-time\",\n mapStrategy: \"entries\",\n removeAdditionalStrategy: \"passthrough\",\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: \"definitions\",\n target: \"jsonSchema7\",\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n markdownDescription: false,\n patternStrategy: \"escape\",\n applyRegexFlags: false,\n emailStrategy: \"format:email\",\n base64Strategy: \"contentEncoding:base64\",\n nameStrategy: \"ref\",\n openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n });\n","import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n const _options = getDefaultOptions(options);\n const currentPath = _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n flags: { hasReferencedOpenAiAnyType: false },\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ])),\n };\n};\n","export function addErrorMessage(res, key, errorMessage, refs) {\n if (!refs?.errorMessages)\n return;\n if (errorMessage) {\n res.errorMessage = {\n ...res.errorMessage,\n [key]: errorMessage,\n };\n }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n res[key] = value;\n addErrorMessage(res, key, errorMessage, refs);\n}\n","export const getRelativePath = (pathA, pathB) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i])\n break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export {};\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n","import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n if (refs.target !== \"openAi\") {\n return {};\n }\n const anyDefinitionPath = [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ];\n refs.flags.hasReferencedOpenAiAnyType = true;\n return {\n $ref: refs.$refStrategy === \"relative\"\n ? getRelativePath(anyDefinitionPath, refs.currentPath)\n : anyDefinitionPath.join(\"/\"),\n };\n}\n","import { ZodFirstPartyTypeKind } from \"zod\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n const res = {\n type: \"array\",\n };\n if (def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n }\n if (def.minLength) {\n setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n }\n if (def.maxLength) {\n setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n }\n if (def.exactLength) {\n setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n }\n return res;\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n const res = {\n type: \"integer\",\n format: \"int64\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n","export function parseBooleanDef() {\n return {\n type: \"boolean\",\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n };\n }\n switch (strategy) {\n case \"string\":\n case \"format:date-time\":\n return {\n type: \"string\",\n format: \"date-time\",\n };\n case \"format:date\":\n return {\n type: \"string\",\n format: \"date\",\n };\n case \"integer\":\n return integerDateParser(def, refs);\n }\n}\nconst integerDateParser = (def, refs) => {\n const res = {\n type: \"integer\",\n format: \"unix-time\",\n };\n if (refs.target === \"openApi3\") {\n return res;\n }\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n }\n }\n return res;\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\"\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef(refs);\n}\n","export function parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values),\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n if (\"type\" in type && type.type === \"string\")\n return false;\n return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n }),\n ].filter((x) => !!x);\n let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n ? { unevaluatedProperties: false }\n : undefined;\n const mergedAllOf = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach((schema) => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n if (schema.unevaluatedProperties === undefined) {\n // If one of the schemas has no unevaluatedProperties set,\n // the merged schema should also have no unevaluatedProperties set\n unevaluatedProperties = undefined;\n }\n }\n else {\n let nestedSchema = schema;\n if (\"additionalProperties\" in schema &&\n schema.additionalProperties === false) {\n const { additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n else {\n // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n unevaluatedProperties = undefined;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length\n ? {\n allOf: mergedAllOf,\n ...unevaluatedProperties,\n }\n : undefined;\n}\n","export function parseLiteralDef(def, refs) {\n const parsedType = typeof def.value;\n if (parsedType !== \"bigint\" &&\n parsedType !== \"number\" &&\n parsedType !== \"boolean\" &&\n parsedType !== \"string\") {\n return {\n type: Array.isArray(def.value) ? \"array\" : \"object\",\n };\n }\n if (refs.target === \"openApi3\") {\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n enum: [def.value],\n };\n }\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n const: def.value,\n };\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n /* c8 ignore next */\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","import { ZodFirstPartyTypeKind, } from \"zod\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n if (refs.target === \"openAi\") {\n console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n }\n if (refs.target === \"openApi3\" &&\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n type: \"object\",\n required: def.keyType._def.values,\n properties: def.keyType._def.values.reduce((acc, key) => ({\n ...acc,\n [key]: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", key],\n }) ?? parseAnyDef(refs),\n }), {}),\n additionalProperties: refs.rejectedAdditionalProperties,\n };\n }\n const schema = {\n type: \"object\",\n additionalProperties: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n }) ?? refs.allowedAdditionalProperties,\n };\n if (refs.target === \"openApi3\") {\n return schema;\n }\n if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length) {\n const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n if (refs.mapStrategy === \"record\") {\n return parseRecordDef(def, refs);\n }\n const keys = parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n }) || parseAnyDef(refs);\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n }) || parseAnyDef(refs);\n return {\n type: \"array\",\n maxItems: 125,\n items: {\n type: \"array\",\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n","export function parseNativeEnumDef(def) {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key) => {\n return typeof object[object[key]] !== \"number\";\n });\n const actualValues = actualKeys.map((key) => object[key]);\n const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n return {\n type: parsedTypes.length === 1\n ? parsedTypes[0] === \"string\"\n ? \"string\"\n : \"number\"\n : [\"string\", \"number\"],\n enum: actualValues,\n };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n return refs.target === \"openAi\"\n ? undefined\n : {\n not: parseAnyDef({\n ...refs,\n currentPath: [...refs.currentPath, \"not\"],\n }),\n };\n}\n","export function parseNullDef(refs) {\n return refs.target === \"openApi3\"\n ? {\n enum: [\"null\"],\n nullable: true,\n }\n : {\n type: \"null\",\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n ZodString: \"string\",\n ZodNumber: \"number\",\n ZodBigInt: \"integer\",\n ZodBoolean: \"boolean\",\n ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n if (refs.target === \"openApi3\")\n return asAnyOf(def, refs);\n const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (options.every((x) => x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length))) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n const types = options.reduce((types, x) => {\n const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n return {\n type: types.length > 1 ? types : types[0],\n };\n }\n else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n // all options literals\n const types = options.reduce((acc, x) => {\n const type = typeof x._def.value;\n switch (type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return [...acc, type];\n case \"bigint\":\n return [...acc, \"integer\"];\n case \"object\":\n if (x._def.value === null)\n return [...acc, \"null\"];\n case \"symbol\":\n case \"undefined\":\n case \"function\":\n default:\n return acc;\n }\n }, []);\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce((acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n }, []),\n };\n }\n }\n else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n return {\n type: \"string\",\n enum: options.reduce((acc, x) => [\n ...acc,\n ...x._def.values.filter((x) => !acc.includes(x)),\n ], []),\n };\n }\n return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n const anyOf = (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options)\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n }))\n .filter((x) => !!x &&\n (!refs.strictUnions ||\n (typeof x === \"object\" && Object.keys(x).length > 0)));\n return anyOf.length ? { anyOf } : undefined;\n};\n","import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n if (refs.target === \"openApi3\") {\n return {\n type: primitiveMappings[def.innerType._def.typeName],\n nullable: true,\n };\n }\n return {\n type: [\n primitiveMappings[def.innerType._def.typeName],\n \"null\",\n ],\n };\n }\n if (refs.target === \"openApi3\") {\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath],\n });\n if (base && \"$ref\" in base)\n return { allOf: [base], nullable: true };\n return base && { ...base, nullable: true };\n }\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n });\n return base && { anyOf: [base, { type: \"null\" }] };\n}\n","import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n const res = {\n type: \"number\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"int\":\n res.type = \"integer\";\n addErrorMessage(res, \"type\", check.message, refs);\n break;\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n const forceOptionalIntoNullable = refs.target === \"openAi\";\n const result = {\n type: \"object\",\n properties: {},\n };\n const required = [];\n const shape = def.shape();\n for (const propName in shape) {\n let propDef = shape[propName];\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n let propOptional = safeIsOptional(propDef);\n if (propOptional && forceOptionalIntoNullable) {\n if (propDef._def.typeName === \"ZodOptional\") {\n propDef = propDef._def.innerType;\n }\n if (!propDef.isNullable()) {\n propDef = propDef.nullable();\n }\n propOptional = false;\n }\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName],\n });\n if (parsedDef === undefined) {\n continue;\n }\n result.properties[propName] = parsedDef;\n if (!propOptional) {\n required.push(propName);\n }\n }\n if (required.length) {\n result.required = required;\n }\n const additionalProperties = decideAdditionalProperties(def, refs);\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n if (def.catchall._def.typeName !== \"ZodNever\") {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n });\n }\n switch (def.unknownKeys) {\n case \"passthrough\":\n return refs.allowedAdditionalProperties;\n case \"strict\":\n return refs.rejectedAdditionalProperties;\n case \"strip\":\n return refs.removeAdditionalStrategy === \"strict\"\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\nfunction safeIsOptional(schema) {\n try {\n return schema.isOptional();\n }\n catch {\n return true;\n }\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n });\n return innerSchema\n ? {\n anyOf: [\n {\n not: parseAnyDef(refs),\n },\n innerSchema,\n ],\n }\n : parseAnyDef(refs);\n};\n","import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n if (refs.pipeStrategy === \"input\") {\n return parseDef(def.in._def, refs);\n }\n else if (refs.pipeStrategy === \"output\") {\n return parseDef(def.out._def, refs);\n }\n const a = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n });\n const b = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n });\n return {\n allOf: [a, b].filter((x) => x !== undefined),\n };\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n const schema = {\n type: \"array\",\n uniqueItems: true,\n items,\n };\n if (def.minSize) {\n setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n }\n if (def.maxSize) {\n setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n }\n return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n if (def.rest) {\n return {\n type: \"array\",\n minItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalItems\"],\n }),\n };\n }\n else {\n return {\n type: \"array\",\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n };\n }\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n return {\n not: parseAnyDef(refs),\n };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n return parseAnyDef(refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { ZodFirstPartyTypeKind } from \"zod\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def, refs);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef(refs);\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef(refs);\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def, refs);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => def.getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef(refs);\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef(refs);\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef(refs);\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n /* c8 ignore next */\n return ((_) => undefined)(typeName);\n }\n};\n","import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n const seenItem = refs.seen.get(def);\n if (refs.override) {\n const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n refs.seen.set(def, newItem);\n const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n newItem.jsonSchema = jsonSchema;\n return postProcessResult;\n }\n newItem.jsonSchema = jsonSchema;\n return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n switch (refs.$refStrategy) {\n case \"root\":\n return { $ref: item.path.join(\"/\") };\n case \"relative\":\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case \"none\":\n case \"seen\": {\n if (item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)) {\n console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n return parseAnyDef(refs);\n }\n return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n }\n }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n if (def.description) {\n jsonSchema.description = def.description;\n if (refs.markdownDescription) {\n jsonSchema.markdownDescription = def.description;\n }\n }\n return jsonSchema;\n};\n","export {};\n","import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions\n ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n ...acc,\n [name]: parseDef(schema._def, {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, true) ?? parseAnyDef(refs),\n }), {})\n : undefined;\n const name = typeof options === \"string\"\n ? options\n : options?.nameStrategy === \"title\"\n ? undefined\n : options?.name;\n const main = parseDef(schema._def, name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, false) ?? parseAnyDef(refs);\n const title = typeof options === \"object\" &&\n options.name !== undefined &&\n options.nameStrategy === \"title\"\n ? options.name\n : undefined;\n if (title !== undefined) {\n main.title = title;\n }\n if (refs.flags.hasReferencedOpenAiAnyType) {\n if (!definitions) {\n definitions = {};\n }\n if (!definitions[refs.openAiAnyTypeName]) {\n definitions[refs.openAiAnyTypeName] = {\n // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n items: {\n $ref: refs.$refStrategy === \"relative\"\n ? \"1\"\n : [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ].join(\"/\"),\n },\n };\n }\n }\n const combined = name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n if (refs.target === \"jsonSchema7\") {\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n }\n if (refs.target === \"openAi\" &&\n (\"anyOf\" in combined ||\n \"oneOf\" in combined ||\n \"allOf\" in combined ||\n (\"type\" in combined && Array.isArray(combined.type)))) {\n console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n }\n return combined;\n};\nexport { zodToJsonSchema };\n","export * from \"./Options.js\";\nexport * from \"./Refs.js\";\nexport * from \"./errorMessages.js\";\nexport * from \"./getRelativePath.js\";\nexport * from \"./parseDef.js\";\nexport * from \"./parseTypes.js\";\nexport * from \"./parsers/any.js\";\nexport * from \"./parsers/array.js\";\nexport * from \"./parsers/bigint.js\";\nexport * from \"./parsers/boolean.js\";\nexport * from \"./parsers/branded.js\";\nexport * from \"./parsers/catch.js\";\nexport * from \"./parsers/date.js\";\nexport * from \"./parsers/default.js\";\nexport * from \"./parsers/effects.js\";\nexport * from \"./parsers/enum.js\";\nexport * from \"./parsers/intersection.js\";\nexport * from \"./parsers/literal.js\";\nexport * from \"./parsers/map.js\";\nexport * from \"./parsers/nativeEnum.js\";\nexport * from \"./parsers/never.js\";\nexport * from \"./parsers/null.js\";\nexport * from \"./parsers/nullable.js\";\nexport * from \"./parsers/number.js\";\nexport * from \"./parsers/object.js\";\nexport * from \"./parsers/optional.js\";\nexport * from \"./parsers/pipeline.js\";\nexport * from \"./parsers/promise.js\";\nexport * from \"./parsers/readonly.js\";\nexport * from \"./parsers/record.js\";\nexport * from \"./parsers/set.js\";\nexport * from \"./parsers/string.js\";\nexport * from \"./parsers/tuple.js\";\nexport * from \"./parsers/undefined.js\";\nexport * from \"./parsers/union.js\";\nexport * from \"./parsers/unknown.js\";\nexport * from \"./selectParser.js\";\nexport * from \"./zodToJsonSchema.js\";\nimport { zodToJsonSchema } from \"./zodToJsonSchema.js\";\nexport default zodToJsonSchema;\n","import * as fs from 'fs';\nimport * as path from 'path';\nimport { build, type BuildFailure } from 'esbuild';\nimport { createChildLogger, formatError } from '../logger';\nimport { IgniterRouter, IgniterControllerConfig, IgniterAction } from '@igniter-js/core';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { createRequire } from 'module';\n\n// This file is responsible for dynamically loading and introspecting the user's Igniter router.\n\nexport interface IntrospectedRouter {\n controllers: Record<string, IntrospectedController>;\n docs?: any;\n}\n\ninterface IntrospectedController {\n name: string;\n description?: string;\n path: string;\n actions: Record<string, IntrospectedAction>;\n}\n\ninterface IntrospectedAction {\n name?: string;\n description?: string;\n path: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n tags?: string[];\n bodySchema?: any;\n querySchema?: any;\n paramSchemas?: Record<string, any>;\n responseSchema?: any;\n isStream: boolean;\n security?: any;\n}\n\n/**\n * Custom error class for router loading failures.\n */\nexport class RouterLoadError extends Error {\n public originalError: any;\n\n constructor(message: string, originalError?: any) {\n super(message);\n this.name = 'RouterLoadError';\n this.originalError = originalError;\n }\n}\n\n/**\n * Traverses a loaded router object and converts it into a serializable schema.\n * Also converts Zod schemas to JSON schemas.\n */\nexport function introspectRouter(router: IgniterRouter<any, any, any, any, any>): { schema: IntrospectedRouter, stats: { controllers: number, actions: number } } {\n const logger = createChildLogger({ component: 'router-introspector' });\n logger.debug('Starting router introspection');\n\n const introspectedControllers: Record<string, any> = {};\n let totalActions = 0;\n\n for (const [controllerName, controller] of Object.entries(router.controllers)) {\n const introspectedActions: Record<string, any> = {};\n const typedController = controller as IgniterControllerConfig<any>;\n\n if (typedController && typedController.actions) {\n for (const [actionName, action] of Object.entries(typedController.actions)) {\n logger.debug(`Introspecting action: ${controllerName}.${actionName}`);\n const typedAction = action as IgniterAction<any, any, any, any, any, any, any, any, any, any>;\n\n introspectedActions[actionName] = {\n ...typedAction,\n body: undefined, // Remove original Zod schema\n query: undefined,\n // Convert Zod schemas to JSON Schemas for the client\n bodySchema: typedAction.body ? zodToJsonSchema(typedAction.body, { target: 'openApi3' }) : undefined,\n querySchema: typedAction.query ? zodToJsonSchema(typedAction.query, { target: 'openApi3' }) : undefined,\n };\n totalActions++;\n }\n }\n\n introspectedControllers[controllerName] = {\n ...typedController,\n actions: introspectedActions,\n };\n }\n\n const schemaResult = {\n controllers: introspectedControllers,\n docs: (router as any)?.config?.docs,\n } as IntrospectedRouter;\n\n return {\n schema: schemaResult,\n stats: {\n controllers: Object.keys(introspectedControllers).length,\n actions: totalActions\n }\n };\n}\n\n\n/**\n * Loads the user's router file by compiling it in memory with esbuild.\n * This is a robust method that isolates the CLI's dependencies from the user's project.\n */\nexport async function loadRouter(routerPath: string): Promise<IgniterRouter<any, any, any, any, any>> {\n const logger = createChildLogger({ component: 'esbuild-loader' });\n const fullPath = path.resolve(process.cwd(), routerPath);\n\n logger.debug('Compiling and loading router with esbuild', { path: fullPath });\n\n try {\n const result = await build({\n entryPoints: [fullPath],\n bundle: true,\n platform: 'node',\n format: 'cjs',\n write: false, // Keep the result in memory\n logLevel: 'silent', // We will handle our own logging\n external: [\n '@igniter-js/*',\n '@prisma/*',\n 'prisma',\n 'redis',\n 'ioredis',\n 'bullmq',\n '@opentelemetry/*',\n 'chalk',\n 'supports-color'\n ],\n });\n\n const [outputFile] = result.outputFiles;\n if (!outputFile) {\n throw new Error('esbuild did not produce any output.');\n }\n\n // The compiled code is in memory. We need to execute it to get the router object.\n // We create a temporary module environment to `require` the code.\n const compiledCode = outputFile.text;\n const routerModule = { exports: {} };\n \n // Create a require function that resolves modules from the project directory\n // This allows the bundled code to require external dependencies from the user's project\n const projectRequire = createRequire(fullPath);\n const requireFunc = (moduleName: string) => {\n try {\n // Try to require from the project's node_modules first\n return projectRequire(moduleName);\n } catch (error) {\n // Fall back to the global require if not found in project\n return require(moduleName);\n }\n };\n\n // This is a sandboxed execution of the compiled CJS code.\n const factory = new Function('exports', 'require', 'module', '__filename', '__dirname', compiledCode);\n factory(routerModule.exports, requireFunc, routerModule, fullPath, path.dirname(fullPath));\n\n const moduleExports = routerModule.exports as any;\n const router = moduleExports.AppRouter || moduleExports.default || moduleExports;\n\n if (router && typeof router.controllers === 'object') {\n logger.success('Router loaded successfully via esbuild.');\n return router;\n }\n\n throw new Error('Module was compiled and loaded, but no valid Igniter router export was found.');\n } catch (error: any) {\n // Catch esbuild BuildFailure errors and format them nicely.\n if (error && Array.isArray((error as BuildFailure).errors)) {\n const buildFailure = error as BuildFailure;\n const errorMessages = buildFailure.errors.map(e => e.text).join('\\n');\n const detailedMessage = `esbuild failed to compile the router file:\\n${errorMessages}`;\n throw new RouterLoadError(detailedMessage, error);\n }\n\n // For other errors, wrap them in our custom error type.\n throw new RouterLoadError(`Failed to load router from ${routerPath}`, error);\n }\n}","import * as fs from 'fs'\nimport * as path from 'path'\nimport type { IgniterBuildConfig } from './watcher'\nimport { createChildLogger } from '../logger'\nimport { createTimelineManager } from '@/lib/timeline-manager'\n\ntype IgniterRouterSchema = {\n config: {\n baseURL: string\n basePATH: string\n }\n controllers: Record<string, any>\n processor: any\n handler: any\n $context: any\n $plugins: any\n caller: any\n}\n\ntype IgniterRouter = {\n config: {\n baseURL: string\n basePATH: string\n }\n controllers: Record<string, any>\n processor: any\n handler: any\n $context: any\n $plugins: any\n caller: any\n}\n\n/**\n * Get file size in a human-readable format\n */\nfunction getFileSize(filePath: string): string {\n try {\n const stats = fs.statSync(filePath)\n const bytes = stats.size\n\n if (bytes < 1024) return `${bytes}b`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}kb`\n return `${(bytes / (1024 * 1024)).toFixed(1)}mb`\n } catch {\n return '0b'\n }\n}\n\nimport { IntrospectedRouter, introspectRouter } from './introspector';\n\n/**\n * Generate client files from Igniter router\n */\nexport async function generateSchemaFromRouter(\n router: IgniterRouter,\n config: IgniterBuildConfig\n) {\n const logger = createChildLogger({ component: 'generator' })\n const timeline = createTimelineManager(logger)\n\n try {\n // Start timeline process\n timeline.start('Generating Igniter.js Schema', 4)\n\n // Step 1: Extract router schema\n timeline.step('Extracting router schema')\n const { schema, stats } = introspectRouter(router)\n timeline.stepSuccess('Schema extracted', {\n controllers: stats.controllers,\n actions: stats.actions\n })\n\n // Step 2: Prepare output directory\n timeline.step('Preparing output directory')\n const outputDir = config.outputDir || 'generated'\n await ensureDirectoryExists(outputDir)\n const outputPath = path.resolve(outputDir)\n timeline.stepSuccess('Output directory ready', {\n path: path.relative(process.cwd(), outputPath)\n })\n\n // Step 3: Generate schema file\n timeline.step('Generating schema file')\n const schemaFilePath = await generateSchemaFile(schema, outputDir, config)\n const schemaSize = getFileSize(schemaFilePath)\n timeline.substep(`igniter.schema.ts (${schemaSize})`)\n timeline.stepSuccess('Schema file generated')\n\n // Step 4: Generate client file\n timeline.step('Generating client file')\n const clientFilePath = await generateClientFile(schema, outputDir, config)\n const clientSize = getFileSize(clientFilePath)\n timeline.substep(`igniter.client.ts (${clientSize})`)\n timeline.stepSuccess('Client file generated')\n\n // Complete timeline\n timeline.complete('Schema generation completed')\n\n return {\n schemaPath: schemaFilePath,\n clientPath: clientFilePath,\n stats\n }\n\n } catch (error) {\n timeline.fail('Schema generation failed', error as Error)\n throw error\n }\n}\n\n/**\n * Generate schema TypeScript file\n */\nasync function generateSchemaFile(\n schema: IntrospectedRouter,\n outputDir: string,\n config: IgniterBuildConfig\n): Promise<string> {\n const content = `// Generated by @igniter-js/cli - DO NOT EDIT\n\nexport const AppRouterSchema = ${JSON.stringify(schema, null, 2)} as const\n\nexport type AppRouterSchemaType = typeof AppRouterSchema\n`\n\n const filePath = path.join(outputDir, 'igniter.schema.ts')\n await writeFileWithHeader(filePath, content, config)\n\n return filePath\n}\n\n/**\n * Generate client TypeScript file\n */\nasync function generateClientFile(\n schema: IntrospectedRouter,\n outputDir: string,\n config: IgniterBuildConfig\n): Promise<string> {\n const filePath = path.join(outputDir, 'igniter.client.ts')\n\n // Only generate the client file if it doesn't already exist\n if (fs.existsSync(filePath)) {\n const logger = createChildLogger({ component: 'generator' })\n logger.info('Skipping client file generation, already exists', { path: filePath })\n return filePath\n }\n\n const content = `* eslint-disable */\n/* prettier-ignore */\n\nimport { createIgniterClient, useIgniterQueryClient } from '@igniter-js/core/client'\nimport type { AppRouterType } from './igniter.router'\n\n/**\n* Type-safe API client generated from your Igniter router\n*\n* Usage in Server Components:\n* const users = await api.users.list.query()\n*\n* Usage in Client Components:\n* const { data } = api.users.list.useQuery()\n*\n* Note: Adjust environment variable prefixes (e.g., NEXT_PUBLIC_, BUN_PUBLIC_, DENO_PUBLIC_, REACT_APP_)\n* according to your project's framework/runtime (Next.js, Bun, Deno, React/Vite, etc.).\n*/\nexport const api = createIgniterClient<AppRouterType>({\nbaseURL: process.env.NEXT_PUBLIC_IGNITER_API_URL, // Adapt for your needs\nbasePath: process.env.NEXT_PUBLIC_IGNITER_API_BASE_PATH,\nrouter: () => {\n if (typeof window === 'undefined') {\n return require('./igniter.router').AppRouter\n }\n\n return require('./igniter.schema').AppRouterSchema\n},\n})\n\n/**\n * Type-safe API client generated from your Igniter router\n *\n * Usage in Server Components:\n * const users = await api.users.list.query()\n *\n * Usage in Client Components:\n * const { data } = api.users.list.useQuery()\n */\nexport type ApiClient = typeof api\n\n/**\n * Type-safe query client generated from your Igniter router\n *\n * Usage in Client Components:\n * const { invalidate } = useQueryClient()\n */\nexport const useQueryClient = useIgniterQueryClient<AppRouterType>;\n`\n await writeFileWithHeader(filePath, content, config)\n\n return filePath\n}\n\n/**\n * Write file with generation header\n */\nasync function writeFileWithHeader(\n filePath: string,\n content: string,\n config: IgniterBuildConfig\n) {\n const header = generateFileHeader(config)\n const fullContent = header + '\\n\\n' + content\n\n await fs.promises.writeFile(filePath, fullContent, 'utf8')\n}\n\n/**\n * Generate file header with metadata\n */\nfunction generateFileHeader(config: IgniterBuildConfig): string {\n const timestamp = new Date().toISOString()\n\n return `/* eslint-disable */\n/* prettier-ignore */\n\n/**\n * Generated by @igniter-js/cli\n *\n * WARNING: DO NOT EDIT THIS FILE MANUALLY\n *\n * This file was automatically generated from your Igniter router.\n * Any changes made to this file will be overwritten when the CLI regenerates it.\n *\n * To modify the client API, update your controller files instead.\n *\n * Generated: ${timestamp}\n * Framework: ${config.framework}\n * Output: ${config.outputDir}\n */`\n}\n\n/**\n * Ensure directory exists, create if it doesn't\n */\nasync function ensureDirectoryExists(dirPath: string) {\n try {\n await fs.promises.access(dirPath)\n } catch (error) {\n // Directory doesn't exist, create it\n await fs.promises.mkdir(dirPath, { recursive: true })\n }\n}\n","import { IntrospectedRouter } from '../build/introspector'\n\ntype OpenApiV3Document = Record<string, any>;\n\n// Local minimal DocsConfig type to avoid cross-package type resolution issues during CLI build/testing\nexport interface DocsConfig {\n info?: { title?: string; version?: string; description?: string };\n servers?: Array<{ url: string; description?: string }>;\n securitySchemes?: Record<string, any>;\n playground?: any;\n filepath?: string;\n}\n\nfunction toPascalCase(str: string): string {\n if (!str) return '';\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nexport class OpenAPIGenerator {\n private docsConfig: DocsConfig;\n private schemas: Record<string, any> = {};\n\n constructor(config: DocsConfig) {\n this.docsConfig = config || {};\n }\n\n public generate(router: IntrospectedRouter): OpenApiV3Document {\n const servers = (this.docsConfig.servers && this.docsConfig.servers.length > 0)\n ? this.docsConfig.servers\n : [{ url: 'http://localhost:3000/api/v1', description: 'Default server' }];\n\n const spec: OpenApiV3Document = {\n openapi: '3.0.0',\n info: this.docsConfig.info || { title: 'Igniter API', version: '1.0.0' },\n servers,\n tags: this.buildTags(router),\n paths: this.buildPaths(router),\n components: {\n schemas: this.schemas,\n securitySchemes: this.docsConfig.securitySchemes || {},\n },\n };\n return spec;\n }\n\n private buildTags(router: IntrospectedRouter): any[] {\n const tags: any[] = [];\n for (const [controllerKey, controller] of Object.entries(router.controllers)) {\n const tag = {\n name: controller.name || controllerKey,\n description: controller.description,\n };\n tags.push(tag);\n }\n return tags;\n }\n\n private buildPaths(router: IntrospectedRouter): Record<string, any> {\n const paths: Record<string, any> = {};\n for (const [controllerKey, controller] of Object.entries(router.controllers)) {\n for (const [actionKey, action] of Object.entries(controller.actions)) {\n const actionName = action.name || actionKey;\n let path = `/${controller.path}/${action.path}`;\n path = path.replace(/\\/{2,}/g, '/');\n if (path.length > 1 && path.endsWith('/')) {\n path = path.slice(0, -1);\n }\n\n if (!paths[path]) {\n paths[path] = {};\n }\n\n const operation: Record<string, any> = {\n summary: action.description || actionName,\n operationId: actionName,\n tags: [controller.name || controllerKey],\n parameters: [],\n requestBody: undefined,\n responses: {\n '200': {\n description: 'Success',\n content: {\n 'application/json': {\n schema: {},\n },\n },\n },\n },\n };\n\n const pathParams = action.path.match(/:([a-zA-Z0-9_]+)/g);\n if (pathParams) {\n for (const param of pathParams) {\n const paramName = param.substring(1);\n operation.parameters.push({\n name: paramName,\n in: 'path',\n required: true,\n schema: { type: 'string' },\n });\n }\n }\n\n if ((action as any).querySchema) {\n const querySchemaName = `${toPascalCase(controller.name || controllerKey)}${toPascalCase(actionName)}Query`;\n const queryJsonSchema = (action as any).querySchema; // already JSON Schema\n this.schemas[querySchemaName] = queryJsonSchema;\n const properties = this.schemas[querySchemaName].properties || {};\n const requiredProps: string[] = this.schemas[querySchemaName].required || [];\n for (const propName of Object.keys(properties)) {\n operation.parameters.push({\n name: propName,\n in: 'query',\n required: requiredProps.includes(propName),\n schema: properties[propName],\n });\n }\n }\n\n if ((action as any).bodySchema) {\n const bodySchemaName = `${toPascalCase(controller.name || controllerKey)}${toPascalCase(actionName)}Body`;\n const bodyJsonSchema = (action as any).bodySchema; // already JSON Schema\n this.schemas[bodySchemaName] = bodyJsonSchema;\n operation.requestBody = {\n required: true,\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${bodySchemaName}` },\n },\n },\n };\n }\n\n if ((action as any).isStream) {\n operation.description = (operation.description ? operation.description + '\\n\\n' : '') +\n 'This endpoint supports Server-Sent Events (SSE) for real-time updates. ' +\n 'It functions as a standard GET request initially, then maintains an open connection for streaming data.';\n }\n\n paths[path][action.method.toLowerCase()] = operation;\n }\n }\n return paths;\n }\n}\n","import * as fs from 'fs'\nimport * as path from 'path'\nimport { loadRouter, introspectRouter, RouterLoadError } from './introspector';\nimport { generateSchemaFromRouter } from './generator'\nimport { createChildLogger, formatError } from '../logger'\nimport { createTimelineManager } from '@/lib/timeline-manager'\nimport { createDetachedSpinner } from '@/lib/spinner'\nimport chokidar from 'chokidar';\nimport { OpenAPIGenerator } from '../docs/openapi-generator';\nimport chalk from 'chalk';\n\nexport type IgniterBuildConfig = {\n framework?: 'nextjs' | 'vite' | 'webpack' | 'generic'\n outputDir?: string\n controllerPatterns?: string[]\n extractTypes?: boolean\n optimizeClientBundle?: boolean\n hotReload?: boolean\n debug?: boolean\n generateDocs?: boolean\n docsOutputDir?: string\n}\n\n/**\n * File watcher for Igniter controllers\n * Monitors controller files and regenerates client schema on changes\n */\nexport class IgniterWatcher {\n private watcher: any = null\n private config: IgniterBuildConfig\n private isGenerating = false\n private logger = createChildLogger({ component: 'watcher' })\n private watchingSpinner: any = null\n private watchingSpinnerActive = false\n private isInteractiveMode = false\n\n constructor(config: IgniterBuildConfig) {\n this.config = {\n extractTypes: true,\n optimizeClientBundle: true,\n outputDir: 'generated',\n framework: 'nextjs',\n hotReload: true,\n controllerPatterns: ['**/*.controller.{ts,js}'],\n debug: false,\n generateDocs: false,\n docsOutputDir: './src/docs',\n ...config\n }\n\n this.isInteractiveMode = !!(\n process.env.IGNITER_INTERACTIVE_MODE === 'true' ||\n process.argv.includes('--interactive')\n )\n\n if (this.isInteractiveMode) {\n this.logger.debug('Interactive mode detected - spinners disabled')\n }\n }\n\n private startWatchingSpinner() {\n if (this.isInteractiveMode) {\n this.logger.info('Watching for changes...')\n return\n }\n\n if (!this.watchingSpinner && !this.watchingSpinnerActive) {\n this.watchingSpinner = createDetachedSpinner('Watching for changes...')\n this.watchingSpinner.start()\n this.watchingSpinnerActive = true\n }\n }\n\n private pauseWatchingSpinner() {\n if (this.isInteractiveMode) return\n\n if (this.watchingSpinner && this.watchingSpinnerActive) {\n this.watchingSpinner.stop()\n this.watchingSpinnerActive = false\n process.stdout.write('\\n')\n }\n }\n\n private resumeWatchingSpinner() {\n if (this.isInteractiveMode) return\n\n if (!this.watchingSpinnerActive && !this.isGenerating) {\n this.watchingSpinner = createDetachedSpinner('Watching for changes...')\n this.watchingSpinner.start()\n this.watchingSpinnerActive = true\n }\n }\n\n private stopWatchingSpinner() {\n if (this.isInteractiveMode) return\n\n if (this.watchingSpinner) {\n this.watchingSpinner.stop()\n this.watchingSpinner = null\n this.watchingSpinnerActive = false\n process.stdout.write('\\n')\n }\n }\n\n async start() {\n try {\n this.logger.info('Starting file watcher', {\n output: this.config.outputDir,\n patterns: this.config.controllerPatterns?.join(', ')\n })\n\n this.watcher = chokidar.watch(this.config.controllerPatterns!, {\n ignored: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],\n persistent: true,\n ignoreInitial: false\n })\n\n await new Promise<void>((resolve, reject) => {\n this.watcher.on('add', this.handleFileChange.bind(this))\n this.watcher.on('change', this.handleFileChange.bind(this))\n this.watcher.on('unlink', this.handleFileChange.bind(this))\n\n this.watcher.on('ready', () => {\n this.logger.success('File watcher is ready', {\n watching: this.config.controllerPatterns?.join(', ')\n })\n resolve()\n })\n\n this.watcher.on('error', (error: Error) => {\n this.logger.error('File watcher error', {}, error)\n reject(error)\n })\n })\n\n await this.regenerateSchema()\n this.startWatchingSpinner()\n\n } catch (error) {\n this.logger.error('Failed to start file watcher', {}, error)\n throw error\n }\n }\n\n async stop() {\n if (this.watcher) {\n this.stopWatchingSpinner()\n const spinner = createDetachedSpinner('Stopping file watcher...')\n spinner.start()\n await this.watcher.close()\n this.watcher = null\n spinner.success('File watcher stopped')\n this.logger.groupEnd()\n }\n }\n\n private async handleFileChange(filePath: string) {\n if (!filePath.includes('.controller.')) return\n\n this.pauseWatchingSpinner()\n\n if (this.isGenerating) {\n this.logger.debug('Generation already in progress, skipping...')\n setTimeout(() => this.resumeWatchingSpinner(), 100)\n return\n }\n\n await this.regenerateSchema()\n setTimeout(() => this.resumeWatchingSpinner(), 500)\n }\n\n async generate() {\n return await this.regenerateSchema()\n }\n\n private async regenerateSchema() {\n if (this.isGenerating) return\n\n this.isGenerating = true\n const timeline = createTimelineManager(this.logger)\n let router: any = null;\n\n try {\n this.pauseWatchingSpinner()\n \n // Determine total steps based on configuration\n const totalSteps = this.config.generateDocs ? 3 : 2\n timeline.start('Regenerating Schema', totalSteps)\n\n // Step 1: Find and load router\n timeline.step('Loading router file')\n const possibleRouterPaths = [\n 'src/igniter.router.ts', 'src/igniter.router.js',\n 'src/router.ts', 'src/router.js',\n 'igniter.router.ts', 'igniter.router.js',\n 'router.ts', 'router.js'\n ]\n\n let foundPath: string | null = null;\n for (const routerPath of possibleRouterPaths) {\n if (fs.existsSync(routerPath)) {\n foundPath = routerPath;\n break;\n }\n }\n\n if (!foundPath) {\n timeline.stepError('No router file found', new Error(`Searched paths: ${possibleRouterPaths.join(', ')}`))\n this.isGenerating = false;\n return;\n }\n\n timeline.substep(`Found: ${foundPath}`)\n router = await loadRouter(foundPath);\n\n if (!router) {\n timeline.stepError('Router file is empty or invalid')\n this.isGenerating = false;\n return;\n }\n\n timeline.stepSuccess('Router loaded successfully')\n\n // Step 2: Generate schema\n timeline.step('Generating schema files')\n const result = await generateSchemaFromRouter(router, this.config)\n timeline.stepSuccess('Schema files generated', {\n controllers: result.stats.controllers,\n actions: result.stats.actions\n })\n\n // Step 3: Generate OpenAPI docs (if enabled)\n if (this.config.generateDocs) {\n timeline.step('Generating OpenAPI documentation')\n await this.generateOpenAPISpec(router)\n timeline.stepSuccess('OpenAPI documentation generated')\n }\n\n timeline.complete('Schema regeneration completed')\n\n } catch (error) {\n timeline.fail('Schema regeneration failed', error as Error)\n\n if (error instanceof RouterLoadError) {\n console.error(chalk.red.bold('\\n✗ Error loading your Igniter router:'));\n console.error(chalk.gray(' The router file contains an error and could not be compiled.'));\n console.error(chalk.gray(` File: ${error.message.split(' ').pop()}`));\n\n // The original error from TSX is what's valuable here.\n const originalError = error.originalError;\n if (originalError) {\n console.error(chalk.yellow.bold('\\n Original Error:'));\n console.error(chalk.white(` ${originalError.name}: ${originalError.message}`));\n if (originalError.stack) {\n // Indent and clean up the stack trace for readability\n const indentedStack = originalError.stack.split('\\n').slice(1).map((line: string) => ` ${line}`).join('\\n');\n console.error(chalk.gray(indentedStack));\n }\n }\n console.error(chalk.red.bold('\\nPlease fix the error in your router file and save it to regenerate.'));\n } else {\n // Generic error handling\n console.error(chalk.red.bold('\\n✗ An unexpected error occurred during schema generation.'));\n console.error(chalk.gray(' Run with --debug for more details.'));\n }\n\n } finally {\n this.isGenerating = false\n }\n }\n\n private async generateOpenAPISpec(router: any) {\n try {\n this.logger.info('Generating OpenAPI specification...')\n\n const introspectedSchema = introspectRouter(router).schema;\n const generator = new OpenAPIGenerator(introspectedSchema.docs || {})\n const openApiSpec = generator.generate(introspectedSchema)\n\n const outputDir = path.resolve(this.config.docsOutputDir!)\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true })\n }\n\n const outputPath = path.join(outputDir, 'openapi.json')\n fs.writeFileSync(outputPath, JSON.stringify(openApiSpec, null, 2), 'utf8')\n\n this.logger.success(`OpenAPI specification updated at ${outputPath}`)\n } catch (error) {\n this.logger.error('Error generating OpenAPI specification:', { error: formatError(error) })\n }\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport {\n detectFramework,\n getFrameworkList,\n isFrameworkSupported,\n} from \"./adapters/framework\";\nimport { logger, createChildLogger, setupCliLogger, formatError } from \"./adapters/logger\";\nimport {\n validateProjectName,\n showInitHelp\n} from \"./adapters/setup\";\nimport { runSetupPrompts, confirmOverwrite } from './adapters/setup/prompts'\nimport { generateProject } from './adapters/setup/generator'\nimport { createDetachedSpinner } from \"./lib/spinner\";\nimport { createTimelineManager } from \"./lib/timeline-manager\";\nimport {\n handleGenerateFeature,\n handleGenerateController,\n handleGenerateProcedure\n} from './adapters/scaffold';\nimport { IgniterRouter } from \"@igniter-js/core\";\nimport { killProcessOnPort } from \"./lib/port-manager\";\n\nconst program = new Command();\n\nprogram\n .name(\"igniter\")\n .description(\"CLI for Igniter.js type-safe client generation\")\n .version(\"1.0.0\")\n .option('--debug', 'Enable debug mode for detailed logging', false)\n .hook('preAction', (thisCommand) => {\n // This hook executes after options are parsed, but before the action handler.\n // It's the perfect place to set up global configurations like logging.\n setupCliLogger(thisCommand.optsWithGlobals());\n });\n\n// Init command\nprogram\n .command(\"init\")\n .description(\"Create a new Igniter.js project with interactive setup\")\n .argument(\"[project-name]\", \"Name of the project directory\")\n .option(\"--force\", \"Skip confirmation prompts and overwrite existing files\")\n .option(\"--pm, --package-manager <manager>\", \"Package manager to use (npm, yarn, pnpm, bun)\")\n .option(\"--template <template>\", \"Use a specific template (e.g., starter-nextjs, starter-express-rest-api)\")\n .option(\"-f, --framework <framework>\", \"Target framework (nextjs, vite, etc.)\")\n .option(\"--features <features>\", \"Comma-separated list of features (store,jobs,mcp,logging,telemetry)\")\n .option(\"--database <database>\", \"Database provider (none, postgresql, mysql, sqlite)\")\n .option(\"--orm <orm>\", \"ORM provider (prisma, drizzle)\")\n .option(\"--no-git\", \"Skip git repository initialization\")\n .option(\"--no-install\", \"Skip automatic dependency installation\")\n .option(\"--no-docker\", \"Skip Docker Compose setup\")\n .action(async (projectName: string | undefined, options) => {\n const initLogger = createChildLogger({ component: 'init-command' });\n try {\n if (!projectName) {\n showInitHelp();\n return;\n }\n if (projectName !== '.') {\n const validation = validateProjectName(projectName);\n if (!validation.valid) {\n initLogger.error('Invalid project name', { projectName, reason: validation.message });\n console.error(`✗ ${validation.message}`);\n process.exit(1);\n }\n }\n const targetDir = projectName === '.' ? process.cwd() : path.resolve(projectName!);\n const isExistingProject = (await fs.promises.stat(path.join(targetDir, 'package.json')).catch(() => null)) !== null;\n\n if (!options.force) {\n try {\n const stats = await fs.promises.stat(targetDir);\n if (stats.isDirectory()) {\n const files = await fs.promises.readdir(targetDir);\n const nonEmptyFiles = files.filter(file => !file.startsWith('.'));\n if (nonEmptyFiles.length > 0 && !isExistingProject) {\n const shouldOverwrite = await confirmOverwrite(`Directory '${projectName}' is not empty. Continue?`);\n if (!shouldOverwrite) {\n console.log('Setup cancelled.');\n process.exit(0);\n }\n }\n }\n } catch (error) {\n // Directory doesn't exist, which is fine\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw error;\n }\n }\n }\n\n const config = await runSetupPrompts(targetDir, isExistingProject, options);\n\n const validation = validateConfig(config);\n if (!validation.isValid) {\n console.error(`✗ ${validation.message}`);\n process.exit(1);\n }\n\n await generateProject(config, targetDir, isExistingProject);\n } catch (error) {\n initLogger.error('Init command failed unexpectedly', {\n error: error instanceof Error ? formatError(error) : error,\n });\n console.error(`✗ Failed to initialize project. Run with --debug for more details.`);\n process.exit(1);\n }\n });\n\n// Dev command\nprogram\n .command(\"dev\")\n .description(\"Start development mode with framework and Igniter (interactive dashboard and OpenAPI docs by default)\")\n .option(\"--framework <type>\", `Framework type (${getFrameworkList()}, generic)`)\n .option(\"--output <dir>\", \"Output directory for generated client files\", \"src/\")\n .option(\"--port <number>\", \"Port for the dev server\", \"3000\")\n .option(\"--cmd <command>\", \"Custom command to start dev server\")\n .option(\"--no-framework\", \"Disable framework dev server (Igniter only)\")\n .option(\"--no-interactive\", \"Disable interactive mode (use regular concurrent mode)\")\n .option(\"--docs-output <dir>\", \"Output directory for OpenAPI docs\", \"./src/docs\")\n .action(async (options) => {\n // Liberar a porta antes de iniciar o servidor\n const port = parseInt(options.port) || 3000;\n logger.info(`Checking and freeing port ${port}...`);\n await killProcessOnPort(port);\n\n const detectedFramework = detectFramework();\n const framework = options.framework ? (isFrameworkSupported(options.framework) ? options.framework : \"generic\") : detectedFramework;\n const useInteractive = options.interactive !== false;\n logger.info(`Starting ${useInteractive ? 'interactive' : 'concurrent'} development mode`, { framework });\n const { runInteractiveProcesses, runConcurrentProcesses } = await import(\"./adapters/framework/concurrent-processes\");\n const processes = [];\n if (!options.noFramework && framework !== 'generic') {\n const frameworkCommands = {\n nextjs: \"npm run dev\",\n vite: \"npm run dev\",\n nuxt: \"npm run dev\",\n sveltekit: \"npm run dev\",\n remix: \"npm run dev\",\n astro: \"npm run dev\",\n express: \"npm run dev\",\n 'tanstack-start': \"npm run dev\"\n };\n const frameworkCommand = options.cmd || frameworkCommands[framework as keyof typeof frameworkCommands];\n if (frameworkCommand) {\n processes.push({\n name: framework.charAt(0).toUpperCase() + framework.slice(1),\n command: frameworkCommand,\n color: 'green',\n cwd: process.cwd(),\n env: { PORT: port.toString(), NODE_ENV: 'development' }\n });\n }\n }\n const docsFlags = ` --docs --docs-output ${options.docsOutput}`;\n \n processes.push({\n name: \"Igniter\",\n command: `npx @igniter-js/cli@latest generate schema --watch --framework ${framework} --output ${options.output}${docsFlags}`,\n color: \"blue\",\n cwd: process.cwd()\n });\n if (useInteractive) {\n await runInteractiveProcesses(processes);\n } else {\n await runConcurrentProcesses({ processes, killOthers: true });\n }\n });\n\n// Generate command (parent for subcommands)\nconst generate = program\n .command(\"generate\")\n .description(\"Scaffold new features or generate client schema\");\n\n// Generate Schema subcommand\ngenerate\n .command(\"schema\")\n .description(\"Generate client schema from your Igniter router (for CI/CD or manual builds)\")\n .option(\"--framework <type>\", `Framework type (${getFrameworkList()}, generic)`)\n .option(\"--output <dir>\", \"Output directory\", \"src/\")\n .option(\"--watch\", \"Watch for changes and regenerate automatically\")\n .option(\"--docs\", \"Enable automatic OpenAPI documentation generation\")\n .option(\"--docs-output <dir>\", \"Output directory for OpenAPI docs\", \"./src/docs\")\n .action(async (options) => {\n const startTime = performance.now();\n const detectedFramework = detectFramework();\n const framework = options.framework ? (isFrameworkSupported(options.framework) ? options.framework : \"generic\") : detectedFramework;\n logger.group(\"Igniter.js CLI\");\n logger.info(`Starting client schema ${options.watch ? 'watching' : 'generation'}`, { framework, output: options.output });\n const watcherSpinner = createDetachedSpinner(\"Loading generator...\");\n watcherSpinner.start();\n const { IgniterWatcher } = await import(\"./adapters/build/watcher\");\n const watcher = new IgniterWatcher({\n framework,\n outputDir: options.output,\n debug: program.opts().debug, // Pass global debug flag to watcher\n controllerPatterns: [\"**/*.controller.{ts,js}\"],\n generateDocs: options.docs,\n docsOutputDir: options.docsOutput,\n });\n watcherSpinner.success(\"Generator loaded\");\n if (options.watch) {\n await watcher.start();\n } else {\n await watcher.generate();\n const duration = ((performance.now() - startTime) / 1000).toFixed(2);\n logger.success(`Generation complete in ${duration}s`);\n logger.groupEnd();\n process.exit(0);\n }\n });\n\ngenerate\n .command(\"docs\")\n .description(\"Generate OpenAPI specification and/or interactive playground\")\n .option(\"--output <dir>\", \"Output directory for the OpenAPI spec\", \"./src\")\n .option(\"--ui\", \"Generate a self-contained HTML file with Scalar UI\")\n .action(async (options) => {\n const startTime = performance.now();\n const docsLogger = createChildLogger({ component: 'generate-docs-command' });\n const timeline = createTimelineManager(docsLogger);\n \n try {\n timeline.start('Generating OpenAPI Documentation', 4);\n \n // Step 1: Load dependencies and locate router\n timeline.step('Loading dependencies and locating router');\n const { loadRouter, introspectRouter } = await import(\"./adapters/build/introspector\");\n const { OpenAPIGenerator } = await import(\"./adapters/docs/openapi-generator\");\n\n const possibleRouterPaths = [\n 'src/igniter.router.ts',\n 'src/igniter.router.js',\n 'src/router.ts',\n 'src/router.js',\n 'igniter.router.ts',\n 'igniter.router.js',\n 'router.ts',\n 'router.js'\n ];\n\n let router: IgniterRouter<any, any, any, any, any> | null = null;\n let foundRouterPath = '';\n for (const routerPath of possibleRouterPaths) {\n if (fs.existsSync(routerPath)) {\n router = await loadRouter(routerPath);\n if (router) {\n foundRouterPath = routerPath;\n break;\n }\n }\n }\n\n if (!router) {\n timeline.fail('No Igniter router found in your project. Please ensure you have a router file (e.g., src/igniter.router.ts).');\n process.exit(1);\n }\n \n timeline.substep(`Found router at: ${foundRouterPath}`);\n timeline.stepSuccess('Router loaded successfully');\n\n // Step 2: Introspect router and analyze API structure\n timeline.step('Analyzing API structure');\n const introspected = introspectRouter(router);\n const controllersCount = Object.keys(introspected.schema.controllers || {}).length;\n const endpointsCount = Object.values(introspected.schema.controllers || {})\n .reduce((total, controller: any) => total + Object.keys(controller.actions || {}).length, 0);\n \n timeline.substep(`Found ${controllersCount} controllers, ${endpointsCount} endpoints`);\n timeline.stepSuccess('API structure analyzed');\n\n // Step 3: Generate OpenAPI specification\n timeline.step('Generating OpenAPI specification');\n const generator = new OpenAPIGenerator(introspected.schema.docs || {});\n const openApiSpec = generator.generate(introspected.schema);\n \n const outputDir = path.resolve(options.output, 'docs');\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n timeline.substep(`Created output directory: ${outputDir}`);\n }\n \n const outputPath = path.join(outputDir, 'openapi.json');\n fs.writeFileSync(outputPath, JSON.stringify(openApiSpec, null, 2), 'utf8');\n \n const specSize = (fs.statSync(outputPath).size / 1024).toFixed(1);\n timeline.substep(`OpenAPI spec: ${outputPath} (${specSize} KB)`);\n timeline.stepSuccess('OpenAPI specification generated');\n\n // Step 4: Generate Scalar UI (if requested)\n if (options.ui) {\n timeline.step('Generating Scalar UI');\n const scalarHtml = `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>API Reference</title>\n </head>\n <body>\n <script id=\"api-reference\" data-url=\"./openapi.json\"></script>\n <script src=\"https://cdn.jsdelivr.net/npm/@scalar/api-reference\"></script>\n </body>\n</html>`;\n const uiOutputPath = path.join(outputDir, 'index.html');\n fs.writeFileSync(uiOutputPath, scalarHtml, 'utf8');\n \n const uiSize = (fs.statSync(uiOutputPath).size / 1024).toFixed(1);\n timeline.substep(`Scalar UI: ${uiOutputPath} (${uiSize} KB)`);\n timeline.stepSuccess('Interactive UI generated');\n }\n\n const duration = ((performance.now() - startTime) / 1000).toFixed(2);\n const totalFiles = options.ui ? 2 : 1;\n timeline.complete(`Documentation generated successfully! ${totalFiles} files created in ${duration}s`);\n \n // Force exit to prevent hanging processes (esbuild cleanup)\n process.exit(0);\n\n } catch (error) {\n timeline.fail('Failed to generate OpenAPI documentation', error instanceof Error ? error : new Error(String(error)));\n process.exit(1);\n }\n });\n\n// Generate Feature subcommand\ngenerate\n .command(\"feature\")\n .description(\"Scaffold a new feature module\")\n .argument(\"[name]\", \"The name of the feature (e.g., 'user', 'products')\")\n .option(\"--schema <value>\", \"Generate from a schema provider (e.g., 'prisma:User')\")\n .action(async (name: string | undefined, options: { schema?: string }) => {\n await handleGenerateFeature(name, options);\n });\n\n// Generate Controller subcommand\ngenerate\n .command(\"controller\")\n .description(\"Scaffold a new controller within a feature\")\n .argument(\"<name>\", \"The name of the controller (e.g., 'profile')\")\n .option(\"-f, --feature <feature>\", \"The parent feature name\", \"\")\n .action(async (name: string, options: { feature: string }) => {\n await handleGenerateController(name, options.feature);\n });\n\n// Generate Procedure subcommand\ngenerate\n .command(\"procedure\")\n .description(\"Scaffold a new procedure within a feature\")\n .argument(\"<name>\", \"The name of the procedure (e.g., 'auth', 'logging')\")\n .option(\"-f, --feature <feature>\", \"The parent feature name\", \"\")\n .action(async (name: string, options: { feature: string }) => {\n await handleGenerateProcedure(name, options.feature);\n });\n\nprogram.parse();\n\nfunction validateConfig(config: any): { isValid: boolean; message?: string } {\n if (!config.projectName) {\n return { isValid: false, message: 'Project name is required' }\n }\n if (!config.framework) {\n return { isValid: false, message: 'Framework selection is required' }\n }\n return { isValid: true }\n}\n","import * as fs from 'fs'\nimport * as path from 'path'\nimport { ChildProcess } from 'child_process'\nimport spawn from 'cross-spawn'\nimport { createChildLogger, formatError } from '../logger'\nimport { startIgniterWithFramework } from './concurrent-processes'\n\nexport type SupportedFramework = 'nextjs' | 'vite' | 'nuxt' | 'sveltekit' | 'remix' | 'astro' | 'express' | 'tanstack-start' | 'generic'\n\nexport interface FrameworkConfig {\n name: SupportedFramework\n devCommand: string\n buildCommand: string\n startCommand: string\n defaultPort: number\n configFiles: string[]\n packageDependencies: string[]\n}\n\n/**\n * Framework configurations mapping\n */\nexport const frameworkConfigs: Record<SupportedFramework, FrameworkConfig> = {\n nextjs: {\n name: 'nextjs',\n devCommand: 'npm run dev --turbo',\n buildCommand: 'npm run build',\n startCommand: 'npm run start',\n defaultPort: 3000,\n configFiles: ['next.config.js', 'next.config.ts', 'next.config.mjs'],\n packageDependencies: ['next']\n },\n vite: {\n name: 'vite',\n devCommand: 'npm run dev',\n buildCommand: 'npm run build',\n startCommand: 'npm run preview',\n defaultPort: 5173,\n configFiles: ['vite.config.js', 'vite.config.ts', 'vite.config.mjs'],\n packageDependencies: ['vite']\n },\n nuxt: {\n name: 'nuxt',\n devCommand: 'npm run dev',\n buildCommand: 'npm run build',\n startCommand: 'npm run start',\n defaultPort: 3000,\n configFiles: ['nuxt.config.js', 'nuxt.config.ts', 'nuxt.config.mjs'],\n packageDependencies: ['nuxt', '@nuxt/kit']\n },\n sveltekit: {\n name: 'sveltekit',\n devCommand: 'npm run dev',\n buildCommand: 'npm run build',\n startCommand: 'npm run preview',\n defaultPort: 5173,\n configFiles: ['svelte.config.js', 'svelte.config.ts'],\n packageDependencies: ['@sveltejs/kit', 'svelte']\n },\n remix: {\n name: 'remix',\n devCommand: 'npm run dev',\n buildCommand: 'npm run build',\n startCommand: 'npm run start',\n defaultPort: 3000,\n configFiles: ['remix.config.js', 'remix.config.ts'],\n packageDependencies: ['@remix-run/node', '@remix-run/react']\n },\n astro: {\n name: 'astro',\n devCommand: 'npm run dev',\n buildCommand: 'npm run build',\n startCommand: 'npm run preview',\n defaultPort: 4321,\n configFiles: ['astro.config.js', 'astro.config.ts', 'astro.config.mjs'],\n packageDependencies: ['astro']\n },\n express: {\n name: 'express',\n devCommand: 'npm run dev',\n buildCommand: 'npm run build',\n startCommand: 'npm run start',\n defaultPort: 3000,\n configFiles: ['server.js', 'server.ts', 'app.js', 'app.ts'],\n packageDependencies: ['express']\n },\n 'tanstack-start': {\n name: 'tanstack-start',\n devCommand: 'npm run dev',\n buildCommand: 'npm run build',\n startCommand: 'npm run start',\n defaultPort: 3000,\n configFiles: ['app.config.js', 'app.config.ts'],\n packageDependencies: ['@tanstack/start']\n },\n generic: {\n name: 'generic',\n devCommand: 'npm run dev',\n buildCommand: 'npm run build', \n startCommand: 'npm run start',\n defaultPort: 3000,\n configFiles: [],\n packageDependencies: []\n }\n}\n\n/**\n * Detect the framework used in the current project\n */\nexport function detectFramework(cwd: string = process.cwd()): SupportedFramework {\n const logger = createChildLogger({ component: 'framework-detector' })\n \n logger.debug('Starting framework detection', { cwd })\n \n // Check for framework-specific config files first (most reliable)\n for (const [frameworkName, config] of Object.entries(frameworkConfigs)) {\n if (frameworkName === 'generic') continue // Skip generic, use as fallback\n \n logger.debug('Checking config files', {\n framework: frameworkName,\n configFiles: config.configFiles\n })\n \n const hasConfigFile = config.configFiles.some(configFile => {\n const configPath = path.join(cwd, configFile)\n const exists = fs.existsSync(configPath)\n \n if (exists) {\n logger.debug('Found framework config file', {\n framework: frameworkName,\n configFile,\n path: configPath\n })\n }\n \n return exists\n })\n \n if (hasConfigFile) {\n return frameworkName as SupportedFramework\n }\n }\n \n // Fallback: check package.json dependencies\n try {\n const packageJsonPath = path.join(cwd, 'package.json')\n if (fs.existsSync(packageJsonPath)) {\n logger.debug('Reading package.json', { path: packageJsonPath })\n \n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies\n }\n \n for (const [frameworkName, config] of Object.entries(frameworkConfigs)) {\n if (frameworkName === 'generic') continue\n \n logger.debug('Checking dependencies', {\n framework: frameworkName,\n dependencies: config.packageDependencies\n })\n \n const hasFrameworkDep = config.packageDependencies.some(dep => {\n const exists = !!allDeps[dep]\n if (exists) {\n logger.debug('Found framework dependency', {\n framework: frameworkName,\n dependency: dep,\n version: allDeps[dep]\n })\n }\n return exists\n })\n \n if (hasFrameworkDep) {\n logger.info('Framework detected via dependencies', { framework: frameworkName })\n return frameworkName as SupportedFramework\n }\n }\n }\n } catch (error) {\n logger.warn('Could not read package.json', { error: formatError(error) })\n }\n \n logger.info('No specific framework detected, using generic')\n return 'generic'\n}\n\n/**\n * Get the package manager used in the project\n */\nexport function detectPackageManager(cwd: string = process.cwd()): 'npm' | 'yarn' | 'pnpm' | 'bun' {\n const logger = createChildLogger({ component: 'package-manager-detector' })\n \n logger.debug('Detecting package manager', { cwd })\n \n if (fs.existsSync(path.join(cwd, 'bun.lockb'))) {\n logger.info('Detected package manager', { manager: 'bun' })\n return 'bun'\n }\n if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) {\n logger.info('Detected package manager', { manager: 'pnpm' })\n return 'pnpm'\n }\n if (fs.existsSync(path.join(cwd, 'yarn.lock'))) {\n logger.info('Detected package manager', { manager: 'yarn' })\n return 'yarn'\n }\n \n logger.info('No lockfile found, using npm')\n return 'npm'\n}\n\n/**\n * Build the dev command with the detected package manager\n */\nexport function buildDevCommand(\n framework: SupportedFramework,\n packageManager: string,\n customCommand?: string\n): string {\n const logger = createChildLogger({ component: 'command-builder' })\n \n if (customCommand) {\n logger.info('Using custom command', { command: customCommand })\n return customCommand\n }\n \n const config = frameworkConfigs[framework]\n const baseCommand = config.devCommand\n \n // Replace npm with the detected package manager\n const finalCommand = baseCommand.replace('npm run', `${packageManager} run`)\n \n logger.info('Built dev command', {\n framework,\n packageManager,\n baseCommand,\n finalCommand\n })\n \n return finalCommand\n}\n\nexport interface DevServerOptions {\n framework?: SupportedFramework\n command?: string\n port?: number\n debug?: boolean\n cwd?: string\n /**\n * Use concurrently to run with Igniter watcher\n * @default false\n */\n withIgniter?: boolean\n /**\n * Custom Igniter watcher command\n */\n igniterCommand?: string\n}\n\n/**\n * Create prefix for server logs to distinguish from CLI logs\n */\nfunction createServerLogPrefix(): string {\n return '│ '\n}\n\n/**\n * Start the development server for the detected framework\n */\nexport async function startDevServer(options: DevServerOptions = {}): Promise<ChildProcess | void> {\n const logger = createChildLogger({ component: 'dev-server' });\n \n const cwd = options.cwd || process.cwd();\n const framework = options.framework || detectFramework(cwd);\n const packageManager = detectPackageManager(cwd);\n const config = frameworkConfigs[framework];\n \n const command = buildDevCommand(framework, packageManager, options.command);\n const port = options.port || config.defaultPort;\n \n // If withIgniter option is enabled, use concurrent processes\n if (options.withIgniter) {\n logger.info('Starting dev server with Igniter watcher', {\n framework,\n packageManager,\n command,\n port,\n igniterCommand: options.igniterCommand\n });\n\n try {\n await startIgniterWithFramework({\n framework,\n frameworkCommand: command,\n cwd,\n port,\n debug: options.debug,\n igniterWatcherCommand: options.igniterCommand\n });\n return; // No need to return ChildProcess as concurrently handles it\n } catch (error) {\n logger.error('Failed to start concurrent processes', { error: formatError(error) });\n throw error;\n }\n }\n \n // Original single process implementation\n logger.info('Starting dev server', {\n framework,\n packageManager,\n command,\n port\n });\n \n // Use cross-spawn for cross-platform compatibility\n const serverProcess = spawn(command, [], {\n stdio: ['inherit', 'pipe', 'pipe'],\n cwd,\n env: {\n ...process.env,\n PORT: port.toString(),\n NODE_ENV: 'development'\n },\n shell: true\n });\n \n const logPrefix = createServerLogPrefix();\n \n // Pipe server stdout with prefix\n serverProcess.stdout?.on('data', (data: Buffer) => {\n const lines = data.toString().split('\\n');\n lines.forEach(line => {\n if (line.trim()) {\n console.log(`${logPrefix}${line}`);\n }\n });\n });\n \n // Pipe server stderr with prefix and red color\n serverProcess.stderr?.on('data', (data: Buffer) => {\n const lines = data.toString().split('\\n');\n lines.forEach(line => {\n if (line.trim()) {\n console.error(`${logPrefix}\\x1b[31m${line}\\x1b[0m`);\n }\n });\n });\n \n serverProcess.on('error', (error: Error) => {\n logger.error('Dev server error', { error: formatError(error) });\n });\n\n serverProcess.on('exit', (code: number | null) => {\n // Close the server log section visually\n console.log(`\\n└${'─'.repeat(60)}┘\\n`);\n \n if (code === 0) {\n logger.success('Dev server exited successfully');\n } else {\n logger.error('Dev server exited with error', { code });\n }\n });\n \n return serverProcess;\n}\n\n/**\n * Check if a framework is supported\n */\nexport function isFrameworkSupported(framework: string): framework is SupportedFramework {\n return framework in frameworkConfigs\n}\n\n/**\n * Get a comma-separated list of supported frameworks\n */\nexport function getFrameworkList(): string {\n return Object.keys(frameworkConfigs)\n .filter(f => f !== 'generic')\n .join(', ')\n}\n\n/**\n * Start development with both Igniter watcher and framework dev server\n * This is a convenience function that automatically detects the framework\n * and starts both processes using concurrently\n */\nexport async function startIgniterDev(options: {\n cwd?: string;\n port?: number;\n debug?: boolean;\n framework?: SupportedFramework;\n frameworkCommand?: string;\n igniterCommand?: string;\n} = {}): Promise<void> {\n const logger = createChildLogger({ component: 'igniter-dev' });\n \n const cwd = options.cwd || process.cwd();\n const framework = options.framework || detectFramework(cwd);\n const packageManager = detectPackageManager(cwd);\n const config = frameworkConfigs[framework];\n \n const frameworkCommand = options.frameworkCommand || \n buildDevCommand(framework, packageManager);\n \n logger.info('Starting Igniter development mode', {\n framework,\n packageManager,\n frameworkCommand,\n port: options.port || config.defaultPort\n });\n\n try {\n await startIgniterWithFramework({\n framework,\n frameworkCommand,\n cwd,\n port: options.port,\n debug: options.debug,\n igniterWatcherCommand: options.igniterCommand\n });\n } catch (error) {\n logger.error('Failed to start Igniter development', { error: formatError(error) });\n throw error;\n }\n}","export * from './framework-detector';\nexport * from './concurrent-processes';","import fs from 'fs/promises'\nimport path from 'path'\nimport chalk from 'chalk'\nimport { runSetupPrompts, confirmOverwrite } from './prompts'\nimport { generateProject } from './generator'\nimport { createChildLogger } from '../logger'\n\nconst logger = createChildLogger({ component: 'init-setup' })\n\n/**\n * Main init command handler\n */\nexport async function handleInitCommand(\n targetPath?: string,\n options: {\n force?: boolean\n template?: string\n packageManager?: string\n } = {}\n): Promise<void> {\n try {\n // Determine target directory\n const targetDir = targetPath ? path.resolve(targetPath) : process.cwd();\n const isExistingProject = (await fs.stat(path.join(targetDir, 'package.json')).catch(() => null)) !== null;\n\n logger.info(`Starting Igniter.js project initialization (existing project: ${isExistingProject})`, {\n targetDir,\n options,\n });\n\n // If it's an existing project, welcome them back\n if (isExistingProject) {\n console.log();\n console.log(chalk.bold.blue('👋 Welcome back!'));\n console.log(chalk.dim(\"Let's add Igniter.js to your existing project...\"));\n console.log();\n }\n\n // Check if directory has conflicting files\n if (!options.force) {\n const shouldContinue = await checkDirectoryAndConfirm(targetDir, isExistingProject);\n if (!shouldContinue) {\n console.log(chalk.yellow('✋ Init cancelled by user'));\n return;\n }\n }\n\n // Run interactive prompts. It will need to be smart about the targetDir.\n const config = await runSetupPrompts(targetDir);\n\n // The generator will also need to be smart about adding vs creating files.\n await generateProject(config, targetDir);\n\n logger.info('Project initialization completed successfully', {\n project: config.projectName,\n targetDir\n })\n\n } catch (error) {\n logger.error('Project initialization failed', { error })\n console.log(chalk.red('\\n💥 Project initialization failed!'))\n console.log(chalk.red(error instanceof Error ? error.message : String(error)))\n process.exit(1)\n }\n}\n\n/**\n * Check if directory exists and is not empty, ask for confirmation\n */\nasync function checkDirectoryAndConfirm(\n targetDir: string,\n isExistingProject: boolean,\n): Promise<boolean> {\n try {\n const stats = await fs.stat(targetDir);\n if (!stats.isDirectory()) {\n throw new Error(`Target path ${targetDir} is not a directory`);\n }\n\n if (isExistingProject) {\n const igniterCoreFile = path.join(targetDir, 'src', 'igniter.ts');\n if (await fs.stat(igniterCoreFile).catch(() => null)) {\n console.log(chalk.yellow('⚠️ It looks like Igniter.js might already be set up here.'));\n // The confirmOverwrite message is generic, so this console log adds context.\n return await confirmOverwrite(targetDir);\n }\n return true;\n }\n\n // For new projects, check if directory is not empty\n const entries = await fs.readdir(targetDir);\n const nonEmptyFiles = entries.filter(entry => {\n return (\n !entry.startsWith('.') &&\n !['README.md', 'LICENSE', 'node_modules', '.git'].includes(entry.toLowerCase())\n );\n });\n\n if (nonEmptyFiles.length > 0) {\n return await confirmOverwrite(targetDir);\n }\n\n return true;\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n // Directory doesn't exist, which is fine.\n return true;\n }\n throw error;\n }\n}\n\n/**\n * Initialize in current directory\n */\nexport async function initInCurrentDirectory(options: {\n force?: boolean\n packageManager?: string\n} = {}): Promise<void> {\n await handleInitCommand(process.cwd(), options)\n}\n\n/**\n * Initialize in new directory\n */\nexport async function initInNewDirectory(\n projectName: string,\n options: {\n force?: boolean\n packageManager?: string\n } = {}\n): Promise<void> {\n const targetDir = path.resolve(projectName)\n await handleInitCommand(targetDir, options)\n}\n\n/**\n * Validate project name\n */\nexport function validateProjectName(name: string): { valid: boolean; message?: string } {\n if (!name || !name.trim()) {\n return { valid: false, message: 'Project name is required' }\n }\n\n const trimmedName = name.trim()\n\n // Check for valid characters\n if (!/^[a-z0-9-_]+$/i.test(trimmedName)) {\n return {\n valid: false,\n message: 'Project name can only contain letters, numbers, hyphens, and underscores'\n }\n }\n\n // Check for reserved names\n const reservedNames = [\n 'node_modules', 'package.json', 'dist', 'build', '.git', '.env',\n 'src', 'public', 'static', 'assets', 'components', 'pages', 'api'\n ]\n\n if (reservedNames.includes(trimmedName.toLowerCase())) {\n return {\n valid: false,\n message: `'${trimmedName}' is a reserved name and cannot be used`\n }\n }\n\n // Check length\n if (trimmedName.length > 214) {\n return {\n valid: false,\n message: 'Project name cannot be longer than 214 characters'\n }\n }\n\n if (trimmedName.length < 2) {\n return {\n valid: false,\n message: 'Project name must be at least 2 characters long'\n }\n }\n\n return { valid: true }\n}\n\n/**\n * Show help information for init command\n */\nexport function showInitHelp(): void {\n console.log(chalk.bold('\\n🔥 Igniter.js Init Command\\n'))\n\n console.log(chalk.bold('Usage:'))\n console.log(' igniter init [project-name] [options]')\n console.log(' igniter init . [options] # Initialize in current directory')\n console.log()\n\n console.log(chalk.bold('Examples:'))\n console.log(' igniter init my-api # Create new project')\n console.log(' igniter init . # Initialize current directory')\n console.log(' igniter init my-api --force # Skip confirmation prompts')\n console.log()\n\n console.log(chalk.bold('Options:'))\n console.log(' --force Skip confirmation prompts')\n console.log(' --pm <manager> Package manager (npm, yarn, pnpm, bun)')\n console.log(' --help Show this help message')\n console.log()\n\n console.log(chalk.bold('Features:'))\n console.log(' 🗄️ Redis Store Caching, sessions, pub/sub')\n console.log(' 🔄 BullMQ Jobs Background task processing')\n console.log(' 🤖 MCP Server AI assistant integration')\n console.log(' 📝 Enhanced Logging Structured console output')\n console.log(' 📊 Telemetry Tracking requests and errors')\n console.log()\n\n console.log(chalk.bold('Supported Frameworks:'))\n console.log(' • Next.js • Express')\n console.log(' • Vite • TanStack Start')\n console.log(' • Nuxt • Astro')\n console.log(' • SvelteKit • Generic')\n console.log(' • Remix')\n console.log()\n\n console.log(chalk.bold('Database Options:'))\n console.log(' • PostgreSQL + Prisma')\n console.log(' • MySQL + Prisma')\n console.log(' • SQLite + Prisma')\n console.log(' • MongoDB + Mongoose')\n console.log(' • None')\n console.log()\n}\n","import prompts from 'prompts'\nimport chalk from 'chalk'\nimport path from 'path'\nimport { detectFramework, detectPackageManager, getFrameworkList, type SupportedFramework } from '../framework/framework-detector'\nimport type {\n ProjectSetupConfig,\n IgniterFeatures,\n DatabaseProvider,\n PackageManager\n} from './types'\n\n/**\n * ANSI Art and branding for Igniter.js\n */\nconst IGNITER_LOGO = `\n${chalk.blue('┌')}${chalk.blue('─'.repeat(60))}${chalk.blue('┐')}\n${chalk.blue('│')}${' '.repeat(20)}${chalk.bold.blue('⚡ IGNITER.JS')}${' '.repeat(19)}${chalk.blue('│')}\n${chalk.blue('│')}${' '.repeat(15)}${chalk.dim('Type-safe API framework')}${' '.repeat(14)}${chalk.blue('│')}\n${chalk.blue('└')}${chalk.blue('─'.repeat(60))}${chalk.blue('┘')}\n`\n\n/**\n * Welcome message with beautiful styling\n */\nfunction showWelcome(): void {\n console.clear()\n console.log(IGNITER_LOGO)\n console.log()\n console.log(chalk.bold('Welcome to Igniter.js!'))\n console.log()\n console.log(chalk.dim('Let\\'s setup your type-safe API layer with modern tooling.'))\n console.log(chalk.dim('This process will configure your project with everything you need.'))\n console.log()\n}\n\n/**\n * CLI options that can be passed to skip prompts\n */\nexport interface CLIOptions {\n template?: string\n framework?: string\n features?: string\n database?: string\n orm?: string\n packageManager?: string\n git?: boolean\n install?: boolean\n docker?: boolean\n force?: boolean\n}\n\n/**\n * Enhanced prompts with better UX and validation\n */\nexport async function runSetupPrompts(\n targetDir?: string,\n isExistingProject = false,\n cliOptions: CLIOptions = {}\n): Promise<ProjectSetupConfig> {\n showWelcome()\n\n // Auto-detect current environment\n const detectedFramework = detectFramework()\n const detectedPackageManager = detectPackageManager()\n const projectName = targetDir ? path.basename(path.resolve(targetDir)) : 'my-igniter-app'\n\n // Parse CLI features if provided\n const cliFeatures = cliOptions.features ? cliOptions.features.split(',').map(f => f.trim()) : []\n\n try {\n const answers = await prompts([\n {\n type: isExistingProject ? null : 'text',\n name: 'projectName',\n message: chalk.bold('• What will your project be called?'),\n initial: projectName,\n validate: (value: string) => {\n if (!value.trim()) return 'Project name is required'\n if (!/^[a-z0-9-_]+$/i.test(value.trim())) {\n return 'Project name can only contain letters, numbers, hyphens, and underscores'\n }\n return true\n },\n format: (value: string) => value.trim().toLowerCase().replace(/\\s+/g, '-')\n },\n {\n type: (cliOptions.template || (isExistingProject && detectedFramework)) ? null : 'select',\n name: 'framework',\n message: '• Which starter would you like to use?',\n choices: [\n {\n title: `${chalk.green('Next.js')} ${chalk.dim('(Fullstack)')}`,\n value: 'starter-nextjs'\n },\n {\n title: `${chalk.yellow('Express.js')} ${chalk.dim('(REST API)')}`,\n value: 'starter-express-rest-api'\n },\n {\n title: `${chalk.cyan('Deno')} ${chalk.dim('(REST API)')}`,\n value: 'starter-deno-rest-api'\n },\n {\n title: `${chalk.magenta('Bun')} ${chalk.dim('(REST API)')}`,\n value: 'starter-bun-rest-api'\n },\n {\n title: `${chalk.red('Bun + React (Vite)')} ${chalk.dim('(Fullstack)')}`,\n value: 'starter-bun-react-app'\n },\n {\n title: `${chalk.magenta('TanStack Start')} ${chalk.dim('(Fullstack)')}`,\n value: 'starter-tanstack-start'\n }\n ],\n },\n {\n type: cliOptions.features ? null : 'multiselect',\n name: 'features',\n message: chalk.bold('• Which Igniter.js features would you like to enable?'),\n choices: [\n {\n title: `${chalk.blue('Store (Redis)')}`,\n description: 'Caching, sessions, and pub/sub messaging',\n value: 'store'\n },\n {\n title: `${chalk.green('Jobs (BullMQ)')}`,\n description: 'Background task processing and job queues',\n value: 'jobs'\n },\n {\n title: `${chalk.magenta('MCP Server')}`,\n description: 'AI assistant integration with Model Context Protocol',\n value: 'mcp'\n },\n {\n title: `${chalk.yellow('Enhanced Logging')}`,\n description: 'Advanced console logging with structured output',\n value: 'logging',\n selected: true // Default selected\n },\n {\n title: `${chalk.yellow('Telemetry')}`,\n description: 'Telemetry for tracking requests and errors',\n value: 'telemetry',\n selected: true // Default selected\n }\n ],\n instructions: chalk.dim('Use ↑↓ to navigate, space to select, enter to confirm')\n },\n {\n type: cliOptions.database ? null : 'select',\n name: 'database',\n message: chalk.bold('• Choose your database (optional):'),\n choices: [\n {\n title: `${chalk.gray('None')} ${chalk.dim('- Start without database')}`,\n value: 'none'\n },\n {\n title: `${chalk.blue('PostgreSQL + Prisma')} ${chalk.dim('- Production-ready')}`,\n value: 'postgresql'\n },\n {\n title: `${chalk.blue('MySQL + Prisma')} ${chalk.dim('- Wide compatibility')}`,\n value: 'mysql'\n },\n {\n title: `${chalk.green('SQLite + Prisma')} ${chalk.dim('- Local development')}`,\n value: 'sqlite'\n },\n ],\n initial: 0\n },\n {\n type: (prev: DatabaseProvider) => {\n // Skip if docker explicitly disabled via CLI\n if (cliOptions.docker === false) return null;\n\n // Get database value from CLI or prompt answer\n const dbValue = (cliOptions.database as DatabaseProvider) || prev;\n\n // Only show docker prompt if database is not 'none'\n return dbValue !== 'none' ? 'confirm' : null;\n },\n name: 'dockerCompose',\n message: chalk.bold('• Setup Docker Compose for development?'),\n hint: chalk.dim('Includes Redis and your selected database'),\n initial: cliOptions.docker !== false\n },\n {\n type: cliOptions.packageManager ? null : 'select',\n name: 'packageManager',\n message: isExistingProject\n ? `We detected ${chalk.cyan(detectedPackageManager)}. Please confirm or select another.`\n : chalk.bold('• Which package manager?'),\n choices: [\n {\n title: `${chalk.red('npm')} ${detectedPackageManager === 'npm' ? chalk.dim('(detected)'): ''}`,\n value: 'npm'\n },\n {\n title: `${chalk.blue('yarn')} ${detectedPackageManager === 'yarn' ? chalk.dim('(detected)'): ''}`,\n value: 'yarn'\n },\n {\n title: `${chalk.yellow('pnpm')} ${detectedPackageManager === 'pnpm' ? chalk.dim('(detected)'): ''}`,\n value: 'pnpm'\n },\n {\n title: `${chalk.white('bun')} ${detectedPackageManager === 'bun' ? chalk.dim('(detected)'): ''}`,\n value: 'bun'\n }\n ],\n initial: getPackageManagerChoiceIndex(cliOptions.packageManager || detectedPackageManager)\n },\n {\n type: (isExistingProject || cliOptions.git === false) ? null : 'confirm',\n name: 'initGit',\n message: chalk.bold('• Initialize Git repository?'),\n initial: cliOptions.git !== false\n },\n {\n type: cliOptions.install === false ? null : 'confirm',\n name: 'installDependencies',\n message: chalk.bold('• Install dependencies automatically?'),\n initial: cliOptions.install !== false\n }\n ], {\n onCancel: () => {\n console.log(chalk.red('\\n✗ Setup cancelled'))\n process.exit(0)\n }\n })\n\n // Convert features array to object, prioritizing CLI options\n const selectedFeatures = cliOptions.features ? cliFeatures : (answers.features || []);\n\n // Set defaults for logging and telemetry if no features were explicitly chosen\n const hasExplicitFeatures = cliOptions.features || (answers.features && answers.features.length > 0);\n\n const featuresObj: IgniterFeatures = {\n store: selectedFeatures.includes('store'),\n jobs: selectedFeatures.includes('jobs'),\n mcp: selectedFeatures.includes('mcp'),\n logging: selectedFeatures.includes('logging') || !hasExplicitFeatures,\n telemetry: selectedFeatures.includes('telemetry') || !hasExplicitFeatures\n }\n\n const config: ProjectSetupConfig = {\n projectName: answers.projectName || projectName,\n framework: cliOptions.template || answers.framework,\n features: featuresObj,\n database: { provider: (cliOptions.database as DatabaseProvider) || answers.database || 'none' },\n packageManager: (cliOptions.packageManager as PackageManager) || answers.packageManager || detectedPackageManager,\n initGit: cliOptions.git !== false && (answers.initGit !== undefined ? answers.initGit : !isExistingProject),\n installDependencies: cliOptions.install !== false && (answers.installDependencies !== false),\n dockerCompose: cliOptions.docker !== false && (answers.dockerCompose || false),\n }\n\n // Show configuration summary\n showConfigSummary(config)\n\n return config\n\n } catch (error) {\n if (error instanceof Error && error.message === 'canceled') {\n console.log(chalk.red('\\n✗ Setup interrupted'))\n process.exit(0)\n }\n throw error\n }\n}\n\n/**\n * Show configuration summary to user\n */\nfunction showConfigSummary(config: ProjectSetupConfig): void {\n console.log()\n console.log(chalk.bold('Configuration Summary:'))\n console.log(chalk.dim('─'.repeat(40)))\n console.log(`${chalk.cyan('Project:')} ${config.projectName}`)\n console.log(`${chalk.cyan('Framework:')} ${config.framework}`)\n\n const enabledFeatures = Object.entries(config.features)\n .filter(([_, enabled]) => enabled)\n .map(([key, _]) => key)\n\n if (enabledFeatures.length > 0) {\n console.log(`${chalk.cyan('Features:')} ${enabledFeatures.join(', ')}`)\n }\n\n if (config.database.provider !== 'none') {\n console.log(`${chalk.cyan('Database:')} ${config.database.provider}`)\n }\n\n console.log(`${chalk.cyan('Package Manager:')} ${config.packageManager}`)\n console.log(`${chalk.cyan('Git:')} ${config.initGit ? 'Yes' : 'No'}`)\n console.log(`${chalk.cyan('Install Dependencies:')} ${config.installDependencies ? 'Yes' : 'No'}`)\n\n if (config.dockerCompose) {\n console.log(`${chalk.cyan('Docker Compose:')} Yes`)\n }\n\n console.log()\n}\n\n/**\n * Helper to get framework choice index\n */\nfunction getFrameworkChoiceIndex(detected: SupportedFramework): number {\n const frameworks = ['nextjs', 'vite', 'nuxt', 'sveltekit', 'remix', 'astro', 'express', 'tanstack-start', 'generic']\n return Math.max(0, frameworks.indexOf(detected))\n}\n\n/**\n * Helper to get package manager choice index\n */\nfunction getPackageManagerChoiceIndex(detected: PackageManager): number {\n const managers = ['npm', 'yarn', 'pnpm', 'bun']\n return Math.max(0, managers.indexOf(detected))\n}\n\nexport async function selectStarterPrompt(starters: string[]): Promise<string | null> {\n const { useStarter } = await prompts({\n type: 'confirm',\n name: 'useStarter',\n message: 'The directory is empty. Would you like to use one of our official starters?',\n initial: true,\n })\n\n if (!useStarter) {\n return null\n }\n\n const { selectedStarter } = await prompts({\n type: 'select',\n name: 'selectedStarter',\n message: 'Which starter would you like to use?',\n choices: starters.map(starter => ({\n title: starter.replace('starter-', '').replace(/-/g, ' '),\n value: starter,\n })),\n })\n\n return selectedStarter\n}\n\nexport async function confirmOverwrite(message: string): Promise<boolean> {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message,\n initial: false,\n })\n\n return overwrite\n}\n","import fs from 'fs/promises'\nimport path from 'path'\nimport { execa } from 'execa'\nimport ora from 'ora'\nimport chalk from 'chalk'\nimport type { ProjectSetupConfig } from './types'\nimport {\n getFeatureDependencies,\n DATABASE_CONFIGS\n} from './features'\nimport { generateAllTemplates } from './templates'\nimport { createChildLogger } from '../logger'\n\nconst logger = createChildLogger({ component: 'project-generator' })\n\n/**\n * Main project generator class\n */\nexport class ProjectGenerator {\n private config: ProjectSetupConfig\n private targetDir: string\n private isExistingProject: boolean\n private spinner = ora()\n\n constructor(config: ProjectSetupConfig, targetDir: string, isExistingProject: boolean) {\n this.config = config\n this.targetDir = path.resolve(targetDir)\n this.isExistingProject = isExistingProject\n }\n\n /**\n * Generate the complete project\n */\n async generate(): Promise<void> {\n try {\n logger.info('Starting project generation', {\n project: this.config.projectName,\n targetDir: this.targetDir,\n isExisting: this.isExistingProject,\n })\n\n if (!this.isExistingProject) {\n await this.createProjectStructure()\n } else {\n this.spinner.succeed(chalk.dim('✓ Existing project detected, skipping structure creation.'))\n }\n\n await this.generateFiles()\n\n if (this.config.installDependencies) {\n await this.installDependencies()\n }\n\n if (this.config.initGit && !this.isExistingProject) {\n await this.initializeGit()\n }\n\n await this.runPostSetupTasks()\n\n this.showSuccessMessage()\n\n } catch (error) {\n this.spinner.fail(chalk.red('Project generation failed'))\n logger.error('Project generation failed', { error })\n throw error\n }\n }\n\n private async downloadTemplate(): Promise<{ isStarter: boolean, success: boolean }> {\n const { framework } = this.config\n const templateUrl = `https://github.com/felipebarcelospro/igniter-js.git`\n const branch = 'main'\n const tempDir = path.join(this.targetDir, '__igniter_tmp__')\n const starterDir = path.join(tempDir, 'apps', framework)\n const destDir = this.targetDir\n\n let isValidStarter = false\n\n this.spinner.start(`Baixando apenas o conteúdo da pasta starter (${framework}) do branch ${branch}...`)\n\n try {\n // Remove tempDir if exists\n await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {})\n // Clone repo to tempDir\n await execa('git', [\n 'clone',\n '--depth', '1',\n '--branch', branch,\n '--single-branch',\n templateUrl,\n tempDir\n ])\n // Verifica se starterDir existe\n const stat = await fs.stat(starterDir).catch(() => null)\n if (!stat || !stat.isDirectory()) {\n throw new Error('Diretório starter não encontrado no template clonado.')\n }\n\n isValidStarter = true\n\n // Copia todo o conteúdo de starterDir para destDir\n // Função recursiva para copiar arquivos e pastas\n const copyRecursive = async (src: string, dest: string) => {\n const entries = await fs.readdir(src, { withFileTypes: true })\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name)\n const destPath = path.join(dest, entry.name)\n if (entry.isDirectory()) {\n await fs.mkdir(destPath, { recursive: true })\n await copyRecursive(srcPath, destPath)\n } else if (entry.isFile()) {\n await fs.copyFile(srcPath, destPath)\n }\n }\n }\n\n await copyRecursive(starterDir, destDir)\n\n // Remove tempDir\n await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {})\n\n this.spinner.succeed(chalk.dim('✓ Conteúdo da pasta starter copiado com sucesso'))\n return { isStarter: isValidStarter, success: true }\n } catch (error) {\n // try check from error if is valid\n\n console.error('Template download/copy failed', error)\n this.spinner.fail(chalk.red('Falha ao baixar/copiar o template starter'))\n logger.error('Template download/copy failed', { error })\n // Remove tempDir se deu erro\n await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {})\n return { isStarter: isValidStarter, success: false }\n }\n }\n\n /**\n * Create project directory structure based on README.md structure\n */\n private async createProjectStructure(): Promise<void> {\n this.spinner.start('Creating project structure...')\n\n try {\n const result = await this.downloadTemplate()\n if (result.isStarter) {\n if(result.success !== true) {\n throw new Error('Template download/copy failed')\n }\n\n if(result.success === true) {\n return\n }\n }\n\n // Ensure target directory exists\n await fs.mkdir(this.targetDir, { recursive: true })\n\n // Create subdirectories following the README.md structure\n const dirs = [\n 'src',\n 'src/features',\n 'src/features/example',\n 'src/features/example/controllers',\n 'src/features/example/procedures',\n 'src/services'\n ]\n\n // Add presentation layers if framework supports it (Next.js, React-based)\n if (['nextjs', 'vite', 'remix'].includes(this.config.framework)) {\n dirs.push(\n 'src/features/example/presentation',\n 'src/features/example/presentation/components',\n 'src/features/example/presentation/hooks',\n 'src/features/example/presentation/contexts',\n 'src/features/example/presentation/utils'\n )\n }\n\n if (this.config.database.provider !== 'none') {\n dirs.push('prisma')\n }\n\n for (const dir of dirs) {\n await fs.mkdir(path.join(this.targetDir, dir), { recursive: true })\n }\n\n this.spinner.succeed(chalk.green('✓ Project structure created'))\n logger.info('Project structure created successfully')\n\n } catch (error) {\n this.spinner.fail(chalk.red('✗ Failed to create project structure'))\n throw error\n }\n }\n\n /**\n * Generate all project files\n */\n private async generateFiles(): Promise<void> {\n this.spinner.start('Generating project files...')\n\n try {\n const featureDeps = getFeatureDependencies(\n Object.entries(this.config.features)\n .filter(([_, enabled]) => enabled)\n .map(([key]) => key),\n )\n const dbConfig = DATABASE_CONFIGS[this.config.database.provider]\n\n const coreDependencies = [\n { name: '@igniter-js/core', version: '*' },\n { name: 'zod', version: '3.25.48' },\n ]\n\n const coreDevDependencies = [\n { name: 'typescript', version: '^5.6.3' },\n { name: '@types/node', version: '^22.9.0' },\n { name: 'tsx', version: '^4.7.0' },\n ]\n\n // We only need the dependencies for updating an existing package.json\n if (this.isExistingProject) {\n const deps = [...coreDependencies, ...featureDeps.dependencies, ...dbConfig.dependencies]\n const devDeps = [...coreDevDependencies, ...(featureDeps.devDependencies || []), ...(dbConfig.devDependencies || [])]\n await this.updatePackageJson(deps, devDeps)\n }\n\n // For new projects, dependencies are included in the template\n const allTemplates = generateAllTemplates(\n this.config,\n this.isExistingProject,\n [...coreDependencies, ...featureDeps.dependencies, ...dbConfig.dependencies].map(\n d => `${d.name}@${d.version}`,\n ),\n [\n ...coreDevDependencies,\n ...(featureDeps.devDependencies || []),\n ...(dbConfig.devDependencies || []),\n ].map(d => `${d.name}@${d.version}`),\n )\n\n let writtenCount = 0\n for (const template of allTemplates) {\n const filePath = path.join(this.targetDir, template.path)\n\n // For existing projects, be careful about overwriting files\n if (this.isExistingProject) {\n if (template.path === 'package.json') continue // Handled by updatePackageJson\n\n const fileExists = await fs.stat(filePath).catch(() => null)\n if (fileExists && ['.gitignore', 'README.md', 'tsconfig.json'].includes(path.basename(filePath))) {\n this.spinner.info(chalk.dim(`Skipping existing file: ${template.path}`))\n continue\n }\n }\n\n writtenCount++\n this.spinner.text = `Generating files... (${writtenCount}/${allTemplates.length})`\n }\n\n if (this.config.database.provider !== 'none') {\n await this.generatePrismaSchema()\n }\n\n this.spinner.succeed(chalk.green(`✓ Generated ${writtenCount} files`))\n logger.info('Project files generated successfully', { fileCount: writtenCount })\n } catch (error) {\n this.spinner.fail(chalk.red('✗ Failed to generate files'))\n throw error\n }\n }\n\n /**\n * Updates an existing package.json file with new dependencies and scripts.\n */\n private async updatePackageJson(\n dependencies: { name: string; version: string }[],\n devDependencies: { name: string; version: string }[],\n ): Promise<void> {\n const pkgJsonPath = path.join(this.targetDir, 'package.json')\n try {\n const pkgJsonContent = await fs.readFile(pkgJsonPath, 'utf-8')\n const pkgJson = JSON.parse(pkgJsonContent)\n\n this.spinner.text = 'Updating package.json...'\n\n // Add dependencies\n pkgJson.dependencies = pkgJson.dependencies || {}\n for (const dep of dependencies) {\n if (!pkgJson.dependencies[dep.name]) {\n pkgJson.dependencies[dep.name] = dep.version\n }\n }\n\n // Add dev dependencies\n pkgJson.devDependencies = pkgJson.devDependencies || {}\n for (const dep of devDependencies) {\n if (!pkgJson.devDependencies[dep.name]) {\n pkgJson.devDependencies[dep.name] = dep.version\n }\n }\n\n // Add database scripts if needed, without overwriting existing ones\n if (this.config.database.provider !== 'none') {\n pkgJson.scripts = pkgJson.scripts || {}\n const newScripts = {\n 'db:generate': 'prisma generate',\n 'db:push': 'prisma db push',\n 'db:studio': 'prisma studio',\n 'db:migrate': 'prisma migrate dev',\n }\n for (const [name, command] of Object.entries(newScripts)) {\n if (!pkgJson.scripts[name]) {\n pkgJson.scripts[name] = command\n }\n }\n }\n\n await fs.writeFile(pkgJsonPath, JSON.stringify(pkgJson, null, 2))\n this.spinner.succeed(chalk.green('✓ package.json updated'))\n } catch (error) {\n this.spinner.warn(chalk.yellow('Could not update package.json. Please add dependencies manually.'))\n logger.warn('Failed to update package.json', { error })\n }\n }\n\n /**\n * Generate Prisma schema file\n */\n private async generatePrismaSchema(): Promise<void> {\n const { provider } = this.config.database\n\n let datasourceUrl = 'env(\"DATABASE_URL\")'\n let providerName = provider === 'postgresql' ? 'postgresql' : provider === 'mysql' ? 'mysql' : 'sqlite'\n\n const schema = `// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"${providerName}\"\n url = ${datasourceUrl}\n}\n`\n\n const schemaPath = path.join(this.targetDir, 'prisma', 'schema.prisma')\n await fs.mkdir(path.dirname(schemaPath), { recursive: true })\n await fs.writeFile(schemaPath, schema, 'utf8')\n }\n\n /**\n * Install project dependencies\n */\n private async installDependencies(): Promise<void> {\n this.spinner.start(`Installing dependencies with ${this.config.packageManager}...`)\n\n try {\n const { command, args } = this.getInstallCommand()\n\n await execa(command, args, {\n cwd: this.targetDir,\n stdio: 'pipe'\n })\n\n this.spinner.succeed(chalk.green('✓ Dependencies installed'))\n\n } catch (error) {\n this.spinner.fail(chalk.red('✗ Failed to install dependencies'))\n throw error\n }\n }\n\n /**\n * Get install command based on package manager\n */\n private getInstallCommand(): { command: string; args: string[] } {\n switch (this.config.packageManager) {\n case 'yarn':\n return { command: 'yarn', args: ['install'] }\n case 'pnpm':\n return { command: 'pnpm', args: ['install'] }\n case 'bun':\n return { command: 'bun', args: ['install'] }\n default:\n return { command: 'npm', args: ['install'] }\n }\n }\n\n /**\n * Initialize git repository\n */\n private async initializeGit(): Promise<void> {\n this.spinner.start('Initializing Git repository...')\n\n try {\n await execa('git', ['init'], {\n cwd: this.targetDir,\n stdio: 'pipe'\n })\n\n await execa('git', ['add', '.'], {\n cwd: this.targetDir,\n stdio: 'pipe'\n })\n\n await execa('git', ['commit', '-m', 'Initial commit'], {\n cwd: this.targetDir,\n stdio: 'pipe'\n })\n\n this.spinner.succeed(chalk.green('✓ Git repository initialized'))\n\n } catch (error) {\n this.spinner.fail(chalk.red('✗ Failed to initialize Git repository'))\n logger.warn('Git initialization failed', { error })\n }\n }\n\n /**\n * Run post-setup tasks like Prisma generation\n */\n private async runPostSetupTasks(): Promise<void> {\n if (this.config.database.provider !== 'none') {\n this.spinner.start('Generating Prisma client...')\n\n try {\n const { command, args } = this.getRunCommand('db:generate')\n\n await execa(command, args, {\n cwd: this.targetDir,\n stdio: 'pipe'\n })\n\n this.spinner.succeed(chalk.green('✓ Prisma client generated'))\n\n } catch (error) {\n this.spinner.fail(chalk.red('✗ Failed to generate Prisma client'))\n logger.warn('Prisma client generation failed', { error })\n }\n }\n }\n\n /**\n * Get run command based on package manager\n */\n private getRunCommand(script: string): { command: string; args: string[] } {\n switch (this.config.packageManager) {\n case 'yarn':\n return { command: 'yarn', args: [script] }\n case 'pnpm':\n return { command: 'pnpm', args: ['run', script] }\n case 'bun':\n return { command: 'bun', args: ['run', script] }\n default:\n return { command: 'npm', args: ['run', script] }\n }\n }\n\n /**\n * Show success message with next steps\n */\n private showSuccessMessage(): void {\n console.log()\n if (this.isExistingProject) {\n console.log(chalk.green('✓ Success! Igniter.js has been added to your project!'))\n } else {\n console.log(chalk.green('✓ Success! Your Igniter.js project is ready!'))\n }\n console.log()\n\n console.log(chalk.bold('Next steps:'))\n if (!this.isExistingProject) {\n console.log(` ${chalk.cyan('cd')} ${this.config.projectName}`)\n }\n\n if (!this.config.installDependencies) {\n console.log(` ${chalk.cyan(this.config.packageManager)} install`)\n }\n\n if (this.config.dockerCompose) {\n console.log(` ${chalk.cyan('docker-compose')} up -d`)\n }\n\n if (this.config.database.provider !== 'none') {\n console.log(` ${chalk.cyan(this.config.packageManager)} run db:push`)\n }\n\n console.log(` ${chalk.cyan(this.config.packageManager)} run dev`)\n console.log()\n\n console.log(chalk.bold('Helpful commands:'))\n console.log(` ${chalk.dim('Start development:')} ${chalk.cyan(`${this.config.packageManager} run dev`)}`)\n console.log(` ${chalk.dim('Build for production:')} ${chalk.cyan(`${this.config.packageManager} run build`)}`)\n\n if (this.config.database.provider !== 'none') {\n console.log(` ${chalk.dim('Database operations:')} ${chalk.cyan(`${this.config.packageManager} run db:studio`)}`)\n }\n\n if (this.isExistingProject) {\n console.log()\n console.log(chalk.yellow('Remember to integrate the Igniter router into your existing server setup!'))\n }\n\n console.log()\n console.log(chalk.dim('Happy coding!'))\n }\n}\n\n/**\n * Generate project with given configuration\n */\nexport async function generateProject(\n config: ProjectSetupConfig,\n targetDir: string,\n isExistingProject: boolean,\n): Promise<void> {\n const generator = new ProjectGenerator(config, targetDir, isExistingProject)\n await generator.generate()\n}\n","import type {\n FeatureDefinition,\n PackageDependency,\n TemplateFile,\n DockerService,\n EnvVariable,\n DatabaseProvider\n} from './types'\n\n/**\n * Feature definitions for easy extensibility\n * Each feature defines its dependencies, templates, and Docker services\n */\nexport const IGNITER_FEATURES: Record<string, FeatureDefinition> = {\n store: {\n key: 'store',\n name: 'Redis Store',\n description: 'Caching, sessions, and pub/sub messaging',\n dependencies: [\n { name: '@igniter-js/adapter-redis', version: 'latest' },\n { name: 'ioredis', version: '^5.6.1' }\n ],\n devDependencies: [\n { name: '@types/ioredis', version: '^4.28.10' }\n ],\n dockerServices: [\n {\n name: 'redis',\n image: 'redis:7-alpine',\n ports: ['6379:6379'],\n environment: {\n REDIS_PASSWORD: '',\n },\n volumes: ['redis_data:/data']\n }\n ],\n envVars: [\n { key: 'REDIS_URL', value: 'redis://localhost:6379', description: 'Redis connection URL' },\n { key: 'REDIS_HOST', value: 'localhost', description: 'Redis host' },\n { key: 'REDIS_PORT', value: '6379', description: 'Redis port' }\n ]\n },\n\n jobs: {\n key: 'jobs',\n name: 'BullMQ Jobs',\n description: 'Background task processing and job queues',\n dependencies: [\n { name: '@igniter-js/adapter-redis', version: 'latest' },\n { name: '@igniter-js/adapter-bullmq', version: 'latest' },\n { name: 'bullmq', version: '^4.0.0' },\n { name: 'ioredis', version: '^5.6.1' }\n ],\n devDependencies: [\n { name: '@types/ioredis', version: '^4.28.10' }\n ],\n dockerServices: [\n {\n name: 'redis',\n image: 'redis:7-alpine',\n ports: ['6379:6379'],\n environment: {\n REDIS_PASSWORD: '',\n },\n volumes: ['redis_data:/data']\n }\n ],\n envVars: [\n { key: 'REDIS_URL', value: 'redis://localhost:6379', description: 'Redis connection URL for jobs' },\n { key: 'IGNITER_JOBS_QUEUE_PREFIX', value: 'igniter', description: 'Job queue prefix' }\n ]\n },\n\n mcp: {\n key: 'mcp',\n name: 'MCP Server',\n description: 'Easy expose your API as a MCP server for AI assistants like Cursor, Claude, etc.',\n dependencies: [\n { name: '@igniter-js/adapter-mcp', version: 'latest' },\n { name: '@vercel/mcp-adapter', version: '^0.2.0' },\n { name: '@modelcontextprotocol/sdk', version: '^1.10.2' },\n { name: 'ioredis', version: '^5.6.1' }\n ],\n devDependencies: [\n { name: '@types/ioredis', version: '^4.28.10' }\n ],\n dockerServices: [\n {\n name: 'redis',\n image: 'redis:7-alpine',\n ports: ['6379:6379'],\n environment: {\n REDIS_PASSWORD: '',\n },\n volumes: ['redis_data:/data']\n }\n ],\n envVars: [\n { key: 'IGNITER_MCP_SERVER_BASE_PATH', value: '/api/mcp', description: 'MCP server base path' },\n { key: 'IGNITER_MCP_SERVER_TIMEOUT', value: '3600000', description: 'MCP session timeout in ms' },\n { key: 'REDIS_URL', value: 'redis://localhost:6379', description: 'Redis connection URL' },\n { key: 'REDIS_HOST', value: 'localhost', description: 'Redis host' },\n { key: 'REDIS_PORT', value: '6379', description: 'Redis port' }\n ]\n },\n\n logging: {\n key: 'logging',\n name: 'Enhanced Logging',\n description: 'Advanced console logging with structured output',\n dependencies: [\n { name: '@igniter-js/core', version: 'latest' }\n ],\n envVars: [\n { key: 'IGNITER_LOG_LEVEL', value: 'info', description: 'Logging level (debug, info, warn, error)' },\n ]\n },\n\n telemetry: {\n key: 'telemetry',\n name: 'Telemetry',\n description: 'Telemetry for tracking requests and errors',\n dependencies: [\n { name: '@igniter-js/core', version: 'latest' }\n ],\n envVars: [\n { key: 'IGNITER_TELEMETRY_ENABLE_TRACING', value: 'true', description: 'Enable telemetry tracing' },\n { key: 'IGNITER_TELEMETRY_ENABLE_METRICS', value: 'true', description: 'Enable telemetry metrics' },\n { key: 'IGNITER_TELEMETRY_ENABLE_EVENTS', value: 'true', description: 'Enable telemetry metrics' },\n { key: 'IGNITER_TELEMETRY_ENABLE_CLI_INTEGRATION', value: 'true', description: 'Enable telemetry metrics' },\n ]\n }\n}\n\n/**\n * Database configurations with their dependencies and Docker services\n */\nexport const DATABASE_CONFIGS: Record<DatabaseProvider, {\n dependencies: PackageDependency[]\n devDependencies?: PackageDependency[]\n dockerService?: DockerService\n envVars: EnvVariable[]\n schema?: TemplateFile\n}> = {\n none: {\n dependencies: [],\n envVars: []\n },\n\n postgresql: {\n dependencies: [\n { name: 'prisma', version: '6.0.0' },\n { name: '@prisma/client', version: '6.0.0' },\n ],\n dockerService: {\n name: 'postgres',\n image: 'postgres:16-alpine',\n ports: ['5432:5432'],\n environment: {\n POSTGRES_DB: '${DB_NAME}',\n POSTGRES_USER: '${DB_USER}',\n POSTGRES_PASSWORD: '${DB_PASSWORD}'\n },\n volumes: ['postgres_data:/var/lib/postgresql/data']\n },\n envVars: [\n { key: 'DATABASE_URL', value: 'postgresql://docker:docker@localhost:5432/docker', description: 'PostgreSQL connection string' },\n { key: 'DB_HOST', value: 'localhost', description: 'Database host' },\n { key: 'DB_PORT', value: '5432', description: 'Database port' },\n { key: 'DB_NAME', value: 'docker', description: 'Database name' },\n { key: 'DB_USER', value: 'docker', description: 'Database user' },\n { key: 'DB_PASSWORD', value: 'docker', description: 'Database password' }\n ]\n },\n\n mysql: {\n dependencies: [\n { name: 'prisma', version: '^5.0.0' },\n { name: '@prisma/client', version: '^5.0.0' },\n { name: 'mysql2', version: '^3.6.0' }\n ],\n dockerService: {\n name: 'mysql',\n image: 'mysql:8.0',\n ports: ['3306:3306'],\n environment: {\n MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}',\n MYSQL_DATABASE: '${DB_NAME}',\n MYSQL_USER: '${DB_USER}',\n MYSQL_PASSWORD: '${DB_PASSWORD}'\n },\n volumes: ['mysql_data:/var/lib/mysql']\n },\n envVars: [\n { key: 'DATABASE_URL', value: 'mysql://docker:docker@localhost:3306/docker', description: 'MySQL connection string' },\n { key: 'DB_HOST', value: 'localhost', description: 'Database host' },\n { key: 'DB_PORT', value: '3306', description: 'Database port' },\n { key: 'DB_NAME', value: 'docker', description: 'Database name' },\n { key: 'DB_USER', value: 'docker', description: 'Database user' },\n { key: 'DB_PASSWORD', value: 'docker', description: 'Database password' }\n ]\n },\n\n sqlite: {\n dependencies: [\n { name: 'prisma', version: '6.0.0' },\n { name: '@prisma/client', version: '6.0.0' }\n ],\n envVars: [\n { key: 'DATABASE_URL', value: 'file:./dev.db', description: 'SQLite database file path' }\n ]\n },\n}\n\n/**\n * Get all dependencies for enabled features\n */\nexport function getFeatureDependencies(enabledFeatures: string[]): {\n dependencies: PackageDependency[]\n devDependencies: PackageDependency[]\n} {\n const dependencies: PackageDependency[] = []\n const devDependencies: PackageDependency[] = []\n\n for (const featureKey of enabledFeatures) {\n const feature = IGNITER_FEATURES[featureKey]\n if (feature) {\n dependencies.push(...feature.dependencies)\n if (feature.devDependencies) {\n devDependencies.push(...feature.devDependencies)\n }\n }\n }\n\n // Remove duplicates\n const uniqueDeps = dependencies.filter((dep, index, self) =>\n index === self.findIndex(d => d.name === dep.name)\n )\n const uniqueDevDeps = devDependencies.filter((dep, index, self) =>\n index === self.findIndex(d => d.name === dep.name)\n )\n\n return {\n dependencies: uniqueDeps,\n devDependencies: uniqueDevDeps\n }\n}\n\n/**\n * Get Docker services for enabled features and database\n */\nexport function getDockerServices(\n enabledFeatures: string[],\n databaseProvider: DatabaseProvider\n): DockerService[] {\n const services: DockerService[] = []\n\n // Add feature services\n for (const featureKey of enabledFeatures) {\n const feature = IGNITER_FEATURES[featureKey]\n if (feature?.dockerServices) {\n services.push(...feature.dockerServices)\n }\n }\n\n // Add database service\n const dbConfig = DATABASE_CONFIGS[databaseProvider]\n if (dbConfig?.dockerService) {\n services.push(dbConfig.dockerService)\n }\n\n // Remove duplicate services (e.g., Redis used by both store and jobs)\n const uniqueServices = services.filter((service, index, self) =>\n index === self.findIndex(s => s.name === service.name)\n )\n\n return uniqueServices\n}\n\n/**\n * Get environment variables for enabled features and database\n */\nexport function getEnvironmentVariables(\n enabledFeatures: string[],\n databaseProvider: DatabaseProvider,\n projectName: string\n): EnvVariable[] {\n const envVars: EnvVariable[] = []\n\n // Add feature environment variables\n for (const featureKey of enabledFeatures) {\n const feature = IGNITER_FEATURES[featureKey]\n if (feature?.envVars) {\n envVars.push(...feature.envVars)\n }\n }\n\n // Add database environment variables\n const dbConfig = DATABASE_CONFIGS[databaseProvider]\n if (dbConfig?.envVars) {\n // Replace database name placeholder\n const dbEnvVars = dbConfig.envVars.map(envVar => ({\n ...envVar,\n value: envVar.value\n }))\n\n envVars.push(...dbEnvVars)\n }\n\n // Remove duplicate environment variables\n const uniqueEnvVars = envVars.filter((envVar, index, self) =>\n index === self.findIndex(e => e.key === envVar.key)\n )\n\n return uniqueEnvVars\n}\n","import type {\n ProjectSetupConfig,\n TemplateFile,\n} from './types'\nimport { getEnvironmentVariables, getDockerServices, DATABASE_CONFIGS } from './features'\nimport type { SupportedFramework } from '../framework'\n\n/**\n * Generate main igniter.ts file with proper imports and configuration\n */\nexport function generateIgniterRouter(config: ProjectSetupConfig): TemplateFile {\n const { features } = config\n\n let imports = [`import { Igniter } from '@igniter-js/core'`]\n let serviceImports: string[] = []\n\n // Add context import\n imports.push('import { createIgniterAppContext } from \"./igniter.context\"')\n\n // Add feature service imports based on enabled features\n if (features.store) {\n serviceImports.push('import { store } from \"@/services/store\"')\n }\n\n if (features.jobs) {\n serviceImports.push('import { REGISTERED_JOBS } from \"@/services/jobs\"')\n }\n\n if (features.logging) {\n serviceImports.push('import { logger } from \"@/services/logger\"')\n }\n\n // Telemetry service import\n if (features.telemetry) {\n serviceImports.push('import { telemetry } from \"@/services/telemetry\"')\n }\n\n const allImports = [...imports, ...serviceImports].join('\\n')\n\n // Build configuration chain\n let configChain = ['export const igniter = Igniter', ' .context(createIgniterAppContext)']\n\n if (features.store) configChain.push(' .store(store)')\n if (features.jobs) configChain.push(' .jobs(REGISTERED_JOBS)')\n if (features.logging) configChain.push(' .logger(logger)')\n if (features.telemetry) configChain.push(' .telemetry(telemetry)')\n\n configChain.push(' .create()')\n\n const content = `${allImports}\n\n/**\n * @description Initialize the Igniter.js\n * @see https://github.com/felipebarcelospro/igniter-js\n */\n${configChain.join('\\n')}\n`\n\n return {\n path: 'src/igniter.ts',\n content\n }\n}\n\n/**\n * Generate igniter.context.ts file with proper type definitions\n */\nexport function generateIgniterContext(config: ProjectSetupConfig): TemplateFile {\n const { database } = config\n\n let serviceImports: string[] = []\n let contextProperties: string[] = []\n\n if (database.provider !== 'none') {\n serviceImports.push('import { database } from \"@/services/database\"')\n contextProperties.push(' // database,')\n }\n\n const allImports = serviceImports.join('\\n')\n\n const content = `${allImports}\n\n/**\n * @description Create the context of the Igniter.js application\n * @see https://github.com/felipebarcelospro/igniter-js\n */\nexport const createIgniterAppContext = () => {\n return {\n${contextProperties.join('\\n')}\n }\n}\n\n/**\n * @description The context of the Igniter.js application\n * @see https://github.com/felipebarcelospro/igniter-js\n */\nexport type IgniterAppContext = Awaited<ReturnType<typeof createIgniterAppContext>>\n`\n\n return {\n path: 'src/igniter.context.ts',\n content\n }\n}\n\n/**\n * Generate example controller following the new feature structure\n */\nexport function generateExampleController(config: ProjectSetupConfig): TemplateFile {\n const { features } = config\n\n let imports = `import { igniter } from '@/igniter'\nimport { z } from 'zod'`\n\n let exampleActions = ` // Health check action\n health: igniter.query({\n name: 'health',\n description: 'Health check',\n path: '/',\n handler: async ({ request, response, context }) => {\n ${features.logging ? 'context.logger.info(\\'Health check requested\\')' : ''}\n return response.success({\n status: 'ok',\n timestamp: new Date().toISOString(),\n features: {\n store: ${features.store},\n jobs: ${features.jobs},\n mcp: ${features.mcp},\n logging: ${features.logging}\n }\n })\n }\n })`\n\n // Add store example if enabled\n if (features.store) {\n exampleActions += `,\n\n // Cache demonstration action\n cacheDemo: igniter.query({\n name: 'cacheDemo',\n description: 'Demonstrate caching',\n path: '/cache/:key' as const,\n handler: async ({ request, response, context }) => {\n const { key } = request.params\n const cached = await context.store.get(key)\n\n if (cached) {\n return response.success({\n data: cached,\n source: 'cache'\n })\n }\n\n // Generate sample data\n const data = {\n message: \\`Hello from \\${key}\\`,\n timestamp: new Date().toISOString()\n }\n\n // Cache for 1 hour\n await context.store.set(key, data, { ttl: 3600 })\n\n return response.success({\n data,\n source: 'generated'\n })\n }\n })`\n }\n\n // Add jobs example if enabled\n if (features.jobs) {\n exampleActions += `,\n\n // Background job scheduling action\n scheduleJob: igniter.mutation({\n name: 'scheduleJob',\n description: 'Schedule a background job',\n path: '/schedule-job',\n method: 'POST',\n body: z.object({\n message: z.string(),\n delay: z.number().optional()\n }),\n handler: async ({ request, response, context }) => {\n const { message, delay = 0 } = request.body\n\n const jobId = await context.jobs.add('processMessage', {\n message,\n timestamp: new Date().toISOString()\n }, { delay })\n\n ${features.logging ? 'context.logger.info(\\'Job scheduled\\', { jobId, message })' : ''}\n\n return response.success({\n jobId,\n message: 'Job scheduled successfully',\n delay\n })\n }\n })`\n }\n\n const content = `${imports}\n\n/**\n * @description Example controller demonstrating Igniter.js features\n * @see https://github.com/felipebarcelospro/igniter-js\n */\nexport const exampleController = igniter.controller({\n name: 'example',\n path: '/example',\n actions: {\n${exampleActions}\n }\n})\n`\n\n return {\n path: 'src/features/example/controllers/example.controller.ts',\n content\n }\n}\n\n/**\n * Generate main router configuration\n */\nexport function generateMainRouter(config: ProjectSetupConfig): TemplateFile {\n const content = `import { igniter } from '@/igniter'\nimport { exampleController } from '@/features/example'\n\n/**\n * @description Main application router configuration\n * @see https://github.com/felipebarcelospro/igniter-js\n */\nexport const AppRouter = igniter.router({\n controllers: {\n example: exampleController\n }\n})\n\nexport type AppRouterType = typeof AppRouter\n`\n\n return {\n path: 'src/igniter.router.ts',\n content\n }\n}\n\n/**\n * Generate feature index file\n */\nexport function generateFeatureIndex(config: ProjectSetupConfig): TemplateFile {\n const content = `export { exampleController } from './controllers/example.controller'\nexport * from './example.interfaces'\n`\n\n return {\n path: 'src/features/example/index.ts',\n content\n }\n}\n\n/**\n * Generates service files based on enabled features and database provider.\n *\n * @param config - The project setup configuration.\n * @returns An array of TemplateFile objects representing service files.\n *\n * @see https://github.com/felipebarcelospro/igniter-js\n */\nexport function generateServiceFiles(config: ProjectSetupConfig): TemplateFile[] {\n const { features, database } = config\n const files: TemplateFile[] = []\n\n files.push({\n path: 'src/app/api/v1/[[...all]]/route.ts',\n content: `import { AppRouter } from '@/igniter.router'\nimport { nextRouteHandlerAdapter } from '@igniter-js/core/adapters'\n\nexport const { GET, POST, PUT, DELETE } = nextRouteHandlerAdapter(AppRouter)\n`\n })\n\n // Initialize Redis service if store or jobs feature is enabled\n if (features.store || features.jobs) {\n files.push({\n path: 'src/services/redis.ts',\n content: `import { Redis } from 'ioredis'\n\n/**\n * Redis client instance for caching, session storage, and pub/sub.\n *\n * @remarks\n * Used for caching, session management, and real-time messaging.\n *\n * @see https://github.com/luin/ioredis\n */\nexport const redis = new Redis(process.env.REDIS_URL!, {\n maxRetriesPerRequest: null,\n})\n`\n })\n }\n\n // Store service (requires Redis)\n if (features.store) {\n files.push({\n path: 'src/services/store.ts',\n content: `import { createRedisStoreAdapter } from '@igniter-js/adapter-redis'\nimport { redis } from './redis'\n\n/**\n * Store adapter for data persistence.\n *\n * @remarks\n * Provides a unified interface for data storage operations using Redis.\n *\n * @see https://github.com/felipebarcelospro/igniter-js/tree/main/packages/adapter-redis\n */\nexport const store = createRedisStoreAdapter(redis)\n`\n })\n }\n\n // Jobs service (requires Redis)\n if (features.jobs) {\n files.push({\n path: 'src/services/jobs.ts',\n content: `import { store } from './store'\nimport { createBullMQAdapter } from '@igniter-js/adapter-bullmq'\nimport { z } from 'zod'\n\n/**\n * Job queue adapter for background processing.\n *\n * @remarks\n * Handles asynchronous job processing with BullMQ.\n *\n * @see https://github.com/felipebarcelospro/igniter-js/tree/main/packages/adapter-bullmq\n */\nexport const jobs = createBullMQAdapter({\n store,\n autoStartWorker: {\n concurrency: 1,\n queues: ['*']\n }\n})\n\nexport const REGISTERED_JOBS = jobs.merge({\n system: jobs.router({\n jobs: {\n sampleJob: jobs.register({\n name: 'sampleJob',\n input: z.object({\n message: z.string()\n }),\n handler: async ({ input }) => {\n console.log(input.message)\n }\n })\n }\n })\n})\n`\n })\n }\n\n // Logger service\n if (features.logging) {\n files.push({\n path: 'src/services/logger.ts',\n content: `import { createConsoleLogger, IgniterLogLevel } from '@igniter-js/core'\n\n/**\n * Logger instance for application logging.\n *\n * @remarks\n * Provides structured logging with configurable log levels.\n *\n * @see https://github.com/felipebarcelospro/igniter-js/tree/main/packages/core\n */\nexport const logger = createConsoleLogger({\n level: IgniterLogLevel.INFO,\n showTimestamp: true,\n})\n`\n })\n }\n\n // Database service (Prisma)\n if (database.provider !== 'none') {\n files.push({\n path: 'src/services/database.ts',\n content: `import { PrismaClient } from '@prisma/client'\n\n/**\n * Prisma client instance for database operations.\n *\n * @remarks\n * Provides type-safe database access with Prisma ORM.\n *\n * @see https://www.prisma.io/docs/concepts/components/prisma-client\n */\nexport const database = new PrismaClient()\n`\n })\n }\n\n // Telemetry service\n if (features.telemetry) {\n files.push({\n path: 'src/services/telemetry.ts',\n content: `import { createConsoleTelemetryAdapter } from '@igniter-js/core/adapters'\n import { store } from './store'\n\n /**\n * Telemetry service for tracking requests and errors.\n *\n * @remarks\n * Provides telemetry tracking with configurable options.\n *\n * @see https://github.com/felipebarcelospro/igniter-js/tree/main/packages/core\n */\n export const telemetry = createConsoleTelemetryAdapter({\n serviceName: 'my-igniter-app',\n enableEvents: process.env.IGNITER_TELEMETRY_ENABLE_EVENTS === 'true',\n enableMetrics: process.env.IGNITER_TELEMETRY_ENABLE_METRICS === 'true',\n enableTracing: process.env.IGNITER_TELEMETRY_ENABLE_TRACING === 'true',\n }, {\n enableCliIntegration: process.env.IGNITER_TELEMETRY_ENABLE_CLI_INTEGRATION === 'true',\n store: store\n })\n`\n })\n }\n\n // MCP service\n\n // MCP service\n if (features.mcp) {\n files.push({\n path: 'src/app/api/mcp/[transport].ts',\n content: `import { createMcpAdapter } from '@igniter-js/adapter-mcp'\nimport { AppRouter } from '@/igniter.router'\n\n/**\n * MCP server instance for exposing API as a MCP server.\n *\n * @see https://github.com/felipebarcelospro/igniter-js/tree/main/packages/adapter-mcp\n */\nexport default createMcpAdapter(AppRouter, {\n serverInfo: {\n name: 'Igniter.js MCP Server',\n version: '1.0.0',\n },\n adapter: {\n redis: {\n url: process.env.REDIS_URL!,\n maxRetriesPerRequest: null,\n },\n basePath: process.env.IGNITER_MCP_SERVER_BASE_PATH || '/api/mcp',\n maxDuration: process.env.IGNITER_MCP_SERVER_TIMEOUT || 60,\n },\n})\n`\n })\n }\n\n return files\n}\n\n/**\n * Generate client file for frontend usage\n */\nexport function generateIgniterClient(config: ProjectSetupConfig): TemplateFile {\n const content = `import { createIgniterClient, useIgniterQueryClient } from '@igniter-js/core/client'\nimport type { AppRouterType } from './igniter.router'\n\n/**\n * Type-safe API client generated from your Igniter router\n *\n * Usage in Server Components:\n * const users = await api.users.list.query()\n *\n * Usage in Client Components:\n * const { data } = api.users.list.useQuery()\n */\nexport const api = createIgniterClient<AppRouterType>({\n baseURL: 'http://localhost:3000',\n basePath: '/api/v1/',\n router: () => {\n if (typeof window === 'undefined') {\n return require('./igniter.router').AppRouter\n }\n\n return require('./igniter.schema').AppRouterSchema\n },\n})\n\n/**\n * Type-safe API client generated from your Igniter router\n *\n * Usage in Server Components:\n * const users = await api.users.list.query()\n *\n * Usage in Client Components:\n * const { data } = api.users.list.useQuery()\n */\nexport type ApiClient = typeof api\n\n/**\n * Type-safe query client generated from your Igniter router\n *\n * Usage in Client Components:\n * const { invalidate } = useQueryClient()\n */\nexport const useQueryClient = useIgniterQueryClient<AppRouterType>;\n`\n\n return {\n path: 'src/igniter.client.ts',\n content\n }\n}\n\n/**\n * Generate example interfaces file\n */\nexport function generateExampleInterfaces(): TemplateFile {\n const content = `/**\n * Example feature interfaces and types\n * @description Define your feature's types here\n */\n\nexport interface ExampleUser {\n id: string\n name: string\n email: string\n createdAt: Date\n updatedAt: Date\n}\n\nexport interface ExampleCreateUserInput {\n name: string\n email: string\n}\n\nexport interface ExampleCacheItem {\n message: string\n timestamp: string\n}\n\nexport interface ExampleJobPayload {\n message: string\n timestamp: string\n}\n`\n\n return {\n path: 'src/features/example/example.interfaces.ts',\n content\n }\n}\n\n/**\n * Generate package.json\n */\nexport function generatePackageJson(config: ProjectSetupConfig, dependencies: string[], devDependencies: string[]): TemplateFile {\n const scripts: Record<string, string> = {\n \"dev\": \"next dev\",\n \"build\": \"next build\",\n \"start\": \"next start\",\n \"lint\": \"next lint\",\n \"type-check\": \"tsc --noEmit\"\n }\n\n // Add database scripts if using Prisma\n if (config.database.provider !== 'none') {\n scripts[\"db:generate\"] = \"prisma generate\"\n scripts[\"db:push\"] = \"prisma db push\"\n scripts[\"db:studio\"] = \"prisma studio\"\n scripts[\"db:migrate\"] = \"prisma migrate dev\"\n }\n\n // Framework-specific script adjustments\n switch (config.framework) {\n case 'vite':\n scripts.dev = \"vite\"\n scripts.build = \"vite build\"\n scripts.start = \"vite preview\"\n break\n case 'nuxt':\n scripts.dev = \"nuxt dev\"\n scripts.build = \"nuxt build\"\n scripts.start = \"nuxt start\"\n break\n case 'sveltekit':\n scripts.dev = \"vite dev\"\n scripts.build = \"svelte-kit build\"\n scripts.start = \"node build\"\n break\n case 'remix':\n scripts.dev = \"remix dev\"\n scripts.build = \"remix build\"\n scripts.start = \"remix-serve build\"\n break\n case 'astro':\n scripts.dev = \"astro dev\"\n scripts.build = \"astro build\"\n scripts.start = \"astro preview\"\n break\n case 'express':\n scripts.dev = \"tsx watch src/server.ts\"\n scripts.build = \"tsc\"\n scripts.start = \"node dist/server.js\"\n break\n }\n\n const deps = dependencies.reduce((acc, dep) => {\n const [name, version] = dep.split('@')\n acc[name] = version\n return acc\n }, {} as Record<string, string>)\n\n const devDeps = devDependencies.reduce((acc, dep) => {\n const [name, version] = dep.split('@')\n acc[name] = version\n return acc\n }, {} as Record<string, string>)\n\n const packageJson = {\n name: config.projectName,\n version: \"0.1.0\",\n private: true,\n scripts,\n dependencies: deps,\n devDependencies: devDeps\n }\n\n return {\n path: 'package.json',\n content: JSON.stringify(packageJson, null, 2)\n }\n}\n\n/**\n * Generate TypeScript configuration\n */\nexport function generateTsConfig(framework: SupportedFramework): TemplateFile {\n let compilerOptions: any = {\n target: \"ES2020\",\n lib: [\"ES2020\", \"DOM\"],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n forceConsistentCasingInFileNames: true,\n noEmit: true,\n esModuleInterop: true,\n module: \"esnext\",\n moduleResolution: \"node\",\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: \"preserve\",\n incremental: true,\n baseUrl: \".\",\n paths: {\n \"@/*\": [\"./src/*\"]\n }\n }\n\n // Framework-specific adjustments\n switch (framework) {\n case 'nextjs':\n compilerOptions.plugins = [{ name: \"next\" }]\n break\n case 'vite':\n compilerOptions.types = [\"vite/client\"]\n break\n case 'nuxt':\n compilerOptions.paths[\"~/*\"] = [\"./src/*\"]\n break\n }\n\n const tsConfig = {\n compilerOptions,\n include: [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\", \".next/types/**/*.ts\"],\n exclude: [\"node_modules\"]\n }\n\n return {\n path: 'tsconfig.json',\n content: JSON.stringify(tsConfig, null, 2)\n }\n}\n\n/**\n * Generate environment variables file\n */\nexport function generateEnvFile(config: ProjectSetupConfig): TemplateFile {\n const envVars = getEnvironmentVariables(\n Object.entries(config.features).filter(([_, enabled]) => enabled).map(([key, _]) => key),\n config.database.provider,\n config.projectName\n )\n\n let content = `# Environment variables for ${config.projectName}\n# Generated by @igniter-js/cli\n\n`\n\n envVars.forEach(envVar => {\n if (envVar.description) {\n content += `# ${envVar.description}\\n`\n }\n content += `${envVar.key}=${envVar.value}\\n\\n`\n })\n\n return {\n path: '.env.example',\n content\n }\n}\n\n/**\n * Generate Docker Compose configuration\n */\nexport function generateDockerCompose(config: ProjectSetupConfig): TemplateFile | null {\n if (!config.dockerCompose) return null\n\n const services = getDockerServices(\n Object.entries(config.features).filter(([_, enabled]) => enabled).map(([key, _]) => key),\n config.database.provider\n )\n\n if (services.length === 0) return null\n\n const dockerCompose = {\n version: '3.8',\n services: services.reduce((acc, service) => {\n acc[service.name] = {\n image: service.image,\n ports: service.ports,\n environment: service.environment,\n volumes: service.volumes\n }\n return acc\n }, {} as any),\n volumes: services.some(s => s.volumes) ?\n services.reduce((acc, service) => {\n service.volumes?.forEach(volume => {\n const volumeName = volume.split(':')[0]\n if (!volumeName.startsWith('/')) {\n acc[volumeName] = {}\n }\n })\n return acc\n }, {} as any) : undefined\n }\n\n return {\n path: 'docker-compose.yml',\n content: `# Docker Compose for ${config.projectName}\n# Generated by @igniter-js/cli\n\nversion: '3.8'\n\nservices:\n${Object.entries(dockerCompose.services).map(([name, service]: [string, any]) => `\n ${name}:\n image: ${service.image}\n${service.ports ? ` ports:\\n${service.ports.map((port: string) => ` - \"${port}\"`).join('\\n')}` : ''}\n${service.environment ? ` environment:\\n${Object.entries(service.environment).map(([key, value]) => ` ${key}: ${value}`).join('\\n')}` : ''}\n${service.volumes ? ` volumes:\\n${service.volumes.map((volume: string) => ` - ${volume}`).join('\\n')}` : ''}\n`).join('')}\n${dockerCompose.volumes ? `\\nvolumes:\\n${Object.keys(dockerCompose.volumes).map(volume => ` ${volume}:`).join('\\n')}` : ''}\n`\n }\n}\n\n/**\n * Generate .gitignore file\n */\nexport function generateGitIgnore(): TemplateFile {\n const content = `# Dependencies\nnode_modules/\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.npm\n.yarn/\n\n# Environment\n.env\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\n# Build outputs\ndist/\nbuild/\n.next/\n.nuxt/\n.svelte-kit/\n\n# Database\n*.db\n*.sqlite\nprisma/migrations/\n\n# IDE\n.vscode/\n.idea/\n*.swp\n*.swo\n*~\n\n# OS\n.DS_Store\nThumbs.db\n\n# Logs\nlogs\n*.log\n\n# Coverage\ncoverage/\n.nyc_output/\n\n# Cache\n.cache/\n.tmp/\n.temp/\n`\n\n return {\n path: '.gitignore',\n content\n }\n}\n\n/**\n * Generate README.md\n */\nexport function generateReadme(config: ProjectSetupConfig): TemplateFile {\n const enabledFeatures = Object.entries(config.features)\n .filter(([_, enabled]) => enabled)\n .map(([key, _]) => `- **${key}**: Enabled`)\n\n const content = `# ${config.projectName}\n\nA modern, type-safe API built with [Igniter.js](https://github.com/felipebarcelospro/igniter-js) and ${config.framework}.\n\n## Features\n\n${enabledFeatures.join('\\n')}\n${config.database.provider !== 'none' ? `- **Database**: ${config.database.provider}` : ''}\n${config.dockerCompose ? '- **Docker**: Compose setup included' : ''}\n\n## Development\n\n### Prerequisites\n\n- Node.js 18+\n- ${config.packageManager}\n${config.dockerCompose ? '- Docker and Docker Compose' : ''}\n\n### Getting Started\n\n1. **Install dependencies:**\n \\`\\`\\`bash\n ${config.packageManager} install\n \\`\\`\\`\n\n${config.dockerCompose ? `2. **Start services with Docker:**\n \\`\\`\\`bash\n docker-compose up -d\n \\`\\`\\`\n\n` : ''}${config.database.provider !== 'none' ? `3. **Setup database:**\n \\`\\`\\`bash\n ${config.packageManager} run db:push\n \\`\\`\\`\n\n` : ''}4. **Start development server:**\n \\`\\`\\`bash\n ${config.packageManager} run dev\n \\`\\`\\`\n\nVisit [http://localhost:3000](http://localhost:3000) to see your app!\n\n## Project Structure\n\n\\`\\`\\`\nsrc/\n├── igniter.ts # Core initialization\n├── igniter.client.ts # Client implementation\n├── igniter.context.ts # Context management\n├── igniter.router.ts # Router configuration\n├── igniter.schema.ts # Schemas configuration\n├── features/ # Application features\n│ └── example/\n│ ├── controllers/ # Feature controllers\n│ ├── procedures/ # Feature procedures/middleware\n│ ├── example.interfaces.ts # Type definitions\n│ └── index.ts # Feature exports\n└── providers/ # Providers layer\n\\`\\`\\`\n\n## API Endpoints\n\n- \\`GET /api/v1/example\\` - Health check\n${config.features.store ? '- `GET /api/v1/example/cache/:key` - Cache example' : ''}\n${config.features.jobs ? '- `POST /api/v1/example/schedule-job` - Schedule background job' : ''}\n\n## Learn More\n\n- [Igniter.js Documentation](https://github.com/felipebarcelospro/igniter-js)\n- [${config.framework} Documentation](https://docs.${config.framework === 'nextjs' ? 'nextjs.org' : config.framework + '.dev'})\n${config.database.provider !== 'none' ? '- [Prisma Documentation](https://prisma.io/docs)' : ''}\n\n## Contributing\n\n1. Fork the repository\n2. Create your feature branch (\\`git checkout -b feature/amazing-feature\\`)\n3. Commit your changes (\\`git commit -m 'Add some amazing feature'\\`)\n4. Push to the branch (\\`git push origin feature/amazing-feature\\`)\n5. Open a Pull Request\n\n## License\n\nThis project is licensed under the MIT License.\n`\n\n return {\n path: 'README.md',\n content\n }\n}\n\n/**\n * Generate all template files for the project\n */\nexport function generateAllTemplates(\n config: ProjectSetupConfig,\n isExistingProject: boolean\n): TemplateFile[] {\n const templates: TemplateFile[] = [\n // Core Igniter files - always generate\n generateIgniterRouter(config),\n generateIgniterContext(config),\n generateMainRouter(config),\n generateIgniterClient(config),\n\n // Feature files - always generate\n generateExampleController(config),\n generateFeatureIndex(config),\n generateExampleInterfaces(),\n\n // .env.example is safe to generate as it won't overwrite a user's .env file\n generateEnvFile(config),\n ]\n\n // Add service files for enabled features\n const serviceFiles = generateServiceFiles(config)\n templates.push(...serviceFiles)\n\n // Add Docker Compose if enabled. The generator logic handles confirmation for overwrites.\n const dockerCompose = generateDockerCompose(config)\n if (dockerCompose) {\n templates.push(dockerCompose)\n }\n\n // Project-level boilerplate (like package.json, tsconfig.json, etc.) is now handled\n // in the generator for new projects.\n\n return templates\n}\n","import * as fs from 'fs/promises'\nimport * as path from 'path'\nimport chalk from 'chalk'\nimport { createChildLogger } from './logger'\nimport { PrismaProvider } from './scaffold/providers/prisma'\nimport { SchemaProvider, ModelSchema } from './scaffold/providers/base'\n\nconst logger = createChildLogger({ component: 'scaffold' })\n\n// --- Helper Functions ---\n\n/**\n * Check if a Prisma schema file exists in the current project\n */\nasync function hasPrismaSchema(): Promise<boolean> {\n const possiblePaths = [\n path.join(process.cwd(), 'prisma', 'schema.prisma'),\n path.join(process.cwd(), 'schema.prisma')\n ]\n \n for (const schemaPath of possiblePaths) {\n try {\n await fs.access(schemaPath)\n return true\n } catch {\n // Continue checking other paths\n }\n }\n \n return false\n}\n\n/**\n * Get available Prisma models from the schema\n */\nasync function getPrismaModels(): Promise<string[]> {\n try {\n const provider = new PrismaProvider()\n return await provider.listModels()\n } catch (error) {\n logger.debug('Failed to get Prisma models', { error })\n return []\n }\n}\n\nfunction toPascalCase(str: string): string {\n return str.replace(/(^\\w|-\\w)/g, g => g.replace(/-/, '').toUpperCase())\n}\n\nfunction toCamelCase(str: string): string {\n const pascal = toPascalCase(str)\n return pascal.charAt(0).toLowerCase() + pascal.slice(1)\n}\n\nasync function writeFile(filePath: string, content: string): Promise<void> {\n const dir = path.dirname(filePath);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(filePath, content, 'utf-8');\n}\n\n\n// --- Schema Provider Factory ---\n\nfunction getSchemaProvider(providerName: string): SchemaProvider {\n if (providerName.toLowerCase() === 'prisma') {\n return new PrismaProvider();\n }\n // Future providers like Drizzle would be added here\n // else if (providerName.toLowerCase() === 'drizzle') {\n // return new DrizzleProvider();\n // }\n throw new Error(`Unsupported schema provider: ${providerName}`);\n}\n\n// --- CRUD Template Generators ---\n\nfunction generateCrudInterfacesTemplate(model: ModelSchema, featureName?: string): string {\n const modelNamePascal = toPascalCase(model.name);\n\n const zodFields = model.fields\n .filter(field => !field.isRelation) // Exclude relation fields\n .map(field => {\n let zodType: string;\n switch (field.type) {\n case 'string':\n case 'bigint':\n zodType = 'z.string()';\n break;\n case 'number':\n zodType = 'z.number()';\n break;\n case 'boolean':\n zodType = 'z.boolean()';\n break;\n case 'Date':\n zodType = 'z.date()';\n break;\n default:\n zodType = `z.any() // Type '${field.type}' not directly supported`;\n }\n if (!field.isRequired) {\n // For Prisma, optional fields are nullable\n zodType += '.nullable()';\n }\n return ` ${field.name}: ${zodType},`;\n }).join('\\n');\n\n const createInputOmissions = model.fields\n .filter(f => f.isId || f.isAutoGenerated)\n .map(f => ` ${f.name}: true,`)\n .join('\\n');\n\n return `import { z } from 'zod';\n\n// Generated from your '${model.name}' Prisma model\nexport const ${modelNamePascal}Schema = z.object({\n${zodFields}\n});\n\n// Schema for creating a new ${model.name}.\n// Fields managed by the database (id, createdAt, etc.) are omitted.\nexport const Create${modelNamePascal}InputSchema = ${modelNamePascal}Schema.omit({\n${createInputOmissions}\n});\n\n// Schema for updating a ${model.name}. All fields are optional.\nexport const Update${modelNamePascal}InputSchema = Create${modelNamePascal}InputSchema.partial();\n\n// Exporting types for convenience\nexport type ${modelNamePascal} = z.infer<typeof ${modelNamePascal}Schema>;\nexport type Create${modelNamePascal}Input = z.infer<typeof Create${modelNamePascal}InputSchema>;\nexport type Update${modelNamePascal}Input = z.infer<typeof Update${modelNamePascal}InputSchema>;\n`;\n}\n\n\nfunction generateCrudProcedureTemplate(model: ModelSchema, featureName?: string): string {\n const modelNameCamel = toCamelCase(model.name);\n const modelNamePascal = toPascalCase(model.name);\n const idField = model.fields.find(f => f.isId);\n if (!idField) throw new Error(`Model ${model.name} has no ID field.`);\n\n return `import { igniter } from '@/igniter';\nimport type { Create${modelNamePascal}Input, Update${modelNamePascal}Input } from '../${featureName}.interfaces';\n\nexport const ${modelNameCamel}Procedure = igniter.procedure({\n name: '${modelNameCamel}',\n handler: async (_, { context }) => {\n // This procedure acts as a repository, centralizing database access logic.\n return {\n ${modelNameCamel}Repository: {\n findAll: () => context.database.${modelNameCamel}.findMany(),\n findById: (id: ${idField.type}) => context.database.${modelNameCamel}.findUnique({ where: { id } }),\n create: (data: Create${modelNamePascal}Input) => context.database.${modelNameCamel}.create({ data }),\n update: (id: ${idField.type}, data: Update${modelNamePascal}Input) => context.database.${modelNameCamel}.update({ where: { id }, data }),\n delete: (id: ${idField.type}) => context.database.${modelNameCamel}.delete({ where: { id } }),\n }\n };\n }\n});\n`;\n}\n\nfunction generateCrudControllerTemplate(model: ModelSchema, featureName?: string): string {\n const modelNameCamel = toCamelCase(model.name);\n const modelNamePascal = toPascalCase(model.name);\n\n const idField = model.fields.find(f => f.isId);\n if (!idField) throw new Error(`Model ${model.name} has no ID field.`);\n\n let idZodType = 'z.string()';\n if(idField.type === 'number') idZodType = 'z.coerce.number()';\n\n return `import { igniter } from '@/igniter';\nimport { z } from 'zod';\nimport { ${modelNameCamel}Procedure } from '../procedures/${featureName}.procedure'\nimport { Create${modelNamePascal}InputSchema, Update${modelNamePascal}InputSchema } from '../${featureName}.interfaces'\n\nexport const ${modelNameCamel}Controller = igniter.controller({\n name: '${modelNamePascal}',\n description: 'Endpoints for ${modelNamePascal}s',\n path: '/${modelNameCamel}s', // e.g., /users\n actions: {\n list: igniter.query({\n name: 'list',\n description: 'List all ${modelNamePascal}s',\n path: '/',\n use: [${modelNameCamel}Procedure()],\n handler: async ({ context, response }) => {\n const records = await context.${modelNameCamel}Repository.findAll()\n return response.success(records)\n },\n }),\n\n getById: igniter.query({\n name: 'getById',\n description: 'Get a ${modelNamePascal} by ID',\n path: '/:id' as const,\n use: [${modelNameCamel}Procedure()],\n handler: async ({ request, context, response }) => {\n const record = await context.${modelNameCamel}Repository.findById(request.params.id)\n if (!record) {\n return response.notFound('${modelNamePascal} not found')\n }\n return response.success(record)\n },\n }),\n\n create: igniter.mutation({\n name: 'create',\n description: 'Create a new ${modelNamePascal}',\n path: '/',\n method: 'POST',\n body: Create${modelNamePascal}InputSchema,\n use: [${modelNameCamel}Procedure()],\n handler: async ({ request, context, response }) => {\n const newRecord = await context.${modelNameCamel}Repository.create(request.body)\n return response.created(newRecord)\n },\n }),\n\n update: igniter.mutation({\n name: 'update',\n description: 'Update a ${modelNamePascal} by ID',\n path: '/:id' as const,\n method: 'PUT',\n body: Update${modelNamePascal}InputSchema,\n use: [${modelNameCamel}Procedure()],\n handler: async ({ request, context, response }) => {\n const updatedRecord = await context.${modelNameCamel}Repository.update(request.params.id, request.body)\n return response.success(updatedRecord)\n },\n }),\n\n delete: igniter.mutation({\n name: 'delete',\n description: 'Delete a ${modelNamePascal} by ID',\n path: '/:id' as const,\n method: 'DELETE',\n use: [${modelNameCamel}Procedure()],\n handler: async ({ request, context, response }) => {\n await context.${modelNameCamel}Repository.delete(request.params.id)\n return response.noContent()\n },\n }),\n },\n})\n`\n}\n\nfunction generateCrudIndexTemplate(featureName: string): string {\n const procedureFileName = `${featureName}.procedure`\n const controllerFileName = `${featureName}.controller`\n const interfacesFileName = `${featureName}.interfaces`\n\n return `export * from './controllers/${controllerFileName}'\nexport * from './procedures/${procedureFileName}'\nexport * from './${interfacesFileName}'\n`\n}\n\n\n// --- Empty Feature Template Generators ---\n\nfunction generateEmptyControllerTemplate(featureName: string): string {\n const controllerName = `${featureName.toLowerCase()}Controller`\n return `import { igniter } from '@/igniter'\nimport { z } from 'zod'\n\nexport const ${controllerName} = igniter.controller({\n name: '${featureName}',\n path: '/${featureName}',\n actions: {\n hello: igniter.query({\n path: '/hello',\n handler: async ({ response }) => {\n return response.success({ message: 'Hello from ${featureName}!' })\n },\n }),\n },\n})\n`\n}\n\nfunction generateEmptyInterfacesTemplate(featureName: string): string {\n return `// Zod schemas and TypeScript types for the ${featureName} feature.\n`\n}\n\nfunction generateEmptyIndexTemplate(featureName: string): string {\n return `export * from './controllers/${featureName}.controller'\n`\n}\n\n// --- Main Scaffolding Logic ---\n\nasync function scaffoldEmptyFeature(featureName: string, featureDir: string) {\n logger.info(`Creating empty feature '${featureName}'...`)\n\n try {\n await fs.mkdir(path.join(featureDir, 'controllers'), { recursive: true })\n await fs.mkdir(path.join(featureDir, 'procedures'), { recursive: true })\n\n await writeFile(\n path.join(featureDir, 'controllers', `${featureName}.controller.ts`),\n generateEmptyControllerTemplate(featureName)\n )\n await writeFile(\n path.join(featureDir, `${featureName}.interfaces.ts`),\n generateEmptyInterfacesTemplate(featureName)\n )\n await writeFile(\n path.join(featureDir, 'index.ts'),\n generateEmptyIndexTemplate(featureName)\n )\n logger.success(`Scaffolded empty feature '${featureName}'`)\n } catch(error) {\n logger.error(`Failed to create empty feature '${featureName}'`)\n throw error\n }\n}\n\n\nasync function scaffoldFeatureFromSchema(featureName: string, schemaString: string, featureDir: string) {\n logger.info(`Scaffolding feature '${featureName}' from schema...`)\n\n try {\n const [providerName, modelName] = schemaString.split(':')\n if (!providerName || !modelName) {\n throw new Error('Invalid schema format. Expected `provider:ModelName` (e.g., `prisma:User`).')\n }\n\n const provider = getSchemaProvider(providerName)\n const model = await provider.getModel(modelName)\n\n if (!model) {\n throw new Error(`Model '${modelName}' not found using provider '${providerName}'.`)\n }\n\n logger.info('Generating files from model schema...')\n\n await fs.mkdir(path.join(featureDir, 'controllers'), { recursive: true })\n await fs.mkdir(path.join(featureDir, 'procedures'), { recursive: true })\n\n await writeFile(\n path.join(featureDir, `${featureName}.interfaces.ts`),\n generateCrudInterfacesTemplate(model, featureName)\n )\n await writeFile(\n path.join(featureDir, 'procedures', `${featureName}.procedure.ts`),\n generateCrudProcedureTemplate(model, featureName)\n )\n await writeFile(\n path.join(featureDir, 'controllers', `${featureName}.controller.ts`),\n generateCrudControllerTemplate(model, featureName)\n )\n await writeFile(\n path.join(featureDir, 'index.ts'),\n generateCrudIndexTemplate(featureName)\n )\n\n logger.success(`Successfully scaffolded feature '${featureName}' from '${modelName}' model.`)\n console.log(chalk.cyan(`\\n✅ Next step: Register the '${toCamelCase(featureName)}Controller' in 'src/igniter.router.ts'`))\n\n } catch (error) {\n logger.error(`Failed to scaffold feature from schema`)\n throw error\n }\n}\n\n\nexport async function handleGenerateFeature(\n name: string | undefined,\n options: { schema?: string } = {}\n): Promise<void> {\n let featureName = name\n \n // Interactive wizard when no name is provided\n if (!featureName) {\n const prompts = await import('prompts')\n \n // Check if Prisma schema is available\n const hasPrisma = await hasPrismaSchema()\n const prismaModels = hasPrisma ? await getPrismaModels() : []\n \n const questions: any[] = [\n {\n type: 'text',\n name: 'featureName',\n message: 'What is the name of your feature?',\n validate: (input: string) => {\n if (!input.trim()) {\n return 'Feature name is required'\n }\n if (!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(input)) {\n return 'Feature name must start with a letter and contain only letters, numbers, hyphens, and underscores'\n }\n return true\n }\n }\n ]\n \n // Add Prisma model selection if available\n if (hasPrisma && prismaModels.length > 0) {\n questions.push({\n type: 'select',\n name: 'useModel',\n message: 'Would you like to generate CRUD operations from a Prisma model?',\n choices: [\n { title: 'No, create an empty feature', value: 'none' },\n { title: 'Yes, select a Prisma model', value: 'select' }\n ],\n initial: 0\n })\n \n questions.push({\n type: (prev: string) => prev === 'select' ? 'select' : null,\n name: 'selectedModel',\n message: 'Which Prisma model would you like to use?',\n choices: prismaModels.map(model => ({ title: model, value: model }))\n })\n }\n \n const response = await prompts.default(questions)\n \n if (!response.featureName) {\n logger.error('Feature name is required')\n process.exit(1)\n }\n \n featureName = response.featureName\n \n // If user selected a Prisma model, set it as the schema option with proper format\n if (response.useModel === 'select' && response.selectedModel) {\n options.schema = `prisma:${response.selectedModel}`\n }\n }\n \n // At this point, featureName is guaranteed to be defined\n const normalizedName = featureName!.toLowerCase()\n const featureDir = path.join(process.cwd(), 'src', 'features', normalizedName)\n\n logger.info(`Scaffolding feature: ${chalk.cyan(normalizedName)}`)\n\n try {\n await fs.access(featureDir)\n logger.error(`Feature '${normalizedName}' already exists.`)\n console.error(chalk.red(`✗ Feature '${normalizedName}' already exists at ${path.relative(process.cwd(), featureDir)}`))\n return\n } catch (error) {\n // Directory does not exist, which is what we want.\n }\n\n if (options.schema) {\n await scaffoldFeatureFromSchema(normalizedName, options.schema, featureDir)\n } else {\n await scaffoldEmptyFeature(normalizedName, featureDir)\n }\n}\n\n// Stub for future commands\nexport async function handleGenerateController(name: string, feature: string): Promise<void> {\n logger.warn(`'generate controller' is not yet fully implemented. Use 'generate feature --schema' instead.`)\n}\nexport async function handleGenerateProcedure(name: string, feature: string): Promise<void> {\n logger.warn(`'generate procedure' is not yet fully implemented. Use 'generate feature --schema' instead.`)\n}\n","import { getSchema, Model, Property } from '@mrleebo/prisma-ast';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { createChildLogger } from '../../logger';\nimport { ModelSchema, SchemaProvider, SchemaProviderField } from './base';\n\nconst logger = createChildLogger({ component: 'prisma-provider' });\n\n/**\n * Maps Prisma data types to standard TypeScript types.\n * @param prismaType The type string from the Prisma schema (e.g., \"String\", \"Int?\", \"DateTime\").\n * @returns The corresponding TypeScript type as a string.\n */\nfunction mapPrismaTypeToTsType(prismaType: string): string {\n const cleanType = prismaType.replace('?', '');\n switch (cleanType) {\n case 'String':\n case 'Json':\n case 'Bytes':\n case 'Unsupported':\n return 'string';\n case 'BigInt':\n return 'bigint';\n case 'Int':\n case 'Float':\n case 'Decimal':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'DateTime':\n return 'Date';\n default:\n // This is likely a custom enum or a relation, which we treat as a string for simplicity in scaffolding.\n // The actual relation handling would be more complex.\n return 'string';\n }\n}\n\n/**\n * Checks if a property has a specific attribute decorator.\n * @param prop The schema property to check.\n * @param attributeName The name of the attribute (e.g., \"id\", \"default\").\n */\nfunction hasAttribute(prop: Property, attributeName: string): boolean {\n if (prop.type !== 'field' || !Array.isArray(prop.attributes)) {\n return false;\n }\n return prop.attributes.some(attr => attr.name === attributeName);\n}\n\n\n/**\n * Implements the SchemaProvider interface for Prisma.\n * This class is responsible for reading a `schema.prisma` file and translating\n * its models into a standardized, ORM-agnostic format for the CLI.\n */\nexport class PrismaProvider implements SchemaProvider {\n private schemaPath: string;\n\n constructor(customPath?: string) {\n this.schemaPath = customPath || path.join(process.cwd(), 'prisma', 'schema.prisma');\n logger.debug(`Prisma schema path set to: ${this.schemaPath}`);\n }\n\n /**\n * Reads and parses the Prisma schema file to extract the details of a specific model.\n *\n * @param modelName - The name of the model to retrieve (e.g., 'User').\n * @returns A promise that resolves to the standardized `ModelSchema` or null if not found.\n */\n public async getModel(modelName: string): Promise<ModelSchema | null> {\n try {\n const schemaContent = await fs.readFile(this.schemaPath, 'utf-8');\n const ast = getSchema(schemaContent);\n\n const model = ast.list.find(\n (node): node is Model => node.type === 'model' && node.name === modelName\n );\n\n if (!model) {\n logger.warn(`Model '${modelName}' not found in schema.`);\n return null;\n }\n\n const fields: SchemaProviderField[] = model.properties\n .filter((prop): prop is Property => prop.type === 'field')\n .map((prop) => {\n // Type guard to ensure we have a field property with the expected structure\n if (prop.type !== 'field' || !('fieldType' in prop) || !('name' in prop)) {\n throw new Error(`Invalid field property structure for ${prop}`);\n }\n\n const fieldType = prop.fieldType as any;\n const fieldTypeStr = typeof fieldType === 'string' ? fieldType : fieldType?.toString() || 'string';\n const isOptional = 'optional' in prop ? (prop as any).optional : false;\n const isRelation = !/^[A-Z]/.test(fieldTypeStr) && typeof fieldType !== 'string';\n\n return {\n name: prop.name,\n type: mapPrismaTypeToTsType(fieldTypeStr),\n isId: hasAttribute(prop, 'id'),\n isRequired: !(isOptional || hasAttribute(prop, 'default')),\n isUnique: hasAttribute(prop, 'unique'),\n isRelation: isRelation,\n hasDefault: hasAttribute(prop, 'default'),\n isAutoGenerated: this.isFieldAutoGenerated(prop),\n };\n });\n\n return {\n name: model.name,\n fields,\n };\n\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n logger.error(`Prisma schema file not found at: ${this.schemaPath}`);\n } else {\n logger.error('Failed to parse Prisma schema', { error });\n }\n throw new Error(`Could not process Prisma schema. Make sure '${this.schemaPath}' exists and is valid.`);\n }\n }\n\n /**\n * Lists all available model names in the Prisma schema.\n *\n * @returns A promise that resolves to an array of model names.\n */\n public async listModels(): Promise<string[]> {\n try {\n const schemaContent = await fs.readFile(this.schemaPath, 'utf-8');\n const ast = getSchema(schemaContent);\n\n const models = ast.list\n .filter((node): node is Model => node.type === 'model')\n .map(model => model.name);\n\n logger.debug(`Found ${models.length} models in schema: ${models.join(', ')}`);\n return models;\n\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n logger.error(`Prisma schema file not found at: ${this.schemaPath}`);\n return [];\n } else {\n logger.error('Failed to parse Prisma schema for model listing', { error });\n throw new Error(`Could not process Prisma schema. Make sure '${this.schemaPath}' exists and is valid.`);\n }\n }\n }\n\n /**\n * Determines if a field's value is automatically managed by the database.\n *\n * @param prop - The schema property to inspect.\n * @returns True if the field is auto-generated.\n */\n private isFieldAutoGenerated(prop: Property): boolean {\n if (hasAttribute(prop, 'updatedAt')) {\n return true;\n }\n\n if (prop.type === 'field' && Array.isArray(prop.attributes)) {\n const defaultAttr = prop.attributes.find(attr => attr.name === 'default');\n if (defaultAttr && Array.isArray(defaultAttr.args)) {\n const defaultValue = defaultAttr.args[0]?.value;\n if (typeof defaultValue === 'string' && ['autoincrement()', 'now()', 'cuid()', 'uuid()'].includes(defaultValue)) {\n return true;\n }\n }\n }\n\n return false;\n }\n}\n","import { spawn } from \"child_process\";\nimport { logger } from \"../adapters/logger\";\n\n/**\n * Kills processes using a specific port across different operating systems\n * @param port - The port number to free up\n */\nexport async function killProcessOnPort(port: number): Promise<void> {\n const isWindows = process.platform === 'win32';\n const isMac = process.platform === 'darwin';\n const isLinux = process.platform === 'linux';\n\n try {\n let command: string;\n let args: string[];\n\n if (isWindows) {\n // Windows: usar netstat e taskkill\n command = 'cmd';\n args = ['/c', `netstat -ano | findstr :${port} | findstr LISTENING`];\n } else if (isMac || isLinux) {\n // macOS/Linux: usar lsof\n command = 'lsof';\n args = ['-ti', `:${port}`];\n } else {\n logger.warn(`Unsupported platform: ${process.platform}. Skipping port cleanup.`);\n return;\n }\n\n const child = spawn(command, args, { stdio: ['pipe', 'pipe', 'pipe'] });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n await new Promise<void>((resolve) => {\n child.on('close', async (code) => {\n if (code === 0 && stdout.trim()) {\n // Encontrou processos usando a porta\n const pids = stdout.trim().split('\\n').filter(line => line.trim());\n\n if (pids.length > 0) {\n logger.info(`Found ${pids.length} process(es) using port ${port}. Killing...`);\n\n for (const pid of pids) {\n try {\n if (isWindows) {\n // No Windows, o PID está na última coluna do netstat\n const parts = pid.trim().split(/\\s+/);\n const actualPid = parts[parts.length - 1];\n spawn('taskkill', ['/PID', actualPid, '/F'], { stdio: 'inherit' });\n } else {\n // macOS/Linux: matar processo diretamente\n process.kill(parseInt(pid.trim()), 'SIGTERM');\n\n // Aguardar um pouco e tentar SIGKILL se necessário\n setTimeout(() => {\n try {\n process.kill(parseInt(pid.trim()), 'SIGKILL');\n } catch (e) {\n // Processo já foi morto ou não existe mais\n }\n }, 2000);\n }\n } catch (error) {\n logger.warn(`Failed to kill process ${pid}:`, error);\n }\n }\n\n // Aguardar um pouco para os processos terminarem\n await new Promise(resolve => setTimeout(resolve, 1000));\n logger.info(`Port ${port} freed successfully.`);\n }\n } else if (code !== 0 && stderr) {\n logger.debug(`Port check command failed (this is normal if no processes are using the port): ${stderr}`);\n }\n resolve();\n });\n });\n\n } catch (error) {\n logger.warn(`Failed to check/kill processes on port ${port}:`, error);\n }\n}\n"],"mappings":"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AAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MAAQ;AAAA,MACxD;AAAA,MAAQ;AAAA,MAAQ;AAAA,M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","names":["flags","args","keys","require_built","util","toUTF8Array","generate","require_lodash","require_lodash","util","useColors","require_utils","timeout","Command","resolve","resolve","pipeline","resolve","exec","resolve","resolve","callback","j","err","resolve","promises","resolve","err","_a","Buffer","resolve","err","require_built","logger","process","status","resolve","logger","util","objectUtil","path","errorUtil","errorMap","path","ctx","result","issues","elements","processed","ZodFirstPartyTypeKind","emojiRegex","types","x","base","name","schema","path","logger","fs","path","logger","toPascalCase","path","fs","path","chalk","resolve","fs","path","fs","path","spawn","logger","chalk","chalk","path","chalk","path","fs","path","chalk","logger","path","chalk","fs","logger","chalk","fs","path","chalk","fs","path","logger","logger","writeFile","chalk","prompts","spawn","resolve","validation","runInteractiveProcesses","runConcurrentProcesses","IgniterWatcher","loadRouter","introspectRouter","OpenAPIGenerator"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/init/index.ts","../src/commands/init/action.ts","../src/commands/init/prompts.ts","../src/core/package-manager.ts","../src/core/registry/starters/starter-registry.ts","../src/registry/starters/nextjs-starter.ts","../src/core/registry/starters/base-starter.ts","../src/core/handlebars-helpers.ts","../src/core/terminal.ts","../src/registry/starters/express-starter.ts","../src/registry/starters/deno-starter.ts","../src/registry/starters/bun-api-starter.ts","../src/registry/starters/bun-react-starter.ts","../src/registry/starters/tanstack-start-starter.ts","../src/registry/starters/index.ts","../src/core/registry/add-ons/add-on-registry.ts","../src/registry/add-ons/store.ts","../src/core/registry/add-ons/base-addon.ts","../src/registry/add-ons/jobs.ts","../src/registry/add-ons/mcp.ts","../src/registry/add-ons/logging.ts","../src/registry/add-ons/telemetry.ts","../src/registry/add-ons/bots.ts","../src/registry/add-ons/database.ts","../src/registry/add-ons/auth.ts","../src/registry/add-ons/shadcn.ts","../src/registry/add-ons/index.ts","../src/core/file-system.ts","../src/core/framework.ts","../src/core/logger.ts","../src/commands/init/generator.ts","../src/commands/generate/index.ts","../src/commands/generate/feature/index.ts","../src/commands/generate/feature/action.ts","../src/core/template-engine.ts","../src/commands/generate/feature/feature.ts","../src/commands/generate/feature/prompts.ts","../src/core/registry/schema-provider/schema-provider-registry.ts","../src/registry/schema-provider/prisma.ts","../src/core/registry/schema-provider/base-schema-provider.ts","../src/utils/casing.ts","../src/registry/schema-provider/index.ts","../src/commands/generate/docs/index.ts","../src/core/openapi.ts","../src/core/router-instrospector.ts","../src/commands/generate/docs/action.ts","../src/commands/generate/schema/index.ts","../src/commands/generate/schema/action.ts","../src/commands/generate/controller/index.ts","../src/commands/generate/controller/action.ts","../src/utils/try-catch.ts","../src/commands/generate/procedure/index.ts","../src/commands/generate/procedure/action.ts","../src/commands/dev/index.ts","../src/commands/dev/action.ts","../src/commands/dev/components/DevUI.tsx"],"sourcesContent":["import { Command } from 'commander';\nimport { initCommand } from './commands/init';\nimport { generateCommand } from './commands/generate';\nimport { devCommand } from './commands/dev';\n\nconst program = new Command();\n\nprogram\n .name(\"igniter\")\n .description(\"The next-generation command-line interface for Igniter.js\")\n .version(\"0.0.1\");\n\nprogram.addCommand(initCommand);\nprogram.addCommand(generateCommand);\nprogram.addCommand(devCommand);\n\nprogram.parse(process.argv);\n","import { Command } from \"commander\";\nimport { handleInitAction } from \"./action\";\n\nexport const initCommand = new Command()\n .command(\"init\")\n .description(\"Create a new Igniter.js project with interactive setup\")\n .argument(\"[project-name]\", \"Name of the project directory\")\n .option(\"--mode <mode>\", \"Mode to use (install, new-project)\", \"new-project\")\n .option(\n \"--pm, --package-manager <manager>\",\n \"Package manager to use (npm, yarn, pnpm, bun)\",\n )\n .option(\n \"--template <template>\",\n \"Use a specific template (e.g., starter-nextjs, starter-express-rest-api)\",\n )\n .option(\n \"--add-ons <add-ons>\",\n \"Comma-separated list of add-ons (store,jobs,mcp,logging,telemetry)\",\n )\n .option(\n \"--database <database>\",\n \"Database provider (none, postgresql, mysql, sqlite)\",\n )\n .option(\"--no-git\", \"Skip git repository initialization\")\n .option(\"--no-install\", \"Skip automatic dependency installation\")\n .option(\"--no-docker\", \"Skip Docker Compose setup\")\n .action(handleInitAction);\n","import * as p from \"@clack/prompts\";\nimport * as path from \"path\";\nimport { runInitPrompts } from \"./prompts\";\nimport { ProjectGenerator } from \"./generator\";\n\nexport interface InitPromptsOptions {\n projectName?: string;\n useCurrentDir?: boolean;\n mode?: \"install\" | \"new-project\";\n packageManager?: string;\n starter?: string;\n addOns?: string[];\n git?: boolean;\n install?: boolean;\n}\n\nexport async function handleInitAction(\n projectName: string,\n options: InitPromptsOptions,\n) {\n try {\n p.intro(\"Welcome to Igniter.js!\");\n\n options.projectName = projectName;\n\n const config = await runInitPrompts({\n projectName: options.projectName,\n mode: options.mode,\n useCurrentDir: options.useCurrentDir,\n packageManager: options.packageManager,\n starter: options.starter,\n addOns: options.addOns,\n git: options.git,\n install: options.install,\n });\n\n const targetDir = path.resolve(config.projectName);\n\n const generator = new ProjectGenerator(config, targetDir);\n await generator.generate();\n\n p.log.success(\"Project initialized successfully!\");\n } catch (error) {\n p.log.error(\"Project initialization failed\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport * as path from \"path\";\nimport { detectPackageManager } from \"@/core/package-manager\";\nimport { ProjectSetupConfig } from \"@/commands/init/types\";\nimport { starterRegistry } from \"@/registry/starters\";\nimport { addOnRegistry } from \"@/registry/add-ons\";\nimport type { InitPromptsOptions } from \"./action\";\nimport { isPathEmpty } from \"@/core/file-system\";\nimport { detectFramework } from \"@/core/framework\";\nimport type { AddOnOption } from \"@/registry/types\";\n\nasync function processAddOnOptions(\n options: AddOnOption[],\n): Promise<Record<string, string[] | string | undefined>> {\n const selectedOptions: Record<string, string[] | string | undefined> = {};\n\n for (const option of options) {\n let selectedValues: string[] | string | undefined = undefined;\n\n if (option.multiple) {\n const values = await p.multiselect({\n message: option.message,\n options: option.choices.map((choice: any) => ({\n value: choice.value,\n label: choice.label,\n hint: choice.hint,\n })),\n });\n selectedValues = values as unknown as string[];\n } else {\n const value = await p.select({\n message: option.message,\n options: option.choices.map((choice) => ({\n value: choice.value,\n label: choice.label,\n hint: choice.hint,\n })),\n });\n selectedValues = value as string | undefined;\n }\n\n selectedOptions[option.key] = selectedValues;\n\n // Process sub-options if they exist for the selected choice(s)\n const valuesToProcess = Array.isArray(selectedValues)\n ? selectedValues\n : selectedValues\n ? [selectedValues]\n : [];\n\n for (const value of valuesToProcess) {\n const choice = option.choices.find((c) => c.value === value);\n if (choice?.subOptions && choice.subOptions.length > 0) {\n const subOptionsResult = await processAddOnOptions(choice.subOptions);\n Object.assign(selectedOptions, subOptionsResult);\n }\n }\n }\n\n return selectedOptions;\n}\n\nexport async function runInitPrompts(\n options: InitPromptsOptions,\n): Promise<ProjectSetupConfig> {\n const detectedPackageManager = detectPackageManager();\n\n const config = await p.group(\n {\n useCurrentDir: async () => {\n if (options.projectName) return false;\n return p.confirm({\n message: `Do you want to use current folder as a project directory?`,\n initialValue: false,\n });\n },\n projectName: async ({ results }) => {\n if (options.projectName) return options.projectName;\n if (results.useCurrentDir) return path.basename(process.cwd());\n const projectName = await p.text({\n message: \"What will your project be called?\",\n validate: (value) => {\n if (!value.trim()) return \"Project name is required\";\n if (!/^[a-z0-9-_]+$/i.test(value.trim())) {\n return \"Project name can only contain letters, numbers, hyphens, and underscores\";\n }\n return;\n },\n });\n return projectName as string;\n },\n mode: async ({ results }) => {\n const projectName = results.projectName as string;\n\n const targetDir = path.resolve(projectName);\n const isEmpty = await isPathEmpty(targetDir);\n\n if (!isEmpty) {\n return await p.select({\n message: `Directory '${projectName}' is not empty. Do you want to overwrite with starter ou just install Igniter.js?`,\n options: [\n { value: \"new-project\", label: \"Overwrite and select a starter\" },\n { value: \"install\", label: \"Just install Igniter.js\" },\n ],\n });\n }\n\n return \"new-project\";\n },\n starter: async ({ results }) => {\n if (results.mode !== \"new-project\") {\n const targetDir = path.resolve(results.projectName as string);\n const framework = detectFramework(targetDir);\n if (framework === \"nextjs\") {\n return \"nextjs\";\n } else if (framework === \"tanstack-start\") {\n return \"tanstack-start\";\n } else {\n return \"generic\";\n }\n }\n\n return await p.select({\n message: \"Which starter would you like to use?\",\n options: starterRegistry.getAll().map((s) => ({\n value: s.id,\n label: s.name,\n hint: s.hint,\n })),\n });\n },\n addOns: async () => {\n const addOnResult = await p.multiselect({\n message: \"What add-ons would you like for your project?\",\n options: addOnRegistry.getAll().map((f) => ({\n value: f.value,\n label: f.name,\n hint: f.hint,\n })),\n });\n\n return addOnResult as unknown as string[];\n },\n addOnOptions: async ({ results }) => {\n const addOnOptions: Record<\n string,\n Record<string, string[] | string | undefined>\n > = {};\n for (const addOnValue of results.addOns || []) {\n const addOn = addOnRegistry.get(addOnValue);\n if (addOn?.options && addOn.options.length > 0) {\n addOnOptions[addOnValue] = await processAddOnOptions(addOn.options);\n }\n }\n return addOnOptions;\n },\n packageManager: () =>\n p.select({\n message: \"Which package manager?\",\n initialValue: detectedPackageManager,\n options: [\n { value: \"npm\", label: \"npm\" },\n { value: \"yarn\", label: \"yarn\" },\n { value: \"pnpm\", label: \"pnpm\" },\n { value: \"bun\", label: \"bun\" },\n ],\n }),\n initDocker: ({ results }) => {\n const hasAnyAddOn = results.addOns && results.addOns.length > 0;\n\n if (!hasAnyAddOn) return;\n return p.confirm({\n message: \"Setup Docker services for development?\",\n initialValue: true,\n });\n },\n initGit: () =>\n p.confirm({\n message: \"Initialize Git repository?\",\n initialValue: true,\n }),\n installDependencies: () =>\n p.confirm({\n message: \"Install dependencies automatically?\",\n initialValue: true,\n }),\n },\n {\n onCancel: () => {\n p.cancel(\"Operation cancelled.\");\n process.exit(0);\n },\n },\n );\n\n return {\n projectName: config.projectName,\n mode: config.mode,\n starter: config.starter,\n packageManager: config.packageManager,\n initGit: config.initGit,\n addOns: config.addOns,\n addOnOptions: config.addOnOptions,\n initDocker: config.initDocker,\n installDependencies: config.installDependencies,\n } as ProjectSetupConfig;\n}\n","import { PackageManager } from \"../commands/init/types\";\n\nexport function getInstallCommand(pm: PackageManager): { command: string; args: string[] } {\n switch (pm) {\n case 'yarn':\n return { command: 'yarn', args: ['install'] };\n case 'pnpm':\n return { command: 'pnpm', args: ['install'] };\n case 'bun':\n return { command: 'bun', args: ['install'] };\n default:\n return { command: 'npm', args: ['install'] };\n }\n}\n\nexport function detectPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n if (userAgent.startsWith('yarn')) return 'yarn';\n if (userAgent.startsWith('pnpm')) return 'pnpm';\n if (userAgent.startsWith('bun')) return 'bun';\n }\n return 'npm';\n}\n\nexport function getPackageManagerCommand(pm: PackageManager, command?: string): string {\n switch (pm) {\n case 'npm':\n return command ? `npx ${command}` : 'npx';\n case 'pnpm':\n return command ? `pnpx ${command}` : 'pnpx';\n case 'bun':\n return command ? `bunx ${command}` : 'bunx';\n case 'yarn':\n return command ? `yarn dlx ${command}` : 'yarn dlx';\n default:\n return command ? `npx ${command}` : 'npx';\n }\n}\n","import { BaseStarter } from './base-starter';\n\nexport class StarterRegistry {\n private starters = new Map<string, BaseStarter>();\n \n static create() {\n return new StarterRegistry();\n }\n\n register(starter: BaseStarter) {\n this.starters.set(starter.id, starter);\n return this;\n }\n\n build() {\n return {\n get: (value: string): BaseStarter | undefined => {\n return this.starters.get(value);\n },\n getMany: (values: string[]): BaseStarter[] => {\n return values.map(value => this.starters.get(value)).filter(Boolean) as BaseStarter[];\n },\n getAll: (): BaseStarter[] => {\n return Array.from(this.starters.values());\n }\n }\n }\n}\n","import path from 'path';\nimport { BaseStarter } from '../../core/registry/starters/base-starter';\nimport type { ProjectSetupConfig } from '@/commands/init/types';\nimport { getPackageManagerCommand } from '@/core/package-manager';\nimport { runCommand } from '@/core/terminal';\n\nexport class NextJsStarter extends BaseStarter {\n id = 'nextjs';\n name = 'Next.js';\n description = 'A full-stack starter with Next.js';\n hint = 'Fullstack';\n repository = 'starter-nextjs';\n templates = [\n {\n template: path.resolve(process.cwd(), 'templates/starters/nextjs/route-handler.hbs'),\n outputPath: 'src/app/api/v1/[[...all]]/route.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.router.hbs'),\n outputPath: 'src/igniter.router.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.client.hbs'),\n outputPath: 'src/igniter.client.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.context.hbs'),\n outputPath: 'src/igniter.context.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.hbs'),\n outputPath: 'src/igniter.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.controller.hbs'),\n outputPath: 'src/features/example/controllers/example.controller.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.procedure.hbs'),\n outputPath: 'src/features/example/procedures/example.procedure.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.interfaces.hbs'),\n outputPath: 'src/features/example/example.interfaces.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/nextjs/tsconfig.hbs'),\n outputPath: 'tsconfig.json',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/open-api.hbs'),\n outputPath: 'src/docs/openapi.json',\n },\n ];\n dependencies = [\n { name: '@igniter-js/core', version: 'latest', type: 'dependency' },\n ];\n envVars = [\n { key: 'IGNITER_APP_NAME', value: 'Igniter App', description: 'Application name' },\n { key: 'IGNITER_APP_SECRET', value: 'my-secret-key', description: 'Application secret' },\n { key: 'IGNITER_API_URL', value: 'http://localhost:3000/', description: 'API URL' },\n { key: 'IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n { key: 'NEXT_PUBLIC_IGNITER_API_URL', value: 'http://localhost:3000/', description: 'API URL' },\n { key: 'NEXT_PUBLIC_IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n ];\n public async install(targetDir: string, options: ProjectSetupConfig): Promise<void> {\n let command = ''\n const baseOptions = `--typescript --eslint --tailwind --app-router --turbopack --src-dir --no-linter --use-${options.packageManager} --skip-install --disable-git --yes`;\n\n if(options.packageManager === 'npm') {\n command = `npx create-next-app@latest ${options.projectName} ${baseOptions}`;\n } else if(options.packageManager === 'yarn') {\n command = `yarn create next-app@latest ${options.projectName} ${baseOptions}`;\n } else if(options.packageManager === 'pnpm') {\n command = `pnpm create next-app@latest ${options.projectName} ${baseOptions}`;\n } else if(options.packageManager === 'bun') {\n command = `bun create next-app@latest ${options.projectName} ${baseOptions}`;\n }\n\n await runCommand(`${command}`);\n\n options.mode = 'install';\n return super.install(targetDir, options);\n }\n}\n","import * as path from \"path\";\nimport * as fs from \"fs/promises\";\nimport { execa } from \"execa\";\nimport { existsSync } from 'fs';\nimport type { RegistryAssetDependency, RegistryAssetEnvVar, RegistryAssetTemplate } from \"@/registry/types\";\nimport { readFile, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport handlebars from 'handlebars';\nimport { registerHandlebarsHelpers } from '../../handlebars-helpers';\nimport type { ProjectSetupConfig } from \"@/commands/init/types\";\n\nexport abstract class BaseStarter {\n abstract id: string;\n abstract name: string;\n abstract description: string;\n abstract hint: string;\n abstract repository: string;\n public templates: RegistryAssetTemplate[] = [\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.router.hbs'),\n outputPath: 'src/igniter.router.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.client.hbs'),\n outputPath: 'src/igniter.client.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.context.hbs'),\n outputPath: 'src/igniter.context.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.hbs'),\n outputPath: 'src/igniter.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.controller.hbs'),\n outputPath: 'src/features/example/controllers/example.controller.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.procedure.hbs'),\n outputPath: 'src/features/example/procedures/example.procedure.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.interfaces.hbs'),\n outputPath: 'src/features/example/example.interfaces.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/open-api.hbs'),\n outputPath: 'src/docs/openapi.json',\n },\n ];\n public dependencies: RegistryAssetDependency[] = [\n { name: '@igniter-js/core', version: 'latest', type: 'dependency' },\n ];\n public envVars: RegistryAssetEnvVar[] = [\n { key: 'IGNITER_APP_NAME', value: 'My App', description: 'Application name' },\n { key: 'IGNITER_APP_SECRET', value: 'my-secret-key', description: 'Application secret' },\n { key: 'IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n ];\n\n /**\n * Install the starter\n */\n public async install(targetDir: string, options: ProjectSetupConfig): Promise<void> {\n if(options.mode === 'install') {\n await this.createProjectStructure(targetDir, options);\n } else {\n await this.download({ targetDir });\n }\n }\n\n /**\n * Create the project structure\n */\n private async createProjectStructure(targetDir: string, options: ProjectSetupConfig): Promise<void> {\n await this.addToPackageJson(targetDir);\n await this.addToEnvFile(targetDir);\n await this.renderTemplates(targetDir, options);\n }\n\n /**\n * Add dependencies to package.json file\n */\n private async addToPackageJson(projectDir: string): Promise<void> {\n const packageJsonPath = join(projectDir, 'package.json');\n\n let packageJson: any = {};\n if (existsSync(packageJsonPath)) {\n const content = await readFile(packageJsonPath, 'utf-8');\n packageJson = JSON.parse(content);\n }\n\n const dependencies = this.dependencies || [];\n const deps = dependencies.filter(d => d.type === 'dependency');\n const devDeps = dependencies.filter(d => d.type === 'devDependency');\n\n // Add regular dependencies (avoid duplicates)\n if (deps.length > 0) {\n packageJson.dependencies = packageJson.dependencies || {};\n deps.forEach(dep => {\n if (!packageJson.dependencies[dep.name]) {\n packageJson.dependencies[dep.name] = dep.version;\n }\n });\n }\n\n // Add dev dependencies (avoid duplicates)\n if (devDeps.length > 0) {\n packageJson.devDependencies = packageJson.devDependencies || {};\n devDeps.forEach(dep => {\n if (!packageJson.devDependencies[dep.name]) {\n packageJson.devDependencies[dep.name] = dep.version;\n }\n });\n }\n\n await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n\n /**\n * Add environment variables to .env file\n */\n private async addToEnvFile(projectDir: string): Promise<void> {\n const envPath = join(projectDir, '.env');\n\n let envContent = '';\n if (existsSync(envPath)) {\n envContent = await readFile(envPath, 'utf-8');\n }\n\n // Parse existing env vars to avoid duplicates\n const existingVars = new Set<string>();\n const lines = envContent.split('\\n');\n lines.forEach(line => {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#') && trimmed.includes('=')) {\n const key = trimmed.split('=')[0];\n existingVars.add(key);\n }\n });\n\n const envVars = this.envVars || [];\n\n if (envVars.length > 0) {\n // Only add new env vars\n const newVars = envVars.filter(envVar => !existingVars.has(envVar.key));\n\n if (newVars.length > 0) {\n if (envContent && !envContent.endsWith('\\n\\n')) {\n envContent += '\\n';\n }\n\n newVars.forEach(envVar => {\n if (envVar.description) {\n envContent += `# ${envVar.description}\\n`;\n }\n envContent += `${envVar.key}=${envVar.value}\\n\\n`;\n });\n }\n }\n\n if (envContent.trim()) {\n await writeFile(envPath, envContent);\n }\n }\n\n /**\n * Render and create template files\n */\n private async renderTemplates(projectDir: string, data: ProjectSetupConfig): Promise<void> {\n // Register Handlebars helpers\n registerHandlebarsHelpers();\n\n const templates = this.templates || [];\n\n for (const template of templates) {\n try {\n // If template.template is a function, call it with the data\n if (typeof template.template === 'function') {\n template.template = template.template(data);\n }\n\n // Read template file\n const templateContent = await readFile(template.template as string, 'utf-8');\n\n // Compile and render template\n const compiledTemplate = handlebars.compile(templateContent);\n const renderedContent = compiledTemplate(data);\n\n // If template.outputPath is a function, call it with the data\n if (typeof template.outputPath === 'function') {\n template.outputPath = template.outputPath(data);\n }\n\n // Write to output path\n const outputPath = join(projectDir, template.outputPath);\n const outputDir = join(outputPath, '..');\n\n // Ensure output directory exists\n await import('fs').then(fs => {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n });\n\n // Always overwrite the file if it already exists\n await writeFile(outputPath, renderedContent); // writeFile will overwrite by default\n } catch (error) {\n console.error(error);\n throw new Error(`Failed to render template ${template.template}: ${error}`);\n }\n }\n }\n\n /**\n * Download the starter template from the repository or path.\n *\n * Possible formats for this.repository:\n * - \"my-template\" (relative path inside igniter-js repository)\n * - \"felipebarcelospro/igniter-js/path/to/template\" (path inside public repo)\n * - \"org/repo\" (entire public repository)\n * - \"org/repo/path\" (a subpath inside a public repository)\n * - \"https://github.com/org/repo.git\" (whole repository, main branch)\n * - \"https://github.com/org/repo.git#branch:path\" (custom branch & path)\n */\n private async download({ targetDir }: { targetDir: string }): Promise<void> {\n const starter = this.repository\n const templateUrl = `https://github.com/felipebarcelospro/igniter-js.git`\n const branch = 'main'\n const tempDir = path.join(targetDir, '__igniter_tmp__')\n const starterDir = path.join(tempDir, 'apps', starter)\n const destDir = targetDir\n\n\n await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {})\n await execa('git', [\n 'clone',\n '--depth', '1',\n '--branch', branch,\n '--single-branch',\n templateUrl,\n tempDir\n ])\n \n const stat = await fs.stat(starterDir).catch(() => null)\n if (!stat || !stat.isDirectory()) {\n throw new Error(`Starter directory '${starter}' not found in the repository.`)\n }\n\n const copyRecursive = async (src: string, dest: string) => {\n const entries = await fs.readdir(src, { withFileTypes: true })\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name)\n const destPath = path.join(dest, entry.name)\n if (entry.isDirectory()) {\n await fs.mkdir(destPath, { recursive: true })\n await copyRecursive(srcPath, destPath)\n } else if (entry.isFile()) {\n await fs.copyFile(srcPath, destPath)\n }\n }\n }\n\n await copyRecursive(starterDir, destDir)\n\n await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {})\n }\n}\n","import handlebars from \"handlebars\";\n\n/**\n * Register custom Handlebars helpers\n */\nexport function registerHandlebarsHelpers(): void {\n // Helper to check if an array includes a value\n handlebars.registerHelper(\"includes\", function (array: any[], value: any) {\n if (!Array.isArray(array)) {\n return false;\n }\n return array.includes(value);\n });\n\n // Helper to check if an array is empty\n handlebars.registerHelper(\"isEmpty\", function (array: any[]) {\n return !Array.isArray(array) || array.length === 0;\n });\n\n // Helper to check if a value is defined/not null\n handlebars.registerHelper(\"isDefined\", function (value: any) {\n return value !== null && value !== undefined;\n });\n\n // Helper to join array elements with a separator\n handlebars.registerHelper(\n \"join\",\n function (array: any[], separator: string = \", \") {\n if (!Array.isArray(array)) {\n return \"\";\n }\n return array.join(separator);\n },\n );\n\n // Capitalize a slug string (e.g. my-project -> My Project)\n handlebars.registerHelper(\"capitalizeSlug\", function (slug: string) {\n return slug\n .replace(/-/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n });\n\n // Safely get a nested property from an object\n handlebars.registerHelper(\"get\", function (obj, path) {\n if (!path || typeof path !== \"string\") {\n return undefined;\n }\n const pathArray = path.split(\".\");\n let current = obj;\n for (let i = 0; i < pathArray.length; i++) {\n if (current === null || current === undefined) {\n return undefined;\n }\n current = current[pathArray[i]];\n }\n return current;\n });\n\n // Equality check\n handlebars.registerHelper(\"eq\", function (a, b) {\n return a === b;\n });\n\n // Convert string to camelCase (e.g., \"two-factor\" -> \"twoFactor\")\n handlebars.registerHelper(\"camelCase\", function (str: string) {\n if (!str) return str;\n if (str === \"email-otp\") return \"emailOTP\"; // Specific case for emailOTP\n if (str === \"open-api\") return \"openAPI\"; // Specific case for openAPI\n return str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n });\n\n // Filters an array to exclude a specific item, like \"next-cookies\"\n handlebars.registerHelper(\"filterPlugins\", function (plugins: string[] = []) {\n if (!Array.isArray(plugins)) return [];\n return plugins.filter((p) => p !== \"next-cookies\");\n });\n\n // Generates all auth plugin import statements correctly\n handlebars.registerHelper(\n \"generatePluginImports\",\n function (plugins: string[] = []) {\n if (!Array.isArray(plugins) || plugins.length === 0) {\n return \"\";\n }\n\n // Re-implement camelCase logic locally to be self-contained\n const camelCase = (str: string) => {\n if (!str) return str;\n if (str === \"email-otp\") return \"emailOTP\";\n if (str === \"open-api\") return \"openAPI\";\n return str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n };\n\n const regularPlugins = plugins\n .filter((p) => p !== \"next-cookies\")\n .map(camelCase);\n\n const hasNextCookies = plugins.includes(\"next-cookies\");\n\n const importStatements = [];\n\n if (regularPlugins.length > 0) {\n importStatements.push(\n `import { ${regularPlugins.join(\", \")} } from \"better-auth/plugins\";`,\n );\n }\n\n if (hasNextCookies) {\n importStatements.push(\n `import { nextCookies } from \"better-auth/next-js\";`,\n );\n }\n\n // Use SafeString to prevent Handlebars from escaping the output\n return new handlebars.SafeString(importStatements.join(\"\\n\"));\n },\n );\n}\n","import { spawn } from 'child_process';\nimport * as os from 'os';\n\n// Run a command on the terminal, supports all major OS and returns a result object\nexport function runCommand(command: string, options?: { cwd?: string }): Promise<{ success: boolean; errorMessage?: string }> {\n return new Promise((resolve) => {\n let cmd: string = 'cmd';\n\n if (os.platform() !== 'win32') cmd = command;\n\n const child = spawn(cmd, { shell: true, cwd: options?.cwd });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve({ success: true });\n } else {\n resolve({ success: false, errorMessage: `Command exited with code ${code}` });\n }\n });\n\n child.on('error', (err) => {\n resolve({ success: false, errorMessage: err.message });\n });\n });\n}\n\nexport function parseCommandOptions(data: Record<string, string | string[] | undefined>): string {\n return Object.entries(data).map(([key, value]) => {\n if (value === undefined) return '';\n if (Array.isArray(value)) {\n return value.map((v) => `--${key}=${v}`).join(' ');\n }\n return `--${key}=${value}`;\n }).join(' ');\n}","import { BaseStarter } from '@/core/registry/starters/base-starter';\nimport path from 'path';\n\nexport class ExpressStarter extends BaseStarter {\n id = 'express-rest-api';\n name = 'Express.js';\n description = 'A classic REST API starter with Express.js';\n hint = 'REST API';\n repository = 'starter-express-rest-api';\n envVars = [\n { key: 'IGNITER_APP_NAME', value: 'Igniter App', description: 'Application name' },\n { key: 'IGNITER_APP_SECRET', value: 'my-secret-key', description: 'Application secret' },\n { key: 'IGNITER_API_URL', value: 'http://localhost:3000/', description: 'API URL' },\n { key: 'IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n ];\n}\n","import { BaseStarter } from '@/core/registry/starters/base-starter';\nimport path from 'path';\n\nexport class DenoStarter extends BaseStarter {\n id = 'deno-rest-api';\n name = 'Deno';\n description = 'A modern REST API starter with Deno';\n hint = 'REST API';\n repository = 'starter-deno-rest-api';\n envVars = [\n { key: 'IGNITER_APP_NAME', value: 'Igniter App', description: 'Application name' },\n { key: 'IGNITER_APP_SECRET', value: 'my-secret-key', description: 'Application secret' },\n { key: 'IGNITER_API_URL', value: 'http://localhost:3000/', description: 'API URL' },\n { key: 'IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n ];\n}\n","import { BaseStarter } from '@/core/registry/starters/base-starter';\n\nexport class BunApiStarter extends BaseStarter {\n id = 'bun-rest-api';\n name = 'Bun';\n description = 'A high-performance REST API starter with Bun';\n hint = 'REST API';\n repository = 'starter-bun-rest-api';\n envVars = [\n { key: 'IGNITER_APP_NAME', value: 'Igniter App', description: 'Application name' },\n { key: 'IGNITER_APP_SECRET', value: 'my-secret-key', description: 'Application secret' },\n { key: 'IGNITER_API_URL', value: 'http://localhost:3000/', description: 'API URL' },\n { key: 'IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n ];\n}\n","import { BaseStarter } from '@/core/registry/starters/base-starter';\n\nexport class BunReactStarter extends BaseStarter {\n id = 'bun-react-app';\n name = 'Bun + React (Vite)';\n description = 'A full-stack starter with Bun, React, and Vite';\n hint = 'Fullstack';\n repository = 'starter-bun-react-app';\n envVars = [\n { key: 'IGNITER_APP_NAME', value: 'Igniter App', description: 'Application name' },\n { key: 'IGNITER_APP_SECRET', value: 'my-secret-key', description: 'Application secret' },\n { key: 'IGNITER_API_URL', value: 'http://localhost:3000/', description: 'API URL' },\n { key: 'IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n ];\n}\n","import { BaseStarter } from '@/core/registry/starters/base-starter';\nimport path from 'path';\n\nexport class TanStackStartStarter extends BaseStarter {\n id = 'tanstack-start';\n name = 'TanStack Start';\n description = 'A type-safe full-stack starter with TanStack Start';\n hint = 'Fullstack';\n repository = 'starter-tanstack-start';\n templates = [\n {\n template: path.resolve(process.cwd(), 'templates/starters/tanstack-start/route-handler.hbs'),\n outputPath: 'src/routes/api/v1/$.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.router.hbs'),\n outputPath: 'src/igniter.router.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.client.hbs'),\n outputPath: 'src/igniter.client.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.context.hbs'),\n outputPath: 'src/igniter.context.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/igniter.hbs'),\n outputPath: 'src/igniter.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.controller.hbs'),\n outputPath: 'src/features/example/controllers/example.controller.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.procedure.hbs'),\n outputPath: 'src/features/example/procedures/example.procedure.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/scaffold/example-feature/example.interfaces.hbs'),\n outputPath: 'src/features/example/example.interfaces.ts',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/tanstack-start/tsconfig.hbs'),\n outputPath: 'tsconfig.json',\n },\n {\n template: path.resolve(process.cwd(), 'templates/starters/open-api.hbs'),\n outputPath: 'src/docs/openapi.json',\n },\n ];\n dependencies = [\n { name: '@igniter-js/core', version: 'latest', type: 'dependency' },\n ];\n envVars = [\n { key: 'IGNITER_APP_NAME', value: 'Igniter App', description: 'Application name' },\n { key: 'IGNITER_APP_SECRET', value: 'my-secret-key', description: 'Application secret' },\n { key: 'IGNITER_API_URL', value: 'http://localhost:3000/', description: 'API URL' },\n { key: 'IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n { key: 'REACT_APP_IGNITER_API_URL', value: 'http://localhost:3000/', description: 'API URL' },\n { key: 'REACT_APP_IGNITER_API_BASE_PATH', value: '/api/v1', description: 'API base path' },\n ];\n}\n","import { StarterRegistry } from \"@/core/registry/starters/starter-registry\";\nimport { NextJsStarter } from \"./nextjs-starter\";\nimport { ExpressStarter } from \"./express-starter\";\nimport { DenoStarter } from \"./deno-starter\";\nimport { BunApiStarter } from \"./bun-api-starter\";\nimport { BunReactStarter } from \"./bun-react-starter\";\nimport { TanStackStartStarter } from \"./tanstack-start-starter\";\n\n/**\n * Starter registry\n */\nexport const starterRegistry = StarterRegistry.create()\n .register(new NextJsStarter())\n .register(new ExpressStarter())\n .register(new DenoStarter())\n .register(new BunApiStarter())\n .register(new BunReactStarter())\n .register(new TanStackStartStarter())\n .build();","import type { BaseAddOn } from \"./base-addon\";\n\nexport class AddOnRegistry {\n private addOns = new Map<string, BaseAddOn>();\n\n static create() {\n return new AddOnRegistry();\n }\n\n register(addOn: BaseAddOn) {\n this.addOns.set(addOn.value, addOn);\n return this;\n }\n\n build() {\n return {\n get: (value: string): BaseAddOn | undefined => {\n return this.addOns.get(value);\n },\n getMany: (values: string[]): BaseAddOn[] => {\n return values\n .map((value) => this.addOns.get(value))\n .filter(Boolean) as BaseAddOn[];\n },\n getAll: (): BaseAddOn[] => {\n return Array.from(this.addOns.values());\n },\n };\n }\n}\n\n// Legacy type alias for backward compatibility\nexport type FeatureRegistry = AddOnRegistry;\n","import path from \"path\";\nimport { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\n\nexport class RedisStoreAddOn extends BaseAddOn {\n name = \"Store\";\n description = \"Caching, sessions, and pub/sub messaging\";\n value = \"store\";\n hint = \"Recommended\";\n templates = [\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/store/redis.ts.hbs\",\n ),\n outputPath: \"src/services/redis.ts\",\n },\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/store/store.ts.hbs\",\n ),\n outputPath: \"src/services/store.ts\",\n },\n ];\n dependencies = [\n {\n name: \"@igniter-js/adapter-redis\",\n version: \"latest\",\n type: \"dependency\",\n },\n {\n name: \"ioredis\",\n version: \"5.6.1\",\n type: \"dependency\",\n },\n {\n name: \"@types/ioredis\",\n version: \"4.28.10\",\n type: \"devDependency\",\n },\n ];\n dockerServices = [\n {\n name: \"redis\",\n image: \"redis:7-alpine\",\n ports: [\"6379:6379\"],\n environment: {\n REDIS_PASSWORD: \"${REDIS_PASSWORD}\",\n },\n volumes: [\"redis_data:/data\"],\n },\n ];\n envVars = [\n {\n key: \"REDIS_URL\",\n value: \"redis://localhost:6379\",\n description: \"Redis connection URL\",\n },\n {\n key: \"REDIS_HOST\",\n value: \"localhost\",\n description: \"Redis host\",\n },\n {\n key: \"REDIS_PORT\",\n value: \"6379\",\n description: \"Redis port\",\n },\n {\n key: \"REDIS_PASSWORD\",\n value: \"\",\n description: \"Redis password (leave empty for no password)\",\n },\n ];\n}\n","import type {\n AddOnOption,\n RegistryAssetDependency,\n RegistryAssetDockerService,\n RegistryAssetEnvVar,\n RegistryAssetTemplate,\n} from \"@/registry/types\";\nimport { readFile, writeFile } from \"fs/promises\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport handlebars from \"handlebars\";\nimport { registerHandlebarsHelpers } from \"../../handlebars-helpers\";\nimport type { ProjectSetupConfig } from \"@/commands/init/types\";\n\ntype SetupFunction = (\n projectDir: string,\n config: ProjectSetupConfig,\n) => Promise<void>;\n\n// Export the new class\nexport abstract class BaseAddOn {\n abstract name: string;\n abstract description: string;\n abstract value: string;\n abstract hint?: string;\n templates?: RegistryAssetTemplate[];\n dependencies?: RegistryAssetDependency[];\n dockerServices?: RegistryAssetDockerService[];\n envVars?: RegistryAssetEnvVar[];\n options?: AddOnOption[];\n\n\n public async runSetup(\n projectDir: string,\n config: ProjectSetupConfig,\n ): Promise<void> {\n // Orchestrate only: each method self-collects its required assets\n await this.addToPackageJson(projectDir, config);\n await this.addToDockerCompose(projectDir, config);\n await this.addToEnvFile(projectDir, config);\n await this.renderTemplates(projectDir, config);\n }\n\n /**\n * Add dependencies to package.json file\n */\n private async addToPackageJson(\n projectDir: string,\n config: ProjectSetupConfig,\n ): Promise<void> {\n // Collect dependencies from base add-on and selected options\n const selectedOptions = config.addOnOptions?.[this.value] || {};\n const collectDependencies = (options: AddOnOption[] = []): RegistryAssetDependency[] => {\n const out: RegistryAssetDependency[] = [];\n for (const option of options) {\n const selectedValue = selectedOptions[option.key];\n if (!selectedValue) continue;\n if (option.setup) {\n // setup functions are handled elsewhere\n }\n const selectedChoices = Array.isArray(selectedValue)\n ? selectedValue\n : [selectedValue];\n for (const value of selectedChoices) {\n const choice = option.choices.find((c) => c.value === value);\n if (!choice) continue;\n if (choice.dependencies) out.push(...choice.dependencies);\n if (choice.subOptions) out.push(...collectDependencies(choice.subOptions));\n }\n }\n return out;\n };\n\n const dependencies: RegistryAssetDependency[] = [\n ...(this.dependencies || []),\n ...collectDependencies(this.options || []),\n ];\n const packageJsonPath = join(projectDir, \"package.json\");\n\n let packageJson: any = {};\n if (existsSync(packageJsonPath)) {\n const content = await readFile(packageJsonPath, \"utf-8\");\n packageJson = JSON.parse(content);\n }\n\n const deps = dependencies.filter((d) => d.type === \"dependency\");\n const devDeps = dependencies.filter((d) => d.type === \"devDependency\");\n\n // Add regular dependencies (avoid duplicates)\n if (deps.length > 0) {\n packageJson.dependencies = packageJson.dependencies || {};\n deps.forEach((dep) => {\n if (!packageJson.dependencies[dep.name]) {\n packageJson.dependencies[dep.name] = dep.version;\n }\n });\n }\n\n // Add dev dependencies (avoid duplicates)\n if (devDeps.length > 0) {\n packageJson.devDependencies = packageJson.devDependencies || {};\n devDeps.forEach((dep) => {\n if (!packageJson.devDependencies[dep.name]) {\n packageJson.devDependencies[dep.name] = dep.version;\n }\n });\n }\n\n await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n\n /**\n * Add services to docker-compose.yml file\n */\n private async addToDockerCompose(\n projectDir: string,\n config: ProjectSetupConfig,\n ): Promise<void> {\n // Collect docker services and env vars from base and selected options\n const selectedOptions = config.addOnOptions?.[this.value] || {};\n const collectDocker = (options: AddOnOption[] = []): {\n services: RegistryAssetDockerService[];\n envVars: RegistryAssetEnvVar[];\n } => {\n const services: RegistryAssetDockerService[] = [];\n const envVars: RegistryAssetEnvVar[] = [];\n for (const option of options) {\n const selectedValue = selectedOptions[option.key];\n if (!selectedValue) continue;\n const selectedChoices = Array.isArray(selectedValue)\n ? selectedValue\n : [selectedValue];\n for (const value of selectedChoices) {\n const choice = option.choices.find((c) => c.value === value);\n if (!choice) continue;\n if (choice.dockerServices) services.push(...choice.dockerServices);\n if (choice.envVars) envVars.push(...choice.envVars);\n if (choice.subOptions) {\n const sub = collectDocker(choice.subOptions);\n services.push(...sub.services);\n envVars.push(...sub.envVars);\n }\n }\n }\n return { services, envVars };\n };\n\n const fromOptions = collectDocker(this.options || []);\n const dockerServices: RegistryAssetDockerService[] = [\n ...(this.dockerServices || []),\n ...fromOptions.services,\n ];\n const envVars: RegistryAssetEnvVar[] = [\n ...(this.envVars || []),\n ...fromOptions.envVars,\n ];\n const dockerComposePath = join(projectDir, \"docker-compose.yml\");\n\n let dockerCompose: any = {};\n if (existsSync(dockerComposePath)) {\n const content = await readFile(dockerComposePath, \"utf-8\");\n try {\n dockerCompose = JSON.parse(content);\n } catch {\n // If it's not JSON, assume it's YAML and parse it\n // For now, we'll recreate the file if it exists\n dockerCompose = {};\n }\n }\n\n const services = dockerServices;\n const resolvedEnvVars = envVars?.reduce(\n (acc, envVar) => {\n acc[envVar.key] = envVar.value;\n return acc;\n },\n {} as Record<string, string>,\n );\n\n if (services.length > 0) {\n dockerCompose.services = dockerCompose.services || {};\n\n services.forEach((service) => {\n // Skip if service already exists\n if (dockerCompose.services[service.name]) {\n return;\n }\n\n // Replace environment variable placeholders with actual values\n const processedEnvironment = { ...service.environment };\n Object.keys(processedEnvironment).forEach((key) => {\n const value = processedEnvironment[key];\n // Replace ${VAR_NAME} with actual env var value\n if (\n typeof value === \"string\" &&\n value.startsWith(\"${\") &&\n value.endsWith(\"}\")\n ) {\n const envVarName = value.slice(2, -1); // Remove ${}\n if (resolvedEnvVars && resolvedEnvVars[envVarName]) {\n processedEnvironment[key] = resolvedEnvVars[envVarName];\n }\n }\n });\n\n dockerCompose.services[service.name] = {\n image: service.image,\n ports: service.ports,\n environment: processedEnvironment,\n volumes: service.volumes,\n };\n });\n\n // Add volumes if any service defines them\n const volumes = services\n .filter((s) => s.volumes)\n .flatMap((s) => s.volumes)\n .filter((volume) => !volume.startsWith(\"/\")) // Exclude host mounts\n .map((volume) => volume.split(\":\")[0])\n .filter((volume, index, arr) => arr.indexOf(volume) === index); // Unique\n\n if (volumes.length > 0) {\n dockerCompose.volumes = dockerCompose.volumes || {};\n volumes.forEach((volume) => {\n if (!dockerCompose.volumes[volume]) {\n dockerCompose.volumes[volume] = {};\n }\n });\n }\n }\n\n // Write the docker-compose file as YAML\n let yamlContent = \"version: '3.8'\\n\\n\";\n if (\n dockerCompose.services &&\n Object.keys(dockerCompose.services).length > 0\n ) {\n yamlContent += \"services:\\n\";\n Object.entries(dockerCompose.services).forEach(\n ([name, service]: [string, any]) => {\n yamlContent += ` ${name}:\\n`;\n yamlContent += ` image: ${service.image}\\n`;\n if (service.ports && service.ports.length > 0) {\n yamlContent += ` ports:\\n`;\n service.ports.forEach((port: string) => {\n yamlContent += ` - \"${port}\"\\n`;\n });\n }\n if (\n service.environment &&\n Object.keys(service.environment).length > 0\n ) {\n yamlContent += ` environment:\\n`;\n Object.entries(service.environment).forEach(([key, value]) => {\n yamlContent += ` ${key}: ${value}\\n`;\n });\n }\n if (service.volumes && service.volumes.length > 0) {\n yamlContent += ` volumes:\\n`;\n service.volumes.forEach((volume: string) => {\n yamlContent += ` - ${volume}\\n`;\n });\n }\n yamlContent += \"\\n\";\n },\n );\n }\n\n if (\n dockerCompose.volumes &&\n Object.keys(dockerCompose.volumes).length > 0\n ) {\n yamlContent += \"volumes:\\n\";\n Object.keys(dockerCompose.volumes).forEach((volume) => {\n yamlContent += ` ${volume}:\\n`;\n });\n }\n\n await writeFile(dockerComposePath, yamlContent);\n }\n\n /**\n * Add environment variables to .env file\n */\n private async addToEnvFile(\n projectDir: string,\n config: ProjectSetupConfig,\n ): Promise<void> {\n // Collect env vars from base and selected options\n const selectedOptions = config.addOnOptions?.[this.value] || {};\n const collectEnvVars = (options: AddOnOption[] = []): RegistryAssetEnvVar[] => {\n const out: RegistryAssetEnvVar[] = [];\n for (const option of options) {\n const selectedValue = selectedOptions[option.key];\n if (!selectedValue) continue;\n const selectedChoices = Array.isArray(selectedValue)\n ? selectedValue\n : [selectedValue];\n for (const value of selectedChoices) {\n const choice = option.choices.find((c) => c.value === value);\n if (!choice) continue;\n if (choice.envVars) out.push(...choice.envVars);\n if (choice.subOptions) out.push(...collectEnvVars(choice.subOptions));\n }\n }\n return out;\n };\n\n const envVars: RegistryAssetEnvVar[] = [\n ...(this.envVars || []),\n ...collectEnvVars(this.options || []),\n ];\n const envPath = join(projectDir, \".env\");\n\n let envContent = \"\";\n if (existsSync(envPath)) {\n envContent = await readFile(envPath, \"utf-8\");\n }\n\n // Parse existing env vars to avoid duplicates\n const existingVars = new Set<string>();\n const lines = envContent.split(\"\\n\");\n lines.forEach((line) => {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith(\"#\") && trimmed.includes(\"=\")) {\n const key = trimmed.split(\"=\")[0];\n existingVars.add(key);\n }\n });\n\n if (envVars.length > 0) {\n // Only add new env vars\n const newVars = envVars.filter((envVar) => !existingVars.has(envVar.key));\n\n if (newVars.length > 0) {\n if (envContent && !envContent.endsWith(\"\\n\\n\")) {\n envContent += \"\\n\";\n }\n\n newVars.forEach((envVar) => {\n if (envVar.description) {\n envContent += `# ${envVar.description}\\n`;\n }\n envContent += `${envVar.key}=${envVar.value}\\n\\n`;\n });\n }\n }\n\n if (envContent.trim()) {\n await writeFile(envPath, envContent);\n }\n }\n\n /**\n * Render and create template files\n */\n private async renderTemplates(\n projectDir: string,\n config: ProjectSetupConfig,\n ): Promise<void> {\n // Collect templates from base and selected options\n const selectedOptions = config.addOnOptions?.[this.value] || {};\n const collectTemplates = (options: AddOnOption[] = []): RegistryAssetTemplate[] => {\n const out: RegistryAssetTemplate[] = [];\n for (const option of options) {\n const selectedValue = selectedOptions[option.key];\n if (!selectedValue) continue;\n const selectedChoices = Array.isArray(selectedValue)\n ? selectedValue\n : [selectedValue];\n for (const value of selectedChoices) {\n const choice = option.choices.find((c) => c.value === value);\n if (!choice) continue;\n if (choice.templates) out.push(...choice.templates);\n if (choice.subOptions) out.push(...collectTemplates(choice.subOptions));\n }\n }\n return out;\n };\n\n const templates: RegistryAssetTemplate[] = [\n ...(this.templates || []),\n ...collectTemplates(this.options || []),\n ];\n // Register Handlebars helpers\n registerHandlebarsHelpers();\n\n // Create enhanced template context with add-on options\n const templateData = {\n ...config,\n enabledAddOns: config.addOns || [],\n addOnOptions: config.addOnOptions || {},\n };\n\n for (const template of templates) {\n try {\n // If template.template is a function, call it with the data\n if (typeof template.template === \"function\") {\n template.template = template.template(config);\n }\n\n if (!template.template) continue;\n\n // Read template file\n const templateContent = await readFile(template.template, \"utf-8\");\n\n // Compile and render template\n const compiledTemplate = handlebars.compile(templateContent);\n const renderedContent = compiledTemplate(templateData);\n\n // Write to output path\n if (typeof template.outputPath === \"function\") {\n template.outputPath = template.outputPath(config);\n }\n\n const outputPath = join(projectDir, template.outputPath);\n const outputDir = join(outputPath, \"..\");\n\n // Ensure output directory exists\n await import(\"fs\").then((fs) => {\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n });\n\n // Always overwrite the file if it already exists\n await writeFile(outputPath, renderedContent); // writeFile will overwrite by default\n } catch (error) {\n console.error(error);\n throw new Error(\n `Failed to render template ${template.template}: ${error}`,\n );\n }\n }\n }\n\n private _collectSetupSteps(\n options: AddOnOption[],\n selectedOptions: Record<string, string[] | string | undefined>,\n ): SetupFunction[] {\n const steps: SetupFunction[] = [];\n for (const option of options) {\n const selectedValue = selectedOptions[option.key];\n if (selectedValue) {\n if (option.setup) {\n steps.push(option.setup);\n }\n const selectedChoices = Array.isArray(selectedValue)\n ? selectedValue\n : [selectedValue];\n for (const value of selectedChoices) {\n const choice = option.choices.find((c) => c.value === value);\n if (choice?.subOptions) {\n steps.push(\n ...this._collectSetupSteps(choice.subOptions, selectedOptions),\n );\n }\n }\n }\n }\n return steps;\n }\n\n /**\n * Execute all setup functions from selected add-on options.\n */\n public async runPostInstall(\n projectDir: string,\n config: ProjectSetupConfig,\n ): Promise<void> {\n const selectedOptions = config.addOnOptions?.[this.value] || {};\n const setups = this._collectSetupSteps(this.options || [], selectedOptions);\n for (const setup of setups) {\n await setup(projectDir, config);\n }\n }\n}\n","import { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\nimport path from \"path\";\n\nexport class JobsAddOn extends BaseAddOn {\n name = \"Jobs\";\n description = \"Background task processing and job queues\";\n value = \"jobs\";\n hint = \"For background processing\";\n templates = [\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/jobs/jobs.ts.hbs\",\n ),\n outputPath: \"src/services/jobs.ts\",\n },\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/jobs/redis.ts.hbs\",\n ),\n outputPath: \"src/services/redis.ts\",\n },\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/jobs/store.ts.hbs\",\n ),\n outputPath: \"src/services/store.ts\",\n },\n ];\n dependencies = [\n {\n name: \"@igniter-js/adapter-redis\",\n version: \"latest\",\n type: \"dependency\",\n },\n {\n name: \"@igniter-js/adapter-bullmq\",\n version: \"latest\",\n type: \"dependency\",\n },\n {\n name: \"bullmq\",\n version: \"5.58.7\",\n type: \"dependency\",\n },\n {\n name: \"ioredis\",\n version: \"5.6.1\",\n type: \"dependency\",\n },\n {\n name: \"@types/ioredis\",\n version: \"4.28.10\",\n type: \"devDependency\",\n },\n ];\n dockerServices = [\n {\n name: \"redis\",\n image: \"redis:7-alpine\",\n ports: [\"6379:6379\"],\n environment: {\n REDIS_PASSWORD: \"${REDIS_PASSWORD}\",\n },\n volumes: [\"redis_data:/data\"],\n },\n ];\n envVars = [\n {\n key: \"REDIS_URL\",\n value: \"redis://localhost:6379\",\n description: \"Redis connection URL\",\n },\n {\n key: \"REDIS_HOST\",\n value: \"localhost\",\n description: \"Redis host\",\n },\n {\n key: \"REDIS_PORT\",\n value: \"6379\",\n description: \"Redis port\",\n },\n {\n key: \"REDIS_PASSWORD\",\n value: \"\",\n description: \"Redis password (leave empty for no password)\",\n },\n {\n key: \"IGNITER_JOBS_QUEUE_PREFIX\",\n value: \"igniter\",\n description: \"Job queue prefix\",\n },\n ];\n}\n","import type { ProjectSetupConfig } from \"@/commands/init/types\";\nimport { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\nimport path from \"path\";\nimport { z } from \"zod\";\n\nexport class McpServerAddOn extends BaseAddOn {\n name = \"MCP Server\";\n description = \"AI assistant integration with Model Context Protocol\";\n value = \"mcp\";\n hint = \"For AI integration\";\n templates = [\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/mcp/mcp.ts.hbs\",\n ),\n outputPath: \"src/igniter.mcp.ts\",\n },\n {\n template: (data: ProjectSetupConfig) => {\n const templates = {\n nextjs: path.resolve(\n process.cwd(),\n \"templates/add-ons/mcp/nextjs/route-handler.hbs\",\n ),\n \"tanstack-start\": path.resolve(\n process.cwd(),\n \"templates/add-ons/mcp/tanstack-start/route-handler.hbs\",\n ),\n };\n\n return templates[data.starter as keyof typeof templates] || \"\";\n },\n outputPath: (data: ProjectSetupConfig) => {\n const outputPaths = {\n nextjs: \"src/app/api/mcp/[...transport]/route.ts\",\n \"tanstack-start\": \"src/routes/mcp/$.ts\",\n };\n\n return outputPaths[data.starter as keyof typeof outputPaths] || \"\";\n },\n },\n ];\n dependencies = [\n {\n name: \"@igniter-js/adapter-mcp-server\",\n version: \"latest\",\n type: \"dependency\",\n },\n {\n name: \"ioredis\",\n version: \"5.6.1\",\n type: \"dependency\",\n },\n {\n name: \"@types/ioredis\",\n version: \"4.28.10\",\n type: \"devDependency\",\n },\n ];\n dockerServices = [\n {\n name: \"redis\",\n image: \"redis:7-alpine\",\n ports: [\"6379:6379\"],\n environment: {\n REDIS_PASSWORD: \"${REDIS_PASSWORD}\",\n },\n volumes: [\"redis_data:/data\"],\n },\n ];\n envVars = [\n {\n key: \"IGNITER_MCP_SERVER_BASE_PATH\",\n value: \"/mcp\",\n description: \"MCP server base path\",\n },\n {\n key: \"IGNITER_MCP_SERVER_TIMEOUT\",\n value: \"3600000\",\n description: \"MCP session timeout in ms\",\n },\n {\n key: \"REDIS_URL\",\n value: \"redis://localhost:6379\",\n description: \"Redis connection URL\",\n },\n {\n key: \"REDIS_HOST\",\n value: \"localhost\",\n description: \"Redis host\",\n },\n {\n key: \"REDIS_PORT\",\n value: \"6379\",\n description: \"Redis port\",\n },\n {\n key: \"REDIS_PASSWORD\",\n value: \"\",\n description: \"Redis password (leave empty for no password)\",\n },\n ];\n}\n","import { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\nimport path from \"path\";\n\nexport class LoggingAddOn extends BaseAddOn {\n name = \"Logging\";\n description = \"Advanced console logging with structured output\";\n value = \"logging\";\n hint = \"For better observability\";\n templates = [\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/logging/logger.ts.hbs\",\n ),\n outputPath: \"src/services/logger.ts\",\n },\n ];\n dependencies = [\n {\n name: \"@igniter-js/core\",\n version: \"latest\",\n type: \"dependency\",\n },\n ];\n dockerServices = [];\n envVars = [\n {\n key: \"IGNITER_LOG_LEVEL\",\n value: \"info\",\n description: \"Logging level (debug, info, warn, error)\",\n },\n ];\n}\n","import { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\nimport path from \"path\";\n\nexport class TelemetryAddOn extends BaseAddOn {\n name = \"Telemetry\";\n description = \"Telemetry for tracking requests and errors\";\n value = \"telemetry\";\n hint = \"For observability\";\n dockerServices = [];\n templates = [\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/telemetry/telemetry.ts.hbs\",\n ),\n outputPath: \"src/services/telemetry.ts\",\n },\n ];\n dependencies = [\n {\n name: \"@igniter-js/core\",\n version: \"latest\",\n type: \"dependency\",\n },\n ];\n envVars = [\n {\n key: \"IGNITER_TELEMETRY_ENABLE_TRACING\",\n value: \"true\",\n description: \"Enable telemetry tracing\",\n },\n {\n key: \"IGNITER_TELEMETRY_ENABLE_METRICS\",\n value: \"true\",\n description: \"Enable telemetry metrics\",\n },\n {\n key: \"IGNITER_TELEMETRY_ENABLE_EVENTS\",\n value: \"true\",\n description: \"Enable telemetry events\",\n },\n {\n key: \"IGNITER_TELEMETRY_ENABLE_CLI_INTEGRATION\",\n value: \"true\",\n description: \"Enable telemetry CLI integration\",\n },\n ];\n}\n","import type { ProjectSetupConfig } from \"@/commands/init/types\";\nimport { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\nimport path from \"path\";\n\nexport class BotsAddOn extends BaseAddOn {\n name = \"Bots (Telegram, WhatsApp, Discord, etc.)\";\n description = \"Multi-platform chatbot support\";\n value = \"bots\";\n hint = \"For multi-platform chatbot support\";\n templates = [\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/bots/sample-bot.hbs\",\n ),\n outputPath: \"src/bots/sample-bot.ts\",\n },\n {\n template: (data: ProjectSetupConfig) => {\n const templates = {\n nextjs: path.resolve(\n process.cwd(),\n \"templates/add-ons/bots/nextjs/route-handler.hbs\",\n ),\n \"tanstack-start\": path.resolve(\n process.cwd(),\n \"templates/add-ons/bots/tanstack-start/route-handler.hbs\",\n ),\n };\n\n return templates[data.starter as keyof typeof templates] || \"\";\n },\n outputPath: (data: ProjectSetupConfig) => {\n const outputPaths = {\n nextjs: \"src/app/api/bots/[provider]/[botId]/route.ts\",\n \"tanstack-start\": \"src/routes/api/bots/$provider/$botId.ts\",\n };\n\n return outputPaths[data.starter as keyof typeof outputPaths] || \"\";\n },\n },\n ];\n dependencies = [\n {\n name: \"@igniter-js/bot\",\n version: \"alpha\",\n type: \"dependency\",\n },\n ];\n envVars = [\n {\n key: \"TELEGRAM_TOKEN\",\n value: \"\",\n description: \"Telegram bot token\",\n },\n {\n key: \"TELEGRAM_WEBHOOK_URL\",\n value: \"\",\n description: \"Telegram webhook URL\",\n },\n {\n key: \"TELEGRAM_WEBHOOK_SECRET\",\n value: \"\",\n description: \"Telegram webhook secret\",\n },\n ];\n}\n","import type { ProjectSetupConfig } from \"@/commands/init/types\";\nimport { getPackageManagerCommand } from \"@/core/package-manager\";\nimport { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\nimport { runCommand } from \"@/core/terminal\";\nimport path from \"path\";\n\nexport class DatabaseAddOn extends BaseAddOn {\n name = \"Database\";\n description = \"Database integration with multiple ORMs and providers\";\n value = \"database\";\n hint = \"Essential for data persistence\";\n options = [\n {\n key: \"orm\",\n message: \"Choose your preferred ORM for type-safe database operations\",\n multiple: false,\n required: true,\n choices: [\n {\n value: \"prisma\",\n label: \"Prisma\",\n hint: \"Type-safe, mature, excellent tooling\",\n dependencies: [\n {\n name: \"dotenv\",\n type: \"dependency\",\n version: \"latest\",\n },\n {\n name: \"prisma\",\n type: \"dependency\",\n version: \"^6.19.0\",\n },\n {\n name: \"@prisma/client\",\n type: \"dependency\",\n version: \"^6.19.0\",\n }\n ],\n templates: [\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/database/prisma/lib.hbs\",\n ),\n outputPath: \"src/lib/database.ts\",\n },\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/database/prisma/prisma.config.hbs\",\n ),\n outputPath: \"prisma.config.ts\",\n },\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/database/prisma/schema.hbs\",\n ),\n outputPath: \"prisma/schema.prisma\",\n }\n ],\n },\n {\n value: \"drizzle\",\n label: \"Drizzle ORM\",\n hint: \"Lightweight, modern, SQL-like\",\n templates: [\n {\n template: path.resolve(\n process.cwd(),\n \"templates/add-ons/database/drizzle/lib.hbs\",\n ),\n outputPath: \"src/lib/database.ts\",\n },\n ],\n },\n ],\n },\n {\n key: \"provider\",\n message: \"Choose the database engine\",\n multiple: false,\n required: true,\n choices: [\n {\n value: \"postgresql\",\n label: \"PostgreSQL\",\n hint: \"Production-ready, full-featured\",\n dockerServices: [\n {\n name: \"postgres\",\n image: \"postgres:16-alpine\",\n ports: [\"5432:5432\"],\n environment: {\n POSTGRES_DB: \"${DATABASE_NAME}\",\n POSTGRES_USER: \"${DATABASE_USER}\",\n POSTGRES_PASSWORD: \"${DATABASE_PASSWORD}\",\n },\n volumes: [\"postgres_data:/var/lib/postgresql/data\"],\n },\n ],\n envVars: [\n {\n key: \"DATABASE_URL\",\n value:\n \"postgresql://igniter:${DATABASE_PASSWORD}@localhost:5432/igniter_db\",\n description: \"PostgreSQL connection string\",\n },\n {\n key: \"DATABASE_PASSWORD\",\n value: \"igniter\",\n description: \"Database password\",\n },\n {\n key: \"DATABASE_USER\",\n value: \"igniter\",\n description: \"Database username\",\n },\n ],\n },\n {\n value: \"mysql\",\n label: \"MySQL\",\n hint: \"Wide compatibility, popular\",\n dockerServices: [\n {\n name: \"mysql\",\n image: \"mysql:8.0\",\n ports: [\"3306:3306\"],\n environment: {\n MYSQL_ROOT_PASSWORD: \"${DATABASE_PASSWORD}\",\n MYSQL_DATABASE: \"${DATABASE_NAME}\",\n MYSQL_USER: \"${DATABASE_USER}\",\n MYSQL_PASSWORD: \"${DATABASE_PASSWORD}\",\n },\n volumes: [\"mysql_data:/var/lib/mysql\"],\n },\n ],\n envVars: [\n {\n key: \"DATABASE_URL\",\n value:\n \"mysql://igniter:${DATABASE_PASSWORD}@localhost:3306/igniter_db\",\n description: \"MySQL connection string\",\n },\n {\n key: \"DATABASE_PASSWORD\",\n value: \"docker\",\n description: \"Database password\",\n },\n {\n key: \"DATABASE_USER\",\n value: \"docker\",\n description: \"Database username\",\n },\n {\n key: \"DATABASE_NAME\",\n value: \"docker\",\n description: \"Database name\",\n },\n ],\n },\n {\n value: \"sqlite\",\n label: \"SQLite\",\n hint: \"Local development, file-based\",\n envVars: [\n {\n key: \"DATABASE_URL\",\n value: \"file:./dev.db\",\n description: \"SQLite database file path\",\n },\n ],\n },\n ],\n setup: async (projectDir: string, config: ProjectSetupConfig) => {\n // if database.orm is prisma, we need use prisma cli to setup the database\n if (config.addOnOptions?.database?.orm === \"prisma\") {\n const command = getPackageManagerCommand(\n config.packageManager,\n \"prisma\",\n );\n await runCommand(`${command} generate`, { cwd: projectDir });\n }\n // if database.orm is drizzle, we need use drizzle cli to setup the database\n if (config.addOnOptions?.database?.orm === \"drizzle\") {\n const command = getPackageManagerCommand(\n config.packageManager,\n \"drizzle\",\n );\n await runCommand(`${command} init`, { cwd: projectDir });\n }\n },\n },\n ];\n}\n","import path from \"node:path\";\nimport type { ProjectSetupConfig } from \"@/commands/init/types\";\nimport { getPackageManagerCommand } from \"@/core/package-manager\";\nimport { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\nimport { parseCommandOptions, runCommand } from \"@/core/terminal\";\nimport * as p from \"@clack/prompts\";\n\nexport class AuthAddOn extends BaseAddOn {\n name = \"Authentication\";\n description = \"Authentication and authorization\";\n value = \"auth\";\n hint = \"Essential for user authentication and authorization\";\n options = [\n {\n key: \"provider\",\n message: \"Choose the authentication provider\",\n multiple: false,\n required: true,\n choices: [\n {\n value: \"better-auth\",\n label: \"Better Auth\",\n hint: \"Universal TypeScript auth, plugin support, secure and extensible—focus on your app.\",\n dependencies: [\n {\n name: \"better-auth\",\n version: \"1.3.0\",\n type: \"dependency\",\n },\n ],\n templates: [\n {\n template: \"templates/add-ons/auth/better-auth/auth.hbs\",\n outputPath: \"src/lib/auth.ts\",\n },\n ],\n subOptions: [\n {\n key: \"plugins\",\n message: \"Choose the authentication plugins\",\n multiple: true,\n required: true,\n choices: [\n {\n value: \"email\",\n label: \"Email\",\n hint: \"Email authentication\",\n },\n {\n value: \"two-factor\",\n label: \"Two Factor\",\n hint: \"Two-factor authentication\",\n },\n {\n value: \"username\",\n label: \"Username\",\n hint: \"Username authentication\",\n },\n {\n value: \"anonymous\",\n label: \"Anonymous\",\n hint: \"Anonymous authentication\",\n },\n {\n value: \"phone-number\",\n label: \"Phone Number\",\n hint: \"Phone number authentication\",\n },\n {\n value: \"magic-link\",\n label: \"Magic Link\",\n hint: \"Magic link authentication\",\n },\n {\n value: \"email-otp\",\n label: \"Email OTP\",\n hint: \"One-time password email authentication\",\n },\n {\n value: \"passkey\",\n label: \"Passkey\",\n hint: \"Passkey authentication\",\n },\n {\n value: \"generic-oauth\",\n label: \"Generic OAuth\",\n hint: \"Provider-independent OAuth authentication\",\n },\n {\n value: \"one-tap\",\n label: \"One Tap\",\n hint: \"Google One Tap authentication\",\n },\n {\n value: \"api-key\",\n label: \"API Key\",\n hint: \"API Key authentication\",\n },\n {\n value: \"admin\",\n label: \"Admin\",\n hint: \"Admin authentication\",\n },\n {\n value: \"organization\",\n label: \"Organization\",\n hint: \"Organization-based authentication\",\n },\n {\n value: \"oidc\",\n label: \"OIDC Provider\",\n hint: \"OpenID Connect authentication provider\",\n },\n {\n value: \"sso\",\n label: \"SSO\",\n hint: \"Single sign-on authentication (SSO)\",\n },\n {\n value: \"bearer\",\n label: \"Bearer\",\n hint: \"Bearer token authentication\",\n },\n {\n value: \"multi-session\",\n label: \"Multi Session\",\n hint: \"Concurrent multi-session authentication\",\n },\n {\n value: \"oauth-proxy\",\n label: \"OAuth Proxy\",\n hint: \"OAuth proxy authentication\",\n },\n {\n value: \"open-api\",\n label: \"Open API\",\n hint: \"OpenAPI authentication support\",\n },\n {\n value: \"jwt\",\n label: \"JWT\",\n hint: \"JWT authentication\",\n },\n {\n value: \"next-cookies\",\n label: \"Next.js Cookies\",\n hint: \"Cookie support for Next.js\",\n },\n ],\n },\n ],\n },\n ],\n setup: async (projectDir: string, config: ProjectSetupConfig) => {\n // we need use better-auth cli to setup the auth\n const command = getPackageManagerCommand(\n config.packageManager,\n \"@better-auth/cli\",\n );\n\n // run the command and wait for it to complete with the options\n const result = await runCommand(\n `${command} generate --config src/lib/auth.ts --yes`,\n {\n cwd: projectDir,\n },\n );\n\n if (result.errorMessage) {\n p.log.error(`Better Auth setup failed: ${result.errorMessage}`);\n }\n },\n },\n ];\n}\n","import type { ProjectSetupConfig } from \"@/commands/init/types\";\nimport { getPackageManagerCommand } from \"@/core/package-manager\";\nimport { BaseAddOn } from \"@/core/registry/add-ons/base-addon\";\nimport { runCommand } from \"@/core/terminal\";\n\nexport class ShadcnAddOn extends BaseAddOn {\n name = \"Shadcn/UI\";\n description = \"Beautifully designed components built with Radix UI and Tailwind CSS.\";\n value = \"shadcn-ui\";\n hint = \"Production-grade UI built on top of Shadcn/UI and Radix primitives\";\n public async runPostInstall(projectDir: string, options: ProjectSetupConfig): Promise<void> {\n const command = getPackageManagerCommand(\n options.packageManager,\n \"shadcn@latest init --base-color zinc --src-dir --silent --yes\",\n );\n await runCommand(`${command}`, { cwd: projectDir });\n }\n}\n","import { AddOnRegistry } from \"@/core/registry/add-ons/add-on-registry\";\nimport { RedisStoreAddOn } from \"./store\";\nimport { JobsAddOn } from \"./jobs\";\nimport { McpServerAddOn } from \"./mcp\";\nimport { LoggingAddOn } from \"./logging\";\nimport { TelemetryAddOn } from \"./telemetry\";\nimport { BotsAddOn } from \"./bots\";\nimport { DatabaseAddOn } from \"./database\";\nimport { AuthAddOn } from \"./auth\";\nimport { ShadcnAddOn } from \"./shadcn\";\n\n/**\n * Add-on registry\n */\nexport const addOnRegistry = AddOnRegistry.create()\n .register(new RedisStoreAddOn())\n .register(new JobsAddOn())\n .register(new McpServerAddOn())\n .register(new LoggingAddOn())\n .register(new TelemetryAddOn())\n .register(new BotsAddOn())\n .register(new DatabaseAddOn())\n .register(new AuthAddOn())\n .register(new ShadcnAddOn())\n .build();\n","import * as fs from 'fs/promises';\n\nexport async function isPathEmpty(path: string): Promise<boolean> {\n try {\n const files = await fs.readdir(path);\n return files.length === 0;\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n return true;\n }\n throw error;\n }\n}","import path from \"path\";\nimport fs from \"fs\";\n\ntype SupportedFramework = 'nextjs' | 'tanstack-start' | 'generic';\n\nexport function detectFramework(projectDir: string): SupportedFramework {\n // Check if the project is a Next.js project\n if (fs.existsSync(path.join(projectDir, 'next.config.js')) || fs.existsSync(path.join(projectDir, 'next.config.ts'))) {\n return 'nextjs';\n }\n\n // Precisa ler o package.json e verificar se tem @tanstack/start\n const packageJson = JSON.parse(fs.readFileSync(path.join(projectDir, 'package.json'), 'utf8'));\n if (packageJson.dependencies['@tanstack/react-start']) {\n return 'tanstack-start';\n } else {\n return 'generic';\n }\n}\n","import * as p from '@clack/prompts';\nimport * as color from 'picocolors';\n\nclass Logger {\n private component: string;\n\n constructor(component: string) {\n this.component = component;\n }\n\n private formatMessage(level: string, message: string, data?: object) {\n const timestamp = new Date().toISOString();\n const componentInfo = this.component ? `[${this.component}] ` : '';\n const dataString = data ? ` ${JSON.stringify(data)}` : '';\n return `${color.dim(timestamp)} ${level} ${componentInfo}${message}${dataString}`;\n }\n\n info(message: string, data?: object) {\n p.log.info(this.formatMessage(color.blue('INFO'), message, data));\n }\n\n warn(message: string, data?: object) {\n p.log.warn(this.formatMessage(color.yellow('WARN'), message, data));\n }\n\n error(message: string, data?: object) {\n p.log.error(this.formatMessage(color.red('ERROR'), message, data));\n }\n\n success(message: string, data?: object) {\n p.log.success(this.formatMessage(color.green('SUCCESS'), message, data));\n }\n}\n\nexport function createLogger(component: string) {\n return new Logger(component);\n}\n","import { ProjectSetupConfig } from \"./types\";\nimport { createLogger } from \"../../core/logger\";\nimport * as p from \"@clack/prompts\";\nimport { execa } from \"execa\";\nimport { getInstallCommand } from \"../../core/package-manager\";\nimport { starterRegistry } from \"@/registry/starters\";\nimport { addOnRegistry } from \"@/registry/add-ons\";\n\nconst logger = createLogger(\"ProjectGenerator\");\n\nexport class ProjectGenerator {\n private config: ProjectSetupConfig;\n private targetDir: string;\n\n constructor(config: ProjectSetupConfig, targetDir: string) {\n this.config = config;\n this.targetDir = targetDir;\n }\n\n public async generate() {\n // 1. Create project structure\n await this.setupProject();\n\n // 2. Apply add-ons (templates, env vars, docker services)\n await this.setupAddOns();\n\n // 3. Install dependencies\n if (this.config.installDependencies) await this.installDependencies();\n\n // 4. Initialize Docker services\n if (this.config.initDocker) await this.setupDocker();\n\n // 5. Initialize Git repository\n if (this.config.initGit) await this.setupGit();\n\n // 6. Run add-on post-install steps LAST (requires deps installed)\n if (this.config.installDependencies) {\n await this.runPostInstallSteps();\n } else {\n p.log.warn(\n \"Skipping add-on post-install steps because dependencies were not installed.\",\n );\n }\n }\n\n private async installDependencies(): Promise<void> {\n const installer = p.spinner();\n\n try {\n installer.start(\"Installing dependencies...\");\n const { command, args } = getInstallCommand(this.config.packageManager);\n await execa(command, args, { cwd: this.targetDir, stdio: \"pipe\" });\n installer.stop(\"Dependencies installed successfully!\");\n } catch (error) {\n installer.stop(\"Failed to install dependencies.\");\n logger.error(\"Dependency installation failed\", { error });\n p.log.warn(\"Please install dependencies manually.\");\n }\n }\n\n private async setupProject(): Promise<void> {\n const starter = this.config.starter\n ? starterRegistry.get(this.config.starter)\n : undefined;\n if (!starter) {\n p.log.error(\"Starter not found\");\n process.exit(1);\n }\n\n const projectGenerator = p.spinner();\n projectGenerator.start(\"Generating project structure...\");\n await starter.install(this.targetDir, this.config);\n projectGenerator.stop(\"Project structure generated successfully!\");\n }\n\n private async setupAddOns(): Promise<void> {\n const selectedAddOns = this.config.addOns || [];\n if (selectedAddOns.length === 0) return;\n\n const addOns = addOnRegistry.getMany(selectedAddOns);\n\n for (const addOn of addOns) {\n const addOnSetup = p.spinner();\n addOnSetup.start(`Setting up ${addOn.name}...`);\n try {\n // runSetup() applies assets (package.json, env, docker, templates)\n await addOn.runSetup(this.targetDir, this.config);\n addOnSetup.stop(`${addOn.name} setup completed!`);\n } catch (error) {\n addOnSetup.stop(`Failed to setup ${addOn.name}.`);\n logger.error(`Add-on setup failed for ${addOn.name}`, { error });\n }\n }\n }\n\n // Run add-on post-install steps after dependencies are installed\n private async runPostInstallSteps(): Promise<void> {\n const selectedAddOns = this.config.addOns || [];\n if (selectedAddOns.length === 0) return;\n\n const addOns = addOnRegistry.getMany(selectedAddOns);\n\n for (const addOn of addOns) {\n const setupSpinner = p.spinner();\n setupSpinner.start(`Running post-install steps for ${addOn.name}...`);\n try {\n await addOn.runPostInstall(this.targetDir, this.config);\n setupSpinner.stop(`${addOn.name} post-install steps completed!`);\n } catch (error) {\n setupSpinner.stop(`Failed to run post-install steps for ${addOn.name}.`);\n logger.error(`Add-on post-install steps failed for ${addOn.name}`, { error });\n }\n }\n }\n\n private async setupGit(): Promise<void> {\n const gitSetup = p.spinner();\n gitSetup.start(\"Initializing Git repository...\");\n try {\n await execa(\"git\", [\"init\"], { cwd: this.targetDir });\n await execa(\"git\", [\"add\", \".\"], { cwd: this.targetDir });\n await execa(\n \"git\",\n [\"commit\", \"-m\", \"Initial commit from Igniter.js CLI\"],\n { cwd: this.targetDir },\n );\n gitSetup.stop(\"Git repository initialized successfully!\");\n } catch (error) {\n gitSetup.stop(\n \"Failed to initialize Git repository. Please initialize it manually.\",\n );\n }\n }\n\n private async setupDocker(): Promise<void> {\n const dockerSetup = p.spinner();\n dockerSetup.start(\"Initializing Docker services...\");\n try {\n // 1. Stop all running docker containers\n await execa(\"docker\", [\n \"container\",\n \"stop\",\n ...(await execa(\"docker\", [\"ps\", \"-q\"])).stdout\n .split(\"\\n\")\n .filter(Boolean),\n ]);\n dockerSetup.message(\n `Checking and stopping currently running containers...`,\n );\n\n // 2. Find all ports used in docker-compose.yml\n const fs = await import(\"fs/promises\");\n const path = await import(\"path\");\n const yaml = await import(\"js-yaml\");\n\n const composeFilePath = path.join(this.targetDir, \"docker-compose.yml\");\n let ports: number[] = [];\n\n try {\n const composeContent = await fs.readFile(composeFilePath, \"utf8\");\n const doc = yaml.load(composeContent) as any;\n\n const services = doc?.services || {};\n for (const svcKey of Object.keys(services)) {\n const service = services[svcKey];\n const svcPorts = service.ports || [];\n for (const portMapping of svcPorts) {\n // Supports formats like '3000:3000' and '3000'\n const [hostPortStr] = String(portMapping).split(\":\");\n const hostPort = parseInt(hostPortStr, 10);\n if (!isNaN(hostPort)) ports.push(hostPort);\n }\n }\n dockerSetup.message(`Found ${ports.length} ports to check.`);\n } catch (err) {\n dockerSetup.stop(\n \"Failed to read docker-compose.yml. Maybe you are not using Docker Compose?\",\n );\n }\n\n // 3. Try to kill any processes listening on those ports\n if (ports.length > 0) {\n for (const port of ports) {\n try {\n // Cross-platform port killing\n if (process.platform === \"win32\") {\n // Windows: find PID with netstat and kill with taskkill\n const { stdout } = await execa(\"netstat\", [\"-ano\", \"-p\", \"tcp\"]);\n const lines = stdout.split(\"\\n\");\n const matching = lines.find(\n (line) =>\n line.includes(`:${port} `) &&\n line.trim().endsWith(\"LISTENING\"),\n );\n if (matching) {\n const parts = matching.trim().split(/\\s+/);\n const pid = parts[parts.length - 1];\n if (pid && pid !== \"0\") {\n await execa(\"taskkill\", [\"/PID\", pid, \"/F\"]);\n }\n }\n } else {\n // Unix (Linux/macOS): find PID with lsof or fuser and kill\n try {\n const { stdout } = await execa(\"lsof\", [\"-ti\", `tcp:${port}`]);\n const pids = stdout.split(\"\\n\").filter(Boolean);\n for (const pid of pids) {\n await execa(\"kill\", [\"-9\", pid]);\n }\n } catch {\n // If lsof not available, fallback to fuser\n try {\n await execa(\"fuser\", [\"-k\", \"-n\", \"tcp\", `${port}`]);\n } catch {}\n }\n }\n dockerSetup.message(`Port ${port} freed successfully.`);\n } catch (e) {\n dockerSetup.stop(\n `Could not free port ${port}. Please free it manually.`,\n );\n }\n }\n }\n\n await execa(\"docker-compose\", [\"up\", \"-d\"], { cwd: this.targetDir });\n dockerSetup.stop(\"Docker services initialized successfully!\");\n } catch (error) {\n dockerSetup.stop(\n \"Failed to initialize Docker services. Please initialize it manually.\",\n );\n }\n }\n}\n","import { Command } from 'commander';\nimport { featureCommand } from './feature';\nimport { docsCommand } from './docs';\nimport { schemaCommand } from './schema';\nimport { controllerCommand } from './controller';\nimport { procedureCommand } from './procedure';\n\nexport const generateCommand = new Command()\n .command('generate')\n .description('Scaffold new features or generate client schema')\n .addCommand(featureCommand)\n .addCommand(controllerCommand)\n .addCommand(procedureCommand)\n .addCommand(docsCommand)\n .addCommand(schemaCommand);\n","import { Command } from 'commander';\nimport { handleGenerateFeatureAction } from './action';\n\nexport const featureCommand = new Command()\n .command('feature')\n .description('Scaffold a new feature module')\n .argument('[name]', 'The name of the feature (e.g., \"user\", \"products\")')\n .option('--schema <value>', 'Generate from a schema provider (e.g., \"prisma:User\")')\n .option('--schema-path <path>', 'Custom schema path for the selected provider')\n .action(handleGenerateFeatureAction);\n","import * as path from \"path\";\nimport * as p from \"@clack/prompts\";\nimport { existsSync } from \"fs\";\nimport { writeFile } from \"fs/promises\";\nimport { TemplateEngine } from \"@/core/template-engine\";\nimport { FeatureWorkspace } from \"./feature\";\nimport { FeaturePrompts } from \"./prompts\";\nimport { schemaProviderRegistry } from \"@/registry/schema-provider\";\nimport { Casing } from \"@/utils/casing\";\nimport type { SchemaProvider, SchemaProviderSelection } from \"@/core/registry/schema-provider/base-schema-provider\";\nimport type { SchemaProviderRegistry } from \"@/core/registry/schema-provider/schema-provider-registry\";\n\ninterface GenerateOptions {\n schema?: string;\n schemaPath?: string;\n}\n\nfunction cancelOperation(message: string): never {\n p.cancel(message);\n process.exit(0);\n}\n\nexport async function handleGenerateFeatureAction(\n name: string | undefined,\n options: GenerateOptions,\n): Promise<void> {\n p.intro(\"Generate Feature\");\n\n const templateEngine = TemplateEngine.create();\n \n const { provider, selection } = await resolveSchemaProvider({\n registry: schemaProviderRegistry,\n options,\n cancel: cancelOperation,\n });\n\n let featureInput = name\n\n if (!featureInput) {\n featureInput = await FeaturePrompts.askForFeatureName(\"Feature generation cancelled.\", selection?.modelName);\n }\n\n const featureSlug = Casing.toKebabCase(featureInput);\n const featureDir = FeatureWorkspace.featureDir(featureSlug);\n\n if (existsSync(featureDir)) {\n p.log.error(\n `Feature '${featureSlug}' already exists at ${path.relative(process.cwd(), featureDir)}.`,\n );\n p.outro(\"Nothing to do.\");\n process.exit(1);\n }\n\n const spinner = p.spinner();\n spinner.start(`Scaffolding feature '${featureSlug}'...`);\n\n try {\n if (provider && selection) {\n await FeatureWorkspace.ensureStructure(featureDir);\n\n await provider.generateFeature(selection, {\n featureName: featureSlug,\n featureDir,\n templateEngine,\n });\n } else {\n await FeatureWorkspace.ensureStructure(featureDir);\n\n await generateEmptyFeature(featureSlug, featureDir, templateEngine);\n }\n\n spinner.stop(`Feature '${featureSlug}' created successfully!`);\n p.log.success(\n `Scaffolded feature '${featureSlug}'. Remember to register the controller in your router.`,\n );\n p.outro(\"Feature generation complete!\");\n } catch (error) {\n spinner.stop(\"Failed to scaffold the feature.\");\n const message = error instanceof Error ? error.message : String(error);\n p.log.error(`Feature generation failed: ${message}`);\n process.exit(1);\n }\n}\n\nasync function resolveSchemaProvider({\n registry,\n options,\n cancel,\n}: {\n registry: SchemaProviderRegistry;\n options: GenerateOptions;\n cancel: (message: string) => never;\n}): Promise<{\n provider: SchemaProvider | null;\n selection: SchemaProviderSelection | null;\n}> {\n if (options.schema) {\n const provider = registry.findBySchemaOption(options.schema);\n if (!provider) {\n throw new Error(\n `No registered schema provider can handle '${options.schema}'.`,\n );\n }\n \n const selection = provider.parseSchemaOption(options.schema, {\n schemaPath: options.schemaPath,\n });\n\n await provider.validateSelection(selection);\n return { provider, selection };\n }\n\n const availableProviders = await registry.detectAvailableProviders({\n schemaPath: options.schemaPath,\n });\n\n if (availableProviders.length === 0) {\n return { provider: null, selection: null };\n }\n\n const choice = await p.select({\n message: \"Generate from an available schema provider?\",\n options: [\n { value: \"none\", label: \"No, create an empty feature\" },\n ...availableProviders.map((provider) => ({\n value: provider.id,\n label: provider.name,\n })),\n ],\n initialValue: \"none\",\n });\n\n if (p.isCancel(choice)) {\n cancel(\"Feature generation cancelled.\");\n }\n\n if (choice === \"none\") {\n return { provider: null, selection: null };\n }\n\n const provider = registry.get(String(choice));\n if (!provider) {\n throw new Error(`Schema provider '${String(choice)}' is not registered.`);\n }\n\n const schemaPath = provider.resolveSchemaPath(options.schemaPath);\n\n const selection = await provider.listModels(schemaPath);\n if (selection.length === 0) {\n return { provider: null, selection: null };\n }\n \n const modelChoice = await p.select({\n message: \"Which model would you like to scaffold?\",\n options: selection.map((model) => ({ value: model, label: model })),\n initialValue: selection[0],\n });\n\n return { provider, selection: { providerId: provider.id, modelName: String(modelChoice), schemaPath: schemaPath } };\n}\n\nasync function generateEmptyFeature(\n featureSlug: string,\n featureDir: string,\n templateEngine: TemplateEngine,\n): Promise<void> {\n const controllerTemplate = templateEngine.resolvePath(\n \"generate\",\n \"feature\",\n \"empty.controller.hbs\",\n );\n const interfacesTemplate = templateEngine.resolvePath(\n \"generate\",\n \"feature\",\n \"empty.interfaces.hbs\",\n );\n\n const controllerExport = `${Casing.toPascalCase(featureSlug)}Controller`;\n const controllerDisplayName = Casing.toPascalCase(featureSlug);\n\n await templateEngine.renderToFile(\n controllerTemplate,\n {\n controllerExport,\n controllerDisplayName,\n controllerRoute: featureSlug,\n },\n path.join(featureDir, \"controllers\", `${featureSlug}.controller.ts`),\n );\n\n await templateEngine.renderToFile(\n interfacesTemplate,\n { featureName: Casing.toPascalCase(featureSlug) },\n path.join(featureDir, `${featureSlug}.interfaces.ts`),\n );\n \n await writeFile(path.join(featureDir, \"procedures\", \".gitkeep\"), \"\");\n}\n","import { mkdirSync, existsSync } from \"fs\";\nimport { readFile, writeFile } from \"fs/promises\";\nimport * as path from \"path\";\nimport handlebars from \"handlebars\";\nimport { fileURLToPath } from \"url\";\nimport { registerHandlebarsHelpers } from \"./handlebars-helpers\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * Abstract template engine used to render Handlebars templates within the CLI.\n * Concrete implementations can customise discovery or rendering behaviour while\n * callers depend on the abstract API only.\n */\nexport abstract class TemplateEngine {\n protected constructor() {}\n\n /**\n * Creates the default template engine.\n */\n public static create(): TemplateEngine {\n return new DefaultTemplateEngine();\n }\n\n /**\n * Resolves a template path relative to the CLI template root.\n */\n public abstract resolvePath(...segments: string[]): string;\n\n /**\n * Renders a template and returns its content as a string.\n */\n public abstract render(\n templatePath: string,\n context: Record<string, unknown>,\n ): Promise<string>;\n\n /**\n * Renders a template and writes the result to the provided output path.\n */\n public abstract renderToFile(\n templatePath: string,\n context: Record<string, unknown>,\n outputPath: string,\n ): Promise<void>;\n}\n\nclass DefaultTemplateEngine extends TemplateEngine {\n private readonly templateRoot: string;\n private helpersRegistered = false;\n\n private static readonly TEMPLATE_CANDIDATES = [\n path.resolve(__dirname, \"..\", \"..\", \"templates\"),\n path.resolve(__dirname, \"..\", \"..\", \"..\", \"templates\"),\n path.resolve(__dirname, \"..\", \"templates\"),\n path.resolve(__dirname, \"..\", \"..\", \"..\", \"templates\"),\n path.resolve(\n process.cwd(),\n \"node_modules\",\n \"@igniter-js\",\n \"new-cli\",\n \"templates\",\n ),\n path.resolve(process.cwd(), \"templates\"),\n ];\n\n constructor() {\n super();\n this.templateRoot = this.resolveTemplateRoot();\n }\n\n public resolvePath(...segments: string[]): string {\n return path.join(this.templateRoot, ...segments);\n }\n\n public async render(\n templatePath: string,\n context: Record<string, unknown>,\n ): Promise<string> {\n this.ensureHelpersRegistered();\n const templateContent = await readFile(templatePath, \"utf-8\");\n const compiled = handlebars.compile(templateContent);\n return compiled(context);\n }\n\n public async renderToFile(\n templatePath: string,\n context: Record<string, unknown>,\n outputPath: string,\n ): Promise<void> {\n const rendered = await this.render(templatePath, context);\n const outputDir = path.dirname(outputPath);\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n await writeFile(outputPath, rendered, \"utf-8\");\n }\n\n private resolveTemplateRoot(): string {\n for (const candidate of DefaultTemplateEngine.TEMPLATE_CANDIDATES) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(\n [\n \"Could not locate the CLI templates directory.\",\n \"Looked in the following locations:\",\n ...DefaultTemplateEngine.TEMPLATE_CANDIDATES.map(\n (candidate) => `- ${candidate}`,\n ),\n ].join(\"\\n\"),\n );\n }\n\n private ensureHelpersRegistered(): void {\n if (!this.helpersRegistered) {\n registerHandlebarsHelpers();\n this.helpersRegistered = true;\n }\n }\n}\n","import { mkdir, readdir, stat, writeFile } from \"fs/promises\";\nimport * as path from \"path\";\n\n/**\n * Utility helpers for working with feature directories. The class is abstract\n * to make it non-instantiable while still grouping the behaviour in a single\n * namespace.\n */\nexport abstract class FeatureWorkspace {\n protected constructor() {\n // Static utility class – no instances allowed.\n }\n\n /**\n * Returns the absolute path to the feature root directory.\n */\n public static root(): string {\n return path.join(process.cwd(), \"src\", \"features\");\n }\n\n /**\n * Returns the absolute path for a specific feature name.\n */\n public static featureDir(featureName: string): string {\n return path.join(this.root(), featureName);\n }\n\n /**\n * Ensures that the directory structure required for a feature exists.\n */\n public static async ensureStructure(featureDir: string): Promise<void> {\n await mkdir(featureDir, { recursive: true });\n await mkdir(path.join(featureDir, \"controllers\"), { recursive: true });\n await mkdir(path.join(featureDir, \"procedures\"), { recursive: true });\n await mkdir(path.join(featureDir, \"presentation\"), { recursive: true });\n await mkdir(path.join(featureDir, \"presentation\", \"components\"), { recursive: true });\n await writeFile(path.join(featureDir, \"presentation\", \"components\", \".gitkeep\"), \"\");\n await mkdir(path.join(featureDir, \"presentation\", \"hooks\"), { recursive: true });\n await writeFile(path.join(featureDir, \"presentation\", \"hooks\", \".gitkeep\"), \"\");\n await mkdir(path.join(featureDir, \"presentation\", \"contexts\"), { recursive: true });\n await writeFile(path.join(featureDir, \"presentation\", \"contexts\", \".gitkeep\"), \"\");\n await mkdir(path.join(featureDir, \"presentation\", \"utils\"), { recursive: true });\n await writeFile(path.join(featureDir, \"presentation\", \"utils\", \".gitkeep\"), \"\");\n }\n\n /**\n * Lists all available feature directories under `src/features`.\n */\n public static async listFeatures(): Promise<string[]> {\n try {\n const entries = await readdir(this.root(), { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort();\n } catch {\n return [];\n }\n }\n\n /**\n * Checks if the provided path exists and corresponds to a file.\n */\n public static async fileExists(filePath: string): Promise<boolean> {\n try {\n const fileStat = await stat(filePath);\n return fileStat.isFile();\n } catch {\n return false;\n }\n }\n}\n","import * as p from \"@clack/prompts\";\nimport { FeatureWorkspace } from \"./feature\";\n\n/**\n * Encapsulates all interactive prompts required for feature generation.\n */\nexport abstract class FeaturePrompts {\n protected constructor() {}\n\n /**\n * Asks the user to confirm or supply a feature name.\n */\n public static async askForFeatureName(cancelMessage: string, initial?: string): Promise<string> {\n return this.askForEntityName({\n message: \"What is the name of your feature?\",\n placeholder: initial || \"users\",\n cancelMessage,\n });\n }\n\n /**\n * Resolves the feature slug either from user input or from available features.\n */\n public static async resolveFeatureSlug(\n cancelMessage: string,\n initial?: string,\n ): Promise<string> {\n if (initial) {\n const validation = this.validateSlug(initial);\n if (validation === true) {\n return initial.trim().toLowerCase();\n }\n throw new Error(typeof validation === \"string\" ? validation : \"Invalid feature name.\");\n }\n\n const existing = await FeatureWorkspace.listFeatures();\n if (existing.length === 0) {\n return this.askForFeatureName(cancelMessage);\n }\n\n const selection = await p.select({\n message: \"Select the target feature:\",\n options: [\n ...existing.map((feature) => ({\n label: feature,\n value: feature,\n })),\n { label: \"Create a new feature\", value: \"__new__\" },\n ],\n initialValue: existing[0],\n });\n\n if (p.isCancel(selection)) {\n this.cancel(cancelMessage);\n }\n\n if (selection === \"__new__\") {\n return this.askForFeatureName(cancelMessage);\n }\n\n return String(selection);\n }\n\n /**\n * Generic helper for asking an entity name while applying the standard validation.\n */\n public static async askForEntityName({\n message,\n placeholder,\n cancelMessage,\n }: {\n message: string;\n placeholder: string;\n cancelMessage: string;\n }): Promise<string> {\n const response = await p.text({\n message,\n placeholder,\n validate: (value) => {\n const validation = this.validateSlug(value);\n if (validation === true) {\n return undefined;\n }\n return validation;\n },\n });\n\n if (p.isCancel(response)) {\n this.cancel(cancelMessage);\n }\n\n return String(response).trim();\n }\n\n private static validateSlug(value: string | undefined): true | string {\n if (!value || !value.trim()) {\n return \"A value is required.\";\n }\n if (!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(value.trim())) {\n return \"Use letters, numbers, hyphens, and underscores only (must start with a letter).\";\n }\n return true;\n }\n\n private static cancel(message: string): never {\n p.cancel(message);\n process.exit(0);\n }\n}\n","import type {\n SchemaProvider,\n SchemaProviderOptions,\n} from \"./base-schema-provider\";\n\nclass SchemaProviderRegistry {\n private readonly providers: Map<string, SchemaProvider>;\n\n constructor(providers: SchemaProvider[]) {\n this.providers = new Map(\n providers.map((provider) => [provider.id, provider]),\n );\n }\n\n public static create(): SchemaProviderRegistryBuilder {\n return new SchemaProviderRegistryBuilder();\n }\n\n public list(): SchemaProvider[] {\n return Array.from(this.providers.values());\n }\n\n public get(id: string): SchemaProvider | undefined {\n return this.providers.get(id);\n }\n\n public findBySchemaOption(option: string): SchemaProvider | undefined {\n return this.list().find((provider) => provider.matchesSchemaOption(option));\n }\n\n public async detectAvailableProviders(\n options: SchemaProviderOptions = {},\n ): Promise<SchemaProvider[]> {\n const results: SchemaProvider[] = [];\n for (const provider of this.list()) {\n if (await provider.isAvailable(options)) {\n results.push(provider);\n }\n }\n return results;\n }\n}\n\nclass SchemaProviderRegistryBuilder {\n private readonly providers: SchemaProvider[] = [];\n\n public register(provider: SchemaProvider): this {\n this.providers.push(provider);\n return this;\n }\n\n public build(): SchemaProviderRegistry {\n return new SchemaProviderRegistry(this.providers);\n }\n}\n\nexport { SchemaProviderRegistry, SchemaProviderRegistryBuilder };\n","import { getSchema, Model, Field, Attribute, Func } from \"@mrleebo/prisma-ast\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { SchemaProvider, SchemaProviderSelection, SchemaGenerationContext } from \"@/core/registry/schema-provider/base-schema-provider\";\nimport { Casing } from \"@/utils/casing\";\nimport { FeatureWorkspace } from \"../../commands/generate/feature/feature\";\n\ninterface PrismaField {\n name: string;\n type: string;\n isRelation: boolean;\n isId: boolean;\n isOptional: boolean;\n hasDefault: boolean;\n isAutoGenerated: boolean;\n}\n\nexport class PrismaSchemaProvider extends SchemaProvider {\n public readonly id = \"prisma\";\n public readonly name = \"Prisma\";\n public readonly defaultSchemaPath = path.join(process.cwd(), \"prisma\", \"schema.prisma\");\n\n public async validateSchemaPath(schemaPath: string): Promise<void> {\n try {\n const stat = await fs.stat(schemaPath);\n if (!stat.isFile()) {\n throw new Error();\n }\n } catch {\n throw new Error(`Prisma schema not found at '${schemaPath}'.`);\n }\n }\n\n public async listModels(schemaPath: string): Promise<string[]> {\n const content = await fs.readFile(schemaPath, \"utf-8\");\n const ast = getSchema(content);\n\n return ast.list\n .filter((node): node is Model => node.type === \"model\")\n .map((model) => model.name)\n .sort();\n }\n\n public async generateFeature(\n selection: SchemaProviderSelection,\n context: SchemaGenerationContext,\n ): Promise<void> {\n await this.validateSelection(selection);\n\n const schemaContent = await fs.readFile(selection.schemaPath, \"utf-8\");\n const ast = getSchema(schemaContent);\n const model = ast.list.find(\n (node): node is Model => node.type === \"model\" && node.name === selection.modelName,\n );\n\n if (!model) {\n throw new Error(`Model '${selection.modelName}' not found in Prisma schema.`);\n }\n\n const modelFields = this.extractFields(model);\n const target = this.buildNaming(selection.modelName, context.featureName);\n\n await this.ensurePathsAreFree(context.featureDir, context.featureName);\n\n const interfacesTemplate = context.templateEngine.resolvePath(\n \"generate\",\n \"feature\",\n \"schema.interfaces.hbs\",\n );\n const procedureTemplate = context.templateEngine.resolvePath(\n \"generate\",\n \"feature\",\n \"schema.procedure.hbs\",\n );\n const controllerTemplate = context.templateEngine.resolvePath(\n \"generate\",\n \"feature\",\n \"schema.controller.hbs\",\n );\n\n await context.templateEngine.renderToFile(\n interfacesTemplate,\n {\n modelName: target.modelNamePascal,\n fields: modelFields\n .filter((field) => !field.isRelation)\n .map((field) => ({\n name: field.name,\n zodType: this.getZodType(field.type, field.isOptional),\n })),\n createOmitFields: modelFields\n .filter((field) => field.isId || field.isAutoGenerated || field.hasDefault)\n .map((field) => field.name),\n },\n path.join(context.featureDir, `${context.featureName}.interfaces.ts`),\n );\n\n await context.templateEngine.renderToFile(\n procedureTemplate,\n {\n modelName: target.modelNamePascal,\n procedureExport: target.procedureExport,\n procedureDisplayName: `${target.modelNamePascal} Procedure`,\n prismaDelegate: target.prismaDelegate,\n featureName: context.featureName,\n idType: this.mapIdType(modelFields),\n },\n path.join(context.featureDir, \"procedures\", `${context.featureName}.procedure.ts`),\n );\n\n await context.templateEngine.renderToFile(\n controllerTemplate,\n {\n controllerExport: target.controllerExport,\n controllerDisplayName: `${target.modelNamePascal} Controller`,\n modelName: target.modelNamePascal,\n modelNamePlural: target.modelNamePlural,\n resourcePath: target.resourcePath,\n idZodType: this.getIdZodType(modelFields),\n featureName: context.featureName,\n procedureExport: target.procedureExport,\n },\n path.join(context.featureDir, \"controllers\", `${context.featureName}.controller.ts`),\n );\n }\n\n private extractFields(model: Model): PrismaField[] {\n return model.properties\n .filter((property): property is Field => property.type === \"field\")\n .map((property) => {\n // Extract field type: can be string or Func\n const fieldTypeStr = typeof property.fieldType === \"string\"\n ? property.fieldType\n : property.fieldType.type === \"function\"\n ? property.fieldType.name\n : \"string\";\n \n return {\n name: property.name,\n type: this.mapPrismaType(fieldTypeStr),\n isRelation: this.isRelation(fieldTypeStr),\n isId: this.hasAttribute(property, \"id\"),\n isOptional: Boolean(property.optional),\n hasDefault: this.hasAttribute(property, \"default\"),\n isAutoGenerated: this.isAutoGenerated(property),\n };\n });\n }\n\n private buildNaming(modelName: string, featureName: string) {\n const modelNamePascal = Casing.toPascalCase(modelName);\n return {\n modelNamePascal,\n modelNamePlural: Casing.pluralize(modelNamePascal),\n controllerExport: `${modelNamePascal}Controller`,\n procedureExport: `${Casing.toCamelCase(modelNamePascal)}`,\n resourcePath: Casing.pluralize(Casing.toCamelCase(modelName)),\n prismaDelegate: Casing.toCamelCase(modelName),\n };\n }\n\n private async ensurePathsAreFree(\n featureDir: string,\n featureSlug: string,\n ): Promise<void> {\n const filesToCheck = [\n path.join(featureDir, \"controllers\", `${featureSlug}.controller.ts`),\n path.join(featureDir, \"procedures\", `${featureSlug}.procedure.ts`),\n path.join(featureDir, `${featureSlug}.interfaces.ts`),\n ];\n\n for (const file of filesToCheck) {\n if (await FeatureWorkspace.fileExists(file)) {\n throw new Error(`File '${path.relative(process.cwd(), file)}' already exists.`);\n }\n }\n }\n\n private mapPrismaType(type: string): string {\n const cleanType = type.replace(/\\?$/, \"\");\n switch (cleanType) {\n case \"String\":\n case \"Json\":\n case \"Bytes\":\n case \"Unsupported\":\n return \"string\";\n case \"BigInt\":\n return \"bigint\";\n case \"Int\":\n case \"Float\":\n case \"Decimal\":\n return \"number\";\n case \"Boolean\":\n return \"boolean\";\n case \"DateTime\":\n return \"Date\";\n default:\n return \"string\";\n }\n }\n\n private getZodType(type: string, optional: boolean): string {\n let base: string;\n switch (type) {\n case \"string\":\n base = \"z.string()\";\n break;\n case \"number\":\n base = \"z.number()\";\n break;\n case \"boolean\":\n base = \"z.boolean()\";\n break;\n case \"Date\":\n base = \"z.date()\";\n break;\n case \"bigint\":\n base = \"z.bigint()\";\n break;\n default:\n base = \"z.any()\";\n }\n return optional ? `${base}.nullable()` : base;\n }\n\n private getIdZodType(fields: PrismaField[]): string {\n const idField = fields.find((field) => field.isId);\n if (!idField) {\n return \"z.string()\";\n }\n if (idField.type === \"number\") {\n return \"z.coerce.number()\";\n }\n if (idField.type === \"bigint\") {\n return \"z.coerce.bigint()\";\n }\n return \"z.string()\";\n }\n\n private mapIdType(fields: PrismaField[]): string {\n const idField = fields.find((field) => field.isId);\n if (!idField) {\n return \"string\";\n }\n return idField.type;\n }\n\n private hasAttribute(property: Field, attributeName: string): boolean {\n if (!property.attributes || !Array.isArray(property.attributes)) {\n return false;\n }\n return property.attributes.some((attribute: Attribute) => attribute.name === attributeName);\n }\n\n private isAutoGenerated(property: Field): boolean {\n if (!property.attributes || !Array.isArray(property.attributes)) {\n return false;\n }\n const defaultAttribute = property.attributes.find(\n (attribute: Attribute) => attribute.name === \"default\",\n );\n if (!defaultAttribute || !defaultAttribute.args || !Array.isArray(defaultAttribute.args)) {\n return false;\n }\n const firstArg = defaultAttribute.args[0];\n if (!firstArg) {\n return false;\n }\n \n // Check if the argument value is a function call (Func type)\n if (\n firstArg.value &&\n typeof firstArg.value === \"object\" &&\n \"type\" in firstArg.value &&\n firstArg.value.type === \"function\"\n ) {\n const funcValue = firstArg.value as Func;\n return [\"autoincrement\", \"now\", \"cuid\", \"uuid\"].includes(funcValue.name);\n }\n \n // Check if it's a string value (for legacy format)\n if (typeof firstArg.value === \"string\") {\n return [\"autoincrement()\", \"now()\", \"cuid()\", \"uuid()\"].includes(firstArg.value);\n }\n \n return false;\n }\n\n private isRelation(type: string): boolean {\n return /^[A-Z]/.test(type) && ![\"String\", \"Int\", \"Boolean\", \"DateTime\", \"Float\", \"Decimal\", \"BigInt\", \"Json\", \"Bytes\"].includes(type);\n }\n}\n","import type { TemplateEngine } from \"@/core/template-engine\";\n\nexport interface SchemaProviderOptions {\n schemaPath?: string;\n}\n\nexport interface SchemaPromptContext extends SchemaProviderOptions {\n cancel: (message: string) => never;\n}\n\nexport interface SchemaProviderSelection {\n providerId: string;\n modelName: string;\n schemaPath: string;\n}\n\nexport interface SchemaGenerationContext {\n featureName: string;\n featureDir: string;\n templateEngine: TemplateEngine;\n}\n\n/**\n * Base class for schema-aware feature generators. Providers are responsible for\n * validating their schema sources, collecting interactive input (when needed),\n * and generating feature files.\n */\nexport abstract class SchemaProvider {\n public abstract readonly id: string;\n public abstract readonly name: string;\n public abstract readonly defaultSchemaPath: string;\n\n public matchesSchemaOption(option: string): boolean {\n return option.startsWith(`${this.id}:`);\n }\n\n public parseSchemaOption(\n option: string,\n options: SchemaProviderOptions = {},\n ): SchemaProviderSelection {\n if (!this.matchesSchemaOption(option)) {\n throw new Error(\n `Schema option '${option}' does not match provider '${this.id}'.`,\n );\n }\n\n const [, rawModel] = option.split(\":\");\n if (!rawModel || !rawModel.trim()) {\n throw new Error(\n `Missing model name in schema option '${option}'. Use the format '${this.id}:ModelName'.`,\n );\n }\n\n return {\n providerId: this.id,\n modelName: rawModel.trim(),\n schemaPath: this.resolveSchemaPath(options.schemaPath),\n };\n }\n\n public resolveSchemaPath(schemaPath?: string): string {\n return schemaPath ?? this.defaultSchemaPath;\n }\n\n public async isAvailable(options: SchemaProviderOptions = {}): Promise<boolean> {\n try {\n await this.validateSchemaPath(this.resolveSchemaPath(options.schemaPath));\n return true;\n } catch {\n return false;\n }\n }\n\n public async validateSelection(\n selection: SchemaProviderSelection,\n ): Promise<void> {\n await this.validateSchemaPath(selection.schemaPath);\n const models = await this.listModels(selection.schemaPath);\n if (!models.includes(selection.modelName)) {\n throw new Error(\n `Model '${selection.modelName}' not found for provider '${this.name}'.`,\n );\n }\n }\n\n public async promptForSelection(\n _context: SchemaPromptContext,\n ): Promise<SchemaProviderSelection | null> {\n return null;\n }\n\n public abstract validateSchemaPath(schemaPath?: string): Promise<void>;\n\n public abstract listModels(schemaPath?: string): Promise<string[]>;\n\n public abstract generateFeature(\n selection: SchemaProviderSelection,\n context: SchemaGenerationContext,\n ): Promise<void>;\n}\n","/**\n * Helper for converting strings between different naming conventions.\n * Abstract to signal that it groups static helpers only.\n */\nexport abstract class Casing {\n protected constructor() {}\n\n public static toKebabCase(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .toLowerCase();\n }\n\n public static toPascalCase(value: string): string {\n return this.toKebabCase(value)\n .split(\"-\")\n .filter(Boolean)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(\"\");\n }\n\n public static toCamelCase(value: string): string {\n const pascal = this.toPascalCase(value);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n }\n\n public static pluralize(value: string): string {\n if (value.endsWith(\"s\")) {\n return value;\n }\n if (value.endsWith(\"y\") && !/[aeiou]y$/.test(value)) {\n return `${value.slice(0, -1)}ies`;\n }\n return `${value}s`;\n }\n}\n","import { SchemaProviderRegistry } from \"@/core/registry/schema-provider/schema-provider-registry\";\nimport { PrismaSchemaProvider } from \"./prisma\";\n\nexport const schemaProviderRegistry = SchemaProviderRegistry.create().register(new PrismaSchemaProvider()).build();","import { Command } from 'commander';\nimport { handleGenerateDocsAction } from './action';\n\nexport const docsCommand = new Command()\n .command('docs')\n .description('Generate OpenAPI specification')\n .option('--router <path>', 'Path to the router file', 'src/igniter.router.ts')\n .option('--output <dir>', 'Output directory for the OpenAPI spec', './src/docs')\n .action(handleGenerateDocsAction);\n","import type { IntrospectedRouter } from \"./router-instrospector\";\n\ntype OpenApiV3Document = Record<string, any>;\n\n// Local minimal DocsConfig type to avoid cross-package type resolution issues during CLI build/testing\nexport interface DocsConfig {\n info?: { title?: string; version?: string; description?: string };\n servers?: Array<{ url: string; description?: string }>;\n securitySchemes?: Record<string, any>;\n playground?: any;\n filepath?: string;\n}\n\nfunction toPascalCase(str: string): string {\n if (!str) return '';\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nexport class OpenAPIGenerator {\n private docsConfig: DocsConfig;\n private schemas: Record<string, any> = {};\n\n private constructor(config: DocsConfig) {\n this.docsConfig = config || {};\n }\n\n static create(config: DocsConfig): OpenAPIGenerator {\n return new OpenAPIGenerator(config);\n }\n\n public generate(router: IntrospectedRouter): OpenApiV3Document {\n const servers = (this.docsConfig.servers && this.docsConfig.servers.length > 0)\n ? this.docsConfig.servers\n : [{ url: 'http://localhost:3000/api/v1', description: 'Default server' }];\n\n const spec: OpenApiV3Document = {\n openapi: '3.0.0',\n info: this.docsConfig.info || { title: 'Igniter API', version: '1.0.0' },\n servers,\n tags: this.buildTags(router),\n paths: this.buildPaths(router),\n components: {\n schemas: this.schemas,\n securitySchemes: this.docsConfig.securitySchemes || {},\n },\n };\n return spec;\n }\n\n private buildTags(router: IntrospectedRouter): any[] {\n const tags: any[] = [];\n for (const [controllerKey, controller] of Object.entries(router.controllers)) {\n const tag = {\n name: controller.name || controllerKey,\n description: controller.description,\n };\n tags.push(tag);\n }\n return tags;\n }\n\n private buildPaths(router: IntrospectedRouter): Record<string, any> {\n const paths: Record<string, any> = {};\n for (const [controllerKey, controller] of Object.entries(router.controllers)) {\n for (const [actionKey, action] of Object.entries(controller.actions)) {\n const actionName = action.name || actionKey;\n let path = `/${controller.path}/${action.path}`;\n path = path.replace(/\\/{2,}/g, '/');\n if (path.length > 1 && path.endsWith('/')) {\n path = path.slice(0, -1);\n }\n\n if (!paths[path]) {\n paths[path] = {};\n }\n\n const operation: Record<string, any> = {\n summary: action.description || actionName,\n operationId: actionName,\n tags: [controller.name || controllerKey],\n parameters: [],\n requestBody: undefined,\n responses: {\n '200': {\n description: 'Success',\n content: {\n 'application/json': {\n schema: {},\n },\n },\n },\n },\n };\n\n const pathParams = action.path.match(/:([a-zA-Z0-9_]+)/g);\n if (pathParams) {\n for (const param of pathParams) {\n const paramName = param.substring(1);\n operation.parameters.push({\n name: paramName,\n in: 'path',\n required: true,\n schema: { type: 'string' },\n });\n }\n }\n\n if ((action as any).querySchema) {\n const querySchemaName = `${toPascalCase(controller.name || controllerKey)}${toPascalCase(actionName)}Query`;\n const queryJsonSchema = (action as any).querySchema; // already JSON Schema\n this.schemas[querySchemaName] = queryJsonSchema;\n const properties = this.schemas[querySchemaName].properties || {};\n const requiredProps: string[] = this.schemas[querySchemaName].required || [];\n for (const propName of Object.keys(properties)) {\n operation.parameters.push({\n name: propName,\n in: 'query',\n required: requiredProps.includes(propName),\n schema: properties[propName],\n });\n }\n }\n\n if ((action as any).bodySchema) {\n const bodySchemaName = `${toPascalCase(controller.name || controllerKey)}${toPascalCase(actionName)}Body`;\n const bodyJsonSchema = (action as any).bodySchema; // already JSON Schema\n this.schemas[bodySchemaName] = bodyJsonSchema;\n operation.requestBody = {\n required: true,\n content: {\n 'application/json': {\n schema: { $ref: `#/components/schemas/${bodySchemaName}` },\n },\n },\n };\n }\n\n if ((action as any).isStream) {\n operation.description = (operation.description ? operation.description + '\\n\\n' : '') +\n 'This endpoint supports Server-Sent Events (SSE) for real-time updates. ' +\n 'It functions as a standard GET request initially, then maintains an open connection for streaming data.';\n }\n\n paths[path][action.method.toLowerCase()] = operation;\n }\n }\n return paths;\n }\n}\n","import * as path from 'path';\nimport { build, type BuildFailure } from 'esbuild';\nimport { IgniterRouter, IgniterControllerConfig, IgniterAction } from '@igniter-js/core';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { createRequire } from 'module';\nimport nodeExternals from 'esbuild-node-externals';\n\nexport interface IntrospectedRouter {\n controllers: Record<string, IntrospectedController>;\n docs?: any;\n}\n\ninterface IntrospectedController {\n name: string;\n description?: string;\n path: string;\n actions: Record<string, IntrospectedAction>;\n}\n\ninterface IntrospectedAction {\n name?: string;\n description?: string;\n path: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n tags?: string[];\n bodySchema?: any;\n querySchema?: any;\n paramSchemas?: Record<string, any>;\n responseSchema?: any;\n isStream?: boolean;\n security?: any;\n}\n\n/**\n * Custom error class for router loading failures.\n */\nexport class RouterLoadError extends Error {\n public originalError: any;\n\n constructor(message: string, originalError?: any) {\n super(message);\n this.name = 'RouterLoadError';\n this.originalError = originalError;\n }\n}\n\n/**\n * RouterIntrospector is responsible for:\n * 1. Loading a user's Igniter router dynamically (optionally compiling with esbuild).\n * 2. Traversing and introspecting the loaded router to construct a serializable schema with JSON schemas.\n */\nexport class RouterInstrospector {\n private constructor() {}\n\n static create(): RouterInstrospector {\n return new RouterInstrospector();\n }\n\n /**\n * Loads the user's router file by compiling it in memory with esbuild.\n * @param routerPath The path to the router file.\n * @returns Promise resolving to the loaded and evaluated IgniterRouter instance.\n * @throws RouterLoadError if loading or compiling fails.\n */\n public async loadRouter(routerPath: string): Promise<IgniterRouter<any, any, any, any, any>> {\n const fullPath = path.resolve(process.cwd(), routerPath);\n\n try {\n const result = await build({\n entryPoints: [fullPath],\n bundle: true,\n platform: 'node',\n format: 'cjs',\n write: false, // Keep the result in memory\n logLevel: 'silent', // We will handle our own logging\n plugins: [nodeExternals()],\n external: [\n '@igniter-js/*',\n '@prisma/*',\n 'prisma',\n 'redis',\n 'ioredis',\n 'bullmq',\n '@opentelemetry/*',\n 'chalk',\n 'supports-color',\n ],\n });\n\n const [outputFile] = result.outputFiles;\n if (!outputFile) {\n throw new Error('esbuild did not produce any output.');\n }\n\n const compiledCode = outputFile.text;\n const routerModule = { exports: {} };\n\n const projectRequire = createRequire(fullPath);\n const requireFunc = (moduleName: string) => {\n try {\n return projectRequire(moduleName);\n } catch (error) {\n return require(moduleName);\n }\n };\n\n const factory = new Function('exports', 'require', 'module', '__filename', '__dirname', compiledCode);\n factory(routerModule.exports, requireFunc, routerModule, fullPath, path.dirname(fullPath));\n\n const moduleExports = routerModule.exports as any;\n const router = moduleExports.AppRouter || moduleExports.default || moduleExports;\n\n if (router && typeof router.controllers === 'object') {\n return router;\n }\n\n throw new Error('Module was compiled and loaded, but no valid Igniter router export was found.');\n } catch (error: any) {\n if (error && Array.isArray((error as BuildFailure).errors)) {\n const buildFailure = error as BuildFailure;\n const errorMessages = buildFailure.errors.map(e => e.text).join('\\n');\n const detailedMessage = `esbuild failed to compile the router file:\\n${errorMessages}`;\n throw new RouterLoadError(detailedMessage, error);\n }\n throw new RouterLoadError(`Failed to load router from ${routerPath}`, error);\n }\n }\n\n /**\n * Traverses a loaded router object and converts it into a serializable schema.\n * Converts Zod schemas to JSON schemas.\n * @param router The loaded IgniterRouter instance.\n * @returns An object containing the introspected schema and statistics.\n */\n public introspectRouter(router: IgniterRouter<any, any, any, any, any>): { schema: IntrospectedRouter, stats: { controllers: number, actions: number } } {\n const introspectedControllers: Record<string, IntrospectedController> = {};\n let totalActions = 0;\n\n for (const [controllerName, controller] of Object.entries(router.controllers)) {\n const introspectedActions: Record<string, IntrospectedAction> = {};\n const typedController = controller as IgniterControllerConfig<any>;\n\n if (typedController && typedController.actions) {\n for (const [actionName, action] of Object.entries(typedController.actions)) {\n const typedAction = action as IgniterAction<any, any, any, any, any, any, any, any, any, any>;\n\n introspectedActions[actionName] = {\n name: actionName,\n path: typedAction.path,\n method: typedAction.method,\n description: typedAction.description,\n bodySchema: typedAction.body ? zodToJsonSchema(typedAction.body, { target: 'openApi3' }) : undefined,\n querySchema: typedAction.query ? zodToJsonSchema(typedAction.query, { target: 'openApi3' }) : undefined,\n };\n totalActions++;\n }\n }\n\n introspectedControllers[controllerName] = {\n ...typedController,\n actions: introspectedActions,\n };\n }\n\n const schemaResult: IntrospectedRouter = {\n controllers: introspectedControllers,\n docs: router.config.docs,\n };\n\n return {\n schema: schemaResult,\n stats: {\n controllers: Object.keys(introspectedControllers).length,\n actions: totalActions\n }\n };\n }\n}\n","import { OpenAPIGenerator } from '@/core/openapi';\nimport { RouterInstrospector } from '@/core/router-instrospector';\nimport * as p from '@clack/prompts';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface DocsGenerationResult {\n durationMs: number;\n sizeKb: number;\n outputPath: string;\n}\n\nexport async function generateDocsWatchMode(routerPath: string, outputDir: string): Promise<DocsGenerationResult> {\n const startTime = Date.now();\n\n const outputDirFull = path.resolve(outputDir);\n if (!fs.existsSync(outputDirFull)) {\n fs.mkdirSync(outputDirFull, { recursive: true });\n }\n\n const outputPath = path.join(outputDirFull, 'openapi.json');\n\n // Se o arquivo openapi.json não existir, pode criar\n if (!fs.existsSync(outputPath)) {\n fs.writeFileSync(outputPath, '{}', 'utf8'); // Garante que o arquivo seja criado vazio antes de popular\n }\n\n const routerInstrospector = RouterInstrospector.create();\n const router = await routerInstrospector.loadRouter(routerPath);\n\n if (!router) {\n throw new Error(`Router not found at: ${routerPath}`);\n }\n\n if (!router.config.docs) {\n throw new Error('Router does not have docs configuration');\n }\n\n const openapiGenerator = OpenAPIGenerator.create(router.config.docs);\n const openapi = openapiGenerator.generate(router);\n\n fs.writeFileSync(outputPath, JSON.stringify(openapi, null, 2), 'utf8');\n\n const sizeKb = fs.statSync(outputPath).size / 1024;\n\n return {\n durationMs: Date.now() - startTime,\n sizeKb,\n outputPath,\n };\n}\n\nexport async function handleGenerateDocsAction(options: { router: string; output: string }) {\n try {\n p.intro('Generate OpenAPI documentation');\n\n const spinner = p.spinner();\n spinner.start('Generating OpenAPI documentation...');\n\n const result = await generateDocsWatchMode(options.router, options.output);\n\n spinner.stop('OpenAPI documentation generated successfully.');\n p.log.success(\n `Docs generated in ${(result.durationMs / 1000).toFixed(2)}s (${result.sizeKb.toFixed(1)} KB)`,\n );\n p.log.info('Test your API on Igniter Studio at: http://localhost:3000/api/v1/docs');\n process.exit(0);\n } catch (error) {\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n","import { Command } from 'commander';\nimport { handleGenerateSchemaAction } from './action';\n\nexport const schemaCommand = new Command()\n .command('schema')\n .description('Generate client schema from your API router')\n .option('--router <path>', 'Path to the router file', 'src/igniter.router.ts')\n .option('--output <path>', 'Output path for the schema file', 'src/igniter.schema.ts')\n .action(handleGenerateSchemaAction);\n","import { RouterInstrospector } from '@/core/router-instrospector';\nimport { TemplateEngine } from '@/core/template-engine';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as handlebars from 'handlebars';\nimport * as p from '@clack/prompts';\n\nexport interface SchemaGenerationResult {\n durationMs: number;\n controllers: number;\n actions: number;\n}\n\nexport async function generateSchemaWatchMode(routerPath: string, outputPath: string): Promise<SchemaGenerationResult> {\n const startTime = Date.now();\n\n const routerInstrospector = RouterInstrospector.create();\n const router = await routerInstrospector.loadRouter(routerPath);\n const { schema, stats } = routerInstrospector.introspectRouter(router);\n\n const templateEngine = TemplateEngine.create();\n const templatePath = templateEngine.resolvePath('scaffold', 'igniter.schema.hbs');\n const templateSource = fs.readFileSync(templatePath, 'utf8');\n const template = handlebars.compile(templateSource);\n const schemaContent = template({\n generatedAt: new Date().toISOString(),\n schemaString: JSON.stringify(schema, null, 2),\n });\n\n const outputFullPath = path.resolve(process.cwd(), outputPath);\n fs.writeFileSync(outputFullPath, schemaContent, 'utf8');\n\n return {\n durationMs: Date.now() - startTime,\n controllers: stats.controllers,\n actions: stats.actions,\n };\n}\n\nexport async function handleGenerateSchemaAction({ router: routerPath, output: outputPath }: { router: string; output: string; watch: boolean }) {\n try {\n p.intro('Generate Igniter.js Client Schema');\n\n const spinner = p.spinner();\n spinner.start('Generating schema...');\n\n const result = await generateSchemaWatchMode(routerPath, outputPath);\n\n spinner.stop('Schema generated successfully.');\n p.log.success(\n `Schema generated in ${(result.durationMs / 1000).toFixed(2)}s (${result.controllers} controllers, ${result.actions} actions).`,\n );\n\n p.outro('All done!');\n process.exit(0);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n p.log.error(`Failed to generate schema: ${errorMessage}`);\n process.exit(1);\n }\n}\n","import { Command } from \"commander\";\nimport { handleGenerateControllerAction } from \"./action\";\n\nexport const controllerCommand = new Command()\n .command(\"controller\")\n .description(\"Scaffold a new controller within a feature\")\n .argument(\"[name]\", \"Name of the controller (e.g., 'profile')\")\n .option(\"-f, --feature <feature>\", \"Target feature name\")\n .action(handleGenerateControllerAction);\n","import * as path from \"path\";\nimport * as p from \"@clack/prompts\";\nimport { FeatureWorkspace } from \"@/commands/generate/feature/feature\";\nimport { FeaturePrompts } from \"@/commands/generate/feature/prompts\";\nimport { TemplateEngine } from \"@/core/template-engine\";\nimport { Casing } from \"@/utils/casing\";\nimport { tryCatch } from \"@/utils/try-catch\";\n\ninterface ControllerOptions {\n feature?: string;\n}\n\nexport async function handleGenerateControllerAction(\n name: string | undefined,\n options: ControllerOptions,\n): Promise<void> {\n p.intro(\"Generate Controller\");\n\n let controllerInput =\n name\n\n if (!controllerInput) {\n controllerInput = await FeaturePrompts.askForEntityName({\n message: \"What is the name of the controller?\",\n placeholder: \"profile\",\n cancelMessage: \"Controller generation cancelled.\",\n });\n }\n\n const controllerSlug = Casing.toKebabCase(controllerInput);\n const controllerExport = `${Casing.toPascalCase(controllerSlug)}Controller`;\n const controllerDisplay = Casing.toPascalCase(controllerSlug);\n\n const selectedFeature = await tryCatch(FeaturePrompts.resolveFeatureSlug(\n \"Controller generation cancelled.\",\n options.feature,\n ));\n\n if (selectedFeature.error) {\n p.log.error(`Controller generation failed: ${selectedFeature.error.message}`);\n process.exit(1);\n }\n\n const featureSlug = Casing.toKebabCase(selectedFeature.data);\n\n const featureDir = FeatureWorkspace.featureDir(featureSlug);\n await FeatureWorkspace.ensureStructure(featureDir);\n\n const controllerPath = path.join(\n featureDir,\n \"controllers\",\n `${controllerSlug}.controller.ts`,\n );\n\n if (await FeatureWorkspace.fileExists(controllerPath)) {\n p.log.error(\n `Controller '${controllerSlug}' already exists at ${path.relative(process.cwd(), controllerPath)}.`,\n );\n process.exit(1);\n }\n\n const templateEngine = TemplateEngine.create();\n const controllerTemplate = templateEngine.resolvePath(\n \"generate\",\n \"feature\",\n \"empty.controller.hbs\",\n );\n\n const spinner = p.spinner();\n spinner.start(\n `Creating controller '${controllerSlug}' inside feature '${featureSlug}'...`,\n );\n\n try {\n await templateEngine.renderToFile(\n controllerTemplate,\n {\n controllerExport,\n controllerDisplayName: controllerDisplay,\n controllerRoute: controllerSlug,\n },\n controllerPath,\n );\n\n spinner.stop(\"Controller created successfully!\");\n p.log.success(\n `Created controller '${controllerSlug}' in feature '${featureSlug}'.`,\n );\n p.outro(\"Controller generation complete!\");\n } catch (error) {\n spinner.stop(\"Failed to create the controller.\");\n const message = error instanceof Error ? error.message : String(error);\n p.log.error(`Controller generation failed: ${message}`);\n process.exit(1);\n }\n}\n","/**\n * Represents a successful result containing data and no error\n * @template T The type of the successful data\n */\ntype Success<T> = {\n data: T;\n error: null;\n};\n\n/**\n * Represents a failure result containing an error and no data\n * @template E The type of the error\n */\ntype Failure<E> = {\n data: null;\n error: E;\n};\n\n/**\n * Discriminated union type representing either a successful or failed result\n * @template T The type of the successful data\n * @template E The type of the error, defaults to Error\n */\ntype Result<T, E = Error> = Success<T> | Failure<E>;\n\n/**\n * A utility function that wraps promise execution in a type-safe try-catch block.\n * Provides a standardized way to handle asynchronous operations and their potential errors.\n * \n * @template T The type of the successful data\n * @template E The type of the error, defaults to Error\n * @param promise The promise to execute\n * @returns A Result object containing either the successful data or an error\n * \n * @remarks\n * This function provides a more elegant way to handle promise rejections without try-catch blocks\n * in your business logic. It returns a discriminated union type that makes error handling more explicit\n * and type-safe.\n * \n * @example\n * ```typescript\n * // Simple usage with fetch\n * const result = await tryCatch(fetch('https://api.example.com/data'));\n * if (result.error) {\n * console.error('Failed to fetch:', result.error);\n * } else {\n * const data = await result.data.json();\n * console.log('Success:', data);\n * }\n * \n * // Usage with custom error type\n * interface ApiError {\n * code: string;\n * message: string;\n * }\n * \n * const result = await tryCatch<UserData, ApiError>(fetchUserData(userId));\n * if (result.error) {\n * console.error(`Error ${result.error.code}: ${result.error.message}`);\n * } else {\n * console.log('User data:', result.data);\n * }\n * ```\n */\nexport async function tryCatch<T, E = Error>(\n promise: Promise<T>,\n): Promise<Result<T, E>> {\n try {\n const data = await promise;\n return { data, error: null };\n } catch (error) {\n return { data: null, error: error as E };\n }\n}","import { Command } from \"commander\";\nimport { handleGenerateProcedureAction } from \"./action\";\n\nexport const procedureCommand = new Command()\n .command(\"procedure\")\n .description(\"Scaffold a new procedure within a feature\")\n .argument(\"[name]\", \"Name of the procedure (e.g., 'profile')\")\n .option(\"-f, --feature <feature>\", \"Target feature name\")\n .action(handleGenerateProcedureAction);\n","import * as path from \"path\";\nimport * as p from \"@clack/prompts\";\nimport { FeatureWorkspace } from \"@/commands/generate/feature/feature\";\nimport { FeaturePrompts } from \"@/commands/generate/feature/prompts\";\nimport { TemplateEngine } from \"@/core/template-engine\";\nimport { Casing } from \"@/utils/casing\";\nimport { tryCatch } from \"@/utils/try-catch\";\nimport { rm } from \"fs/promises\";\n\ninterface ProcedureOptions {\n feature?: string;\n}\n\nexport async function handleGenerateProcedureAction(\n name: string | undefined,\n options: ProcedureOptions,\n): Promise<void> {\n p.intro(\"Generate Procedure\");\n\n let procedureInput =\n name\n\n if (!procedureInput) {\n procedureInput = await FeaturePrompts.askForEntityName({\n message: \"What is the name of the procedure?\",\n placeholder: \"profile\",\n cancelMessage: \"Procedure generation cancelled.\",\n });\n }\n\n const procedureSlug = Casing.toKebabCase(procedureInput);\n const procedureExport = `${Casing.toPascalCase(procedureSlug)}Procedure`;\n const procedureDisplay = Casing.toPascalCase(procedureSlug);\n\n const selectedFeature = await tryCatch(FeaturePrompts.resolveFeatureSlug(\n \"Procedure generation cancelled.\",\n options.feature,\n ));\n\n if (selectedFeature.error) {\n p.log.error(`Procedure generation failed: ${selectedFeature.error.message}`);\n process.exit(1);\n }\n\n const featureSlug = Casing.toKebabCase(selectedFeature.data);\n\n const featureDir = FeatureWorkspace.featureDir(featureSlug);\n await FeatureWorkspace.ensureStructure(featureDir);\n\n const procedurePath = path.join(\n featureDir,\n \"procedures\",\n `${procedureSlug}.procedure.ts`,\n );\n\n if (await FeatureWorkspace.fileExists(procedurePath)) {\n p.log.error(\n `Procedure '${procedureSlug}' already exists at ${path.relative(process.cwd(), procedurePath)}.`,\n );\n process.exit(1);\n }\n\n const templateEngine = TemplateEngine.create();\n const procedureTemplate = templateEngine.resolvePath(\n \"generate\",\n \"feature\",\n \"procedure.hbs\",\n );\n\n const spinner = p.spinner();\n spinner.start(\n `Creating procedure '${procedureSlug}' inside feature '${featureSlug}'...`,\n );\n\n if (await FeatureWorkspace.fileExists(path.join(featureDir, \"procedures\", \".gitkeep\"))) {\n await rm(path.join(featureDir, \"procedures\", \".gitkeep\"));\n }\n\n try {\n await templateEngine.renderToFile(\n procedureTemplate,\n {\n procedureExport,\n procedureDisplayName: procedureDisplay,\n featureName: Casing.toKebabCase(featureSlug),\n },\n procedurePath,\n );\n\n spinner.stop(\"Procedure created successfully!\");\n p.log.success(\n `Created procedure '${procedureSlug}' in feature '${featureSlug}'.`,\n );\n p.outro(\"Procedure generation complete!\");\n } catch (error) {\n spinner.stop(\"Failed to create the procedure.\");\n const message = error instanceof Error ? error.message : String(error);\n p.log.error(`Procedure generation failed: ${message}`);\n process.exit(1);\n }\n}\n","import { Command } from 'commander';\nimport { handleDevAction } from './action';\n\nexport const devCommand = new Command()\n .command('dev')\n .description('Start development mode with automatic schema and docs regeneration')\n .option('--router <path>', 'Path to the router file', 'src/igniter.router.ts')\n .option('--output <path>', 'Output path for the schema file', 'src/igniter.schema.ts')\n .option('--docs-output <dir>', 'Output directory for the OpenAPI spec', './src/docs')\n .option('--cmd <command>', 'Custom command to start the development server')\n .action(handleDevAction);\n\n","import * as path from 'path';\nimport * as fs from 'fs';\nimport { spawn, ChildProcess } from 'child_process';\nimport chokidar from 'chokidar';\nimport { render } from 'ink';\nimport React from 'react';\nimport { detectPackageManager } from '@/core/package-manager';\nimport { generateSchemaWatchMode } from '../generate/schema/action';\nimport { generateDocsWatchMode } from '../generate/docs/action';\nimport { DevUI, type LogEntry } from './components';\nimport type { DevCommandOptions } from './types';\n\nfunction getDefaultDevCommand(packageManager: string): string {\n switch (packageManager) {\n case 'yarn':\n return 'yarn dev';\n case 'pnpm':\n return 'pnpm dev';\n case 'bun':\n return 'bun dev';\n default:\n return 'npm run dev';\n }\n}\n\nasync function regenerateSchemaAndDocs(\n routerPath: string,\n outputPath: string,\n docsOutputDir: string,\n addLog: (log: LogEntry) => void,\n): Promise<void> {\n try {\n const schemaResult = await generateSchemaWatchMode(routerPath, outputPath);\n addLog({\n type: 'success',\n message: `Schema regenerated in ${(schemaResult.durationMs / 1000).toFixed(2)}s (${schemaResult.controllers} controllers, ${schemaResult.actions} actions)`,\n timestamp: new Date(),\n });\n\n const docsResult = await generateDocsWatchMode(routerPath, docsOutputDir);\n addLog({\n type: 'success',\n message: `OpenAPI docs regenerated in ${(docsResult.durationMs / 1000).toFixed(2)}s (${docsResult.sizeKb.toFixed(1)} KB)`,\n timestamp: new Date(),\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n addLog({\n type: 'error',\n message: `Failed to regenerate: ${errorMessage}`,\n timestamp: new Date(),\n });\n }\n}\n\nexport async function handleDevAction(options: DevCommandOptions): Promise<void> {\n // Setup\n const packageManager = detectPackageManager();\n const routerPath = path.resolve(process.cwd(), options.router || 'src/igniter.router.ts');\n const outputPath = options.output || 'src/igniter.schema.ts';\n const docsOutputDir = options.docsOutput || './src/docs';\n const devCommand = options.cmd || getDefaultDevCommand(packageManager);\n\n // Validate router exists\n if (!fs.existsSync(routerPath)) {\n console.error(`Router file not found: ${routerPath}`);\n process.exit(1);\n }\n\n // State for logs\n const igniterLogs: LogEntry[] = [];\n const appLogs: LogEntry[] = [];\n\n let rerenderFn: (() => void) | null = null;\n\n const addIgniterLog = (log: LogEntry) => {\n igniterLogs.push(log);\n // Keep only last 1000 logs\n if (igniterLogs.length > 1000) {\n igniterLogs.shift();\n }\n if (rerenderFn) {\n rerenderFn();\n }\n };\n\n const addAppLog = (log: LogEntry) => {\n appLogs.push(log);\n // Keep only last 1000 logs\n if (appLogs.length > 1000) {\n appLogs.shift();\n }\n if (rerenderFn) {\n rerenderFn();\n }\n };\n\n // Initial generation\n try {\n const docsResult = await generateDocsWatchMode(routerPath, docsOutputDir);\n addIgniterLog({\n type: 'success',\n message: `OpenAPI docs generated in ${(docsResult.durationMs / 1000).toFixed(2)}s (${docsResult.sizeKb.toFixed(1)} KB)`,\n timestamp: new Date(),\n });\n\n const schemaResult = await generateSchemaWatchMode(routerPath, outputPath);\n addIgniterLog({\n type: 'success',\n message: `Schema generated in ${(schemaResult.durationMs / 1000).toFixed(2)}s (${schemaResult.controllers} controllers, ${schemaResult.actions} actions)`,\n timestamp: new Date(),\n }); \n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n addIgniterLog({\n type: 'error',\n message: `Failed to generate: ${errorMessage}`,\n timestamp: new Date(),\n });\n process.exit(1);\n }\n\n // Setup watch paths\n const featuresDir = path.join(process.cwd(), 'src', 'features');\n const watchPaths = [\n routerPath, // Watch router file directly\n featuresDir, // Watch features directory recursively\n ].filter((p) => fs.existsSync(p));\n\n if (watchPaths.length === 0) {\n addIgniterLog({\n type: 'warn',\n message: 'No watchable paths found. Only watching router file.',\n timestamp: new Date(),\n });\n watchPaths.push(routerPath);\n }\n\n addIgniterLog({\n type: 'info',\n message: `Watching for changes in: ${watchPaths.map((p) => path.relative(process.cwd(), p)).join(', ')}`,\n timestamp: new Date(),\n });\n\n // Setup file watcher with debounce\n let regenerateTimeout: NodeJS.Timeout | null = null;\n const DEBOUNCE_MS = 300;\n\n const watcher = chokidar.watch(watchPaths, {\n ignored: [\n /node_modules/,\n /\\.git/,\n /dist/,\n /\\.next/,\n /\\.turbo/,\n /\\.cache/,\n /\\.test\\.ts$/,\n /\\.spec\\.ts$/,\n ],\n persistent: true,\n ignoreInitial: true,\n });\n\n watcher.on('change', (filePath) => {\n const relativePath = path.relative(process.cwd(), filePath);\n \n // Clear existing timeout\n if (regenerateTimeout) {\n clearTimeout(regenerateTimeout);\n }\n\n // Debounce regeneration\n regenerateTimeout = setTimeout(async () => {\n addIgniterLog({\n type: 'info',\n message: `File changed: ${relativePath}`,\n timestamp: new Date(),\n });\n await regenerateSchemaAndDocs(routerPath, outputPath, docsOutputDir, addIgniterLog);\n }, DEBOUNCE_MS);\n });\n\n watcher.on('error', (error: unknown) => {\n const errorMessage = error instanceof Error ? error.message : String(error);\n addIgniterLog({\n type: 'error',\n message: `Watcher error: ${errorMessage}`,\n timestamp: new Date(),\n });\n });\n\n // Start dev server\n let devProcess: ChildProcess | null = null;\n\n if (devCommand) {\n addAppLog({\n type: 'info',\n message: `Starting dev server: ${devCommand}`,\n timestamp: new Date(),\n });\n \n const [cmd, ...args] = devCommand.split(' ');\n devProcess = spawn(cmd, args, {\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env: {\n ...process.env,\n NODE_ENV: 'development',\n },\n cwd: process.cwd(),\n });\n\n devProcess.stdout?.on('data', (data: Buffer) => {\n const lines = data.toString().split('\\n').filter((line) => line.trim());\n lines.forEach((line) => {\n addAppLog({\n type: 'info',\n message: line,\n timestamp: new Date(),\n });\n });\n });\n\n devProcess.stderr?.on('data', (data: Buffer) => {\n const lines = data.toString().split('\\n').filter((line) => line.trim());\n lines.forEach((line) => {\n addAppLog({\n type: 'error',\n message: line,\n timestamp: new Date(),\n });\n });\n });\n\n devProcess.on('error', (error: Error) => {\n addAppLog({\n type: 'error',\n message: `Dev server error: ${error.message}`,\n timestamp: new Date(),\n });\n });\n\n devProcess.on('exit', (code) => {\n if (code !== null && code !== 0) {\n addAppLog({\n type: 'warn',\n message: `Dev server exited with code ${code}`,\n timestamp: new Date(),\n });\n } else {\n addAppLog({\n type: 'info',\n message: 'Dev server stopped',\n timestamp: new Date(),\n });\n }\n });\n }\n\n // Cleanup function\n const cleanup = () => {\n if (regenerateTimeout) {\n clearTimeout(regenerateTimeout);\n }\n \n watcher.close();\n \n if (devProcess) {\n devProcess.kill('SIGTERM');\n }\n };\n\n // Render UI\n const DevComponent: React.FC = () => {\n return React.createElement(DevUI, {\n igniterLogs,\n appLogs,\n onExit: () => {\n cleanup();\n unmount();\n process.exit(0);\n },\n });\n };\n \n const { rerender, unmount } = render(React.createElement(DevComponent));\n rerenderFn = () => rerender(React.createElement(DevComponent));\n\n // Handle exit signals\n process.on('SIGINT', () => {\n cleanup();\n unmount();\n process.exit(0);\n });\n\n process.on('SIGTERM', () => {\n cleanup();\n unmount();\n process.exit(0);\n });\n\n // Wait for dev process if it exists\n if (devProcess) {\n await new Promise<void>((resolve) => {\n devProcess!.on('exit', () => resolve());\n });\n } else {\n // If no dev process, keep alive indefinitely\n await new Promise(() => {});\n }\n}\n","import React, { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\n\nexport interface LogEntry {\n type: 'info' | 'success' | 'error' | 'warn';\n message: string;\n timestamp: Date;\n}\n\ninterface DevUIProps {\n igniterLogs: LogEntry[];\n appLogs: LogEntry[];\n onExit: () => void;\n}\n\nfunction DevUI({ igniterLogs, appLogs, onExit }: DevUIProps) {\n const [activeTab, setActiveTab] = useState<'igniter' | 'app'>('igniter');\n\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'c')) {\n onExit();\n return;\n }\n \n if (key.leftArrow || input === '1') {\n setActiveTab('igniter');\n }\n \n if (key.rightArrow || input === '2') {\n setActiveTab('app');\n }\n });\n\n const formatLogEntry = (entry: LogEntry): string => {\n const time = entry.timestamp.toLocaleTimeString();\n const prefix = {\n info: 'ℹ',\n success: '✓',\n error: '✗',\n warn: '⚠',\n }[entry.type];\n \n return `[${time}] ${prefix} ${entry.message}`;\n };\n\n const renderLogs = (logs: LogEntry[], maxLines: number = 50) => {\n const visibleLogs = logs.slice(-maxLines);\n return (\n <Box flexDirection=\"column\">\n {visibleLogs.length === 0 ? (\n <Text dimColor>No logs yet...</Text>\n ) : (\n visibleLogs.map((log, index) => {\n const color = {\n info: 'cyan',\n success: 'green',\n error: 'red',\n warn: 'yellow',\n }[log.type];\n \n return (\n <Text key={`${log.timestamp.getTime()}-${index}`} color={color}>\n {formatLogEntry(log)}\n </Text>\n );\n })\n )}\n </Box>\n );\n };\n\n return (\n <Box flexDirection=\"column\">\n <Box marginBottom={1}>\n <Text bold>Igniter.js Development Mode</Text>\n </Box>\n \n {/* Custom Tabs */}\n <Box flexDirection=\"row\">\n <Box\n borderStyle={activeTab === 'igniter' ? 'round' : 'single'}\n borderColor={activeTab === 'igniter' ? 'cyan' : 'gray'}\n paddingX={1}\n marginRight={1}\n >\n <Text color={activeTab === 'igniter' ? 'cyan' : 'gray'} bold={activeTab === 'igniter'}>\n Igniter.js\n </Text>\n </Box>\n <Box\n borderStyle={activeTab === 'app' ? 'round' : 'single'}\n borderColor={activeTab === 'app' ? 'green' : 'gray'}\n paddingX={1}\n >\n <Text color={activeTab === 'app' ? 'green' : 'gray'} bold={activeTab === 'app'}>\n Application\n </Text>\n </Box>\n </Box>\n \n <Box marginTop={1} borderStyle=\"round\" paddingX={1} minHeight={20}>\n {activeTab === 'igniter' ? (\n <Box flexDirection=\"column\">\n <Text bold color=\"cyan\">\n Igniter.js Logs ({igniterLogs.length})\n </Text>\n <Box marginTop={1}>\n {renderLogs(igniterLogs)}\n </Box>\n </Box>\n ) : (\n <Box flexDirection=\"column\">\n <Text bold color=\"green\">\n Application Logs ({appLogs.length})\n </Text>\n <Box marginTop={1}>\n {renderLogs(appLogs)}\n </Box>\n </Box>\n )}\n </Box>\n \n <Box marginTop={1}>\n <Text dimColor>\n Press <Text bold>1</Text> or <Text bold>←</Text> for Igniter.js |{' '}\n <Text bold>2</Text> or <Text bold>→</Text> for Application |{' '}\n <Text bold>Ctrl+C</Text> or <Text bold>ESC</Text> to exit\n </Text>\n </Box>\n </Box>\n );\n}\n\nexport default DevUI;\n"],"mappings":"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","names":["Command","p","path","p","path","path","join","handlebars","path","p","join","handlebars","fs","stat","resolve","path","path","path","readFile","writeFile","existsSync","join","handlebars","join","existsSync","readFile","writeFile","services","envVars","handlebars","fs","path","path","path","path","path","path","path","fs","path","path","fs","p","p","execa","execa","fs","path","Command","Command","path","p","existsSync","writeFile","existsSync","readFile","writeFile","path","handlebars","__filename","__dirname","readFile","handlebars","existsSync","writeFile","mkdir","readdir","stat","writeFile","path","p","fs","path","stat","existsSync","spinner","cancel","provider","selection","writeFile","Command","Command","path","path","p","fs","path","spinner","Command","Command","fs","path","handlebars","p","spinner","Command","Command","path","p","spinner","Command","Command","path","p","rm","spinner","Command","Command","Command","path","fs","spawn","React","log","color","devCommand","log","p","spawn","React","resolve","Command","Command"]}