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 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":if(s instanceof Error)return errorToResponse(s,r.headers);if(s instanceof Response){for(let e in r.headers)s.headers.append(e,r.headers[e]);return s}if(s instanceof Blob)return new Response(s,{status:r.status,headers:r.headers});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":if(s instanceof Response)return s;if(s instanceof Error)return errorToResponse(s,r.headers);if(s instanceof Blob)return new Response(s);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});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":default:return new Response(s);case"object":if(s instanceof Response)return s;if(s instanceof Error)return errorToResponse(s,r.headers);if(s instanceof Blob)return new Response(s);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("")}};export const errorToResponse=(e,s)=>new Response(JSON.stringify({name:e?.name,message:e?.message,cause:e?.cause}),{status:500,headers:s});
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
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "name": "elysia",
3
3
  "description": "Fast, and friendly Bun web framework",
4
- "version": "0.4.0",
5
- "type": "module",
4
+ "version": "0.4.2",
6
5
  "author": {
7
6
  "name": "saltyAom",
8
7
  "url": "https://github.com/SaltyAom",
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 = (response: unknown, set: Context['set']) => {
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
- if (response instanceof Error)
52
- return errorToResponse(response, set.headers)
53
- if (response instanceof Response) {
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
- return response
58
- }
59
- if (response instanceof Blob)
60
- return new Response(response, {
61
- status: set.status,
62
- headers: set.headers
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
- if (!set.headers['Content-Type'])
66
- set.headers['Content-Type'] = 'application/json'
67
+ return response as Response
67
68
 
68
- return new Response(JSON.stringify(response), {
69
- status: set.status,
70
- headers: set.headers
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
- if (response instanceof Response) return response
106
- if (response instanceof Error)
107
- return errorToResponse(response, set.headers)
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
- return new Response(JSON.stringify(response), {
111
- headers: {
112
- 'content-type': 'application/json'
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
- if (response instanceof Response) return response
221
- if (response instanceof Error)
222
- return errorToResponse(response, set.headers)
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
- return new Response(JSON.stringify(response), {
226
- headers: {
227
- 'content-type': 'application/json'
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':