@timber-js/app 0.2.0-alpha.2 → 0.2.0-alpha.200
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/agent-skill.md +346 -0
- package/dist/_chunks/actions-d1hCqnU3.js +345 -0
- package/dist/_chunks/actions-d1hCqnU3.js.map +1 -0
- package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
- package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
- package/dist/_chunks/base-path-DaQrzbez.js +80 -0
- package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
- package/dist/_chunks/build-manifest-DTmSGLRz.js +135 -0
- package/dist/_chunks/build-manifest-DTmSGLRz.js.map +1 -0
- package/dist/_chunks/build-output-helper-9dqCv1pZ.js +370 -0
- package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +1 -0
- package/dist/_chunks/cache-api-ByagcC-J.js +1149 -0
- package/dist/_chunks/cache-api-ByagcC-J.js.map +1 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
- package/dist/_chunks/chains-Bpb0W4ax.js +412 -0
- package/dist/_chunks/chains-Bpb0W4ax.js.map +1 -0
- package/dist/_chunks/cli-check-D6VolrDV.js +293 -0
- package/dist/_chunks/cli-check-D6VolrDV.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D6rO-VcS.js +299 -0
- package/dist/_chunks/cli-schema-sync-D6rO-VcS.js.map +1 -0
- package/dist/_chunks/cloudflare-BFb__LYG.js +1290 -0
- package/dist/_chunks/cloudflare-BFb__LYG.js.map +1 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/convention-lint-fRkwVwEH.js +893 -0
- package/dist/_chunks/convention-lint-fRkwVwEH.js.map +1 -0
- package/dist/_chunks/dist-DtrJyBbw.js +386 -0
- package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
- package/dist/_chunks/error-boundary-BfPHZjm0.js +1050 -0
- package/dist/_chunks/error-boundary-BfPHZjm0.js.map +1 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
- package/dist/_chunks/file-cache-Dw6BJPG7.js +458 -0
- package/dist/_chunks/file-cache-Dw6BJPG7.js.map +1 -0
- package/dist/_chunks/format-BKclgVbk.js +14 -0
- package/dist/_chunks/format-BKclgVbk.js.map +1 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
- package/dist/_chunks/graph-cache-CP4GEmf9.js +304 -0
- package/dist/_chunks/graph-cache-CP4GEmf9.js.map +1 -0
- package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
- package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
- package/dist/_chunks/live-graph-D_2D32Ad.js +150 -0
- package/dist/_chunks/live-graph-D_2D32Ad.js.map +1 -0
- package/dist/_chunks/logger-uLBuGKDI.js +1484 -0
- package/dist/_chunks/logger-uLBuGKDI.js.map +1 -0
- package/dist/_chunks/navigation-context-D0TU0Jog.js +135 -0
- package/dist/_chunks/navigation-context-D0TU0Jog.js.map +1 -0
- package/dist/_chunks/navigation-root-mHSK9psY.js +126 -0
- package/dist/_chunks/navigation-root-mHSK9psY.js.map +1 -0
- package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
- package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
- package/dist/_chunks/plugin-context-8idfR3UZ.js +321 -0
- package/dist/_chunks/plugin-context-8idfR3UZ.js.map +1 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
- package/dist/_chunks/poison-scan-Bm9Yyqk9.js +101 -0
- package/dist/_chunks/poison-scan-Bm9Yyqk9.js.map +1 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
- package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
- package/dist/_chunks/scan-BoP17W3w.js +140 -0
- package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
- package/dist/_chunks/scanner-AiazgH_f.js +1771 -0
- package/dist/_chunks/scanner-AiazgH_f.js.map +1 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
- package/dist/_chunks/segment-context-D9_89u34.js +34 -0
- package/dist/_chunks/segment-context-D9_89u34.js.map +1 -0
- package/dist/_chunks/segment-keys-lqtdookO.js +256 -0
- package/dist/_chunks/segment-keys-lqtdookO.js.map +1 -0
- package/dist/_chunks/singleflight-2lUWfcAk.js +54 -0
- package/dist/_chunks/singleflight-2lUWfcAk.js.map +1 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
- package/dist/_chunks/{ssr-data-DLnbYpj1.js → ssr-data-D6T6Y3ef.js} +3 -31
- package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +1 -0
- package/dist/_chunks/state-FippDgxN.js +52 -0
- package/dist/_chunks/state-FippDgxN.js.map +1 -0
- package/dist/_chunks/status-page-marker-DwQBrLBz.js +496 -0
- package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +1 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
- package/dist/_chunks/walkers-B6XUtmqK.js +144 -0
- package/dist/_chunks/walkers-B6XUtmqK.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +72 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +74 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +123 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +200 -22
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -188
- package/dist/adapters/compress-module.d.ts +17 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +64 -0
- package/dist/adapters/fs-identity.d.ts.map +1 -0
- package/dist/adapters/nitro-presets.d.ts +37 -0
- package/dist/adapters/nitro-presets.d.ts.map +1 -0
- package/dist/adapters/nitro-preview.d.ts +32 -0
- package/dist/adapters/nitro-preview.d.ts.map +1 -0
- package/dist/adapters/nitro.d.ts +82 -37
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +457 -288
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +62 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +28 -6
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/analyze/chains.d.ts +124 -0
- package/dist/analyze/chains.d.ts.map +1 -0
- package/dist/analyze/classify.d.ts +150 -0
- package/dist/analyze/classify.d.ts.map +1 -0
- package/dist/analyze/crawl-entry.d.ts +17 -0
- package/dist/analyze/crawl-entry.d.ts.map +1 -0
- package/dist/analyze/crawl-entry.js +313 -0
- package/dist/analyze/crawl-entry.js.map +1 -0
- package/dist/analyze/crawl.d.ts +134 -0
- package/dist/analyze/crawl.d.ts.map +1 -0
- package/dist/analyze/graph-cache.d.ts +104 -0
- package/dist/analyze/graph-cache.d.ts.map +1 -0
- package/dist/analyze/graph-command.d.ts +43 -0
- package/dist/analyze/graph-command.d.ts.map +1 -0
- package/dist/analyze/graph-command.js +472 -0
- package/dist/analyze/graph-command.js.map +1 -0
- package/dist/analyze/live-graph.d.ts +81 -0
- package/dist/analyze/live-graph.d.ts.map +1 -0
- package/dist/analyze/poison-rules.d.ts +72 -0
- package/dist/analyze/poison-rules.d.ts.map +1 -0
- package/dist/analyze/poison-scan.d.ts +48 -0
- package/dist/analyze/poison-scan.d.ts.map +1 -0
- package/dist/analyze/scan.d.ts +73 -0
- package/dist/analyze/scan.d.ts.map +1 -0
- package/dist/cache/cache-api.d.ts +48 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/fast-hash.d.ts +27 -0
- package/dist/cache/fast-hash.d.ts.map +1 -0
- package/dist/cache/handler-store.d.ts +33 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +32 -9
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +3 -284
- package/dist/cache/invalidation-epoch.d.ts +43 -0
- package/dist/cache/invalidation-epoch.d.ts.map +1 -0
- package/dist/cache/json-lossy-check.d.ts +11 -0
- package/dist/cache/json-lossy-check.d.ts.map +1 -0
- package/dist/cache/redis-handler.d.ts +141 -9
- package/dist/cache/redis-handler.d.ts.map +1 -1
- package/dist/cache/singleflight.d.ts +21 -2
- package/dist/cache/singleflight.d.ts.map +1 -1
- package/dist/cache/sizeof.d.ts +22 -0
- package/dist/cache/sizeof.d.ts.map +1 -0
- package/dist/cache/stable-stringify.d.ts +9 -0
- package/dist/cache/stable-stringify.d.ts.map +1 -1
- package/dist/cache/store.d.ts +53 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
- package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.js +29 -0
- package/dist/cache/stores/cloudflare-kv.js.map +1 -0
- package/dist/cache/stores/memory.d.ts +42 -0
- package/dist/cache/stores/memory.d.ts.map +1 -0
- package/dist/cache/stores/memory.js +90 -0
- package/dist/cache/stores/memory.js.map +1 -0
- package/dist/cache/stores/redis.d.ts +69 -0
- package/dist/cache/stores/redis.d.ts.map +1 -0
- package/dist/cache/stores/redis.js +35 -0
- package/dist/cache/stores/redis.js.map +1 -0
- package/dist/cache/stores/vercel.d.ts +36 -0
- package/dist/cache/stores/vercel.d.ts.map +1 -0
- package/dist/cache/stores/vercel.js +33 -0
- package/dist/cache/stores/vercel.js.map +1 -0
- package/dist/cache/tag-aware-handler.d.ts +52 -0
- package/dist/cache/tag-aware-handler.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +21 -11
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cdn/cloudflare-purge.d.ts +23 -0
- package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
- package/dist/cdn/cloudflare-purge.js +30 -0
- package/dist/cdn/cloudflare-purge.js.map +1 -0
- package/dist/cdn/fastly-purge.d.ts +25 -0
- package/dist/cdn/fastly-purge.d.ts.map +1 -0
- package/dist/cdn/fastly-purge.js +33 -0
- package/dist/cdn/fastly-purge.js.map +1 -0
- package/dist/cdn/headers.d.ts +97 -0
- package/dist/cdn/headers.d.ts.map +1 -0
- package/dist/cdn/index.d.ts +5 -0
- package/dist/cdn/index.d.ts.map +1 -0
- package/dist/cdn/index.js +94 -0
- package/dist/cdn/index.js.map +1 -0
- package/dist/cdn/purge-store.d.ts +23 -0
- package/dist/cdn/purge-store.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.d.ts +20 -0
- package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.js +35 -0
- package/dist/cdn/workers-cache-purge.js.map +1 -0
- package/dist/cli-check.d.ts +163 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +75 -8
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +175 -47
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +37 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/action-queue.d.ts +44 -0
- package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +63 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +29 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +46 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +28 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/deny-last-resort.d.ts +29 -0
- package/dist/client/deny-last-resort.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +66 -6
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +2 -126
- package/dist/client/error-reconstituter.d.ts +61 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/global-context.d.ts +15 -0
- package/dist/client/global-context.d.ts.map +1 -0
- package/dist/client/history.d.ts +50 -9
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +20 -33
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +323 -1148
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +20 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +818 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +63 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/location-search.d.ts +12 -0
- package/dist/client/location-search.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +121 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-commit.d.ts +98 -0
- package/dist/client/navigation-commit.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +51 -31
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +98 -0
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/navigation-transition.d.ts +187 -0
- package/dist/client/navigation-transition.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts +1 -1
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/params-context.d.ts +81 -0
- package/dist/client/params-context.d.ts.map +1 -0
- package/dist/client/react-root.d.ts +44 -0
- package/dist/client/react-root.d.ts.map +1 -0
- package/dist/client/router-effects.d.ts +130 -0
- package/dist/client/router-effects.d.ts.map +1 -0
- package/dist/client/router-lifecycle.d.ts +98 -0
- package/dist/client/router-lifecycle.d.ts.map +1 -0
- package/dist/client/router-pipeline.d.ts +87 -0
- package/dist/client/router-pipeline.d.ts.map +1 -0
- package/dist/client/router-ref.d.ts +2 -2
- package/dist/client/router-ref.d.ts.map +1 -1
- package/dist/client/router-skew.d.ts +21 -0
- package/dist/client/router-skew.d.ts.map +1 -0
- package/dist/client/router-types.d.ts +272 -0
- package/dist/client/router-types.d.ts.map +1 -0
- package/dist/client/router.d.ts +1 -97
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +104 -26
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +161 -25
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-context.d.ts +1 -1
- package/dist/client/segment-context.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +68 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +15 -0
- package/dist/client/segment-update-context.d.ts.map +1 -0
- package/dist/client/shallow-url.d.ts +10 -0
- package/dist/client/shallow-url.d.ts.map +1 -0
- package/dist/client/slot-content-cache-context.d.ts +35 -0
- package/dist/client/slot-content-cache-context.d.ts.map +1 -0
- package/dist/client/slot-context.d.ts +31 -0
- package/dist/client/slot-context.d.ts.map +1 -0
- package/dist/client/slot-outlet.d.ts +16 -0
- package/dist/client/slot-outlet.d.ts.map +1 -0
- package/dist/client/slot-provider.d.ts +25 -0
- package/dist/client/slot-provider.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +29 -7
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-client.d.ts +69 -0
- package/dist/client/stale-client.d.ts.map +1 -0
- package/dist/client/state.d.ts +19 -8
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/status-page-marker.d.ts +25 -0
- package/dist/client/status-page-marker.d.ts.map +1 -0
- package/dist/client/top-loader.d.ts +7 -6
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/unload-guard.d.ts +5 -0
- package/dist/client/unload-guard.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts +12 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-link-status.d.ts +5 -5
- package/dist/client/use-link-status.d.ts.map +1 -1
- package/dist/client/use-pathname.d.ts +13 -11
- package/dist/client/use-pathname.d.ts.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +10 -4
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +2 -2
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +15 -8
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/use-segment-params.d.ts +55 -0
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +69 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +76 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +322 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +51 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/cookies/define-cookie.d.ts +58 -25
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +3 -2
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +256 -36
- package/dist/cookies/index.js.map +1 -1
- 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 +34 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +50 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +40 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/dev-page-shell.d.ts +78 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +32 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +46 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/hydration-overlay.d.ts +11 -0
- package/dist/dev-tools/hydration-overlay.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/dev-tools/instrumentation.d.ts +59 -0
- 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} +17 -3
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- 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/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/fonts/ast-walk.d.ts +68 -0
- package/dist/fonts/ast-walk.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +112 -8
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +50 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/css.d.ts +2 -1
- package/dist/fonts/css.d.ts.map +1 -1
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/fallbacks.d.ts +0 -7
- package/dist/fonts/fallbacks.d.ts.map +1 -1
- package/dist/fonts/google.d.ts +5 -3
- package/dist/fonts/google.d.ts.map +1 -1
- package/dist/fonts/local.d.ts +6 -4
- package/dist/fonts/local.d.ts.map +1 -1
- package/dist/fonts/paths.d.ts +43 -0
- package/dist/fonts/paths.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +177 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +82 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +47 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +77 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +35 -153
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10488 -13975
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +81 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +34 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +276 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +21 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +7 -3
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +54 -7
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +64 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/callsite-ast.d.ts +117 -0
- package/dist/plugins/callsite-ast.d.ts.map +1 -0
- package/dist/plugins/callsite-jsx.d.ts +35 -0
- package/dist/plugins/callsite-jsx.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +11 -4
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +40 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +21 -0
- package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-discovery.d.ts +123 -0
- package/dist/plugins/dev-discovery.d.ts.map +1 -0
- package/dist/plugins/dev-server.d.ts +17 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +32 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +16 -65
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/graph-endpoint.d.ts +112 -0
- package/dist/plugins/graph-endpoint.d.ts.map +1 -0
- package/dist/plugins/mdx.d.ts +24 -5
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/prebuilt-capture.d.ts +60 -0
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
- package/dist/plugins/prebuilt.d.ts +82 -0
- package/dist/plugins/prebuilt.d.ts.map +1 -0
- package/dist/plugins/prerender-sugar.d.ts +39 -0
- package/dist/plugins/prerender-sugar.d.ts.map +1 -0
- package/dist/plugins/request-dep/analysis.d.ts +106 -0
- package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
- package/dist/plugins/request-dep/index.d.ts +75 -0
- package/dist/plugins/request-dep/index.d.ts.map +1 -0
- package/dist/plugins/request-dep/origin.d.ts +61 -0
- package/dist/plugins/request-dep/origin.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +29 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +218 -21
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +26 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +61 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen-write.d.ts +51 -0
- package/dist/routing/codegen-write.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +8 -3
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/collision-probe.d.ts +104 -0
- package/dist/routing/collision-probe.d.ts.map +1 -0
- package/dist/routing/collision-spaces.d.ts +26 -0
- package/dist/routing/collision-spaces.d.ts.map +1 -0
- package/dist/routing/convention-lint.d.ts +55 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/export-detect.d.ts +72 -0
- package/dist/routing/export-detect.d.ts.map +1 -0
- package/dist/routing/file-cache.d.ts +8 -0
- package/dist/routing/file-cache.d.ts.map +1 -0
- package/dist/routing/index.d.ts +13 -7
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +5 -2
- package/dist/routing/interception-overlap.d.ts +35 -0
- package/dist/routing/interception-overlap.d.ts.map +1 -0
- package/dist/routing/interception.d.ts +234 -10
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +105 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/manifest-codegen.d.ts +26 -0
- package/dist/routing/manifest-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +14 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/schema-validation.d.ts +35 -0
- package/dist/routing/schema-validation.d.ts.map +1 -0
- package/dist/routing/segment-classify.d.ts +114 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/segment-codegen.d.ts +38 -0
- package/dist/routing/segment-codegen.d.ts.map +1 -0
- package/dist/routing/segment-keys.d.ts +118 -0
- package/dist/routing/segment-keys.d.ts.map +1 -0
- package/dist/routing/slot-placement.d.ts +48 -0
- package/dist/routing/slot-placement.d.ts.map +1 -0
- package/dist/routing/types.d.ts +74 -26
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +57 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +14 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/rsc-runtime/transforms.d.ts +13 -0
- package/dist/rsc-runtime/transforms.d.ts.map +1 -0
- package/dist/schema-bridge.d.ts +145 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +262 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +3 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +179 -360
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/parse-total.d.ts +81 -0
- package/dist/search-params/parse-total.d.ts.map +1 -0
- package/dist/search-params/serialize-equal.d.ts +9 -0
- package/dist/search-params/serialize-equal.d.ts.map +1 -0
- package/dist/search-params/wrappers.d.ts +76 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/server/access-gate.d.ts +98 -10
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +42 -7
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +39 -5
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +29 -35
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +117 -13
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +8 -18
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +25 -30
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/canonicalize.d.ts +10 -0
- package/dist/server/canonicalize.d.ts.map +1 -1
- package/dist/server/chain-url-parts.d.ts +82 -0
- package/dist/server/chain-url-parts.d.ts.map +1 -0
- package/dist/server/children-interception.d.ts +49 -0
- package/dist/server/children-interception.d.ts.map +1 -0
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/compress.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 +65 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csp-nonce.d.ts +45 -0
- package/dist/server/csp-nonce.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/debug.d.ts +82 -0
- package/dist/server/debug.d.ts.map +1 -0
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/default-status-page.d.ts +45 -0
- package/dist/server/default-status-page.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +253 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +20 -9
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +14 -12
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +101 -10
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/error-response-headers.d.ts +3 -0
- package/dist/server/error-response-headers.d.ts.map +1 -0
- package/dist/server/fallback-error.d.ts +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +45 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/form-data.d.ts +41 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/form-flash.d.ts +1 -1
- package/dist/server/head-response.d.ts +35 -0
- package/dist/server/head-response.d.ts.map +1 -0
- package/dist/server/html-injector-core.d.ts +257 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +84 -42
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +18 -54
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +212 -2930
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +1 -1
- package/dist/server/internal.d.ts +50 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +4034 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +39 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-collector.d.ts +71 -0
- package/dist/server/metadata-collector.d.ts.map +1 -0
- package/dist/server/metadata-platform.d.ts +2 -2
- package/dist/server/metadata-render.d.ts +2 -2
- package/dist/server/metadata-render.d.ts.map +1 -1
- package/dist/server/metadata-routes.d.ts +60 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata-social.d.ts +2 -2
- package/dist/server/metadata.d.ts +10 -2
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +20 -5
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +105 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/nuqs-ssr-provider.d.ts +7 -3
- package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +78 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +77 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +59 -9
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +7 -1
- package/dist/server/pipeline-metadata.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 +70 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +160 -24
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +31 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/prebuilt/cache-key.d.ts +63 -0
- package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-state.d.ts +57 -0
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
- package/dist/server/prebuilt/key-discipline.d.ts +52 -0
- package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
- package/dist/server/prebuilt/overlay.d.ts +100 -0
- package/dist/server/prebuilt/overlay.d.ts.map +1 -0
- package/dist/server/prebuilt/payload-source.d.ts +79 -0
- package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +99 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -0
- package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
- package/dist/server/prebuilt-builder.d.ts +121 -0
- package/dist/server/prebuilt-builder.d.ts.map +1 -0
- package/dist/server/prebuilt-runtime.d.ts +111 -0
- package/dist/server/prebuilt-runtime.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +129 -45
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/publish-params.d.ts +33 -0
- package/dist/server/publish-params.d.ts.map +1 -0
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/render-utils.d.ts +26 -0
- package/dist/server/render-utils.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +111 -107
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-dep.d.ts +15 -0
- package/dist/server/request-dep.d.ts.map +1 -0
- package/dist/server/response-cache-policy.d.ts +3 -0
- package/dist/server/response-cache-policy.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +57 -30
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-element-helpers.d.ts +12 -0
- package/dist/server/route-element-helpers.d.ts.map +1 -0
- package/dist/server/route-handler.d.ts +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +40 -38
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/route-module-loader.d.ts +37 -0
- package/dist/server/route-module-loader.d.ts.map +1 -0
- package/dist/server/rsc-cache-key-guard.d.ts +78 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
- 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/api-handler.d.ts +12 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +38 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +59 -42
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +40 -6
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +51 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +26 -6
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +39 -3
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +37 -5
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/rsc-error-envelope.d.ts +11 -0
- package/dist/server/rsc-error-envelope.d.ts.map +1 -0
- package/dist/server/rsc-prop-warnings.d.ts.map +1 -1
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +130 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/skippable-prefix.d.ts +29 -0
- package/dist/server/skippable-prefix.d.ts.map +1 -0
- package/dist/server/slot-interception.d.ts +80 -0
- package/dist/server/slot-interception.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +137 -7
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/slot-subtree-contain.d.ts +54 -0
- package/dist/server/slot-subtree-contain.d.ts.map +1 -0
- package/dist/server/ssr-bridge-types.d.ts +160 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +1 -43
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +69 -22
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +93 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +44 -9
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/static-generator.d.ts +112 -0
- package/dist/server/static-generator.d.ts.map +1 -0
- package/dist/server/static-not-found.d.ts +52 -0
- package/dist/server/static-not-found.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +26 -15
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +47 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +56 -11
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +49 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +88 -7
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +50 -0
- package/dist/server/utils/element-type.d.ts.map +1 -0
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/utils/mdx-file.d.ts +17 -0
- package/dist/server/utils/mdx-file.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/server/waituntil-bridge.d.ts.map +1 -1
- package/dist/server/workers-cache-bridge.d.ts +26 -0
- package/dist/server/workers-cache-bridge.d.ts.map +1 -0
- package/dist/shared/als-slots.d.ts +42 -0
- package/dist/shared/als-slots.d.ts.map +1 -0
- package/dist/shared/base-path.d.ts +56 -0
- package/dist/shared/base-path.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +49 -0
- package/dist/shared/href-validation.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shared/param-value.d.ts +104 -0
- package/dist/shared/param-value.d.ts.map +1 -0
- package/dist/shared/payload-root.d.ts +109 -0
- package/dist/shared/payload-root.d.ts.map +1 -0
- package/dist/shared/redirect-type.d.ts +17 -0
- package/dist/shared/redirect-type.d.ts.map +1 -0
- package/dist/shared/rsc-cache-key.d.ts +163 -0
- package/dist/shared/rsc-cache-key.d.ts.map +1 -0
- package/dist/shared/rsc-error-envelope.d.ts +16 -0
- package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
- package/dist/shared/rsc-manifest.d.ts +28 -0
- package/dist/shared/rsc-manifest.d.ts.map +1 -0
- package/dist/shared/rsc-media-type.d.ts +52 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -0
- package/dist/shared/rsc-payload-path.d.ts +42 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -0
- package/dist/shared/segment-info.d.ts +66 -0
- package/dist/shared/segment-info.d.ts.map +1 -0
- package/dist/shared/slot-params.d.ts +52 -0
- package/dist/shared/slot-params.d.ts.map +1 -0
- package/dist/shared/static-platform-files.d.ts +71 -0
- package/dist/shared/static-platform-files.d.ts.map +1 -0
- package/dist/shared/status-reason-phrase.d.ts +26 -0
- package/dist/shared/status-reason-phrase.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +53 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/image.d.ts +120 -120
- package/dist/shims/image.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +25 -12
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation-rsc.d.ts +21 -0
- package/dist/shims/navigation-rsc.d.ts.map +1 -0
- package/dist/shims/navigation.d.ts +10 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +236 -0
- package/docs/api/31-api-client.mdx +167 -0
- package/docs/api/32-api-cache.mdx +311 -0
- package/docs/api/33-api-search-params.mdx +176 -0
- package/docs/api/34-api-config.mdx +329 -0
- package/docs/api/35-api-typescript.mdx +91 -0
- package/docs/api/36-cli.mdx +192 -0
- package/docs/learn/00-introduction.mdx +109 -0
- package/docs/learn/01-quick-start.mdx +94 -0
- package/docs/learn/02-pages-and-layouts.mdx +147 -0
- package/docs/learn/03-fetching-data.mdx +211 -0
- package/docs/learn/04-access-control.mdx +115 -0
- package/docs/learn/05-the-flush-point.mdx +175 -0
- package/docs/learn/06-typed-params.mdx +275 -0
- package/docs/learn/07-typed-routes.mdx +108 -0
- package/docs/learn/08-forms-and-actions.mdx +146 -0
- package/docs/learn/09-streaming.mdx +140 -0
- package/docs/learn/10-caching.mdx +252 -0
- package/docs/learn/11-middleware.mdx +158 -0
- package/docs/learn/12-error-handling.mdx +188 -0
- package/docs/learn/13-deploying.mdx +287 -0
- package/llms.txt +55 -0
- package/package.json +117 -29
- package/src/adapters/build-output-helper.ts +351 -0
- package/src/adapters/cloudflare-dev.ts +183 -0
- package/src/adapters/cloudflare-kv-cache.ts +207 -0
- package/src/adapters/cloudflare.ts +747 -130
- package/src/adapters/compress-module.ts +101 -88
- package/src/adapters/fs-identity.ts +156 -0
- package/src/adapters/nitro-presets.ts +139 -0
- package/src/adapters/nitro-preview.ts +340 -0
- package/src/adapters/nitro.ts +279 -418
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +274 -0
- package/src/adapters/types.ts +28 -7
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/analyze/chains.ts +411 -0
- package/src/analyze/classify.ts +258 -0
- package/src/analyze/crawl-entry.ts +68 -0
- package/src/analyze/crawl.ts +500 -0
- package/src/analyze/graph-cache.ts +332 -0
- package/src/analyze/graph-command.ts +762 -0
- package/src/analyze/live-graph.ts +232 -0
- package/src/analyze/poison-rules.ts +165 -0
- package/src/analyze/poison-scan.ts +162 -0
- package/src/analyze/scan.ts +149 -0
- package/src/cache/cache-api.ts +107 -0
- package/src/cache/fast-hash.ts +39 -0
- package/src/cache/handler-store.ts +76 -0
- package/src/cache/index.ts +115 -22
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/json-lossy-check.ts +75 -0
- package/src/cache/redis-handler.ts +198 -20
- package/src/cache/singleflight.ts +69 -6
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/store.ts +71 -0
- package/src/cache/stores/cloudflare-kv.ts +52 -0
- package/src/cache/stores/memory.ts +125 -0
- package/src/cache/stores/redis.ts +97 -0
- package/src/cache/stores/vercel.ts +59 -0
- package/src/cache/tag-aware-handler.ts +237 -0
- package/src/cache/timber-cache.ts +180 -48
- package/src/cdn/cloudflare-purge.ts +50 -0
- package/src/cdn/fastly-purge.ts +63 -0
- package/src/cdn/headers.ts +153 -0
- package/src/cdn/index.ts +23 -0
- package/src/cdn/purge-store.ts +34 -0
- package/src/cdn/workers-cache-purge.ts +34 -0
- package/src/cli-check.ts +507 -0
- package/src/cli-schema-sync.ts +401 -0
- package/src/cli.ts +262 -55
- package/src/client/browser-dev.ts +157 -2
- package/src/client/browser-entry/action-dispatch.ts +197 -0
- package/src/client/browser-entry/action-queue.ts +90 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +148 -0
- package/src/client/browser-entry/index.ts +131 -0
- package/src/client/browser-entry/post-hydration.ts +123 -0
- package/src/client/browser-entry/router-init.ts +418 -0
- package/src/client/browser-entry/rsc-stream.ts +166 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/deny-last-resort.tsx +54 -0
- package/src/client/error-boundary.tsx +316 -40
- package/src/client/error-reconstituter.tsx +79 -0
- package/src/client/form.tsx +36 -32
- package/src/client/global-context.ts +31 -0
- package/src/client/history.ts +81 -10
- package/src/client/index.ts +89 -53
- package/src/client/internal.ts +59 -0
- package/src/client/link.tsx +452 -159
- package/src/client/location-search.ts +15 -0
- package/src/client/navigation-api.ts +347 -0
- package/src/client/navigation-commit.ts +295 -0
- package/src/client/navigation-context.ts +67 -98
- package/src/client/navigation-root.tsx +224 -0
- package/src/client/navigation-transition.ts +327 -0
- package/src/client/nuqs-adapter.tsx +21 -9
- package/src/client/params-context.ts +187 -0
- package/src/client/react-root.ts +72 -0
- package/src/client/router-effects.ts +228 -0
- package/src/client/router-lifecycle.ts +354 -0
- package/src/client/router-pipeline.ts +490 -0
- package/src/client/router-ref.ts +3 -3
- package/src/client/router-skew.ts +30 -0
- package/src/client/router-types.ts +294 -0
- package/src/client/router.ts +436 -424
- package/src/client/rsc-fetch.ts +512 -73
- package/src/client/segment-cache.ts +327 -40
- package/src/client/segment-context.ts +13 -5
- package/src/client/segment-outlet.tsx +96 -0
- package/src/client/segment-update-context.ts +23 -0
- package/src/client/shallow-url.ts +22 -0
- package/src/client/slot-content-cache-context.ts +43 -0
- package/src/client/slot-context.ts +50 -0
- package/src/client/slot-outlet.tsx +22 -0
- package/src/client/slot-provider.tsx +32 -0
- package/src/client/ssr-data.ts +30 -9
- package/src/client/stale-client.ts +191 -0
- package/src/client/state.ts +29 -15
- package/src/client/status-page-marker.tsx +32 -0
- package/src/client/top-loader.tsx +36 -29
- package/src/client/unload-guard.ts +35 -3
- package/src/client/use-cookie.ts +70 -18
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +22 -31
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +206 -36
- package/src/client/use-router.ts +6 -3
- package/src/client/use-search-params.ts +38 -49
- package/src/client/use-segment-params.ts +69 -0
- package/src/client/use-selected-layout-segment.ts +2 -2
- package/src/codec.ts +149 -0
- package/src/config-types.ts +322 -0
- package/src/config-validation.ts +347 -0
- package/src/cookies/define-cookie.ts +222 -53
- package/src/cookies/index.ts +13 -2
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +192 -0
- package/src/dev-tools/404-page.ts +286 -0
- package/src/dev-tools/browser-logs.ts +55 -0
- package/src/dev-tools/dev-page-shell.ts +260 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +185 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +83 -0
- package/src/dev-tools/instrumentation.ts +213 -0
- package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
- package/src/dev-tools/overlay.ts +469 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +182 -0
- package/src/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +479 -128
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/css.ts +3 -2
- package/src/fonts/dev-middleware.ts +85 -0
- package/src/fonts/fallbacks.ts +0 -23
- package/src/fonts/google.ts +101 -19
- package/src/fonts/local.ts +13 -8
- package/src/fonts/paths.ts +58 -0
- package/src/fonts/pipeline.ts +348 -0
- package/src/fonts/transform.ts +311 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +486 -344
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +84 -0
- package/src/plugin-context.ts +503 -0
- package/src/plugins/adapter-build.ts +229 -7
- package/src/plugins/build-manifest.ts +201 -26
- package/src/plugins/build-report.ts +275 -43
- package/src/plugins/cache.ts +243 -0
- package/src/plugins/callsite-ast.ts +472 -0
- package/src/plugins/callsite-jsx.ts +243 -0
- package/src/plugins/chunks.ts +74 -5
- package/src/plugins/client-chunks.ts +185 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +5 -1
- package/src/plugins/dev-discovery.ts +218 -0
- package/src/plugins/dev-server.ts +369 -96
- package/src/plugins/entries.ts +148 -18
- package/src/plugins/fonts.ts +251 -524
- package/src/plugins/graph-endpoint.ts +532 -0
- package/src/plugins/mdx.ts +116 -40
- package/src/plugins/prebuilt-capture.ts +217 -0
- package/src/plugins/prebuilt-options-analysis.ts +175 -0
- package/src/plugins/prebuilt.ts +655 -0
- package/src/plugins/prerender-sugar.ts +320 -0
- package/src/plugins/request-dep/analysis.ts +447 -0
- package/src/plugins/request-dep/index.ts +376 -0
- package/src/plugins/request-dep/origin.ts +310 -0
- package/src/plugins/routing.ts +273 -277
- package/src/plugins/server-bundle.ts +103 -14
- package/src/plugins/shims.ts +259 -97
- package/src/plugins/static-build.ts +708 -66
- package/src/react-canary.d.ts +2 -0
- package/src/routing/codegen-shared.ts +39 -0
- package/src/routing/codegen-types.ts +62 -0
- package/src/routing/codegen-write.ts +141 -0
- package/src/routing/codegen.ts +349 -232
- package/src/routing/collision-probe.ts +438 -0
- package/src/routing/collision-spaces.ts +281 -0
- package/src/routing/convention-lint.ts +623 -0
- package/src/routing/export-detect.ts +448 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +16 -7
- package/src/routing/interception-overlap.ts +141 -0
- package/src/routing/interception.ts +1044 -67
- package/src/routing/link-codegen.ts +280 -0
- package/src/routing/manifest-codegen.ts +226 -0
- package/src/routing/scanner.ts +393 -219
- package/src/routing/schema-validation.ts +155 -0
- package/src/routing/segment-classify.ts +280 -0
- package/src/routing/segment-codegen.ts +98 -0
- package/src/routing/segment-keys.ts +186 -0
- package/src/routing/slot-placement.ts +97 -0
- package/src/routing/types.ts +75 -26
- package/src/routing/walkers.ts +98 -0
- package/src/rsc-runtime/rsc.ts +9 -0
- package/src/rsc-runtime/ssr.ts +51 -0
- package/src/rsc-runtime/transforms.ts +13 -0
- package/src/rsc-runtime/vendor-types.d.ts +19 -0
- package/src/schema-bridge.ts +380 -0
- package/src/search-params/define.ts +677 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/parse-total.ts +91 -0
- package/src/search-params/serialize-equal.ts +14 -0
- package/src/search-params/wrappers.ts +150 -0
- package/src/server/access-gate.tsx +196 -57
- package/src/server/action-client.ts +136 -35
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +256 -56
- package/src/server/actions.ts +112 -68
- package/src/server/als-registry.ts +160 -21
- package/src/server/asset-headers.ts +15 -37
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +33 -57
- package/src/server/canonicalize.ts +6 -3
- package/src/server/chain-url-parts.ts +163 -0
- package/src/server/children-interception.ts +115 -0
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +43 -8
- package/src/server/cookie-context.ts +484 -0
- package/src/server/cookie-parsing.ts +163 -0
- package/src/server/csp-nonce.ts +70 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/debug.ts +137 -0
- package/src/server/default-logger.ts +99 -0
- package/src/server/default-status-page.ts +88 -0
- package/src/server/deny-boundary.ts +533 -0
- package/src/server/deny-renderer.ts +214 -112
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +4 -3
- package/src/server/early-hints.ts +39 -29
- package/src/server/error-boundary-wrapper.ts +181 -44
- package/src/server/error-response-headers.ts +18 -0
- package/src/server/fallback-error.ts +79 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +67 -0
- package/src/server/form-data.ts +124 -12
- package/src/server/form-flash.ts +2 -2
- package/src/server/head-response.ts +54 -0
- package/src/server/html-injector-core.ts +512 -0
- package/src/server/html-injectors.ts +272 -235
- package/src/server/index.ts +40 -192
- package/src/server/instrumentation.ts +1 -1
- package/src/server/internal.ts +173 -0
- package/src/server/logger.ts +73 -36
- package/src/server/metadata-collector.ts +174 -0
- package/src/server/metadata-platform.ts +2 -2
- package/src/server/metadata-render.ts +30 -8
- package/src/server/metadata-routes.ts +205 -24
- package/src/server/metadata-social.ts +2 -2
- package/src/server/metadata.ts +23 -2
- package/src/server/middleware-runner.ts +32 -5
- package/src/server/node-stream-transforms.ts +323 -0
- package/src/server/nuqs-ssr-provider.tsx +8 -7
- package/src/server/param-coercion.ts +198 -0
- package/src/server/pipeline-helpers.ts +159 -0
- package/src/server/pipeline-interception.ts +109 -33
- package/src/server/pipeline-metadata.ts +15 -1
- package/src/server/pipeline-outcome.ts +218 -0
- package/src/server/pipeline-phases.ts +606 -0
- package/src/server/pipeline.ts +343 -389
- package/src/server/port-resolution.ts +53 -0
- package/src/server/prebuilt/cache-key.ts +299 -0
- package/src/server/prebuilt/capture-state.ts +89 -0
- package/src/server/prebuilt/key-discipline.ts +122 -0
- package/src/server/prebuilt/manifest-tag-index.ts +46 -0
- package/src/server/prebuilt/overlay.ts +256 -0
- package/src/server/prebuilt/payload-source.ts +202 -0
- package/src/server/prebuilt/slots.ts +190 -0
- package/src/server/prebuilt/synthetic-store.ts +122 -0
- package/src/server/prebuilt-builder.ts +804 -0
- package/src/server/prebuilt-runtime.ts +817 -0
- package/src/server/primitives.ts +246 -97
- package/src/server/publish-params.ts +42 -0
- package/src/server/render-timeout.ts +108 -0
- package/src/server/render-utils.ts +35 -0
- package/src/server/request-context.ts +244 -333
- package/src/server/request-dep.ts +37 -0
- package/src/server/response-cache-policy.ts +45 -0
- package/src/server/route-element-builder.ts +508 -360
- package/src/server/route-element-helpers.ts +37 -0
- package/src/server/route-handler.ts +40 -13
- package/src/server/route-matcher.ts +165 -272
- package/src/server/route-module-loader.ts +161 -0
- package/src/server/rsc-cache-key-guard.ts +122 -0
- package/src/server/rsc-entry/action-middleware-runner.ts +174 -0
- package/src/server/rsc-entry/api-handler.ts +78 -34
- package/src/server/rsc-entry/deny-fallback.ts +93 -0
- package/src/server/rsc-entry/error-renderer.ts +373 -95
- package/src/server/rsc-entry/helpers.ts +226 -95
- package/src/server/rsc-entry/index.ts +405 -323
- package/src/server/rsc-entry/render-route.ts +304 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
- package/src/server/rsc-entry/rsc-payload.ts +239 -50
- package/src/server/rsc-entry/rsc-stream.ts +160 -30
- package/src/server/rsc-entry/ssr-bridge.ts +18 -5
- package/src/server/rsc-entry/ssr-renderer.ts +315 -57
- package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
- package/src/server/rsc-error-envelope.ts +18 -0
- package/src/server/rsc-prop-warnings.ts +3 -1
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/server-only-guard-noop.js +3 -0
- package/src/server/server-timing.ts +1 -1
- package/src/server/sitemap-generator.ts +337 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/skippable-prefix.ts +172 -0
- package/src/server/slot-interception.ts +168 -0
- package/src/server/slot-resolver.ts +707 -300
- package/src/server/slot-subtree-contain.ts +255 -0
- package/src/server/ssr-bridge-types.ts +165 -0
- package/src/server/ssr-entry.ts +230 -85
- package/src/server/ssr-render.ts +357 -85
- package/src/server/ssr-wrappers.tsx +162 -0
- package/src/server/state-tree-diff.ts +85 -30
- package/src/server/static-generator.ts +715 -0
- package/src/server/static-not-found.ts +134 -0
- package/src/server/status-code-resolver.ts +107 -148
- package/src/server/stream-utils.ts +292 -0
- package/src/server/tracing.ts +151 -16
- package/src/server/tree-match.ts +262 -0
- package/src/server/types.ts +95 -10
- package/src/server/utils/element-type.ts +88 -0
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/utils/mdx-file.ts +22 -0
- package/src/server/version-skew.ts +104 -0
- package/src/server/waituntil-bridge.ts +5 -2
- package/src/server/workers-cache-bridge.ts +33 -0
- package/src/shared/als-slots.ts +74 -0
- package/src/shared/base-path.ts +80 -0
- package/src/shared/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/param-value.ts +281 -0
- package/src/shared/payload-root.ts +152 -0
- package/src/shared/redirect-type.ts +17 -0
- package/src/shared/rsc-cache-key.ts +269 -0
- package/src/shared/rsc-error-envelope.ts +16 -0
- package/src/shared/rsc-manifest.ts +29 -0
- package/src/shared/rsc-media-type.ts +59 -0
- package/src/shared/rsc-payload-path.ts +45 -0
- package/src/shared/segment-info.ts +67 -0
- package/src/shared/slot-params.ts +109 -0
- package/src/shared/static-platform-files.ts +75 -0
- package/src/shared/status-reason-phrase.ts +61 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +122 -1
- package/src/shims/navigation-client.ts +36 -32
- package/src/shims/navigation-rsc.ts +47 -0
- package/src/shims/navigation.ts +10 -7
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-k-AtAQ9R.js +0 -41
- package/dist/_chunks/als-registry-k-AtAQ9R.js.map +0 -1
- package/dist/_chunks/format-DNt20Kt8.js +0 -163
- package/dist/_chunks/format-DNt20Kt8.js.map +0 -1
- package/dist/_chunks/interception-DGDIjDbR.js +0 -676
- package/dist/_chunks/interception-DGDIjDbR.js.map +0 -1
- package/dist/_chunks/metadata-routes-CQCnF4VK.js +0 -153
- package/dist/_chunks/metadata-routes-CQCnF4VK.js.map +0 -1
- package/dist/_chunks/request-context-CRj2Zh1E.js +0 -329
- package/dist/_chunks/request-context-CRj2Zh1E.js.map +0 -1
- package/dist/_chunks/ssr-data-DLnbYpj1.js.map +0 -1
- package/dist/_chunks/tracing-DF0G3FB7.js +0 -173
- package/dist/_chunks/tracing-DF0G3FB7.js.map +0 -1
- package/dist/_chunks/use-cookie-dDbpCTx-.js +0 -91
- package/dist/_chunks/use-cookie-dDbpCTx-.js.map +0 -1
- package/dist/_chunks/use-query-states-DAhgj8Gx.js +0 -109
- package/dist/_chunks/use-query-states-DAhgj8Gx.js.map +0 -1
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/error-boundary.js.map +0 -1
- package/dist/client/head.d.ts +0 -16
- package/dist/client/head.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/segment-merger.d.ts +0 -119
- package/dist/client/segment-merger.d.ts.map +0 -1
- package/dist/client/stale-reload.d.ts +0 -44
- package/dist/client/stale-reload.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts +0 -74
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts +0 -26
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts +0 -92
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/content/index.d.ts +0 -11
- package/dist/content/index.d.ts.map +0 -1
- package/dist/content/index.js +0 -2
- package/dist/plugins/cache-transform.d.ts +0 -36
- package/dist/plugins/cache-transform.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts +0 -60
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/search-params/registry.d.ts +0 -20
- package/dist/search-params/registry.d.ts.map +0 -1
- package/dist/server/client-module-map.d.ts +0 -47
- package/dist/server/client-module-map.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-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts +0 -29
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts +0 -129
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/flush.d.ts +0 -74
- package/dist/server/flush.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/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/tree-builder.d.ts +0 -126
- package/dist/server/tree-builder.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -99
- package/src/client/browser-entry.ts +0 -674
- package/src/client/head.ts +0 -61
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/segment-merger.ts +0 -345
- package/src/client/stale-reload.ts +0 -89
- package/src/client/transition-root.tsx +0 -160
- package/src/client/use-navigation-pending.ts +0 -38
- package/src/client/use-params.ts +0 -141
- package/src/content/index.ts +0 -13
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/codecs.ts +0 -153
- package/src/search-params/create.ts +0 -321
- package/src/search-params/registry.ts +0 -31
- package/src/server/client-module-map.ts +0 -58
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/dev-warnings.ts +0 -282
- package/src/server/flush.ts +0 -182
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/server/tree-builder.ts +0 -382
- package/src/shims/server-only-noop.js +0 -6
- package/src/utils/directive-parser.ts +0 -529
|
@@ -12,25 +12,83 @@
|
|
|
12
12
|
* 05-streaming.md §"deferSuspenseFor and the Hold Window"
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import type { ClientBootstrapConfig } from '
|
|
16
|
-
import
|
|
17
|
-
import {
|
|
18
|
-
import
|
|
19
|
-
import {
|
|
20
|
-
import type {
|
|
21
|
-
import
|
|
22
|
-
import type {
|
|
15
|
+
import type { ClientBootstrapConfig } from '../html-injectors.ts';
|
|
16
|
+
import { flightInitScript } from '../flight-scripts.ts';
|
|
17
|
+
import { getCspNonce, nonceAttr } from '../csp-nonce.ts';
|
|
18
|
+
import { appVisibleSearch } from '../../shared/rsc-cache-key.ts';
|
|
19
|
+
import { getSlotParamsForClient } from '../request-context.ts';
|
|
20
|
+
import type { LayoutEntry } from '../deny-renderer.ts';
|
|
21
|
+
import { renderDenyPage } from '../deny-renderer.ts';
|
|
22
|
+
import type { RouteMatch } from '../pipeline.ts';
|
|
23
|
+
import { isSsrStreamError } from '../primitives.ts';
|
|
24
|
+
import type { LayoutComponentEntry } from '../route-element-builder.ts';
|
|
25
|
+
import type { ManifestSegmentNode } from '../route-matcher.ts';
|
|
26
|
+
import type { SlotSkipEntry } from '../slot-resolver.ts';
|
|
27
|
+
import type { NavContext } from '../ssr-bridge-types.ts';
|
|
23
28
|
|
|
29
|
+
import { htmlEscapeJsonString } from '../flight-scripts.ts';
|
|
24
30
|
import {
|
|
25
31
|
buildRedirectResponse,
|
|
26
32
|
buildSegmentInfo,
|
|
27
33
|
createDebugChannelSink,
|
|
28
34
|
isAbortError,
|
|
29
|
-
|
|
30
|
-
} from '
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import
|
|
35
|
+
} from './helpers.ts';
|
|
36
|
+
import { getCookiesForSsr } from '../cookie-context.ts';
|
|
37
|
+
import { getDenyStatus, getFirstDeniedSegmentIndex } from '../deny-boundary.ts';
|
|
38
|
+
import { renderErrorPage, type GlobalErrorFile } from './error-renderer.ts';
|
|
39
|
+
import { callSsr } from './ssr-bridge.ts';
|
|
40
|
+
import type { RenderSignals } from './rsc-stream.ts';
|
|
41
|
+
import { recordTiming } from '../server-timing.ts';
|
|
42
|
+
import { teeWithErrorPropagation } from '../stream-utils.ts';
|
|
43
|
+
import { addSpanEventSync } from '../tracing.ts';
|
|
44
|
+
import { isDevMode } from '../debug.ts';
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Maximum number of queueMicrotask yields during signal promotion.
|
|
48
|
+
* The known rejection chain depth for a withSpan-wrapped component is 3+
|
|
49
|
+
* microtasks. We use 5 to tolerate additional async wrappers or React
|
|
50
|
+
* Flight internals adding extra microtask hops. Do not increase beyond 8 —
|
|
51
|
+
* a deeper chain indicates a structural problem.
|
|
52
|
+
*/
|
|
53
|
+
const SIGNAL_PROMOTION_MAX_YIELDS = 5;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Number of additional microtask yields used by the cap-reached detection
|
|
57
|
+
* phase (TIM-970). After the promotion loop burns its full cap without
|
|
58
|
+
* capturing a signal, we yield a few more times to distinguish "no signal
|
|
59
|
+
* was ever coming" (state 2) from "signal arrived one microtask past the
|
|
60
|
+
* cap" (state 3 — the silent-miss path). These yields are telemetry-only:
|
|
61
|
+
* if a late signal is observed it triggers a warn/span-event but is NOT
|
|
62
|
+
* promoted, because raising the effective promotion cap is deferred to
|
|
63
|
+
* the E.2 investigation. Without this phase, every default `deferSuspenseFor=0`
|
|
64
|
+
* render would emit a cap-reached warning even though nothing was missed.
|
|
65
|
+
*/
|
|
66
|
+
const SIGNAL_PROMOTION_DETECTION_EXTRA_YIELDS = 3;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Test-only observable: records how many microtask yields were consumed
|
|
70
|
+
* during the last signal promotion check. Import this in tests to assert
|
|
71
|
+
* the actual rejection chain depth and detect regressions if wrappers
|
|
72
|
+
* add more async hops.
|
|
73
|
+
*
|
|
74
|
+
* Only populated when the object is imported and exists — production
|
|
75
|
+
* bundles that don't import it pay zero cost (the typeof check is free).
|
|
76
|
+
*/
|
|
77
|
+
export const __test_only_signalPromotionDepth: { value: number } = { value: 0 };
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Test-only observable: true when the promotion loop hit the cap without
|
|
81
|
+
* capturing a signal (the silent-miss path — state 3 in TIM-970). False
|
|
82
|
+
* when the loop captured a signal at any depth, when it was skipped via
|
|
83
|
+
* `_fizzAllReadyResolved`, or when no signal was ever expected at a depth
|
|
84
|
+
* shallower than the cap.
|
|
85
|
+
*
|
|
86
|
+
* Pairs with `__test_only_signalPromotionDepth`: depth alone cannot
|
|
87
|
+
* distinguish "cap hit with signal captured on yield 5" from "cap hit with
|
|
88
|
+
* signal arriving on yield 6+" — both read `.value === 5`. This flag closes
|
|
89
|
+
* that gap. See TIM-970, design/05-streaming.md §"Signal Promotion".
|
|
90
|
+
*/
|
|
91
|
+
export const __test_only_signalPromotionCapHit: { value: boolean } = { value: false };
|
|
34
92
|
|
|
35
93
|
interface SsrRenderOptions {
|
|
36
94
|
req: Request;
|
|
@@ -44,6 +102,9 @@ interface SsrRenderOptions {
|
|
|
44
102
|
clientJsDisabled: boolean;
|
|
45
103
|
headHtml: string;
|
|
46
104
|
deferSuspenseFor: number;
|
|
105
|
+
/** Tier 2 global-error.tsx file, if present in app/. */
|
|
106
|
+
globalError?: GlobalErrorFile;
|
|
107
|
+
slotSkipInfo?: SlotSkipEntry[];
|
|
47
108
|
}
|
|
48
109
|
|
|
49
110
|
/**
|
|
@@ -77,40 +138,78 @@ export async function renderSsrResponse(opts: SsrRenderOptions): Promise<Respons
|
|
|
77
138
|
clientJsDisabled,
|
|
78
139
|
headHtml,
|
|
79
140
|
deferSuspenseFor,
|
|
141
|
+
globalError,
|
|
80
142
|
} = opts;
|
|
81
143
|
|
|
82
144
|
// Tee the RSC stream — one copy goes to SSR for HTML rendering,
|
|
83
145
|
// the other is inlined in the HTML for client-side hydration.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
146
|
+
// Uses teeWithErrorPropagation to ensure errors on either branch
|
|
147
|
+
// cancel the other (preventing hung responses) and to monitor
|
|
148
|
+
// buffer divergence between SSR and inline consumers.
|
|
149
|
+
//
|
|
150
|
+
// When client JS is disabled, skip the tee — the inline stream would
|
|
151
|
+
// never be consumed, causing monotonic buffer divergence that eventually
|
|
152
|
+
// triggers the 5MB guard and cancels the SSR stream.
|
|
153
|
+
let ssrStream: ReadableStream<Uint8Array>;
|
|
154
|
+
let inlineStream: ReadableStream<Uint8Array> | undefined;
|
|
155
|
+
if (clientJsDisabled) {
|
|
156
|
+
ssrStream = rscStream;
|
|
157
|
+
inlineStream = undefined;
|
|
158
|
+
} else {
|
|
159
|
+
[ssrStream, inlineStream] = teeWithErrorPropagation(rscStream);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Wire an AbortController so the Flight injector stops writing <script>
|
|
163
|
+
// tags when an unhandled RSC error is detected. Without this, React's
|
|
164
|
+
// Flight encoder may write model data for a chunk that already received
|
|
165
|
+
// an error row, causing the client's Flight decoder to crash with
|
|
166
|
+
// "enqueueModel is not a function". See TIM-938.
|
|
167
|
+
const errorAbort = new AbortController();
|
|
168
|
+
signals.onUnhandledError = () => errorAbort.abort();
|
|
100
169
|
|
|
170
|
+
// Segment metadata for initial hydration: deferred to shell-flush time.
|
|
171
|
+
// The SSR entry invokes this thunk AFTER renderSsrNodeStream /
|
|
172
|
+
// renderSsrStream returns (shell ready ⇒ AccessGates settled), so
|
|
173
|
+
// getFirstDeniedSegmentIndex() returns the authoritative ALS value
|
|
174
|
+
// rather than the pre-render Infinity. See TIM-1365, TIM-1359.
|
|
175
|
+
|
|
176
|
+
// Params reach the browser inside the payload — a field on the root row of
|
|
177
|
+
// the same Flight stream that is inlined for hydration. SSR itself renders
|
|
178
|
+
// only the tree, and the client components it renders read params from the
|
|
179
|
+
// ALS context seeded below, which is also where server components answer
|
|
180
|
+
// `getSegmentParams(slotPath)` from.
|
|
181
|
+
const slotParams = getSlotParamsForClient();
|
|
182
|
+
|
|
183
|
+
// Middleware has already run; if it read `ctx.nonce` for its CSP header,
|
|
184
|
+
// that is the value every inline script must wear.
|
|
185
|
+
const nonce = getCspNonce();
|
|
186
|
+
|
|
187
|
+
const reqUrl = new URL(req.url);
|
|
101
188
|
const navContext: NavContext = {
|
|
102
|
-
pathname:
|
|
103
|
-
|
|
104
|
-
|
|
189
|
+
pathname: reqUrl.pathname,
|
|
190
|
+
search: appVisibleSearch(reqUrl).search,
|
|
191
|
+
segmentParams: match.segmentParams,
|
|
192
|
+
slotParams,
|
|
105
193
|
statusCode: 200,
|
|
106
194
|
responseHeaders,
|
|
107
|
-
headHtml:
|
|
195
|
+
headHtml:
|
|
196
|
+
headHtml +
|
|
197
|
+
clientBootstrap.preloadLinks +
|
|
198
|
+
// Initialize __timber_f in <head> so it exists before any streaming
|
|
199
|
+
// chunk scripts arrive in <body>. See flight-scripts.ts, LOCAL-415.
|
|
200
|
+
(clientJsDisabled ? '' : flightInitScript(nonce)),
|
|
201
|
+
getHeadSegmentScript: clientJsDisabled
|
|
202
|
+
? undefined
|
|
203
|
+
: () =>
|
|
204
|
+
`<script${nonceAttr(nonce)}>self.__timber_segments=${htmlEscapeJsonString(JSON.stringify(buildSegmentInfo(segments, layoutComponents, opts.slotSkipInfo, undefined, getFirstDeniedSegmentIndex())))}</script>`,
|
|
108
205
|
bootstrapScriptContent: clientBootstrap.bootstrapScriptContent,
|
|
206
|
+
nonce,
|
|
109
207
|
// Skip RSC inline stream when client JS is disabled — no client to hydrate.
|
|
110
208
|
rscStream: clientJsDisabled ? undefined : inlineStream,
|
|
111
209
|
deferSuspenseFor: deferSuspenseFor > 0 ? deferSuspenseFor : undefined,
|
|
112
210
|
signal: req.signal,
|
|
113
|
-
cookies:
|
|
211
|
+
cookies: getCookiesForSsr(),
|
|
212
|
+
_errorSignal: errorAbort.signal,
|
|
114
213
|
};
|
|
115
214
|
|
|
116
215
|
// Helper: check if render-phase signals were captured and return the
|
|
@@ -118,14 +217,25 @@ export async function renderSsrResponse(opts: SsrRenderOptions): Promise<Respons
|
|
|
118
217
|
// promotion from Suspense) and failed SSR (signal outside Suspense).
|
|
119
218
|
//
|
|
120
219
|
// When `skipHandledDeny` is true (SSR success path), skip DenySignal
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
220
|
+
// re-render if the denial was already handled by a TimberErrorBoundary.
|
|
221
|
+
// The boundary renders the deny page as its fallback AND sets the correct
|
|
222
|
+
// HTTP status code on navContext — no redundant renderDenyPage() needed.
|
|
223
|
+
// See TIM-664, LOCAL-298.
|
|
224
|
+
// Read the denied segment index from ALS — set by AccessGate during render
|
|
225
|
+
// (setFirstDeniedSegmentIndex). See TIM-1358, TIM-1365.
|
|
226
|
+
function resolvedDeniedIndex(): number {
|
|
227
|
+
return getFirstDeniedSegmentIndex();
|
|
228
|
+
}
|
|
229
|
+
|
|
124
230
|
function checkCapturedSignals(skipHandledDeny = false): Response | Promise<Response> | null {
|
|
125
231
|
if (signals.redirectSignal) {
|
|
126
|
-
return buildRedirectResponse(
|
|
232
|
+
return buildRedirectResponse(signals.redirectSignal, req, responseHeaders);
|
|
127
233
|
}
|
|
128
234
|
if (signals.denySignal && !(skipHandledDeny && navContext._denyHandledByBoundary)) {
|
|
235
|
+
// Deny was not handled by an in-tree error boundary.
|
|
236
|
+
// Fall back to renderDenyPage (separate React.cache scope).
|
|
237
|
+
// For single-render behavior, add a 'use client' status-code file
|
|
238
|
+
// (e.g., 4xx.tsx) — the error boundary handles it in-tree.
|
|
129
239
|
return renderDenyPage(
|
|
130
240
|
signals.denySignal,
|
|
131
241
|
segments,
|
|
@@ -135,7 +245,9 @@ export async function renderSsrResponse(opts: SsrRenderOptions): Promise<Respons
|
|
|
135
245
|
responseHeaders,
|
|
136
246
|
clientBootstrap,
|
|
137
247
|
createDebugChannelSink,
|
|
138
|
-
callSsr
|
|
248
|
+
callSsr,
|
|
249
|
+
undefined,
|
|
250
|
+
resolvedDeniedIndex()
|
|
139
251
|
);
|
|
140
252
|
}
|
|
141
253
|
if (signals.renderError) {
|
|
@@ -147,7 +259,9 @@ export async function renderSsrResponse(opts: SsrRenderOptions): Promise<Respons
|
|
|
147
259
|
req,
|
|
148
260
|
match,
|
|
149
261
|
responseHeaders,
|
|
150
|
-
clientBootstrap
|
|
262
|
+
clientBootstrap,
|
|
263
|
+
globalError,
|
|
264
|
+
resolvedDeniedIndex()
|
|
151
265
|
);
|
|
152
266
|
}
|
|
153
267
|
return null;
|
|
@@ -156,63 +270,207 @@ export async function renderSsrResponse(opts: SsrRenderOptions): Promise<Respons
|
|
|
156
270
|
try {
|
|
157
271
|
const ssrResponse = await callSsr(ssrStream, navContext);
|
|
158
272
|
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
|
|
273
|
+
// Record SSR sub-phase timings for Server-Timing header (detailed mode).
|
|
274
|
+
// These are populated by handleSsr() in the SSR environment and passed
|
|
275
|
+
// back via navContext._ssrTimings across the RSC→SSR boundary.
|
|
276
|
+
if (navContext._ssrTimings) {
|
|
277
|
+
const t = navContext._ssrTimings;
|
|
278
|
+
recordTiming({ name: 'ssr-decode', dur: t.decodeMs, desc: 'RSC Flight decode' });
|
|
279
|
+
recordTiming({ name: 'ssr-shell', dur: t.shellMs, desc: 'Fizz onShellReady' });
|
|
280
|
+
recordTiming({ name: 'ssr-pipeline', dur: t.pipelineMs, desc: 'stream transforms' });
|
|
281
|
+
recordTiming({
|
|
282
|
+
name: 'ssr-total',
|
|
283
|
+
dur: t.totalMs,
|
|
284
|
+
desc: t.nodeStreams ? 'SSR (Node streams)' : 'SSR (Web Streams)',
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Signal promotion: check if any signals were captured during rendering
|
|
289
|
+
// inside Suspense boundaries. If no signals are present yet, we may
|
|
290
|
+
// need to yield microtasks so async component rejections propagate
|
|
291
|
+
// through the full rejection chain to the RSC onError callback before
|
|
292
|
+
// we commit the response.
|
|
293
|
+
//
|
|
294
|
+
// Option 1 short-circuit: when Fizz's `stream.allReady` settled before
|
|
295
|
+
// the `deferSuspenseFor` hold ended (navContext._fizzAllReadyResolved),
|
|
296
|
+
// Flight has closed its stream, every `onError` already fired, and the
|
|
297
|
+
// signals object is fully populated. The retry loop would be a no-op.
|
|
298
|
+
// See design/spike-signal-promotion-protocol.md §"Option 1".
|
|
299
|
+
//
|
|
300
|
+
// Fallback path (hold timed out, no hold window, or shell-only return):
|
|
301
|
+
// the known rejection chain depth for a withSpan-wrapped page is 3+
|
|
302
|
+
// microtasks —
|
|
303
|
+
// 1. PageComponent throws DenySignal/RedirectSignal
|
|
304
|
+
// 2. withSpan catches and re-throws (microtask 1)
|
|
305
|
+
// 3. TracedPage promise rejects (microtask 2)
|
|
306
|
+
// 4. React Flight rejection handler → onError (microtask 3+)
|
|
307
|
+
// so a bounded retry loop (max 5) is required to catch signals whose
|
|
308
|
+
// propagation is still in-flight when callSsr returns. The loop exits
|
|
309
|
+
// early as soon as a signal is detected. Uses queueMicrotask instead
|
|
310
|
+
// of setTimeout(0) to avoid yielding to the full event loop.
|
|
163
311
|
// See design/05-streaming.md §"deferSuspenseFor and the Hold Window"
|
|
164
|
-
|
|
312
|
+
if (!signals.redirectSignal && !signals.denySignal && !signals.renderError) {
|
|
313
|
+
let yieldsConsumed = 0;
|
|
314
|
+
let detectionConfirmedLateSignal = false;
|
|
315
|
+
if (!navContext._fizzAllReadyResolved) {
|
|
316
|
+
// Promotion phase: bounded cap of SIGNAL_PROMOTION_MAX_YIELDS.
|
|
317
|
+
// Signals captured here are honored by checkCapturedSignals and
|
|
318
|
+
// become the response (redirect/deny/error page).
|
|
319
|
+
for (let i = 0; i < SIGNAL_PROMOTION_MAX_YIELDS; i++) {
|
|
320
|
+
await new Promise<void>((r) => queueMicrotask(r));
|
|
321
|
+
yieldsConsumed++;
|
|
322
|
+
if (signals.redirectSignal || signals.denySignal || signals.renderError) break;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Detection phase (TIM-970): if the promotion cap was hit without
|
|
326
|
+
// capturing a signal, yield a few more times to disambiguate state 2
|
|
327
|
+
// ("no signal was ever coming" — the common legitimate-200 case) from
|
|
328
|
+
// state 3 ("signal arrived one microtask past the cap" — the silent
|
|
329
|
+
// miss). Telemetry-only: if a late signal is observed it triggers
|
|
330
|
+
// the warning and span event but is NOT promoted. Promoting it would
|
|
331
|
+
// effectively raise the cap to MAX_YIELDS + DETECTION_EXTRA_YIELDS,
|
|
332
|
+
// which the ticket defers to the E.2 investigation. The signals are
|
|
333
|
+
// cleared so checkCapturedSignals does not pick them up.
|
|
334
|
+
if (
|
|
335
|
+
yieldsConsumed === SIGNAL_PROMOTION_MAX_YIELDS &&
|
|
336
|
+
!signals.redirectSignal &&
|
|
337
|
+
!signals.denySignal &&
|
|
338
|
+
!signals.renderError
|
|
339
|
+
) {
|
|
340
|
+
for (let i = 0; i < SIGNAL_PROMOTION_DETECTION_EXTRA_YIELDS; i++) {
|
|
341
|
+
await new Promise<void>((r) => queueMicrotask(r));
|
|
342
|
+
if (signals.redirectSignal || signals.denySignal || signals.renderError) {
|
|
343
|
+
detectionConfirmedLateSignal = true;
|
|
344
|
+
signals.redirectSignal = null;
|
|
345
|
+
signals.denySignal = null;
|
|
346
|
+
signals.renderError = null;
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
__test_only_signalPromotionDepth.value = yieldsConsumed;
|
|
353
|
+
__test_only_signalPromotionCapHit.value = detectionConfirmedLateSignal;
|
|
354
|
+
|
|
355
|
+
if (detectionConfirmedLateSignal) {
|
|
356
|
+
if (isDevMode()) {
|
|
357
|
+
console.warn(
|
|
358
|
+
`[timber] Signal promotion cap reached (${SIGNAL_PROMOTION_MAX_YIELDS} microtask yields) — a deny()/redirect()/renderError signal arrived just past the cap and was discarded. ` +
|
|
359
|
+
`Likely cause: a page using deny()/redirect() inside a deeply-wrapped async component (custom withSpan, decorators, etc.). ` +
|
|
360
|
+
`Simplify the async chain or reduce withSpan/wrapper depth. ` +
|
|
361
|
+
`See design/05-streaming.md §"Signal Promotion".`
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
addSpanEventSync('timber.ssr.signal_promotion_cap_reached', {
|
|
365
|
+
depth: SIGNAL_PROMOTION_MAX_YIELDS,
|
|
366
|
+
signal_types_checked: 'redirect,deny,renderError',
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
165
370
|
|
|
166
371
|
const promoted = checkCapturedSignals(/* skipHandledDeny */ true);
|
|
167
372
|
if (promoted) {
|
|
168
373
|
ssrResponse.body?.cancel();
|
|
169
374
|
return promoted;
|
|
170
375
|
}
|
|
376
|
+
|
|
377
|
+
// Check if a DenySignal was caught in-tree by AccessGate or
|
|
378
|
+
// PageDenyBoundary. The deny page was rendered as a normal element
|
|
379
|
+
// (no error in the Flight stream), so SSR succeeded with status 200.
|
|
380
|
+
// Override the status code from the ALS-stored deny status. See TIM-666.
|
|
381
|
+
const denyStatus = getDenyStatus();
|
|
382
|
+
if (denyStatus) {
|
|
383
|
+
return new Response(ssrResponse.body, {
|
|
384
|
+
status: denyStatus,
|
|
385
|
+
headers: ssrResponse.headers,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
|
|
171
389
|
return ssrResponse;
|
|
172
390
|
} catch (ssrError) {
|
|
173
391
|
// Connection abort — the client disconnected (page refresh, navigation
|
|
174
392
|
// away). No response needed; return empty 499 (client closed request).
|
|
175
393
|
if (isAbortError(ssrError) || req.signal?.aborted) {
|
|
394
|
+
inlineStream?.cancel().catch(() => {});
|
|
176
395
|
return new Response(null, { status: 499 });
|
|
177
396
|
}
|
|
178
397
|
|
|
179
398
|
// SsrStreamError: SSR's renderToReadableStream failed because the RSC
|
|
180
399
|
// stream contained an uncontained error (e.g., slot without error boundary).
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
//
|
|
184
|
-
|
|
400
|
+
//
|
|
401
|
+
// Error pages now use SSR-only rendering (Fizz directly, no RSC Flight),
|
|
402
|
+
// which imports layouts in the SSR environment where ALS is active. This
|
|
403
|
+
// means we CAN include layouts — they'll call getHeaders()/getCookies() correctly.
|
|
404
|
+
//
|
|
405
|
+
// Deny pages still go through RSC → SSR (plain props), so they pass empty
|
|
406
|
+
// layouts to avoid re-executing server components in the RSC environment's
|
|
407
|
+
// stale ALS scope. See LOCAL-293.
|
|
408
|
+
// SsrStreamError is thrown in the SSR environment but caught here in
|
|
409
|
+
// RSC — separate Vite module graphs, so `instanceof` can never match.
|
|
410
|
+
// isSsrStreamError() checks the Symbol.for brand instead. See
|
|
411
|
+
// design/18-build-system.md §"Dev Mode: Signal Identity Across Program Reloads".
|
|
412
|
+
if (isSsrStreamError(ssrError)) {
|
|
413
|
+
// Cancel the teed inline stream — SSR failed so this response will
|
|
414
|
+
// be replaced by renderErrorPage which creates its own clean streams.
|
|
415
|
+
// Without explicit cancellation the orphaned tee branch keeps the
|
|
416
|
+
// RSC source stream alive, preventing garbage collection.
|
|
417
|
+
inlineStream?.cancel().catch(() => {});
|
|
418
|
+
|
|
185
419
|
if (signals.redirectSignal) {
|
|
186
|
-
return buildRedirectResponse(
|
|
420
|
+
return buildRedirectResponse(signals.redirectSignal, req, responseHeaders);
|
|
187
421
|
}
|
|
188
422
|
if (signals.denySignal) {
|
|
189
|
-
//
|
|
423
|
+
// SSR failed (SsrStreamError) — the deny was in the shell and
|
|
424
|
+
// the error boundary didn't catch it during Fizz rendering.
|
|
425
|
+
// Fall back to renderDenyPage (separate render). See TIM-664.
|
|
190
426
|
return renderDenyPage(
|
|
191
427
|
signals.denySignal,
|
|
192
428
|
segments,
|
|
193
|
-
|
|
429
|
+
layoutComponents as LayoutEntry[],
|
|
194
430
|
req,
|
|
195
431
|
match,
|
|
196
432
|
responseHeaders,
|
|
197
433
|
clientBootstrap,
|
|
198
434
|
createDebugChannelSink,
|
|
199
|
-
callSsr
|
|
435
|
+
callSsr,
|
|
436
|
+
undefined,
|
|
437
|
+
resolvedDeniedIndex()
|
|
200
438
|
);
|
|
201
439
|
}
|
|
202
440
|
if (signals.renderError) {
|
|
441
|
+
// RenderError: TSX error pages use SSR-only path (layouts OK),
|
|
442
|
+
// MDX error pages use RSC path (plain props, no Error object).
|
|
203
443
|
return renderErrorPage(
|
|
204
444
|
signals.renderError.error,
|
|
205
445
|
signals.renderError.status,
|
|
206
446
|
segments,
|
|
207
|
-
|
|
447
|
+
layoutComponents as LayoutEntry[],
|
|
208
448
|
req,
|
|
209
449
|
match,
|
|
210
450
|
responseHeaders,
|
|
211
|
-
clientBootstrap
|
|
451
|
+
clientBootstrap,
|
|
452
|
+
globalError,
|
|
453
|
+
resolvedDeniedIndex()
|
|
212
454
|
);
|
|
213
455
|
}
|
|
214
|
-
// No captured signal —
|
|
215
|
-
|
|
456
|
+
// No captured signal — unhandled error in the RSC stream.
|
|
457
|
+
// Use the lastUnhandledError from RSC onError if available (more
|
|
458
|
+
// reliable than extracting SsrStreamError.cause). Falls back to
|
|
459
|
+
// cause extraction for backward compatibility.
|
|
460
|
+
const originalError =
|
|
461
|
+
signals.lastUnhandledError ?? (ssrError as { cause?: unknown }).cause ?? ssrError;
|
|
462
|
+
return renderErrorPage(
|
|
463
|
+
originalError,
|
|
464
|
+
500,
|
|
465
|
+
segments,
|
|
466
|
+
layoutComponents as LayoutEntry[],
|
|
467
|
+
req,
|
|
468
|
+
match,
|
|
469
|
+
responseHeaders,
|
|
470
|
+
clientBootstrap,
|
|
471
|
+
globalError,
|
|
472
|
+
resolvedDeniedIndex()
|
|
473
|
+
);
|
|
216
474
|
}
|
|
217
475
|
|
|
218
476
|
// SSR shell rendering failed — the error was outside Suspense.
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action-dispatch wrapper around the route pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from rsc-entry/index.ts so the wiring can be unit-tested in
|
|
5
|
+
* isolation from Vite's virtual modules.
|
|
6
|
+
*
|
|
7
|
+
* ## Architecture (TIM-1213)
|
|
8
|
+
*
|
|
9
|
+
* The wrapper is responsible for ONE thing:
|
|
10
|
+
*
|
|
11
|
+
* **Pipeline-boundary CSRF validation** — runs on EVERY unsafe-method
|
|
12
|
+
* request, before any dispatch decision. This is the only line of
|
|
13
|
+
* defense for `route.ts` API handlers and server actions. See LOCAL-773.
|
|
14
|
+
*
|
|
15
|
+
* Server action dispatch has moved INTO the pipeline (`PipelineConfig.
|
|
16
|
+
* dispatchAction`) so that `proxy.ts` runs on action POSTs — matching the
|
|
17
|
+
* design doc contract: "proxy.ts runs on every request, no exclusions."
|
|
18
|
+
*
|
|
19
|
+
* The `buildActionDispatcher` function constructs the `dispatchAction`
|
|
20
|
+
* callback that `createPipeline` calls after proxy.ts runs. It
|
|
21
|
+
* encapsulates action detection, route-type check, action handler
|
|
22
|
+
* dispatch, and the no-JS validation rerender path.
|
|
23
|
+
*
|
|
24
|
+
* Per-segment `middleware.ts` does NOT run on action POSTs (TIM-1134).
|
|
25
|
+
* Actions are dispatched by action ID, not by route segment. CSRF
|
|
26
|
+
* validation runs at the pipeline boundary. Per-action auth/validation
|
|
27
|
+
* belongs in `createActionClient({ middleware })`.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import type { FormRerender } from '../action-handler.ts';
|
|
31
|
+
import { handleActionRequest, isActionRequest } from '../action-handler.ts';
|
|
32
|
+
import type { BodyLimitsConfig } from '../body-limits.ts';
|
|
33
|
+
import { validateCsrf, type CsrfConfig } from '../csrf.ts';
|
|
34
|
+
import { runWithFormFlash } from '../form-flash.ts';
|
|
35
|
+
import { seedRequestCookies } from '../cookie-context.ts';
|
|
36
|
+
import type { RouteMatcher } from '../pipeline.ts';
|
|
37
|
+
import type { SensitiveFieldsOption } from '../sensitive-fields.ts';
|
|
38
|
+
import type { RevalidateRenderer } from '../actions.ts';
|
|
39
|
+
|
|
40
|
+
// ─── Types ────────────────────────────────────────────────────────────────
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Build a `RevalidateRenderer` for a specific request.
|
|
44
|
+
*
|
|
45
|
+
* The renderer needs to forward cookies/headers from the originating
|
|
46
|
+
* request when fetching the revalidated route. We pass the request in
|
|
47
|
+
* via a builder so the wrapper doesn't need to know about route matching,
|
|
48
|
+
* segment param coercion, or element building — those concerns stay in
|
|
49
|
+
* `rsc-entry/index.ts`.
|
|
50
|
+
*/
|
|
51
|
+
export type RevalidateRendererFactory = (req: Request) => RevalidateRenderer;
|
|
52
|
+
|
|
53
|
+
/** Dependencies for the CSRF wrapper. */
|
|
54
|
+
export interface ActionDispatchDeps {
|
|
55
|
+
/** CSRF configuration (Origin allow-list, on/off switch). */
|
|
56
|
+
csrfConfig: CsrfConfig;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Dependencies for the action dispatcher (used inside the pipeline). */
|
|
60
|
+
export interface ActionDispatcherDeps {
|
|
61
|
+
/** CSRF configuration — defense-in-depth check inside the action handler. */
|
|
62
|
+
csrfConfig: CsrfConfig;
|
|
63
|
+
/** Body size limits forwarded to `handleActionRequest`. */
|
|
64
|
+
bodyLimits?: BodyLimitsConfig['limits'];
|
|
65
|
+
/** Sensitive-field deny-list forwarded to `handleActionRequest`. */
|
|
66
|
+
sensitiveFields?: SensitiveFieldsOption;
|
|
67
|
+
/** Per-request factory that builds a `RevalidateRenderer`. */
|
|
68
|
+
buildRevalidateRenderer: RevalidateRendererFactory;
|
|
69
|
+
/**
|
|
70
|
+
* Route matcher — used for the route-type check that skips action
|
|
71
|
+
* detection on `route.ts` API handlers (TIM-870).
|
|
72
|
+
*/
|
|
73
|
+
matchRoute?: RouteMatcher;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// ─── CSRF Wrapper ─────────────────────────────────────────────────────────
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Wrap a pipeline function with pipeline-boundary CSRF validation.
|
|
80
|
+
*
|
|
81
|
+
* The returned handler is the framework's outermost request entry point.
|
|
82
|
+
* It validates the `Origin` header on every unsafe-method request before
|
|
83
|
+
* any dispatch decision — this is the ONLY line of defense for `route.ts`
|
|
84
|
+
* API handlers, which never see the action handler.
|
|
85
|
+
*
|
|
86
|
+
* Action dispatch has moved inside the pipeline (TIM-1213) so proxy.ts
|
|
87
|
+
* runs on every request. This wrapper now only handles CSRF.
|
|
88
|
+
*/
|
|
89
|
+
export function wrapPipelineWithActionDispatch(
|
|
90
|
+
pipeline: (req: Request) => Promise<Response>,
|
|
91
|
+
deps: ActionDispatchDeps
|
|
92
|
+
): (req: Request) => Promise<Response> {
|
|
93
|
+
return async (req: Request): Promise<Response> => {
|
|
94
|
+
// Pipeline-boundary CSRF validation (LOCAL-773).
|
|
95
|
+
// Runs on EVERY unsafe-method request, before any dispatch decision.
|
|
96
|
+
const csrfResult = validateCsrf(req, deps.csrfConfig);
|
|
97
|
+
if (!csrfResult.ok) {
|
|
98
|
+
return new Response(null, { status: csrfResult.status });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return pipeline(req);
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ─── Action Dispatcher ────────────────────────────────────────────────────
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Build the `dispatchAction` callback for `PipelineConfig`.
|
|
109
|
+
*
|
|
110
|
+
* Called after proxy.ts runs (inside the pipeline) for every request.
|
|
111
|
+
* Checks if the request is a server action POST, handles the route-type
|
|
112
|
+
* check (TIM-870), dispatches to the action handler, and handles the
|
|
113
|
+
* no-JS validation rerender path.
|
|
114
|
+
*
|
|
115
|
+
* Returns `Response` if the request was handled as an action, `null` to
|
|
116
|
+
* fall through to normal routing.
|
|
117
|
+
*/
|
|
118
|
+
export function buildActionDispatcher(
|
|
119
|
+
deps: ActionDispatcherDeps
|
|
120
|
+
): (
|
|
121
|
+
req: Request,
|
|
122
|
+
canonicalPath: string,
|
|
123
|
+
reenter: (req: Request) => Promise<Response>
|
|
124
|
+
) => Promise<Response | null> {
|
|
125
|
+
return async (
|
|
126
|
+
req: Request,
|
|
127
|
+
canonicalPath: string,
|
|
128
|
+
reenter: (req: Request) => Promise<Response>
|
|
129
|
+
): Promise<Response | null> => {
|
|
130
|
+
if (!isActionRequest(req)) return null;
|
|
131
|
+
|
|
132
|
+
// Route-type check (TIM-870): match the route BEFORE any body parsing.
|
|
133
|
+
// If the matched route is an API route (route.ts), skip action detection
|
|
134
|
+
// entirely — server actions only live on page routes; POSTs to route.ts
|
|
135
|
+
// are API requests whose body must reach the handler untouched.
|
|
136
|
+
//
|
|
137
|
+
// Use `canonicalPath` from the pipeline — NOT `new URL(req.url).pathname`,
|
|
138
|
+
// which re-encodes the path. The matcher expects the decoded canonical form.
|
|
139
|
+
if (deps.matchRoute) {
|
|
140
|
+
const match = deps.matchRoute(canonicalPath);
|
|
141
|
+
if (match) {
|
|
142
|
+
const leaf = match.segments[match.segments.length - 1];
|
|
143
|
+
if (leaf?.route) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Action handler dispatch
|
|
150
|
+
const actionResponse = await handleActionRequest(req, {
|
|
151
|
+
csrf: deps.csrfConfig,
|
|
152
|
+
bodyLimits: { limits: deps.bodyLimits },
|
|
153
|
+
sensitiveFields: deps.sensitiveFields,
|
|
154
|
+
revalidateRenderer: deps.buildRevalidateRenderer(req),
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
if (actionResponse) {
|
|
158
|
+
// No-JS validation rerender
|
|
159
|
+
if ('rerender' in actionResponse) {
|
|
160
|
+
const formRerender = actionResponse as FormRerender;
|
|
161
|
+
// Build a synthetic GET request for the rerender pipeline:
|
|
162
|
+
// - Same URL (so route matching lands on the same page)
|
|
163
|
+
// - Cookie header DROPPED entirely. The post-action RYW state
|
|
164
|
+
// is threaded into the rerender request context as a parsed
|
|
165
|
+
// `Map<string, string>` via `seedRequestCookies` below.
|
|
166
|
+
// - Method GET because the rerender is conceptually a page render.
|
|
167
|
+
const rerenderHeaders = new Headers(req.headers);
|
|
168
|
+
rerenderHeaders.delete('cookie');
|
|
169
|
+
const rerenderReq = new Request(req.url, {
|
|
170
|
+
method: 'GET',
|
|
171
|
+
headers: rerenderHeaders,
|
|
172
|
+
});
|
|
173
|
+
seedRequestCookies(rerenderReq, formRerender.cookies);
|
|
174
|
+
const response = await runWithFormFlash(formRerender.rerender, () => reenter(rerenderReq));
|
|
175
|
+
// Apply Set-Cookie headers snapshotted from the action's ALS scope.
|
|
176
|
+
for (const value of formRerender.setCookieHeaders) {
|
|
177
|
+
response.headers.append('Set-Cookie', value);
|
|
178
|
+
}
|
|
179
|
+
return response;
|
|
180
|
+
}
|
|
181
|
+
return actionResponse;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return null;
|
|
185
|
+
};
|
|
186
|
+
}
|