@eggjs/jsonp 4.0.0-beta.19 → 4.0.0-beta.21

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.
@@ -1,14 +1,10 @@
1
- import { JSONPConfig } from "../../config/config.default.js";
2
- import { Application, MiddlewareFunc } from "egg";
3
-
4
- //#region src/app/extend/application.d.ts
5
- declare class JSONPApplication extends Application {
6
- /**
7
- * return a middleware to enable jsonp response.
8
- * will do some security check inside.
9
- * @public
10
- */
11
- jsonp(initOptions?: Partial<JSONPConfig>): MiddlewareFunc;
1
+ import { Application, type MiddlewareFunc } from 'egg';
2
+ import type { JSONPConfig } from '../../config/config.default.ts';
3
+ export default class JSONPApplication extends Application {
4
+ /**
5
+ * return a middleware to enable jsonp response.
6
+ * will do some security check inside.
7
+ * @public
8
+ */
9
+ jsonp(initOptions?: Partial<JSONPConfig>): MiddlewareFunc;
12
10
  }
13
- //#endregion
14
- export { JSONPApplication as default };
@@ -1,83 +1,113 @@
1
- import { JSONPForbiddenReferrerError } from "../../error/JSONPForbiddenReferrerError.js";
1
+ import { debuglog } from 'node:util';
2
+ import { parse as urlParse } from 'node:url';
3
+ import { Application } from 'egg';
2
4
  import { JSONP_CONFIG } from "../../lib/private_key.js";
3
- import "./context.js";
4
- import { debuglog } from "node:util";
5
- import { parse } from "node:url";
6
- import { Application } from "egg";
7
-
8
- //#region src/app/extend/application.ts
9
- const debug = debuglog("egg/jsonp/app/extend/application");
10
- var JSONPApplication = class extends Application {
11
- /**
12
- * return a middleware to enable jsonp response.
13
- * will do some security check inside.
14
- * @public
15
- */
16
- jsonp(initOptions = {}) {
17
- const options = {
18
- ...this.config.jsonp,
19
- ...initOptions
20
- };
21
- if (!Array.isArray(options.callback)) options.callback = [options.callback];
22
- const csrfEnable = this.plugins.security && this.plugins.security.enable && this.config.security.csrf && this.config.security.csrf.enable !== false && options.csrf;
23
- const validateReferrer = options.whiteList && createValidateReferer(options.whiteList);
24
- if (!csrfEnable && !validateReferrer) this.coreLogger.warn("[@eggjs/jsonp] SECURITY WARNING!! csrf check and referrer check are both closed!");
25
- /**
26
- * jsonp request security check, pass if
27
- *
28
- * 1. hit referrer white list
29
- * 2. or pass csrf check
30
- * 3. both check are disabled
31
- *
32
- * @param {Context} ctx request context
33
- */
34
- function securityAssert(ctx) {
35
- if (!csrfEnable && !validateReferrer) return;
36
- const referrer = ctx.get("referrer");
37
- if (validateReferrer && validateReferrer(referrer)) return;
38
- if (csrfEnable && validateCsrf(ctx)) return;
39
- throw new JSONPForbiddenReferrerError("jsonp request security validate failed", referrer, 403);
40
- }
41
- return async function jsonp(ctx, next) {
42
- ctx[JSONP_CONFIG] = {
43
- jsonpFunction: getJsonpFunction(ctx.query, options.callback),
44
- options
45
- };
46
- securityAssert(ctx);
47
- await next();
48
- ctx.createJsonpBody(ctx.body);
49
- };
50
- }
51
- };
5
+ import { JSONPForbiddenReferrerError } from "../../error/JSONPForbiddenReferrerError.js";
6
+ import JSONPContext from "./context.js";
7
+ const debug = debuglog('egg/jsonp/app/extend/application');
8
+ export default class JSONPApplication extends Application {
9
+ /**
10
+ * return a middleware to enable jsonp response.
11
+ * will do some security check inside.
12
+ * @public
13
+ */
14
+ jsonp(initOptions = {}) {
15
+ const options = {
16
+ ...this.config.jsonp,
17
+ ...initOptions,
18
+ };
19
+ if (!Array.isArray(options.callback)) {
20
+ options.callback = [options.callback];
21
+ }
22
+ const csrfEnable = this.plugins.security &&
23
+ this.plugins.security.enable && // security enable
24
+ this.config.security.csrf &&
25
+ this.config.security.csrf.enable !== false && // csrf enable
26
+ options.csrf; // jsonp csrf enabled
27
+ const validateReferrer = options.whiteList && createValidateReferer(options.whiteList);
28
+ if (!csrfEnable && !validateReferrer) {
29
+ this.coreLogger.warn('[@eggjs/jsonp] SECURITY WARNING!! csrf check and referrer check are both closed!');
30
+ }
31
+ /**
32
+ * jsonp request security check, pass if
33
+ *
34
+ * 1. hit referrer white list
35
+ * 2. or pass csrf check
36
+ * 3. both check are disabled
37
+ *
38
+ * @param {Context} ctx request context
39
+ */
40
+ function securityAssert(ctx) {
41
+ // all disabled. don't need check
42
+ if (!csrfEnable && !validateReferrer)
43
+ return;
44
+ // pass referrer check
45
+ const referrer = ctx.get('referrer');
46
+ if (validateReferrer && validateReferrer(referrer))
47
+ return;
48
+ if (csrfEnable && validateCsrf(ctx))
49
+ return;
50
+ throw new JSONPForbiddenReferrerError('jsonp request security validate failed', referrer, 403);
51
+ }
52
+ return async function jsonp(ctx, next) {
53
+ const jsonpFunction = getJsonpFunction(ctx.query, options.callback);
54
+ ctx[JSONP_CONFIG] = {
55
+ jsonpFunction,
56
+ options,
57
+ };
58
+ // before handle request, must do some security checks
59
+ securityAssert(ctx);
60
+ await next();
61
+ // generate jsonp body
62
+ ctx.createJsonpBody(ctx.body);
63
+ };
64
+ }
65
+ }
52
66
  function createValidateReferer(whiteList) {
53
- if (!Array.isArray(whiteList)) whiteList = [whiteList];
54
- return (referrer) => {
55
- let parsed;
56
- for (const rule of whiteList) {
57
- if (rule instanceof RegExp) {
58
- if (rule.test(referrer)) return true;
59
- continue;
60
- }
61
- parsed = parsed ?? parse(referrer);
62
- const hostname = parsed.hostname || "";
63
- if (rule[0] === "." && (hostname.endsWith(rule) || hostname === rule.slice(1))) return true;
64
- else if (hostname === rule) return true;
65
- }
66
- return false;
67
- };
67
+ if (!Array.isArray(whiteList)) {
68
+ whiteList = [whiteList];
69
+ }
70
+ return (referrer) => {
71
+ let parsed;
72
+ for (const rule of whiteList) {
73
+ if (rule instanceof RegExp) {
74
+ if (rule.test(referrer)) {
75
+ // regexp(/^https?:\/\/github.com\//): test the referrer with rule
76
+ return true;
77
+ }
78
+ continue;
79
+ }
80
+ parsed = parsed ?? urlParse(referrer);
81
+ const hostname = parsed.hostname || '';
82
+ // check if referrer's hostname match the string rule
83
+ if (rule[0] === '.' && (hostname.endsWith(rule) || hostname === rule.slice(1))) {
84
+ // string start with `.`(.github.com): referrer's hostname must ends with rule
85
+ return true;
86
+ }
87
+ else if (hostname === rule) {
88
+ // string not start with `.`(github.com): referrer's hostname must strict equal to rule
89
+ return true;
90
+ }
91
+ }
92
+ // no rule matched
93
+ return false;
94
+ };
68
95
  }
69
96
  function validateCsrf(ctx) {
70
- try {
71
- ctx.assertCsrf();
72
- return true;
73
- } catch (err) {
74
- debug("validate csrf failed: %s", err);
75
- return false;
76
- }
97
+ try {
98
+ ctx.assertCsrf();
99
+ return true;
100
+ }
101
+ catch (err) {
102
+ debug('validate csrf failed: %s', err);
103
+ return false;
104
+ }
77
105
  }
78
106
  function getJsonpFunction(query, callbacks) {
79
- for (const callback of callbacks) if (query[callback]) return query[callback];
107
+ for (const callback of callbacks) {
108
+ if (query[callback]) {
109
+ return query[callback];
110
+ }
111
+ }
80
112
  }
81
-
82
- //#endregion
83
- export { JSONPApplication as default };
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2V4dGVuZC9hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLElBQUksUUFBUSxFQUEyQixNQUFNLFVBQVUsQ0FBQztBQUd0RSxPQUFPLEVBQUUsV0FBVyxFQUFxQyxNQUFNLEtBQUssQ0FBQztBQUVyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxZQUFZLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWlCLFNBQVEsV0FBVztJQUN2RDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGNBQW9DLEVBQUU7UUFDMUMsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztZQUNwQixHQUFHLFdBQVc7U0FDeUIsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVE7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLGtCQUFrQjtZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxD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
@@ -1,25 +1,21 @@
1
- import { JSONPConfig } from "../../config/config.default.js";
2
- import { JSONP_CONFIG } from "../../lib/private_key.js";
3
- import { Context } from "egg";
4
-
5
- //#region src/app/extend/context.d.ts
6
- declare class JSONPContext extends Context {
7
- [JSONP_CONFIG]?: {
8
- jsonpFunction?: string;
9
- options?: JSONPConfig;
10
- };
11
- /**
12
- * detect if response should be jsonp
13
- */
14
- get acceptJSONP(): boolean;
15
- /**
16
- * JSONP wrap body function
17
- * Set jsonp response wrap function, other plugin can use it.
18
- * If not necessary, please don't use this method in your application code.
19
- * @param {Object} body response body
20
- * @private
21
- */
22
- createJsonpBody(body: any): void;
1
+ import { Context } from 'egg';
2
+ import { JSONP_CONFIG } from '../../lib/private_key.ts';
3
+ import type { JSONPConfig } from '../../config/config.default.ts';
4
+ export default class JSONPContext extends Context {
5
+ [JSONP_CONFIG]?: {
6
+ jsonpFunction?: string;
7
+ options?: JSONPConfig;
8
+ };
9
+ /**
10
+ * detect if response should be jsonp
11
+ */
12
+ get acceptJSONP(): boolean;
13
+ /**
14
+ * JSONP wrap body function
15
+ * Set jsonp response wrap function, other plugin can use it.
16
+ * If not necessary, please don't use this method in your application code.
17
+ * @param {Object} body response body
18
+ * @private
19
+ */
20
+ createJsonpBody(body: any): void;
23
21
  }
24
- //#endregion
25
- export { JSONPContext as default };
@@ -1,34 +1,32 @@
1
+ import { jsonp as jsonpBody } from 'jsonp-body';
2
+ import { Context } from 'egg';
1
3
  import { JSONP_CONFIG } from "../../lib/private_key.js";
2
- import { Context } from "egg";
3
- import { jsonp } from "jsonp-body";
4
-
5
- //#region src/app/extend/context.ts
6
- var JSONPContext = class extends Context {
7
- /**
8
- * detect if response should be jsonp
9
- */
10
- get acceptJSONP() {
11
- return !!this[JSONP_CONFIG]?.jsonpFunction;
12
- }
13
- /**
14
- * JSONP wrap body function
15
- * Set jsonp response wrap function, other plugin can use it.
16
- * If not necessary, please don't use this method in your application code.
17
- * @param {Object} body response body
18
- * @private
19
- */
20
- createJsonpBody(body) {
21
- const jsonpConfig = this[JSONP_CONFIG];
22
- if (!jsonpConfig?.jsonpFunction) {
23
- this.body = body;
24
- return;
25
- }
26
- this.set("x-content-type-options", "nosniff");
27
- this.type = "js";
28
- body = body === void 0 ? null : body;
29
- this.body = jsonp(body, jsonpConfig.jsonpFunction, jsonpConfig.options);
30
- }
31
- };
32
-
33
- //#endregion
34
- export { JSONPContext as default };
4
+ export default class JSONPContext extends Context {
5
+ /**
6
+ * detect if response should be jsonp
7
+ */
8
+ get acceptJSONP() {
9
+ const jsonpConfig = this[JSONP_CONFIG];
10
+ return !!jsonpConfig?.jsonpFunction;
11
+ }
12
+ /**
13
+ * JSONP wrap body function
14
+ * Set jsonp response wrap function, other plugin can use it.
15
+ * If not necessary, please don't use this method in your application code.
16
+ * @param {Object} body response body
17
+ * @private
18
+ */
19
+ createJsonpBody(body) {
20
+ const jsonpConfig = this[JSONP_CONFIG];
21
+ if (!jsonpConfig?.jsonpFunction) {
22
+ this.body = body;
23
+ return;
24
+ }
25
+ this.set('x-content-type-options', 'nosniff');
26
+ this.type = 'js';
27
+ body = body === undefined ? null : body;
28
+ // protect from jsonp xss
29
+ this.body = jsonpBody(body, jsonpConfig.jsonpFunction, jsonpConfig.options);
30
+ }
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUU5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFhLFNBQVEsT0FBTztJQU0vQzs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxlQUFlLENBQUMsSUFBUztRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxHQUFHLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hDLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUUsQ0FBQztDQUNGIn0=
@@ -1,24 +1,21 @@
1
- import { PartialEggConfig } from "egg";
2
-
3
- //#region src/config/config.default.d.ts
4
- interface JSONPConfig {
5
- /**
6
- * jsonp callback methods key, default to `['_callback', 'callback' ]`
7
- */
8
- callback: string[] | string;
9
- /**
10
- * callback method name's max length, default to `50`
11
- */
12
- limit: number;
13
- /**
14
- * enable csrf check or not, default to `false`
15
- */
16
- csrf: boolean;
17
- /**
18
- * referrer white list, default to `undefined`
19
- */
20
- whiteList?: string | RegExp | (string | RegExp)[];
1
+ import type { PartialEggConfig } from 'egg';
2
+ export interface JSONPConfig {
3
+ /**
4
+ * jsonp callback methods key, default to `['_callback', 'callback' ]`
5
+ */
6
+ callback: string[] | string;
7
+ /**
8
+ * callback method name's max length, default to `50`
9
+ */
10
+ limit: number;
11
+ /**
12
+ * enable csrf check or not, default to `false`
13
+ */
14
+ csrf: boolean;
15
+ /**
16
+ * referrer white list, default to `undefined`
17
+ */
18
+ whiteList?: string | RegExp | (string | RegExp)[];
21
19
  }
22
20
  declare const _default: PartialEggConfig;
23
- //#endregion
24
- export { JSONPConfig, _default as default };
21
+ export default _default;
@@ -1,10 +1,9 @@
1
- //#region src/config/config.default.ts
2
- var config_default_default = { jsonp: {
3
- limit: 50,
4
- callback: ["_callback", "callback"],
5
- csrf: false,
6
- whiteList: void 0
7
- } };
8
-
9
- //#endregion
10
- export { config_default_default as default };
1
+ export default {
2
+ jsonp: {
3
+ limit: 50,
4
+ callback: ['_callback', 'callback'],
5
+ csrf: false,
6
+ whiteList: undefined,
7
+ },
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFCQSxlQUFlO0lBQ2IsS0FBSyxFQUFFO1FBQ0wsS0FBSyxFQUFFLEVBQUU7UUFDVCxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO1FBQ25DLElBQUksRUFBRSxLQUFLO1FBQ1gsU0FBUyxFQUFFLFNBQVM7S0FDckI7Q0FDa0IsQ0FBQyJ9
@@ -1,8 +1,5 @@
1
- //#region src/error/JSONPForbiddenReferrerError.d.ts
2
- declare class JSONPForbiddenReferrerError extends Error {
3
- referrer: string;
4
- status: number;
5
- constructor(message: string, referrer: string, status: number);
1
+ export declare class JSONPForbiddenReferrerError extends Error {
2
+ referrer: string;
3
+ status: number;
4
+ constructor(message: string, referrer: string, status: number);
6
5
  }
7
- //#endregion
8
- export { JSONPForbiddenReferrerError };
@@ -1,15 +1,12 @@
1
- //#region src/error/JSONPForbiddenReferrerError.ts
2
- var JSONPForbiddenReferrerError = class extends Error {
3
- referrer;
4
- status;
5
- constructor(message, referrer, status) {
6
- super(message);
7
- this.name = this.constructor.name;
8
- this.referrer = referrer;
9
- this.status = status;
10
- Error.captureStackTrace(this, this.constructor);
11
- }
12
- };
13
-
14
- //#endregion
15
- export { JSONPForbiddenReferrerError };
1
+ export class JSONPForbiddenReferrerError extends Error {
2
+ referrer;
3
+ status;
4
+ constructor(message, referrer, status) {
5
+ super(message);
6
+ this.name = this.constructor.name;
7
+ this.referrer = referrer;
8
+ this.status = status;
9
+ Error.captureStackTrace(this, this.constructor);
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSlNPTlBGb3JiaWRkZW5SZWZlcnJlckVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vycm9yL0pTT05QRm9yYmlkZGVuUmVmZXJyZXJFcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsS0FBSztJQUNwRCxRQUFRLENBQVM7SUFDakIsTUFBTSxDQUFTO0lBRWYsWUFBWSxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxNQUFjO1FBQzNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGIn0=
package/dist/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { };
1
+ import './types.ts';
package/dist/index.js CHANGED
@@ -1 +1,2 @@
1
- export { };
1
+ import "./types.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUMifQ==
@@ -1,4 +1 @@
1
- //#region src/lib/private_key.d.ts
2
- declare const JSONP_CONFIG: unique symbol;
3
- //#endregion
4
- export { JSONP_CONFIG };
1
+ export declare const JSONP_CONFIG: unique symbol;
@@ -1,5 +1,2 @@
1
- //#region src/lib/private_key.ts
2
- const JSONP_CONFIG = Symbol("jsonp#config");
3
-
4
- //#endregion
5
- export { JSONP_CONFIG };
1
+ export const JSONP_CONFIG = Symbol('jsonp#config');
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3ByaXZhdGVfa2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMifQ==
package/dist/types.d.ts CHANGED
@@ -1,35 +1,33 @@
1
- import { JSONPConfig } from "./config/config.default.js";
2
- import { MiddlewareFunc } from "egg";
3
-
4
- //#region src/types.d.ts
1
+ import type { MiddlewareFunc } from 'egg';
2
+ import type { JSONPConfig } from './config/config.default.ts';
5
3
  declare module 'egg' {
6
- interface EggAppConfig {
7
- /**
8
- * jsonp options
9
- * @member Config#jsonp
10
- */
11
- jsonp?: JSONPConfig;
12
- }
13
- interface Context {
14
- /**
15
- * detect if response should be jsonp
16
- */
17
- acceptJSONP: boolean;
18
- /**
19
- * JSONP wrap body function
20
- * Set jsonp response wrap function, other plugin can use it.
21
- * If not necessary, please don't use this method in your application code.
22
- * @param {Object} body response body
23
- * @private
24
- */
25
- createJsonpBody(body: any): void;
26
- }
27
- interface Application {
28
- /**
29
- * return a middleware to enable jsonp response.
30
- * will do some security check inside.
31
- * @public
32
- */
33
- jsonp(initOptions?: Partial<JSONPConfig>): MiddlewareFunc;
34
- }
35
- }
4
+ interface EggAppConfig {
5
+ /**
6
+ * jsonp options
7
+ * @member Config#jsonp
8
+ */
9
+ jsonp?: JSONPConfig;
10
+ }
11
+ interface Context {
12
+ /**
13
+ * detect if response should be jsonp
14
+ */
15
+ acceptJSONP: boolean;
16
+ /**
17
+ * JSONP wrap body function
18
+ * Set jsonp response wrap function, other plugin can use it.
19
+ * If not necessary, please don't use this method in your application code.
20
+ * @param {Object} body response body
21
+ * @private
22
+ */
23
+ createJsonpBody(body: any): void;
24
+ }
25
+ interface Application {
26
+ /**
27
+ * return a middleware to enable jsonp response.
28
+ * will do some security check inside.
29
+ * @public
30
+ */
31
+ jsonp(initOptions?: Partial<JSONPConfig>): MiddlewareFunc;
32
+ }
33
+ }
package/dist/types.js CHANGED
@@ -1 +1,2 @@
1
- export { };
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/jsonp",
3
- "version": "4.0.0-beta.19",
3
+ "version": "4.0.0-beta.21",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -49,21 +49,21 @@
49
49
  "jsonp-body": "^2.0.0"
50
50
  },
51
51
  "peerDependencies": {
52
- "egg": "4.1.0-beta.19"
52
+ "egg": "4.1.0-beta.21"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@types/node": "^24.6.2",
56
56
  "tsdown": "^0.15.4",
57
57
  "typescript": "^5.9.3",
58
58
  "vitest": "4.0.0-beta.16",
59
- "@eggjs/mock": "7.0.0-beta.19",
60
- "@eggjs/tsconfig": "3.1.0-beta.19"
59
+ "@eggjs/mock": "7.0.0-beta.21",
60
+ "@eggjs/tsconfig": "3.1.0-beta.21"
61
61
  },
62
62
  "main": "./dist/index.js",
63
63
  "module": "./dist/index.js",
64
64
  "types": "./dist/index.d.ts",
65
65
  "scripts": {
66
- "build": "tsdown",
66
+ "build": "tsdown && rimraf dist && tsc -b --clean && tsc",
67
67
  "typecheck": "tsc --noEmit",
68
68
  "lint": "oxlint --type-aware",
69
69
  "lint:fix": "npm run lint -- --fix",