elysia 0.5.19 → 0.5.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.
- package/dist/cjs/compose.js +5 -4
- package/dist/compose.js +26 -25
- package/package.json +2 -1
package/dist/cjs/compose.js
CHANGED
|
@@ -44,6 +44,7 @@ ${value}
|
|
|
44
44
|
});
|
|
45
45
|
const isFnUse = (keyword, fnLiteral) => {
|
|
46
46
|
fnLiteral = fnLiteral.trimStart();
|
|
47
|
+
fnLiteral = fnLiteral.replaceAll(/^async /g, '');
|
|
47
48
|
const argument = fnLiteral.charCodeAt(0) === 40 || fnLiteral.startsWith('function')
|
|
48
49
|
?
|
|
49
50
|
fnLiteral.slice(fnLiteral.indexOf('(') + 1, fnLiteral.indexOf(')'))
|
|
@@ -52,9 +53,7 @@ const isFnUse = (keyword, fnLiteral) => {
|
|
|
52
53
|
if (argument === '')
|
|
53
54
|
return false;
|
|
54
55
|
if (argument.charCodeAt(0) === 123) {
|
|
55
|
-
if (argument.includes(
|
|
56
|
-
argument.includes(`, ${keyword}`) ||
|
|
57
|
-
argument.includes(`,${keyword}`))
|
|
56
|
+
if (argument.includes(keyword))
|
|
58
57
|
return true;
|
|
59
58
|
return false;
|
|
60
59
|
}
|
|
@@ -447,8 +446,10 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
447
446
|
fnLiteral += `${name} = mapEarlyResponse(${name}, c.set)\n`;
|
|
448
447
|
fnLiteral += `if(${name}) return ${name};\n}`;
|
|
449
448
|
}
|
|
450
|
-
else
|
|
449
|
+
else {
|
|
450
|
+
fnLiteral += `${name} = mapEarlyResponse(${name}, c.set)\n`;
|
|
451
451
|
fnLiteral += `if(${name}) return ${name};\n`;
|
|
452
|
+
}
|
|
452
453
|
}
|
|
453
454
|
}
|
|
454
455
|
if (validator.response)
|
package/dist/compose.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{parse as e}from"fast-querystring";import{mapEarlyResponse as r,mapResponse as t,mapCompactResponse as s}from"./handler";import{SCHEMA as n,DEFS as
|
|
1
|
+
import{parse as e}from"fast-querystring";import{mapEarlyResponse as r,mapResponse as t,mapCompactResponse as s}from"./handler";import{SCHEMA as n,DEFS as a}from"./utils";import{NotFoundError as o,ValidationError as c,InternalServerError as l}from"./error";let i="AsyncFunction",f=e=>e.constructor.name===i,u=new Headers,d=RegExp(" (\\w+) = context","g");export const hasReturn=e=>{let r=e.indexOf(")");return 61===e.charCodeAt(r+2)&&123!==e.charCodeAt(r+5)||e.includes("return")};let p=e=>({composeValidation:(r,t=`c.${r}`)=>e?`throw new ValidationError(
|
|
2
2
|
'${r}',
|
|
3
3
|
${r},
|
|
4
4
|
${t}
|
|
@@ -14,7 +14,7 @@ ${r}
|
|
|
14
14
|
'response',
|
|
15
15
|
response[c.set.status],
|
|
16
16
|
${r}
|
|
17
|
-
).toResponse(c.set.headers)`});export const isFnUse=(e,r)=>{r=r.trimStart();let t=40===r.charCodeAt(0)||r.startsWith("function")?r.slice(r.indexOf("(")+1,r.indexOf(")")):r.slice(0,r.indexOf("=")-1);if(""===t)return!1;if(123===t.charCodeAt(0))return!!
|
|
17
|
+
).toResponse(c.set.headers)`});export const isFnUse=(e,r)=>{r=(r=r.trimStart()).replaceAll(/^async /g,"");let t=40===r.charCodeAt(0)||r.startsWith("function")?r.slice(r.indexOf("(")+1,r.indexOf(")")):r.slice(0,r.indexOf("=")-1);if(""===t)return!1;if(123===t.charCodeAt(0))return!!t.includes(e);if(r.match(RegExp(`${t}(.${e}|\\["${e}"\\])`)))return!0;let s=[t];for(let e of r.matchAll(d))s.push(e[1]);let n=RegExp(`{.*?} = (${s.join("|")})`,"g");for(let[t]of r.matchAll(n))if(t.includes(`{ ${e}`)||t.includes(`, ${e}`))return!0;return!1};export const findElysiaMeta=(e,r,t=[],s="")=>{if("object"===r.type){let n=r.properties;for(let r in n){let a=n[r],o=s?s+"."+r:r;if("object"===a.type){findElysiaMeta(e,a,t,o);continue}if(a.anyOf){for(let r of a.anyOf)findElysiaMeta(e,r,t,o);continue}a.elysiaMeta===e&&t.push(o)}return 0===t.length?null:t}return r?.elysiaMeta===e?(s&&t.push(s),"root"):null};let y=e=>{if(!e)return;let r=e?.schema;if(r&&"anyOf"in r){let e=!1,t=r.anyOf[0].type;for(let s of r.anyOf)if(s.type!==t){e=!0;break}if(!e)return t}};export const composeHandler=({method:d,hooks:m,validator:h,handler:$,handleError:b,meta:q,onRequest:E,config:g})=>{let w=g.forceErrorEncapsulation||m.error.length>0||"undefined"==typeof Bun,{composeValidation:x,composeResponseValidation:k}=p(w),H=w?"try {\n":"",R=h||"GET"!==d?[$,...m.transform,...m.beforeHandle,...m.afterHandle].map(e=>e.toString()):[],v="GET"!==d&&"none"!==m.type&&(h.body||m.type||R.some(e=>isFnUse("body",e))),O=h.headers||R.some(e=>isFnUse("headers",e));O&&(H+=u.toJSON?`c.headers = c.request.headers.toJSON()
|
|
18
18
|
`:`c.headers = {}
|
|
19
19
|
for (const [key, value] of c.request.headers.entries())
|
|
20
20
|
c.headers[key] = value
|
|
@@ -25,7 +25,7 @@ ${r}
|
|
|
25
25
|
} else {
|
|
26
26
|
c.query = {}
|
|
27
27
|
}
|
|
28
|
-
`);let C=R.some(e=>isFnUse("set",e))||E.some(e=>isFnUse("set",e.toString())),F=v||$.constructor.name===
|
|
28
|
+
`);let C=R.some(e=>isFnUse("set",e))||E.some(e=>isFnUse("set",e.toString())),F=v||$.constructor.name===i||m.parse.length||m.afterHandle.find(f)||m.beforeHandle.find(f)||m.transform.find(f);if(v){let e=y(h?.body);if(m.type||e){if(m.type)switch(m.type){case"application/json":H+="c.body = JSON.parse(await c.request.text());";break;case"text/plain":H+="c.body = await c.request.text();";break;case"application/x-www-form-urlencoded":H+="c.body = parseQuery(await c.request.text());";break;case"application/octet-stream":H+="c.body = await c.request.arrayBuffer();";break;case"multipart/form-data":H+=`c.body = {}
|
|
29
29
|
|
|
30
30
|
const form = await c.request.formData()
|
|
31
31
|
for (const key of form.keys()) {
|
|
@@ -89,28 +89,28 @@ ${r}
|
|
|
89
89
|
break
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
`}H+="\n"}if(h.params){let e=findElysiaMeta("Numeric",h.params.schema);if(e){if("object"==typeof e)for(let r of e)H+=`c.params.${r} = +c.params.${r};`;H+="\n"}}if(h.query){let e=findElysiaMeta("Numeric",h.query.schema);if(e){if("object"==typeof e)for(let r of e)H+=`c.query.${r} = +c.query.${r};`;H+="\n"}}if(h.headers){let e=findElysiaMeta("Numeric",h.headers.schema);if(e){if("object"==typeof e)for(let r of e)H+=`c.headers.${r} = +c.headers.${r};`;H+="\n"}}if(h.body){let e=findElysiaMeta("Numeric",h.body.schema);if(e){switch(typeof e){case"string":H+="c.body = +c.body;";break;case"object":for(let r of e)H+=`c.body.${r} = +c.body.${r};`}H+="\n"}}if(m?.transform)for(let e=0;e<m.transform.length;e++){let r=m.transform[e];"derive"===r.$elysia?H+=m.transform[e].constructor.name===
|
|
92
|
+
`}H+="\n"}if(h.params){let e=findElysiaMeta("Numeric",h.params.schema);if(e){if("object"==typeof e)for(let r of e)H+=`c.params.${r} = +c.params.${r};`;H+="\n"}}if(h.query){let e=findElysiaMeta("Numeric",h.query.schema);if(e){if("object"==typeof e)for(let r of e)H+=`c.query.${r} = +c.query.${r};`;H+="\n"}}if(h.headers){let e=findElysiaMeta("Numeric",h.headers.schema);if(e){if("object"==typeof e)for(let r of e)H+=`c.headers.${r} = +c.headers.${r};`;H+="\n"}}if(h.body){let e=findElysiaMeta("Numeric",h.body.schema);if(e){switch(typeof e){case"string":H+="c.body = +c.body;";break;case"object":for(let r of e)H+=`c.body.${r} = +c.body.${r};`}H+="\n"}}if(m?.transform)for(let e=0;e<m.transform.length;e++){let r=m.transform[e];"derive"===r.$elysia?H+=m.transform[e].constructor.name===i?`Object.assign(c, await transform[${e}](c));`:`Object.assign(c, transform[${e}](c));`:H+=m.transform[e].constructor.name===i?`await transform[${e}](c);`:`transform[${e}](c);`}if(h&&(h.headers&&(H+=`
|
|
93
93
|
if (headers.Check(c.headers) === false) {
|
|
94
94
|
${x("headers")}
|
|
95
95
|
}
|
|
96
|
-
`),h.params&&(H+=`if(params.Check(c.params) === false) { ${x("params")} }`),h.query&&(H+=`if(query.Check(c.query) === false) { ${x("query")} }`),h.body&&(H+=`if(body.Check(c.body) === false) { ${x("body")} }`)),m?.beforeHandle)for(let e=0;e<m.beforeHandle.length;e++){let r=`be${e}`,t=hasReturn(m.beforeHandle[e].toString());if(t){if(H+=(m.beforeHandle[e].constructor.name===
|
|
96
|
+
`),h.params&&(H+=`if(params.Check(c.params) === false) { ${x("params")} }`),h.query&&(H+=`if(query.Check(c.query) === false) { ${x("query")} }`),h.body&&(H+=`if(body.Check(c.body) === false) { ${x("body")} }`)),m?.beforeHandle)for(let e=0;e<m.beforeHandle.length;e++){let r=`be${e}`,t=hasReturn(m.beforeHandle[e].toString());if(t){if(H+=(m.beforeHandle[e].constructor.name===i?`let ${r} = await beforeHandle[${e}](c);
|
|
97
97
|
`:`let ${r} = beforeHandle[${e}](c);
|
|
98
98
|
`)+`if(${r} !== undefined) {
|
|
99
|
-
`,m?.afterHandle)for(let e=0;e<m.afterHandle.length;e++){let t=hasReturn(m.afterHandle[e].toString());if(t){let t=`af${e}`;H+=(m.afterHandle[e].constructor.name===
|
|
99
|
+
`,m?.afterHandle)for(let e=0;e<m.afterHandle.length;e++){let t=hasReturn(m.afterHandle[e].toString());if(t){let t=`af${e}`;H+=(m.afterHandle[e].constructor.name===i?`const ${t} = await afterHandle[${e}](c, ${r});
|
|
100
100
|
`:`const ${t} = afterHandle[${e}](c, ${r});
|
|
101
101
|
`)+`if(${t} !== undefined) { ${r} = ${t} }
|
|
102
|
-
`}else H+=m.afterHandle[e].constructor.name===
|
|
102
|
+
`}else H+=m.afterHandle[e].constructor.name===i?`await afterHandle[${e}](c, ${r});
|
|
103
103
|
`:`afterHandle[${e}](c, ${r});
|
|
104
104
|
`}h.response&&(H+=`if(response[c.set.status]?.Check(${r}) === false) {
|
|
105
105
|
if(!(response instanceof Error))
|
|
106
106
|
${k(r)}
|
|
107
107
|
}
|
|
108
108
|
`),H+=`return mapEarlyResponse(${r}, c.set)}
|
|
109
|
-
`}else H+=m.beforeHandle[e].constructor.name===
|
|
109
|
+
`}else H+=m.beforeHandle[e].constructor.name===i?`await beforeHandle[${e}](c);
|
|
110
110
|
`:`beforeHandle[${e}](c);
|
|
111
|
-
`}if(m?.afterHandle.length){H+=$.constructor.name===
|
|
111
|
+
`}if(m?.afterHandle.length){H+=$.constructor.name===i?`let r = await handler(c);
|
|
112
112
|
`:`let r = handler(c);
|
|
113
|
-
`;for(let e=0;e<m.afterHandle.length;e++){let r=`af${e}`,t=hasReturn(m.afterHandle[e].toString());t?(H+=m.afterHandle[e].constructor.name===
|
|
113
|
+
`;for(let e=0;e<m.afterHandle.length;e++){let r=`af${e}`,t=hasReturn(m.afterHandle[e].toString());t?(H+=m.afterHandle[e].constructor.name===i?`let ${r} = await afterHandle[${e}](c, r)
|
|
114
114
|
`:`let ${r} = afterHandle[${e}](c, r)
|
|
115
115
|
`,h.response?H+=`if(${r} !== undefined) {if(response[c.set.status]?.Check(${r}) === false) {
|
|
116
116
|
if(!(response instanceof Error))
|
|
@@ -118,8 +118,9 @@ ${r}
|
|
|
118
118
|
}
|
|
119
119
|
${r} = mapEarlyResponse(${r}, c.set)
|
|
120
120
|
if(${r}) return ${r};
|
|
121
|
-
}`:H
|
|
122
|
-
|
|
121
|
+
}`:H+=`${r} = mapEarlyResponse(${r}, c.set)
|
|
122
|
+
if(${r}) return ${r};
|
|
123
|
+
`):H+=m.afterHandle[e].constructor.name===i?`await afterHandle[${e}](c, r)
|
|
123
124
|
`:`afterHandle[${e}](c, r)
|
|
124
125
|
`}h.response&&(H+=`if(response[c.set.status]?.Check(r) === false) {
|
|
125
126
|
if(!(response instanceof Error))
|
|
@@ -127,7 +128,7 @@ if(${r}) return ${r};
|
|
|
127
128
|
}
|
|
128
129
|
`),C?H+=`return mapResponse(r, c.set)
|
|
129
130
|
`:H+=`return mapCompactResponse(r)
|
|
130
|
-
`}else if(h.response)H+=($.constructor.name===
|
|
131
|
+
`}else if(h.response)H+=($.constructor.name===i?`const r = await handler(c);
|
|
131
132
|
`:`const r = handler(c);
|
|
132
133
|
`)+`if(response[c.set.status]?.Check(r) === false) {
|
|
133
134
|
if(!(response instanceof Error))
|
|
@@ -135,7 +136,7 @@ if(${r}) return ${r};
|
|
|
135
136
|
}
|
|
136
137
|
`,C?H+=`return mapResponse(r, c.set)
|
|
137
138
|
`:H+=`return mapCompactResponse(r)
|
|
138
|
-
`;else{let e=$.constructor.name===
|
|
139
|
+
`;else{let e=$.constructor.name===i?"await handler(c) ":"handler(c)";C?H+=`return mapResponse(${e}, c.set)
|
|
139
140
|
`:H+=`return mapCompactResponse(${e})
|
|
140
141
|
`}w&&(H+=`
|
|
141
142
|
} catch(error) {
|
|
@@ -198,7 +199,7 @@ if(${r}) return ${r};
|
|
|
198
199
|
return ${F?"async":""} function(c) {
|
|
199
200
|
${q?"c[SCHEMA] = meta[SCHEMA]; c[DEFS] = meta[DEFS];":""}
|
|
200
201
|
${H}
|
|
201
|
-
}`;let N=Function("hooks",H);return N({handler:$,hooks:m,validator:h,handleError:b,utils:{mapResponse:t,mapCompactResponse:s,mapEarlyResponse:r,parseQuery:e},error:{NotFoundError:
|
|
202
|
+
}`;let N=Function("hooks",H);return N({handler:$,hooks:m,validator:h,handleError:b,utils:{mapResponse:t,mapCompactResponse:s,mapEarlyResponse:r,parseQuery:e},error:{NotFoundError:o,ValidationError:c,InternalServerError:l},meta:q,SCHEMA:q?n:void 0,DEFS:q?a:void 0})};export const composeGeneralHandler=e=>{let t="";for(let r of Object.keys(e.decorators))t+=`,${r}: app.decorators.${r}`;let{router:s,staticRouter:n}=e,a=`
|
|
202
203
|
const route = find(request.method, path) ${s.root.ALL?'?? find("ALL", path)':""}
|
|
203
204
|
if (route === null)
|
|
204
205
|
return ${e.event.error.length?`handleError(
|
|
@@ -214,9 +215,9 @@ if(${r}) return ${r};
|
|
|
214
215
|
return route.store(ctx)`,c="";for(let[e,{code:r,all:t}]of Object.entries(n.map))c+=`case '${e}':
|
|
215
216
|
switch(request.method) {
|
|
216
217
|
${r}
|
|
217
|
-
${t??`default: ${
|
|
218
|
+
${t??`default: ${a}`}}
|
|
218
219
|
|
|
219
|
-
`;let
|
|
220
|
+
`;let l=`const {
|
|
220
221
|
app,
|
|
221
222
|
app: { store, router, staticRouter },
|
|
222
223
|
mapEarlyResponse,
|
|
@@ -235,7 +236,7 @@ ${t??`default: ${o}`}}
|
|
|
235
236
|
${e.event.error.length?"":"const error404 = notFound.message.toString()"}
|
|
236
237
|
|
|
237
238
|
return function(request) {
|
|
238
|
-
`;if(e.event.request.length){
|
|
239
|
+
`;if(e.event.request.length){l+=`
|
|
239
240
|
const ctx = {
|
|
240
241
|
request,
|
|
241
242
|
store,
|
|
@@ -247,19 +248,19 @@ ${t??`default: ${o}`}}
|
|
|
247
248
|
}
|
|
248
249
|
|
|
249
250
|
try {
|
|
250
|
-
`;for(let r=0;r<e.event.request.length;r++){let t=hasReturn(e.event.request[r].toString());
|
|
251
|
+
`;for(let r=0;r<e.event.request.length;r++){let t=hasReturn(e.event.request[r].toString());l+=t?`const response = mapEarlyResponse(
|
|
251
252
|
onRequest[${r}](ctx),
|
|
252
253
|
ctx.set
|
|
253
254
|
)
|
|
254
255
|
if (response) return response
|
|
255
|
-
`:`mapEarlyResponse(onRequest[${r}](ctx), ctx.set);`}
|
|
256
|
+
`:`mapEarlyResponse(onRequest[${r}](ctx), ctx.set);`}l+=`} catch (error) {
|
|
256
257
|
return handleError(request, error, ctx.set)
|
|
257
258
|
}
|
|
258
259
|
|
|
259
260
|
const url = request.url,
|
|
260
261
|
s = url.indexOf('/', 12),
|
|
261
262
|
i = ctx.query = url.indexOf('?', s + 1),
|
|
262
|
-
path = i === -1 ? url.substring(s) : url.substring(s, i);`}else
|
|
263
|
+
path = i === -1 ? url.substring(s) : url.substring(s, i);`}else l+=`
|
|
263
264
|
const url = request.url,
|
|
264
265
|
s = url.indexOf('/', 12)
|
|
265
266
|
|
|
@@ -277,19 +278,19 @@ ${t??`default: ${o}`}}
|
|
|
277
278
|
const path =
|
|
278
279
|
ctx.query === -1
|
|
279
280
|
? url.substring(s)
|
|
280
|
-
: url.substring(s, ctx.query);`;return
|
|
281
|
+
: url.substring(s, ctx.query);`;return l+=`
|
|
281
282
|
switch(path) {
|
|
282
283
|
${c}
|
|
283
284
|
|
|
284
285
|
default:
|
|
285
|
-
${
|
|
286
|
+
${a}
|
|
286
287
|
}
|
|
287
|
-
}`,e.handleError=composeErrorHandler(e),Function("data",
|
|
288
|
+
}`,e.handleError=composeErrorHandler(e),Function("data",l)({app:e,mapEarlyResponse:r,NotFoundError:o})};export const composeErrorHandler=e=>{let r=`const {
|
|
288
289
|
app: { event: { error: onError } },
|
|
289
290
|
mapResponse
|
|
290
291
|
} = inject
|
|
291
292
|
|
|
292
|
-
return ${e.event.error.find(e=>e.constructor.name===
|
|
293
|
+
return ${e.event.error.find(e=>e.constructor.name===i)?"async":""} function(request, error, set) {`;for(let t=0;t<e.event.error.length;t++){let s=e.event.error[t],n=`${s.constructor.name===i?"await ":""}onError[${t}]({
|
|
293
294
|
request,
|
|
294
295
|
code: error.code ?? 'UNKNOWN',
|
|
295
296
|
error,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elysia",
|
|
3
3
|
"description": "Fast, and friendly Bun web framework",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.21",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "saltyAom",
|
|
7
7
|
"url": "https://github.com/SaltyAom",
|
|
@@ -119,6 +119,7 @@
|
|
|
119
119
|
"devDependencies": {
|
|
120
120
|
"@elysiajs/cors": "^0.5.0",
|
|
121
121
|
"@elysiajs/html": "^0.5.2",
|
|
122
|
+
"@elysiajs/swagger": "^0.5.2",
|
|
122
123
|
"@swc/cli": "^0.1.62",
|
|
123
124
|
"@swc/core": "^1.3.41",
|
|
124
125
|
"@types/node": "^18.15.5",
|