-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
104 lines (83 loc) · 2.95 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
'use strict';
const { EOL } = require('os');
const BadRequestError = require('./lib/errors/bad-request-error');
const ConflictError = require('./lib/errors/conflict-error');
const ForbiddenError = require('./lib/errors/forbidden-error');
const JsonParsingError = require('./lib/errors/json-parsing-error');
const MethodNotAllowedError = require('./lib/errors/method-not-allowed-error');
const NotAcceptableError = require('./lib/errors/not-acceptable-error');
const NotFoundError = require('./lib/errors/not-found-error');
const NotImplementedError = require('./lib/errors/not-implemented-error');
const OperationalError = require('./lib/errors/operational-error');
const ProgrammerError = require('./lib/errors/programmer-error');
const UnauthorizedError = require('./lib/errors/unauthorized-error');
const UnprocessableError = require('./lib/errors/unprocessable-error');
const UnsupportedMediaTypeError = require('./lib/errors/unsupported-media-type-error');
const ValidationError = require('./lib/errors/validation-error');
function getFullStack(err) {
if (!err) {
return 'Null or undefined error';
}
const stack = [];
function recursivelyConcat(cause) {
if (cause && cause.stack) {
stack.push(cause.stack);
} else if (typeof cause === 'string') {
stack.push(cause);
} else {
stack.push('No stack trace');
}
if (cause && cause.cause) {
recursivelyConcat(cause.cause);
}
}
recursivelyConcat(err);
return stack.join(`${ EOL }caused by:${ EOL }`);
}
function getMergedInfo(err) {
const objects = [];
function recursivelyCollectInfo(cause) {
if (cause && typeof cause.info === 'object' && !Array.isArray(cause.info)) {
objects.push(cause.info);
}
if (cause && cause.cause) {
recursivelyCollectInfo(cause.cause);
}
}
recursivelyCollectInfo(err);
return objects.reverse().reduce((info, obj) => {
return Object.assign(info, obj);
}, {});
}
function isProgrammerError(err) {
function recursivelyCheckCause(cause) {
if (cause instanceof ProgrammerError || cause.name === ProgrammerError.NAME) {
return true;
}
if (cause.cause) {
return recursivelyCheckCause(cause.cause);
}
return false;
}
if (err) {
return recursivelyCheckCause(err);
}
return false;
}
exports.BadRequestError = BadRequestError;
exports.ConflictError = ConflictError;
exports.ForbiddenError = ForbiddenError;
exports.JsonParsingError = JsonParsingError;
exports.MethodNotAllowedError = MethodNotAllowedError;
exports.NotAcceptableError = NotAcceptableError;
exports.NotFoundError = NotFoundError;
exports.NotImplementedError = NotImplementedError;
exports.OperationalError = OperationalError;
exports.ProgrammerError = ProgrammerError;
exports.UnauthorizedError = UnauthorizedError;
exports.UnprocessableError = UnprocessableError;
exports.UnsupportedMediaTypeError = UnsupportedMediaTypeError;
exports.ValidationError = ValidationError;
exports.getFullStack = getFullStack;
exports.getMergedInfo = getMergedInfo;
exports.isProgrammerError = isProgrammerError;