@eggjs/onerror 3.0.0 → 3.0.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -6
- package/dist/agent.d.ts +10 -0
- package/dist/agent.js +15 -0
- package/dist/app.d.ts +16 -0
- package/dist/app.js +111 -0
- package/{src/config/config.default.ts → dist/config/config.default.d.ts} +8 -12
- package/dist/config/config.default.js +11 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/lib/error_view.d.ts +158 -0
- package/dist/lib/error_view.js +224 -0
- package/dist/{commonjs/lib → lib}/onerror_page.mustache.html +1 -1
- package/dist/lib/utils.d.ts +10 -0
- package/dist/lib/utils.js +21 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.js +1 -0
- package/package.json +33 -55
- package/dist/commonjs/agent.d.ts +0 -6
- package/dist/commonjs/agent.js +0 -16
- package/dist/commonjs/app.d.ts +0 -12
- package/dist/commonjs/app.js +0 -150
- package/dist/commonjs/config/config.default.d.ts +0 -27
- package/dist/commonjs/config/config.default.js +0 -15
- package/dist/commonjs/index.d.ts +0 -1
- package/dist/commonjs/index.js +0 -4
- package/dist/commonjs/lib/error_view.d.ts +0 -154
- package/dist/commonjs/lib/error_view.js +0 -248
- package/dist/commonjs/lib/utils.d.ts +0 -10
- package/dist/commonjs/lib/utils.js +0 -53
- package/dist/commonjs/package.json +0 -3
- package/dist/commonjs/types.d.ts +0 -7
- package/dist/commonjs/types.js +0 -3
- package/dist/esm/agent.d.ts +0 -6
- package/dist/esm/agent.js +0 -13
- package/dist/esm/app.d.ts +0 -12
- package/dist/esm/app.js +0 -144
- package/dist/esm/config/config.default.d.ts +0 -27
- package/dist/esm/config/config.default.js +0 -10
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +0 -2
- package/dist/esm/lib/error_view.d.ts +0 -154
- package/dist/esm/lib/error_view.js +0 -241
- package/dist/esm/lib/onerror_page.mustache.html +0 -761
- package/dist/esm/lib/utils.d.ts +0 -10
- package/dist/esm/lib/utils.js +0 -43
- package/dist/esm/package.json +0 -3
- package/dist/esm/types.d.ts +0 -7
- package/dist/esm/types.js +0 -2
- package/dist/package.json +0 -4
- package/src/agent.ts +0 -12
- package/src/app.ts +0 -160
- package/src/index.ts +0 -1
- package/src/lib/error_view.ts +0 -281
- package/src/lib/onerror_page.mustache.html +0 -761
- package/src/lib/utils.ts +0 -47
- package/src/types.ts +0 -12
- package/src/typings/index.d.ts +0 -4
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// modify from https://github.com/poppinss/youch/blob/develop/src/Youch/index.js
|
|
3
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
-
};
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ErrorView = void 0;
|
|
8
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
-
const node_util_1 = __importDefault(require("node:util"));
|
|
11
|
-
const cookie_1 = require("cookie");
|
|
12
|
-
const mustache_1 = __importDefault(require("mustache"));
|
|
13
|
-
const stack_trace_1 = __importDefault(require("stack-trace"));
|
|
14
|
-
const utils_js_1 = require("./utils.js");
|
|
15
|
-
const startingSlashRegex = /\\|\//;
|
|
16
|
-
class ErrorView {
|
|
17
|
-
ctx;
|
|
18
|
-
error;
|
|
19
|
-
request;
|
|
20
|
-
app;
|
|
21
|
-
assets;
|
|
22
|
-
viewTemplate;
|
|
23
|
-
codeContext = 5;
|
|
24
|
-
_filterHeaders = ['cookie', 'connection'];
|
|
25
|
-
constructor(ctx, error, template) {
|
|
26
|
-
this.ctx = ctx;
|
|
27
|
-
this.error = error;
|
|
28
|
-
this.request = ctx.request;
|
|
29
|
-
this.app = ctx.app;
|
|
30
|
-
this.assets = new Map();
|
|
31
|
-
this.viewTemplate = template;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* get html error page
|
|
35
|
-
*
|
|
36
|
-
* @return {String} html page
|
|
37
|
-
*/
|
|
38
|
-
toHTML() {
|
|
39
|
-
const stack = this.parseError();
|
|
40
|
-
const data = this.serializeData(stack, (frame, index) => {
|
|
41
|
-
const serializedFrame = this.serializeFrame(frame);
|
|
42
|
-
serializedFrame.classes = this.getFrameClasses(frame, index);
|
|
43
|
-
return serializedFrame;
|
|
44
|
-
});
|
|
45
|
-
return this.compileView(this.viewTemplate, {
|
|
46
|
-
...data,
|
|
47
|
-
appInfo: this.serializeAppInfo(),
|
|
48
|
-
request: this.serializeRequest(),
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* compile view
|
|
53
|
-
*
|
|
54
|
-
* @param {String} tpl - template
|
|
55
|
-
* @param {Object} locals - data used by template
|
|
56
|
-
*/
|
|
57
|
-
compileView(tpl, locals) {
|
|
58
|
-
return mustache_1.default.render(tpl, locals);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* check if the frame is node native file.
|
|
62
|
-
*
|
|
63
|
-
* @param {Frame} frame - current frame
|
|
64
|
-
*/
|
|
65
|
-
isNode(frame) {
|
|
66
|
-
if (frame.isNative()) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
const filename = frame.getFileName() || '';
|
|
70
|
-
return !node_path_1.default.isAbsolute(filename) && filename[0] !== '.';
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* check if the frame is app modules.
|
|
74
|
-
*
|
|
75
|
-
* @param {Object} frame - current frame
|
|
76
|
-
*/
|
|
77
|
-
isApp(frame) {
|
|
78
|
-
if (this.isNode(frame)) {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
const filename = frame.getFileName() || '';
|
|
82
|
-
return !filename.includes('node_modules' + node_path_1.default.sep);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* cache file asserts
|
|
86
|
-
*
|
|
87
|
-
* @param {String} key - assert key
|
|
88
|
-
* @param {String} value - assert content
|
|
89
|
-
*/
|
|
90
|
-
setAssets(key, value) {
|
|
91
|
-
this.assets.set(key, value);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* get cache file asserts
|
|
95
|
-
*
|
|
96
|
-
* @param {String} key - assert key
|
|
97
|
-
*/
|
|
98
|
-
getAssets(key) {
|
|
99
|
-
return this.assets.get(key);
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* get frame source
|
|
103
|
-
*
|
|
104
|
-
* @param {Object} frame - current frame
|
|
105
|
-
*/
|
|
106
|
-
getFrameSource(frame) {
|
|
107
|
-
const filename = frame.getFileName();
|
|
108
|
-
const lineNumber = frame.getLineNumber();
|
|
109
|
-
let contents = this.getAssets(filename);
|
|
110
|
-
if (!contents) {
|
|
111
|
-
contents = node_fs_1.default.existsSync(filename) ? node_fs_1.default.readFileSync(filename, 'utf8') : '';
|
|
112
|
-
this.setAssets(filename, contents);
|
|
113
|
-
}
|
|
114
|
-
const lines = contents.split(/\r?\n/);
|
|
115
|
-
return {
|
|
116
|
-
pre: lines.slice(Math.max(0, lineNumber - (this.codeContext + 1)), lineNumber - 1),
|
|
117
|
-
line: lines[lineNumber - 1],
|
|
118
|
-
post: lines.slice(lineNumber, lineNumber + this.codeContext),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* parse error and return frame stack
|
|
123
|
-
*/
|
|
124
|
-
parseError() {
|
|
125
|
-
const stack = stack_trace_1.default.parse(this.error);
|
|
126
|
-
return stack.map((frame) => {
|
|
127
|
-
if (!this.isNode(frame)) {
|
|
128
|
-
frame.context = this.getFrameSource(frame);
|
|
129
|
-
}
|
|
130
|
-
return frame;
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* get stack context
|
|
135
|
-
*
|
|
136
|
-
* @param {Object} frame - current frame
|
|
137
|
-
*/
|
|
138
|
-
getContext(frame) {
|
|
139
|
-
if (!frame.context) {
|
|
140
|
-
return {};
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
start: frame.getLineNumber() - (frame.context.pre || []).length,
|
|
144
|
-
pre: frame.context.pre.join('\n'),
|
|
145
|
-
line: frame.context.line,
|
|
146
|
-
post: frame.context.post.join('\n'),
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* get frame classes, let view identify the frame
|
|
151
|
-
*
|
|
152
|
-
* @param {any} frame - current frame
|
|
153
|
-
* @param {any} index - current index
|
|
154
|
-
*/
|
|
155
|
-
getFrameClasses(frame, index) {
|
|
156
|
-
const classes = [];
|
|
157
|
-
if (index === 0) {
|
|
158
|
-
classes.push('active');
|
|
159
|
-
}
|
|
160
|
-
if (!this.isApp(frame)) {
|
|
161
|
-
classes.push('native-frame');
|
|
162
|
-
}
|
|
163
|
-
return classes.join(' ');
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* serialize frame and return meaningful data
|
|
167
|
-
*
|
|
168
|
-
* @param {Object} frame - current frame
|
|
169
|
-
*/
|
|
170
|
-
serializeFrame(frame) {
|
|
171
|
-
const filename = frame.getFileName();
|
|
172
|
-
const relativeFileName = filename.includes(process.cwd())
|
|
173
|
-
? filename.replace(process.cwd(), '').replace(startingSlashRegex, '')
|
|
174
|
-
: filename;
|
|
175
|
-
const extname = node_path_1.default.extname(filename).replace('.', '');
|
|
176
|
-
return {
|
|
177
|
-
extname,
|
|
178
|
-
file: relativeFileName,
|
|
179
|
-
method: frame.getFunctionName(),
|
|
180
|
-
line: frame.getLineNumber(),
|
|
181
|
-
column: frame.getColumnNumber(),
|
|
182
|
-
context: this.getContext(frame),
|
|
183
|
-
classes: '',
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* serialize base data
|
|
188
|
-
*
|
|
189
|
-
* @param {Object} stack - frame stack
|
|
190
|
-
* @param {Function} frameFormatter - frame formatter function
|
|
191
|
-
*/
|
|
192
|
-
serializeData(stack, frameFormatter) {
|
|
193
|
-
const code = Reflect.get(this.error, 'code') ?? Reflect.get(this.error, 'type');
|
|
194
|
-
let message = (0, utils_js_1.detectErrorMessage)(this.ctx, this.error);
|
|
195
|
-
if (code) {
|
|
196
|
-
message = `${message} (code: ${code})`;
|
|
197
|
-
}
|
|
198
|
-
return {
|
|
199
|
-
code,
|
|
200
|
-
message,
|
|
201
|
-
name: this.error.name,
|
|
202
|
-
status: this.error.status,
|
|
203
|
-
frames: stack instanceof Array ? stack.filter(frame => frame.getFileName()).map(frameFormatter) : [],
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* serialize request object
|
|
208
|
-
*/
|
|
209
|
-
serializeRequest() {
|
|
210
|
-
const headers = [];
|
|
211
|
-
Object.keys(this.request.headers).forEach(key => {
|
|
212
|
-
if (this._filterHeaders.includes(key)) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
headers.push({
|
|
216
|
-
key,
|
|
217
|
-
value: this.request.headers[key],
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
const parsedCookies = (0, cookie_1.parse)(this.request.headers.cookie || '');
|
|
221
|
-
const cookies = Object.keys(parsedCookies).map(key => {
|
|
222
|
-
return { key, value: parsedCookies[key] };
|
|
223
|
-
});
|
|
224
|
-
return {
|
|
225
|
-
url: this.request.url,
|
|
226
|
-
httpVersion: this.request.req.httpVersion,
|
|
227
|
-
method: this.request.method,
|
|
228
|
-
connection: this.request.headers.connection,
|
|
229
|
-
headers,
|
|
230
|
-
cookies,
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* serialize app info object
|
|
235
|
-
*/
|
|
236
|
-
serializeAppInfo() {
|
|
237
|
-
let config = this.app.config;
|
|
238
|
-
if ('dumpConfigToObject' in this.app && typeof this.app.dumpConfigToObject === 'function') {
|
|
239
|
-
config = this.app.dumpConfigToObject().config.config;
|
|
240
|
-
}
|
|
241
|
-
return {
|
|
242
|
-
baseDir: this.app.config.baseDir,
|
|
243
|
-
config: node_util_1.default.inspect(config),
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
exports.ErrorView = ErrorView;
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Jfdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZXJyb3Jfdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsZ0ZBQWdGOzs7Ozs7QUFFaEYsc0RBQXlCO0FBQ3pCLDBEQUE2QjtBQUM3QiwwREFBNkI7QUFDN0IsbUNBQStCO0FBQy9CLHdEQUFnQztBQUNoQyw4REFBMEQ7QUFDMUQseUNBQWdEO0FBSWhELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDO0FBWW5DLE1BQWEsU0FBUztJQUNwQixHQUFHLENBQVU7SUFDYixLQUFLLENBQWU7SUFDcEIsT0FBTyxDQUFxQjtJQUM1QixHQUFHLENBQWlCO0lBQ3BCLE1BQU0sQ0FBc0I7SUFDNUIsWUFBWSxDQUFTO0lBRXJCLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDaEIsY0FBYyxHQUFHLENBQUUsUUFBUSxFQUFFLFlBQVksQ0FBRSxDQUFDO0lBRTVDLFlBQVksR0FBWSxFQUFFLEtBQW1CLEVBQUUsUUFBZ0I7UUFDN0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU07UUFDSixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEQsTUFB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
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Context, EggCore } from '@eggjs/core';
|
|
2
|
-
import type { OnerrorError } from 'koa-onerror';
|
|
3
|
-
export declare function detectErrorMessage(ctx: Context, err: OnerrorError): string;
|
|
4
|
-
export declare function detectStatus(err: OnerrorError): number;
|
|
5
|
-
export declare function accepts(ctx: Context): "json" | "js" | "html";
|
|
6
|
-
export declare function isProd(app: EggCore): boolean;
|
|
7
|
-
/**
|
|
8
|
-
* Get the source directory name
|
|
9
|
-
*/
|
|
10
|
-
export declare function getSourceDirname(): string;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.detectErrorMessage = detectErrorMessage;
|
|
7
|
-
exports.detectStatus = detectStatus;
|
|
8
|
-
exports.accepts = accepts;
|
|
9
|
-
exports.isProd = isProd;
|
|
10
|
-
exports.getSourceDirname = getSourceDirname;
|
|
11
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
-
const node_url_1 = require("node:url");
|
|
13
|
-
function detectErrorMessage(ctx, err) {
|
|
14
|
-
// detect json parse error
|
|
15
|
-
if (err.status === 400 &&
|
|
16
|
-
err.name === 'SyntaxError' &&
|
|
17
|
-
ctx.request.is('application/json', 'application/vnd.api+json', 'application/csp-report')) {
|
|
18
|
-
return 'Problems parsing JSON';
|
|
19
|
-
}
|
|
20
|
-
return err.message;
|
|
21
|
-
}
|
|
22
|
-
function detectStatus(err) {
|
|
23
|
-
// detect status
|
|
24
|
-
let status = err.status || 500;
|
|
25
|
-
if (status < 200) {
|
|
26
|
-
// invalid status consider as 500, like urllib will return -1 status
|
|
27
|
-
status = 500;
|
|
28
|
-
}
|
|
29
|
-
return status;
|
|
30
|
-
}
|
|
31
|
-
function accepts(ctx) {
|
|
32
|
-
if (ctx.acceptJSON)
|
|
33
|
-
return 'json';
|
|
34
|
-
if (ctx.acceptJSONP)
|
|
35
|
-
return 'js';
|
|
36
|
-
return 'html';
|
|
37
|
-
}
|
|
38
|
-
function isProd(app) {
|
|
39
|
-
return app.config.env !== 'local' && app.config.env !== 'unittest';
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Get the source directory name
|
|
43
|
-
*/
|
|
44
|
-
function getSourceDirname() {
|
|
45
|
-
if (typeof __dirname === 'string') {
|
|
46
|
-
return node_path_1.default.dirname(__dirname);
|
|
47
|
-
}
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
49
|
-
// @ts-ignore
|
|
50
|
-
const __filename = (0, node_url_1.fileURLToPath)('import_meta_url_placeholder_by_tshy_after');
|
|
51
|
-
return node_path_1.default.dirname(node_path_1.default.dirname(__filename));
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0EsZ0RBUUM7QUFFRCxvQ0FRQztBQUVELDBCQUlDO0FBRUQsd0JBRUM7QUFLRCw0Q0FRQztBQTlDRCwwREFBNkI7QUFDN0IsdUNBQXlDO0FBSXpDLFNBQWdCLGtCQUFrQixDQUFDLEdBQVksRUFBRSxHQUFpQjtJQUNoRSwwQkFBMEI7SUFDMUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7UUFDbEIsR0FBRyxDQUFDLElBQUksS0FBSyxhQUFhO1FBQzFCLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztRQUM3RixPQUFPLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxHQUFpQjtJQUM1QyxnQkFBZ0I7SUFDaEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUM7SUFDL0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDakIsb0VBQW9FO1FBQ3BFLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxHQUFZO0lBQ2xDLElBQUksR0FBRyxDQUFDLFVBQVU7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNsQyxJQUFJLEdBQUcsQ0FBQyxXQUFXO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDakMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLE1BQU0sQ0FBQyxHQUFZO0lBQ2pDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQztBQUNyRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0I7SUFDOUIsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxPQUFPLG1CQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCw2REFBNkQ7SUFDN0QsYUFBYTtJQUNiLE1BQU0sVUFBVSxHQUFHLElBQUEsd0JBQWEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sbUJBQUksQ0FBQyxPQUFPLENBQUMsbUJBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDIn0=
|
package/dist/commonjs/types.d.ts
DELETED
package/dist/commonjs/types.js
DELETED
package/dist/esm/agent.d.ts
DELETED
package/dist/esm/agent.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export default class Boot {
|
|
2
|
-
agent;
|
|
3
|
-
constructor(agent) {
|
|
4
|
-
this.agent = agent;
|
|
5
|
-
}
|
|
6
|
-
async didLoad() {
|
|
7
|
-
// should watch error event
|
|
8
|
-
this.agent.on('error', err => {
|
|
9
|
-
this.agent.coreLogger.error(err);
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE9BQU8sT0FBTyxJQUFJO0lBQ0g7SUFBcEIsWUFBb0IsS0FBYztRQUFkLFVBQUssR0FBTCxLQUFLLENBQVM7SUFBRyxDQUFDO0lBRXRDLEtBQUssQ0FBQyxPQUFPO1FBQ1gsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==
|
package/dist/esm/app.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type OnerrorError } from 'koa-onerror';
|
|
2
|
-
import type { ILifecycleBoot, EggCore } from '@eggjs/core';
|
|
3
|
-
export interface OnerrorErrorWithCode extends OnerrorError {
|
|
4
|
-
code?: string;
|
|
5
|
-
type?: string;
|
|
6
|
-
errors?: any[];
|
|
7
|
-
}
|
|
8
|
-
export default class Boot implements ILifecycleBoot {
|
|
9
|
-
private app;
|
|
10
|
-
constructor(app: EggCore);
|
|
11
|
-
didLoad(): Promise<void>;
|
|
12
|
-
}
|
package/dist/esm/app.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import http from 'node:http';
|
|
2
|
-
import fs from 'node:fs';
|
|
3
|
-
import { onerror } from 'koa-onerror';
|
|
4
|
-
import { ErrorView } from './lib/error_view.js';
|
|
5
|
-
import { isProd, detectStatus, detectErrorMessage, accepts } from './lib/utils.js';
|
|
6
|
-
export default class Boot {
|
|
7
|
-
app;
|
|
8
|
-
constructor(app) {
|
|
9
|
-
this.app = app;
|
|
10
|
-
}
|
|
11
|
-
async didLoad() {
|
|
12
|
-
// logging error
|
|
13
|
-
const config = this.app.config.onerror;
|
|
14
|
-
const viewTemplate = fs.readFileSync(config.templatePath, 'utf8');
|
|
15
|
-
const app = this.app;
|
|
16
|
-
app.on('error', (err, ctx) => {
|
|
17
|
-
if (!ctx) {
|
|
18
|
-
ctx = app.currentContext || app.createAnonymousContext();
|
|
19
|
-
}
|
|
20
|
-
if (config.appErrorFilter && !config.appErrorFilter(err, ctx))
|
|
21
|
-
return;
|
|
22
|
-
const status = detectStatus(err);
|
|
23
|
-
// 5xx
|
|
24
|
-
if (status >= 500) {
|
|
25
|
-
try {
|
|
26
|
-
ctx.logger.error(err);
|
|
27
|
-
}
|
|
28
|
-
catch (ex) {
|
|
29
|
-
app.logger.error(err);
|
|
30
|
-
app.logger.error(ex);
|
|
31
|
-
}
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
// 4xx
|
|
35
|
-
try {
|
|
36
|
-
ctx.logger.warn(err);
|
|
37
|
-
}
|
|
38
|
-
catch (ex) {
|
|
39
|
-
app.logger.warn(err);
|
|
40
|
-
app.logger.error(ex);
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
const errorOptions = {
|
|
44
|
-
// support customize accepts function
|
|
45
|
-
accepts() {
|
|
46
|
-
const fn = config.accepts || accepts;
|
|
47
|
-
return fn(this);
|
|
48
|
-
},
|
|
49
|
-
html(err, ctx) {
|
|
50
|
-
const status = detectStatus(err);
|
|
51
|
-
const errorPageUrl = typeof config.errorPageUrl === 'function'
|
|
52
|
-
? config.errorPageUrl(err, ctx)
|
|
53
|
-
: config.errorPageUrl;
|
|
54
|
-
// keep the real response status
|
|
55
|
-
ctx.realStatus = status;
|
|
56
|
-
// don't respond any error message in production env
|
|
57
|
-
if (isProd(app)) {
|
|
58
|
-
// 5xx
|
|
59
|
-
if (status >= 500) {
|
|
60
|
-
if (errorPageUrl) {
|
|
61
|
-
const statusQuery = (errorPageUrl.indexOf('?') > 0 ? '&' : '?') +
|
|
62
|
-
`real_status=${status}`;
|
|
63
|
-
return ctx.redirect(errorPageUrl + statusQuery);
|
|
64
|
-
}
|
|
65
|
-
ctx.status = 500;
|
|
66
|
-
ctx.body = `<h2>Internal Server Error, real status: ${status}</h2>`;
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
// 4xx
|
|
70
|
-
ctx.status = status;
|
|
71
|
-
ctx.body = `<h2>${status} ${http.STATUS_CODES[status]}</h2>`;
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
// show simple error format for unittest
|
|
75
|
-
if (app.config.env === 'unittest') {
|
|
76
|
-
ctx.status = status;
|
|
77
|
-
ctx.body = `${err.name}: ${err.message}\n${err.stack}`;
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
const errorView = new ErrorView(ctx, err, viewTemplate);
|
|
81
|
-
ctx.body = errorView.toHTML();
|
|
82
|
-
},
|
|
83
|
-
json(err, ctx) {
|
|
84
|
-
const status = detectStatus(err);
|
|
85
|
-
let errorJson = {};
|
|
86
|
-
ctx.status = status;
|
|
87
|
-
const code = err.code ?? err.type;
|
|
88
|
-
const message = detectErrorMessage(ctx, err);
|
|
89
|
-
if (isProd(app)) {
|
|
90
|
-
// 5xx server side error
|
|
91
|
-
if (status >= 500) {
|
|
92
|
-
errorJson = {
|
|
93
|
-
code,
|
|
94
|
-
// don't respond any error message in production env
|
|
95
|
-
message: http.STATUS_CODES[status],
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
// 4xx client side error
|
|
100
|
-
// addition `errors`
|
|
101
|
-
errorJson = {
|
|
102
|
-
code,
|
|
103
|
-
message,
|
|
104
|
-
errors: err.errors,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
errorJson = {
|
|
110
|
-
code,
|
|
111
|
-
message,
|
|
112
|
-
errors: err.errors,
|
|
113
|
-
};
|
|
114
|
-
if (status >= 500) {
|
|
115
|
-
// provide detail error stack in local env
|
|
116
|
-
errorJson.stack = err.stack;
|
|
117
|
-
errorJson.name = err.name;
|
|
118
|
-
for (const key in err) {
|
|
119
|
-
if (!errorJson[key]) {
|
|
120
|
-
errorJson[key] = err[key];
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
ctx.body = errorJson;
|
|
126
|
-
},
|
|
127
|
-
js(err, ctx) {
|
|
128
|
-
errorOptions.json.call(ctx, err, ctx);
|
|
129
|
-
if (ctx.createJsonpBody) {
|
|
130
|
-
ctx.createJsonpBody(ctx.body);
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
// support customize error response
|
|
135
|
-
const keys = ['all', 'html', 'json', 'text', 'js'];
|
|
136
|
-
for (const type of keys) {
|
|
137
|
-
if (config[type]) {
|
|
138
|
-
Reflect.set(errorOptions, type, config[type]);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
onerror(app, errorOptions);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQTBDLE1BQU0sYUFBYSxDQUFDO0FBRTlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVNuRixNQUFNLENBQUMsT0FBTyxPQUFPLElBQUk7SUFDSDtJQUFwQixZQUFvQixHQUFZO1FBQVosUUFBRyxHQUFILEdBQUcsQ0FBUztJQUFHLENBQUM7SUFFcEMsS0FBSyxDQUFDLE9BQU87UUFDWCxnQkFBZ0I7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsSUFBSSxHQUFHLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO2dCQUFFLE9BQU87WUFFdEUsTUFBTSxNQUFNLEdBQUcsWUFB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
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { Context } from '@eggjs/core';
|
|
2
|
-
import type { OnerrorError, OnerrorOptions } from 'koa-onerror';
|
|
3
|
-
export interface OnerrorConfig extends OnerrorOptions {
|
|
4
|
-
/**
|
|
5
|
-
* 5xx error will redirect to ${errorPageUrl}
|
|
6
|
-
* won't redirect in local env
|
|
7
|
-
*
|
|
8
|
-
* Default: `''`
|
|
9
|
-
*/
|
|
10
|
-
errorPageUrl: string | ((err: OnerrorError, ctx: Context) => string);
|
|
11
|
-
/**
|
|
12
|
-
* will execute `appErrorFilter` when emit an error in `app`
|
|
13
|
-
* If `appErrorFilter` return false, egg-onerror won't log this error.
|
|
14
|
-
* You can logging in `appErrorFilter` and return false to override the default error logging.
|
|
15
|
-
*
|
|
16
|
-
* Default: `undefined`
|
|
17
|
-
*/
|
|
18
|
-
appErrorFilter?: (err: OnerrorError, ctx: Context) => boolean;
|
|
19
|
-
/**
|
|
20
|
-
* default template path
|
|
21
|
-
*/
|
|
22
|
-
templatePath: string;
|
|
23
|
-
}
|
|
24
|
-
declare const _default: {
|
|
25
|
-
onerror: OnerrorConfig;
|
|
26
|
-
};
|
|
27
|
-
export default _default;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { getSourceDirname } from '../lib/utils.js';
|
|
3
|
-
export default {
|
|
4
|
-
onerror: {
|
|
5
|
-
errorPageUrl: '',
|
|
6
|
-
appErrorFilter: undefined,
|
|
7
|
-
templatePath: path.join(getSourceDirname(), 'lib/onerror_page.mustache.html'),
|
|
8
|
-
},
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUc3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQXdCbkQsZUFBZTtJQUNiLE9BQU8sRUFBRTtRQUNQLFlBQVksRUFBRSxFQUFFO1FBQ2hCLGNBQWMsRUFBRSxTQUFTO1FBQ3pCLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsZ0NBQWdDLENBQUM7S0FDN0Q7Q0FDbkIsQ0FBQyJ9
|
package/dist/esm/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import './types.js';
|
package/dist/esm/index.js
DELETED