2021-11-04 11:42:43 +01:00

84 lines
2.0 KiB
JavaScript

'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 ApplicationError {
constructor(yupError, message) {
super();
const { errors, message: yupMessage } = formatYupErrors(yupError);
this.name = 'ValidationError';
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';
}
}
module.exports = {
HttpError,
ApplicationError,
ValidationError,
YupValidationError,
PaginationError,
NotFoundError,
ForbiddenError,
PayloadTooLargeError,
UnauthorizedError,
};