{"version":3,"file":"errors.mjs","sources":["../src/errors.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\n\nimport yup from 'yup';\nimport { HttpError } from 'http-errors';\nimport { formatYupErrors } from './format-yup-error';\n\n/* ApplicationError */\nclass ApplicationError<\n  TName extends string = 'ApplicationError',\n  TMessage extends string = string,\n  TDetails = unknown,\n> extends Error {\n  name: TName;\n\n  details: TDetails;\n\n  message: TMessage;\n\n  constructor(\n    message = 'An application error occurred' as TMessage,\n    details: TDetails = {} as TDetails\n  ) {\n    super();\n    this.name = 'ApplicationError' as TName;\n    this.message = message;\n    this.details = details;\n  }\n}\n\nclass ValidationError<\n  TMessage extends string = string,\n  TDetails = unknown,\n> extends ApplicationError<'ValidationError', TMessage, TDetails> {\n  constructor(message: TMessage, details?: TDetails) {\n    super(message, details);\n    this.name = 'ValidationError';\n  }\n}\n\ninterface YupFormattedError {\n  path: string[];\n  message: string;\n  name: string;\n  value: string;\n}\n\nclass YupValidationError<TMessage extends string = string> extends ValidationError<\n  TMessage,\n  { errors: YupFormattedError[] }\n> {\n  constructor(yupError: yup.ValidationError, message?: TMessage) {\n    super('Validation' as TMessage);\n    const { errors, message: yupMessage } = formatYupErrors(yupError);\n    this.message = message || (yupMessage as TMessage);\n    this.details = { errors };\n  }\n}\n\nclass PaginationError<\n  TMessage extends string = string,\n  TDetails = unknown,\n> extends ApplicationError<'PaginationError', TMessage, TDetails> {\n  constructor(message = 'Invalid pagination' as TMessage, details?: TDetails) {\n    super(message, details);\n    this.name = 'PaginationError';\n    this.message = message;\n  }\n}\n\nclass NotFoundError<TMessage extends string = string, TDetails = unknown> extends ApplicationError<\n  'NotFoundError',\n  TMessage,\n  TDetails\n> {\n  constructor(message = 'Entity not found' as TMessage, details?: TDetails) {\n    super(message, details);\n    this.name = 'NotFoundError';\n    this.message = message;\n  }\n}\n\nclass ForbiddenError<\n  TName extends string = 'ForbiddenError',\n  TMessage extends string = string,\n  TDetails = unknown,\n> extends ApplicationError<TName, TMessage, TDetails> {\n  constructor(message = 'Forbidden access' as TMessage, details?: TDetails) {\n    super(message, details);\n    this.name = 'ForbiddenError' as TName;\n    this.message = message;\n  }\n}\n\nclass UnauthorizedError<\n  TMessage extends string = string,\n  TDetails = unknown,\n> extends ApplicationError<'UnauthorizedError', TMessage, TDetails> {\n  constructor(message = 'Unauthorized' as TMessage, details?: TDetails) {\n    super(message, details);\n    this.name = 'UnauthorizedError';\n    this.message = message;\n  }\n}\n\nclass RateLimitError<TMessage extends string = string, TDetails = unknown> extends ApplicationError<\n  'RateLimitError',\n  TMessage,\n  TDetails\n> {\n  constructor(\n    message = 'Too many requests, please try again later.' as TMessage,\n    details?: TDetails\n  ) {\n    super(message, details);\n    this.name = 'RateLimitError';\n    this.message = message;\n    this.details = details || ({} as TDetails);\n  }\n}\n\nclass PayloadTooLargeError<\n  TMessage extends string = string,\n  TDetails = unknown,\n> extends ApplicationError<'PayloadTooLargeError', TMessage, TDetails> {\n  constructor(message = 'Entity too large' as TMessage, details?: TDetails) {\n    super(message, details);\n    this.name = 'PayloadTooLargeError';\n    this.message = message;\n  }\n}\n\nclass PolicyError<TMessage extends string = string, TDetails = unknown> extends ForbiddenError<\n  'PolicyError',\n  TMessage,\n  TDetails\n> {\n  constructor(message = 'Policy Failed' as TMessage, details?: TDetails) {\n    super(message, details);\n    this.name = 'PolicyError';\n    this.message = message;\n    this.details = details || ({} as TDetails);\n  }\n}\n\nclass NotImplementedError<\n  TMessage extends string = string,\n  TDetails = unknown,\n> extends ApplicationError<'NotImplementedError', TMessage, TDetails> {\n  constructor(message = 'This feature is not implemented yet' as TMessage, details?: TDetails) {\n    super(message, details);\n    this.name = 'NotImplementedError';\n    this.message = message;\n  }\n}\n\nexport {\n  HttpError,\n  ApplicationError,\n  ValidationError,\n  YupValidationError,\n  PaginationError,\n  NotFoundError,\n  ForbiddenError,\n  UnauthorizedError,\n  RateLimitError,\n  PayloadTooLargeError,\n  PolicyError,\n  NotImplementedError,\n};\n"],"names":["ApplicationError","Error","message","details","name","ValidationError","YupValidationError","yupError","errors","yupMessage","formatYupErrors","PaginationError","NotFoundError","ForbiddenError","UnauthorizedError","RateLimitError","PayloadTooLargeError","PolicyError","NotImplementedError"],"mappings":"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"}