UNPKG

2.04 kBJavaScriptView Raw
1
2var statuses = require('statuses');
3var inherits = require('inherits');
4
5exports = module.exports = function () {
6 // so much arity going on ~_~
7 var err;
8 var msg;
9 var status = 500;
10 var props = {};
11 for (var i = 0; i < arguments.length; i++) {
12 var arg = arguments[i];
13 if (arg instanceof Error) {
14 err = arg;
15 status = err.status || err.statusCode || status;
16 continue;
17 }
18 switch (typeof arg) {
19 case 'string':
20 msg = arg;
21 break;
22 case 'number':
23 status = arg;
24 break;
25 case 'object':
26 props = arg;
27 break;
28 }
29 }
30
31 if (typeof status !== 'number' || !statuses[status]) status = 500;
32 err = err || new Error(msg || statuses[status]);
33 err = err || new Error(msg || statuses[status]);
34 err.expose = status < 500;
35 for (var key in props) err[key] = props[key];
36 err.status = err.statusCode = status;
37 return err;
38};
39
40// create generic error objects
41var codes = statuses.codes.filter(function (num) {
42 return num >= 400;
43});
44
45codes.forEach(function (code) {
46 if (code >= 500) {
47 var ServerError = function ServerError(msg) {
48 var self = new Error(msg != null ? msg : statuses[code])
49 Error.captureStackTrace(self, arguments.callee)
50 self.__proto__ = ServerError.prototype
51 return self
52 }
53 inherits(ServerError, Error);
54 ServerError.prototype.status =
55 ServerError.prototype.statusCode = code;
56 ServerError.prototype.expose = false;
57 exports[code] =
58 exports[statuses[code].replace(/\s+/g, '')] = ServerError;
59 return;
60 }
61
62 var ClientError = function ClientError(msg) {
63 var self = new Error(msg != null ? msg : statuses[code])
64 Error.captureStackTrace(self, arguments.callee)
65 self.__proto__ = ClientError.prototype
66 return self
67 }
68 inherits(ClientError, Error);
69 ClientError.prototype.status =
70 ClientError.prototype.statusCode = code;
71 ClientError.prototype.expose = false;
72 exports[code] =
73 exports[statuses[code].replace(/\s+/g, '')] = ClientError;
74 return;
75});