elysia 1.3.19 → 1.3.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/compose.mjs CHANGED
@@ -2599,11 +2599,16 @@ try{a${index}.push(JSON.parse(value))}catch{a${index}.push(value)}if(deepMemory=
2599
2599
  }
2600
2600
  }
2601
2601
  let isAsyncHandler = typeof handler == "function" && isAsync(handler), saveResponse = hasTrace || hooks.afterResponse?.length ? "c.response= " : "", maybeAsync = hasCookie || hasBody || isAsyncHandler || !!hooks.parse?.length || !!hooks.afterHandle?.some(isAsync) || !!hooks.beforeHandle?.some(isAsync) || !!hooks.transform?.some(isAsync) || !!hooks.mapResponse?.some(isAsync), maybeStream = (typeof handler == "function" ? isGenerator(handler) : !1) || !!hooks.beforeHandle?.some(isGenerator) || !!hooks.afterHandle?.some(isGenerator) || !!hooks.transform?.some(isGenerator), responseKeys = Object.keys(validator.response ?? {}), hasMultipleResponses = responseKeys.length > 1, hasSingle200 = responseKeys.length === 0 || responseKeys.length === 1 && responseKeys[0] === "200", hasSet = inference.cookie || inference.set || hasHeaders || hasTrace || hasMultipleResponses || !hasSingle200 || isHandleFn && hasDefaultHeaders || maybeStream, afterResponse = () => {
2602
- if (!hooks.afterResponse?.length) return "";
2602
+ if (!hooks.afterResponse?.length && !hasTrace) return "";
2603
2603
  let afterResponse2 = "", prefix = hooks.afterResponse?.some(isAsync) ? "async " : "";
2604
2604
  afterResponse2 += `
2605
2605
  setImmediate(${prefix}()=>{`;
2606
- let reporter = report("afterResponse", {
2606
+ let reporter = createReport({
2607
+ trace: hooks.trace,
2608
+ addFn: (word) => {
2609
+ afterResponse2 += word;
2610
+ }
2611
+ })("afterResponse", {
2607
2612
  total: hooks.afterResponse?.length
2608
2613
  });
2609
2614
  if (hooks.afterResponse?.length && hooks.afterResponse)
@@ -2620,7 +2625,7 @@ ${prefix2}e.afterResponse[${i}](c)
2620
2625
  }, mapResponse = (r = "r") => {
2621
2626
  let after = afterResponse(), response = `${hasSet ? "mapResponse" : "mapCompactResponse"}(${saveResponse}${r}${hasSet ? ",c.set" : ""}${mapResponseContext})
2622
2627
  `;
2623
- return after || `${response}`, `const _res=${response}` + after + "return _res";
2628
+ return after ? `const _res=${response}` + after + "return _res" : `return ${response}`;
2624
2629
  }, mapResponseContext = maybeStream || adapter.mapResponseContext ? `,${adapter.mapResponseContext}` : "";
2625
2630
  (hasTrace || inference.route) && (fnLiteral += `c.route=\`${path}\`
2626
2631
  `);
@@ -2774,15 +2779,16 @@ delete c.contentType`);
2774
2779
  }
2775
2780
  fnLiteral += "}catch(error){throw new ParseError(error)}";
2776
2781
  }
2777
- if (parseReporter.resolve(), hooks?.transform) {
2782
+ if (parseReporter.resolve(), hooks?.transform || hasTrace) {
2778
2783
  let reporter = report("transform", {
2779
- total: hooks.transform.length
2784
+ total: hooks.transform?.length
2780
2785
  });
2781
- hooks.transform.length && (fnLiteral += `let transformed
2782
- `);
2783
- for (let i = 0; i < hooks.transform.length; i++) {
2784
- let transform = hooks.transform[i], endUnit = reporter.resolveChild(transform.fn.name);
2785
- fnLiteral += isAsync(transform) ? `transformed=await e.transform[${i}](c)
2786
+ if (hooks.transform?.length) {
2787
+ fnLiteral += `let transformed
2788
+ `;
2789
+ for (let i = 0; i < hooks.transform.length; i++) {
2790
+ let transform = hooks.transform[i], endUnit = reporter.resolveChild(transform.fn.name);
2791
+ fnLiteral += isAsync(transform) ? `transformed=await e.transform[${i}](c)
2786
2792
  ` : `transformed=e.transform[${i}](c)
2787
2793
  `, transform.subType === "mapDerive" ? fnLiteral += "if(transformed instanceof ElysiaCustomStatusResponse){" + mapResponse("transformed") + `}else{transformed.request=c.request
2788
2794
  transformed.store=c.store
@@ -2794,6 +2800,7 @@ transformed.set=c.set
2794
2800
  transformed.error=c.error
2795
2801
  c=transformed}` : fnLiteral += "if(transformed instanceof ElysiaCustomStatusResponse){" + mapResponse("transformed") + `}else Object.assign(c,transformed)
2796
2802
  `, endUnit();
2803
+ }
2797
2804
  }
2798
2805
  reporter.resolve();
2799
2806
  }
@@ -2981,14 +2988,15 @@ for(const [key,value] of Object.entries(c.cookie))cookieValue[key]=value.value
2981
2988
  )), cookieValidator.isOptional && (fnLiteral += "}");
2982
2989
  }
2983
2990
  }
2984
- if (hooks?.beforeHandle) {
2991
+ if (hooks?.beforeHandle || hasTrace) {
2985
2992
  let reporter = report("beforeHandle", {
2986
- total: hooks.beforeHandle.length
2993
+ total: hooks.beforeHandle?.length
2987
2994
  }), hasResolve = !1;
2988
- for (let i = 0; i < hooks.beforeHandle.length; i++) {
2989
- let beforeHandle = hooks.beforeHandle[i], endUnit = reporter.resolveChild(beforeHandle.fn.name), returning = hasReturn(beforeHandle);
2990
- if (beforeHandle.subType === "resolve" || beforeHandle.subType === "mapResolve")
2991
- hasResolve || (hasResolve = !0, fnLiteral += `
2995
+ if (hooks.beforeHandle?.length)
2996
+ for (let i = 0; i < hooks.beforeHandle.length; i++) {
2997
+ let beforeHandle = hooks.beforeHandle[i], endUnit = reporter.resolveChild(beforeHandle.fn.name), returning = hasReturn(beforeHandle);
2998
+ if (beforeHandle.subType === "resolve" || beforeHandle.subType === "mapResolve")
2999
+ hasResolve || (hasResolve = !0, fnLiteral += `
2992
3000
  let resolved
2993
3001
  `), fnLiteral += isAsync(beforeHandle) ? `resolved=await e.beforeHandle[${i}](c);
2994
3002
  ` : `resolved=e.beforeHandle[${i}](c);
@@ -3001,76 +3009,78 @@ resolved.redirect=c.redirect
3001
3009
  resolved.set=c.set
3002
3010
  resolved.error=c.error
3003
3011
  c=resolved}` : fnLiteral += "if(resolved instanceof ElysiaCustomStatusResponse){" + mapResponse("resolved") + `}else Object.assign(c, resolved)
3004
- `;
3005
- else if (!returning)
3006
- fnLiteral += isAsync(beforeHandle) ? `await e.beforeHandle[${i}](c)
3012
+ `, endUnit();
3013
+ else if (!returning)
3014
+ fnLiteral += isAsync(beforeHandle) ? `await e.beforeHandle[${i}](c)
3007
3015
  ` : `e.beforeHandle[${i}](c)
3008
3016
  `, endUnit();
3009
- else {
3010
- if (fnLiteral += isAsync(beforeHandle) ? `be=await e.beforeHandle[${i}](c)
3017
+ else {
3018
+ if (fnLiteral += isAsync(beforeHandle) ? `be=await e.beforeHandle[${i}](c)
3011
3019
  ` : `be=e.beforeHandle[${i}](c)
3012
- `, endUnit("be"), fnLiteral += "if(be!==undefined){", reporter.resolve(), hooks.afterHandle?.length) {
3013
- report("handle", {
3014
- name: isHandleFn ? handler.name : void 0
3015
- }).resolve();
3016
- let reporter2 = report("afterHandle", {
3017
- total: hooks.afterHandle.length
3018
- });
3019
- for (let i2 = 0; i2 < hooks.afterHandle.length; i2++) {
3020
- let hook = hooks.afterHandle[i2], returning2 = hasReturn(hook), endUnit2 = reporter2.resolveChild(hook.fn.name);
3021
- fnLiteral += `c.response = be
3020
+ `, endUnit("be"), fnLiteral += "if(be!==undefined){", reporter.resolve(), hooks.afterHandle?.length || hasTrace) {
3021
+ report("handle", {
3022
+ name: isHandleFn ? handler.name : void 0
3023
+ }).resolve();
3024
+ let reporter2 = report("afterHandle", {
3025
+ total: hooks.afterHandle?.length
3026
+ });
3027
+ if (hooks.afterHandle?.length)
3028
+ for (let i2 = 0; i2 < hooks.afterHandle.length; i2++) {
3029
+ let hook = hooks.afterHandle[i2], returning2 = hasReturn(hook), endUnit2 = reporter2.resolveChild(hook.fn.name);
3030
+ fnLiteral += `c.response = be
3022
3031
  `, returning2 ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i2}](c)
3023
3032
  ` : `af=e.afterHandle[${i2}](c)
3024
3033
  `, fnLiteral += `if(af!==undefined) c.response=be=af
3025
3034
  `) : fnLiteral += isAsync(hook.fn) ? `await e.afterHandle[${i2}](c, be)
3026
3035
  ` : `e.afterHandle[${i2}](c, be)
3027
3036
  `, endUnit2("af");
3037
+ }
3038
+ reporter2.resolve();
3028
3039
  }
3029
- reporter2.resolve();
3030
- }
3031
- validator.response && (fnLiteral += validation.response("be"));
3032
- let mapResponseReporter = report("mapResponse", {
3033
- total: hooks.mapResponse?.length
3034
- });
3035
- if (hooks.mapResponse?.length) {
3036
- fnLiteral += `c.response=be
3040
+ validator.response && (fnLiteral += validation.response("be"));
3041
+ let mapResponseReporter = report("mapResponse", {
3042
+ total: hooks.mapResponse?.length
3043
+ });
3044
+ if (hooks.mapResponse?.length) {
3045
+ fnLiteral += `c.response=be
3037
3046
  `;
3038
- for (let i2 = 0; i2 < hooks.mapResponse.length; i2++) {
3039
- let mapResponse2 = hooks.mapResponse[i2], endUnit2 = mapResponseReporter.resolveChild(
3040
- mapResponse2.fn.name
3041
- );
3042
- fnLiteral += `if(mr===undefined){mr=${isAsyncName(mapResponse2) ? "await " : ""}e.mapResponse[${i2}](c)
3047
+ for (let i2 = 0; i2 < hooks.mapResponse.length; i2++) {
3048
+ let mapResponse2 = hooks.mapResponse[i2], endUnit2 = mapResponseReporter.resolveChild(
3049
+ mapResponse2.fn.name
3050
+ );
3051
+ fnLiteral += `if(mr===undefined){mr=${isAsyncName(mapResponse2) ? "await " : ""}e.mapResponse[${i2}](c)
3043
3052
  if(mr!==undefined)be=c.response=mr}`, endUnit2();
3053
+ }
3044
3054
  }
3045
- }
3046
- mapResponseReporter.resolve(), fnLiteral += encodeCookie(), fnLiteral += `return mapEarlyResponse(${saveResponse}be,c.set${mapResponseContext})}
3055
+ mapResponseReporter.resolve(), fnLiteral += encodeCookie(), fnLiteral += `return mapEarlyResponse(${saveResponse}be,c.set${mapResponseContext})}
3047
3056
  `;
3057
+ }
3048
3058
  }
3049
- }
3050
3059
  reporter.resolve();
3051
3060
  }
3052
- if (hooks.afterHandle?.length) {
3061
+ if (hooks.afterHandle?.length || hasTrace) {
3053
3062
  let handleReporter = report("handle", {
3054
3063
  name: isHandleFn ? handler.name : void 0
3055
3064
  });
3056
- hooks.afterHandle.length ? fnLiteral += isAsyncHandler ? `let r=c.response=await ${handle}
3065
+ hooks.afterHandle?.length ? fnLiteral += isAsyncHandler ? `let r=c.response=await ${handle}
3057
3066
  ` : `let r=c.response=${handle}
3058
3067
  ` : fnLiteral += isAsyncHandler ? `let r=await ${handle}
3059
3068
  ` : `let r=${handle}
3060
3069
  `, handleReporter.resolve();
3061
3070
  let reporter = report("afterHandle", {
3062
- total: hooks.afterHandle.length
3071
+ total: hooks.afterHandle?.length
3063
3072
  });
3064
- for (let i = 0; i < hooks.afterHandle.length; i++) {
3065
- let hook = hooks.afterHandle[i], returning = hasReturn(hook), endUnit = reporter.resolveChild(hook.fn.name);
3066
- returning ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i}](c)
3073
+ if (hooks.afterHandle?.length)
3074
+ for (let i = 0; i < hooks.afterHandle.length; i++) {
3075
+ let hook = hooks.afterHandle[i], returning = hasReturn(hook), endUnit = reporter.resolveChild(hook.fn.name);
3076
+ returning ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i}](c)
3067
3077
  ` : `af=e.afterHandle[${i}](c)
3068
3078
  `, endUnit("af"), validator.response ? (fnLiteral += "if(af!==undefined){", reporter.resolve(), fnLiteral += validation.response("af"), fnLiteral += "c.response=af}") : (fnLiteral += "if(af!==undefined){", reporter.resolve(), fnLiteral += "c.response=af}")) : (fnLiteral += isAsync(hook.fn) ? `await e.afterHandle[${i}](c)
3069
3079
  ` : `e.afterHandle[${i}](c)
3070
3080
  `, endUnit());
3071
- }
3072
- reporter.resolve(), fnLiteral += `r=c.response
3073
- `, validator.response && (fnLiteral += validation.response()), fnLiteral += encodeCookie();
3081
+ }
3082
+ reporter.resolve(), hooks.afterHandle?.length && (fnLiteral += `r=c.response
3083
+ `), validator.response && (fnLiteral += validation.response()), fnLiteral += encodeCookie();
3074
3084
  let mapResponseReporter = report("mapResponse", {
3075
3085
  total: hooks.mapResponse?.length
3076
3086
  });
@@ -3088,7 +3098,7 @@ if(mr!==undefined)r=c.response=mr
3088
3098
  let handleReporter = report("handle", {
3089
3099
  name: isHandleFn ? handler.name : void 0
3090
3100
  });
3091
- if (validator.response || hooks.mapResponse?.length) {
3101
+ if (validator.response || hooks.mapResponse?.length || hasTrace) {
3092
3102
  fnLiteral += isAsyncHandler ? `let r=await ${handle}
3093
3103
  ` : `let r=${handle}
3094
3104
  `, handleReporter.resolve(), validator.response && (fnLiteral += validation.response());
@@ -3408,22 +3418,29 @@ map: switch(p){
3408
3418
  fnLiteral += word;
3409
3419
  }
3410
3420
  }), afterResponse = () => {
3411
- if (!hooks.afterResponse?.length) return "";
3412
- let afterResponse2 = "", prefix = hooks.afterResponse.some(isAsync) ? "async" : "";
3421
+ if (!hooks.afterResponse?.length && !hasTrace) return "";
3422
+ let afterResponse2 = "", prefix = hooks.afterResponse?.some(isAsync) ? "async" : "";
3413
3423
  afterResponse2 += `
3414
3424
  setImmediate(${prefix}()=>{`;
3415
- let reporter = report("afterResponse", {
3425
+ let reporter = createReport({
3426
+ context: "context",
3427
+ trace: hooks.trace,
3428
+ addFn: (word) => {
3429
+ afterResponse2 += word;
3430
+ }
3431
+ })("afterResponse", {
3416
3432
  total: hooks.afterResponse?.length,
3417
3433
  name: "context"
3418
3434
  });
3419
- for (let i = 0; i < hooks.afterResponse.length; i++) {
3420
- let fn = hooks.afterResponse[i].fn, endUnit = reporter.resolveChild(fn.name);
3421
- afterResponse2 += `
3435
+ if (hooks.afterResponse?.length && hooks.afterResponse)
3436
+ for (let i = 0; i < hooks.afterResponse.length; i++) {
3437
+ let fn = hooks.afterResponse[i].fn, endUnit = reporter.resolveChild(fn.name);
3438
+ afterResponse2 += `
3422
3439
  ${isAsyncName(fn) ? "await " : ""}afterResponse[${i}](context)
3423
3440
  `, endUnit();
3424
- }
3425
- return afterResponse2 += `})
3426
- `, reporter.resolve(), afterResponse2;
3441
+ }
3442
+ return reporter.resolve(), afterResponse2 += `})
3443
+ `, afterResponse2;
3427
3444
  };
3428
3445
  fnLiteral += `const set=context.set
3429
3446
  let _r
@@ -3431,7 +3448,7 @@ if(!context.code)context.code=error.code??error[ERROR_CODE]
3431
3448
  if(!(context.error instanceof Error))context.error=error
3432
3449
  if(error instanceof ElysiaCustomStatusResponse){set.status=error.status=error.code
3433
3450
  error.message=error.response}`, adapter.declare && (fnLiteral += adapter.declare);
3434
- let saveResponse = hasTrace || hooks.afterResponse?.length || hooks.afterResponse?.length ? "context.response = " : "";
3451
+ let saveResponse = hasTrace || hooks.afterResponse?.length ? "context.response = " : "";
3435
3452
  if (app.event.error)
3436
3453
  for (let i = 0; i < app.event.error.length; i++) {
3437
3454
  let handler = app.event.error[i], response = `${isAsync(handler) ? "await " : ""}onError[${i}](context)
package/dist/index.mjs CHANGED
@@ -411,7 +411,7 @@ import { TypeCompiler } from "@sinclair/typebox/compiler";
411
411
  var isBun = typeof Bun < "u";
412
412
 
413
413
  // src/universal/file.ts
414
- var mime2 = {
414
+ var mime = {
415
415
  aac: "audio/aac",
416
416
  abw: "application/x-abiword",
417
417
  ai: "application/postscript",
@@ -507,7 +507,7 @@ var mime2 = {
507
507
  get type() {
508
508
  return (
509
509
  // @ts-ignore
510
- mime2[getFileExtension(this.path)] || "application/octet-stream"
510
+ mime[getFileExtension(this.path)] || "application/octet-stream"
511
511
  );
512
512
  }
513
513
  get length() {
@@ -2250,22 +2250,26 @@ var handleFile = (response, set2) => {
2250
2250
  try {
2251
2251
  for await (let chunk of generator) {
2252
2252
  if (end) break;
2253
- if (chunk != null) {
2253
+ if (chunk != null)
2254
2254
  if (chunk.toSSE)
2255
2255
  controller.enqueue(chunk.toSSE());
2256
- else if (typeof chunk == "object")
2257
- try {
2258
- controller.enqueue(
2259
- format(JSON.stringify(chunk))
2260
- );
2261
- } catch {
2256
+ else {
2257
+ if (typeof chunk == "object")
2258
+ try {
2259
+ controller.enqueue(
2260
+ format(JSON.stringify(chunk))
2261
+ );
2262
+ } catch {
2263
+ controller.enqueue(
2264
+ format(chunk.toString())
2265
+ );
2266
+ }
2267
+ else
2262
2268
  controller.enqueue(format(chunk.toString()));
2263
- }
2264
- else controller.enqueue(format(chunk.toString()));
2265
- await new Promise(
2266
- (resolve) => setTimeout(() => resolve(), 0)
2267
- );
2268
- }
2269
+ isSSE || await new Promise(
2270
+ (resolve) => setTimeout(() => resolve(), 0)
2271
+ );
2272
+ }
2269
2273
  }
2270
2274
  } catch (error2) {
2271
2275
  console.warn(error2);
@@ -4365,11 +4369,16 @@ try{a${index}.push(JSON.parse(value))}catch{a${index}.push(value)}if(deepMemory=
4365
4369
  }
4366
4370
  }
4367
4371
  let isAsyncHandler = typeof handler == "function" && isAsync(handler), saveResponse = hasTrace || hooks.afterResponse?.length ? "c.response= " : "", maybeAsync = hasCookie || hasBody || isAsyncHandler || !!hooks.parse?.length || !!hooks.afterHandle?.some(isAsync) || !!hooks.beforeHandle?.some(isAsync) || !!hooks.transform?.some(isAsync) || !!hooks.mapResponse?.some(isAsync), maybeStream = (typeof handler == "function" ? isGenerator(handler) : !1) || !!hooks.beforeHandle?.some(isGenerator) || !!hooks.afterHandle?.some(isGenerator) || !!hooks.transform?.some(isGenerator), responseKeys = Object.keys(validator.response ?? {}), hasMultipleResponses = responseKeys.length > 1, hasSingle200 = responseKeys.length === 0 || responseKeys.length === 1 && responseKeys[0] === "200", hasSet = inference.cookie || inference.set || hasHeaders || hasTrace || hasMultipleResponses || !hasSingle200 || isHandleFn && hasDefaultHeaders || maybeStream, afterResponse = () => {
4368
- if (!hooks.afterResponse?.length) return "";
4372
+ if (!hooks.afterResponse?.length && !hasTrace) return "";
4369
4373
  let afterResponse2 = "", prefix = hooks.afterResponse?.some(isAsync) ? "async " : "";
4370
4374
  afterResponse2 += `
4371
4375
  setImmediate(${prefix}()=>{`;
4372
- let reporter = report("afterResponse", {
4376
+ let reporter = createReport({
4377
+ trace: hooks.trace,
4378
+ addFn: (word) => {
4379
+ afterResponse2 += word;
4380
+ }
4381
+ })("afterResponse", {
4373
4382
  total: hooks.afterResponse?.length
4374
4383
  });
4375
4384
  if (hooks.afterResponse?.length && hooks.afterResponse)
@@ -4386,7 +4395,7 @@ ${prefix2}e.afterResponse[${i}](c)
4386
4395
  }, mapResponse3 = (r = "r") => {
4387
4396
  let after = afterResponse(), response = `${hasSet ? "mapResponse" : "mapCompactResponse"}(${saveResponse}${r}${hasSet ? ",c.set" : ""}${mapResponseContext})
4388
4397
  `;
4389
- return after || `${response}`, `const _res=${response}` + after + "return _res";
4398
+ return after ? `const _res=${response}` + after + "return _res" : `return ${response}`;
4390
4399
  }, mapResponseContext = maybeStream || adapter.mapResponseContext ? `,${adapter.mapResponseContext}` : "";
4391
4400
  (hasTrace || inference.route) && (fnLiteral += `c.route=\`${path}\`
4392
4401
  `);
@@ -4540,15 +4549,16 @@ delete c.contentType`);
4540
4549
  }
4541
4550
  fnLiteral += "}catch(error){throw new ParseError(error)}";
4542
4551
  }
4543
- if (parseReporter.resolve(), hooks?.transform) {
4552
+ if (parseReporter.resolve(), hooks?.transform || hasTrace) {
4544
4553
  let reporter = report("transform", {
4545
- total: hooks.transform.length
4554
+ total: hooks.transform?.length
4546
4555
  });
4547
- hooks.transform.length && (fnLiteral += `let transformed
4548
- `);
4549
- for (let i = 0; i < hooks.transform.length; i++) {
4550
- let transform = hooks.transform[i], endUnit = reporter.resolveChild(transform.fn.name);
4551
- fnLiteral += isAsync(transform) ? `transformed=await e.transform[${i}](c)
4556
+ if (hooks.transform?.length) {
4557
+ fnLiteral += `let transformed
4558
+ `;
4559
+ for (let i = 0; i < hooks.transform.length; i++) {
4560
+ let transform = hooks.transform[i], endUnit = reporter.resolveChild(transform.fn.name);
4561
+ fnLiteral += isAsync(transform) ? `transformed=await e.transform[${i}](c)
4552
4562
  ` : `transformed=e.transform[${i}](c)
4553
4563
  `, transform.subType === "mapDerive" ? fnLiteral += "if(transformed instanceof ElysiaCustomStatusResponse){" + mapResponse3("transformed") + `}else{transformed.request=c.request
4554
4564
  transformed.store=c.store
@@ -4560,6 +4570,7 @@ transformed.set=c.set
4560
4570
  transformed.error=c.error
4561
4571
  c=transformed}` : fnLiteral += "if(transformed instanceof ElysiaCustomStatusResponse){" + mapResponse3("transformed") + `}else Object.assign(c,transformed)
4562
4572
  `, endUnit();
4573
+ }
4563
4574
  }
4564
4575
  reporter.resolve();
4565
4576
  }
@@ -4747,14 +4758,15 @@ for(const [key,value] of Object.entries(c.cookie))cookieValue[key]=value.value
4747
4758
  )), cookieValidator.isOptional && (fnLiteral += "}");
4748
4759
  }
4749
4760
  }
4750
- if (hooks?.beforeHandle) {
4761
+ if (hooks?.beforeHandle || hasTrace) {
4751
4762
  let reporter = report("beforeHandle", {
4752
- total: hooks.beforeHandle.length
4763
+ total: hooks.beforeHandle?.length
4753
4764
  }), hasResolve = !1;
4754
- for (let i = 0; i < hooks.beforeHandle.length; i++) {
4755
- let beforeHandle = hooks.beforeHandle[i], endUnit = reporter.resolveChild(beforeHandle.fn.name), returning = hasReturn(beforeHandle);
4756
- if (beforeHandle.subType === "resolve" || beforeHandle.subType === "mapResolve")
4757
- hasResolve || (hasResolve = !0, fnLiteral += `
4765
+ if (hooks.beforeHandle?.length)
4766
+ for (let i = 0; i < hooks.beforeHandle.length; i++) {
4767
+ let beforeHandle = hooks.beforeHandle[i], endUnit = reporter.resolveChild(beforeHandle.fn.name), returning = hasReturn(beforeHandle);
4768
+ if (beforeHandle.subType === "resolve" || beforeHandle.subType === "mapResolve")
4769
+ hasResolve || (hasResolve = !0, fnLiteral += `
4758
4770
  let resolved
4759
4771
  `), fnLiteral += isAsync(beforeHandle) ? `resolved=await e.beforeHandle[${i}](c);
4760
4772
  ` : `resolved=e.beforeHandle[${i}](c);
@@ -4767,76 +4779,78 @@ resolved.redirect=c.redirect
4767
4779
  resolved.set=c.set
4768
4780
  resolved.error=c.error
4769
4781
  c=resolved}` : fnLiteral += "if(resolved instanceof ElysiaCustomStatusResponse){" + mapResponse3("resolved") + `}else Object.assign(c, resolved)
4770
- `;
4771
- else if (!returning)
4772
- fnLiteral += isAsync(beforeHandle) ? `await e.beforeHandle[${i}](c)
4782
+ `, endUnit();
4783
+ else if (!returning)
4784
+ fnLiteral += isAsync(beforeHandle) ? `await e.beforeHandle[${i}](c)
4773
4785
  ` : `e.beforeHandle[${i}](c)
4774
4786
  `, endUnit();
4775
- else {
4776
- if (fnLiteral += isAsync(beforeHandle) ? `be=await e.beforeHandle[${i}](c)
4787
+ else {
4788
+ if (fnLiteral += isAsync(beforeHandle) ? `be=await e.beforeHandle[${i}](c)
4777
4789
  ` : `be=e.beforeHandle[${i}](c)
4778
- `, endUnit("be"), fnLiteral += "if(be!==undefined){", reporter.resolve(), hooks.afterHandle?.length) {
4779
- report("handle", {
4780
- name: isHandleFn ? handler.name : void 0
4781
- }).resolve();
4782
- let reporter2 = report("afterHandle", {
4783
- total: hooks.afterHandle.length
4784
- });
4785
- for (let i2 = 0; i2 < hooks.afterHandle.length; i2++) {
4786
- let hook = hooks.afterHandle[i2], returning2 = hasReturn(hook), endUnit2 = reporter2.resolveChild(hook.fn.name);
4787
- fnLiteral += `c.response = be
4790
+ `, endUnit("be"), fnLiteral += "if(be!==undefined){", reporter.resolve(), hooks.afterHandle?.length || hasTrace) {
4791
+ report("handle", {
4792
+ name: isHandleFn ? handler.name : void 0
4793
+ }).resolve();
4794
+ let reporter2 = report("afterHandle", {
4795
+ total: hooks.afterHandle?.length
4796
+ });
4797
+ if (hooks.afterHandle?.length)
4798
+ for (let i2 = 0; i2 < hooks.afterHandle.length; i2++) {
4799
+ let hook = hooks.afterHandle[i2], returning2 = hasReturn(hook), endUnit2 = reporter2.resolveChild(hook.fn.name);
4800
+ fnLiteral += `c.response = be
4788
4801
  `, returning2 ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i2}](c)
4789
4802
  ` : `af=e.afterHandle[${i2}](c)
4790
4803
  `, fnLiteral += `if(af!==undefined) c.response=be=af
4791
4804
  `) : fnLiteral += isAsync(hook.fn) ? `await e.afterHandle[${i2}](c, be)
4792
4805
  ` : `e.afterHandle[${i2}](c, be)
4793
4806
  `, endUnit2("af");
4807
+ }
4808
+ reporter2.resolve();
4794
4809
  }
4795
- reporter2.resolve();
4796
- }
4797
- validator.response && (fnLiteral += validation.response("be"));
4798
- let mapResponseReporter = report("mapResponse", {
4799
- total: hooks.mapResponse?.length
4800
- });
4801
- if (hooks.mapResponse?.length) {
4802
- fnLiteral += `c.response=be
4810
+ validator.response && (fnLiteral += validation.response("be"));
4811
+ let mapResponseReporter = report("mapResponse", {
4812
+ total: hooks.mapResponse?.length
4813
+ });
4814
+ if (hooks.mapResponse?.length) {
4815
+ fnLiteral += `c.response=be
4803
4816
  `;
4804
- for (let i2 = 0; i2 < hooks.mapResponse.length; i2++) {
4805
- let mapResponse4 = hooks.mapResponse[i2], endUnit2 = mapResponseReporter.resolveChild(
4806
- mapResponse4.fn.name
4807
- );
4808
- fnLiteral += `if(mr===undefined){mr=${isAsyncName(mapResponse4) ? "await " : ""}e.mapResponse[${i2}](c)
4817
+ for (let i2 = 0; i2 < hooks.mapResponse.length; i2++) {
4818
+ let mapResponse4 = hooks.mapResponse[i2], endUnit2 = mapResponseReporter.resolveChild(
4819
+ mapResponse4.fn.name
4820
+ );
4821
+ fnLiteral += `if(mr===undefined){mr=${isAsyncName(mapResponse4) ? "await " : ""}e.mapResponse[${i2}](c)
4809
4822
  if(mr!==undefined)be=c.response=mr}`, endUnit2();
4823
+ }
4810
4824
  }
4811
- }
4812
- mapResponseReporter.resolve(), fnLiteral += encodeCookie(), fnLiteral += `return mapEarlyResponse(${saveResponse}be,c.set${mapResponseContext})}
4825
+ mapResponseReporter.resolve(), fnLiteral += encodeCookie(), fnLiteral += `return mapEarlyResponse(${saveResponse}be,c.set${mapResponseContext})}
4813
4826
  `;
4827
+ }
4814
4828
  }
4815
- }
4816
4829
  reporter.resolve();
4817
4830
  }
4818
- if (hooks.afterHandle?.length) {
4831
+ if (hooks.afterHandle?.length || hasTrace) {
4819
4832
  let handleReporter = report("handle", {
4820
4833
  name: isHandleFn ? handler.name : void 0
4821
4834
  });
4822
- hooks.afterHandle.length ? fnLiteral += isAsyncHandler ? `let r=c.response=await ${handle}
4835
+ hooks.afterHandle?.length ? fnLiteral += isAsyncHandler ? `let r=c.response=await ${handle}
4823
4836
  ` : `let r=c.response=${handle}
4824
4837
  ` : fnLiteral += isAsyncHandler ? `let r=await ${handle}
4825
4838
  ` : `let r=${handle}
4826
4839
  `, handleReporter.resolve();
4827
4840
  let reporter = report("afterHandle", {
4828
- total: hooks.afterHandle.length
4841
+ total: hooks.afterHandle?.length
4829
4842
  });
4830
- for (let i = 0; i < hooks.afterHandle.length; i++) {
4831
- let hook = hooks.afterHandle[i], returning = hasReturn(hook), endUnit = reporter.resolveChild(hook.fn.name);
4832
- returning ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i}](c)
4843
+ if (hooks.afterHandle?.length)
4844
+ for (let i = 0; i < hooks.afterHandle.length; i++) {
4845
+ let hook = hooks.afterHandle[i], returning = hasReturn(hook), endUnit = reporter.resolveChild(hook.fn.name);
4846
+ returning ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i}](c)
4833
4847
  ` : `af=e.afterHandle[${i}](c)
4834
4848
  `, endUnit("af"), validator.response ? (fnLiteral += "if(af!==undefined){", reporter.resolve(), fnLiteral += validation.response("af"), fnLiteral += "c.response=af}") : (fnLiteral += "if(af!==undefined){", reporter.resolve(), fnLiteral += "c.response=af}")) : (fnLiteral += isAsync(hook.fn) ? `await e.afterHandle[${i}](c)
4835
4849
  ` : `e.afterHandle[${i}](c)
4836
4850
  `, endUnit());
4837
- }
4838
- reporter.resolve(), fnLiteral += `r=c.response
4839
- `, validator.response && (fnLiteral += validation.response()), fnLiteral += encodeCookie();
4851
+ }
4852
+ reporter.resolve(), hooks.afterHandle?.length && (fnLiteral += `r=c.response
4853
+ `), validator.response && (fnLiteral += validation.response()), fnLiteral += encodeCookie();
4840
4854
  let mapResponseReporter = report("mapResponse", {
4841
4855
  total: hooks.mapResponse?.length
4842
4856
  });
@@ -4854,7 +4868,7 @@ if(mr!==undefined)r=c.response=mr
4854
4868
  let handleReporter = report("handle", {
4855
4869
  name: isHandleFn ? handler.name : void 0
4856
4870
  });
4857
- if (validator.response || hooks.mapResponse?.length) {
4871
+ if (validator.response || hooks.mapResponse?.length || hasTrace) {
4858
4872
  fnLiteral += isAsyncHandler ? `let r=await ${handle}
4859
4873
  ` : `let r=${handle}
4860
4874
  `, handleReporter.resolve(), validator.response && (fnLiteral += validation.response());
@@ -5174,22 +5188,29 @@ map: switch(p){
5174
5188
  fnLiteral += word;
5175
5189
  }
5176
5190
  }), afterResponse = () => {
5177
- if (!hooks.afterResponse?.length) return "";
5178
- let afterResponse2 = "", prefix = hooks.afterResponse.some(isAsync) ? "async" : "";
5191
+ if (!hooks.afterResponse?.length && !hasTrace) return "";
5192
+ let afterResponse2 = "", prefix = hooks.afterResponse?.some(isAsync) ? "async" : "";
5179
5193
  afterResponse2 += `
5180
5194
  setImmediate(${prefix}()=>{`;
5181
- let reporter = report("afterResponse", {
5195
+ let reporter = createReport({
5196
+ context: "context",
5197
+ trace: hooks.trace,
5198
+ addFn: (word) => {
5199
+ afterResponse2 += word;
5200
+ }
5201
+ })("afterResponse", {
5182
5202
  total: hooks.afterResponse?.length,
5183
5203
  name: "context"
5184
5204
  });
5185
- for (let i = 0; i < hooks.afterResponse.length; i++) {
5186
- let fn = hooks.afterResponse[i].fn, endUnit = reporter.resolveChild(fn.name);
5187
- afterResponse2 += `
5205
+ if (hooks.afterResponse?.length && hooks.afterResponse)
5206
+ for (let i = 0; i < hooks.afterResponse.length; i++) {
5207
+ let fn = hooks.afterResponse[i].fn, endUnit = reporter.resolveChild(fn.name);
5208
+ afterResponse2 += `
5188
5209
  ${isAsyncName(fn) ? "await " : ""}afterResponse[${i}](context)
5189
5210
  `, endUnit();
5190
- }
5191
- return afterResponse2 += `})
5192
- `, reporter.resolve(), afterResponse2;
5211
+ }
5212
+ return reporter.resolve(), afterResponse2 += `})
5213
+ `, afterResponse2;
5193
5214
  };
5194
5215
  fnLiteral += `const set=context.set
5195
5216
  let _r
@@ -5197,7 +5218,7 @@ if(!context.code)context.code=error.code??error[ERROR_CODE]
5197
5218
  if(!(context.error instanceof Error))context.error=error
5198
5219
  if(error instanceof ElysiaCustomStatusResponse){set.status=error.status=error.code
5199
5220
  error.message=error.response}`, adapter.declare && (fnLiteral += adapter.declare);
5200
- let saveResponse = hasTrace || hooks.afterResponse?.length || hooks.afterResponse?.length ? "context.response = " : "";
5221
+ let saveResponse = hasTrace || hooks.afterResponse?.length ? "context.response = " : "";
5201
5222
  if (app.event.error)
5202
5223
  for (let i = 0; i < app.event.error.length; i++) {
5203
5224
  let handler = app.event.error[i], response = `${isAsync(handler) ? "await " : ""}onError[${i}](context)
@@ -5624,7 +5645,9 @@ for(const [k,v] of c.request.headers.entries())c.headers[k]=v
5624
5645
  ),
5625
5646
  websocket: {
5626
5647
  ...app.config.websocket || {},
5627
- ...websocket || {}
5648
+ ...websocket || {},
5649
+ // @ts-expect-error not available in this variant of options type
5650
+ ...options.websocket || {}
5628
5651
  },
5629
5652
  fetch: app.fetch
5630
5653
  } : {
@@ -5730,7 +5753,7 @@ for(const [k,v] of c.request.headers.entries())c.headers[k]=v
5730
5753
  ...(app.event.error ?? []).map(
5731
5754
  (x) => typeof x == "function" ? x : x.fn
5732
5755
  )
5733
- ].filter((x) => x), handleErrors = errorHandlers.length ? async (ws, error2) => {
5756
+ ].filter((x) => x), hasCustomErrorHandlers = errorHandlers.length > 0, handleErrors = hasCustomErrorHandlers ? async (ws, error2) => {
5734
5757
  for (let handleError of errorHandlers) {
5735
5758
  let response2 = handleError(
5736
5759
  Object.assign(context, { error: error2 })
@@ -5767,14 +5790,14 @@ for(const [k,v] of c.request.headers.entries())c.headers[k]=v
5767
5790
  },
5768
5791
  message: async (ws, _message) => {
5769
5792
  let message = await parseMessage(ws, _message);
5770
- if (validateMessage?.Check(message) === !1)
5771
- return void ws.send(
5772
- new ValidationError(
5773
- "message",
5774
- validateMessage,
5775
- message
5776
- ).message
5793
+ if (validateMessage?.Check(message) === !1) {
5794
+ let validationError = new ValidationError(
5795
+ "message",
5796
+ validateMessage,
5797
+ message
5777
5798
  );
5799
+ return hasCustomErrorHandlers ? handleErrors(ws, validationError) : void ws.send(validationError.message);
5800
+ }
5778
5801
  try {
5779
5802
  await handleResponse3(
5780
5803
  ws,
@@ -7313,7 +7336,7 @@ var _Elysia = class _Elysia {
7313
7336
  if (typeof plugin2 == "function") return plugin2(this);
7314
7337
  if (plugin2 instanceof _Elysia)
7315
7338
  return this._use(plugin2).compile();
7316
- if (plugin2.constructor.name === "Elysia")
7339
+ if (plugin2.constructor?.name === "Elysia")
7317
7340
  return this._use(
7318
7341
  plugin2
7319
7342
  ).compile();
@@ -7321,9 +7344,9 @@ var _Elysia = class _Elysia {
7321
7344
  return plugin2.default(this);
7322
7345
  if (plugin2.default instanceof _Elysia)
7323
7346
  return this._use(plugin2.default);
7324
- if (plugin2.constructor.name === "Elysia")
7347
+ if (plugin2.constructor?.name === "Elysia")
7325
7348
  return this._use(plugin2.default);
7326
- if (plugin2.constructor.name === "_Elysia")
7349
+ if (plugin2.constructor?.name === "_Elysia")
7327
7350
  return this._use(plugin2.default);
7328
7351
  try {
7329
7352
  return this._use(plugin2.default);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "elysia",
3
3
  "description": "Ergonomic Framework for Human",
4
- "version": "1.3.19",
4
+ "version": "1.3.21",
5
5
  "author": {
6
6
  "name": "saltyAom",
7
7
  "url": "https://github.com/SaltyAom",