elysia 1.3.20 → 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/cjs/index.js CHANGED
@@ -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);
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)