@eggjs/onerror 4.0.0-beta.35 → 4.0.0-beta.36

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/dist/agent.d.ts CHANGED
@@ -1,6 +1,10 @@
1
- import type { ILifecycleBoot, Agent } from 'egg';
2
- export default class Boot implements ILifecycleBoot {
3
- private agent;
4
- constructor(agent: Agent);
5
- didLoad(): Promise<void>;
1
+ import { Agent, ILifecycleBoot } from "egg";
2
+
3
+ //#region src/agent.d.ts
4
+ declare class Boot implements ILifecycleBoot {
5
+ private agent;
6
+ constructor(agent: Agent);
7
+ didLoad(): Promise<void>;
6
8
  }
9
+ //#endregion
10
+ export { Boot as default };
package/dist/agent.js CHANGED
@@ -1,13 +1,15 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE9BQU8sT0FBTyxJQUFJO0lBQ2YsS0FBSyxDQUFRO0lBRXJCLFlBQVksS0FBWTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
1
+ //#region src/agent.ts
2
+ var Boot = class {
3
+ agent;
4
+ constructor(agent) {
5
+ this.agent = agent;
6
+ }
7
+ async didLoad() {
8
+ this.agent.on("error", (err) => {
9
+ this.agent.coreLogger.error(err);
10
+ });
11
+ }
12
+ };
13
+
14
+ //#endregion
15
+ export { Boot as default };
package/dist/app.d.ts CHANGED
@@ -1,12 +1,16 @@
1
- import type { ILifecycleBoot, Application } from 'egg';
2
- import { type OnerrorError } from 'koa-onerror';
3
- export interface OnerrorErrorWithCode extends OnerrorError {
4
- code?: string;
5
- type?: string;
6
- errors?: any[];
1
+ import { OnerrorError } from "koa-onerror";
2
+ import { Application, ILifecycleBoot } from "egg";
3
+
4
+ //#region src/app.d.ts
5
+ interface OnerrorErrorWithCode extends OnerrorError {
6
+ code?: string;
7
+ type?: string;
8
+ errors?: any[];
7
9
  }
8
- export default class Boot implements ILifecycleBoot {
9
- private app;
10
- constructor(app: Application);
11
- didLoad(): Promise<void>;
10
+ declare class Boot implements ILifecycleBoot {
11
+ private app;
12
+ constructor(app: Application);
13
+ didLoad(): Promise<void>;
12
14
  }
15
+ //#endregion
16
+ export { OnerrorErrorWithCode, Boot as default };
package/dist/app.js CHANGED
@@ -1,141 +1,111 @@
1
- import fs from 'node:fs';
2
- import http from 'node:http';
3
- import { onerror } from 'koa-onerror';
1
+ import { accepts, detectErrorMessage, detectStatus, isProd } from "./lib/utils.js";
4
2
  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' ? config.errorPageUrl(err, ctx) : config.errorPageUrl;
52
- // keep the real response status
53
- ctx.realStatus = status;
54
- // don't respond any error message in production env
55
- if (isProd(app)) {
56
- // 5xx
57
- if (status >= 500) {
58
- if (errorPageUrl) {
59
- const statusQuery = (errorPageUrl.indexOf('?') > 0 ? '&' : '?') + `real_status=${status}`;
60
- return ctx.redirect(errorPageUrl + statusQuery);
61
- }
62
- ctx.status = 500;
63
- ctx.body = `<h2>Internal Server Error, real status: ${status}</h2>`;
64
- return;
65
- }
66
- // 4xx
67
- ctx.status = status;
68
- ctx.body = `<h2>${status} ${http.STATUS_CODES[status]}</h2>`;
69
- return;
70
- }
71
- // show simple error format for unittest
72
- if (app.config.env === 'unittest') {
73
- ctx.status = status;
74
- ctx.body = `${err.name}: ${err.message}\n${err.stack}`;
75
- return;
76
- }
77
- const errorView = new ErrorView(ctx, err, viewTemplate);
78
- ctx.body = errorView.toHTML();
79
- },
80
- json(err, ctx) {
81
- const status = detectStatus(err);
82
- let errorJson = {};
83
- ctx.status = status;
84
- const code = err.code ?? err.type;
85
- const message = detectErrorMessage(ctx, err);
86
- if (isProd(app)) {
87
- // 5xx server side error
88
- if (status >= 500) {
89
- errorJson = {
90
- code,
91
- // don't respond any error message in production env
92
- message: http.STATUS_CODES[status],
93
- };
94
- }
95
- else {
96
- // 4xx client side error
97
- // addition `errors`
98
- errorJson = {
99
- code,
100
- message,
101
- errors: err.errors,
102
- };
103
- }
104
- }
105
- else {
106
- errorJson = {
107
- code,
108
- message,
109
- errors: err.errors,
110
- };
111
- if (status >= 500) {
112
- // provide detail error stack in local env
113
- errorJson.stack = err.stack;
114
- errorJson.name = err.name;
115
- for (const key in err) {
116
- if (!errorJson[key]) {
117
- errorJson[key] = err[key];
118
- }
119
- }
120
- }
121
- }
122
- ctx.body = errorJson;
123
- },
124
- js(err, ctx) {
125
- errorOptions.json.call(ctx, err, ctx);
126
- if (typeof ctx.createJsonpBody === 'function') {
127
- ctx.createJsonpBody(ctx.body);
128
- }
129
- },
130
- };
131
- // support customize error response
132
- const keys = ['all', 'html', 'json', 'text', 'js'];
133
- for (const type of keys) {
134
- if (config[type]) {
135
- Reflect.set(errorOptions, type, config[type]);
136
- }
137
- }
138
- onerror(app, errorOptions);
139
- }
140
- }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRzdCLE9BQU8sRUFBRSxPQUFPLEVBQTBDLE1BQU0sYUFBYSxDQUFDO0FBRzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVFuRixNQUFNLENBQUMsT0FBTyxPQUFPLElBQUk7SUFDZixHQUFHLENBQWM7SUFDekIsWUFBWSxHQUFnQjtRQUMxQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxnQkFBZ0I7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsSUFBSSxHQUFHLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO2dCQUFFLE9BQU87WUFFdEUs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
3
+ import fs from "node:fs";
4
+ import http from "node:http";
5
+ import { onerror } from "koa-onerror";
6
+
7
+ //#region src/app.ts
8
+ var Boot = class {
9
+ app;
10
+ constructor(app) {
11
+ this.app = app;
12
+ }
13
+ async didLoad() {
14
+ const config = this.app.config.onerror;
15
+ const viewTemplate = fs.readFileSync(config.templatePath, "utf8");
16
+ const app = this.app;
17
+ app.on("error", (err, ctx) => {
18
+ if (!ctx) ctx = app.currentContext || app.createAnonymousContext();
19
+ if (config.appErrorFilter && !config.appErrorFilter(err, ctx)) return;
20
+ if (detectStatus(err) >= 500) {
21
+ try {
22
+ ctx.logger.error(err);
23
+ } catch (ex) {
24
+ app.logger.error(err);
25
+ app.logger.error(ex);
26
+ }
27
+ return;
28
+ }
29
+ try {
30
+ ctx.logger.warn(err);
31
+ } catch (ex) {
32
+ app.logger.warn(err);
33
+ app.logger.error(ex);
34
+ }
35
+ });
36
+ const errorOptions = {
37
+ accepts() {
38
+ return (config.accepts || accepts)(this);
39
+ },
40
+ html(err, ctx) {
41
+ const status = detectStatus(err);
42
+ const errorPageUrl = typeof config.errorPageUrl === "function" ? config.errorPageUrl(err, ctx) : config.errorPageUrl;
43
+ ctx.realStatus = status;
44
+ if (isProd(app)) {
45
+ if (status >= 500) {
46
+ if (errorPageUrl) {
47
+ const statusQuery = (errorPageUrl.indexOf("?") > 0 ? "&" : "?") + `real_status=${status}`;
48
+ return ctx.redirect(errorPageUrl + statusQuery);
49
+ }
50
+ ctx.status = 500;
51
+ ctx.body = `<h2>Internal Server Error, real status: ${status}</h2>`;
52
+ return;
53
+ }
54
+ ctx.status = status;
55
+ ctx.body = `<h2>${status} ${http.STATUS_CODES[status]}</h2>`;
56
+ return;
57
+ }
58
+ if (app.config.env === "unittest") {
59
+ ctx.status = status;
60
+ ctx.body = `${err.name}: ${err.message}\n${err.stack}`;
61
+ return;
62
+ }
63
+ ctx.body = new ErrorView(ctx, err, viewTemplate).toHTML();
64
+ },
65
+ json(err, ctx) {
66
+ const status = detectStatus(err);
67
+ let errorJson = {};
68
+ ctx.status = status;
69
+ const code = err.code ?? err.type;
70
+ const message = detectErrorMessage(ctx, err);
71
+ if (isProd(app)) if (status >= 500) errorJson = {
72
+ code,
73
+ message: http.STATUS_CODES[status]
74
+ };
75
+ else errorJson = {
76
+ code,
77
+ message,
78
+ errors: err.errors
79
+ };
80
+ else {
81
+ errorJson = {
82
+ code,
83
+ message,
84
+ errors: err.errors
85
+ };
86
+ if (status >= 500) {
87
+ errorJson.stack = err.stack;
88
+ errorJson.name = err.name;
89
+ for (const key in err) if (!errorJson[key]) errorJson[key] = err[key];
90
+ }
91
+ }
92
+ ctx.body = errorJson;
93
+ },
94
+ js(err, ctx) {
95
+ errorOptions.json.call(ctx, err, ctx);
96
+ if (typeof ctx.createJsonpBody === "function") ctx.createJsonpBody(ctx.body);
97
+ }
98
+ };
99
+ for (const type of [
100
+ "all",
101
+ "html",
102
+ "json",
103
+ "text",
104
+ "js"
105
+ ]) if (config[type]) Reflect.set(errorOptions, type, config[type]);
106
+ onerror(app, errorOptions);
107
+ }
108
+ };
109
+
110
+ //#endregion
111
+ export { Boot as default };
@@ -1,27 +1,30 @@
1
- import type { Context } from 'egg';
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;
1
+ import { OnerrorError, OnerrorOptions } from "koa-onerror";
2
+ import { Context } from "egg";
3
+
4
+ //#region src/config/config.default.d.ts
5
+ interface OnerrorConfig extends OnerrorOptions {
6
+ /**
7
+ * 5xx error will redirect to ${errorPageUrl}
8
+ * won't redirect in local env
9
+ *
10
+ * Default: `''`
11
+ */
12
+ errorPageUrl: string | ((err: OnerrorError, ctx: Context) => string);
13
+ /**
14
+ * will execute `appErrorFilter` when emit an error in `app`
15
+ * If `appErrorFilter` return false, egg-onerror won't log this error.
16
+ * You can logging in `appErrorFilter` and return false to override the default error logging.
17
+ *
18
+ * Default: `undefined`
19
+ */
20
+ appErrorFilter?: (err: OnerrorError, ctx: Context) => boolean;
21
+ /**
22
+ * default template path
23
+ */
24
+ templatePath: string;
23
25
  }
24
26
  declare const _default: {
25
- onerror: OnerrorConfig;
27
+ onerror: OnerrorConfig;
26
28
  };
27
- export default _default;
29
+ //#endregion
30
+ export { OnerrorConfig, _default as default };
@@ -1,9 +1,11 @@
1
- import path from 'node:path';
2
- export default {
3
- onerror: {
4
- errorPageUrl: '',
5
- appErrorFilter: undefined,
6
- templatePath: path.join(import.meta.dirname, '../lib/onerror_page.mustache.html'),
7
- },
8
- };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQTJCN0IsZUFBZTtJQUNiLE9BQU8sRUFBRTtRQUNQLFlBQVksRUFBRSxFQUFFO1FBQ2hCLGNBQWMsRUFBRSxTQUFTO1FBQ3pCLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG1DQUFtQyxDQUFDO0tBQ2pFO0NBQ25CLENBQUMifQ==
1
+ import path from "node:path";
2
+
3
+ //#region src/config/config.default.ts
4
+ var config_default_default = { onerror: {
5
+ errorPageUrl: "",
6
+ appErrorFilter: void 0,
7
+ templatePath: path.join(import.meta.dirname, "../lib/onerror_page.mustache.html")
8
+ } };
9
+
10
+ //#endregion
11
+ export { config_default_default as default };
package/dist/index.d.ts CHANGED
@@ -1,18 +1,22 @@
1
- import './types.ts';
2
- import { type EggPluginFactory } from 'egg';
1
+ import "./types.js";
2
+ import { EggPluginFactory } from "egg";
3
+
4
+ //#region src/index.d.ts
5
+
3
6
  /**
4
- * Onerror plugin
5
- *
6
- * @since 4.1.0
7
- * Usage:
8
- * ```ts
9
- * // config/plugin.ts
10
- * import onerrorPlugin from '@eggjs/onerror';
11
- *
12
- * export default {
13
- * ...onerrorPlugin(),
14
- * };
15
- * ```
16
- */
7
+ * Onerror plugin
8
+ *
9
+ * @since 4.1.0
10
+ * Usage:
11
+ * ```ts
12
+ * // config/plugin.ts
13
+ * import onerrorPlugin from '@eggjs/onerror';
14
+ *
15
+ * export default {
16
+ * ...onerrorPlugin(),
17
+ * };
18
+ * ```
19
+ */
17
20
  declare const _default: EggPluginFactory;
18
- export default _default;
21
+ //#endregion
22
+ export { _default as default };
package/dist/index.js CHANGED
@@ -1,23 +1,26 @@
1
- import "./types.js";
2
- import { definePluginFactory } from 'egg';
1
+ import { definePluginFactory } from "egg";
2
+
3
+ //#region src/index.ts
3
4
  /**
4
- * Onerror plugin
5
- *
6
- * @since 4.1.0
7
- * Usage:
8
- * ```ts
9
- * // config/plugin.ts
10
- * import onerrorPlugin from '@eggjs/onerror';
11
- *
12
- * export default {
13
- * ...onerrorPlugin(),
14
- * };
15
- * ```
16
- */
17
- export default definePluginFactory({
18
- name: 'onerror',
19
- enable: true,
20
- path: import.meta.dirname,
21
- optionalDependencies: ['jsonp'],
5
+ * Onerror plugin
6
+ *
7
+ * @since 4.1.0
8
+ * Usage:
9
+ * ```ts
10
+ * // config/plugin.ts
11
+ * import onerrorPlugin from '@eggjs/onerror';
12
+ *
13
+ * export default {
14
+ * ...onerrorPlugin(),
15
+ * };
16
+ * ```
17
+ */
18
+ var src_default = definePluginFactory({
19
+ name: "onerror",
20
+ enable: true,
21
+ path: import.meta.dirname,
22
+ optionalDependencies: ["jsonp"]
22
23
  });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLG1CQUFtQixFQUF5QixNQUFNLEtBQUssQ0FBQztBQUVqRTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsZUFBZSxtQkFBbUIsQ0FBQztJQUNqQyxJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxJQUFJO0lBQ1osSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTztJQUN6QixvQkFBb0IsRUFBRSxDQUFDLE9BQU8sQ0FBQztDQUNoQyxDQUFxQixDQUFDIn0=
24
+
25
+ //#endregion
26
+ export { src_default as default };