2022-08-11 10:20:50 +02:00

95 lines
2.2 KiB
JavaScript

/* eslint-disable max-classes-per-file */
'use strict';
const { HttpError } = require('http-errors');
const { formatYupErrors } = require('./format-yup-error');
/* ApplicationError */
class ApplicationError extends Error {
constructor(message, details = {}) {
super();
this.name = 'ApplicationError';
this.message = message || 'An application error occured';
this.details = details;
}
}
class ValidationError extends ApplicationError {
constructor(message, details) {
super(message, details);
this.name = 'ValidationError';
}
}
class YupValidationError extends ValidationError {
constructor(yupError, message) {
super();
const { errors, message: yupMessage } = formatYupErrors(yupError);
this.message = message || yupMessage;
this.details = { errors };
}
}
class PaginationError extends ApplicationError {
constructor(message, details) {
super(message, details);
this.name = 'PaginationError';
this.message = message || 'Invalid pagination';
}
}
class NotFoundError extends ApplicationError {
constructor(message, details) {
super(message, details);
this.name = 'NotFoundError';
this.message = message || 'Entity not found';
}
}
class ForbiddenError extends ApplicationError {
constructor(message, details) {
super(message, details);
this.name = 'ForbiddenError';
this.message = message || 'Forbidden access';
}
}
class PayloadTooLargeError extends ApplicationError {
constructor(message, details) {
super(message, details);
this.name = 'PayloadTooLargeError';
this.message = message || 'Entity too large';
}
}
class UnauthorizedError extends ApplicationError {
constructor(message, details) {
super(message, details);
this.name = 'UnauthorizedError';
this.message = message || 'Unauthorized';
}
}
class PolicyError extends ForbiddenError {
constructor(message, details) {
super(message, details);
this.name = 'PolicyError';
this.message = message || 'Policy Failed';
this.details = details || {};
}
}
module.exports = {
HttpError,
ApplicationError,
ValidationError,
YupValidationError,
PaginationError,
NotFoundError,
ForbiddenError,
PayloadTooLargeError,
UnauthorizedError,
PolicyError,
};