elysia 0.5.15 → 0.5.17
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 +56 -76
- package/dist/cjs/handler.js +1 -1
- package/dist/cjs/types.d.ts +8 -8
- package/dist/compose.js +49 -59
- package/dist/handler.js +1 -1
- package/dist/types.d.ts +8 -8
- package/package.json +2 -1
package/dist/cjs/compose.js
CHANGED
|
@@ -103,13 +103,29 @@ const findElysiaMeta = (type, schema, found = [], parent = '') => {
|
|
|
103
103
|
return null;
|
|
104
104
|
};
|
|
105
105
|
exports.findElysiaMeta = findElysiaMeta;
|
|
106
|
+
const getUnionedType = (validator) => {
|
|
107
|
+
if (!validator)
|
|
108
|
+
return;
|
|
109
|
+
const schema = validator?.schema;
|
|
110
|
+
if (schema && 'anyOf' in schema) {
|
|
111
|
+
let foundDifference = false;
|
|
112
|
+
const type = schema.anyOf[0].type;
|
|
113
|
+
for (const validator of schema.anyOf) {
|
|
114
|
+
if (validator.type !== type) {
|
|
115
|
+
foundDifference = true;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (!foundDifference)
|
|
120
|
+
return type;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
106
123
|
const composeHandler = ({ method, hooks, validator, handler, handleError, meta, onRequest, config }) => {
|
|
107
124
|
const hasErrorHandler = config.forceErrorEncapsulation ||
|
|
108
125
|
hooks.error.length > 0 ||
|
|
109
126
|
typeof Bun === 'undefined';
|
|
110
127
|
const { composeValidation, composeResponseValidation } = composeValidationFactory(hasErrorHandler);
|
|
111
128
|
let fnLiteral = hasErrorHandler ? 'try {\n' : '';
|
|
112
|
-
const hasStrictContentType = typeof hooks.type === 'string';
|
|
113
129
|
const lifeCycleLiteral = validator || method !== 'GET'
|
|
114
130
|
? [
|
|
115
131
|
handler,
|
|
@@ -121,7 +137,7 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
121
137
|
const hasBody = method !== 'GET' &&
|
|
122
138
|
hooks.type !== 'none' &&
|
|
123
139
|
(validator.body ||
|
|
124
|
-
|
|
140
|
+
hooks.type ||
|
|
125
141
|
lifeCycleLiteral.some((fn) => (0, exports.isFnUse)('body', fn)));
|
|
126
142
|
const hasHeaders = validator.headers ||
|
|
127
143
|
lifeCycleLiteral.some((fn) => (0, exports.isFnUse)('headers', fn));
|
|
@@ -153,73 +169,9 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
153
169
|
hooks.beforeHandle.find(isAsync) ||
|
|
154
170
|
hooks.transform.find(isAsync);
|
|
155
171
|
if (hasBody) {
|
|
156
|
-
|
|
157
|
-
if (
|
|
158
|
-
|
|
159
|
-
const model = schema.anyOf[0].type;
|
|
160
|
-
for (const validator of schema.anyOf) {
|
|
161
|
-
if (validator.type !== model) {
|
|
162
|
-
foundDifference = true;
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
if (foundDifference) {
|
|
167
|
-
schema = undefined;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (hasStrictContentType || schema) {
|
|
171
|
-
if (hooks.parse.length) {
|
|
172
|
-
fnLiteral += hasHeaders
|
|
173
|
-
? `let contentType = c.headers['content-type']`
|
|
174
|
-
: `let contentType = c.request.headers.get('content-type')`;
|
|
175
|
-
fnLiteral += `
|
|
176
|
-
if (contentType) {
|
|
177
|
-
const index = contentType.indexOf(';')
|
|
178
|
-
if (index !== -1) contentType = contentType.substring(0, index)\n`;
|
|
179
|
-
fnLiteral += `let used = false\n`;
|
|
180
|
-
for (let i = 0; i < hooks.parse.length; i++) {
|
|
181
|
-
const name = `bo${i}`;
|
|
182
|
-
if (i !== 0)
|
|
183
|
-
fnLiteral += `if(!used) {\n`;
|
|
184
|
-
fnLiteral += `let ${name} = parse[${i}](c, contentType);`;
|
|
185
|
-
fnLiteral += `if(${name} instanceof Promise) ${name} = await ${name};`;
|
|
186
|
-
fnLiteral += `
|
|
187
|
-
if(${name} !== undefined) { c.body = ${name}; used = true }\n`;
|
|
188
|
-
if (i !== 0)
|
|
189
|
-
fnLiteral += `}`;
|
|
190
|
-
}
|
|
191
|
-
fnLiteral += `if (!used) {`;
|
|
192
|
-
}
|
|
193
|
-
if (schema) {
|
|
194
|
-
switch (schema.type) {
|
|
195
|
-
case 'object':
|
|
196
|
-
if (schema.elysiaMeta === 'URLEncoded') {
|
|
197
|
-
fnLiteral += `c.body = parseQuery(await c.request.text())`;
|
|
198
|
-
}
|
|
199
|
-
else if (validator.body.Code().includes("custom('File"))
|
|
200
|
-
fnLiteral += `c.body = {}
|
|
201
|
-
|
|
202
|
-
await c.request.formData().then((form) => {
|
|
203
|
-
for (const key of form.keys()) {
|
|
204
|
-
if (c.body[key])
|
|
205
|
-
continue
|
|
206
|
-
|
|
207
|
-
const value = form.getAll(key)
|
|
208
|
-
if (value.length === 1)
|
|
209
|
-
c.body[key] = value[0]
|
|
210
|
-
else c.body[key] = value
|
|
211
|
-
}
|
|
212
|
-
})`;
|
|
213
|
-
else {
|
|
214
|
-
fnLiteral += `c.body = JSON.parse(await c.request.text())`;
|
|
215
|
-
}
|
|
216
|
-
break;
|
|
217
|
-
default:
|
|
218
|
-
fnLiteral += 'c.body = await c.request.text()';
|
|
219
|
-
break;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
172
|
+
const type = getUnionedType(validator?.body);
|
|
173
|
+
if (hooks.type || type) {
|
|
174
|
+
if (hooks.type) {
|
|
223
175
|
switch (hooks.type) {
|
|
224
176
|
case 'application/json':
|
|
225
177
|
fnLiteral += `c.body = JSON.parse(await c.request.text());`;
|
|
@@ -236,7 +188,8 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
236
188
|
case 'multipart/form-data':
|
|
237
189
|
fnLiteral += `c.body = {}
|
|
238
190
|
|
|
239
|
-
|
|
191
|
+
const form = await c.request.formData()
|
|
192
|
+
for (const key of form.keys()) {
|
|
240
193
|
if (c.body[key])
|
|
241
194
|
continue
|
|
242
195
|
|
|
@@ -248,6 +201,35 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
248
201
|
break;
|
|
249
202
|
}
|
|
250
203
|
}
|
|
204
|
+
else if (type) {
|
|
205
|
+
const schema = validator?.body?.schema;
|
|
206
|
+
switch (type) {
|
|
207
|
+
case 'object':
|
|
208
|
+
if (schema.elysiaMeta === 'URLEncoded') {
|
|
209
|
+
fnLiteral += `c.body = parseQuery(await c.request.text())`;
|
|
210
|
+
}
|
|
211
|
+
else if (validator.body.Code().includes("custom('File"))
|
|
212
|
+
fnLiteral += `c.body = {}
|
|
213
|
+
|
|
214
|
+
const form = await c.request.formData()
|
|
215
|
+
for (const key of form.keys()) {
|
|
216
|
+
if (c.body[key])
|
|
217
|
+
continue
|
|
218
|
+
|
|
219
|
+
const value = form.getAll(key)
|
|
220
|
+
if (value.length === 1)
|
|
221
|
+
c.body[key] = value[0]
|
|
222
|
+
else c.body[key] = value
|
|
223
|
+
}`;
|
|
224
|
+
else {
|
|
225
|
+
fnLiteral += `c.body = JSON.parse(await c.request.text())`;
|
|
226
|
+
}
|
|
227
|
+
break;
|
|
228
|
+
default:
|
|
229
|
+
fnLiteral += 'c.body = await c.request.text()';
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
251
233
|
if (hooks.parse.length)
|
|
252
234
|
fnLiteral += '}}';
|
|
253
235
|
}
|
|
@@ -295,7 +277,8 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
295
277
|
case 'multipart/form-data':
|
|
296
278
|
c.body = {}
|
|
297
279
|
|
|
298
|
-
|
|
280
|
+
const form = await c.request.formData()
|
|
281
|
+
for (const key of form.keys()) {
|
|
299
282
|
if (c.body[key])
|
|
300
283
|
continue
|
|
301
284
|
|
|
@@ -456,12 +439,13 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
456
439
|
? `let ${name} = await afterHandle[${i}](c, r)\n`
|
|
457
440
|
: `let ${name} = afterHandle[${i}](c, r)\n`;
|
|
458
441
|
if (validator.response) {
|
|
442
|
+
fnLiteral += `if(${name} !== undefined) {`;
|
|
459
443
|
fnLiteral += `if(response[c.set.status]?.Check(${name}) === false) {
|
|
460
444
|
if(!(response instanceof Error))
|
|
461
445
|
${composeResponseValidation(name)}
|
|
462
446
|
}\n`;
|
|
463
447
|
fnLiteral += `${name} = mapEarlyResponse(${name}, c.set)\n`;
|
|
464
|
-
fnLiteral += `if(${name}) return ${name};\n`;
|
|
448
|
+
fnLiteral += `if(${name}) return ${name};\n}`;
|
|
465
449
|
}
|
|
466
450
|
else
|
|
467
451
|
fnLiteral += `if(${name}) return ${name};\n`;
|
|
@@ -555,7 +539,6 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
555
539
|
parseQuery
|
|
556
540
|
},
|
|
557
541
|
error: {
|
|
558
|
-
ParseError,
|
|
559
542
|
NotFoundError,
|
|
560
543
|
ValidationError,
|
|
561
544
|
InternalServerError
|
|
@@ -568,8 +551,6 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
568
551
|
: ''}
|
|
569
552
|
} = hooks
|
|
570
553
|
|
|
571
|
-
const parseError = new ParseError()
|
|
572
|
-
|
|
573
554
|
return ${maybeAsync ? 'async' : ''} function(c) {
|
|
574
555
|
${meta ? 'c[SCHEMA] = meta[SCHEMA]; c[DEFS] = meta[DEFS];' : ''}
|
|
575
556
|
${fnLiteral}
|
|
@@ -587,7 +568,6 @@ const composeHandler = ({ method, hooks, validator, handler, handleError, meta,
|
|
|
587
568
|
parseQuery: fast_querystring_1.parse
|
|
588
569
|
},
|
|
589
570
|
error: {
|
|
590
|
-
ParseError: error_1.ParseError,
|
|
591
571
|
NotFoundError: error_1.NotFoundError,
|
|
592
572
|
ValidationError: error_1.ValidationError,
|
|
593
573
|
InternalServerError: error_1.InternalServerError
|
package/dist/cjs/handler.js
CHANGED
|
@@ -214,7 +214,7 @@ const mapResponse = (response, set) => {
|
|
|
214
214
|
};
|
|
215
215
|
exports.mapResponse = mapResponse;
|
|
216
216
|
const mapCompactResponse = (response) => {
|
|
217
|
-
switch (response
|
|
217
|
+
switch (response?.constructor?.name) {
|
|
218
218
|
case 'String':
|
|
219
219
|
case 'Blob':
|
|
220
220
|
return new Response(response);
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -50,8 +50,8 @@ export interface LifeCycle<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
50
50
|
error: ErrorHandler;
|
|
51
51
|
stop: VoidLifeCycle<Instance>;
|
|
52
52
|
}
|
|
53
|
-
export type AfterRequestHandler<Route extends TypedRoute
|
|
54
|
-
export interface LifeCycleStore<Instance extends ElysiaInstance
|
|
53
|
+
export type AfterRequestHandler<Route extends TypedRoute, Instance extends ElysiaInstance> = (context: Context<Route, Instance['store']> & Instance['request'], response: Route['response']) => void | MaybePromise<Route['response']> | Response;
|
|
54
|
+
export interface LifeCycleStore<Instance extends ElysiaInstance> {
|
|
55
55
|
type?: ContentType;
|
|
56
56
|
start: VoidLifeCycle<Instance>[];
|
|
57
57
|
request: BeforeRequestHandler<any, Instance>[];
|
|
@@ -128,15 +128,15 @@ export type MergeSchema<A extends TypedSchema, B extends TypedSchema> = {
|
|
|
128
128
|
};
|
|
129
129
|
type MaybeArray<T> = T | T[];
|
|
130
130
|
type ContentType = MaybeArray<(string & {}) | 'none' | 'text' | 'json' | 'formdata' | 'urlencoded' | 'arrayBuffer' | 'text/plain' | 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded'>;
|
|
131
|
-
export type LocalHook<Schema extends TypedSchema, Instance extends ElysiaInstance<any>, Path extends string = string> = Partial<Schema> & {
|
|
131
|
+
export type LocalHook<Schema extends TypedSchema, Instance extends ElysiaInstance<any>, Path extends string = string> = Partial<Schema> & (MergeSchema<Schema, Instance['schema']> extends infer Route extends TypedSchema ? {
|
|
132
132
|
type?: ContentType;
|
|
133
133
|
detail?: Partial<OpenAPIV3.OperationObject>;
|
|
134
|
-
transform?: WithArray<HookHandler<
|
|
135
|
-
beforeHandle?: WithArray<HookHandler<
|
|
136
|
-
afterHandle?: WithArray<AfterRequestHandler<
|
|
134
|
+
transform?: WithArray<HookHandler<Route, Instance, Path>>;
|
|
135
|
+
beforeHandle?: WithArray<HookHandler<Route, Instance, Path>>;
|
|
136
|
+
afterHandle?: WithArray<AfterRequestHandler<TypedSchemaToRoute<Route, Instance['meta'][typeof SCHEMA]>, Instance>>;
|
|
137
137
|
error?: WithArray<ErrorHandler>;
|
|
138
138
|
parse?: WithArray<BodyParser>;
|
|
139
|
-
};
|
|
139
|
+
} : never);
|
|
140
140
|
export type TypedWSRouteToEden<Schema extends TypedSchema = TypedSchema, Definitions extends TypedSchema<string> = ElysiaInstance['meta'][typeof DEFS], Path extends string = string, Catch = unknown> = TypedSchemaToEden<Schema, Definitions> extends infer Typed extends AnyTypedSchema ? {
|
|
141
141
|
body: Typed['body'];
|
|
142
142
|
headers: Typed['headers'];
|
|
@@ -203,7 +203,7 @@ export type HTTPMethod = 'ACL' | 'BIND' | 'CHECKOUT' | 'CONNECT' | 'COPY' | 'DEL
|
|
|
203
203
|
export type ErrorCode = (string & {}) | 'NOT_FOUND' | 'INTERNAL_SERVER_ERROR' | 'VALIDATION' | 'PARSE' | 'UNKNOWN';
|
|
204
204
|
export type ErrorHandler = (params: {
|
|
205
205
|
request: Request;
|
|
206
|
-
code: 'UNKNOWN'
|
|
206
|
+
code: 'UNKNOWN';
|
|
207
207
|
error: Readonly<Error>;
|
|
208
208
|
set: Context['set'];
|
|
209
209
|
} | {
|
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{
|
|
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 l}from"./error";let i="AsyncFunction",u=e=>e.constructor.name===i,f=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,28 +14,20 @@ ${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(
|
|
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+=f.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
|
|
21
|
-
`);let
|
|
21
|
+
`);let S=h.query||R.some(e=>isFnUse("query",e));S&&(H+=`const url = c.request.url
|
|
22
22
|
|
|
23
23
|
if(c.query !== -1) {
|
|
24
24
|
c.query = parseQuery(url.substring(c.query + 1))
|
|
25
25
|
} else {
|
|
26
26
|
c.query = {}
|
|
27
27
|
}
|
|
28
|
-
`);let
|
|
29
|
-
if (contentType) {
|
|
30
|
-
const index = contentType.indexOf(';')
|
|
31
|
-
if (index !== -1) contentType = contentType.substring(0, index)
|
|
32
|
-
`+`let used = false
|
|
33
|
-
`;for(let e=0;e<$.parse.length;e++){let r=`bo${e}`;0!==e&&(H+=`if(!used) {
|
|
34
|
-
`),H+=`let ${r} = parse[${e}](c, contentType);if(${r} instanceof Promise) ${r} = await ${r};
|
|
35
|
-
if(${r} !== undefined) { c.body = ${r}; used = true }
|
|
36
|
-
`,0!==e&&(H+="}")}H+="if (!used) {"}if(e)"object"===e.type?"URLEncoded"===e.elysiaMeta?H+="c.body = parseQuery(await c.request.text())":h.body.Code().includes("custom('File")?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(u)||m.beforeHandle.find(u)||m.transform.find(u);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 = {}
|
|
37
29
|
|
|
38
|
-
|
|
30
|
+
const form = await c.request.formData()
|
|
39
31
|
for (const key of form.keys()) {
|
|
40
32
|
if (c.body[key])
|
|
41
33
|
continue
|
|
@@ -44,23 +36,23 @@ ${r}
|
|
|
44
36
|
if (value.length === 1)
|
|
45
37
|
c.body[key] = value[0]
|
|
46
38
|
else c.body[key] = value
|
|
47
|
-
}
|
|
48
|
-
})`:H+="c.body = JSON.parse(await c.request.text())":H+="c.body = await c.request.text()";else switch($.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 = {}
|
|
39
|
+
}`}else if(e){let r=h?.body?.schema;"object"===e?"URLEncoded"===r.elysiaMeta?H+="c.body = parseQuery(await c.request.text())":h.body.Code().includes("custom('File")?H+=`c.body = {}
|
|
49
40
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
const form = await c.request.formData()
|
|
42
|
+
for (const key of form.keys()) {
|
|
43
|
+
if (c.body[key])
|
|
44
|
+
continue
|
|
45
|
+
|
|
46
|
+
const value = form.getAll(key)
|
|
47
|
+
if (value.length === 1)
|
|
48
|
+
c.body[key] = value[0]
|
|
49
|
+
else c.body[key] = value
|
|
50
|
+
}`:H+="c.body = JSON.parse(await c.request.text())":H+="c.body = await c.request.text()"}m.parse.length&&(H+="}}")}else{if(H+="\n"+(O?"let contentType = c.headers['content-type']":"let contentType = c.request.headers.get('content-type')")+`
|
|
59
51
|
if (contentType) {
|
|
60
52
|
const index = contentType.indexOf(';')
|
|
61
53
|
if (index !== -1) contentType = contentType.substring(0, index)
|
|
62
|
-
|
|
63
|
-
`;for(let e=0;e
|
|
54
|
+
`,m.parse.length){H+=`let used = false
|
|
55
|
+
`;for(let e=0;e<m.parse.length;e++){let r=`bo${e}`;0!==e&&(H+=`if(!used) {
|
|
64
56
|
`),H+=`let ${r} = parse[${e}](c, contentType);if(${r} instanceof Promise) ${r} = await ${r};
|
|
65
57
|
if(${r} !== undefined) { c.body = ${r}; used = true }
|
|
66
58
|
`,0!==e&&(H+="}")}H+="if (!used)"}H+=`switch (contentType) {
|
|
@@ -83,7 +75,8 @@ ${r}
|
|
|
83
75
|
case 'multipart/form-data':
|
|
84
76
|
c.body = {}
|
|
85
77
|
|
|
86
|
-
|
|
78
|
+
const form = await c.request.formData()
|
|
79
|
+
for (const key of form.keys()) {
|
|
87
80
|
if (c.body[key])
|
|
88
81
|
continue
|
|
89
82
|
|
|
@@ -96,64 +89,64 @@ ${r}
|
|
|
96
89
|
break
|
|
97
90
|
}
|
|
98
91
|
}
|
|
99
|
-
`}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(
|
|
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+=`
|
|
100
93
|
if (headers.Check(c.headers) === false) {
|
|
101
94
|
${x("headers")}
|
|
102
95
|
}
|
|
103
|
-
`),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")} }`))
|
|
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);
|
|
104
97
|
`:`let ${r} = beforeHandle[${e}](c);
|
|
105
98
|
`)+`if(${r} !== undefined) {
|
|
106
|
-
|
|
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});
|
|
107
100
|
`:`const ${t} = afterHandle[${e}](c, ${r});
|
|
108
101
|
`)+`if(${t} !== undefined) { ${r} = ${t} }
|
|
109
|
-
`}else H
|
|
102
|
+
`}else H+=m.afterHandle[e].constructor.name===i?`await afterHandle[${e}](c, ${r});
|
|
110
103
|
`:`afterHandle[${e}](c, ${r});
|
|
111
104
|
`}h.response&&(H+=`if(response[c.set.status]?.Check(${r}) === false) {
|
|
112
105
|
if(!(response instanceof Error))
|
|
113
106
|
${k(r)}
|
|
114
107
|
}
|
|
115
108
|
`),H+=`return mapEarlyResponse(${r}, c.set)}
|
|
116
|
-
`}else H
|
|
109
|
+
`}else H+=m.beforeHandle[e].constructor.name===i?`await beforeHandle[${e}](c);
|
|
117
110
|
`:`beforeHandle[${e}](c);
|
|
118
|
-
`}if(
|
|
111
|
+
`}if(m?.afterHandle.length){H+=$.constructor.name===i?`let r = await handler(c);
|
|
119
112
|
`:`let r = handler(c);
|
|
120
|
-
`;for(let e=0;e
|
|
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)
|
|
121
114
|
`:`let ${r} = afterHandle[${e}](c, r)
|
|
122
|
-
`,h.response?H+=`if(response[c.set.status]?.Check(${r}) === false) {
|
|
115
|
+
`,h.response?H+=`if(${r} !== undefined) {if(response[c.set.status]?.Check(${r}) === false) {
|
|
123
116
|
if(!(response instanceof Error))
|
|
124
117
|
${k(r)}
|
|
125
118
|
}
|
|
126
119
|
${r} = mapEarlyResponse(${r}, c.set)
|
|
127
120
|
if(${r}) return ${r};
|
|
128
|
-
`:H+=`if(${r}) return ${r};
|
|
129
|
-
`):H
|
|
121
|
+
}`:H+=`if(${r}) return ${r};
|
|
122
|
+
`):H+=m.afterHandle[e].constructor.name===i?`await afterHandle[${e}](c, r)
|
|
130
123
|
`:`afterHandle[${e}](c, r)
|
|
131
124
|
`}h.response&&(H+=`if(response[c.set.status]?.Check(r) === false) {
|
|
132
125
|
if(!(response instanceof Error))
|
|
133
126
|
${k()}
|
|
134
127
|
}
|
|
135
|
-
`),
|
|
128
|
+
`),C?H+=`return mapResponse(r, c.set)
|
|
136
129
|
`:H+=`return mapCompactResponse(r)
|
|
137
|
-
`}else if(h.response)H+=(
|
|
130
|
+
`}else if(h.response)H+=($.constructor.name===i?`const r = await handler(c);
|
|
138
131
|
`:`const r = handler(c);
|
|
139
132
|
`)+`if(response[c.set.status]?.Check(r) === false) {
|
|
140
133
|
if(!(response instanceof Error))
|
|
141
134
|
${k()}
|
|
142
135
|
}
|
|
143
|
-
`,
|
|
136
|
+
`,C?H+=`return mapResponse(r, c.set)
|
|
144
137
|
`:H+=`return mapCompactResponse(r)
|
|
145
|
-
`;else{let e
|
|
138
|
+
`;else{let e=$.constructor.name===i?"await handler(c) ":"handler(c)";C?H+=`return mapResponse(${e}, c.set)
|
|
146
139
|
`:H+=`return mapCompactResponse(${e})
|
|
147
140
|
`}w&&(H+=`
|
|
148
141
|
} catch(error) {
|
|
149
142
|
|
|
150
143
|
|
|
151
|
-
${
|
|
144
|
+
${F?"":"return (async () => {"}
|
|
152
145
|
const set = c.set
|
|
153
146
|
|
|
154
147
|
if (!set.status || set.status < 300) set.status = 500
|
|
155
148
|
|
|
156
|
-
${
|
|
149
|
+
${m.error.length?`for (let i = 0; i < handleErrors.length; i++) {
|
|
157
150
|
let handled = handleErrors[i]({
|
|
158
151
|
request: c.request,
|
|
159
152
|
error: error,
|
|
@@ -167,7 +160,7 @@ if(${r}) return ${r};
|
|
|
167
160
|
}`:""}
|
|
168
161
|
|
|
169
162
|
return handleError(c.request, error, set)
|
|
170
|
-
${
|
|
163
|
+
${F?"":"})()"}
|
|
171
164
|
}`),H=`const {
|
|
172
165
|
handler,
|
|
173
166
|
handleError,
|
|
@@ -192,7 +185,6 @@ if(${r}) return ${r};
|
|
|
192
185
|
parseQuery
|
|
193
186
|
},
|
|
194
187
|
error: {
|
|
195
|
-
ParseError,
|
|
196
188
|
NotFoundError,
|
|
197
189
|
ValidationError,
|
|
198
190
|
InternalServerError
|
|
@@ -203,12 +195,10 @@ if(${r}) return ${r};
|
|
|
203
195
|
DEFS,`:""}
|
|
204
196
|
} = hooks
|
|
205
197
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
return ${N?"async":""} function(c) {
|
|
198
|
+
return ${F?"async":""} function(c) {
|
|
209
199
|
${q?"c[SCHEMA] = meta[SCHEMA]; c[DEFS] = meta[DEFS];":""}
|
|
210
200
|
${H}
|
|
211
|
-
}`;let
|
|
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:l},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=`
|
|
212
202
|
const route = find(request.method, path) ${s.root.ALL?'?? find("ALL", path)':""}
|
|
213
203
|
if (route === null)
|
|
214
204
|
return ${e.event.error.length?`handleError(
|
|
@@ -221,12 +211,12 @@ if(${r}) return ${r};
|
|
|
221
211
|
|
|
222
212
|
ctx.params = route.params
|
|
223
213
|
|
|
224
|
-
return route.store(ctx)`,
|
|
214
|
+
return route.store(ctx)`,c="";for(let[e,{code:r,all:t}]of Object.entries(n.map))c+=`case '${e}':
|
|
225
215
|
switch(request.method) {
|
|
226
216
|
${r}
|
|
227
217
|
${t??`default: ${o}`}}
|
|
228
218
|
|
|
229
|
-
`;let
|
|
219
|
+
`;let l=`const {
|
|
230
220
|
app,
|
|
231
221
|
app: { store, router, staticRouter },
|
|
232
222
|
${e.event.request.length?"mapEarlyResponse,":""}
|
|
@@ -245,7 +235,7 @@ ${t??`default: ${o}`}}
|
|
|
245
235
|
${e.event.error.length?"":"const error404 = notFound.message.toString()"}
|
|
246
236
|
|
|
247
237
|
return function(request) {
|
|
248
|
-
`;if(e.event.request.length){
|
|
238
|
+
`;if(e.event.request.length){l+=`
|
|
249
239
|
const ctx = {
|
|
250
240
|
request,
|
|
251
241
|
store,
|
|
@@ -257,19 +247,19 @@ ${t??`default: ${o}`}}
|
|
|
257
247
|
}
|
|
258
248
|
|
|
259
249
|
try {
|
|
260
|
-
`;for(let r=0;r<e.event.request.length;r++){let t=hasReturn(e.event.request[r].toString());
|
|
250
|
+
`;for(let r=0;r<e.event.request.length;r++){let t=hasReturn(e.event.request[r].toString());l+=t?`const response = mapEarlyResponse(
|
|
261
251
|
onRequest[${r}](ctx),
|
|
262
252
|
ctx.set
|
|
263
253
|
)
|
|
264
254
|
if (response) return response
|
|
265
|
-
`:`mapEarlyResponse(onRequest[${r}](ctx), ctx.set);`}
|
|
255
|
+
`:`mapEarlyResponse(onRequest[${r}](ctx), ctx.set);`}l+=`} catch (error) {
|
|
266
256
|
return handleError(request, error, ctx.set)
|
|
267
257
|
}
|
|
268
258
|
|
|
269
259
|
const url = request.url,
|
|
270
260
|
s = url.indexOf('/', 12),
|
|
271
261
|
i = ctx.query = url.indexOf('?', s + 1),
|
|
272
|
-
path = i === -1 ? url.substring(s) : url.substring(s, i);`}else
|
|
262
|
+
path = i === -1 ? url.substring(s) : url.substring(s, i);`}else l+=`
|
|
273
263
|
const url = request.url,
|
|
274
264
|
s = url.indexOf('/', 12)
|
|
275
265
|
|
|
@@ -287,19 +277,19 @@ ${t??`default: ${o}`}}
|
|
|
287
277
|
const path =
|
|
288
278
|
ctx.query === -1
|
|
289
279
|
? url.substring(s)
|
|
290
|
-
: url.substring(s, ctx.query);`;return
|
|
280
|
+
: url.substring(s, ctx.query);`;return l+=`
|
|
291
281
|
switch(path) {
|
|
292
|
-
${
|
|
282
|
+
${c}
|
|
293
283
|
|
|
294
284
|
default:
|
|
295
285
|
${o}
|
|
296
286
|
}
|
|
297
|
-
}`,e.handleError=composeErrorHandler(e),Function("data",
|
|
287
|
+
}`,e.handleError=composeErrorHandler(e),Function("data",l)({app:e,mapEarlyResponse:r,NotFoundError:a})};export const composeErrorHandler=e=>{let r=`const {
|
|
298
288
|
app: { event: { error: onError } },
|
|
299
289
|
mapResponse
|
|
300
290
|
} = inject
|
|
301
291
|
|
|
302
|
-
return ${e.event.error.find(e=>e.constructor.name===
|
|
292
|
+
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}]({
|
|
303
293
|
request,
|
|
304
294
|
code: error.code ?? 'UNKNOWN',
|
|
305
295
|
error,
|
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)=>{e.delete("Set-Cookie");for(let r=0;r<s.length;r++){let n=s[r].indexOf("=");e.append("Set-Cookie",`${s[r].slice(0,n)}=${s[r].slice(n+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"]&&Array.isArray(r.headers["Set-Cookie"])&&(r.headers=e(new Headers(r.headers),r.headers["Set-Cookie"])),s?.constructor?.name){case"String":case"Blob":return new Response(s,r);case"Object":case"Array":return Response.json(s,r);case void 0:if(!s)return;return Response.json(s,r);case"Response":for(let e in r.headers)s.headers.append(e,r.headers[e]);return s;case"Promise":return s.then(e=>{let s=mapEarlyResponse(e,r);if(void 0!==s)return s});case"Error":return errorToResponse(s,r.headers);case"Function":return s();case"Number":case"Boolean":return new Response(s.toString(),r);default:if(s instanceof Response)return s;let n=JSON.stringify(s);if(123===n.charCodeAt(0))return r.headers["Content-Type"]||(r.headers["Content-Type"]="application/json"),new Response(JSON.stringify(s),r);return new Response(n,r)}else switch(s?.constructor?.name){case"String":case"Blob":return new Response(s);case"Object":case"Array":return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}});case void 0:if(!s)return new Response("");return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}});case"Response":return s;case"Promise":return s.then(e=>{let s=mapEarlyResponse(e,r);if(void 0!==s)return s});case"Error":return errorToResponse(s,r.headers);case"Function":return s();case"Number":case"Boolean":return new Response(s.toString());default:if(s instanceof Response)return s;let t=JSON.stringify(s);if(123===t.charCodeAt(0))return new Response(JSON.stringify(s),{headers:{"Content-Type":"application/json"}});return new Response(t)}};export const mapResponse=(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"]&&Array.isArray(r.headers["Set-Cookie"])&&(r.headers=e(new Headers(r.headers),r.headers["Set-Cookie"])),s?.constructor?.name){case"String":case"Blob":return new Response(s,{status:r.status,headers:r.headers});case"Object":case"Array":return Response.json(s,r);case void 0:if(!s)return new Response("",r);return Response.json(s,r);case"Response":for(let e in r.headers)s.headers.append(e,r.headers[e]);return s;case"Error":return errorToResponse(s,r.headers);case"Promise":return s.then(e=>mapResponse(e,r));case"Function":return s();case"Number":case"Boolean":return new Response(s.toString(),r);default:if(s instanceof Response)return s;let n=JSON.stringify(s);if(123===n.charCodeAt(0))return r.headers["Content-Type"]||(r.headers["Content-Type"]="application/json"),new Response(JSON.stringify(s),r);return new Response(n,r)}else switch(s?.constructor?.name){case"String":case"Blob":return new Response(s);case"Object":case"Array":return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}});case void 0:if(!s)return new Response("");return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}});case"Response":return s;case"Error":return errorToResponse(s);case"Promise":return s.then(e=>{let s=mapResponse(e,r);return void 0!==s?s:new Response("")});case"Function":return s();case"Number":case"Boolean":return new Response(s.toString());default:if(s instanceof Response)return s;let t=JSON.stringify(s);if(123===t.charCodeAt(0))return new Response(JSON.stringify(s),{headers:{"Content-Type":"application/json"}});return new Response(t)}};export const mapCompactResponse=e=>{switch(e
|
|
1
|
+
export const isNotEmpty=e=>{for(let s in e)return!0;return!1};let e=(e,s)=>{e.delete("Set-Cookie");for(let r=0;r<s.length;r++){let n=s[r].indexOf("=");e.append("Set-Cookie",`${s[r].slice(0,n)}=${s[r].slice(n+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"]&&Array.isArray(r.headers["Set-Cookie"])&&(r.headers=e(new Headers(r.headers),r.headers["Set-Cookie"])),s?.constructor?.name){case"String":case"Blob":return new Response(s,r);case"Object":case"Array":return Response.json(s,r);case void 0:if(!s)return;return Response.json(s,r);case"Response":for(let e in r.headers)s.headers.append(e,r.headers[e]);return s;case"Promise":return s.then(e=>{let s=mapEarlyResponse(e,r);if(void 0!==s)return s});case"Error":return errorToResponse(s,r.headers);case"Function":return s();case"Number":case"Boolean":return new Response(s.toString(),r);default:if(s instanceof Response)return s;let n=JSON.stringify(s);if(123===n.charCodeAt(0))return r.headers["Content-Type"]||(r.headers["Content-Type"]="application/json"),new Response(JSON.stringify(s),r);return new Response(n,r)}else switch(s?.constructor?.name){case"String":case"Blob":return new Response(s);case"Object":case"Array":return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}});case void 0:if(!s)return new Response("");return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}});case"Response":return s;case"Promise":return s.then(e=>{let s=mapEarlyResponse(e,r);if(void 0!==s)return s});case"Error":return errorToResponse(s,r.headers);case"Function":return s();case"Number":case"Boolean":return new Response(s.toString());default:if(s instanceof Response)return s;let t=JSON.stringify(s);if(123===t.charCodeAt(0))return new Response(JSON.stringify(s),{headers:{"Content-Type":"application/json"}});return new Response(t)}};export const mapResponse=(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"]&&Array.isArray(r.headers["Set-Cookie"])&&(r.headers=e(new Headers(r.headers),r.headers["Set-Cookie"])),s?.constructor?.name){case"String":case"Blob":return new Response(s,{status:r.status,headers:r.headers});case"Object":case"Array":return Response.json(s,r);case void 0:if(!s)return new Response("",r);return Response.json(s,r);case"Response":for(let e in r.headers)s.headers.append(e,r.headers[e]);return s;case"Error":return errorToResponse(s,r.headers);case"Promise":return s.then(e=>mapResponse(e,r));case"Function":return s();case"Number":case"Boolean":return new Response(s.toString(),r);default:if(s instanceof Response)return s;let n=JSON.stringify(s);if(123===n.charCodeAt(0))return r.headers["Content-Type"]||(r.headers["Content-Type"]="application/json"),new Response(JSON.stringify(s),r);return new Response(n,r)}else switch(s?.constructor?.name){case"String":case"Blob":return new Response(s);case"Object":case"Array":return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}});case void 0:if(!s)return new Response("");return new Response(JSON.stringify(s),{headers:{"content-type":"application/json"}});case"Response":return s;case"Error":return errorToResponse(s);case"Promise":return s.then(e=>{let s=mapResponse(e,r);return void 0!==s?s:new Response("")});case"Function":return s();case"Number":case"Boolean":return new Response(s.toString());default:if(s instanceof Response)return s;let t=JSON.stringify(s);if(123===t.charCodeAt(0))return new Response(JSON.stringify(s),{headers:{"Content-Type":"application/json"}});return new Response(t)}};export const mapCompactResponse=e=>{switch(e?.constructor?.name){case"String":case"Blob":return new Response(e);case"Object":case"Array":return new Response(JSON.stringify(e),{headers:{"content-type":"application/json"}});case void 0:if(!e)return new Response("");return new Response(JSON.stringify(e),{headers:{"content-type":"application/json"}});case"Response":return e;case"Error":return errorToResponse(e);case"Promise":return e.then(e=>{let s=mapCompactResponse(e);return void 0!==s?s:new Response("")});case"Function":return e();case"Number":case"Boolean":return new Response(e.toString());default:if(e instanceof Response)return e;let s=JSON.stringify(e);if(123===s.charCodeAt(0))return new Response(JSON.stringify(e),{headers:{"Content-Type":"application/json"}});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/dist/types.d.ts
CHANGED
|
@@ -50,8 +50,8 @@ export interface LifeCycle<Instance extends ElysiaInstance = ElysiaInstance> {
|
|
|
50
50
|
error: ErrorHandler;
|
|
51
51
|
stop: VoidLifeCycle<Instance>;
|
|
52
52
|
}
|
|
53
|
-
export type AfterRequestHandler<Route extends TypedRoute
|
|
54
|
-
export interface LifeCycleStore<Instance extends ElysiaInstance
|
|
53
|
+
export type AfterRequestHandler<Route extends TypedRoute, Instance extends ElysiaInstance> = (context: Context<Route, Instance['store']> & Instance['request'], response: Route['response']) => void | MaybePromise<Route['response']> | Response;
|
|
54
|
+
export interface LifeCycleStore<Instance extends ElysiaInstance> {
|
|
55
55
|
type?: ContentType;
|
|
56
56
|
start: VoidLifeCycle<Instance>[];
|
|
57
57
|
request: BeforeRequestHandler<any, Instance>[];
|
|
@@ -128,15 +128,15 @@ export type MergeSchema<A extends TypedSchema, B extends TypedSchema> = {
|
|
|
128
128
|
};
|
|
129
129
|
type MaybeArray<T> = T | T[];
|
|
130
130
|
type ContentType = MaybeArray<(string & {}) | 'none' | 'text' | 'json' | 'formdata' | 'urlencoded' | 'arrayBuffer' | 'text/plain' | 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded'>;
|
|
131
|
-
export type LocalHook<Schema extends TypedSchema, Instance extends ElysiaInstance<any>, Path extends string = string> = Partial<Schema> & {
|
|
131
|
+
export type LocalHook<Schema extends TypedSchema, Instance extends ElysiaInstance<any>, Path extends string = string> = Partial<Schema> & (MergeSchema<Schema, Instance['schema']> extends infer Route extends TypedSchema ? {
|
|
132
132
|
type?: ContentType;
|
|
133
133
|
detail?: Partial<OpenAPIV3.OperationObject>;
|
|
134
|
-
transform?: WithArray<HookHandler<
|
|
135
|
-
beforeHandle?: WithArray<HookHandler<
|
|
136
|
-
afterHandle?: WithArray<AfterRequestHandler<
|
|
134
|
+
transform?: WithArray<HookHandler<Route, Instance, Path>>;
|
|
135
|
+
beforeHandle?: WithArray<HookHandler<Route, Instance, Path>>;
|
|
136
|
+
afterHandle?: WithArray<AfterRequestHandler<TypedSchemaToRoute<Route, Instance['meta'][typeof SCHEMA]>, Instance>>;
|
|
137
137
|
error?: WithArray<ErrorHandler>;
|
|
138
138
|
parse?: WithArray<BodyParser>;
|
|
139
|
-
};
|
|
139
|
+
} : never);
|
|
140
140
|
export type TypedWSRouteToEden<Schema extends TypedSchema = TypedSchema, Definitions extends TypedSchema<string> = ElysiaInstance['meta'][typeof DEFS], Path extends string = string, Catch = unknown> = TypedSchemaToEden<Schema, Definitions> extends infer Typed extends AnyTypedSchema ? {
|
|
141
141
|
body: Typed['body'];
|
|
142
142
|
headers: Typed['headers'];
|
|
@@ -203,7 +203,7 @@ export type HTTPMethod = 'ACL' | 'BIND' | 'CHECKOUT' | 'CONNECT' | 'COPY' | 'DEL
|
|
|
203
203
|
export type ErrorCode = (string & {}) | 'NOT_FOUND' | 'INTERNAL_SERVER_ERROR' | 'VALIDATION' | 'PARSE' | 'UNKNOWN';
|
|
204
204
|
export type ErrorHandler = (params: {
|
|
205
205
|
request: Request;
|
|
206
|
-
code: 'UNKNOWN'
|
|
206
|
+
code: 'UNKNOWN';
|
|
207
207
|
error: Readonly<Error>;
|
|
208
208
|
set: Context['set'];
|
|
209
209
|
} | {
|
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.17",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "saltyAom",
|
|
7
7
|
"url": "https://github.com/SaltyAom",
|
|
@@ -118,6 +118,7 @@
|
|
|
118
118
|
},
|
|
119
119
|
"devDependencies": {
|
|
120
120
|
"@elysiajs/cors": "^0.5.0",
|
|
121
|
+
"@elysiajs/html": "^0.5.2",
|
|
121
122
|
"@swc/cli": "^0.1.62",
|
|
122
123
|
"@swc/core": "^1.3.41",
|
|
123
124
|
"@types/node": "^18.15.5",
|