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.
@@ -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(`{ ${keyword}`) ||
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 o}from"./utils";import{NotFoundError as a,ValidationError as c,InternalServerError as i}from"./error";let l="AsyncFunction",f=e=>e.constructor.name===l,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(
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!!(t.includes(`{ ${e}`)||t.includes(`, ${e}`)||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 o=n[r],a=s?s+"."+r:r;if("object"===o.type){findElysiaMeta(e,o,t,a);continue}if(o.anyOf){for(let r of o.anyOf)findElysiaMeta(e,r,t,a);continue}o.elysiaMeta===e&&t.push(a)}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()
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===l||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 = {}
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===l?`Object.assign(c, await transform[${e}](c));`:`Object.assign(c, transform[${e}](c));`:H+=m.transform[e].constructor.name===l?`await transform[${e}](c);`:`transform[${e}](c);`}if(h&&(h.headers&&(H+=`
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===l?`let ${r} = await beforeHandle[${e}](c);
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===l?`const ${t} = await afterHandle[${e}](c, ${r});
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===l?`await afterHandle[${e}](c, ${r});
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===l?`await beforeHandle[${e}](c);
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===l?`let r = await handler(c);
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===l?`let ${r} = await afterHandle[${e}](c, r)
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+=`if(${r}) return ${r};
122
- `):H+=m.afterHandle[e].constructor.name===l?`await afterHandle[${e}](c, r)
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===l?`const r = await handler(c);
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===l?"await handler(c) ":"handler(c)";C?H+=`return mapResponse(${e}, c.set)
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:a,ValidationError:c,InternalServerError:i},meta:q,SCHEMA:q?n:void 0,DEFS:q?o: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,o=`
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: ${o}`}}
218
+ ${t??`default: ${a}`}}
218
219
 
219
- `;let i=`const {
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){i+=`
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());i+=t?`const response = mapEarlyResponse(
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);`}i+=`} catch (error) {
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 i+=`
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 i+=`
281
+ : url.substring(s, ctx.query);`;return l+=`
281
282
  switch(path) {
282
283
  ${c}
283
284
 
284
285
  default:
285
- ${o}
286
+ ${a}
286
287
  }
287
- }`,e.handleError=composeErrorHandler(e),Function("data",i)({app:e,mapEarlyResponse:r,NotFoundError:a})};export const composeErrorHandler=e=>{let r=`const {
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===l)?"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===l?"await ":""}onError[${t}]({
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.19",
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",