elysia 0.4.0 → 0.4.2
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/handler.js +1 -1
- package/package.json +1 -2
- package/src/handler.ts +91 -37
package/dist/handler.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const isNotEmpty=e=>{for(let s in e)return!0;return!1};let e=(e,s)=>{if(Array.isArray(s)){e.delete("Set-Cookie");for(let r=0;r<s.length;r++){let t=s[r].indexOf("=");e.append("Set-Cookie",`${s[r].slice(0,t)}=${s[r].slice(t+1)}`)}}return e};export const mapEarlyResponse=(s,r)=>{if(isNotEmpty(r.headers)||200!==r.status||r.redirect)switch(r.redirect&&(r.headers.Location=r.redirect,r.status=302),r.headers["Set-Cookie"]&&(r.headers=e(new Headers(r.headers),r.headers["Set-Cookie"])),typeof s){case"string":return new Response(s,{status:r.status,headers:r.headers});case"object":
|
|
1
|
+
export const isNotEmpty=e=>{for(let s in e)return!0;return!1};let e=(e,s)=>{if(Array.isArray(s)){e.delete("Set-Cookie");for(let r=0;r<s.length;r++){let t=s[r].indexOf("=");e.append("Set-Cookie",`${s[r].slice(0,t)}=${s[r].slice(t+1)}`)}}return e};export const mapEarlyResponse=(s,r)=>{if(isNotEmpty(r.headers)||200!==r.status||r.redirect)switch(r.redirect&&(r.headers.Location=r.redirect,r.status=302),r.headers["Set-Cookie"]&&(r.headers=e(new Headers(r.headers),r.headers["Set-Cookie"])),typeof s){case"string":return new Response(s,{status:r.status,headers:r.headers});case"object":switch(s?.constructor){case Error:return errorToResponse(s,r.headers);case Response:for(let e in r.headers)s.headers.append(e,r.headers[e]);return s;case Blob:return new Response(s,{status:r.status,headers:r.headers});case Promise:return s.then(e=>{let s=mapEarlyResponse(e,r);if(void 0!==s)return s});default:return r.headers["Content-Type"]||(r.headers["Content-Type"]="application/json"),new Response(JSON.stringify(s),{status:r.status,headers:r.headers})}case"function":if(s instanceof Blob)return new Response(s,{status:r.status,headers:r.headers});for(let e in r.headers)s.headers.append(e,r.headers[e]);return s;case"number":case"boolean":return new Response(s.toString(),{status:r.status,headers:r.headers})}else switch(typeof s){case"string":return new Response(s);case"object":switch(s?.constructor){case Error:return errorToResponse(s,r.headers);case Response:return s;case Blob:return new Response(s);case Promise:return s.then(e=>{let s=mapEarlyResponse(e,r);if(void 0!==s)return s});default:return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}})}case"function":if(s instanceof Blob)return new Response(s);return s;case"number":case"boolean":return new Response(s.toString())}};export const mapResponse=(s,r)=>{if(Object.keys(r.headers).length||200!==r.status||r.redirect)switch(r.redirect&&(r.headers.Location=r.redirect,r.status=302),r.headers?.["Set-Cookie"]&&(r.headers=e(new Headers(r.headers),r.headers["Set-Cookie"])),typeof s){case"string":return new Response(s,{status:r.status,headers:r.headers});case"object":switch(s?.constructor){case Error:return errorToResponse(s,r.headers);case Response:for(let e in r.headers)s.headers.append(e,r.headers[e]);return s;case Blob:return new Response(s,{status:r.status,headers:r.headers});case Promise:return s.then(e=>mapResponse(e,r));default:return r.headers["Content-Type"]||(r.headers["Content-Type"]="application/json"),new Response(JSON.stringify(s),{status:r.status,headers:r.headers})}case"function":if(s instanceof Blob)return new Response(s,{status:r.status,headers:r.headers});return s();case"number":case"boolean":return new Response(s.toString(),{status:r.status,headers:r.headers});case"undefined":return new Response("",{status:r.status,headers:r.headers});default:return new Response(s,{status:r.status,headers:r.headers})}else switch(typeof s){case"string":return new Response(s);case"object":switch(s?.constructor){case Error:return errorToResponse(s,r.headers);case Response:return s;case Blob:return new Response(s);case Promise:return s.then(e=>mapResponse(e,r));default:return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}})}case"function":if(s instanceof Blob)return new Response(s);return s();case"number":case"boolean":return new Response(s.toString());case"undefined":return new Response("");default:return new Response(s)}};export const errorToResponse=(e,s)=>new Response(JSON.stringify({name:e?.name,message:e?.message,cause:e?.cause}),{status:500,headers:s});
|
package/package.json
CHANGED
package/src/handler.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* eslint-disable no-case-declarations */
|
|
2
|
+
import type { MaybePromise } from './types'
|
|
1
3
|
import type { Context } from './context'
|
|
2
4
|
|
|
3
5
|
export const isNotEmpty = (obj: Object) => {
|
|
@@ -26,7 +28,10 @@ const parseSetCookies = (headers: Headers, setCookie: string | string[]) => {
|
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
// We don't want to assign new variable to be used only once here
|
|
29
|
-
export const mapEarlyResponse = (
|
|
31
|
+
export const mapEarlyResponse = (
|
|
32
|
+
response: unknown,
|
|
33
|
+
set: Context['set']
|
|
34
|
+
): Response | undefined => {
|
|
30
35
|
if (isNotEmpty(set.headers) || set.status !== 200 || set.redirect) {
|
|
31
36
|
if (set.redirect) {
|
|
32
37
|
set.headers.Location = set.redirect
|
|
@@ -48,27 +53,44 @@ export const mapEarlyResponse = (response: unknown, set: Context['set']) => {
|
|
|
48
53
|
})
|
|
49
54
|
|
|
50
55
|
case 'object':
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
for (const key in set.headers)
|
|
55
|
-
response.headers.append(key, set.headers[key])
|
|
56
|
+
switch (response?.constructor) {
|
|
57
|
+
case Error:
|
|
58
|
+
return errorToResponse(response as Error, set.headers)
|
|
56
59
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
})
|
|
60
|
+
case Response:
|
|
61
|
+
for (const key in set.headers)
|
|
62
|
+
(response as Response)!.headers.append(
|
|
63
|
+
key,
|
|
64
|
+
set.headers[key]
|
|
65
|
+
)
|
|
64
66
|
|
|
65
|
-
|
|
66
|
-
set.headers['Content-Type'] = 'application/json'
|
|
67
|
+
return response as Response
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
case Blob:
|
|
70
|
+
return new Response(response as Blob, {
|
|
71
|
+
status: set.status,
|
|
72
|
+
headers: set.headers
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
case Promise:
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
return (response as Promise<unknown>).then((x) => {
|
|
78
|
+
const r = mapEarlyResponse(x, set)
|
|
79
|
+
|
|
80
|
+
if (r !== undefined) return r
|
|
81
|
+
|
|
82
|
+
return
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
default:
|
|
86
|
+
if (!set.headers['Content-Type'])
|
|
87
|
+
set.headers['Content-Type'] = 'application/json'
|
|
88
|
+
|
|
89
|
+
return new Response(JSON.stringify(response), {
|
|
90
|
+
status: set.status,
|
|
91
|
+
headers: set.headers
|
|
92
|
+
})
|
|
93
|
+
}
|
|
72
94
|
|
|
73
95
|
// ? Maybe response or Blob
|
|
74
96
|
case 'function':
|
|
@@ -102,16 +124,33 @@ export const mapEarlyResponse = (response: unknown, set: Context['set']) => {
|
|
|
102
124
|
return new Response(response)
|
|
103
125
|
|
|
104
126
|
case 'object':
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if (response instanceof Blob) return new Response(response)
|
|
127
|
+
switch (response?.constructor) {
|
|
128
|
+
case Error:
|
|
129
|
+
return errorToResponse(response as Error, set.headers)
|
|
109
130
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
131
|
+
case Response:
|
|
132
|
+
return response as Response
|
|
133
|
+
|
|
134
|
+
case Blob:
|
|
135
|
+
return new Response(response as Blob)
|
|
136
|
+
|
|
137
|
+
case Promise:
|
|
138
|
+
// @ts-ignore
|
|
139
|
+
return (response as Promise<unknown>).then((x) => {
|
|
140
|
+
const r = mapEarlyResponse(x, set)
|
|
141
|
+
|
|
142
|
+
if (r !== undefined) return r
|
|
143
|
+
|
|
144
|
+
return
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
default:
|
|
148
|
+
return new Response(JSON.stringify(response), {
|
|
149
|
+
headers: {
|
|
150
|
+
'content-type': 'application/json'
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
}
|
|
115
154
|
|
|
116
155
|
// ? Maybe response or Blob
|
|
117
156
|
case 'function':
|
|
@@ -172,6 +211,10 @@ export const mapResponse = (
|
|
|
172
211
|
headers: set.headers
|
|
173
212
|
})
|
|
174
213
|
|
|
214
|
+
case Promise:
|
|
215
|
+
// @ts-ignore
|
|
216
|
+
return response.then((x) => mapResponse(x, set))
|
|
217
|
+
|
|
175
218
|
default:
|
|
176
219
|
if (!set.headers['Content-Type'])
|
|
177
220
|
set.headers['Content-Type'] = 'application/json'
|
|
@@ -217,16 +260,27 @@ export const mapResponse = (
|
|
|
217
260
|
return new Response(response)
|
|
218
261
|
|
|
219
262
|
case 'object':
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if (response instanceof Blob) return new Response(response)
|
|
263
|
+
switch (response?.constructor) {
|
|
264
|
+
case Error:
|
|
265
|
+
return errorToResponse(response as Error, set.headers)
|
|
224
266
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
267
|
+
case Response:
|
|
268
|
+
return response as Response
|
|
269
|
+
|
|
270
|
+
case Blob:
|
|
271
|
+
return new Response(response as Blob)
|
|
272
|
+
|
|
273
|
+
case Promise:
|
|
274
|
+
// @ts-ignore
|
|
275
|
+
return response.then((x) => mapResponse(x, set))
|
|
276
|
+
|
|
277
|
+
default:
|
|
278
|
+
return new Response(JSON.stringify(response), {
|
|
279
|
+
headers: {
|
|
280
|
+
'content-type': 'application/json'
|
|
281
|
+
}
|
|
282
|
+
})
|
|
283
|
+
}
|
|
230
284
|
|
|
231
285
|
// ? Maybe response or Blob
|
|
232
286
|
case 'function':
|