@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
|
@@ -0,0 +1,817 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prebuilt component runtime — registration target for the timber-prebuilt
|
|
3
|
+
* transform (plugins/prebuilt.ts) and the request-time half of
|
|
4
|
+
* cache.component (TIM-1140).
|
|
5
|
+
*
|
|
6
|
+
* `cache.component(fn, opts)` call sites are rewritten at build time to
|
|
7
|
+
* `__prebuilt(stableId, fn, opts)` (production) or `__prebuiltDev(name, fn)`
|
|
8
|
+
* (dev). Both are exported via #server-internal — they are framework
|
|
9
|
+
* plumbing, never called by user code directly.
|
|
10
|
+
*
|
|
11
|
+
* Cache hits are served by FLIGHT REVIVAL: the cached `.flight` payload is
|
|
12
|
+
* decoded back into React elements inside the RSC environment with
|
|
13
|
+
* `createFromReadableStream` (the flight client running in the flight
|
|
14
|
+
* server — plugin-rsc wires the server-decode manifest so client
|
|
15
|
+
* references revive as re-serializable reference proxies). The revived
|
|
16
|
+
* element is returned from the wrapper and the outer render re-serializes
|
|
17
|
+
* it like any other subtree. This is the same mechanism as Next.js
|
|
18
|
+
* `"use cache"` (next/src/server/use-cache/use-cache-wrapper.ts).
|
|
19
|
+
*
|
|
20
|
+
* What a hit skips: all user work — data fetching, MDX compilation, the
|
|
21
|
+
* component function itself never runs. What it re-pays: React
|
|
22
|
+
* re-serializes the already-resolved tree (cost proportional to payload
|
|
23
|
+
* size, not to data latency). The alternative — splicing raw payload bytes
|
|
24
|
+
* into the outer stream — avoids re-serialization but requires byte-level
|
|
25
|
+
* coupling to the flight wire format (row framing, ID rebasing, marker
|
|
26
|
+
* detection); it was implemented and reviewed on PR #835 and deliberately
|
|
27
|
+
* replaced by revival. See design/44-render-at-build-time.md
|
|
28
|
+
* §Request-Time Injection.
|
|
29
|
+
*
|
|
30
|
+
* Misses render the original component live via the wrapper's own closure,
|
|
31
|
+
* inside the React pass — segment params from ALS, deny()/redirect()
|
|
32
|
+
* signals, Suspense, and error boundaries behave exactly as an unwrapped
|
|
33
|
+
* component. `fallbackOnMissingSegmentParams: false` throws instead.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { createElement } from 'react';
|
|
37
|
+
|
|
38
|
+
import { requestContextAls, type RequestContextStore } from './als-registry.ts';
|
|
39
|
+
import type { CoercedParams } from '../shared/param-value.ts';
|
|
40
|
+
import type { SlotParamsRecord } from '../shared/slot-params.ts';
|
|
41
|
+
import { computeComponentCacheKey, splitSlotProps, tryCanonicalize } from './prebuilt/cache-key.ts';
|
|
42
|
+
import {
|
|
43
|
+
isChildrenSlotOutletElement,
|
|
44
|
+
resolveSlotNames,
|
|
45
|
+
prepareSlotRender,
|
|
46
|
+
wrapInSlotsProvider,
|
|
47
|
+
} from './prebuilt/slots.ts';
|
|
48
|
+
import {
|
|
49
|
+
createKeyDisciplineProxy,
|
|
50
|
+
emitKeyDisciplineWarning,
|
|
51
|
+
shouldCheckKeyDiscipline,
|
|
52
|
+
} from './prebuilt/key-discipline.ts';
|
|
53
|
+
import {
|
|
54
|
+
isCaptureActive,
|
|
55
|
+
noteWrapperRender,
|
|
56
|
+
beginCapture,
|
|
57
|
+
endCapture,
|
|
58
|
+
} from './prebuilt/capture-state.ts';
|
|
59
|
+
import {
|
|
60
|
+
hasPrebuiltPayloadSource,
|
|
61
|
+
lookupPrebuiltPayload,
|
|
62
|
+
getManifestEntry,
|
|
63
|
+
isParamIndependent,
|
|
64
|
+
} from './prebuilt/payload-source.ts';
|
|
65
|
+
import { lookupOverlay, storeOverlayEntry, overlayKey } from './prebuilt/overlay.ts';
|
|
66
|
+
import { getWaitUntil } from './waituntil-bridge.ts';
|
|
67
|
+
import { createSingleflight } from '../cache/singleflight.ts';
|
|
68
|
+
import {
|
|
69
|
+
currentInvalidationEpoch,
|
|
70
|
+
wasInvalidatedSince,
|
|
71
|
+
lastInvalidationEpochFor,
|
|
72
|
+
} from '../cache/invalidation-epoch.ts';
|
|
73
|
+
|
|
74
|
+
/** Default timeout for component re-renders (overridden by renderTimeoutMs). */
|
|
75
|
+
const DEFAULT_COMPONENT_TIMEOUT_MS = 30_000;
|
|
76
|
+
|
|
77
|
+
/** Singleflight for component re-renders (inline and background). */
|
|
78
|
+
let componentSingleflight = createSingleflight({ timeoutMs: DEFAULT_COMPONENT_TIMEOUT_MS });
|
|
79
|
+
let componentTimeoutMs = DEFAULT_COMPONENT_TIMEOUT_MS;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Set the timeout for component re-render captures. Called at boot from
|
|
83
|
+
* the RSC entry with renderTimeoutMs from timber.config.ts.
|
|
84
|
+
*/
|
|
85
|
+
export function setComponentRefreshTimeout(timeoutMs: number): void {
|
|
86
|
+
componentTimeoutMs = timeoutMs;
|
|
87
|
+
componentSingleflight = createSingleflight({ timeoutMs });
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
let warnedNoWaitUntil = false;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Options captured from the `cache.component(fn, opts)` call site.
|
|
94
|
+
*
|
|
95
|
+
* `prerender`/`ttl`/`tags` (design/45) are carried through untouched — the
|
|
96
|
+
* build phase (TIM-1119) and runtime overlay (design/45 phase 3) consume
|
|
97
|
+
* them.
|
|
98
|
+
*/
|
|
99
|
+
export interface PrebuiltComponentOptions {
|
|
100
|
+
/** Populate the cache at build time via generateStaticSegmentParams. */
|
|
101
|
+
prerender?: boolean;
|
|
102
|
+
/** Runtime freshness window, seconds (design/45 runtime tier). */
|
|
103
|
+
ttl?: number;
|
|
104
|
+
/** Runtime invalidation tags (design/45 runtime tier). */
|
|
105
|
+
tags?: string[] | ((props: Record<string, unknown>) => string[]);
|
|
106
|
+
/** Serve stale while a background re-render refreshes (design/45 §SWR). */
|
|
107
|
+
staleWhileRevalidate?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Slot props (TIM-1173): prop names whose values are live React
|
|
110
|
+
* elements composed into the cached shell at request time instead of
|
|
111
|
+
* participating in the cache. Each declared slot renders as a stable
|
|
112
|
+
* SlotOutlet client reference at capture time; the live value flows in
|
|
113
|
+
* through SlotContext per instance. Slot props are excluded from the
|
|
114
|
+
* cache key — only the remaining data props (+ segment params) hash.
|
|
115
|
+
* Runtime tier only: `prerender` is ignored (with a warning) because
|
|
116
|
+
* the build cannot enumerate children variants.
|
|
117
|
+
*/
|
|
118
|
+
slots?: string[];
|
|
119
|
+
/**
|
|
120
|
+
* On a cache miss, render the component live (default: true). When false,
|
|
121
|
+
* a miss throws instead — for sites that must never render unknown params
|
|
122
|
+
* dynamically. See design/44 §fallbackOnMissingSegmentParams.
|
|
123
|
+
*/
|
|
124
|
+
fallbackOnMissingSegmentParams?: boolean;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** An async server component: props in, renderable out. */
|
|
128
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
129
|
+
type ServerComponent = (props: any) => unknown;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* View of a ServerComponent that satisfies createElement's overloads.
|
|
133
|
+
* Server components legitimately return `unknown` from the framework's
|
|
134
|
+
* perspective (promises, elements, strings, …) — React renders whatever
|
|
135
|
+
* comes back; the narrowing exists only to cross createElement's
|
|
136
|
+
* ReactNode-typed signature.
|
|
137
|
+
*/
|
|
138
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
|
+
type RenderableComponent = (props: any) => React.ReactNode;
|
|
140
|
+
|
|
141
|
+
export interface PrebuiltRegistration {
|
|
142
|
+
id: string;
|
|
143
|
+
component: ServerComponent;
|
|
144
|
+
options: PrebuiltComponentOptions;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Server-side component registry, keyed by stable component ID. Populated at
|
|
149
|
+
* module load time by `__prebuilt` calls; consumed by the post-build capture
|
|
150
|
+
* pass (TIM-1119). Never serialized — component functions are not
|
|
151
|
+
* Flight-serializable.
|
|
152
|
+
*/
|
|
153
|
+
const registry = new Map<string, PrebuiltRegistration>();
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Resolve the params the cache key may faithfully hash, or null if this
|
|
157
|
+
* render is unkeyable.
|
|
158
|
+
*
|
|
159
|
+
* A wrapper rendered inside a parallel slot reads params merged with that
|
|
160
|
+
* slot's overrides (`getSegmentParams`: `{...segmentParams, ...slotParams}`)
|
|
161
|
+
* — but the cache key hashes only the route-level params, and the wrapper
|
|
162
|
+
* cannot know which slot it renders under. The route params are usable
|
|
163
|
+
* only when every slot's merged view canonicalizes identically to them;
|
|
164
|
+
* otherwise two renders with the same key could see different effective
|
|
165
|
+
* inputs and a hit could serve the WRONG cached subtree — so the render
|
|
166
|
+
* goes live: slower, never wrong. (Build-time capture doesn't model slot
|
|
167
|
+
* params either, so a divergent request could never have a faithful
|
|
168
|
+
* entry. Codex review on PR #835; revisit with segment-path-scoped keys
|
|
169
|
+
* if slot-scoped prebuilt is ever needed.)
|
|
170
|
+
*
|
|
171
|
+
* Comparison happens through `tryCanonicalize` — the same single
|
|
172
|
+
* definition of value equality the cache key uses — so anything it
|
|
173
|
+
* cannot represent faithfully (bigint-coerced codec params, accessors,
|
|
174
|
+
* aliases, …) is unkeyable here too, and this guard can never throw.
|
|
175
|
+
*/
|
|
176
|
+
function resolveKeyParams(store: {
|
|
177
|
+
segmentParams?: CoercedParams;
|
|
178
|
+
slotParams?: SlotParamsRecord;
|
|
179
|
+
}): CoercedParams | null {
|
|
180
|
+
const main = store.segmentParams ?? {};
|
|
181
|
+
const slots = store.slotParams;
|
|
182
|
+
if (!slots || Object.keys(slots).length === 0) return main;
|
|
183
|
+
// Spread before canonicalizing: param records are framework-produced
|
|
184
|
+
// Object.create(null) objects (prototype-pollution defense) — normalize
|
|
185
|
+
// the records themselves, let nested values face the full allowlist.
|
|
186
|
+
const mainCanonical = tryCanonicalize({ ...main });
|
|
187
|
+
if (mainCanonical === null) return null;
|
|
188
|
+
for (const slotParams of Object.values(slots)) {
|
|
189
|
+
const merged = tryCanonicalize({ ...main, ...slotParams });
|
|
190
|
+
if (merged === null || merged !== mainCanonical) return null;
|
|
191
|
+
}
|
|
192
|
+
return main;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Mirror the production cache-key decision for a slot render, with no
|
|
197
|
+
* cache IO — used by the dev wrapper so slot substitution happens in dev
|
|
198
|
+
* exactly when production would serve the cache path rather than the
|
|
199
|
+
* live fallback (dev/prod parity, codex P2 on PR #890): requires an ALS
|
|
200
|
+
* store, keyable params (slot-param divergence unkeys), and keyable data
|
|
201
|
+
* props (after the children slot outlet strip).
|
|
202
|
+
*/
|
|
203
|
+
function isSlotRenderKeyable(dataProps: Record<string, unknown>): boolean {
|
|
204
|
+
const store = requestContextAls.getStore();
|
|
205
|
+
if (!store) return false;
|
|
206
|
+
const keyParams = resolveKeyParams(store);
|
|
207
|
+
if (keyParams === null) return false;
|
|
208
|
+
let keyProps = dataProps;
|
|
209
|
+
if (isChildrenSlotOutletElement(keyProps.children)) {
|
|
210
|
+
const { children: _children, ...rest } = keyProps;
|
|
211
|
+
keyProps = rest;
|
|
212
|
+
}
|
|
213
|
+
return computeComponentCacheKey(keyProps, keyParams) !== null;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Wrap payload bytes as a single-chunk ReadableStream for the decoder. */
|
|
217
|
+
function bytesToStream(bytes: Uint8Array): ReadableStream<Uint8Array> {
|
|
218
|
+
return new ReadableStream<Uint8Array>({
|
|
219
|
+
start(controller) {
|
|
220
|
+
controller.enqueue(bytes);
|
|
221
|
+
controller.close();
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** Whether the component has a runtime lifetime (ttl or tags). */
|
|
227
|
+
function hasRuntimeLifetime(options: PrebuiltComponentOptions): boolean {
|
|
228
|
+
return options.ttl !== undefined || (options.tags !== undefined && options.tags !== null);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Resolve tags from options (may be static array or function of props).
|
|
233
|
+
* Function-form tags receive DATA props only — slot props are excluded so
|
|
234
|
+
* the tags fn never sees SlotOutlet placeholders (capture paths pass
|
|
235
|
+
* placeholder-substituted props) and tags stay deterministic per key.
|
|
236
|
+
*/
|
|
237
|
+
function resolveTags(options: PrebuiltComponentOptions, props: Record<string, unknown>): string[] {
|
|
238
|
+
if (!options.tags) return [];
|
|
239
|
+
if (Array.isArray(options.tags)) return options.tags;
|
|
240
|
+
const slots = options.slots;
|
|
241
|
+
// The split cannot fail here — capture paths pass framework-built shell
|
|
242
|
+
// props — but stay total: fall back to the props as given.
|
|
243
|
+
const fnProps =
|
|
244
|
+
slots && slots.length > 0 ? (splitSlotProps(props, slots)?.dataProps ?? props) : props;
|
|
245
|
+
return options.tags(fnProps);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// ─── Slot components (TIM-1173) ──────────────────────────────────────────
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Serve a slot component from the cache: split live slot values out of the
|
|
252
|
+
* props, look up / capture the shell (data props + a deterministic
|
|
253
|
+
* SlotOutlet placeholder per slot), and wrap the revived shell in a
|
|
254
|
+
* per-instance SlotsProvider that feeds the live values to the outlets.
|
|
255
|
+
*
|
|
256
|
+
* Null on any miss — the caller renders live with the original props.
|
|
257
|
+
*/
|
|
258
|
+
async function tryReviveSlotShell(
|
|
259
|
+
id: string,
|
|
260
|
+
options: PrebuiltComponentOptions,
|
|
261
|
+
slots: readonly string[],
|
|
262
|
+
props: Record<string, unknown>
|
|
263
|
+
): Promise<{ element: unknown } | null> {
|
|
264
|
+
const render = prepareSlotRender(props, slots);
|
|
265
|
+
if (render === null) return null; // top-level props unkeyable → live render
|
|
266
|
+
const { shellProps, dataProps, slotValues } = render;
|
|
267
|
+
const revived = await tryRevivePayload(id, options, shellProps, dataProps);
|
|
268
|
+
if (revived === null) return null;
|
|
269
|
+
return { element: wrapInSlotsProvider(revived.element, slotValues) };
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// ─── RSC function injection ─────────────────────────────────────────────
|
|
273
|
+
// The flight client/server is only resolvable in the RSC environment
|
|
274
|
+
// (react-server condition). The RSC entry wires these at boot via
|
|
275
|
+
// setRscFunctions(); tests inject mocks directly. Same pattern as
|
|
276
|
+
// setCacheHandler / setPrebuiltPayloadSource.
|
|
277
|
+
|
|
278
|
+
interface RscFunctions {
|
|
279
|
+
createFromReadableStream: (stream: ReadableStream<Uint8Array>) => Promise<unknown>;
|
|
280
|
+
renderToReadableStream: (
|
|
281
|
+
element: unknown,
|
|
282
|
+
options?: { onError?: (error: unknown) => string }
|
|
283
|
+
) => ReadableStream<Uint8Array>;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
let rscFns: RscFunctions | null = null;
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Wire the RSC flight client/server functions. Called once at server
|
|
290
|
+
* startup from the RSC entry module.
|
|
291
|
+
*/
|
|
292
|
+
export function setRscFunctions(fns: RscFunctions): void {
|
|
293
|
+
rscFns = fns;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
function requireRscFunctions(): RscFunctions {
|
|
297
|
+
if (!rscFns) {
|
|
298
|
+
throw new Error('[timber] RSC functions not wired — setRscFunctions() must be called at boot');
|
|
299
|
+
}
|
|
300
|
+
return rscFns;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Revive flight payload bytes into a React element.
|
|
305
|
+
* Returns null on any failure (corrupt payload, missing decoder).
|
|
306
|
+
*/
|
|
307
|
+
async function revivePayload(
|
|
308
|
+
id: string,
|
|
309
|
+
payload: Uint8Array,
|
|
310
|
+
outcome: string
|
|
311
|
+
): Promise<{ element: unknown } | null> {
|
|
312
|
+
try {
|
|
313
|
+
const { createFromReadableStream } = requireRscFunctions();
|
|
314
|
+
const element: unknown = await createFromReadableStream(bytesToStream(payload));
|
|
315
|
+
return { element };
|
|
316
|
+
} catch (error) {
|
|
317
|
+
console.error(`[timber] failed to revive prebuilt payload for "${id}" — ${outcome}:`, error);
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/** Ceiling on component re-render capture (design/13 A2). Uses configured renderTimeoutMs. */
|
|
323
|
+
function getCaptureTimeoutMs(): number {
|
|
324
|
+
return componentTimeoutMs;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Render a component in isolation and capture its flight payload bytes.
|
|
329
|
+
* Used for inline re-renders (tombstone/miss) and SWR background re-renders.
|
|
330
|
+
*
|
|
331
|
+
* The stream read is timeout-guarded and the reader is cancelled on
|
|
332
|
+
* expiry (design/13 A2, A3).
|
|
333
|
+
*/
|
|
334
|
+
async function captureComponentPayload(
|
|
335
|
+
id: string,
|
|
336
|
+
component: ServerComponent,
|
|
337
|
+
props: Record<string, unknown>
|
|
338
|
+
): Promise<Uint8Array> {
|
|
339
|
+
const { renderToReadableStream } = requireRscFunctions();
|
|
340
|
+
const element = createElement(component as RenderableComponent, props);
|
|
341
|
+
// Activate capture state so nested cache.component wrappers render live
|
|
342
|
+
// (bake flat into this entry) per design/45 §Nesting Semantics.
|
|
343
|
+
// beginCapture/endCapture MUST be in the same try/finally to prevent
|
|
344
|
+
// leaked capture state on early throws.
|
|
345
|
+
let renderErrored = false;
|
|
346
|
+
|
|
347
|
+
// Key-discipline diagnostic (design/45 §Enforcement): proxy the ALS
|
|
348
|
+
// store to detect request-context reads during the capture render.
|
|
349
|
+
// The proxy is transparent — it never blocks or throws; it only observes.
|
|
350
|
+
const store = requestContextAls.getStore();
|
|
351
|
+
const discipline = store && shouldCheckKeyDiscipline(id) ? createKeyDisciplineProxy(store) : null;
|
|
352
|
+
|
|
353
|
+
const doCapture = async (): Promise<Uint8Array> => {
|
|
354
|
+
beginCapture(id);
|
|
355
|
+
try {
|
|
356
|
+
const stream: ReadableStream<Uint8Array> = renderToReadableStream(element, {
|
|
357
|
+
onError() {
|
|
358
|
+
renderErrored = true;
|
|
359
|
+
return '';
|
|
360
|
+
},
|
|
361
|
+
});
|
|
362
|
+
const reader = stream.getReader();
|
|
363
|
+
const chunks: Uint8Array[] = [];
|
|
364
|
+
let totalLength = 0;
|
|
365
|
+
const deadline = Date.now() + getCaptureTimeoutMs();
|
|
366
|
+
try {
|
|
367
|
+
for (;;) {
|
|
368
|
+
const remaining = deadline - Date.now();
|
|
369
|
+
if (remaining <= 0) {
|
|
370
|
+
throw new Error(
|
|
371
|
+
`[timber] component re-render capture exceeded ${getCaptureTimeoutMs()}ms`
|
|
372
|
+
);
|
|
373
|
+
}
|
|
374
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
375
|
+
const { done, value } = await Promise.race([
|
|
376
|
+
reader.read(),
|
|
377
|
+
new Promise<never>((_, reject) => {
|
|
378
|
+
timer = setTimeout(
|
|
379
|
+
() => reject(new Error(`[timber] component re-render stream read timed out`)),
|
|
380
|
+
remaining
|
|
381
|
+
);
|
|
382
|
+
}),
|
|
383
|
+
]);
|
|
384
|
+
clearTimeout(timer);
|
|
385
|
+
if (done) break;
|
|
386
|
+
chunks.push(value);
|
|
387
|
+
totalLength += value.byteLength;
|
|
388
|
+
}
|
|
389
|
+
} finally {
|
|
390
|
+
reader.cancel().catch(() => {});
|
|
391
|
+
}
|
|
392
|
+
if (renderErrored) {
|
|
393
|
+
throw new Error('[timber] component re-render produced error rows — not caching');
|
|
394
|
+
}
|
|
395
|
+
const result = new Uint8Array(totalLength);
|
|
396
|
+
let offset = 0;
|
|
397
|
+
for (const chunk of chunks) {
|
|
398
|
+
result.set(chunk, offset);
|
|
399
|
+
offset += chunk.byteLength;
|
|
400
|
+
}
|
|
401
|
+
return result;
|
|
402
|
+
} finally {
|
|
403
|
+
endCapture();
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
const bytes = discipline
|
|
408
|
+
? await requestContextAls.run(discipline.proxy, doCapture)
|
|
409
|
+
: await doCapture();
|
|
410
|
+
|
|
411
|
+
if (discipline && discipline.accessedApis.size > 0) {
|
|
412
|
+
emitKeyDisciplineWarning(id, discipline.accessedApis);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
return bytes;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Inline re-render: capture flight bytes, store in overlay, revive for
|
|
420
|
+
* the current request. Singleflight-coalesced by overlay key.
|
|
421
|
+
*/
|
|
422
|
+
async function inlineRerender(
|
|
423
|
+
id: string,
|
|
424
|
+
component: ServerComponent,
|
|
425
|
+
props: Record<string, unknown>,
|
|
426
|
+
cacheKey: string,
|
|
427
|
+
options: PrebuiltComponentOptions,
|
|
428
|
+
hasSeed: boolean,
|
|
429
|
+
outcome: string
|
|
430
|
+
): Promise<{ element: unknown } | null> {
|
|
431
|
+
const tags = resolveTags(options, props);
|
|
432
|
+
const oKey = overlayKey(id, cacheKey);
|
|
433
|
+
const sfKey = `prebuilt:${id}:${cacheKey}\0${lastInvalidationEpochFor(oKey, tags)}`;
|
|
434
|
+
|
|
435
|
+
try {
|
|
436
|
+
const payload = await componentSingleflight.do(sfKey, async (signal) => {
|
|
437
|
+
const startEpoch = currentInvalidationEpoch();
|
|
438
|
+
const bytes = await captureComponentPayload(id, component, props);
|
|
439
|
+
// Skip the store if aborted (singleflight timeout) or if the
|
|
440
|
+
// key/tags were invalidated while rendering (TIM-1028 guard).
|
|
441
|
+
if (
|
|
442
|
+
!signal.aborted &&
|
|
443
|
+
hasRuntimeLifetime(options) &&
|
|
444
|
+
!wasInvalidatedSince(startEpoch, oKey, tags)
|
|
445
|
+
) {
|
|
446
|
+
await storeOverlayEntry(id, cacheKey, bytes, {
|
|
447
|
+
ttl: options.ttl,
|
|
448
|
+
tags,
|
|
449
|
+
hasSeed,
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
return bytes;
|
|
453
|
+
});
|
|
454
|
+
return await revivePayload(id, payload, outcome);
|
|
455
|
+
} catch (error) {
|
|
456
|
+
console.error(`[timber] cache.component re-render failed for "${id}" — ${outcome}:`, error);
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Snapshot the request context values needed for a background re-render.
|
|
463
|
+
* Creates a FRESH store with copied values — the original ALS store is
|
|
464
|
+
* not referenced after capture.
|
|
465
|
+
*/
|
|
466
|
+
function snapshotRequestContext(store: RequestContextStore): RequestContextStore {
|
|
467
|
+
return {
|
|
468
|
+
headers: new Headers(store.headers),
|
|
469
|
+
originalHeaders: new Headers(store.originalHeaders),
|
|
470
|
+
cookieHeader: store.cookieHeader,
|
|
471
|
+
parsedCookies: store.parsedCookies ? new Map(store.parsedCookies) : undefined,
|
|
472
|
+
searchParams: new URLSearchParams(store.searchParams),
|
|
473
|
+
searchString: store.searchString,
|
|
474
|
+
segmentParams: store.segmentParams ? { ...store.segmentParams } : undefined,
|
|
475
|
+
cookieJar: new Map(),
|
|
476
|
+
flushed: false,
|
|
477
|
+
mutableContext: false,
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Kick off a background re-render via waitUntil. The re-render runs inside
|
|
483
|
+
* a fresh ALS scope with snapshotted request context.
|
|
484
|
+
*/
|
|
485
|
+
function backgroundRerender(
|
|
486
|
+
id: string,
|
|
487
|
+
component: ServerComponent,
|
|
488
|
+
props: Record<string, unknown>,
|
|
489
|
+
cacheKey: string,
|
|
490
|
+
options: PrebuiltComponentOptions,
|
|
491
|
+
hasSeed: boolean,
|
|
492
|
+
snapshot: RequestContextStore
|
|
493
|
+
): void {
|
|
494
|
+
const waitUntil = getWaitUntil();
|
|
495
|
+
const tags = resolveTags(options, props);
|
|
496
|
+
const oKey = overlayKey(id, cacheKey);
|
|
497
|
+
const startEpoch = currentInvalidationEpoch();
|
|
498
|
+
const sfKey = `prebuilt-bg:${id}:${cacheKey}\0${lastInvalidationEpochFor(oKey, tags)}`;
|
|
499
|
+
|
|
500
|
+
const work = requestContextAls.run(snapshot, () =>
|
|
501
|
+
componentSingleflight
|
|
502
|
+
.do(sfKey, async (signal) => {
|
|
503
|
+
const bytes = await captureComponentPayload(id, component, props);
|
|
504
|
+
if (!signal.aborted && !wasInvalidatedSince(startEpoch, oKey, tags)) {
|
|
505
|
+
await storeOverlayEntry(id, cacheKey, bytes, {
|
|
506
|
+
ttl: options.ttl,
|
|
507
|
+
tags,
|
|
508
|
+
hasSeed,
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
})
|
|
512
|
+
.catch((error) => {
|
|
513
|
+
console.error(`[timber] cache.component background re-render failed for "${id}":`, error);
|
|
514
|
+
})
|
|
515
|
+
);
|
|
516
|
+
|
|
517
|
+
if (waitUntil) {
|
|
518
|
+
waitUntil(work);
|
|
519
|
+
} else if (!warnedNoWaitUntil) {
|
|
520
|
+
warnedNoWaitUntil = true;
|
|
521
|
+
console.warn(
|
|
522
|
+
'[timber] cache.component SWR background re-render has no waitUntil — ' +
|
|
523
|
+
'the re-render may be killed when the handler returns on serverless platforms. ' +
|
|
524
|
+
'Ensure the adapter wires runWithWaitUntil().'
|
|
525
|
+
);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* Try to serve this render from the prebuilt cache: overlay → artifact →
|
|
531
|
+
* live render. Handles ISR (SWR, tombstones, re-renders) per design/45.
|
|
532
|
+
*
|
|
533
|
+
* Null on any miss — the caller renders live.
|
|
534
|
+
*/
|
|
535
|
+
async function tryRevivePayload(
|
|
536
|
+
id: string,
|
|
537
|
+
options: PrebuiltComponentOptions,
|
|
538
|
+
props: Record<string, unknown>,
|
|
539
|
+
keyPropsOverride?: Record<string, unknown>
|
|
540
|
+
): Promise<{ element: unknown } | null> {
|
|
541
|
+
const hasSource = hasPrebuiltPayloadSource();
|
|
542
|
+
const hasRuntime = hasRuntimeLifetime(options);
|
|
543
|
+
if (!hasSource && !hasRuntime) return null;
|
|
544
|
+
|
|
545
|
+
const store = requestContextAls.getStore();
|
|
546
|
+
if (!store) return null;
|
|
547
|
+
const paramIndep = options.prerender ? await isParamIndependent(id) : false;
|
|
548
|
+
const keyParams = paramIndep ? {} : resolveKeyParams(store);
|
|
549
|
+
if (keyParams === null) return null;
|
|
550
|
+
|
|
551
|
+
// Strip `children` from the cache key ONLY when it is the framework-
|
|
552
|
+
// injected children slot outlet (<SlotOutlet slot="children" />).
|
|
553
|
+
// Layout components receive this as children — a deterministic client
|
|
554
|
+
// reference that is the same on every request, so it should not vary
|
|
555
|
+
// the key. User-provided React element children are NOT stripped —
|
|
556
|
+
// they remain unkeyable so the component renders live, which is
|
|
557
|
+
// correct: the cache cannot distinguish <A> from <B>.
|
|
558
|
+
// See design/45-cache-lifetimes.md §Layout Propagation, TIM-1181.
|
|
559
|
+
// keyPropsOverride = slot component (TIM-1173): the wrapper already
|
|
560
|
+
// split out slot props; only data props participate in the key. The
|
|
561
|
+
// children outlet strip applies to EITHER source — a cached layout
|
|
562
|
+
// declaring only named slots (slots: ['modal']) still receives the
|
|
563
|
+
// framework-injected children outlet in its data props, and it must not
|
|
564
|
+
// unkey the render there any more than on the non-slot path (codex P2
|
|
565
|
+
// on PR #890).
|
|
566
|
+
const allProps = (props ?? {}) as Record<string, unknown>;
|
|
567
|
+
let keyProps = keyPropsOverride ?? allProps;
|
|
568
|
+
if (isChildrenSlotOutletElement(keyProps.children)) {
|
|
569
|
+
const { children: _children, ...rest } = keyProps;
|
|
570
|
+
keyProps = rest;
|
|
571
|
+
}
|
|
572
|
+
const cacheKey = computeComponentCacheKey(keyProps, keyParams);
|
|
573
|
+
if (cacheKey === null) return null;
|
|
574
|
+
|
|
575
|
+
const outcome =
|
|
576
|
+
options.fallbackOnMissingSegmentParams === false
|
|
577
|
+
? 'failing the render (fallbackOnMissingSegmentParams: false)'
|
|
578
|
+
: 'rendering dynamically';
|
|
579
|
+
|
|
580
|
+
const registration = registry.get(id);
|
|
581
|
+
const component = registration?.component;
|
|
582
|
+
|
|
583
|
+
// ─── Step 1: Check overlay (CacheHandler) ─────────────────────────
|
|
584
|
+
if (hasRuntime) {
|
|
585
|
+
const overlayResult = await lookupOverlay(id, cacheKey);
|
|
586
|
+
if (overlayResult) {
|
|
587
|
+
const overlayHasSeed = overlayResult.record?.s ?? false;
|
|
588
|
+
if (overlayResult.kind === 'tombstone') {
|
|
589
|
+
if (component) {
|
|
590
|
+
return await inlineRerender(id, component, props, cacheKey, options, true, outcome);
|
|
591
|
+
}
|
|
592
|
+
return null;
|
|
593
|
+
}
|
|
594
|
+
if (overlayResult.kind === 'fresh' && overlayResult.payload) {
|
|
595
|
+
return await revivePayload(id, overlayResult.payload, outcome);
|
|
596
|
+
}
|
|
597
|
+
if (overlayResult.kind === 'stale' && overlayResult.payload) {
|
|
598
|
+
if (options.staleWhileRevalidate && component) {
|
|
599
|
+
backgroundRerender(
|
|
600
|
+
id,
|
|
601
|
+
component,
|
|
602
|
+
props,
|
|
603
|
+
cacheKey,
|
|
604
|
+
options,
|
|
605
|
+
overlayHasSeed,
|
|
606
|
+
snapshotRequestContext(store)
|
|
607
|
+
);
|
|
608
|
+
return await revivePayload(id, overlayResult.payload, outcome);
|
|
609
|
+
}
|
|
610
|
+
if (component) {
|
|
611
|
+
return await inlineRerender(
|
|
612
|
+
id,
|
|
613
|
+
component,
|
|
614
|
+
props,
|
|
615
|
+
cacheKey,
|
|
616
|
+
options,
|
|
617
|
+
overlayHasSeed,
|
|
618
|
+
outcome
|
|
619
|
+
);
|
|
620
|
+
}
|
|
621
|
+
return null;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// ─── Step 2: Check build artifact ─────────────────────────────────
|
|
627
|
+
if (hasSource) {
|
|
628
|
+
const artifactPayload = await lookupPrebuiltPayload(id, cacheKey);
|
|
629
|
+
if (artifactPayload !== null) {
|
|
630
|
+
// Check seed freshness when the component has a TTL.
|
|
631
|
+
if (options.ttl !== undefined) {
|
|
632
|
+
const entry = await getManifestEntry(id, cacheKey);
|
|
633
|
+
const buildTs = entry?.buildTimestamp ?? 0;
|
|
634
|
+
const seedAge = (Date.now() - buildTs) / 1000;
|
|
635
|
+
if (seedAge > options.ttl) {
|
|
636
|
+
// Stale seed
|
|
637
|
+
if (options.staleWhileRevalidate && component) {
|
|
638
|
+
backgroundRerender(
|
|
639
|
+
id,
|
|
640
|
+
component,
|
|
641
|
+
props,
|
|
642
|
+
cacheKey,
|
|
643
|
+
options,
|
|
644
|
+
true,
|
|
645
|
+
snapshotRequestContext(store)
|
|
646
|
+
);
|
|
647
|
+
return await revivePayload(id, artifactPayload, outcome);
|
|
648
|
+
}
|
|
649
|
+
if (component) {
|
|
650
|
+
return await inlineRerender(id, component, props, cacheKey, options, true, outcome);
|
|
651
|
+
}
|
|
652
|
+
// No component in registry — can't re-render; fall through to
|
|
653
|
+
// live render via the wrapper (design/45 step 3).
|
|
654
|
+
return null;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
// Fresh seed (or no TTL — immutable until redeploy)
|
|
658
|
+
return await revivePayload(id, artifactPayload, outcome);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// Manifest miss
|
|
662
|
+
if (options.prerender) {
|
|
663
|
+
console.warn(
|
|
664
|
+
`[timber] cache.component cache miss: "${id}" with params ${JSON.stringify(
|
|
665
|
+
store.segmentParams ?? {}
|
|
666
|
+
)} — ${outcome}`
|
|
667
|
+
);
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// ─── Step 3: Full miss with runtime lifetime — inline re-render ───
|
|
672
|
+
// Skip when fallbackOnMissingSegmentParams is false — that option means
|
|
673
|
+
// "only prebuilt content", so an unenumerated miss must throw (the
|
|
674
|
+
// wrapper handles the throw after we return null).
|
|
675
|
+
if (hasRuntime && component && options.fallbackOnMissingSegmentParams !== false) {
|
|
676
|
+
return await inlineRerender(id, component, props, cacheKey, options, false, outcome);
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
return null;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* Production wrapper injected by the timber-prebuilt transform. Registers
|
|
684
|
+
* the component under its stable ID and returns a wrapper component that
|
|
685
|
+
* either revives the cached payload (hit) or renders the original
|
|
686
|
+
* component live (miss).
|
|
687
|
+
*/
|
|
688
|
+
export function __prebuilt<C extends ServerComponent>(
|
|
689
|
+
id: string,
|
|
690
|
+
component: C,
|
|
691
|
+
options: PrebuiltComponentOptions = {}
|
|
692
|
+
): C {
|
|
693
|
+
// Slot resolution first, then option normalization in its terms
|
|
694
|
+
// (TIM-1173). ACTIVE slots are runtime-tier only — the build cannot
|
|
695
|
+
// enumerate slot content — so `prerender` is stripped (loudly); the
|
|
696
|
+
// capture pass reads the registry's normalized options, so stripping
|
|
697
|
+
// here also keeps the build from capturing slot components. DISABLED
|
|
698
|
+
// declarations (malformed shape, missing lifetime — warned inside
|
|
699
|
+
// resolveSlotNames) fall back wholesale to non-slot semantics: `slots`
|
|
700
|
+
// is stripped so no downstream consumer (resolveTags' slot filtering,
|
|
701
|
+
// the registry, the capture pass) ever sees the raw value, and every
|
|
702
|
+
// other option — including `prerender` — keeps its normal meaning
|
|
703
|
+
// (codex P2s on PR #890).
|
|
704
|
+
const resolution = resolveSlotNames(id, options);
|
|
705
|
+
const slots = resolution.kind === 'active' ? resolution.slots : null;
|
|
706
|
+
if (resolution.kind === 'active' && options.prerender) {
|
|
707
|
+
console.warn(
|
|
708
|
+
`[timber] cache.component "${id}": slots are runtime-tier only — ` +
|
|
709
|
+
`prerender is ignored (the build cannot enumerate slot content). ` +
|
|
710
|
+
`Use ttl/tags for the cache lifetime.`
|
|
711
|
+
);
|
|
712
|
+
options = { ...options, prerender: undefined };
|
|
713
|
+
}
|
|
714
|
+
if (resolution.kind === 'disabled') {
|
|
715
|
+
options = { ...options, slots: undefined };
|
|
716
|
+
}
|
|
717
|
+
registry.set(id, { id, component, options });
|
|
718
|
+
|
|
719
|
+
const wrapper = async (props: Parameters<C>[0]) => {
|
|
720
|
+
// Build-time only: report this render to the active capture pass —
|
|
721
|
+
// cycle detection (throws) and nesting-clamp warnings (design/45
|
|
722
|
+
// §Nesting Semantics). A single null-check at request time.
|
|
723
|
+
noteWrapperRender(id, options);
|
|
724
|
+
if (isCaptureActive()) {
|
|
725
|
+
// Nested wrapper inside a build-time capture: render live so the
|
|
726
|
+
// subtree bakes flat into the enclosing entry (design/45 §Nesting).
|
|
727
|
+
// This deliberately bypasses fallbackOnMissingSegmentParams: false —
|
|
728
|
+
// that option means "never serve non-prebuilt content", and a
|
|
729
|
+
// build-time render IS prebuilt content; throwing here would
|
|
730
|
+
// spuriously fail the outer entry (codex P2 on PR #836).
|
|
731
|
+
return createElement(component as RenderableComponent, props as Record<string, unknown>);
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
const revived = slots
|
|
735
|
+
? await tryReviveSlotShell(id, options, slots, props as Record<string, unknown>)
|
|
736
|
+
: await tryRevivePayload(id, options, props as Record<string, unknown>);
|
|
737
|
+
if (revived !== null) {
|
|
738
|
+
return revived.element;
|
|
739
|
+
}
|
|
740
|
+
if (options.fallbackOnMissingSegmentParams === false) {
|
|
741
|
+
throw new Error(
|
|
742
|
+
`[timber] cache.component "${id}": no prebuilt payload for the current params and fallbackOnMissingSegmentParams is false`
|
|
743
|
+
);
|
|
744
|
+
}
|
|
745
|
+
// Return an ELEMENT — React invokes the component itself, with its
|
|
746
|
+
// render dispatcher active. Calling component(props) here would run
|
|
747
|
+
// it after this wrapper's await, outside a dispatcher frame, breaking
|
|
748
|
+
// sync server components that call use() (codex review on PR #835).
|
|
749
|
+
return createElement(component as RenderableComponent, props as Record<string, unknown>);
|
|
750
|
+
};
|
|
751
|
+
Object.defineProperty(wrapper, 'name', { value: `Prebuilt(${id})` });
|
|
752
|
+
// Double cast, deliberately: C's return type may be narrower than the
|
|
753
|
+
// wrapper's (a sync component wrapped by an async function, or a revived
|
|
754
|
+
// subtree in place of C's exact JSX type). Callers only ever *render*
|
|
755
|
+
// the result — React treats any component returning ReactNode-compatible
|
|
756
|
+
// values identically — so widening through `unknown` is safe here and a
|
|
757
|
+
// direct cast would be rejected by the compiler for exactly the
|
|
758
|
+
// difference we intend.
|
|
759
|
+
return wrapper as unknown as C;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/** Look up a registration by stable component ID. */
|
|
763
|
+
export function getPrebuiltRegistration(id: string): PrebuiltRegistration | undefined {
|
|
764
|
+
return registry.get(id);
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/** All registrations, for the post-build capture pass (TIM-1119). */
|
|
768
|
+
export function getPrebuiltRegistry(): ReadonlyMap<string, PrebuiltRegistration> {
|
|
769
|
+
return registry;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
/**
|
|
773
|
+
* Dev-mode wrapper injected by the timber-prebuilt transform: a no-op that
|
|
774
|
+
* renders the component dynamically on every request, logging once per
|
|
775
|
+
* component on first render so the production behavior difference is visible.
|
|
776
|
+
* See design/44 §Dev Mode.
|
|
777
|
+
*/
|
|
778
|
+
export function __prebuiltDev<C extends ServerComponent>(
|
|
779
|
+
name: string,
|
|
780
|
+
component: C,
|
|
781
|
+
options: PrebuiltComponentOptions = {}
|
|
782
|
+
): C {
|
|
783
|
+
// Dev/prod parity for slot components: in production a slot component
|
|
784
|
+
// ALWAYS receives a SlotOutlet element for each declared slot (never the
|
|
785
|
+
// live children), so a component that introspects a slot prop would
|
|
786
|
+
// behave differently between dev and prod if dev passed children
|
|
787
|
+
// through. Dev renders the same tree shape — outlets in the props,
|
|
788
|
+
// live values via SlotsProvider — just without any caching. The same
|
|
789
|
+
// validation applies (including the lifetime requirement): slots are
|
|
790
|
+
// active in dev exactly when they would be active in production.
|
|
791
|
+
const resolution = resolveSlotNames(name, options);
|
|
792
|
+
const slots = resolution.kind === 'active' ? resolution.slots : null;
|
|
793
|
+
let logged = false;
|
|
794
|
+
const wrapper = (props: Parameters<C>[0]) => {
|
|
795
|
+
if (!logged) {
|
|
796
|
+
logged = true;
|
|
797
|
+
console.log(`[timber] cache.component: "${name}" — rendering dynamically (dev mode)`);
|
|
798
|
+
}
|
|
799
|
+
if (slots) {
|
|
800
|
+
const render = prepareSlotRender(props as Record<string, unknown>, slots);
|
|
801
|
+
// Substitute outlets only when PRODUCTION would: top-level props
|
|
802
|
+
// splittable AND the data props keyable. Unkeyable inputs render
|
|
803
|
+
// live with the original props there, so dev must too (parity —
|
|
804
|
+
// codex P2 on PR #890).
|
|
805
|
+
if (render !== null && isSlotRenderKeyable(render.dataProps)) {
|
|
806
|
+
return wrapInSlotsProvider(
|
|
807
|
+
createElement(component as RenderableComponent, render.shellProps),
|
|
808
|
+
render.slotValues
|
|
809
|
+
);
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
// Element, not a direct call — same dispatcher reasoning as the
|
|
813
|
+
// production wrapper's live fallback.
|
|
814
|
+
return createElement(component as RenderableComponent, props as Record<string, unknown>);
|
|
815
|
+
};
|
|
816
|
+
return wrapper as C;
|
|
817
|
+
}
|