1 | String.prototype.replaceAll = function (search, replacement) {
|
2 | var target = this;
|
3 | return target.replace(new RegExp(search, 'g'), replacement);
|
4 | };
|
5 |
|
6 | function escapeRegExp(str) {
|
7 | return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
8 | }
|
9 |
|
10 | function processReturn(retVal) {
|
11 | return retVal;
|
12 | retVal = retVal.replaceAll(escapeRegExp(" ;/*CLOSE TAG*/"), "")
|
13 | .replaceAll(escapeRegExp("\";/*CLOSE TAG*/"), "")
|
14 | .replaceAll(escapeRegExp("/*OPEN TAG*/$_SERVER.Response += \""), "")
|
15 | .replaceAll(escapeRegExp("/*OPEN TAG*/ $_SERVER.Response += \""), "")
|
16 | }
|
17 |
|
18 | module.exports = class BlazeError extends Error {
|
19 | constructor(error, id) {
|
20 | super(error);
|
21 |
|
22 | if (error instanceof Error) {
|
23 | this.code = error.code;
|
24 | this.stack = error.stack;
|
25 | this.message = error.message;
|
26 | }
|
27 |
|
28 | this.http = BlazeError.getError(id);
|
29 | }
|
30 |
|
31 | format() {
|
32 | let errMessage = "";
|
33 | errMessage += "<table border='1'>";
|
34 | errMessage += "<tr>";
|
35 | errMessage += "<th colspan='2'>";
|
36 | errMessage += "Internal Server Error";
|
37 | errMessage += "</th>";
|
38 | errMessage += "</tr>";
|
39 | if (this.code) {
|
40 | errMessage += "<tr>";
|
41 | errMessage += "<td>Status Code</td>";
|
42 | errMessage += "<td>" + this.code + "</td>";
|
43 | errMessage += "</tr>";
|
44 | }
|
45 | if (this.message) {
|
46 | errMessage += "<tr>";
|
47 | errMessage += "<td>Message</td>";
|
48 | errMessage += "<td>" + processReturn(this.message) + "</td>";
|
49 | errMessage += "</tr>";
|
50 | }
|
51 | if (this.stack) {
|
52 | errMessage += "<tr>";
|
53 | errMessage += "<td>Stack Trace</td>";
|
54 | errMessage += "<td style='white-space:pre;'>" + processReturn(this.stack) + "</td>";
|
55 | errMessage += "</tr>";
|
56 | }
|
57 | if (this.http) {
|
58 | if (this.http.code) {
|
59 | errMessage += "<tr>";
|
60 | errMessage += "<td>Status Code</td>";
|
61 | errMessage += "<td style='white-space:pre;'>" + this.http.code + "</td>";
|
62 | errMessage += "</tr>";
|
63 | }
|
64 | if (this.http.message) {
|
65 | errMessage += "<tr>";
|
66 | errMessage += "<td>Status Message</td>";
|
67 | errMessage += "<td style='white-space:pre;'>" + this.http.message + "</td>";
|
68 | errMessage += "</tr>";
|
69 | }
|
70 | }
|
71 | errMessage += "</table>";
|
72 | return errMessage;
|
73 | }
|
74 |
|
75 | static getError(id = null) {
|
76 | let retVal = {
|
77 | code: 500,
|
78 | message: "Internal Server Error"
|
79 | }
|
80 |
|
81 | let match = Object.entries(BlazeError.codes).find(entry => Number(entry[0]) === id || entry[1] === id);
|
82 | if (match) {
|
83 | retVal.code = match[0];
|
84 | retVal.message = match[1];
|
85 | }
|
86 |
|
87 | return retVal;
|
88 | }
|
89 |
|
90 | static get codes() {
|
91 | return {
|
92 | 100: "Continue",
|
93 | 101: "Switching Protocols",
|
94 | 102: "Processing",
|
95 | 103: "Early Hints",
|
96 | 200: "OK",
|
97 | 201: "Created",
|
98 | 202: "Accepted",
|
99 | 203: "Non-Authoritative Information",
|
100 | 204: "No Content",
|
101 | 205: "Reset Content",
|
102 | 206: "Partial Content",
|
103 | 207: "Multi-Status",
|
104 | 208: "Already Reported",
|
105 | 226: "IM Used",
|
106 | 300: "Multiple Choices",
|
107 | 301: "Moved Permanently",
|
108 | 302: "Found",
|
109 | 303: "See Other",
|
110 | 304: "Not Modified",
|
111 | 305: "Use Proxy",
|
112 | 307: "Temporary Redirect",
|
113 | 308: "Permanent Redirect",
|
114 | 400: "Bad Request",
|
115 | 401: "Unauthorized",
|
116 | 402: "Payment Required",
|
117 | 403: "Forbidden",
|
118 | 404: "Not Found",
|
119 | 405: "Method Not Allowed",
|
120 | 406: "Not Acceptable",
|
121 | 407: "Proxy Authentication Required",
|
122 | 408: "Request Timeout",
|
123 | 409: "Conflict",
|
124 | 410: "Gone",
|
125 | 411: "Length Required",
|
126 | 412: "Precondition Failed",
|
127 | 413: "Payload Too Large",
|
128 | 414: "URI Too Long",
|
129 | 415: "Unsupported Media Type",
|
130 | 416: "Range Not Satisfiable",
|
131 | 417: "Expectation Failed",
|
132 | 418: "I'm a teapot",
|
133 | 421: "Misdirected Request",
|
134 | 422: "Unprocessable Entity",
|
135 | 423: "Locked",
|
136 | 424: "Failed Dependency",
|
137 | 425: "Unordered Collection",
|
138 | 426: "Upgrade Required",
|
139 | 428: "Precondition Required",
|
140 | 429: "Too Many Requests",
|
141 | 431: "Request Header Fields Too Large",
|
142 | 451: "Unavailable For Legal Reasons",
|
143 | 500: "Internal Server Error",
|
144 | 501: "Not Implemented",
|
145 | 502: "Bad Gateway",
|
146 | 503: "Service Unavailable",
|
147 | 504: "Gateway Timeout",
|
148 | 505: "HTTP Version Not Supported",
|
149 | 506: "Variant Also Negotiates",
|
150 | 507: "Insufficient Storage",
|
151 | 508: "Loop Detected",
|
152 | 509: "Bandwidth Limit Exceeded",
|
153 | 510: "Not Extended",
|
154 | 511: "Network Authentication Required"
|
155 | }
|
156 | }
|
157 | } |
\ | No newline at end of file |