@timber-js/app 0.2.0-alpha.97 → 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/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/{metadata-routes-DS3eKNmf.js → metadata-routes-BU684ls2.js} +1 -1
- package/dist/_chunks/{metadata-routes-DS3eKNmf.js.map → metadata-routes-BU684ls2.js.map} +1 -1
- 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-classify-BjfuctV2.js +137 -0
- package/dist/_chunks/segment-classify-BjfuctV2.js.map +1 -0
- 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/{interception-BbqMCVXa.js → walkers-Tg0Alwcg.js} +66 -87
- 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 +63 -31
- 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 +41 -91
- 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} +9 -19
- 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} +5 -3
- 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 +285 -133
- 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/plugins/build-report.d.ts +6 -4
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/routing/convention-lint.d.ts.map +1 -1
- package/dist/routing/index.d.ts +5 -3
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +3 -3
- package/dist/routing/scanner.d.ts +1 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/segment-classify.d.ts +37 -8
- package/dist/routing/segment-classify.d.ts.map +1 -1
- package/dist/routing/status-file-lint.d.ts.map +1 -1
- package/dist/routing/types.d.ts +63 -23
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +51 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- 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/html-injector-core.d.ts +212 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +59 -59
- package/dist/server/html-injectors.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 +852 -852
- 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/node-stream-transforms.d.ts +46 -49
- package/dist/server/node-stream-transforms.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 +95 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- 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 +52 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +51 -32
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +117 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- 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/route-matcher.d.ts +20 -47
- package/dist/server/route-matcher.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 +119 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/status-code-resolver.d.ts +16 -11
- package/dist/server/status-code-resolver.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/dist/utils/directive-parser.d.ts +0 -45
- package/dist/utils/directive-parser.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/adapters/build-output-helper.ts +77 -0
- package/src/adapters/cloudflare.ts +10 -50
- package/src/adapters/nitro.ts +66 -50
- package/src/adapters/shared.ts +40 -0
- package/src/cache/timber-cache.ts +3 -2
- 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} +17 -48
- package/src/{plugins/dev-error-page.ts → dev-tools/error-page.ts} +5 -32
- package/src/{server/dev-holding-server.ts → dev-tools/holding-server.ts} +4 -2
- 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 +95 -34
- package/src/plugin-context.ts +1 -1
- package/src/plugins/adapter-build.ts +3 -1
- package/src/plugins/build-report.ts +13 -22
- package/src/plugins/dev-server.ts +3 -3
- package/src/plugins/routing.ts +14 -12
- package/src/plugins/shims.ts +1 -1
- package/src/plugins/static-build.ts +1 -1
- package/src/routing/codegen.ts +1 -1
- package/src/routing/convention-lint.ts +9 -8
- package/src/routing/index.ts +5 -3
- package/src/routing/interception.ts +1 -1
- package/src/routing/scanner.ts +22 -95
- package/src/routing/segment-classify.ts +107 -8
- package/src/routing/status-file-lint.ts +7 -5
- package/src/routing/types.ts +63 -23
- package/src/routing/walkers.ts +90 -0
- 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 +34 -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 +7 -12
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/fallback-error.ts +2 -2
- package/src/server/html-injector-core.ts +403 -0
- package/src/server/html-injectors.ts +158 -297
- 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/node-stream-transforms.ts +108 -248
- package/src/server/param-coercion.ts +76 -0
- package/src/server/pipeline-helpers.ts +204 -0
- package/src/server/pipeline-outcome.ts +167 -0
- package/src/server/pipeline-phases.ts +409 -0
- package/src/server/pipeline.ts +70 -540
- package/src/server/port-resolution.ts +215 -0
- package/src/server/request-context.ts +46 -451
- package/src/server/route-element-builder.ts +8 -4
- package/src/server/route-matcher.ts +28 -60
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/api-handler.ts +2 -2
- package/src/server/rsc-entry/error-renderer.ts +2 -2
- package/src/server/rsc-entry/helpers.ts +2 -7
- package/src/server/rsc-entry/index.ts +81 -366
- 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 +449 -0
- package/src/server/sitemap-generator.ts +1 -1
- package/src/server/slot-resolver.ts +1 -1
- package/src/server/ssr-entry.ts +1 -1
- package/src/server/state-tree-diff.ts +4 -1
- package/src/server/status-code-resolver.ts +112 -128
- package/src/server/tracing.ts +3 -3
- package/src/server/tree-builder.ts +134 -56
- 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/src/utils/directive-parser.ts +0 -392
- 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/interception-BbqMCVXa.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/segment-classify-BDNn6EzD.js +0 -65
- package/dist/_chunks/segment-classify-BDNn6EzD.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/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/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.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/manifest-status-resolver.ts +0 -215
- 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-logger.ts → dev-tools/logger.ts} +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Port resolution for the dev server, Vite preview, and the Node
|
|
3
|
+
* production preview server.
|
|
4
|
+
*
|
|
5
|
+
* Behavior (see TIM-842):
|
|
6
|
+
*
|
|
7
|
+
* 1. Default port is **3000** for both dev and prod.
|
|
8
|
+
* 2. If the user did NOT set an explicit port, auto-bump from 3000
|
|
9
|
+
* until a free port is found (3000 → 3001 → 3002 → …).
|
|
10
|
+
* 3. If the user DID set an explicit port (via `--port`, `PORT` env
|
|
11
|
+
* var, or `vite.config.ts` `server.port`), use it as-is and let
|
|
12
|
+
* the bind fail loudly on conflict (`strictPort: true`).
|
|
13
|
+
*
|
|
14
|
+
* The port-bump probe is performed by binding the **actual** server
|
|
15
|
+
* (e.g. the dev holding server) — not a throwaway probe — so there is
|
|
16
|
+
* no time-of-check / time-of-use race between probing and listening.
|
|
17
|
+
*
|
|
18
|
+
* Design doc: 21-dev-server.md §"Default Port and Auto-Bump".
|
|
19
|
+
*/
|
|
20
|
+
/** Default port used by `timber dev` and `timber preview`. */
|
|
21
|
+
export declare const DEFAULT_PORT = 3000;
|
|
22
|
+
/**
|
|
23
|
+
* A function that attempts to bind to a given port.
|
|
24
|
+
*
|
|
25
|
+
* Resolves with the bound port on success. Rejects with an error
|
|
26
|
+
* (typically with `code === 'EADDRINUSE'`) on failure.
|
|
27
|
+
*/
|
|
28
|
+
export type ListenFn = (port: number) => Promise<number>;
|
|
29
|
+
export interface ResolvePortInput {
|
|
30
|
+
/**
|
|
31
|
+
* Port read from `vite.config.ts` `server.port` or the `--port` CLI
|
|
32
|
+
* flag (Vite merges `--port` into `userConfig.server.port` before
|
|
33
|
+
* plugins see it).
|
|
34
|
+
*/
|
|
35
|
+
configPort?: number | undefined;
|
|
36
|
+
/** Raw value of `process.env.PORT`. */
|
|
37
|
+
envPort?: string | undefined;
|
|
38
|
+
/** Default port to use when neither `configPort` nor `envPort` is set. */
|
|
39
|
+
defaultPort?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ResolvedPortInput {
|
|
42
|
+
/** Port to start binding from. */
|
|
43
|
+
port: number;
|
|
44
|
+
/**
|
|
45
|
+
* `true` if the port came from an explicit user override (config or
|
|
46
|
+
* env). When `true`, callers must NOT auto-bump and must surface
|
|
47
|
+
* `EADDRINUSE` to the user.
|
|
48
|
+
*/
|
|
49
|
+
explicit: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Pure: compute the starting port from config / env / defaults.
|
|
53
|
+
*
|
|
54
|
+
* Performs no I/O — pair with {@link bindWithBump} to actually listen.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveStartPort(input: ResolvePortInput): ResolvedPortInput;
|
|
57
|
+
export interface BindWithBumpOptions {
|
|
58
|
+
/** First port to attempt. */
|
|
59
|
+
startPort: number;
|
|
60
|
+
/**
|
|
61
|
+
* If `true`, increment the port and retry on `EADDRINUSE`. If
|
|
62
|
+
* `false`, attempt once and let the error propagate.
|
|
63
|
+
*/
|
|
64
|
+
autoBump: boolean;
|
|
65
|
+
/** Maximum number of port attempts when `autoBump` is `true`. */
|
|
66
|
+
maxAttempts?: number;
|
|
67
|
+
}
|
|
68
|
+
export interface BindWithBumpResult {
|
|
69
|
+
/** Port that was actually bound. */
|
|
70
|
+
port: number;
|
|
71
|
+
/** `true` if the bound port differs from `startPort`. */
|
|
72
|
+
bumped: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Bind a server starting at `startPort`, optionally bumping the port
|
|
76
|
+
* on `EADDRINUSE` until a free one is found.
|
|
77
|
+
*
|
|
78
|
+
* Use this with the actual server you intend to keep listening (e.g.
|
|
79
|
+
* the dev holding server). Pairing the probe with the real listen
|
|
80
|
+
* eliminates the TOCTOU race that a throwaway probe would introduce.
|
|
81
|
+
*/
|
|
82
|
+
export declare function bindWithBump(listen: ListenFn, options: BindWithBumpOptions): Promise<BindWithBumpResult>;
|
|
83
|
+
/** True if `err` is a Node `EADDRINUSE` error from `server.listen()`. */
|
|
84
|
+
export declare function isAddrInUse(err: unknown): boolean;
|
|
85
|
+
export interface StartDevServerPortInput {
|
|
86
|
+
/** Resolved port from `userConfig.server?.port` (or `--port`), or undefined. */
|
|
87
|
+
configPort: number | undefined;
|
|
88
|
+
/** Raw `process.env.PORT` value. */
|
|
89
|
+
envPort: string | undefined;
|
|
90
|
+
/** ListenFn for the holding server (or any pre-bind probe target). */
|
|
91
|
+
listen: ListenFn;
|
|
92
|
+
/** Logger — defaults to `console`. Injected for tests. */
|
|
93
|
+
log?: (msg: string) => void;
|
|
94
|
+
warn?: (msg: string) => void;
|
|
95
|
+
}
|
|
96
|
+
export interface StartDevServerPortResult {
|
|
97
|
+
/** Port chosen for both the holding server and Vite's dev server. */
|
|
98
|
+
port: number;
|
|
99
|
+
/** True if the user explicitly set the port (=> Vite must `strictPort: true`). */
|
|
100
|
+
explicit: boolean;
|
|
101
|
+
/** True if the holding server actually bound the port. */
|
|
102
|
+
bound: boolean;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Run the full dev-server port resolution + holding-server bind sequence.
|
|
106
|
+
*
|
|
107
|
+
* Resolves the port from config / env / default, attempts to bind the
|
|
108
|
+
* holding server (auto-bumping when the port came from the default),
|
|
109
|
+
* and logs the chosen URL. On a clean failure for an explicit port, it
|
|
110
|
+
* warns and falls back to the requested port so Vite can surface the
|
|
111
|
+
* conflict via `strictPort: true`.
|
|
112
|
+
*
|
|
113
|
+
* Extracted from `index.ts` so the rootSync `config()` hook stays
|
|
114
|
+
* focused on plugin assembly.
|
|
115
|
+
*/
|
|
116
|
+
export declare function startDevServerPort(input: StartDevServerPortInput): Promise<StartDevServerPortResult>;
|
|
117
|
+
//# sourceMappingURL=port-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-resolution.d.ts","sourceRoot":"","sources":["../../src/server/port-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,8DAA8D;AAC9D,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAIzD,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAiB3E;AAID,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAkB7B;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIjD;AAID,MAAM,WAAW,uBAAuB;IACtC,gFAAgF;IAChF,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oCAAoC;IACpC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,sEAAsE;IACtE,MAAM,EAAE,QAAQ,CAAC;IACjB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAqCnC"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Request Context — per-request ALS store for
|
|
2
|
+
* Request Context — per-request ALS store for headers, search params,
|
|
3
|
+
* segment params, and request scope lifecycle.
|
|
3
4
|
*
|
|
4
5
|
* Follows the same pattern as tracing.ts: a module-level AsyncLocalStorage
|
|
5
6
|
* instance, public accessor functions that throw outside request scope,
|
|
6
7
|
* and a framework-internal `runWithRequestContext()` to establish scope.
|
|
7
8
|
*
|
|
9
|
+
* Cookie state lives in `cookie-context.ts` (split out in TIM-853). The
|
|
10
|
+
* scope set up here owns the cookie jar / parsedCookies fields on the
|
|
11
|
+
* store, but the cookie API and helpers are in the cookie module.
|
|
12
|
+
*
|
|
8
13
|
* See design/04-authorization.md §"AccessContext does not include cookies or headers"
|
|
9
14
|
* and design/11-platform.md §"AsyncLocalStorage".
|
|
10
|
-
* See design/29-cookies.md for cookie mutation semantics.
|
|
11
15
|
*/
|
|
12
16
|
import { requestContextAls } from './als-registry.js';
|
|
13
17
|
export { requestContextAls };
|
|
@@ -17,97 +21,28 @@ export { requestContextAls };
|
|
|
17
21
|
* Available in middleware, access checks, server components, and server actions.
|
|
18
22
|
* Throws if called outside a request context (security principle #2: no global fallback).
|
|
19
23
|
*/
|
|
20
|
-
export declare function getHeaders():
|
|
24
|
+
export declare function getHeaders(): ReadonlyHeaders;
|
|
21
25
|
/**
|
|
22
26
|
* Returns the value of a single request header, or undefined if absent.
|
|
23
27
|
*
|
|
24
|
-
* Thin wrapper over `
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* ```ts
|
|
28
|
-
* import { getHeader } from '@timber-js/app/server'
|
|
28
|
+
* Thin wrapper over `getHeaders().get(name)` for the common case where
|
|
29
|
+
* you need exactly one header.
|
|
29
30
|
*
|
|
30
|
-
*
|
|
31
|
-
* const auth = await getHeader('authorization');
|
|
32
|
-
* }
|
|
33
|
-
* ```
|
|
31
|
+
* @internal — not part of the public API. Use `getHeaders().get(name)` instead.
|
|
34
32
|
*/
|
|
35
|
-
export declare function getHeader(name: string):
|
|
33
|
+
export declare function getHeader(name: string): string | undefined;
|
|
36
34
|
/**
|
|
37
|
-
* Returns
|
|
38
|
-
*
|
|
39
|
-
* Available in middleware, access checks, server components, and server actions.
|
|
40
|
-
* Throws if called outside a request context (security principle #2: no global fallback).
|
|
41
|
-
*
|
|
42
|
-
* Read methods (.get, .has, .getAll) are always available and reflect
|
|
43
|
-
* read-your-own-writes from .set() calls in the same request.
|
|
44
|
-
*
|
|
45
|
-
* Mutation methods (.set, .delete, .clear) are only available in mutable
|
|
46
|
-
* contexts (middleware.ts, server actions, route.ts handlers). Calling them
|
|
47
|
-
* in read-only contexts (access.ts, server components) throws.
|
|
48
|
-
*
|
|
49
|
-
* See design/29-cookies.md
|
|
50
|
-
*/
|
|
51
|
-
export declare function getCookies(): Promise<RequestCookies>;
|
|
52
|
-
/**
|
|
53
|
-
* Returns the value of a single cookie, or undefined if absent.
|
|
54
|
-
*
|
|
55
|
-
* Thin wrapper over `(await getCookies()).get(name)` for the common
|
|
56
|
-
* case where you need exactly one cookie.
|
|
57
|
-
*
|
|
58
|
-
* ```ts
|
|
59
|
-
* import { getCookie } from '@timber-js/app/server'
|
|
60
|
-
*
|
|
61
|
-
* export default async function Page() {
|
|
62
|
-
* const session = await getCookie('session_id');
|
|
63
|
-
* }
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
export declare function getCookie(name: string): Promise<string | undefined>;
|
|
67
|
-
/**
|
|
68
|
-
* Returns a Promise resolving to the current request's raw URLSearchParams.
|
|
69
|
-
*
|
|
70
|
-
* For typed, parsed search params, import the definition from params.ts
|
|
71
|
-
* and call `.load()` or `.parse()`:
|
|
72
|
-
*
|
|
73
|
-
* ```ts
|
|
74
|
-
* import { searchParams } from './params'
|
|
75
|
-
* const parsed = await searchParams.get()
|
|
76
|
-
* ```
|
|
35
|
+
* Returns the current request's raw URLSearchParams.
|
|
77
36
|
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* ```ts
|
|
81
|
-
* import { getSearchParams } from '@timber-js/app/server'
|
|
82
|
-
* import { searchParams } from './params'
|
|
83
|
-
* const parsed = searchParams.parse(await getSearchParams())
|
|
84
|
-
* ```
|
|
85
|
-
*
|
|
86
|
-
* Throws if called outside a request context.
|
|
37
|
+
* @internal — not part of the public API. Use `defineSearchParams().get()` instead.
|
|
87
38
|
*/
|
|
88
|
-
export declare function getSearchParams():
|
|
39
|
+
export declare function getSearchParams(): URLSearchParams;
|
|
89
40
|
/**
|
|
90
|
-
* Returns
|
|
91
|
-
*
|
|
92
|
-
* Segment params are set by the pipeline after route matching and param
|
|
93
|
-
* coercion (via params.ts codecs). When no params.ts exists, values are
|
|
94
|
-
* raw strings. When codecs are defined, values are already coerced
|
|
95
|
-
* (e.g., `id` is a `number` if `defineSegmentParams({ id: z.coerce.number() })`).
|
|
96
|
-
*
|
|
97
|
-
* This is the primary way page and layout components access route params:
|
|
98
|
-
*
|
|
99
|
-
* ```ts
|
|
100
|
-
* import { getSegmentParams } from '@timber-js/app/server'
|
|
41
|
+
* Returns the current request's coerced segment params.
|
|
101
42
|
*
|
|
102
|
-
*
|
|
103
|
-
* const { slug } = await getSegmentParams()
|
|
104
|
-
* // ...
|
|
105
|
-
* }
|
|
106
|
-
* ```
|
|
107
|
-
*
|
|
108
|
-
* Throws if called outside a request context.
|
|
43
|
+
* @internal — not part of the public API. Use `defineSegmentParams().get()` instead.
|
|
109
44
|
*/
|
|
110
|
-
export declare function getSegmentParams():
|
|
45
|
+
export declare function getSegmentParams(): Record<string, string | string[]>;
|
|
111
46
|
/**
|
|
112
47
|
* Set the segment params promise on the current request context.
|
|
113
48
|
* Called by the pipeline after route matching and param coercion.
|
|
@@ -131,68 +66,15 @@ export declare function getRequestSearchString(): string;
|
|
|
131
66
|
* still a Headers instance, but user code should not mutate it.
|
|
132
67
|
*/
|
|
133
68
|
export type ReadonlyHeaders = Pick<Headers, 'get' | 'has' | 'entries' | 'keys' | 'values' | 'forEach' | typeof Symbol.iterator>;
|
|
134
|
-
/** Options for setting a cookie. See design/29-cookies.md. */
|
|
135
|
-
export interface CookieOptions {
|
|
136
|
-
/** Domain scope. Default: omitted (current domain only). */
|
|
137
|
-
domain?: string;
|
|
138
|
-
/** URL path scope. Default: '/'. */
|
|
139
|
-
path?: string;
|
|
140
|
-
/** Expiration date. Mutually exclusive with maxAge. */
|
|
141
|
-
expires?: Date;
|
|
142
|
-
/** Max age in seconds. Mutually exclusive with expires. */
|
|
143
|
-
maxAge?: number;
|
|
144
|
-
/** Prevent client-side JS access. Default: true. */
|
|
145
|
-
httpOnly?: boolean;
|
|
146
|
-
/** Only send over HTTPS. Default: true. */
|
|
147
|
-
secure?: boolean;
|
|
148
|
-
/** Cross-site request policy. Default: 'lax'. */
|
|
149
|
-
sameSite?: 'strict' | 'lax' | 'none';
|
|
150
|
-
/** Partitioned (CHIPS) — isolate cookie per top-level site. Default: false. */
|
|
151
|
-
partitioned?: boolean;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Cookie accessor returned by `getCookies()`.
|
|
155
|
-
*
|
|
156
|
-
* Read methods are always available. Mutation methods throw in read-only
|
|
157
|
-
* contexts (access.ts, server components).
|
|
158
|
-
*/
|
|
159
|
-
export interface RequestCookies {
|
|
160
|
-
/** Get a cookie value by name. Returns undefined if not present. */
|
|
161
|
-
get(name: string): string | undefined;
|
|
162
|
-
/** Check if a cookie exists. */
|
|
163
|
-
has(name: string): boolean;
|
|
164
|
-
/** Get all cookies as an array of { name, value } pairs. */
|
|
165
|
-
getAll(): Array<{
|
|
166
|
-
name: string;
|
|
167
|
-
value: string;
|
|
168
|
-
}>;
|
|
169
|
-
/** Number of cookies. */
|
|
170
|
-
readonly size: number;
|
|
171
|
-
/** Set a cookie. Only available in mutable contexts (middleware, actions, route handlers). */
|
|
172
|
-
set(name: string, value: string, options?: CookieOptions): void;
|
|
173
|
-
/**
|
|
174
|
-
* Copy all `Set-Cookie` headers from a `Headers` object.
|
|
175
|
-
* Parses each header and forwards name, value, and all attributes
|
|
176
|
-
* (path, domain, max-age, expires, sameSite, secure, httpOnly, partitioned).
|
|
177
|
-
*
|
|
178
|
-
* Useful when forwarding cookies from an internal `fetch()` or auth handler:
|
|
179
|
-
* ```ts
|
|
180
|
-
* const response = await auth.handler(req);
|
|
181
|
-
* getCookies().then(c => c.setFromHeaders(response.headers));
|
|
182
|
-
* ```
|
|
183
|
-
*/
|
|
184
|
-
setFromHeaders(headers: Headers): void;
|
|
185
|
-
/** Delete a cookie. Only available in mutable contexts. */
|
|
186
|
-
delete(name: string, options?: Pick<CookieOptions, 'path' | 'domain'>): void;
|
|
187
|
-
/** Delete all cookies. Only available in mutable contexts. */
|
|
188
|
-
clear(): void;
|
|
189
|
-
/** Serialize cookies as a Cookie header string. */
|
|
190
|
-
toString(): string;
|
|
191
|
-
}
|
|
192
69
|
/**
|
|
193
70
|
* Run a callback within a request context. Used by the pipeline to establish
|
|
194
71
|
* per-request ALS scope so that `getHeaders()` and `getCookies()` work.
|
|
195
72
|
*
|
|
73
|
+
* If the request was previously registered via `seedRequestCookies`, the
|
|
74
|
+
* resulting context's `parsedCookies` map is initialized from the seed and
|
|
75
|
+
* the raw `cookieHeader` is left empty — `parseCookieHeader` is never called
|
|
76
|
+
* for that request. This is the no-JS form-rerender path. See TIM-868.
|
|
77
|
+
*
|
|
196
78
|
* @param req - The incoming Request object.
|
|
197
79
|
* @param fn - The function to run within the request context.
|
|
198
80
|
*/
|
|
@@ -211,25 +93,6 @@ export declare function setMutableCookieContext(mutable: boolean): void;
|
|
|
211
93
|
* See design/29-cookies.md §"Streaming Constraint: Post-Flush Cookie Warning"
|
|
212
94
|
*/
|
|
213
95
|
export declare function markResponseFlushed(): void;
|
|
214
|
-
/**
|
|
215
|
-
* Build a Map of cookie name → value reflecting the current request's
|
|
216
|
-
* read-your-own-writes state. Includes incoming cookies plus any
|
|
217
|
-
* mutations from getCookies().set() / getCookies().delete() in the same request.
|
|
218
|
-
*
|
|
219
|
-
* Used by SSR renderers to populate NavContext.cookies so that
|
|
220
|
-
* useCookie()'s server snapshot matches the actual response state.
|
|
221
|
-
*
|
|
222
|
-
* See design/29-cookies.md §"Read-Your-Own-Writes"
|
|
223
|
-
* See design/triage/TIM-441-cookie-api-triage.md §4
|
|
224
|
-
*/
|
|
225
|
-
export declare function getCookiesForSsr(): Map<string, string>;
|
|
226
|
-
/**
|
|
227
|
-
* Collect all Set-Cookie headers from the cookie jar.
|
|
228
|
-
* Called by the framework at flush time to apply cookies to the response.
|
|
229
|
-
*
|
|
230
|
-
* Returns an array of serialized Set-Cookie header values.
|
|
231
|
-
*/
|
|
232
|
-
export declare function getSetCookieHeaders(): string[];
|
|
233
96
|
/**
|
|
234
97
|
* Apply middleware-injected request headers to the current request context.
|
|
235
98
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,iBAAiB,EAA4B,MAAM,mBAAmB,CAAC;AAQhF,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAQ7B;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,eAAe,CAS5C;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,eAAe,CASjD;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAepE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAMhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAG/C;AAID;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,OAAO,EACP,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,MAAM,CAAC,QAAQ,CACnF,CAAC;AAIF;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAmBrE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK9D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmBhE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-element-builder.d.ts","sourceRoot":"","sources":["../../src/server/route-element-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"route-element-builder.d.ts","sourceRoot":"","sources":["../../src/server/route-element-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAa7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAezD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAM7D;AAID;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAID,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CACvC;AAED,+CAA+C;AAC/C,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IAC3C,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC;IAC5B,2CAA2C;IAC3C,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,wDAAwD;IACxD,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,qCAAqC;IACrC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;aAE7B,MAAM,EAAE,UAAU,GAAG,cAAc;aACnC,gBAAgB,EAAE,oBAAoB,EAAE;aACxC,QAAQ,EAAE,mBAAmB,EAAE;gBAF/B,MAAM,EAAE,UAAU,GAAG,cAAc,EACnC,gBAAgB,EAAE,oBAAoB,EAAE,EACxC,QAAQ,EAAE,mBAAmB,EAAE;CAIlD;AA8DD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,YAAY,CAAC,EAAE,mBAAmB,EAClC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GACnC,OAAO,CAAC,kBAAkB,CAAC,CAmV7B"}
|
|
@@ -8,58 +8,32 @@
|
|
|
8
8
|
* See design/07-routing.md §"Request Lifecycle"
|
|
9
9
|
*/
|
|
10
10
|
import type { RouteMatch } from './pipeline.js';
|
|
11
|
+
import type { SegmentNode, RouteTree } from '../routing/types.js';
|
|
11
12
|
import { type MetadataRouteType } from './metadata-routes.js';
|
|
12
13
|
/** A file reference in the manifest (lazy import + path). */
|
|
13
|
-
interface ManifestFile {
|
|
14
|
+
export interface ManifestFile {
|
|
14
15
|
load: () => Promise<unknown>;
|
|
15
16
|
filePath: string;
|
|
16
17
|
}
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
default?: ManifestFile;
|
|
36
|
-
denied?: ManifestFile;
|
|
37
|
-
statusFiles?: Record<string, ManifestFile>;
|
|
38
|
-
jsonStatusFiles?: Record<string, ManifestFile>;
|
|
39
|
-
legacyStatusFiles?: Record<string, ManifestFile>;
|
|
40
|
-
/** Metadata route files (sitemap.ts, robots.ts, icon.tsx, etc.) keyed by base name */
|
|
41
|
-
metadataRoutes?: Record<string, ManifestFile>;
|
|
42
|
-
children: ManifestSegmentNode[];
|
|
43
|
-
slots: Record<string, ManifestSegmentNode>;
|
|
44
|
-
}
|
|
45
|
-
/** The manifest shape from virtual:timber-route-manifest. */
|
|
46
|
-
export interface ManifestRoot {
|
|
47
|
-
root: ManifestSegmentNode;
|
|
48
|
-
/**
|
|
49
|
-
* Absolute path to the Vite project root, captured at build/load time.
|
|
50
|
-
* Used by dev-only features (e.g., dev error page frame classification)
|
|
51
|
-
* that need a correct project root even when CWD differs (e.g., monorepo
|
|
52
|
-
* custom root). See TIM-807 / TIM-808.
|
|
53
|
-
*/
|
|
18
|
+
/**
|
|
19
|
+
* A segment node as it appears in the virtual:timber-route-manifest module.
|
|
20
|
+
*
|
|
21
|
+
* Type alias for `SegmentNode<ManifestFile>` — the same shape used by the
|
|
22
|
+
* scanner, only with lazy `load` functions instead of build-time extension
|
|
23
|
+
* metadata.
|
|
24
|
+
*/
|
|
25
|
+
export type ManifestSegmentNode = SegmentNode<ManifestFile>;
|
|
26
|
+
/**
|
|
27
|
+
* The manifest shape from virtual:timber-route-manifest.
|
|
28
|
+
*
|
|
29
|
+
* Extends `RouteTree<ManifestFile>` with `viteRoot`, the absolute path
|
|
30
|
+
* to the Vite project root captured at build/load time. Used by dev-only
|
|
31
|
+
* features (e.g., dev error page frame classification) that need a
|
|
32
|
+
* correct project root even when CWD differs (e.g., monorepo custom root).
|
|
33
|
+
* See TIM-807 / TIM-808.
|
|
34
|
+
*/
|
|
35
|
+
export interface ManifestRoot extends RouteTree<ManifestFile> {
|
|
54
36
|
viteRoot: string;
|
|
55
|
-
proxy?: ManifestFile;
|
|
56
|
-
/**
|
|
57
|
-
* Global error page: app/global-error.{tsx,ts,jsx,js}
|
|
58
|
-
* Tier 2 — standalone full-page replacement (no layouts) when no
|
|
59
|
-
* segment-level error file is found. SSR-only render.
|
|
60
|
-
* See design/10-error-handling.md §"Tier 2"
|
|
61
|
-
*/
|
|
62
|
-
globalError?: ManifestFile;
|
|
63
37
|
}
|
|
64
38
|
/**
|
|
65
39
|
* Create a route matcher function from a manifest.
|
|
@@ -93,5 +67,4 @@ export interface MetadataRouteMatch {
|
|
|
93
67
|
* See design/16-metadata.md §"Metadata Routes"
|
|
94
68
|
*/
|
|
95
69
|
export declare function createMetadataRouteMatcher(manifest: ManifestRoot): (pathname: string) => MetadataRouteMatch | null;
|
|
96
|
-
export {};
|
|
97
70
|
//# sourceMappingURL=route-matcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-matcher.d.ts","sourceRoot":"","sources":["../../src/server/route-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,
|
|
1
|
+
{"version":3,"file":"route-matcher.d.ts","sourceRoot":"","sources":["../../src/server/route-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAW9B,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAE5D;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAa,SAAQ,SAAS,CAAC,YAAY,CAAC;IAC3D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,GACrB,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,CAEzC;AAuMD,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,IAAI,EAAE,iBAAiB,CAAC;IACxB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,IAAI,EAAE,YAAY,CAAC;IACnB,0DAA0D;IAC1D,OAAO,EAAE,mBAAmB,CAAC;IAC7B;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,YAAY,GACrB,CAAC,QAAQ,EAAE,MAAM,KAAK,kBAAkB,GAAG,IAAI,CAMjD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware-on-actions runner — runs the matched route's `middleware.ts`
|
|
3
|
+
* chain for an action POST inside its own `runWithRequestContext` scope
|
|
4
|
+
* and returns a `MiddlewareOutcome` value the dispatcher can translate.
|
|
5
|
+
*
|
|
6
|
+
* Lifted out of `wrap-action-dispatch.ts` (TIM-853) so the dispatcher
|
|
7
|
+
* can be read top-to-bottom without scrolling past the chain runner. The
|
|
8
|
+
* function is intentionally a free function (not a closure over deps)
|
|
9
|
+
* so it can be unit-tested in isolation. It does not import virtual
|
|
10
|
+
* modules and does not call into the action handler — it owns exactly
|
|
11
|
+
* the "run middleware once" step and nothing else.
|
|
12
|
+
*
|
|
13
|
+
* Failure modes are encoded as outcome variants rather than thrown so the
|
|
14
|
+
* caller never has to wrap this in try/catch. The only thrown errors are
|
|
15
|
+
* truly unexpected (programmer bugs) and propagate naturally.
|
|
16
|
+
*
|
|
17
|
+
* See TIM-871 for the full design rationale (closing the
|
|
18
|
+
* CVE-2025-29927-class bug where actions silently bypass middleware).
|
|
19
|
+
*/
|
|
20
|
+
import { DenySignal, RedirectSignal } from '../primitives.js';
|
|
21
|
+
import type { RouteMatch } from '../pipeline.js';
|
|
22
|
+
/** Coerce a matched route's segment params via its `params.ts` codecs. */
|
|
23
|
+
export type CoerceSegmentParamsFn = (match: RouteMatch) => Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Outcome of running middleware on an action request, surfaced from the
|
|
26
|
+
* inner `runWithRequestContext` scope so the outer dispatcher can convert
|
|
27
|
+
* it to a Response (short-circuit) or continue to the action handler.
|
|
28
|
+
*
|
|
29
|
+
* Each variant carries the post-middleware Set-Cookie snapshot so the
|
|
30
|
+
* outer scope can apply cookies to whichever Response it ultimately
|
|
31
|
+
* returns. The middleware ALS scope ends before the action ALS scope
|
|
32
|
+
* begins, so cookie state must be threaded explicitly across the boundary
|
|
33
|
+
* via `seedRequestCookies` (cookie reads) and `setCookieHeaders` (cookie
|
|
34
|
+
* writes).
|
|
35
|
+
*/
|
|
36
|
+
export type MiddlewareOutcome = {
|
|
37
|
+
kind: 'continue';
|
|
38
|
+
overlay: Headers;
|
|
39
|
+
cookies: Map<string, string>;
|
|
40
|
+
setCookieHeaders: string[];
|
|
41
|
+
} | {
|
|
42
|
+
kind: 'short-circuit';
|
|
43
|
+
response: Response;
|
|
44
|
+
setCookieHeaders: string[];
|
|
45
|
+
} | {
|
|
46
|
+
kind: 'redirect';
|
|
47
|
+
signal: RedirectSignal;
|
|
48
|
+
setCookieHeaders: string[];
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'deny';
|
|
51
|
+
signal: DenySignal;
|
|
52
|
+
match: RouteMatch;
|
|
53
|
+
setCookieHeaders: string[];
|
|
54
|
+
} | {
|
|
55
|
+
kind: 'param-coercion-error';
|
|
56
|
+
} | {
|
|
57
|
+
kind: 'error';
|
|
58
|
+
error: unknown;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Run the matched route's middleware chain inside a fresh request-context
|
|
62
|
+
* scope, captured as a `MiddlewareOutcome` value the outer dispatcher can
|
|
63
|
+
* translate to a Response or use as the seed for the action handler.
|
|
64
|
+
*/
|
|
65
|
+
export declare function runMiddlewareForAction(req: Request, match: RouteMatch, coerceSegmentParams: CoerceSegmentParamsFn): Promise<MiddlewareOutcome>;
|
|
66
|
+
//# sourceMappingURL=action-middleware-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-middleware-runner.d.ts","sourceRoot":"","sources":["../../../src/server/rsc-entry/action-middleware-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,0EAA0E;AAC1E,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,iBAAiB,GACzB;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,sBAAsB,CAAC;CAC9B,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEN;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,mBAAmB,EAAE,qBAAqB,GACzC,OAAO,CAAC,iBAAiB,CAAC,CA8E5B"}
|
|
@@ -107,7 +107,7 @@ export declare function buildRedirectResponse(req: Request, signal: RedirectSign
|
|
|
107
107
|
* is not an application error — suppress it from error boundaries and logs.
|
|
108
108
|
*/
|
|
109
109
|
export declare function isAbortError(error: unknown): boolean;
|
|
110
|
-
export
|
|
110
|
+
export { escapeHtml } from '../utils/escape-html.js';
|
|
111
111
|
/**
|
|
112
112
|
* Parse a Cookie header string into a name→value Map.
|
|
113
113
|
* Used to populate NavContext.cookies for SSR hooks (useCookie).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/server/rsc-entry/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAE,CAQ/F;AAID;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,yDAAyD;IACzD,gBAAgB,IAAI,MAAM,CAAC;IAC3B,yEAAyE;IACzE,aAAa,IAAI,mBAAmB,EAAE,CAAC;CACxC;AAED,wBAAgB,2BAA2B,IAAI,qBAAqB,CAkCnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,EAAE,CA8ClE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,gBAAgB,EAAE,KAAK,CAAC;IACtB,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IAC3C,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC,GACD,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA0B3C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,cAAc,EACtB,eAAe,EAAE,OAAO,GACvB,QAAQ,CAOV;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIpD;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/server/rsc-entry/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAE,CAQ/F;AAID;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,yDAAyD;IACzD,gBAAgB,IAAI,MAAM,CAAC;IAC3B,yEAAyE;IACzE,aAAa,IAAI,mBAAmB,EAAE,CAAC;CACxC;AAED,wBAAgB,2BAA2B,IAAI,qBAAqB,CAkCnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,EAAE,CA8ClE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,gBAAgB,EAAE,KAAK,CAAC;IACtB,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IAC3C,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC,GACD,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA0B3C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,cAAc,EACtB,eAAe,EAAE,OAAO,GACvB,QAAQ,CAOV;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIpD;AAGD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/rsc-entry/index.ts"],"names":[],"mappings":"AAuBA,OAAO,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/rsc-entry/index.ts"],"names":[],"mappings":"AAuBA,OAAO,uCAAuC,CAAC;AAiC/C,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AAgCtB;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,mBAAmB,EAAE,KAAK,IAAI,GACtF,IAAI,CAEN;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAE5E;AAqWD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAInE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;;AAE1D,wBAAiE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route renderer — turns a matched route into a Response.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `rsc-entry/index.ts` so the entry can stay focused on
|
|
5
|
+
* pipeline construction. This module owns the steps that happen *after*
|
|
6
|
+
* the pipeline has matched a route and before it commits a response:
|
|
7
|
+
* element-tree build, RSC Flight render, and dispatch to either the SSR
|
|
8
|
+
* HTML path or the RSC payload path. It also handles the
|
|
9
|
+
* synchronous-signal escape hatches (deny / redirect / render error
|
|
10
|
+
* thrown during stream creation) so the entry doesn't carry that logic.
|
|
11
|
+
*
|
|
12
|
+
* The function is parameterized over its dependencies — `clientBootstrap`,
|
|
13
|
+
* `clientJsDisabled`, `rootSegment`, `globalError` — so the entry passes
|
|
14
|
+
* them in once at handler-construction time and they ride along on every
|
|
15
|
+
* call. No globals, no closures over the entry's createRequestHandler
|
|
16
|
+
* scope.
|
|
17
|
+
*
|
|
18
|
+
* Design docs: 02-rendering-pipeline.md, 19-client-navigation.md.
|
|
19
|
+
*/
|
|
20
|
+
import type { BuildManifest } from '../build-manifest.js';
|
|
21
|
+
import type { ClientBootstrapConfig } from '../html-injectors.js';
|
|
22
|
+
import type { InterceptionContext, RouteMatch } from '../pipeline.js';
|
|
23
|
+
import type { ManifestSegmentNode } from '../route-matcher.js';
|
|
24
|
+
/**
|
|
25
|
+
* Static-per-handler dependencies for `renderRoute` — captured once at
|
|
26
|
+
* handler construction so each per-request call site only has to pass
|
|
27
|
+
* the request-specific arguments.
|
|
28
|
+
*/
|
|
29
|
+
export interface RenderRouteDeps {
|
|
30
|
+
clientBootstrap: ClientBootstrapConfig;
|
|
31
|
+
clientJsDisabled: boolean;
|
|
32
|
+
rootSegment: ManifestSegmentNode;
|
|
33
|
+
buildManifest: BuildManifest;
|
|
34
|
+
globalError?: {
|
|
35
|
+
load: () => Promise<unknown>;
|
|
36
|
+
filePath: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Render a matched route to an HTML Response via RSC → SSR pipeline,
|
|
41
|
+
* or return a raw RSC Flight stream for client-side navigation requests.
|
|
42
|
+
*
|
|
43
|
+
* 1. Load page/layout components from the segment chain
|
|
44
|
+
* 2. Resolve metadata
|
|
45
|
+
* 3. Render to RSC Flight stream (serializes "use client" as references)
|
|
46
|
+
* 4. If Accept: text/x-component → return RSC stream directly
|
|
47
|
+
* Otherwise → pass RSC stream to SSR entry for HTML rendering
|
|
48
|
+
*/
|
|
49
|
+
export declare function renderRoute(req: Request, match: RouteMatch, responseHeaders: Headers, deps: RenderRouteDeps, interception?: InterceptionContext): Promise<Response>;
|
|
50
|
+
//# sourceMappingURL=render-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-route.d.ts","sourceRoot":"","sources":["../../../src/server/rsc-entry/render-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAkB/D;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,qBAAqB,CAAC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,mBAAmB,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,eAAe,EAAE,OAAO,EACxB,IAAI,EAAE,eAAe,EACrB,YAAY,CAAC,EAAE,mBAAmB,GACjC,OAAO,CAAC,QAAQ,CAAC,CA+NnB"}
|