elysia 2.0.0-exp.2 → 2.0.0-exp.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.
Files changed (135) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +2 -0
  2. package/dist/adapter/bun/index.d.ts +2 -25
  3. package/dist/adapter/bun/index.js +18 -12
  4. package/dist/adapter/bun/index.mjs +19 -13
  5. package/dist/adapter/bun/router.js +1 -1
  6. package/dist/adapter/bun/router.mjs +1 -1
  7. package/dist/adapter/constants.d.ts +3 -26
  8. package/dist/adapter/index.d.ts +1 -26
  9. package/dist/adapter/index.js +1 -17
  10. package/dist/adapter/index.mjs +1 -17
  11. package/dist/adapter/types.d.ts +1 -0
  12. package/dist/adapter/utils.d.ts +3 -4
  13. package/dist/adapter/utils.js +83 -81
  14. package/dist/adapter/utils.mjs +82 -80
  15. package/dist/adapter/web-standard/handler.js +6 -3
  16. package/dist/adapter/web-standard/handler.mjs +6 -3
  17. package/dist/adapter/web-standard/index.d.ts +2 -26
  18. package/dist/adapter/web-standard/index.js +12 -1
  19. package/dist/adapter/web-standard/index.mjs +12 -1
  20. package/dist/base.d.ts +38 -68
  21. package/dist/base.js +133 -97
  22. package/dist/base.mjs +133 -97
  23. package/dist/compile/aot.d.ts +22 -1
  24. package/dist/compile/aot.js +22 -0
  25. package/dist/compile/aot.mjs +22 -0
  26. package/dist/compile/handler/index.d.ts +2 -2
  27. package/dist/compile/handler/index.js +85 -456
  28. package/dist/compile/handler/index.mjs +86 -457
  29. package/dist/compile/handler/jit.d.ts +35 -0
  30. package/dist/compile/handler/jit.js +445 -0
  31. package/dist/compile/handler/jit.mjs +443 -0
  32. package/dist/compile/handler/params.js +3 -2
  33. package/dist/compile/handler/params.mjs +4 -3
  34. package/dist/compile/handler/reconstruct.d.ts +13 -0
  35. package/dist/compile/handler/reconstruct.js +29 -0
  36. package/dist/compile/handler/reconstruct.mjs +28 -0
  37. package/dist/compile/handler/utils.d.ts +2 -1
  38. package/dist/compile/handler/utils.js +9 -3
  39. package/dist/compile/handler/utils.mjs +9 -4
  40. package/dist/compile/jit-probe.d.ts +19 -0
  41. package/dist/compile/jit-probe.js +38 -0
  42. package/dist/compile/jit-probe.mjs +36 -0
  43. package/dist/cookie/index.d.ts +4 -3
  44. package/dist/cookie/index.js +2 -1
  45. package/dist/cookie/index.mjs +2 -1
  46. package/dist/cookie/serialize.d.ts +6 -0
  47. package/dist/cookie/serialize.js +28 -0
  48. package/dist/cookie/serialize.mjs +27 -0
  49. package/dist/cookie/utils.d.ts +1 -2
  50. package/dist/cookie/utils.js +2 -23
  51. package/dist/cookie/utils.mjs +5 -25
  52. package/dist/handler/error.js +2 -2
  53. package/dist/handler/error.mjs +3 -3
  54. package/dist/handler/fetch.js +49 -42
  55. package/dist/handler/fetch.mjs +50 -43
  56. package/dist/index.d.ts +13 -8
  57. package/dist/index.js +11 -4
  58. package/dist/index.mjs +7 -6
  59. package/dist/parse-query.js +1 -1
  60. package/dist/parse-query.mjs +1 -1
  61. package/dist/plugin/bun.d.ts +10 -0
  62. package/dist/plugin/bun.js +18 -1
  63. package/dist/plugin/bun.mjs +19 -2
  64. package/dist/plugin/core.d.ts +61 -1
  65. package/dist/plugin/core.js +90 -10
  66. package/dist/plugin/core.mjs +90 -12
  67. package/dist/plugin/esbuild.d.ts +10 -0
  68. package/dist/plugin/esbuild.js +18 -1
  69. package/dist/plugin/esbuild.mjs +19 -2
  70. package/dist/plugin/source.d.ts +38 -1
  71. package/dist/plugin/source.js +104 -13
  72. package/dist/plugin/source.mjs +102 -14
  73. package/dist/plugin/vite.d.ts +7 -0
  74. package/dist/plugin/vite.js +22 -1
  75. package/dist/plugin/vite.mjs +23 -2
  76. package/dist/sucrose.js +23 -10
  77. package/dist/sucrose.mjs +23 -10
  78. package/dist/trace.d.ts +1 -1
  79. package/dist/trace.js +4 -6
  80. package/dist/trace.mjs +4 -6
  81. package/dist/type/bridge.d.ts +9 -8
  82. package/dist/type/coerce.d.ts +20 -2
  83. package/dist/type/coerce.js +110 -0
  84. package/dist/type/coerce.mjs +109 -2
  85. package/dist/type/compat.js +4 -3
  86. package/dist/type/compat.mjs +2 -1
  87. package/dist/type/constants.d.ts +1 -1
  88. package/dist/type/elysia/boolean-string.js +1 -1
  89. package/dist/type/elysia/boolean-string.mjs +1 -1
  90. package/dist/type/elysia/file-type.js +1 -1
  91. package/dist/type/elysia/file-type.mjs +1 -1
  92. package/dist/type/elysia/integer-string.js +1 -1
  93. package/dist/type/elysia/integer-string.mjs +1 -1
  94. package/dist/type/exports.js +29 -2059
  95. package/dist/type/exports.mjs +7 -295
  96. package/dist/type/index.d.ts +6 -2
  97. package/dist/type/index.js +4 -0
  98. package/dist/type/index.mjs +3 -1
  99. package/dist/type/types.d.ts +1 -1
  100. package/dist/type/utils.js +4 -4
  101. package/dist/type/utils.mjs +4 -4
  102. package/dist/type/validator/custom-error.d.ts +10 -0
  103. package/dist/type/validator/custom-error.js +113 -0
  104. package/dist/type/validator/custom-error.mjs +110 -0
  105. package/dist/type/validator/default-precompute.d.ts +22 -0
  106. package/dist/type/validator/default-precompute.js +476 -0
  107. package/dist/type/validator/default-precompute.mjs +465 -0
  108. package/dist/type/validator/frozen-check.d.ts +11 -0
  109. package/dist/type/validator/frozen-check.js +19 -0
  110. package/dist/type/validator/frozen-check.mjs +18 -0
  111. package/dist/type/{validator.d.ts → validator/index.d.ts} +7 -20
  112. package/dist/type/validator/index.js +572 -0
  113. package/dist/type/validator/index.mjs +567 -0
  114. package/dist/type/validator/string-codec-aot.d.ts +9 -0
  115. package/dist/type/validator/string-codec-aot.js +106 -0
  116. package/dist/type/validator/string-codec-aot.mjs +102 -0
  117. package/dist/type/validator/validator-cache.d.ts +21 -0
  118. package/dist/type/validator/validator-cache.js +163 -0
  119. package/dist/type/validator/validator-cache.mjs +161 -0
  120. package/dist/types.d.ts +22 -14
  121. package/dist/universal/file.d.ts +1 -1
  122. package/dist/universal/file.js +35 -29
  123. package/dist/universal/file.mjs +35 -29
  124. package/dist/utils.d.ts +12 -1
  125. package/dist/utils.js +89 -45
  126. package/dist/utils.mjs +88 -46
  127. package/dist/validator/index.d.ts +1 -1
  128. package/dist/validator/index.js +15 -2
  129. package/dist/validator/index.mjs +15 -2
  130. package/dist/validator/route.d.ts +0 -1
  131. package/dist/ws/route.js +47 -24
  132. package/dist/ws/route.mjs +48 -25
  133. package/package.json +10 -4
  134. package/dist/type/validator.js +0 -1033
  135. package/dist/type/validator.mjs +0 -1029
@@ -1,113 +1,21 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_universal_constants = require('../../universal/constants.js');
3
- const require_constants = require('../../constants.js');
4
2
  const require_utils = require('../../utils.js');
5
- const require_error = require('../../error.js');
6
- const require_cookie_config = require('../../cookie/config.js');
7
- const require_cookie_utils = require('../../cookie/utils.js');
8
- const require_adapter_utils = require('../../adapter/utils.js');
9
- const require_parse_query = require('../../parse-query.js');
10
- const require_sucrose = require('../../sucrose.js');
3
+ const require_context = require('../../context.js');
11
4
  const require_compile_aot = require('../aot.js');
12
- const require_validator_route = require('../../validator/route.js');
13
- const require_compile_utils = require('../utils.js');
14
- const require_compile_handler_utils = require('./utils.js');
15
- const require_adapter_constants = require('../../adapter/constants.js');
16
- const require_handler_utils = require('../../handler/utils.js');
17
- const require_trace = require('../../trace.js');
18
5
  const require_compile_handler_params = require('./params.js');
6
+ const require_compile_handler_jit = require('./jit.js');
7
+ const require_compile_handler_reconstruct = require('./reconstruct.js');
8
+ const require_adapter_constants = require('../../adapter/constants.js');
19
9
 
20
10
  //#region src/compile/handler/index.ts
21
- const parseFormData = "c.body=await pf(c)\n";
22
- const matchReturnIdentifier = /(?:=>|\breturn)\s+(?!(?:true|false|null|undefined|void|new|typeof|async|await|function|class)\b)[A-Za-z_$][\w$]*(?:\s*\.\s*[A-Za-z_$][\w$]*)*\s*(?![\w$([])/;
23
- const mayReturnIdentifier = (fn) => matchReturnIdentifier.test(fn.toString());
24
- let captureHeaderShorthand;
25
- const setCaptureHeaderShorthand = (value) => {
26
- captureHeaderShorthand = value;
27
- };
28
- function builtinParser(adapter, parse, link) {
29
- switch (parse) {
30
- case "formdata":
31
- case "multipart/form-data":
32
- link(adapter.formData, "pf");
33
- return parseFormData;
34
- case "json":
35
- case "application/json":
36
- link(adapter.json, "pj");
37
- return "c.body=await pj(c)\n";
38
- case "urlencoded":
39
- case "application/x-www-form-urlencoded":
40
- link(adapter.urlencoded, "pu");
41
- return "c.body=await pu(c)\n";
42
- case "arrayBuffer":
43
- case "application/octet-stream":
44
- link(adapter.arrayBuffer, "pa");
45
- return "c.body=await pa(c)\n";
46
- case "text":
47
- case "text/plain":
48
- link(adapter.text, "pt");
49
- return "c.body=await pt(c)\n";
50
- case "none": return "";
51
- default: throw new Error(`Unsupported content type: ${parse}`);
52
- }
53
- }
54
- function parse(adapter, parsers, bodyVali, hasHeaders, link, report) {
55
- if (parsers && typeof parsers === "function") parsers = [parsers];
56
- if (typeof parsers === "string" || parsers?.length === 1 && typeof parsers[0] === "string") {
57
- if (parsers.length === 1) parsers = parsers[0];
58
- const builtinName = parsers;
59
- const child = report?.resolveChild(builtinName);
60
- const begin = child ? child.begin : "";
61
- const end = child ? child.end() : "";
62
- return begin + builtinParser(adapter, parsers, link) + end;
63
- }
64
- let code = `let ct=((${hasHeaders ? "c.headers['content-type']" : "c.request.headers.get('content-type')"})||'')\nlet cti=ct.indexOf(";")
65
- if(cti!==-1)ct=ct.slice(0,cti)
66
- c.contentType=ct
67
- `;
68
- let hasFn = false;
69
- let hasType = false;
70
- if (parsers) for (let i = 0; i < parsers.length; i++) {
71
- const parser = parsers[i];
72
- if (typeof parser === "function") {
73
- hasFn = true;
74
- link(0, "");
75
- const child = report?.resolveChild(parser.name || "anonymous");
76
- if (i) code += "if(!hasBody){";
77
- if (child) code += child.begin;
78
- 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 += "hasBody=c.body!==undefined\n";
80
- if (child) code += child.end();
81
- if (i) code += "}\n";
82
- } else {
83
- hasType = true;
84
- const child = report?.resolveChild(parser);
85
- if (i) code += "if(!hasBody){\n";
86
- if (child) code += child.begin;
87
- code += builtinParser(adapter, parser, link);
88
- if (child) code += child.end();
89
- if (i) code += "}\n";
90
- break;
91
- }
92
- }
93
- if (!hasType) {
94
- const child = report?.resolveChild("default");
95
- const begin = child ? child.begin : "";
96
- const end = child ? child.end() : "";
97
- const guard = bodyVali ? "ct" : "ct&&c.request.body";
98
- code += hasFn ? `if(!hasBody&&${guard}){${begin}c.body=await pd(c,ct)\n${end}}\n` : `if(${guard}){${begin}c.body=await pd(c,ct)\n${end}}\n`;
99
- link(adapter.default, "pd");
100
- }
101
- return hasFn ? "let hasBody=false,_bp\n" + code : code;
102
- }
103
- const isAsyncValidator = (vali) => vali?.isAsync ?? true;
104
- function applyHook(localHook, appHook, rootHook) {
11
+ function applyHook(localHook, appHook, rootHook, appHookFresh = false) {
105
12
  let hook;
106
13
  if (localHook && appHook) hook = require_utils.mergeHook(require_utils.cloneHook(localHook), appHook, true);
107
14
  else {
108
15
  const base = localHook ?? appHook;
109
- if (!rootHook) return base ? require_utils.cloneHook(base) : base;
110
- hook = base ? require_utils.cloneHook(base) : require_utils.nullObject();
16
+ const ownsBase = appHookFresh && !localHook && base !== void 0;
17
+ if (!rootHook) return ownsBase ? base : base ? require_utils.cloneHook(base) : base;
18
+ hook = ownsBase ? base : base ? require_utils.cloneHook(base) : require_utils.nullObject();
111
19
  }
112
20
  if (rootHook) require_utils.mergeHook(hook, rootHook, true, true);
113
21
  return hook;
@@ -135,11 +43,16 @@ function dropHooksByOrigin(hook, skip) {
135
43
  const v = hook[key];
136
44
  if (!v) continue;
137
45
  if (Array.isArray(v)) {
138
- const kept = v.filter((fn) => {
46
+ let kept;
47
+ for (let i = 0; i < v.length; i++) {
48
+ const fn = v[i];
139
49
  const origin = require_utils.fnOrigin.get(fn);
140
- return origin === void 0 || !skip.has(origin);
141
- });
142
- if (kept.length !== v.length) {
50
+ const keep = origin === void 0 || !skip.has(origin);
51
+ if (kept) {
52
+ if (keep) kept.push(fn);
53
+ } else if (!keep) kept = v.slice(0, i);
54
+ }
55
+ if (kept) {
143
56
  if (out === hook) out = { ...hook };
144
57
  out[key] = kept;
145
58
  }
@@ -153,18 +66,21 @@ function dropHooksByOrigin(hook, skip) {
153
66
  }
154
67
  return out;
155
68
  }
156
- const createInlineHandler = (map, h) => ((c) => {
157
- const r = h(c);
158
- if (r instanceof Error) throw r;
159
- if (r instanceof Promise) return r.then((v) => map(require_handler_utils.forwardError(v), c.request));
160
- return map(r, c.request);
161
- });
162
- const createInlineHandlerWithSet = (map, h) => ((c) => {
163
- const r = h(c);
164
- if (r instanceof Error) throw r;
165
- if (r instanceof Promise) return r.then((v) => map(require_handler_utils.forwardError(v), c.set, c.request));
166
- return map(r, c.set, c.request);
167
- });
69
+ function reconstructNeedsHookState(names) {
70
+ for (let i = 0; i < names.length; i++) switch (names[i]) {
71
+ case "ho":
72
+ case "tf":
73
+ case "bf":
74
+ case "af":
75
+ case "mr":
76
+ case "er":
77
+ case "ar":
78
+ case "va":
79
+ case "cc":
80
+ case "tr": return true;
81
+ }
82
+ return false;
83
+ }
168
84
  function promoteDerive(hook) {
169
85
  const derive = hook.derive;
170
86
  if (derive === void 0) return;
@@ -196,17 +112,25 @@ function composeRootHook(root, inheritedChain) {
196
112
  if (!locals) return inherited;
197
113
  return require_utils.mergeHook(inherited, locals);
198
114
  }
199
- function buildNativeStaticResponse([, , handler, instance, localHook, appHook, inheritedChain], root) {
200
- if (typeof handler === "function") return;
201
- if (handler instanceof Error) return;
115
+ function buildNativeStaticResponse([, , handler, instance, localHook, appHook, inheritedChain], root, hasMapResponse) {
116
+ if (typeof handler === "function" || handler instanceof Error) return;
202
117
  const adapter = root["~config"]?.adapter ?? require_adapter_constants.defaultAdapter;
203
- if (localHook) root["~applyMacro"](localHook);
204
- resolveChainMacros(root, appHook);
205
- if (inheritedChain) resolveChainMacros(root, inheritedChain);
206
- const hook = applyHook(localHook, require_utils.flattenChainMemo(root, appHook), instance !== root ? composeRootHook(root, inheritedChain) : void 0);
207
- const has = (v) => Array.isArray(v) ? v.length > 0 : !!v;
208
- if (has(hook?.parse) || has(hook?.transform) || has(hook?.beforeHandle) || has(hook?.afterHandle) || has(hook?.mapResponse) || has(hook?.afterResponse) || has(hook?.trace)) return;
209
- if (hook?.body || hook?.query || hook?.params || hook?.headers || hook?.cookie || (hook?.schemas)?.length) return;
118
+ if (hasMapResponse) {
119
+ if (localHook) root["~applyMacro"](localHook);
120
+ resolveChainMacros(root, appHook);
121
+ if (inheritedChain) resolveChainMacros(root, inheritedChain);
122
+ const hook = applyHook(localHook, require_utils.flattenChainMemo(root, appHook), instance !== root ? composeRootHook(root, inheritedChain) : void 0, true);
123
+ if (hook?.mapResponse) {
124
+ const context = new (require_context.createContext(root))(new Request("http://e.ly"));
125
+ context.responseValue = handler;
126
+ for (let i = 0; i < hook.mapResponse.length; i++) {
127
+ const fn = hook.mapResponse[i];
128
+ if (typeof fn !== "function") continue;
129
+ const mapped = fn(context);
130
+ if (mapped instanceof Response || mapped instanceof Promise) return mapped;
131
+ }
132
+ }
133
+ }
210
134
  const rootHeaders = root["~ext"]?.headers;
211
135
  const buildSet = () => ({ headers: rootHeaders ? Object.assign(require_utils.nullObject(), rootHeaders) : require_utils.nullObject() });
212
136
  if (handler instanceof Promise) return handler.then((resolved) => {
@@ -216,22 +140,26 @@ function buildNativeStaticResponse([, , handler, instance, localHook, appHook, i
216
140
  });
217
141
  if (handler instanceof Response && !rootHeaders) return handler;
218
142
  const mapped = adapter.response.map(handler, buildSet());
219
- if (mapped instanceof Response) return mapped;
220
- if (mapped instanceof Promise) return mapped;
143
+ if (mapped instanceof Response || mapped instanceof Promise) return mapped;
221
144
  }
222
145
  function toArray(name, hook) {
223
146
  if (typeof hook[name] === "function") hook[name] = [hook[name]];
224
147
  }
225
148
  function composeRouteHook(instance, localHook, appHook, inheritedChain, root) {
226
149
  const flatAppHook = appHook ? require_utils.flattenChainMemo(root, appHook) : void 0;
227
- let rootHook = instance !== root ? composeRootHook(root, inheritedChain) : void 0;
228
- if (rootHook && (flatAppHook || localHook)) {
150
+ let inherited = instance !== root ? require_utils.flattenChainMemo(root, inheritedChain) : void 0;
151
+ let locals = instance !== root ? require_utils.flattenChain(root["~hookChain"], require_utils.isLocalScope, inheritedChain) : void 0;
152
+ if ((inherited || locals) && (flatAppHook || localHook)) {
229
153
  const present = /* @__PURE__ */ new Set();
230
154
  collectHookOrigins(localHook, present);
231
155
  collectHookOrigins(flatAppHook, present);
232
- if (present.size) rootHook = dropHooksByOrigin(rootHook, present);
156
+ if (present.size) {
157
+ if (inherited) inherited = dropHooksByOrigin(inherited, present);
158
+ if (locals) locals = dropHooksByOrigin(locals, present);
159
+ }
233
160
  }
234
- let hook = applyHook(localHook, flatAppHook, rootHook);
161
+ let hook = applyHook(localHook, flatAppHook, inherited, true);
162
+ if (locals) hook = hook ? require_utils.mergeHook(hook, locals, false, true) : locals;
235
163
  if (instance !== root) {
236
164
  const errors = require_utils.flattenChain(instance["~hookChain"], require_utils.isLocalScope)?.error;
237
165
  if (errors) {
@@ -249,6 +177,16 @@ function composeRouteHook(instance, localHook, appHook, inheritedChain, root) {
249
177
  }
250
178
  function compileHandler([_method, path, handler, instance, localHook, appHook, inheritedChain], root, precomputedStatic) {
251
179
  const adapter = root["~config"]?.adapter ?? require_adapter_constants.defaultAdapter;
180
+ const method = require_utils.mapMethodBack(_method);
181
+ const reconstructed = require_compile_aot.Compiled.handlers?.[method]?.[path];
182
+ if (reconstructed && !precomputedStatic && typeof handler === "function" && !root["~ext"]?.macro && !reconstructNeedsHookState(reconstructed.a)) return reconstructed.f(handler, ...require_compile_handler_params.resolveHandlerParams(reconstructed.a, {
183
+ parse: adapter.parse,
184
+ res: adapter.response,
185
+ hook: require_utils.nullObject(),
186
+ vali: void 0,
187
+ cookieConfig: void 0,
188
+ tracers: void 0
189
+ }));
252
190
  if (root["~ext"]?.macro) {
253
191
  if (localHook) root["~applyMacro"](localHook);
254
192
  if (appHook) resolveChainMacros(root, appHook);
@@ -265,17 +203,7 @@ function compileHandler([_method, path, handler, instance, localHook, appHook, i
265
203
  toArray("afterResponse", hook);
266
204
  toArray("error", hook);
267
205
  }
268
- const method = require_utils.mapMethodBack(_method);
269
- const vali = hook ? new require_validator_route.RouteValidator(hook, {
270
- models: root["~ext"]?.models,
271
- normalize: root["~config"]?.normalize,
272
- sanitize: root["~config"]?.sanitize,
273
- schemas: hook?.schemas,
274
- aot: {
275
- method,
276
- path
277
- }
278
- }) : void 0;
206
+ const buildValidator = () => hook ? require_compile_handler_reconstruct.Reconstrct.validator(hook, root, method, path) : void 0;
279
207
  if (handler instanceof Error) {
280
208
  const error = handler;
281
209
  handler = () => {
@@ -297,330 +225,31 @@ function compileHandler([_method, path, handler, instance, localHook, appHook, i
297
225
  const resolve = (p) => typeof p === "string" && p in namedParsers ? namedParsers[p] : p;
298
226
  hook.parse = Array.isArray(hook.parse) ? hook.parse.map(resolve) : resolve(hook.parse);
299
227
  }
300
- const reconstructed = require_compile_aot.Compiled.handlers?.[method]?.[path];
301
228
  if (reconstructed) return reconstructed.f(handler, ...require_compile_handler_params.resolveHandlerParams(reconstructed.a, {
302
229
  parse: adapter.parse,
303
230
  res: adapter.response,
304
231
  hook: hook ?? require_utils.nullObject(),
305
- vali,
306
- cookieConfig: reconstructed.a.includes("cc") ? require_cookie_config.compileCookieConfig(hook?.cookie, root["~config"]?.cookie) : void 0,
307
- tracers: reconstructed.a.includes("tr") ? (hook?.trace)?.map((fn) => require_trace.createTracer(fn)) : void 0
232
+ vali: reconstructed.a.includes("va") ? buildValidator() : void 0,
233
+ cookieConfig: reconstructed.a.includes("cc") ? require_compile_handler_reconstruct.Reconstrct.cookie(hook, root) : void 0,
234
+ tracers: reconstructed.a.includes("tr") ? require_compile_handler_reconstruct.Reconstrct.trace(hook) : void 0
308
235
  }));
309
- const inference = require_sucrose.sucrose(handler, hook);
310
- const params = /* @__PURE__ */ new Set();
311
- let alias = "";
312
- function link(v, key) {
313
- if (v === 0) {
314
- if (!params.has(hook)) {
315
- params.add(hook);
316
- alias += `${alias ? "," : ""}ho`;
317
- }
318
- return;
319
- }
320
- if (!params.has(v)) {
321
- params.add(v);
322
- alias += `${alias ? "," : ""}${key}`;
323
- }
324
- }
325
- if (hook && typeof hook.parse === "function") hook.parse = [hook.parse];
326
- const parseLength = Array.isArray(hook?.parse) ? hook.parse.length : 0;
327
- const parseFirst = Array.isArray(hook?.parse) ? hook.parse[0] : hook?.parse;
328
- const hasStandaloneBody = !!hook?.schemas?.some((s) => s?.body);
329
- const bodylessMethod = method === "GET" || method === "HEAD";
330
- const hasBody = !!hook?.body || hasStandaloneBody || !bodylessMethod && (parseLength > 0 || inference.body) && parseFirst !== "none";
331
- const bodyValiIsAsync = hasBody && isAsyncValidator(vali?.body);
332
- const headersValiIsAsync = vali?.headers && isAsyncValidator(vali?.headers);
333
- const paramsValiIsAsync = vali?.params && isAsyncValidator(vali?.params);
334
- const queryValiIsAsync = vali?.query && isAsyncValidator(vali?.query);
335
- const cookieValidIsAsync = vali?.cookie && isAsyncValidator(vali?.cookie);
336
- const appCookieConfig = root["~config"]?.cookie;
337
- const needsCookie = !!vali?.cookie || !!inference.cookie;
338
- const cookieConfig = needsCookie ? require_cookie_config.compileCookieConfig(hook?.cookie, appCookieConfig) : void 0;
339
- const hasCookieSign = !!cookieConfig?.hasSign;
340
- const hasErrorHook = !!hook?.error?.length;
341
- const hasAfterResponse = !!hook?.afterResponse?.length;
342
- const hasBeforeHandle = !!hook?.beforeHandle?.length;
343
- const hasAfterHandle = !!hook?.afterHandle?.length;
344
- const hasMapResponse = !!hook?.mapResponse?.length;
345
- const hasResponseValidator = !!vali?.response;
346
- const traceHandlers = hook?.trace ?? void 0;
347
- const hasTrace = !!traceHandlers?.length;
348
- const traceCount = hasTrace ? traceHandlers.length : 0;
349
- const beginTrace = (phase, total) => {
350
- if (!hasTrace) return "";
351
- let s = "";
352
- for (let i = 0; i < traceCount; i++) s += `rp${i}=tr${i}.${phase}({id:c.rid,event:'${phase}',name:'${phase}',begin:performance.now(),total:${total}})\n`;
353
- return s;
354
- };
355
- const endTrace = (errBinding) => {
356
- if (!hasTrace) return "";
357
- let s = "";
358
- for (let i = 0; i < traceCount; i++) s += `rp${i}.resolve(${errBinding ?? ""})\n`;
359
- return s;
360
- };
361
- const buildReport = (phase) => {
362
- if (!hasTrace) return;
363
- return { resolveChild(name) {
364
- let begin = "";
365
- for (let i = 0; i < traceCount; i++) begin += `rpc${i}=rp${i}.resolveChild?.shift?.()?.({id:c.rid,event:'${phase}',name:${JSON.stringify(name)},begin:performance.now()})\n`;
366
- return {
367
- begin,
368
- end(errBinding) {
369
- let close = "";
370
- for (let i = 0; i < traceCount; i++) if (errBinding) close += `if(${errBinding} instanceof Error){rpc${i}?.(${errBinding})}else{rpc${i}?.()}\n`;
371
- else close += `rpc${i}?.()\n`;
372
- return close;
373
- }
374
- };
375
- } };
376
- };
377
- const responseValiAsync = !!(vali?.response && Object.values(vali.response).find(isAsyncValidator));
378
- const handlerIsAsync = isHandleFunction && require_compile_utils.isAsyncFunction(handler);
379
- const errorHookForcesAsync = hasErrorHook && (hasAfterHandle || hasMapResponse || hasResponseValidator);
380
- const responseValiForcesAsync = hasResponseValidator && isHandleFunction && !handlerIsAsync && (require_compile_utils.mayReturnPromise(handler) || mayReturnIdentifier(handler));
381
- const afterResponseForcesAsync = hasAfterResponse && (require_compile_utils.isAsyncLifecycle(hook?.afterResponse) || hasAfterHandle || hasMapResponse || hasResponseValidator || hasErrorHook);
382
- const isAsync = hasBody || handlerIsAsync || errorHookForcesAsync || responseValiForcesAsync || afterResponseForcesAsync || hasTrace || hasCookieSign || responseValiAsync || hook && (!!require_compile_utils.isAsyncLifecycle(hook?.afterHandle) || !!require_compile_utils.isAsyncLifecycle(hook?.beforeHandle) || !!require_compile_utils.isAsyncLifecycle(hook?.transform) || !!require_compile_utils.isAsyncLifecycle(hook?.mapResponse) || !!require_compile_utils.isAsyncLifecycle(hook?.error) || bodyValiIsAsync || headersValiIsAsync || paramsValiIsAsync || queryValiIsAsync || cookieValidIsAsync);
383
- const callHandlerSyncOnAsync = isAsync && isHandleFunction && !handlerIsAsync;
384
- const syncErrorHook = hasErrorHook && !isAsync && !hasTrace;
385
- const syncAfterResponse = hasAfterResponse && !isAsync && !hasTrace && !hasErrorHook;
386
- const callHandler = isHandleFunction ? callHandlerSyncOnAsync ? `_r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `_r=${isAsync ? "await " : ""}h(c)\n` : isStaticResponse ? `_r=h.clone()\n` : isPromiseHandler ? `_r=h.then(cr)\n` : `_r=h\n`;
387
- let code = `${isAsync ? "async " : ""}function route(c){\n`;
388
- if ((hasAfterResponse || hasTrace) && !syncAfterResponse) code += "let _stl\n";
389
- if (hasCookieSign) code += "let _sg\n";
390
- if (hasTrace) {
391
- link(traceHandlers.map((fn) => require_trace.createTracer(fn)), "tr");
392
- link(require_utils.requestId, "rid");
393
- code += `c.rid??=rid()\n`;
394
- for (let i = 0; i < traceCount; i++) code += `let rp${i},rpc${i},_hr${i};\n`;
395
- code += `c.trace??=[`;
396
- for (let i = 0; i < traceCount; i++) code += (i ? "," : "") + `tr[${i}](c)`;
397
- code += `]\n`;
398
- for (let i = 0; i < traceCount; i++) code += `const tr${i}=c.trace[${i}]\n`;
399
- code += `let _trs\n`;
400
- }
401
- let inlineUnsafe = false;
402
- if ((hasTrace || inference.route) && require_constants.isDynamicRegex.test(path)) {
403
- code += `c.route=${JSON.stringify(path)}\n`;
404
- inlineUnsafe = true;
405
- }
406
- const head = code;
407
- code = "";
408
- if (hasErrorHook || hasTrace) code += "try{\n";
409
- const hasHeaders = inference.headers || !!vali?.headers;
410
- if (inference.query || vali?.query) {
411
- const parseArgs = require_compile_handler_utils.getQueryParseArgs((vali?.query)?.schema);
412
- code += `c.query=pq(c.request.url,c.qi${parseArgs})\n`;
413
- link(require_parse_query.parseQueryFromURL, "pq");
414
- }
415
- if (hasHeaders) {
416
- if (captureHeaderShorthand === void 0 && require_compile_aot.Capture.isCapturing()) code += `c.headers=c.request.headers.toJSON?.()??Object.fromEntries(c.request.headers)\n`;
417
- else code += `c.headers=${captureHeaderShorthand ?? require_universal_constants.hasHeaderShorthand ? "c.request.headers.toJSON()" : "Object.fromEntries(c.request.headers)"}\n`;
418
- inlineUnsafe = true;
419
- }
420
- if (hasBody) {
421
- const parseLen = Array.isArray(hook?.parse) ? hook.parse.length : 0;
422
- if (hasTrace) code += beginTrace("parse", parseLen);
423
- const parseCode = parse(adapter.parse, hook?.parse, vali?.body, hasHeaders, link, buildReport("parse"));
424
- link(require_error.ParseError, "pe");
425
- code += "try{\n" + parseCode + "}catch(e){throw new pe(e)}\n";
426
- if (hasTrace) code += endTrace();
427
- } else if (hasTrace) code += beginTrace("parse", 0) + endTrace();
428
- if (hook?.transform?.length || hasTrace) {
429
- const transformLen = hook?.transform?.length ?? 0;
430
- code += beginTrace("transform", transformLen);
431
- if (transformLen) {
432
- link(hook.transform, "tf");
433
- code += require_compile_handler_utils.mapTransform(hook.transform, [buildReport("transform")]);
434
- }
435
- code += endTrace();
436
- }
437
- if (vali?.body) {
438
- link(vali, "va");
439
- code += `c.body=${bodyValiIsAsync ? "await " : ""}va.body.From(c.body,'body')\n`;
440
- }
441
- if (vali?.headers) {
442
- link(vali, "va");
443
- code += `c.headers=${headersValiIsAsync ? "await " : ""}va.headers.From(c.headers,'headers')\n`;
444
- }
445
- if (vali?.params) {
446
- link(vali, "va");
447
- code += `c.params=${paramsValiIsAsync ? "await " : ""}va.params.From(c.params,'params')\n`;
448
- }
449
- if (vali?.query) {
450
- link(vali, "va");
451
- code += `c.query=${queryValiIsAsync ? "await " : ""}va.query.From(c.query,'query')\n`;
452
- }
453
- if (cookieConfig) {
454
- link(require_cookie_utils.buildCookieJar, "bcj");
455
- link(cookieConfig, "cc");
456
- if (!hasCookieSign && !cookieValidIsAsync) {
457
- link(require_cookie_utils.parseCookieRawSync, "pcrs");
458
- code += `let _ck=pcrs(c.request.headers.get('cookie'),cc)\n`;
459
- } else {
460
- link(require_cookie_utils.parseCookieRaw, "pcr");
461
- code += `let _ck=await pcr(c.request.headers.get('cookie'),cc)\n`;
462
- }
463
- if (vali?.cookie) {
464
- link(vali, "va");
465
- const cookieIsOptional = !!(hook?.cookie)?.["~optional"];
466
- const validateExpr = `_ck=${cookieValidIsAsync ? "await " : ""}va.cookie.From(_ck,'cookie')\n`;
467
- if (cookieIsOptional) code += `if(Object.keys(_ck).length){${validateExpr}}\n`;
468
- else code += validateExpr;
469
- }
470
- code += `c.cookie=bcj(c.set,_ck,cc)\n`;
471
- }
472
- const hasSet = inference.cookie || inference.set || !!root["~ext"]?.["headers"] || needsCookie || hasAfterResponse || hasErrorHook || hasResponseValidator || hasTrace;
473
- const res = adapter.response;
474
- const map = hasSet ? link(res.map, "rm") ?? "rm" : link(res.compact ?? res.map, "rc") ?? "rc";
475
- if (isPromiseHandler) link(require_compile_handler_utils.cloneResponse, "cr");
476
- const handleInstruction = isHandleFunction ? "h(c)" : isStaticResponse ? "h.clone()" : isPromiseHandler ? "h.then(cr)" : "h";
477
- const mapReturn = hasSet ? `rm(${handleInstruction},c.set,c.request)\n` : `rc(${handleInstruction},c.request)\n`;
478
- if (hasAfterResponse) link(hook.afterResponse, "ar");
479
- const drainTraceStream = hasTrace ? `let _ser\nif(_trs){try{for await(const v of _trs){}}catch(_te){_ser=_te}}\n` : "";
480
- const resolveHandlePostDrain = hasTrace ? (() => {
481
- let s = "";
482
- for (let i = 0; i < traceCount; i++) s += `_hr${i}?.resolve(_ser)\n`;
483
- return s;
484
- })() : "";
485
- const setImmediateFn = require_compile_aot.Capture.isCapturing() ? ";(typeof setImmediate==='function'?setImmediate:(f)=>Promise.resolve().then(f))" : typeof setImmediate === "function" ? "setImmediate" : "Promise.resolve().then";
486
- const scheduleAfterResponse = hasAfterResponse || hasTrace ? `c._arf=true\n${setImmediateFn}(async()=>{if(_stl)for await(const v of _stl){}\n` + drainTraceStream + resolveHandlePostDrain + beginTrace("afterResponse", hook?.afterResponse?.length ?? 0) + (hasAfterResponse ? require_compile_handler_utils.mapAfterResponse(hook.afterResponse, [buildReport("afterResponse")]) : "") + endTrace() + `})\n` : "";
487
- const dedupSchedule = !!scheduleAfterResponse && (hasErrorHook || hasTrace) && !syncAfterResponse && !syncErrorHook;
488
- const scheduleDecl = dedupSchedule ? `function _sc(){\n${scheduleAfterResponse}}\n` : "";
489
- const schedule = dedupSchedule ? `_sc()\n` : scheduleAfterResponse;
490
- const signPrefix = hasCookieSign ? `_sg=scv(c.set.cookie,cc)\nif(_sg)await _sg\n` : "";
491
- if (hasCookieSign) link(require_cookie_utils.signCookieValues, "scv");
492
- let factoryHelpers = "";
493
- if (hasBeforeHandle || hasAfterHandle || hasMapResponse || hasAfterResponse || hasResponseValidator || hasCookieSign || hasTrace) {
494
- code += `let _r,tmp\n`;
495
- if (hasBeforeHandle || hasTrace) {
496
- const bfLen = hook?.beforeHandle?.length ?? 0;
497
- code += beginTrace("beforeHandle", bfLen);
498
- if (hasBeforeHandle) {
499
- link(hook.beforeHandle, "bf");
500
- const rootDerive = root["~derive"];
501
- const instanceDerive = instance?.["~derive"];
502
- const deriveSet = rootDerive && instanceDerive ? { has: (fn) => rootDerive.has(fn) || instanceDerive.has(fn) } : rootDerive ?? instanceDerive;
503
- code += require_compile_handler_utils.mapBeforeHandle(hook.beforeHandle, deriveSet, link, buildReport("beforeHandle"));
504
- }
505
- code += endTrace();
506
- }
507
- if (hasAfterResponse || hasTrace) link(require_adapter_utils.tee, "tee");
508
- const teeConsumers = (hasAfterResponse ? 1 : 0) + (hasTrace ? 1 : 0);
509
- const teeCount = teeConsumers + 1;
510
- const teeBlock = teeConsumers > 0 && !syncAfterResponse ? `if(_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){\nconst _s=await tee(_r,${teeCount})\n_r=_s[0]\n` + (hasAfterResponse ? `_stl=_s[1]\n` : "") + (hasTrace ? `_trs=_s[${1 + (hasAfterResponse ? 1 : 0)}]\n` : "") + `}\n` : "";
511
- if (hasTrace) {
512
- const handleName = handler?.name && typeof handler.name === "string" ? handler.name : "anonymous";
513
- code += beginTrace("handle", 1);
514
- const handleChild = buildReport("handle").resolveChild(handleName);
515
- code += handleChild.begin;
516
- if (hasBeforeHandle) code += `if(_r===undefined){\n${callHandler}${teeBlock}}\n`;
517
- else code += callHandler + teeBlock;
518
- code += handleChild.end("_r");
519
- code += `if(_trs){\n`;
520
- for (let i = 0; i < traceCount; i++) code += `_hr${i}=rp${i};\n`;
521
- code += `}else{\n`;
522
- code += endTrace();
523
- code += `}\n`;
524
- } else if (hasBeforeHandle) code += `if(_r===undefined){\n${callHandler}${teeBlock}}\n`;
525
- else code += callHandler + teeBlock;
526
- if (syncAfterResponse) {
527
- link(require_handler_utils.forwardError, "fe");
528
- factoryHelpers += `function _fin(c,_r){
529
- if(_r instanceof Error)throw _r
530
- if(_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){
531
- return tee(_r,${teeCount}).then((_s)=>_fin2(c,_s[0],_s[1]))\n}\nreturn _fin2(c,_r,undefined)\n}\nfunction _fin2(c,_r,_stl){\nc.responseValue=_r\n` + scheduleAfterResponse + `return ${hasSet ? `${map}(_r,c.set,c.request)` : `${map}(_r,c.request)`}\n}\n`;
532
- code += "if(_r instanceof Promise)return _r.then(fe).then((_v)=>_fin(c,_v))\nreturn _fin(c,_r)\n";
533
- } else {
534
- code += `if(_r instanceof Error)throw _r\n`;
535
- if (!isAsync) {
536
- link(require_handler_utils.forwardError, "fe");
537
- code += `else if(_r instanceof Promise)_r=_r.then(fe)\n`;
538
- }
539
- if (hasAfterHandle || hasMapResponse || hasAfterResponse || hasTrace) code += `c.responseValue=_r\n`;
540
- if (hasAfterHandle || hasTrace) {
541
- const afLen = hook?.afterHandle?.length ?? 0;
542
- code += beginTrace("afterHandle", afLen);
543
- if (hasAfterHandle) {
544
- link(hook.afterHandle, "af");
545
- code += require_compile_handler_utils.mapAfterHandle(hook.afterHandle, buildReport("afterHandle"));
546
- }
547
- code += endTrace();
548
- }
549
- if (hasMapResponse || hasTrace) {
550
- const mrLen = hook?.mapResponse?.length ?? 0;
551
- code += beginTrace("mapResponse", mrLen);
552
- if (hasMapResponse) {
553
- link(hook.mapResponse, "mr");
554
- code += require_compile_handler_utils.mapMapResponse(hook.mapResponse, buildReport("mapResponse"));
555
- }
556
- code += endTrace();
557
- }
558
- if (hasResponseValidator) {
559
- link(vali, "va");
560
- link(require_error.ElysiaStatus, "es");
561
- const awaitStr = responseValiAsync ? "await " : "";
562
- code += `if(_r instanceof es){
563
- const _vr=va.response[_r.code]
564
- if(_vr)_r.response=${awaitStr}_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}_vr.EncodeFrom(_r,'response')\n}\n`;
565
- }
566
- code += schedule;
567
- code += signPrefix;
568
- const finalMap = hasSet ? `${map}(_r,c.set,c.request)` : `${map}(_r,c.request)`;
569
- if (syncErrorHook) code += `if(_r instanceof Promise)return ${finalMap}.catch((_e)=>_ce(_e,c))\n`;
570
- code += `return ${finalMap}\n`;
571
- }
572
- } else if (isHandleFunction) {
573
- if (!isAsync) link(require_handler_utils.forwardError, "fe");
574
- const mapArgs = hasSet ? "c.set,c.request" : "c.request";
575
- code += (callHandlerSyncOnAsync ? `let _r=h(c)\nif(_r instanceof Promise)_r=await _r\n` : `let _r=${isAsync ? "await " : ""}h(c)\n`) + `if(_r instanceof Error)throw _r\n` + (isAsync ? `return ${map}(_r,${mapArgs})\n` : syncErrorHook ? `if(_r instanceof Promise)return ${map}(_r.then(fe),${mapArgs}).catch((_e)=>_ce(_e,c))\nreturn ${map}(_r,${mapArgs})\n` : `if(_r instanceof Promise)_r=_r.then(fe)\nreturn ${map}(_r,${mapArgs})\n`);
576
- } else code += `return ${mapReturn}`;
577
- if (hasErrorHook || hasTrace) {
578
- let body = "";
579
- if (hasTrace) {
580
- for (let i = 0; i < traceCount; i++) body += `rp${i}?.resolve(e);rpc${i}?.(e)\n`;
581
- body += beginTrace("error", hook?.error?.length ?? 0);
582
- }
583
- if (hasErrorHook) {
584
- link(hook.error, "er");
585
- link(require_error.ElysiaStatus, "es");
586
- const allowUnsafeDetail = !!root["~config"]?.allowUnsafeValidationDetails;
587
- if (allowUnsafeDetail) link(require_error.ValidationError, "verr");
588
- body += `c.error=e\n` + (allowUnsafeDetail ? `if(e instanceof verr)e.allowUnsafeValidationDetails=true\n` : ``) + `if(e?.status)c.set.status=e.status
589
- else if(c.set.status===undefined||c.set.status===200)c.set.status=500
590
- let _r${hasMapResponse ? ",tmp" : ""}\n` + require_compile_handler_utils.mapError(hook.error, [
591
- map,
592
- link,
593
- res.map,
594
- (hasMapResponse ? `c.responseValue=_r\n` + require_compile_handler_utils.mapMapResponse(hook.mapResponse, void 0) : "") + endTrace() + schedule,
595
- signPrefix
596
- ]) + endTrace() + schedule + `if(typeof e?.toResponse==='function'){const _er=e.toResponse();if(_er instanceof Response){${signPrefix}return ${map}(_er,c.set,c.request)}}\nif(e instanceof es){${signPrefix}return ${map}(e,c.set,c.request)}\nif(e?.status){${signPrefix}return ${map}(e?.response??e?.message??'',c.set,c.request)}\nc.set.status=500\n` + signPrefix + `return ${map}(e?.message!=null?e.message:'Internal Server Error',c.set,c.request)\n`;
597
- } else {
598
- body += endTrace() + schedule;
599
- body += `throw e\n`;
600
- }
601
- if (syncErrorHook) {
602
- factoryHelpers += `function _ce(e,c){\n${body}}\n`;
603
- code += `}catch(e){return _ce(e,c)}\n`;
604
- } else code += `}catch(e){\n${body}}\n`;
605
- }
606
- code += "}";
607
- code = head + scheduleDecl + code;
608
- if (factoryHelpers) code = `(function(){\n${factoryHelpers}return ${code}})()`;
609
- if (!hasTrace && isHandleFunction && !inlineUnsafe) {
610
- if (alias === "rc" || !isAsync && !syncErrorHook && alias === "rc,fe") return createInlineHandler(res.compact ?? res.map, handler);
611
- else if (alias === "rm" || !isAsync && !syncErrorHook && alias === "rm,fe") return createInlineHandlerWithSet(res.map, handler);
612
- }
613
- if (!precomputedStatic) require_compile_aot.Capture.handler({
236
+ return require_compile_handler_jit.compileHandlerJit({
614
237
  method,
615
238
  path,
616
- alias,
617
- code
239
+ handler,
240
+ instance,
241
+ root,
242
+ hook,
243
+ adapter,
244
+ buildValidator,
245
+ isHandleFunction,
246
+ isStaticResponse,
247
+ isPromiseHandler
618
248
  });
619
- return new Function("h", alias, `return ${code}`)(handler, ...params);
620
249
  }
621
250
 
622
251
  //#endregion
623
252
  exports.buildNativeStaticResponse = buildNativeStaticResponse;
624
253
  exports.compileHandler = compileHandler;
625
254
  exports.composeRouteHook = composeRouteHook;
626
- exports.setCaptureHeaderShorthand = setCaptureHeaderShorthand;
255
+ exports.setCaptureHeaderShorthand = require_compile_handler_jit.setCaptureHeaderShorthand;