UNPKG

2.92 kBJavaScriptView Raw
1'use strict';
2
3
4class AppError extends Error {
5
6 /**
7 * @param {string} message
8 * @param {{}} [meta]
9 * @constructor
10 */
11 constructor (message, meta) {
12 super();
13
14 /**
15 * @type {string}
16 */
17 this.message = message;
18
19 /**
20 * @type {number|string}
21 */
22 this.code = (meta && meta.code) || null;
23
24 /**
25 * @type {number}
26 */
27 this.httpStatus = (meta && meta.httpStatus) || 500;
28
29 /**
30 * @type {Object.<string, *>}
31 */
32 this.meta = meta || null;
33
34 /**
35 * @type {string}
36 */
37 this.redirect = null;
38 }
39
40 /**
41 * @param {Object} meta
42 * @returns {AppError}
43 */
44 setMeta (meta) {
45 this.meta = meta;
46 return this;
47 }
48}
49
50function purifyStack (error) {
51 error.stack = error.stack.split('\n').filter((line, index) => index !== 1).join('\n');
52 return error;
53}
54
55/**
56 * @param {string} [message]
57 * @param {Object} [meta]
58 * @returns {AppError}
59 */
60AppError.notFound = (message, meta) => {
61
62 let allMessage = 'Not found';
63 if (message) {
64 allMessage += `: ${message}`;
65 }
66
67 const error = new AppError(allMessage, Object.assign({
68 code: 404,
69 httpStatus: 404
70 }, meta));
71
72 return purifyStack(error);
73};
74
75/**
76 *
77 * @param {string} [message]
78 * @param {Object} [meta]
79 * @returns {AppError}
80 */
81AppError.badRequest = (message, meta) => {
82 let allMessage = 'Bad request';
83 if (message) {
84 allMessage += `: ${message}`;
85 }
86
87 const error = new AppError(allMessage, Object.assign({
88 code: 400,
89 httpStatus: 400
90 }, meta));
91
92 return purifyStack(error);
93};
94
95/**
96 *
97 * @param {string} [message]
98 * @param {Object} [meta]
99 * @returns {AppError}
100 */
101AppError.concurrentRequest = (message, meta) => {
102 let allMessage = 'Concurrent request';
103 if (message) {
104 allMessage += `: ${message}`;
105 }
106
107 const error = new AppError(allMessage, Object.assign({
108 code: 409,
109 httpStatus: 409
110 }, meta));
111
112 return purifyStack(error);
113};
114
115/**
116 * @param {string} [message]
117 * @param {Object} [meta]
118 * @returns {AppError}
119 */
120AppError.unauthorized = (message, meta) => {
121 let allMessage = 'Unauthorized';
122 if (message) {
123 allMessage += `: ${message}`;
124 }
125
126 const error = new AppError(allMessage, Object.assign({
127 code: 401,
128 httpStatus: 401
129 }, meta));
130
131 return purifyStack(error);
132};
133
134/**
135 *
136 * @param {string} [message]
137 * @param {Object} [meta]
138 * @returns {AppError}
139 */
140AppError.internal = (message, meta) => {
141 let allMessage = 'Internal';
142 if (message) {
143 allMessage += `: ${message}`;
144 }
145
146 const error = new AppError(allMessage, Object.assign({
147 code: 500,
148 httpStatus: 500
149 }, meta));
150
151 return purifyStack(error);
152};
153
154
155module.exports = AppError;