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