@eggjs/security 5.0.0-beta.35 → 5.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.
Files changed (71) hide show
  1. package/dist/agent.d.ts +9 -5
  2. package/dist/agent.js +14 -10
  3. package/dist/app/extend/agent.d.ts +8 -4
  4. package/dist/app/extend/agent.js +12 -8
  5. package/dist/app/extend/application.d.ts +11 -7
  6. package/dist/app/extend/application.js +32 -32
  7. package/dist/app/extend/context.d.ts +55 -51
  8. package/dist/app/extend/context.js +185 -240
  9. package/dist/app/extend/helper.d.ts +5 -2
  10. package/dist/app/extend/helper.js +8 -6
  11. package/dist/app/extend/response.d.ts +38 -34
  12. package/dist/app/extend/response.js +69 -82
  13. package/dist/app/middleware/securities.d.ts +5 -2
  14. package/dist/app/middleware/securities.js +38 -52
  15. package/dist/app.d.ts +9 -5
  16. package/dist/app.js +23 -25
  17. package/dist/config/config.default.d.ts +34 -45
  18. package/dist/config/config.default.js +158 -362
  19. package/dist/config/config.local.d.ts +6 -3
  20. package/dist/config/config.local.js +6 -8
  21. package/dist/index.d.ts +20 -16
  22. package/dist/index.js +24 -21
  23. package/dist/lib/extend/safe_curl.d.ts +16 -13
  24. package/dist/lib/extend/safe_curl.js +17 -23
  25. package/dist/lib/helper/cliFilter.d.ts +4 -4
  26. package/dist/lib/helper/cliFilter.js +16 -15
  27. package/dist/lib/helper/escape.d.ts +2 -2
  28. package/dist/lib/helper/escape.js +7 -3
  29. package/dist/lib/helper/escapeShellArg.d.ts +4 -1
  30. package/dist/lib/helper/escapeShellArg.js +6 -4
  31. package/dist/lib/helper/escapeShellCmd.d.ts +4 -1
  32. package/dist/lib/helper/escapeShellCmd.js +14 -13
  33. package/dist/lib/helper/index.d.ts +22 -19
  34. package/dist/lib/helper/index.js +19 -15
  35. package/dist/lib/helper/shtml.d.ts +6 -2
  36. package/dist/lib/helper/shtml.js +52 -68
  37. package/dist/lib/helper/sjs.d.ts +4 -4
  38. package/dist/lib/helper/sjs.js +31 -44
  39. package/dist/lib/helper/sjson.d.ts +4 -1
  40. package/dist/lib/helper/sjson.js +28 -35
  41. package/dist/lib/helper/spath.d.ts +7 -5
  42. package/dist/lib/helper/spath.js +15 -24
  43. package/dist/lib/helper/surl.d.ts +6 -2
  44. package/dist/lib/helper/surl.js +22 -27
  45. package/dist/lib/middlewares/csp.d.ts +6 -3
  46. package/dist/lib/middlewares/csp.js +43 -54
  47. package/dist/lib/middlewares/csrf.d.ts +6 -3
  48. package/dist/lib/middlewares/csrf.js +31 -35
  49. package/dist/lib/middlewares/dta.d.ts +5 -2
  50. package/dist/lib/middlewares/dta.js +11 -10
  51. package/dist/lib/middlewares/hsts.d.ts +6 -3
  52. package/dist/lib/middlewares/hsts.js +17 -19
  53. package/dist/lib/middlewares/index.d.ts +24 -21
  54. package/dist/lib/middlewares/index.js +26 -22
  55. package/dist/lib/middlewares/methodnoallow.d.ts +5 -2
  56. package/dist/lib/middlewares/methodnoallow.js +13 -18
  57. package/dist/lib/middlewares/noopen.d.ts +6 -3
  58. package/dist/lib/middlewares/noopen.js +14 -13
  59. package/dist/lib/middlewares/nosniff.d.ts +6 -3
  60. package/dist/lib/middlewares/nosniff.js +22 -24
  61. package/dist/lib/middlewares/referrerPolicy.d.ts +6 -3
  62. package/dist/lib/middlewares/referrerPolicy.js +27 -30
  63. package/dist/lib/middlewares/xframe.d.ts +6 -3
  64. package/dist/lib/middlewares/xframe.js +16 -15
  65. package/dist/lib/middlewares/xssProtection.d.ts +6 -3
  66. package/dist/lib/middlewares/xssProtection.js +15 -12
  67. package/dist/lib/utils.d.ts +22 -17
  68. package/dist/lib/utils.js +112 -177
  69. package/dist/types.d.ts +38 -36
  70. package/dist/types.js +1 -2
  71. package/package.json +31 -37
@@ -1,16 +1,19 @@
1
- import type { EggApplicationCore } from 'egg';
2
- import type { SSRFCheckAddressFunction } from '../../config/config.default.ts';
3
- type HttpClient = EggApplicationCore['HttpClient'];
4
- type HttpClientParameters = Parameters<HttpClient['prototype']['request']>;
5
- export type HttpClientRequestURL = HttpClientParameters[0];
6
- export type HttpClientOptions = HttpClientParameters[1] & {
7
- checkAddress?: SSRFCheckAddressFunction;
1
+ import { SSRFCheckAddressFunction } from "../../config/config.default.js";
2
+ import { EggApplicationCore } from "egg";
3
+
4
+ //#region src/lib/extend/safe_curl.d.ts
5
+ type HttpClient = EggApplicationCore["HttpClient"];
6
+ type HttpClientParameters = Parameters<HttpClient["prototype"]["request"]>;
7
+ type HttpClientRequestURL = HttpClientParameters[0];
8
+ type HttpClientOptions = HttpClientParameters[1] & {
9
+ checkAddress?: SSRFCheckAddressFunction;
8
10
  };
9
- export type HttpClientResponse<T = any> = Awaited<ReturnType<HttpClient['prototype']['request']>> & {
10
- data: T;
11
+ type HttpClientResponse<T = any> = Awaited<ReturnType<HttpClient["prototype"]["request"]>> & {
12
+ data: T;
11
13
  };
12
14
  /**
13
- * safe curl with ssrf protection
14
- */
15
- export declare function safeCurlForApplication<T = any>(app: EggApplicationCore, url: HttpClientRequestURL, options?: HttpClientOptions): Promise<HttpClientResponse<T>>;
16
- export {};
15
+ * safe curl with ssrf protection
16
+ */
17
+ declare function safeCurlForApplication<T = any>(app: EggApplicationCore, url: HttpClientRequestURL, options?: HttpClientOptions): Promise<HttpClientResponse<T>>;
18
+ //#endregion
19
+ export { HttpClientOptions, HttpClientRequestURL, HttpClientResponse, safeCurlForApplication };
@@ -1,25 +1,19 @@
1
- const SSRF_HTTPCLIENT = Symbol('SSRF_HTTPCLIENT');
1
+ //#region src/lib/extend/safe_curl.ts
2
+ const SSRF_HTTPCLIENT = Symbol("SSRF_HTTPCLIENT");
2
3
  /**
3
- * safe curl with ssrf protection
4
- */
5
- export async function safeCurlForApplication(app, url, options = {}) {
6
- const ssrfConfig = app.config.security.ssrf;
7
- if (ssrfConfig?.checkAddress) {
8
- options.checkAddress = ssrfConfig.checkAddress;
9
- }
10
- else {
11
- app.logger.warn('[@eggjs/security] please configure `config.security.ssrf` first');
12
- }
13
- if (ssrfConfig?.checkAddress) {
14
- let httpClient = app[SSRF_HTTPCLIENT];
15
- // use the new httpClient init with checkAddress
16
- if (!httpClient) {
17
- httpClient = app[SSRF_HTTPCLIENT] = app.createHttpClient({
18
- checkAddress: ssrfConfig.checkAddress,
19
- });
20
- }
21
- return await httpClient.request(url, options);
22
- }
23
- return await app.curl(url, options);
4
+ * safe curl with ssrf protection
5
+ */
6
+ async function safeCurlForApplication(app, url, options = {}) {
7
+ const ssrfConfig = app.config.security.ssrf;
8
+ if (ssrfConfig?.checkAddress) options.checkAddress = ssrfConfig.checkAddress;
9
+ else app.logger.warn("[@eggjs/security] please configure `config.security.ssrf` first");
10
+ if (ssrfConfig?.checkAddress) {
11
+ let httpClient = app[SSRF_HTTPCLIENT];
12
+ if (!httpClient) httpClient = app[SSRF_HTTPCLIENT] = app.createHttpClient({ checkAddress: ssrfConfig.checkAddress });
13
+ return await httpClient.request(url, options);
14
+ }
15
+ return await app.curl(url, options);
24
16
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZV9jdXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9leHRlbmQvc2FmZV9jdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBVWxEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsR0FBdUIsRUFDdkIsR0FBeUIsRUFDekIsVUFBNkIsRUFBRTtJQUUvQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDNUMsSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ2pELENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUVBQWlFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFDN0IsSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBdUQsQ0FBQztRQUM1RixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLFVBQVUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUN2RCxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7YUFDdEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUksR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUMifQ==
17
+
18
+ //#endregion
19
+ export { safeCurlForApplication };
@@ -1,4 +1,4 @@
1
- /**
2
- * remote command execution
3
- */
4
- export default function cliFilter(text: string): string;
1
+ //#region src/lib/helper/cliFilter.d.ts
2
+ declare function cliFilter(text: string): string;
3
+ //#endregion
4
+ export { cliFilter as default };
@@ -1,17 +1,18 @@
1
+ //#region src/lib/helper/cliFilter.ts
1
2
  /**
2
- * remote command execution
3
- */
4
- const BASIC_ALPHABETS = new Set('abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ.-_'.split(''));
5
- export default function cliFilter(text) {
6
- const str = '' + text;
7
- let res = '';
8
- let ascii;
9
- for (let index = 0; index < str.length; index++) {
10
- ascii = str[index];
11
- if (BASIC_ALPHABETS.has(ascii)) {
12
- res += ascii;
13
- }
14
- }
15
- return res;
3
+ * remote command execution
4
+ */
5
+ const BASIC_ALPHABETS = new Set("abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ.-_".split(""));
6
+ function cliFilter(text) {
7
+ const str = "" + text;
8
+ let res = "";
9
+ let ascii;
10
+ for (let index = 0; index < str.length; index++) {
11
+ ascii = str[index];
12
+ if (BASIC_ALPHABETS.has(ascii)) res += ascii;
13
+ }
14
+ return res;
16
15
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpRmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9oZWxwZXIvY2xpRmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsbUVBQW1FLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFL0csTUFBTSxDQUFDLE9BQU8sVUFBVSxTQUFTLENBQUMsSUFBWTtJQUM1QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLElBQUksS0FBSyxDQUFDO0lBRVYsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNoRCxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
16
+
17
+ //#endregion
18
+ export { cliFilter as default };
@@ -1,2 +1,2 @@
1
- import escapeHTML from 'escape-html';
2
- export default escapeHTML;
1
+ import escapeHTML from "escape-html";
2
+ export { escapeHTML as default };
@@ -1,3 +1,7 @@
1
- import escapeHTML from 'escape-html';
2
- export default escapeHTML;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9oZWxwZXIvZXNjYXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUVyQyxlQUFlLFVBQVUsQ0FBQyJ9
1
+ import escapeHTML from "escape-html";
2
+
3
+ //#region src/lib/helper/escape.ts
4
+ var escape_default = escapeHTML;
5
+
6
+ //#endregion
7
+ export { escape_default as default };
@@ -1 +1,4 @@
1
- export default function escapeShellArg(text: string): string;
1
+ //#region src/lib/helper/escapeShellArg.d.ts
2
+ declare function escapeShellArg(text: string): string;
3
+ //#endregion
4
+ export { escapeShellArg as default };
@@ -1,5 +1,7 @@
1
- export default function escapeShellArg(text) {
2
- const str = '' + text;
3
- return "'" + str.replace(/\\/g, '\\\\').replace(/'/g, "\\'") + "'";
1
+ //#region src/lib/helper/escapeShellArg.ts
2
+ function escapeShellArg(text) {
3
+ return "'" + ("" + text).replace(/\\/g, "\\\\").replace(/'/g, "\\'") + "'";
4
4
  }
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlU2hlbGxBcmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2hlbHBlci9lc2NhcGVTaGVsbEFyZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsT0FBTyxVQUFVLGNBQWMsQ0FBQyxJQUFZO0lBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdEIsT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckUsQ0FBQyJ9
5
+
6
+ //#endregion
7
+ export { escapeShellArg as default };
@@ -1 +1,4 @@
1
- export default function escapeShellCmd(text: string): string;
1
+ //#region src/lib/helper/escapeShellCmd.d.ts
2
+ declare function escapeShellCmd(text: string): string;
3
+ //#endregion
4
+ export { escapeShellCmd as default };
@@ -1,14 +1,15 @@
1
- const BASIC_ALPHABETS = new Set('#&;`|*?~<>^()[]{}$;\'",\x0A\xFF'.split(''));
2
- export default function escapeShellCmd(text) {
3
- const str = '' + text;
4
- let res = '';
5
- let ascii;
6
- for (let index = 0; index < str.length; index++) {
7
- ascii = str[index];
8
- if (!BASIC_ALPHABETS.has(ascii)) {
9
- res += ascii;
10
- }
11
- }
12
- return res;
1
+ //#region src/lib/helper/escapeShellCmd.ts
2
+ const BASIC_ALPHABETS = new Set("#&;`|*?~<>^()[]{}$;'\",\nÿ".split(""));
3
+ function escapeShellCmd(text) {
4
+ const str = "" + text;
5
+ let res = "";
6
+ let ascii;
7
+ for (let index = 0; index < str.length; index++) {
8
+ ascii = str[index];
9
+ if (!BASIC_ALPHABETS.has(ascii)) res += ascii;
10
+ }
11
+ return res;
13
12
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlU2hlbGxDbWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2hlbHBlci9lc2NhcGVTaGVsbENtZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUU3RSxNQUFNLENBQUMsT0FBTyxVQUFVLGNBQWMsQ0FBQyxJQUFZO0lBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsSUFBSSxLQUFLLENBQUM7SUFFVixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2hELEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxHQUFHLElBQUksS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMifQ==
13
+
14
+ //#endregion
15
+ export { escapeShellCmd as default };
@@ -1,21 +1,24 @@
1
- import cliFilter from './cliFilter.ts';
2
- import escape from './escape.ts';
3
- import escapeShellArg from './escapeShellArg.ts';
4
- import escapeShellCmd from './escapeShellCmd.ts';
5
- import shtml from './shtml.ts';
6
- import sjs from './sjs.ts';
7
- import sjson from './sjson.ts';
8
- import spath from './spath.ts';
9
- import surl from './surl.ts';
1
+ import cliFilter from "./cliFilter.js";
2
+ import escapeHTML from "./escape.js";
3
+ import escapeShellArg from "./escapeShellArg.js";
4
+ import escapeShellCmd from "./escapeShellCmd.js";
5
+ import shtml from "./shtml.js";
6
+ import escapeJavaScript from "./sjs.js";
7
+ import jsonEscape from "./sjson.js";
8
+ import pathFilter from "./spath.js";
9
+ import surl from "./surl.js";
10
+
11
+ //#region src/lib/helper/index.d.ts
10
12
  declare const helpers: {
11
- cliFilter: typeof cliFilter;
12
- escape: typeof escape;
13
- escapeShellArg: typeof escapeShellArg;
14
- escapeShellCmd: typeof escapeShellCmd;
15
- shtml: typeof shtml;
16
- sjs: typeof sjs;
17
- sjson: typeof sjson;
18
- spath: typeof spath;
19
- surl: typeof surl;
13
+ cliFilter: typeof cliFilter;
14
+ escape: typeof escapeHTML;
15
+ escapeShellArg: typeof escapeShellArg;
16
+ escapeShellCmd: typeof escapeShellCmd;
17
+ shtml: typeof shtml;
18
+ sjs: typeof escapeJavaScript;
19
+ sjson: typeof jsonEscape;
20
+ spath: typeof pathFilter;
21
+ surl: typeof surl;
20
22
  };
21
- export default helpers;
23
+ //#endregion
24
+ export { helpers as default };
@@ -1,22 +1,26 @@
1
1
  import cliFilter from "./cliFilter.js";
2
- import escape from "./escape.js";
2
+ import escape_default from "./escape.js";
3
3
  import escapeShellArg from "./escapeShellArg.js";
4
4
  import escapeShellCmd from "./escapeShellCmd.js";
5
5
  import shtml from "./shtml.js";
6
- import sjs from "./sjs.js";
7
- import sjson from "./sjson.js";
8
- import spath from "./spath.js";
6
+ import escapeJavaScript from "./sjs.js";
7
+ import jsonEscape from "./sjson.js";
8
+ import pathFilter from "./spath.js";
9
9
  import surl from "./surl.js";
10
+
11
+ //#region src/lib/helper/index.ts
10
12
  const helpers = {
11
- cliFilter,
12
- escape,
13
- escapeShellArg,
14
- escapeShellCmd,
15
- shtml,
16
- sjs,
17
- sjson,
18
- spath,
19
- surl,
13
+ cliFilter,
14
+ escape: escape_default,
15
+ escapeShellArg,
16
+ escapeShellCmd,
17
+ shtml,
18
+ sjs: escapeJavaScript,
19
+ sjson: jsonEscape,
20
+ spath: pathFilter,
21
+ surl
20
22
  };
21
- export default helpers;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2hlbHBlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUMzQixPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3QixNQUFNLE9BQU8sR0FVVDtJQUNGLFNBQVM7SUFDVCxNQUFNO0lBQ04sY0FBYztJQUNkLGNBQWM7SUFDZCxLQUFLO0lBQ0wsR0FBRztJQUNILEtBQUs7SUFDTCxLQUFLO0lBQ0wsSUFBSTtDQUNMLENBQUM7QUFFRixlQUFlLE9BQU8sQ0FBQyJ9
23
+ var helper_default = helpers;
24
+
25
+ //#endregion
26
+ export { helper_default as default };
@@ -1,2 +1,6 @@
1
- import type { BaseContextClass } from 'egg';
2
- export default function shtml(this: BaseContextClass, val: string): string;
1
+ import { BaseContextClass } from "egg";
2
+
3
+ //#region src/lib/helper/shtml.d.ts
4
+ declare function shtml(this: BaseContextClass, val: string): string;
5
+ //#endregion
6
+ export { shtml as default };
@@ -1,69 +1,53 @@
1
- import xss from 'xss';
2
- import { isSafeDomain, getFromUrl } from "../utils.js";
3
- const BUILD_IN_ON_TAG_ATTR = Symbol('buildInOnTagAttr');
4
- // default rule: https://github.com/leizongmin/js-xss/blob/master/lib/default.js
5
- // add domain filter based on xss module
6
- // custom options http://jsxss.com/zh/options.html
7
- // eg: support a tag,filter attributes except for title : whiteList: {a: ['title']}
8
- export default function shtml(val) {
9
- if (typeof val !== 'string') {
10
- return val;
11
- }
12
- const securityOptions = this.ctx.securityOptions;
13
- const shtmlConfig = {
14
- ...this.app.config.helper.shtml,
15
- ...securityOptions.shtml,
16
- [BUILD_IN_ON_TAG_ATTR]: undefined,
17
- };
18
- const domainWhiteList = this.app.config.security.domainWhiteList;
19
- const app = this.app;
20
- // filter href and src attribute if not in domain white list
21
- if (!shtmlConfig[BUILD_IN_ON_TAG_ATTR]) {
22
- shtmlConfig[BUILD_IN_ON_TAG_ATTR] = (_tag, name, value, isWhiteAttr) => {
23
- if (isWhiteAttr && (name === 'href' || name === 'src')) {
24
- if (!value) {
25
- return;
26
- }
27
- value = String(value);
28
- if (value[0] === '/' || value[0] === '#') {
29
- return;
30
- }
31
- const hostname = getFromUrl(value, 'hostname');
32
- if (!hostname) {
33
- return;
34
- }
35
- // If we don't have our hostname in the app.security.domainWhiteList,
36
- // Just check for `shtmlConfig.domainWhiteList` and `ctx.whiteList`.
37
- if (!isSafeDomain(hostname, domainWhiteList)) {
38
- // Check for `shtmlConfig.domainWhiteList` first (duplicated now)
39
- if (shtmlConfig.domainWhiteList && shtmlConfig.domainWhiteList.length > 0) {
40
- app.deprecate('[@eggjs/security/lib/helper/shtml] `config.helper.shtml.domainWhiteList` has been deprecate. Please use `config.security.domainWhiteList` instead.');
41
- if (!isSafeDomain(hostname, shtmlConfig.domainWhiteList)) {
42
- return '';
43
- }
44
- }
45
- else {
46
- return '';
47
- }
48
- }
49
- }
50
- };
51
- // avoid overriding user configuration 'onTagAttr'
52
- if (shtmlConfig.onTagAttr) {
53
- const customOnTagAttrHandler = shtmlConfig.onTagAttr;
54
- shtmlConfig.onTagAttr = function (tag, name, value, isWhiteAttr) {
55
- const result = customOnTagAttrHandler.apply(this, [tag, name, value, isWhiteAttr]);
56
- if (result !== undefined) {
57
- return result;
58
- }
59
- // fallback to build-in handler
60
- return shtmlConfig[BUILD_IN_ON_TAG_ATTR].apply(this, [tag, name, value, isWhiteAttr]);
61
- };
62
- }
63
- else {
64
- shtmlConfig.onTagAttr = shtmlConfig[BUILD_IN_ON_TAG_ATTR];
65
- }
66
- }
67
- return xss(val, shtmlConfig);
1
+ import { getFromUrl, isSafeDomain } from "../utils.js";
2
+ import xss from "xss";
3
+
4
+ //#region src/lib/helper/shtml.ts
5
+ const BUILD_IN_ON_TAG_ATTR = Symbol("buildInOnTagAttr");
6
+ function shtml(val) {
7
+ if (typeof val !== "string") return val;
8
+ const securityOptions = this.ctx.securityOptions;
9
+ const shtmlConfig = {
10
+ ...this.app.config.helper.shtml,
11
+ ...securityOptions.shtml,
12
+ [BUILD_IN_ON_TAG_ATTR]: void 0
13
+ };
14
+ const domainWhiteList = this.app.config.security.domainWhiteList;
15
+ const app = this.app;
16
+ if (!shtmlConfig[BUILD_IN_ON_TAG_ATTR]) {
17
+ shtmlConfig[BUILD_IN_ON_TAG_ATTR] = (_tag, name, value, isWhiteAttr) => {
18
+ if (isWhiteAttr && (name === "href" || name === "src")) {
19
+ if (!value) return;
20
+ value = String(value);
21
+ if (value[0] === "/" || value[0] === "#") return;
22
+ const hostname = getFromUrl(value, "hostname");
23
+ if (!hostname) return;
24
+ if (!isSafeDomain(hostname, domainWhiteList)) if (shtmlConfig.domainWhiteList && shtmlConfig.domainWhiteList.length > 0) {
25
+ app.deprecate("[@eggjs/security/lib/helper/shtml] `config.helper.shtml.domainWhiteList` has been deprecate. Please use `config.security.domainWhiteList` instead.");
26
+ if (!isSafeDomain(hostname, shtmlConfig.domainWhiteList)) return "";
27
+ } else return "";
28
+ }
29
+ };
30
+ if (shtmlConfig.onTagAttr) {
31
+ const customOnTagAttrHandler = shtmlConfig.onTagAttr;
32
+ shtmlConfig.onTagAttr = function(tag, name, value, isWhiteAttr) {
33
+ const result = customOnTagAttrHandler.apply(this, [
34
+ tag,
35
+ name,
36
+ value,
37
+ isWhiteAttr
38
+ ]);
39
+ if (result !== void 0) return result;
40
+ return shtmlConfig[BUILD_IN_ON_TAG_ATTR].apply(this, [
41
+ tag,
42
+ name,
43
+ value,
44
+ isWhiteAttr
45
+ ]);
46
+ };
47
+ } else shtmlConfig.onTagAttr = shtmlConfig[BUILD_IN_ON_TAG_ATTR];
48
+ }
49
+ return xss(val, shtmlConfig);
68
50
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2h0bWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2hlbHBlci9zaHRtbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFHdEIsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV4RCxnRkFBZ0Y7QUFDaEYsd0NBQXdDO0FBQ3hDLGtEQUFrRDtBQUNsRCxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE9BQU8sVUFBVSxLQUFLLENBQXlCLEdBQVc7SUFDL0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztJQUNqRCxNQUFNLFdBQVcsR0FBRztRQUNsQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1FBQy9CLEdBQUcsZUFBZSxDQUFDLEtBQUs7UUFDeEIsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFNBQXVEO0tBQ2hGLENBQUM7SUFDRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQ2pFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDckIsNERBQTREO0lBQzVELElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQ2xDLElBQVksRUFDWixJQUFZLEVBQ1osS0FBYSxFQUNiLFdBQW9CLEVBQ0wsRUFBRTtZQUNqQixJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDWCxPQUFPO2dCQUNULENBQUM7Z0JBRUQsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDekMsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDZCxPQUFPO2dCQUNULENBQUM7Z0JBRUQscUVBQXFFO2dCQUNyRSxvRUFBb0U7Z0JBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUM7b0JBQzdDLGlFQUFpRTtvQkFDakUsSUFBSSxXQUFXLENBQUMsZUFBZSxJQUFJLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMxRSxHQUFHLENBQUMsU0FBUyxDQUNYLG9KQUFvSixDQUNySixDQUFDO3dCQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDOzRCQUN6RCxPQUFPLEVBQUUsQ0FBQzt3QkFDWixDQUFDO29CQUNILENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLEVBQUUsQ0FBQztvQkFDWixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsa0RBQWtEO1FBQ2xELElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sc0JBQXNCLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUNyRCxXQUFXLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBVyxFQUFFLElBQVksRUFBRSxLQUFhLEVBQUUsV0FBb0I7Z0JBQzlGLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDekIsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsK0JBQStCO2dCQUMvQixPQUFPLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLENBQUMsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM1RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvQixDQUFDIn0=
51
+
52
+ //#endregion
53
+ export { shtml as default };
@@ -1,4 +1,4 @@
1
- /**
2
- * Escape JavaScript to \xHH format
3
- */
4
- export default function escapeJavaScript(text: string): string;
1
+ //#region src/lib/helper/sjs.d.ts
2
+ declare function escapeJavaScript(text: string): string;
3
+ //#endregion
4
+ export { escapeJavaScript as default };
@@ -1,49 +1,36 @@
1
+ //#region src/lib/helper/sjs.ts
1
2
  /**
2
- * Escape JavaScript to \xHH format
3
- */
4
- // escape \x00-\x7f
5
- // except 0-9,A-Z,a-z(\x2f-\x3a \x40-\x5b \x60-\x7b)
6
- // eslint-disable-next-line
3
+ * Escape JavaScript to \xHH format
4
+ */
7
5
  const MATCH_VULNERABLE_REGEXP = /[\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]/;
8
- // eslint-enable-next-line
9
- const BASIC_ALPHABETS = new Set('abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''));
6
+ const BASIC_ALPHABETS = new Set("abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""));
10
7
  const map = {
11
- '\t': '\\t',
12
- '\n': '\\n',
13
- '\r': '\\r',
8
+ " ": "\\t",
9
+ "\n": "\\n",
10
+ "\r": "\\r"
14
11
  };
15
- export default function escapeJavaScript(text) {
16
- const str = '' + text;
17
- const match = MATCH_VULNERABLE_REGEXP.exec(str);
18
- if (!match) {
19
- return str;
20
- }
21
- let res = '';
22
- let index = 0;
23
- let lastIndex = 0;
24
- let ascii;
25
- for (index = match.index; index < str.length; index++) {
26
- ascii = str[index];
27
- if (BASIC_ALPHABETS.has(ascii)) {
28
- continue;
29
- }
30
- else {
31
- if (map[ascii] === undefined) {
32
- const code = ascii.charCodeAt(0);
33
- if (code > 127) {
34
- continue;
35
- }
36
- else {
37
- map[ascii] = '\\x' + code.toString(16);
38
- }
39
- }
40
- }
41
- if (lastIndex !== index) {
42
- res += str.substring(lastIndex, index);
43
- }
44
- lastIndex = index + 1;
45
- res += map[ascii];
46
- }
47
- return lastIndex !== index ? res + str.substring(lastIndex, index) : res;
12
+ function escapeJavaScript(text) {
13
+ const str = "" + text;
14
+ const match = MATCH_VULNERABLE_REGEXP.exec(str);
15
+ if (!match) return str;
16
+ let res = "";
17
+ let index = 0;
18
+ let lastIndex = 0;
19
+ let ascii;
20
+ for (index = match.index; index < str.length; index++) {
21
+ ascii = str[index];
22
+ if (BASIC_ALPHABETS.has(ascii)) continue;
23
+ else if (map[ascii] === void 0) {
24
+ const code = ascii.charCodeAt(0);
25
+ if (code > 127) continue;
26
+ else map[ascii] = "\\x" + code.toString(16);
27
+ }
28
+ if (lastIndex !== index) res += str.substring(lastIndex, index);
29
+ lastIndex = index + 1;
30
+ res += map[ascii];
31
+ }
32
+ return lastIndex !== index ? res + str.substring(lastIndex, index) : res;
48
33
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2pzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9oZWxwZXIvc2pzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsbUJBQW1CO0FBQ25CLG9EQUFvRDtBQUVwRCwyQkFBMkI7QUFDM0IsTUFBTSx1QkFBdUIsR0FBRyx3Q0FBd0MsQ0FBQztBQUN6RSwwQkFBMEI7QUFFMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsZ0VBQWdFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFNUcsTUFBTSxHQUFHLEdBQTJCO0lBQ2xDLElBQUksRUFBRSxLQUFLO0lBQ1gsSUFBSSxFQUFFLEtBQUs7SUFDWCxJQUFJLEVBQUUsS0FBSztDQUNaLENBQUM7QUFFRixNQUFNLENBQUMsT0FBTyxVQUFVLGdCQUFnQixDQUFDLElBQVk7SUFDbkQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztJQUN0QixNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksS0FBSyxDQUFDO0lBRVYsS0FBSyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3RELEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsU0FBUztRQUNYLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNmLFNBQVM7Z0JBQ1gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN0QixHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzNFLENBQUMifQ==
34
+
35
+ //#endregion
36
+ export { escapeJavaScript as default };
@@ -1 +1,4 @@
1
- export default function jsonEscape(obj: any): string;
1
+ //#region src/lib/helper/sjson.d.ts
2
+ declare function jsonEscape(obj: any): string;
3
+ //#endregion
4
+ export { jsonEscape as default };
@@ -1,39 +1,32 @@
1
- import sjs from "./sjs.js";
1
+ import escapeJavaScript from "./sjs.js";
2
+
3
+ //#region src/lib/helper/sjson.ts
2
4
  /**
3
- * escape json
4
- * for output json in script
5
- */
5
+ * escape json
6
+ * for output json in script
7
+ */
6
8
  function sanitizeKey(obj) {
7
- if (typeof obj !== 'object')
8
- return obj;
9
- if (Array.isArray(obj))
10
- return obj;
11
- if (obj === null)
12
- return null;
13
- if (typeof obj === 'boolean')
14
- return obj;
15
- if (typeof obj === 'number')
16
- return obj;
17
- if (Buffer.isBuffer(obj))
18
- return obj.toString();
19
- for (const k in obj) {
20
- const escapedK = sjs(k);
21
- if (escapedK !== k) {
22
- obj[escapedK] = sanitizeKey(obj[k]);
23
- obj[k] = undefined;
24
- }
25
- else {
26
- obj[k] = sanitizeKey(obj[k]);
27
- }
28
- }
29
- return obj;
9
+ if (typeof obj !== "object") return obj;
10
+ if (Array.isArray(obj)) return obj;
11
+ if (obj === null) return null;
12
+ if (typeof obj === "boolean") return obj;
13
+ if (typeof obj === "number") return obj;
14
+ if (Buffer.isBuffer(obj)) return obj.toString();
15
+ for (const k in obj) {
16
+ const escapedK = escapeJavaScript(k);
17
+ if (escapedK !== k) {
18
+ obj[escapedK] = sanitizeKey(obj[k]);
19
+ obj[k] = void 0;
20
+ } else obj[k] = sanitizeKey(obj[k]);
21
+ }
22
+ return obj;
30
23
  }
31
- export default function jsonEscape(obj) {
32
- return JSON.stringify(sanitizeKey(obj), (_k, v) => {
33
- if (typeof v === 'string') {
34
- return sjs(v);
35
- }
36
- return v;
37
- });
24
+ function jsonEscape(obj) {
25
+ return JSON.stringify(sanitizeKey(obj), (_k, v) => {
26
+ if (typeof v === "string") return escapeJavaScript(v);
27
+ return v;
28
+ });
38
29
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2pzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2hlbHBlci9zanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFFM0I7OztHQUdHO0FBRUgsU0FBUyxXQUFXLENBQUMsR0FBUTtJQUMzQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUN4QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDbkMsSUFBSSxHQUFHLEtBQUssSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzlCLElBQUksT0FBTyxHQUFHLEtBQUssU0FBUztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3pDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUVoRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sVUFBVSxVQUFVLENBQUMsR0FBUTtJQUN6QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
30
+
31
+ //#endregion
32
+ export { jsonEscape as default };
@@ -1,5 +1,7 @@
1
- /**
2
- * File Inclusion
3
- */
4
- import type { BaseContextClass } from 'egg';
5
- export default function pathFilter(this: BaseContextClass, path: string): string | null;
1
+ import { BaseContextClass } from "egg";
2
+
3
+ //#region src/lib/helper/spath.d.ts
4
+
5
+ declare function pathFilter(this: BaseContextClass, path: string): string | null;
6
+ //#endregion
7
+ export { pathFilter as default };