@timber-js/app 0.2.0-alpha.98 → 0.2.0-alpha.99
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/LICENSE +8 -0
- package/dist/_chunks/actions-CQ8Z8VGL.js +1061 -0
- package/dist/_chunks/actions-CQ8Z8VGL.js.map +1 -0
- package/dist/_chunks/build-output-helper-DXnW0qjz.js +61 -0
- package/dist/_chunks/build-output-helper-DXnW0qjz.js.map +1 -0
- package/dist/_chunks/{define-Itxvcd7F.js → define-B-Q_UMOD.js} +19 -23
- package/dist/_chunks/define-B-Q_UMOD.js.map +1 -0
- package/dist/_chunks/{define-C77ScO0m.js → define-CfBPoJb0.js} +24 -7
- package/dist/_chunks/define-CfBPoJb0.js.map +1 -0
- package/dist/_chunks/define-cookie-BjpIt4UC.js +194 -0
- package/dist/_chunks/define-cookie-BjpIt4UC.js.map +1 -0
- package/dist/_chunks/{format-CYBGxKtc.js → format-Bcn-Iv1x.js} +1 -1
- package/dist/_chunks/{format-CYBGxKtc.js.map → format-Bcn-Iv1x.js.map} +1 -1
- package/dist/_chunks/handler-store-B-lqaGyh.js +54 -0
- package/dist/_chunks/handler-store-B-lqaGyh.js.map +1 -0
- package/dist/_chunks/logger-0m8MsKdc.js +291 -0
- package/dist/_chunks/logger-0m8MsKdc.js.map +1 -0
- package/dist/_chunks/merge-search-params-BphMdht_.js +122 -0
- package/dist/_chunks/merge-search-params-BphMdht_.js.map +1 -0
- package/dist/_chunks/navigation-root-BCYczjml.js +96 -0
- package/dist/_chunks/navigation-root-BCYczjml.js.map +1 -0
- package/dist/_chunks/registry-I2ss-lvy.js +20 -0
- package/dist/_chunks/registry-I2ss-lvy.js.map +1 -0
- package/dist/_chunks/router-ref-h3-UaCQv.js +28 -0
- package/dist/_chunks/router-ref-h3-UaCQv.js.map +1 -0
- package/dist/_chunks/{schema-bridge-C3xl_vfb.js → schema-bridge-Cxu4l-7p.js} +1 -1
- package/dist/_chunks/{schema-bridge-C3xl_vfb.js.map → schema-bridge-Cxu4l-7p.js.map} +1 -1
- package/dist/_chunks/{segment-context-fHFLF1PE.js → segment-context-Dx_OizxD.js} +1 -1
- package/dist/_chunks/{segment-context-fHFLF1PE.js.map → segment-context-Dx_OizxD.js.map} +1 -1
- package/dist/_chunks/{router-ref-C8OCm7g7.js → ssr-data-B4CdH7rE.js} +2 -26
- package/dist/_chunks/ssr-data-B4CdH7rE.js.map +1 -0
- package/dist/_chunks/{stale-reload-BX5gL1r-.js → stale-reload-Bab885FO.js} +1 -1
- package/dist/_chunks/{stale-reload-BX5gL1r-.js.map → stale-reload-Bab885FO.js.map} +1 -1
- package/dist/_chunks/tracing-C8V-YGsP.js +329 -0
- package/dist/_chunks/tracing-C8V-YGsP.js.map +1 -0
- package/dist/_chunks/{use-query-states-BiV5GJgm.js → use-query-states-B2XTqxDR.js} +3 -19
- package/dist/_chunks/use-query-states-B2XTqxDR.js.map +1 -0
- package/dist/_chunks/{use-params-IOPu7E8t.js → use-segment-params-BkpKAQ7D.js} +9 -95
- package/dist/_chunks/use-segment-params-BkpKAQ7D.js.map +1 -0
- package/dist/_chunks/{walkers-VOXgavMF.js → walkers-Tg0Alwcg.js} +6 -3
- package/dist/_chunks/walkers-Tg0Alwcg.js.map +1 -0
- package/dist/_chunks/{dev-warnings-DpGRGoDi.js → warnings-Cg47l5sk.js} +3 -3
- package/dist/_chunks/warnings-Cg47l5sk.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +28 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +8 -28
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +8 -26
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +16 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/cache/index.js +9 -2
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/client/error-boundary.js +2 -1
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/form.d.ts +10 -24
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/index.d.ts +1 -5
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +40 -90
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +2 -1
- package/dist/client/internal.d.ts.map +1 -1
- package/dist/client/internal.js +81 -7
- package/dist/client/internal.js.map +1 -1
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/state.d.ts +1 -1
- package/dist/client/use-cookie.d.ts +8 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +1 -1
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +1 -1
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +2 -2
- package/dist/config-types.d.ts +28 -0
- package/dist/config-types.d.ts.map +1 -1
- package/dist/cookies/define-cookie.d.ts +87 -35
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +2 -1
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +48 -2
- package/dist/cookies/index.js.map +1 -0
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +46 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/{plugins/dev-404-page.d.ts → dev-tools/404-page.d.ts} +1 -1
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/{plugins/dev-browser-logs.d.ts → dev-tools/browser-logs.d.ts} +1 -1
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/{plugins/dev-error-page.d.ts → dev-tools/error-page.d.ts} +2 -2
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/{server/dev-holding-server.d.ts → dev-tools/holding-server.d.ts} +1 -1
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +1 -1
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/{plugins/dev-error-overlay.d.ts → dev-tools/overlay.d.ts} +3 -12
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/{plugins/dev-terminal-error.d.ts → dev-tools/terminal.d.ts} +2 -2
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +1 -1
- package/dist/dev-tools/warnings.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -72
- package/dist/index.js.map +1 -1
- package/dist/plugin-context.d.ts +1 -1
- package/dist/plugin-context.d.ts.map +1 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/routing/convention-lint.d.ts.map +1 -1
- package/dist/routing/index.js +1 -1
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/status-file-lint.d.ts.map +1 -1
- package/dist/search-params/define.d.ts +25 -7
- package/dist/search-params/define.d.ts.map +1 -1
- package/dist/search-params/index.js +5 -3
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/wrappers.d.ts +2 -2
- package/dist/search-params/wrappers.d.ts.map +1 -1
- package/dist/segment-params/define.d.ts +23 -6
- package/dist/segment-params/define.d.ts.map +1 -1
- package/dist/segment-params/index.js +1 -1
- package/dist/server/access-gate.d.ts +4 -3
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-handler.d.ts +15 -6
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +5 -5
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +1 -15
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/cookie-context.d.ts +170 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +51 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +90 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/index.d.ts +5 -4
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +4 -149
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +6 -4
- package/dist/server/internal.d.ts.map +1 -1
- package/dist/server/internal.js +261 -408
- package/dist/server/internal.js.map +1 -1
- package/dist/server/logger.d.ts +14 -0
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +17 -0
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +26 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +14 -7
- package/dist/server/pipeline-helpers.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +49 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +4 -49
- package/dist/server/pipeline-phases.d.ts.map +1 -1
- package/dist/server/pipeline.d.ts +0 -2
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/request-context.d.ts +22 -159
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/helpers.d.ts +1 -1
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +50 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +59 -14
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -1
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/tracing.d.ts +1 -1
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +45 -16
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/types.d.ts +48 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/shims/headers.d.ts +2 -2
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +3 -1
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +9 -4
- package/dist/shims/navigation.d.ts.map +1 -1
- package/package.json +6 -7
- package/src/adapters/build-output-helper.ts +77 -0
- package/src/adapters/cloudflare.ts +10 -50
- package/src/adapters/nitro.ts +11 -45
- package/src/adapters/shared.ts +40 -0
- package/src/cache/timber-cache.ts +3 -2
- package/src/cli.ts +0 -0
- package/src/client/form.tsx +17 -25
- package/src/client/index.ts +16 -9
- package/src/client/internal.ts +3 -2
- package/src/client/router.ts +1 -1
- package/src/client/rsc-fetch.ts +15 -0
- package/src/client/state.ts +2 -2
- package/src/client/use-cookie.ts +29 -0
- package/src/codec.ts +3 -7
- package/src/config-types.ts +28 -0
- package/src/cookies/define-cookie.ts +271 -78
- package/src/cookies/index.ts +11 -8
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +134 -0
- package/src/{plugins/dev-404-page.ts → dev-tools/404-page.ts} +2 -7
- package/src/{plugins/dev-error-page.ts → dev-tools/error-page.ts} +5 -32
- package/src/dev-tools/index.ts +90 -0
- package/src/dev-tools/instrumentation.ts +176 -0
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +2 -2
- package/src/{plugins/dev-error-overlay.ts → dev-tools/overlay.ts} +5 -23
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/{plugins/dev-terminal-error.ts → dev-tools/terminal.ts} +4 -38
- package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +1 -1
- package/src/index.ts +11 -3
- package/src/plugin-context.ts +1 -1
- package/src/plugins/adapter-build.ts +3 -1
- package/src/plugins/dev-server.ts +3 -3
- package/src/plugins/shims.ts +1 -1
- package/src/plugins/static-build.ts +1 -1
- package/src/routing/convention-lint.ts +5 -4
- package/src/routing/scanner.ts +5 -2
- package/src/routing/status-file-lint.ts +4 -2
- package/src/search-params/define.ts +71 -15
- package/src/search-params/wrappers.ts +9 -2
- package/src/segment-params/define.ts +66 -13
- package/src/server/access-gate.tsx +9 -8
- package/src/server/action-handler.ts +28 -38
- package/src/server/als-registry.ts +5 -5
- package/src/server/asset-headers.ts +8 -34
- package/src/server/cookie-context.ts +468 -0
- package/src/server/cookie-parsing.ts +135 -0
- package/src/server/{deny-page-resolver.ts → deny-boundary.ts} +78 -14
- package/src/server/deny-renderer.ts +2 -7
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/fallback-error.ts +1 -1
- package/src/server/index.ts +13 -14
- package/src/server/internal.ts +10 -3
- package/src/server/logger.ts +23 -0
- package/src/server/middleware-runner.ts +44 -0
- package/src/server/param-coercion.ts +76 -0
- package/src/server/pipeline-helpers.ts +37 -13
- package/src/server/pipeline-outcome.ts +167 -0
- package/src/server/pipeline-phases.ts +27 -209
- package/src/server/pipeline.ts +2 -9
- package/src/server/request-context.ts +46 -451
- package/src/server/route-element-builder.ts +7 -3
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/error-renderer.ts +1 -1
- package/src/server/rsc-entry/helpers.ts +2 -7
- package/src/server/rsc-entry/index.ts +34 -273
- package/src/server/rsc-entry/render-route.ts +304 -0
- package/src/server/rsc-entry/rsc-payload.ts +1 -1
- package/src/server/rsc-entry/ssr-renderer.ts +2 -2
- package/src/server/rsc-entry/wrap-action-dispatch.ts +316 -23
- package/src/server/ssr-entry.ts +1 -1
- package/src/server/state-tree-diff.ts +4 -1
- package/src/server/tracing.ts +3 -3
- package/src/server/tree-builder.ts +128 -52
- package/src/server/types.ts +52 -0
- package/src/server/utils/escape-html.ts +20 -0
- package/src/shims/headers.ts +3 -3
- package/src/shims/navigation-client.ts +4 -3
- package/src/shims/navigation.ts +9 -7
- package/dist/_chunks/actions-DLnUaR65.js +0 -421
- package/dist/_chunks/actions-DLnUaR65.js.map +0 -1
- package/dist/_chunks/als-registry-HS0LGUl2.js +0 -41
- package/dist/_chunks/als-registry-HS0LGUl2.js.map +0 -1
- package/dist/_chunks/debug-ECi_61pb.js +0 -108
- package/dist/_chunks/debug-ECi_61pb.js.map +0 -1
- package/dist/_chunks/define-C77ScO0m.js.map +0 -1
- package/dist/_chunks/define-Itxvcd7F.js.map +0 -1
- package/dist/_chunks/define-cookie-BowvzoP0.js +0 -94
- package/dist/_chunks/define-cookie-BowvzoP0.js.map +0 -1
- package/dist/_chunks/dev-warnings-DpGRGoDi.js.map +0 -1
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js +0 -41
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js.map +0 -1
- package/dist/_chunks/request-context-CK5tZqIP.js +0 -478
- package/dist/_chunks/request-context-CK5tZqIP.js.map +0 -1
- package/dist/_chunks/router-ref-C8OCm7g7.js.map +0 -1
- package/dist/_chunks/tracing-CCYbKn5n.js +0 -238
- package/dist/_chunks/tracing-CCYbKn5n.js.map +0 -1
- package/dist/_chunks/use-params-IOPu7E8t.js.map +0 -1
- package/dist/_chunks/use-query-states-BiV5GJgm.js.map +0 -1
- package/dist/_chunks/walkers-VOXgavMF.js.map +0 -1
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/plugins/dev-404-page.d.ts.map +0 -1
- package/dist/plugins/dev-browser-logs.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-error-page.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dev-terminal-error.d.ts.map +0 -1
- package/dist/server/deny-page-resolver.d.ts +0 -52
- package/dist/server/deny-page-resolver.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-holding-server.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/page-deny-boundary.d.ts +0 -31
- package/dist/server/page-deny-boundary.d.ts.map +0 -1
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/page-deny-boundary.tsx +0 -56
- /package/src/client/{use-params.ts → use-segment-params.ts} +0 -0
- /package/src/{plugins/dev-browser-logs.ts → dev-tools/browser-logs.ts} +0 -0
- /package/src/{server/dev-holding-server.ts → dev-tools/holding-server.ts} +0 -0
- /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
package/dist/server/internal.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as warnRedirectInSuspense, c as warnSuspenseWrappingChildren, i as warnRedirectInAccess, n as setViteServer, o as warnSlowSlotWithoutSuspense, r as warnDenyInSuspense, s as warnStaticRequestApi, t as WarningId } from "../_chunks/
|
|
1
|
+
import { c as replaceTraceId, d as withSpan, f as earlyHintsSenderAls, g as timingAls, i as getOtelTraceId, l as runWithTraceId, m as requestContextAls, o as getTraceId, r as generateTraceId, u as setSpanAttribute, v as isDebug } from "../_chunks/tracing-C8V-YGsP.js";
|
|
2
|
+
import { a as warnRedirectInSuspense, c as warnSuspenseWrappingChildren, i as warnRedirectInAccess, n as setViteServer, o as warnSlowSlotWithoutSuspense, r as warnDenyInSuspense, s as warnStaticRequestApi, t as WarningId } from "../_chunks/warnings-Cg47l5sk.js";
|
|
3
3
|
import { n as classifyUrlSegment } from "../_chunks/segment-classify-BjfuctV2.js";
|
|
4
4
|
import { i as getMetadataRouteServePath, n as classifyMetadataRoute, r as getMetadataRouteAutoLink, t as METADATA_ROUTE_CONVENTIONS } from "../_chunks/metadata-routes-BU684ls2.js";
|
|
5
|
-
import { a as
|
|
6
|
-
import {
|
|
7
|
-
import { l as RenderError, n as executeAction, o as DenySignal, r as isRscActionRequest, s as RedirectSignal, t as buildNoJsResponse } from "../_chunks/actions-DLnUaR65.js";
|
|
8
|
-
import { c as replaceTraceId, d as withSpan, i as getOtelTraceId, l as runWithTraceId, o as getTraceId, r as generateTraceId, s as getTraceStore, u as setSpanAttribute } from "../_chunks/tracing-CCYbKn5n.js";
|
|
5
|
+
import { a as logProxyError, c as logRequestReceived, d as logSwrRefetchFailed, f as logWaitUntilRejected, h as swallow, i as logMiddlewareShortCircuit, l as logRouteError, m as setLogger, n as logCacheMiss, o as logRenderError, p as logWaitUntilUnsupported, r as logMiddlewareError, s as logRequestCompleted, t as getLogger, u as logSlowRequest } from "../_chunks/logger-0m8MsKdc.js";
|
|
6
|
+
import { C as setMutableCookieContext, D as getSetCookieHeaders, S as runWithRequestContext, T as getCookie, _ as getHeader, b as getSegmentParams, c as DenySignal, d as RenderError, g as applyRequestHeaderOverlay, l as RedirectSignal, n as executeAction, o as coerce, r as isRscActionRequest, t as buildNoJsResponse, w as setSegmentParams, x as markResponseFlushed, y as getSearchParams } from "../_chunks/actions-CQ8Z8VGL.js";
|
|
9
7
|
import "../client/error-boundary.js";
|
|
10
|
-
import "../_chunks/segment-context-
|
|
8
|
+
import "../_chunks/segment-context-Dx_OizxD.js";
|
|
11
9
|
import { readFile } from "node:fs/promises";
|
|
12
10
|
import { createElement } from "react";
|
|
13
11
|
//#region src/server/server-timing.ts
|
|
@@ -86,276 +84,6 @@ function getServerTimingHeader() {
|
|
|
86
84
|
return result || null;
|
|
87
85
|
}
|
|
88
86
|
//#endregion
|
|
89
|
-
//#region src/server/error-formatter.ts
|
|
90
|
-
/**
|
|
91
|
-
* Error Formatter — rewrites SSR/RSC error messages to surface user code.
|
|
92
|
-
*
|
|
93
|
-
* When React or Vite throw errors during SSR, stack traces reference
|
|
94
|
-
* vendored dependency paths (e.g. `.vite/deps_ssr/@vitejs_plugin-rsc_vendor_...`)
|
|
95
|
-
* and mangled export names (`__vite_ssr_export_default__`). This module
|
|
96
|
-
* rewrites error messages and stack traces to point at user code instead.
|
|
97
|
-
*
|
|
98
|
-
* Dev-only — in production, errors go through the structured logger
|
|
99
|
-
* without formatting.
|
|
100
|
-
*/
|
|
101
|
-
/**
|
|
102
|
-
* Patterns that identify internal Vite/RSC vendor paths in stack traces.
|
|
103
|
-
* These are replaced with human-readable labels.
|
|
104
|
-
*/
|
|
105
|
-
var VENDOR_PATH_PATTERNS = [
|
|
106
|
-
{
|
|
107
|
-
pattern: /node_modules\/\.vite\/deps_ssr\/@vitejs_plugin-rsc_vendor_react-server-dom[^\s)]+/g,
|
|
108
|
-
replacement: "<react-server-dom>"
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
pattern: /node_modules\/\.vite\/deps_ssr\/@vitejs_plugin-rsc_vendor[^\s)]+/g,
|
|
112
|
-
replacement: "<rsc-vendor>"
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
pattern: /node_modules\/\.vite\/deps_ssr\/[^\s)]+/g,
|
|
116
|
-
replacement: "<vite-dep>"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
pattern: /node_modules\/\.vite\/deps\/[^\s)]+/g,
|
|
120
|
-
replacement: "<vite-dep>"
|
|
121
|
-
}
|
|
122
|
-
];
|
|
123
|
-
/**
|
|
124
|
-
* Patterns that identify Vite-mangled export names in error messages.
|
|
125
|
-
*/
|
|
126
|
-
var MANGLED_NAME_PATTERNS = [{
|
|
127
|
-
pattern: /__vite_ssr_export_default__/g,
|
|
128
|
-
replacement: "<default export>"
|
|
129
|
-
}, {
|
|
130
|
-
pattern: /__vite_ssr_export_(\w+)__/g,
|
|
131
|
-
replacement: "<export $1>"
|
|
132
|
-
}];
|
|
133
|
-
/**
|
|
134
|
-
* Rewrite an error's message and stack to replace internal Vite paths
|
|
135
|
-
* and mangled names with human-readable labels.
|
|
136
|
-
*/
|
|
137
|
-
function formatSsrError(error) {
|
|
138
|
-
if (!(error instanceof Error)) return String(error);
|
|
139
|
-
let message = error.message;
|
|
140
|
-
let stack = error.stack ?? "";
|
|
141
|
-
for (const { pattern, replacement } of MANGLED_NAME_PATTERNS) message = message.replace(pattern, replacement);
|
|
142
|
-
for (const { pattern, replacement } of VENDOR_PATH_PATTERNS) stack = stack.replace(pattern, replacement);
|
|
143
|
-
for (const { pattern, replacement } of MANGLED_NAME_PATTERNS) stack = stack.replace(pattern, replacement);
|
|
144
|
-
const hint = extractErrorHint(error.message);
|
|
145
|
-
const parts = [];
|
|
146
|
-
parts.push(message);
|
|
147
|
-
if (hint) parts.push(` → ${hint}`);
|
|
148
|
-
const userFrames = extractUserFrames(stack);
|
|
149
|
-
if (userFrames.length > 0) {
|
|
150
|
-
parts.push("");
|
|
151
|
-
parts.push(" User code in stack:");
|
|
152
|
-
for (const frame of userFrames) parts.push(` ${frame}`);
|
|
153
|
-
}
|
|
154
|
-
return parts.join("\n");
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Extract a human-readable hint from common React/RSC error messages.
|
|
158
|
-
*
|
|
159
|
-
* React error messages contain useful information but the surrounding
|
|
160
|
-
* context (vendor paths, mangled names) obscures it. This extracts the
|
|
161
|
-
* actionable part as a one-line hint.
|
|
162
|
-
*/
|
|
163
|
-
function extractErrorHint(message) {
|
|
164
|
-
if (message.match(/Functions cannot be passed directly to Client Components/)) {
|
|
165
|
-
const propMatch = message.match(/<[^>]*?\s(\w+)=\{function/);
|
|
166
|
-
if (propMatch) return `Prop "${propMatch[1]}" is a function — mark it "use server" or call it before passing`;
|
|
167
|
-
return "A function prop was passed to a Client Component — mark it \"use server\" or call it before passing";
|
|
168
|
-
}
|
|
169
|
-
if (message.includes("Objects are not valid as a React child")) return "An object was rendered as JSX children — convert to string or extract the value";
|
|
170
|
-
const nullRefMatch = message.match(/Cannot read propert(?:y|ies) of (undefined|null) \(reading '(\w+)'\)/);
|
|
171
|
-
if (nullRefMatch) return `Accessed .${nullRefMatch[2]} on ${nullRefMatch[1]} — check that the value exists`;
|
|
172
|
-
const notFnMatch = message.match(/(\w+) is not a function/);
|
|
173
|
-
if (notFnMatch) return `"${notFnMatch[1]}" is not a function — check imports and exports`;
|
|
174
|
-
if (message.includes("Element type is invalid")) return "A component resolved to undefined/null — check default exports and import paths";
|
|
175
|
-
if (message.includes("Invalid hook call")) return "A hook was called outside of a React component render. If this is a 'use client' component, ensure the directive is at the very top of the file (before any imports) and that @vitejs/plugin-rsc is loaded correctly. Barrel re-exports from non-'use client' files do not propagate the directive.";
|
|
176
|
-
return null;
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Extract stack frames that reference user code (not node_modules,
|
|
180
|
-
* not framework internals).
|
|
181
|
-
*
|
|
182
|
-
* Returns at most 5 frames to keep output concise.
|
|
183
|
-
*/
|
|
184
|
-
function extractUserFrames(stack) {
|
|
185
|
-
const lines = stack.split("\n");
|
|
186
|
-
const userFrames = [];
|
|
187
|
-
for (const line of lines) {
|
|
188
|
-
const trimmed = line.trim();
|
|
189
|
-
if (!trimmed.startsWith("at ")) continue;
|
|
190
|
-
if (trimmed.includes("node_modules") || trimmed.includes("<react-server-dom>") || trimmed.includes("<rsc-vendor>") || trimmed.includes("<vite-dep>") || trimmed.includes("node:internal")) continue;
|
|
191
|
-
userFrames.push(trimmed);
|
|
192
|
-
if (userFrames.length >= 5) break;
|
|
193
|
-
}
|
|
194
|
-
return userFrames;
|
|
195
|
-
}
|
|
196
|
-
//#endregion
|
|
197
|
-
//#region src/server/default-logger.ts
|
|
198
|
-
/**
|
|
199
|
-
* DefaultLogger — human-readable stderr logging when no custom logger is configured.
|
|
200
|
-
*
|
|
201
|
-
* Ships as the fallback so production deployments always have error visibility,
|
|
202
|
-
* even without an `instrumentation.ts` logger export. Output is one line per
|
|
203
|
-
* event, designed for `fly logs`, `kubectl logs`, Cloudflare dashboard tails, etc.
|
|
204
|
-
*
|
|
205
|
-
* Format:
|
|
206
|
-
* [timber] ERROR message key=value key=value trace_id=4bf92f35
|
|
207
|
-
* [timber] WARN message key=value key=value trace_id=4bf92f35
|
|
208
|
-
* [timber] INFO message method=GET path=/dashboard status=200 durationMs=43 trace_id=4bf92f35
|
|
209
|
-
*
|
|
210
|
-
* Behavior:
|
|
211
|
-
* - Suppressed entirely in dev mode (dev logging handles all output)
|
|
212
|
-
* - `debug` suppressed unless TIMBER_DEBUG is set
|
|
213
|
-
* - Replaced entirely when a custom logger is set via `setLogger()`
|
|
214
|
-
*
|
|
215
|
-
* See design/17-logging.md §"DefaultLogger"
|
|
216
|
-
*/
|
|
217
|
-
/**
|
|
218
|
-
* Format data fields as `key=value` pairs for human-readable output.
|
|
219
|
-
* - `error` key is serialized via formatSsrError for stack trace cleanup
|
|
220
|
-
* - `trace_id` is truncated to 8 chars for readability (full ID in OTEL)
|
|
221
|
-
* - Other values are stringified inline
|
|
222
|
-
*/
|
|
223
|
-
function formatDataFields(data) {
|
|
224
|
-
if (!data) return "";
|
|
225
|
-
const parts = [];
|
|
226
|
-
let traceId;
|
|
227
|
-
for (const [key, value] of Object.entries(data)) {
|
|
228
|
-
if (key === "trace_id") {
|
|
229
|
-
traceId = typeof value === "string" ? value : String(value);
|
|
230
|
-
continue;
|
|
231
|
-
}
|
|
232
|
-
if (key === "error") {
|
|
233
|
-
parts.push(`error=${formatSsrError(value)}`);
|
|
234
|
-
continue;
|
|
235
|
-
}
|
|
236
|
-
if (value === void 0 || value === null) continue;
|
|
237
|
-
parts.push(`${key}=${value}`);
|
|
238
|
-
}
|
|
239
|
-
if (traceId) parts.push(`trace_id=${traceId.slice(0, 8)}`);
|
|
240
|
-
return parts.length > 0 ? " " + parts.join(" ") : "";
|
|
241
|
-
}
|
|
242
|
-
/** Pad level string to fixed width for alignment. */
|
|
243
|
-
function padLevel(level) {
|
|
244
|
-
return level.padEnd(5);
|
|
245
|
-
}
|
|
246
|
-
function createDefaultLogger() {
|
|
247
|
-
return {
|
|
248
|
-
error(msg, data) {
|
|
249
|
-
const fields = formatDataFields(data);
|
|
250
|
-
process.stderr.write(`[timber] ${padLevel("ERROR")} ${msg}${fields}\n`);
|
|
251
|
-
},
|
|
252
|
-
warn(msg, data) {
|
|
253
|
-
const fields = formatDataFields(data);
|
|
254
|
-
process.stderr.write(`[timber] ${padLevel("WARN")} ${msg}${fields}\n`);
|
|
255
|
-
},
|
|
256
|
-
info(msg, data) {
|
|
257
|
-
if (isDevMode()) return;
|
|
258
|
-
if (!isDebug()) return;
|
|
259
|
-
const fields = formatDataFields(data);
|
|
260
|
-
process.stderr.write(`[timber] ${padLevel("INFO")} ${msg}${fields}\n`);
|
|
261
|
-
},
|
|
262
|
-
debug(msg, data) {
|
|
263
|
-
if (isDevMode()) return;
|
|
264
|
-
if (!isDebug()) return;
|
|
265
|
-
const fields = formatDataFields(data);
|
|
266
|
-
process.stderr.write(`[timber] ${padLevel("DEBUG")} ${msg}${fields}\n`);
|
|
267
|
-
}
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
//#endregion
|
|
271
|
-
//#region src/server/logger.ts
|
|
272
|
-
/**
|
|
273
|
-
* Logger — structured logging with environment-aware formatting.
|
|
274
|
-
*
|
|
275
|
-
* timber.js ships a DefaultLogger that writes human-readable lines to stderr
|
|
276
|
-
* in production. Users can export a custom logger from instrumentation.ts to
|
|
277
|
-
* replace it with pino, winston, or any TimberLogger-compatible object.
|
|
278
|
-
*
|
|
279
|
-
* See design/17-logging.md §"Production Logging"
|
|
280
|
-
*/
|
|
281
|
-
var _logger = createDefaultLogger();
|
|
282
|
-
/**
|
|
283
|
-
* Set the user-provided logger. Called by the instrumentation loader
|
|
284
|
-
* when it finds a `logger` export in instrumentation.ts. Replaces
|
|
285
|
-
* the DefaultLogger entirely.
|
|
286
|
-
*/
|
|
287
|
-
function setLogger(logger) {
|
|
288
|
-
_logger = logger;
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* Get the current logger. Always non-null — returns DefaultLogger when
|
|
292
|
-
* no custom logger is configured.
|
|
293
|
-
*/
|
|
294
|
-
function getLogger() {
|
|
295
|
-
return _logger;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Inject trace_id and span_id into log data for log–trace correlation.
|
|
299
|
-
* Always injects trace_id (never undefined). Injects span_id only when OTEL is active.
|
|
300
|
-
*/
|
|
301
|
-
function withTraceContext(data) {
|
|
302
|
-
const store = getTraceStore();
|
|
303
|
-
const enriched = { ...data };
|
|
304
|
-
if (store) {
|
|
305
|
-
enriched.trace_id = store.traceId;
|
|
306
|
-
if (store.spanId) enriched.span_id = store.spanId;
|
|
307
|
-
}
|
|
308
|
-
return enriched;
|
|
309
|
-
}
|
|
310
|
-
/** Log a completed request. Level: info. */
|
|
311
|
-
function logRequestCompleted(data) {
|
|
312
|
-
_logger.info("request completed", withTraceContext(data));
|
|
313
|
-
}
|
|
314
|
-
/** Log request received. Level: debug. */
|
|
315
|
-
function logRequestReceived(data) {
|
|
316
|
-
_logger.debug("request received", withTraceContext(data));
|
|
317
|
-
}
|
|
318
|
-
/** Log a slow request warning. Level: warn. */
|
|
319
|
-
function logSlowRequest(data) {
|
|
320
|
-
_logger.warn("slow request exceeded threshold", withTraceContext(data));
|
|
321
|
-
}
|
|
322
|
-
/** Log middleware short-circuit. Level: debug. */
|
|
323
|
-
function logMiddlewareShortCircuit(data) {
|
|
324
|
-
_logger.debug("middleware short-circuited", withTraceContext(data));
|
|
325
|
-
}
|
|
326
|
-
/** Log unhandled error in middleware phase. Level: error. */
|
|
327
|
-
function logMiddlewareError(data) {
|
|
328
|
-
_logger.error("unhandled error in middleware phase", withTraceContext(data));
|
|
329
|
-
}
|
|
330
|
-
/** Log unhandled render-phase error. Level: error. */
|
|
331
|
-
function logRenderError(data) {
|
|
332
|
-
_logger.error("unhandled render-phase error", withTraceContext(data));
|
|
333
|
-
}
|
|
334
|
-
/** Log proxy.ts uncaught error. Level: error. */
|
|
335
|
-
function logProxyError(data) {
|
|
336
|
-
_logger.error("proxy.ts threw uncaught error", withTraceContext(data));
|
|
337
|
-
}
|
|
338
|
-
/** Log unhandled error in route handler. Level: error. */
|
|
339
|
-
function logRouteError(data) {
|
|
340
|
-
_logger.error("unhandled route handler error", withTraceContext(data));
|
|
341
|
-
}
|
|
342
|
-
/** Log waitUntil() adapter missing (once at startup). Level: warn. */
|
|
343
|
-
function logWaitUntilUnsupported() {
|
|
344
|
-
_logger.warn("adapter does not support waitUntil()");
|
|
345
|
-
}
|
|
346
|
-
/** Log waitUntil() promise rejection. Level: warn. */
|
|
347
|
-
function logWaitUntilRejected(data) {
|
|
348
|
-
_logger.warn("waitUntil() promise rejected", withTraceContext(data));
|
|
349
|
-
}
|
|
350
|
-
/** Log staleWhileRevalidate refetch failure. Level: warn. */
|
|
351
|
-
function logSwrRefetchFailed(data) {
|
|
352
|
-
_logger.warn("staleWhileRevalidate refetch failed", withTraceContext(data));
|
|
353
|
-
}
|
|
354
|
-
/** Log cache miss. Level: debug. */
|
|
355
|
-
function logCacheMiss(data) {
|
|
356
|
-
_logger.debug("timber.cache MISS", withTraceContext(data));
|
|
357
|
-
}
|
|
358
|
-
//#endregion
|
|
359
87
|
//#region src/server/instrumentation.ts
|
|
360
88
|
/**
|
|
361
89
|
* Instrumentation — loads and runs the user's instrumentation.ts file.
|
|
@@ -419,24 +147,37 @@ function hasOnRequestError() {
|
|
|
419
147
|
}
|
|
420
148
|
//#endregion
|
|
421
149
|
//#region src/server/pipeline-helpers.ts
|
|
422
|
-
/** Keys that must never be merged via Object.assign — they pollute Object.prototype. */
|
|
423
|
-
var DANGEROUS_KEYS = new Set([
|
|
424
|
-
"__proto__",
|
|
425
|
-
"constructor",
|
|
426
|
-
"prototype"
|
|
427
|
-
]);
|
|
428
150
|
/**
|
|
429
|
-
*
|
|
151
|
+
* Only __proto__ needs stripping — it has a language-level setter that
|
|
152
|
+
* changes the prototype chain of spread copies. constructor and prototype
|
|
153
|
+
* are harmless own properties on null-prototype objects.
|
|
154
|
+
*/
|
|
155
|
+
var DANGEROUS_KEYS = new Set(["__proto__"]);
|
|
156
|
+
/**
|
|
157
|
+
* Deep-walk a value returned by a segment param codec, producing a
|
|
158
|
+
* sanitized copy where every plain object is null-prototype and
|
|
159
|
+
* dangerous keys (__proto__, constructor, prototype) are stripped at
|
|
160
|
+
* every depth.
|
|
161
|
+
*
|
|
162
|
+
* Non-plain objects (Date, Map, class instances, etc.) are returned
|
|
163
|
+
* as-is — they cannot be poisoned by `{...x}` spread and may carry
|
|
164
|
+
* author-intended prototype methods.
|
|
430
165
|
*
|
|
431
|
-
*
|
|
432
|
-
* pollution via top-level `__proto__` / `constructor` / `prototype`
|
|
433
|
-
* keys. The deeper guarantee for segment params comes from merging
|
|
434
|
-
* codec output into a null-prototype target inside coerceSegmentParams().
|
|
166
|
+
* Arrays are walked element-wise.
|
|
435
167
|
*
|
|
436
|
-
*
|
|
168
|
+
* Performance: URL params are bounded by URL length (~8 KB). Realistic
|
|
169
|
+
* trees are <1 KB. The recursive walk is sub-microsecond.
|
|
170
|
+
*
|
|
171
|
+
* See TIM-655, TIM-855, TIM-873, design/13-security.md
|
|
437
172
|
*/
|
|
438
|
-
function
|
|
439
|
-
|
|
173
|
+
function sanitizeParamValue(value) {
|
|
174
|
+
if (value === null || typeof value !== "object") return value;
|
|
175
|
+
if (Array.isArray(value)) return value.map(sanitizeParamValue);
|
|
176
|
+
const proto = Object.getPrototypeOf(value);
|
|
177
|
+
if (proto !== Object.prototype && proto !== null) return value;
|
|
178
|
+
const out = Object.create(null);
|
|
179
|
+
for (const key of Object.keys(value)) if (!DANGEROUS_KEYS.has(key)) out[key] = sanitizeParamValue(value[key]);
|
|
180
|
+
return out;
|
|
440
181
|
}
|
|
441
182
|
/**
|
|
442
183
|
* Build a proxy resolver closure from the declared source. Called exactly
|
|
@@ -661,6 +402,35 @@ async function runMiddlewareChain(chain, ctx) {
|
|
|
661
402
|
if (result instanceof Response) return result;
|
|
662
403
|
}
|
|
663
404
|
}
|
|
405
|
+
/**
|
|
406
|
+
* Per-request marker for synthetic re-render requests that should NOT
|
|
407
|
+
* re-execute `middleware.ts`. The action-dispatch wrapper runs middleware
|
|
408
|
+
* once on the inbound action POST; when validation fails on the no-JS
|
|
409
|
+
* path, it builds a synthetic GET that flows through the normal pipeline
|
|
410
|
+
* to render the page with `getFormFlash()` data. Without this marker, the
|
|
411
|
+
* pipeline would run middleware a second time on that synthetic GET.
|
|
412
|
+
*
|
|
413
|
+
* The set is keyed by the synthetic Request object itself, so the entry
|
|
414
|
+
* lives exactly as long as the request and is garbage-collected with it.
|
|
415
|
+
* Cannot be set or detected by user code — there is no header, no URL
|
|
416
|
+
* parameter, nothing on the wire that an attacker could spoof.
|
|
417
|
+
*
|
|
418
|
+
* See TIM-871.
|
|
419
|
+
*
|
|
420
|
+
* @internal — framework use only.
|
|
421
|
+
*/
|
|
422
|
+
var middlewareBypassRequests = /* @__PURE__ */ new WeakSet();
|
|
423
|
+
/**
|
|
424
|
+
* Check whether a request was marked to bypass middleware.
|
|
425
|
+
*
|
|
426
|
+
* Called by `handleRequest` in pipeline-phases.ts before invoking the
|
|
427
|
+
* middleware phase. Returns false for any request not explicitly marked.
|
|
428
|
+
*
|
|
429
|
+
* @internal
|
|
430
|
+
*/
|
|
431
|
+
function shouldBypassMiddleware(req) {
|
|
432
|
+
return middlewareBypassRequests.has(req);
|
|
433
|
+
}
|
|
664
434
|
//#endregion
|
|
665
435
|
//#region src/server/metadata-social.ts
|
|
666
436
|
/**
|
|
@@ -1389,20 +1159,36 @@ async function loadModule(loader) {
|
|
|
1389
1159
|
}
|
|
1390
1160
|
}
|
|
1391
1161
|
//#endregion
|
|
1392
|
-
//#region src/server/deny-
|
|
1162
|
+
//#region src/server/deny-boundary.ts
|
|
1393
1163
|
/**
|
|
1394
|
-
* Deny
|
|
1164
|
+
* Deny boundary subsystem — the in-tree DenySignal flow.
|
|
1165
|
+
*
|
|
1166
|
+
* Three things live together here because they form a single flow:
|
|
1167
|
+
*
|
|
1168
|
+
* 1. **Chain construction** (`buildDenyPageChain`) — walks the matched
|
|
1169
|
+
* segment chain at element-tree build time and produces a list of
|
|
1170
|
+
* `DenyPageEntry` records ordered by specificity (specific status →
|
|
1171
|
+
* category catch-all → `error.tsx`).
|
|
1172
|
+
*
|
|
1173
|
+
* 2. **Runtime matching** (`renderMatchingDenyPage`) — picks the first
|
|
1174
|
+
* chain entry whose status filter matches the thrown DenySignal and
|
|
1175
|
+
* returns a React element for the matching component. Used by
|
|
1176
|
+
* `AccessGate` and `PageDenyBoundary` when they catch a deny.
|
|
1177
|
+
*
|
|
1178
|
+
* 3. **The page boundary itself** (`PageDenyBoundary`) — the async server
|
|
1179
|
+
* component that wraps a server-component page, calls it, and catches
|
|
1180
|
+
* `DenySignal` so the deny page renders in-tree (no throw reaches
|
|
1181
|
+
* React Flight, single render pass).
|
|
1395
1182
|
*
|
|
1396
|
-
*
|
|
1397
|
-
*
|
|
1398
|
-
*
|
|
1399
|
-
* the segment chain — a list of fallback components ordered by specificity.
|
|
1183
|
+
* Plus the ALS helpers (`setDenyStatus` / `getDenyStatus`) the boundary
|
|
1184
|
+
* uses to thread the matched status code back to the pipeline so the
|
|
1185
|
+
* HTTP status reflects the deny.
|
|
1400
1186
|
*
|
|
1401
|
-
*
|
|
1402
|
-
*
|
|
1403
|
-
*
|
|
1187
|
+
* Folded into one module from the former `deny-page-resolver.ts` and
|
|
1188
|
+
* `page-deny-boundary.tsx` (TIM-853) — the names were misleading and the
|
|
1189
|
+
* three pieces only made sense together.
|
|
1404
1190
|
*
|
|
1405
|
-
* See design/10-error-handling.md
|
|
1191
|
+
* See design/04-authorization.md, design/10-error-handling.md, TIM-666.
|
|
1406
1192
|
*/
|
|
1407
1193
|
/**
|
|
1408
1194
|
* Find the first deny page in the chain that matches the given status code.
|
|
@@ -1749,19 +1535,7 @@ function pathnameMatchesPattern(pathname, pattern) {
|
|
|
1749
1535
|
return pi === pathParts.length;
|
|
1750
1536
|
}
|
|
1751
1537
|
//#endregion
|
|
1752
|
-
//#region src/server/
|
|
1753
|
-
/**
|
|
1754
|
-
* Pipeline phase functions — module-level free functions that take their
|
|
1755
|
-
* dependencies as explicit parameters. Each phase returns a `PhaseOutcome`
|
|
1756
|
-
* (a discriminated union over response / redirect / deny / error). The
|
|
1757
|
-
* terminal `outcomeToResponse` translates outcomes into Responses.
|
|
1758
|
-
*
|
|
1759
|
-
* Lifted out of `createPipeline` so each phase can be unit-tested in
|
|
1760
|
-
* isolation. The lift is mechanical — these functions used to be closures
|
|
1761
|
-
* over `config`; they now take `config` as an explicit parameter.
|
|
1762
|
-
*
|
|
1763
|
-
* See design/07-routing.md §"Request Lifecycle", design/02-rendering-pipeline.md §"Request Flow".
|
|
1764
|
-
*/
|
|
1538
|
+
//#region src/server/param-coercion.ts
|
|
1765
1539
|
/**
|
|
1766
1540
|
* Run segment param coercion on the matched route's segments.
|
|
1767
1541
|
*
|
|
@@ -1773,10 +1547,10 @@ function pathnameMatchesPattern(pathname, pattern) {
|
|
|
1773
1547
|
* See design/07-routing.md §"Where Coercion Runs"
|
|
1774
1548
|
*/
|
|
1775
1549
|
async function coerceSegmentParams(match) {
|
|
1776
|
-
const
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
for (const segment of segments) {
|
|
1550
|
+
const mergeTarget = Object.create(null);
|
|
1551
|
+
for (const key of Object.keys(match.segmentParams)) if (key !== "__proto__") mergeTarget[key] = match.segmentParams[key];
|
|
1552
|
+
match.segmentParams = mergeTarget;
|
|
1553
|
+
for (const segment of match.segments) {
|
|
1780
1554
|
if (!segment.params) continue;
|
|
1781
1555
|
let mod;
|
|
1782
1556
|
try {
|
|
@@ -1788,18 +1562,131 @@ async function coerceSegmentParams(match) {
|
|
|
1788
1562
|
if (!segmentParamsDef || typeof segmentParamsDef.parse !== "function") continue;
|
|
1789
1563
|
try {
|
|
1790
1564
|
const coerced = segmentParamsDef.parse(match.segmentParams);
|
|
1791
|
-
if (
|
|
1792
|
-
mergeTarget = Object.create(null);
|
|
1793
|
-
safeMerge(mergeTarget, match.segmentParams);
|
|
1794
|
-
match.segmentParams = mergeTarget;
|
|
1795
|
-
usesNullPrototypeTarget = true;
|
|
1796
|
-
}
|
|
1797
|
-
safeMerge(mergeTarget, coerced);
|
|
1565
|
+
for (const key of Object.keys(coerced)) if (key !== "__proto__") mergeTarget[key] = sanitizeParamValue(coerced[key]);
|
|
1798
1566
|
} catch (err) {
|
|
1799
1567
|
throw new ParamCoercionError(err instanceof Error ? err.message : String(err));
|
|
1800
1568
|
}
|
|
1801
1569
|
}
|
|
1802
1570
|
}
|
|
1571
|
+
//#endregion
|
|
1572
|
+
//#region src/server/pipeline-outcome.ts
|
|
1573
|
+
/**
|
|
1574
|
+
* Pipeline outcome translator — converts a `PhaseOutcome` (the value
|
|
1575
|
+
* each phase function returns) into a final `Response`.
|
|
1576
|
+
*
|
|
1577
|
+
* Lifted out of `pipeline-phases.ts` (TIM-853) so the per-phase try /
|
|
1578
|
+
* catch logic and the terminal Response-building logic each live in
|
|
1579
|
+
* their own file. The phases produce values; this module is the single
|
|
1580
|
+
* source of truth for how those values become wire responses.
|
|
1581
|
+
*
|
|
1582
|
+
* See design/07-routing.md §"Request Lifecycle".
|
|
1583
|
+
*/
|
|
1584
|
+
/**
|
|
1585
|
+
* Terminal outcome handler — converts a `PhaseOutcome` into a final
|
|
1586
|
+
* `Response`, applying cookies, building redirects, rendering deny pages
|
|
1587
|
+
* and fallback error pages, and firing instrumentation hooks.
|
|
1588
|
+
*
|
|
1589
|
+
* This is the single source of truth for how phase outputs become wire
|
|
1590
|
+
* responses; the per-phase try/catch blocks now produce values, not
|
|
1591
|
+
* Responses, so the conversion logic lives in exactly one place.
|
|
1592
|
+
*/
|
|
1593
|
+
async function outcomeToResponse(config, outcome, ctx) {
|
|
1594
|
+
switch (outcome.kind) {
|
|
1595
|
+
case "response": {
|
|
1596
|
+
const finalResponse = cloneWithMutableHeaders(outcome.response);
|
|
1597
|
+
if (outcome.phase === "proxy") return finalResponse;
|
|
1598
|
+
if (outcome.phase === "middleware" && ctx.responseHeaders) {
|
|
1599
|
+
applyCookieJar(finalResponse.headers);
|
|
1600
|
+
mergeMissingHeaders(finalResponse.headers, ctx.responseHeaders);
|
|
1601
|
+
logMiddlewareShortCircuit({
|
|
1602
|
+
method: ctx.method,
|
|
1603
|
+
path: ctx.path,
|
|
1604
|
+
status: finalResponse.status
|
|
1605
|
+
});
|
|
1606
|
+
}
|
|
1607
|
+
if (outcome.phase === "render") markResponseFlushed();
|
|
1608
|
+
return finalResponse;
|
|
1609
|
+
}
|
|
1610
|
+
case "redirect": {
|
|
1611
|
+
const headers = ctx.responseHeaders ?? new Headers();
|
|
1612
|
+
applyCookieJar(headers);
|
|
1613
|
+
return buildRedirectResponse(outcome.signal, ctx.req, headers);
|
|
1614
|
+
}
|
|
1615
|
+
case "deny": {
|
|
1616
|
+
const headers = ctx.responseHeaders ?? new Headers();
|
|
1617
|
+
applyCookieJar(headers);
|
|
1618
|
+
if (config.renderDenyFallback) try {
|
|
1619
|
+
return cloneWithMutableHeaders(await config.renderDenyFallback(outcome.signal, ctx.req, headers, ctx.match));
|
|
1620
|
+
} catch (denyRenderError) {
|
|
1621
|
+
logRenderError({
|
|
1622
|
+
method: ctx.method,
|
|
1623
|
+
path: ctx.path,
|
|
1624
|
+
error: denyRenderError
|
|
1625
|
+
});
|
|
1626
|
+
await fireOnRequestError(denyRenderError, ctx.req, "render");
|
|
1627
|
+
if (config.onPipelineError && denyRenderError instanceof Error) config.onPipelineError(denyRenderError, "render");
|
|
1628
|
+
}
|
|
1629
|
+
return new Response(null, {
|
|
1630
|
+
status: outcome.signal.status,
|
|
1631
|
+
headers
|
|
1632
|
+
});
|
|
1633
|
+
}
|
|
1634
|
+
case "error": {
|
|
1635
|
+
if (outcome.phase === "proxy") {
|
|
1636
|
+
logProxyError({ error: outcome.error });
|
|
1637
|
+
await fireOnRequestError(outcome.error, ctx.req, "proxy");
|
|
1638
|
+
if (config.onPipelineError && outcome.error instanceof Error) config.onPipelineError(outcome.error, "proxy");
|
|
1639
|
+
return new Response(null, { status: 500 });
|
|
1640
|
+
}
|
|
1641
|
+
if (outcome.phase === "middleware") {
|
|
1642
|
+
logMiddlewareError({
|
|
1643
|
+
method: ctx.method,
|
|
1644
|
+
path: ctx.path,
|
|
1645
|
+
error: outcome.error
|
|
1646
|
+
});
|
|
1647
|
+
await fireOnRequestError(outcome.error, ctx.req, "handler");
|
|
1648
|
+
if (config.onPipelineError && outcome.error instanceof Error) config.onPipelineError(outcome.error, "middleware");
|
|
1649
|
+
return new Response(null, { status: 500 });
|
|
1650
|
+
}
|
|
1651
|
+
const headers = ctx.responseHeaders ?? new Headers();
|
|
1652
|
+
applyCookieJar(headers);
|
|
1653
|
+
logRenderError({
|
|
1654
|
+
method: ctx.method,
|
|
1655
|
+
path: ctx.path,
|
|
1656
|
+
error: outcome.error
|
|
1657
|
+
});
|
|
1658
|
+
await fireOnRequestError(outcome.error, ctx.req, "render");
|
|
1659
|
+
if (config.onPipelineError && outcome.error instanceof Error) config.onPipelineError(outcome.error, "render");
|
|
1660
|
+
if (config.renderFallbackError) try {
|
|
1661
|
+
return cloneWithMutableHeaders(await config.renderFallbackError(outcome.error, ctx.req, headers));
|
|
1662
|
+
} catch (fallbackRenderError) {
|
|
1663
|
+
logRenderError({
|
|
1664
|
+
method: ctx.method,
|
|
1665
|
+
path: ctx.path,
|
|
1666
|
+
error: fallbackRenderError
|
|
1667
|
+
});
|
|
1668
|
+
await fireOnRequestError(fallbackRenderError, ctx.req, "render");
|
|
1669
|
+
if (config.onPipelineError && fallbackRenderError instanceof Error) config.onPipelineError(fallbackRenderError, "render");
|
|
1670
|
+
}
|
|
1671
|
+
return new Response(null, { status: 500 });
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
}
|
|
1675
|
+
//#endregion
|
|
1676
|
+
//#region src/server/pipeline-phases.ts
|
|
1677
|
+
/**
|
|
1678
|
+
* Pipeline phase functions — module-level free functions that take their
|
|
1679
|
+
* dependencies as explicit parameters. Each phase returns a `PhaseOutcome`
|
|
1680
|
+
* (a discriminated union over response / redirect / deny / error) defined
|
|
1681
|
+
* in `pipeline-outcome.ts`. The terminal `outcomeToResponse` (also in
|
|
1682
|
+
* `pipeline-outcome.ts`) translates outcomes into Responses.
|
|
1683
|
+
*
|
|
1684
|
+
* Lifted out of `createPipeline` so each phase can be unit-tested in
|
|
1685
|
+
* isolation. The lift is mechanical — these functions used to be closures
|
|
1686
|
+
* over `config`; they now take `config` as an explicit parameter.
|
|
1687
|
+
*
|
|
1688
|
+
* See design/07-routing.md §"Request Lifecycle", design/02-rendering-pipeline.md §"Request Flow".
|
|
1689
|
+
*/
|
|
1803
1690
|
/**
|
|
1804
1691
|
* Run the proxy.ts phase. Calls user proxy code and uses `handleRequest` as
|
|
1805
1692
|
* the inner `next()` continuation. The proxy resolver was picked at pipeline
|
|
@@ -1943,7 +1830,7 @@ async function handleRequest(config, req, method, path) {
|
|
|
1943
1830
|
if (typeof handlerResult === "string") body = handlerResult;
|
|
1944
1831
|
else if (contentType === "application/xml") body = serializeSitemap(handlerResult);
|
|
1945
1832
|
else if (contentType === "application/manifest+json") body = JSON.stringify(handlerResult, null, 2);
|
|
1946
|
-
else body =
|
|
1833
|
+
else body = String(handlerResult);
|
|
1947
1834
|
return new Response(body, {
|
|
1948
1835
|
status: 200,
|
|
1949
1836
|
headers: { "Content-Type": `${contentType}; charset=utf-8` }
|
|
@@ -2005,7 +1892,9 @@ async function handleRequest(config, req, method, path) {
|
|
|
2005
1892
|
responseHeaders.set("Cache-Control", "private, no-cache, no-store, max-age=0, must-revalidate");
|
|
2006
1893
|
if (config.earlyHints) try {
|
|
2007
1894
|
await config.earlyHints(match, req, responseHeaders);
|
|
2008
|
-
} catch {
|
|
1895
|
+
} catch (err) {
|
|
1896
|
+
swallow(err, "early hints hook threw");
|
|
1897
|
+
}
|
|
2009
1898
|
try {
|
|
2010
1899
|
await coerceSegmentParams(match);
|
|
2011
1900
|
} catch (error) {
|
|
@@ -2018,7 +1907,7 @@ async function handleRequest(config, req, method, path) {
|
|
|
2018
1907
|
throw error;
|
|
2019
1908
|
}
|
|
2020
1909
|
setSegmentParams(match.segmentParams);
|
|
2021
|
-
return outcomeToResponse(config, match.middlewareChain.length > 0 ? await runMiddlewarePhase(config, req, match, responseHeaders, requestHeaderOverlay, {
|
|
1910
|
+
return outcomeToResponse(config, !shouldBypassMiddleware(req) && match.middlewareChain.length > 0 ? await runMiddlewarePhase(config, req, match, responseHeaders, requestHeaderOverlay, {
|
|
2022
1911
|
canonicalPathname,
|
|
2023
1912
|
interception
|
|
2024
1913
|
}) : await runRenderPhase(config, req, match, responseHeaders, requestHeaderOverlay, {
|
|
@@ -2032,81 +1921,6 @@ async function handleRequest(config, req, method, path) {
|
|
|
2032
1921
|
match
|
|
2033
1922
|
});
|
|
2034
1923
|
}
|
|
2035
|
-
/**
|
|
2036
|
-
* Terminal outcome handler — converts a `PhaseOutcome` into a final
|
|
2037
|
-
* `Response`, applying cookies, building redirects, rendering deny pages
|
|
2038
|
-
* and fallback error pages, and firing instrumentation hooks.
|
|
2039
|
-
*
|
|
2040
|
-
* This is the single source of truth for how phase outputs become wire
|
|
2041
|
-
* responses; the per-phase try/catch blocks now produce values, not
|
|
2042
|
-
* Responses, so the conversion logic lives in exactly one place.
|
|
2043
|
-
*/
|
|
2044
|
-
async function outcomeToResponse(config, outcome, ctx) {
|
|
2045
|
-
switch (outcome.kind) {
|
|
2046
|
-
case "response": {
|
|
2047
|
-
const finalResponse = cloneWithMutableHeaders(outcome.response);
|
|
2048
|
-
if (outcome.phase === "proxy") return finalResponse;
|
|
2049
|
-
if (outcome.phase === "middleware" && ctx.responseHeaders) {
|
|
2050
|
-
applyCookieJar(finalResponse.headers);
|
|
2051
|
-
mergeMissingHeaders(finalResponse.headers, ctx.responseHeaders);
|
|
2052
|
-
logMiddlewareShortCircuit({
|
|
2053
|
-
method: ctx.method,
|
|
2054
|
-
path: ctx.path,
|
|
2055
|
-
status: finalResponse.status
|
|
2056
|
-
});
|
|
2057
|
-
}
|
|
2058
|
-
if (outcome.phase === "render") markResponseFlushed();
|
|
2059
|
-
return finalResponse;
|
|
2060
|
-
}
|
|
2061
|
-
case "redirect": {
|
|
2062
|
-
const headers = ctx.responseHeaders ?? new Headers();
|
|
2063
|
-
applyCookieJar(headers);
|
|
2064
|
-
return buildRedirectResponse(outcome.signal, ctx.req, headers);
|
|
2065
|
-
}
|
|
2066
|
-
case "deny": {
|
|
2067
|
-
const headers = ctx.responseHeaders ?? new Headers();
|
|
2068
|
-
applyCookieJar(headers);
|
|
2069
|
-
if (config.renderDenyFallback) try {
|
|
2070
|
-
return cloneWithMutableHeaders(await config.renderDenyFallback(outcome.signal, ctx.req, headers, ctx.match));
|
|
2071
|
-
} catch {}
|
|
2072
|
-
return new Response(null, {
|
|
2073
|
-
status: outcome.signal.status,
|
|
2074
|
-
headers
|
|
2075
|
-
});
|
|
2076
|
-
}
|
|
2077
|
-
case "error": {
|
|
2078
|
-
if (outcome.phase === "proxy") {
|
|
2079
|
-
logProxyError({ error: outcome.error });
|
|
2080
|
-
await fireOnRequestError(outcome.error, ctx.req, "proxy");
|
|
2081
|
-
if (config.onPipelineError && outcome.error instanceof Error) config.onPipelineError(outcome.error, "proxy");
|
|
2082
|
-
return new Response(null, { status: 500 });
|
|
2083
|
-
}
|
|
2084
|
-
if (outcome.phase === "middleware") {
|
|
2085
|
-
logMiddlewareError({
|
|
2086
|
-
method: ctx.method,
|
|
2087
|
-
path: ctx.path,
|
|
2088
|
-
error: outcome.error
|
|
2089
|
-
});
|
|
2090
|
-
await fireOnRequestError(outcome.error, ctx.req, "handler");
|
|
2091
|
-
if (config.onPipelineError && outcome.error instanceof Error) config.onPipelineError(outcome.error, "middleware");
|
|
2092
|
-
return new Response(null, { status: 500 });
|
|
2093
|
-
}
|
|
2094
|
-
const headers = ctx.responseHeaders ?? new Headers();
|
|
2095
|
-
applyCookieJar(headers);
|
|
2096
|
-
logRenderError({
|
|
2097
|
-
method: ctx.method,
|
|
2098
|
-
path: ctx.path,
|
|
2099
|
-
error: outcome.error
|
|
2100
|
-
});
|
|
2101
|
-
await fireOnRequestError(outcome.error, ctx.req, "render");
|
|
2102
|
-
if (config.onPipelineError && outcome.error instanceof Error) config.onPipelineError(outcome.error, "render");
|
|
2103
|
-
if (config.renderFallbackError) try {
|
|
2104
|
-
return cloneWithMutableHeaders(await config.renderFallbackError(outcome.error, ctx.req, headers));
|
|
2105
|
-
} catch {}
|
|
2106
|
-
return new Response(null, { status: 500 });
|
|
2107
|
-
}
|
|
2108
|
-
}
|
|
2109
|
-
}
|
|
2110
1924
|
//#endregion
|
|
2111
1925
|
//#region src/server/pipeline.ts
|
|
2112
1926
|
/**
|
|
@@ -2386,10 +2200,46 @@ function sendEarlyHints103(links) {
|
|
|
2386
2200
|
if (!sender) return;
|
|
2387
2201
|
try {
|
|
2388
2202
|
sender(links);
|
|
2389
|
-
} catch {
|
|
2203
|
+
} catch (err) {
|
|
2204
|
+
swallow(err, "early hints 103 send failed");
|
|
2205
|
+
}
|
|
2390
2206
|
}
|
|
2391
2207
|
//#endregion
|
|
2392
2208
|
//#region src/server/tree-builder.ts
|
|
2209
|
+
var REACT_COMPONENT_TYPE_MARKERS = new Set([
|
|
2210
|
+
Symbol.for("react.forward_ref"),
|
|
2211
|
+
Symbol.for("react.memo"),
|
|
2212
|
+
Symbol.for("react.lazy"),
|
|
2213
|
+
Symbol.for("react.provider"),
|
|
2214
|
+
Symbol.for("react.context"),
|
|
2215
|
+
Symbol.for("react.suspense"),
|
|
2216
|
+
Symbol.for("react.suspense_list"),
|
|
2217
|
+
Symbol.for("react.client.reference")
|
|
2218
|
+
]);
|
|
2219
|
+
/**
|
|
2220
|
+
* Validate that a loaded module's `default` export is something React
|
|
2221
|
+
* accepts as the first argument to `createElement` — i.e. a valid component
|
|
2222
|
+
* type. React doesn't export `isValidElementType` (only `isValidElement`,
|
|
2223
|
+
* which checks for *elements*, not *component types*), so this mirrors
|
|
2224
|
+
* React's internal check:
|
|
2225
|
+
*
|
|
2226
|
+
* - functions → function or class components
|
|
2227
|
+
* - objects with a `$$typeof` matching one of React's known component
|
|
2228
|
+
* markers → exotic components (`memo`, `forwardRef`, `lazy`, context,
|
|
2229
|
+
* suspense, client references via `@vitejs/plugin-rsc`)
|
|
2230
|
+
*
|
|
2231
|
+
* Strings (HTML tag names) are valid for `createElement` but never appear
|
|
2232
|
+
* as a route module's default export, so they're not recognized here.
|
|
2233
|
+
*
|
|
2234
|
+
* Anything else (numbers, plain config objects, JSON, etc.) is rejected so
|
|
2235
|
+
* the boundary wrapper is skipped rather than crashing inside React.
|
|
2236
|
+
*/
|
|
2237
|
+
function isValidElementType(value) {
|
|
2238
|
+
if (typeof value === "function") return true;
|
|
2239
|
+
if (typeof value !== "object" || value === null) return false;
|
|
2240
|
+
const marker = value.$$typeof;
|
|
2241
|
+
return typeof marker === "symbol" && REACT_COMPONENT_TYPE_MARKERS.has(marker);
|
|
2242
|
+
}
|
|
2393
2243
|
/**
|
|
2394
2244
|
* Build the unified element tree from a matched segment chain.
|
|
2395
2245
|
*
|
|
@@ -2504,7 +2354,8 @@ async function wrapWithErrorBoundaries(segment, element, loadModule, createEleme
|
|
|
2504
2354
|
for (const [key, file] of Object.entries(segment.statusFiles)) if (key !== "4xx" && key !== "5xx") {
|
|
2505
2355
|
const status = parseInt(key, 10);
|
|
2506
2356
|
if (!isNaN(status)) {
|
|
2507
|
-
const
|
|
2357
|
+
const mod = await loadModule(file);
|
|
2358
|
+
const Component = isValidElementType(mod.default) ? mod.default : null;
|
|
2508
2359
|
if (Component) element = createElement(errorBoundaryComponent, isMdxFile(file) ? {
|
|
2509
2360
|
fallbackElement: createElement(Component, { status }),
|
|
2510
2361
|
status,
|
|
@@ -2517,7 +2368,8 @@ async function wrapWithErrorBoundaries(segment, element, loadModule, createEleme
|
|
|
2517
2368
|
}
|
|
2518
2369
|
}
|
|
2519
2370
|
for (const [key, file] of Object.entries(segment.statusFiles)) if (key === "4xx" || key === "5xx") {
|
|
2520
|
-
const
|
|
2371
|
+
const mod = await loadModule(file);
|
|
2372
|
+
const Component = isValidElementType(mod.default) ? mod.default : null;
|
|
2521
2373
|
if (Component) {
|
|
2522
2374
|
const categoryStatus = key === "4xx" ? 400 : 500;
|
|
2523
2375
|
element = createElement(errorBoundaryComponent, isMdxFile(file) ? {
|
|
@@ -2533,7 +2385,8 @@ async function wrapWithErrorBoundaries(segment, element, loadModule, createEleme
|
|
|
2533
2385
|
}
|
|
2534
2386
|
}
|
|
2535
2387
|
if (segment.error) {
|
|
2536
|
-
const
|
|
2388
|
+
const errorModule = await loadModule(segment.error);
|
|
2389
|
+
const ErrorComponent = isValidElementType(errorModule.default) ? errorModule.default : null;
|
|
2537
2390
|
if (ErrorComponent) element = createElement(errorBoundaryComponent, isMdxFile(segment.error) ? {
|
|
2538
2391
|
fallbackElement: createElement(ErrorComponent, {}),
|
|
2539
2392
|
children: element
|
|
@@ -3042,6 +2895,6 @@ var RenderTimeoutError = class extends Error {
|
|
|
3042
2895
|
}
|
|
3043
2896
|
};
|
|
3044
2897
|
//#endregion
|
|
3045
|
-
export { AccessGate, DEFAULT_LIMITS, DenySignal, METADATA_ROUTE_CONVENTIONS, RedirectSignal, RenderError, RenderTimeoutError, SlotAccessGate, WarningId, buildElementTree, buildNoJsResponse, callOnRequestError, canonicalize, classifyMetadataRoute, collectEarlyHintHeaders, createPipeline, enforceBodyLimits, executeAction, flushResponse, formatLinkHeader, generateTraceId, getLogger, getMetadataRouteAutoLink, getMetadataRouteServePath, getSetCookieHeaders, handleRouteRequest, hasOnRequestError, isRscActionRequest, loadInstrumentation, logCacheMiss, logMiddlewareError, logMiddlewareShortCircuit, logProxyError, logRenderError, logRequestCompleted, logRequestReceived, logSlowRequest, logSwrRefetchFailed, logWaitUntilRejected, logWaitUntilUnsupported, markResponseFlushed, parseBodySize, renderMetadataToElements, replaceTraceId, resolveAllowedMethods, resolveMetadata, resolveMetadataUrls, resolveSlotDenied, resolveStatusFile, resolveTitle, runMiddleware, runProxy, runWithEarlyHintsSender, runWithRequestContext, runWithTraceId, sendEarlyHints103, setLogger, setMutableCookieContext, setSegmentParams, setViteServer, validateCsrf, warnDenyInSuspense, warnRedirectInAccess, warnRedirectInSuspense, warnSlowSlotWithoutSuspense, warnStaticRequestApi, warnSuspenseWrappingChildren };
|
|
2898
|
+
export { AccessGate, DEFAULT_LIMITS, DenySignal, METADATA_ROUTE_CONVENTIONS, RedirectSignal, RenderError, RenderTimeoutError, SlotAccessGate, WarningId, buildElementTree, buildNoJsResponse, callOnRequestError, canonicalize, classifyMetadataRoute, coerce, collectEarlyHintHeaders, createPipeline, enforceBodyLimits, executeAction, flushResponse, formatLinkHeader, generateTraceId, getCookie, getHeader, getLogger, getMetadataRouteAutoLink, getMetadataRouteServePath, getSearchParams, getSegmentParams, getSetCookieHeaders, handleRouteRequest, hasOnRequestError, isRscActionRequest, loadInstrumentation, logCacheMiss, logMiddlewareError, logMiddlewareShortCircuit, logProxyError, logRenderError, logRequestCompleted, logRequestReceived, logSlowRequest, logSwrRefetchFailed, logWaitUntilRejected, logWaitUntilUnsupported, markResponseFlushed, parseBodySize, renderMetadataToElements, replaceTraceId, resolveAllowedMethods, resolveMetadata, resolveMetadataUrls, resolveSlotDenied, resolveStatusFile, resolveTitle, runMiddleware, runProxy, runWithEarlyHintsSender, runWithRequestContext, runWithTraceId, sendEarlyHints103, setLogger, setMutableCookieContext, setSegmentParams, setViteServer, validateCsrf, warnDenyInSuspense, warnRedirectInAccess, warnRedirectInSuspense, warnSlowSlotWithoutSuspense, warnStaticRequestApi, warnSuspenseWrappingChildren };
|
|
3046
2899
|
|
|
3047
2900
|
//# sourceMappingURL=internal.js.map
|