{"version":3,"sources":["../src/formatters/validation-error.formatter.ts","../src/formatters/prisma-exception.formatter.ts","../src/formatters/dto-validation.formatter.ts","../src/filter/global-exception.filter.ts","../src/services/exception-handler.service.ts","../src/formatters/http-exception.formatter.ts","../src/formatters/dto-exception.formatter.ts","../src/constants/default-messages.ts","../src/formatters/unknown-exception.formatter.ts","../src/module/exception-handler.module.ts","../src/utils/http-error.formatter.ts"],"sourcesContent":["import { HttpException, ValidationError } from '@nestjs/common';\nimport { ErrorMessage } from '../interfaces/error-message.interface';\n\nexport class ValidationErrorFormatter {\n  formatValidationErrors(exception: HttpException): ErrorMessage[] {\n    const response = exception.getResponse();\n\n    if (typeof response === 'object' && response !== null) {\n      const responseObj = response as Record<string, unknown>;\n\n      if (Array.isArray(responseObj.message)) {\n        const messages = responseObj.message;\n\n        if (messages.length > 0 && typeof messages[0] === 'object' && 'property' in messages[0]) {\n          return this.formatNestedValidationErrors(messages as ValidationError[]);\n        }\n\n        return [\n          {\n            path: 'http_error',\n            message: messages as string[],\n          },\n        ];\n      }\n    }\n\n    return [\n      {\n        path: 'http_error',\n        message: ['Validation failed'],\n      },\n    ];\n  }\n\n  private formatNestedValidationErrors(errors: ValidationError[]): ErrorMessage[] {\n    return errors.map((error) => ({\n      path: error.property,\n      message: error.constraints ? Object.values(error.constraints) : ['Validation error'],\n    }));\n  }\n}\n","import { Injectable } from '@nestjs/common';\nimport { ErrorMessage } from '../interfaces/error-message.interface';\nimport { ExceptionFormatter } from '../interfaces/exception-formatter.interface';\n\ninterface PrismaError {\n  code?: string;\n  meta?: Record<string, unknown>;\n  message?: string;\n  clientVersion?: string;\n}\n\n@Injectable()\nexport class PrismaExceptionFormatter implements ExceptionFormatter {\n  supports(exception: unknown): boolean {\n    if (!exception || typeof exception !== 'object') {\n      return false;\n    }\n\n    const error = exception as Record<string, unknown>;\n    const hasErrorCode = typeof error.code === 'string';\n    const hasClientVersion = typeof error.clientVersion === 'string';\n    const hasMeta = typeof error.meta === 'object';\n\n    return hasErrorCode || (hasClientVersion && hasMeta);\n  }\n\n  format(exception: unknown): ErrorMessage[] {\n    return this.formatError(exception as PrismaError);\n  }\n\n  message(_exception: unknown): string {\n    return 'Database error';\n  }\n\n  formatError(exception: PrismaError): ErrorMessage[] {\n    const code = exception.code;\n\n    if (code) {\n      return this.formatPrismaError(exception);\n    }\n\n    const message = exception.message || '';\n    if (message.includes('validation') || message.includes('Rust') || message.includes('panic')) {\n      return this.formatQueryError(exception);\n    }\n\n    if (message.includes('initialization') || message.includes('connect')) {\n      return this.formatInitializationError(exception);\n    }\n\n    return this.formatUnknownError(exception);\n  }\n\n  private formatPrismaError(exception: PrismaError): ErrorMessage[] {\n    const code = exception.code;\n    const meta = exception.meta;\n\n    switch (code) {\n      case 'P2002': {\n        const target = meta?.target as string[] | undefined;\n        const field = target?.[0] || 'field';\n        return [\n          {\n            path: field,\n            message: [`A record with this ${field} already exists.`],\n          },\n        ];\n      }\n      case 'P2003': {\n        const fieldName = meta?.field_name as string | undefined;\n        return [\n          {\n            path: fieldName || 'field',\n            message: [`The referenced ${fieldName || 'record'} does not exist.`],\n          },\n        ];\n      }\n      case 'P2005': {\n        const fieldName = meta?.field_name as string | undefined;\n        return [\n          {\n            path: fieldName || 'field',\n            message: [`The value for ${fieldName || 'field'} is invalid.`],\n          },\n        ];\n      }\n      case 'P2006': {\n        const fieldName = meta?.field_name as string | undefined;\n        return [\n          {\n            path: fieldName || 'field',\n            message: [`The ${fieldName || 'field'} field is required.`],\n          },\n        ];\n      }\n      case 'P2025': {\n        return [\n          {\n            path: 'record',\n            message: ['The requested record does not exist.'],\n          },\n        ];\n      }\n      default:\n        return [\n          {\n            path: 'database',\n            message: ['Database operation failed.'],\n          },\n        ];\n    }\n  }\n\n  private formatQueryError(exception: PrismaError): ErrorMessage[] {\n    const message = exception.message || '';\n    let errorMessage = 'Invalid database query.';\n\n    if (message.includes('panic')) {\n      errorMessage = 'Database engine panic occurred.';\n    }\n\n    return [\n      {\n        path: 'database',\n        message: [errorMessage],\n      },\n    ];\n  }\n\n  private formatInitializationError(exception: PrismaError): ErrorMessage[] {\n    return [\n      {\n        path: 'database',\n        message: [`Database initialization error: ${exception.message || 'Unknown error'}`],\n      },\n    ];\n  }\n\n  private formatUnknownError(exception: unknown): ErrorMessage[] {\n    return [\n      {\n        path: 'unknown',\n        message:\n          exception instanceof Error\n            ? [exception.message]\n            : ['An unexpected database error occurred.'],\n      },\n    ];\n  }\n}\n","import { Injectable } from '@nestjs/common';\nimport { HttpException } from '@nestjs/common';\nimport { ErrorMessage } from '../interfaces/error-message.interface';\n\ninterface ValidationError {\n  property: string;\n  constraints?: Record<string, string>;\n  children?: ValidationError[];\n}\n\n@Injectable()\nexport class DtoValidationFormatter {\n  formatDtoValidationException(exception: HttpException): ErrorMessage[] {\n    const responseBody: unknown = exception.getResponse();\n\n    if (\n      typeof responseBody === 'object' &&\n      responseBody !== null &&\n      'message' in responseBody &&\n      Array.isArray((responseBody as Record<string, unknown>).message)\n    ) {\n      const messages = (responseBody as Record<string, unknown>).message as unknown[];\n      const firstMessage = messages[0];\n\n      if (\n        firstMessage &&\n        typeof firstMessage === 'object' &&\n        firstMessage !== null &&\n        'property' in firstMessage\n      ) {\n        const validationErrors = messages as ValidationError[];\n        return validationErrors.map((error: ValidationError) => ({\n          path: error.property,\n          message: error.constraints ? Object.values(error.constraints) : ['Validation error'],\n        }));\n      }\n\n      if (typeof firstMessage === 'string') {\n        return [\n          {\n            path: 'http_error',\n            message: messages as string[],\n          },\n        ];\n      }\n    }\n\n    return [\n      {\n        path: 'http_error',\n        message:\n          typeof responseBody === 'object' && responseBody !== null && 'message' in responseBody\n            ? [(responseBody as Record<string, unknown>).message as string]\n            : ['An HTTP error occurred'],\n      },\n    ];\n  }\n}\n","import {\n  ExceptionFilter,\n  Catch,\n  ArgumentsHost,\n  HttpException,\n  HttpStatus,\n  Logger,\n  NotFoundException,\n} from '@nestjs/common';\nimport { Request, Response } from 'express';\nimport { ExceptionHandlerService } from '../services/exception-handler.service';\nimport { ErrorResponse, ErrorMessage } from '../interfaces/error-message.interface';\nimport { ExceptionHandlerConfig } from '../interfaces/exception-handler-config.interface';\n\n@Catch()\nexport class GlobalExceptionFilter implements ExceptionFilter {\n  private readonly logger = new Logger(GlobalExceptionFilter.name);\n  private config: ExceptionHandlerConfig;\n\n  constructor(\n    private exceptionHandlerService?: ExceptionHandlerService,\n    config?: ExceptionHandlerConfig,\n  ) {\n    this.config = config || { enableLogging: true, hideStackTrace: false };\n  }\n\n  private getService(): ExceptionHandlerService {\n    if (!this.exceptionHandlerService) {\n      this.exceptionHandlerService = new ExceptionHandlerService();\n    }\n    return this.exceptionHandlerService;\n  }\n\n  catch(exception: unknown, host: ArgumentsHost): void {\n    const ctx = host.switchToHttp();\n    const response = ctx.getResponse<Response>();\n    const request = ctx.getRequest<Request>();\n\n    const { errors, message } = this.getService().formatException(exception);\n    let status = this.getStatusCode(exception);\n\n    let finalErrors = errors;\n    let finalMessage = message;\n\n    if (exception instanceof NotFoundException) {\n      const exceptionResponse = exception.getResponse();\n      if (\n        typeof exceptionResponse === 'object' &&\n        exceptionResponse !== null &&\n        'message' in exceptionResponse\n      ) {\n        const msg = exceptionResponse.message;\n        if (typeof msg === 'string' && msg.includes('Cannot')) {\n          status = HttpStatus.NOT_FOUND;\n          finalMessage = 'Route Not Found';\n          finalErrors = [\n            {\n              path: 'route',\n              message: [msg],\n            },\n          ];\n        }\n      }\n    }\n\n    const errorResponse: ErrorResponse = {\n      success: false,\n      message: finalMessage,\n      errorMessages: finalErrors,\n    };\n\n    if (this.config.enableLogging) {\n      this.logError(request, status, finalErrors, exception);\n    }\n\n    response.status(status).json(errorResponse);\n  }\n\n  private getStatusCode(exception: unknown): number {\n    if (exception instanceof HttpException) {\n      return exception.getStatus();\n    }\n    return HttpStatus.INTERNAL_SERVER_ERROR;\n  }\n\n  private logError(\n    request: Request,\n    status: number,\n    errorMessages: ErrorMessage[],\n    exception: unknown,\n  ): void {\n    const method = request.method;\n    const url = request.url;\n    const timestamp = new Date().toISOString();\n\n    const logData = {\n      timestamp,\n      method,\n      url,\n      status,\n      errorMessages,\n      stack: this.config.hideStackTrace ? undefined : (exception as Error)?.stack,\n    };\n\n    this.logger.error(`${method} ${url} - ${status}`, JSON.stringify(logData));\n  }\n}\n","import { Injectable } from '@nestjs/common';\nimport { ExceptionFormatter } from '../interfaces/exception-formatter.interface';\nimport { ErrorMessage } from '../interfaces/error-message.interface';\nimport { PrismaExceptionFormatter } from '../formatters/prisma-exception.formatter';\nimport { HttpExceptionFormatter } from '../formatters/http-exception.formatter';\nimport { DtoExceptionFormatter } from '../formatters/dto-exception.formatter';\nimport { UnknownExceptionFormatter } from '../formatters/unknown-exception.formatter';\n\n@Injectable()\nexport class ExceptionHandlerService {\n  private formatters: ExceptionFormatter[] = [];\n  private defaultFormatter: ExceptionFormatter;\n\n  constructor() {\n    this.defaultFormatter = new UnknownExceptionFormatter();\n    this.registerFormatters();\n  }\n\n  private registerFormatters(): void {\n    this.formatters = [\n      new PrismaExceptionFormatter(),\n      new HttpExceptionFormatter(),\n      new DtoExceptionFormatter(),\n    ];\n  }\n\n  registerFormatter(formatter: ExceptionFormatter): void {\n    this.formatters.push(formatter);\n  }\n\n  getFormatter(exception: unknown): ExceptionFormatter {\n    for (const formatter of this.formatters) {\n      if (formatter.supports(exception)) {\n        return formatter;\n      }\n    }\n    return this.defaultFormatter;\n  }\n\n  formatException(exception: unknown): { errors: ErrorMessage[]; message: string } {\n    const formatter = this.getFormatter(exception);\n    const errors = formatter.format(exception);\n    const message = formatter.message(exception);\n\n    return { errors, message };\n  }\n\n  formatErrors(exception: unknown): ErrorMessage[] {\n    const formatter = this.getFormatter(exception);\n    return formatter.format(exception);\n  }\n\n  getErrorMessage(exception: unknown): string {\n    const formatter = this.getFormatter(exception);\n    return formatter.message(exception);\n  }\n\n  getAllFormatters(): ExceptionFormatter[] {\n    return [...this.formatters];\n  }\n}\n","import { HttpException } from '@nestjs/common';\nimport { ExceptionFormatter } from '../interfaces/exception-formatter.interface';\nimport { ErrorMessage } from '../interfaces/error-message.interface';\n\nexport class HttpExceptionFormatter implements ExceptionFormatter {\n  supports(exception: unknown): boolean {\n    return exception instanceof HttpException;\n  }\n\n  format(exception: unknown): ErrorMessage[] {\n    const httpException = exception as HttpException;\n    const response = httpException.getResponse();\n\n    if (typeof response === 'string') {\n      return [{ path: 'http_error', message: [response] }];\n    }\n\n    if (typeof response === 'object' && response !== null) {\n      const responseObj = response as Record<string, unknown>;\n\n      if (responseObj.message && Array.isArray(responseObj.message)) {\n        return [\n          {\n            path: 'http_error',\n            message: responseObj.message as string[],\n          },\n        ];\n      }\n\n      if (responseObj.message && typeof responseObj.message === 'string') {\n        return [{ path: 'http_error', message: [responseObj.message as string] }];\n      }\n\n      if (responseObj.error && typeof responseObj.error === 'string') {\n        return [{ path: 'http_error', message: [responseObj.error] }];\n      }\n    }\n\n    return [{ path: 'http_error', message: ['An error occurred'] }];\n  }\n\n  message(exception: unknown): string {\n    const httpException = exception as HttpException;\n    const response = httpException.getResponse();\n\n    if (typeof response === 'string') {\n      return response;\n    }\n\n    if (typeof response === 'object' && response !== null) {\n      const responseObj = response as Record<string, unknown>;\n\n      if (responseObj.message && typeof responseObj.message === 'string') {\n        return responseObj.message as string;\n      }\n\n      if (responseObj.error && typeof responseObj.error === 'string') {\n        return responseObj.error as string;\n      }\n    }\n\n    return 'An error occurred';\n  }\n}\n","import { ValidationError } from '@nestjs/common';\nimport { ExceptionFormatter } from '../interfaces/exception-formatter.interface';\nimport { ErrorMessage } from '../interfaces/error-message.interface';\n\nexport class DtoExceptionFormatter implements ExceptionFormatter {\n  supports(exception: unknown): boolean {\n    if (!exception || typeof exception !== 'object') {\n      return false;\n    }\n\n    const error = exception as Record<string, unknown>;\n    return (\n      Array.isArray(error.validationErrors) ||\n      (Array.isArray(error.children) && error.constraints !== undefined)\n    );\n  }\n\n  format(exception: unknown): ErrorMessage[] {\n    const error = exception as Record<string, unknown>;\n    const validationErrors = error.validationErrors as ValidationError[] | undefined;\n    const children = error.children as ValidationError[] | undefined;\n\n    if (validationErrors) {\n      return this.formatValidationErrors(validationErrors);\n    }\n\n    if (children) {\n      return this.formatChildrenErrors(children);\n    }\n\n    return [{ path: 'unknown', message: ['Validation failed'] }];\n  }\n\n  message(exception: unknown): string {\n    const error = exception as Record<string, unknown>;\n    const validationErrors = error.validationErrors as ValidationError[] | undefined;\n    const children = error.children as ValidationError[] | undefined;\n\n    if (validationErrors && validationErrors.length > 0) {\n      const firstError = validationErrors[0];\n      const constraints = firstError.constraints;\n      if (constraints) {\n        return Object.values(constraints)[0];\n      }\n    }\n\n    if (children && children.length > 0) {\n      return 'Validation failed for nested fields';\n    }\n\n    return 'Validation failed';\n  }\n\n  private formatValidationErrors(errors: ValidationError[]): ErrorMessage[] {\n    return errors.flatMap((error) => {\n      const constraints = error.constraints;\n      if (constraints) {\n        return [\n          {\n            path: error.property,\n            message: Object.values(constraints),\n          },\n        ];\n      }\n      return [];\n    });\n  }\n\n  private formatChildrenErrors(children: ValidationError[]): ErrorMessage[] {\n    return children.flatMap((child) => {\n      const constraints = child.constraints;\n      if (constraints) {\n        return [\n          {\n            path: child.property,\n            message: Object.values(constraints),\n          },\n        ];\n      }\n      return [];\n    });\n  }\n}\n","export const DEFAULT_ERROR_MESSAGES = {\n  UNKNOWN_ERROR: 'An unexpected error occurred',\n  VALIDATION_ERROR: 'Validation failed',\n  DATABASE_ERROR: 'Database error',\n  NOT_FOUND: 'Resource not found',\n  UNAUTHORIZED: 'Unauthorized access',\n  FORBIDDEN: 'Access forbidden',\n  CONFLICT: 'Conflict occurred',\n  BAD_REQUEST: 'Bad request',\n};\n\nexport const PRISMA_ERROR_MESSAGES: Record<string, string> = {\n  P2002: 'A record with this {field} already exists.',\n  P2003: 'This {field} does not exist.',\n  P2005: 'Invalid value for {field}.',\n  P2006: 'Invalid format for {field}.',\n  P2025: 'Record not found.',\n};\n\nexport const DEFAULT_PATH = 'unknown';\n","import { ExceptionFormatter } from '../interfaces/exception-formatter.interface';\nimport { ErrorMessage } from '../interfaces/error-message.interface';\nimport { DEFAULT_PATH } from '../constants/default-messages';\n\nexport class UnknownExceptionFormatter implements ExceptionFormatter {\n  supports(_exception: unknown): boolean {\n    return true;\n  }\n\n  format(_exception: unknown): ErrorMessage[] {\n    return [\n      {\n        path: DEFAULT_PATH,\n        message: ['Something went wrong'],\n      },\n    ];\n  }\n\n  message(_exception: unknown): string {\n    return 'Internal Server Error';\n  }\n}\n","import { DynamicModule, Module } from '@nestjs/common';\nimport { ExceptionHandlerService } from '../services/exception-handler.service';\nimport { GlobalExceptionFilter } from '../filter/global-exception.filter';\nimport { ExceptionHandlerConfig } from '../interfaces/exception-handler-config.interface';\nimport { PrismaExceptionFormatter } from '../formatters/prisma-exception.formatter';\nimport { DtoExceptionFormatter } from '../formatters/dto-exception.formatter';\nimport { HttpExceptionFormatter } from '../formatters/http-exception.formatter';\nimport { UnknownExceptionFormatter } from '../formatters/unknown-exception.formatter';\n\n@Module({})\nexport class ExceptionHandlerModule {\n  static forRoot(config?: ExceptionHandlerConfig): DynamicModule {\n    const providers = [\n      ExceptionHandlerService,\n      {\n        provide: GlobalExceptionFilter,\n        useFactory: (service: ExceptionHandlerService) => {\n          return new GlobalExceptionFilter(service, config);\n        },\n        inject: [ExceptionHandlerService],\n      },\n    ];\n\n    return {\n      module: ExceptionHandlerModule,\n      providers,\n      exports: [ExceptionHandlerService, GlobalExceptionFilter],\n      global: true,\n    };\n  }\n\n  static forFeature(config?: ExceptionHandlerConfig): DynamicModule {\n    return this.forRoot(config);\n  }\n}\n\n// Initialize formatters\nexport function initializeFormatters(service: ExceptionHandlerService): void {\n  service.registerFormatter(new PrismaExceptionFormatter());\n  service.registerFormatter(new DtoExceptionFormatter());\n  service.registerFormatter(new HttpExceptionFormatter());\n  service.registerFormatter(new UnknownExceptionFormatter());\n}\n","import { HttpException } from '@nestjs/common';\nimport { ErrorMessage } from '../interfaces/error-message.interface';\n\nexport class HttpErrorFormatter {\n  formatHttpException(exception: HttpException): ErrorMessage[] {\n    const response = exception.getResponse();\n\n    if (typeof response === 'string') {\n      return [{ path: 'http_error', message: [response] }];\n    }\n\n    if (typeof response === 'object' && response !== null) {\n      const responseObj = response as Record<string, unknown>;\n\n      if (Array.isArray(responseObj.message)) {\n        return [\n          {\n            path: 'http_error',\n            message: responseObj.message as string[],\n          },\n        ];\n      }\n\n      if (typeof responseObj.message === 'string') {\n        return [{ path: 'http_error', message: [responseObj.message] }];\n      }\n\n      if (responseObj.error && typeof responseObj.error === 'string') {\n        return [{ path: 'http_error', message: [responseObj.error] }];\n      }\n    }\n\n    return [{ path: 'http_error', message: ['An error occurred'] }];\n  }\n\n  getMessage(exception: HttpException): string {\n    const response = exception.getResponse();\n\n    if (typeof response === 'string') {\n      return response;\n    }\n\n    if (typeof response === 'object' && response !== null) {\n      const responseObj = response as Record<string, unknown>;\n\n      if (typeof responseObj.message === 'string') {\n        return responseObj.message;\n      }\n\n      if (responseObj.error && typeof responseObj.error === 'string') {\n        return responseObj.error;\n      }\n    }\n\n    return 'An error occurred';\n  }\n}\n"],"mappings":"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","names":["Injectable","Injectable","HttpException","Injectable","Injectable","HttpException"]}