@timber-js/app 0.2.0-alpha.19 → 0.2.0-alpha.190
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 +344 -0
- package/dist/_chunks/actions-35jnMdeJ.js +318 -0
- package/dist/_chunks/actions-35jnMdeJ.js.map +1 -0
- package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
- package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
- package/dist/_chunks/base-path-DaQrzbez.js +80 -0
- package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
- package/dist/_chunks/build-output-helper-C3DrfzZR.js +369 -0
- package/dist/_chunks/build-output-helper-C3DrfzZR.js.map +1 -0
- package/dist/_chunks/cache-api-DjNrIWRR.js +1196 -0
- package/dist/_chunks/cache-api-DjNrIWRR.js.map +1 -0
- package/dist/_chunks/cli-check-CpmN7Nh-.js +256 -0
- package/dist/_chunks/cli-check-CpmN7Nh-.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-CGMp_Psg.js +298 -0
- package/dist/_chunks/cli-schema-sync-CGMp_Psg.js.map +1 -0
- package/dist/_chunks/cloudflare-CGP6BZKO.js +1284 -0
- package/dist/_chunks/cloudflare-CGP6BZKO.js.map +1 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/convention-lint-kXsgc_-7.js +784 -0
- package/dist/_chunks/convention-lint-kXsgc_-7.js.map +1 -0
- package/dist/_chunks/dist-BA3u1z3W.js +423 -0
- package/dist/_chunks/dist-BA3u1z3W.js.map +1 -0
- package/dist/_chunks/error-boundary-D-ODYX41.js +353 -0
- package/dist/_chunks/error-boundary-D-ODYX41.js.map +1 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
- package/dist/_chunks/file-cache-DmX7OqZP.js +454 -0
- package/dist/_chunks/file-cache-DmX7OqZP.js.map +1 -0
- package/dist/_chunks/format-CfwjgPz9.js +14 -0
- package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
- package/dist/_chunks/href-validation-CMc5JRls.js +141 -0
- package/dist/_chunks/href-validation-CMc5JRls.js.map +1 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
- package/dist/_chunks/logger-D8xJZXIN.js +1451 -0
- package/dist/_chunks/logger-D8xJZXIN.js.map +1 -0
- package/dist/_chunks/mdx-file-C005ay-P.js +25 -0
- package/dist/_chunks/mdx-file-C005ay-P.js.map +1 -0
- package/dist/_chunks/plugin-context-rCinWLiE.js +321 -0
- package/dist/_chunks/plugin-context-rCinWLiE.js.map +1 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
- package/dist/_chunks/router-ref-DuYuV_0Q.js +28 -0
- package/dist/_chunks/router-ref-DuYuV_0Q.js.map +1 -0
- package/dist/_chunks/rsc-cache-key-DD0fl_-s.js +243 -0
- package/dist/_chunks/rsc-cache-key-DD0fl_-s.js.map +1 -0
- package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js +40 -0
- package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js.map +1 -0
- package/dist/_chunks/rsc-media-type-DRqE_lD_.js +46 -0
- package/dist/_chunks/rsc-media-type-DRqE_lD_.js.map +1 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
- package/dist/_chunks/scanner-C8b0Gcw3.js +1564 -0
- package/dist/_chunks/scanner-C8b0Gcw3.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-CjOlyB8Y.js +97 -0
- package/dist/_chunks/segment-context-CjOlyB8Y.js.map +1 -0
- package/dist/_chunks/segment-keys-BawYuNFO.js +307 -0
- package/dist/_chunks/segment-keys-BawYuNFO.js.map +1 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
- package/dist/_chunks/slot-params-BCTmZkQB.js +76 -0
- package/dist/_chunks/slot-params-BCTmZkQB.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-14MXm7Pj.js} +17 -2
- package/dist/_chunks/ssr-data-14MXm7Pj.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/use-segment-params-C4r4BD9T.js +398 -0
- package/dist/_chunks/use-segment-params-C4r4BD9T.js.map +1 -0
- package/dist/_chunks/walkers-RzN6AFjr.js +141 -0
- package/dist/_chunks/walkers-RzN6AFjr.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +72 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +73 -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 +124 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +199 -21
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -188
- package/dist/adapters/compress-module.d.ts +17 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +64 -0
- package/dist/adapters/fs-identity.d.ts.map +1 -0
- package/dist/adapters/nitro.d.ts +55 -3
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +287 -171
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +62 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +28 -6
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/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 +31 -8
- 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 +140 -8
- package/dist/cache/redis-handler.d.ts.map +1 -1
- package/dist/cache/singleflight.d.ts +19 -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 +20 -10
- 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 +16 -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 +153 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +66 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +151 -47
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +37 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
- package/dist/client/browser-entry/action-dispatch.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 +57 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +29 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +29 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +30 -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/error-boundary.d.ts +19 -5
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +1 -125
- package/dist/client/error-reconstituter.d.ts +61 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/history.d.ts +29 -7
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +11 -24
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +186 -1134
- 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 +1624 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +63 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/navigation-api.d.ts +121 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-commit.d.ts +87 -0
- package/dist/client/navigation-commit.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +38 -20
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +159 -0
- package/dist/client/navigation-root.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/router-effects.d.ts +129 -0
- package/dist/client/router-effects.d.ts.map +1 -0
- package/dist/client/router-lifecycle.d.ts +55 -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 +207 -0
- package/dist/client/router-types.d.ts.map +1 -0
- package/dist/client/router.d.ts +1 -97
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +113 -26
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +107 -25
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +57 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +21 -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-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 +19 -4
- 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 +11 -2
- package/dist/client/state.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +10 -4
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +2 -2
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +12 -5
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +26 -14
- 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 +284 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +51 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/content/index.d.ts +1 -10
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +0 -2
- 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 +2 -1
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +257 -36
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +34 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +50 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +40 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/dev-page-shell.d.ts +78 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +32 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +54 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/hydration-overlay.d.ts +11 -0
- package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/dev-tools/instrumentation.d.ts +59 -0
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/fonts/ast-walk.d.ts +68 -0
- package/dist/fonts/ast-walk.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +110 -6
- 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/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 +4 -2
- package/dist/fonts/google.d.ts.map +1 -1
- package/dist/fonts/local.d.ts +4 -4
- package/dist/fonts/local.d.ts.map +1 -1
- package/dist/fonts/paths.d.ts +43 -0
- package/dist/fonts/paths.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +177 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +82 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +47 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +77 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +50 -181
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9805 -14134
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +81 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +34 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +276 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +21 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +7 -3
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +47 -10
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +64 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/callsite-ast.d.ts +117 -0
- package/dist/plugins/callsite-ast.d.ts.map +1 -0
- package/dist/plugins/callsite-jsx.d.ts +35 -0
- package/dist/plugins/callsite-jsx.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +11 -4
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +40 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +21 -0
- package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-server.d.ts +17 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +28 -4
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +16 -73
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/mdx.d.ts +1 -1
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/prebuilt-capture.d.ts +60 -0
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
- package/dist/plugins/prebuilt.d.ts +82 -0
- package/dist/plugins/prebuilt.d.ts.map +1 -0
- package/dist/plugins/prerender-sugar.d.ts +42 -0
- package/dist/plugins/prerender-sugar.d.ts.map +1 -0
- package/dist/plugins/request-dep/analysis.d.ts +106 -0
- package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
- package/dist/plugins/request-dep/index.d.ts +75 -0
- package/dist/plugins/request-dep/index.d.ts.map +1 -0
- package/dist/plugins/request-dep/origin.d.ts +61 -0
- package/dist/plugins/request-dep/origin.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +29 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +218 -21
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +26 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +61 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen-write.d.ts +51 -0
- package/dist/routing/codegen-write.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +7 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/collision-probe.d.ts +104 -0
- package/dist/routing/collision-probe.d.ts.map +1 -0
- package/dist/routing/collision-spaces.d.ts +26 -0
- package/dist/routing/collision-spaces.d.ts.map +1 -0
- package/dist/routing/convention-lint.d.ts +55 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/export-detect.d.ts +72 -0
- package/dist/routing/export-detect.d.ts.map +1 -0
- package/dist/routing/file-cache.d.ts +8 -0
- package/dist/routing/file-cache.d.ts.map +1 -0
- package/dist/routing/index.d.ts +7 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +5 -2
- 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 +1 -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 +117 -0
- package/dist/routing/segment-keys.d.ts.map +1 -0
- package/dist/routing/slot-placement.d.ts +48 -0
- package/dist/routing/slot-placement.d.ts.map +1 -0
- package/dist/routing/types.d.ts +74 -26
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +57 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +12 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- 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 +26 -10
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +42 -7
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +35 -1
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +12 -33
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +110 -11
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +8 -18
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +25 -30
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/canonicalize.d.ts +10 -0
- package/dist/server/canonicalize.d.ts.map +1 -1
- package/dist/server/chain-url-parts.d.ts +81 -0
- package/dist/server/chain-url-parts.d.ts.map +1 -0
- package/dist/server/children-interception.d.ts +49 -0
- package/dist/server/children-interception.d.ts.map +1 -0
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/compress.d.ts.map +1 -1
- package/dist/server/cookie-context.d.ts +170 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +65 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/default-status-page.d.ts +45 -0
- package/dist/server/default-status-page.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +247 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +16 -5
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +13 -11
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +86 -10
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/fallback-error.d.ts +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +42 -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/head-response.d.ts +35 -0
- package/dist/server/head-response.d.ts.map +1 -0
- package/dist/server/html-injector-core.d.ts +242 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +82 -41
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +10 -47
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +183 -2906
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +51 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +4154 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +39 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-collector.d.ts +52 -0
- package/dist/server/metadata-collector.d.ts.map +1 -0
- package/dist/server/metadata-routes.d.ts +60 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata.d.ts +8 -0
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +19 -4
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +119 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/param-coercion.d.ts +70 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +77 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +59 -9
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +6 -0
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +49 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +59 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +151 -19
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +117 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/prebuilt/cache-key.d.ts +62 -0
- package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-state.d.ts +57 -0
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
- package/dist/server/prebuilt/key-discipline.d.ts +23 -0
- package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
- package/dist/server/prebuilt/overlay.d.ts +100 -0
- package/dist/server/prebuilt/overlay.d.ts.map +1 -0
- package/dist/server/prebuilt/payload-source.d.ts +78 -0
- package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +99 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -0
- package/dist/server/prebuilt/synthetic-store.d.ts +66 -0
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
- package/dist/server/prebuilt-builder.d.ts +120 -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 +100 -44
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/publish-params.d.ts +33 -0
- package/dist/server/publish-params.d.ts.map +1 -0
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/render-utils.d.ts +25 -0
- package/dist/server/render-utils.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +109 -106
- 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/route-element-builder.d.ts +74 -27
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +38 -36
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-cache-key-guard.d.ts +78 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +12 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +38 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +59 -42
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +39 -6
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +51 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +5 -6
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +40 -3
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +36 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +129 -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 +26 -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 +139 -5
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-bridge-types.d.ts +138 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +1 -43
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +64 -21
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +61 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +44 -9
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/static-generator.d.ts +112 -0
- package/dist/server/static-generator.d.ts.map +1 -0
- package/dist/server/static-not-found.d.ts +52 -0
- package/dist/server/static-not-found.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +26 -15
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +47 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +44 -9
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +66 -42
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +49 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +76 -6
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +40 -0
- package/dist/server/utils/element-type.d.ts.map +1 -0
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/utils/mdx-file.d.ts +15 -0
- package/dist/server/utils/mdx-file.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/server/workers-cache-bridge.d.ts +26 -0
- package/dist/server/workers-cache-bridge.d.ts.map +1 -0
- package/dist/shared/als-slots.d.ts +41 -0
- package/dist/shared/als-slots.d.ts.map +1 -0
- package/dist/shared/base-path.d.ts +56 -0
- package/dist/shared/base-path.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +49 -0
- package/dist/shared/href-validation.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shared/param-value.d.ts +80 -0
- package/dist/shared/param-value.d.ts.map +1 -0
- package/dist/shared/payload-root.d.ts +108 -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 +25 -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 +40 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -0
- package/dist/shared/rsc-payload-path.d.ts +42 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -0
- package/dist/shared/segment-info.d.ts +66 -0
- package/dist/shared/segment-info.d.ts.map +1 -0
- package/dist/shared/slot-params.d.ts +51 -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/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.d.ts +10 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +233 -0
- package/docs/api/31-api-client.mdx +163 -0
- package/docs/api/32-api-cache.mdx +311 -0
- package/docs/api/33-api-search-params.mdx +176 -0
- package/docs/api/34-api-config.mdx +325 -0
- package/docs/api/35-api-typescript.mdx +170 -0
- package/docs/api/36-cli.mdx +170 -0
- package/docs/learn/00-introduction.mdx +109 -0
- package/docs/learn/01-quick-start.mdx +94 -0
- package/docs/learn/02-pages-and-layouts.mdx +147 -0
- package/docs/learn/03-fetching-data.mdx +211 -0
- package/docs/learn/03b-access-control.mdx +130 -0
- package/docs/learn/04-loading-states.mdx +67 -0
- package/docs/learn/04b-the-flush-point.mdx +115 -0
- package/docs/learn/05-typed-params.mdx +275 -0
- package/docs/learn/06-forms-and-actions.mdx +146 -0
- package/docs/learn/07-typed-routes.mdx +132 -0
- package/docs/learn/08-streaming.mdx +146 -0
- package/docs/learn/09-caching.mdx +252 -0
- package/docs/learn/10-middleware.mdx +157 -0
- package/docs/learn/11-error-handling.mdx +173 -0
- package/docs/learn/12-client-navigation.mdx +176 -0
- package/docs/learn/13-configuration.mdx +166 -0
- package/docs/learn/14-deploying.mdx +287 -0
- package/docs/more/01-advanced-routing.mdx +343 -0
- package/docs/more/02-advanced-forms.mdx +137 -0
- package/docs/more/03-coming-from-nextjs.mdx +186 -0
- package/docs/more/04-metadata-and-fonts.mdx +193 -0
- package/docs/more/04b-mdx.mdx +209 -0
- package/docs/more/05-content-collections.mdx +90 -0
- package/docs/more/06-instrumentation.mdx +214 -0
- package/docs/more/07-security.mdx +129 -0
- package/docs/more/08-developer-experience.mdx +134 -0
- package/docs/more/40-why-timber.mdx +50 -0
- package/docs/more/41-timber-vs-nextjs.mdx +81 -0
- package/docs/more/42-timber-vs-others.mdx +68 -0
- package/docs/more/50-ai-agent-instructions.mdx +171 -0
- package/llms.txt +55 -0
- package/package.json +108 -26
- package/src/adapters/build-output-helper.ts +351 -0
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +204 -0
- package/src/adapters/cloudflare.ts +740 -129
- package/src/adapters/compress-module.ts +101 -88
- package/src/adapters/fs-identity.ts +156 -0
- package/src/adapters/nitro.ts +320 -120
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +274 -0
- package/src/adapters/types.ts +28 -7
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/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 +114 -21
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/json-lossy-check.ts +75 -0
- package/src/cache/redis-handler.ts +197 -19
- package/src/cache/singleflight.ts +64 -6
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/store.ts +71 -0
- package/src/cache/stores/cloudflare-kv.ts +52 -0
- package/src/cache/stores/memory.ts +125 -0
- package/src/cache/stores/redis.ts +97 -0
- package/src/cache/stores/vercel.ts +59 -0
- package/src/cache/tag-aware-handler.ts +237 -0
- package/src/cache/timber-cache.ts +161 -36
- 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 +17 -0
- package/src/cdn/purge-store.ts +34 -0
- package/src/cdn/workers-cache-purge.ts +30 -0
- package/src/cli-check.ts +458 -0
- package/src/cli-schema-sync.ts +401 -0
- package/src/cli.ts +221 -53
- package/src/client/browser-dev.ts +156 -1
- package/src/client/browser-entry/action-dispatch.ts +130 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +198 -0
- package/src/client/browser-entry/index.ts +121 -0
- package/src/client/browser-entry/post-hydration.ts +122 -0
- package/src/client/browser-entry/router-init.ts +342 -0
- package/src/client/browser-entry/rsc-stream.ts +166 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/error-boundary.tsx +210 -36
- package/src/client/error-reconstituter.tsx +79 -0
- package/src/client/form.tsx +31 -32
- package/src/client/history.ts +29 -7
- package/src/client/index.ts +78 -45
- package/src/client/internal.ts +59 -0
- package/src/client/link.tsx +397 -150
- package/src/client/navigation-api.ts +345 -0
- package/src/client/navigation-commit.ts +197 -0
- package/src/client/navigation-context.ts +43 -62
- package/src/client/navigation-root.tsx +580 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/params-context.ts +192 -0
- package/src/client/router-effects.ts +231 -0
- package/src/client/router-lifecycle.ts +288 -0
- package/src/client/router-pipeline.ts +393 -0
- package/src/client/router-ref.ts +2 -2
- package/src/client/router-skew.ts +30 -0
- package/src/client/router-types.ts +230 -0
- package/src/client/router.ts +339 -410
- package/src/client/rsc-fetch.ts +530 -73
- package/src/client/segment-cache.ts +224 -38
- package/src/client/segment-outlet.tsx +141 -0
- package/src/client/segment-update-context.ts +42 -0
- package/src/client/shallow-url.ts +22 -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 +19 -5
- package/src/client/stale-client.ts +191 -0
- package/src/client/state.ts +16 -3
- package/src/client/top-loader.tsx +13 -10
- package/src/client/unload-guard.ts +34 -2
- package/src/client/use-cookie.ts +69 -17
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +1 -0
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +206 -36
- package/src/client/use-router.ts +5 -2
- package/src/client/use-search-params.ts +31 -44
- package/src/client/{use-params.ts → use-segment-params.ts} +49 -23
- package/src/codec.ts +149 -0
- package/src/config-types.ts +282 -0
- package/src/config-validation.ts +330 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +222 -53
- package/src/cookies/index.ts +12 -1
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +192 -0
- package/src/dev-tools/404-page.ts +286 -0
- package/src/dev-tools/browser-logs.ts +55 -0
- package/src/dev-tools/dev-page-shell.ts +260 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +187 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +83 -0
- package/src/dev-tools/instrumentation.ts +213 -0
- package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
- package/src/dev-tools/overlay.ts +469 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +182 -0
- package/src/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +477 -126
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/dev-middleware.ts +85 -0
- package/src/fonts/fallbacks.ts +0 -23
- package/src/fonts/google.ts +100 -18
- package/src/fonts/local.ts +9 -8
- package/src/fonts/paths.ts +58 -0
- package/src/fonts/pipeline.ts +348 -0
- package/src/fonts/transform.ts +311 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +468 -353
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +84 -0
- package/src/plugin-context.ts +503 -0
- package/src/plugins/adapter-build.ts +229 -7
- package/src/plugins/build-manifest.ts +201 -26
- package/src/plugins/build-report.ts +259 -47
- package/src/plugins/cache.ts +243 -0
- package/src/plugins/callsite-ast.ts +472 -0
- package/src/plugins/callsite-jsx.ts +243 -0
- package/src/plugins/chunks.ts +74 -5
- package/src/plugins/client-chunks.ts +185 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +284 -94
- package/src/plugins/entries.ts +138 -16
- package/src/plugins/fonts.ts +228 -660
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/prebuilt-capture.ts +217 -0
- package/src/plugins/prebuilt-options-analysis.ts +175 -0
- package/src/plugins/prebuilt.ts +655 -0
- package/src/plugins/prerender-sugar.ts +328 -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 +268 -277
- package/src/plugins/server-bundle.ts +89 -12
- package/src/plugins/shims.ts +240 -64
- package/src/plugins/static-build.ts +704 -66
- package/src/routing/codegen-shared.ts +39 -0
- package/src/routing/codegen-types.ts +62 -0
- package/src/routing/codegen-write.ts +139 -0
- package/src/routing/codegen.ts +339 -231
- package/src/routing/collision-probe.ts +438 -0
- package/src/routing/collision-spaces.ts +281 -0
- package/src/routing/convention-lint.ts +493 -0
- package/src/routing/export-detect.ts +448 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +10 -1
- package/src/routing/interception.ts +894 -67
- package/src/routing/link-codegen.ts +280 -0
- package/src/routing/manifest-codegen.ts +226 -0
- package/src/routing/scanner.ts +368 -218
- package/src/routing/schema-validation.ts +155 -0
- package/src/routing/segment-classify.ts +280 -0
- package/src/routing/segment-codegen.ts +98 -0
- package/src/routing/segment-keys.ts +183 -0
- package/src/routing/slot-placement.ts +97 -0
- package/src/routing/types.ts +75 -26
- package/src/routing/walkers.ts +98 -0
- package/src/rsc-runtime/rsc.ts +9 -0
- package/src/rsc-runtime/ssr.ts +50 -0
- package/src/rsc-runtime/vendor-types.d.ts +7 -0
- package/src/schema-bridge.ts +380 -0
- package/src/search-params/define.ts +677 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/parse-total.ts +91 -0
- package/src/search-params/serialize-equal.ts +14 -0
- package/src/search-params/wrappers.ts +150 -0
- package/src/server/access-gate.tsx +121 -51
- package/src/server/action-client.ts +120 -29
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +127 -38
- package/src/server/actions.ts +54 -57
- package/src/server/als-registry.ts +154 -20
- package/src/server/asset-headers.ts +15 -37
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +33 -57
- package/src/server/canonicalize.ts +6 -3
- package/src/server/chain-url-parts.ts +162 -0
- package/src/server/children-interception.ts +115 -0
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +43 -8
- package/src/server/cookie-context.ts +484 -0
- package/src/server/cookie-parsing.ts +163 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/default-logger.ts +99 -0
- package/src/server/default-status-page.ts +127 -0
- package/src/server/deny-boundary.ts +516 -0
- package/src/server/deny-renderer.ts +181 -101
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/early-hints.ts +37 -27
- package/src/server/error-boundary-wrapper.ts +170 -44
- package/src/server/fallback-error.ts +79 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/form-data.ts +124 -12
- package/src/server/head-response.ts +54 -0
- package/src/server/html-injector-core.ts +495 -0
- package/src/server/html-injectors.ts +271 -254
- package/src/server/index.ts +29 -185
- package/src/server/internal.ts +181 -0
- package/src/server/logger.ts +72 -36
- package/src/server/metadata-collector.ts +115 -0
- package/src/server/metadata-routes.ts +205 -24
- package/src/server/metadata.ts +21 -0
- package/src/server/middleware-runner.ts +31 -4
- package/src/server/node-stream-transforms.ts +336 -0
- package/src/server/param-coercion.ts +189 -0
- package/src/server/pipeline-helpers.ts +159 -0
- package/src/server/pipeline-interception.ts +109 -33
- package/src/server/pipeline-metadata.ts +14 -0
- package/src/server/pipeline-outcome.ts +196 -0
- package/src/server/pipeline-phases.ts +597 -0
- package/src/server/pipeline.ts +321 -382
- package/src/server/port-resolution.ts +215 -0
- package/src/server/prebuilt/cache-key.ts +298 -0
- package/src/server/prebuilt/capture-state.ts +89 -0
- package/src/server/prebuilt/key-discipline.ts +53 -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 +201 -0
- package/src/server/prebuilt/slots.ts +190 -0
- package/src/server/prebuilt/synthetic-store.ts +121 -0
- package/src/server/prebuilt-builder.ts +803 -0
- package/src/server/prebuilt-runtime.ts +815 -0
- package/src/server/primitives.ts +174 -90
- package/src/server/publish-params.ts +42 -0
- package/src/server/render-timeout.ts +108 -0
- package/src/server/render-utils.ts +31 -0
- package/src/server/request-context.ts +245 -333
- package/src/server/request-dep.ts +37 -0
- package/src/server/route-element-builder.ts +687 -307
- package/src/server/route-handler.ts +39 -12
- package/src/server/route-matcher.ts +162 -269
- package/src/server/rsc-cache-key-guard.ts +164 -0
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/api-handler.ts +67 -32
- package/src/server/rsc-entry/deny-fallback.ts +93 -0
- package/src/server/rsc-entry/error-renderer.ts +370 -94
- package/src/server/rsc-entry/helpers.ts +226 -95
- package/src/server/rsc-entry/index.ts +357 -330
- package/src/server/rsc-entry/render-route.ts +308 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
- package/src/server/rsc-entry/rsc-payload.ts +188 -55
- package/src/server/rsc-entry/rsc-stream.ts +122 -18
- package/src/server/rsc-entry/ssr-bridge.ts +18 -5
- package/src/server/rsc-entry/ssr-renderer.ts +299 -80
- package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/server-only-guard-noop.js +3 -0
- package/src/server/sitemap-generator.ts +339 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/skippable-prefix.ts +74 -0
- package/src/server/slot-interception.ts +168 -0
- package/src/server/slot-resolver.ts +677 -294
- package/src/server/ssr-bridge-types.ts +142 -0
- package/src/server/ssr-entry.ts +216 -78
- package/src/server/ssr-render.ts +345 -82
- package/src/server/ssr-wrappers.tsx +142 -0
- package/src/server/state-tree-diff.ts +85 -30
- package/src/server/static-generator.ts +715 -0
- package/src/server/static-not-found.ts +134 -0
- package/src/server/status-code-resolver.ts +107 -148
- package/src/server/stream-utils.ts +288 -0
- package/src/server/tracing.ts +126 -14
- package/src/server/tree-builder.ts +99 -168
- package/src/server/tree-match.ts +262 -0
- package/src/server/types.ts +83 -9
- package/src/server/utils/element-type.ts +72 -0
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/utils/mdx-file.ts +22 -0
- package/src/server/version-skew.ts +104 -0
- package/src/server/workers-cache-bridge.ts +33 -0
- package/src/shared/als-slots.ts +72 -0
- package/src/shared/base-path.ts +80 -0
- package/src/shared/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/param-value.ts +244 -0
- package/src/shared/payload-root.ts +151 -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 +31 -0
- package/src/shared/rsc-manifest.ts +29 -0
- package/src/shared/rsc-media-type.ts +43 -0
- package/src/shared/rsc-payload-path.ts +45 -0
- package/src/shared/segment-info.ts +67 -0
- package/src/shared/slot-params.ts +111 -0
- package/src/shared/static-platform-files.ts +75 -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.ts +10 -7
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-B3Gypr3D.js +0 -108
- package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
- package/dist/_chunks/format-RyoGQL74.js +0 -164
- package/dist/_chunks/format-RyoGQL74.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js +0 -676
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js +0 -153
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
- package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
- package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
- package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
- package/dist/_chunks/tracing-CemImE6h.js +0 -187
- package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
- package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
- package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
- package/dist/_chunks/use-query-states-D5KaffOK.js +0 -109
- package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/error-boundary.js.map +0 -1
- package/dist/client/head.d.ts +0 -16
- package/dist/client/head.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/segment-merger.d.ts +0 -119
- package/dist/client/segment-merger.d.ts.map +0 -1
- package/dist/client/stale-reload.d.ts +0 -44
- package/dist/client/stale-reload.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts +0 -74
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts +0 -26
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts.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 +0 -60
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/search-params/registry.d.ts +0 -20
- package/dist/search-params/registry.d.ts.map +0 -1
- package/dist/server/client-module-map.d.ts +0 -47
- package/dist/server/client-module-map.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts +0 -29
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts +0 -129
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/flush.d.ts +0 -74
- package/dist/server/flush.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -103
- package/src/client/browser-entry.ts +0 -678
- package/src/client/head.ts +0 -61
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/segment-merger.ts +0 -339
- package/src/client/stale-reload.ts +0 -87
- package/src/client/transition-root.tsx +0 -166
- package/src/client/use-navigation-pending.ts +0 -38
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/codecs.ts +0 -153
- package/src/search-params/create.ts +0 -321
- package/src/search-params/registry.ts +0 -31
- package/src/server/client-module-map.ts +0 -58
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/dev-warnings.ts +0 -283
- package/src/server/flush.ts +0 -182
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/utils/directive-parser.ts +0 -529
|
@@ -6,28 +6,65 @@
|
|
|
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 { SlotParamsRecord } from '../shared/slot-params.js';
|
|
23
36
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
37
|
+
import type { DebugComponentEntry } from './rsc-entry/helpers.js';
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Return a process-wide singleton `AsyncLocalStorage` keyed by `symbol`.
|
|
41
|
+
*
|
|
42
|
+
* `Symbol.for(...)` keys live in the cross-realm symbol registry, and
|
|
43
|
+
* `globalThis` is shared across every module evaluation inside the same
|
|
44
|
+
* Node.js process. Together they give a stable anchor that survives
|
|
45
|
+
* re-evaluation of this file — the second evaluation observes the
|
|
46
|
+
* `globalThis[symbol]` slot already populated by the first and hands
|
|
47
|
+
* back the identical ALS instance.
|
|
48
|
+
*/
|
|
49
|
+
function getOrCreateAls<T>(symbol: symbol): AsyncLocalStorage<T> {
|
|
50
|
+
const g = globalThis as unknown as Record<symbol, unknown>;
|
|
51
|
+
const existing = g[symbol];
|
|
52
|
+
if (existing instanceof AsyncLocalStorage) {
|
|
53
|
+
return existing as AsyncLocalStorage<T>;
|
|
54
|
+
}
|
|
55
|
+
const created = new AsyncLocalStorage<T>();
|
|
56
|
+
g[symbol] = created;
|
|
57
|
+
return created;
|
|
58
|
+
}
|
|
24
59
|
|
|
25
60
|
// ─── Request Context ──────────────────────────────────────────────────────
|
|
26
|
-
// Used by: request-context.ts (
|
|
61
|
+
// Used by: request-context.ts (getHeaders(), getCookies(), getSearchParams())
|
|
27
62
|
// Design doc: design/04-authorization.md
|
|
28
63
|
|
|
29
64
|
/** @internal — import via request-context.ts public API */
|
|
30
|
-
export const requestContextAls =
|
|
65
|
+
export const requestContextAls = getOrCreateAls<RequestContextStore>(
|
|
66
|
+
Symbol.for('timber:request-context-als')
|
|
67
|
+
);
|
|
31
68
|
|
|
32
69
|
export interface RequestContextStore {
|
|
33
70
|
/** Incoming request headers (read-only view). */
|
|
@@ -39,28 +76,98 @@ export interface RequestContextStore {
|
|
|
39
76
|
/** Original (pre-overlay) frozen headers, kept for overlay merging. */
|
|
40
77
|
originalHeaders: Headers;
|
|
41
78
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
79
|
+
* Raw URLSearchParams for the current request.
|
|
80
|
+
* To get typed parsed params, import a search params definition and
|
|
81
|
+
* call `.parse(searchParams())`.
|
|
82
|
+
*/
|
|
83
|
+
searchParams: URLSearchParams;
|
|
84
|
+
/**
|
|
85
|
+
* Raw search string from the request URL (e.g. "?foo=bar&baz=1").
|
|
86
|
+
* Available synchronously for use in `redirect()` with `preserveSearchParams`.
|
|
45
87
|
*/
|
|
46
|
-
|
|
88
|
+
searchString: string;
|
|
89
|
+
/**
|
|
90
|
+
* Coerced segment params for the current request.
|
|
91
|
+
* Set by the pipeline after route matching and param coercion, before
|
|
92
|
+
* middleware and rendering. Pages and layouts read params via
|
|
93
|
+
* `getSegmentParams()` instead of receiving them as a prop.
|
|
94
|
+
*
|
|
95
|
+
* See design/07-routing.md §"params.ts — Convention File for Typed Params"
|
|
96
|
+
*/
|
|
97
|
+
segmentParams?: Record<string, string | string[]>;
|
|
98
|
+
/**
|
|
99
|
+
* The matched segment path (e.g. '/(browse)/[artistSlug]/[year]').
|
|
100
|
+
* Includes route groups and parallel slots — uniquely identifies the
|
|
101
|
+
* segment in the route tree. Set by the pipeline alongside segmentParams.
|
|
102
|
+
* Used by getSegmentParams() for dev-mode validation.
|
|
103
|
+
* See design/41-global-params.md §Runtime Validation
|
|
104
|
+
*/
|
|
105
|
+
matchedSegmentPath?: string;
|
|
106
|
+
/**
|
|
107
|
+
* Per-slot coerced segment params, keyed by the slot's full tree path
|
|
108
|
+
* (e.g. '/(browse)/@shows/[artistSlug]/[...year]').
|
|
109
|
+
*
|
|
110
|
+
* Each slot walks its own segment tree and may interpret URL parts
|
|
111
|
+
* differently from the main route (e.g. catch-all vs dynamic). This
|
|
112
|
+
* map stores slot-specific params so getSegmentParams(segmentPath)
|
|
113
|
+
* returns the correct types for slot pages.
|
|
114
|
+
*
|
|
115
|
+
* See design/07-routing.md §"Parallel Slot Params"
|
|
116
|
+
*/
|
|
117
|
+
slotParams?: SlotParamsRecord;
|
|
47
118
|
/** Outgoing Set-Cookie entries (name → serialized value + options). Last write wins. */
|
|
48
119
|
cookieJar: Map<string, CookieEntry>;
|
|
49
120
|
/** Whether the response has flushed (headers committed). */
|
|
50
121
|
flushed: boolean;
|
|
51
122
|
/** Whether the current context allows cookie mutation. */
|
|
52
123
|
mutableContext: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Set by AccessGate or PageDenyBoundary when a DenySignal is caught
|
|
126
|
+
* server-side (inside the React tree, before React Flight sees it).
|
|
127
|
+
* The pipeline reads this after render to set the HTTP status code.
|
|
128
|
+
* See TIM-666.
|
|
129
|
+
*/
|
|
130
|
+
denyStatus?: number;
|
|
131
|
+
/**
|
|
132
|
+
* Callback fired when setDenyStatus() is called. Used by shellSettled
|
|
133
|
+
* to short-circuit when any component catches a DenySignal in-tree,
|
|
134
|
+
* regardless of which component caught it (AccessGate, TracedLayout,
|
|
135
|
+
* or PageDenyBoundary). See TIM-1208.
|
|
136
|
+
*/
|
|
137
|
+
onDenyStatus?: () => void;
|
|
138
|
+
/**
|
|
139
|
+
* Dev-only: getter for the current request's RSC debug components.
|
|
140
|
+
* Set by renderRoute() so onPipelineError can include component tree
|
|
141
|
+
* context for render-phase errors without module-level shared state.
|
|
142
|
+
*/
|
|
143
|
+
debugComponentsGetter?: () => DebugComponentEntry[];
|
|
144
|
+
/**
|
|
145
|
+
* Index of the first segment whose AccessGate denied during render.
|
|
146
|
+
* Recorded by AccessGate when it catches a DenySignal so post-render
|
|
147
|
+
* consumers (buildSegmentInfo, X-Timber-Segments header) can bound
|
|
148
|
+
* the segment list without a pre-render access pass. Infinity when
|
|
149
|
+
* no segment denied. See TIM-1363.
|
|
150
|
+
*/
|
|
151
|
+
_firstDeniedSegmentIndex?: number;
|
|
152
|
+
/**
|
|
153
|
+
* Metadata entries collected during render by MetadataCollector.
|
|
154
|
+
* Populated per-segment in tree order (root→page) during
|
|
155
|
+
* renderToReadableStream. MetadataHead reads all entries,
|
|
156
|
+
* merges them, and renders Float-hoisted head elements.
|
|
157
|
+
* See TIM-1363, design/16-metadata.md.
|
|
158
|
+
*/
|
|
159
|
+
_metadataEntries?: import('./metadata.js').SegmentMetadataEntry[];
|
|
53
160
|
}
|
|
54
161
|
|
|
55
162
|
/** A single outgoing cookie entry in the cookie jar. */
|
|
56
163
|
export interface CookieEntry {
|
|
57
164
|
name: string;
|
|
58
165
|
value: string;
|
|
59
|
-
options: import('./
|
|
166
|
+
options: import('./cookie-context.js').CookieOptions;
|
|
60
167
|
}
|
|
61
168
|
|
|
62
169
|
// ─── Tracing ──────────────────────────────────────────────────────────────
|
|
63
|
-
// Used by: tracing.ts (
|
|
170
|
+
// Used by: tracing.ts (getTraceId(), getSpanId())
|
|
64
171
|
// Design doc: design/17-logging.md
|
|
65
172
|
|
|
66
173
|
export interface TraceStore {
|
|
@@ -68,10 +175,17 @@ export interface TraceStore {
|
|
|
68
175
|
traceId: string;
|
|
69
176
|
/** OTEL span ID if available, undefined otherwise. */
|
|
70
177
|
spanId?: string;
|
|
178
|
+
/**
|
|
179
|
+
* Innermost active native platform span (e.g. Cloudflare's `Span` from
|
|
180
|
+
* tracing.enterSpan()). Tracked so setSpanAttribute() can set attributes
|
|
181
|
+
* after span creation — the platform API has no getActiveSpan() equivalent.
|
|
182
|
+
* Saved/restored by withSpan() around each callback. See TIM-1135.
|
|
183
|
+
*/
|
|
184
|
+
platformSpan?: import('./tracing.js').PlatformSpan;
|
|
71
185
|
}
|
|
72
186
|
|
|
73
187
|
/** @internal — import via tracing.ts public API */
|
|
74
|
-
export const traceAls =
|
|
188
|
+
export const traceAls = getOrCreateAls<TraceStore>(Symbol.for('timber:trace-als'));
|
|
75
189
|
|
|
76
190
|
// ─── Server-Timing ────────────────────────────────────────────────────────
|
|
77
191
|
// Used by: server-timing.ts (recordTiming(), withTiming())
|
|
@@ -82,7 +196,7 @@ export interface TimingStore {
|
|
|
82
196
|
}
|
|
83
197
|
|
|
84
198
|
/** @internal — import via server-timing.ts public API */
|
|
85
|
-
export const timingAls =
|
|
199
|
+
export const timingAls = getOrCreateAls<TimingStore>(Symbol.for('timber:timing-als'));
|
|
86
200
|
|
|
87
201
|
// ─── Revalidation ─────────────────────────────────────────────────────────
|
|
88
202
|
// Used by: actions.ts (revalidatePath(), revalidateTag())
|
|
@@ -96,14 +210,18 @@ export interface RevalidationState {
|
|
|
96
210
|
}
|
|
97
211
|
|
|
98
212
|
/** @internal — import via actions.ts public API */
|
|
99
|
-
export const revalidationAls =
|
|
213
|
+
export const revalidationAls = getOrCreateAls<RevalidationState>(
|
|
214
|
+
Symbol.for('timber:revalidation-als')
|
|
215
|
+
);
|
|
100
216
|
|
|
101
217
|
// ─── Form Flash ───────────────────────────────────────────────────────────
|
|
102
218
|
// Used by: form-flash.ts (getFormFlash())
|
|
103
219
|
// Design doc: design/08-forms-and-actions.md §"No-JS Error Round-Trip"
|
|
104
220
|
|
|
105
221
|
/** @internal — import via form-flash.ts public API */
|
|
106
|
-
export const formFlashAls =
|
|
222
|
+
export const formFlashAls = getOrCreateAls<import('./form-flash.js').FormFlashData>(
|
|
223
|
+
Symbol.for('timber:form-flash-als')
|
|
224
|
+
);
|
|
107
225
|
|
|
108
226
|
// ─── Early Hints Sender ──────────────────────────────────────────────────
|
|
109
227
|
// Used by: early-hints-sender.ts (sendEarlyHints103())
|
|
@@ -113,7 +231,9 @@ export const formFlashAls = new AsyncLocalStorage<import('./form-flash.js').Form
|
|
|
113
231
|
export type EarlyHintsSenderFn = (links: string[]) => void;
|
|
114
232
|
|
|
115
233
|
/** @internal — import via early-hints-sender.ts public API */
|
|
116
|
-
export const earlyHintsSenderAls =
|
|
234
|
+
export const earlyHintsSenderAls = getOrCreateAls<EarlyHintsSenderFn>(
|
|
235
|
+
Symbol.for('timber:early-hints-sender-als')
|
|
236
|
+
);
|
|
117
237
|
|
|
118
238
|
// ─── waitUntil Bridge ────────────────────────────────────────────────────
|
|
119
239
|
// Used by: waituntil-bridge.ts (waitUntil())
|
|
@@ -123,4 +243,18 @@ export const earlyHintsSenderAls = new AsyncLocalStorage<EarlyHintsSenderFn>();
|
|
|
123
243
|
export type WaitUntilFn = (promise: Promise<unknown>) => void;
|
|
124
244
|
|
|
125
245
|
/** @internal — import via waituntil-bridge.ts public API */
|
|
126
|
-
export const waitUntilAls =
|
|
246
|
+
export const waitUntilAls = getOrCreateAls<WaitUntilFn>(Symbol.for('timber:wait-until-als'));
|
|
247
|
+
|
|
248
|
+
// ─── Workers Cache Purge Bridge ─────────────────────────────────────────
|
|
249
|
+
// Used by: workers-cache-bridge.ts (runWithWorkersCachePurge())
|
|
250
|
+
// Design doc: design/06-caching.md, design/25-production-deployments.md
|
|
251
|
+
|
|
252
|
+
/** Workers Cache purge function from Cloudflare ExecutionContext.cache. */
|
|
253
|
+
export interface WorkersCachePurgeCtx {
|
|
254
|
+
purge(opts: { tags: string[] }): Promise<void>;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/** @internal — import via workers-cache-bridge.ts public API */
|
|
258
|
+
export const workersCachePurgeAls = getOrCreateAls<WorkersCachePurgeCtx>(
|
|
259
|
+
Symbol.for('timber:workers-cache-purge-als')
|
|
260
|
+
);
|
|
@@ -8,13 +8,25 @@
|
|
|
8
8
|
* Unhashed assets (e.g. /favicon.ico) get a shorter cache with revalidation:
|
|
9
9
|
* Cache-Control: public, max-age=3600, must-revalidate
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* The `_headers` file lists hashed asset paths (/assets/*, /_timber/fonts/*) as
|
|
12
|
+
* wildcard rules and unhashed files as per-file rules. At runtime, adapters
|
|
13
|
+
* that see static file requests (nitro, preview) also set Cache-Control via
|
|
14
|
+
* `getAssetCacheControl()`. On Cloudflare Workers Static Assets, the worker
|
|
15
|
+
* never sees static file requests — the `_headers` file is the only mechanism.
|
|
16
|
+
* Page responses are NOT affected — those are controlled by the developer
|
|
17
|
+
* via middleware.ts or proxy.ts.
|
|
14
18
|
*
|
|
15
19
|
* Design docs: 18-build-system.md, 06-caching.md
|
|
16
20
|
*/
|
|
17
21
|
|
|
22
|
+
import { IMMUTABLE_CACHE, STATIC_CACHE } from '../adapters/shared.js';
|
|
23
|
+
|
|
24
|
+
// Re-export cache constants and generateHeadersFile from the shared adapter
|
|
25
|
+
// module. The canonical definitions live in adapters/shared.ts because
|
|
26
|
+
// adapters are loaded by Node before Vite's resolver is available — they
|
|
27
|
+
// can only import from within their own directory.
|
|
28
|
+
export { IMMUTABLE_CACHE, STATIC_CACHE, generateHeadersFile } from '../adapters/shared.js';
|
|
29
|
+
|
|
18
30
|
/**
|
|
19
31
|
* Regex matching Vite-hashed asset filenames.
|
|
20
32
|
*
|
|
@@ -30,18 +42,6 @@
|
|
|
30
42
|
*/
|
|
31
43
|
const HASHED_ASSET_RE = /[-.][\da-f]{8,}\.\w+$/;
|
|
32
44
|
|
|
33
|
-
/** One year in seconds (365 days). */
|
|
34
|
-
const ONE_YEAR = 31_536_000;
|
|
35
|
-
|
|
36
|
-
/** One hour in seconds. */
|
|
37
|
-
const ONE_HOUR = 3_600;
|
|
38
|
-
|
|
39
|
-
/** Cache-Control value for hashed (immutable) assets. */
|
|
40
|
-
export const IMMUTABLE_CACHE = `public, max-age=${ONE_YEAR}, immutable`;
|
|
41
|
-
|
|
42
|
-
/** Cache-Control value for unhashed static assets. */
|
|
43
|
-
export const STATIC_CACHE = `public, max-age=${ONE_HOUR}, must-revalidate`;
|
|
44
|
-
|
|
45
45
|
/**
|
|
46
46
|
* Check if a URL path looks like a hashed asset.
|
|
47
47
|
*/
|
|
@@ -57,25 +57,3 @@ export function isHashedAsset(pathname: string): boolean {
|
|
|
57
57
|
export function getAssetCacheControl(pathname: string): string {
|
|
58
58
|
return isHashedAsset(pathname) ? IMMUTABLE_CACHE : STATIC_CACHE;
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Generate a `_headers` file for static asset cache control.
|
|
63
|
-
*
|
|
64
|
-
* The `_headers` file is a platform convention supported by Cloudflare Workers
|
|
65
|
-
* Static Assets, Cloudflare Pages, and Netlify. It maps URL patterns to
|
|
66
|
-
* HTTP response headers.
|
|
67
|
-
*
|
|
68
|
-
* Vite places all hashed chunks under `/assets/` — these get immutable caching.
|
|
69
|
-
* Everything else (favicon.ico, robots.txt, etc.) gets a shorter cache.
|
|
70
|
-
*/
|
|
71
|
-
export function generateHeadersFile(): string {
|
|
72
|
-
return `# Auto-generated by @timber-js/app — static asset cache headers.
|
|
73
|
-
# See design/25-production-deployments.md §"CDN / Edge Cache"
|
|
74
|
-
|
|
75
|
-
/assets/*
|
|
76
|
-
Cache-Control: ${IMMUTABLE_CACHE}
|
|
77
|
-
|
|
78
|
-
/*
|
|
79
|
-
Cache-Control: ${STATIC_CACHE}
|
|
80
|
-
`;
|
|
81
|
-
}
|
|
@@ -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,162 @@
|
|
|
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.js';
|
|
24
|
+
import type { RouteMatch } from './pipeline.js';
|
|
25
|
+
import { effectiveUrlSegment } from '../routing/segment-classify.js';
|
|
26
|
+
import { computeInterceptedBase } from '../routing/interception.js';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Extract raw URL path parts from a segment chain.
|
|
30
|
+
*
|
|
31
|
+
* Each dynamic segment consumed one URL part (its param value). Static
|
|
32
|
+
* segments consumed their own name. Groups are transparent. Catch-all segments
|
|
33
|
+
* consumed multiple parts (their param value is `string[]`).
|
|
34
|
+
*
|
|
35
|
+
* The root segment is named '' and consumes nothing, so it is skipped here
|
|
36
|
+
* rather than by each caller — callers that pass a chain including the root
|
|
37
|
+
* (interception anchoring, slot-skip slicing) would otherwise have to remember
|
|
38
|
+
* to filter it, and one that forgot would push an empty part and shift every
|
|
39
|
+
* subsequent index by one.
|
|
40
|
+
*
|
|
41
|
+
* Uses rawSegmentParams (pre-coercion) to get actual URL strings. Values are
|
|
42
|
+
* coerced to `String()` defensively in case a codec leaked a non-string value
|
|
43
|
+
* into the params map.
|
|
44
|
+
*
|
|
45
|
+
* Each node is read through `effectiveUrlSegment`, so an intercepting
|
|
46
|
+
* directory contributes the URL part it intercepts (`(.)item` → `item`,
|
|
47
|
+
* `(.)[id]` → the bound value). A children-path interception puts such a node
|
|
48
|
+
* in the *main* chain, and reading it directly would classify it as neither
|
|
49
|
+
* static nor param-bearing — it would contribute nothing, and every part after
|
|
50
|
+
* it would shift by one.
|
|
51
|
+
*/
|
|
52
|
+
export function extractUrlParts(
|
|
53
|
+
segments: ManifestSegmentNode[],
|
|
54
|
+
mainParams: Record<string, string | string[]>
|
|
55
|
+
): string[] {
|
|
56
|
+
const parts: string[] = [];
|
|
57
|
+
for (const node of segments) {
|
|
58
|
+
const seg = effectiveUrlSegment(node);
|
|
59
|
+
// The root's *directory* name is empty; read it off the node, since an
|
|
60
|
+
// intercepting node's effective name is the one it intercepts.
|
|
61
|
+
if (seg.segmentType === 'group') continue;
|
|
62
|
+
if (node.segmentName === '') continue;
|
|
63
|
+
if (seg.segmentType === 'static') {
|
|
64
|
+
parts.push(seg.segmentName);
|
|
65
|
+
} else if (seg.paramName) {
|
|
66
|
+
const value = mainParams[seg.paramName];
|
|
67
|
+
if (Array.isArray(value)) {
|
|
68
|
+
parts.push(...value.map(String));
|
|
69
|
+
} else if (value !== undefined) {
|
|
70
|
+
// Reconstruct the original URL part for affixed segments.
|
|
71
|
+
// The param value is the stripped middle (e.g. "123" for [id].png
|
|
72
|
+
// matching "123.png"), so we re-attach prefix/suffix so that slot
|
|
73
|
+
// matching through matchUrlParts sees the original part.
|
|
74
|
+
const prefix = seg.paramPrefix ?? '';
|
|
75
|
+
const suffix = seg.paramSuffix ?? '';
|
|
76
|
+
parts.push(prefix + String(value) + suffix);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return parts;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Where a children-path interception sits in the target pathname, or null when
|
|
85
|
+
* the chain contains none.
|
|
86
|
+
*
|
|
87
|
+
* `anchor` is the intercepted base's length — the URL index the intercepting
|
|
88
|
+
* node occupies — from the same `computeInterceptedBase` that rewrite
|
|
89
|
+
* generation and the slot resolver both go through, so the three cannot
|
|
90
|
+
* disagree about which part a marker points at.
|
|
91
|
+
*/
|
|
92
|
+
function interceptionAnchor(
|
|
93
|
+
segments: ManifestSegmentNode[]
|
|
94
|
+
): { index: number; anchor: number } | null {
|
|
95
|
+
const index = segments.findIndex((s) => s.segmentType === 'intercepting');
|
|
96
|
+
if (index <= 0) return null;
|
|
97
|
+
|
|
98
|
+
const owner = segments[index - 1];
|
|
99
|
+
const base = computeInterceptedBase(owner.urlPath, segments[index].interceptionMarker ?? '(.)');
|
|
100
|
+
return { index, anchor: base === '/' ? 0 : base.slice(1).split('/').length };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* The URL parts the chain has consumed through `index`, inclusive.
|
|
105
|
+
*
|
|
106
|
+
* For an ordinary chain this is just the walk. Two things make it more than
|
|
107
|
+
* that, and both are cases where a node stands for a different number of URL
|
|
108
|
+
* parts than itself:
|
|
109
|
+
*
|
|
110
|
+
* - A **catch-all** consumes as many parts as the request supplies, which the
|
|
111
|
+
* walk already handles (its param value is an array).
|
|
112
|
+
* - An **interception with a climbing marker** intercepts a URL that starts
|
|
113
|
+
* *above* its owner, so the owner's own URL segment — and any static
|
|
114
|
+
* ancestor between the intercepted base and the owner — is not in the target
|
|
115
|
+
* at all. `feed/(..)photo/[id]` at `/photo/42` still has `feed` in the
|
|
116
|
+
* chain, and counting it puts everything after it off by one.
|
|
117
|
+
*
|
|
118
|
+
* So everything above the interception clamps to the anchor, and everything
|
|
119
|
+
* from it down counts forward from there. The owner chain is param-free by
|
|
120
|
+
* build-time rule and the intercepted base is a prefix of the owner's
|
|
121
|
+
* `urlPath`, so the target's leading `anchor` parts *are* the owner chain's
|
|
122
|
+
* leading `anchor` parts — which is what makes the clamped prefix real values
|
|
123
|
+
* rather than placeholders. For `(.)` the base is the owner's own path, so the
|
|
124
|
+
* clamp is a no-op and this reduces to the plain walk.
|
|
125
|
+
*/
|
|
126
|
+
export function consumedUrlParts(
|
|
127
|
+
segments: ManifestSegmentNode[],
|
|
128
|
+
index: number,
|
|
129
|
+
match: RouteMatch
|
|
130
|
+
): string[] {
|
|
131
|
+
const rawParams = match.rawSegmentParams ?? match.segmentParams ?? {};
|
|
132
|
+
const partsThrough = (from: number, to: number) =>
|
|
133
|
+
extractUrlParts(segments.slice(from, to + 1), rawParams);
|
|
134
|
+
|
|
135
|
+
const interception = interceptionAnchor(segments);
|
|
136
|
+
if (!interception) return partsThrough(0, index);
|
|
137
|
+
|
|
138
|
+
const targetPrefix = partsThrough(0, interception.index - 1).slice(0, interception.anchor);
|
|
139
|
+
|
|
140
|
+
if (index < interception.index) {
|
|
141
|
+
// Above the interception: an ancestor is never deeper than the anchor.
|
|
142
|
+
return targetPrefix.slice(0, Math.min(partsThrough(0, index).length, interception.anchor));
|
|
143
|
+
}
|
|
144
|
+
// At or below it: the intercepting subtree's parts ARE the target's.
|
|
145
|
+
return [...targetPrefix, ...partsThrough(interception.index, index)];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* The index in `match.segments` of a segment, or -1.
|
|
150
|
+
*
|
|
151
|
+
* Split out so the three slot call sites and the layout-depth one derive their
|
|
152
|
+
* slice point identically — `indexOf` plus `consumedUrlParts` — instead of
|
|
153
|
+
* each inlining the pair.
|
|
154
|
+
*/
|
|
155
|
+
export function consumedPartsThroughSegment(
|
|
156
|
+
segment: ManifestSegmentNode,
|
|
157
|
+
match: RouteMatch
|
|
158
|
+
): string[] {
|
|
159
|
+
const index = match.segments.indexOf(segment);
|
|
160
|
+
if (index < 0) return [];
|
|
161
|
+
return consumedUrlParts(match.segments as ManifestSegmentNode[], index, match);
|
|
162
|
+
}
|