@timber-js/app 0.2.0-alpha.20 → 0.2.0-alpha.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -0
- package/agent-skill.md +346 -0
- package/dist/_chunks/actions-d1hCqnU3.js +345 -0
- package/dist/_chunks/actions-d1hCqnU3.js.map +1 -0
- package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
- package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
- package/dist/_chunks/base-path-DaQrzbez.js +80 -0
- package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
- package/dist/_chunks/build-manifest-DTmSGLRz.js +135 -0
- package/dist/_chunks/build-manifest-DTmSGLRz.js.map +1 -0
- package/dist/_chunks/build-output-helper-9dqCv1pZ.js +370 -0
- package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +1 -0
- package/dist/_chunks/cache-api-ByagcC-J.js +1149 -0
- package/dist/_chunks/cache-api-ByagcC-J.js.map +1 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
- package/dist/_chunks/chains-Bpb0W4ax.js +412 -0
- package/dist/_chunks/chains-Bpb0W4ax.js.map +1 -0
- package/dist/_chunks/cli-check-D6VolrDV.js +293 -0
- package/dist/_chunks/cli-check-D6VolrDV.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D6rO-VcS.js +299 -0
- package/dist/_chunks/cli-schema-sync-D6rO-VcS.js.map +1 -0
- package/dist/_chunks/cloudflare-BFb__LYG.js +1290 -0
- package/dist/_chunks/cloudflare-BFb__LYG.js.map +1 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/convention-lint-fRkwVwEH.js +893 -0
- package/dist/_chunks/convention-lint-fRkwVwEH.js.map +1 -0
- package/dist/_chunks/dist-DtrJyBbw.js +386 -0
- package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
- package/dist/_chunks/error-boundary-BfPHZjm0.js +1050 -0
- package/dist/_chunks/error-boundary-BfPHZjm0.js.map +1 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
- package/dist/_chunks/file-cache-Dw6BJPG7.js +458 -0
- package/dist/_chunks/file-cache-Dw6BJPG7.js.map +1 -0
- package/dist/_chunks/format-BKclgVbk.js +14 -0
- package/dist/_chunks/format-BKclgVbk.js.map +1 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
- package/dist/_chunks/graph-cache-CP4GEmf9.js +304 -0
- package/dist/_chunks/graph-cache-CP4GEmf9.js.map +1 -0
- package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
- package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
- package/dist/_chunks/live-graph-D_2D32Ad.js +150 -0
- package/dist/_chunks/live-graph-D_2D32Ad.js.map +1 -0
- package/dist/_chunks/logger-uLBuGKDI.js +1484 -0
- package/dist/_chunks/logger-uLBuGKDI.js.map +1 -0
- package/dist/_chunks/navigation-context-D0TU0Jog.js +135 -0
- package/dist/_chunks/navigation-context-D0TU0Jog.js.map +1 -0
- package/dist/_chunks/navigation-root-mHSK9psY.js +126 -0
- package/dist/_chunks/navigation-root-mHSK9psY.js.map +1 -0
- package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
- package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
- package/dist/_chunks/plugin-context-8idfR3UZ.js +321 -0
- package/dist/_chunks/plugin-context-8idfR3UZ.js.map +1 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
- package/dist/_chunks/poison-scan-Bm9Yyqk9.js +101 -0
- package/dist/_chunks/poison-scan-Bm9Yyqk9.js.map +1 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
- package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
- package/dist/_chunks/scan-BoP17W3w.js +140 -0
- package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
- package/dist/_chunks/scanner-AiazgH_f.js +1771 -0
- package/dist/_chunks/scanner-AiazgH_f.js.map +1 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
- package/dist/_chunks/segment-context-D9_89u34.js +34 -0
- package/dist/_chunks/segment-context-D9_89u34.js.map +1 -0
- package/dist/_chunks/segment-keys-lqtdookO.js +256 -0
- package/dist/_chunks/segment-keys-lqtdookO.js.map +1 -0
- package/dist/_chunks/singleflight-2lUWfcAk.js +54 -0
- package/dist/_chunks/singleflight-2lUWfcAk.js.map +1 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-D6T6Y3ef.js} +3 -31
- package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +1 -0
- package/dist/_chunks/state-FippDgxN.js +52 -0
- package/dist/_chunks/state-FippDgxN.js.map +1 -0
- package/dist/_chunks/status-page-marker-DwQBrLBz.js +496 -0
- package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +1 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
- package/dist/_chunks/walkers-B6XUtmqK.js +144 -0
- package/dist/_chunks/walkers-B6XUtmqK.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +72 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +74 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +123 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +200 -22
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -188
- package/dist/adapters/compress-module.d.ts +17 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +64 -0
- package/dist/adapters/fs-identity.d.ts.map +1 -0
- package/dist/adapters/nitro-presets.d.ts +37 -0
- package/dist/adapters/nitro-presets.d.ts.map +1 -0
- package/dist/adapters/nitro-preview.d.ts +32 -0
- package/dist/adapters/nitro-preview.d.ts.map +1 -0
- package/dist/adapters/nitro.d.ts +66 -37
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +457 -300
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +62 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +28 -6
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/analyze/chains.d.ts +124 -0
- package/dist/analyze/chains.d.ts.map +1 -0
- package/dist/analyze/classify.d.ts +150 -0
- package/dist/analyze/classify.d.ts.map +1 -0
- package/dist/analyze/crawl-entry.d.ts +17 -0
- package/dist/analyze/crawl-entry.d.ts.map +1 -0
- package/dist/analyze/crawl-entry.js +313 -0
- package/dist/analyze/crawl-entry.js.map +1 -0
- package/dist/analyze/crawl.d.ts +134 -0
- package/dist/analyze/crawl.d.ts.map +1 -0
- package/dist/analyze/graph-cache.d.ts +104 -0
- package/dist/analyze/graph-cache.d.ts.map +1 -0
- package/dist/analyze/graph-command.d.ts +43 -0
- package/dist/analyze/graph-command.d.ts.map +1 -0
- package/dist/analyze/graph-command.js +472 -0
- package/dist/analyze/graph-command.js.map +1 -0
- package/dist/analyze/live-graph.d.ts +81 -0
- package/dist/analyze/live-graph.d.ts.map +1 -0
- package/dist/analyze/poison-rules.d.ts +72 -0
- package/dist/analyze/poison-rules.d.ts.map +1 -0
- package/dist/analyze/poison-scan.d.ts +48 -0
- package/dist/analyze/poison-scan.d.ts.map +1 -0
- package/dist/analyze/scan.d.ts +73 -0
- package/dist/analyze/scan.d.ts.map +1 -0
- package/dist/cache/cache-api.d.ts +48 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/fast-hash.d.ts +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 +163 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +75 -8
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +175 -47
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +37 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/action-queue.d.ts +44 -0
- package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +63 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +29 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +46 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +28 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/deny-last-resort.d.ts +29 -0
- package/dist/client/deny-last-resort.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +66 -6
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +2 -126
- package/dist/client/error-reconstituter.d.ts +61 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/global-context.d.ts +15 -0
- package/dist/client/global-context.d.ts.map +1 -0
- package/dist/client/history.d.ts +50 -9
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +20 -33
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +323 -1148
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +20 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +818 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +63 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/location-search.d.ts +12 -0
- package/dist/client/location-search.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +121 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-commit.d.ts +98 -0
- package/dist/client/navigation-commit.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +51 -31
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +98 -0
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/navigation-transition.d.ts +187 -0
- package/dist/client/navigation-transition.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts +1 -1
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/params-context.d.ts +81 -0
- package/dist/client/params-context.d.ts.map +1 -0
- package/dist/client/react-root.d.ts +44 -0
- package/dist/client/react-root.d.ts.map +1 -0
- package/dist/client/router-effects.d.ts +130 -0
- package/dist/client/router-effects.d.ts.map +1 -0
- package/dist/client/router-lifecycle.d.ts +98 -0
- package/dist/client/router-lifecycle.d.ts.map +1 -0
- package/dist/client/router-pipeline.d.ts +87 -0
- package/dist/client/router-pipeline.d.ts.map +1 -0
- package/dist/client/router-ref.d.ts +2 -2
- package/dist/client/router-ref.d.ts.map +1 -1
- package/dist/client/router-skew.d.ts +21 -0
- package/dist/client/router-skew.d.ts.map +1 -0
- package/dist/client/router-types.d.ts +272 -0
- package/dist/client/router-types.d.ts.map +1 -0
- package/dist/client/router.d.ts +1 -97
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +104 -26
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +161 -25
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-context.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +68 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +15 -0
- package/dist/client/segment-update-context.d.ts.map +1 -0
- package/dist/client/shallow-url.d.ts +10 -0
- package/dist/client/shallow-url.d.ts.map +1 -0
- package/dist/client/slot-content-cache-context.d.ts +35 -0
- package/dist/client/slot-content-cache-context.d.ts.map +1 -0
- package/dist/client/slot-context.d.ts +31 -0
- package/dist/client/slot-context.d.ts.map +1 -0
- package/dist/client/slot-outlet.d.ts +16 -0
- package/dist/client/slot-outlet.d.ts.map +1 -0
- package/dist/client/slot-provider.d.ts +25 -0
- package/dist/client/slot-provider.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +29 -7
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-client.d.ts +69 -0
- package/dist/client/stale-client.d.ts.map +1 -0
- package/dist/client/state.d.ts +19 -8
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/status-page-marker.d.ts +25 -0
- package/dist/client/status-page-marker.d.ts.map +1 -0
- package/dist/client/top-loader.d.ts +7 -6
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/unload-guard.d.ts +5 -0
- package/dist/client/unload-guard.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts +12 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-link-status.d.ts +5 -5
- package/dist/client/use-link-status.d.ts.map +1 -1
- package/dist/client/use-pathname.d.ts +13 -11
- package/dist/client/use-pathname.d.ts.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +10 -4
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +2 -2
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +15 -8
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/use-segment-params.d.ts +55 -0
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +69 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +76 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +322 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +51 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/cookies/define-cookie.d.ts +58 -25
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +3 -2
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +256 -36
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +34 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +50 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +40 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/dev-page-shell.d.ts +78 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +32 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +46 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/hydration-overlay.d.ts +11 -0
- package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/dev-tools/instrumentation.d.ts +59 -0
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/fonts/ast-walk.d.ts +68 -0
- package/dist/fonts/ast-walk.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +112 -8
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +50 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/css.d.ts +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 +10461 -14176
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +81 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +34 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +276 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +21 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +7 -3
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +47 -10
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +64 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/callsite-ast.d.ts +117 -0
- package/dist/plugins/callsite-ast.d.ts.map +1 -0
- package/dist/plugins/callsite-jsx.d.ts +35 -0
- package/dist/plugins/callsite-jsx.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +11 -4
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +40 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +21 -0
- package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-discovery.d.ts +123 -0
- package/dist/plugins/dev-discovery.d.ts.map +1 -0
- package/dist/plugins/dev-server.d.ts +17 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +28 -4
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +16 -73
- 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/prebuilt-capture.d.ts +60 -0
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
- package/dist/plugins/prebuilt.d.ts +82 -0
- package/dist/plugins/prebuilt.d.ts.map +1 -0
- package/dist/plugins/prerender-sugar.d.ts +39 -0
- package/dist/plugins/prerender-sugar.d.ts.map +1 -0
- package/dist/plugins/request-dep/analysis.d.ts +106 -0
- package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
- package/dist/plugins/request-dep/index.d.ts +75 -0
- package/dist/plugins/request-dep/index.d.ts.map +1 -0
- package/dist/plugins/request-dep/origin.d.ts +61 -0
- package/dist/plugins/request-dep/origin.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +29 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +218 -21
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +26 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +61 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen-write.d.ts +51 -0
- package/dist/routing/codegen-write.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +8 -3
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/collision-probe.d.ts +104 -0
- package/dist/routing/collision-probe.d.ts.map +1 -0
- package/dist/routing/collision-spaces.d.ts +26 -0
- package/dist/routing/collision-spaces.d.ts.map +1 -0
- package/dist/routing/convention-lint.d.ts +55 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/export-detect.d.ts +72 -0
- package/dist/routing/export-detect.d.ts.map +1 -0
- package/dist/routing/file-cache.d.ts +8 -0
- package/dist/routing/file-cache.d.ts.map +1 -0
- package/dist/routing/index.d.ts +13 -7
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +5 -2
- package/dist/routing/interception-overlap.d.ts +35 -0
- package/dist/routing/interception-overlap.d.ts.map +1 -0
- package/dist/routing/interception.d.ts +234 -10
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +105 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/manifest-codegen.d.ts +26 -0
- package/dist/routing/manifest-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +14 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/schema-validation.d.ts +35 -0
- package/dist/routing/schema-validation.d.ts.map +1 -0
- package/dist/routing/segment-classify.d.ts +114 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/segment-codegen.d.ts +38 -0
- package/dist/routing/segment-codegen.d.ts.map +1 -0
- package/dist/routing/segment-keys.d.ts +118 -0
- package/dist/routing/segment-keys.d.ts.map +1 -0
- package/dist/routing/slot-placement.d.ts +48 -0
- package/dist/routing/slot-placement.d.ts.map +1 -0
- package/dist/routing/types.d.ts +74 -26
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +57 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +14 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/rsc-runtime/transforms.d.ts +13 -0
- package/dist/rsc-runtime/transforms.d.ts.map +1 -0
- package/dist/schema-bridge.d.ts +145 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +262 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +3 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +179 -360
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/parse-total.d.ts +81 -0
- package/dist/search-params/parse-total.d.ts.map +1 -0
- package/dist/search-params/serialize-equal.d.ts +9 -0
- package/dist/search-params/serialize-equal.d.ts.map +1 -0
- package/dist/search-params/wrappers.d.ts +76 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/server/access-gate.d.ts +98 -10
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +42 -7
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +39 -5
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +29 -35
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +117 -13
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +8 -18
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +25 -30
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/canonicalize.d.ts +10 -0
- package/dist/server/canonicalize.d.ts.map +1 -1
- package/dist/server/chain-url-parts.d.ts +82 -0
- package/dist/server/chain-url-parts.d.ts.map +1 -0
- package/dist/server/children-interception.d.ts +49 -0
- package/dist/server/children-interception.d.ts.map +1 -0
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/compress.d.ts.map +1 -1
- package/dist/server/cookie-context.d.ts +170 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +65 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csp-nonce.d.ts +45 -0
- package/dist/server/csp-nonce.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/default-status-page.d.ts +45 -0
- package/dist/server/default-status-page.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +253 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +20 -9
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +14 -12
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +101 -10
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/error-response-headers.d.ts +3 -0
- package/dist/server/error-response-headers.d.ts.map +1 -0
- package/dist/server/fallback-error.d.ts +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +45 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/form-data.d.ts +41 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/form-flash.d.ts +1 -1
- package/dist/server/head-response.d.ts +35 -0
- package/dist/server/head-response.d.ts.map +1 -0
- package/dist/server/html-injector-core.d.ts +257 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +84 -42
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +18 -54
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +195 -2922
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +1 -1
- package/dist/server/internal.d.ts +50 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +4034 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +39 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-collector.d.ts +71 -0
- package/dist/server/metadata-collector.d.ts.map +1 -0
- package/dist/server/metadata-platform.d.ts +2 -2
- package/dist/server/metadata-render.d.ts +2 -2
- package/dist/server/metadata-render.d.ts.map +1 -1
- package/dist/server/metadata-routes.d.ts +60 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata-social.d.ts +2 -2
- package/dist/server/metadata.d.ts +10 -2
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +20 -5
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +105 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/nuqs-ssr-provider.d.ts +7 -3
- package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +78 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +77 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +59 -9
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +7 -1
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +49 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +70 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +153 -20
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +31 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/prebuilt/cache-key.d.ts +63 -0
- package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-state.d.ts +57 -0
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
- package/dist/server/prebuilt/key-discipline.d.ts +52 -0
- package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
- package/dist/server/prebuilt/overlay.d.ts +100 -0
- package/dist/server/prebuilt/overlay.d.ts.map +1 -0
- package/dist/server/prebuilt/payload-source.d.ts +79 -0
- package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +99 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -0
- package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
- package/dist/server/prebuilt-builder.d.ts +121 -0
- package/dist/server/prebuilt-builder.d.ts.map +1 -0
- package/dist/server/prebuilt-runtime.d.ts +111 -0
- package/dist/server/prebuilt-runtime.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +129 -45
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/publish-params.d.ts +33 -0
- package/dist/server/publish-params.d.ts.map +1 -0
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/render-utils.d.ts +26 -0
- package/dist/server/render-utils.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +111 -107
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-dep.d.ts +15 -0
- package/dist/server/request-dep.d.ts.map +1 -0
- package/dist/server/response-cache-policy.d.ts +3 -0
- package/dist/server/response-cache-policy.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +57 -30
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-element-helpers.d.ts +12 -0
- package/dist/server/route-element-helpers.d.ts.map +1 -0
- package/dist/server/route-handler.d.ts +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +40 -38
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/route-module-loader.d.ts +37 -0
- package/dist/server/route-module-loader.d.ts.map +1 -0
- package/dist/server/rsc-cache-key-guard.d.ts +78 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +12 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +38 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +59 -42
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +40 -6
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +51 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +26 -6
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +33 -3
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +37 -5
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/rsc-error-envelope.d.ts +11 -0
- package/dist/server/rsc-error-envelope.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +130 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/skippable-prefix.d.ts +29 -0
- package/dist/server/skippable-prefix.d.ts.map +1 -0
- package/dist/server/slot-interception.d.ts +80 -0
- package/dist/server/slot-interception.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +137 -7
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/slot-subtree-contain.d.ts +54 -0
- package/dist/server/slot-subtree-contain.d.ts.map +1 -0
- package/dist/server/ssr-bridge-types.d.ts +160 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +1 -43
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +69 -22
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +93 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +44 -9
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/static-generator.d.ts +112 -0
- package/dist/server/static-generator.d.ts.map +1 -0
- package/dist/server/static-not-found.d.ts +52 -0
- package/dist/server/static-not-found.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +26 -15
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +47 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +46 -11
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +49 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +88 -7
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +50 -0
- package/dist/server/utils/element-type.d.ts.map +1 -0
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/utils/mdx-file.d.ts +17 -0
- package/dist/server/utils/mdx-file.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/server/workers-cache-bridge.d.ts +26 -0
- package/dist/server/workers-cache-bridge.d.ts.map +1 -0
- package/dist/shared/als-slots.d.ts +42 -0
- package/dist/shared/als-slots.d.ts.map +1 -0
- package/dist/shared/base-path.d.ts +56 -0
- package/dist/shared/base-path.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +49 -0
- package/dist/shared/href-validation.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shared/param-value.d.ts +104 -0
- package/dist/shared/param-value.d.ts.map +1 -0
- package/dist/shared/payload-root.d.ts +109 -0
- package/dist/shared/payload-root.d.ts.map +1 -0
- package/dist/shared/redirect-type.d.ts +17 -0
- package/dist/shared/redirect-type.d.ts.map +1 -0
- package/dist/shared/rsc-cache-key.d.ts +163 -0
- package/dist/shared/rsc-cache-key.d.ts.map +1 -0
- package/dist/shared/rsc-error-envelope.d.ts +16 -0
- package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
- package/dist/shared/rsc-manifest.d.ts +28 -0
- package/dist/shared/rsc-manifest.d.ts.map +1 -0
- package/dist/shared/rsc-media-type.d.ts +52 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -0
- package/dist/shared/rsc-payload-path.d.ts +42 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -0
- package/dist/shared/segment-info.d.ts +66 -0
- package/dist/shared/segment-info.d.ts.map +1 -0
- package/dist/shared/slot-params.d.ts +52 -0
- package/dist/shared/slot-params.d.ts.map +1 -0
- package/dist/shared/static-platform-files.d.ts +71 -0
- package/dist/shared/static-platform-files.d.ts.map +1 -0
- package/dist/shared/status-reason-phrase.d.ts +26 -0
- package/dist/shared/status-reason-phrase.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +53 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/image.d.ts +120 -120
- package/dist/shims/image.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +25 -12
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation-rsc.d.ts +21 -0
- package/dist/shims/navigation-rsc.d.ts.map +1 -0
- package/dist/shims/navigation.d.ts +10 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +236 -0
- package/docs/api/31-api-client.mdx +167 -0
- package/docs/api/32-api-cache.mdx +311 -0
- package/docs/api/33-api-search-params.mdx +176 -0
- package/docs/api/34-api-config.mdx +329 -0
- package/docs/api/35-api-typescript.mdx +91 -0
- package/docs/api/36-cli.mdx +192 -0
- package/docs/learn/00-introduction.mdx +109 -0
- package/docs/learn/01-quick-start.mdx +94 -0
- package/docs/learn/02-pages-and-layouts.mdx +147 -0
- package/docs/learn/03-fetching-data.mdx +211 -0
- package/docs/learn/04-access-control.mdx +115 -0
- package/docs/learn/05-the-flush-point.mdx +175 -0
- package/docs/learn/06-typed-params.mdx +275 -0
- package/docs/learn/07-typed-routes.mdx +108 -0
- package/docs/learn/08-forms-and-actions.mdx +146 -0
- package/docs/learn/09-streaming.mdx +140 -0
- package/docs/learn/10-caching.mdx +252 -0
- package/docs/learn/11-middleware.mdx +158 -0
- package/docs/learn/12-error-handling.mdx +188 -0
- package/docs/learn/13-deploying.mdx +287 -0
- package/llms.txt +55 -0
- package/package.json +117 -30
- package/src/adapters/build-output-helper.ts +351 -0
- package/src/adapters/cloudflare-dev.ts +183 -0
- package/src/adapters/cloudflare-kv-cache.ts +207 -0
- package/src/adapters/cloudflare.ts +747 -130
- package/src/adapters/compress-module.ts +101 -88
- package/src/adapters/fs-identity.ts +156 -0
- package/src/adapters/nitro-presets.ts +139 -0
- package/src/adapters/nitro-preview.ts +340 -0
- package/src/adapters/nitro.ts +249 -426
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +274 -0
- package/src/adapters/types.ts +28 -7
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/analyze/chains.ts +411 -0
- package/src/analyze/classify.ts +258 -0
- package/src/analyze/crawl-entry.ts +68 -0
- package/src/analyze/crawl.ts +500 -0
- package/src/analyze/graph-cache.ts +332 -0
- package/src/analyze/graph-command.ts +762 -0
- package/src/analyze/live-graph.ts +232 -0
- package/src/analyze/poison-rules.ts +165 -0
- package/src/analyze/poison-scan.ts +162 -0
- package/src/analyze/scan.ts +149 -0
- package/src/cache/cache-api.ts +107 -0
- package/src/cache/fast-hash.ts +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 +75 -0
- package/src/cache/redis-handler.ts +198 -20
- package/src/cache/singleflight.ts +69 -6
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/store.ts +71 -0
- package/src/cache/stores/cloudflare-kv.ts +52 -0
- package/src/cache/stores/memory.ts +125 -0
- package/src/cache/stores/redis.ts +97 -0
- package/src/cache/stores/vercel.ts +59 -0
- package/src/cache/tag-aware-handler.ts +237 -0
- package/src/cache/timber-cache.ts +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 +507 -0
- package/src/cli-schema-sync.ts +401 -0
- package/src/cli.ts +262 -55
- package/src/client/browser-dev.ts +157 -2
- package/src/client/browser-entry/action-dispatch.ts +197 -0
- package/src/client/browser-entry/action-queue.ts +90 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +148 -0
- package/src/client/browser-entry/index.ts +131 -0
- package/src/client/browser-entry/post-hydration.ts +123 -0
- package/src/client/browser-entry/router-init.ts +418 -0
- package/src/client/browser-entry/rsc-stream.ts +166 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/deny-last-resort.tsx +54 -0
- package/src/client/error-boundary.tsx +316 -40
- package/src/client/error-reconstituter.tsx +79 -0
- package/src/client/form.tsx +36 -32
- package/src/client/global-context.ts +31 -0
- package/src/client/history.ts +81 -10
- package/src/client/index.ts +89 -53
- package/src/client/internal.ts +59 -0
- package/src/client/link.tsx +439 -151
- package/src/client/location-search.ts +15 -0
- package/src/client/navigation-api.ts +347 -0
- package/src/client/navigation-commit.ts +295 -0
- package/src/client/navigation-context.ts +67 -98
- package/src/client/navigation-root.tsx +224 -0
- package/src/client/navigation-transition.ts +327 -0
- package/src/client/nuqs-adapter.tsx +21 -9
- package/src/client/params-context.ts +187 -0
- package/src/client/react-root.ts +72 -0
- package/src/client/router-effects.ts +228 -0
- package/src/client/router-lifecycle.ts +354 -0
- package/src/client/router-pipeline.ts +490 -0
- package/src/client/router-ref.ts +3 -3
- package/src/client/router-skew.ts +30 -0
- package/src/client/router-types.ts +294 -0
- package/src/client/router.ts +435 -421
- package/src/client/rsc-fetch.ts +512 -73
- package/src/client/segment-cache.ts +327 -40
- 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 +30 -9
- package/src/client/stale-client.ts +191 -0
- package/src/client/state.ts +29 -15
- package/src/client/status-page-marker.tsx +32 -0
- package/src/client/top-loader.tsx +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 +6 -3
- package/src/client/use-search-params.ts +38 -49
- package/src/client/use-segment-params.ts +69 -0
- package/src/client/use-selected-layout-segment.ts +2 -2
- package/src/codec.ts +149 -0
- package/src/config-types.ts +322 -0
- package/src/config-validation.ts +347 -0
- package/src/cookies/define-cookie.ts +222 -53
- package/src/cookies/index.ts +13 -2
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +192 -0
- package/src/dev-tools/404-page.ts +286 -0
- package/src/dev-tools/browser-logs.ts +55 -0
- package/src/dev-tools/dev-page-shell.ts +260 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +185 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +83 -0
- package/src/dev-tools/instrumentation.ts +213 -0
- package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
- package/src/dev-tools/overlay.ts +469 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +182 -0
- package/src/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +479 -128
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/css.ts +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 +486 -377
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +84 -0
- package/src/plugin-context.ts +503 -0
- package/src/plugins/adapter-build.ts +229 -7
- package/src/plugins/build-manifest.ts +201 -26
- package/src/plugins/build-report.ts +259 -47
- package/src/plugins/cache.ts +243 -0
- package/src/plugins/callsite-ast.ts +472 -0
- package/src/plugins/callsite-jsx.ts +243 -0
- package/src/plugins/chunks.ts +74 -5
- package/src/plugins/client-chunks.ts +185 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +5 -1
- package/src/plugins/dev-discovery.ts +218 -0
- package/src/plugins/dev-server.ts +369 -96
- package/src/plugins/entries.ts +141 -16
- package/src/plugins/fonts.ts +234 -659
- package/src/plugins/graph-endpoint.ts +532 -0
- package/src/plugins/mdx.ts +107 -35
- package/src/plugins/prebuilt-capture.ts +217 -0
- package/src/plugins/prebuilt-options-analysis.ts +175 -0
- package/src/plugins/prebuilt.ts +655 -0
- package/src/plugins/prerender-sugar.ts +320 -0
- package/src/plugins/request-dep/analysis.ts +447 -0
- package/src/plugins/request-dep/index.ts +376 -0
- package/src/plugins/request-dep/origin.ts +310 -0
- package/src/plugins/routing.ts +273 -277
- package/src/plugins/server-bundle.ts +99 -14
- package/src/plugins/shims.ts +259 -97
- package/src/plugins/static-build.ts +708 -66
- package/src/react-canary.d.ts +2 -0
- package/src/routing/codegen-shared.ts +39 -0
- package/src/routing/codegen-types.ts +62 -0
- package/src/routing/codegen-write.ts +141 -0
- package/src/routing/codegen.ts +349 -232
- package/src/routing/collision-probe.ts +438 -0
- package/src/routing/collision-spaces.ts +281 -0
- package/src/routing/convention-lint.ts +623 -0
- package/src/routing/export-detect.ts +448 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +16 -7
- package/src/routing/interception-overlap.ts +141 -0
- package/src/routing/interception.ts +1044 -67
- package/src/routing/link-codegen.ts +280 -0
- package/src/routing/manifest-codegen.ts +226 -0
- package/src/routing/scanner.ts +393 -219
- package/src/routing/schema-validation.ts +155 -0
- package/src/routing/segment-classify.ts +280 -0
- package/src/routing/segment-codegen.ts +98 -0
- package/src/routing/segment-keys.ts +186 -0
- package/src/routing/slot-placement.ts +97 -0
- package/src/routing/types.ts +75 -26
- package/src/routing/walkers.ts +98 -0
- package/src/rsc-runtime/rsc.ts +9 -0
- package/src/rsc-runtime/ssr.ts +51 -0
- package/src/rsc-runtime/transforms.ts +13 -0
- package/src/rsc-runtime/vendor-types.d.ts +19 -0
- package/src/schema-bridge.ts +380 -0
- package/src/search-params/define.ts +677 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/parse-total.ts +91 -0
- package/src/search-params/serialize-equal.ts +14 -0
- package/src/search-params/wrappers.ts +150 -0
- package/src/server/access-gate.tsx +194 -56
- package/src/server/action-client.ts +122 -31
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +256 -56
- package/src/server/actions.ts +112 -68
- package/src/server/als-registry.ts +160 -21
- package/src/server/asset-headers.ts +15 -37
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +33 -57
- package/src/server/canonicalize.ts +6 -3
- package/src/server/chain-url-parts.ts +163 -0
- package/src/server/children-interception.ts +115 -0
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +43 -8
- package/src/server/cookie-context.ts +484 -0
- package/src/server/cookie-parsing.ts +163 -0
- package/src/server/csp-nonce.ts +70 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/default-logger.ts +99 -0
- package/src/server/default-status-page.ts +88 -0
- package/src/server/deny-boundary.ts +533 -0
- package/src/server/deny-renderer.ts +213 -112
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +4 -3
- package/src/server/early-hints.ts +39 -29
- package/src/server/error-boundary-wrapper.ts +181 -44
- package/src/server/error-response-headers.ts +18 -0
- package/src/server/fallback-error.ts +79 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +67 -0
- package/src/server/form-data.ts +124 -12
- package/src/server/form-flash.ts +2 -2
- package/src/server/head-response.ts +54 -0
- package/src/server/html-injector-core.ts +512 -0
- package/src/server/html-injectors.ts +272 -255
- package/src/server/index.ts +40 -192
- package/src/server/instrumentation.ts +1 -1
- package/src/server/internal.ts +173 -0
- package/src/server/logger.ts +73 -37
- package/src/server/metadata-collector.ts +174 -0
- package/src/server/metadata-platform.ts +2 -2
- package/src/server/metadata-render.ts +30 -8
- package/src/server/metadata-routes.ts +205 -24
- package/src/server/metadata-social.ts +2 -2
- package/src/server/metadata.ts +23 -2
- package/src/server/middleware-runner.ts +32 -5
- package/src/server/node-stream-transforms.ts +323 -0
- package/src/server/nuqs-ssr-provider.tsx +8 -7
- package/src/server/param-coercion.ts +198 -0
- package/src/server/pipeline-helpers.ts +159 -0
- package/src/server/pipeline-interception.ts +109 -33
- package/src/server/pipeline-metadata.ts +15 -1
- package/src/server/pipeline-outcome.ts +218 -0
- package/src/server/pipeline-phases.ts +606 -0
- package/src/server/pipeline.ts +324 -384
- package/src/server/port-resolution.ts +53 -0
- package/src/server/prebuilt/cache-key.ts +299 -0
- package/src/server/prebuilt/capture-state.ts +89 -0
- package/src/server/prebuilt/key-discipline.ts +122 -0
- package/src/server/prebuilt/manifest-tag-index.ts +46 -0
- package/src/server/prebuilt/overlay.ts +256 -0
- package/src/server/prebuilt/payload-source.ts +202 -0
- package/src/server/prebuilt/slots.ts +190 -0
- package/src/server/prebuilt/synthetic-store.ts +122 -0
- package/src/server/prebuilt-builder.ts +804 -0
- package/src/server/prebuilt-runtime.ts +817 -0
- package/src/server/primitives.ts +245 -97
- package/src/server/publish-params.ts +42 -0
- package/src/server/render-timeout.ts +108 -0
- package/src/server/render-utils.ts +35 -0
- package/src/server/request-context.ts +244 -334
- package/src/server/request-dep.ts +37 -0
- package/src/server/response-cache-policy.ts +45 -0
- package/src/server/route-element-builder.ts +508 -355
- package/src/server/route-element-helpers.ts +37 -0
- package/src/server/route-handler.ts +40 -13
- package/src/server/route-matcher.ts +165 -272
- package/src/server/route-module-loader.ts +161 -0
- package/src/server/rsc-cache-key-guard.ts +122 -0
- package/src/server/rsc-entry/action-middleware-runner.ts +174 -0
- package/src/server/rsc-entry/api-handler.ts +78 -34
- package/src/server/rsc-entry/deny-fallback.ts +93 -0
- package/src/server/rsc-entry/error-renderer.ts +373 -95
- package/src/server/rsc-entry/helpers.ts +226 -95
- package/src/server/rsc-entry/index.ts +370 -331
- package/src/server/rsc-entry/render-route.ts +304 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
- package/src/server/rsc-entry/rsc-payload.ts +209 -55
- package/src/server/rsc-entry/rsc-stream.ts +151 -26
- package/src/server/rsc-entry/ssr-bridge.ts +18 -5
- package/src/server/rsc-entry/ssr-renderer.ts +311 -60
- package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
- package/src/server/rsc-error-envelope.ts +18 -0
- package/src/server/rsc-prop-warnings.ts +1 -1
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/server-only-guard-noop.js +3 -0
- package/src/server/server-timing.ts +1 -1
- package/src/server/sitemap-generator.ts +337 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/skippable-prefix.ts +172 -0
- package/src/server/slot-interception.ts +168 -0
- package/src/server/slot-resolver.ts +707 -300
- package/src/server/slot-subtree-contain.ts +255 -0
- package/src/server/ssr-bridge-types.ts +165 -0
- package/src/server/ssr-entry.ts +230 -85
- package/src/server/ssr-render.ts +357 -85
- package/src/server/ssr-wrappers.tsx +162 -0
- package/src/server/state-tree-diff.ts +85 -30
- package/src/server/static-generator.ts +715 -0
- package/src/server/static-not-found.ts +134 -0
- package/src/server/status-code-resolver.ts +107 -148
- package/src/server/stream-utils.ts +292 -0
- package/src/server/tracing.ts +128 -16
- package/src/server/tree-match.ts +262 -0
- package/src/server/types.ts +95 -10
- package/src/server/utils/element-type.ts +88 -0
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/utils/mdx-file.ts +22 -0
- package/src/server/version-skew.ts +104 -0
- package/src/server/waituntil-bridge.ts +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/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/param-value.ts +281 -0
- package/src/shared/payload-root.ts +152 -0
- package/src/shared/redirect-type.ts +17 -0
- package/src/shared/rsc-cache-key.ts +269 -0
- package/src/shared/rsc-error-envelope.ts +16 -0
- package/src/shared/rsc-manifest.ts +29 -0
- package/src/shared/rsc-media-type.ts +59 -0
- package/src/shared/rsc-payload-path.ts +45 -0
- package/src/shared/segment-info.ts +67 -0
- package/src/shared/slot-params.ts +109 -0
- package/src/shared/static-platform-files.ts +75 -0
- package/src/shared/status-reason-phrase.ts +61 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +122 -1
- package/src/shims/navigation-client.ts +36 -32
- package/src/shims/navigation-rsc.ts +47 -0
- package/src/shims/navigation.ts +10 -7
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-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 +0 -153
- 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.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/use-navigation-pending.d.ts +0 -26
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts +0 -92
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/content/index.d.ts +0 -11
- package/dist/content/index.d.ts.map +0 -1
- package/dist/content/index.js +0 -2
- package/dist/plugins/cache-transform.d.ts +0 -36
- package/dist/plugins/cache-transform.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts +0 -60
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/search-params/registry.d.ts +0 -20
- package/dist/search-params/registry.d.ts.map +0 -1
- package/dist/server/client-module-map.d.ts +0 -47
- package/dist/server/client-module-map.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts +0 -29
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts +0 -129
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/flush.d.ts +0 -74
- package/dist/server/flush.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/tree-builder.d.ts +0 -126
- package/dist/server/tree-builder.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -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/use-navigation-pending.ts +0 -38
- package/src/client/use-params.ts +0 -141
- package/src/content/index.ts +0 -13
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/codecs.ts +0 -153
- package/src/search-params/create.ts +0 -321
- package/src/search-params/registry.ts +0 -31
- package/src/server/client-module-map.ts +0 -58
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/dev-warnings.ts +0 -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,804 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prebuilt payload capture — the post-build half of cache.component
|
|
3
|
+
* (TIM-1119, design/44-render-at-build-time.md §Build Phase).
|
|
4
|
+
*
|
|
5
|
+
* Runs AFTER Vite's 5-step build sequence, INSIDE the built RSC bundle:
|
|
6
|
+
* the component registry, the ALS instances, and the flight renderer are
|
|
7
|
+
* module instances in the bundle's graph, so the capture pass must share
|
|
8
|
+
* that graph — `server/rsc-entry/index.ts` re-exports this module's
|
|
9
|
+
* entry point as `__timber_capturePrebuilt`, and the timber-prebuilt
|
|
10
|
+
* plugin imports the built `rsc/index.js` and calls it.
|
|
11
|
+
*
|
|
12
|
+
* Per candidate route (a page with prebuilt components attributed by the
|
|
13
|
+
* build-time module-graph walk):
|
|
14
|
+
*
|
|
15
|
+
* 1. Load the page module (+ layout-chain modules that declare prebuilt
|
|
16
|
+
* components) — module evaluation registers `__prebuilt` components.
|
|
17
|
+
* 2. Enumerate param combos: `generateStaticSegmentParams()` for dynamic
|
|
18
|
+
* routes, the single empty combo for static routes.
|
|
19
|
+
* 3. Per combo, reconstruct the URL and run the REAL request-time pair —
|
|
20
|
+
* `matchRoute` + `coerceSegmentParams` — so codec-coerced params hash
|
|
21
|
+
* byte-identically to a live request. `computeComponentCacheKey` is
|
|
22
|
+
* the single shared implementation (design/44 §Cache Key).
|
|
23
|
+
* 4. Render each registered component in isolation under a synthetic ALS
|
|
24
|
+
* store (segment params only; cookies/headers/searchParams are hard
|
|
25
|
+
* errors — synthetic-store.ts), fully drain the flight stream, and
|
|
26
|
+
* smoke-revive the captured bytes once before accepting them.
|
|
27
|
+
* 5. Hand each payload to the caller's sink. Persistence (atomic file
|
|
28
|
+
* writes, manifest.json) is the PLUGIN's job on the Node side —
|
|
29
|
+
* keeping node:fs out of the server bundle, which must also run on
|
|
30
|
+
* Cloudflare Workers.
|
|
31
|
+
*
|
|
32
|
+
* No payload source is registered while this runs, so wrappers rendered
|
|
33
|
+
* inside a captured subtree always miss and render live — inner output is
|
|
34
|
+
* baked flat into the outer entry, which is exactly the nesting clamp of
|
|
35
|
+
* design/45 §Nesting Semantics. The capture pass detects and reports the
|
|
36
|
+
* clamp (and fails cyclic entries) via capture-state.ts.
|
|
37
|
+
*
|
|
38
|
+
* Error policy (design/44 §Build-Phase Error Handling):
|
|
39
|
+
* - `BuildTimeContextError` (cookies/headers/searchParams at build time)
|
|
40
|
+
* → HARD error; the caller must fail the build.
|
|
41
|
+
* - Anything else (bad data, deny(), cycles, timeouts, revival failures)
|
|
42
|
+
* → skip that entry, warn, keep building.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
import { createElement } from 'react';
|
|
46
|
+
|
|
47
|
+
import { requestContextAls } from './als-registry.ts';
|
|
48
|
+
import type { CoercedParams } from '../shared/param-value.ts';
|
|
49
|
+
import { ParamCoercionError } from './param-coercion.ts';
|
|
50
|
+
import { SlotOutlet } from '../client/slot-outlet.tsx';
|
|
51
|
+
import { coerceSegmentParams } from './param-coercion.ts';
|
|
52
|
+
import { isDenySignal, isRedirectSignal } from './primitives.ts';
|
|
53
|
+
import {
|
|
54
|
+
beginCapture,
|
|
55
|
+
endCapture,
|
|
56
|
+
PrebuiltCaptureCycleError,
|
|
57
|
+
type NestedWrapperRender,
|
|
58
|
+
} from './prebuilt/capture-state.ts';
|
|
59
|
+
import { computeComponentCacheKey } from './prebuilt/cache-key.ts';
|
|
60
|
+
import { LAYOUT_CHILDREN_SLOT } from './prebuilt/slots.ts';
|
|
61
|
+
import { BuildTimeContextError, createBuildTimeStore } from './prebuilt/synthetic-store.ts';
|
|
62
|
+
import {
|
|
63
|
+
getPrebuiltRegistration,
|
|
64
|
+
type PrebuiltComponentOptions,
|
|
65
|
+
type PrebuiltRegistration,
|
|
66
|
+
} from './prebuilt-runtime.ts';
|
|
67
|
+
import { createRouteMatcher } from './route-matcher.ts';
|
|
68
|
+
import type { ManifestFile, ManifestRoot, ManifestSegmentNode } from './route-matcher.ts';
|
|
69
|
+
import { createFromReadableStream, renderToReadableStream } from '../rsc-runtime/rsc.ts';
|
|
70
|
+
import { loadModule } from './safe-load.ts';
|
|
71
|
+
import { hasDynamicSegments, resolvePathWithParams } from './sitemap-generator.ts';
|
|
72
|
+
|
|
73
|
+
// ─── Types ────────────────────────────────────────────────────────────────
|
|
74
|
+
|
|
75
|
+
/** One captured flight payload, ready for the caller's persistence sink. */
|
|
76
|
+
export interface CapturedEntry {
|
|
77
|
+
componentId: string;
|
|
78
|
+
/** `computeComponentCacheKey(callSiteProps, coercedParams)` — names the .flight file. */
|
|
79
|
+
cacheKey: string;
|
|
80
|
+
/** The param combo — manifest metadata, not the hash input. */
|
|
81
|
+
params: CoercedParams;
|
|
82
|
+
/** Call-site props used for this entry (empty object for zero-prop usages). */
|
|
83
|
+
props?: Record<string, unknown>;
|
|
84
|
+
bytes: Uint8Array;
|
|
85
|
+
/** Resolved tags from callsite options — static or function-form, evaluated at capture time. */
|
|
86
|
+
tags?: string[];
|
|
87
|
+
/** Component does not read segment params — cache key uses `{}`. */
|
|
88
|
+
paramIndependent?: boolean;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** A per-entry problem — either a skip (build continues) or a hard error. */
|
|
92
|
+
export interface CaptureIssue {
|
|
93
|
+
componentId: string;
|
|
94
|
+
routeUrlPath: string;
|
|
95
|
+
params: CoercedParams;
|
|
96
|
+
message: string;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface CaptureSummary {
|
|
100
|
+
/** Entries captured, smoke-revived, and accepted by the sink. */
|
|
101
|
+
captured: number;
|
|
102
|
+
/** Skipped entries — reported, build continues (design/44 policy). */
|
|
103
|
+
skipped: CaptureIssue[];
|
|
104
|
+
/** Dynamic-context violations — the caller MUST fail the build. */
|
|
105
|
+
hardErrors: CaptureIssue[];
|
|
106
|
+
/** Nesting-clamp warnings emitted (design/45 §Nesting Semantics). */
|
|
107
|
+
nestingWarnings: number;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface CaptureOptions {
|
|
111
|
+
/**
|
|
112
|
+
* Route file path (page or layout, absolute) → prebuilt component IDs
|
|
113
|
+
* transitively reachable from it. Computed by the timber-prebuilt
|
|
114
|
+
* plugin's RSC module-graph walk at generateBundle time.
|
|
115
|
+
*/
|
|
116
|
+
fileComponentMap: Record<string, string[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Component ID → array of distinct static call-site prop objects captured
|
|
119
|
+
* from JSX usage sites (design/44 §Props Derivation). Each entry renders
|
|
120
|
+
* one payload per (props, params) combination. Components with no captured
|
|
121
|
+
* props (zero-prop usages) render with `{}` — the pre-TIM-1142 behavior.
|
|
122
|
+
*/
|
|
123
|
+
callSiteProps?: Record<string, Record<string, unknown>[]>;
|
|
124
|
+
/**
|
|
125
|
+
* Persistence sink, called once per accepted payload. Throws propagate
|
|
126
|
+
* and abort the capture — a failed artifact write is an infrastructure
|
|
127
|
+
* failure, not a per-entry data problem.
|
|
128
|
+
*/
|
|
129
|
+
onEntry: (entry: CapturedEntry) => Promise<void>;
|
|
130
|
+
/**
|
|
131
|
+
* Component ID → built chunk file name (or URL) for declaring modules
|
|
132
|
+
* behind dynamic imports. The capture pass imports these to trigger
|
|
133
|
+
* cache.component() registration before rendering.
|
|
134
|
+
*/
|
|
135
|
+
lazyChunks?: Record<string, string>;
|
|
136
|
+
/** @internal Override chunk loader for testing. */
|
|
137
|
+
_loadChunk?: (chunkFile: string) => Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Per-entry ceiling on render + drain. A component that hangs (stalled
|
|
140
|
+
* fetch, unbounded recursion the cycle guard can't see) fails its entry
|
|
141
|
+
* instead of hanging the whole build — the A2 stream-read rule from
|
|
142
|
+
* design/13-security.md applied to the build process.
|
|
143
|
+
*/
|
|
144
|
+
renderTimeoutMs?: number;
|
|
145
|
+
/** Progress/warning logger. Defaults to console.warn. */
|
|
146
|
+
log?: (message: string) => void;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const DEFAULT_RENDER_TIMEOUT_MS = 30_000;
|
|
150
|
+
|
|
151
|
+
// ─── Route collection ─────────────────────────────────────────────────────
|
|
152
|
+
|
|
153
|
+
interface CandidateRoute {
|
|
154
|
+
urlPath: string;
|
|
155
|
+
page: ManifestFile;
|
|
156
|
+
/** Layout files along the chain that declare prebuilt components. */
|
|
157
|
+
layoutsToLoad: ManifestFile[];
|
|
158
|
+
/** Component IDs attributed to this route's page + layout chain. */
|
|
159
|
+
componentIds: string[];
|
|
160
|
+
/** Component IDs from layout files (receive SlotOutlet as children). */
|
|
161
|
+
layoutComponentIds: Set<string>;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Walk the manifest tree and collect pages whose file chain (page +
|
|
166
|
+
* layouts above it) has prebuilt components attributed to it. Slots and
|
|
167
|
+
* intercepting/private segments are not walked — slot-scoped prebuilt is
|
|
168
|
+
* already unkeyable at request time when slot params diverge (see
|
|
169
|
+
* resolveKeyParams in prebuilt-runtime.ts), so the build doesn't model
|
|
170
|
+
* slots either.
|
|
171
|
+
*/
|
|
172
|
+
function collectCandidateRoutes(
|
|
173
|
+
root: ManifestSegmentNode,
|
|
174
|
+
fileComponentMap: Record<string, string[]>
|
|
175
|
+
): CandidateRoute[] {
|
|
176
|
+
const routes: CandidateRoute[] = [];
|
|
177
|
+
|
|
178
|
+
const walk = (node: ManifestSegmentNode, layoutChain: ManifestFile[]) => {
|
|
179
|
+
if (node.segmentType === 'intercepting' || node.segmentType === 'private') return;
|
|
180
|
+
const chain = node.layout ? [...layoutChain, node.layout] : layoutChain;
|
|
181
|
+
|
|
182
|
+
if (node.page) {
|
|
183
|
+
const componentIds = new Set<string>();
|
|
184
|
+
const layoutIds = new Set<string>();
|
|
185
|
+
for (const f of chain)
|
|
186
|
+
for (const id of fileComponentMap[f.filePath] ?? []) {
|
|
187
|
+
componentIds.add(id);
|
|
188
|
+
layoutIds.add(id);
|
|
189
|
+
}
|
|
190
|
+
for (const id of fileComponentMap[node.page.filePath] ?? []) componentIds.add(id);
|
|
191
|
+
if (componentIds.size > 0) {
|
|
192
|
+
routes.push({
|
|
193
|
+
urlPath: node.urlPath,
|
|
194
|
+
page: node.page,
|
|
195
|
+
layoutsToLoad: chain.filter((l) => (fileComponentMap[l.filePath] ?? []).length > 0),
|
|
196
|
+
componentIds: Array.from(componentIds),
|
|
197
|
+
layoutComponentIds: layoutIds,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
for (const child of node.children) walk(child, chain);
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
walk(root, []);
|
|
206
|
+
return routes;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// ─── Lazy chunk loading ───────────────────────────────────────────────────
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Import a built chunk to trigger its cache.component() registrations.
|
|
213
|
+
* Resolves relative paths against this module's URL (works when bundled
|
|
214
|
+
* into rsc/index.js — chunks sit in sibling directories).
|
|
215
|
+
*/
|
|
216
|
+
async function loadLazyChunk(chunkFile: string): Promise<void> {
|
|
217
|
+
const url = /^[a-z]+:/i.test(chunkFile) ? chunkFile : new URL(chunkFile, import.meta.url).href;
|
|
218
|
+
await import(/* @vite-ignore */ url);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// ─── Param enumeration ────────────────────────────────────────────────────
|
|
222
|
+
|
|
223
|
+
type ParamCombo = CoercedParams;
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Resolve the param combos to capture for a route. Static routes have
|
|
227
|
+
* exactly one combo (the empty record) — `export const prerender`-style
|
|
228
|
+
* components on static pages need no enumerator. Dynamic routes require
|
|
229
|
+
* `generateStaticSegmentParams` (design/44 §generateStaticSegmentParams);
|
|
230
|
+
* without it every request renders live and the wrapper is a no-op.
|
|
231
|
+
*/
|
|
232
|
+
async function enumerateCombos(
|
|
233
|
+
route: CandidateRoute,
|
|
234
|
+
pageModule: Record<string, unknown>,
|
|
235
|
+
log: (message: string) => void
|
|
236
|
+
): Promise<ParamCombo[] | null> {
|
|
237
|
+
if (!hasDynamicSegments(route.urlPath)) return [{}];
|
|
238
|
+
|
|
239
|
+
const generateFn = pageModule.generateStaticSegmentParams;
|
|
240
|
+
if (typeof generateFn !== 'function') {
|
|
241
|
+
log(
|
|
242
|
+
`[timber] cache.component: route ${route.urlPath} has prebuilt components but no ` +
|
|
243
|
+
`generateStaticSegmentParams export — all its entries will render dynamically ` +
|
|
244
|
+
`until the page declares its param combos`
|
|
245
|
+
);
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
const combos: unknown = await (generateFn as () => unknown)();
|
|
249
|
+
if (!Array.isArray(combos)) {
|
|
250
|
+
throw new Error(
|
|
251
|
+
`generateStaticSegmentParams must return an array of param records, got ${typeof combos}`
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
return combos as ParamCombo[];
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// ─── Rendering ────────────────────────────────────────────────────────────
|
|
258
|
+
|
|
259
|
+
function concatChunks(chunks: Uint8Array[]): Uint8Array {
|
|
260
|
+
let total = 0;
|
|
261
|
+
for (const c of chunks) total += c.byteLength;
|
|
262
|
+
const out = new Uint8Array(total);
|
|
263
|
+
let off = 0;
|
|
264
|
+
for (const c of chunks) {
|
|
265
|
+
out.set(c, off);
|
|
266
|
+
off += c.byteLength;
|
|
267
|
+
}
|
|
268
|
+
return out;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Drain a flight stream to completion under a deadline. On timeout the
|
|
273
|
+
* reader is cancelled (never abandoned mid-read — design/13 A2/A3) and
|
|
274
|
+
* the entry fails.
|
|
275
|
+
*/
|
|
276
|
+
async function drainWithTimeout(
|
|
277
|
+
stream: ReadableStream<Uint8Array>,
|
|
278
|
+
timeoutMs: number
|
|
279
|
+
): Promise<Uint8Array> {
|
|
280
|
+
const reader = stream.getReader();
|
|
281
|
+
const chunks: Uint8Array[] = [];
|
|
282
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
283
|
+
let timedOut = false;
|
|
284
|
+
const deadline = new Promise<never>((_, reject) => {
|
|
285
|
+
timer = setTimeout(() => {
|
|
286
|
+
timedOut = true;
|
|
287
|
+
reject(new Error(`render did not complete within ${timeoutMs}ms`));
|
|
288
|
+
}, timeoutMs);
|
|
289
|
+
});
|
|
290
|
+
try {
|
|
291
|
+
for (;;) {
|
|
292
|
+
const { done, value } = await Promise.race([reader.read(), deadline]);
|
|
293
|
+
if (done) break;
|
|
294
|
+
chunks.push(value as Uint8Array);
|
|
295
|
+
}
|
|
296
|
+
} finally {
|
|
297
|
+
clearTimeout(timer);
|
|
298
|
+
if (timedOut) await reader.cancel().catch(() => {});
|
|
299
|
+
}
|
|
300
|
+
return concatChunks(chunks);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/** Wrap payload bytes as a single-chunk stream for the smoke revival. */
|
|
304
|
+
function bytesToStream(bytes: Uint8Array): ReadableStream<Uint8Array> {
|
|
305
|
+
return new ReadableStream({
|
|
306
|
+
start(c) {
|
|
307
|
+
c.enqueue(bytes);
|
|
308
|
+
c.close();
|
|
309
|
+
},
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* View of a registered component that satisfies createElement — same
|
|
315
|
+
* narrowing rationale as prebuilt-runtime.ts.
|
|
316
|
+
*/
|
|
317
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
318
|
+
type RenderableComponent = (props: any) => React.ReactNode;
|
|
319
|
+
|
|
320
|
+
interface EntryOutcome {
|
|
321
|
+
bytes: Uint8Array | null;
|
|
322
|
+
failure: unknown;
|
|
323
|
+
nested: NestedWrapperRender[];
|
|
324
|
+
resolvedTags: string[] | undefined;
|
|
325
|
+
segmentParamsRead: boolean;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Render one (component, props, coerced-params) entry in isolation and drain
|
|
330
|
+
* its flight payload. Any `onError` during serialization fails the entry —
|
|
331
|
+
* a payload with an embedded error row would replay that error on every
|
|
332
|
+
* future request, so only fully clean renders are captured.
|
|
333
|
+
*/
|
|
334
|
+
async function renderEntry(
|
|
335
|
+
registration: PrebuiltRegistration,
|
|
336
|
+
props: Record<string, unknown>,
|
|
337
|
+
coercedParams: CoercedParams,
|
|
338
|
+
timeoutMs: number,
|
|
339
|
+
isLayout: boolean
|
|
340
|
+
): Promise<EntryOutcome> {
|
|
341
|
+
const storeHandle = createBuildTimeStore(registration.id, coercedParams);
|
|
342
|
+
const { store, violations } = storeHandle;
|
|
343
|
+
let failure: unknown = null;
|
|
344
|
+
|
|
345
|
+
beginCapture(registration.id);
|
|
346
|
+
let bytes: Uint8Array | null = null;
|
|
347
|
+
let resolvedTags: string[] | undefined;
|
|
348
|
+
let nested: NestedWrapperRender[];
|
|
349
|
+
try {
|
|
350
|
+
// Render AND drain inside one ALS scope: flight executes components
|
|
351
|
+
// lazily as the stream is pulled, and each pull must still see the
|
|
352
|
+
// synthetic store (segmentParams.get() inside the component).
|
|
353
|
+
// Tag resolution also runs inside this scope so function-form tags
|
|
354
|
+
// that read segment params see the synthetic store (codex P2 on PR #858).
|
|
355
|
+
// Layout captures get <SlotOutlet slot="children" /> as children so
|
|
356
|
+
// the cached payload has a context-driven hole (design/45, TIM-1181).
|
|
357
|
+
const renderProps =
|
|
358
|
+
isLayout && !('children' in props)
|
|
359
|
+
? { ...props, children: createElement(SlotOutlet, { slot: LAYOUT_CHILDREN_SLOT }) }
|
|
360
|
+
: props;
|
|
361
|
+
bytes = await requestContextAls.run(store, async () => {
|
|
362
|
+
const stream = renderToReadableStream(
|
|
363
|
+
createElement(registration.component as RenderableComponent, renderProps),
|
|
364
|
+
{
|
|
365
|
+
onError(error: unknown) {
|
|
366
|
+
failure ??= error ?? new Error('unknown render error');
|
|
367
|
+
// Digest string keeps flight from warning about a missing
|
|
368
|
+
// digest; the payload is discarded because `failure` is set.
|
|
369
|
+
return 'timber-prebuilt-capture-error';
|
|
370
|
+
},
|
|
371
|
+
}
|
|
372
|
+
);
|
|
373
|
+
const drained = await drainWithTimeout(stream, timeoutMs);
|
|
374
|
+
resolvedTags = resolveCapturedTags(registration.options, props);
|
|
375
|
+
return drained;
|
|
376
|
+
});
|
|
377
|
+
} catch (error) {
|
|
378
|
+
// Sync component throw (renderToReadableStream creation), drain
|
|
379
|
+
// timeout, or stream error.
|
|
380
|
+
failure ??= error;
|
|
381
|
+
} finally {
|
|
382
|
+
nested = endCapture();
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// Side-channel check FIRST: a component that touched per-request context
|
|
386
|
+
// is a hard error even when it caught the throw and rendered a fallback —
|
|
387
|
+
// accepting that payload would bake the request-dependent branch for
|
|
388
|
+
// every future request (codex P1 on PR #836).
|
|
389
|
+
const { segmentParamsRead } = storeHandle;
|
|
390
|
+
if (violations.length > 0)
|
|
391
|
+
return { bytes: null, failure: violations[0], nested, resolvedTags, segmentParamsRead };
|
|
392
|
+
if (failure !== null) return { bytes: null, failure, nested, resolvedTags, segmentParamsRead };
|
|
393
|
+
return { bytes, failure: null, nested, resolvedTags, segmentParamsRead };
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/** Human-readable classification for a failed entry. */
|
|
397
|
+
function describeFailure(error: unknown): string {
|
|
398
|
+
if (isDenySignal(error)) return `component called deny(${error.status})`;
|
|
399
|
+
if (isRedirectSignal(error)) return `component called redirect("${error.location}")`;
|
|
400
|
+
if (error instanceof Error) return error.message;
|
|
401
|
+
return String(error);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// ─── Nesting clamp warnings (design/45 §Nesting Semantics) ────────────────
|
|
405
|
+
|
|
406
|
+
/** Render a lifetime declaration for the clamp warning. */
|
|
407
|
+
function describeLifetime(options: PrebuiltComponentOptions): string {
|
|
408
|
+
const parts: string[] = [];
|
|
409
|
+
if (options.prerender) parts.push('prerender');
|
|
410
|
+
if (options.ttl !== undefined) parts.push(`ttl: ${options.ttl}`);
|
|
411
|
+
if (options.tags !== undefined) {
|
|
412
|
+
parts.push(
|
|
413
|
+
typeof options.tags === 'function' ? 'tags: fn' : `tags: ${JSON.stringify(options.tags)}`
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
return parts.join(', ') || 'no lifetime';
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Warn when an inner wrapped component declares a refresh channel the
|
|
421
|
+
* enclosing prerendered entry cannot honor. The outer here is always
|
|
422
|
+
* prerender-tier (that's all the build captures), whose effective
|
|
423
|
+
* lifetime is deploy-long with no tags — so ANY inner ttl/tags warns.
|
|
424
|
+
* Once per (outer, inner) pair per build.
|
|
425
|
+
*/
|
|
426
|
+
function warnNestingClamps(
|
|
427
|
+
outerId: string,
|
|
428
|
+
nested: NestedWrapperRender[],
|
|
429
|
+
warnedPairs: Set<string>,
|
|
430
|
+
log: (message: string) => void
|
|
431
|
+
): number {
|
|
432
|
+
let count = 0;
|
|
433
|
+
for (const { innerId, options } of nested) {
|
|
434
|
+
if (options.ttl === undefined && options.tags === undefined) continue;
|
|
435
|
+
const pairKey = `${outerId} ${innerId}`;
|
|
436
|
+
if (warnedPairs.has(pairKey)) continue;
|
|
437
|
+
warnedPairs.add(pairKey);
|
|
438
|
+
count++;
|
|
439
|
+
log(
|
|
440
|
+
`[timber] ${innerId} (${describeLifetime(options)}) is embedded in prerendered ` +
|
|
441
|
+
`${outerId} — the embedded copy refreshes only when ${outerId} does (on redeploy). ` +
|
|
442
|
+
`Runtime revalidation will NOT update the embedded copy; tag ${outerId} itself if ` +
|
|
443
|
+
`you need that. Chain: ${outerId} (prerender) → ${innerId} (${describeLifetime(options)})`
|
|
444
|
+
);
|
|
445
|
+
}
|
|
446
|
+
return count;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// ─── Capture orchestration ────────────────────────────────────────────────
|
|
450
|
+
|
|
451
|
+
/** Resolve tags from callsite options — static arrays pass through, function tags are evaluated with the capture-time props. */
|
|
452
|
+
function resolveCapturedTags(
|
|
453
|
+
options: PrebuiltComponentOptions,
|
|
454
|
+
props: Record<string, unknown>
|
|
455
|
+
): string[] | undefined {
|
|
456
|
+
if (!options.tags) return undefined;
|
|
457
|
+
const resolved = typeof options.tags === 'function' ? options.tags(props) : options.tags;
|
|
458
|
+
return resolved.length > 0 ? resolved : undefined;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/** Buffered entry pending the param-independence decision (TIM-1175). */
|
|
462
|
+
interface PendingEntry {
|
|
463
|
+
callSiteProps: Record<string, unknown>;
|
|
464
|
+
cacheKey: string;
|
|
465
|
+
combo: ParamCombo;
|
|
466
|
+
bytes: Uint8Array;
|
|
467
|
+
tags: string[] | undefined;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
function pendingToCapturedEntry(componentId: string, entry: PendingEntry): CapturedEntry {
|
|
471
|
+
const hasProps = Object.keys(entry.callSiteProps).length > 0;
|
|
472
|
+
return {
|
|
473
|
+
componentId,
|
|
474
|
+
cacheKey: entry.cacheKey,
|
|
475
|
+
params: entry.combo,
|
|
476
|
+
...(hasProps ? { props: entry.callSiteProps } : {}),
|
|
477
|
+
bytes: entry.bytes,
|
|
478
|
+
tags: entry.tags,
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Capture flight payloads for every attributed, registered, prerender-tier
|
|
484
|
+
* component across the route manifest. See module docblock for the flow.
|
|
485
|
+
*/
|
|
486
|
+
export async function capturePrebuiltPayloads(
|
|
487
|
+
manifest: ManifestRoot,
|
|
488
|
+
options: CaptureOptions
|
|
489
|
+
): Promise<CaptureSummary> {
|
|
490
|
+
const log = options.log ?? ((message: string) => console.warn(message));
|
|
491
|
+
const timeoutMs = options.renderTimeoutMs ?? DEFAULT_RENDER_TIMEOUT_MS;
|
|
492
|
+
const matchRoute = createRouteMatcher(manifest);
|
|
493
|
+
|
|
494
|
+
const summary: CaptureSummary = { captured: 0, skipped: [], hardErrors: [], nestingWarnings: 0 };
|
|
495
|
+
const seenEntries = new Set<string>();
|
|
496
|
+
const warnedPairs = new Set<string>();
|
|
497
|
+
const reportedMissingRegistrations = new Set<string>();
|
|
498
|
+
const eagerLoadedChunks = new Set<string>();
|
|
499
|
+
// Components already emitted as param-independent — skip on second route.
|
|
500
|
+
const emittedParamIndependent = new Set<string>();
|
|
501
|
+
// (componentId, propsKey) pairs that rendered at least once without
|
|
502
|
+
// reading segment params. Segment param access is structural (the
|
|
503
|
+
// component either calls getSegmentParams() or it doesn't), so if the
|
|
504
|
+
// first combo doesn't trigger it, subsequent combos won't either —
|
|
505
|
+
// skip them to avoid redundant renders. Tracked per props set so a
|
|
506
|
+
// failed variant doesn't suppress retries for a different variant.
|
|
507
|
+
const provenParamIndependent = new Set<string>();
|
|
508
|
+
// Per-component: whether ANY combo read segmentParams, plus buffered
|
|
509
|
+
// entries awaiting the param-independence decision after all combos.
|
|
510
|
+
const pendingByComponent = new Map<string, { anyParamRead: boolean; entries: PendingEntry[] }>();
|
|
511
|
+
|
|
512
|
+
const skip = (issue: CaptureIssue) => {
|
|
513
|
+
summary.skipped.push(issue);
|
|
514
|
+
log(
|
|
515
|
+
`[timber] cache.component skipped "${issue.componentId}" for ${issue.routeUrlPath} ` +
|
|
516
|
+
`${JSON.stringify(issue.params)} — ${issue.message}`
|
|
517
|
+
);
|
|
518
|
+
};
|
|
519
|
+
|
|
520
|
+
for (const route of collectCandidateRoutes(manifest.root, options.fileComponentMap)) {
|
|
521
|
+
// Load the page + prebuilt-declaring layout modules. Evaluation is what
|
|
522
|
+
// registers module-scope __prebuilt components (design/44 §Registration).
|
|
523
|
+
let pageModule: Record<string, unknown>;
|
|
524
|
+
try {
|
|
525
|
+
pageModule = await loadModule(route.page);
|
|
526
|
+
for (const layout of route.layoutsToLoad) await loadModule(layout);
|
|
527
|
+
} catch (error) {
|
|
528
|
+
for (const componentId of route.componentIds) {
|
|
529
|
+
skip({
|
|
530
|
+
componentId,
|
|
531
|
+
routeUrlPath: route.urlPath,
|
|
532
|
+
params: {},
|
|
533
|
+
message: describeFailure(error),
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
let combos: ParamCombo[] | null;
|
|
540
|
+
try {
|
|
541
|
+
combos = await enumerateCombos(route, pageModule, log);
|
|
542
|
+
} catch (error) {
|
|
543
|
+
for (const componentId of route.componentIds) {
|
|
544
|
+
skip({
|
|
545
|
+
componentId,
|
|
546
|
+
routeUrlPath: route.urlPath,
|
|
547
|
+
params: {},
|
|
548
|
+
message: describeFailure(error),
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
if (combos === null) continue;
|
|
554
|
+
|
|
555
|
+
for (const combo of combos) {
|
|
556
|
+
if (combo === null || typeof combo !== 'object' || Array.isArray(combo)) {
|
|
557
|
+
skip({
|
|
558
|
+
componentId: route.componentIds[0],
|
|
559
|
+
routeUrlPath: route.urlPath,
|
|
560
|
+
params: {},
|
|
561
|
+
message: `generateStaticSegmentParams returned a non-object combo: ${JSON.stringify(combo)}`,
|
|
562
|
+
});
|
|
563
|
+
continue;
|
|
564
|
+
}
|
|
565
|
+
// Reconstruct the URL and run the request-time matcher + coercion so
|
|
566
|
+
// the params record — and therefore the cache key — is byte-identical
|
|
567
|
+
// to what a live request for this combo produces.
|
|
568
|
+
const path = resolvePathWithParams(route.urlPath, combo);
|
|
569
|
+
if (path === null) {
|
|
570
|
+
skip({
|
|
571
|
+
componentId: route.componentIds[0],
|
|
572
|
+
routeUrlPath: route.urlPath,
|
|
573
|
+
params: combo,
|
|
574
|
+
message: 'param combo is missing a required dynamic segment value',
|
|
575
|
+
});
|
|
576
|
+
continue;
|
|
577
|
+
}
|
|
578
|
+
const match = matchRoute(path);
|
|
579
|
+
if (
|
|
580
|
+
!match ||
|
|
581
|
+
match.segments[match.segments.length - 1]?.page?.filePath !== route.page.filePath
|
|
582
|
+
) {
|
|
583
|
+
skip({
|
|
584
|
+
componentId: route.componentIds[0],
|
|
585
|
+
routeUrlPath: route.urlPath,
|
|
586
|
+
params: combo,
|
|
587
|
+
message: `resolved URL "${path}" does not match this route (another route shadows it)`,
|
|
588
|
+
});
|
|
589
|
+
continue;
|
|
590
|
+
}
|
|
591
|
+
try {
|
|
592
|
+
await coerceSegmentParams(match);
|
|
593
|
+
} catch (error) {
|
|
594
|
+
skip({
|
|
595
|
+
componentId: route.componentIds[0],
|
|
596
|
+
routeUrlPath: route.urlPath,
|
|
597
|
+
params: combo,
|
|
598
|
+
message:
|
|
599
|
+
error instanceof ParamCoercionError
|
|
600
|
+
? `param coercion rejected the combo: ${error.message}`
|
|
601
|
+
: describeFailure(error),
|
|
602
|
+
});
|
|
603
|
+
continue;
|
|
604
|
+
}
|
|
605
|
+
const coercedParams = match.segmentParams;
|
|
606
|
+
|
|
607
|
+
for (const componentId of route.componentIds) {
|
|
608
|
+
let registration = getPrebuiltRegistration(componentId);
|
|
609
|
+
if (!registration) {
|
|
610
|
+
const chunkFile = options.lazyChunks?.[componentId];
|
|
611
|
+
if (chunkFile && !eagerLoadedChunks.has(chunkFile)) {
|
|
612
|
+
eagerLoadedChunks.add(chunkFile);
|
|
613
|
+
try {
|
|
614
|
+
await (options._loadChunk ?? loadLazyChunk)(chunkFile);
|
|
615
|
+
} catch {
|
|
616
|
+
// Fall through — skip below will report.
|
|
617
|
+
}
|
|
618
|
+
registration = getPrebuiltRegistration(componentId);
|
|
619
|
+
}
|
|
620
|
+
if (!registration) {
|
|
621
|
+
if (!reportedMissingRegistrations.has(componentId)) {
|
|
622
|
+
reportedMissingRegistrations.add(componentId);
|
|
623
|
+
skip({
|
|
624
|
+
componentId,
|
|
625
|
+
routeUrlPath: route.urlPath,
|
|
626
|
+
params: combo,
|
|
627
|
+
message:
|
|
628
|
+
'attributed to this route but never registered at module load — the ' +
|
|
629
|
+
'declaring module is probably loaded via dynamic import; it will render live',
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
continue;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
// Runtime tier (ttl/tags without prerender) does no build work.
|
|
636
|
+
if (registration.options.prerender !== true) continue;
|
|
637
|
+
// Already emitted as param-independent from a prior route.
|
|
638
|
+
if (emittedParamIndependent.has(componentId)) continue;
|
|
639
|
+
|
|
640
|
+
// One entry per distinct call-site props object (design/44 §Props
|
|
641
|
+
// Derivation, TIM-1142). When no call-site props were captured,
|
|
642
|
+
// render with empty props (the pre-TIM-1142 behavior). When
|
|
643
|
+
// captured props exist, render ONLY those — a spurious {} render
|
|
644
|
+
// on a component that always receives props could hit a throw
|
|
645
|
+
// path (e.g., required prop access) and fail the build for a
|
|
646
|
+
// shape no JSX call site actually uses.
|
|
647
|
+
const capturedProps = options.callSiteProps?.[componentId];
|
|
648
|
+
const propsSets: Record<string, unknown>[] =
|
|
649
|
+
capturedProps && capturedProps.length > 0 ? [...capturedProps] : [{}];
|
|
650
|
+
|
|
651
|
+
let pending = pendingByComponent.get(componentId);
|
|
652
|
+
if (!pending) {
|
|
653
|
+
pending = { anyParamRead: false, entries: [] };
|
|
654
|
+
pendingByComponent.set(componentId, pending);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
for (const callSiteProps of propsSets) {
|
|
658
|
+
// Already rendered this (component, props) pair without reading
|
|
659
|
+
// params — additional combos produce identical payloads. Tracked
|
|
660
|
+
// per props set so a failed variant doesn't suppress retries.
|
|
661
|
+
// Guard on !anyParamRead: if another prop variant already proved
|
|
662
|
+
// param-dependent, this variant needs per-combo entries too since
|
|
663
|
+
// the emit phase uses a component-level paramIndependent flag.
|
|
664
|
+
const propsKey = JSON.stringify(callSiteProps);
|
|
665
|
+
const proofKey = `${componentId}\0${propsKey}`;
|
|
666
|
+
if (provenParamIndependent.has(proofKey) && !pending.anyParamRead) continue;
|
|
667
|
+
|
|
668
|
+
const cacheKey = computeComponentCacheKey(callSiteProps, coercedParams);
|
|
669
|
+
if (cacheKey === null) {
|
|
670
|
+
skip({
|
|
671
|
+
componentId,
|
|
672
|
+
routeUrlPath: route.urlPath,
|
|
673
|
+
params: combo,
|
|
674
|
+
message:
|
|
675
|
+
'coerced segment params are unkeyable (see design/44 §Cache Key) — ' +
|
|
676
|
+
'requests will always render live',
|
|
677
|
+
});
|
|
678
|
+
continue;
|
|
679
|
+
}
|
|
680
|
+
const entryKey = `${componentId} ${cacheKey}`;
|
|
681
|
+
if (seenEntries.has(entryKey)) continue;
|
|
682
|
+
seenEntries.add(entryKey);
|
|
683
|
+
|
|
684
|
+
const isLayout = route.layoutComponentIds.has(componentId);
|
|
685
|
+
const outcome = await renderEntry(
|
|
686
|
+
registration,
|
|
687
|
+
callSiteProps,
|
|
688
|
+
coercedParams,
|
|
689
|
+
timeoutMs,
|
|
690
|
+
isLayout
|
|
691
|
+
);
|
|
692
|
+
// Track param reads immediately — before any failure continue —
|
|
693
|
+
// so a combo that reads params then fails still prevents
|
|
694
|
+
// param-independent classification (codex P1 on PR #869).
|
|
695
|
+
if (outcome.segmentParamsRead) {
|
|
696
|
+
const wasParamIndep = !pending.anyParamRead;
|
|
697
|
+
pending.anyParamRead = true;
|
|
698
|
+
provenParamIndependent.delete(proofKey);
|
|
699
|
+
// Flush buffered entries immediately — they're confirmed
|
|
700
|
+
// param-dependent and don't need to wait for the emit phase.
|
|
701
|
+
// Avoids retaining all combo payloads in memory (TIM-1179).
|
|
702
|
+
if (wasParamIndep) {
|
|
703
|
+
for (const buffered of pending.entries) {
|
|
704
|
+
await options.onEntry(pendingToCapturedEntry(componentId, buffered));
|
|
705
|
+
summary.captured++;
|
|
706
|
+
}
|
|
707
|
+
pending.entries = [];
|
|
708
|
+
}
|
|
709
|
+
} else if (outcome.failure === null && !pending.anyParamRead) {
|
|
710
|
+
provenParamIndependent.add(proofKey);
|
|
711
|
+
}
|
|
712
|
+
summary.nestingWarnings += warnNestingClamps(
|
|
713
|
+
componentId,
|
|
714
|
+
outcome.nested,
|
|
715
|
+
warnedPairs,
|
|
716
|
+
log
|
|
717
|
+
);
|
|
718
|
+
|
|
719
|
+
if (outcome.failure !== null) {
|
|
720
|
+
const issue: CaptureIssue = {
|
|
721
|
+
componentId,
|
|
722
|
+
routeUrlPath: route.urlPath,
|
|
723
|
+
params: combo,
|
|
724
|
+
message: describeFailure(outcome.failure),
|
|
725
|
+
};
|
|
726
|
+
if (outcome.failure instanceof BuildTimeContextError) {
|
|
727
|
+
summary.hardErrors.push(issue);
|
|
728
|
+
log(`[timber] BUILD ERROR: ${issue.message}`);
|
|
729
|
+
} else {
|
|
730
|
+
skip(issue);
|
|
731
|
+
}
|
|
732
|
+
continue;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
// Write-time integrity: revive the captured bytes once, exactly the
|
|
736
|
+
// way the request path will, before accepting them. Corrupt or
|
|
737
|
+
// truncated captures fail HERE, at build time — the request path
|
|
738
|
+
// trusts artifacts the way it trusts JS chunks in the same deploy.
|
|
739
|
+
try {
|
|
740
|
+
await createFromReadableStream(bytesToStream(outcome.bytes!));
|
|
741
|
+
} catch (error) {
|
|
742
|
+
skip({
|
|
743
|
+
componentId,
|
|
744
|
+
routeUrlPath: route.urlPath,
|
|
745
|
+
params: combo,
|
|
746
|
+
message: `captured payload failed smoke revival: ${describeFailure(error)}`,
|
|
747
|
+
});
|
|
748
|
+
continue;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
// Once param-dependent is confirmed, emit directly instead of
|
|
752
|
+
// buffering — no need to hold bytes in memory (TIM-1179).
|
|
753
|
+
if (pending.anyParamRead) {
|
|
754
|
+
await options.onEntry(
|
|
755
|
+
pendingToCapturedEntry(componentId, {
|
|
756
|
+
callSiteProps,
|
|
757
|
+
cacheKey,
|
|
758
|
+
combo,
|
|
759
|
+
bytes: outcome.bytes!,
|
|
760
|
+
tags: outcome.resolvedTags,
|
|
761
|
+
})
|
|
762
|
+
);
|
|
763
|
+
summary.captured++;
|
|
764
|
+
} else {
|
|
765
|
+
pending.entries.push({
|
|
766
|
+
callSiteProps,
|
|
767
|
+
cacheKey,
|
|
768
|
+
combo,
|
|
769
|
+
bytes: outcome.bytes!,
|
|
770
|
+
tags: outcome.resolvedTags,
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
// Emit remaining buffered entries — only param-independent components
|
|
779
|
+
// still have entries here (param-dependent entries were emitted eagerly
|
|
780
|
+
// above, TIM-1179). Collapse to one entry per props set (TIM-1175).
|
|
781
|
+
for (const [componentId, pending] of pendingByComponent) {
|
|
782
|
+
if (pending.entries.length === 0) continue;
|
|
783
|
+
emittedParamIndependent.add(componentId);
|
|
784
|
+
const emittedProps = new Set<string>();
|
|
785
|
+
for (const entry of pending.entries) {
|
|
786
|
+
const propsKey = JSON.stringify(entry.callSiteProps);
|
|
787
|
+
if (emittedProps.has(propsKey)) continue;
|
|
788
|
+
emittedProps.add(propsKey);
|
|
789
|
+
const hasProps = Object.keys(entry.callSiteProps).length > 0;
|
|
790
|
+
await options.onEntry({
|
|
791
|
+
componentId,
|
|
792
|
+
cacheKey: computeComponentCacheKey(entry.callSiteProps, {}) ?? entry.cacheKey,
|
|
793
|
+
params: {},
|
|
794
|
+
...(hasProps ? { props: entry.callSiteProps } : {}),
|
|
795
|
+
bytes: entry.bytes,
|
|
796
|
+
tags: entry.tags,
|
|
797
|
+
paramIndependent: true,
|
|
798
|
+
});
|
|
799
|
+
summary.captured++;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
return summary;
|
|
804
|
+
}
|