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