@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
package/src/server/ssr-render.ts
CHANGED
|
@@ -5,6 +5,17 @@
|
|
|
5
5
|
* independently of the Vite RSC plugin runtime (which provides
|
|
6
6
|
* createFromReadableStream for decoding RSC streams).
|
|
7
7
|
*
|
|
8
|
+
* Uses a platform-adaptive rendering strategy:
|
|
9
|
+
* - **Node.js / Bun**: `renderToPipeableStream` — React pipes HTML chunks
|
|
10
|
+
* through Node.js native streams (C++ implementation). Each chunk flows
|
|
11
|
+
* through libuv buffers with zero Promise overhead.
|
|
12
|
+
* - **Cloudflare Workers / Edge**: `renderToReadableStream` — React outputs
|
|
13
|
+
* to Web Streams which are V8-native C++ built-ins on these platforms.
|
|
14
|
+
*
|
|
15
|
+
* The detection is automatic at runtime. Both paths produce a Web
|
|
16
|
+
* `ReadableStream<Uint8Array>` so downstream transforms (injectHead,
|
|
17
|
+
* injectRscPayload, compression) work identically regardless of platform.
|
|
18
|
+
*
|
|
8
19
|
* Design docs: 02-rendering-pipeline.md §"Single-Pass Rendering",
|
|
9
20
|
* 18-build-system.md §"Entry Files"
|
|
10
21
|
*/
|
|
@@ -12,7 +23,26 @@
|
|
|
12
23
|
import type { ReactNode } from 'react';
|
|
13
24
|
import { renderToReadableStream } from 'react-dom/server';
|
|
14
25
|
|
|
15
|
-
import {
|
|
26
|
+
import { createRenderTimeout, RenderTimeoutError } from './render-timeout.ts';
|
|
27
|
+
import { logRenderError, logStreamingError } from './logger.ts';
|
|
28
|
+
import { isAbortError, noindexScript } from './render-utils.ts';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* React's production error sanitization message. When NODE_ENV=production,
|
|
32
|
+
* React replaces all error messages with this string in renderToReadableStream
|
|
33
|
+
* and renderToPipeableStream. The original error was already logged by the
|
|
34
|
+
* RSC onError handler — logging the sanitized version in SSR is duplicate noise.
|
|
35
|
+
*/
|
|
36
|
+
const REACT_PROD_ERROR_PREFIX = 'An error occurred in the Server Components render';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Returns true if the error is React's sanitized production error.
|
|
40
|
+
* These are duplicates of errors already logged by the RSC onError handler
|
|
41
|
+
* with the full original message — logging them again in SSR adds noise.
|
|
42
|
+
*/
|
|
43
|
+
function isReactSanitizedError(error: unknown): boolean {
|
|
44
|
+
return error instanceof Error && error.message.startsWith(REACT_PROD_ERROR_PREFIX);
|
|
45
|
+
}
|
|
16
46
|
|
|
17
47
|
/**
|
|
18
48
|
* Inline script that injects <meta name="robots" content="noindex"> into <head>.
|
|
@@ -25,96 +55,359 @@ import { formatSsrError } from './error-formatter.js';
|
|
|
25
55
|
*
|
|
26
56
|
* See design/05-streaming.md §"deny() inside Suspense"
|
|
27
57
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
58
|
+
|
|
59
|
+
// ─── Platform Detection ──────────────────────────────────────────────────────
|
|
60
|
+
//
|
|
61
|
+
// Detect whether we're running on a platform with native Node.js streams.
|
|
62
|
+
// On Node.js/Bun, `node:stream` is backed by C++ (libuv). On Cloudflare
|
|
63
|
+
// Workers, `node:stream` via nodejs_compat is a JS polyfill — Web Streams
|
|
64
|
+
// are the faster path there (V8-native C++ built-ins).
|
|
65
|
+
//
|
|
66
|
+
// We detect once at module load to avoid per-request overhead.
|
|
67
|
+
// The check: process.versions.node exists AND we can import node:stream.
|
|
68
|
+
// Cloudflare Workers with nodejs_compat may polyfill process.versions but
|
|
69
|
+
// the streams won't be native. The Readable.toWeb check confirms native support.
|
|
70
|
+
|
|
71
|
+
let _useNodeStreams = false;
|
|
72
|
+
let _PassThrough: typeof import('node:stream').PassThrough | null = null;
|
|
73
|
+
let _ReadableToWeb: ((readable: import('node:stream').Readable) => ReadableStream) | null = null;
|
|
74
|
+
let _renderToPipeableStream: typeof import('react-dom/server').renderToPipeableStream | null = null;
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
// Dynamic imports to avoid bundling node:stream and the Node.js-specific
|
|
78
|
+
// react-dom/server entry for CF Workers builds.
|
|
79
|
+
// On Node.js/Bun this resolves to native C++ streams.
|
|
80
|
+
// On CF Workers this either fails or returns a JS polyfill.
|
|
81
|
+
const nodeStream = await import('node:stream');
|
|
82
|
+
if (
|
|
83
|
+
typeof nodeStream.PassThrough === 'function' &&
|
|
84
|
+
typeof nodeStream.Readable.toWeb === 'function' &&
|
|
85
|
+
// Real Node.js — not a polyfill. Polyfills typically don't set
|
|
86
|
+
// process.release.name to 'node'.
|
|
87
|
+
typeof process !== 'undefined' &&
|
|
88
|
+
process.release?.name === 'node'
|
|
89
|
+
) {
|
|
90
|
+
// Dynamically import renderToPipeableStream from the Node.js-specific
|
|
91
|
+
// entry point. The SSR bundle resolves react-dom/server to the edge/browser
|
|
92
|
+
// export (which lacks renderToPipeableStream), so we import the .node file
|
|
93
|
+
// directly. This is safe because we're inside a process.release.name === 'node'
|
|
94
|
+
// guard — this code only runs on real Node.js.
|
|
95
|
+
const reactDomServer = await import('react-dom/server.node');
|
|
96
|
+
if (typeof reactDomServer.renderToPipeableStream === 'function') {
|
|
97
|
+
_useNodeStreams = true;
|
|
98
|
+
_PassThrough = nodeStream.PassThrough;
|
|
99
|
+
_ReadableToWeb = nodeStream.Readable.toWeb as (
|
|
100
|
+
readable: import('node:stream').Readable
|
|
101
|
+
) => ReadableStream;
|
|
102
|
+
_renderToPipeableStream = reactDomServer.renderToPipeableStream;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
} catch {
|
|
106
|
+
// node:stream or renderToPipeableStream not available — use Web Streams path
|
|
107
|
+
}
|
|
30
108
|
|
|
31
109
|
/**
|
|
32
110
|
* Render a React element tree to a ReadableStream of HTML.
|
|
33
111
|
*
|
|
34
|
-
*
|
|
112
|
+
* Automatically selects the optimal rendering path for the platform:
|
|
113
|
+
* - Node.js/Bun: `renderToPipeableStream` → Node.js native streams → `Readable.toWeb()`
|
|
114
|
+
* - CF Workers/Edge: `renderToReadableStream` → native Web Streams
|
|
115
|
+
*
|
|
35
116
|
* The returned stream begins yielding after onShellReady — everything
|
|
36
117
|
* outside <Suspense> boundaries is in the shell.
|
|
37
118
|
*
|
|
38
|
-
* With progressive streaming, the RSC stream is piped directly to SSR
|
|
39
|
-
* without buffering. If deny() was called outside a Suspense boundary,
|
|
40
|
-
* the RSC stream encodes an error in the shell — renderToReadableStream
|
|
41
|
-
* rejects, and the RSC entry catches this to render a deny page with
|
|
42
|
-
* the correct HTTP status code. If deny() was inside Suspense, the shell
|
|
43
|
-
* succeeds (200 committed) and the error streams as an error boundary.
|
|
44
|
-
*
|
|
45
119
|
* @param element - The React element tree decoded from the RSC stream
|
|
46
120
|
* @param options - Optional configuration
|
|
47
|
-
* @param options.bootstrapScriptContent - Inline JS injected by React as a
|
|
48
|
-
* non-deferred `<script>` in the shell HTML. Executes immediately during
|
|
49
|
-
* parsing — even while Suspense boundaries are still streaming. Used to
|
|
50
|
-
* kick off module loading via dynamic `import()` so hydration can start
|
|
51
|
-
* before the HTML stream closes.
|
|
52
121
|
* @returns A ReadableStream of HTML bytes with hydration markers
|
|
53
122
|
*/
|
|
54
123
|
export async function renderSsrStream(
|
|
55
124
|
element: ReactNode,
|
|
56
|
-
options?: {
|
|
125
|
+
options?: {
|
|
126
|
+
bootstrapScriptContent?: string;
|
|
127
|
+
/** Request CSP nonce — stamped by Fizz on the bootstrap and runtime scripts. */
|
|
128
|
+
nonce?: string;
|
|
129
|
+
deferSuspenseFor?: number;
|
|
130
|
+
signal?: AbortSignal;
|
|
131
|
+
renderTimeoutMs?: number;
|
|
132
|
+
/** Request info threaded into render-error logs (method/path). */
|
|
133
|
+
requestInfo?: { method: string; path: string };
|
|
134
|
+
/**
|
|
135
|
+
* Fired synchronously when the render function is about to resolve
|
|
136
|
+
* (i.e. at hold-end / shell-ready). `resolved` reports whether Fizz's
|
|
137
|
+
* `stream.allReady` had already settled by that moment. Callers use
|
|
138
|
+
* this to decide whether signal promotion can be short-circuited.
|
|
139
|
+
* See NavContext._fizzAllReadyResolved.
|
|
140
|
+
*/
|
|
141
|
+
onFizzAllReadyResolved?: (resolved: boolean) => void;
|
|
142
|
+
}
|
|
57
143
|
): Promise<ReadableStream<Uint8Array>> {
|
|
144
|
+
return renderViaReadableStream(element, options);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Whether the current platform uses native Node.js streams for SSR. */
|
|
148
|
+
export const useNodeStreams = _useNodeStreams;
|
|
149
|
+
|
|
150
|
+
// ─── Node.js Path: renderToPipeableStream ────────────────────────────────────
|
|
151
|
+
//
|
|
152
|
+
// Uses React's Node.js-native API. HTML chunks flow through C++ stream
|
|
153
|
+
// buffers with zero Promise allocations per chunk. Returns a Node.js
|
|
154
|
+
// Readable — the caller (ssr-entry.ts) pipes through Node.js Transform
|
|
155
|
+
// streams for injectHead/injectRscPayload before converting to Web
|
|
156
|
+
// ReadableStream at the Response boundary.
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Render via renderToPipeableStream, returning a Node.js Readable.
|
|
160
|
+
*
|
|
161
|
+
* The entire HTML rendering + post-processing pipeline stays in native
|
|
162
|
+
* Node.js streams (C++ backed). Only converted to Web ReadableStream
|
|
163
|
+
* at the very end for the Response body.
|
|
164
|
+
*/
|
|
165
|
+
export async function renderSsrNodeStream(
|
|
166
|
+
element: ReactNode,
|
|
167
|
+
options?: {
|
|
168
|
+
bootstrapScriptContent?: string;
|
|
169
|
+
/** Request CSP nonce — stamped by Fizz on the bootstrap and runtime scripts. */
|
|
170
|
+
nonce?: string;
|
|
171
|
+
deferSuspenseFor?: number;
|
|
172
|
+
signal?: AbortSignal;
|
|
173
|
+
renderTimeoutMs?: number;
|
|
174
|
+
/** Request info threaded into render-error logs (method/path). */
|
|
175
|
+
requestInfo?: { method: string; path: string };
|
|
176
|
+
/**
|
|
177
|
+
* Fired synchronously at the moment `renderSsrNodeStream`'s returned
|
|
178
|
+
* Promise is about to resolve. `resolved` reports whether Fizz's
|
|
179
|
+
* `onAllReady` had already fired by then. See the twin callback on
|
|
180
|
+
* `renderSsrStream`.
|
|
181
|
+
*/
|
|
182
|
+
onFizzAllReadyResolved?: (resolved: boolean) => void;
|
|
183
|
+
}
|
|
184
|
+
): Promise<import('node:stream').Readable> {
|
|
58
185
|
const signal = options?.signal;
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
186
|
+
const deferMs = options?.deferSuspenseFor;
|
|
187
|
+
const timeoutMs = options?.renderTimeoutMs;
|
|
188
|
+
const requestInfo = options?.requestInfo;
|
|
189
|
+
const onFizzAllReadyResolved = options?.onFizzAllReadyResolved;
|
|
190
|
+
|
|
191
|
+
return new Promise<import('node:stream').Readable>((resolve, reject) => {
|
|
192
|
+
const passthrough = new _PassThrough!();
|
|
193
|
+
|
|
194
|
+
let allReadyResolve: (() => void) | null = null;
|
|
195
|
+
let allReadyReject: ((reason?: unknown) => void) | null = null;
|
|
196
|
+
let allReadyFired = false;
|
|
197
|
+
const allReady = new Promise<void>((resolve, reject) => {
|
|
198
|
+
allReadyResolve = resolve;
|
|
199
|
+
allReadyReject = reject;
|
|
200
|
+
});
|
|
201
|
+
allReady.catch(() => {});
|
|
202
|
+
|
|
203
|
+
const { pipe, abort } = _renderToPipeableStream!(element, {
|
|
204
|
+
bootstrapScriptContent: options?.bootstrapScriptContent || undefined,
|
|
205
|
+
nonce: options?.nonce,
|
|
206
|
+
|
|
207
|
+
onShellReady() {
|
|
208
|
+
if (deferMs && deferMs > 0) {
|
|
209
|
+
Promise.race([allReady, new Promise<void>((r) => setTimeout(r, deferMs))]).then(() => {
|
|
210
|
+
onFizzAllReadyResolved?.(allReadyFired);
|
|
211
|
+
pipe(passthrough);
|
|
212
|
+
resolve(passthrough);
|
|
213
|
+
});
|
|
214
|
+
} else {
|
|
215
|
+
// No hold — allReady has almost certainly not fired yet.
|
|
216
|
+
// Report false so the RSC entry runs the microtask retry loop.
|
|
217
|
+
onFizzAllReadyResolved?.(allReadyFired);
|
|
218
|
+
pipe(passthrough);
|
|
219
|
+
resolve(passthrough);
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
onAllReady() {
|
|
224
|
+
allReadyFired = true;
|
|
225
|
+
allReadyResolve?.();
|
|
226
|
+
},
|
|
227
|
+
|
|
228
|
+
onShellError(error: unknown) {
|
|
229
|
+
// Reject allReady so the render timeout is cancelled.
|
|
230
|
+
// Without this, a pre-shell failure leaves the timer
|
|
231
|
+
// running for the full timeout window.
|
|
232
|
+
allReadyReject?.(error);
|
|
233
|
+
reject(error);
|
|
234
|
+
},
|
|
235
|
+
|
|
236
|
+
onError(error: unknown) {
|
|
237
|
+
if (isAbortError(error) || signal?.aborted) return;
|
|
238
|
+
// Skip React's sanitized production errors — the original was
|
|
239
|
+
// already logged by the RSC onError with full details.
|
|
240
|
+
if (isReactSanitizedError(error)) return;
|
|
241
|
+
logRenderError({
|
|
242
|
+
method: requestInfo?.method ?? '',
|
|
243
|
+
path: requestInfo?.path ?? '',
|
|
244
|
+
error,
|
|
245
|
+
});
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// Wire abort to both request signal AND render timeout.
|
|
250
|
+
// If the client stays connected but a downstream fetch hangs,
|
|
251
|
+
// the timeout ensures abort() is eventually called.
|
|
252
|
+
if (signal) {
|
|
253
|
+
if (signal.aborted) {
|
|
254
|
+
abort();
|
|
255
|
+
} else {
|
|
256
|
+
signal.addEventListener('abort', () => abort(), { once: true });
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if (timeoutMs && timeoutMs > 0) {
|
|
261
|
+
const renderTimeout = createRenderTimeout(timeoutMs, signal);
|
|
262
|
+
renderTimeout.signal.addEventListener(
|
|
263
|
+
'abort',
|
|
264
|
+
() => {
|
|
265
|
+
logRenderError({
|
|
266
|
+
method: requestInfo?.method ?? '',
|
|
267
|
+
path: requestInfo?.path ?? '',
|
|
268
|
+
error: new Error(
|
|
269
|
+
`SSR render timed out after ${timeoutMs}ms — aborting. ` +
|
|
270
|
+
'A Suspense component or downstream fetch may be hanging.'
|
|
271
|
+
),
|
|
272
|
+
});
|
|
273
|
+
abort(renderTimeout.signal.reason);
|
|
274
|
+
},
|
|
275
|
+
{ once: true }
|
|
276
|
+
);
|
|
277
|
+
// Cancel the timeout when the render completes OR on pre-shell
|
|
278
|
+
// failure. Without the catch branch, onShellError → reject()
|
|
279
|
+
// would leave the timer running for the full timeout window.
|
|
280
|
+
allReady.then(
|
|
281
|
+
() => renderTimeout.cancel(),
|
|
282
|
+
() => renderTimeout.cancel()
|
|
283
|
+
);
|
|
284
|
+
}
|
|
68
285
|
});
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/** Convert a Node.js Readable to a Web ReadableStream (zero-copy bridge). */
|
|
289
|
+
export function nodeReadableToWeb(
|
|
290
|
+
readable: import('node:stream').Readable
|
|
291
|
+
): ReadableStream<Uint8Array> {
|
|
292
|
+
return _ReadableToWeb!(readable) as ReadableStream<Uint8Array>;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// ─── Web Streams Path: renderToReadableStream ────────────────────────────────
|
|
296
|
+
//
|
|
297
|
+
// Uses React's Web Streams API. On Cloudflare Workers, ReadableStream is a
|
|
298
|
+
// V8-native C++ built-in, making this the fastest path for that platform.
|
|
299
|
+
// On Node.js, Web Streams are a JS reimplementation — slower, but this path
|
|
300
|
+
// is only used as a fallback when Node.js native streams aren't available.
|
|
301
|
+
|
|
302
|
+
async function renderViaReadableStream(
|
|
303
|
+
element: ReactNode,
|
|
304
|
+
options?: {
|
|
305
|
+
bootstrapScriptContent?: string;
|
|
306
|
+
/** Request CSP nonce — stamped by Fizz on the bootstrap and runtime scripts. */
|
|
307
|
+
nonce?: string;
|
|
308
|
+
deferSuspenseFor?: number;
|
|
309
|
+
signal?: AbortSignal;
|
|
310
|
+
renderTimeoutMs?: number;
|
|
311
|
+
requestInfo?: { method: string; path: string };
|
|
312
|
+
onFizzAllReadyResolved?: (resolved: boolean) => void;
|
|
313
|
+
}
|
|
314
|
+
): Promise<ReadableStream<Uint8Array>> {
|
|
315
|
+
const signal = options?.signal;
|
|
316
|
+
const timeoutMs = options?.renderTimeoutMs;
|
|
317
|
+
const requestInfo = options?.requestInfo;
|
|
318
|
+
const onFizzAllReadyResolved = options?.onFizzAllReadyResolved;
|
|
319
|
+
|
|
320
|
+
// If a render timeout is configured, create a combined signal that
|
|
321
|
+
// fires on either request abort OR timeout — whichever comes first.
|
|
322
|
+
let renderTimeout: import('./render-timeout.ts').RenderTimeout | null = null;
|
|
323
|
+
let effectiveSignal = signal;
|
|
324
|
+
if (timeoutMs && timeoutMs > 0) {
|
|
325
|
+
renderTimeout = createRenderTimeout(timeoutMs, signal);
|
|
326
|
+
effectiveSignal = renderTimeout.signal;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
let stream: Awaited<ReturnType<typeof renderToReadableStream>>;
|
|
330
|
+
try {
|
|
331
|
+
stream = await renderToReadableStream(element, {
|
|
332
|
+
bootstrapScriptContent: options?.bootstrapScriptContent || undefined,
|
|
333
|
+
nonce: options?.nonce,
|
|
334
|
+
signal: effectiveSignal,
|
|
335
|
+
onError(error: unknown) {
|
|
336
|
+
if (isAbortError(error) || effectiveSignal?.aborted) return;
|
|
337
|
+
if (error instanceof RenderTimeoutError) {
|
|
338
|
+
logRenderError({
|
|
339
|
+
method: requestInfo?.method ?? '',
|
|
340
|
+
path: requestInfo?.path ?? '',
|
|
341
|
+
error: new Error(
|
|
342
|
+
`SSR render timed out after ${timeoutMs}ms — aborting. ` +
|
|
343
|
+
'A Suspense component or downstream fetch may be hanging.'
|
|
344
|
+
),
|
|
345
|
+
});
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
// Skip React's sanitized production errors — the original was
|
|
349
|
+
// already logged by the RSC onError with full details.
|
|
350
|
+
if (isReactSanitizedError(error)) return;
|
|
351
|
+
logRenderError({
|
|
352
|
+
method: requestInfo?.method ?? '',
|
|
353
|
+
path: requestInfo?.path ?? '',
|
|
354
|
+
error,
|
|
355
|
+
});
|
|
356
|
+
},
|
|
357
|
+
});
|
|
358
|
+
} catch (error) {
|
|
359
|
+
// Pre-shell failure (e.g. RSC stream error). Cancel the render
|
|
360
|
+
// timeout so it doesn't leak a timer + abort callback for the
|
|
361
|
+
// full timeout window. Under repeated pre-shell failures this
|
|
362
|
+
// would accumulate unnecessary timers.
|
|
363
|
+
renderTimeout?.cancel();
|
|
364
|
+
throw error;
|
|
365
|
+
}
|
|
69
366
|
|
|
70
367
|
// Prevent unhandled promise rejection from streaming-phase errors.
|
|
71
|
-
// React DOM Server exposes `allReady` — a promise that resolves when
|
|
72
|
-
// ALL content (including Suspense boundaries) has been rendered. If a
|
|
73
|
-
// streaming-phase error occurs (e.g. React boundary flush failure),
|
|
74
|
-
// `allReady` rejects independently of the stream. Without this catch,
|
|
75
|
-
// the rejection becomes an unhandled promise rejection that crashes
|
|
76
|
-
// the Node.js process.
|
|
77
368
|
stream.allReady.catch(() => {});
|
|
78
369
|
|
|
370
|
+
// Cancel the render timeout once allReady resolves (render completed).
|
|
371
|
+
if (renderTimeout) {
|
|
372
|
+
stream.allReady.then(() => renderTimeout!.cancel()).catch(() => renderTimeout!.cancel());
|
|
373
|
+
}
|
|
374
|
+
|
|
79
375
|
// deferSuspenseFor hold: delay the first read so React can resolve
|
|
80
376
|
// fast-completing Suspense boundaries before we read the shell HTML.
|
|
81
|
-
// renderToReadableStream generates HTML lazily on pull — if we wait
|
|
82
|
-
// before reading, React resolves pending boundaries and inlines their
|
|
83
|
-
// content instead of serializing fallbacks. Race allReady against
|
|
84
|
-
// deferSuspenseFor so we don't wait longer than necessary.
|
|
85
377
|
// See design/05-streaming.md §"deferSuspenseFor"
|
|
378
|
+
//
|
|
379
|
+
// While we're holding, also track whether `stream.allReady` settled
|
|
380
|
+
// before the timer. That boolean is the Option-1 signal-promotion
|
|
381
|
+
// short-circuit key — see NavContext._fizzAllReadyResolved and
|
|
382
|
+
// design/spike-signal-promotion-protocol.md.
|
|
383
|
+
let fizzAllReadyResolved = false;
|
|
384
|
+
const allReadyTap = stream.allReady.then(
|
|
385
|
+
() => {
|
|
386
|
+
fizzAllReadyResolved = true;
|
|
387
|
+
},
|
|
388
|
+
() => {
|
|
389
|
+
// allReady rejections are already swallowed above; keep false.
|
|
390
|
+
}
|
|
391
|
+
);
|
|
86
392
|
const deferMs = options?.deferSuspenseFor;
|
|
87
393
|
if (deferMs && deferMs > 0) {
|
|
88
|
-
await Promise.race([
|
|
89
|
-
stream.allReady,
|
|
90
|
-
new Promise<void>((resolve) => setTimeout(resolve, deferMs)),
|
|
91
|
-
]);
|
|
394
|
+
await Promise.race([allReadyTap, new Promise<void>((resolve) => setTimeout(resolve, deferMs))]);
|
|
92
395
|
}
|
|
396
|
+
onFizzAllReadyResolved?.(fizzAllReadyResolved);
|
|
93
397
|
|
|
94
|
-
|
|
95
|
-
// The stream is ready to read — the shell (everything outside
|
|
96
|
-
// Suspense boundaries) is available. Suspense content streams
|
|
97
|
-
// into the open connection as it resolves.
|
|
98
|
-
//
|
|
99
|
-
// Wrap the stream in an error-resilient transform. With progressive
|
|
100
|
-
// streaming, errors inside Suspense boundaries (e.g. deny() or throws
|
|
101
|
-
// in async components) cause React's stream to error during the flush
|
|
102
|
-
// phase. The onError callback logs the error, but the stream error
|
|
103
|
-
// would become an unhandled promise rejection and crash the process.
|
|
104
|
-
// The transform catches these post-shell streaming errors and closes
|
|
105
|
-
// the stream cleanly — the shell (with correct status code) has
|
|
106
|
-
// already been sent.
|
|
107
|
-
return wrapStreamWithErrorHandling(stream, signal);
|
|
398
|
+
return wrapStreamWithErrorHandling(stream, signal, options?.nonce);
|
|
108
399
|
}
|
|
109
400
|
|
|
401
|
+
// ─── Shared Utilities ────────────────────────────────────────────────────────
|
|
402
|
+
|
|
110
403
|
/**
|
|
111
404
|
* Wrap an HTML stream with error handling for the streaming phase.
|
|
112
405
|
*
|
|
113
406
|
* During progressive RSC→SSR streaming, errors in Suspense boundaries
|
|
114
407
|
* (e.g. deny() inside Suspense, throws in async components) cause
|
|
115
|
-
* React DOM's
|
|
116
|
-
*
|
|
117
|
-
*
|
|
408
|
+
* React DOM's stream to error after the shell has been flushed. Without
|
|
409
|
+
* this wrapper, the stream error becomes an unhandled promise rejection
|
|
410
|
+
* that crashes the process.
|
|
118
411
|
*
|
|
119
412
|
* The wrapper catches streaming-phase errors, logs them, and closes
|
|
120
413
|
* the output stream cleanly. The shell (headers, status code, content
|
|
@@ -123,7 +416,8 @@ export async function renderSsrStream(
|
|
|
123
416
|
/** @internal Exported for testing only. */
|
|
124
417
|
export function wrapStreamWithErrorHandling(
|
|
125
418
|
stream: ReadableStream<Uint8Array>,
|
|
126
|
-
signal?: AbortSignal
|
|
419
|
+
signal?: AbortSignal,
|
|
420
|
+
nonce?: string
|
|
127
421
|
): ReadableStream<Uint8Array> {
|
|
128
422
|
const reader = stream.getReader();
|
|
129
423
|
const encoder = new TextEncoder();
|
|
@@ -138,19 +432,12 @@ export function wrapStreamWithErrorHandling(
|
|
|
138
432
|
}
|
|
139
433
|
controller.enqueue(value);
|
|
140
434
|
} catch (error) {
|
|
141
|
-
// Connection abort (user refreshed or navigated away) — close
|
|
142
|
-
// silently without logging. This is not an application error.
|
|
143
435
|
if (isAbortError(error) || signal?.aborted) {
|
|
144
436
|
controller.close();
|
|
145
437
|
return;
|
|
146
438
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
// The shell has already been sent with status 200. Inject a
|
|
150
|
-
// noindex meta tag so search engines don't index this error page,
|
|
151
|
-
// then close cleanly. See design/05-streaming.md.
|
|
152
|
-
console.error('[timber] SSR streaming error (post-shell):', formatSsrError(error));
|
|
153
|
-
controller.enqueue(encoder.encode(NOINDEX_SCRIPT));
|
|
439
|
+
logStreamingError({ error });
|
|
440
|
+
controller.enqueue(encoder.encode(noindexScript(nonce)));
|
|
154
441
|
controller.close();
|
|
155
442
|
}
|
|
156
443
|
},
|
|
@@ -160,29 +447,14 @@ export function wrapStreamWithErrorHandling(
|
|
|
160
447
|
});
|
|
161
448
|
}
|
|
162
449
|
|
|
163
|
-
/**
|
|
164
|
-
* Check if an error is an abort error (connection closed by client).
|
|
165
|
-
*
|
|
166
|
-
* When the browser aborts a request (page refresh, navigation away),
|
|
167
|
-
* the AbortSignal fires and React/streams throw an AbortError. This
|
|
168
|
-
* is not an application error — suppress it from error boundaries and logs.
|
|
169
|
-
*/
|
|
170
|
-
function isAbortError(error: unknown): boolean {
|
|
171
|
-
if (error instanceof DOMException && error.name === 'AbortError') return true;
|
|
172
|
-
if (error instanceof Error && error.name === 'AbortError') return true;
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
450
|
/**
|
|
177
451
|
* Build a Response from the SSR HTML stream with the correct
|
|
178
452
|
* status code and headers from the navigation context.
|
|
179
453
|
*
|
|
180
|
-
*
|
|
454
|
+
* React 19.3+ automatically emits `<!DOCTYPE html>` when the root
|
|
455
|
+
* element is `<html>`, so no framework-level doctype prepending is needed.
|
|
181
456
|
*
|
|
182
|
-
*
|
|
183
|
-
* @param statusCode - The committed HTTP status code from RSC
|
|
184
|
-
* @param responseHeaders - Response headers from middleware/proxy
|
|
185
|
-
* @returns A Response ready to send to the client
|
|
457
|
+
* Sets content-type to text/html if not already set by middleware.
|
|
186
458
|
*/
|
|
187
459
|
export function buildSsrResponse(
|
|
188
460
|
htmlStream: ReadableStream<Uint8Array>,
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSR wrapper chain — the same components the client hydration tree renders.
|
|
3
|
+
*
|
|
4
|
+
* During hydration, React's useId() generates deterministic IDs based on
|
|
5
|
+
* the component's position in the fiber tree. If the SSR tree has fewer
|
|
6
|
+
* wrapper components than the client hydration tree, every useId() call
|
|
7
|
+
* produces different IDs — causing hydration mismatches in libraries like
|
|
8
|
+
* Radix UI that rely on useId() internally.
|
|
9
|
+
*
|
|
10
|
+
* The client tree (`renderTree` in browser-entry/router-init.ts, used by
|
|
11
|
+
* hydrate.ts too) wraps the RSC element with:
|
|
12
|
+
* NavigationRoot → Fragment(TopLoader, ...) →
|
|
13
|
+
* TimberNuqsAdapter → NuqsAdapterProvider →
|
|
14
|
+
* SlotContentCacheContext.Provider → SegmentUpdateContext.Provider →
|
|
15
|
+
* NavigationProvider → PayloadRoot → ParamsProvider → element
|
|
16
|
+
*
|
|
17
|
+
* The SSR tree renders the REAL NavigationProvider and PayloadRoot rather
|
|
18
|
+
* than no-op mirrors (TIM-1424). Two consequences:
|
|
19
|
+
*
|
|
20
|
+
* 1. `usePathname()` / `useSearchParams()` resolve from NavigationContext
|
|
21
|
+
* during SSR — the same code path as the browser — with the request's
|
|
22
|
+
* pathname and raw search string. The raw string preserves repeated
|
|
23
|
+
* query keys (`?tag=a&tag=b`) and, since TIM-1428, is the only
|
|
24
|
+
* representation of search state here — it feeds the nuqs SSR adapter
|
|
25
|
+
* too, so no collapsed record exists to drift from it.
|
|
26
|
+
* 2. `useSegmentParams()` resolves from ParamsContext, published by
|
|
27
|
+
* PayloadRoot from the same payload root row the browser will read —
|
|
28
|
+
* one derivation on both sides instead of two that must agree.
|
|
29
|
+
*
|
|
30
|
+
* Per-request isolation is by construction: the provider values are part
|
|
31
|
+
* of this request's element tree, so concurrent requests cannot observe
|
|
32
|
+
* each other's values — stronger than the ALS path, which remains for
|
|
33
|
+
* `useCookie()` and the `_navContext` status-code channel.
|
|
34
|
+
*
|
|
35
|
+
* **What actually shifts a useId is a fork, not depth.** `useId` derives from
|
|
36
|
+
* React's tree context, which only changes where a fiber has more than one
|
|
37
|
+
* child — here, `Fragment(TopLoader, element)`. A single-child wrapper, plain
|
|
38
|
+
* component or context provider, leaves every id below it unchanged; that is
|
|
39
|
+
* verified by tests/ssr-wrapper-parity.test.ts, not assumed. So the
|
|
40
|
+
* client-only `SegmentUpdateContext.Provider` and
|
|
41
|
+
* `SlotContentCacheContext.Provider` (single child each) have no mirror
|
|
42
|
+
* here and need none. Mirror a new wrapper only if it branches.
|
|
43
|
+
*
|
|
44
|
+
* Related issues: facebook/react#24669, radix-ui/primitives#3700
|
|
45
|
+
* See design/02-rendering-pipeline.md §"RSC → SSR → Client Hydration"
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
import { createElement, Fragment, type ReactNode } from 'react';
|
|
49
|
+
import { withNuqsSsrAdapter } from './nuqs-ssr-provider.tsx';
|
|
50
|
+
import { NavigationProvider } from '../client/navigation-context.ts';
|
|
51
|
+
import { PayloadRoot } from '../client/params-context.ts';
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* SSR equivalent of NavigationRoot.
|
|
55
|
+
*
|
|
56
|
+
* On the client, the router renders NavigationRoot via `root.render` in a transition,
|
|
57
|
+
* rendering `Fragment(TopLoader, element)` — or the element alone when the top
|
|
58
|
+
* loader is disabled.
|
|
59
|
+
*
|
|
60
|
+
* The Fragment is the part that matters: it forks, so it advances React's tree
|
|
61
|
+
* context. Both sides must agree on whether it is there, which is why
|
|
62
|
+
* `hasTopLoader` is threaded in from the same config the client reads.
|
|
63
|
+
*/
|
|
64
|
+
function SsrNavigationRoot({
|
|
65
|
+
children,
|
|
66
|
+
hasTopLoader,
|
|
67
|
+
}: {
|
|
68
|
+
children?: ReactNode;
|
|
69
|
+
hasTopLoader: boolean;
|
|
70
|
+
}): ReactNode {
|
|
71
|
+
if (hasTopLoader) {
|
|
72
|
+
return createElement(Fragment, null, createElement(SsrTopLoader, null), children);
|
|
73
|
+
}
|
|
74
|
+
return children as ReactNode;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* SSR equivalent of TopLoader.
|
|
79
|
+
* Exists as a fiber node to match the client tree depth; renders nothing.
|
|
80
|
+
*/
|
|
81
|
+
function SsrTopLoader(): ReactNode {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* SSR equivalent of TimberNuqsAdapter component boundary.
|
|
87
|
+
* The actual NuqsAdapterProvider (from createAdapterProvider) is added
|
|
88
|
+
* inside this wrapper via withNuqsSsrAdapter, matching the client's
|
|
89
|
+
* TimberNuqsAdapter → NuqsAdapterProvider nesting.
|
|
90
|
+
*/
|
|
91
|
+
function SsrNuqsWrapper({ search, children }: { search: string; children?: ReactNode }): ReactNode {
|
|
92
|
+
// withNuqsSsrAdapter creates a NuqsAdapterProvider (from createAdapterProvider),
|
|
93
|
+
// which is the same component factory used by TimberNuqsAdapter on the client.
|
|
94
|
+
// Both produce the same internal component boundary depth.
|
|
95
|
+
return withNuqsSsrAdapter(search, children);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Per-request inputs for the SSR wrapper chain. */
|
|
99
|
+
export interface SsrWrapOptions {
|
|
100
|
+
/** Request pathname for NavigationProvider. */
|
|
101
|
+
pathname: string;
|
|
102
|
+
/**
|
|
103
|
+
* Raw app-visible query string (`''` or `?…`) for NavigationProvider AND
|
|
104
|
+
* the nuqs SSR adapter — one representation, preserving repeated keys
|
|
105
|
+
* (`?tag=a&tag=b`) on both consumers (TIM-1428).
|
|
106
|
+
*/
|
|
107
|
+
search: string;
|
|
108
|
+
/**
|
|
109
|
+
* The payload's params, or a thenable of them, for PayloadRoot — the
|
|
110
|
+
* `params` half of `splitPayloadRoot(root)`. Same source the browser
|
|
111
|
+
* hands to the same component during hydration.
|
|
112
|
+
*/
|
|
113
|
+
paramsSource: unknown;
|
|
114
|
+
/** Whether the top loader is enabled (must match client config). */
|
|
115
|
+
hasTopLoader: boolean;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Wrap the SSR element tree with the same component boundaries as the
|
|
120
|
+
* client hydration tree — real providers, not mirrors — so hooks resolve
|
|
121
|
+
* identically on both sides and useId() matches.
|
|
122
|
+
*
|
|
123
|
+
* Client tree (browser-entry/hydrate.ts):
|
|
124
|
+
* NavigationRoot
|
|
125
|
+
* → Fragment(TopLoader, element)
|
|
126
|
+
* → TimberNuqsAdapter
|
|
127
|
+
* → NuqsAdapterProvider (from createAdapterProvider)
|
|
128
|
+
* → SlotContentCacheContext.Provider (client-only, single child)
|
|
129
|
+
* → SegmentUpdateContext.Provider (client-only, single child)
|
|
130
|
+
* → NavigationProvider
|
|
131
|
+
* → PayloadRoot → ParamsProvider
|
|
132
|
+
* → [RSC element]
|
|
133
|
+
*
|
|
134
|
+
* SSR tree (this function):
|
|
135
|
+
* SsrNavigationRoot
|
|
136
|
+
* → Fragment(SsrTopLoader, element)
|
|
137
|
+
* → SsrNuqsWrapper
|
|
138
|
+
* → NuqsAdapterProvider (from withNuqsSsrAdapter → createAdapterProvider)
|
|
139
|
+
* → NavigationProvider (real — same component)
|
|
140
|
+
* → PayloadRoot → ParamsProvider (real — same components)
|
|
141
|
+
* → [RSC element]
|
|
142
|
+
*/
|
|
143
|
+
export function wrapSsrElement(element: ReactNode, opts: SsrWrapOptions): ReactNode {
|
|
144
|
+
// Build inside-out to match the client's createElement chain in
|
|
145
|
+
// hydrate.ts / router-init.ts renderTree().
|
|
146
|
+
|
|
147
|
+
// 1. Innermost: PayloadRoot publishes the payload's params over the tree.
|
|
148
|
+
const withParams = createElement(PayloadRoot, { source: opts.paramsSource }, element);
|
|
149
|
+
|
|
150
|
+
// 2. NavigationProvider with the request's address-bar state.
|
|
151
|
+
const withNav = createElement(
|
|
152
|
+
NavigationProvider,
|
|
153
|
+
{ value: { pathname: opts.pathname, search: opts.search } },
|
|
154
|
+
withParams
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
// 3. TimberNuqsAdapter equivalent (wraps withNuqsSsrAdapter for the actual nuqs provider)
|
|
158
|
+
const withNuqs = createElement(SsrNuqsWrapper, { search: opts.search }, withNav);
|
|
159
|
+
|
|
160
|
+
// 4. Outermost: NavigationRoot equivalent (the TopLoader fork)
|
|
161
|
+
return createElement(SsrNavigationRoot, { hasTopLoader: opts.hasTopLoader }, withNuqs);
|
|
162
|
+
}
|