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.
- package/dist/adapter/bun/index.js +36 -21
- package/dist/adapter/bun/index.mjs +36 -21
- package/dist/adapter/utils.js +1 -0
- package/dist/adapter/utils.mjs +1 -0
- package/dist/adapter/web-standard/handler.js +8 -2
- package/dist/adapter/web-standard/handler.mjs +8 -2
- package/dist/base.d.ts +5 -0
- package/dist/base.js +109 -4
- package/dist/base.mjs +111 -6
- package/dist/compile/aot-capture.d.ts +2 -13
- package/dist/compile/aot-capture.js +5 -27
- package/dist/compile/aot-capture.mjs +6 -24
- package/dist/compile/aot-emit.js +1 -1
- package/dist/compile/aot-emit.mjs +1 -1
- package/dist/compile/aot.d.ts +1 -1
- package/dist/compile/aot.js +2 -2
- package/dist/compile/aot.mjs +2 -2
- package/dist/compile/handler/descriptor.d.ts +4 -8
- package/dist/compile/handler/descriptor.js +8 -21
- package/dist/compile/handler/descriptor.mjs +9 -21
- package/dist/compile/handler/index.d.ts +4 -3
- package/dist/compile/handler/index.js +16 -6
- package/dist/compile/handler/index.mjs +16 -7
- package/dist/compile/handler/jit.js +82 -76
- package/dist/compile/handler/jit.mjs +83 -77
- package/dist/compile/handler/params.d.ts +1 -4
- package/dist/compile/handler/params.js +3 -4
- package/dist/compile/handler/params.mjs +5 -5
- package/dist/compile/handler/reconstruct.d.ts +1 -1
- package/dist/compile/handler/static-clone-resolver.d.ts +6 -0
- package/dist/compile/handler/static-clone-resolver.js +8 -0
- package/dist/compile/handler/static-clone-resolver.mjs +7 -0
- package/dist/compile/handler/utils.d.ts +7 -7
- package/dist/compile/handler/utils.js +24 -20
- package/dist/compile/handler/utils.mjs +24 -20
- package/dist/compile/utils.js +7 -4
- package/dist/compile/utils.mjs +7 -4
- package/dist/context.js +3 -21
- package/dist/context.mjs +4 -22
- package/dist/cookie/index.d.ts +1 -2
- package/dist/cookie/index.js +0 -2
- package/dist/cookie/index.mjs +1 -2
- package/dist/cookie/lib.js +2 -1
- package/dist/cookie/lib.mjs +2 -1
- package/dist/cookie/utils.d.ts +3 -7
- package/dist/cookie/utils.js +9 -28
- package/dist/cookie/utils.mjs +11 -29
- package/dist/error.d.ts +40 -83
- package/dist/error.js +18 -19
- package/dist/error.mjs +18 -20
- package/dist/handler/error.js +4 -5
- package/dist/handler/error.mjs +4 -5
- package/dist/handler/fetch.js +31 -17
- package/dist/handler/fetch.mjs +32 -18
- package/dist/handler/utils.d.ts +3 -3
- package/dist/handler/utils.js +28 -17
- package/dist/handler/utils.mjs +28 -17
- package/dist/index.d.ts +3 -3
- package/dist/package.js +1 -1
- package/dist/package.mjs +1 -1
- package/dist/plugin/aot/core.d.ts +3 -7
- package/dist/plugin/aot/core.js +8 -18
- package/dist/plugin/aot/core.mjs +9 -17
- package/dist/plugin/aot/hooks.js +5 -1
- package/dist/plugin/aot/hooks.mjs +5 -1
- package/dist/trace.js +23 -10
- package/dist/trace.mjs +23 -10
- package/dist/type/bridge-live.d.ts +3 -2
- package/dist/type/bridge-live.js +4 -2
- package/dist/type/bridge-live.mjs +3 -2
- package/dist/type/bridge.d.ts +6 -4
- package/dist/type/bridge.js +9 -1
- package/dist/type/bridge.mjs +3 -1
- package/dist/type/coerce-plan.d.ts +2 -2
- package/dist/type/coerce-plan.js +0 -1
- package/dist/type/coerce-plan.mjs +2 -2
- package/dist/type/compat.js +2 -1
- package/dist/type/compat.mjs +3 -2
- package/dist/type/constants.d.ts +1 -1
- package/dist/type/shared.d.ts +1 -3
- package/dist/type/shared.js +0 -3
- package/dist/type/shared.mjs +1 -3
- package/dist/type/typebox-value-live.d.ts +4 -3
- package/dist/type/typebox-value-live.js +5 -3
- package/dist/type/typebox-value-live.mjs +4 -3
- package/dist/type/typebox-value.d.ts +11 -7
- package/dist/type/typebox-value.js +2 -1
- package/dist/type/typebox-value.mjs +1 -1
- package/dist/type/validator/index.d.ts +1 -1
- package/dist/type/validator/validator-cache.d.ts +1 -1
- package/dist/types.d.ts +10 -17
- package/dist/universal/file.d.ts +1 -3
- package/dist/universal/file.js +0 -2
- package/dist/universal/file.mjs +1 -2
- package/dist/universal/is-production.d.ts +1 -2
- package/dist/universal/is-production.js +1 -3
- package/dist/universal/is-production.mjs +2 -3
- package/dist/utils.d.ts +0 -1
- 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
|
|
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
|
|
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))
|
|
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
|
|
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
|
|
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))
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 +=
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
185
|
-
|
|
186
|
-
const
|
|
187
|
-
|
|
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 ?
|
|
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, [
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
355
|
+
const compactEligible = responseMode === "compact";
|
|
352
356
|
const res = adapter.response;
|
|
353
357
|
const responseMap = res.map;
|
|
354
|
-
const
|
|
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
|
|
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 &&
|
|
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
|
|
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
|
|
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
|
|
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 +=
|
|
425
|
-
if(_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
|
|
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
|
|
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=${
|
|
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
|
-
|
|
472
|
+
const deferSchedule = !!schedule;
|
|
466
473
|
code += signPrefix;
|
|
467
|
-
const finalMap =
|
|
468
|
-
|
|
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 +=
|
|
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
|
|
477
|
-
code +=
|
|
478
|
-
code += abortCheck() + `if(_r instanceof Error)throw _r\n` + (isAsync ? `return await ${
|
|
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
|
-
|
|
498
|
-
(hasMapResponse ? `c.responseValue=_r\n` + require_compile_handler_utils.mapMapResponse(hook.mapResponse, isAsync, void 0,
|
|
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
|
-
|
|
502
|
-
|
|
503
|
-
|
|
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(
|
|
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");
|