@bombillazo/error-x 0.2.0 → 0.2.1
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.
- package/dist/index.cjs +402 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +375 -1
- package/dist/index.d.ts +375 -1
- package/dist/index.js +402 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/error.ts"],"names":["HandlingTargets","safeStringify"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Metadata object containing additional context information for an error.\n * Can store any key-value pairs to provide extra debugging or business context.\n *\n * @example\n * ```typescript\n * const metadata: ErrorMetadata = {\n * userId: 123,\n * operation: 'fetchUser',\n * retryCount: 3\n * }\n * ```\n *\n * @public\n */\nexport type ErrorMetadata = Record<string, any>\n\n/**\n * Predefined display targets for error notifications and UI feedback.\n * These enum values provide consistent, type-safe options for where errors should be displayed.\n *\n * @public\n */\nexport enum HandlingTargets {\n MODAL = 'modal',\n TOAST = 'toast',\n INLINE = 'inline',\n BANNER = 'banner',\n CONSOLE = 'console',\n LOGGER = 'logger',\n NOTIFICATION = 'notification',\n}\n\n/**\n * Display target type that allows both predefined enum values and custom strings.\n * This enables flexibility for custom UI components while providing standard options.\n *\n * @example\n * ```typescript\n * // Using predefined enum values\n * targets: [HandlingTargets.MODAL, HandlingTargets.TOAST]\n *\n * // Using custom strings\n * targets: ['custom-sidebar', 'my-notification-center']\n *\n * // Mixing both\n * targets: [HandlingTargets.MODAL, 'custom-popup', HandlingTargets.CONSOLE]\n * ```\n *\n * @public\n */\nexport type HandlingTarget = HandlingTargets | string\n\n/**\n * Action to display notifications in specified UI targets.\n * Used to notify applications to handle error messages through the indicated display mechanisms.\n *\n * @example\n * ```typescript\n * {\n * action: 'notify',\n * payload: {\n * targets: [HandlingTargets.TOAST, 'custom-sidebar'],\n * title: 'Error occurred',\n * duration: 5000\n * }\n * }\n * ```\n *\n * @public\n */\nexport type NotifyAction = {\n action: 'notify'\n payload: {\n targets: HandlingTarget[]\n [key: string]: any\n }\n}\n\n/**\n * Action to log out the current user when an error occurs.\n * Useful for authentication errors or session expiration.\n *\n * @example\n * ```typescript\n * {\n * action: 'logout',\n * payload: {\n * clearStorage: true,\n * redirectURL: '/login'\n * }\n * }\n * ```\n *\n * @public\n */\nexport type LogoutAction = {\n action: 'logout'\n payload?: {\n [key: string]: any\n }\n}\n\n/**\n * Action to redirect the user to a different URL when an error occurs.\n * Commonly used for navigation after authentication errors or access denied scenarios.\n *\n * @example\n * ```typescript\n * {\n * action: 'redirect',\n * payload: {\n * redirectURL: '/login',\n * delay: 2000,\n * replace: true,\n * }\n * }\n * ```\n *\n * @public\n */\nexport type RedirectAction = {\n action: 'redirect'\n payload: {\n redirectURL: string\n [key: string]: any\n }\n}\n\n/**\n * Custom action type for application-specific actions.\n * This type is essential for proper TypeScript discrimination in the ErrorAction union.\n * Without this, TypeScript cannot properly distinguish between predefined and custom actions.\n *\n * @example\n * ```typescript\n * {\n * action: 'custom',\n * payload: {\n * type: 'analytics',\n * event: 'error_occurred',\n * category: 'authentication',\n * severity: 'high'\n * }\n * }\n *\n * {\n * action: 'custom',\n * payload: {\n * type: 'show-modal',\n * modalId: 'error-modal',\n * title: 'Error',\n * message: 'Something went wrong'\n * }\n * }\n * ```\n *\n * @public\n */\nexport type CustomAction = {\n action: 'custom'\n payload?: Record<string, any>\n}\n\n/**\n * Union type of all possible error actions.\n * Includes predefined actions (NotifyAction, LogoutAction, RedirectAction)\n * and CustomAction for application-specific actions.\n *\n * @public\n */\nexport type ErrorAction = NotifyAction | LogoutAction | RedirectAction | CustomAction\n\n/**\n * Array of valid ErrorXOptions field names.\n * This serves as the single source of truth for both runtime validation and type checking.\n *\n * @internal\n */\nexport const ERROR_X_OPTION_FIELDS = [\n 'message',\n 'name',\n 'code',\n 'uiMessage',\n 'cause',\n 'metadata',\n 'actions',\n] as const\n\n/**\n * Union type of all valid ErrorXOptions field names.\n *\n * @public\n */\nexport type ErrorXOptionField = (typeof ERROR_X_OPTION_FIELDS)[number]\n\n/**\n * Configuration options for creating an ErrorX instance.\n * All properties are optional with sensible defaults.\n *\n * @remarks\n * **Note on design:** ErrorXOptions is a `type` instead of a `class` to provide maximum flexibility.\n * This allows you to pass plain objects without instantiation:\n *\n * ```typescript\n * // ✅ Works - plain object\n * new ErrorX({ message: 'Error', code: 'ERR' })\n *\n * // ✅ Works - object literal\n * const opts = { message: 'Error' }\n * new ErrorX(opts)\n * ```\n *\n * If ErrorXOptions were a class, you would need to instantiate it:\n *\n * ```typescript\n * // ❌ Would be required with class\n * new ErrorX(new ErrorXOptions({ message: 'Error' }))\n * ```\n *\n * The current `type` approach provides better ergonomics while still maintaining type safety.\n * The `isErrorXOptions()` validation method ensures only valid option objects are accepted.\n *\n * @public\n */\nexport type ErrorXOptions = {\n /** Technical error message (default: 'An error occurred') */\n message?: string\n /** Error type/name (default: 'Error') */\n name?: string\n /** Error identifier code (auto-generated from name if not provided) */\n code?: string | number\n /** User-friendly message for UI display (default: undefined) */\n uiMessage?: string | undefined\n /** Original error that caused this error (preserves error chain) */\n cause?: Error | unknown\n /** Additional context and debugging information (default: undefined) */\n metadata?: ErrorMetadata\n /** Actions to perform when this error occurs (default: undefined) */\n actions?: ErrorAction[]\n}\n\n/**\n * JSON-serializable representation of an ErrorX instance.\n * Used for transmitting errors over network or storing in databases.\n *\n * @example\n * ```typescript\n * const serialized: SerializableError = {\n * name: 'AuthError',\n * message: 'Authentication failed.',\n * code: 'AUTH_FAILED',\n * uiMessage: 'Please check your credentials',\n * stack: 'Error: Authentication failed.\\n at login (auth.ts:42:15)',\n * metadata: { userId: 123, loginAttempt: 3 },\n * timestamp: '2024-01-15T10:30:45.123Z',\n * actions: [\n * { action: 'logout', payload: { clearStorage: true } }\n * ],\n * cause: {\n * name: 'NetworkError',\n * message: 'Request timeout.',\n * code: 'NETWORK_TIMEOUT',\n * // ... other error properties\n * }\n * }\n * ```\n *\n * @public\n */\nexport type SerializableError = {\n /** Error type/name */\n name: string\n /** Technical error message */\n message: string\n /** Error identifier code */\n code: string\n /** User-friendly message for UI display */\n uiMessage: string | undefined\n /** Stack trace (optional) */\n stack?: string\n /** Additional context and debugging information */\n metadata: ErrorMetadata | undefined\n /** ISO timestamp when error was created */\n timestamp: string\n /** Actions to perform when this error occurs */\n actions?: ErrorAction[]\n /** Serialized cause error (for error chaining) */\n cause?: SerializableError\n}\n","import safeStringify from 'safe-stringify'\nimport type {\n ErrorAction,\n ErrorMetadata,\n ErrorXOptionField,\n ErrorXOptions,\n SerializableError,\n} from './types.js'\nimport { ERROR_X_OPTION_FIELDS } from './types.js'\n\n// Use the single source of truth for accepted fields\nconst acceptedFields = new Set(ERROR_X_OPTION_FIELDS)\n\n/**\n * Enhanced Error class with rich metadata, type-safe error handling, and intelligent error conversion.\n *\n * @example\n * ```typescript\n * // Basic usage\n * const error = new ErrorX({ message: 'Database connection failed' })\n *\n * // With full options\n * const error = new ErrorX({\n * message: 'User authentication failed',\n * name: 'AuthError',\n * code: 'AUTH_FAILED',\n * uiMessage: 'Please check your credentials',\n * metadata: { userId: 123, loginAttempt: 3 }\n * })\n * ```\n *\n * @public\n */\nexport class ErrorX extends Error {\n /** Error identifier code, auto-generated from name if not provided */\n public readonly code: string\n /** User-friendly message suitable for display in UI */\n public readonly uiMessage: string | undefined\n /** Additional context and metadata associated with the error */\n public readonly metadata: ErrorMetadata | undefined\n /** Timestamp when the error was created */\n public readonly timestamp: Date\n /** Error actions for UI behavior and handling */\n public readonly actions: ErrorAction[] | undefined\n\n /**\n * Creates a new ErrorX instance with enhanced error handling capabilities.\n *\n * @param messageOrOptions - Error message string, ErrorXOptions object, or any value to convert to ErrorX\n * @param additionalOptions - Additional options when first parameter is a string (optional)\n *\n * @example\n * ```typescript\n * // Create with string message only\n * const error1 = new ErrorX('Database query failed')\n *\n * // Create with string message and additional options\n * const error2 = new ErrorX('Database query failed', {\n * name: 'DatabaseError',\n * code: 'DB_QUERY_FAILED',\n * uiMessage: 'Unable to load data. Please try again.',\n * metadata: { query: 'SELECT * FROM users', timeout: 5000 }\n * })\n *\n * // Create with options object (backward compatible)\n * const error3 = new ErrorX({\n * message: 'Database query failed',\n * name: 'DatabaseError',\n * code: 'DB_QUERY_FAILED',\n * actions: [\n * { action: 'notify', payload: { targets: [HandlingTargets.TOAST] } }\n * ]\n * })\n *\n * // Create with unknown input (smart conversion)\n * const apiError = { message: 'User not found', code: 404 }\n * const error4 = new ErrorX(apiError)\n *\n * // Create with no options (uses defaults)\n * const error5 = new ErrorX()\n * ```\n */\n constructor(\n messageOrOptions?: string | ErrorXOptions | unknown,\n additionalOptions?: Partial<ErrorXOptions>\n ) {\n let options: ErrorXOptions = {}\n\n // Handle different input types\n if (typeof messageOrOptions === 'string') {\n // String message provided - merge with additional options\n options = {\n message: messageOrOptions,\n ...additionalOptions,\n }\n } else if (ErrorX.isErrorXOptions(messageOrOptions)) {\n // Valid ErrorXOptions object - use directly\n options = messageOrOptions\n } else if (messageOrOptions != null) {\n // Unknown input - convert using smart conversion\n options = ErrorX.convertUnknownToOptions(messageOrOptions)\n }\n // else: undefined/null - use empty options object\n\n const formattedMessage = ErrorX.formatMessage(options.message)\n super(formattedMessage, { cause: options.cause })\n\n this.name = options.name ?? ErrorX.getDefaultName()\n this.code =\n options.code != null ? String(options.code) : ErrorX.generateDefaultCode(options.name)\n this.uiMessage = options.uiMessage\n this.metadata = options.metadata\n this.actions = options.actions\n this.timestamp = new Date()\n\n // Handle stack trace preservation\n if (options.cause instanceof Error) {\n this.stack = ErrorX.preserveOriginalStack(options.cause, this)\n } else {\n // Node.js specific stack trace capture for clean stack\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor)\n }\n // Clean the stack to remove ErrorX constructor noise\n this.stack = ErrorX.cleanStack(this.stack)\n }\n }\n\n /**\n * Returns the default error name.\n * @returns Default error name 'Error'\n */\n private static getDefaultName(): string {\n return 'Error'\n }\n\n /**\n * Validates if an object is a valid ErrorXOptions object.\n * Checks that the object only contains accepted ErrorXOptions fields.\n *\n * @param value - Value to check\n * @returns True if value is a valid ErrorXOptions object\n */\n public static isErrorXOptions(value: unknown): value is ErrorXOptions {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false\n }\n\n // If it's an Error instance, it's not ErrorXOptions\n if (value instanceof Error) {\n return false\n }\n\n const obj = value as Record<string, unknown>\n const keys = Object.keys(obj)\n\n // Empty object is valid ErrorXOptions\n if (keys.length === 0) {\n return true\n }\n\n // Check if all keys are in the accepted fields\n // If there's any key that's not accepted, it's not ErrorXOptions\n return keys.every(key => acceptedFields.has(key as ErrorXOptionField))\n }\n\n /**\n * Generates a default error code from the error name.\n * Converts camelCase/PascalCase names to UPPER_SNAKE_CASE format.\n *\n * @param name - Error name to convert\n * @returns Generated error code in UPPER_SNAKE_CASE format\n *\n * @example\n * ```typescript\n * generateDefaultCode('DatabaseError') // 'DATABASE_ERROR'\n * generateDefaultCode('userAuthError') // 'USER_AUTH_ERROR'\n * generateDefaultCode('API Timeout') // 'API_TIMEOUT'\n * ```\n */\n private static generateDefaultCode(name?: string): string {\n if (!name) return 'ERROR'\n\n // Convert camelCase/PascalCase to UPPER_SNAKE_CASE\n return name\n .replace(/([a-z])([A-Z])/g, '$1_$2') // Add underscore between camelCase\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .replace(/[^a-zA-Z0-9_]/g, '') // Remove special characters\n .toUpperCase()\n }\n\n /**\n * Preserves the original error's stack trace while updating the error message.\n * Combines the new error's message with the original error's stack trace.\n *\n * @param originalError - The original error whose stack to preserve\n * @param newError - The new error whose message to use\n * @returns Combined stack trace with new error message and original stack\n */\n private static preserveOriginalStack(originalError: Error, newError: Error): string {\n if (!originalError.stack) return newError.stack || ''\n\n // Get the new error's first line (error name + message)\n const newErrorFirstLine = `${newError.name}: ${newError.message}`\n\n // Get original stack lines (skip the first line which is the original error message)\n const originalStackLines = originalError.stack.split('\\n')\n const originalStackTrace = originalStackLines.slice(1)\n\n // Combine new error message with original stack trace\n return [newErrorFirstLine, ...originalStackTrace].join('\\n')\n }\n\n /**\n * Cleans the stack trace by removing ErrorX internal method calls.\n * This provides cleaner stack traces that focus on user code.\n *\n * @param stack - Raw stack trace to clean\n * @returns Cleaned stack trace without ErrorX internal calls\n */\n private static cleanStack(stack?: string): string {\n if (!stack) return ''\n\n const stackLines = stack.split('\\n')\n const cleanedLines: string[] = []\n\n for (const line of stackLines) {\n // Skip lines that contain ErrorX constructor or internal methods\n if (\n line.includes('new ErrorX') ||\n line.includes('ErrorX.constructor') ||\n line.includes('ErrorX.toErrorX') ||\n line.includes('error-x/dist/') ||\n line.includes('error-x/src/error.ts')\n ) {\n continue\n }\n cleanedLines.push(line)\n }\n\n return cleanedLines.join('\\n')\n }\n\n /**\n * Processes an error's stack trace to trim it after a specified delimiter.\n * Useful for removing irrelevant stack frames before a specific function.\n *\n * @param error - Error whose stack to process\n * @param delimiter - String to search for in stack lines\n * @returns Processed stack trace starting after the delimiter\n *\n * @example\n * ```typescript\n * const processed = ErrorX.processErrorStack(error, 'my-app-entry')\n * // Returns stack trace starting after the line containing 'my-app-entry'\n * ```\n */\n private static processErrorStack(error: Error, delimiter: string): string {\n let stack = error.stack ?? ''\n const stackLines = stack.split('\\n')\n\n // Find the index of the first line containing the delimiter\n const delimiterIndex = stackLines.findIndex(line => line.includes(delimiter))\n\n // If the delimiter is found, return all lines after it\n if (delimiterIndex !== -1) {\n stack = stackLines.slice(delimiterIndex + 1).join('\\n')\n }\n return stack\n }\n\n /**\n * Formats error messages with proper capitalization and punctuation.\n * Ensures consistent message formatting across all ErrorX instances.\n *\n * @param message - Raw error message to format (optional)\n * @returns Formatted message with proper capitalization and punctuation\n *\n * @example\n * ```typescript\n * formatMessage('database connection failed') // 'Database connection failed.'\n * formatMessage('user not found. please check credentials') // 'User not found. Please check credentials.'\n * formatMessage() // 'An error occurred'\n * ```\n */\n private static formatMessage(message?: string): string {\n if (!message || typeof message !== 'string' || !message.trim()) {\n return 'An error occurred'\n }\n\n // Split by sentences and capitalize each\n let formatted = message\n .split('. ')\n .map(sentence => {\n const trimmed = sentence.trim()\n if (!trimmed) return trimmed\n return trimmed.charAt(0).toUpperCase() + trimmed.slice(1)\n })\n .join('. ')\n\n // Add period at the end if it doesn't have proper punctuation\n const endsWithPunctuation = /[.!?)\\]]$/.test(formatted)\n if (!endsWithPunctuation) {\n formatted = `${formatted}.`\n }\n\n return formatted\n }\n\n /**\n * Creates a new ErrorX instance with additional metadata merged with existing metadata.\n * The original error properties are preserved while extending the metadata.\n *\n * @param additionalMetadata - Additional metadata to merge with existing metadata\n * @returns New ErrorX instance with merged metadata\n *\n * @example\n * ```typescript\n * const error = new ErrorX({\n * message: 'API request failed',\n * metadata: { endpoint: '/users' }\n * })\n *\n * const enrichedError = error.withMetadata({\n * retryCount: 3,\n * userId: 123\n * })\n * // Result: metadata = { endpoint: '/users', retryCount: 3, userId: 123 }\n * ```\n */\n public withMetadata(additionalMetadata: ErrorMetadata): ErrorX {\n const options: ErrorXOptions = {\n message: this.message,\n name: this.name,\n code: this.code,\n uiMessage: this.uiMessage,\n cause: this.cause,\n metadata: { ...(this.metadata ?? {}), ...additionalMetadata },\n }\n if (this.actions) {\n options.actions = this.actions\n }\n const newError = new ErrorX(options)\n\n // Preserve the original stack trace\n if (this.stack) {\n newError.stack = this.stack\n }\n return newError\n }\n\n /**\n * Type guard that checks if a value is an ErrorX instance.\n *\n * @param value - Value to check\n * @returns True if value is an ErrorX instance, false otherwise\n *\n * @example\n * ```typescript\n * try {\n * // some operation\n * } catch (error) {\n * if (ErrorX.isErrorX(error)) {\n * // TypeScript knows error is ErrorX\n * console.log(error.code, error.metadata)\n * }\n * }\n * ```\n */\n public static isErrorX(value: unknown): value is ErrorX {\n return value instanceof ErrorX\n }\n\n /**\n * Converts unknown input into ErrorXOptions with intelligent property extraction.\n * Handles strings, regular Error objects, API response objects, and unknown values.\n * This is a private helper method used by both the constructor and toErrorX.\n *\n * @param error - Value to convert to ErrorXOptions\n * @returns ErrorXOptions object with extracted properties\n * @internal\n */\n private static convertUnknownToOptions(error: unknown): ErrorXOptions {\n let name = ''\n let message = ''\n let code = ''\n let uiMessage = ''\n let cause: unknown\n let metadata: ErrorMetadata = {}\n let actions: ErrorAction[] | undefined\n\n if (error) {\n if (typeof error === 'string') {\n message = error\n metadata = { originalError: error }\n } else if (error instanceof Error) {\n name = error.name\n message = error.message\n cause = error.cause\n } else if (typeof error === 'object') {\n // Extract name from various properties\n if ('name' in error && error.name) name = String(error.name)\n else if ('title' in error && error.title) name = String(error.title)\n\n // Extract message from various properties\n if ('message' in error && error.message) message = String(error.message)\n else if ('details' in error && error.details) message = String(error.details)\n else if ('text' in error && error.text) message = String(error.text)\n else if ('info' in error && error.info) message = String(error.info)\n else if ('statusText' in error && error.statusText) message = String(error.statusText)\n else if ('error' in error && error.error) message = String(error.error)\n else if ('errorMessage' in error && error.errorMessage) message = String(error.errorMessage)\n\n // Extract code\n if ('code' in error && error.code) code = String(error.code)\n\n // Extract UI message\n if ('uiMessage' in error && error.uiMessage) uiMessage = String(error.uiMessage)\n else if ('userMessage' in error && error.userMessage) uiMessage = String(error.userMessage)\n\n // Extract actions\n if ('actions' in error && Array.isArray(error.actions)) {\n actions = error.actions as ErrorAction[]\n }\n\n // Store original object as metadata if it has additional properties\n metadata = { originalError: error }\n }\n }\n\n const options: ErrorXOptions = {\n message: message || 'Unknown error occurred',\n }\n\n if (name) options.name = name\n if (code) options.code = code\n if (uiMessage) options.uiMessage = uiMessage\n if (cause) options.cause = cause\n if (Object.keys(metadata).length > 0) options.metadata = metadata\n if (actions && actions.length > 0) options.actions = actions\n\n return options\n }\n\n /**\n * Converts unknown input into an ErrorX instance with intelligent property extraction.\n * Handles strings, regular Error objects, API response objects, and unknown values.\n *\n * @param error - Value to convert to ErrorX\n * @returns ErrorX instance with extracted properties\n *\n * @example\n * ```typescript\n * // Convert string error\n * const error1 = ErrorX.toErrorX('Something went wrong')\n *\n * // Convert regular Error\n * const error2 = ErrorX.toErrorX(new Error('Database failed'))\n *\n * // Convert API response object\n * const apiError = {\n * message: 'User not found',\n * code: 'USER_404',\n * statusText: 'Not Found'\n * }\n * const error3 = ErrorX.toErrorX(apiError)\n * ```\n */\n public static toErrorX(error: unknown): ErrorX {\n if (error instanceof ErrorX) return error\n\n const options = ErrorX.convertUnknownToOptions(error)\n return new ErrorX(options)\n }\n\n /**\n * Public wrapper for processing error stack traces with delimiter.\n * Delegates to the private processErrorStack method for implementation.\n *\n * @param error - Error whose stack to process\n * @param delimiter - String to search for in stack lines\n * @returns Processed stack trace starting after the delimiter\n *\n * @example\n * ```typescript\n * const error = new Error('Something failed')\n * const cleanStack = ErrorX.processStack(error, 'my-app-entry')\n * // Returns stack trace starting after the line containing 'my-app-entry'\n * ```\n */\n public static processStack(error: Error, delimiter: string): string {\n return ErrorX.processErrorStack(error, delimiter)\n }\n\n /**\n * Creates a new ErrorX instance with cleaned stack trace using the specified delimiter.\n * Returns the same instance if no delimiter is provided or no stack is available.\n *\n * @param delimiter - Optional string to search for in stack lines\n * @returns New ErrorX instance with cleaned stack trace, or the same instance if no cleaning needed\n *\n * @example\n * ```typescript\n * const error = new ErrorX({ message: 'Database error' })\n * const cleanedError = error.cleanStackTrace('database-layer')\n * // Returns new ErrorX with stack trace starting after 'database-layer'\n * ```\n */\n public cleanStackTrace(delimiter?: string): ErrorX {\n if (delimiter && this.stack) {\n const options: ErrorXOptions = {\n message: this.message,\n name: this.name,\n code: this.code,\n uiMessage: this.uiMessage,\n cause: this.cause,\n }\n if (this.metadata !== undefined) {\n options.metadata = this.metadata\n }\n if (this.actions) {\n options.actions = this.actions\n }\n const newError = new ErrorX(options)\n newError.stack = ErrorX.processErrorStack(this, delimiter)\n return newError\n }\n return this\n }\n\n /**\n * Converts the ErrorX instance to a detailed string representation.\n * Includes error name, message, code, timestamp, metadata, and stack trace.\n *\n * @returns Formatted string representation of the error\n *\n * @example\n * ```typescript\n * const error = new ErrorX({\n * message: 'Database connection failed',\n * name: 'DatabaseError',\n * code: 'DB_CONN_FAILED',\n * metadata: { host: 'localhost', port: 5432 }\n * })\n *\n * console.log(error.toString())\n * // Output: \"DatabaseError: Database connection failed. [DB_CONN_FAILED] (2024-01-15T10:30:45.123Z) metadata: {...}\"\n * ```\n */\n public toString(): string {\n const parts = []\n\n // Add name and message\n parts.push(`${this.name}: ${this.message}`)\n\n // Add code if different from default\n if (this.code && this.code !== 'ERROR') {\n parts.push(`[${this.code}]`)\n }\n\n // Add timestamp\n parts.push(`(${this.timestamp.toISOString()})`)\n\n // Add metadata if present\n if (this.metadata && Object.keys(this.metadata).length > 0) {\n const metadataStr = safeStringify(this.metadata)\n parts.push(`metadata: ${metadataStr}`)\n }\n\n let result = parts.join(' ')\n\n // Add stack trace if available\n if (this.stack) {\n result += `\\n${this.stack}`\n }\n\n return result\n }\n\n /**\n * Serializes the ErrorX instance to a JSON-compatible object.\n * Recursively serializes the error chain and handles ErrorX or regular Error causes.\n *\n * @returns Serializable object representation of the error\n *\n * @example\n * ```typescript\n * const error = new ErrorX({\n * message: 'API request failed',\n * code: 'API_ERROR',\n * metadata: { endpoint: '/users', status: 500 }\n * })\n *\n * const serialized = error.toJSON()\n * // Can be safely passed to JSON.stringify() or sent over network\n * ```\n */\n public toJSON(): SerializableError {\n // Handle metadata serialization with circular reference protection\n\n // Use safe stringify to parse the metadata and remove circular references\n const safeMetadata: ErrorMetadata | undefined = this.metadata\n ? JSON.parse(safeStringify(this.metadata))\n : undefined\n\n const serialized: SerializableError = {\n name: this.name,\n message: this.message,\n code: this.code,\n uiMessage: this.uiMessage,\n metadata: safeMetadata,\n timestamp: this.timestamp.toISOString(),\n }\n\n // Include actions if present\n if (this.actions && this.actions.length > 0) {\n // Use safe stringify to parse the actions and remove circular references\n const stringified = safeStringify(this.actions)\n serialized.actions = JSON.parse(stringified)\n }\n\n // Include stack if available\n if (this.stack) {\n serialized.stack = this.stack\n }\n\n // Recursively serialize cause if it's an ErrorX\n if (this.cause) {\n if (this.cause instanceof ErrorX) {\n serialized.cause = this.cause.toJSON()\n } else if (this.cause instanceof Error) {\n const causeData: SerializableError = {\n name: this.cause.name,\n message: this.cause.message,\n code: 'ERROR',\n uiMessage: undefined,\n metadata: {},\n timestamp: new Date().toISOString(),\n }\n if (this.cause.stack) {\n causeData.stack = this.cause.stack\n }\n serialized.cause = causeData\n }\n }\n\n return serialized\n }\n\n /**\n * Deserializes a JSON object back into an ErrorX instance.\n * Recursively reconstructs the error chain and restores all properties.\n *\n * @param serialized - Serialized error object to deserialize\n * @returns Reconstructed ErrorX instance with restored properties\n *\n * @example\n * ```typescript\n * const serializedError = {\n * name: 'DatabaseError',\n * message: 'Connection failed.',\n * code: 'DB_CONN_FAILED',\n * uiMessage: 'Database is temporarily unavailable',\n * metadata: { host: 'localhost' },\n * timestamp: '2024-01-15T10:30:45.123Z'\n * }\n *\n * const error = ErrorX.fromJSON(serializedError)\n * // Fully restored ErrorX instance with all properties\n * ```\n */\n public static fromJSON(serialized: SerializableError): ErrorX {\n const options: ErrorXOptions = {\n message: serialized.message,\n name: serialized.name,\n code: serialized.code,\n uiMessage: serialized.uiMessage,\n }\n if (serialized.metadata !== undefined) {\n options.metadata = serialized.metadata\n }\n\n if (serialized.actions && serialized.actions.length > 0) {\n options.actions = serialized.actions\n }\n\n const error = new ErrorX(options)\n\n // Restore stack and timestamp\n if (serialized.stack) {\n error.stack = serialized.stack\n }\n // Use Object.defineProperty to set readonly properties\n Object.defineProperty(error, 'timestamp', {\n value: new Date(serialized.timestamp),\n writable: false,\n })\n\n // Restore cause chain\n if (serialized.cause) {\n Object.defineProperty(error, 'cause', {\n value: ErrorX.fromJSON(serialized.cause),\n writable: false,\n })\n }\n\n return error\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/error.ts","../src/presets.ts"],"names":["HandlingTargets","safeStringify"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Metadata object containing additional context information for an error.\n * Can store any key-value pairs to provide extra debugging or business context.\n *\n * @example\n * ```typescript\n * const metadata: ErrorMetadata = {\n * userId: 123,\n * operation: 'fetchUser',\n * retryCount: 3\n * }\n * ```\n *\n * @public\n */\nexport type ErrorMetadata = Record<string, any>;\n\n/**\n * Predefined display targets for error notifications and UI feedback.\n * These enum values provide consistent, type-safe options for where errors should be displayed.\n *\n * @public\n */\nexport enum HandlingTargets {\n MODAL = 'modal',\n TOAST = 'toast',\n INLINE = 'inline',\n BANNER = 'banner',\n CONSOLE = 'console',\n LOGGER = 'logger',\n NOTIFICATION = 'notification',\n}\n\n/**\n * Display target type that allows both predefined enum values and custom strings.\n * This enables flexibility for custom UI components while providing standard options.\n *\n * @example\n * ```typescript\n * // Using predefined enum values\n * targets: [HandlingTargets.MODAL, HandlingTargets.TOAST]\n *\n * // Using custom strings\n * targets: ['custom-sidebar', 'my-notification-center']\n *\n * // Mixing both\n * targets: [HandlingTargets.MODAL, 'custom-popup', HandlingTargets.CONSOLE]\n * ```\n *\n * @public\n */\nexport type HandlingTarget = HandlingTargets | string;\n\n/**\n * Action to display notifications in specified UI targets.\n * Used to notify applications to handle error messages through the indicated display mechanisms.\n *\n * @example\n * ```typescript\n * {\n * action: 'notify',\n * payload: {\n * targets: [HandlingTargets.TOAST, 'custom-sidebar'],\n * title: 'Error occurred',\n * duration: 5000\n * }\n * }\n * ```\n *\n * @public\n */\nexport type NotifyAction = {\n action: 'notify';\n payload: {\n targets: HandlingTarget[];\n [key: string]: any;\n };\n};\n\n/**\n * Action to log out the current user when an error occurs.\n * Useful for authentication errors or session expiration.\n *\n * @example\n * ```typescript\n * {\n * action: 'logout',\n * payload: {\n * clearStorage: true,\n * redirectURL: '/login'\n * }\n * }\n * ```\n *\n * @public\n */\nexport type LogoutAction = {\n action: 'logout';\n payload?: {\n [key: string]: any;\n };\n};\n\n/**\n * Action to redirect the user to a different URL when an error occurs.\n * Commonly used for navigation after authentication errors or access denied scenarios.\n *\n * @example\n * ```typescript\n * {\n * action: 'redirect',\n * payload: {\n * redirectURL: '/login',\n * delay: 2000,\n * replace: true,\n * }\n * }\n * ```\n *\n * @public\n */\nexport type RedirectAction = {\n action: 'redirect';\n payload: {\n redirectURL: string;\n [key: string]: any;\n };\n};\n\n/**\n * Custom action type for application-specific actions.\n * This type is essential for proper TypeScript discrimination in the ErrorAction union.\n * Without this, TypeScript cannot properly distinguish between predefined and custom actions.\n *\n * @example\n * ```typescript\n * {\n * action: 'custom',\n * payload: {\n * type: 'analytics',\n * event: 'error_occurred',\n * category: 'authentication',\n * severity: 'high'\n * }\n * }\n *\n * {\n * action: 'custom',\n * payload: {\n * type: 'show-modal',\n * modalId: 'error-modal',\n * title: 'Error',\n * message: 'Something went wrong'\n * }\n * }\n * ```\n *\n * @public\n */\nexport type CustomAction = {\n action: 'custom';\n payload?: Record<string, any>;\n};\n\n/**\n * Union type of all possible error actions.\n * Includes predefined actions (NotifyAction, LogoutAction, RedirectAction)\n * and CustomAction for application-specific actions.\n *\n * @public\n */\nexport type ErrorAction = NotifyAction | LogoutAction | RedirectAction | CustomAction;\n\n/**\n * Array of valid ErrorXOptions field names.\n * This serves as the single source of truth for both runtime validation and type checking.\n *\n * @internal\n */\nexport const ERROR_X_OPTION_FIELDS = [\n 'message',\n 'name',\n 'code',\n 'uiMessage',\n 'cause',\n 'metadata',\n 'actions',\n 'httpStatus',\n 'type',\n] as const;\n\n/**\n * Union type of all valid ErrorXOptions field names.\n *\n * @public\n */\nexport type ErrorXOptionField = (typeof ERROR_X_OPTION_FIELDS)[number];\n\n/**\n * Configuration options for creating an ErrorX instance.\n * All properties are optional with sensible defaults.\n *\n * @remarks\n * **Note on design:** ErrorXOptions is a `type` instead of a `class` to provide maximum flexibility.\n * This allows you to pass plain objects without instantiation:\n *\n * ```typescript\n * // ✅ Works - plain object\n * new ErrorX({ message: 'Error', code: 'ERR' })\n *\n * // ✅ Works - object literal\n * const opts = { message: 'Error' }\n * new ErrorX(opts)\n * ```\n *\n * If ErrorXOptions were a class, you would need to instantiate it:\n *\n * ```typescript\n * // ❌ Would be required with class\n * new ErrorX(new ErrorXOptions({ message: 'Error' }))\n * ```\n *\n * The current `type` approach provides better ergonomics while still maintaining type safety.\n * The `isErrorXOptions()` validation method ensures only valid option objects are accepted.\n *\n * @public\n */\nexport type ErrorXOptions = {\n /** Technical error message (default: 'An error occurred') */\n message?: string;\n /** Error type/name (default: 'Error') */\n name?: string;\n /** Error identifier code (auto-generated from name if not provided) */\n code?: string | number;\n /** User-friendly message for UI display (default: undefined) */\n uiMessage?: string | undefined;\n /** Original error that caused this error (preserves error chain) */\n cause?: Error | unknown;\n /** Additional context and debugging information (default: undefined) */\n metadata?: ErrorMetadata;\n /** Actions to perform when this error occurs (default: undefined) */\n actions?: ErrorAction[];\n /** HTTP status code (100-599) for HTTP-related errors (default: undefined) */\n httpStatus?: number | undefined;\n /** Error type for categorization */\n type?: string | undefined;\n};\n\n/**\n * JSON-serializable representation of an ErrorX instance.\n * Used for transmitting errors over network or storing in databases.\n *\n * @example\n * ```typescript\n * const serialized: SerializableError = {\n * name: 'AuthError',\n * message: 'Authentication failed.',\n * code: 'AUTH_FAILED',\n * uiMessage: 'Please check your credentials',\n * stack: 'Error: Authentication failed.\\n at login (auth.ts:42:15)',\n * metadata: { userId: 123, loginAttempt: 3 },\n * timestamp: '2024-01-15T10:30:45.123Z',\n * actions: [\n * { action: 'logout', payload: { clearStorage: true } }\n * ],\n * cause: {\n * name: 'NetworkError',\n * message: 'Request timeout.',\n * code: 'NETWORK_TIMEOUT',\n * // ... other error properties\n * }\n * }\n * ```\n *\n * @public\n */\nexport type SerializableError = {\n /** Error type/name */\n name: string;\n /** Technical error message */\n message: string;\n /** Error identifier code */\n code: string;\n /** User-friendly message for UI display */\n uiMessage: string | undefined;\n /** Stack trace (optional) */\n stack?: string;\n /** Additional context and debugging information */\n metadata: ErrorMetadata | undefined;\n /** ISO timestamp when error was created */\n timestamp: string;\n /** Actions to perform when this error occurs */\n actions?: ErrorAction[];\n /** Serialized cause error (for error chaining) */\n cause?: SerializableError;\n /** HTTP status code for HTTP-related errors */\n httpStatus?: number;\n /** Error type for categorization */\n type?: string;\n};\n","import safeStringify from 'safe-stringify';\nimport type {\n ErrorAction,\n ErrorMetadata,\n ErrorXOptionField,\n ErrorXOptions,\n SerializableError,\n} from './types.js';\nimport { ERROR_X_OPTION_FIELDS } from './types.js';\n\n// Use the single source of truth for accepted fields\nconst acceptedFields = new Set(ERROR_X_OPTION_FIELDS);\n\n/**\n * Enhanced Error class with rich metadata, type-safe error handling, and intelligent error conversion.\n *\n * @example\n * ```typescript\n * // Basic usage\n * const error = new ErrorX({ message: 'Database connection failed' })\n *\n * // With full options\n * const error = new ErrorX({\n * message: 'User authentication failed',\n * name: 'AuthError',\n * code: 'AUTH_FAILED',\n * uiMessage: 'Please check your credentials',\n * metadata: { userId: 123, loginAttempt: 3 }\n * })\n * ```\n *\n * @public\n */\nexport class ErrorX extends Error {\n /** Error identifier code, auto-generated from name if not provided */\n public readonly code: string;\n /** User-friendly message suitable for display in UI */\n public readonly uiMessage: string | undefined;\n /** Additional context and metadata associated with the error */\n public readonly metadata: ErrorMetadata | undefined;\n /** Timestamp when the error was created */\n public readonly timestamp: Date;\n /** Error actions for UI behavior and handling */\n public readonly actions: ErrorAction[] | undefined;\n /** HTTP status code (100-599) for HTTP-related errors */\n public readonly httpStatus: number | undefined;\n /** Error type for categorization */\n public readonly type: string | undefined;\n\n /**\n * Creates a new ErrorX instance with enhanced error handling capabilities.\n *\n * @param messageOrOptions - Error message string, ErrorXOptions object, or any value to convert to ErrorX\n * @param additionalOptions - Additional options when first parameter is a string (optional)\n *\n * @example\n * ```typescript\n * // Create with string message only\n * const error1 = new ErrorX('Database query failed')\n *\n * // Create with string message and additional options\n * const error2 = new ErrorX('Database query failed', {\n * name: 'DatabaseError',\n * code: 'DB_QUERY_FAILED',\n * uiMessage: 'Unable to load data. Please try again.',\n * metadata: { query: 'SELECT * FROM users', timeout: 5000 }\n * })\n *\n * // Create with options object (backward compatible)\n * const error3 = new ErrorX({\n * message: 'Database query failed',\n * name: 'DatabaseError',\n * code: 'DB_QUERY_FAILED',\n * actions: [\n * { action: 'notify', payload: { targets: [HandlingTargets.TOAST] } }\n * ]\n * })\n *\n * // Create with unknown input (smart conversion)\n * const apiError = { message: 'User not found', code: 404 }\n * const error4 = new ErrorX(apiError)\n *\n * // Create with no options (uses defaults)\n * const error5 = new ErrorX()\n * ```\n */\n constructor(\n messageOrOptions?: string | ErrorXOptions | unknown,\n additionalOptions?: Partial<ErrorXOptions>\n ) {\n let options: ErrorXOptions = {};\n\n // Handle different input types\n if (typeof messageOrOptions === 'string') {\n // String message provided - merge with additional options\n options = {\n message: messageOrOptions,\n ...additionalOptions,\n };\n } else if (ErrorX.isErrorXOptions(messageOrOptions)) {\n // Valid ErrorXOptions object - use directly\n options = messageOrOptions;\n } else if (messageOrOptions != null) {\n // Unknown input - convert using smart conversion\n options = ErrorX.convertUnknownToOptions(messageOrOptions);\n }\n // else: undefined/null - use empty options object\n\n const formattedMessage = ErrorX.formatMessage(options.message);\n super(formattedMessage, { cause: options.cause });\n\n this.name = options.name ?? ErrorX.getDefaultName();\n this.code =\n options.code != null ? String(options.code) : ErrorX.generateDefaultCode(options.name);\n this.uiMessage = options.uiMessage;\n this.metadata = options.metadata;\n this.actions = options.actions;\n this.httpStatus = ErrorX.validateHttpStatus(options.httpStatus);\n this.type = ErrorX.validateType(options.type);\n this.timestamp = new Date();\n\n // Handle stack trace preservation\n if (options.cause instanceof Error) {\n this.stack = ErrorX.preserveOriginalStack(options.cause, this);\n } else {\n // Node.js specific stack trace capture for clean stack\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n }\n // Clean the stack to remove ErrorX constructor noise\n this.stack = ErrorX.cleanStack(this.stack);\n }\n }\n\n /**\n * Returns the default error name.\n * @returns Default error name 'Error'\n */\n private static getDefaultName(): string {\n return 'Error';\n }\n\n /**\n * Validates HTTP status code to ensure it's within valid range (100-599)\n *\n * @param status - Status code to validate\n * @returns Valid status code or undefined if invalid/not provided\n */\n private static validateHttpStatus(status?: number): number | undefined {\n if (status === undefined || status === null) {\n return undefined;\n }\n\n const statusNum = Number(status);\n\n // Validate status code is a number and within valid HTTP range\n if (Number.isNaN(statusNum) || statusNum < 100 || statusNum > 599) {\n return undefined;\n }\n\n return Math.floor(statusNum);\n }\n\n /**\n * Validates and normalizes the type field\n *\n * @param type - Type value to validate\n * @returns Validated type string or undefined if invalid/empty\n */\n private static validateType(type?: string): string | undefined {\n if (type === undefined || type === null) {\n return undefined;\n }\n\n const typeStr = String(type).trim();\n\n // Return undefined for empty strings\n if (typeStr === '') {\n return undefined;\n }\n\n return typeStr;\n }\n\n /**\n * Validates if an object is a valid ErrorXOptions object.\n * Checks that the object only contains accepted ErrorXOptions fields.\n *\n * @param value - Value to check\n * @returns True if value is a valid ErrorXOptions object\n */\n public static isErrorXOptions(value: unknown): value is ErrorXOptions {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n\n // If it's an Error instance, it's not ErrorXOptions\n if (value instanceof Error) {\n return false;\n }\n\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n\n // Empty object is valid ErrorXOptions\n if (keys.length === 0) {\n return true;\n }\n\n // Check if all keys are in the accepted fields\n // If there's any key that's not accepted, it's not ErrorXOptions\n return keys.every((key) => acceptedFields.has(key as ErrorXOptionField));\n }\n\n /**\n * Generates a default error code from the error name.\n * Converts camelCase/PascalCase names to UPPER_SNAKE_CASE format.\n *\n * @param name - Error name to convert\n * @returns Generated error code in UPPER_SNAKE_CASE format\n *\n * @example\n * ```typescript\n * generateDefaultCode('DatabaseError') // 'DATABASE_ERROR'\n * generateDefaultCode('userAuthError') // 'USER_AUTH_ERROR'\n * generateDefaultCode('API Timeout') // 'API_TIMEOUT'\n * ```\n */\n private static generateDefaultCode(name?: string): string {\n if (!name) return 'ERROR';\n\n // Convert camelCase/PascalCase to UPPER_SNAKE_CASE\n return name\n .replace(/([a-z])([A-Z])/g, '$1_$2') // Add underscore between camelCase\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .replace(/[^a-zA-Z0-9_]/g, '') // Remove special characters\n .toUpperCase();\n }\n\n /**\n * Preserves the original error's stack trace while updating the error message.\n * Combines the new error's message with the original error's stack trace.\n *\n * @param originalError - The original error whose stack to preserve\n * @param newError - The new error whose message to use\n * @returns Combined stack trace with new error message and original stack\n */\n private static preserveOriginalStack(originalError: Error, newError: Error): string {\n if (!originalError.stack) return newError.stack || '';\n\n // Get the new error's first line (error name + message)\n const newErrorFirstLine = `${newError.name}: ${newError.message}`;\n\n // Get original stack lines (skip the first line which is the original error message)\n const originalStackLines = originalError.stack.split('\\n');\n const originalStackTrace = originalStackLines.slice(1);\n\n // Combine new error message with original stack trace\n return [newErrorFirstLine, ...originalStackTrace].join('\\n');\n }\n\n /**\n * Cleans the stack trace by removing ErrorX internal method calls.\n * This provides cleaner stack traces that focus on user code.\n *\n * @param stack - Raw stack trace to clean\n * @returns Cleaned stack trace without ErrorX internal calls\n */\n private static cleanStack(stack?: string): string {\n if (!stack) return '';\n\n const stackLines = stack.split('\\n');\n const cleanedLines: string[] = [];\n\n for (const line of stackLines) {\n // Skip lines that contain ErrorX constructor or internal methods\n if (\n line.includes('new ErrorX') ||\n line.includes('ErrorX.constructor') ||\n line.includes('ErrorX.toErrorX') ||\n line.includes('error-x/dist/') ||\n line.includes('error-x/src/error.ts')\n ) {\n continue;\n }\n cleanedLines.push(line);\n }\n\n return cleanedLines.join('\\n');\n }\n\n /**\n * Processes an error's stack trace to trim it after a specified delimiter.\n * Useful for removing irrelevant stack frames before a specific function.\n *\n * @param error - Error whose stack to process\n * @param delimiter - String to search for in stack lines\n * @returns Processed stack trace starting after the delimiter\n *\n * @example\n * ```typescript\n * const processed = ErrorX.processErrorStack(error, 'my-app-entry')\n * // Returns stack trace starting after the line containing 'my-app-entry'\n * ```\n */\n private static processErrorStack(error: Error, delimiter: string): string {\n let stack = error.stack ?? '';\n const stackLines = stack.split('\\n');\n\n // Find the index of the first line containing the delimiter\n const delimiterIndex = stackLines.findIndex((line) => line.includes(delimiter));\n\n // If the delimiter is found, return all lines after it\n if (delimiterIndex !== -1) {\n stack = stackLines.slice(delimiterIndex + 1).join('\\n');\n }\n return stack;\n }\n\n /**\n * Formats error messages with proper capitalization and punctuation.\n * Ensures consistent message formatting across all ErrorX instances.\n *\n * @param message - Raw error message to format (optional)\n * @returns Formatted message with proper capitalization and punctuation\n *\n * @example\n * ```typescript\n * formatMessage('database connection failed') // 'Database connection failed.'\n * formatMessage('user not found. please check credentials') // 'User not found. Please check credentials.'\n * formatMessage() // 'An error occurred'\n * ```\n */\n private static formatMessage(message?: string): string {\n if (!message || typeof message !== 'string' || !message.trim()) {\n return 'An error occurred';\n }\n\n // Split by sentences and capitalize each\n let formatted = message\n .split('. ')\n .map((sentence) => {\n const trimmed = sentence.trim();\n if (!trimmed) return trimmed;\n return trimmed.charAt(0).toUpperCase() + trimmed.slice(1);\n })\n .join('. ');\n\n // Add period at the end if it doesn't have proper punctuation\n const endsWithPunctuation = /[.!?)\\]]$/.test(formatted);\n if (!endsWithPunctuation) {\n formatted = `${formatted}.`;\n }\n\n return formatted;\n }\n\n /**\n * Creates a new ErrorX instance with additional metadata merged with existing metadata.\n * The original error properties are preserved while extending the metadata.\n *\n * @param additionalMetadata - Additional metadata to merge with existing metadata\n * @returns New ErrorX instance with merged metadata\n *\n * @example\n * ```typescript\n * const error = new ErrorX({\n * message: 'API request failed',\n * metadata: { endpoint: '/users' }\n * })\n *\n * const enrichedError = error.withMetadata({\n * retryCount: 3,\n * userId: 123\n * })\n * // Result: metadata = { endpoint: '/users', retryCount: 3, userId: 123 }\n * ```\n */\n public withMetadata(additionalMetadata: ErrorMetadata): ErrorX {\n const options: ErrorXOptions = {\n message: this.message,\n name: this.name,\n code: this.code,\n uiMessage: this.uiMessage,\n cause: this.cause,\n metadata: { ...(this.metadata ?? {}), ...additionalMetadata },\n httpStatus: this.httpStatus,\n type: this.type,\n };\n if (this.actions) {\n options.actions = this.actions;\n }\n const newError = new ErrorX(options);\n\n // Preserve the original stack trace\n if (this.stack) {\n newError.stack = this.stack;\n }\n return newError;\n }\n\n /**\n * Type guard that checks if a value is an ErrorX instance.\n *\n * @param value - Value to check\n * @returns True if value is an ErrorX instance, false otherwise\n *\n * @example\n * ```typescript\n * try {\n * // some operation\n * } catch (error) {\n * if (ErrorX.isErrorX(error)) {\n * // TypeScript knows error is ErrorX\n * console.log(error.code, error.metadata)\n * }\n * }\n * ```\n */\n public static isErrorX(value: unknown): value is ErrorX {\n return value instanceof ErrorX;\n }\n\n /**\n * Converts unknown input into ErrorXOptions with intelligent property extraction.\n * Handles strings, regular Error objects, API response objects, and unknown values.\n * This is a private helper method used by both the constructor and toErrorX.\n *\n * @param error - Value to convert to ErrorXOptions\n * @returns ErrorXOptions object with extracted properties\n * @internal\n */\n private static convertUnknownToOptions(error: unknown): ErrorXOptions {\n let name = '';\n let message = '';\n let code = '';\n let uiMessage = '';\n let cause: unknown;\n let metadata: ErrorMetadata = {};\n let actions: ErrorAction[] | undefined;\n let httpStatus: number | undefined;\n let type: string | undefined;\n\n if (error) {\n if (typeof error === 'string') {\n message = error;\n metadata = { originalError: error };\n } else if (error instanceof Error) {\n name = error.name;\n message = error.message;\n cause = error.cause;\n } else if (typeof error === 'object') {\n // Extract name from various properties\n if ('name' in error && error.name) name = String(error.name);\n else if ('title' in error && error.title) name = String(error.title);\n\n // Extract message from various properties\n if ('message' in error && error.message) message = String(error.message);\n else if ('details' in error && error.details) message = String(error.details);\n else if ('text' in error && error.text) message = String(error.text);\n else if ('info' in error && error.info) message = String(error.info);\n else if ('statusText' in error && error.statusText) message = String(error.statusText);\n else if ('error' in error && error.error) message = String(error.error);\n else if ('errorMessage' in error && error.errorMessage)\n message = String(error.errorMessage);\n\n // Extract code\n if ('code' in error && error.code) code = String(error.code);\n\n // Extract UI message\n if ('uiMessage' in error && error.uiMessage) uiMessage = String(error.uiMessage);\n else if ('userMessage' in error && error.userMessage) uiMessage = String(error.userMessage);\n\n // Extract actions\n if ('actions' in error && Array.isArray(error.actions)) {\n actions = error.actions as ErrorAction[];\n }\n\n let _httpStatus: unknown;\n // Extract HTTP status\n if ('httpStatus' in error) {\n _httpStatus = error.httpStatus;\n } else if ('status' in error) {\n _httpStatus = error.status;\n } else if ('statusCode' in error) {\n _httpStatus = error.statusCode;\n }\n if (_httpStatus !== undefined && _httpStatus !== null) {\n const num = typeof _httpStatus === 'number' ? _httpStatus : Number(_httpStatus);\n httpStatus = ErrorX.validateHttpStatus(num);\n }\n\n // Extract type\n if ('type' in error && error.type) {\n type = ErrorX.validateType(String(error.type));\n }\n\n // Store original object as metadata if it has additional properties\n metadata = { originalError: error };\n }\n }\n\n const options: ErrorXOptions = {\n message: message || 'Unknown error occurred',\n };\n\n if (name) options.name = name;\n if (code) options.code = code;\n if (uiMessage) options.uiMessage = uiMessage;\n if (cause) options.cause = cause;\n if (Object.keys(metadata).length > 0) options.metadata = metadata;\n if (actions && actions.length > 0) options.actions = actions;\n if (httpStatus) options.httpStatus = httpStatus;\n if (type) options.type = type;\n\n return options;\n }\n\n /**\n * Converts unknown input into an ErrorX instance with intelligent property extraction.\n * Handles strings, regular Error objects, API response objects, and unknown values.\n *\n * @param error - Value to convert to ErrorX\n * @returns ErrorX instance with extracted properties\n *\n * @example\n * ```typescript\n * // Convert string error\n * const error1 = ErrorX.toErrorX('Something went wrong')\n *\n * // Convert regular Error\n * const error2 = ErrorX.toErrorX(new Error('Database failed'))\n *\n * // Convert API response object\n * const apiError = {\n * message: 'User not found',\n * code: 'USER_404',\n * statusText: 'Not Found'\n * }\n * const error3 = ErrorX.toErrorX(apiError)\n * ```\n */\n public static toErrorX(error: unknown): ErrorX {\n if (error instanceof ErrorX) return error;\n\n const options = ErrorX.convertUnknownToOptions(error);\n return new ErrorX(options);\n }\n\n /**\n * Public wrapper for processing error stack traces with delimiter.\n * Delegates to the private processErrorStack method for implementation.\n *\n * @param error - Error whose stack to process\n * @param delimiter - String to search for in stack lines\n * @returns Processed stack trace starting after the delimiter\n *\n * @example\n * ```typescript\n * const error = new Error('Something failed')\n * const cleanStack = ErrorX.processStack(error, 'my-app-entry')\n * // Returns stack trace starting after the line containing 'my-app-entry'\n * ```\n */\n public static processStack(error: Error, delimiter: string): string {\n return ErrorX.processErrorStack(error, delimiter);\n }\n\n /**\n * Creates a new ErrorX instance with cleaned stack trace using the specified delimiter.\n * Returns the same instance if no delimiter is provided or no stack is available.\n *\n * @param delimiter - Optional string to search for in stack lines\n * @returns New ErrorX instance with cleaned stack trace, or the same instance if no cleaning needed\n *\n * @example\n * ```typescript\n * const error = new ErrorX({ message: 'Database error' })\n * const cleanedError = error.cleanStackTrace('database-layer')\n * // Returns new ErrorX with stack trace starting after 'database-layer'\n * ```\n */\n public cleanStackTrace(delimiter?: string): ErrorX {\n if (delimiter && this.stack) {\n const options: ErrorXOptions = {\n message: this.message,\n name: this.name,\n code: this.code,\n uiMessage: this.uiMessage,\n cause: this.cause,\n httpStatus: this.httpStatus,\n type: this.type,\n };\n if (this.metadata !== undefined) {\n options.metadata = this.metadata;\n }\n if (this.actions) {\n options.actions = this.actions;\n }\n const newError = new ErrorX(options);\n newError.stack = ErrorX.processErrorStack(this, delimiter);\n return newError;\n }\n return this;\n }\n\n /**\n * Converts the ErrorX instance to a detailed string representation.\n * Includes error name, message, code, timestamp, metadata, and stack trace.\n *\n * @returns Formatted string representation of the error\n *\n * @example\n * ```typescript\n * const error = new ErrorX({\n * message: 'Database connection failed',\n * name: 'DatabaseError',\n * code: 'DB_CONN_FAILED',\n * metadata: { host: 'localhost', port: 5432 }\n * })\n *\n * console.log(error.toString())\n * // Output: \"DatabaseError: Database connection failed. [DB_CONN_FAILED] (2024-01-15T10:30:45.123Z) metadata: {...}\"\n * ```\n */\n public toString(): string {\n const parts = [];\n\n // Add name and message\n parts.push(`${this.name}: ${this.message}`);\n\n // Add code if different from default\n if (this.code && this.code !== 'ERROR') {\n parts.push(`[${this.code}]`);\n }\n\n // Add timestamp\n parts.push(`(${this.timestamp.toISOString()})`);\n\n // Add metadata if present\n if (this.metadata && Object.keys(this.metadata).length > 0) {\n const metadataStr = safeStringify(this.metadata);\n parts.push(`metadata: ${metadataStr}`);\n }\n\n let result = parts.join(' ');\n\n // Add stack trace if available\n if (this.stack) {\n result += `\\n${this.stack}`;\n }\n\n return result;\n }\n\n /**\n * Serializes the ErrorX instance to a JSON-compatible object.\n * Recursively serializes the error chain and handles ErrorX or regular Error causes.\n *\n * @returns Serializable object representation of the error\n *\n * @example\n * ```typescript\n * const error = new ErrorX({\n * message: 'API request failed',\n * code: 'API_ERROR',\n * metadata: { endpoint: '/users', status: 500 }\n * })\n *\n * const serialized = error.toJSON()\n * // Can be safely passed to JSON.stringify() or sent over network\n * ```\n */\n public toJSON(): SerializableError {\n // Handle metadata serialization with circular reference protection\n\n // Use safe stringify to parse the metadata and remove circular references\n const safeMetadata: ErrorMetadata | undefined = this.metadata\n ? JSON.parse(safeStringify(this.metadata))\n : undefined;\n\n const serialized: SerializableError = {\n name: this.name,\n message: this.message,\n code: this.code,\n uiMessage: this.uiMessage,\n metadata: safeMetadata,\n timestamp: this.timestamp.toISOString(),\n };\n\n // Include actions if present\n if (this.actions && this.actions.length > 0) {\n // Use safe stringify to parse the actions and remove circular references\n const stringified = safeStringify(this.actions);\n serialized.actions = JSON.parse(stringified);\n }\n\n // Include httpStatus if present\n if (this.httpStatus !== undefined) {\n serialized.httpStatus = this.httpStatus;\n }\n\n // Include type if present\n if (this.type !== undefined) {\n serialized.type = this.type;\n }\n\n // Include stack if available\n if (this.stack) {\n serialized.stack = this.stack;\n }\n\n // Recursively serialize cause if it's an ErrorX\n if (this.cause) {\n if (this.cause instanceof ErrorX) {\n serialized.cause = this.cause.toJSON();\n } else if (this.cause instanceof Error) {\n const causeData: SerializableError = {\n name: this.cause.name,\n message: this.cause.message,\n code: 'ERROR',\n uiMessage: undefined,\n metadata: {},\n timestamp: new Date().toISOString(),\n };\n if (this.cause.stack) {\n causeData.stack = this.cause.stack;\n }\n serialized.cause = causeData;\n }\n }\n\n return serialized;\n }\n\n /**\n * Deserializes a JSON object back into an ErrorX instance.\n * Recursively reconstructs the error chain and restores all properties.\n *\n * @param serialized - Serialized error object to deserialize\n * @returns Reconstructed ErrorX instance with restored properties\n *\n * @example\n * ```typescript\n * const serializedError = {\n * name: 'DatabaseError',\n * message: 'Connection failed.',\n * code: 'DB_CONN_FAILED',\n * uiMessage: 'Database is temporarily unavailable',\n * metadata: { host: 'localhost' },\n * timestamp: '2024-01-15T10:30:45.123Z'\n * }\n *\n * const error = ErrorX.fromJSON(serializedError)\n * // Fully restored ErrorX instance with all properties\n * ```\n */\n public static fromJSON(serialized: SerializableError): ErrorX {\n const options: ErrorXOptions = {\n message: serialized.message,\n name: serialized.name,\n code: serialized.code,\n uiMessage: serialized.uiMessage,\n httpStatus: serialized.httpStatus,\n type: serialized.type,\n };\n if (serialized.metadata !== undefined) {\n options.metadata = serialized.metadata;\n }\n\n if (serialized.actions && serialized.actions.length > 0) {\n options.actions = serialized.actions;\n }\n\n const error = new ErrorX(options);\n\n // Restore stack and timestamp\n if (serialized.stack) {\n error.stack = serialized.stack;\n }\n // Use Object.defineProperty to set readonly properties\n Object.defineProperty(error, 'timestamp', {\n value: new Date(serialized.timestamp),\n writable: false,\n });\n\n // Restore cause chain\n if (serialized.cause) {\n Object.defineProperty(error, 'cause', {\n value: ErrorX.fromJSON(serialized.cause),\n writable: false,\n });\n }\n\n return error;\n }\n}\n","import type { ErrorXOptions } from './types.js';\n\n/**\n * Preset configurations for common errors organized by category.\n * Each preset includes httpStatus (for HTTP errors), code, name, message, and uiMessage.\n *\n * @example\n * ```typescript\n * import { ErrorX, ErrorPresets } from '@bombillazo/error-x'\n *\n * // Use preset directly\n * const error = new ErrorX(ErrorPresets.HTTP.NOT_FOUND)\n *\n * // Override preset values\n * const error = new ErrorX({\n * ...ErrorPresets.HTTP.NOT_FOUND,\n * message: 'User not found',\n * metadata: { userId: 123 }\n * })\n *\n * // Use with additional options\n * const error = new ErrorX({\n * ...ErrorPresets.HTTP.UNAUTHORIZED,\n * actions: [{ action: 'redirect', payload: { redirectURL: '/login' } }]\n * })\n * ```\n *\n * @public\n */\nexport const PRESETS = {\n /**\n * HTTP error presets for common HTTP status codes.\n * Includes both 4xx client errors and 5xx server errors.\n */\n HTTP: {\n // 4xx Client Errors\n BAD_REQUEST: {\n httpStatus: 400,\n code: 'BAD_REQUEST',\n name: 'BadRequestError',\n message: 'Bad request',\n uiMessage: 'The request could not be processed. Please check your input and try again.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n UNAUTHORIZED: {\n httpStatus: 401,\n code: 'UNAUTHORIZED',\n name: 'UnauthorizedError',\n message: 'Unauthorized',\n uiMessage: 'Authentication required. Please log in to continue.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n PAYMENT_REQUIRED: {\n httpStatus: 402,\n code: 'PAYMENT_REQUIRED',\n name: 'PaymentRequiredError',\n message: 'Payment required',\n uiMessage: 'Payment is required to access this resource.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n FORBIDDEN: {\n httpStatus: 403,\n code: 'FORBIDDEN',\n name: 'ForbiddenError',\n message: 'Forbidden',\n uiMessage: 'You do not have permission to access this resource.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n NOT_FOUND: {\n httpStatus: 404,\n code: 'NOT_FOUND',\n name: 'NotFoundError',\n message: 'Not found',\n uiMessage: 'The requested resource could not be found.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n METHOD_NOT_ALLOWED: {\n httpStatus: 405,\n code: 'METHOD_NOT_ALLOWED',\n name: 'MethodNotAllowedError',\n message: 'Method not allowed',\n uiMessage: 'This action is not allowed for the requested resource.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n NOT_ACCEPTABLE: {\n httpStatus: 406,\n code: 'NOT_ACCEPTABLE',\n name: 'NotAcceptableError',\n message: 'Not acceptable',\n uiMessage: 'The requested format is not supported.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n PROXY_AUTHENTICATION_REQUIRED: {\n httpStatus: 407,\n code: 'PROXY_AUTHENTICATION_REQUIRED',\n name: 'ProxyAuthenticationRequiredError',\n message: 'Proxy authentication required',\n uiMessage: 'Proxy authentication is required to access this resource.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n REQUEST_TIMEOUT: {\n httpStatus: 408,\n code: 'REQUEST_TIMEOUT',\n name: 'RequestTimeoutError',\n message: 'Request timeout',\n uiMessage: 'The request took too long to complete. Please try again.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n CONFLICT: {\n httpStatus: 409,\n code: 'CONFLICT',\n name: 'ConflictError',\n message: 'Conflict',\n uiMessage: 'The request conflicts with the current state. Please refresh and try again.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n GONE: {\n httpStatus: 410,\n code: 'GONE',\n name: 'GoneError',\n message: 'Gone',\n uiMessage: 'This resource is no longer available.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n LENGTH_REQUIRED: {\n httpStatus: 411,\n code: 'LENGTH_REQUIRED',\n name: 'LengthRequiredError',\n message: 'Length required',\n uiMessage: 'The request is missing required length information.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n PRECONDITION_FAILED: {\n httpStatus: 412,\n code: 'PRECONDITION_FAILED',\n name: 'PreconditionFailedError',\n message: 'Precondition failed',\n uiMessage: 'A required condition was not met. Please try again.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n PAYLOAD_TOO_LARGE: {\n httpStatus: 413,\n code: 'PAYLOAD_TOO_LARGE',\n name: 'PayloadTooLargeError',\n message: 'Payload too large',\n uiMessage: 'The request is too large. Please reduce the size and try again.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n URI_TOO_LONG: {\n httpStatus: 414,\n code: 'URI_TOO_LONG',\n name: 'URITooLongError',\n message: 'URI too long',\n uiMessage: 'The request URL is too long.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n UNSUPPORTED_MEDIA_TYPE: {\n httpStatus: 415,\n code: 'UNSUPPORTED_MEDIA_TYPE',\n name: 'UnsupportedMediaTypeError',\n message: 'Unsupported media type',\n uiMessage: 'The file type is not supported.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n RANGE_NOT_SATISFIABLE: {\n httpStatus: 416,\n code: 'RANGE_NOT_SATISFIABLE',\n name: 'RangeNotSatisfiableError',\n message: 'Range not satisfiable',\n uiMessage: 'The requested range cannot be satisfied.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n EXPECTATION_FAILED: {\n httpStatus: 417,\n code: 'EXPECTATION_FAILED',\n name: 'ExpectationFailedError',\n message: 'Expectation failed',\n uiMessage: 'The server cannot meet the requirements of the request.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n IM_A_TEAPOT: {\n httpStatus: 418,\n code: 'IM_A_TEAPOT',\n name: 'ImATeapotError',\n message: \"I'm a teapot\",\n uiMessage: \"I'm a teapot and cannot brew coffee.\",\n type: 'http',\n } satisfies ErrorXOptions,\n\n UNPROCESSABLE_ENTITY: {\n httpStatus: 422,\n code: 'UNPROCESSABLE_ENTITY',\n name: 'UnprocessableEntityError',\n message: 'Unprocessable entity',\n uiMessage: 'The request contains invalid data. Please check your input.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n LOCKED: {\n httpStatus: 423,\n code: 'LOCKED',\n name: 'LockedError',\n message: 'Locked',\n uiMessage: 'This resource is locked and cannot be modified.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n FAILED_DEPENDENCY: {\n httpStatus: 424,\n code: 'FAILED_DEPENDENCY',\n name: 'FailedDependencyError',\n message: 'Failed dependency',\n uiMessage: 'The request failed due to a dependency error.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n TOO_EARLY: {\n httpStatus: 425,\n code: 'TOO_EARLY',\n name: 'TooEarlyError',\n message: 'Too early',\n uiMessage: 'The request was sent too early. Please try again later.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n UPGRADE_REQUIRED: {\n httpStatus: 426,\n code: 'UPGRADE_REQUIRED',\n name: 'UpgradeRequiredError',\n message: 'Upgrade required',\n uiMessage: 'Please upgrade to continue using this service.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n PRECONDITION_REQUIRED: {\n httpStatus: 428,\n code: 'PRECONDITION_REQUIRED',\n name: 'PreconditionRequiredError',\n message: 'Precondition required',\n uiMessage: 'Required conditions are missing from the request.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n TOO_MANY_REQUESTS: {\n httpStatus: 429,\n code: 'TOO_MANY_REQUESTS',\n name: 'TooManyRequestsError',\n message: 'Too many requests',\n uiMessage: 'You have made too many requests. Please wait and try again.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n REQUEST_HEADER_FIELDS_TOO_LARGE: {\n httpStatus: 431,\n code: 'REQUEST_HEADER_FIELDS_TOO_LARGE',\n name: 'RequestHeaderFieldsTooLargeError',\n message: 'Request header fields too large',\n uiMessage: 'The request headers are too large.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n UNAVAILABLE_FOR_LEGAL_REASONS: {\n httpStatus: 451,\n code: 'UNAVAILABLE_FOR_LEGAL_REASONS',\n name: 'UnavailableForLegalReasonsError',\n message: 'Unavailable for legal reasons',\n uiMessage: 'This content is unavailable for legal reasons.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n // 5xx Server Errors\n INTERNAL_SERVER_ERROR: {\n httpStatus: 500,\n code: 'INTERNAL_SERVER_ERROR',\n name: 'InternalServerError',\n message: 'Internal server error',\n uiMessage: 'An unexpected error occurred. Please try again later.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n NOT_IMPLEMENTED: {\n httpStatus: 501,\n code: 'NOT_IMPLEMENTED',\n name: 'NotImplementedError',\n message: 'Not implemented',\n uiMessage: 'This feature is not yet available.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n BAD_GATEWAY: {\n httpStatus: 502,\n code: 'BAD_GATEWAY',\n name: 'BadGatewayError',\n message: 'Bad gateway',\n uiMessage: 'Unable to connect to the server. Please try again later.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n SERVICE_UNAVAILABLE: {\n httpStatus: 503,\n code: 'SERVICE_UNAVAILABLE',\n name: 'ServiceUnavailableError',\n message: 'Service unavailable',\n uiMessage: 'The service is temporarily unavailable. Please try again later.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n GATEWAY_TIMEOUT: {\n httpStatus: 504,\n code: 'GATEWAY_TIMEOUT',\n name: 'GatewayTimeoutError',\n message: 'Gateway timeout',\n uiMessage: 'The server took too long to respond. Please try again.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n HTTP_VERSION_NOT_SUPPORTED: {\n httpStatus: 505,\n code: 'HTTP_VERSION_NOT_SUPPORTED',\n name: 'HTTPVersionNotSupportedError',\n message: 'HTTP version not supported',\n uiMessage: 'Your browser version is not supported.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n VARIANT_ALSO_NEGOTIATES: {\n httpStatus: 506,\n code: 'VARIANT_ALSO_NEGOTIATES',\n name: 'VariantAlsoNegotiatesError',\n message: 'Variant also negotiates',\n uiMessage: 'The server has an internal configuration error.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n INSUFFICIENT_STORAGE: {\n httpStatus: 507,\n code: 'INSUFFICIENT_STORAGE',\n name: 'InsufficientStorageError',\n message: 'Insufficient storage',\n uiMessage: 'The server has insufficient storage to complete the request.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n LOOP_DETECTED: {\n httpStatus: 508,\n code: 'LOOP_DETECTED',\n name: 'LoopDetectedError',\n message: 'Loop detected',\n uiMessage: 'The server detected an infinite loop.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n NOT_EXTENDED: {\n httpStatus: 510,\n code: 'NOT_EXTENDED',\n name: 'NotExtendedError',\n message: 'Not extended',\n uiMessage: 'Additional extensions are required.',\n type: 'http',\n } satisfies ErrorXOptions,\n\n NETWORK_AUTHENTICATION_REQUIRED: {\n httpStatus: 511,\n code: 'NETWORK_AUTHENTICATION_REQUIRED',\n name: 'NetworkAuthenticationRequiredError',\n message: 'Network authentication required',\n uiMessage: 'Network authentication is required to access this resource.',\n type: 'http',\n } satisfies ErrorXOptions,\n },\n} as const;\n"]}
|