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.
@@ -2602,11 +2602,16 @@ try{a${index}.push(JSON.parse(value))}catch{a${index}.push(value)}if(deepMemory=
2602
2602
  }
2603
2603
  }
2604
2604
  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 = () => {
2605
- if (!hooks.afterResponse?.length) return "";
2605
+ if (!hooks.afterResponse?.length && !hasTrace) return "";
2606
2606
  let afterResponse2 = "", prefix = hooks.afterResponse?.some(isAsync) ? "async " : "";
2607
2607
  afterResponse2 += `
2608
2608
  setImmediate(${prefix}()=>{`;
2609
- let reporter = report("afterResponse", {
2609
+ let reporter = createReport({
2610
+ trace: hooks.trace,
2611
+ addFn: (word) => {
2612
+ afterResponse2 += word;
2613
+ }
2614
+ })("afterResponse", {
2610
2615
  total: hooks.afterResponse?.length
2611
2616
  });
2612
2617
  if (hooks.afterResponse?.length && hooks.afterResponse)
@@ -2623,7 +2628,7 @@ ${prefix2}e.afterResponse[${i}](c)
2623
2628
  }, mapResponse = (r = "r") => {
2624
2629
  let after = afterResponse(), response = `${hasSet ? "mapResponse" : "mapCompactResponse"}(${saveResponse}${r}${hasSet ? ",c.set" : ""}${mapResponseContext})
2625
2630
  `;
2626
- return after || `${response}`, `const _res=${response}` + after + "return _res";
2631
+ return after ? `const _res=${response}` + after + "return _res" : `return ${response}`;
2627
2632
  }, mapResponseContext = maybeStream || adapter.mapResponseContext ? `,${adapter.mapResponseContext}` : "";
2628
2633
  (hasTrace || inference.route) && (fnLiteral += `c.route=\`${path}\`
2629
2634
  `);
@@ -2777,15 +2782,16 @@ delete c.contentType`);
2777
2782
  }
2778
2783
  fnLiteral += "}catch(error){throw new ParseError(error)}";
2779
2784
  }
2780
- if (parseReporter.resolve(), hooks?.transform) {
2785
+ if (parseReporter.resolve(), hooks?.transform || hasTrace) {
2781
2786
  let reporter = report("transform", {
2782
- total: hooks.transform.length
2787
+ total: hooks.transform?.length
2783
2788
  });
2784
- hooks.transform.length && (fnLiteral += `let transformed
2785
- `);
2786
- for (let i = 0; i < hooks.transform.length; i++) {
2787
- let transform = hooks.transform[i], endUnit = reporter.resolveChild(transform.fn.name);
2788
- fnLiteral += isAsync(transform) ? `transformed=await e.transform[${i}](c)
2789
+ if (hooks.transform?.length) {
2790
+ fnLiteral += `let transformed
2791
+ `;
2792
+ for (let i = 0; i < hooks.transform.length; i++) {
2793
+ let transform = hooks.transform[i], endUnit = reporter.resolveChild(transform.fn.name);
2794
+ fnLiteral += isAsync(transform) ? `transformed=await e.transform[${i}](c)
2789
2795
  ` : `transformed=e.transform[${i}](c)
2790
2796
  `, transform.subType === "mapDerive" ? fnLiteral += "if(transformed instanceof ElysiaCustomStatusResponse){" + mapResponse("transformed") + `}else{transformed.request=c.request
2791
2797
  transformed.store=c.store
@@ -2797,6 +2803,7 @@ transformed.set=c.set
2797
2803
  transformed.error=c.error
2798
2804
  c=transformed}` : fnLiteral += "if(transformed instanceof ElysiaCustomStatusResponse){" + mapResponse("transformed") + `}else Object.assign(c,transformed)
2799
2805
  `, endUnit();
2806
+ }
2800
2807
  }
2801
2808
  reporter.resolve();
2802
2809
  }
@@ -2984,14 +2991,15 @@ for(const [key,value] of Object.entries(c.cookie))cookieValue[key]=value.value
2984
2991
  )), cookieValidator.isOptional && (fnLiteral += "}");
2985
2992
  }
2986
2993
  }
2987
- if (hooks?.beforeHandle) {
2994
+ if (hooks?.beforeHandle || hasTrace) {
2988
2995
  let reporter = report("beforeHandle", {
2989
- total: hooks.beforeHandle.length
2996
+ total: hooks.beforeHandle?.length
2990
2997
  }), hasResolve = !1;
2991
- for (let i = 0; i < hooks.beforeHandle.length; i++) {
2992
- let beforeHandle = hooks.beforeHandle[i], endUnit = reporter.resolveChild(beforeHandle.fn.name), returning = hasReturn(beforeHandle);
2993
- if (beforeHandle.subType === "resolve" || beforeHandle.subType === "mapResolve")
2994
- hasResolve || (hasResolve = !0, fnLiteral += `
2998
+ if (hooks.beforeHandle?.length)
2999
+ for (let i = 0; i < hooks.beforeHandle.length; i++) {
3000
+ let beforeHandle = hooks.beforeHandle[i], endUnit = reporter.resolveChild(beforeHandle.fn.name), returning = hasReturn(beforeHandle);
3001
+ if (beforeHandle.subType === "resolve" || beforeHandle.subType === "mapResolve")
3002
+ hasResolve || (hasResolve = !0, fnLiteral += `
2995
3003
  let resolved
2996
3004
  `), fnLiteral += isAsync(beforeHandle) ? `resolved=await e.beforeHandle[${i}](c);
2997
3005
  ` : `resolved=e.beforeHandle[${i}](c);
@@ -3004,76 +3012,78 @@ resolved.redirect=c.redirect
3004
3012
  resolved.set=c.set
3005
3013
  resolved.error=c.error
3006
3014
  c=resolved}` : fnLiteral += "if(resolved instanceof ElysiaCustomStatusResponse){" + mapResponse("resolved") + `}else Object.assign(c, resolved)
3007
- `;
3008
- else if (!returning)
3009
- fnLiteral += isAsync(beforeHandle) ? `await e.beforeHandle[${i}](c)
3015
+ `, endUnit();
3016
+ else if (!returning)
3017
+ fnLiteral += isAsync(beforeHandle) ? `await e.beforeHandle[${i}](c)
3010
3018
  ` : `e.beforeHandle[${i}](c)
3011
3019
  `, endUnit();
3012
- else {
3013
- if (fnLiteral += isAsync(beforeHandle) ? `be=await e.beforeHandle[${i}](c)
3020
+ else {
3021
+ if (fnLiteral += isAsync(beforeHandle) ? `be=await e.beforeHandle[${i}](c)
3014
3022
  ` : `be=e.beforeHandle[${i}](c)
3015
- `, endUnit("be"), fnLiteral += "if(be!==undefined){", reporter.resolve(), hooks.afterHandle?.length) {
3016
- report("handle", {
3017
- name: isHandleFn ? handler.name : void 0
3018
- }).resolve();
3019
- let reporter2 = report("afterHandle", {
3020
- total: hooks.afterHandle.length
3021
- });
3022
- for (let i2 = 0; i2 < hooks.afterHandle.length; i2++) {
3023
- let hook = hooks.afterHandle[i2], returning2 = hasReturn(hook), endUnit2 = reporter2.resolveChild(hook.fn.name);
3024
- fnLiteral += `c.response = be
3023
+ `, endUnit("be"), fnLiteral += "if(be!==undefined){", reporter.resolve(), hooks.afterHandle?.length || hasTrace) {
3024
+ report("handle", {
3025
+ name: isHandleFn ? handler.name : void 0
3026
+ }).resolve();
3027
+ let reporter2 = report("afterHandle", {
3028
+ total: hooks.afterHandle?.length
3029
+ });
3030
+ if (hooks.afterHandle?.length)
3031
+ for (let i2 = 0; i2 < hooks.afterHandle.length; i2++) {
3032
+ let hook = hooks.afterHandle[i2], returning2 = hasReturn(hook), endUnit2 = reporter2.resolveChild(hook.fn.name);
3033
+ fnLiteral += `c.response = be
3025
3034
  `, returning2 ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i2}](c)
3026
3035
  ` : `af=e.afterHandle[${i2}](c)
3027
3036
  `, fnLiteral += `if(af!==undefined) c.response=be=af
3028
3037
  `) : fnLiteral += isAsync(hook.fn) ? `await e.afterHandle[${i2}](c, be)
3029
3038
  ` : `e.afterHandle[${i2}](c, be)
3030
3039
  `, endUnit2("af");
3040
+ }
3041
+ reporter2.resolve();
3031
3042
  }
3032
- reporter2.resolve();
3033
- }
3034
- validator.response && (fnLiteral += validation.response("be"));
3035
- let mapResponseReporter = report("mapResponse", {
3036
- total: hooks.mapResponse?.length
3037
- });
3038
- if (hooks.mapResponse?.length) {
3039
- fnLiteral += `c.response=be
3043
+ validator.response && (fnLiteral += validation.response("be"));
3044
+ let mapResponseReporter = report("mapResponse", {
3045
+ total: hooks.mapResponse?.length
3046
+ });
3047
+ if (hooks.mapResponse?.length) {
3048
+ fnLiteral += `c.response=be
3040
3049
  `;
3041
- for (let i2 = 0; i2 < hooks.mapResponse.length; i2++) {
3042
- let mapResponse2 = hooks.mapResponse[i2], endUnit2 = mapResponseReporter.resolveChild(
3043
- mapResponse2.fn.name
3044
- );
3045
- fnLiteral += `if(mr===undefined){mr=${isAsyncName(mapResponse2) ? "await " : ""}e.mapResponse[${i2}](c)
3050
+ for (let i2 = 0; i2 < hooks.mapResponse.length; i2++) {
3051
+ let mapResponse2 = hooks.mapResponse[i2], endUnit2 = mapResponseReporter.resolveChild(
3052
+ mapResponse2.fn.name
3053
+ );
3054
+ fnLiteral += `if(mr===undefined){mr=${isAsyncName(mapResponse2) ? "await " : ""}e.mapResponse[${i2}](c)
3046
3055
  if(mr!==undefined)be=c.response=mr}`, endUnit2();
3056
+ }
3047
3057
  }
3048
- }
3049
- mapResponseReporter.resolve(), fnLiteral += encodeCookie(), fnLiteral += `return mapEarlyResponse(${saveResponse}be,c.set${mapResponseContext})}
3058
+ mapResponseReporter.resolve(), fnLiteral += encodeCookie(), fnLiteral += `return mapEarlyResponse(${saveResponse}be,c.set${mapResponseContext})}
3050
3059
  `;
3060
+ }
3051
3061
  }
3052
- }
3053
3062
  reporter.resolve();
3054
3063
  }
3055
- if (hooks.afterHandle?.length) {
3064
+ if (hooks.afterHandle?.length || hasTrace) {
3056
3065
  let handleReporter = report("handle", {
3057
3066
  name: isHandleFn ? handler.name : void 0
3058
3067
  });
3059
- hooks.afterHandle.length ? fnLiteral += isAsyncHandler ? `let r=c.response=await ${handle}
3068
+ hooks.afterHandle?.length ? fnLiteral += isAsyncHandler ? `let r=c.response=await ${handle}
3060
3069
  ` : `let r=c.response=${handle}
3061
3070
  ` : fnLiteral += isAsyncHandler ? `let r=await ${handle}
3062
3071
  ` : `let r=${handle}
3063
3072
  `, handleReporter.resolve();
3064
3073
  let reporter = report("afterHandle", {
3065
- total: hooks.afterHandle.length
3074
+ total: hooks.afterHandle?.length
3066
3075
  });
3067
- for (let i = 0; i < hooks.afterHandle.length; i++) {
3068
- let hook = hooks.afterHandle[i], returning = hasReturn(hook), endUnit = reporter.resolveChild(hook.fn.name);
3069
- returning ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i}](c)
3076
+ if (hooks.afterHandle?.length)
3077
+ for (let i = 0; i < hooks.afterHandle.length; i++) {
3078
+ let hook = hooks.afterHandle[i], returning = hasReturn(hook), endUnit = reporter.resolveChild(hook.fn.name);
3079
+ returning ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i}](c)
3070
3080
  ` : `af=e.afterHandle[${i}](c)
3071
3081
  `, 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)
3072
3082
  ` : `e.afterHandle[${i}](c)
3073
3083
  `, endUnit());
3074
- }
3075
- reporter.resolve(), fnLiteral += `r=c.response
3076
- `, validator.response && (fnLiteral += validation.response()), fnLiteral += encodeCookie();
3084
+ }
3085
+ reporter.resolve(), hooks.afterHandle?.length && (fnLiteral += `r=c.response
3086
+ `), validator.response && (fnLiteral += validation.response()), fnLiteral += encodeCookie();
3077
3087
  let mapResponseReporter = report("mapResponse", {
3078
3088
  total: hooks.mapResponse?.length
3079
3089
  });
@@ -3091,7 +3101,7 @@ if(mr!==undefined)r=c.response=mr
3091
3101
  let handleReporter = report("handle", {
3092
3102
  name: isHandleFn ? handler.name : void 0
3093
3103
  });
3094
- if (validator.response || hooks.mapResponse?.length) {
3104
+ if (validator.response || hooks.mapResponse?.length || hasTrace) {
3095
3105
  fnLiteral += isAsyncHandler ? `let r=await ${handle}
3096
3106
  ` : `let r=${handle}
3097
3107
  `, handleReporter.resolve(), validator.response && (fnLiteral += validation.response());
@@ -3411,22 +3421,29 @@ map: switch(p){
3411
3421
  fnLiteral += word;
3412
3422
  }
3413
3423
  }), afterResponse = () => {
3414
- if (!hooks.afterResponse?.length) return "";
3415
- let afterResponse2 = "", prefix = hooks.afterResponse.some(isAsync) ? "async" : "";
3424
+ if (!hooks.afterResponse?.length && !hasTrace) return "";
3425
+ let afterResponse2 = "", prefix = hooks.afterResponse?.some(isAsync) ? "async" : "";
3416
3426
  afterResponse2 += `
3417
3427
  setImmediate(${prefix}()=>{`;
3418
- let reporter = report("afterResponse", {
3428
+ let reporter = createReport({
3429
+ context: "context",
3430
+ trace: hooks.trace,
3431
+ addFn: (word) => {
3432
+ afterResponse2 += word;
3433
+ }
3434
+ })("afterResponse", {
3419
3435
  total: hooks.afterResponse?.length,
3420
3436
  name: "context"
3421
3437
  });
3422
- for (let i = 0; i < hooks.afterResponse.length; i++) {
3423
- let fn = hooks.afterResponse[i].fn, endUnit = reporter.resolveChild(fn.name);
3424
- afterResponse2 += `
3438
+ if (hooks.afterResponse?.length && hooks.afterResponse)
3439
+ for (let i = 0; i < hooks.afterResponse.length; i++) {
3440
+ let fn = hooks.afterResponse[i].fn, endUnit = reporter.resolveChild(fn.name);
3441
+ afterResponse2 += `
3425
3442
  ${isAsyncName(fn) ? "await " : ""}afterResponse[${i}](context)
3426
3443
  `, endUnit();
3427
- }
3428
- return afterResponse2 += `})
3429
- `, reporter.resolve(), afterResponse2;
3444
+ }
3445
+ return reporter.resolve(), afterResponse2 += `})
3446
+ `, afterResponse2;
3430
3447
  };
3431
3448
  fnLiteral += `const set=context.set
3432
3449
  let _r
@@ -3434,7 +3451,7 @@ if(!context.code)context.code=error.code??error[ERROR_CODE]
3434
3451
  if(!(context.error instanceof Error))context.error=error
3435
3452
  if(error instanceof ElysiaCustomStatusResponse){set.status=error.status=error.code
3436
3453
  error.message=error.response}`, adapter.declare && (fnLiteral += adapter.declare);
3437
- let saveResponse = hasTrace || hooks.afterResponse?.length || hooks.afterResponse?.length ? "context.response = " : "";
3454
+ let saveResponse = hasTrace || hooks.afterResponse?.length ? "context.response = " : "";
3438
3455
  if (app.event.error)
3439
3456
  for (let i = 0; i < app.event.error.length; i++) {
3440
3457
  let handler = app.event.error[i], response = `${isAsync(handler) ? "await " : ""}onError[${i}](context)
package/dist/cjs/index.js CHANGED
@@ -468,7 +468,7 @@ var import_typebox2 = require("@sinclair/typebox"), import_value2 = require("@si
468
468
  var isBun = typeof Bun < "u";
469
469
 
470
470
  // src/universal/file.ts
471
- var mime2 = {
471
+ var mime = {
472
472
  aac: "audio/aac",
473
473
  abw: "application/x-abiword",
474
474
  ai: "application/postscript",
@@ -564,7 +564,7 @@ var mime2 = {
564
564
  get type() {
565
565
  return (
566
566
  // @ts-ignore
567
- mime2[getFileExtension(this.path)] || "application/octet-stream"
567
+ mime[getFileExtension(this.path)] || "application/octet-stream"
568
568
  );
569
569
  }
570
570
  get length() {
@@ -2298,22 +2298,26 @@ var handleFile = (response, set2) => {
2298
2298
  try {
2299
2299
  for await (let chunk of generator) {
2300
2300
  if (end) break;
2301
- if (chunk != null) {
2301
+ if (chunk != null)
2302
2302
  if (chunk.toSSE)
2303
2303
  controller.enqueue(chunk.toSSE());
2304
- else if (typeof chunk == "object")
2305
- try {
2306
- controller.enqueue(
2307
- format(JSON.stringify(chunk))
2308
- );
2309
- } catch {
2304
+ else {
2305
+ if (typeof chunk == "object")
2306
+ try {
2307
+ controller.enqueue(
2308
+ format(JSON.stringify(chunk))
2309
+ );
2310
+ } catch {
2311
+ controller.enqueue(
2312
+ format(chunk.toString())
2313
+ );
2314
+ }
2315
+ else
2310
2316
  controller.enqueue(format(chunk.toString()));
2311
- }
2312
- else controller.enqueue(format(chunk.toString()));
2313
- await new Promise(
2314
- (resolve) => setTimeout(() => resolve(), 0)
2315
- );
2316
- }
2317
+ isSSE || await new Promise(
2318
+ (resolve) => setTimeout(() => resolve(), 0)
2319
+ );
2320
+ }
2317
2321
  }
2318
2322
  } catch (error2) {
2319
2323
  console.warn(error2);
@@ -4398,11 +4402,16 @@ try{a${index}.push(JSON.parse(value))}catch{a${index}.push(value)}if(deepMemory=
4398
4402
  }
4399
4403
  }
4400
4404
  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 = () => {
4401
- if (!hooks.afterResponse?.length) return "";
4405
+ if (!hooks.afterResponse?.length && !hasTrace) return "";
4402
4406
  let afterResponse2 = "", prefix = hooks.afterResponse?.some(isAsync) ? "async " : "";
4403
4407
  afterResponse2 += `
4404
4408
  setImmediate(${prefix}()=>{`;
4405
- let reporter = report("afterResponse", {
4409
+ let reporter = createReport({
4410
+ trace: hooks.trace,
4411
+ addFn: (word) => {
4412
+ afterResponse2 += word;
4413
+ }
4414
+ })("afterResponse", {
4406
4415
  total: hooks.afterResponse?.length
4407
4416
  });
4408
4417
  if (hooks.afterResponse?.length && hooks.afterResponse)
@@ -4419,7 +4428,7 @@ ${prefix2}e.afterResponse[${i}](c)
4419
4428
  }, mapResponse3 = (r = "r") => {
4420
4429
  let after = afterResponse(), response = `${hasSet ? "mapResponse" : "mapCompactResponse"}(${saveResponse}${r}${hasSet ? ",c.set" : ""}${mapResponseContext})
4421
4430
  `;
4422
- return after || `${response}`, `const _res=${response}` + after + "return _res";
4431
+ return after ? `const _res=${response}` + after + "return _res" : `return ${response}`;
4423
4432
  }, mapResponseContext = maybeStream || adapter.mapResponseContext ? `,${adapter.mapResponseContext}` : "";
4424
4433
  (hasTrace || inference.route) && (fnLiteral += `c.route=\`${path}\`
4425
4434
  `);
@@ -4573,15 +4582,16 @@ delete c.contentType`);
4573
4582
  }
4574
4583
  fnLiteral += "}catch(error){throw new ParseError(error)}";
4575
4584
  }
4576
- if (parseReporter.resolve(), hooks?.transform) {
4585
+ if (parseReporter.resolve(), hooks?.transform || hasTrace) {
4577
4586
  let reporter = report("transform", {
4578
- total: hooks.transform.length
4587
+ total: hooks.transform?.length
4579
4588
  });
4580
- hooks.transform.length && (fnLiteral += `let transformed
4581
- `);
4582
- for (let i = 0; i < hooks.transform.length; i++) {
4583
- let transform = hooks.transform[i], endUnit = reporter.resolveChild(transform.fn.name);
4584
- fnLiteral += isAsync(transform) ? `transformed=await e.transform[${i}](c)
4589
+ if (hooks.transform?.length) {
4590
+ fnLiteral += `let transformed
4591
+ `;
4592
+ for (let i = 0; i < hooks.transform.length; i++) {
4593
+ let transform = hooks.transform[i], endUnit = reporter.resolveChild(transform.fn.name);
4594
+ fnLiteral += isAsync(transform) ? `transformed=await e.transform[${i}](c)
4585
4595
  ` : `transformed=e.transform[${i}](c)
4586
4596
  `, transform.subType === "mapDerive" ? fnLiteral += "if(transformed instanceof ElysiaCustomStatusResponse){" + mapResponse3("transformed") + `}else{transformed.request=c.request
4587
4597
  transformed.store=c.store
@@ -4593,6 +4603,7 @@ transformed.set=c.set
4593
4603
  transformed.error=c.error
4594
4604
  c=transformed}` : fnLiteral += "if(transformed instanceof ElysiaCustomStatusResponse){" + mapResponse3("transformed") + `}else Object.assign(c,transformed)
4595
4605
  `, endUnit();
4606
+ }
4596
4607
  }
4597
4608
  reporter.resolve();
4598
4609
  }
@@ -4780,14 +4791,15 @@ for(const [key,value] of Object.entries(c.cookie))cookieValue[key]=value.value
4780
4791
  )), cookieValidator.isOptional && (fnLiteral += "}");
4781
4792
  }
4782
4793
  }
4783
- if (hooks?.beforeHandle) {
4794
+ if (hooks?.beforeHandle || hasTrace) {
4784
4795
  let reporter = report("beforeHandle", {
4785
- total: hooks.beforeHandle.length
4796
+ total: hooks.beforeHandle?.length
4786
4797
  }), hasResolve = !1;
4787
- for (let i = 0; i < hooks.beforeHandle.length; i++) {
4788
- let beforeHandle = hooks.beforeHandle[i], endUnit = reporter.resolveChild(beforeHandle.fn.name), returning = hasReturn(beforeHandle);
4789
- if (beforeHandle.subType === "resolve" || beforeHandle.subType === "mapResolve")
4790
- hasResolve || (hasResolve = !0, fnLiteral += `
4798
+ if (hooks.beforeHandle?.length)
4799
+ for (let i = 0; i < hooks.beforeHandle.length; i++) {
4800
+ let beforeHandle = hooks.beforeHandle[i], endUnit = reporter.resolveChild(beforeHandle.fn.name), returning = hasReturn(beforeHandle);
4801
+ if (beforeHandle.subType === "resolve" || beforeHandle.subType === "mapResolve")
4802
+ hasResolve || (hasResolve = !0, fnLiteral += `
4791
4803
  let resolved
4792
4804
  `), fnLiteral += isAsync(beforeHandle) ? `resolved=await e.beforeHandle[${i}](c);
4793
4805
  ` : `resolved=e.beforeHandle[${i}](c);
@@ -4800,76 +4812,78 @@ resolved.redirect=c.redirect
4800
4812
  resolved.set=c.set
4801
4813
  resolved.error=c.error
4802
4814
  c=resolved}` : fnLiteral += "if(resolved instanceof ElysiaCustomStatusResponse){" + mapResponse3("resolved") + `}else Object.assign(c, resolved)
4803
- `;
4804
- else if (!returning)
4805
- fnLiteral += isAsync(beforeHandle) ? `await e.beforeHandle[${i}](c)
4815
+ `, endUnit();
4816
+ else if (!returning)
4817
+ fnLiteral += isAsync(beforeHandle) ? `await e.beforeHandle[${i}](c)
4806
4818
  ` : `e.beforeHandle[${i}](c)
4807
4819
  `, endUnit();
4808
- else {
4809
- if (fnLiteral += isAsync(beforeHandle) ? `be=await e.beforeHandle[${i}](c)
4820
+ else {
4821
+ if (fnLiteral += isAsync(beforeHandle) ? `be=await e.beforeHandle[${i}](c)
4810
4822
  ` : `be=e.beforeHandle[${i}](c)
4811
- `, endUnit("be"), fnLiteral += "if(be!==undefined){", reporter.resolve(), hooks.afterHandle?.length) {
4812
- report("handle", {
4813
- name: isHandleFn ? handler.name : void 0
4814
- }).resolve();
4815
- let reporter2 = report("afterHandle", {
4816
- total: hooks.afterHandle.length
4817
- });
4818
- for (let i2 = 0; i2 < hooks.afterHandle.length; i2++) {
4819
- let hook = hooks.afterHandle[i2], returning2 = hasReturn(hook), endUnit2 = reporter2.resolveChild(hook.fn.name);
4820
- fnLiteral += `c.response = be
4823
+ `, endUnit("be"), fnLiteral += "if(be!==undefined){", reporter.resolve(), hooks.afterHandle?.length || hasTrace) {
4824
+ report("handle", {
4825
+ name: isHandleFn ? handler.name : void 0
4826
+ }).resolve();
4827
+ let reporter2 = report("afterHandle", {
4828
+ total: hooks.afterHandle?.length
4829
+ });
4830
+ if (hooks.afterHandle?.length)
4831
+ for (let i2 = 0; i2 < hooks.afterHandle.length; i2++) {
4832
+ let hook = hooks.afterHandle[i2], returning2 = hasReturn(hook), endUnit2 = reporter2.resolveChild(hook.fn.name);
4833
+ fnLiteral += `c.response = be
4821
4834
  `, returning2 ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i2}](c)
4822
4835
  ` : `af=e.afterHandle[${i2}](c)
4823
4836
  `, fnLiteral += `if(af!==undefined) c.response=be=af
4824
4837
  `) : fnLiteral += isAsync(hook.fn) ? `await e.afterHandle[${i2}](c, be)
4825
4838
  ` : `e.afterHandle[${i2}](c, be)
4826
4839
  `, endUnit2("af");
4840
+ }
4841
+ reporter2.resolve();
4827
4842
  }
4828
- reporter2.resolve();
4829
- }
4830
- validator.response && (fnLiteral += validation.response("be"));
4831
- let mapResponseReporter = report("mapResponse", {
4832
- total: hooks.mapResponse?.length
4833
- });
4834
- if (hooks.mapResponse?.length) {
4835
- fnLiteral += `c.response=be
4843
+ validator.response && (fnLiteral += validation.response("be"));
4844
+ let mapResponseReporter = report("mapResponse", {
4845
+ total: hooks.mapResponse?.length
4846
+ });
4847
+ if (hooks.mapResponse?.length) {
4848
+ fnLiteral += `c.response=be
4836
4849
  `;
4837
- for (let i2 = 0; i2 < hooks.mapResponse.length; i2++) {
4838
- let mapResponse4 = hooks.mapResponse[i2], endUnit2 = mapResponseReporter.resolveChild(
4839
- mapResponse4.fn.name
4840
- );
4841
- fnLiteral += `if(mr===undefined){mr=${isAsyncName(mapResponse4) ? "await " : ""}e.mapResponse[${i2}](c)
4850
+ for (let i2 = 0; i2 < hooks.mapResponse.length; i2++) {
4851
+ let mapResponse4 = hooks.mapResponse[i2], endUnit2 = mapResponseReporter.resolveChild(
4852
+ mapResponse4.fn.name
4853
+ );
4854
+ fnLiteral += `if(mr===undefined){mr=${isAsyncName(mapResponse4) ? "await " : ""}e.mapResponse[${i2}](c)
4842
4855
  if(mr!==undefined)be=c.response=mr}`, endUnit2();
4856
+ }
4843
4857
  }
4844
- }
4845
- mapResponseReporter.resolve(), fnLiteral += encodeCookie(), fnLiteral += `return mapEarlyResponse(${saveResponse}be,c.set${mapResponseContext})}
4858
+ mapResponseReporter.resolve(), fnLiteral += encodeCookie(), fnLiteral += `return mapEarlyResponse(${saveResponse}be,c.set${mapResponseContext})}
4846
4859
  `;
4860
+ }
4847
4861
  }
4848
- }
4849
4862
  reporter.resolve();
4850
4863
  }
4851
- if (hooks.afterHandle?.length) {
4864
+ if (hooks.afterHandle?.length || hasTrace) {
4852
4865
  let handleReporter = report("handle", {
4853
4866
  name: isHandleFn ? handler.name : void 0
4854
4867
  });
4855
- hooks.afterHandle.length ? fnLiteral += isAsyncHandler ? `let r=c.response=await ${handle}
4868
+ hooks.afterHandle?.length ? fnLiteral += isAsyncHandler ? `let r=c.response=await ${handle}
4856
4869
  ` : `let r=c.response=${handle}
4857
4870
  ` : fnLiteral += isAsyncHandler ? `let r=await ${handle}
4858
4871
  ` : `let r=${handle}
4859
4872
  `, handleReporter.resolve();
4860
4873
  let reporter = report("afterHandle", {
4861
- total: hooks.afterHandle.length
4874
+ total: hooks.afterHandle?.length
4862
4875
  });
4863
- for (let i = 0; i < hooks.afterHandle.length; i++) {
4864
- let hook = hooks.afterHandle[i], returning = hasReturn(hook), endUnit = reporter.resolveChild(hook.fn.name);
4865
- returning ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i}](c)
4876
+ if (hooks.afterHandle?.length)
4877
+ for (let i = 0; i < hooks.afterHandle.length; i++) {
4878
+ let hook = hooks.afterHandle[i], returning = hasReturn(hook), endUnit = reporter.resolveChild(hook.fn.name);
4879
+ returning ? (fnLiteral += isAsync(hook.fn) ? `af=await e.afterHandle[${i}](c)
4866
4880
  ` : `af=e.afterHandle[${i}](c)
4867
4881
  `, 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)
4868
4882
  ` : `e.afterHandle[${i}](c)
4869
4883
  `, endUnit());
4870
- }
4871
- reporter.resolve(), fnLiteral += `r=c.response
4872
- `, validator.response && (fnLiteral += validation.response()), fnLiteral += encodeCookie();
4884
+ }
4885
+ reporter.resolve(), hooks.afterHandle?.length && (fnLiteral += `r=c.response
4886
+ `), validator.response && (fnLiteral += validation.response()), fnLiteral += encodeCookie();
4873
4887
  let mapResponseReporter = report("mapResponse", {
4874
4888
  total: hooks.mapResponse?.length
4875
4889
  });
@@ -4887,7 +4901,7 @@ if(mr!==undefined)r=c.response=mr
4887
4901
  let handleReporter = report("handle", {
4888
4902
  name: isHandleFn ? handler.name : void 0
4889
4903
  });
4890
- if (validator.response || hooks.mapResponse?.length) {
4904
+ if (validator.response || hooks.mapResponse?.length || hasTrace) {
4891
4905
  fnLiteral += isAsyncHandler ? `let r=await ${handle}
4892
4906
  ` : `let r=${handle}
4893
4907
  `, handleReporter.resolve(), validator.response && (fnLiteral += validation.response());
@@ -5207,22 +5221,29 @@ map: switch(p){
5207
5221
  fnLiteral += word;
5208
5222
  }
5209
5223
  }), afterResponse = () => {
5210
- if (!hooks.afterResponse?.length) return "";
5211
- let afterResponse2 = "", prefix = hooks.afterResponse.some(isAsync) ? "async" : "";
5224
+ if (!hooks.afterResponse?.length && !hasTrace) return "";
5225
+ let afterResponse2 = "", prefix = hooks.afterResponse?.some(isAsync) ? "async" : "";
5212
5226
  afterResponse2 += `
5213
5227
  setImmediate(${prefix}()=>{`;
5214
- let reporter = report("afterResponse", {
5228
+ let reporter = createReport({
5229
+ context: "context",
5230
+ trace: hooks.trace,
5231
+ addFn: (word) => {
5232
+ afterResponse2 += word;
5233
+ }
5234
+ })("afterResponse", {
5215
5235
  total: hooks.afterResponse?.length,
5216
5236
  name: "context"
5217
5237
  });
5218
- for (let i = 0; i < hooks.afterResponse.length; i++) {
5219
- let fn = hooks.afterResponse[i].fn, endUnit = reporter.resolveChild(fn.name);
5220
- afterResponse2 += `
5238
+ if (hooks.afterResponse?.length && hooks.afterResponse)
5239
+ for (let i = 0; i < hooks.afterResponse.length; i++) {
5240
+ let fn = hooks.afterResponse[i].fn, endUnit = reporter.resolveChild(fn.name);
5241
+ afterResponse2 += `
5221
5242
  ${isAsyncName(fn) ? "await " : ""}afterResponse[${i}](context)
5222
5243
  `, endUnit();
5223
- }
5224
- return afterResponse2 += `})
5225
- `, reporter.resolve(), afterResponse2;
5244
+ }
5245
+ return reporter.resolve(), afterResponse2 += `})
5246
+ `, afterResponse2;
5226
5247
  };
5227
5248
  fnLiteral += `const set=context.set
5228
5249
  let _r
@@ -5230,7 +5251,7 @@ if(!context.code)context.code=error.code??error[ERROR_CODE]
5230
5251
  if(!(context.error instanceof Error))context.error=error
5231
5252
  if(error instanceof ElysiaCustomStatusResponse){set.status=error.status=error.code
5232
5253
  error.message=error.response}`, adapter.declare && (fnLiteral += adapter.declare);
5233
- let saveResponse = hasTrace || hooks.afterResponse?.length || hooks.afterResponse?.length ? "context.response = " : "";
5254
+ let saveResponse = hasTrace || hooks.afterResponse?.length ? "context.response = " : "";
5234
5255
  if (app.event.error)
5235
5256
  for (let i = 0; i < app.event.error.length; i++) {
5236
5257
  let handler = app.event.error[i], response = `${isAsync(handler) ? "await " : ""}onError[${i}](context)
@@ -5657,7 +5678,9 @@ for(const [k,v] of c.request.headers.entries())c.headers[k]=v
5657
5678
  ),
5658
5679
  websocket: {
5659
5680
  ...app.config.websocket || {},
5660
- ...websocket || {}
5681
+ ...websocket || {},
5682
+ // @ts-expect-error not available in this variant of options type
5683
+ ...options.websocket || {}
5661
5684
  },
5662
5685
  fetch: app.fetch
5663
5686
  } : {
@@ -5763,7 +5786,7 @@ for(const [k,v] of c.request.headers.entries())c.headers[k]=v
5763
5786
  ...(app.event.error ?? []).map(
5764
5787
  (x) => typeof x == "function" ? x : x.fn
5765
5788
  )
5766
- ].filter((x) => x), handleErrors = errorHandlers.length ? async (ws, error2) => {
5789
+ ].filter((x) => x), hasCustomErrorHandlers = errorHandlers.length > 0, handleErrors = hasCustomErrorHandlers ? async (ws, error2) => {
5767
5790
  for (let handleError of errorHandlers) {
5768
5791
  let response2 = handleError(
5769
5792
  Object.assign(context, { error: error2 })
@@ -5800,14 +5823,14 @@ for(const [k,v] of c.request.headers.entries())c.headers[k]=v
5800
5823
  },
5801
5824
  message: async (ws, _message) => {
5802
5825
  let message = await parseMessage(ws, _message);
5803
- if (validateMessage?.Check(message) === !1)
5804
- return void ws.send(
5805
- new ValidationError(
5806
- "message",
5807
- validateMessage,
5808
- message
5809
- ).message
5826
+ if (validateMessage?.Check(message) === !1) {
5827
+ let validationError = new ValidationError(
5828
+ "message",
5829
+ validateMessage,
5830
+ message
5810
5831
  );
5832
+ return hasCustomErrorHandlers ? handleErrors(ws, validationError) : void ws.send(validationError.message);
5833
+ }
5811
5834
  try {
5812
5835
  await handleResponse3(
5813
5836
  ws,
@@ -7345,7 +7368,7 @@ var _Elysia = class _Elysia {
7345
7368
  if (typeof plugin2 == "function") return plugin2(this);
7346
7369
  if (plugin2 instanceof _Elysia)
7347
7370
  return this._use(plugin2).compile();
7348
- if (plugin2.constructor.name === "Elysia")
7371
+ if (plugin2.constructor?.name === "Elysia")
7349
7372
  return this._use(
7350
7373
  plugin2
7351
7374
  ).compile();
@@ -7353,9 +7376,9 @@ var _Elysia = class _Elysia {
7353
7376
  return plugin2.default(this);
7354
7377
  if (plugin2.default instanceof _Elysia)
7355
7378
  return this._use(plugin2.default);
7356
- if (plugin2.constructor.name === "Elysia")
7379
+ if (plugin2.constructor?.name === "Elysia")
7357
7380
  return this._use(plugin2.default);
7358
- if (plugin2.constructor.name === "_Elysia")
7381
+ if (plugin2.constructor?.name === "_Elysia")
7359
7382
  return this._use(plugin2.default);
7360
7383
  try {
7361
7384
  return this._use(plugin2.default);