@timber-js/app 0.2.0-alpha.21 → 0.2.0-alpha.210
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -0
- package/agent-skill.md +346 -0
- package/bin/timber.mjs +15 -1
- package/dist/_chunks/actions-Rjk4htmA.js +1199 -0
- package/dist/_chunks/actions-Rjk4htmA.js.map +1 -0
- package/dist/_chunks/als-registry-DaxkVjt5.js +45 -0
- package/dist/_chunks/als-registry-DaxkVjt5.js.map +1 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
- package/dist/_chunks/base-path-DaQrzbez.js +80 -0
- package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
- package/dist/_chunks/build-output-helper-RV_BRcF1.js +367 -0
- package/dist/_chunks/build-output-helper-RV_BRcF1.js.map +1 -0
- package/dist/_chunks/cache-api-DGdYfNJn.js +1182 -0
- package/dist/_chunks/cache-api-DGdYfNJn.js.map +1 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
- package/dist/_chunks/chains-BoO51joc.js +413 -0
- package/dist/_chunks/chains-BoO51joc.js.map +1 -0
- package/dist/_chunks/cli-check-ajNY3B2e.js +252 -0
- package/dist/_chunks/cli-check-ajNY3B2e.js.map +1 -0
- package/dist/_chunks/cli-context-By7k2xVo.js +70 -0
- package/dist/_chunks/cli-context-By7k2xVo.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D2eI8jEg.js +299 -0
- package/dist/_chunks/cli-schema-sync-D2eI8jEg.js.map +1 -0
- package/dist/_chunks/cloudflare-Byxl8FWP.js +1333 -0
- package/dist/_chunks/cloudflare-Byxl8FWP.js.map +1 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/codegen-Bps1sLKJ.js +432 -0
- package/dist/_chunks/codegen-Bps1sLKJ.js.map +1 -0
- package/dist/_chunks/convention-lint-DLmhGsRS.js +590 -0
- package/dist/_chunks/convention-lint-DLmhGsRS.js.map +1 -0
- package/dist/_chunks/dev-server-v97rQH4b.js +2039 -0
- package/dist/_chunks/dev-server-v97rQH4b.js.map +1 -0
- package/dist/_chunks/dist-DtrJyBbw.js +386 -0
- package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
- package/dist/_chunks/error-boundary-DsNScGRM.js +1024 -0
- package/dist/_chunks/error-boundary-DsNScGRM.js.map +1 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
- package/dist/_chunks/format-BKclgVbk.js +14 -0
- package/dist/_chunks/format-BKclgVbk.js.map +1 -0
- package/dist/_chunks/fs-identity-BRKuL215.js +207 -0
- package/dist/_chunks/fs-identity-BRKuL215.js.map +1 -0
- package/dist/_chunks/graph-cache-CYiUS2aS.js +303 -0
- package/dist/_chunks/graph-cache-CYiUS2aS.js.map +1 -0
- package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
- package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
- package/dist/_chunks/json-lossy-check-CVuRs2hG.js +66 -0
- package/dist/_chunks/json-lossy-check-CVuRs2hG.js.map +1 -0
- package/dist/_chunks/live-graph-9cSnn_h9.js +150 -0
- package/dist/_chunks/live-graph-9cSnn_h9.js.map +1 -0
- package/dist/_chunks/logger-BP0LN6vP.js +662 -0
- package/dist/_chunks/logger-BP0LN6vP.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DSDjM_hJ.js} +71 -27
- package/dist/_chunks/metadata-routes-DSDjM_hJ.js.map +1 -0
- package/dist/_chunks/navigation-root-BQfo1-kG.js +126 -0
- package/dist/_chunks/navigation-root-BQfo1-kG.js.map +1 -0
- package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
- package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
- package/dist/_chunks/plugin-context-BPBPc3lL.js +345 -0
- package/dist/_chunks/plugin-context-BPBPc3lL.js.map +1 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
- package/dist/_chunks/poison-scan-vGV7Re0B.js +101 -0
- package/dist/_chunks/poison-scan-vGV7Re0B.js.map +1 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
- package/dist/_chunks/render-timeout-DOf_BBcO.js +46 -0
- package/dist/_chunks/render-timeout-DOf_BBcO.js.map +1 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
- package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
- package/dist/_chunks/rsc-payload-path-dffcs4jp.js +54 -0
- package/dist/_chunks/rsc-payload-path-dffcs4jp.js.map +1 -0
- package/dist/_chunks/scan-BoP17W3w.js +140 -0
- package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
- package/dist/_chunks/scanner-DmqdxzbW.js +2056 -0
- package/dist/_chunks/scanner-DmqdxzbW.js.map +1 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
- package/dist/_chunks/segment-context-xtPUGfdq.js +137 -0
- package/dist/_chunks/segment-context-xtPUGfdq.js.map +1 -0
- package/dist/_chunks/segment-keys-D5hu1hz4.js +62 -0
- package/dist/_chunks/segment-keys-D5hu1hz4.js.map +1 -0
- package/dist/_chunks/singleflight-BeVMMKi0.js +55 -0
- package/dist/_chunks/singleflight-BeVMMKi0.js.map +1 -0
- package/dist/_chunks/sizeof-BM1409x2.js +36 -0
- package/dist/_chunks/sizeof-BM1409x2.js.map +1 -0
- package/dist/_chunks/ssr-data-nA3I70_n.js +49 -0
- package/dist/_chunks/ssr-data-nA3I70_n.js.map +1 -0
- package/dist/_chunks/state-BhNGPsdi.js +50 -0
- package/dist/_chunks/state-BhNGPsdi.js.map +1 -0
- package/dist/_chunks/status-page-marker-BRX9Ib-d.js +564 -0
- package/dist/_chunks/status-page-marker-BRX9Ib-d.js.map +1 -0
- package/dist/_chunks/tree-match-6yihorhk.js +169 -0
- package/dist/_chunks/tree-match-6yihorhk.js.map +1 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
- package/dist/_chunks/walkers-Czu2jXFq.js +144 -0
- package/dist/_chunks/walkers-Czu2jXFq.js.map +1 -0
- package/dist/_chunks/write-file-atomic-D1qWqHb4.js +32 -0
- package/dist/_chunks/write-file-atomic-D1qWqHb4.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +72 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/canonicalize-module.d.ts +8 -0
- package/dist/adapters/canonicalize-module.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +74 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +123 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +224 -24
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -188
- package/dist/adapters/compress-module.d.ts +25 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +63 -0
- package/dist/adapters/fs-identity.d.ts.map +1 -0
- package/dist/adapters/nitro-presets.d.ts +31 -0
- package/dist/adapters/nitro-presets.d.ts.map +1 -0
- package/dist/adapters/nitro-preview.d.ts +64 -0
- package/dist/adapters/nitro-preview.d.ts.map +1 -0
- package/dist/adapters/nitro.d.ts +54 -37
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +631 -359
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +67 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +122 -16
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js +0 -0
- package/dist/analyze/chains.d.ts +124 -0
- package/dist/analyze/chains.d.ts.map +1 -0
- package/dist/analyze/classify.d.ts +151 -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 +133 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli-context.d.ts +54 -0
- package/dist/cli-context.d.ts.map +1 -0
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +85 -13
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +224 -63
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +42 -2
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/action-queue.d.ts +63 -0
- package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +53 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +26 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +41 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +28 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/deny-last-resort.d.ts +29 -0
- package/dist/client/deny-last-resort.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +58 -9
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +2 -126
- package/dist/client/error-reconstituter.d.ts +55 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/global-context.d.ts +15 -0
- package/dist/client/global-context.d.ts.map +1 -0
- package/dist/client/history.d.ts +50 -9
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +20 -33
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +330 -1150
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +20 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +792 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +85 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/location-search.d.ts +12 -0
- package/dist/client/location-search.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +133 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-commit.d.ts +111 -0
- package/dist/client/navigation-commit.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +54 -36
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +106 -0
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/navigation-transition.d.ts +192 -0
- package/dist/client/navigation-transition.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts +1 -1
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/params-context.d.ts +81 -0
- package/dist/client/params-context.d.ts.map +1 -0
- package/dist/client/react-root.d.ts +45 -0
- package/dist/client/react-root.d.ts.map +1 -0
- package/dist/client/router-effects.d.ts +137 -0
- package/dist/client/router-effects.d.ts.map +1 -0
- package/dist/client/router-lifecycle.d.ts +98 -0
- package/dist/client/router-lifecycle.d.ts.map +1 -0
- package/dist/client/router-pipeline.d.ts +84 -0
- package/dist/client/router-pipeline.d.ts.map +1 -0
- package/dist/client/router-ref.d.ts +2 -2
- package/dist/client/router-ref.d.ts.map +1 -1
- package/dist/client/router-skew.d.ts +21 -0
- package/dist/client/router-skew.d.ts.map +1 -0
- package/dist/client/router-types.d.ts +334 -0
- package/dist/client/router-types.d.ts.map +1 -0
- package/dist/client/router-url.d.ts +24 -0
- package/dist/client/router-url.d.ts.map +1 -0
- package/dist/client/router.d.ts +1 -97
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +110 -28
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +186 -25
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-context.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +68 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +15 -0
- package/dist/client/segment-update-context.d.ts.map +1 -0
- package/dist/client/shallow-url.d.ts +10 -0
- package/dist/client/shallow-url.d.ts.map +1 -0
- package/dist/client/slot-content-cache-context.d.ts +35 -0
- package/dist/client/slot-content-cache-context.d.ts.map +1 -0
- package/dist/client/slot-context.d.ts +31 -0
- package/dist/client/slot-context.d.ts.map +1 -0
- package/dist/client/slot-outlet.d.ts +16 -0
- package/dist/client/slot-outlet.d.ts.map +1 -0
- package/dist/client/slot-provider.d.ts +25 -0
- package/dist/client/slot-provider.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +26 -50
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-client.d.ts +69 -0
- package/dist/client/stale-client.d.ts.map +1 -0
- package/dist/client/state.d.ts +21 -13
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/status-page-marker.d.ts +25 -0
- package/dist/client/status-page-marker.d.ts.map +1 -0
- package/dist/client/top-loader.d.ts +7 -6
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/unload-guard.d.ts +5 -0
- package/dist/client/unload-guard.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts +12 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-link-status.d.ts +5 -5
- package/dist/client/use-link-status.d.ts.map +1 -1
- package/dist/client/use-pathname.d.ts +13 -11
- package/dist/client/use-pathname.d.ts.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +10 -4
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +15 -8
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +15 -8
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/use-segment-params.d.ts +55 -0
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +69 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +76 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +323 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +68 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/cookies/define-cookie.d.ts +58 -25
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +3 -2
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +256 -36
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +34 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +50 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +40 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/dev-page-shell.d.ts +95 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +32 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +46 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/hydration-overlay.d.ts +11 -0
- package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/dev-tools/instrumentation.d.ts +74 -0
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/{plugins/dev-error-overlay.d.ts → dev-tools/overlay.d.ts} +15 -25
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/fonts/ast-walk.d.ts +68 -0
- package/dist/fonts/ast-walk.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +112 -8
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +50 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/css.d.ts +1 -1
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/fallbacks.d.ts +0 -7
- package/dist/fonts/fallbacks.d.ts.map +1 -1
- package/dist/fonts/google.d.ts +5 -3
- package/dist/fonts/google.d.ts.map +1 -1
- package/dist/fonts/local.d.ts +5 -5
- package/dist/fonts/local.d.ts.map +1 -1
- package/dist/fonts/paths.d.ts +43 -0
- package/dist/fonts/paths.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +177 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +82 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +47 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +77 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +35 -181
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8844 -14244
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +81 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +34 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +262 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/build-manifest.d.ts +7 -3
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +61 -11
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +64 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/callsite-ast.d.ts +117 -0
- package/dist/plugins/callsite-ast.d.ts.map +1 -0
- package/dist/plugins/callsite-jsx.d.ts +35 -0
- package/dist/plugins/callsite-jsx.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +11 -4
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +40 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +21 -0
- package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-discovery.d.ts +123 -0
- package/dist/plugins/dev-discovery.d.ts.map +1 -0
- package/dist/plugins/dev-server.d.ts +24 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +28 -4
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +35 -74
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/graph-endpoint.d.ts +112 -0
- package/dist/plugins/graph-endpoint.d.ts.map +1 -0
- package/dist/plugins/mdx.d.ts +18 -5
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/post-build.d.ts +110 -0
- package/dist/plugins/post-build.d.ts.map +1 -0
- package/dist/plugins/prebuilt-capture.d.ts +67 -0
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
- package/dist/plugins/prebuilt.d.ts +98 -0
- package/dist/plugins/prebuilt.d.ts.map +1 -0
- package/dist/plugins/prerender-sugar.d.ts +39 -0
- package/dist/plugins/prerender-sugar.d.ts.map +1 -0
- package/dist/plugins/react-resolve.d.ts +49 -0
- package/dist/plugins/react-resolve.d.ts.map +1 -0
- package/dist/plugins/request-dep/analysis.d.ts +106 -0
- package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
- package/dist/plugins/request-dep/index.d.ts +75 -0
- package/dist/plugins/request-dep/index.d.ts.map +1 -0
- package/dist/plugins/request-dep/origin.d.ts +61 -0
- package/dist/plugins/request-dep/origin.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/rsc-assets-manifest.d.ts +33 -0
- package/dist/plugins/rsc-assets-manifest.d.ts.map +1 -0
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +29 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +246 -26
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +26 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +61 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen-write.d.ts +42 -0
- package/dist/routing/codegen-write.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +8 -3
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/collision-probe.d.ts +104 -0
- package/dist/routing/collision-probe.d.ts.map +1 -0
- package/dist/routing/collision-spaces.d.ts +26 -0
- package/dist/routing/collision-spaces.d.ts.map +1 -0
- package/dist/routing/convention-lint.d.ts +55 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/export-detect.d.ts +91 -0
- package/dist/routing/export-detect.d.ts.map +1 -0
- package/dist/routing/file-cache.d.ts +8 -0
- package/dist/routing/file-cache.d.ts.map +1 -0
- package/dist/routing/index.d.ts +13 -7
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +5 -2
- package/dist/routing/interception-overlap.d.ts +35 -0
- package/dist/routing/interception-overlap.d.ts.map +1 -0
- package/dist/routing/interception.d.ts +234 -10
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +105 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/manifest-codegen.d.ts +26 -0
- package/dist/routing/manifest-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +14 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/schema-validation.d.ts +35 -0
- package/dist/routing/schema-validation.d.ts.map +1 -0
- package/dist/routing/segment-classify.d.ts +114 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/segment-codegen.d.ts +38 -0
- package/dist/routing/segment-codegen.d.ts.map +1 -0
- package/dist/routing/segment-keys.d.ts +118 -0
- package/dist/routing/segment-keys.d.ts.map +1 -0
- package/dist/routing/slot-placement.d.ts +48 -0
- package/dist/routing/slot-placement.d.ts.map +1 -0
- package/dist/routing/types.d.ts +81 -26
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +57 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +14 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/rsc-runtime/transforms.d.ts +13 -0
- package/dist/rsc-runtime/transforms.d.ts.map +1 -0
- package/dist/schema-bridge.d.ts +145 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +262 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +3 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +179 -360
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/parse-total.d.ts +81 -0
- package/dist/search-params/parse-total.d.ts.map +1 -0
- package/dist/search-params/serialize-equal.d.ts +9 -0
- package/dist/search-params/serialize-equal.d.ts.map +1 -0
- package/dist/search-params/wrappers.d.ts +76 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/server/access-gate.d.ts +98 -10
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +44 -9
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +40 -5
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +78 -40
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +166 -16
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +25 -30
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/canonicalize.d.ts +10 -0
- package/dist/server/canonicalize.d.ts.map +1 -1
- package/dist/server/chain-url-parts.d.ts +82 -0
- package/dist/server/chain-url-parts.d.ts.map +1 -0
- package/dist/server/children-interception.d.ts +49 -0
- package/dist/server/children-interception.d.ts.map +1 -0
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/compress.d.ts.map +1 -1
- package/dist/server/cookie-context.d.ts +149 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +65 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csp-nonce.d.ts +36 -0
- package/dist/server/csp-nonce.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +58 -15
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/debug.d.ts +0 -1
- package/dist/server/debug.d.ts.map +1 -1
- package/dist/server/default-logger.d.ts +23 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/default-status-page.d.ts +45 -0
- package/dist/server/default-status-page.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +257 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +21 -15
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +14 -12
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +102 -10
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/error-response-headers.d.ts +3 -0
- package/dist/server/error-response-headers.d.ts.map +1 -0
- package/dist/server/fallback-error.d.ts +19 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +45 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/form-data.d.ts +41 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/form-flash.d.ts +2 -2
- package/dist/server/head-response.d.ts +35 -0
- package/dist/server/head-response.d.ts.map +1 -0
- package/dist/server/html-injector-core.d.ts +257 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +84 -42
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +17 -54
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +195 -2922
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +11 -4
- package/dist/server/instrumentation.d.ts.map +1 -1
- package/dist/server/internal.d.ts +47 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +4645 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/json-status-response.d.ts +34 -0
- package/dist/server/json-status-response.d.ts.map +1 -0
- package/dist/server/logger.d.ts +78 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-collector.d.ts +73 -0
- package/dist/server/metadata-collector.d.ts.map +1 -0
- package/dist/server/metadata-platform.d.ts +2 -2
- package/dist/server/metadata-render.d.ts +2 -2
- package/dist/server/metadata-render.d.ts.map +1 -1
- package/dist/server/metadata-routes.d.ts +71 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata-social.d.ts +2 -2
- package/dist/server/metadata.d.ts +10 -2
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +20 -5
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +105 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/nuqs-ssr-provider.d.ts +7 -3
- package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +83 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +193 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +70 -9
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +7 -1
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +59 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +70 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +147 -23
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +31 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/prebuilt/cache-key.d.ts +63 -0
- package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-render.d.ts +25 -0
- package/dist/server/prebuilt/capture-render.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-routes.d.ts +37 -0
- package/dist/server/prebuilt/capture-routes.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-state.d.ts +101 -0
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
- package/dist/server/prebuilt/key-discipline.d.ts +52 -0
- package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
- package/dist/server/prebuilt/lifetime.d.ts +38 -0
- package/dist/server/prebuilt/lifetime.d.ts.map +1 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
- package/dist/server/prebuilt/overlay.d.ts +100 -0
- package/dist/server/prebuilt/overlay.d.ts.map +1 -0
- package/dist/server/prebuilt/payload-source.d.ts +79 -0
- package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +106 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -0
- package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
- package/dist/server/prebuilt-builder.d.ts +121 -0
- package/dist/server/prebuilt-builder.d.ts.map +1 -0
- package/dist/server/prebuilt-runtime.d.ts +111 -0
- package/dist/server/prebuilt-runtime.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +101 -90
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/publish-params.d.ts +33 -0
- package/dist/server/publish-params.d.ts.map +1 -0
- package/dist/server/react-cache-bridge.d.ts +59 -0
- package/dist/server/react-cache-bridge.d.ts.map +1 -0
- package/dist/server/react-cache-scope.d.ts +49 -0
- package/dist/server/react-cache-scope.d.ts.map +1 -0
- package/dist/server/render-timeout.d.ts +66 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/render-utils.d.ts +35 -0
- package/dist/server/render-utils.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +128 -103
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-dep.d.ts +15 -0
- package/dist/server/request-dep.d.ts.map +1 -0
- package/dist/server/response-cache-policy.d.ts +3 -0
- package/dist/server/response-cache-policy.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +57 -30
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-element-helpers.d.ts +12 -0
- package/dist/server/route-element-helpers.d.ts.map +1 -0
- package/dist/server/route-handler.d.ts +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +55 -38
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/route-module-loader.d.ts +37 -0
- package/dist/server/route-module-loader.d.ts.map +1 -0
- package/dist/server/rsc-cache-key-guard.d.ts +78 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
- package/dist/server/rsc-entry/action-dispatcher.d.ts +67 -0
- package/dist/server/rsc-entry/action-dispatcher.d.ts.map +1 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +19 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +55 -0
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +35 -21
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +14 -59
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +30 -6
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +50 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/render-signals.d.ts +65 -0
- package/dist/server/rsc-entry/render-signals.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +98 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +30 -6
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +12 -30
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +6 -2
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +44 -7
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-error-envelope.d.ts +11 -0
- package/dist/server/rsc-error-envelope.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +39 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/signal-identity.d.ts +43 -0
- package/dist/server/signal-identity.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +130 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/skippable-prefix.d.ts +29 -0
- package/dist/server/skippable-prefix.d.ts.map +1 -0
- package/dist/server/slot-interception.d.ts +80 -0
- package/dist/server/slot-interception.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +138 -7
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/slot-subtree-contain.d.ts +54 -0
- package/dist/server/slot-subtree-contain.d.ts.map +1 -0
- package/dist/server/ssr-bridge-types.d.ts +198 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +8 -47
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +60 -27
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +93 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +44 -9
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/static-generator.d.ts +112 -0
- package/dist/server/static-generator.d.ts.map +1 -0
- package/dist/server/static-not-found.d.ts +52 -0
- package/dist/server/static-not-found.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +26 -15
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +59 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +57 -26
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +59 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +89 -8
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +50 -0
- package/dist/server/utils/element-type.d.ts.map +1 -0
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/server/workers-cache-bridge.d.ts +26 -0
- package/dist/server/workers-cache-bridge.d.ts.map +1 -0
- package/dist/shared/als-slots.d.ts +42 -0
- package/dist/shared/als-slots.d.ts.map +1 -0
- package/dist/shared/base-path.d.ts +56 -0
- package/dist/shared/base-path.d.ts.map +1 -0
- package/dist/shared/csrf-reject.d.ts +16 -0
- package/dist/shared/csrf-reject.d.ts.map +1 -0
- package/dist/shared/error-digest.d.ts +28 -0
- package/dist/shared/error-digest.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +49 -0
- package/dist/shared/href-validation.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shared/param-value.d.ts +104 -0
- package/dist/shared/param-value.d.ts.map +1 -0
- package/dist/shared/payload-root.d.ts +110 -0
- package/dist/shared/payload-root.d.ts.map +1 -0
- package/dist/shared/redirect-type.d.ts +17 -0
- package/dist/shared/redirect-type.d.ts.map +1 -0
- package/dist/shared/rsc-cache-key.d.ts +163 -0
- package/dist/shared/rsc-cache-key.d.ts.map +1 -0
- package/dist/shared/rsc-error-envelope.d.ts +16 -0
- package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
- package/dist/shared/rsc-manifest.d.ts +28 -0
- package/dist/shared/rsc-manifest.d.ts.map +1 -0
- package/dist/shared/rsc-media-type.d.ts +52 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -0
- package/dist/shared/rsc-payload-path.d.ts +48 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -0
- package/dist/shared/segment-info.d.ts +66 -0
- package/dist/shared/segment-info.d.ts.map +1 -0
- package/dist/shared/slot-params.d.ts +52 -0
- package/dist/shared/slot-params.d.ts.map +1 -0
- package/dist/shared/static-platform-files.d.ts +71 -0
- package/dist/shared/static-platform-files.d.ts.map +1 -0
- package/dist/shared/status-reason-phrase.d.ts +26 -0
- package/dist/shared/status-reason-phrase.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +53 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/image.d.ts +120 -120
- package/dist/shims/image.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +25 -12
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation-rsc.d.ts +21 -0
- package/dist/shims/navigation-rsc.d.ts.map +1 -0
- package/dist/shims/navigation.d.ts +10 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/dist/utils/write-file-atomic.d.ts +17 -0
- package/dist/utils/write-file-atomic.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +239 -0
- package/docs/api/31-api-client.mdx +170 -0
- package/docs/api/32-api-cache.mdx +339 -0
- package/docs/api/33-api-search-params.mdx +176 -0
- package/docs/api/34-api-config.mdx +359 -0
- package/docs/api/35-api-typescript.mdx +91 -0
- package/docs/api/36-cli.mdx +202 -0
- package/docs/learn/00-introduction.mdx +109 -0
- package/docs/learn/01-quick-start.mdx +94 -0
- package/docs/learn/02-pages-and-layouts.mdx +147 -0
- package/docs/learn/03-fetching-data.mdx +227 -0
- package/docs/learn/04-access-control.mdx +115 -0
- package/docs/learn/05-the-flush-point.mdx +175 -0
- package/docs/learn/06-typed-params.mdx +275 -0
- package/docs/learn/07-typed-routes.mdx +108 -0
- package/docs/learn/08-forms-and-actions.mdx +146 -0
- package/docs/learn/09-streaming.mdx +140 -0
- package/docs/learn/10-caching.mdx +270 -0
- package/docs/learn/11-middleware.mdx +164 -0
- package/docs/learn/12-error-handling.mdx +192 -0
- package/docs/learn/13-deploying.mdx +287 -0
- package/llms.txt +55 -0
- package/package.json +120 -29
- package/src/adapters/build-output-helper.ts +353 -0
- package/src/adapters/canonicalize-module.ts +29 -0
- package/src/adapters/cloudflare-dev.ts +183 -0
- package/src/adapters/cloudflare-kv-cache.ts +207 -0
- package/src/adapters/cloudflare.ts +809 -150
- package/src/adapters/compress-module.ts +110 -86
- package/src/adapters/fs-identity.ts +155 -0
- package/src/adapters/nitro-presets.ts +124 -0
- package/src/adapters/nitro-preview.ts +476 -0
- package/src/adapters/nitro.ts +317 -457
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +283 -0
- package/src/adapters/types.ts +127 -17
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/analyze/chains.ts +411 -0
- package/src/analyze/classify.ts +259 -0
- package/src/analyze/crawl-entry.ts +68 -0
- package/src/analyze/crawl.ts +500 -0
- package/src/analyze/graph-cache.ts +331 -0
- package/src/analyze/graph-command.ts +762 -0
- package/src/analyze/live-graph.ts +232 -0
- package/src/analyze/poison-rules.ts +165 -0
- package/src/analyze/poison-scan.ts +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 +69 -0
- package/src/cache/redis-handler.ts +198 -20
- package/src/cache/singleflight.ts +72 -6
- package/src/cache/sizeof.ts +35 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/store.ts +71 -0
- package/src/cache/stores/cloudflare-kv.ts +52 -0
- package/src/cache/stores/memory.ts +125 -0
- package/src/cache/stores/redis.ts +97 -0
- package/src/cache/stores/vercel.ts +59 -0
- package/src/cache/tag-aware-handler.ts +254 -0
- package/src/cache/timber-cache.ts +165 -40
- package/src/cdn/cloudflare-purge.ts +50 -0
- package/src/cdn/fastly-purge.ts +63 -0
- package/src/cdn/headers.ts +153 -0
- package/src/cdn/index.ts +23 -0
- package/src/cdn/purge-store.ts +34 -0
- package/src/cdn/workers-cache-purge.ts +34 -0
- package/src/cli-check.ts +417 -0
- package/src/cli-context.ts +119 -0
- package/src/cli-schema-sync.ts +401 -0
- package/src/cli.ts +330 -78
- package/src/client/browser-dev.ts +192 -5
- package/src/client/browser-entry/action-dispatch.ts +237 -0
- package/src/client/browser-entry/action-queue.ts +152 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +143 -0
- package/src/client/browser-entry/index.ts +120 -0
- package/src/client/browser-entry/post-hydration.ts +99 -0
- package/src/client/browser-entry/router-init.ts +406 -0
- package/src/client/browser-entry/rsc-stream.ts +145 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/deny-last-resort.tsx +54 -0
- package/src/client/error-boundary.tsx +279 -61
- package/src/client/error-reconstituter.tsx +84 -0
- package/src/client/form.tsx +36 -32
- package/src/client/global-context.ts +31 -0
- package/src/client/history.ts +74 -11
- package/src/client/index.ts +89 -53
- package/src/client/internal.ts +54 -0
- package/src/client/link.tsx +468 -151
- package/src/client/location-search.ts +15 -0
- package/src/client/navigation-api.ts +380 -0
- package/src/client/navigation-commit.ts +318 -0
- package/src/client/navigation-context.ts +67 -134
- package/src/client/navigation-root.tsx +236 -0
- package/src/client/navigation-transition.ts +337 -0
- package/src/client/nuqs-adapter.tsx +21 -9
- package/src/client/params-context.ts +187 -0
- package/src/client/react-root.ts +82 -0
- package/src/client/router-effects.ts +235 -0
- package/src/client/router-lifecycle.ts +354 -0
- package/src/client/router-pipeline.ts +458 -0
- package/src/client/router-ref.ts +3 -3
- package/src/client/router-skew.ts +30 -0
- package/src/client/router-types.ts +370 -0
- package/src/client/router-url.ts +32 -0
- package/src/client/router.ts +491 -424
- package/src/client/rsc-fetch.ts +510 -109
- package/src/client/segment-cache.ts +362 -41
- package/src/client/segment-context.ts +7 -4
- package/src/client/segment-outlet.tsx +96 -0
- package/src/client/segment-update-context.ts +23 -0
- package/src/client/shallow-url.ts +22 -0
- package/src/client/slot-content-cache-context.ts +43 -0
- package/src/client/slot-context.ts +50 -0
- package/src/client/slot-outlet.tsx +22 -0
- package/src/client/slot-provider.tsx +32 -0
- package/src/client/ssr-data.ts +27 -67
- package/src/client/stale-client.ts +191 -0
- package/src/client/state.ts +31 -24
- package/src/client/status-page-marker.tsx +32 -0
- package/src/client/top-loader.tsx +13 -10
- package/src/client/unload-guard.ts +35 -3
- package/src/client/use-cookie.ts +70 -18
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +22 -31
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +206 -36
- package/src/client/use-router.ts +31 -9
- package/src/client/use-search-params.ts +38 -49
- package/src/client/use-segment-params.ts +69 -0
- package/src/client/use-selected-layout-segment.ts +2 -2
- package/src/codec.ts +149 -0
- package/src/config-types.ts +323 -0
- package/src/config-validation.ts +464 -0
- package/src/cookies/define-cookie.ts +222 -53
- package/src/cookies/index.ts +13 -2
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +192 -0
- package/src/dev-tools/404-page.ts +286 -0
- package/src/dev-tools/browser-logs.ts +55 -0
- package/src/dev-tools/dev-page-shell.ts +278 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +185 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +79 -0
- package/src/dev-tools/instrumentation.ts +261 -0
- package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
- package/src/{plugins/dev-error-overlay.ts → dev-tools/overlay.ts} +25 -80
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +182 -0
- package/src/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +479 -128
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/css.ts +1 -1
- package/src/fonts/dev-middleware.ts +85 -0
- package/src/fonts/fallbacks.ts +0 -23
- package/src/fonts/google.ts +101 -19
- package/src/fonts/local.ts +12 -11
- package/src/fonts/paths.ts +58 -0
- package/src/fonts/pipeline.ts +348 -0
- package/src/fonts/transform.ts +311 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +494 -380
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +84 -0
- package/src/plugin-context.ts +502 -0
- package/src/plugins/build-manifest.ts +204 -36
- package/src/plugins/build-report.ts +299 -87
- package/src/plugins/cache.ts +243 -0
- package/src/plugins/callsite-ast.ts +472 -0
- package/src/plugins/callsite-jsx.ts +243 -0
- package/src/plugins/chunks.ts +74 -5
- package/src/plugins/client-chunks.ts +185 -0
- package/src/plugins/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 +360 -97
- package/src/plugins/entries.ts +142 -16
- package/src/plugins/fonts.ts +260 -657
- package/src/plugins/graph-endpoint.ts +532 -0
- package/src/plugins/mdx.ts +108 -35
- package/src/plugins/post-build.ts +327 -0
- package/src/plugins/prebuilt-capture.ts +213 -0
- package/src/plugins/prebuilt-options-analysis.ts +175 -0
- package/src/plugins/prebuilt.ts +670 -0
- package/src/plugins/prerender-sugar.ts +316 -0
- package/src/plugins/react-resolve.ts +149 -0
- package/src/plugins/request-dep/analysis.ts +447 -0
- package/src/plugins/request-dep/index.ts +376 -0
- package/src/plugins/request-dep/origin.ts +310 -0
- package/src/plugins/routing.ts +273 -277
- package/src/plugins/rsc-assets-manifest.ts +251 -0
- package/src/plugins/server-bundle.ts +99 -14
- package/src/plugins/shims.ts +260 -97
- package/src/plugins/static-build.ts +681 -71
- package/src/react-canary.d.ts +2 -0
- package/src/routing/codegen-shared.ts +39 -0
- package/src/routing/codegen-types.ts +62 -0
- package/src/routing/codegen-write.ts +163 -0
- package/src/routing/codegen.ts +349 -232
- package/src/routing/collision-probe.ts +438 -0
- package/src/routing/collision-spaces.ts +281 -0
- package/src/routing/convention-lint.ts +651 -0
- package/src/routing/export-detect.ts +536 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +16 -7
- package/src/routing/interception-overlap.ts +141 -0
- package/src/routing/interception.ts +1044 -67
- package/src/routing/link-codegen.ts +280 -0
- package/src/routing/manifest-codegen.ts +232 -0
- package/src/routing/scanner.ts +417 -223
- package/src/routing/schema-validation.ts +155 -0
- package/src/routing/segment-classify.ts +280 -0
- package/src/routing/segment-codegen.ts +99 -0
- package/src/routing/segment-keys.ts +186 -0
- package/src/routing/slot-placement.ts +97 -0
- package/src/routing/types.ts +82 -26
- package/src/routing/walkers.ts +98 -0
- package/src/rsc-runtime/rsc.ts +9 -0
- package/src/rsc-runtime/ssr.ts +51 -0
- package/src/rsc-runtime/transforms.ts +13 -0
- package/src/rsc-runtime/vendor-types.d.ts +27 -0
- package/src/schema-bridge.ts +382 -0
- package/src/search-params/define.ts +677 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/parse-total.ts +91 -0
- package/src/search-params/serialize-equal.ts +14 -0
- package/src/search-params/wrappers.ts +150 -0
- package/src/server/access-gate.tsx +195 -56
- package/src/server/action-client.ts +126 -33
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +457 -111
- package/src/server/actions.ts +172 -85
- package/src/server/als-registry.ts +224 -25
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +33 -57
- package/src/server/canonicalize.ts +6 -3
- package/src/server/chain-url-parts.ts +163 -0
- package/src/server/children-interception.ts +116 -0
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +43 -8
- package/src/server/cookie-context.ts +454 -0
- package/src/server/cookie-parsing.ts +163 -0
- package/src/server/csp-nonce.ts +58 -0
- package/src/server/csrf.ts +228 -35
- package/src/server/debug.ts +0 -1
- package/src/server/default-logger.ts +100 -0
- package/src/server/default-status-page.ts +88 -0
- package/src/server/deny-boundary.ts +527 -0
- package/src/server/deny-renderer.ts +201 -179
- package/src/server/early-hints-sender.ts +4 -3
- package/src/server/early-hints.ts +39 -29
- package/src/server/error-boundary-wrapper.ts +160 -44
- package/src/server/error-response-headers.ts +18 -0
- package/src/server/fallback-error.ts +88 -104
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +67 -0
- package/src/server/form-data.ts +124 -12
- package/src/server/form-flash.ts +3 -3
- package/src/server/head-response.ts +54 -0
- package/src/server/html-injector-core.ts +512 -0
- package/src/server/html-injectors.ts +270 -255
- package/src/server/index.ts +36 -192
- package/src/server/instrumentation.ts +11 -4
- package/src/server/internal.ts +168 -0
- package/src/server/json-status-response.ts +105 -0
- package/src/server/logger.ts +126 -38
- package/src/server/metadata-collector.ts +177 -0
- package/src/server/metadata-platform.ts +2 -2
- package/src/server/metadata-render.ts +30 -8
- package/src/server/metadata-routes.ts +220 -24
- package/src/server/metadata-social.ts +2 -2
- package/src/server/metadata.ts +23 -2
- package/src/server/middleware-runner.ts +32 -5
- package/src/server/node-stream-transforms.ts +323 -0
- package/src/server/nuqs-ssr-provider.tsx +8 -7
- package/src/server/param-coercion.ts +201 -0
- package/src/server/pipeline-helpers.ts +485 -0
- package/src/server/pipeline-interception.ts +241 -32
- package/src/server/pipeline-metadata.ts +15 -1
- package/src/server/pipeline-outcome.ts +290 -0
- package/src/server/pipeline-phases.ts +496 -0
- package/src/server/pipeline.ts +385 -427
- package/src/server/port-resolution.ts +53 -0
- package/src/server/prebuilt/cache-key.ts +299 -0
- package/src/server/prebuilt/capture-render.ts +118 -0
- package/src/server/prebuilt/capture-routes.ts +104 -0
- package/src/server/prebuilt/capture-state.ts +196 -0
- package/src/server/prebuilt/key-discipline.ts +122 -0
- package/src/server/prebuilt/lifetime.ts +151 -0
- package/src/server/prebuilt/manifest-tag-index.ts +46 -0
- package/src/server/prebuilt/overlay.ts +256 -0
- package/src/server/prebuilt/payload-source.ts +202 -0
- package/src/server/prebuilt/slots.ts +202 -0
- package/src/server/prebuilt/synthetic-store.ts +125 -0
- package/src/server/prebuilt-builder.ts +514 -0
- package/src/server/prebuilt-runtime.ts +813 -0
- package/src/server/primitives.ts +153 -171
- package/src/server/publish-params.ts +42 -0
- package/src/server/react-cache-bridge.ts +124 -0
- package/src/server/react-cache-scope.ts +104 -0
- package/src/server/render-timeout.ts +128 -0
- package/src/server/render-utils.ts +45 -0
- package/src/server/request-context.ts +269 -332
- package/src/server/request-dep.ts +37 -0
- package/src/server/response-cache-policy.ts +45 -0
- package/src/server/route-element-builder.ts +514 -355
- package/src/server/route-element-helpers.ts +37 -0
- package/src/server/route-handler.ts +67 -27
- package/src/server/route-matcher.ts +238 -267
- package/src/server/route-module-loader.ts +161 -0
- package/src/server/rsc-cache-key-guard.ts +122 -0
- package/src/server/rsc-entry/action-dispatcher.ts +142 -0
- package/src/server/rsc-entry/action-middleware-runner.ts +130 -0
- package/src/server/rsc-entry/api-handler.ts +49 -81
- package/src/server/rsc-entry/deny-fallback.ts +151 -0
- package/src/server/rsc-entry/error-renderer.ts +301 -113
- package/src/server/rsc-entry/helpers.ts +90 -115
- package/src/server/rsc-entry/index.ts +370 -350
- package/src/server/rsc-entry/render-route.ts +229 -0
- package/src/server/rsc-entry/render-signals.ts +108 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
- package/src/server/rsc-entry/rsc-payload.ts +192 -72
- package/src/server/rsc-entry/rsc-stream.ts +128 -131
- package/src/server/rsc-entry/ssr-bridge.ts +19 -6
- package/src/server/rsc-entry/ssr-renderer.ts +300 -137
- package/src/server/rsc-error-envelope.ts +18 -0
- package/src/server/rsc-prop-warnings.ts +1 -1
- package/src/server/safe-load.ts +53 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/server-only-guard-noop.js +3 -0
- package/src/server/server-timing.ts +1 -1
- package/src/server/signal-identity.ts +112 -0
- package/src/server/sitemap-generator.ts +337 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/skippable-prefix.ts +172 -0
- package/src/server/slot-interception.ts +168 -0
- package/src/server/slot-resolver.ts +707 -300
- package/src/server/slot-subtree-contain.ts +273 -0
- package/src/server/ssr-bridge-types.ts +201 -0
- package/src/server/ssr-entry.ts +225 -104
- package/src/server/ssr-render.ts +354 -91
- package/src/server/ssr-wrappers.tsx +162 -0
- package/src/server/state-tree-diff.ts +85 -30
- package/src/server/static-generator.ts +680 -0
- package/src/server/static-not-found.ts +134 -0
- package/src/server/status-code-resolver.ts +107 -148
- package/src/server/stream-utils.ts +343 -0
- package/src/server/tracing.ts +163 -68
- package/src/server/tree-match.ts +494 -0
- package/src/server/types.ts +96 -11
- package/src/server/utils/element-type.ts +88 -0
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/version-skew.ts +104 -0
- package/src/server/waituntil-bridge.ts +1 -1
- package/src/server/workers-cache-bridge.ts +33 -0
- package/src/shared/als-slots.ts +74 -0
- package/src/shared/base-path.ts +80 -0
- package/src/shared/csrf-reject.ts +15 -0
- package/src/shared/error-digest.ts +46 -0
- package/src/shared/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/param-value.ts +281 -0
- package/src/shared/payload-root.ts +153 -0
- package/src/shared/redirect-type.ts +17 -0
- package/src/shared/rsc-cache-key.ts +269 -0
- package/src/shared/rsc-error-envelope.ts +16 -0
- package/src/shared/rsc-manifest.ts +29 -0
- package/src/shared/rsc-media-type.ts +59 -0
- package/src/shared/rsc-payload-path.ts +52 -0
- package/src/shared/segment-info.ts +67 -0
- package/src/shared/slot-params.ts +109 -0
- package/src/shared/static-platform-files.ts +75 -0
- package/src/shared/status-reason-phrase.ts +61 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +122 -1
- package/src/shims/navigation-client.ts +36 -32
- package/src/shims/navigation-rsc.ts +47 -0
- package/src/shims/navigation.ts +10 -7
- package/src/utils/state-machine.ts +111 -0
- package/src/utils/write-file-atomic.ts +32 -0
- package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-B3Gypr3D.js +0 -108
- package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
- package/dist/_chunks/format-RyoGQL74.js +0 -164
- package/dist/_chunks/format-RyoGQL74.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js +0 -676
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
- package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
- package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
- package/dist/_chunks/ssr-data-MjmprTmO.js +0 -88
- package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
- package/dist/_chunks/tracing-CemImE6h.js +0 -187
- package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
- package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
- package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
- package/dist/_chunks/use-query-states-D5KaffOK.js +0 -109
- package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/error-boundary.js.map +0 -1
- package/dist/client/head.d.ts +0 -16
- package/dist/client/head.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/segment-merger.d.ts +0 -119
- package/dist/client/segment-merger.d.ts.map +0 -1
- package/dist/client/stale-reload.d.ts +0 -44
- package/dist/client/stale-reload.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts +0 -74
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/types.d.ts +0 -14
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts +0 -26
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts +0 -92
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/content/index.d.ts +0 -11
- package/dist/content/index.d.ts.map +0 -1
- package/dist/content/index.js +0 -2
- package/dist/plugins/adapter-build.d.ts +0 -18
- package/dist/plugins/adapter-build.d.ts.map +0 -1
- package/dist/plugins/cache-transform.d.ts +0 -36
- package/dist/plugins/cache-transform.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/search-params/registry.d.ts +0 -20
- package/dist/search-params/registry.d.ts.map +0 -1
- package/dist/server/asset-headers.d.ts +0 -42
- package/dist/server/asset-headers.d.ts.map +0 -1
- package/dist/server/client-module-map.d.ts +0 -47
- package/dist/server/client-module-map.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts +0 -29
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts +0 -129
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/flush.d.ts +0 -74
- package/dist/server/flush.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/tree-builder.d.ts +0 -126
- package/dist/server/tree-builder.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -103
- package/src/client/browser-entry.ts +0 -678
- package/src/client/head.ts +0 -61
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/segment-merger.ts +0 -339
- package/src/client/stale-reload.ts +0 -87
- package/src/client/transition-root.tsx +0 -166
- package/src/client/types.ts +0 -21
- package/src/client/use-navigation-pending.ts +0 -38
- package/src/client/use-params.ts +0 -141
- package/src/content/index.ts +0 -13
- package/src/plugins/adapter-build.ts +0 -118
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/codecs.ts +0 -153
- package/src/search-params/create.ts +0 -321
- package/src/search-params/registry.ts +0 -31
- package/src/server/asset-headers.ts +0 -81
- package/src/server/client-module-map.ts +0 -58
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/dev-warnings.ts +0 -283
- package/src/server/flush.ts +0 -182
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/server/tree-builder.ts +0 -382
- package/src/shims/server-only-noop.js +0 -6
- package/src/utils/directive-parser.ts +0 -529
|
@@ -6,30 +6,74 @@
|
|
|
6
6
|
* this registry and re-export public accessor functions.
|
|
7
7
|
*
|
|
8
8
|
* Why: ALS instances require singleton semantics — if two copies of the
|
|
9
|
-
* same ALS exist (one from a relative import, one from a barrel import
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* same ALS exist (one from a relative import, one from a barrel import,
|
|
10
|
+
* or the same file re-evaluated by Vite after an HMR invalidation), one
|
|
11
|
+
* module writes to its copy and another reads from an empty copy.
|
|
12
|
+
* Centralizing ALS creation in a single module + anchoring each instance
|
|
13
|
+
* on `globalThis` under a `Symbol.for(...)` key eliminates this class of
|
|
14
|
+
* bug, including the Vite-dev case where module instance split would
|
|
15
|
+
* otherwise hand two copies of this file out of a single evaluation cycle.
|
|
12
16
|
*
|
|
13
|
-
* The `timber-shims` plugin
|
|
14
|
-
*
|
|
17
|
+
* The `timber-shims` plugin remaps `@timber-js/app/server` to src/ in
|
|
18
|
+
* RSC and SSR environments so import-specifier paths converge here, and
|
|
19
|
+
* the `globalThis[SYMBOL_FOR]` anchor below closes the remaining gap: any
|
|
20
|
+
* second evaluation of this module picks up the ALS the first evaluation
|
|
21
|
+
* already stored rather than instantiating a fresh one. Same pattern the
|
|
22
|
+
* Cloudflare bindings ALS uses in `adapters/cloudflare.ts`.
|
|
15
23
|
*
|
|
16
24
|
* DO NOT create ALS instances outside this file. If you need a new ALS,
|
|
17
25
|
* add it here and import from `./als-registry.js` in the consuming module.
|
|
26
|
+
* Inside this file, always route through `getOrCreateAls(symbol)` — a raw
|
|
27
|
+
* `new AsyncLocalStorage()` reintroduces the instance-split hazard.
|
|
18
28
|
*
|
|
19
29
|
* See design/18-build-system.md §"Module Singleton Strategy" and
|
|
20
|
-
* §"Singleton State Registry".
|
|
30
|
+
* §"Singleton State Registry". Regression test:
|
|
31
|
+
* `tests/als-registry-singleton.test.ts`.
|
|
21
32
|
*/
|
|
22
33
|
|
|
34
|
+
import '#server-only-guard';
|
|
35
|
+
import type { CoercedParams } from '../shared/param-value.ts';
|
|
36
|
+
import type { SlotParamsRecord } from '../shared/slot-params.ts';
|
|
23
37
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
38
|
+
/**
|
|
39
|
+
* Return a process-wide singleton `AsyncLocalStorage` keyed by `symbol`.
|
|
40
|
+
*
|
|
41
|
+
* `Symbol.for(...)` keys live in the cross-realm symbol registry, and
|
|
42
|
+
* `globalThis` is shared across every module evaluation inside the same
|
|
43
|
+
* Node.js process. Together they give a stable anchor that survives
|
|
44
|
+
* re-evaluation of this file — the second evaluation observes the
|
|
45
|
+
* `globalThis[symbol]` slot already populated by the first and hands
|
|
46
|
+
* back the identical ALS instance.
|
|
47
|
+
*/
|
|
48
|
+
function getOrCreateAls<T>(symbol: symbol): AsyncLocalStorage<T> {
|
|
49
|
+
const g = globalThis as unknown as Record<symbol, unknown>;
|
|
50
|
+
const existing = g[symbol];
|
|
51
|
+
if (existing instanceof AsyncLocalStorage) {
|
|
52
|
+
return existing as AsyncLocalStorage<T>;
|
|
53
|
+
}
|
|
54
|
+
const created = new AsyncLocalStorage<T>();
|
|
55
|
+
g[symbol] = created;
|
|
56
|
+
return created;
|
|
57
|
+
}
|
|
24
58
|
|
|
25
59
|
// ─── Request Context ──────────────────────────────────────────────────────
|
|
26
|
-
// Used by: request-context.ts (
|
|
60
|
+
// Used by: request-context.ts (getHeaders(), getCookies(), getSearchParams())
|
|
27
61
|
// Design doc: design/04-authorization.md
|
|
28
62
|
|
|
29
63
|
/** @internal — import via request-context.ts public API */
|
|
30
|
-
export const requestContextAls =
|
|
64
|
+
export const requestContextAls = getOrCreateAls<RequestContextStore>(
|
|
65
|
+
Symbol.for('timber:request-context-als')
|
|
66
|
+
);
|
|
31
67
|
|
|
32
68
|
export interface RequestContextStore {
|
|
69
|
+
/**
|
|
70
|
+
* The request this context was opened for, or `null` in the build-time
|
|
71
|
+
* capture store, where there is none. Read only to report a failed
|
|
72
|
+
* `cache.component` background re-render, which outlives the code that had the request
|
|
73
|
+
* in hand (design/17 §"Which errors reach it"). Everything a page may read
|
|
74
|
+
* has its own field below.
|
|
75
|
+
*/
|
|
76
|
+
request: Request | null;
|
|
33
77
|
/** Incoming request headers (read-only view). */
|
|
34
78
|
headers: Headers;
|
|
35
79
|
/** Raw cookie header string, parsed lazily into a Map on first access. */
|
|
@@ -39,50 +83,135 @@ export interface RequestContextStore {
|
|
|
39
83
|
/** Original (pre-overlay) frozen headers, kept for overlay merging. */
|
|
40
84
|
originalHeaders: Headers;
|
|
41
85
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
86
|
+
* CSP nonce, created the first time middleware reads `ctx.nonce`. Read by
|
|
87
|
+
* the renderers via `getCspNonce()` and stamped on every inline script.
|
|
88
|
+
* Absent when no middleware asked for one. See server/csp-nonce.ts.
|
|
89
|
+
*/
|
|
90
|
+
cspNonce?: string;
|
|
91
|
+
/**
|
|
92
|
+
* Raw URLSearchParams for the current request.
|
|
93
|
+
* To get typed parsed params, import a search params definition and
|
|
94
|
+
* call `.parse(searchParams())`.
|
|
95
|
+
*/
|
|
96
|
+
searchParams: URLSearchParams;
|
|
97
|
+
/**
|
|
98
|
+
* Raw search string from the request URL (e.g. "?foo=bar&baz=1").
|
|
99
|
+
* Available synchronously for use in `redirect()` with `preserveSearchParams`.
|
|
100
|
+
*/
|
|
101
|
+
searchString: string;
|
|
102
|
+
/**
|
|
103
|
+
* Coerced segment params for the current request.
|
|
104
|
+
* Set by the pipeline after route matching and param coercion, before
|
|
105
|
+
* middleware and rendering. Pages and layouts read params via
|
|
106
|
+
* `getSegmentParams()` instead of receiving them as a prop.
|
|
107
|
+
*
|
|
108
|
+
* See design/07-routing.md §"params.ts — Convention File for Typed Params"
|
|
45
109
|
*/
|
|
46
|
-
|
|
110
|
+
segmentParams?: CoercedParams;
|
|
111
|
+
/**
|
|
112
|
+
* The matched segment path (e.g. '/(browse)/[artistSlug]/[year]').
|
|
113
|
+
* Includes route groups and parallel slots — uniquely identifies the
|
|
114
|
+
* segment in the route tree. Set by the pipeline alongside segmentParams.
|
|
115
|
+
* Used by getSegmentParams() for dev-mode validation.
|
|
116
|
+
* See design/41-global-params.md §Runtime Validation
|
|
117
|
+
*/
|
|
118
|
+
matchedSegmentPath?: string;
|
|
119
|
+
/**
|
|
120
|
+
* Per-slot coerced segment params, keyed by the slot's full tree path
|
|
121
|
+
* (e.g. '/(browse)/@shows/[artistSlug]/[...year]').
|
|
122
|
+
*
|
|
123
|
+
* Each slot walks its own segment tree and may interpret URL parts
|
|
124
|
+
* differently from the main route (e.g. catch-all vs dynamic). This
|
|
125
|
+
* map stores slot-specific params so getSegmentParams(segmentPath)
|
|
126
|
+
* returns the correct types for slot pages.
|
|
127
|
+
*
|
|
128
|
+
* See design/07-routing.md §"Parallel Slot Params"
|
|
129
|
+
*/
|
|
130
|
+
slotParams?: SlotParamsRecord;
|
|
47
131
|
/** Outgoing Set-Cookie entries (name → serialized value + options). Last write wins. */
|
|
48
132
|
cookieJar: Map<string, CookieEntry>;
|
|
49
133
|
/** Whether the response has flushed (headers committed). */
|
|
50
134
|
flushed: boolean;
|
|
51
135
|
/** Whether the current context allows cookie mutation. */
|
|
52
136
|
mutableContext: boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Set by AccessGate or PageDenyBoundary when a DenySignal is caught
|
|
139
|
+
* server-side (inside the React tree, before React Flight sees it).
|
|
140
|
+
* The document path reads this after render to set the HTTP status code;
|
|
141
|
+
* the RSC payload path does not read it (a Flight payload response is always 200).
|
|
142
|
+
* See TIM-666, TIM-1495.
|
|
143
|
+
*/
|
|
144
|
+
denyStatus?: number;
|
|
145
|
+
/**
|
|
146
|
+
* Index of the first segment whose AccessGate denied during render.
|
|
147
|
+
* Recorded by AccessGate when it catches a DenySignal so post-render
|
|
148
|
+
* consumers (buildSegmentInfo, X-Timber-Segments header) can bound
|
|
149
|
+
* the segment list without a pre-render access pass. Infinity when
|
|
150
|
+
* no segment denied. See TIM-1363.
|
|
151
|
+
*/
|
|
152
|
+
_firstDeniedSegmentIndex?: number;
|
|
153
|
+
/**
|
|
154
|
+
* Metadata entries collected during render by MetadataCollector.
|
|
155
|
+
* Populated per-segment in tree order (root→page) during
|
|
156
|
+
* renderToReadableStream. Entries may contain promises for dynamic
|
|
157
|
+
* metadata (resolved concurrently with page rendering, TIM-1367).
|
|
158
|
+
* MetadataHead awaits all entries before merging.
|
|
159
|
+
* See TIM-1363, TIM-1367, design/16-metadata.md.
|
|
160
|
+
*/
|
|
161
|
+
_metadataEntries?: Array<{
|
|
162
|
+
metadata: import('./types.ts').Metadata | Promise<import('./types.ts').Metadata | null>;
|
|
163
|
+
isPage: boolean;
|
|
164
|
+
}>;
|
|
53
165
|
}
|
|
54
166
|
|
|
55
167
|
/** A single outgoing cookie entry in the cookie jar. */
|
|
56
168
|
export interface CookieEntry {
|
|
57
169
|
name: string;
|
|
58
170
|
value: string;
|
|
59
|
-
options: import('./
|
|
171
|
+
options: import('./cookie-context.ts').CookieOptions;
|
|
60
172
|
}
|
|
61
173
|
|
|
62
174
|
// ─── Tracing ──────────────────────────────────────────────────────────────
|
|
63
|
-
// Used by: tracing.ts (
|
|
175
|
+
// Used by: tracing.ts (getTraceId(), getSpanId())
|
|
64
176
|
// Design doc: design/17-logging.md
|
|
65
177
|
|
|
178
|
+
/**
|
|
179
|
+
* One trace scope. The pipeline opens the request's scope; withSpan() opens a
|
|
180
|
+
* copy per span, so the span pointers below always name the span the code is
|
|
181
|
+
* running in, however sibling spans interleave (TIM-1538).
|
|
182
|
+
*/
|
|
66
183
|
export interface TraceStore {
|
|
67
|
-
/**
|
|
68
|
-
|
|
69
|
-
|
|
184
|
+
/**
|
|
185
|
+
* The request's trace, shared by reference by every span scope in it.
|
|
186
|
+
* `traceId` is the 32-char lowercase hex trace ID (OTEL or UUID fallback);
|
|
187
|
+
* replaceTraceId() swaps it from inside the first span, and code outside
|
|
188
|
+
* that span (the request's completion log) sees the swap.
|
|
189
|
+
*/
|
|
190
|
+
request: { traceId: string };
|
|
191
|
+
/** The enclosing OTEL span's ID if an SDK is active, undefined otherwise. */
|
|
70
192
|
spanId?: string;
|
|
193
|
+
/**
|
|
194
|
+
* The enclosing native platform span (e.g. Cloudflare's `Span` from
|
|
195
|
+
* tracing.enterSpan()). Tracked so setSpanAttribute() can set attributes
|
|
196
|
+
* after span creation — the platform API has no getActiveSpan() equivalent.
|
|
197
|
+
* See TIM-1135.
|
|
198
|
+
*/
|
|
199
|
+
platformSpan?: import('./tracing.ts').PlatformSpan;
|
|
71
200
|
}
|
|
72
201
|
|
|
73
202
|
/** @internal — import via tracing.ts public API */
|
|
74
|
-
export const traceAls =
|
|
203
|
+
export const traceAls = getOrCreateAls<TraceStore>(Symbol.for('timber:trace-als'));
|
|
75
204
|
|
|
76
205
|
// ─── Server-Timing ────────────────────────────────────────────────────────
|
|
77
206
|
// Used by: server-timing.ts (recordTiming(), withTiming())
|
|
78
207
|
// Design doc: (dev-only performance instrumentation)
|
|
79
208
|
|
|
80
209
|
export interface TimingStore {
|
|
81
|
-
entries: import('./server-timing.
|
|
210
|
+
entries: import('./server-timing.ts').TimingEntry[];
|
|
82
211
|
}
|
|
83
212
|
|
|
84
213
|
/** @internal — import via server-timing.ts public API */
|
|
85
|
-
export const timingAls =
|
|
214
|
+
export const timingAls = getOrCreateAls<TimingStore>(Symbol.for('timber:timing-als'));
|
|
86
215
|
|
|
87
216
|
// ─── Revalidation ─────────────────────────────────────────────────────────
|
|
88
217
|
// Used by: actions.ts (revalidatePath(), revalidateTag())
|
|
@@ -93,17 +222,28 @@ export interface RevalidationState {
|
|
|
93
222
|
paths: string[];
|
|
94
223
|
/** Tags to invalidate (populated by revalidateTag calls). */
|
|
95
224
|
tags: string[];
|
|
225
|
+
/**
|
|
226
|
+
* Set once the action body has settled. ALS still hands this state to
|
|
227
|
+
* work the action started and did not await (a `waitUntil()` job), but
|
|
228
|
+
* `paths` and `tags` are no longer read, so a late `revalidateTag` must
|
|
229
|
+
* invalidate immediately instead of queueing into a list nobody drains.
|
|
230
|
+
*/
|
|
231
|
+
closed?: boolean;
|
|
96
232
|
}
|
|
97
233
|
|
|
98
234
|
/** @internal — import via actions.ts public API */
|
|
99
|
-
export const revalidationAls =
|
|
235
|
+
export const revalidationAls = getOrCreateAls<RevalidationState>(
|
|
236
|
+
Symbol.for('timber:revalidation-als')
|
|
237
|
+
);
|
|
100
238
|
|
|
101
239
|
// ─── Form Flash ───────────────────────────────────────────────────────────
|
|
102
240
|
// Used by: form-flash.ts (getFormFlash())
|
|
103
|
-
// Design doc: design/08-forms-and-actions.md §"No-JS
|
|
241
|
+
// Design doc: design/08-forms-and-actions.md §"No-JS Result Round-Trip"
|
|
104
242
|
|
|
105
243
|
/** @internal — import via form-flash.ts public API */
|
|
106
|
-
export const formFlashAls =
|
|
244
|
+
export const formFlashAls = getOrCreateAls<import('./form-flash.ts').FormFlashData>(
|
|
245
|
+
Symbol.for('timber:form-flash-als')
|
|
246
|
+
);
|
|
107
247
|
|
|
108
248
|
// ─── Early Hints Sender ──────────────────────────────────────────────────
|
|
109
249
|
// Used by: early-hints-sender.ts (sendEarlyHints103())
|
|
@@ -113,7 +253,9 @@ export const formFlashAls = new AsyncLocalStorage<import('./form-flash.js').Form
|
|
|
113
253
|
export type EarlyHintsSenderFn = (links: string[]) => void;
|
|
114
254
|
|
|
115
255
|
/** @internal — import via early-hints-sender.ts public API */
|
|
116
|
-
export const earlyHintsSenderAls =
|
|
256
|
+
export const earlyHintsSenderAls = getOrCreateAls<EarlyHintsSenderFn>(
|
|
257
|
+
Symbol.for('timber:early-hints-sender-als')
|
|
258
|
+
);
|
|
117
259
|
|
|
118
260
|
// ─── waitUntil Bridge ────────────────────────────────────────────────────
|
|
119
261
|
// Used by: waituntil-bridge.ts (waitUntil())
|
|
@@ -123,4 +265,61 @@ export const earlyHintsSenderAls = new AsyncLocalStorage<EarlyHintsSenderFn>();
|
|
|
123
265
|
export type WaitUntilFn = (promise: Promise<unknown>) => void;
|
|
124
266
|
|
|
125
267
|
/** @internal — import via waituntil-bridge.ts public API */
|
|
126
|
-
export const waitUntilAls =
|
|
268
|
+
export const waitUntilAls = getOrCreateAls<WaitUntilFn>(Symbol.for('timber:wait-until-als'));
|
|
269
|
+
|
|
270
|
+
// ─── Workers Cache Purge Bridge ─────────────────────────────────────────
|
|
271
|
+
// Used by: workers-cache-bridge.ts (runWithWorkersCachePurge())
|
|
272
|
+
// Design doc: design/06-caching.md, design/25-production-deployments.md
|
|
273
|
+
|
|
274
|
+
/** Workers Cache purge function from Cloudflare ExecutionContext.cache. */
|
|
275
|
+
export interface WorkersCachePurgeCtx {
|
|
276
|
+
purge(opts: { tags: string[] }): Promise<void>;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** @internal — import via workers-cache-bridge.ts public API */
|
|
280
|
+
export const workersCachePurgeAls = getOrCreateAls<WorkersCachePurgeCtx>(
|
|
281
|
+
Symbol.for('timber:workers-cache-purge-als')
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
// ─── React.cache Scope ───────────────────────────────────────────────────
|
|
285
|
+
// Used by: react-cache-bridge.ts (runWithReactCacheScope(), the patched
|
|
286
|
+
// getCacheForType on Flight's dispatcher)
|
|
287
|
+
// Design doc: design/02-rendering-pipeline.md §"Cache Scoping Model"
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* One request's `React.cache` storage — the Map React's `cache()` hands to
|
|
291
|
+
* `getCacheForType`, owned by timber instead of by a Flight `Request` so
|
|
292
|
+
* `middleware.ts`, `proxy.ts`, and route handlers share it with the render.
|
|
293
|
+
*/
|
|
294
|
+
export type ReactCacheScope = Map<() => unknown, unknown>;
|
|
295
|
+
|
|
296
|
+
/** @internal — import via react-cache-bridge.ts public API */
|
|
297
|
+
export const reactCacheScopeAls = getOrCreateAls<ReactCacheScope>(
|
|
298
|
+
Symbol.for('timber:react-cache-scope-als')
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
// ─── Prebuilt Capture ────────────────────────────────────────────────────
|
|
302
|
+
// Used by: prebuilt/capture-state.ts (createCaptureScope(), noteWrapperRender())
|
|
303
|
+
// Design doc: design/45-cache-lifetimes.md §Nesting Semantics
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* One in-flight `cache.component` payload capture — a build-time entry or
|
|
307
|
+
* a request-time re-render. Scoped to the capture's async context so a
|
|
308
|
+
* concurrent request's render does not observe it.
|
|
309
|
+
*/
|
|
310
|
+
export interface PrebuiltCaptureStore {
|
|
311
|
+
/** The component being captured. */
|
|
312
|
+
outerId: string;
|
|
313
|
+
/**
|
|
314
|
+
* Props half of the captured entry's cache key (null when unkeyable).
|
|
315
|
+
* Rendering `outerId` again with this key is a cycle (TIM-1547).
|
|
316
|
+
*/
|
|
317
|
+
outerPropsKey: string | null;
|
|
318
|
+
/** Wrapped components that rendered inside this capture, by component id. */
|
|
319
|
+
nested: Map<string, import('./prebuilt/capture-state.ts').NestedRecord>;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/** @internal — import via prebuilt/capture-state.ts */
|
|
323
|
+
export const prebuiltCaptureAls = getOrCreateAls<PrebuiltCaptureStore>(
|
|
324
|
+
Symbol.for('timber:prebuilt-capture-als')
|
|
325
|
+
);
|
|
@@ -53,6 +53,9 @@ export function parseBodySize(size: string): number {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
/** Strict integer pattern: one or more digits, nothing else. */
|
|
57
|
+
const STRICT_INTEGER_RE = /^\d+$/;
|
|
58
|
+
|
|
56
59
|
/** Check whether a request body exceeds the configured size limit (stateless, no ALS). */
|
|
57
60
|
export function enforceBodyLimits(
|
|
58
61
|
req: Request,
|
|
@@ -66,11 +69,16 @@ export function enforceBodyLimits(
|
|
|
66
69
|
return { ok: false, status: 411 };
|
|
67
70
|
}
|
|
68
71
|
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
// Reject malformed values: multiple values ("100, 999999"), negative numbers,
|
|
73
|
+
// floats ("100.5"), or non-numeric strings. parseInt would silently parse
|
|
74
|
+
// the first number from "100, 999999" as 100, letting the real body through.
|
|
75
|
+
const trimmed = contentLength.trim();
|
|
76
|
+
if (!STRICT_INTEGER_RE.test(trimmed)) {
|
|
71
77
|
return { ok: false, status: 411 };
|
|
72
78
|
}
|
|
73
79
|
|
|
80
|
+
const bodySize = Number.parseInt(trimmed, 10);
|
|
81
|
+
|
|
74
82
|
const limit = resolveLimit(kind, config);
|
|
75
83
|
return bodySize <= limit ? { ok: true } : { ok: false, status: 413 };
|
|
76
84
|
}
|
|
@@ -35,14 +35,40 @@ export interface BuildManifest {
|
|
|
35
35
|
modulepreload: Record<string, string[]>;
|
|
36
36
|
/** Map from input file path to font assets used by that module. */
|
|
37
37
|
fonts: Record<string, ManifestFontEntry[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Cache-busting hashes for metadata route files (opengraph-image, etc.).
|
|
40
|
+
* Map from file path (relative to project root) to short content hash.
|
|
41
|
+
* In dev mode this is empty — a startup nonce is used instead.
|
|
42
|
+
*/
|
|
43
|
+
metadataRouteHashes?: Record<string, string>;
|
|
44
|
+
/**
|
|
45
|
+
* Static request-dependency map from the Vite plugin's module-graph analysis.
|
|
46
|
+
* Map from segment entry file path to whether it's request-dependent.
|
|
47
|
+
* Used by buildSegmentInfo() for X-Timber-Segments in production.
|
|
48
|
+
*/
|
|
49
|
+
requestDep?: Record<string, boolean>;
|
|
38
50
|
}
|
|
39
51
|
|
|
40
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Empty build manifest used in dev mode, and the single source of truth for
|
|
54
|
+
* what an empty manifest contains.
|
|
55
|
+
*
|
|
56
|
+
* `virtual:timber-build-manifest` serializes this constant into its generated
|
|
57
|
+
* source rather than restating it — one literal for the dev module, one for the
|
|
58
|
+
* production module's `globalThis.__TIMBER_BUILD_MANIFEST__ ?? …` fallback.
|
|
59
|
+
* They were three hand-written objects that had already drifted: this one and
|
|
60
|
+
* the dev literal were missing `requestDep` while the production fallback had
|
|
61
|
+
* it, so a reader who grepped the built bundle for `requestDep` found the one
|
|
62
|
+
* copy that mentioned it and read the fallback as the shipped map (TIM-1300).
|
|
63
|
+
* A field added here now reaches every copy.
|
|
64
|
+
*/
|
|
41
65
|
export const EMPTY_BUILD_MANIFEST: BuildManifest = {
|
|
42
66
|
css: {},
|
|
43
67
|
js: {},
|
|
44
68
|
modulepreload: {},
|
|
45
69
|
fonts: {},
|
|
70
|
+
metadataRouteHashes: {},
|
|
71
|
+
requestDep: {},
|
|
46
72
|
};
|
|
47
73
|
|
|
48
74
|
/** Segment shape expected by collectRouteCss (matches ManifestSegmentNode). */
|
|
@@ -85,22 +111,15 @@ export function collectRouteCss(segments: SegmentWithFiles[], manifest: BuildMan
|
|
|
85
111
|
* via injectHead() before </head>.
|
|
86
112
|
*/
|
|
87
113
|
export function buildCssLinkTags(cssUrls: string[]): string {
|
|
114
|
+
// Emit only <link rel="stylesheet"> — no preload tags. CSS preloading
|
|
115
|
+
// is handled by 103 Early Hints (Link header) which fires before the
|
|
116
|
+
// HTML stream. Float also emits `<link rel="stylesheet" data-precedence>`
|
|
117
|
+
// at the top of <head> during Fizz rendering — the browser discovers
|
|
118
|
+
// CSS from that tag. A <link rel="preload"> here would arrive *after*
|
|
119
|
+
// Float's stylesheet tag and trigger "Preload was ignored" warnings.
|
|
88
120
|
return cssUrls.map((url) => `<link rel="stylesheet" href="${url}">`).join('');
|
|
89
121
|
}
|
|
90
122
|
|
|
91
|
-
/**
|
|
92
|
-
* Generate a Link header value for CSS preload hints.
|
|
93
|
-
*
|
|
94
|
-
* Cloudflare CDN automatically converts Link headers with rel=preload
|
|
95
|
-
* into 103 Early Hints responses. This avoids platform-specific 103
|
|
96
|
-
* sending code.
|
|
97
|
-
*
|
|
98
|
-
* Example output: `</assets/root.css>; rel=preload; as=style, </assets/page.css>; rel=preload; as=style`
|
|
99
|
-
*/
|
|
100
|
-
export function buildLinkHeaders(cssUrls: string[]): string {
|
|
101
|
-
return cssUrls.map((url) => `<${url}>; rel=preload; as=style`).join(', ');
|
|
102
|
-
}
|
|
103
|
-
|
|
104
123
|
// ─── Font utilities ──────────────────────────────────────────────────────
|
|
105
124
|
|
|
106
125
|
/**
|
|
@@ -148,44 +167,8 @@ export function buildFontPreloadTags(fonts: ManifestFontEntry[]): string {
|
|
|
148
167
|
.join('');
|
|
149
168
|
}
|
|
150
169
|
|
|
151
|
-
/**
|
|
152
|
-
* Generate Link header values for font preload hints.
|
|
153
|
-
*
|
|
154
|
-
* Cloudflare CDN converts Link headers with rel=preload into 103 Early Hints.
|
|
155
|
-
*
|
|
156
|
-
* Example: `</fonts/inter.woff2>; rel=preload; as=font; crossorigin`
|
|
157
|
-
*/
|
|
158
|
-
export function buildFontLinkHeaders(fonts: ManifestFontEntry[]): string {
|
|
159
|
-
return fonts.map((f) => `<${f.href}>; rel=preload; as=font; crossorigin`).join(', ');
|
|
160
|
-
}
|
|
161
|
-
|
|
162
170
|
// ─── JS chunk utilities ──────────────────────────────────────────────────
|
|
163
171
|
|
|
164
|
-
/**
|
|
165
|
-
* Collect JS chunk URLs for a matched route's segment chain.
|
|
166
|
-
*
|
|
167
|
-
* Walks segments root → leaf, collecting the JS chunk for each layout
|
|
168
|
-
* and page. Deduplicates while preserving order.
|
|
169
|
-
*/
|
|
170
|
-
export function collectRouteJs(segments: SegmentWithFiles[], manifest: BuildManifest): string[] {
|
|
171
|
-
const seen = new Set<string>();
|
|
172
|
-
const result: string[] = [];
|
|
173
|
-
|
|
174
|
-
for (const segment of segments) {
|
|
175
|
-
for (const file of [segment.layout, segment.page]) {
|
|
176
|
-
if (!file) continue;
|
|
177
|
-
const jsUrl = manifest.js[file.filePath];
|
|
178
|
-
if (!jsUrl) continue;
|
|
179
|
-
if (!seen.has(jsUrl)) {
|
|
180
|
-
seen.add(jsUrl);
|
|
181
|
-
result.push(jsUrl);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return result;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
172
|
/**
|
|
190
173
|
* Collect modulepreload URLs for a matched route's segment chain.
|
|
191
174
|
*
|
|
@@ -225,10 +208,3 @@ export function collectRouteModulepreloads(
|
|
|
225
208
|
export function buildModulepreloadTags(urls: string[]): string {
|
|
226
209
|
return urls.map((url) => `<link rel="modulepreload" href="${url}">`).join('');
|
|
227
210
|
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Generate a <script type="module"> tag for a JS entry point.
|
|
231
|
-
*/
|
|
232
|
-
export function buildEntryScriptTag(url: string): string {
|
|
233
|
-
return `<script type="module" src="${url}"></script>`;
|
|
234
|
-
}
|
|
@@ -13,11 +13,14 @@ export type CanonicalizeResult = { ok: true; pathname: string } | { ok: false; s
|
|
|
13
13
|
/**
|
|
14
14
|
* Encoded separators that produce a 400 rejection.
|
|
15
15
|
* %2f (/) and %5c (\) cause path-confusion attacks.
|
|
16
|
+
*
|
|
17
|
+
* Shared between the runtime canonicalizer and the build-time route scanner
|
|
18
|
+
* to ensure both enforce identical security rules. See design/13-security.md.
|
|
16
19
|
*/
|
|
17
|
-
const ENCODED_SEPARATOR_RE = /%2f|%5c/i;
|
|
20
|
+
export const ENCODED_SEPARATOR_RE = /%2f|%5c/i;
|
|
18
21
|
|
|
19
|
-
/** Null byte — rejected. */
|
|
20
|
-
const NULL_BYTE_RE = /%00/i;
|
|
22
|
+
/** Null byte — rejected. Shared with the route scanner. */
|
|
23
|
+
export const NULL_BYTE_RE = /%00/i;
|
|
21
24
|
|
|
22
25
|
/**
|
|
23
26
|
* Canonicalize a URL pathname.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How much of the URL a matched segment chain has consumed.
|
|
3
|
+
*
|
|
4
|
+
* One question — "which URL parts had been consumed by the time segment `i`
|
|
5
|
+
* rendered?" — asked by four things that must all agree:
|
|
6
|
+
*
|
|
7
|
+
* - the layout depth handed to `SegmentProvider` (`route-element-builder.ts`),
|
|
8
|
+
* which `useSelectedLayoutSegment(s)` indexes the live pathname with;
|
|
9
|
+
* - `slotUrlParts`, which slices the destination pathname for slot matching;
|
|
10
|
+
* - `resolveSlotProps` and `skippable-prefix.ts`, which derive content keys
|
|
11
|
+
* for slot skip decisions (TIM-1370).
|
|
12
|
+
*
|
|
13
|
+
* They were four separate `extractUrlParts(...).length` calls. That was fine
|
|
14
|
+
* while the answer was a plain walk, and stopped being fine when interception
|
|
15
|
+
* gave it a second term (TIM-1280): the fix landed on the layout depth alone
|
|
16
|
+
* and the other three kept the old walk, so a layout and the slots beside it
|
|
17
|
+
* disagreed about how deep they were. Hence one function, in its own module,
|
|
18
|
+
* rather than a helper on the side of whichever caller was fixed first.
|
|
19
|
+
*
|
|
20
|
+
* See design/07-routing.md §"Intercepting Routes".
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import type { ManifestSegmentNode } from './route-matcher.ts';
|
|
24
|
+
import type { RouteMatch } from './pipeline.ts';
|
|
25
|
+
import type { CoercedParams } from '../shared/param-value.ts';
|
|
26
|
+
import { effectiveUrlSegment } from '../routing/segment-classify.ts';
|
|
27
|
+
import { computeInterceptedBase } from '../routing/interception.ts';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Extract raw URL path parts from a segment chain.
|
|
31
|
+
*
|
|
32
|
+
* Each dynamic segment consumed one URL part (its param value). Static
|
|
33
|
+
* segments consumed their own name. Groups are transparent. Catch-all segments
|
|
34
|
+
* consumed multiple parts (their param value is `string[]`).
|
|
35
|
+
*
|
|
36
|
+
* The root segment is named '' and consumes nothing, so it is skipped here
|
|
37
|
+
* rather than by each caller — callers that pass a chain including the root
|
|
38
|
+
* (interception anchoring, slot-skip slicing) would otherwise have to remember
|
|
39
|
+
* to filter it, and one that forgot would push an empty part and shift every
|
|
40
|
+
* subsequent index by one.
|
|
41
|
+
*
|
|
42
|
+
* Uses rawSegmentParams (pre-coercion) to get actual URL strings. Values are
|
|
43
|
+
* coerced to `String()` defensively in case a codec leaked a non-string value
|
|
44
|
+
* into the params map.
|
|
45
|
+
*
|
|
46
|
+
* Each node is read through `effectiveUrlSegment`, so an intercepting
|
|
47
|
+
* directory contributes the URL part it intercepts (`(.)item` → `item`,
|
|
48
|
+
* `(.)[id]` → the bound value). A children-path interception puts such a node
|
|
49
|
+
* in the *main* chain, and reading it directly would classify it as neither
|
|
50
|
+
* static nor param-bearing — it would contribute nothing, and every part after
|
|
51
|
+
* it would shift by one.
|
|
52
|
+
*/
|
|
53
|
+
export function extractUrlParts(
|
|
54
|
+
segments: ManifestSegmentNode[],
|
|
55
|
+
mainParams: CoercedParams
|
|
56
|
+
): string[] {
|
|
57
|
+
const parts: string[] = [];
|
|
58
|
+
for (const node of segments) {
|
|
59
|
+
const seg = effectiveUrlSegment(node);
|
|
60
|
+
// The root's *directory* name is empty; read it off the node, since an
|
|
61
|
+
// intercepting node's effective name is the one it intercepts.
|
|
62
|
+
if (seg.segmentType === 'group') continue;
|
|
63
|
+
if (node.segmentName === '') continue;
|
|
64
|
+
if (seg.segmentType === 'static') {
|
|
65
|
+
parts.push(seg.segmentName);
|
|
66
|
+
} else if (seg.paramName) {
|
|
67
|
+
const value = mainParams[seg.paramName];
|
|
68
|
+
if (Array.isArray(value)) {
|
|
69
|
+
parts.push(...value.map(String));
|
|
70
|
+
} else if (value !== undefined) {
|
|
71
|
+
// Reconstruct the original URL part for affixed segments.
|
|
72
|
+
// The param value is the stripped middle (e.g. "123" for [id].png
|
|
73
|
+
// matching "123.png"), so we re-attach prefix/suffix so that slot
|
|
74
|
+
// matching through matchUrlParts sees the original part.
|
|
75
|
+
const prefix = seg.paramPrefix ?? '';
|
|
76
|
+
const suffix = seg.paramSuffix ?? '';
|
|
77
|
+
parts.push(prefix + String(value) + suffix);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return parts;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Where a children-path interception sits in the target pathname, or null when
|
|
86
|
+
* the chain contains none.
|
|
87
|
+
*
|
|
88
|
+
* `anchor` is the intercepted base's length — the URL index the intercepting
|
|
89
|
+
* node occupies — from the same `computeInterceptedBase` that rewrite
|
|
90
|
+
* generation and the slot resolver both go through, so the three cannot
|
|
91
|
+
* disagree about which part a marker points at.
|
|
92
|
+
*/
|
|
93
|
+
function interceptionAnchor(
|
|
94
|
+
segments: ManifestSegmentNode[]
|
|
95
|
+
): { index: number; anchor: number } | null {
|
|
96
|
+
const index = segments.findIndex((s) => s.segmentType === 'intercepting');
|
|
97
|
+
if (index <= 0) return null;
|
|
98
|
+
|
|
99
|
+
const owner = segments[index - 1];
|
|
100
|
+
const base = computeInterceptedBase(owner.urlPath, segments[index].interceptionMarker ?? '(.)');
|
|
101
|
+
return { index, anchor: base === '/' ? 0 : base.slice(1).split('/').length };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The URL parts the chain has consumed through `index`, inclusive.
|
|
106
|
+
*
|
|
107
|
+
* For an ordinary chain this is just the walk. Two things make it more than
|
|
108
|
+
* that, and both are cases where a node stands for a different number of URL
|
|
109
|
+
* parts than itself:
|
|
110
|
+
*
|
|
111
|
+
* - A **catch-all** consumes as many parts as the request supplies, which the
|
|
112
|
+
* walk already handles (its param value is an array).
|
|
113
|
+
* - An **interception with a climbing marker** intercepts a URL that starts
|
|
114
|
+
* *above* its owner, so the owner's own URL segment — and any static
|
|
115
|
+
* ancestor between the intercepted base and the owner — is not in the target
|
|
116
|
+
* at all. `feed/(..)photo/[id]` at `/photo/42` still has `feed` in the
|
|
117
|
+
* chain, and counting it puts everything after it off by one.
|
|
118
|
+
*
|
|
119
|
+
* So everything above the interception clamps to the anchor, and everything
|
|
120
|
+
* from it down counts forward from there. The owner chain is param-free by
|
|
121
|
+
* build-time rule and the intercepted base is a prefix of the owner's
|
|
122
|
+
* `urlPath`, so the target's leading `anchor` parts *are* the owner chain's
|
|
123
|
+
* leading `anchor` parts — which is what makes the clamped prefix real values
|
|
124
|
+
* rather than placeholders. For `(.)` the base is the owner's own path, so the
|
|
125
|
+
* clamp is a no-op and this reduces to the plain walk.
|
|
126
|
+
*/
|
|
127
|
+
export function consumedUrlParts(
|
|
128
|
+
segments: ManifestSegmentNode[],
|
|
129
|
+
index: number,
|
|
130
|
+
match: RouteMatch
|
|
131
|
+
): string[] {
|
|
132
|
+
const rawParams = match.rawSegmentParams;
|
|
133
|
+
const partsThrough = (from: number, to: number) =>
|
|
134
|
+
extractUrlParts(segments.slice(from, to + 1), rawParams);
|
|
135
|
+
|
|
136
|
+
const interception = interceptionAnchor(segments);
|
|
137
|
+
if (!interception) return partsThrough(0, index);
|
|
138
|
+
|
|
139
|
+
const targetPrefix = partsThrough(0, interception.index - 1).slice(0, interception.anchor);
|
|
140
|
+
|
|
141
|
+
if (index < interception.index) {
|
|
142
|
+
// Above the interception: an ancestor is never deeper than the anchor.
|
|
143
|
+
return targetPrefix.slice(0, Math.min(partsThrough(0, index).length, interception.anchor));
|
|
144
|
+
}
|
|
145
|
+
// At or below it: the intercepting subtree's parts ARE the target's.
|
|
146
|
+
return [...targetPrefix, ...partsThrough(interception.index, index)];
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* The index in `match.segments` of a segment, or -1.
|
|
151
|
+
*
|
|
152
|
+
* Split out so the three slot call sites and the layout-depth one derive their
|
|
153
|
+
* slice point identically — `indexOf` plus `consumedUrlParts` — instead of
|
|
154
|
+
* each inlining the pair.
|
|
155
|
+
*/
|
|
156
|
+
export function consumedPartsThroughSegment(
|
|
157
|
+
segment: ManifestSegmentNode,
|
|
158
|
+
match: RouteMatch
|
|
159
|
+
): string[] {
|
|
160
|
+
const index = match.segments.indexOf(segment);
|
|
161
|
+
if (index < 0) return [];
|
|
162
|
+
return consumedUrlParts(match.segments as ManifestSegmentNode[], index, match);
|
|
163
|
+
}
|