elysia 0.0.0-experimental.56

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 (56) hide show
  1. package/.eslintrc.js +22 -0
  2. package/.pnpm-debug.log +14 -0
  3. package/LICENSE +7 -0
  4. package/README.md +31 -0
  5. package/build/context.js +6 -0
  6. package/build/context.js.map +1 -0
  7. package/build/error.js +33 -0
  8. package/build/error.js.map +1 -0
  9. package/build/es/context.js +3 -0
  10. package/build/es/context.js.map +1 -0
  11. package/build/es/error.js +25 -0
  12. package/build/es/error.js.map +1 -0
  13. package/build/es/handler.js +148 -0
  14. package/build/es/handler.js.map +1 -0
  15. package/build/es/index.js +374 -0
  16. package/build/es/index.js.map +1 -0
  17. package/build/es/router.js +210 -0
  18. package/build/es/router.js.map +1 -0
  19. package/build/es/schema.js +50 -0
  20. package/build/es/schema.js.map +1 -0
  21. package/build/es/types.js +3 -0
  22. package/build/es/types.js.map +1 -0
  23. package/build/es/utils.js +85 -0
  24. package/build/es/utils.js.map +1 -0
  25. package/build/handler.js +163 -0
  26. package/build/handler.js.map +1 -0
  27. package/build/index.js +394 -0
  28. package/build/index.js.map +1 -0
  29. package/build/router.js +218 -0
  30. package/build/router.js.map +1 -0
  31. package/build/schema.js +65 -0
  32. package/build/schema.js.map +1 -0
  33. package/build/types.js +6 -0
  34. package/build/types.js.map +1 -0
  35. package/build/utils.js +111 -0
  36. package/build/utils.js.map +1 -0
  37. package/package.json +53 -0
  38. package/src/context.ts +21 -0
  39. package/src/error.ts +43 -0
  40. package/src/handler.ts +215 -0
  41. package/src/index.ts +1285 -0
  42. package/src/router.ts +355 -0
  43. package/src/schema.ts +72 -0
  44. package/src/types.ts +377 -0
  45. package/src/utils.ts +152 -0
  46. package/test/before-handle.test.ts +183 -0
  47. package/test/body-parser.test.ts +80 -0
  48. package/test/config.test.ts +43 -0
  49. package/test/derive.test.ts +46 -0
  50. package/test/elysia.test.ts +51 -0
  51. package/test/guard.test.ts +27 -0
  52. package/test/headers.test.ts +65 -0
  53. package/test/lifecycle.test.ts +80 -0
  54. package/test/path.test.ts +300 -0
  55. package/test/schema.test.ts +108 -0
  56. package/test/transform.test.ts +195 -0
package/.eslintrc.js ADDED
@@ -0,0 +1,22 @@
1
+ module.exports = {
2
+ env: {
3
+ es2021: true,
4
+ node: true
5
+ },
6
+ extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
7
+ parser: '@typescript-eslint/parser',
8
+ parserOptions: {
9
+ ecmaVersion: 'latest',
10
+ sourceType: 'module'
11
+ },
12
+ plugins: ['@typescript-eslint'],
13
+ rules: {
14
+ '@typescript-eslint/ban-types': 'off',
15
+ '@typescript-eslint/no-explicit-any': 'off',
16
+ 'no-mixed-spaces-and-tabs': 'off',
17
+ '@typescript-eslint/no-non-null-assertion': 'off',
18
+ '@typescript-eslint/no-extra-semi': 'off',
19
+ '@typescript-eslint/ban-ts-comment': 'off'
20
+ },
21
+ ignorePatterns: ['example/*', 'tests/**/*']
22
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "0 debug pnpm:scope": {
3
+ "selected": 1
4
+ },
5
+ "1 error pnpm": {
6
+ "code": "ERR_PNPM_PACKAGE_JSON_EXISTS",
7
+ "err": {
8
+ "name": "pnpm",
9
+ "message": "package.json already exists",
10
+ "code": "ERR_PNPM_PACKAGE_JSON_EXISTS",
11
+ "stack": "pnpm: package.json already exists\n at Object.handler [as init] (/Users/saltyaom/Library/pnpm/global/5/.pnpm/pnpm@7.5.0/node_modules/pnpm/dist/pnpm.cjs:190077:15)\n at /Users/saltyaom/Library/pnpm/global/5/.pnpm/pnpm@7.5.0/node_modules/pnpm/dist/pnpm.cjs:192591:51\n at async run (/Users/saltyaom/Library/pnpm/global/5/.pnpm/pnpm@7.5.0/node_modules/pnpm/dist/pnpm.cjs:192567:34)\n at async runPnpm (/Users/saltyaom/Library/pnpm/global/5/.pnpm/pnpm@7.5.0/node_modules/pnpm/dist/pnpm.cjs:192785:5)\n at async /Users/saltyaom/Library/pnpm/global/5/.pnpm/pnpm@7.5.0/node_modules/pnpm/dist/pnpm.cjs:192777:7"
12
+ }
13
+ }
14
+ }
package/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright 2022 saltyAom
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,31 @@
1
+ <br>
2
+ <p align=center>
3
+ <img width=661 src=https://user-images.githubusercontent.com/35027979/204073761-e7019531-def1-4f11-a9ee-b07df5334144.png alt='KingWorld label' />
4
+ </p>
5
+
6
+ <p align=center>Fast and friendly <a href=https://bun.sh>Bun</a> web framework.</p>
7
+
8
+ <p align=center>
9
+ <a href=https://elysiajs.com>Documentation</a> | <a href=https://discord.gg/eaFJ2KDJck>Discord</a>
10
+ </p>
11
+
12
+
13
+ ## Philosophies
14
+ Building on top of 3 philosophies:
15
+
16
+ - Performance
17
+ - You shall not worry about the underlying performance
18
+ - Simplicity
19
+ - Simple building blocks to create an abstraction, not repeating yourself
20
+ - Flexibility
21
+ - You shall be able to customize most of the library to fits your need
22
+
23
+ Designed with TypeScript in mind, you don't need to understand TypeScript to take advantage of KingWorld. The library understands what you want and automatically infers the type from your code.
24
+
25
+ ⚡️ Elysia is [one of the fastest Bun web frameworks](https://github.com/SaltyAom/bun-http-framework-benchmark)
26
+
27
+ ## Documentation
28
+ The documentation is available on [elysiajs.com](https://kingworldjs.com).
29
+
30
+ ## Discord
31
+ Come join the [Discord channel~](https://discord.gg/eaFJ2KDJck)
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context.ts"],"sourcesContent":["import { Elysia } from '.'\nimport type { TypedRoute } from './types'\n\nexport interface Context<\n\tRoute extends TypedRoute = TypedRoute,\n\tStore extends Elysia['store'] = Elysia['store']\n> {\n\trequest: Request\n\tquery: Route['query'] extends undefined\n\t\t? Record<string, unknown>\n\t\t: Route['query']\n\tparams: Route['params']\n\tbody: Route['body']\n\tstore: Store\n\n\tset: {\n\t\theaders: Record<string, string>\n\t\tstatus?: number\n\t\tredirect?: string\n\t}\n}\n"],"names":[],"mappings":"AAAA"}
package/build/error.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: ()=>ElysiaError
8
+ });
9
+ class ElysiaError extends Error {
10
+ code = 'UNKNOWN';
11
+ constructor(code, message = code, options){
12
+ super(message, options);
13
+ switch(message){
14
+ case 'BODY_LIMIT':
15
+ this.code = 'BODY_LIMIT';
16
+ break;
17
+ case 'INTERNAL_SERVER_ERROR':
18
+ this.code = 'INTERNAL_SERVER_ERROR';
19
+ break;
20
+ case 'NOT_FOUND':
21
+ this.code = 'NOT_FOUND';
22
+ break;
23
+ case 'VALIDATION':
24
+ this.code = 'VALIDATION';
25
+ break;
26
+ default:
27
+ break;
28
+ }
29
+ if (message.startsWith('Invalid query') || message.startsWith('Invalid body') || message.startsWith('Invalid params') || message.startsWith('Invalid headers') || message.startsWith('Invalid body')) this.code = 'VALIDATION';
30
+ }
31
+ }
32
+
33
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error.ts"],"sourcesContent":["import type { ErrorCode } from './types'\n\nexport default class ElysiaError extends Error {\n\tcode: ErrorCode = 'UNKNOWN'\n\n\tconstructor(\n\t\tcode: ErrorCode & string,\n\t\tmessage: string = code,\n\t\toptions?: ErrorOptions\n\t) {\n\t\tsuper(message, options)\n\n\t\tswitch (message as ErrorCode) {\n\t\t\tcase 'BODY_LIMIT':\n\t\t\t\tthis.code = 'BODY_LIMIT'\n\t\t\t\tbreak\n\n\t\t\tcase 'INTERNAL_SERVER_ERROR':\n\t\t\t\tthis.code = 'INTERNAL_SERVER_ERROR'\n\t\t\t\tbreak\n\n\t\t\tcase 'NOT_FOUND':\n\t\t\t\tthis.code = 'NOT_FOUND'\n\t\t\t\tbreak\n\n\t\t\tcase 'VALIDATION':\n\t\t\t\tthis.code = 'VALIDATION'\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n\n\t\tif (\n\t\t\tmessage.startsWith('Invalid query') ||\n\t\t\tmessage.startsWith('Invalid body') ||\n\t\t\tmessage.startsWith('Invalid params') ||\n\t\t\tmessage.startsWith('Invalid headers') ||\n\t\t\tmessage.startsWith('Invalid body')\n\t\t)\n\t\t\tthis.code = 'VALIDATION'\n\t}\n}\n"],"names":["ElysiaError","Error","code","constructor","message","options","startsWith"],"mappings":"AAAA;;;;;;aAEqBA,WAAW;;AAAjB,MAAMA,WAAW,SAASC,KAAK;IAC7CC,IAAI,GAAc,SAAS,CAAA;IAE3BC,YACCD,IAAwB,EACxBE,OAAe,GAAGF,IAAI,EACtBG,OAAsB,CACrB;QACD,KAAK,CAACD,OAAO,EAAEC,OAAO,CAAC;QAEvB,OAAQD,OAAO;YACd,KAAK,YAAY;gBAChB,IAAI,CAACF,IAAI,GAAG,YAAY;gBACxB,MAAK;YAEN,KAAK,uBAAuB;gBAC3B,IAAI,CAACA,IAAI,GAAG,uBAAuB;gBACnC,MAAK;YAEN,KAAK,WAAW;gBACf,IAAI,CAACA,IAAI,GAAG,WAAW;gBACvB,MAAK;YAEN,KAAK,YAAY;gBAChB,IAAI,CAACA,IAAI,GAAG,YAAY;gBACxB,MAAK;YAEN;gBACC,MAAK;SACN;QAED,IACCE,OAAO,CAACE,UAAU,CAAC,eAAe,CAAC,IACnCF,OAAO,CAACE,UAAU,CAAC,cAAc,CAAC,IAClCF,OAAO,CAACE,UAAU,CAAC,gBAAgB,CAAC,IACpCF,OAAO,CAACE,UAAU,CAAC,iBAAiB,CAAC,IACrCF,OAAO,CAACE,UAAU,CAAC,cAAc,CAAC,EAElC,IAAI,CAACJ,IAAI,GAAG,YAAY;KACzB;CACD"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/context.ts"],"sourcesContent":["import { Elysia } from '.'\nimport type { TypedRoute } from './types'\n\nexport interface Context<\n\tRoute extends TypedRoute = TypedRoute,\n\tStore extends Elysia['store'] = Elysia['store']\n> {\n\trequest: Request\n\tquery: Route['query'] extends undefined\n\t\t? Record<string, unknown>\n\t\t: Route['query']\n\tparams: Route['params']\n\tbody: Route['body']\n\tstore: Store\n\n\tset: {\n\t\theaders: Record<string, string>\n\t\tstatus?: number\n\t\tredirect?: string\n\t}\n}\n"],"names":[],"mappings":"AAAA,WAoBC"}
@@ -0,0 +1,25 @@
1
+ export default class ElysiaError extends Error {
2
+ code = 'UNKNOWN';
3
+ constructor(code, message = code, options){
4
+ super(message, options);
5
+ switch(message){
6
+ case 'BODY_LIMIT':
7
+ this.code = 'BODY_LIMIT';
8
+ break;
9
+ case 'INTERNAL_SERVER_ERROR':
10
+ this.code = 'INTERNAL_SERVER_ERROR';
11
+ break;
12
+ case 'NOT_FOUND':
13
+ this.code = 'NOT_FOUND';
14
+ break;
15
+ case 'VALIDATION':
16
+ this.code = 'VALIDATION';
17
+ break;
18
+ default:
19
+ break;
20
+ }
21
+ if (message.startsWith('Invalid query') || message.startsWith('Invalid body') || message.startsWith('Invalid params') || message.startsWith('Invalid headers') || message.startsWith('Invalid body')) this.code = 'VALIDATION';
22
+ }
23
+ };
24
+
25
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/error.ts"],"sourcesContent":["import type { ErrorCode } from './types'\n\nexport default class ElysiaError extends Error {\n\tcode: ErrorCode = 'UNKNOWN'\n\n\tconstructor(\n\t\tcode: ErrorCode & string,\n\t\tmessage: string = code,\n\t\toptions?: ErrorOptions\n\t) {\n\t\tsuper(message, options)\n\n\t\tswitch (message as ErrorCode) {\n\t\t\tcase 'BODY_LIMIT':\n\t\t\t\tthis.code = 'BODY_LIMIT'\n\t\t\t\tbreak\n\n\t\t\tcase 'INTERNAL_SERVER_ERROR':\n\t\t\t\tthis.code = 'INTERNAL_SERVER_ERROR'\n\t\t\t\tbreak\n\n\t\t\tcase 'NOT_FOUND':\n\t\t\t\tthis.code = 'NOT_FOUND'\n\t\t\t\tbreak\n\n\t\t\tcase 'VALIDATION':\n\t\t\t\tthis.code = 'VALIDATION'\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n\n\t\tif (\n\t\t\tmessage.startsWith('Invalid query') ||\n\t\t\tmessage.startsWith('Invalid body') ||\n\t\t\tmessage.startsWith('Invalid params') ||\n\t\t\tmessage.startsWith('Invalid headers') ||\n\t\t\tmessage.startsWith('Invalid body')\n\t\t)\n\t\t\tthis.code = 'VALIDATION'\n\t}\n}\n"],"names":["ElysiaError","Error","code","constructor","message","options","startsWith"],"mappings":"AAEA,eAAe,MAAMA,WAAW,SAASC,KAAK;IAC7CC,IAAI,GAAc,SAAS,CAAA;IAE3BC,YACCD,IAAwB,EACxBE,OAAe,GAAGF,IAAI,EACtBG,OAAsB,CACrB;QACD,KAAK,CAACD,OAAO,EAAEC,OAAO,CAAC;QAEvB,OAAQD,OAAO;YACd,KAAK,YAAY;gBAChB,IAAI,CAACF,IAAI,GAAG,YAAY;gBACxB,MAAK;YAEN,KAAK,uBAAuB;gBAC3B,IAAI,CAACA,IAAI,GAAG,uBAAuB;gBACnC,MAAK;YAEN,KAAK,WAAW;gBACf,IAAI,CAACA,IAAI,GAAG,WAAW;gBACvB,MAAK;YAEN,KAAK,YAAY;gBAChB,IAAI,CAACA,IAAI,GAAG,YAAY;gBACxB,MAAK;YAEN;gBACC,MAAK;SACN;QAED,IACCE,OAAO,CAACE,UAAU,CAAC,eAAe,CAAC,IACnCF,OAAO,CAACE,UAAU,CAAC,cAAc,CAAC,IAClCF,OAAO,CAACE,UAAU,CAAC,gBAAgB,CAAC,IACpCF,OAAO,CAACE,UAAU,CAAC,iBAAiB,CAAC,IACrCF,OAAO,CAACE,UAAU,CAAC,cAAc,CAAC,EAElC,IAAI,CAACJ,IAAI,GAAG,YAAY;KACzB;CACD,CAAA"}
@@ -0,0 +1,148 @@
1
+ const jsonHeader = {
2
+ headers: {
3
+ 'content-type': 'application/json'
4
+ }
5
+ };
6
+ const isNotEmpty = (obj)=>{
7
+ for(const x in obj)return true;
8
+ return false;
9
+ };
10
+ export const mapEarlyResponse = (response, context)=>{
11
+ if (context.set.redirect) return Response.redirect(context.set.redirect, {
12
+ headers: context.set.headers
13
+ });
14
+ if (isNotEmpty(context.set.headers) || context.set.status !== 200) switch(typeof response){
15
+ case 'string':
16
+ return new Response(response, {
17
+ status: context.set.status,
18
+ headers: context.set.headers
19
+ });
20
+ case 'object':
21
+ if (response instanceof Error) return errorToResponse(response, context.set.headers);
22
+ if (response instanceof Response) {
23
+ for(const key in context.set.headers)response.headers.append(key, context.set.headers[key]);
24
+ return response;
25
+ }
26
+ if (response instanceof Blob) return new Response(response, {
27
+ status: context.set.status,
28
+ headers: context.set.headers
29
+ });
30
+ if (context.set.headers['Content-Type'] !== null) context.set.headers['Content-Type'] = 'application/json';
31
+ return new Response(JSON.stringify(response), {
32
+ status: context.set.status,
33
+ headers: context.set.headers
34
+ });
35
+ case 'function':
36
+ if (response instanceof Blob) return new Response(response, {
37
+ status: context.set.status,
38
+ headers: context.set.headers
39
+ });
40
+ for(const key1 in context.set.headers)response.headers.append(key1, context.set.headers[key1]);
41
+ return response;
42
+ case 'number':
43
+ case 'boolean':
44
+ return new Response(response.toString(), {
45
+ status: context.set.status,
46
+ headers: context.set.headers
47
+ });
48
+ default:
49
+ break;
50
+ }
51
+ else switch(typeof response){
52
+ case 'string':
53
+ return new Response(response);
54
+ case 'object':
55
+ if (response instanceof Response) return response;
56
+ if (response instanceof Error) return errorToResponse(response, context.set.headers);
57
+ if (response instanceof Blob) return new Response(response);
58
+ return new Response(JSON.stringify(response), jsonHeader);
59
+ case 'function':
60
+ if (response instanceof Blob) return new Response(response);
61
+ return response;
62
+ case 'number':
63
+ case 'boolean':
64
+ return new Response(response.toString());
65
+ default:
66
+ break;
67
+ }
68
+ };
69
+ export const mapResponse = (response, context)=>{
70
+ if (context.set.redirect) return Response.redirect(context.set.redirect, {
71
+ headers: context.set.headers
72
+ });
73
+ if (isNotEmpty(context.set.headers) || context.set.status !== 200) switch(typeof response){
74
+ case 'string':
75
+ return new Response(response, {
76
+ status: context.set.status,
77
+ headers: context.set.headers
78
+ });
79
+ case 'object':
80
+ if (response instanceof Error) return errorToResponse(response, context.set.headers);
81
+ if (response instanceof Response) {
82
+ for(const key in context.set.headers)response.headers.append(key, context.set.headers[key]);
83
+ return response;
84
+ }
85
+ if (response instanceof Blob) return new Response(response, {
86
+ status: context.set.status,
87
+ headers: context.set.headers
88
+ });
89
+ if (context.set.headers['Content-Type'] !== null) context.set.headers['Content-Type'] = 'application/json';
90
+ return new Response(JSON.stringify(response), {
91
+ status: context.set.status,
92
+ headers: context.set.headers
93
+ });
94
+ case 'function':
95
+ if (response instanceof Blob) return new Response(response, {
96
+ status: context.set.status,
97
+ headers: context.set.headers
98
+ });
99
+ return response();
100
+ case 'number':
101
+ case 'boolean':
102
+ return new Response(response.toString(), {
103
+ status: context.set.status,
104
+ headers: context.set.headers
105
+ });
106
+ case 'undefined':
107
+ return new Response('', {
108
+ status: context.set.status,
109
+ headers: context.set.headers
110
+ });
111
+ default:
112
+ return new Response(response, {
113
+ status: context.set.status,
114
+ headers: context.set.headers
115
+ });
116
+ }
117
+ else switch(typeof response){
118
+ case 'string':
119
+ return new Response(response);
120
+ case 'object':
121
+ if (response instanceof Response) return response;
122
+ if (response instanceof Error) return errorToResponse(response, context.set.headers);
123
+ if (response instanceof Blob) return new Response(response);
124
+ return new Response(JSON.stringify(response), jsonHeader);
125
+ case 'function':
126
+ if (response instanceof Blob) return new Response(response);
127
+ return response();
128
+ case 'number':
129
+ case 'boolean':
130
+ return new Response(response.toString());
131
+ case 'undefined':
132
+ return new Response('');
133
+ default:
134
+ return new Response(response);
135
+ }
136
+ };
137
+ export const errorToResponse = (error, headers)=>{
138
+ return new Response(JSON.stringify({
139
+ name: error === null || error === void 0 ? void 0 : error.name,
140
+ message: error === null || error === void 0 ? void 0 : error.message,
141
+ cause: error === null || error === void 0 ? void 0 : error.cause
142
+ }), {
143
+ status: 500,
144
+ headers
145
+ });
146
+ };
147
+
148
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/handler.ts"],"sourcesContent":["import type { Context } from './context'\n\nconst jsonHeader = {\n\theaders: {\n\t\t'content-type': 'application/json'\n\t}\n}\n\nconst isNotEmpty = (obj: Object) => {\n\tfor (const x in obj) return true\n\n\treturn false\n}\n\n// We don't want to assign new variable to be used only once here\nexport const mapEarlyResponse = (response: unknown, context: Context) => {\n\tif (context.set.redirect)\n\t\treturn Response.redirect(context.set.redirect, {\n\t\t\theaders: context.set.headers\n\t\t})\n\n\tif (isNotEmpty(context.set.headers) || context.set.status !== 200)\n\t\tswitch (typeof response) {\n\t\t\tcase 'string':\n\t\t\t\treturn new Response(response, {\n\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\theaders: context.set.headers\n\t\t\t\t})\n\n\t\t\tcase 'object':\n\t\t\t\tif (response instanceof Error)\n\t\t\t\t\treturn errorToResponse(response, context.set.headers)\n\t\t\t\tif (response instanceof Response) {\n\t\t\t\t\tfor (const key in context.set.headers)\n\t\t\t\t\t\tresponse.headers.append(key, context.set.headers[key])\n\n\t\t\t\t\treturn response\n\t\t\t\t}\n\t\t\t\tif (response instanceof Blob)\n\t\t\t\t\treturn new Response(response, {\n\t\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\t\theaders: context.set.headers\n\t\t\t\t\t})\n\n\t\t\t\tif (context.set.headers['Content-Type'] !== null)\n\t\t\t\t\tcontext.set.headers['Content-Type'] = 'application/json'\n\n\t\t\t\treturn new Response(JSON.stringify(response), {\n\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\theaders: context.set.headers\n\t\t\t\t})\n\n\t\t\t// ? Maybe response or Blob\n\t\t\tcase 'function':\n\t\t\t\tif (response instanceof Blob)\n\t\t\t\t\treturn new Response(response, {\n\t\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\t\theaders: context.set.headers\n\t\t\t\t\t})\n\n\t\t\t\tfor (const key in context.set.headers)\n\t\t\t\t\t(response as unknown as Response).headers.append(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tcontext.set.headers[key]\n\t\t\t\t\t)\n\n\t\t\t\treturn response as unknown as Response\n\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\t\treturn new Response(response.toString(), {\n\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\theaders: context.set.headers\n\t\t\t\t})\n\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n\telse\n\t\tswitch (typeof response) {\n\t\t\tcase 'string':\n\t\t\t\treturn new Response(response)\n\n\t\t\tcase 'object':\n\t\t\t\tif (response instanceof Response) return response\n\t\t\t\tif (response instanceof Error)\n\t\t\t\t\treturn errorToResponse(response, context.set.headers)\n\t\t\t\tif (response instanceof Blob) return new Response(response)\n\n\t\t\t\treturn new Response(JSON.stringify(response), jsonHeader)\n\n\t\t\t// ? Maybe response or Blob\n\t\t\tcase 'function':\n\t\t\t\tif (response instanceof Blob) return new Response(response)\n\n\t\t\t\treturn response as unknown as Response\n\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\t\treturn new Response(response.toString())\n\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n}\n\nexport const mapResponse = (response: unknown, context: Context) => {\n\tif (context.set.redirect)\n\t\treturn Response.redirect(context.set.redirect, {\n\t\t\theaders: context.set.headers\n\t\t})\n\n\tif (isNotEmpty(context.set.headers) || context.set.status !== 200)\n\t\tswitch (typeof response) {\n\t\t\tcase 'string':\n\t\t\t\treturn new Response(response, {\n\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\theaders: context.set.headers\n\t\t\t\t})\n\n\t\t\tcase 'object':\n\t\t\t\tif (response instanceof Error)\n\t\t\t\t\treturn errorToResponse(response, context.set.headers)\n\t\t\t\tif (response instanceof Response) {\n\t\t\t\t\tfor (const key in context.set.headers)\n\t\t\t\t\t\tresponse.headers.append(key, context.set.headers[key])\n\n\t\t\t\t\treturn response\n\t\t\t\t}\n\t\t\t\tif (response instanceof Blob)\n\t\t\t\t\treturn new Response(response, {\n\t\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\t\theaders: context.set.headers\n\t\t\t\t\t})\n\n\t\t\t\tif (context.set.headers['Content-Type'] !== null)\n\t\t\t\t\tcontext.set.headers['Content-Type'] = 'application/json'\n\n\t\t\t\treturn new Response(JSON.stringify(response), {\n\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\theaders: context.set.headers\n\t\t\t\t})\n\n\t\t\t// ? Maybe response function or Blob\n\t\t\tcase 'function':\n\t\t\t\tif (response instanceof Blob)\n\t\t\t\t\treturn new Response(response, {\n\t\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\t\theaders: context.set.headers\n\t\t\t\t\t})\n\n\t\t\t\treturn response()\n\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\t\treturn new Response(response.toString(), {\n\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\theaders: context.set.headers\n\t\t\t\t})\n\n\t\t\tcase 'undefined':\n\t\t\t\treturn new Response('', {\n\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\theaders: context.set.headers\n\t\t\t\t})\n\n\t\t\tdefault:\n\t\t\t\treturn new Response(response as any, {\n\t\t\t\t\tstatus: context.set.status,\n\t\t\t\t\theaders: context.set.headers\n\t\t\t\t})\n\t\t}\n\telse\n\t\tswitch (typeof response) {\n\t\t\tcase 'string':\n\t\t\t\treturn new Response(response)\n\n\t\t\tcase 'object':\n\t\t\t\tif (response instanceof Response) return response\n\t\t\t\tif (response instanceof Error)\n\t\t\t\t\treturn errorToResponse(response, context.set.headers)\n\t\t\t\tif (response instanceof Blob) return new Response(response)\n\n\t\t\t\treturn new Response(JSON.stringify(response), jsonHeader)\n\n\t\t\t// ? Maybe response or Blob\n\t\t\tcase 'function':\n\t\t\t\tif (response instanceof Blob) return new Response(response)\n\n\t\t\t\treturn response()\n\n\t\t\tcase 'number':\n\t\t\tcase 'boolean':\n\t\t\t\treturn new Response(response.toString())\n\n\t\t\tcase 'undefined':\n\t\t\t\treturn new Response('')\n\n\t\t\tdefault:\n\t\t\t\treturn new Response(response as any)\n\t\t}\n}\n\nexport const errorToResponse = (error: Error, headers?: HeadersInit) =>\n\tnew Response(\n\t\tJSON.stringify({\n\t\t\tname: error?.name,\n\t\t\tmessage: error?.message,\n\t\t\tcause: error?.cause\n\t\t}),\n\t\t{\n\t\t\tstatus: 500,\n\t\t\theaders\n\t\t}\n\t)\n"],"names":["jsonHeader","headers","isNotEmpty","obj","x","mapEarlyResponse","response","context","set","redirect","Response","status","Error","errorToResponse","key","append","Blob","JSON","stringify","toString","mapResponse","error","name","message","cause"],"mappings":"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"}