elysia 2.0.0-beta.11 → 2.0.0-beta.13

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.
Files changed (99) hide show
  1. package/dist/adapter/bun/index.js +36 -21
  2. package/dist/adapter/bun/index.mjs +36 -21
  3. package/dist/adapter/utils.js +1 -0
  4. package/dist/adapter/utils.mjs +1 -0
  5. package/dist/adapter/web-standard/handler.js +8 -2
  6. package/dist/adapter/web-standard/handler.mjs +8 -2
  7. package/dist/base.d.ts +5 -0
  8. package/dist/base.js +109 -4
  9. package/dist/base.mjs +111 -6
  10. package/dist/compile/aot-capture.d.ts +2 -13
  11. package/dist/compile/aot-capture.js +5 -27
  12. package/dist/compile/aot-capture.mjs +6 -24
  13. package/dist/compile/aot-emit.js +1 -1
  14. package/dist/compile/aot-emit.mjs +1 -1
  15. package/dist/compile/aot.d.ts +1 -1
  16. package/dist/compile/aot.js +2 -2
  17. package/dist/compile/aot.mjs +2 -2
  18. package/dist/compile/handler/descriptor.d.ts +4 -8
  19. package/dist/compile/handler/descriptor.js +8 -21
  20. package/dist/compile/handler/descriptor.mjs +9 -21
  21. package/dist/compile/handler/index.d.ts +4 -3
  22. package/dist/compile/handler/index.js +16 -6
  23. package/dist/compile/handler/index.mjs +16 -7
  24. package/dist/compile/handler/jit.js +82 -76
  25. package/dist/compile/handler/jit.mjs +83 -77
  26. package/dist/compile/handler/params.d.ts +1 -4
  27. package/dist/compile/handler/params.js +3 -4
  28. package/dist/compile/handler/params.mjs +5 -5
  29. package/dist/compile/handler/reconstruct.d.ts +1 -1
  30. package/dist/compile/handler/static-clone-resolver.d.ts +6 -0
  31. package/dist/compile/handler/static-clone-resolver.js +8 -0
  32. package/dist/compile/handler/static-clone-resolver.mjs +7 -0
  33. package/dist/compile/handler/utils.d.ts +7 -7
  34. package/dist/compile/handler/utils.js +24 -20
  35. package/dist/compile/handler/utils.mjs +24 -20
  36. package/dist/compile/utils.js +7 -4
  37. package/dist/compile/utils.mjs +7 -4
  38. package/dist/context.js +3 -21
  39. package/dist/context.mjs +4 -22
  40. package/dist/cookie/index.d.ts +1 -2
  41. package/dist/cookie/index.js +0 -2
  42. package/dist/cookie/index.mjs +1 -2
  43. package/dist/cookie/lib.js +2 -1
  44. package/dist/cookie/lib.mjs +2 -1
  45. package/dist/cookie/utils.d.ts +3 -7
  46. package/dist/cookie/utils.js +9 -28
  47. package/dist/cookie/utils.mjs +11 -29
  48. package/dist/error.d.ts +40 -83
  49. package/dist/error.js +18 -19
  50. package/dist/error.mjs +18 -20
  51. package/dist/handler/error.js +4 -5
  52. package/dist/handler/error.mjs +4 -5
  53. package/dist/handler/fetch.js +31 -17
  54. package/dist/handler/fetch.mjs +32 -18
  55. package/dist/handler/utils.d.ts +3 -3
  56. package/dist/handler/utils.js +28 -17
  57. package/dist/handler/utils.mjs +28 -17
  58. package/dist/index.d.ts +3 -3
  59. package/dist/package.js +1 -1
  60. package/dist/package.mjs +1 -1
  61. package/dist/plugin/aot/core.d.ts +3 -7
  62. package/dist/plugin/aot/core.js +8 -18
  63. package/dist/plugin/aot/core.mjs +9 -17
  64. package/dist/plugin/aot/hooks.js +5 -1
  65. package/dist/plugin/aot/hooks.mjs +5 -1
  66. package/dist/trace.js +23 -10
  67. package/dist/trace.mjs +23 -10
  68. package/dist/type/bridge-live.d.ts +3 -2
  69. package/dist/type/bridge-live.js +4 -2
  70. package/dist/type/bridge-live.mjs +3 -2
  71. package/dist/type/bridge.d.ts +6 -4
  72. package/dist/type/bridge.js +9 -1
  73. package/dist/type/bridge.mjs +3 -1
  74. package/dist/type/coerce-plan.d.ts +2 -2
  75. package/dist/type/coerce-plan.js +0 -1
  76. package/dist/type/coerce-plan.mjs +2 -2
  77. package/dist/type/compat.js +2 -1
  78. package/dist/type/compat.mjs +3 -2
  79. package/dist/type/constants.d.ts +1 -1
  80. package/dist/type/shared.d.ts +1 -3
  81. package/dist/type/shared.js +0 -3
  82. package/dist/type/shared.mjs +1 -3
  83. package/dist/type/typebox-value-live.d.ts +4 -3
  84. package/dist/type/typebox-value-live.js +5 -3
  85. package/dist/type/typebox-value-live.mjs +4 -3
  86. package/dist/type/typebox-value.d.ts +11 -7
  87. package/dist/type/typebox-value.js +2 -1
  88. package/dist/type/typebox-value.mjs +1 -1
  89. package/dist/type/validator/index.d.ts +1 -1
  90. package/dist/type/validator/validator-cache.d.ts +1 -1
  91. package/dist/types.d.ts +10 -17
  92. package/dist/universal/file.d.ts +1 -3
  93. package/dist/universal/file.js +0 -2
  94. package/dist/universal/file.mjs +1 -2
  95. package/dist/universal/is-production.d.ts +1 -2
  96. package/dist/universal/is-production.js +1 -3
  97. package/dist/universal/is-production.mjs +2 -3
  98. package/dist/utils.d.ts +0 -1
  99. package/package.json +13 -6
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_universal_constants = require('../../universal/constants.js');
3
3
  const require_universal_file = require('../../universal/file.js');
4
4
  const require_utils = require('../../utils.js');
5
+ const require_adapter_web_standard_handler = require('../../adapter/web-standard/handler.js');
5
6
  const require_compile_aot = require('../aot.js');
6
7
  const require_generation = require('../../generation.js');
7
8
  const require_compile_handler_params = require('./params.js');
@@ -224,13 +225,16 @@ function buildNativeStaticResponse(route, root) {
224
225
  if (hook && !require_compile_handler_descriptor.isEmptyPipelineHook(hook)) return;
225
226
  const rootHeaders = frozenRoot["~ext"]?.headers;
226
227
  if (handler instanceof Response && !rootHeaders) return handler;
227
- const mapped = adapter.response.map(handler, { headers: rootHeaders ? Object.assign(require_utils.nullObject(), rootHeaders) : require_utils.nullObject() });
228
+ const response = adapter.response;
229
+ const map = response.map;
230
+ const set = { headers: rootHeaders ? Object.assign(require_utils.nullObject(), rootHeaders) : require_utils.nullObject() };
231
+ const mapped = map === require_adapter_web_standard_handler.mapResponse ? require_adapter_web_standard_handler.mapResponse(handler, set, null) : Reflect.apply(map, response, [handler, set]);
228
232
  if (mapped instanceof Response) return staticPrimitiveType(mapped, handler);
229
233
  }
230
234
  function toArray(name, hook) {
231
235
  if (typeof hook[name] === "function") hook[name] = [hook[name]];
232
236
  }
233
- function composeRouteHook(instance, localHook, appHook, inheritedChain, root, macroScope) {
237
+ function composeRouteHook(instance, localHook, appHook, inheritedChain, root, macroScope, allowCompactPrefix = true) {
234
238
  const resolve = chainResolver(root);
235
239
  localHook = resolveLocalHook(localMacroRoot(macroScope ?? instance, root), localHook, root);
236
240
  if (localHook && localHook.derive !== void 0) {
@@ -240,7 +244,7 @@ function composeRouteHook(instance, localHook, appHook, inheritedChain, root, ma
240
244
  const flatAppHook = appHook ? require_utils.flattenChainMemo(root, appHook, resolve) : void 0;
241
245
  let locals = instance !== root ? require_utils.flattenChain(require_generation.frozenRootOf(root)["~hookChain"], require_utils.isLocalScope, inheritedChain, resolve) : void 0;
242
246
  const instanceLocal = instance !== root ? require_utils.flattenChain(instance["~hookChain"], require_utils.isLocalScope) : void 0;
243
- const compactPrefix = instance !== root && !require_compile_aot.Capture.isCapturing() && !require_compile_aot.Capture.isAotBuildEnv() && resolve === void 0 && require_utils.isCompactBeforeHandleOnly(localHook) && require_utils.isCompactBeforeHandleOnly(flatAppHook) && require_utils.isCompactBeforeHandleOnly(locals) && !instanceLocal?.error ? require_utils.compactBeforeHandlePrefix(inheritedChain) : void 0;
247
+ const compactPrefix = allowCompactPrefix && instance !== root && !require_compile_aot.Capture.isCapturing() && !require_compile_aot.Capture.isAotBuildEnv() && resolve === void 0 && require_utils.isCompactBeforeHandleOnly(localHook) && require_utils.isCompactBeforeHandleOnly(flatAppHook) && require_utils.isCompactBeforeHandleOnly(locals) && !instanceLocal?.error ? require_utils.compactBeforeHandlePrefix(inheritedChain) : void 0;
244
248
  let present = collectHookOrigins(localHook, void 0);
245
249
  present = collectHookOrigins(flatAppHook, present);
246
250
  if (compactPrefix && !present?.size && !require_utils.compactBeforeHandleConflicts(localHook) && !require_utils.compactBeforeHandleConflicts(flatAppHook) && !require_utils.compactBeforeHandleConflicts(locals)) {
@@ -296,7 +300,7 @@ function compileHandler(route, root, precomputedStatic, liveOnly = false) {
296
300
  cookieConfig: void 0,
297
301
  tracers: void 0
298
302
  }));
299
- const hook = composeRouteHook(instance, localHook, appHook, inheritedChain, root, macroScope);
303
+ const hook = composeRouteHook(instance, localHook, appHook, inheritedChain, root, macroScope, !reconstructed);
300
304
  if (hook) {
301
305
  promoteDerive(hook);
302
306
  toArray("parse", hook);
@@ -320,7 +324,9 @@ function compileHandler(route, root, precomputedStatic, liveOnly = false) {
320
324
  else if (!isHandleFunction && !(handler instanceof Promise) && !(!require_universal_constants.isBun && handler instanceof require_universal_file.ElysiaFile) && !declaresResponse) {
321
325
  const rootHeaders = frozenRoot["~ext"]?.headers;
322
326
  const set = { headers: rootHeaders ? Object.assign(require_utils.nullObject(), rootHeaders) : require_utils.nullObject() };
323
- const mapped = adapter.response.map(handler, set);
327
+ const response = adapter.response;
328
+ const map = response.map;
329
+ const mapped = map === require_adapter_web_standard_handler.mapResponse ? require_adapter_web_standard_handler.mapResponse(handler, set, null) : Reflect.apply(map, response, [handler, set]);
324
330
  if (mapped instanceof Response) handler = staticPrimitiveType(mapped, handler);
325
331
  }
326
332
  const isStaticResponse = !isHandleFunction && handler instanceof Response;
@@ -339,7 +345,10 @@ function compileHandler(route, root, precomputedStatic, liveOnly = false) {
339
345
  cookieConfig: reconstructed.a.includes("cc") ? require_compile_handler_reconstruct.Reconstrct.cookie(hook, root) : void 0,
340
346
  tracers: reconstructed.a.includes("tr") ? require_compile_handler_reconstruct.Reconstrct.trace(hook, root) : void 0
341
347
  }));
342
- if (hook === void 0 && isHandleFunction && !precomputedStatic && !mountMeta && (method === "GET" || method === "HEAD") && !root["~hasTrace"] && root["~introspect"] !== true && root["~config"]?.introspect !== true && !require_utils.isNotEmpty(frozenRoot["~ext"]?.headers) && !require_compile_aot.Capture.isAotBuildEnv() && !require_compile_aot.Capture.isCapturing() && isContextFreeHandler(handler)) return require_compile_handler_jit.createInlineHandler(adapter.response.compact ?? adapter.response.map, handler);
348
+ if (hook === void 0 && isHandleFunction && !precomputedStatic && !mountMeta && (method === "GET" || method === "HEAD") && !root["~hasTrace"] && root["~introspect"] !== true && root["~config"]?.introspect !== true && !require_utils.isNotEmpty(frozenRoot["~ext"]?.headers) && !require_compile_aot.Capture.isAotBuildEnv() && !require_compile_aot.Capture.isCapturing() && isContextFreeHandler(handler)) {
349
+ const compact = adapter.response.compact;
350
+ if (compact) return require_compile_handler_jit.createInlineHandler(compact, handler);
351
+ }
343
352
  const state = require_compile_handler_descriptor.describeRoute({
344
353
  method,
345
354
  path,
@@ -378,6 +387,7 @@ function compileHandler(route, root, precomputedStatic, liveOnly = false) {
378
387
 
379
388
  //#endregion
380
389
  exports.buildNativeStaticResponse = buildNativeStaticResponse;
390
+ exports.chainResolver = chainResolver;
381
391
  exports.clearHandlerAnalysisCaches = clearHandlerAnalysisCaches;
382
392
  exports.compileHandler = compileHandler;
383
393
  exports.composeRouteHook = composeRouteHook;
@@ -1,6 +1,7 @@
1
1
  import { isBun } from "../../universal/constants.mjs";
2
2
  import { ElysiaFile } from "../../universal/file.mjs";
3
3
  import { cloneHook, compactBeforeHandleConflicts, compactBeforeHandlePrefix, eventProperties, flattenChain, flattenChainMemo, flattenChainMemoReadonly, fnOrigin, isCompactBeforeHandleOnly, isLocalScope, isNotEmpty, macroEpoch, mergeHook, nullObject, replaceUrlPath } from "../../utils.mjs";
4
+ import { mapResponse } from "../../adapter/web-standard/handler.mjs";
4
5
  import { Capture, Compiled } from "../aot.mjs";
5
6
  import { frozenRootOf } from "../../generation.mjs";
6
7
  import { resolveHandlerParams } from "./params.mjs";
@@ -223,13 +224,16 @@ function buildNativeStaticResponse(route, root) {
223
224
  if (hook && !isEmptyPipelineHook(hook)) return;
224
225
  const rootHeaders = frozenRoot["~ext"]?.headers;
225
226
  if (handler instanceof Response && !rootHeaders) return handler;
226
- const mapped = adapter.response.map(handler, { headers: rootHeaders ? Object.assign(nullObject(), rootHeaders) : nullObject() });
227
+ const response = adapter.response;
228
+ const map = response.map;
229
+ const set = { headers: rootHeaders ? Object.assign(nullObject(), rootHeaders) : nullObject() };
230
+ const mapped = map === mapResponse ? mapResponse(handler, set, null) : Reflect.apply(map, response, [handler, set]);
227
231
  if (mapped instanceof Response) return staticPrimitiveType(mapped, handler);
228
232
  }
229
233
  function toArray(name, hook) {
230
234
  if (typeof hook[name] === "function") hook[name] = [hook[name]];
231
235
  }
232
- function composeRouteHook(instance, localHook, appHook, inheritedChain, root, macroScope) {
236
+ function composeRouteHook(instance, localHook, appHook, inheritedChain, root, macroScope, allowCompactPrefix = true) {
233
237
  const resolve = chainResolver(root);
234
238
  localHook = resolveLocalHook(localMacroRoot(macroScope ?? instance, root), localHook, root);
235
239
  if (localHook && localHook.derive !== void 0) {
@@ -239,7 +243,7 @@ function composeRouteHook(instance, localHook, appHook, inheritedChain, root, ma
239
243
  const flatAppHook = appHook ? flattenChainMemo(root, appHook, resolve) : void 0;
240
244
  let locals = instance !== root ? flattenChain(frozenRootOf(root)["~hookChain"], isLocalScope, inheritedChain, resolve) : void 0;
241
245
  const instanceLocal = instance !== root ? flattenChain(instance["~hookChain"], isLocalScope) : void 0;
242
- const compactPrefix = instance !== root && !Capture.isCapturing() && !Capture.isAotBuildEnv() && resolve === void 0 && isCompactBeforeHandleOnly(localHook) && isCompactBeforeHandleOnly(flatAppHook) && isCompactBeforeHandleOnly(locals) && !instanceLocal?.error ? compactBeforeHandlePrefix(inheritedChain) : void 0;
246
+ const compactPrefix = allowCompactPrefix && instance !== root && !Capture.isCapturing() && !Capture.isAotBuildEnv() && resolve === void 0 && isCompactBeforeHandleOnly(localHook) && isCompactBeforeHandleOnly(flatAppHook) && isCompactBeforeHandleOnly(locals) && !instanceLocal?.error ? compactBeforeHandlePrefix(inheritedChain) : void 0;
243
247
  let present = collectHookOrigins(localHook, void 0);
244
248
  present = collectHookOrigins(flatAppHook, present);
245
249
  if (compactPrefix && !present?.size && !compactBeforeHandleConflicts(localHook) && !compactBeforeHandleConflicts(flatAppHook) && !compactBeforeHandleConflicts(locals)) {
@@ -295,7 +299,7 @@ function compileHandler(route, root, precomputedStatic, liveOnly = false) {
295
299
  cookieConfig: void 0,
296
300
  tracers: void 0
297
301
  }));
298
- const hook = composeRouteHook(instance, localHook, appHook, inheritedChain, root, macroScope);
302
+ const hook = composeRouteHook(instance, localHook, appHook, inheritedChain, root, macroScope, !reconstructed);
299
303
  if (hook) {
300
304
  promoteDerive(hook);
301
305
  toArray("parse", hook);
@@ -319,7 +323,9 @@ function compileHandler(route, root, precomputedStatic, liveOnly = false) {
319
323
  else if (!isHandleFunction && !(handler instanceof Promise) && !(!isBun && handler instanceof ElysiaFile) && !declaresResponse) {
320
324
  const rootHeaders = frozenRoot["~ext"]?.headers;
321
325
  const set = { headers: rootHeaders ? Object.assign(nullObject(), rootHeaders) : nullObject() };
322
- const mapped = adapter.response.map(handler, set);
326
+ const response = adapter.response;
327
+ const map = response.map;
328
+ const mapped = map === mapResponse ? mapResponse(handler, set, null) : Reflect.apply(map, response, [handler, set]);
323
329
  if (mapped instanceof Response) handler = staticPrimitiveType(mapped, handler);
324
330
  }
325
331
  const isStaticResponse = !isHandleFunction && handler instanceof Response;
@@ -338,7 +344,10 @@ function compileHandler(route, root, precomputedStatic, liveOnly = false) {
338
344
  cookieConfig: reconstructed.a.includes("cc") ? Reconstrct.cookie(hook, root) : void 0,
339
345
  tracers: reconstructed.a.includes("tr") ? Reconstrct.trace(hook, root) : void 0
340
346
  }));
341
- if (hook === void 0 && isHandleFunction && !precomputedStatic && !mountMeta && (method === "GET" || method === "HEAD") && !root["~hasTrace"] && root["~introspect"] !== true && root["~config"]?.introspect !== true && !isNotEmpty(frozenRoot["~ext"]?.headers) && !Capture.isAotBuildEnv() && !Capture.isCapturing() && isContextFreeHandler(handler)) return createInlineHandler(adapter.response.compact ?? adapter.response.map, handler);
347
+ if (hook === void 0 && isHandleFunction && !precomputedStatic && !mountMeta && (method === "GET" || method === "HEAD") && !root["~hasTrace"] && root["~introspect"] !== true && root["~config"]?.introspect !== true && !isNotEmpty(frozenRoot["~ext"]?.headers) && !Capture.isAotBuildEnv() && !Capture.isCapturing() && isContextFreeHandler(handler)) {
348
+ const compact = adapter.response.compact;
349
+ if (compact) return createInlineHandler(compact, handler);
350
+ }
342
351
  const state = describeRoute({
343
352
  method,
344
353
  path,
@@ -376,4 +385,4 @@ function compileHandler(route, root, precomputedStatic, liveOnly = false) {
376
385
  }
377
386
 
378
387
  //#endregion
379
- export { buildNativeStaticResponse, clearHandlerAnalysisCaches, compileHandler, composeRouteHook, localMacroRoot, resolveLocalHook, resolveWSLocalHook, setCaptureHeaderShorthand };
388
+ export { buildNativeStaticResponse, chainResolver, clearHandlerAnalysisCaches, compileHandler, composeRouteHook, localMacroRoot, resolveLocalHook, resolveWSLocalHook, setCaptureHeaderShorthand };
@@ -10,45 +10,44 @@ const require_parse_query = require('../../parse-query.js');
10
10
  const require_compile_aot = require('../aot.js');
11
11
  const require_generation = require('../../generation.js');
12
12
  const require_cookie_utils = require('../../cookie/utils.js');
13
- const require_compile_utils = require('../utils.js');
14
13
  const require_handler_utils = require('../../handler/utils.js');
15
14
  const require_handler_error = require('../../handler/error.js');
16
15
  const require_compile_handler_utils = require('./utils.js');
17
16
  const require_compile_jit_probe = require('../jit-probe.js');
18
17
 
19
18
  //#region src/compile/handler/jit.ts
20
- const parseFormData = "c.body=await pf(c)\n";
19
+ const awaitValue = (value, arm = "") => arm ? `await (_av=(${value}),${arm},_av)` : `await ${value}`;
21
20
  let captureHeaderShorthand;
22
21
  const setCaptureHeaderShorthand = (value) => {
23
22
  captureHeaderShorthand = value;
24
23
  };
25
- function builtinParser(adapter, parse, link) {
24
+ function builtinParser(adapter, parse, link, arm) {
26
25
  switch (parse) {
27
26
  case "formdata":
28
27
  case "multipart/form-data":
29
28
  link(adapter.formData, "pf");
30
- return parseFormData;
29
+ return `c.body=${awaitValue("pf(c)", arm)}\n`;
31
30
  case "json":
32
31
  case "application/json":
33
32
  link(adapter.json, "pj");
34
- return "c.body=await pj(c)\n";
33
+ return `c.body=${awaitValue("pj(c)", arm)}\n`;
35
34
  case "urlencoded":
36
35
  case "application/x-www-form-urlencoded":
37
36
  link(adapter.urlencoded, "pu");
38
- return "c.body=await pu(c)\n";
37
+ return `c.body=${awaitValue("pu(c)", arm)}\n`;
39
38
  case "arrayBuffer":
40
39
  case "application/octet-stream":
41
40
  link(adapter.arrayBuffer, "pa");
42
- return "c.body=await pa(c)\n";
41
+ return `c.body=${awaitValue("pa(c)", arm)}\n`;
43
42
  case "text":
44
43
  case "text/plain":
45
44
  link(adapter.text, "pt");
46
- return "c.body=await pt(c)\n";
45
+ return `c.body=${awaitValue("pt(c)", arm)}\n`;
47
46
  case "none": return "";
48
47
  default: throw new Error(`Unsupported content type: ${parse}`);
49
48
  }
50
49
  }
51
- function parse(adapter, parsers, bodyVali, hasHeaders, link, report) {
50
+ function parse(adapter, parsers, bodyVali, hasHeaders, link, report, arm) {
52
51
  if (parsers && typeof parsers === "function") parsers = [parsers];
53
52
  if (typeof parsers === "string" || parsers?.length === 1 && typeof parsers[0] === "string") {
54
53
  if (parsers.length === 1) parsers = parsers[0];
@@ -56,7 +55,7 @@ function parse(adapter, parsers, bodyVali, hasHeaders, link, report) {
56
55
  const child = report?.resolveChild(builtinName);
57
56
  const begin = child ? child.begin : "";
58
57
  const end = child ? child.end() : "";
59
- return begin + builtinParser(adapter, parsers, link) + end;
58
+ return begin + builtinParser(adapter, parsers, link, arm) + end;
60
59
  }
61
60
  let hasFn = false;
62
61
  let hasType = false;
@@ -77,7 +76,7 @@ if(cti!==-1)ct=ct.slice(0,cti)
77
76
  const child = report?.resolveChild(parser.name || "anonymous");
78
77
  if (i) code += "if(!hasBody){";
79
78
  if (child) code += child.begin;
80
- code += require_compile_utils.isAsyncFunction(parser) ? `c.body=await ho.parse[${i}](c,ct)\n` : `_bp=ho.parse[${i}](c,ct)\nif(_bp instanceof Promise)_bp=await _bp\nc.body=_bp\n`;
79
+ code += `_bp=ho.parse[${i}](c,ct)\n` + require_compile_handler_utils.awaitGuard(parser, true, "_bp", arm) + `c.body=_bp\n`;
81
80
  code += "hasBody=c.body!==undefined\n";
82
81
  if (child) code += child.end();
83
82
  if (i) code += "}\n";
@@ -86,7 +85,7 @@ if(cti!==-1)ct=ct.slice(0,cti)
86
85
  const child = report?.resolveChild(parser);
87
86
  if (i) code += "if(!hasBody){\n";
88
87
  if (child) code += child.begin;
89
- code += builtinParser(adapter, parser, link);
88
+ code += builtinParser(adapter, parser, link, arm);
90
89
  if (child) code += child.end();
91
90
  if (i) code += "}\n";
92
91
  break;
@@ -104,7 +103,8 @@ if(cti!==-1)ct=ct.slice(0,cti)
104
103
  code += `if(ct&&!(${mediaGuard}))throw new es(415,'Unsupported Media Type')\n`;
105
104
  link(require_error.ElysiaStatus, "es");
106
105
  }
107
- code += hasFn ? `if(!hasBody&&${guard}){${begin}c.body=cj?await pj(c):await pd(c,ce,true)\n${end}}\n` : `if(${guard}){${begin}c.body=cj?await pj(c):await pd(c,ce,true)\n${end}}\n`;
106
+ const value = `c.body=cj?${awaitValue("pj(c)", arm)}:${awaitValue("pd(c,ce,true)", arm)}\n`;
107
+ code += hasFn ? `if(!hasBody&&${guard}){${begin}${value}${end}}\n` : `if(${guard}){${begin}${value}${end}}\n`;
108
108
  if (!bodyVali) link(require_compile_handler_utils.hasRequestBody, "hb");
109
109
  link(adapter.json, "pj");
110
110
  link(adapter.default, "pd");
@@ -141,24 +141,24 @@ const fromArgs = (type, isAsync) => `'${type}'${isAsync ? ",true" : ""}`;
141
141
  const createInlineHandler = (map, h) => ((c) => {
142
142
  const r = h(c);
143
143
  if (r instanceof Error) throw r;
144
- if (r instanceof Promise) return r.then((v) => map(require_handler_utils.forwardError(v), c.request, true));
144
+ if (typeof r?.then === "function") return Promise.resolve(r).then((v) => map(require_handler_utils.forwardError(v), c.request, true));
145
145
  return map(r, c.request, true);
146
146
  });
147
147
  const createInlineHandlerWithSet = (map, h) => ((c) => {
148
148
  const r = h(c);
149
149
  if (r instanceof Error) throw r;
150
- if (r instanceof Promise) return r.then((v) => map(require_handler_utils.forwardError(v), c.set, c.request, true));
150
+ if (typeof r?.then === "function") return Promise.resolve(r).then((v) => map(require_handler_utils.forwardError(v), c.set, c.request, true));
151
151
  return map(r, c.set, c.request, true);
152
152
  });
153
153
  const createInlineHandlerWithDefaultHeaders = (map, h) => ((c) => {
154
154
  require_adapter_utils.materializeSetHeaders(c.set);
155
155
  const r = h(c);
156
156
  if (r instanceof Error) throw r;
157
- if (r instanceof Promise) return r.then((v) => map(require_handler_utils.forwardError(v), c.set, c.request, true));
157
+ if (typeof r?.then === "function") return Promise.resolve(r).then((v) => map(require_handler_utils.forwardError(v), c.set, c.request, true));
158
158
  return map(r, c.set, c.request, true);
159
159
  });
160
160
  function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapter, isHandleFunction, isStaticResponse, isPromiseHandler, state }) {
161
- const { vali, inference, cookieConfig, beforeHandlePrefix, traceHandlers, tracePhases, hasAnyPhase, traceHandleOn, descriptor: { async: isAsync, responseMode, hasBody, bodyValiIsAsync, headersValiIsAsync, paramsValiIsAsync, queryValiIsAsync, cookieValiIsAsync: cookieValidIsAsync, responseValiAsync, hasCookieSign, syncCookieSign, asyncCookieSign, lazyCookieVerify, hasErrorHook, hasAfterResponse, hasBeforeHandle, hasAfterHandle, hasMapResponse, hasResponseValidator, hasTrace, traceCount, hasLifecycleHook, callHandlerSyncOnAsync, syncErrorHook, syncAfterResponse } } = state;
161
+ const { vali, inference, cookieConfig, beforeHandlePrefix, traceHandlers, tracePhases, hasAnyPhase, traceHandleOn, descriptor: { async: isAsync, responseMode, hasBody, bodyValiIsAsync, headersValiIsAsync, paramsValiIsAsync, queryValiIsAsync, cookieValiIsAsync: cookieValidIsAsync, responseValiAsync, hasCookieSign, syncCookieSign, asyncCookieSign, lazyCookieVerify, hasErrorHook, hasAfterResponse, hasBeforeHandle, hasAfterHandle, hasMapResponse, hasResponseValidator, hasTrace, traceCount, hasLifecycleHook, syncErrorHook, syncAfterResponse } } = state;
162
162
  const hasStaticAfterResponse = !!hook?.afterResponse?.length;
163
163
  const hasDynamicAfterResponse = !!inference.afterResponse;
164
164
  const seenKeys = new Set(["rt", "fre"]);
@@ -181,15 +181,10 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
181
181
  }
182
182
  const abortOn = hasLifecycleHook && root["~config"]?.abortSignal !== false;
183
183
  const abortPeek = "c['~sig']?.aborted";
184
- const abortArm = "(_as??=(c['~sig']??=c.request.signal)).aborted";
185
- let suspended = false;
186
- const abortExpression = () => {
187
- if (!suspended && code.includes("await ")) suspended = true;
188
- return suspended ? abortArm : abortPeek;
189
- };
190
- const abortCheck = () => abortOn ? `if(${abortExpression()})return emp.clone()\n` : "";
191
- const abortChainGuard = () => abortOn ? isAsync ? abortArm : abortExpression() : void 0;
192
- const abortCatch = abortOn ? `if(${abortArm})return emp.clone()\n` : "";
184
+ const arm = abortOn ? "_as??=(c['~sig']??=c.request.signal)" : "";
185
+ const abortCheck = () => abortOn ? `if(${abortPeek})return emp.clone()\n` : "";
186
+ const abortChainGuard = () => abortOn ? abortPeek : void 0;
187
+ const abortCatch = abortOn ? `if((${arm}).aborted)return emp.clone()\n` : "";
193
188
  const phaseOn = (phase) => hasTrace && (tracePhases === null || tracePhases.has(phase));
194
189
  const beginTrace = (phase, total, name = phase) => {
195
190
  if (!phaseOn(phase)) return "";
@@ -222,7 +217,7 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
222
217
  };
223
218
  const needsStaticClone = !isHandleFunction && !isStaticResponse && !isPromiseHandler && (hasAfterHandle || hasMapResponse) && typeof handler === "object" && handler !== null;
224
219
  if (needsStaticClone) link(require_compile_handler_utils.cloneStaticValue, "scl");
225
- const callHandler = isHandleFunction ? callHandlerSyncOnAsync ? `_r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `_r=${isAsync ? "await " : ""}h(c)\n` : isStaticResponse ? `_r=cr(h)\n` : isPromiseHandler ? `_r=h.then(cr)\n` : needsStaticClone ? `_r=scl(h)\n` : `_r=h\n`;
220
+ const callHandler = isHandleFunction ? `_r=h(c)\n${require_compile_handler_utils.awaitGuard(handler, isAsync, "_r", arm)}` : isStaticResponse ? `_r=cr(h)\n` : isPromiseHandler ? `_r=h.then(cr)\n` : needsStaticClone ? `_r=scl(h)\n` : `_r=h\n`;
226
221
  let code = `${isAsync ? "async " : ""}function route(c){\n`;
227
222
  if (abortOn) {
228
223
  link(require_handler_utils.emptyResponse, "emp");
@@ -279,7 +274,7 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
279
274
  if (hasBody) {
280
275
  const parseLen = Array.isArray(hook?.parse) ? hook.parse.length : 0;
281
276
  if (hasTrace) code += beginTrace("parse", parseLen);
282
- const parseCode = parse(adapter.parse, hook?.parse, vali?.body, hasHeaders, link, buildReport("parse"));
277
+ const parseCode = parse(adapter.parse, hook?.parse, vali?.body, hasHeaders, link, buildReport("parse"), arm);
283
278
  const preserveParseStatus = seenKeys.has("es");
284
279
  link(require_error.ParseError, "pe");
285
280
  code += "try{\n" + parseCode + `}catch(e){${preserveParseStatus ? "if(e instanceof es)throw e\n" : ""}throw new pe(e)}\n`;
@@ -292,26 +287,34 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
292
287
  if (transformLen) {
293
288
  link(hook.transform, "tf");
294
289
  if (isAsync) code += "let _tf\n";
295
- code += require_compile_handler_utils.mapTransform(hook.transform, [isAsync, buildReport("transform")], abortChainGuard());
290
+ code += require_compile_handler_utils.mapTransform(hook.transform, [
291
+ isAsync,
292
+ buildReport("transform"),
293
+ arm
294
+ ], abortChainGuard());
296
295
  }
297
296
  code += endTrace("transform");
298
297
  if (transformLen) code += abortCheck();
299
298
  }
300
299
  if (vali?.body) {
301
300
  link(vali, "va");
302
- code += `c.body=${bodyValiIsAsync ? "await " : ""}va.body.From(c.body,${fromArgs("body", bodyValiIsAsync)})\n`;
301
+ const value = `va.body.From(c.body,${fromArgs("body", bodyValiIsAsync)})`;
302
+ code += `c.body=${bodyValiIsAsync ? awaitValue(value, arm) : value}\n`;
303
303
  }
304
304
  if (vali?.headers) {
305
305
  link(vali, "va");
306
- code += `c.headers=${headersValiIsAsync ? "await " : ""}va.headers.From(c.headers,${fromArgs("headers", !!headersValiIsAsync)})\n`;
306
+ const value = `va.headers.From(c.headers,${fromArgs("headers", !!headersValiIsAsync)})`;
307
+ code += `c.headers=${headersValiIsAsync ? awaitValue(value, arm) : value}\n`;
307
308
  }
308
309
  if (vali?.params) {
309
310
  link(vali, "va");
310
- code += `c.params=${paramsValiIsAsync ? "await " : ""}va.params.From(c.params,${fromArgs("params", !!paramsValiIsAsync)})\n`;
311
+ const value = `va.params.From(c.params,${fromArgs("params", !!paramsValiIsAsync)})`;
312
+ code += `c.params=${paramsValiIsAsync ? awaitValue(value, arm) : value}\n`;
311
313
  }
312
314
  if (vali?.query) {
313
315
  link(vali, "va");
314
- code += `c.query=${queryValiIsAsync ? "await " : ""}va.query.From(c.query,${fromArgs("query", !!queryValiIsAsync)})\n`;
316
+ const value = `va.query.From(c.query,${fromArgs("query", !!queryValiIsAsync)})`;
317
+ code += `c.query=${queryValiIsAsync ? awaitValue(value, arm) : value}\n`;
315
318
  }
316
319
  if (cookieConfig) {
317
320
  link(require_cookie_utils.buildCookieJar, "bcj");
@@ -336,25 +339,30 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
336
339
  code += `let _ck=pcrsg(${cookieHeaderExpr},cc)\n`;
337
340
  } else {
338
341
  link(require_cookie_utils.parseCookieRaw, "pcr");
339
- code += `let _ck=await pcr(${cookieHeaderExpr},cc)\n`;
342
+ code += `let _ck=${awaitValue(`pcr(${cookieHeaderExpr},cc)`, arm)}\n`;
340
343
  }
341
344
  if (vali?.cookie) {
342
345
  link(vali, "va");
343
346
  const cookieIsOptional = !!(hook?.cookie)?.["~optional"];
344
- const validateExpr = `_ck=${cookieValidIsAsync ? "await " : ""}va.cookie.From(_ck,${fromArgs("cookie", !!cookieValidIsAsync)})\n`;
347
+ const value = `va.cookie.From(_ck,${fromArgs("cookie", !!cookieValidIsAsync)})`;
348
+ const validateExpr = `_ck=${cookieValidIsAsync ? awaitValue(value, arm) : value}\n`;
345
349
  if (cookieIsOptional) code += `if(Object.keys(_ck).length){${validateExpr}}\n`;
346
350
  else code += validateExpr;
347
351
  }
348
352
  code += `c.cookie=bcj(c.set,_ck,cc${deferDecode ? ",undefined,1" : ""})\n`;
349
353
  }
350
354
  }
351
- const hasSet = responseMode !== "compact";
355
+ const compactEligible = responseMode === "compact";
352
356
  const res = adapter.response;
353
357
  const responseMap = res.map;
354
- const map = hasSet ? link(res.map, "rm") ?? "rm" : link(res.compact ?? res.map, "rc") ?? "rc";
358
+ const responseCompact = compactEligible ? res.compact : void 0;
359
+ const portableCompact = compactEligible && (require_compile_aot.Capture.isAotBuildEnv() || require_compile_aot.Capture.isCapturing());
360
+ const hasSet = !compactEligible || !responseCompact && !portableCompact;
361
+ const map = hasSet ? link(responseMap, "rm") ?? "rm" : link(responseCompact, "rc") ?? "rc";
362
+ if (portableCompact) link(responseMap, "rm");
363
+ const mapValue = (value) => portableCompact ? `(rc?rc(${value},c.request,true):rm(${value},c.set,c.request,true))` : hasSet ? `${map}(${value},c.set,c.request,true)` : `${map}(${value},c.request,true)`;
355
364
  if (isStaticResponse || isPromiseHandler) link(require_compile_handler_utils.cloneResponse, "cr");
356
- const handleInstruction = isHandleFunction ? "h(c)" : isStaticResponse ? "cr(h)" : isPromiseHandler ? "h.then(cr)" : "h";
357
- const mapReturn = hasSet ? `rm(${handleInstruction},c.set,c.request,true)\n` : `rc(${handleInstruction},c.request,true)\n`;
365
+ const mapReturn = `${mapValue(isHandleFunction ? "h(c)" : isStaticResponse ? "cr(h)" : isPromiseHandler ? "h.then(cr)" : "h")}\n`;
358
366
  if (hasStaticAfterResponse) link(hook.afterResponse, "ar");
359
367
  const drainTraceStream = traceHandleOn ? `let _ser\nif(_trs){try{for await(const v of _trs){}}catch(_te){_ser=_te}}\n` : "";
360
368
  const resolveHandlePostDrain = traceHandleOn ? (() => {
@@ -363,11 +371,14 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
363
371
  return s;
364
372
  })() : "";
365
373
  const traceNeedsSchedule = traceHandleOn || phaseOn("afterResponse");
366
- const scheduleAfterResponse = hasAfterResponse || traceNeedsSchedule ? "c._arf=true\nqueueMicrotask(async()=>{if(_stl){try{for await(const v of _stl){}}catch{}}\n" + drainTraceStream + resolveHandlePostDrain + beginTrace("afterResponse", hook?.afterResponse?.length ?? 0) + (hasStaticAfterResponse ? require_compile_handler_utils.mapAfterResponse(hook.afterResponse, [buildReport("afterResponse")]) : "") + (hasDynamicAfterResponse ? "let _q=c['~afterResponse']\nif(_q){let _l=_q.length\nfor(let _i=0;_i<_l;_i++){try{await _q[_i](c)}catch{}}\n" + (!require_universal_is_production.isProduction() ? `if(_q.length!==_l)console.warn('[elysia] defer() called from inside the afterResponse drain is ignored')\n` : "") + `}\n` : "") + endTrace("afterResponse") + `})\n` : "";
367
- const dedupSchedule = !!scheduleAfterResponse && (hasErrorHook || hasTrace) && !syncAfterResponse && !syncErrorHook;
374
+ const scheduleAfterResponse = hasAfterResponse || traceNeedsSchedule ? "c._arf=true\nqueueMicrotask(async()=>{if(_stl){try{for await(const v of _stl){}}catch{}}\n" + drainTraceStream + resolveHandlePostDrain + beginTrace("afterResponse", hook?.afterResponse?.length ?? 0) + (hasStaticAfterResponse ? require_compile_handler_utils.mapAfterResponse(hook.afterResponse, [buildReport("afterResponse")]) : "") + (hasDynamicAfterResponse ? "let _q=c['~afterResponse']\nif(_q){let _l=_q.length\nfor(let _i=0;_i<_l;_i++){try{await _q[_i](c)}catch(_e){console.error(_e)}}\n" + (!require_universal_is_production.isProduction() ? `if(_q.length!==_l)console.warn('[elysia] defer() called from inside the afterResponse drain is ignored')\n` : "") + `}\n` : "") + endTrace("afterResponse") + `})\n` : "";
375
+ const dedupSchedule = !!scheduleAfterResponse && !syncAfterResponse && !syncErrorHook;
368
376
  const scheduleDecl = dedupSchedule ? `function _sc(){\n${scheduleAfterResponse}}\n` : "";
369
377
  const schedule = dedupSchedule ? `_sc()\n` : scheduleAfterResponse;
370
- const signPrefix = syncCookieSign ? `scv(c.set.cookie,cc)\n` : asyncCookieSign ? `_sg=scv(c.set.cookie,cc)\nif(_sg)await _sg\n` : "";
378
+ const syncScheduleDecl = syncAfterResponse && scheduleAfterResponse ? `function _scf(c,_stl){\n${scheduleAfterResponse}}\n` : "";
379
+ const catchSchedule = dedupSchedule ? `_sc()\n` : syncScheduleDecl ? `_scf(c)\n` : "";
380
+ const freThenSchedule = (arg) => catchSchedule ? `if(c._arf)return fre(rt,c,${arg})\nc._arf=true\nconst _fr=fre(rt,c,${arg})\nreturn typeof _fr?.then==='function'?_fr.then((_v)=>{${catchSchedule}return _v\n}):(${catchSchedule.trim()},_fr)\n` : `return fre(rt,c,${arg})\n`;
381
+ const signPrefix = syncCookieSign ? `scv(c.set.cookie,cc)\n` : asyncCookieSign ? `_sg=scv(c.set.cookie,cc)\nif(_sg){${arm ? `${arm}\n` : ""}await _sg}\n` : "";
371
382
  if (syncCookieSign || asyncCookieSign) link(require_cookie_utils.signCookieValues, "scv");
372
383
  let factoryHelpers = "";
373
384
  if (hasBeforeHandle || hasAfterHandle || hasMapResponse || hasAfterResponse || hasResponseValidator || hasCookieSign || hasTrace) {
@@ -381,7 +392,7 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
381
392
  const rbpAbort = abortOn ? ",1" : "";
382
393
  if (isAsync) {
383
394
  link(require_compile_handler_utils.runBeforeHandlePrefixAsync, "rbp");
384
- code += `tmp=await rbp(bp,c${rbpAbort})\n`;
395
+ code += `tmp=${awaitValue(`rbp(bp,c${rbpAbort})`, arm)}\n`;
385
396
  } else {
386
397
  link(require_compile_handler_utils.runBeforeHandlePrefix, "rbp");
387
398
  code += `tmp=rbp(bp,c${rbpAbort})\n`;
@@ -392,7 +403,7 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
392
403
  link(hook.beforeHandle, "bf");
393
404
  const deriveEntries = hook["~deriveEntries"];
394
405
  const chainGuard = abortChainGuard();
395
- const mapped = require_compile_handler_utils.mapBeforeHandle(hook.beforeHandle, deriveEntries, link, isAsync, buildReport("beforeHandle"), chainGuard);
406
+ const mapped = require_compile_handler_utils.mapBeforeHandle(hook.beforeHandle, deriveEntries, link, isAsync, buildReport("beforeHandle"), chainGuard, arm);
396
407
  code += beforeHandlePrefix ? `if(${chainGuard ? `!${chainGuard}&&` : ""}_r===undefined){\n${mapped}}\n` : mapped;
397
408
  }
398
409
  }
@@ -400,9 +411,7 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
400
411
  if (hasBeforeHandle) code += abortCheck();
401
412
  }
402
413
  if (hasAfterResponse || traceHandleOn) link(require_adapter_utils.tee, "tee");
403
- const teeConsumers = (hasAfterResponse ? 1 : 0) + (traceHandleOn ? 1 : 0);
404
- const teeCount = teeConsumers + 1;
405
- const teeBlock = teeConsumers > 0 && !syncAfterResponse ? `if(_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){\nconst _s=tee(_r,${teeCount})\n_r=_s[0]\n` + (hasAfterResponse ? `_stl=_s[1]\n` : "") + (traceHandleOn ? `_trs=_s[${1 + (hasAfterResponse ? 1 : 0)}]\n` : "") + `}\n` : "";
414
+ const teeBlock = (hasAfterResponse || traceHandleOn) && !syncAfterResponse ? "if(_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){\nconst _s=tee(_r,2)\n_r=_s[0]\n" + (traceHandleOn ? `_trs=_s[1]\n` : `_stl=_s[1]\n`) + `}\n` : "";
406
415
  if (traceHandleOn) {
407
416
  const handleName = handler?.name && typeof handler.name === "string" ? handler.name : "anonymous";
408
417
  code += beginTrace("handle", 1, handleName);
@@ -421,16 +430,13 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
421
430
  code += abortCheck();
422
431
  if (syncAfterResponse) {
423
432
  link(require_handler_utils.forwardError, "fe");
424
- factoryHelpers += `function _fin(c,_r){
425
- if(_r instanceof Error)throw _r
426
- if(_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){
427
- const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,undefined)\n}\nfunction _fin2(c,_r,_stl){\nc.responseValue=_r\n` + scheduleAfterResponse + `const _m=${hasSet ? `${map}(_r,c.set,c.request,true)` : `${map}(_r,c.request,true)`}\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>fre(rt,c,_e)):_m\n}\n`;
428
- code += "if(_r instanceof Promise)return _r.then(fe).then((_v)=>_fin(c,_v)).catch((_e)=>fre(rt,c,_e))\nreturn _fin(c,_r)\n";
433
+ factoryHelpers += syncScheduleDecl + "function _fin(c,_r){\nif(_r instanceof Error)throw _r\nif(_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){\nconst _s=tee(_r,2)\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,undefined)\n}\nfunction _fin2(c,_r,_stl){\nc.responseValue=_r\n" + (syncScheduleDecl ? `_scf(c,_stl)\n` : scheduleAfterResponse) + `const _m=${mapValue("_r")}\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>fre(rt,c,_e)):_m\n}\n`;
434
+ code += "if(typeof _r?.then==='function')return Promise.resolve(_r).then(fe).then((_v)=>_fin(c,_v)).catch((_e)=>fre(rt,c,_e))\nreturn _fin(c,_r)\n";
429
435
  } else {
430
436
  code += `if(_r instanceof Error)throw _r\n`;
431
437
  if (!isAsync) {
432
438
  link(require_handler_utils.forwardError, "fe");
433
- code += `else if(_r instanceof Promise)_r=_r.then(fe)\n`;
439
+ code += `else if(typeof _r?.then==='function')_r=Promise.resolve(_r).then(fe)\n`;
434
440
  }
435
441
  if (hasAfterHandle || hasMapResponse || hasAfterResponse || hasTrace) code += `c.responseValue=_r\n`;
436
442
  if (hasAfterHandle || hasTrace) {
@@ -438,7 +444,7 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
438
444
  code += beginTrace("afterHandle", afLen);
439
445
  if (hasAfterHandle) {
440
446
  link(hook.afterHandle, "af");
441
- code += require_compile_handler_utils.mapAfterHandle(hook.afterHandle, isAsync, buildReport("afterHandle"), abortChainGuard());
447
+ code += require_compile_handler_utils.mapAfterHandle(hook.afterHandle, isAsync, buildReport("afterHandle"), abortChainGuard(), arm);
442
448
  }
443
449
  code += endTrace("afterHandle");
444
450
  if (hasAfterHandle) code += abortCheck();
@@ -448,7 +454,7 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
448
454
  code += beginTrace("mapResponse", mrLen);
449
455
  if (hasMapResponse) {
450
456
  link(hook.mapResponse, "mr");
451
- code += require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, buildReport("mapResponse"), abortChainGuard());
457
+ code += require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, buildReport("mapResponse"), abortChainGuard(), arm);
452
458
  }
453
459
  code += endTrace("mapResponse");
454
460
  if (hasMapResponse) code += abortCheck();
@@ -456,26 +462,28 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
456
462
  if (hasResponseValidator) {
457
463
  link(vali, "va");
458
464
  link(require_error.ElysiaStatus, "es");
459
- const awaitStr = responseValiAsync ? "await " : "";
465
+ const encodeStatus = responseValiAsync ? `(_vr.mayReturnPromise?_vr.From(_r.response,'response',true):_vr.EncodeFrom(_r.response,'response'))` : `_vr.EncodeFrom(_r.response,'response')`;
466
+ const encodeBody = responseValiAsync ? `(_vr.mayReturnPromise?_vr.From(_r,'response',true):_vr.EncodeFrom(_r,'response'))` : `_vr.EncodeFrom(_r,'response')`;
460
467
  code += `if(_r instanceof es){
461
468
  const _vr=va.response[_r.status]
462
- if(_vr)_r.response=${awaitStr}${responseValiAsync ? `(_vr.mayReturnPromise?_vr.From(_r.response,'response',true):_vr.EncodeFrom(_r.response,'response'))` : `_vr.EncodeFrom(_r.response,'response')`}\n}else if(!(_r instanceof Response)&&!(_r instanceof ReadableStream)&&typeof _r?.next!=='function'){\nconst _vr=va.response[c.set.status??200]\nif(_vr)_r=${awaitStr}${responseValiAsync ? `(_vr.mayReturnPromise?_vr.From(_r,'response',true):_vr.EncodeFrom(_r,'response'))` : `_vr.EncodeFrom(_r,'response')`}\n}\n`;
469
+ if(_vr)_r.response=${responseValiAsync ? awaitValue(encodeStatus, arm) : encodeStatus}\n}else if(!(_r instanceof Response)&&!(_r instanceof ReadableStream)&&typeof _r?.next!=='function'){\nconst _vr=va.response[c.set.status??200]\nif(_vr)_r=${responseValiAsync ? awaitValue(encodeBody, arm) : encodeBody}\n}\n`;
463
470
  code += abortCheck();
464
471
  }
465
- code += schedule;
472
+ const deferSchedule = !!schedule;
466
473
  code += signPrefix;
467
- const finalMap = hasSet ? `${map}(_r,c.set,c.request,true)` : `${map}(_r,c.request,true)`;
468
- if (isAsync) code += `return await ${finalMap}\n`;
474
+ const finalMap = mapValue("_r");
475
+ const onMapReject = syncErrorHook ? `(_e)=>_ce(_e,c)` : dedupSchedule ? `(_e)=>{${freThenSchedule("_e")}}` : `(_e)=>fre(rt,c,_e)`;
476
+ if (isAsync) code += deferSchedule ? `const _m=await ${finalMap}\n${schedule}return _m\n` : `return await ${finalMap}\n`;
469
477
  else {
470
478
  code += `const _m=${finalMap}\n`;
471
- code += syncErrorHook ? `return typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>_ce(_e,c)):_m\n` : `return typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>fre(rt,c,_e)):_m\n`;
479
+ code += deferSchedule ? `if(typeof _m?.then==='function')return Promise.resolve(_m).then((_v)=>{\n${schedule}return _v\n},${onMapReject})\n` + schedule + `return _m\n` : `return typeof _m?.then==='function'?Promise.resolve(_m).catch(${onMapReject}):_m\n`;
472
480
  }
473
481
  }
474
482
  } else if (isHandleFunction) {
475
483
  if (!isAsync) link(require_handler_utils.forwardError, "fe");
476
- const mapArgs = hasSet ? "c.set,c.request,true" : "c.request,true";
477
- code += callHandlerSyncOnAsync ? `let _r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `let _r=${isAsync ? "await " : ""}h(c)\n`;
478
- code += abortCheck() + `if(_r instanceof Error)throw _r\n` + (isAsync ? `return await ${map}(_r,${mapArgs})\n` : syncErrorHook ? `if(_r instanceof Promise)_r=_r.then(fe)\nconst _m=${map}(_r,${mapArgs})\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>_ce(_e,c)):_m\n` : `if(_r instanceof Promise)_r=_r.then(fe)\nconst _m=${map}(_r,${mapArgs})\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>fre(rt,c,_e)):_m\n`);
484
+ const finalMap = mapValue("_r");
485
+ code += `let ${callHandler}`;
486
+ code += abortCheck() + `if(_r instanceof Error)throw _r\n` + (isAsync ? `return await ${finalMap}\n` : syncErrorHook ? `if(typeof _r?.then==='function')_r=Promise.resolve(_r).then(fe)\nconst _m=${finalMap}\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>_ce(_e,c)):_m\n` : `if(typeof _r?.then==='function')_r=Promise.resolve(_r).then(fe)\nconst _m=${finalMap}\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>fre(rt,c,_e)):_m\n`);
479
487
  } else code += `const _m=${mapReturn.trim()}\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>fre(rt,c,_e)):_m\n`;
480
488
  if (hasErrorHook || hasTrace) {
481
489
  let body = "";
@@ -488,28 +496,26 @@ if(_vr)_r.response=${awaitStr}${responseValiAsync ? `(_vr.mayReturnPromise?_vr.F
488
496
  link(require_handler_error.fallbackResponse, "fbr");
489
497
  const allowUnsafeDetail = !!root["~config"]?.allowUnsafeValidationDetails;
490
498
  if (allowUnsafeDetail) link(require_error.ValidationError, "verr");
491
- factoryHelpers += `function _em(c,_r){return typeof _r?.then==='function'?Promise.resolve(_r).catch((_e)=>fre(rt,c,_e)):_r}\nfunction _fbm(_r,_s,_c){return ${map}(_r,_s,_c.request,true)}\n${asyncCookieSign ? "async " : ""}function _efb(e,c){\n` + (asyncCookieSign ? `let _sg\n` : ``) + signPrefix + "return _em(c,fbr(c,e,_fbm))\n}\n";
499
+ factoryHelpers += `function _em(c,_r){return typeof _r?.then==='function'?Promise.resolve(_r).catch((_e)=>fre(rt,c,_e)):_r}\nfunction _fbm(_r,_s,_c){return ${map}(_r,_s,_c.request,true)}\n${asyncCookieSign ? "async " : ""}function _efb(e,c){\n` + (asyncCookieSign ? `let _sg${arm ? ",_as" : ""}\n` : ``) + signPrefix + "return _em(c,fbr(c,e,_fbm))\n}\n";
492
500
  body += `c.error=e\n` + (allowUnsafeDetail ? `if(e instanceof verr)e.allowUnsafeValidationDetails=true\n` : ``) + `if(e?.status)c.set.status=e.status
493
501
  else if(c.set.status===undefined||c.set.status===200)c.set.status=500
494
502
  let _r${hasMapResponse ? ",tmp" : ""}\n` + require_compile_handler_utils.mapError(hook.error, [
495
503
  map,
496
504
  link,
497
- res.map,
498
- (hasMapResponse ? `c.responseValue=_r\n` + require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, void 0, abortOn ? abortArm : void 0) : "") + endTrace("error") + abortCatch + schedule,
505
+ responseMap,
506
+ (hasMapResponse ? `c.responseValue=_r\n` + require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, void 0, abortChainGuard(), arm) : "") + endTrace("error") + abortCatch + schedule,
499
507
  signPrefix,
500
- isAsync
501
- ], abortOn ? abortArm : void 0) + endTrace("error") + abortCatch + schedule + `return _efb(e,c)\n`;
502
- } else {
503
- body += endTrace("error") + schedule;
504
- body += `return fre(rt,c,e)\n`;
505
- }
508
+ isAsync,
509
+ arm
510
+ ], abortChainGuard()) + endTrace("error") + abortCatch + schedule + `return _efb(e,c)\n`;
511
+ } else body += endTrace("error") + freThenSchedule("e");
506
512
  if (syncErrorHook) {
507
513
  factoryHelpers += `function _ce(e,c){${abortOn ? "let _as\n" : ""}try{\n${body}}catch(_ee){return fre(rt,c,_ee)}}\n`;
508
514
  code += `}catch(e){return _ce(e,c)}\n`;
509
515
  } else code += `}catch(e){try{\n${body}}catch(_ee){return fre(rt,c,_ee)}}\n`;
510
- } else code += `}catch(e){return fre(rt,c,e)}\n`;
516
+ } else code += catchSchedule ? `}catch(e){${freThenSchedule("e")}}\n` : `}catch(e){return fre(rt,c,e)}\n`;
511
517
  code += "}";
512
- code = head + (abortOn && code.includes("_as") ? "let _as\n" : "") + scheduleDecl + code;
518
+ code = head + (abortOn && code.includes("_as") ? "let _as\n" : "") + (code.includes("_av") ? "let _av\n" : "") + scheduleDecl + code;
513
519
  if (factoryHelpers) code = `(function(){\n${factoryHelpers}return ${code}})()`;
514
520
  const alias = aliasKeys.join(",");
515
521
  const fullAlias = alias ? `rt,fre,${alias}` : "rt,fre";
@@ -521,7 +527,7 @@ let _r${hasMapResponse ? ",tmp" : ""}\n` + require_compile_handler_utils.mapErro
521
527
  });
522
528
  const isGeneratorHandler = isHandleFunction && handler.constructor.name.endsWith("GeneratorFunction");
523
529
  if (!hasTrace && isHandleFunction && !isGeneratorHandler && !inlineUnsafe) {
524
- if (alias === "rc" || !isAsync && !syncErrorHook && alias === "rc,fe") return createInlineHandler(res.compact ?? res.map, handler);
530
+ if (alias === "rc" || !isAsync && !syncErrorHook && alias === "rc,fe") return createInlineHandler(responseCompact, handler);
525
531
  else if (alias === "rm" || alias === "msh,rm" || !isAsync && !syncErrorHook && (alias === "rm,fe" || alias === "msh,rm,fe")) return responseMode === "set-with-default-headers" && inference.set ? createInlineHandlerWithDefaultHeaders(responseMap, handler) : createInlineHandlerWithSet(responseMap, handler);
526
532
  }
527
533
  require_compile_jit_probe.JITProbe.record("handler:new-function");