{"version":3,"file":"ErrorUtils.mjs","sources":["../src/ErrorUtils.ts"],"sourcesContent":["/**\n * Error handling utilities and custom error types for better error management.\n *\n * This module provides a comprehensive set of error handling utilities and custom error types\n * for consistent error management across the application. It includes:\n *\n * - Custom error types for different error scenarios\n * - Error validation utilities\n * - Error reporting and logging functionality\n * - Type guards and validation functions\n *\n * @module ErrorUtils\n * @example\n * ```typescript\n * // Using custom error types\n * throw new AuthenticationError(\"Invalid credentials\");\n *\n * // Using validation utilities\n * ErrorUtils.validateEmail(\"user@example.com\");\n *\n * // Using error handling wrappers\n * const safeFunction = ErrorUtils.withErrorHandling(\n *   () => riskyOperation(),\n *   (error) => console.error(error)\n * );\n * ```\n */\n\n// DataDog type declarations\ndeclare global {\n  interface Window {\n    DD_LOGS?: {\n      logger: {\n        error: (message: string, context: Record<string, unknown>) => void;\n      };\n    };\n  }\n}\n\n/**\n * Custom error class for authentication-related errors.\n * @extends Error\n */\nexport class AuthenticationError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"AuthenticationError\";\n  }\n}\n\n/**\n * Custom error class for authorization-related errors.\n * @extends Error\n */\nexport class AuthorizationError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"AuthorizationError\";\n  }\n}\n\n/**\n * Custom error class for network-related errors.\n * @extends Error\n */\nexport class NetworkError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"NetworkError\";\n  }\n}\n\n/**\n * Custom error class for resource not found errors.\n * @extends Error\n */\nexport class NotFoundError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"NotFoundError\";\n  }\n}\n\n/**\n * Custom error class for timeout-related errors.\n * @extends Error\n */\nexport class TimeoutError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"TimeoutError\";\n  }\n}\n\n/**\n * Custom error class for validation-related errors.\n * @extends Error\n */\nexport class ValidationError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"ValidationError\";\n  }\n}\n\n/**\n * Utility object containing error handling and validation functions.\n */\nexport const ErrorUtils = {\n  /**\n   * Captures and reports an error to DataDog.\n   *\n   * @param error - The error to capture and report\n   * @param options - Options for error capture\n   * @param options.log - Whether to log the error to console (default: true)\n   * @param options.tags - Additional tags to add to the error in DataDog\n   * @param options.context - Additional context to add to the error in DataDog\n   *\n   * @example\n   * ```typescript\n   * try {\n   *   // Some risky operation\n   * } catch (error) {\n   *   ErrorUtils.captureError(error, {\n   *     tags: { component: 'UserService' },\n   *     context: { userId: '123' }\n   *   });\n   * }\n   * ```\n   */\n  captureError(\n    error: Error | unknown,\n    options: {\n      log?: boolean;\n      tags?: Record<string, string>;\n      context?: Record<string, unknown>;\n    } = {}\n  ): void {\n    const { log = true, tags = {}, context = {} } = options;\n\n    // Convert unknown errors to Error objects\n    const errorObj = error instanceof Error ? error : new Error(String(error));\n\n    // Add error to DataDog\n    if (typeof window !== \"undefined\" && window.DD_LOGS) {\n      window.DD_LOGS.logger.error(errorObj.message, {\n        error: errorObj,\n        ...context,\n        tags: {\n          error_name: errorObj.name,\n          error_stack: errorObj.stack,\n          ...tags,\n        },\n      });\n    }\n\n    // Log to console if enabled\n    if (log) {\n      console.error(errorObj);\n    }\n  },\n\n  /**\n   * Checks if an error is a specific type of error.\n   *\n   * @param error - The error to check\n   * @param errorType - The type of error to check against\n   * @returns True if the error is of the specified type\n   *\n   * @example\n   * ```typescript\n   * const isAuthError = ErrorUtils.isErrorType(error, AuthenticationError);\n   * ```\n   */\n  isErrorType(\n    error: unknown,\n    errorType: new (message: string) => Error\n  ): boolean {\n    return error instanceof errorType;\n  },\n\n  /**\n   * Validates that a value is a valid array\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid array\n   */\n  validateArray(value: unknown, message: string = \"Invalid array\"): void {\n    if (!Array.isArray(value)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid array length\n   * @param array - Array to validate\n   * @param minLength - Minimum length\n   * @param maxLength - Maximum length\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if array length is invalid\n   */\n  validateArrayLength<T>(\n    array: T[],\n    minLength: number,\n    maxLength: number,\n    message: string = \"Invalid array length\"\n  ): void {\n    if (array.length < minLength || array.length > maxLength) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that an array is not empty\n   * @param array - Array to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if array is empty\n   */\n  validateArrayNotEmpty<T>(array: T[], message: string): void {\n    if (array.length === 0) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid bigint\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid bigint\n   */\n  validateBigInt(value: unknown, message: string = \"Invalid bigint\"): void {\n    if (typeof value !== \"bigint\") {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid boolean\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid boolean\n   */\n  validateBoolean(\n    value: unknown,\n    message: string = \"Invalid boolean value\"\n  ): void {\n    if (typeof value !== \"boolean\") {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid credit card number\n   * @param cardNumber - Credit card number to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if credit card number is invalid\n   */\n  validateCreditCard(\n    cardNumber: string,\n    message: string = \"Invalid credit card number\"\n  ): void {\n    // Remove spaces and dashes\n    const cleanNumber = cardNumber.replace(/[\\s-]/g, \"\");\n\n    // Check if it's a valid number\n    if (!/^\\d+$/.test(cleanNumber)) {\n      throw new ValidationError(message);\n    }\n\n    // Luhn algorithm for credit card validation\n    let sum = 0;\n    let isEven = false;\n\n    for (let i = cleanNumber.length - 1; i >= 0; i--) {\n      let digit = parseInt(cleanNumber.charAt(i));\n\n      if (isEven) {\n        digit *= 2;\n        if (digit > 9) {\n          digit -= 9;\n        }\n      }\n\n      sum += digit;\n      isEven = !isEven;\n    }\n\n    if (sum % 10 !== 0) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid date\n   * @param date - Date to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if date is invalid\n   */\n  validateDate(date: string | Date, message: string = \"Invalid date\"): void {\n    const dateObj = new Date(date);\n    if (isNaN(dateObj.getTime())) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid date instance\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid date instance\n   */\n  validateDateInstance(value: unknown, message: string = \"Invalid date\"): void {\n    if (!(value instanceof Date) || isNaN(value.getTime())) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid date range\n   * @param startDate - Start date\n   * @param endDate - End date\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if date range is invalid\n   */\n  validateDateRange(\n    startDate: Date | string,\n    endDate: Date | string,\n    message: string = \"Invalid date range\"\n  ): void {\n    const start = new Date(startDate);\n    const end = new Date(endDate);\n\n    if (isNaN(start.getTime()) || isNaN(end.getTime())) {\n      throw new ValidationError(message);\n    }\n\n    if (start > end) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid email address\n   * @param email - Email address to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if email is invalid\n   */\n  validateEmail(\n    email: string,\n    message: string = \"Invalid email address\"\n  ): void {\n    const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n    this.validateRegex(email, emailRegex, message);\n  },\n\n  /**\n   * Validates that a value is a valid enum value\n   * @param value - Value to validate\n   * @param enumObj - Enum object to validate against\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid enum value\n   */\n  validateEnum<T extends { [key: string]: string | number }>(\n    value: string | number,\n    enumObj: T,\n    message: string = \"Invalid enum value\"\n  ): void {\n    if (!Object.values(enumObj).includes(value)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid file size\n   * @param size - File size in bytes\n   * @param maxSize - Maximum file size in bytes\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if file size is invalid\n   */\n  validateFileSize(\n    size: number,\n    maxSize: number,\n    message: string = \"File size exceeds maximum allowed size\"\n  ): void {\n    if (size < 0 || size > maxSize) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid file type\n   * @param file - File to validate\n   * @param allowedTypes - Array of allowed MIME types\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if file type is invalid\n   */\n  validateFileType(\n    file: File,\n    allowedTypes: string[],\n    message: string = \"Invalid file type\"\n  ): void {\n    if (!allowedTypes.includes(file.type)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid function\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid function\n   */\n  validateFunction(value: unknown, message: string = \"Invalid function\"): void {\n    if (typeof value !== \"function\") {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid image dimension\n   * @param width - Image width\n   * @param height - Image height\n   * @param maxWidth - Maximum width\n   * @param maxHeight - Maximum height\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if image dimension is invalid\n   */\n  validateImageDimension(\n    width: number,\n    height: number,\n    maxWidth: number,\n    maxHeight: number,\n    message: string = \"Invalid image dimension\"\n  ): void {\n    if (width <= 0 || height <= 0 || width > maxWidth || height > maxHeight) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid integer\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid integer\n   */\n  validateInteger(value: unknown, message: string = \"Invalid integer\"): void {\n    this.validateNumber(value, message);\n    if (!Number.isInteger(value as number)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid IP address\n   * @param ip - IP address to validate\n   * @param version - IP version (4 or 6)\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if IP address is invalid\n   */\n  validateIP(\n    ip: string,\n    version: 4 | 6 = 4,\n    message: string = \"Invalid IP address\"\n  ): void {\n    const patterns = {\n      4: /^(\\d{1,3}\\.){3}\\d{1,3}$/,\n      6: /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/,\n    };\n\n    this.validateRegex(ip, patterns[version], message);\n\n    if (version === 4) {\n      const parts = ip.split(\".\");\n      for (const part of parts) {\n        const num = parseInt(part);\n        if (num < 0 || num > 255) {\n          throw new ValidationError(message);\n        }\n      }\n    }\n  },\n\n  /**\n   * Validates that a value is a valid MAC address\n   * @param mac - MAC address to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if MAC address is invalid\n   */\n  validateMAC(mac: string, message: string = \"Invalid MAC address\"): void {\n    const macRegex = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/;\n    this.validateRegex(mac, macRegex, message);\n  },\n\n  /**\n   * Validates that a value is a valid map\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid map\n   */\n  validateMap(value: unknown, message: string = \"Invalid map\"): void {\n    if (!(value instanceof Map)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid negative number\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid negative number\n   */\n  validateNegativeNumber(\n    value: unknown,\n    message: string = \"Invalid negative number\"\n  ): void {\n    this.validateNumber(value, message);\n    if ((value as number) >= 0) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid non-null\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is null\n   */\n  validateNonNull<T>(\n    value: T | null,\n    message: string = \"Value must not be null\"\n  ): asserts value is T {\n    if (value === null) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid non-null and non-undefined\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is null or undefined\n   */\n  validateNonNullOrUndefined<T>(\n    value: T | null | undefined,\n    message: string = \"Value must not be null or undefined\"\n  ): asserts value is T {\n    if (value === null || value === undefined) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid non-undefined\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is undefined\n   */\n  validateNonUndefined<T>(\n    value: T | undefined,\n    message: string = \"Value must not be undefined\"\n  ): asserts value is T {\n    if (value === undefined) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid null\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not null\n   */\n  validateNull(value: unknown, message: string = \"Value must be null\"): void {\n    if (value !== null) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid null or undefined\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not null or undefined\n   */\n  validateNullOrUndefined(\n    value: unknown,\n    message: string = \"Value must be null or undefined\"\n  ): void {\n    if (value !== null && value !== undefined) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is not null or undefined\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is null or undefined\n   */\n  validateNotNull<T>(\n    value: T | null | undefined,\n    message: string\n  ): asserts value is T {\n    if (value === null || value === undefined) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a string is not empty\n   * @param value - String to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if string is empty\n   */\n  validateNotEmpty(value: string, message: string): void {\n    if (!value.trim()) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid number\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid number\n   */\n  validateNumber(value: unknown, message: string = \"Invalid number\"): void {\n    if (typeof value !== \"number\" || isNaN(value)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid object\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid object\n   */\n  validateObject(value: unknown, message: string = \"Invalid object\"): void {\n    if (typeof value !== \"object\" || value === null) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid object key\n   * @param obj - Object to validate\n   * @param key - Key to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if object key is invalid\n   */\n  validateObjectKey<T extends object>(\n    obj: T,\n    key: keyof T,\n    message: string = \"Invalid object key\"\n  ): void {\n    if (!(key in obj)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid password\n   * @param password - Password to validate\n   * @param options - Password validation options\n   * @throws ValidationError if password doesn't meet requirements\n   */\n  validatePassword(\n    password: string,\n    options: {\n      minLength?: number;\n      requireUppercase?: boolean;\n      requireLowercase?: boolean;\n      requireNumber?: boolean;\n      requireSpecialChar?: boolean;\n      message?: string;\n    } = {}\n  ): void {\n    const {\n      minLength = 8,\n      requireUppercase = true,\n      requireLowercase = true,\n      requireNumber = true,\n      requireSpecialChar = true,\n      message = \"Invalid password\",\n    } = options;\n\n    if (password.length < minLength) {\n      throw new ValidationError(`${message}: Minimum length is ${minLength}`);\n    }\n\n    if (requireUppercase && !/[A-Z]/.test(password)) {\n      throw new ValidationError(`${message}: Must contain uppercase letter`);\n    }\n\n    if (requireLowercase && !/[a-z]/.test(password)) {\n      throw new ValidationError(`${message}: Must contain lowercase letter`);\n    }\n\n    if (requireNumber && !/\\d/.test(password)) {\n      throw new ValidationError(`${message}: Must contain number`);\n    }\n\n    if (requireSpecialChar && !/[!@#$%^&*(),.?\":{}|<>]/.test(password)) {\n      throw new ValidationError(`${message}: Must contain special character`);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid phone number\n   * @param phone - Phone number to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if phone number is invalid\n   */\n  validatePhone(phone: string, message: string = \"Invalid phone number\"): void {\n    const phoneRegex = /^\\+?[\\d\\s-()]{10,}$/;\n    this.validateRegex(phone, phoneRegex, message);\n  },\n\n  /**\n   * Validates that a value is a valid positive number\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid positive number\n   */\n  validatePositiveNumber(\n    value: unknown,\n    message: string = \"Invalid positive number\"\n  ): void {\n    this.validateNumber(value, message);\n    if ((value as number) <= 0) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid postal code\n   * @param postalCode - Postal code to validate\n   * @param country - Country code for postal code format\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if postal code is invalid\n   */\n  validatePostalCode(\n    postalCode: string,\n    country: \"US\" | \"CA\" | \"UK\" = \"US\",\n    message: string = \"Invalid postal code\"\n  ): void {\n    const patterns = {\n      US: /^\\d{5}(-\\d{4})?$/,\n      CA: /^[A-Z]\\d[A-Z] \\d[A-Z]\\d$/,\n      UK: /^[A-Z]{1,2}\\d[A-Z\\d]? ?\\d[A-Z]{2}$/,\n    };\n\n    this.validateRegex(postalCode, patterns[country], message);\n  },\n\n  /**\n   * Validates that a value is a valid promise\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid promise\n   */\n  validatePromise(value: unknown, message: string = \"Invalid promise\"): void {\n    if (!(value instanceof Promise)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a number is within a range\n   * @param value - Number to validate\n   * @param min - Minimum value (inclusive)\n   * @param max - Maximum value (inclusive)\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if number is outside range\n   */\n  validateRange(\n    value: number,\n    min: number,\n    max: number,\n    message: string\n  ): void {\n    if (value < min || value > max) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value matches a regular expression\n   * @param value - String to validate\n   * @param regex - Regular expression to match against\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value doesn't match regex\n   */\n  validateRegex(value: string, regex: RegExp, message: string): void {\n    if (!regex.test(value)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid regular expression\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid regular expression\n   */\n  validateRegExp(\n    value: unknown,\n    message: string = \"Invalid regular expression\"\n  ): void {\n    if (!(value instanceof RegExp)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid set\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid set\n   */\n  validateSet(value: unknown, message: string = \"Invalid set\"): void {\n    if (!(value instanceof Set)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid social security number\n   * @param ssn - Social security number to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if SSN is invalid\n   */\n  validateSSN(ssn: string, message: string = \"Invalid SSN\"): void {\n    const ssnRegex =\n      /^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$/;\n    this.validateRegex(ssn, ssnRegex, message);\n  },\n\n  /**\n   * Validates that a value is a valid string\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid string\n   */\n  validateString(value: unknown, message: string = \"Invalid string\"): void {\n    if (typeof value !== \"string\") {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid symbol\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid symbol\n   */\n  validateSymbol(value: unknown, message: string = \"Invalid symbol\"): void {\n    if (typeof value !== \"symbol\") {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid time string\n   * @param time - Time string to validate\n   * @param format - Time format (12h or 24h)\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if time string is invalid\n   */\n  validateTime(\n    time: string,\n    format: \"12h\" | \"24h\" = \"24h\",\n    message: string = \"Invalid time\"\n  ): void {\n    const patterns = {\n      \"12h\": /^(0?[1-9]|1[0-2]):[0-5][0-9] (AM|PM)$/i,\n      \"24h\": /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/,\n    };\n\n    this.validateRegex(time, patterns[format], message);\n  },\n\n  /**\n   * Validates that a value is a valid undefined\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not undefined\n   */\n  validateUndefined(\n    value: unknown,\n    message: string = \"Value must be undefined\"\n  ): void {\n    if (value !== undefined) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid URL\n   * @param url - URL to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if URL is invalid\n   */\n  validateUrl(url: string, message: string = \"Invalid URL\"): void {\n    try {\n      new URL(url);\n    } catch {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid UUID\n   * @param uuid - UUID to validate\n   * @param version - UUID version (1-5)\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if UUID is invalid\n   * @example\n   * ```typescript\n   * // Validate a random UUID (version 4)\n   * ErrorUtils.validateUUID('123e4567-e89b-12d3-a456-426614174000', 4);\n   *\n   * // Validate a time-based UUID (version 1)\n   * ErrorUtils.validateUUID('123e4567-e89b-12d3-a456-426614174000', 1);\n   * ```\n   */\n  validateUUID(\n    uuid: string,\n    version: 1 | 2 | 3 | 4 | 5 = 4,\n    message: string = \"Invalid UUID\"\n  ): void {\n    // First validate the basic UUID format\n    const uuidRegex =\n      /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n    if (!uuidRegex.test(uuid)) {\n      throw new ValidationError(message);\n    }\n\n    // Extract the version from the UUID\n    const versionHex = uuid.charAt(14);\n    const actualVersion = parseInt(versionHex, 16);\n\n    // Validate the version\n    if (actualVersion !== version) {\n      throw new ValidationError(\n        `${message}: Expected version ${version}, got version ${actualVersion}`\n      );\n    }\n\n    // Get the clock sequence high bits for version-specific validation\n    const clockSeqHi = parseInt(uuid.charAt(19), 16);\n\n    // Additional version-specific validations\n    switch (version) {\n      case 1: // Time-based UUID\n        // Version 1 UUIDs use the current timestamp and node ID\n        // The clock_seq_hi_and_reserved field should have bits 6 and 7 set to 0 and 1\n        if ((clockSeqHi & 0xc0) !== 0x80) {\n          throw new ValidationError(\n            `${message}: Invalid version 1 UUID clock sequence`\n          );\n        }\n        break;\n      case 2: // DCE Security UUID\n        // Version 2 UUIDs are similar to version 1 but include local domain and local ID\n        if ((clockSeqHi & 0xc0) !== 0x80) {\n          throw new ValidationError(\n            `${message}: Invalid version 2 UUID clock sequence`\n          );\n        }\n        break;\n      case 3: // Name-based UUID (MD5)\n        // Version 3 UUIDs use MD5 hashing\n        // The clock_seq_hi_and_reserved field should have bits 6 and 7 set to 1 and 0\n        if ((clockSeqHi & 0xc0) !== 0x40) {\n          throw new ValidationError(\n            `${message}: Invalid version 3 UUID clock sequence`\n          );\n        }\n        break;\n      case 4: // Random UUID\n        // Version 4 UUIDs use random or pseudo-random numbers\n        // The clock_seq_hi_and_reserved field should have bits 6 and 7 set to 1 and 0\n        if ((clockSeqHi & 0xc0) !== 0x40) {\n          throw new ValidationError(\n            `${message}: Invalid version 4 UUID clock sequence`\n          );\n        }\n        break;\n      case 5: // Name-based UUID (SHA-1)\n        // Version 5 UUIDs use SHA-1 hashing\n        // The clock_seq_hi_and_reserved field should have bits 6 and 7 set to 1 and 0\n        if ((clockSeqHi & 0xc0) !== 0x40) {\n          throw new ValidationError(\n            `${message}: Invalid version 5 UUID clock sequence`\n          );\n        }\n        break;\n    }\n  },\n\n  /**\n   * Validates that a value is a valid weak map\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid weak map\n   */\n  validateWeakMap(value: unknown, message: string = \"Invalid weak map\"): void {\n    if (!(value instanceof WeakMap)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Validates that a value is a valid weak set\n   * @param value - Value to validate\n   * @param message - Error message to throw if validation fails\n   * @throws ValidationError if value is not a valid weak set\n   */\n  validateWeakSet(value: unknown, message: string = \"Invalid weak set\"): void {\n    if (!(value instanceof WeakSet)) {\n      throw new ValidationError(message);\n    }\n  },\n\n  /**\n   * Wraps an async function with error handling\n   * @param fn - Async function to wrap\n   * @param errorHandler - Function to handle errors\n   * @returns Wrapped async function\n   */\n  withAsyncErrorHandling<T extends (...args: any[]) => Promise<any>>(\n    fn: T,\n    errorHandler: (error: unknown) => void\n  ): (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>> {\n    return async (...args: Parameters<T>): Promise<Awaited<ReturnType<T>>> => {\n      try {\n        return await fn(...args);\n      } catch (error) {\n        errorHandler(error);\n        throw error;\n      }\n    };\n  },\n\n  /**\n   * Wraps a function with error handling\n   * @param fn - Function to wrap\n   * @param errorHandler - Function to handle errors\n   * @returns Wrapped function\n   */\n  withErrorHandling<T extends (...args: any[]) => any>(\n    fn: T,\n    errorHandler: (error: unknown) => void\n  ): (...args: Parameters<T>) => ReturnType<T> {\n    return (...args: Parameters<T>): ReturnType<T> => {\n      try {\n        return fn(...args);\n      } catch (error) {\n        errorHandler(error);\n        throw error;\n      }\n    };\n  },\n};\n"],"names":[],"mappings":"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"}