elysia 2.0.0-beta.2 → 2.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/bun/index.d.ts +18 -2
- package/dist/adapter/bun/index.js +467 -110
- package/dist/adapter/bun/index.mjs +467 -112
- package/dist/adapter/types.d.ts +2 -21
- package/dist/adapter/utils.d.ts +14 -3
- package/dist/adapter/utils.js +146 -87
- package/dist/adapter/utils.mjs +148 -90
- package/dist/adapter/web-standard/handler.d.ts +1 -1
- package/dist/adapter/web-standard/handler.js +47 -36
- package/dist/adapter/web-standard/handler.mjs +48 -37
- package/dist/adapter/web-standard/index.js +2 -30
- package/dist/adapter/web-standard/index.mjs +2 -30
- package/dist/adapter/web-standard/utils.js +5 -18
- package/dist/adapter/web-standard/utils.mjs +5 -18
- package/dist/base.d.ts +99 -67
- package/dist/base.js +678 -510
- package/dist/base.mjs +682 -514
- package/dist/compile/aot-capture.d.ts +2 -13
- package/dist/compile/aot-capture.js +26 -69
- package/dist/compile/aot-capture.mjs +28 -67
- package/dist/compile/aot-emit.d.ts +9 -7
- package/dist/compile/aot-emit.js +42 -19
- package/dist/compile/aot-emit.mjs +42 -20
- package/dist/compile/aot.d.ts +17 -19
- package/dist/compile/aot.js +41 -51
- package/dist/compile/aot.mjs +39 -49
- package/dist/compile/handler/descriptor.d.ts +9 -12
- package/dist/compile/handler/descriptor.js +19 -44
- package/dist/compile/handler/descriptor.mjs +20 -42
- package/dist/compile/handler/frozen-validator.d.ts +5 -10
- package/dist/compile/handler/frozen-validator.js +55 -105
- package/dist/compile/handler/frozen-validator.mjs +53 -105
- package/dist/compile/handler/index.d.ts +7 -5
- package/dist/compile/handler/index.js +270 -111
- package/dist/compile/handler/index.mjs +270 -113
- package/dist/compile/handler/jit.d.ts +19 -17
- package/dist/compile/handler/jit.js +222 -149
- package/dist/compile/handler/jit.mjs +224 -152
- package/dist/compile/handler/params.d.ts +1 -4
- package/dist/compile/handler/params.js +10 -5
- package/dist/compile/handler/params.mjs +14 -8
- package/dist/compile/handler/reconstruct.d.ts +2 -2
- package/dist/compile/handler/reconstruct.js +6 -4
- package/dist/compile/handler/reconstruct.mjs +6 -4
- 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 +22 -11
- package/dist/compile/handler/utils.js +159 -253
- package/dist/compile/handler/utils.mjs +155 -252
- package/dist/compile/jit-probe.d.ts +2 -2
- package/dist/compile/jit-probe.js +2 -3
- package/dist/compile/jit-probe.mjs +2 -3
- package/dist/compile/lexer.d.ts +7 -4
- package/dist/compile/lexer.js +268 -6
- package/dist/compile/lexer.mjs +268 -4
- package/dist/compile/utils.js +7 -4
- package/dist/compile/utils.mjs +7 -4
- package/dist/compiled.d.ts +0 -1
- package/dist/compiled.js +0 -1
- package/dist/compiled.mjs +0 -1
- package/dist/context.d.ts +14 -4
- package/dist/context.js +17 -32
- package/dist/context.mjs +19 -34
- package/dist/cookie/config.d.ts +7 -2
- package/dist/cookie/config.js +76 -16
- package/dist/cookie/config.mjs +77 -18
- package/dist/cookie/cookie.d.ts +1 -1
- package/dist/cookie/cookie.js +8 -10
- package/dist/cookie/cookie.mjs +8 -10
- package/dist/cookie/crypto.d.ts +8 -7
- package/dist/cookie/crypto.js +51 -40
- package/dist/cookie/crypto.mjs +51 -41
- package/dist/cookie/error.d.ts +1 -2
- package/dist/cookie/error.js +6 -4
- package/dist/cookie/error.mjs +6 -4
- package/dist/cookie/lib.js +7 -2
- package/dist/cookie/lib.mjs +7 -2
- package/dist/cookie/serialize.js +1 -1
- package/dist/cookie/serialize.mjs +1 -1
- package/dist/cookie/types.d.ts +10 -0
- package/dist/cookie/utils.d.ts +4 -8
- package/dist/cookie/utils.js +86 -52
- package/dist/cookie/utils.mjs +89 -54
- package/dist/error.d.ts +113 -103
- package/dist/error.js +181 -117
- package/dist/error.mjs +179 -118
- package/dist/generation.d.ts +2 -2
- package/dist/handler/error.d.ts +26 -15
- package/dist/handler/error.js +77 -96
- package/dist/handler/error.mjs +74 -97
- package/dist/handler/fetch.js +87 -108
- package/dist/handler/fetch.mjs +89 -110
- package/dist/handler/utils.d.ts +12 -6
- package/dist/handler/utils.js +84 -28
- package/dist/handler/utils.mjs +80 -28
- package/dist/index.d.ts +12 -12
- package/dist/index.js +2 -9
- package/dist/index.mjs +1 -1
- package/dist/memory.js +1 -1
- package/dist/memory.mjs +1 -1
- package/dist/package.js +1 -1
- package/dist/package.mjs +1 -1
- package/dist/plugin/aot/bun.d.ts +8 -1
- package/dist/plugin/aot/bun.js +16 -9
- package/dist/plugin/aot/bun.mjs +17 -10
- package/dist/plugin/aot/core.d.ts +52 -60
- package/dist/plugin/aot/core.js +208 -109
- package/dist/plugin/aot/core.mjs +205 -111
- package/dist/plugin/aot/esbuild.js +8 -5
- package/dist/plugin/aot/esbuild.mjs +9 -6
- package/dist/plugin/aot/hooks.d.ts +6 -17
- package/dist/plugin/aot/hooks.js +36 -14
- package/dist/plugin/aot/hooks.mjs +37 -16
- package/dist/plugin/aot/rspack-loader.d.ts +1 -5
- package/dist/plugin/aot/rspack-loader.js +1 -10
- package/dist/plugin/aot/rspack-loader.mjs +1 -10
- package/dist/plugin/aot/rspack.js +2 -5
- package/dist/plugin/aot/rspack.mjs +3 -6
- package/dist/plugin/aot/source.d.ts +6 -42
- package/dist/plugin/aot/source.js +71 -71
- package/dist/plugin/aot/source.mjs +72 -72
- package/dist/plugin/aot/treeshake.js +2 -6
- package/dist/plugin/aot/treeshake.mjs +2 -6
- package/dist/plugin/aot/unplugin.d.ts +1 -4
- package/dist/plugin/aot/unplugin.js +4 -13
- package/dist/plugin/aot/unplugin.mjs +4 -13
- package/dist/plugin/aot/vite.d.ts +2 -6
- package/dist/plugin/aot/worker.js +2 -2
- package/dist/plugin/aot/worker.mjs +2 -2
- package/dist/plugin/auto-head.js +1 -10
- package/dist/plugin/auto-head.mjs +1 -10
- package/dist/plugin/trace.d.ts +2 -1
- package/dist/route-table.d.ts +3 -0
- package/dist/route-table.js +16 -11
- package/dist/route-table.mjs +16 -11
- package/dist/schema-snapshot.d.ts +0 -4
- package/dist/schema-snapshot.js +32 -49
- package/dist/schema-snapshot.mjs +32 -49
- package/dist/sucrose.d.ts +6 -55
- package/dist/sucrose.js +103 -731
- package/dist/sucrose.mjs +102 -724
- package/dist/trace.d.ts +5 -8
- package/dist/trace.js +23 -134
- package/dist/trace.mjs +24 -135
- package/dist/type/bridge-live.d.ts +4 -2
- package/dist/type/bridge-live.js +6 -3
- package/dist/type/bridge-live.mjs +4 -2
- package/dist/type/bridge.d.ts +6 -4
- package/dist/type/bridge.js +17 -9
- package/dist/type/bridge.mjs +5 -3
- package/dist/type/coerce-plan.d.ts +5 -5
- package/dist/type/coerce-plan.js +41 -39
- package/dist/type/coerce-plan.mjs +43 -39
- package/dist/type/coerce.d.ts +3 -7
- package/dist/type/coerce.js +18 -75
- package/dist/type/coerce.mjs +19 -76
- package/dist/type/compat.d.ts +3 -0
- package/dist/type/compat.js +23 -14
- package/dist/type/compat.mjs +20 -10
- package/dist/type/elysia/array-buffer.d.ts +4 -1
- package/dist/type/elysia/array-buffer.js +17 -17
- package/dist/type/elysia/array-buffer.mjs +17 -17
- package/dist/type/elysia/array-string.js +2 -40
- package/dist/type/elysia/array-string.mjs +2 -39
- package/dist/type/elysia/array.js +5 -9
- package/dist/type/elysia/array.mjs +5 -9
- package/dist/type/elysia/boolean-string.js +2 -3
- package/dist/type/elysia/boolean-string.mjs +1 -1
- package/dist/type/elysia/boolean.js +3 -12
- package/dist/type/elysia/boolean.mjs +3 -11
- package/dist/type/elysia/cookie.d.ts +3 -4
- package/dist/type/elysia/cookie.js +5 -15
- package/dist/type/elysia/cookie.mjs +5 -15
- package/dist/type/elysia/date.js +13 -20
- package/dist/type/elysia/date.mjs +10 -16
- package/dist/type/elysia/file-type.d.ts +11 -4
- package/dist/type/elysia/file-type.js +17 -2
- package/dist/type/elysia/file-type.mjs +17 -3
- package/dist/type/elysia/file.d.ts +1 -3
- package/dist/type/elysia/file.js +11 -27
- package/dist/type/elysia/file.mjs +11 -12
- package/dist/type/elysia/files.js +7 -11
- package/dist/type/elysia/files.mjs +7 -10
- package/dist/type/elysia/form.js +2 -3
- package/dist/type/elysia/form.mjs +3 -3
- package/dist/type/elysia/integer-string.d.ts +1 -1
- package/dist/type/elysia/integer-string.js +4 -30
- package/dist/type/elysia/integer-string.mjs +5 -30
- package/dist/type/elysia/integer.js +3 -12
- package/dist/type/elysia/integer.mjs +3 -11
- package/dist/type/elysia/intersect.js +0 -5
- package/dist/type/elysia/intersect.mjs +0 -5
- package/dist/type/elysia/json-string.d.ts +7 -0
- package/dist/type/elysia/json-string.js +47 -0
- package/dist/type/elysia/json-string.mjs +46 -0
- package/dist/type/elysia/keep-config.d.ts +14 -0
- package/dist/type/elysia/keep-config.js +62 -0
- package/dist/type/elysia/keep-config.mjs +53 -0
- package/dist/type/elysia/maybe-empty.js +3 -4
- package/dist/type/elysia/maybe-empty.mjs +1 -1
- package/dist/type/elysia/nullable.js +2 -3
- package/dist/type/elysia/nullable.mjs +1 -1
- package/dist/type/elysia/number.d.ts +2 -1
- package/dist/type/elysia/number.js +19 -11
- package/dist/type/elysia/number.mjs +18 -10
- package/dist/type/elysia/numeric-enum.d.ts +1 -1
- package/dist/type/elysia/numeric-enum.js +4 -5
- package/dist/type/elysia/numeric-enum.mjs +3 -3
- package/dist/type/elysia/numeric.d.ts +4 -2
- package/dist/type/elysia/numeric.js +20 -17
- package/dist/type/elysia/numeric.mjs +19 -16
- package/dist/type/elysia/object-string.js +2 -37
- package/dist/type/elysia/object-string.mjs +2 -36
- package/dist/type/elysia/object.js +5 -9
- package/dist/type/elysia/object.mjs +5 -9
- package/dist/type/elysia/optional.js +8 -8
- package/dist/type/elysia/optional.mjs +7 -7
- package/dist/type/elysia/problem.d.ts +20 -0
- package/dist/type/elysia/problem.js +25 -0
- package/dist/type/elysia/problem.mjs +24 -0
- package/dist/type/elysia/string.js +4 -3
- package/dist/type/elysia/string.mjs +4 -2
- package/dist/type/elysia/uint8-array.d.ts +1 -1
- package/dist/type/elysia/uint8-array.js +5 -20
- package/dist/type/elysia/uint8-array.mjs +5 -19
- package/dist/type/elysia/union-enum.js +7 -8
- package/dist/type/elysia/union-enum.mjs +6 -6
- package/dist/type/elysia/union.js +0 -5
- package/dist/type/elysia/union.mjs +0 -5
- package/dist/type/elysia/utils.d.ts +2 -4
- package/dist/type/elysia/utils.js +10 -21
- package/dist/type/elysia/utils.mjs +7 -15
- package/dist/type/exports.d.ts +4 -2
- package/dist/type/exports.js +23 -2
- package/dist/type/exports.mjs +11 -2
- package/dist/type/index.d.ts +10 -2
- package/dist/type/index.js +62 -15
- package/dist/type/index.mjs +65 -11
- package/dist/type/shared.d.ts +3 -9
- package/dist/type/shared.js +44 -97
- package/dist/type/shared.mjs +43 -97
- package/dist/type/sync-require.d.ts +11 -0
- package/dist/type/sync-require.js +14 -0
- package/dist/type/sync-require.mjs +12 -0
- package/dist/type/typebox-system-lite.d.ts +2 -0
- package/dist/type/typebox-system-lite.js +34 -0
- package/dist/type/typebox-system-lite.mjs +3 -0
- package/dist/type/typebox-system-require.d.ts +7 -0
- package/dist/type/typebox-system-require.js +24 -0
- package/dist/type/typebox-system-require.mjs +23 -0
- package/dist/type/typebox-type-live.d.ts +11 -0
- package/dist/type/typebox-type-live.js +45 -0
- package/dist/type/typebox-type-live.mjs +20 -0
- package/dist/type/typebox-type.d.ts +34 -0
- package/dist/type/typebox-type.js +199 -0
- package/dist/type/typebox-type.mjs +86 -0
- package/dist/type/typebox-value-live.d.ts +11 -0
- package/dist/type/typebox-value-live.js +31 -0
- package/dist/type/typebox-value-live.mjs +13 -0
- package/dist/type/typebox-value-ops.d.ts +4 -0
- package/dist/type/typebox-value-ops.js +90 -0
- package/dist/type/typebox-value-ops.mjs +5 -0
- package/dist/type/typebox-value-require.d.ts +8 -0
- package/dist/type/typebox-value-require.js +28 -0
- package/dist/type/typebox-value-require.mjs +25 -0
- package/dist/type/typebox-value.d.ts +35 -0
- package/dist/type/typebox-value.js +161 -0
- package/dist/type/typebox-value.mjs +74 -0
- package/dist/type/utils.js +1 -10
- package/dist/type/utils.mjs +1 -10
- package/dist/type/validator/clean-safe.d.ts +2 -4
- package/dist/type/validator/clean-safe.js +15 -11
- package/dist/type/validator/clean-safe.mjs +16 -10
- package/dist/type/validator/custom-error.js +12 -16
- package/dist/type/validator/custom-error.mjs +11 -14
- package/dist/type/validator/default-precompute.d.ts +9 -1
- package/dist/type/validator/default-precompute.js +40 -77
- package/dist/type/validator/default-precompute.mjs +37 -74
- package/dist/type/validator/exact-mirror-live.d.ts +8 -0
- package/dist/type/validator/exact-mirror-live.js +22 -0
- package/dist/type/validator/exact-mirror-live.mjs +17 -0
- package/dist/type/validator/exact-mirror-require.d.ts +4 -0
- package/dist/type/validator/exact-mirror-require.js +11 -0
- package/dist/type/validator/exact-mirror-require.mjs +9 -0
- package/dist/type/validator/exact-mirror.js +8 -8
- package/dist/type/validator/exact-mirror.mjs +9 -8
- package/dist/type/validator/frozen-check.js +5 -6
- package/dist/type/validator/frozen-check.mjs +6 -7
- package/dist/type/validator/index.d.ts +1 -0
- package/dist/type/validator/index.js +169 -166
- package/dist/type/validator/index.mjs +162 -158
- package/dist/type/validator/string-codec-aot.d.ts +2 -1
- package/dist/type/validator/string-codec-aot.js +8 -2
- package/dist/type/validator/string-codec-aot.mjs +7 -2
- package/dist/type/validator/validator-cache.d.ts +5 -4
- package/dist/type/validator/validator-cache.js +41 -24
- package/dist/type/validator/validator-cache.mjs +40 -22
- package/dist/types.d.ts +263 -95
- package/dist/universal/constants.d.ts +2 -1
- package/dist/universal/constants.js +3 -1
- package/dist/universal/constants.mjs +2 -1
- package/dist/universal/env.js +2 -3
- package/dist/universal/env.mjs +2 -3
- package/dist/universal/file.d.ts +6 -4
- package/dist/universal/file.js +11 -16
- package/dist/universal/file.mjs +12 -16
- package/dist/universal/index.d.ts +2 -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/universal/server.d.ts +0 -272
- package/dist/utils.d.ts +43 -7
- package/dist/utils.js +181 -126
- package/dist/utils.mjs +168 -126
- package/dist/validator/index.d.ts +1 -1
- package/dist/validator/index.js +17 -30
- package/dist/validator/index.mjs +18 -31
- package/dist/validator/route.js +2 -1
- package/dist/validator/route.mjs +2 -1
- package/dist/ws/context.d.ts +8 -1
- package/dist/ws/context.js +68 -44
- package/dist/ws/context.mjs +67 -44
- package/dist/ws/parser.js +10 -20
- package/dist/ws/parser.mjs +10 -20
- package/dist/ws/route.d.ts +2 -2
- package/dist/ws/route.js +249 -141
- package/dist/ws/route.mjs +254 -146
- package/dist/ws/types.d.ts +2 -2
- package/package.json +23 -49
- package/dist/compile/analysis-cache.d.ts +0 -6
- package/dist/compile/analysis-cache.js +0 -12
- package/dist/compile/analysis-cache.mjs +0 -11
- package/dist/cookie/index.d.ts +0 -7
- package/dist/cookie/index.js +0 -13
- package/dist/cookie/index.mjs +0 -7
- package/dist/handler/index.d.ts +0 -2
- package/dist/handler/index.js +0 -5
- package/dist/handler/index.mjs +0 -3
|
@@ -10,53 +10,70 @@ 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;
|
|
21
|
+
/**
|
|
22
|
+
* @internal test hook: receives each route's emitted source. A sync-first
|
|
23
|
+
* route's async tail is a helper beside it, so `toString()` of the compiled
|
|
24
|
+
* handler does not show the whole pipeline
|
|
25
|
+
*/
|
|
26
|
+
let onEmit;
|
|
27
|
+
const setOnEmit = (fn) => {
|
|
28
|
+
onEmit = fn;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* @internal test hook: `false` compiles sync-first routes on the `async`
|
|
32
|
+
* lane instead, the reference the async tail is differentially tested
|
|
33
|
+
* against. `undefined` restores the default (see `tail` below)
|
|
34
|
+
*/
|
|
35
|
+
let asyncTailOn;
|
|
36
|
+
const setAsyncTail = (on) => {
|
|
37
|
+
asyncTailOn = on;
|
|
38
|
+
};
|
|
22
39
|
const setCaptureHeaderShorthand = (value) => {
|
|
23
40
|
captureHeaderShorthand = value;
|
|
24
41
|
};
|
|
25
|
-
function builtinParser(adapter, parse, link) {
|
|
42
|
+
function builtinParser(adapter, parse, link, arm) {
|
|
26
43
|
switch (parse) {
|
|
27
44
|
case "formdata":
|
|
28
45
|
case "multipart/form-data":
|
|
29
46
|
link(adapter.formData, "pf");
|
|
30
|
-
return
|
|
47
|
+
return `c.body=${awaitValue("pf(c)", arm)}\n`;
|
|
31
48
|
case "json":
|
|
32
49
|
case "application/json":
|
|
33
50
|
link(adapter.json, "pj");
|
|
34
|
-
return
|
|
51
|
+
return `c.body=${awaitValue("pj(c)", arm)}\n`;
|
|
35
52
|
case "urlencoded":
|
|
36
53
|
case "application/x-www-form-urlencoded":
|
|
37
54
|
link(adapter.urlencoded, "pu");
|
|
38
|
-
return
|
|
55
|
+
return `c.body=${awaitValue("pu(c)", arm)}\n`;
|
|
39
56
|
case "arrayBuffer":
|
|
40
57
|
case "application/octet-stream":
|
|
41
58
|
link(adapter.arrayBuffer, "pa");
|
|
42
|
-
return
|
|
59
|
+
return `c.body=${awaitValue("pa(c)", arm)}\n`;
|
|
43
60
|
case "text":
|
|
44
61
|
case "text/plain":
|
|
45
62
|
link(adapter.text, "pt");
|
|
46
|
-
return
|
|
63
|
+
return `c.body=${awaitValue("pt(c)", arm)}\n`;
|
|
47
64
|
case "none": return "";
|
|
48
65
|
default: throw new Error(`Unsupported content type: ${parse}`);
|
|
49
66
|
}
|
|
50
67
|
}
|
|
51
|
-
function parse(adapter,
|
|
52
|
-
|
|
68
|
+
function parse(adapter, hook, bodyVali, hasHeaders, link, report, arm) {
|
|
69
|
+
let parsers = hook?.parse;
|
|
53
70
|
if (typeof parsers === "string" || parsers?.length === 1 && typeof parsers[0] === "string") {
|
|
54
71
|
if (parsers.length === 1) parsers = parsers[0];
|
|
55
72
|
const builtinName = parsers;
|
|
56
73
|
const child = report?.resolveChild(builtinName);
|
|
57
74
|
const begin = child ? child.begin : "";
|
|
58
75
|
const end = child ? child.end() : "";
|
|
59
|
-
return begin + builtinParser(adapter, parsers, link) + end;
|
|
76
|
+
return begin + builtinParser(adapter, parsers, link, arm) + end;
|
|
60
77
|
}
|
|
61
78
|
let hasFn = false;
|
|
62
79
|
let hasType = false;
|
|
@@ -66,18 +83,18 @@ function parse(adapter, parsers, bodyVali, hasHeaders, link, report) {
|
|
|
66
83
|
break;
|
|
67
84
|
}
|
|
68
85
|
}
|
|
69
|
-
const bodyKind = hasFn ? void 0 :
|
|
86
|
+
const bodyKind = hasFn ? void 0 : schemaMediaKind(bodyVali?.schema);
|
|
70
87
|
let code = `let ct=((${hasHeaders ? "c.headers['content-type']" : "c.request.headers.get('content-type')"})||'')\nlet cti=ct.indexOf(";")
|
|
71
88
|
if(cti!==-1)ct=ct.slice(0,cti)
|
|
72
89
|
` + (hasFn ? "c.contentType=ct\n" : "");
|
|
73
90
|
if (parsers) for (let i = 0; i < parsers.length; i++) {
|
|
74
91
|
const parser = parsers[i];
|
|
75
92
|
if (typeof parser === "function") {
|
|
76
|
-
link(
|
|
93
|
+
link(hook, "ho");
|
|
77
94
|
const child = report?.resolveChild(parser.name || "anonymous");
|
|
78
95
|
if (i) code += "if(!hasBody){";
|
|
79
96
|
if (child) code += child.begin;
|
|
80
|
-
code +=
|
|
97
|
+
code += `_bp=ho.parse[${i}](c,ct)\n` + require_compile_handler_utils.awaitGuard(parser, true, "_bp", arm) + `c.body=_bp\n`;
|
|
81
98
|
code += "hasBody=c.body!==undefined\n";
|
|
82
99
|
if (child) code += child.end();
|
|
83
100
|
if (i) code += "}\n";
|
|
@@ -86,7 +103,7 @@ if(cti!==-1)ct=ct.slice(0,cti)
|
|
|
86
103
|
const child = report?.resolveChild(parser);
|
|
87
104
|
if (i) code += "if(!hasBody){\n";
|
|
88
105
|
if (child) code += child.begin;
|
|
89
|
-
code += builtinParser(adapter, parser, link);
|
|
106
|
+
code += builtinParser(adapter, parser, link, arm);
|
|
90
107
|
if (child) code += child.end();
|
|
91
108
|
if (i) code += "}\n";
|
|
92
109
|
break;
|
|
@@ -104,14 +121,14 @@ if(cti!==-1)ct=ct.slice(0,cti)
|
|
|
104
121
|
code += `if(ct&&!(${mediaGuard}))throw new es(415,'Unsupported Media Type')\n`;
|
|
105
122
|
link(require_error.ElysiaStatus, "es");
|
|
106
123
|
}
|
|
107
|
-
|
|
124
|
+
const value = `c.body=cj?${awaitValue("pj(c)", arm)}:${awaitValue("pd(c,ce)", arm)}\n`;
|
|
125
|
+
code += hasFn ? `if(!hasBody&&${guard}){${begin}${value}${end}}\n` : `if(${guard}){${begin}${value}${end}}\n`;
|
|
108
126
|
if (!bodyVali) link(require_compile_handler_utils.hasRequestBody, "hb");
|
|
109
127
|
link(adapter.json, "pj");
|
|
110
128
|
link(adapter.default, "pd");
|
|
111
129
|
}
|
|
112
130
|
return hasFn ? "let hasBody=false,_bp\n" + code : code;
|
|
113
131
|
}
|
|
114
|
-
const bodyMediaKind = (bodyVali) => schemaMediaKind(bodyVali?.schema);
|
|
115
132
|
function schemaMediaKind(schema) {
|
|
116
133
|
if (!schema || typeof schema !== "object" || "~standard" in schema) return;
|
|
117
134
|
const elyType = schema["~elyTyp"];
|
|
@@ -141,55 +158,45 @@ const fromArgs = (type, isAsync) => `'${type}'${isAsync ? ",true" : ""}`;
|
|
|
141
158
|
const createInlineHandler = (map, h) => ((c) => {
|
|
142
159
|
const r = h(c);
|
|
143
160
|
if (r instanceof Error) throw r;
|
|
144
|
-
if (r
|
|
161
|
+
if (typeof r?.then === "function") return Promise.resolve(r).then((v) => map(require_handler_utils.forwardError(v), c.request, true));
|
|
145
162
|
return map(r, c.request, true);
|
|
146
163
|
});
|
|
147
|
-
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
if (r instanceof Promise) return r.then((v) => map(require_handler_utils.forwardError(v), c.set, c.request, true));
|
|
151
|
-
return map(r, c.set, c.request, true);
|
|
152
|
-
});
|
|
153
|
-
const createInlineHandlerWithDefaultHeaders = (map, h) => ((c) => {
|
|
154
|
-
require_adapter_utils.materializeSetHeaders(c.set);
|
|
155
|
-
const r = h(c);
|
|
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));
|
|
158
|
-
return map(r, c.set, c.request, true);
|
|
159
|
-
});
|
|
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;
|
|
164
|
+
function compileHandlerJit(options, tailPass) {
|
|
165
|
+
const { method, path, handler, root, errorRoot, hook, adapter, isHandleFunction, isStaticResponse, isPromiseHandler, errorClasses, state, shape } = options;
|
|
166
|
+
const { vali, inference, cookieConfig, beforeHandlePrefix, traceHandlers, tracePhases, hasAnyPhase, traceHandleOn, descriptor: { async: isAsync, tail: tailRoute, 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
167
|
const hasStaticAfterResponse = !!hook?.afterResponse?.length;
|
|
163
|
-
const
|
|
168
|
+
const hasDeriveDispose = !!hook?.["~deriveEntries"]?.length;
|
|
169
|
+
const hasDynamicAfterResponse = !!inference.afterResponse || hasDeriveDispose;
|
|
170
|
+
const hasStl = (hasAfterResponse || hasTrace || hasDeriveDispose) && !syncAfterResponse;
|
|
171
|
+
const tail = tailRoute && (asyncTailOn ?? captureHeaderShorthand ?? require_universal_constants.isBun);
|
|
172
|
+
const asyncMode = tail ? tailPass ?? {
|
|
173
|
+
async: false,
|
|
174
|
+
n: 0,
|
|
175
|
+
live: hasStl ? ",_stl,_sv" : "",
|
|
176
|
+
sites: []
|
|
177
|
+
} : isAsync;
|
|
178
|
+
const plain = (code) => require_compile_handler_utils.tailPlain(asyncMode, code);
|
|
164
179
|
const seenKeys = new Set(["rt", "fre"]);
|
|
165
180
|
const paramValues = [errorRoot, require_handler_utils.finalizeRouteError];
|
|
166
181
|
const aliasKeys = [];
|
|
167
182
|
function link(v, key) {
|
|
168
|
-
if (v === 0) {
|
|
169
|
-
if (!seenKeys.has("ho")) {
|
|
170
|
-
seenKeys.add("ho");
|
|
171
|
-
paramValues.push(hook);
|
|
172
|
-
aliasKeys.push("ho");
|
|
173
|
-
}
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
183
|
if (!seenKeys.has(key)) {
|
|
177
184
|
seenKeys.add(key);
|
|
178
185
|
paramValues.push(v);
|
|
179
186
|
aliasKeys.push(key);
|
|
180
187
|
}
|
|
181
188
|
}
|
|
189
|
+
if (errorClasses) link(require_handler_utils.forwardErrorOf(errorClasses), "ie");
|
|
190
|
+
const fwd = errorClasses ? "ie" : "fe";
|
|
191
|
+
const rethrow = (v) => errorClasses ? `ie(${v})\n` : `if(${v} instanceof Error)throw ${v}\n`;
|
|
182
192
|
const abortOn = hasLifecycleHook && root["~config"]?.abortSignal !== false;
|
|
183
193
|
const abortPeek = "c['~sig']?.aborted";
|
|
184
|
-
const
|
|
185
|
-
let
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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` : "";
|
|
194
|
+
const arm = abortOn ? "_as??=(c['~sig']??=c.request.signal)" : "";
|
|
195
|
+
let abortSchedule = "";
|
|
196
|
+
let discard = "";
|
|
197
|
+
const abortCheck = () => abortOn ? plain(abortSchedule || discard ? `if(${abortPeek}){${discard}${abortSchedule}return emp.clone()}\n` : `if(${abortPeek})return emp.clone()\n`) : "";
|
|
198
|
+
const abortChainGuard = () => abortOn ? abortPeek : void 0;
|
|
199
|
+
const abortCatch = abortOn ? `if((${arm}).aborted)return emp.clone()\n` : "";
|
|
193
200
|
const phaseOn = (phase) => hasTrace && (tracePhases === null || tracePhases.has(phase));
|
|
194
201
|
const beginTrace = (phase, total, name = phase) => {
|
|
195
202
|
if (!phaseOn(phase)) return "";
|
|
@@ -208,7 +215,7 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
|
|
|
208
215
|
if (!phaseOn(phase)) return;
|
|
209
216
|
return { resolveChild(name) {
|
|
210
217
|
let begin = "";
|
|
211
|
-
for (let i = 0; i < traceCount; i++) begin += `rpc${i}=rp${i}.
|
|
218
|
+
for (let i = 0; i < traceCount; i++) begin += `rpc${i}=rp${i}.shift?.()?.({id:c.rid,event:'${phase}',name:${JSON.stringify(name)},begin:performance.now()})\n`;
|
|
212
219
|
return {
|
|
213
220
|
begin,
|
|
214
221
|
end(errBinding) {
|
|
@@ -220,14 +227,17 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
|
|
|
220
227
|
};
|
|
221
228
|
} };
|
|
222
229
|
};
|
|
223
|
-
const
|
|
224
|
-
|
|
230
|
+
const needsStaticClone = !isHandleFunction && !isStaticResponse && !isPromiseHandler && (hasAfterHandle || hasMapResponse) && typeof handler === "object" && handler !== null;
|
|
231
|
+
if (needsStaticClone) link(require_compile_handler_utils.cloneStaticValue, "scl");
|
|
232
|
+
const callHandler = () => isHandleFunction ? require_compile_handler_utils.awaitSite("h(c)", handler, asyncMode, "_r", arm) : isStaticResponse ? `_r=cr(h)\n` : isPromiseHandler ? `_r=h.then(cr)\n` : needsStaticClone ? `_r=scl(h)\n` : `_r=h\n`;
|
|
233
|
+
const stageSite = (call, target, fn, at = "") => require_compile_handler_utils.asyncTail(asyncMode) ? require_compile_handler_utils.tailStage(require_compile_handler_utils.asyncTail(asyncMode)) + require_compile_handler_utils.awaitSite(call, fn, asyncMode, target, at) + "}\n" : require_compile_handler_utils.awaitSite(call, fn, asyncMode, target, at);
|
|
234
|
+
let code = `${isAsync && !tail ? "async " : ""}function route(c){\n`;
|
|
225
235
|
if (abortOn) {
|
|
226
236
|
link(require_handler_utils.emptyResponse, "emp");
|
|
227
237
|
link(require_compile_handler_utils.armEntryAbort, "ea");
|
|
228
238
|
code += `if(ea(c))return emp.clone()\n`;
|
|
229
239
|
}
|
|
230
|
-
if (
|
|
240
|
+
if (hasStl) code += "let _stl,_sv\n";
|
|
231
241
|
if (asyncCookieSign) code += "let _sg\n";
|
|
232
242
|
if (hasTrace) {
|
|
233
243
|
const traceProvider = require_generation.resolvedTraceOf(root) ?? require_generation.resolvedTraceOf(errorRoot);
|
|
@@ -252,7 +262,7 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
|
|
|
252
262
|
code += "try{\n";
|
|
253
263
|
if (responseMode === "set-with-default-headers" && (inference.set || hasTrace)) {
|
|
254
264
|
link(require_adapter_utils.materializeSetHeaders, "msh");
|
|
255
|
-
code += `msh(c.set)\n
|
|
265
|
+
code += plain(`msh(c.set)\n`);
|
|
256
266
|
}
|
|
257
267
|
const hasHeaders = inference.headers || !!vali?.headers;
|
|
258
268
|
if (inference.query || vali?.query) {
|
|
@@ -266,18 +276,18 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
|
|
|
266
276
|
link(channels.object, "qo");
|
|
267
277
|
parseArgs += `${channels.array ? "" : ",undefined"},qo`;
|
|
268
278
|
}
|
|
269
|
-
code += `c.query=pq(c.request.url,c.qi${parseArgs})\n
|
|
279
|
+
code += plain(`c.query=pq(c.request.url,c.qi${parseArgs})\n`);
|
|
270
280
|
link(require_parse_query.parseQueryFromURL, "pq");
|
|
271
281
|
}
|
|
272
282
|
if (hasHeaders) {
|
|
273
|
-
if (captureHeaderShorthand === void 0 && require_compile_aot.Capture.isCapturing()) code += `c.headers=c.request.headers.toJSON?.()??Object.fromEntries(c.request.headers)\n
|
|
274
|
-
else code += `c.headers=${captureHeaderShorthand ?? require_universal_constants.hasHeaderShorthand ? "c.request.headers.toJSON()" : "Object.fromEntries(c.request.headers)"}\n
|
|
283
|
+
if (captureHeaderShorthand === void 0 && require_compile_aot.Capture.isCapturing()) code += plain(`c.headers=c.request.headers.toJSON?.()??Object.fromEntries(c.request.headers)\n`);
|
|
284
|
+
else code += plain(`c.headers=${captureHeaderShorthand ?? require_universal_constants.hasHeaderShorthand ? "c.request.headers.toJSON()" : "Object.fromEntries(c.request.headers)"}\n`);
|
|
275
285
|
inlineUnsafe = true;
|
|
276
286
|
}
|
|
277
287
|
if (hasBody) {
|
|
278
288
|
const parseLen = Array.isArray(hook?.parse) ? hook.parse.length : 0;
|
|
279
289
|
if (hasTrace) code += beginTrace("parse", parseLen);
|
|
280
|
-
const parseCode = parse(adapter.parse, hook
|
|
290
|
+
const parseCode = parse(adapter.parse, hook, vali?.body, hasHeaders, link, buildReport("parse"), arm);
|
|
281
291
|
const preserveParseStatus = seenKeys.has("es");
|
|
282
292
|
link(require_error.ParseError, "pe");
|
|
283
293
|
code += "try{\n" + parseCode + `}catch(e){${preserveParseStatus ? "if(e instanceof es)throw e\n" : ""}throw new pe(e)}\n`;
|
|
@@ -290,30 +300,30 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
|
|
|
290
300
|
if (transformLen) {
|
|
291
301
|
link(hook.transform, "tf");
|
|
292
302
|
if (isAsync) code += "let _tf\n";
|
|
293
|
-
code += require_compile_handler_utils.mapTransform(hook.transform, [
|
|
303
|
+
code += require_compile_handler_utils.mapTransform(hook.transform, [
|
|
304
|
+
asyncMode,
|
|
305
|
+
buildReport("transform"),
|
|
306
|
+
arm
|
|
307
|
+
], abortChainGuard(), require_compile_handler_utils.asyncTail(asyncMode));
|
|
294
308
|
}
|
|
295
309
|
code += endTrace("transform");
|
|
296
310
|
if (transformLen) code += abortCheck();
|
|
297
311
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
312
|
+
for (const [slot, slotIsAsync] of [
|
|
313
|
+
["body", bodyValiIsAsync],
|
|
314
|
+
["headers", headersValiIsAsync],
|
|
315
|
+
["params", paramsValiIsAsync],
|
|
316
|
+
["query", queryValiIsAsync]
|
|
317
|
+
]) if (vali?.[slot]) {
|
|
303
318
|
link(vali, "va");
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
if (vali?.params) {
|
|
307
|
-
link(vali, "va");
|
|
308
|
-
code += `c.params=${paramsValiIsAsync ? "await " : ""}va.params.From(c.params,${fromArgs("params", !!paramsValiIsAsync)})\n`;
|
|
309
|
-
}
|
|
310
|
-
if (vali?.query) {
|
|
311
|
-
link(vali, "va");
|
|
312
|
-
code += `c.query=${queryValiIsAsync ? "await " : ""}va.query.From(c.query,${fromArgs("query", !!queryValiIsAsync)})\n`;
|
|
319
|
+
const value = `va.${slot}.From(c.${slot},${fromArgs(slot, slotIsAsync)})`;
|
|
320
|
+
code += plain(`c.${slot}=${slotIsAsync ? awaitValue(value, arm) : value}\n`);
|
|
313
321
|
}
|
|
314
322
|
if (cookieConfig) {
|
|
323
|
+
const cookieStart = code.length;
|
|
315
324
|
link(require_cookie_utils.buildCookieJar, "bcj");
|
|
316
325
|
link(cookieConfig, "cc");
|
|
326
|
+
const asyncLazyVerify = asyncCookieSign && cookieConfig.verify === "lazy" && !vali?.cookie;
|
|
317
327
|
const cookieHeaderExpr = hasHeaders && !vali?.headers ? "c.headers['cookie']" : "c.request.headers.get('cookie')";
|
|
318
328
|
if (lazyCookieVerify) {
|
|
319
329
|
link(require_cookie_utils.parseCookieRawLazy, "pcrl");
|
|
@@ -334,42 +344,57 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
|
|
|
334
344
|
code += `let _ck=pcrsg(${cookieHeaderExpr},cc)\n`;
|
|
335
345
|
} else {
|
|
336
346
|
link(require_cookie_utils.parseCookieRaw, "pcr");
|
|
337
|
-
code += `let _ck
|
|
347
|
+
code += `let _ck=${awaitValue(`pcr(${cookieHeaderExpr},cc${asyncLazyVerify ? ",1" : ""})`, arm)}\n`;
|
|
338
348
|
}
|
|
339
349
|
if (vali?.cookie) {
|
|
340
350
|
link(vali, "va");
|
|
341
351
|
const cookieIsOptional = !!(hook?.cookie)?.["~optional"];
|
|
342
|
-
const
|
|
352
|
+
const value = `va.cookie.From(_ck,${fromArgs("cookie", !!cookieValidIsAsync)})`;
|
|
353
|
+
const validateExpr = `_ck=${cookieValidIsAsync ? awaitValue(value, arm) : value}\n`;
|
|
343
354
|
if (cookieIsOptional) code += `if(Object.keys(_ck).length){${validateExpr}}\n`;
|
|
344
355
|
else code += validateExpr;
|
|
345
356
|
}
|
|
346
357
|
code += `c.cookie=bcj(c.set,_ck,cc${deferDecode ? ",undefined,1" : ""})\n`;
|
|
347
358
|
}
|
|
359
|
+
code = code.slice(0, cookieStart) + plain(code.slice(cookieStart));
|
|
348
360
|
}
|
|
349
|
-
const
|
|
361
|
+
const compactEligible = responseMode === "compact";
|
|
350
362
|
const res = adapter.response;
|
|
351
363
|
const responseMap = res.map;
|
|
352
|
-
const
|
|
364
|
+
const responseCompact = compactEligible ? res.compact : void 0;
|
|
365
|
+
const portableCompact = compactEligible && (require_compile_aot.Capture.isAotBuildEnv() || require_compile_aot.Capture.isCapturing());
|
|
366
|
+
const hasSet = !compactEligible || !responseCompact && !portableCompact;
|
|
367
|
+
if (hasSet) link(responseMap, "rm");
|
|
368
|
+
else link(responseCompact, "rc");
|
|
369
|
+
const map = hasSet ? "rm" : "rc";
|
|
370
|
+
if (portableCompact) link(responseMap, "rm");
|
|
371
|
+
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)`;
|
|
353
372
|
if (isStaticResponse || isPromiseHandler) link(require_compile_handler_utils.cloneResponse, "cr");
|
|
354
|
-
const handleInstruction = isHandleFunction ? "h(c)" : isStaticResponse ? "cr(h)" : isPromiseHandler ? "h.then(cr)" : "h";
|
|
355
|
-
const mapReturn = hasSet ? `rm(${handleInstruction},c.set,c.request,true)\n` : `rc(${handleInstruction},c.request,true)\n`;
|
|
356
373
|
if (hasStaticAfterResponse) link(hook.afterResponse, "ar");
|
|
357
374
|
const drainTraceStream = traceHandleOn ? `let _ser\nif(_trs){try{for await(const v of _trs){}}catch(_te){_ser=_te}}\n` : "";
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
for (let i = 0; i < traceCount; i++) s += `tr${i}.r(_hr${i},_ser)\n`;
|
|
361
|
-
return s;
|
|
362
|
-
})() : "";
|
|
375
|
+
let resolveHandlePostDrain = "";
|
|
376
|
+
if (traceHandleOn) for (let i = 0; i < traceCount; i++) resolveHandlePostDrain += `tr${i}.r(_hr${i},_ser)\n`;
|
|
363
377
|
const traceNeedsSchedule = traceHandleOn || phaseOn("afterResponse");
|
|
364
|
-
|
|
365
|
-
const
|
|
366
|
-
const
|
|
367
|
-
const
|
|
368
|
-
const
|
|
378
|
+
if (hasDeriveDispose) link(require_handler_utils.drainDisposables, "dds");
|
|
379
|
+
const deriveDisposeOnly = hasDeriveDispose && !hasAfterResponse && !hasTrace;
|
|
380
|
+
const disposeGuard = deriveDisposeOnly ? "c['~dispose']&&" : "";
|
|
381
|
+
const scheduleAfterResponse = hasAfterResponse || traceNeedsSchedule || hasDeriveDispose ? (deriveDisposeOnly ? `if(c['~dispose']){\n` : "") + "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` : "") + (hasDeriveDispose ? `await dds(c)\n` : "") + endTrace("afterResponse") + `})\n` + (deriveDisposeOnly ? `}\n` : "") : "";
|
|
382
|
+
const dedupSchedule = !!scheduleAfterResponse && !syncAfterResponse && !syncErrorHook;
|
|
383
|
+
const scheduleArgs = tail ? "c,_stl" : "";
|
|
384
|
+
const scheduleDecl = dedupSchedule ? `function _sc(${scheduleArgs}){\n${scheduleAfterResponse}}\n` : "";
|
|
385
|
+
const schedule = dedupSchedule ? `_sc(${scheduleArgs})\n` : scheduleAfterResponse;
|
|
386
|
+
const syncScheduleDecl = syncAfterResponse && scheduleAfterResponse ? `function _scf(c,_stl){\n${scheduleAfterResponse}}\n` : "";
|
|
387
|
+
const catchSchedule = dedupSchedule ? `_sc(${scheduleArgs})\n` : syncScheduleDecl ? `_scf(c)\n` : "";
|
|
388
|
+
abortSchedule = hasDeriveDispose ? syncAfterResponse ? catchSchedule : schedule : "";
|
|
389
|
+
const freThenSchedule = (arg) => catchSchedule ? `if(c._arf)return fre(rt,c,${arg})\n${deriveDisposeOnly ? `if(c['~dispose'])` : ""}c._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`;
|
|
390
|
+
const mapThenSchedule = (s, onReject) => `if(typeof _m?.then==='function')return Promise.resolve(_m).then((_v)=>{\n${s}return _v\n},${onReject})\n` + s + `return _m\n`;
|
|
391
|
+
const signPrefix = syncCookieSign ? `scv(c.set.cookie,cc)\n` : asyncCookieSign ? `_sg=scv(c.set.cookie,cc)\nif(_sg){${arm ? `${arm}\n` : ""}await _sg}\n` : "";
|
|
369
392
|
if (syncCookieSign || asyncCookieSign) link(require_cookie_utils.signCookieValues, "scv");
|
|
370
393
|
let factoryHelpers = "";
|
|
394
|
+
let tailCatch = -1;
|
|
371
395
|
if (hasBeforeHandle || hasAfterHandle || hasMapResponse || hasAfterResponse || hasResponseValidator || hasCookieSign || hasTrace) {
|
|
372
|
-
code += `let _r,tmp\n`;
|
|
396
|
+
code += `let _r${require_compile_handler_utils.asyncTail(asyncMode) ? "=_lr" : ""},tmp${hasDeriveDispose ? ",_v" : ""}\n`;
|
|
397
|
+
if (typeof asyncMode === "object") asyncMode.r = true;
|
|
373
398
|
if (hasBeforeHandle || hasTrace) {
|
|
374
399
|
const bfLen = (beforeHandlePrefix?.length ?? 0) + (hook?.beforeHandle?.length ?? 0);
|
|
375
400
|
code += beginTrace("beforeHandle", bfLen);
|
|
@@ -379,7 +404,7 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
|
|
|
379
404
|
const rbpAbort = abortOn ? ",1" : "";
|
|
380
405
|
if (isAsync) {
|
|
381
406
|
link(require_compile_handler_utils.runBeforeHandlePrefixAsync, "rbp");
|
|
382
|
-
code += `tmp
|
|
407
|
+
code += `tmp=${awaitValue(`rbp(bp,c${rbpAbort})`, arm)}\n`;
|
|
383
408
|
} else {
|
|
384
409
|
link(require_compile_handler_utils.runBeforeHandlePrefix, "rbp");
|
|
385
410
|
code += `tmp=rbp(bp,c${rbpAbort})\n`;
|
|
@@ -390,53 +415,53 @@ function compileHandlerJit({ method, path, handler, root, errorRoot, hook, adapt
|
|
|
390
415
|
link(hook.beforeHandle, "bf");
|
|
391
416
|
const deriveEntries = hook["~deriveEntries"];
|
|
392
417
|
const chainGuard = abortChainGuard();
|
|
393
|
-
const mapped = require_compile_handler_utils.mapBeforeHandle(hook.beforeHandle, deriveEntries, link,
|
|
418
|
+
const mapped = require_compile_handler_utils.mapBeforeHandle(hook.beforeHandle, deriveEntries, link, asyncMode, buildReport("beforeHandle"), chainGuard, arm);
|
|
394
419
|
code += beforeHandlePrefix ? `if(${chainGuard ? `!${chainGuard}&&` : ""}_r===undefined){\n${mapped}}\n` : mapped;
|
|
395
420
|
}
|
|
396
421
|
}
|
|
397
422
|
code += endTrace("beforeHandle");
|
|
398
423
|
if (hasBeforeHandle) code += abortCheck();
|
|
399
424
|
}
|
|
400
|
-
if (hasAfterResponse || traceHandleOn
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
425
|
+
if (hasAfterResponse || traceHandleOn || hasDeriveDispose) {
|
|
426
|
+
link(require_adapter_utils.tee, "tee");
|
|
427
|
+
link(require_adapter_utils.observeStream, "obs");
|
|
428
|
+
}
|
|
429
|
+
const teeBlock = (hasAfterResponse || traceHandleOn || hasDeriveDispose) && !syncAfterResponse ? `if(${disposeGuard}_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){\nconst _s=tee(_r,2)\n_sv=_r=_s[0]\n` + (traceHandleOn ? `_trs=_s[1]\n` : `_stl=_s[1]\n`) + `}else if(${disposeGuard}_r instanceof ReadableStream){const _o=obs(_r)\nif(_o){_r=_o[0];_stl=_o[1];_sv=_o[2]}}\n` : "";
|
|
404
430
|
if (traceHandleOn) {
|
|
405
431
|
const handleName = handler?.name && typeof handler.name === "string" ? handler.name : "anonymous";
|
|
406
432
|
code += beginTrace("handle", 1, handleName);
|
|
407
433
|
const handleChild = buildReport("handle").resolveChild(handleName);
|
|
408
434
|
code += handleChild.begin;
|
|
409
|
-
if (hasBeforeHandle) code += `if(_r===undefined){\n${callHandler}${teeBlock}}\n`;
|
|
410
|
-
else code += callHandler + teeBlock;
|
|
435
|
+
if (hasBeforeHandle) code += `if(_r===undefined){\n${callHandler()}${teeBlock}}\n`;
|
|
436
|
+
else code += callHandler() + teeBlock;
|
|
411
437
|
code += handleChild.end("_r");
|
|
412
438
|
code += `if(_trs){\n`;
|
|
413
439
|
for (let i = 0; i < traceCount; i++) code += `_hr${i}=rp${i};\n`;
|
|
414
440
|
code += `}else{\n`;
|
|
415
441
|
code += endTrace("handle");
|
|
416
442
|
code += `}\n`;
|
|
417
|
-
} else if (
|
|
418
|
-
else code += callHandler
|
|
443
|
+
} else if (isHandleFunction && require_compile_handler_utils.asyncTail(asyncMode)) code += require_compile_handler_utils.tailStage(require_compile_handler_utils.asyncTail(asyncMode), hasBeforeHandle ? "_r===undefined" : void 0) + callHandler() + teeBlock + "}\n";
|
|
444
|
+
else if (hasBeforeHandle) code += plain(`if(_r===undefined){\n${callHandler()}${teeBlock}}\n`);
|
|
445
|
+
else code += plain(callHandler() + teeBlock);
|
|
446
|
+
if (teeBlock) discard = "_sv?.return()\n";
|
|
419
447
|
code += abortCheck();
|
|
420
448
|
if (syncAfterResponse) {
|
|
421
|
-
link(require_handler_utils.forwardError, "fe");
|
|
422
|
-
factoryHelpers += `function _fin(c,_r){
|
|
423
|
-
if(_r
|
|
424
|
-
if(_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){
|
|
425
|
-
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`;
|
|
426
|
-
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";
|
|
449
|
+
if (!errorClasses) link(require_handler_utils.forwardError, "fe");
|
|
450
|
+
factoryHelpers += syncScheduleDecl + `function _fin(c,_r){\n` + rethrow("_r") + "if(_r&&(_r[Symbol.iterator]||_r[Symbol.asyncIterator])&&typeof _r.next==='function'){\nconst _s=tee(_r,2)\nreturn _fin2(c,_s[0],_s[1],_s[0])\n}\nif(_r instanceof ReadableStream){const _o=obs(_r)\nif(_o)return _fin2(c,_o[0],_o[1],_o[2])}\nreturn _fin2(c,_r)\n}\nfunction _fin2(c,_r,_stl,_sv){try{\nc.responseValue=_r\n" + signPrefix + `const _m=${mapValue("_r")}\n` + mapThenSchedule(syncScheduleDecl ? `_scf(c,_stl)\n` : scheduleAfterResponse, `(_e)=>{_sv?.return()\n${freThenSchedule("_e")}}`) + `}catch(_e){_sv?.return();throw _e}}\n`;
|
|
451
|
+
code += `if(typeof _r?.then==='function')return Promise.resolve(_r).then(${fwd}).then((_v)=>_fin(c,_v)).catch((_e)=>{${freThenSchedule("_e")}})\nreturn _fin(c,_r)\n`;
|
|
427
452
|
} else {
|
|
428
|
-
code +=
|
|
453
|
+
code += plain(rethrow("_r"));
|
|
429
454
|
if (!isAsync) {
|
|
430
|
-
link(require_handler_utils.forwardError, "fe");
|
|
431
|
-
code +=
|
|
455
|
+
if (!errorClasses) link(require_handler_utils.forwardError, "fe");
|
|
456
|
+
code += `${errorClasses ? "" : "else "}if(typeof _r?.then==='function')_r=Promise.resolve(_r).then(${fwd})\n`;
|
|
432
457
|
}
|
|
433
|
-
if (hasAfterHandle || hasMapResponse || hasAfterResponse || hasTrace) code += `c.responseValue=_r\n
|
|
458
|
+
if (hasAfterHandle || hasMapResponse || hasAfterResponse || hasTrace) code += plain(`c.responseValue=_r\n`);
|
|
434
459
|
if (hasAfterHandle || hasTrace) {
|
|
435
460
|
const afLen = hook?.afterHandle?.length ?? 0;
|
|
436
461
|
code += beginTrace("afterHandle", afLen);
|
|
437
462
|
if (hasAfterHandle) {
|
|
438
463
|
link(hook.afterHandle, "af");
|
|
439
|
-
code += require_compile_handler_utils.
|
|
464
|
+
code += require_compile_handler_utils.mapChainHook(hook.afterHandle, "af", asyncMode, buildReport("afterHandle"), abortChainGuard(), arm);
|
|
440
465
|
}
|
|
441
466
|
code += endTrace("afterHandle");
|
|
442
467
|
if (hasAfterHandle) code += abortCheck();
|
|
@@ -446,7 +471,7 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
|
|
|
446
471
|
code += beginTrace("mapResponse", mrLen);
|
|
447
472
|
if (hasMapResponse) {
|
|
448
473
|
link(hook.mapResponse, "mr");
|
|
449
|
-
code += require_compile_handler_utils.
|
|
474
|
+
code += require_compile_handler_utils.mapChainHook(hook.mapResponse, "mr", asyncMode, buildReport("mapResponse"), abortChainGuard(), arm);
|
|
450
475
|
}
|
|
451
476
|
code += endTrace("mapResponse");
|
|
452
477
|
if (hasMapResponse) code += abortCheck();
|
|
@@ -454,27 +479,34 @@ const _s=tee(_r,${teeCount})\nreturn _fin2(c,_s[0],_s[1])\n}\nreturn _fin2(c,_r,
|
|
|
454
479
|
if (hasResponseValidator) {
|
|
455
480
|
link(vali, "va");
|
|
456
481
|
link(require_error.ElysiaStatus, "es");
|
|
457
|
-
const
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
482
|
+
const encodeStatus = responseValiAsync ? `(_vr.mayReturnPromise?_vr.From(_r.response,'response',true):_vr.EncodeFrom(_r.response,'response'))` : `_vr.EncodeFrom(_r.response,'response')`;
|
|
483
|
+
const encodeBody = responseValiAsync ? `(_vr.mayReturnPromise?_vr.From(_r,'response',true):_vr.EncodeFrom(_r,'response'))` : `_vr.EncodeFrom(_r,'response')`;
|
|
484
|
+
code += plain(`if(_r instanceof es){
|
|
485
|
+
const _vr=va.response[_r.status]
|
|
486
|
+
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`);
|
|
461
487
|
code += abortCheck();
|
|
462
488
|
}
|
|
463
|
-
|
|
464
|
-
code += signPrefix;
|
|
465
|
-
const finalMap =
|
|
466
|
-
|
|
489
|
+
const deferSchedule = !!schedule;
|
|
490
|
+
code += plain(signPrefix);
|
|
491
|
+
const finalMap = mapValue("_r");
|
|
492
|
+
const onMapReject = syncErrorHook ? `(_e)=>_ce(_e,c)` : dedupSchedule ? `(_e)=>{${freThenSchedule("_e")}}` : `(_e)=>fre(rt,c,_e)`;
|
|
493
|
+
if (tail) code += `let _m\n${stageSite(finalMap, "_m")}` + (deferSchedule ? schedule : "") + `return _m\n`;
|
|
494
|
+
else if (isAsync) code += deferSchedule ? `const _m=await ${finalMap}\n${schedule}return _m\n` : `return await ${finalMap}\n`;
|
|
467
495
|
else {
|
|
468
496
|
code += `const _m=${finalMap}\n`;
|
|
469
|
-
code +=
|
|
497
|
+
code += deferSchedule ? mapThenSchedule(schedule, onMapReject) : `return typeof _m?.then==='function'?Promise.resolve(_m).catch(${onMapReject}):_m\n`;
|
|
470
498
|
}
|
|
471
499
|
}
|
|
472
500
|
} else if (isHandleFunction) {
|
|
473
|
-
if (!isAsync) link(require_handler_utils.forwardError, "fe");
|
|
474
|
-
const
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
501
|
+
if (!isAsync && !errorClasses) link(require_handler_utils.forwardError, "fe");
|
|
502
|
+
const finalMap = mapValue("_r");
|
|
503
|
+
if (typeof asyncMode === "object") {
|
|
504
|
+
code += `let _r${require_compile_handler_utils.asyncTail(asyncMode) ? "=_lr" : ""}\n`;
|
|
505
|
+
asyncMode.r = true;
|
|
506
|
+
code += stageSite("h(c)", "_r", handler, arm);
|
|
507
|
+
} else code += `let ${callHandler()}`;
|
|
508
|
+
code += abortCheck() + plain(rethrow("_r")) + (tail ? `let _m\n${stageSite(finalMap, "_m")}return _m\n` : isAsync ? `return await ${finalMap}\n` : `if(typeof _r?.then==='function')_r=Promise.resolve(_r).then(${fwd})\nconst _m=${finalMap}\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>${syncErrorHook ? "_ce(_e,c)" : "fre(rt,c,_e)"}):_m\n`);
|
|
509
|
+
} else code += plain(`const _m=${mapValue(isStaticResponse ? "cr(h)" : isPromiseHandler ? "h.then(cr)" : "h")}\nreturn typeof _m?.then==='function'?Promise.resolve(_m).catch((_e)=>fre(rt,c,_e)):_m\n`);
|
|
478
510
|
if (hasErrorHook || hasTrace) {
|
|
479
511
|
let body = "";
|
|
480
512
|
if (hasTrace) {
|
|
@@ -486,28 +518,48 @@ if(_vr)_r.response=${awaitStr}${responseValiAsync ? `(_vr.mayReturnPromise?_vr.F
|
|
|
486
518
|
link(require_handler_error.fallbackResponse, "fbr");
|
|
487
519
|
const allowUnsafeDetail = !!root["~config"]?.allowUnsafeValidationDetails;
|
|
488
520
|
if (allowUnsafeDetail) link(require_error.ValidationError, "verr");
|
|
489
|
-
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";
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
521
|
+
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";
|
|
522
|
+
const errorHead = plain(`c.error=e\n` + (allowUnsafeDetail ? `if(e instanceof verr)e.allowUnsafeValidationDetails=true\n` : ``) + "if(e?.status)c.set.status=e.status\nelse if(c.set.status===undefined||c.set.status===200)c.set.status=500\n");
|
|
523
|
+
if (typeof asyncMode === "object") {
|
|
524
|
+
tailCatch = asyncMode.n;
|
|
525
|
+
asyncMode.r = false;
|
|
526
|
+
asyncMode.e = true;
|
|
527
|
+
}
|
|
528
|
+
body += errorHead + `let _r${hasMapResponse ? ",tmp" : ""}\n` + require_compile_handler_utils.mapError(hook.error, [
|
|
493
529
|
map,
|
|
494
530
|
link,
|
|
495
|
-
|
|
496
|
-
(hasMapResponse ? `c.responseValue=_r\n` + require_compile_handler_utils.
|
|
531
|
+
responseMap,
|
|
532
|
+
(hasMapResponse ? `c.responseValue=_r\n` + require_compile_handler_utils.mapChainHook(hook.mapResponse, "mr", asyncMode, void 0, abortChainGuard(), arm) : "") + endTrace("error") + (hasDeriveDispose ? schedule + abortCatch : abortCatch + schedule),
|
|
497
533
|
signPrefix,
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
}
|
|
534
|
+
asyncMode,
|
|
535
|
+
arm
|
|
536
|
+
], abortChainGuard(), require_compile_handler_utils.asyncTail(asyncMode)) + endTrace("error") + (hasDeriveDispose ? schedule + abortCatch : abortCatch + schedule) + `return _efb(e,c)\n`;
|
|
537
|
+
} else body += endTrace("error") + freThenSchedule("e");
|
|
538
|
+
const hookThrew = `catch(_ee){${freThenSchedule("_ee").trimEnd()}}}\n`;
|
|
504
539
|
if (syncErrorHook) {
|
|
505
|
-
factoryHelpers += `function _ce(e,c){${abortOn ? "let _as\n" : ""}try{\n${body}}
|
|
540
|
+
factoryHelpers += `function _ce(e,c){${abortOn ? "let _as\n" : ""}try{\n${body}}${hookThrew}`;
|
|
506
541
|
code += `}catch(e){return _ce(e,c)}\n`;
|
|
507
|
-
} else code += `}catch(e){try{\n${body}}
|
|
508
|
-
} else code += `}catch(e){return fre(rt,c,e)}\n`;
|
|
542
|
+
} else code += `}catch(e){try{\n${body}}${hookThrew}`;
|
|
543
|
+
} else code += catchSchedule ? `}catch(e){${freThenSchedule("e")}}\n` : `}catch(e){return fre(rt,c,e)}\n`;
|
|
544
|
+
if (tailPass) return code;
|
|
509
545
|
code += "}";
|
|
510
|
-
code = head + (abortOn && code.includes("_as") ? "let _as\n" : "") + scheduleDecl + code;
|
|
546
|
+
code = head + (abortOn && code.includes("_as") ? "let _as\n" : "") + (abortOn && code.includes("_av") ? "let _av\n" : "") + (tail ? "" : scheduleDecl) + code;
|
|
547
|
+
if (tail) {
|
|
548
|
+
const { n, live, sites } = asyncMode;
|
|
549
|
+
const pass = {
|
|
550
|
+
async: true,
|
|
551
|
+
n: 0,
|
|
552
|
+
live,
|
|
553
|
+
sites: []
|
|
554
|
+
};
|
|
555
|
+
const pipeline = compileHandlerJit(options, pass);
|
|
556
|
+
if (pass.sites.join("\n") !== sites.join("\n") || !pipeline.startsWith("try{\n")) throw new Error("[elysia] async tail out of step with its route");
|
|
557
|
+
factoryHelpers += scheduleDecl + `async function _t(c,_rk,_y,_lr,_le${live}){\n` + (abortOn && pipeline.includes("_as") ? "let _as\n" : "") + "try{\n" + (tailCatch !== -1 && tailCatch < n ? `if(_rk>=${tailCatch})throw _le\n` : "") + pipeline.slice(5) + "}\n";
|
|
558
|
+
}
|
|
559
|
+
if (syncCookieSign || asyncCookieSign) {
|
|
560
|
+
code = code.replaceAll("fre(rt,c,", "_sfre(rt,c,");
|
|
561
|
+
factoryHelpers = factoryHelpers.replaceAll("fre(rt,c,", "_sfre(rt,c,") + `function _sgn(s){return scv(s.cookie,cc)}\nfunction _sfre(rt,c,e){return fre(rt,c,e,_sgn)}\n`;
|
|
562
|
+
}
|
|
511
563
|
if (factoryHelpers) code = `(function(){\n${factoryHelpers}return ${code}})()`;
|
|
512
564
|
const alias = aliasKeys.join(",");
|
|
513
565
|
const fullAlias = alias ? `rt,fre,${alias}` : "rt,fre";
|
|
@@ -515,12 +567,32 @@ let _r${hasMapResponse ? ",tmp" : ""}\n` + require_compile_handler_utils.mapErro
|
|
|
515
567
|
method,
|
|
516
568
|
path,
|
|
517
569
|
alias: fullAlias,
|
|
518
|
-
code
|
|
570
|
+
code,
|
|
571
|
+
k: shape
|
|
519
572
|
});
|
|
573
|
+
onEmit?.(code);
|
|
520
574
|
const isGeneratorHandler = isHandleFunction && handler.constructor.name.endsWith("GeneratorFunction");
|
|
521
575
|
if (!hasTrace && isHandleFunction && !isGeneratorHandler && !inlineUnsafe) {
|
|
522
|
-
if (alias === "rc" || !isAsync && !syncErrorHook && alias === "rc,fe") return createInlineHandler(
|
|
523
|
-
else if (alias === "rm" || alias === "msh,rm" || !isAsync && !syncErrorHook && (alias === "rm,fe" || alias === "msh,rm,fe"))
|
|
576
|
+
if (alias === "rc" || !isAsync && !syncErrorHook && alias === "rc,fe") return createInlineHandler(responseCompact, handler);
|
|
577
|
+
else if (alias === "rm" || alias === "msh,rm" || !isAsync && !syncErrorHook && (alias === "rm,fe" || alias === "msh,rm,fe")) {
|
|
578
|
+
const rmap = responseMap;
|
|
579
|
+
const h = handler;
|
|
580
|
+
let inlineHandler;
|
|
581
|
+
if (responseMode === "set-with-default-headers" && inference.set) inlineHandler = ((c) => {
|
|
582
|
+
require_adapter_utils.materializeSetHeaders(c.set);
|
|
583
|
+
const r = h(c);
|
|
584
|
+
if (r instanceof Error) throw r;
|
|
585
|
+
if (typeof r?.then === "function") return Promise.resolve(r).then((v) => rmap(require_handler_utils.forwardError(v), c.set, c.request, true));
|
|
586
|
+
return rmap(r, c.set, c.request, true);
|
|
587
|
+
});
|
|
588
|
+
else inlineHandler = ((c) => {
|
|
589
|
+
const r = h(c);
|
|
590
|
+
if (r instanceof Error) throw r;
|
|
591
|
+
if (typeof r?.then === "function") return Promise.resolve(r).then((v) => rmap(require_handler_utils.forwardError(v), c.set, c.request, true));
|
|
592
|
+
return rmap(r, c.set, c.request, true);
|
|
593
|
+
});
|
|
594
|
+
return inlineHandler;
|
|
595
|
+
}
|
|
524
596
|
}
|
|
525
597
|
require_compile_jit_probe.JITProbe.record("handler:new-function");
|
|
526
598
|
return new Function("h", fullAlias, `return ${code}`)(handler, ...paramValues);
|
|
@@ -529,5 +601,6 @@ let _r${hasMapResponse ? ",tmp" : ""}\n` + require_compile_handler_utils.mapErro
|
|
|
529
601
|
//#endregion
|
|
530
602
|
exports.compileHandlerJit = compileHandlerJit;
|
|
531
603
|
exports.createInlineHandler = createInlineHandler;
|
|
532
|
-
exports.
|
|
533
|
-
exports.setCaptureHeaderShorthand = setCaptureHeaderShorthand;
|
|
604
|
+
exports.setAsyncTail = setAsyncTail;
|
|
605
|
+
exports.setCaptureHeaderShorthand = setCaptureHeaderShorthand;
|
|
606
|
+
exports.setOnEmit = setOnEmit;
|