@timber-js/app 0.2.0-alpha.2 → 0.2.0-alpha.200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -0
- package/agent-skill.md +346 -0
- package/dist/_chunks/actions-d1hCqnU3.js +345 -0
- package/dist/_chunks/actions-d1hCqnU3.js.map +1 -0
- package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
- package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
- package/dist/_chunks/base-path-DaQrzbez.js +80 -0
- package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
- package/dist/_chunks/build-manifest-DTmSGLRz.js +135 -0
- package/dist/_chunks/build-manifest-DTmSGLRz.js.map +1 -0
- package/dist/_chunks/build-output-helper-9dqCv1pZ.js +370 -0
- package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +1 -0
- package/dist/_chunks/cache-api-ByagcC-J.js +1149 -0
- package/dist/_chunks/cache-api-ByagcC-J.js.map +1 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
- package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
- package/dist/_chunks/chains-Bpb0W4ax.js +412 -0
- package/dist/_chunks/chains-Bpb0W4ax.js.map +1 -0
- package/dist/_chunks/cli-check-D6VolrDV.js +293 -0
- package/dist/_chunks/cli-check-D6VolrDV.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D6rO-VcS.js +299 -0
- package/dist/_chunks/cli-schema-sync-D6rO-VcS.js.map +1 -0
- package/dist/_chunks/cloudflare-BFb__LYG.js +1290 -0
- package/dist/_chunks/cloudflare-BFb__LYG.js.map +1 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/convention-lint-fRkwVwEH.js +893 -0
- package/dist/_chunks/convention-lint-fRkwVwEH.js.map +1 -0
- package/dist/_chunks/dist-DtrJyBbw.js +386 -0
- package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
- package/dist/_chunks/error-boundary-BfPHZjm0.js +1050 -0
- package/dist/_chunks/error-boundary-BfPHZjm0.js.map +1 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
- package/dist/_chunks/file-cache-Dw6BJPG7.js +458 -0
- package/dist/_chunks/file-cache-Dw6BJPG7.js.map +1 -0
- package/dist/_chunks/format-BKclgVbk.js +14 -0
- package/dist/_chunks/format-BKclgVbk.js.map +1 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
- package/dist/_chunks/graph-cache-CP4GEmf9.js +304 -0
- package/dist/_chunks/graph-cache-CP4GEmf9.js.map +1 -0
- package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
- package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
- package/dist/_chunks/live-graph-D_2D32Ad.js +150 -0
- package/dist/_chunks/live-graph-D_2D32Ad.js.map +1 -0
- package/dist/_chunks/logger-uLBuGKDI.js +1484 -0
- package/dist/_chunks/logger-uLBuGKDI.js.map +1 -0
- package/dist/_chunks/navigation-context-D0TU0Jog.js +135 -0
- package/dist/_chunks/navigation-context-D0TU0Jog.js.map +1 -0
- package/dist/_chunks/navigation-root-mHSK9psY.js +126 -0
- package/dist/_chunks/navigation-root-mHSK9psY.js.map +1 -0
- package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
- package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
- package/dist/_chunks/plugin-context-8idfR3UZ.js +321 -0
- package/dist/_chunks/plugin-context-8idfR3UZ.js.map +1 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
- package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
- package/dist/_chunks/poison-scan-Bm9Yyqk9.js +101 -0
- package/dist/_chunks/poison-scan-Bm9Yyqk9.js.map +1 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
- package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
- package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
- package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
- package/dist/_chunks/scan-BoP17W3w.js +140 -0
- package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
- package/dist/_chunks/scanner-AiazgH_f.js +1771 -0
- package/dist/_chunks/scanner-AiazgH_f.js.map +1 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
- package/dist/_chunks/segment-context-D9_89u34.js +34 -0
- package/dist/_chunks/segment-context-D9_89u34.js.map +1 -0
- package/dist/_chunks/segment-keys-lqtdookO.js +256 -0
- package/dist/_chunks/segment-keys-lqtdookO.js.map +1 -0
- package/dist/_chunks/singleflight-2lUWfcAk.js +54 -0
- package/dist/_chunks/singleflight-2lUWfcAk.js.map +1 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
- package/dist/_chunks/{ssr-data-DLnbYpj1.js → ssr-data-D6T6Y3ef.js} +3 -31
- package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +1 -0
- package/dist/_chunks/state-FippDgxN.js +52 -0
- package/dist/_chunks/state-FippDgxN.js.map +1 -0
- package/dist/_chunks/status-page-marker-DwQBrLBz.js +496 -0
- package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +1 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
- package/dist/_chunks/walkers-B6XUtmqK.js +144 -0
- package/dist/_chunks/walkers-B6XUtmqK.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +72 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +74 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +123 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +200 -22
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -188
- package/dist/adapters/compress-module.d.ts +17 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +64 -0
- package/dist/adapters/fs-identity.d.ts.map +1 -0
- package/dist/adapters/nitro-presets.d.ts +37 -0
- package/dist/adapters/nitro-presets.d.ts.map +1 -0
- package/dist/adapters/nitro-preview.d.ts +32 -0
- package/dist/adapters/nitro-preview.d.ts.map +1 -0
- package/dist/adapters/nitro.d.ts +82 -37
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +457 -288
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +62 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +28 -6
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/analyze/chains.d.ts +124 -0
- package/dist/analyze/chains.d.ts.map +1 -0
- package/dist/analyze/classify.d.ts +150 -0
- package/dist/analyze/classify.d.ts.map +1 -0
- package/dist/analyze/crawl-entry.d.ts +17 -0
- package/dist/analyze/crawl-entry.d.ts.map +1 -0
- package/dist/analyze/crawl-entry.js +313 -0
- package/dist/analyze/crawl-entry.js.map +1 -0
- package/dist/analyze/crawl.d.ts +134 -0
- package/dist/analyze/crawl.d.ts.map +1 -0
- package/dist/analyze/graph-cache.d.ts +104 -0
- package/dist/analyze/graph-cache.d.ts.map +1 -0
- package/dist/analyze/graph-command.d.ts +43 -0
- package/dist/analyze/graph-command.d.ts.map +1 -0
- package/dist/analyze/graph-command.js +472 -0
- package/dist/analyze/graph-command.js.map +1 -0
- package/dist/analyze/live-graph.d.ts +81 -0
- package/dist/analyze/live-graph.d.ts.map +1 -0
- package/dist/analyze/poison-rules.d.ts +72 -0
- package/dist/analyze/poison-rules.d.ts.map +1 -0
- package/dist/analyze/poison-scan.d.ts +48 -0
- package/dist/analyze/poison-scan.d.ts.map +1 -0
- package/dist/analyze/scan.d.ts +73 -0
- package/dist/analyze/scan.d.ts.map +1 -0
- package/dist/cache/cache-api.d.ts +48 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/fast-hash.d.ts +27 -0
- package/dist/cache/fast-hash.d.ts.map +1 -0
- package/dist/cache/handler-store.d.ts +33 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +32 -9
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +3 -284
- package/dist/cache/invalidation-epoch.d.ts +43 -0
- package/dist/cache/invalidation-epoch.d.ts.map +1 -0
- package/dist/cache/json-lossy-check.d.ts +11 -0
- package/dist/cache/json-lossy-check.d.ts.map +1 -0
- package/dist/cache/redis-handler.d.ts +141 -9
- package/dist/cache/redis-handler.d.ts.map +1 -1
- package/dist/cache/singleflight.d.ts +21 -2
- package/dist/cache/singleflight.d.ts.map +1 -1
- package/dist/cache/sizeof.d.ts +22 -0
- package/dist/cache/sizeof.d.ts.map +1 -0
- package/dist/cache/stable-stringify.d.ts +9 -0
- package/dist/cache/stable-stringify.d.ts.map +1 -1
- package/dist/cache/store.d.ts +53 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
- package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.js +29 -0
- package/dist/cache/stores/cloudflare-kv.js.map +1 -0
- package/dist/cache/stores/memory.d.ts +42 -0
- package/dist/cache/stores/memory.d.ts.map +1 -0
- package/dist/cache/stores/memory.js +90 -0
- package/dist/cache/stores/memory.js.map +1 -0
- package/dist/cache/stores/redis.d.ts +69 -0
- package/dist/cache/stores/redis.d.ts.map +1 -0
- package/dist/cache/stores/redis.js +35 -0
- package/dist/cache/stores/redis.js.map +1 -0
- package/dist/cache/stores/vercel.d.ts +36 -0
- package/dist/cache/stores/vercel.d.ts.map +1 -0
- package/dist/cache/stores/vercel.js +33 -0
- package/dist/cache/stores/vercel.js.map +1 -0
- package/dist/cache/tag-aware-handler.d.ts +52 -0
- package/dist/cache/tag-aware-handler.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +21 -11
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cdn/cloudflare-purge.d.ts +23 -0
- package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
- package/dist/cdn/cloudflare-purge.js +30 -0
- package/dist/cdn/cloudflare-purge.js.map +1 -0
- package/dist/cdn/fastly-purge.d.ts +25 -0
- package/dist/cdn/fastly-purge.d.ts.map +1 -0
- package/dist/cdn/fastly-purge.js +33 -0
- package/dist/cdn/fastly-purge.js.map +1 -0
- package/dist/cdn/headers.d.ts +97 -0
- package/dist/cdn/headers.d.ts.map +1 -0
- package/dist/cdn/index.d.ts +5 -0
- package/dist/cdn/index.d.ts.map +1 -0
- package/dist/cdn/index.js +94 -0
- package/dist/cdn/index.js.map +1 -0
- package/dist/cdn/purge-store.d.ts +23 -0
- package/dist/cdn/purge-store.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.d.ts +20 -0
- package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.js +35 -0
- package/dist/cdn/workers-cache-purge.js.map +1 -0
- package/dist/cli-check.d.ts +163 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +75 -8
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +175 -47
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +37 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/action-queue.d.ts +44 -0
- package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +63 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +29 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +46 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +28 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/deny-last-resort.d.ts +29 -0
- package/dist/client/deny-last-resort.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +66 -6
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +2 -126
- package/dist/client/error-reconstituter.d.ts +61 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/global-context.d.ts +15 -0
- package/dist/client/global-context.d.ts.map +1 -0
- package/dist/client/history.d.ts +50 -9
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +20 -33
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +323 -1148
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +20 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +818 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +63 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/location-search.d.ts +12 -0
- package/dist/client/location-search.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +121 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-commit.d.ts +98 -0
- package/dist/client/navigation-commit.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +51 -31
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +98 -0
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/navigation-transition.d.ts +187 -0
- package/dist/client/navigation-transition.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts +1 -1
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/params-context.d.ts +81 -0
- package/dist/client/params-context.d.ts.map +1 -0
- package/dist/client/react-root.d.ts +44 -0
- package/dist/client/react-root.d.ts.map +1 -0
- package/dist/client/router-effects.d.ts +130 -0
- package/dist/client/router-effects.d.ts.map +1 -0
- package/dist/client/router-lifecycle.d.ts +98 -0
- package/dist/client/router-lifecycle.d.ts.map +1 -0
- package/dist/client/router-pipeline.d.ts +87 -0
- package/dist/client/router-pipeline.d.ts.map +1 -0
- package/dist/client/router-ref.d.ts +2 -2
- package/dist/client/router-ref.d.ts.map +1 -1
- package/dist/client/router-skew.d.ts +21 -0
- package/dist/client/router-skew.d.ts.map +1 -0
- package/dist/client/router-types.d.ts +272 -0
- package/dist/client/router-types.d.ts.map +1 -0
- package/dist/client/router.d.ts +1 -97
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +104 -26
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +161 -25
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-context.d.ts +1 -1
- package/dist/client/segment-context.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +68 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +15 -0
- package/dist/client/segment-update-context.d.ts.map +1 -0
- package/dist/client/shallow-url.d.ts +10 -0
- package/dist/client/shallow-url.d.ts.map +1 -0
- package/dist/client/slot-content-cache-context.d.ts +35 -0
- package/dist/client/slot-content-cache-context.d.ts.map +1 -0
- package/dist/client/slot-context.d.ts +31 -0
- package/dist/client/slot-context.d.ts.map +1 -0
- package/dist/client/slot-outlet.d.ts +16 -0
- package/dist/client/slot-outlet.d.ts.map +1 -0
- package/dist/client/slot-provider.d.ts +25 -0
- package/dist/client/slot-provider.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +29 -7
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-client.d.ts +69 -0
- package/dist/client/stale-client.d.ts.map +1 -0
- package/dist/client/state.d.ts +19 -8
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/status-page-marker.d.ts +25 -0
- package/dist/client/status-page-marker.d.ts.map +1 -0
- package/dist/client/top-loader.d.ts +7 -6
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/unload-guard.d.ts +5 -0
- package/dist/client/unload-guard.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts +12 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-link-status.d.ts +5 -5
- package/dist/client/use-link-status.d.ts.map +1 -1
- package/dist/client/use-pathname.d.ts +13 -11
- package/dist/client/use-pathname.d.ts.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +10 -4
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +2 -2
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +15 -8
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/use-segment-params.d.ts +55 -0
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +69 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +76 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +322 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +51 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/cookies/define-cookie.d.ts +58 -25
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +3 -2
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +256 -36
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +34 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +50 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +40 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/dev-page-shell.d.ts +78 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +32 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +46 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/hydration-overlay.d.ts +11 -0
- package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/dev-tools/instrumentation.d.ts +59 -0
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/fonts/ast-walk.d.ts +68 -0
- package/dist/fonts/ast-walk.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +112 -8
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +50 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/css.d.ts +2 -1
- package/dist/fonts/css.d.ts.map +1 -1
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/fallbacks.d.ts +0 -7
- package/dist/fonts/fallbacks.d.ts.map +1 -1
- package/dist/fonts/google.d.ts +5 -3
- package/dist/fonts/google.d.ts.map +1 -1
- package/dist/fonts/local.d.ts +6 -4
- package/dist/fonts/local.d.ts.map +1 -1
- package/dist/fonts/paths.d.ts +43 -0
- package/dist/fonts/paths.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +177 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +82 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +47 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +77 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +35 -153
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10488 -13975
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +81 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +34 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +276 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +21 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +7 -3
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +54 -7
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +64 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/callsite-ast.d.ts +117 -0
- package/dist/plugins/callsite-ast.d.ts.map +1 -0
- package/dist/plugins/callsite-jsx.d.ts +35 -0
- package/dist/plugins/callsite-jsx.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +11 -4
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +40 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +21 -0
- package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-discovery.d.ts +123 -0
- package/dist/plugins/dev-discovery.d.ts.map +1 -0
- package/dist/plugins/dev-server.d.ts +17 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +32 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +16 -65
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/graph-endpoint.d.ts +112 -0
- package/dist/plugins/graph-endpoint.d.ts.map +1 -0
- package/dist/plugins/mdx.d.ts +24 -5
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/prebuilt-capture.d.ts +60 -0
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
- package/dist/plugins/prebuilt.d.ts +82 -0
- package/dist/plugins/prebuilt.d.ts.map +1 -0
- package/dist/plugins/prerender-sugar.d.ts +39 -0
- package/dist/plugins/prerender-sugar.d.ts.map +1 -0
- package/dist/plugins/request-dep/analysis.d.ts +106 -0
- package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
- package/dist/plugins/request-dep/index.d.ts +75 -0
- package/dist/plugins/request-dep/index.d.ts.map +1 -0
- package/dist/plugins/request-dep/origin.d.ts +61 -0
- package/dist/plugins/request-dep/origin.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +29 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +218 -21
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +26 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +61 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen-write.d.ts +51 -0
- package/dist/routing/codegen-write.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +8 -3
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/collision-probe.d.ts +104 -0
- package/dist/routing/collision-probe.d.ts.map +1 -0
- package/dist/routing/collision-spaces.d.ts +26 -0
- package/dist/routing/collision-spaces.d.ts.map +1 -0
- package/dist/routing/convention-lint.d.ts +55 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/export-detect.d.ts +72 -0
- package/dist/routing/export-detect.d.ts.map +1 -0
- package/dist/routing/file-cache.d.ts +8 -0
- package/dist/routing/file-cache.d.ts.map +1 -0
- package/dist/routing/index.d.ts +13 -7
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +5 -2
- package/dist/routing/interception-overlap.d.ts +35 -0
- package/dist/routing/interception-overlap.d.ts.map +1 -0
- package/dist/routing/interception.d.ts +234 -10
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +105 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/manifest-codegen.d.ts +26 -0
- package/dist/routing/manifest-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +14 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/schema-validation.d.ts +35 -0
- package/dist/routing/schema-validation.d.ts.map +1 -0
- package/dist/routing/segment-classify.d.ts +114 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/segment-codegen.d.ts +38 -0
- package/dist/routing/segment-codegen.d.ts.map +1 -0
- package/dist/routing/segment-keys.d.ts +118 -0
- package/dist/routing/segment-keys.d.ts.map +1 -0
- package/dist/routing/slot-placement.d.ts +48 -0
- package/dist/routing/slot-placement.d.ts.map +1 -0
- package/dist/routing/types.d.ts +74 -26
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +57 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +14 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/rsc-runtime/transforms.d.ts +13 -0
- package/dist/rsc-runtime/transforms.d.ts.map +1 -0
- package/dist/schema-bridge.d.ts +145 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +262 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +3 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +179 -360
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/parse-total.d.ts +81 -0
- package/dist/search-params/parse-total.d.ts.map +1 -0
- package/dist/search-params/serialize-equal.d.ts +9 -0
- package/dist/search-params/serialize-equal.d.ts.map +1 -0
- package/dist/search-params/wrappers.d.ts +76 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/server/access-gate.d.ts +98 -10
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +42 -7
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +39 -5
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +29 -35
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +117 -13
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +8 -18
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +25 -30
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/canonicalize.d.ts +10 -0
- package/dist/server/canonicalize.d.ts.map +1 -1
- package/dist/server/chain-url-parts.d.ts +82 -0
- package/dist/server/chain-url-parts.d.ts.map +1 -0
- package/dist/server/children-interception.d.ts +49 -0
- package/dist/server/children-interception.d.ts.map +1 -0
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/compress.d.ts.map +1 -1
- package/dist/server/cookie-context.d.ts +170 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +65 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csp-nonce.d.ts +45 -0
- package/dist/server/csp-nonce.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/debug.d.ts +82 -0
- package/dist/server/debug.d.ts.map +1 -0
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/default-status-page.d.ts +45 -0
- package/dist/server/default-status-page.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +253 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +20 -9
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +14 -12
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +101 -10
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/error-response-headers.d.ts +3 -0
- package/dist/server/error-response-headers.d.ts.map +1 -0
- package/dist/server/fallback-error.d.ts +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +45 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/form-data.d.ts +41 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/form-flash.d.ts +1 -1
- package/dist/server/head-response.d.ts +35 -0
- package/dist/server/head-response.d.ts.map +1 -0
- package/dist/server/html-injector-core.d.ts +257 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +84 -42
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +18 -54
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +212 -2930
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +1 -1
- package/dist/server/internal.d.ts +50 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +4034 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +39 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-collector.d.ts +71 -0
- package/dist/server/metadata-collector.d.ts.map +1 -0
- package/dist/server/metadata-platform.d.ts +2 -2
- package/dist/server/metadata-render.d.ts +2 -2
- package/dist/server/metadata-render.d.ts.map +1 -1
- package/dist/server/metadata-routes.d.ts +60 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata-social.d.ts +2 -2
- package/dist/server/metadata.d.ts +10 -2
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +20 -5
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +105 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/nuqs-ssr-provider.d.ts +7 -3
- package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
- package/dist/server/param-coercion.d.ts +78 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +77 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +59 -9
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +7 -1
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +49 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +70 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +160 -24
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +31 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/prebuilt/cache-key.d.ts +63 -0
- package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-state.d.ts +57 -0
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
- package/dist/server/prebuilt/key-discipline.d.ts +52 -0
- package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
- package/dist/server/prebuilt/overlay.d.ts +100 -0
- package/dist/server/prebuilt/overlay.d.ts.map +1 -0
- package/dist/server/prebuilt/payload-source.d.ts +79 -0
- package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +99 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -0
- package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
- package/dist/server/prebuilt-builder.d.ts +121 -0
- package/dist/server/prebuilt-builder.d.ts.map +1 -0
- package/dist/server/prebuilt-runtime.d.ts +111 -0
- package/dist/server/prebuilt-runtime.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +129 -45
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/publish-params.d.ts +33 -0
- package/dist/server/publish-params.d.ts.map +1 -0
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/render-utils.d.ts +26 -0
- package/dist/server/render-utils.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +111 -107
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-dep.d.ts +15 -0
- package/dist/server/request-dep.d.ts.map +1 -0
- package/dist/server/response-cache-policy.d.ts +3 -0
- package/dist/server/response-cache-policy.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +57 -30
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-element-helpers.d.ts +12 -0
- package/dist/server/route-element-helpers.d.ts.map +1 -0
- package/dist/server/route-handler.d.ts +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +40 -38
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/route-module-loader.d.ts +37 -0
- package/dist/server/route-module-loader.d.ts.map +1 -0
- package/dist/server/rsc-cache-key-guard.d.ts +78 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +12 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +38 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +59 -42
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +40 -6
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +51 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +26 -6
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +39 -3
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +37 -5
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/rsc-error-envelope.d.ts +11 -0
- package/dist/server/rsc-error-envelope.d.ts.map +1 -0
- package/dist/server/rsc-prop-warnings.d.ts.map +1 -1
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +130 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/skippable-prefix.d.ts +29 -0
- package/dist/server/skippable-prefix.d.ts.map +1 -0
- package/dist/server/slot-interception.d.ts +80 -0
- package/dist/server/slot-interception.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +137 -7
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/slot-subtree-contain.d.ts +54 -0
- package/dist/server/slot-subtree-contain.d.ts.map +1 -0
- package/dist/server/ssr-bridge-types.d.ts +160 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +1 -43
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +69 -22
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +93 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +44 -9
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/static-generator.d.ts +112 -0
- package/dist/server/static-generator.d.ts.map +1 -0
- package/dist/server/static-not-found.d.ts +52 -0
- package/dist/server/static-not-found.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +26 -15
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +47 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +56 -11
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +49 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +88 -7
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +50 -0
- package/dist/server/utils/element-type.d.ts.map +1 -0
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/utils/mdx-file.d.ts +17 -0
- package/dist/server/utils/mdx-file.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/server/waituntil-bridge.d.ts.map +1 -1
- package/dist/server/workers-cache-bridge.d.ts +26 -0
- package/dist/server/workers-cache-bridge.d.ts.map +1 -0
- package/dist/shared/als-slots.d.ts +42 -0
- package/dist/shared/als-slots.d.ts.map +1 -0
- package/dist/shared/base-path.d.ts +56 -0
- package/dist/shared/base-path.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +49 -0
- package/dist/shared/href-validation.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shared/param-value.d.ts +104 -0
- package/dist/shared/param-value.d.ts.map +1 -0
- package/dist/shared/payload-root.d.ts +109 -0
- package/dist/shared/payload-root.d.ts.map +1 -0
- package/dist/shared/redirect-type.d.ts +17 -0
- package/dist/shared/redirect-type.d.ts.map +1 -0
- package/dist/shared/rsc-cache-key.d.ts +163 -0
- package/dist/shared/rsc-cache-key.d.ts.map +1 -0
- package/dist/shared/rsc-error-envelope.d.ts +16 -0
- package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
- package/dist/shared/rsc-manifest.d.ts +28 -0
- package/dist/shared/rsc-manifest.d.ts.map +1 -0
- package/dist/shared/rsc-media-type.d.ts +52 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -0
- package/dist/shared/rsc-payload-path.d.ts +42 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -0
- package/dist/shared/segment-info.d.ts +66 -0
- package/dist/shared/segment-info.d.ts.map +1 -0
- package/dist/shared/slot-params.d.ts +52 -0
- package/dist/shared/slot-params.d.ts.map +1 -0
- package/dist/shared/static-platform-files.d.ts +71 -0
- package/dist/shared/static-platform-files.d.ts.map +1 -0
- package/dist/shared/status-reason-phrase.d.ts +26 -0
- package/dist/shared/status-reason-phrase.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +53 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/image.d.ts +120 -120
- package/dist/shims/image.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +25 -12
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation-rsc.d.ts +21 -0
- package/dist/shims/navigation-rsc.d.ts.map +1 -0
- package/dist/shims/navigation.d.ts +10 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +236 -0
- package/docs/api/31-api-client.mdx +167 -0
- package/docs/api/32-api-cache.mdx +311 -0
- package/docs/api/33-api-search-params.mdx +176 -0
- package/docs/api/34-api-config.mdx +329 -0
- package/docs/api/35-api-typescript.mdx +91 -0
- package/docs/api/36-cli.mdx +192 -0
- package/docs/learn/00-introduction.mdx +109 -0
- package/docs/learn/01-quick-start.mdx +94 -0
- package/docs/learn/02-pages-and-layouts.mdx +147 -0
- package/docs/learn/03-fetching-data.mdx +211 -0
- package/docs/learn/04-access-control.mdx +115 -0
- package/docs/learn/05-the-flush-point.mdx +175 -0
- package/docs/learn/06-typed-params.mdx +275 -0
- package/docs/learn/07-typed-routes.mdx +108 -0
- package/docs/learn/08-forms-and-actions.mdx +146 -0
- package/docs/learn/09-streaming.mdx +140 -0
- package/docs/learn/10-caching.mdx +252 -0
- package/docs/learn/11-middleware.mdx +158 -0
- package/docs/learn/12-error-handling.mdx +188 -0
- package/docs/learn/13-deploying.mdx +287 -0
- package/llms.txt +55 -0
- package/package.json +117 -29
- package/src/adapters/build-output-helper.ts +351 -0
- package/src/adapters/cloudflare-dev.ts +183 -0
- package/src/adapters/cloudflare-kv-cache.ts +207 -0
- package/src/adapters/cloudflare.ts +747 -130
- package/src/adapters/compress-module.ts +101 -88
- package/src/adapters/fs-identity.ts +156 -0
- package/src/adapters/nitro-presets.ts +139 -0
- package/src/adapters/nitro-preview.ts +340 -0
- package/src/adapters/nitro.ts +279 -418
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +274 -0
- package/src/adapters/types.ts +28 -7
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/analyze/chains.ts +411 -0
- package/src/analyze/classify.ts +258 -0
- package/src/analyze/crawl-entry.ts +68 -0
- package/src/analyze/crawl.ts +500 -0
- package/src/analyze/graph-cache.ts +332 -0
- package/src/analyze/graph-command.ts +762 -0
- package/src/analyze/live-graph.ts +232 -0
- package/src/analyze/poison-rules.ts +165 -0
- package/src/analyze/poison-scan.ts +162 -0
- package/src/analyze/scan.ts +149 -0
- package/src/cache/cache-api.ts +107 -0
- package/src/cache/fast-hash.ts +39 -0
- package/src/cache/handler-store.ts +76 -0
- package/src/cache/index.ts +115 -22
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/json-lossy-check.ts +75 -0
- package/src/cache/redis-handler.ts +198 -20
- package/src/cache/singleflight.ts +69 -6
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/store.ts +71 -0
- package/src/cache/stores/cloudflare-kv.ts +52 -0
- package/src/cache/stores/memory.ts +125 -0
- package/src/cache/stores/redis.ts +97 -0
- package/src/cache/stores/vercel.ts +59 -0
- package/src/cache/tag-aware-handler.ts +237 -0
- package/src/cache/timber-cache.ts +180 -48
- package/src/cdn/cloudflare-purge.ts +50 -0
- package/src/cdn/fastly-purge.ts +63 -0
- package/src/cdn/headers.ts +153 -0
- package/src/cdn/index.ts +23 -0
- package/src/cdn/purge-store.ts +34 -0
- package/src/cdn/workers-cache-purge.ts +34 -0
- package/src/cli-check.ts +507 -0
- package/src/cli-schema-sync.ts +401 -0
- package/src/cli.ts +262 -55
- package/src/client/browser-dev.ts +157 -2
- package/src/client/browser-entry/action-dispatch.ts +197 -0
- package/src/client/browser-entry/action-queue.ts +90 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +148 -0
- package/src/client/browser-entry/index.ts +131 -0
- package/src/client/browser-entry/post-hydration.ts +123 -0
- package/src/client/browser-entry/router-init.ts +418 -0
- package/src/client/browser-entry/rsc-stream.ts +166 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/deny-last-resort.tsx +54 -0
- package/src/client/error-boundary.tsx +316 -40
- package/src/client/error-reconstituter.tsx +79 -0
- package/src/client/form.tsx +36 -32
- package/src/client/global-context.ts +31 -0
- package/src/client/history.ts +81 -10
- package/src/client/index.ts +89 -53
- package/src/client/internal.ts +59 -0
- package/src/client/link.tsx +452 -159
- package/src/client/location-search.ts +15 -0
- package/src/client/navigation-api.ts +347 -0
- package/src/client/navigation-commit.ts +295 -0
- package/src/client/navigation-context.ts +67 -98
- package/src/client/navigation-root.tsx +224 -0
- package/src/client/navigation-transition.ts +327 -0
- package/src/client/nuqs-adapter.tsx +21 -9
- package/src/client/params-context.ts +187 -0
- package/src/client/react-root.ts +72 -0
- package/src/client/router-effects.ts +228 -0
- package/src/client/router-lifecycle.ts +354 -0
- package/src/client/router-pipeline.ts +490 -0
- package/src/client/router-ref.ts +3 -3
- package/src/client/router-skew.ts +30 -0
- package/src/client/router-types.ts +294 -0
- package/src/client/router.ts +436 -424
- package/src/client/rsc-fetch.ts +512 -73
- package/src/client/segment-cache.ts +327 -40
- package/src/client/segment-context.ts +13 -5
- package/src/client/segment-outlet.tsx +96 -0
- package/src/client/segment-update-context.ts +23 -0
- package/src/client/shallow-url.ts +22 -0
- package/src/client/slot-content-cache-context.ts +43 -0
- package/src/client/slot-context.ts +50 -0
- package/src/client/slot-outlet.tsx +22 -0
- package/src/client/slot-provider.tsx +32 -0
- package/src/client/ssr-data.ts +30 -9
- package/src/client/stale-client.ts +191 -0
- package/src/client/state.ts +29 -15
- package/src/client/status-page-marker.tsx +32 -0
- package/src/client/top-loader.tsx +36 -29
- package/src/client/unload-guard.ts +35 -3
- package/src/client/use-cookie.ts +70 -18
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +22 -31
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +206 -36
- package/src/client/use-router.ts +6 -3
- package/src/client/use-search-params.ts +38 -49
- package/src/client/use-segment-params.ts +69 -0
- package/src/client/use-selected-layout-segment.ts +2 -2
- package/src/codec.ts +149 -0
- package/src/config-types.ts +322 -0
- package/src/config-validation.ts +347 -0
- package/src/cookies/define-cookie.ts +222 -53
- package/src/cookies/index.ts +13 -2
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +192 -0
- package/src/dev-tools/404-page.ts +286 -0
- package/src/dev-tools/browser-logs.ts +55 -0
- package/src/dev-tools/dev-page-shell.ts +260 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +185 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +83 -0
- package/src/dev-tools/instrumentation.ts +213 -0
- package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
- package/src/dev-tools/overlay.ts +469 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +182 -0
- package/src/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +479 -128
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/css.ts +3 -2
- package/src/fonts/dev-middleware.ts +85 -0
- package/src/fonts/fallbacks.ts +0 -23
- package/src/fonts/google.ts +101 -19
- package/src/fonts/local.ts +13 -8
- package/src/fonts/paths.ts +58 -0
- package/src/fonts/pipeline.ts +348 -0
- package/src/fonts/transform.ts +311 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +486 -344
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +84 -0
- package/src/plugin-context.ts +503 -0
- package/src/plugins/adapter-build.ts +229 -7
- package/src/plugins/build-manifest.ts +201 -26
- package/src/plugins/build-report.ts +275 -43
- package/src/plugins/cache.ts +243 -0
- package/src/plugins/callsite-ast.ts +472 -0
- package/src/plugins/callsite-jsx.ts +243 -0
- package/src/plugins/chunks.ts +74 -5
- package/src/plugins/client-chunks.ts +185 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +5 -1
- package/src/plugins/dev-discovery.ts +218 -0
- package/src/plugins/dev-server.ts +369 -96
- package/src/plugins/entries.ts +148 -18
- package/src/plugins/fonts.ts +251 -524
- package/src/plugins/graph-endpoint.ts +532 -0
- package/src/plugins/mdx.ts +116 -40
- package/src/plugins/prebuilt-capture.ts +217 -0
- package/src/plugins/prebuilt-options-analysis.ts +175 -0
- package/src/plugins/prebuilt.ts +655 -0
- package/src/plugins/prerender-sugar.ts +320 -0
- package/src/plugins/request-dep/analysis.ts +447 -0
- package/src/plugins/request-dep/index.ts +376 -0
- package/src/plugins/request-dep/origin.ts +310 -0
- package/src/plugins/routing.ts +273 -277
- package/src/plugins/server-bundle.ts +103 -14
- package/src/plugins/shims.ts +259 -97
- package/src/plugins/static-build.ts +708 -66
- package/src/react-canary.d.ts +2 -0
- package/src/routing/codegen-shared.ts +39 -0
- package/src/routing/codegen-types.ts +62 -0
- package/src/routing/codegen-write.ts +141 -0
- package/src/routing/codegen.ts +349 -232
- package/src/routing/collision-probe.ts +438 -0
- package/src/routing/collision-spaces.ts +281 -0
- package/src/routing/convention-lint.ts +623 -0
- package/src/routing/export-detect.ts +448 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +16 -7
- package/src/routing/interception-overlap.ts +141 -0
- package/src/routing/interception.ts +1044 -67
- package/src/routing/link-codegen.ts +280 -0
- package/src/routing/manifest-codegen.ts +226 -0
- package/src/routing/scanner.ts +393 -219
- package/src/routing/schema-validation.ts +155 -0
- package/src/routing/segment-classify.ts +280 -0
- package/src/routing/segment-codegen.ts +98 -0
- package/src/routing/segment-keys.ts +186 -0
- package/src/routing/slot-placement.ts +97 -0
- package/src/routing/types.ts +75 -26
- package/src/routing/walkers.ts +98 -0
- package/src/rsc-runtime/rsc.ts +9 -0
- package/src/rsc-runtime/ssr.ts +51 -0
- package/src/rsc-runtime/transforms.ts +13 -0
- package/src/rsc-runtime/vendor-types.d.ts +19 -0
- package/src/schema-bridge.ts +380 -0
- package/src/search-params/define.ts +677 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/parse-total.ts +91 -0
- package/src/search-params/serialize-equal.ts +14 -0
- package/src/search-params/wrappers.ts +150 -0
- package/src/server/access-gate.tsx +196 -57
- package/src/server/action-client.ts +136 -35
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +256 -56
- package/src/server/actions.ts +112 -68
- package/src/server/als-registry.ts +160 -21
- package/src/server/asset-headers.ts +15 -37
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +33 -57
- package/src/server/canonicalize.ts +6 -3
- package/src/server/chain-url-parts.ts +163 -0
- package/src/server/children-interception.ts +115 -0
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +43 -8
- package/src/server/cookie-context.ts +484 -0
- package/src/server/cookie-parsing.ts +163 -0
- package/src/server/csp-nonce.ts +70 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/debug.ts +137 -0
- package/src/server/default-logger.ts +99 -0
- package/src/server/default-status-page.ts +88 -0
- package/src/server/deny-boundary.ts +533 -0
- package/src/server/deny-renderer.ts +214 -112
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +4 -3
- package/src/server/early-hints.ts +39 -29
- package/src/server/error-boundary-wrapper.ts +181 -44
- package/src/server/error-response-headers.ts +18 -0
- package/src/server/fallback-error.ts +79 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +67 -0
- package/src/server/form-data.ts +124 -12
- package/src/server/form-flash.ts +2 -2
- package/src/server/head-response.ts +54 -0
- package/src/server/html-injector-core.ts +512 -0
- package/src/server/html-injectors.ts +272 -235
- package/src/server/index.ts +40 -192
- package/src/server/instrumentation.ts +1 -1
- package/src/server/internal.ts +173 -0
- package/src/server/logger.ts +73 -36
- package/src/server/metadata-collector.ts +174 -0
- package/src/server/metadata-platform.ts +2 -2
- package/src/server/metadata-render.ts +30 -8
- package/src/server/metadata-routes.ts +205 -24
- package/src/server/metadata-social.ts +2 -2
- package/src/server/metadata.ts +23 -2
- package/src/server/middleware-runner.ts +32 -5
- package/src/server/node-stream-transforms.ts +323 -0
- package/src/server/nuqs-ssr-provider.tsx +8 -7
- package/src/server/param-coercion.ts +198 -0
- package/src/server/pipeline-helpers.ts +159 -0
- package/src/server/pipeline-interception.ts +109 -33
- package/src/server/pipeline-metadata.ts +15 -1
- package/src/server/pipeline-outcome.ts +218 -0
- package/src/server/pipeline-phases.ts +606 -0
- package/src/server/pipeline.ts +343 -389
- package/src/server/port-resolution.ts +53 -0
- package/src/server/prebuilt/cache-key.ts +299 -0
- package/src/server/prebuilt/capture-state.ts +89 -0
- package/src/server/prebuilt/key-discipline.ts +122 -0
- package/src/server/prebuilt/manifest-tag-index.ts +46 -0
- package/src/server/prebuilt/overlay.ts +256 -0
- package/src/server/prebuilt/payload-source.ts +202 -0
- package/src/server/prebuilt/slots.ts +190 -0
- package/src/server/prebuilt/synthetic-store.ts +122 -0
- package/src/server/prebuilt-builder.ts +804 -0
- package/src/server/prebuilt-runtime.ts +817 -0
- package/src/server/primitives.ts +246 -97
- package/src/server/publish-params.ts +42 -0
- package/src/server/render-timeout.ts +108 -0
- package/src/server/render-utils.ts +35 -0
- package/src/server/request-context.ts +244 -333
- package/src/server/request-dep.ts +37 -0
- package/src/server/response-cache-policy.ts +45 -0
- package/src/server/route-element-builder.ts +508 -360
- package/src/server/route-element-helpers.ts +37 -0
- package/src/server/route-handler.ts +40 -13
- package/src/server/route-matcher.ts +165 -272
- package/src/server/route-module-loader.ts +161 -0
- package/src/server/rsc-cache-key-guard.ts +122 -0
- package/src/server/rsc-entry/action-middleware-runner.ts +174 -0
- package/src/server/rsc-entry/api-handler.ts +78 -34
- package/src/server/rsc-entry/deny-fallback.ts +93 -0
- package/src/server/rsc-entry/error-renderer.ts +373 -95
- package/src/server/rsc-entry/helpers.ts +226 -95
- package/src/server/rsc-entry/index.ts +405 -323
- package/src/server/rsc-entry/render-route.ts +304 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
- package/src/server/rsc-entry/rsc-payload.ts +239 -50
- package/src/server/rsc-entry/rsc-stream.ts +160 -30
- package/src/server/rsc-entry/ssr-bridge.ts +18 -5
- package/src/server/rsc-entry/ssr-renderer.ts +315 -57
- package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
- package/src/server/rsc-error-envelope.ts +18 -0
- package/src/server/rsc-prop-warnings.ts +3 -1
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/server-only-guard-noop.js +3 -0
- package/src/server/server-timing.ts +1 -1
- package/src/server/sitemap-generator.ts +337 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/skippable-prefix.ts +172 -0
- package/src/server/slot-interception.ts +168 -0
- package/src/server/slot-resolver.ts +707 -300
- package/src/server/slot-subtree-contain.ts +255 -0
- package/src/server/ssr-bridge-types.ts +165 -0
- package/src/server/ssr-entry.ts +230 -85
- package/src/server/ssr-render.ts +357 -85
- package/src/server/ssr-wrappers.tsx +162 -0
- package/src/server/state-tree-diff.ts +85 -30
- package/src/server/static-generator.ts +715 -0
- package/src/server/static-not-found.ts +134 -0
- package/src/server/status-code-resolver.ts +107 -148
- package/src/server/stream-utils.ts +292 -0
- package/src/server/tracing.ts +151 -16
- package/src/server/tree-match.ts +262 -0
- package/src/server/types.ts +95 -10
- package/src/server/utils/element-type.ts +88 -0
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/utils/mdx-file.ts +22 -0
- package/src/server/version-skew.ts +104 -0
- package/src/server/waituntil-bridge.ts +5 -2
- package/src/server/workers-cache-bridge.ts +33 -0
- package/src/shared/als-slots.ts +74 -0
- package/src/shared/base-path.ts +80 -0
- package/src/shared/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/param-value.ts +281 -0
- package/src/shared/payload-root.ts +152 -0
- package/src/shared/redirect-type.ts +17 -0
- package/src/shared/rsc-cache-key.ts +269 -0
- package/src/shared/rsc-error-envelope.ts +16 -0
- package/src/shared/rsc-manifest.ts +29 -0
- package/src/shared/rsc-media-type.ts +59 -0
- package/src/shared/rsc-payload-path.ts +45 -0
- package/src/shared/segment-info.ts +67 -0
- package/src/shared/slot-params.ts +109 -0
- package/src/shared/static-platform-files.ts +75 -0
- package/src/shared/status-reason-phrase.ts +61 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +122 -1
- package/src/shims/navigation-client.ts +36 -32
- package/src/shims/navigation-rsc.ts +47 -0
- package/src/shims/navigation.ts +10 -7
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-k-AtAQ9R.js +0 -41
- package/dist/_chunks/als-registry-k-AtAQ9R.js.map +0 -1
- package/dist/_chunks/format-DNt20Kt8.js +0 -163
- package/dist/_chunks/format-DNt20Kt8.js.map +0 -1
- package/dist/_chunks/interception-DGDIjDbR.js +0 -676
- package/dist/_chunks/interception-DGDIjDbR.js.map +0 -1
- package/dist/_chunks/metadata-routes-CQCnF4VK.js +0 -153
- package/dist/_chunks/metadata-routes-CQCnF4VK.js.map +0 -1
- package/dist/_chunks/request-context-CRj2Zh1E.js +0 -329
- package/dist/_chunks/request-context-CRj2Zh1E.js.map +0 -1
- package/dist/_chunks/ssr-data-DLnbYpj1.js.map +0 -1
- package/dist/_chunks/tracing-DF0G3FB7.js +0 -173
- package/dist/_chunks/tracing-DF0G3FB7.js.map +0 -1
- package/dist/_chunks/use-cookie-dDbpCTx-.js +0 -91
- package/dist/_chunks/use-cookie-dDbpCTx-.js.map +0 -1
- package/dist/_chunks/use-query-states-DAhgj8Gx.js +0 -109
- package/dist/_chunks/use-query-states-DAhgj8Gx.js.map +0 -1
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/error-boundary.js.map +0 -1
- package/dist/client/head.d.ts +0 -16
- package/dist/client/head.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/segment-merger.d.ts +0 -119
- package/dist/client/segment-merger.d.ts.map +0 -1
- package/dist/client/stale-reload.d.ts +0 -44
- package/dist/client/stale-reload.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts +0 -74
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts +0 -26
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts +0 -92
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/content/index.d.ts +0 -11
- package/dist/content/index.d.ts.map +0 -1
- package/dist/content/index.js +0 -2
- package/dist/plugins/cache-transform.d.ts +0 -36
- package/dist/plugins/cache-transform.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts +0 -60
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/search-params/registry.d.ts +0 -20
- package/dist/search-params/registry.d.ts.map +0 -1
- package/dist/server/client-module-map.d.ts +0 -47
- package/dist/server/client-module-map.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts +0 -29
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts +0 -129
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/flush.d.ts +0 -74
- package/dist/server/flush.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/tree-builder.d.ts +0 -126
- package/dist/server/tree-builder.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -99
- package/src/client/browser-entry.ts +0 -674
- package/src/client/head.ts +0 -61
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/segment-merger.ts +0 -345
- package/src/client/stale-reload.ts +0 -89
- package/src/client/transition-root.tsx +0 -160
- package/src/client/use-navigation-pending.ts +0 -38
- package/src/client/use-params.ts +0 -141
- package/src/content/index.ts +0 -13
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/codecs.ts +0 -153
- package/src/search-params/create.ts +0 -321
- package/src/search-params/registry.ts +0 -31
- package/src/server/client-module-map.ts +0 -58
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/dev-warnings.ts +0 -282
- package/src/server/flush.ts +0 -182
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/server/tree-builder.ts +0 -382
- package/src/shims/server-only-noop.js +0 -6
- package/src/utils/directive-parser.ts +0 -529
|
@@ -3,36 +3,53 @@
|
|
|
3
3
|
// Primary deployment target. Generates a Workers-compatible entry point
|
|
4
4
|
// and wrangler.jsonc configuration. See design/11-platform.md §"Cloudflare Workers".
|
|
5
5
|
|
|
6
|
-
import { writeFile,
|
|
6
|
+
import { writeFile, readFile, cp, rm, readdir, access } from 'node:fs/promises';
|
|
7
7
|
import { execFile } from 'node:child_process';
|
|
8
8
|
import { join, relative } from 'node:path';
|
|
9
|
+
import { parse as parseJsonc } from 'jsonc-parser';
|
|
9
10
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
10
|
-
import type { TimberPlatformAdapter, TimberConfig } from './types';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
Cache-Control: ${STATIC_CACHE}
|
|
26
|
-
`;
|
|
27
|
-
}
|
|
11
|
+
import type { TimberPlatformAdapter, TimberConfig } from './types.ts';
|
|
12
|
+
import {
|
|
13
|
+
runSharedBuildSteps,
|
|
14
|
+
findUnhashedStaticFiles,
|
|
15
|
+
buildStaticDirectoryOutput,
|
|
16
|
+
writeHeadersFile,
|
|
17
|
+
} from './build-output-helper.ts';
|
|
18
|
+
import { adapterBase, generateHeadersFile } from './shared.ts';
|
|
19
|
+
// Isomorphic, zero-import module — safe to load from an adapter, which Node's
|
|
20
|
+
// native ESM loader evaluates before Vite's resolver exists. Same precedent as
|
|
21
|
+
// `adapters/shared.ts` importing `../shared/base-path.js`.
|
|
22
|
+
import { RSC_KEY_HEADERS } from '../shared/rsc-cache-key.ts';
|
|
23
|
+
// Same reasoning: the media type the origin's own RSC gate matches on, so the
|
|
24
|
+
// two predicates cannot drift apart. See `shared/rsc-media-type.ts`.
|
|
25
|
+
import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.ts';
|
|
28
26
|
|
|
29
27
|
// ─── Bindings passthrough ─────────────────────────────────────────────────
|
|
30
28
|
// ALS stores the env object per-request so server components and middleware
|
|
31
29
|
// can access KV, D1, DO, R2, Queues, etc. via getCloudflareBindings().
|
|
32
30
|
// No global fallback — if called outside a request, it throws.
|
|
33
31
|
// See design/11-platform.md §"Platform Target" and design/25-production-deployments.md.
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
//
|
|
33
|
+
// The ALS is stored on globalThis via Symbol.for so it survives Vite's
|
|
34
|
+
// module instance split in dev mode. The Vite host process (where
|
|
35
|
+
// cloudflareDevBindings → runWithBindings runs) and the RSC module runner
|
|
36
|
+
// (where getCloudflareBindings runs) load separate instances of this file,
|
|
37
|
+
// each with their own module-level variables. globalThis + Symbol.for
|
|
38
|
+
// ensures both share the same ALS — same pattern React uses for
|
|
39
|
+
// Symbol.for('react.element').
|
|
40
|
+
|
|
41
|
+
const BINDINGS_ALS_KEY = Symbol.for('timber:cf-bindings-als');
|
|
42
|
+
|
|
43
|
+
function getBindingsAls(): AsyncLocalStorage<Record<string, unknown>> {
|
|
44
|
+
let als = (globalThis as any)[BINDINGS_ALS_KEY] as
|
|
45
|
+
| AsyncLocalStorage<Record<string, unknown>>
|
|
46
|
+
| undefined;
|
|
47
|
+
if (!als) {
|
|
48
|
+
als = new AsyncLocalStorage<Record<string, unknown>>();
|
|
49
|
+
(globalThis as any)[BINDINGS_ALS_KEY] = als;
|
|
50
|
+
}
|
|
51
|
+
return als;
|
|
52
|
+
}
|
|
36
53
|
|
|
37
54
|
/**
|
|
38
55
|
* Get Cloudflare Worker bindings for the current request.
|
|
@@ -55,10 +72,8 @@ const bindingsAls = new AsyncLocalStorage<Record<string, unknown>>();
|
|
|
55
72
|
* }
|
|
56
73
|
* ```
|
|
57
74
|
*/
|
|
58
|
-
export function getCloudflareBindings<
|
|
59
|
-
|
|
60
|
-
>(): T {
|
|
61
|
-
const env = bindingsAls.getStore();
|
|
75
|
+
export function getCloudflareBindings<T = Record<string, unknown>>(): T {
|
|
76
|
+
const env = getBindingsAls().getStore();
|
|
62
77
|
if (!env) {
|
|
63
78
|
throw new Error(
|
|
64
79
|
'getCloudflareBindings() called outside a Cloudflare Workers request context. ' +
|
|
@@ -71,14 +86,98 @@ export function getCloudflareBindings<
|
|
|
71
86
|
|
|
72
87
|
/**
|
|
73
88
|
* Run a function with Cloudflare bindings available via getCloudflareBindings().
|
|
74
|
-
* @internal Used by
|
|
89
|
+
* @internal Used by cloudflareDevBindings() to wrap dev-server requests.
|
|
75
90
|
*/
|
|
76
91
|
export function runWithBindings<T>(env: Record<string, unknown>, fn: () => T): T {
|
|
77
|
-
return
|
|
92
|
+
return getBindingsAls().run(env, fn);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ─── Binding configuration types ──────────────────────────────────────────────
|
|
96
|
+
// Declarative binding config that maps to wrangler.jsonc binding sections.
|
|
97
|
+
// See design/35-cloudflare-primitives.md §"Binding Declarations in Adapter Config".
|
|
98
|
+
|
|
99
|
+
/** KV namespace binding. `id` defaults to `''` (filled in by wrangler or dashboard). */
|
|
100
|
+
export interface CloudflareKVBinding {
|
|
101
|
+
name: string;
|
|
102
|
+
id?: string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** D1 database binding. `database_id` is required (from Cloudflare dashboard). */
|
|
106
|
+
export interface CloudflareD1Binding {
|
|
107
|
+
name: string;
|
|
108
|
+
database_id: string;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** R2 bucket binding. `bucket_name` must match the bucket created in Cloudflare. */
|
|
112
|
+
export interface CloudflareR2Binding {
|
|
113
|
+
name: string;
|
|
114
|
+
bucket_name: string;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Queue producer binding. `queue` is the queue name in Cloudflare. */
|
|
118
|
+
export interface CloudflareQueueProducer {
|
|
119
|
+
name: string;
|
|
120
|
+
queue: string;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** Queue consumer declaration. Attached to the worker, not a binding name. */
|
|
124
|
+
export interface CloudflareQueueConsumer {
|
|
125
|
+
queue: string;
|
|
126
|
+
max_batch_size?: number;
|
|
127
|
+
max_retries?: number;
|
|
128
|
+
dead_letter_queue?: string;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Durable Object binding. `script_name` is for external DO references. */
|
|
132
|
+
export interface CloudflareDurableObjectBinding {
|
|
133
|
+
name: string;
|
|
134
|
+
class_name: string;
|
|
135
|
+
script_name?: string;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Declarative Cloudflare bindings configuration.
|
|
140
|
+
*
|
|
141
|
+
* These are converted to the appropriate wrangler.jsonc sections
|
|
142
|
+
* (`kv_namespaces`, `d1_databases`, `r2_buckets`, `queues`, `durable_objects`).
|
|
143
|
+
* The `wrangler` escape hatch overrides any generated binding sections
|
|
144
|
+
* if there's a conflict.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```ts
|
|
148
|
+
* cloudflare({
|
|
149
|
+
* bindings: {
|
|
150
|
+
* kv: [{ name: 'TIMBER_CACHE' }],
|
|
151
|
+
* d1: [{ name: 'MY_DB', database_id: 'xxxx' }],
|
|
152
|
+
* r2: [{ name: 'MY_BUCKET', bucket_name: 'my-bucket' }],
|
|
153
|
+
* queues: {
|
|
154
|
+
* producers: [{ name: 'EMAIL_QUEUE', queue: 'email-queue' }],
|
|
155
|
+
* consumers: [{ queue: 'email-queue', max_batch_size: 10 }],
|
|
156
|
+
* },
|
|
157
|
+
* durableObjects: [{ name: 'MY_DO', class_name: 'MyDurableObject' }],
|
|
158
|
+
* },
|
|
159
|
+
* })
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export interface CloudflareBindings {
|
|
163
|
+
kv?: CloudflareKVBinding[];
|
|
164
|
+
d1?: CloudflareD1Binding[];
|
|
165
|
+
r2?: CloudflareR2Binding[];
|
|
166
|
+
queues?: {
|
|
167
|
+
producers?: CloudflareQueueProducer[];
|
|
168
|
+
consumers?: CloudflareQueueConsumer[];
|
|
169
|
+
};
|
|
170
|
+
durableObjects?: CloudflareDurableObjectBinding[];
|
|
78
171
|
}
|
|
79
172
|
|
|
80
173
|
/** Options for the Cloudflare Workers adapter. */
|
|
81
174
|
export interface CloudflareAdapterOptions {
|
|
175
|
+
/**
|
|
176
|
+
* Worker name used in the generated wrangler.jsonc.
|
|
177
|
+
* @default 'timber-app'
|
|
178
|
+
*/
|
|
179
|
+
name?: string;
|
|
180
|
+
|
|
82
181
|
/**
|
|
83
182
|
* Cloudflare compatibility date.
|
|
84
183
|
* @default Current date in YYYY-MM-DD format at build time.
|
|
@@ -91,11 +190,42 @@ export interface CloudflareAdapterOptions {
|
|
|
91
190
|
*/
|
|
92
191
|
compatibilityFlags?: string[];
|
|
93
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Declarative Cloudflare bindings. Generates the appropriate
|
|
195
|
+
* `kv_namespaces`, `d1_databases`, `r2_buckets`, `queues`, and
|
|
196
|
+
* `durable_objects` sections in wrangler.jsonc.
|
|
197
|
+
*
|
|
198
|
+
* If both `bindings` and `wrangler` specify the same section,
|
|
199
|
+
* `wrangler` wins (it's the escape hatch).
|
|
200
|
+
*/
|
|
201
|
+
bindings?: CloudflareBindings;
|
|
202
|
+
|
|
94
203
|
/**
|
|
95
204
|
* Custom wrangler.jsonc fields to merge.
|
|
96
|
-
* Overrides generated values.
|
|
205
|
+
* Overrides generated values (including bindings-generated sections).
|
|
97
206
|
*/
|
|
98
207
|
wrangler?: Record<string, unknown>;
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Path to a module that exports additional Worker handlers (queue, scheduled, email, etc.).
|
|
211
|
+
* The module is imported in the generated `_worker.js` and its named exports are
|
|
212
|
+
* spread into the default export alongside `fetch`.
|
|
213
|
+
*
|
|
214
|
+
* The module receives `(batch/event, env, ctx)` — standard Cloudflare handler signatures.
|
|
215
|
+
* It does NOT have access to timber's request pipeline (no ALS, no getCloudflareBindings).
|
|
216
|
+
* Use `env` directly for bindings.
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```ts
|
|
220
|
+
* // timber.config.ts
|
|
221
|
+
* adapter: cloudflare({ workerHandlers: './src/worker-handlers.ts' })
|
|
222
|
+
*
|
|
223
|
+
* // src/worker-handlers.ts
|
|
224
|
+
* export async function queue(batch, env) { ... }
|
|
225
|
+
* export async function scheduled(controller, env, ctx) { ... }
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
workerHandlers?: string;
|
|
99
229
|
}
|
|
100
230
|
|
|
101
231
|
/**
|
|
@@ -117,47 +247,82 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
|
|
|
117
247
|
|
|
118
248
|
async buildOutput(config: TimberConfig, buildDir: string) {
|
|
119
249
|
const outDir = join(buildDir, 'cloudflare');
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}).catch(
|
|
132
|
-
|
|
250
|
+
|
|
251
|
+
// ── Static mode: Cloudflare Pages-compatible output ──────────────
|
|
252
|
+
// No Workers entry — just HTML files + client assets in a flat
|
|
253
|
+
// directory that Cloudflare Pages can serve directly.
|
|
254
|
+
if (config.output === 'static' && config.staticPagesDir) {
|
|
255
|
+
await buildStaticOutput(config, buildDir, outDir, options);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Clean stale prebuilt artifacts from prior builds.
|
|
260
|
+
await rm(join(outDir, 'prebuilt'), { recursive: true, force: true }).catch(() => {});
|
|
261
|
+
await rm(join(outDir, 'static', 'prebuilt'), { recursive: true, force: true }).catch(
|
|
262
|
+
() => {}
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
// Steps 1–5: shared across all adapters (mkdir, copy client/rsc/ssr,
|
|
266
|
+
// write _headers, write manifest-init).
|
|
267
|
+
await runSharedBuildSteps({
|
|
268
|
+
config,
|
|
269
|
+
buildDir,
|
|
270
|
+
outDir,
|
|
271
|
+
publicDirName: 'static',
|
|
133
272
|
});
|
|
134
273
|
|
|
135
|
-
//
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
274
|
+
// Compile optional worker handlers (queue, scheduled, etc.)
|
|
275
|
+
// Uses Vite's build API to bundle the TypeScript source into ESM.
|
|
276
|
+
let hasWorkerHandlers = false;
|
|
277
|
+
if (options.workerHandlers) {
|
|
278
|
+
const handlersEntry = join(process.cwd(), options.workerHandlers);
|
|
279
|
+
const { build: viteBuild } = await import('vite');
|
|
280
|
+
await viteBuild({
|
|
281
|
+
configFile: false,
|
|
282
|
+
logLevel: 'info',
|
|
283
|
+
build: {
|
|
284
|
+
lib: {
|
|
285
|
+
entry: handlersEntry,
|
|
286
|
+
formats: ['es'],
|
|
287
|
+
fileName: () => '_worker-handlers.js',
|
|
288
|
+
},
|
|
289
|
+
outDir,
|
|
290
|
+
emptyOutDir: false,
|
|
291
|
+
minify: false,
|
|
292
|
+
rollupOptions: {
|
|
293
|
+
external: [/^node:/, /^cloudflare:/],
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
|
+
hasWorkerHandlers = true;
|
|
152
298
|
}
|
|
153
299
|
|
|
300
|
+
// Inline prebuilt flight payloads into the worker JS module (TIM-1162).
|
|
301
|
+
// Data is read from buildDir/prebuilt/ and embedded as literals —
|
|
302
|
+
// no external Text/Data module imports needed.
|
|
303
|
+
const prebuiltData = await readPrebuiltData(buildDir);
|
|
304
|
+
await writeFile(
|
|
305
|
+
join(outDir, '_timber-prebuilt-source.js'),
|
|
306
|
+
generatePrebuiltSourceModule(prebuiltData)
|
|
307
|
+
);
|
|
308
|
+
// Remove the copied prebuilt/ dir — data is inlined, files aren't needed.
|
|
309
|
+
await rm(join(outDir, 'prebuilt'), { recursive: true, force: true }).catch(() => {});
|
|
310
|
+
|
|
311
|
+
// Write the runtime init module — sets process.env.TIMBER_RUNTIME
|
|
312
|
+
// BEFORE the RSC entry evaluates (ESM import order). Without this,
|
|
313
|
+
// createRequestHandler's auto-wire for WorkersCachePurge would not
|
|
314
|
+
// detect the Cloudflare runtime (TIM-1170).
|
|
315
|
+
await writeFile(join(outDir, '_timber-runtime-init.js'), generateRuntimeInitModule());
|
|
316
|
+
|
|
154
317
|
// Generate the Workers entry point
|
|
155
318
|
const hasManifestInit = !!config.manifestInit;
|
|
156
|
-
const workerEntry = generateWorkerEntry(outDir, outDir, hasManifestInit);
|
|
319
|
+
const workerEntry = generateWorkerEntry(outDir, outDir, hasManifestInit, hasWorkerHandlers);
|
|
157
320
|
await writeFile(join(outDir, '_worker.js'), workerEntry);
|
|
158
321
|
|
|
159
|
-
// Generate wrangler.jsonc
|
|
160
|
-
const
|
|
322
|
+
// Generate wrangler.jsonc — merges user's wrangler config from disk if present
|
|
323
|
+
const root = config.root ?? process.cwd();
|
|
324
|
+
const userConfig = await readUserWranglerConfig(root);
|
|
325
|
+
const wranglerConfig = generateWranglerConfig(config, options, userConfig);
|
|
161
326
|
await writeFile(join(outDir, 'wrangler.jsonc'), JSON.stringify(wranglerConfig, null, 2));
|
|
162
327
|
},
|
|
163
328
|
|
|
@@ -166,45 +331,11 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
|
|
|
166
331
|
await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
|
|
167
332
|
},
|
|
168
333
|
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Wrap a timber request handler to bind the Cloudflare execution context
|
|
177
|
-
* for `waitUntil()` support and env bindings passthrough.
|
|
178
|
-
* Called from the generated worker entry.
|
|
179
|
-
*
|
|
180
|
-
* This function:
|
|
181
|
-
* 1. Binds `adapter.waitUntil()` to `ctx.waitUntil()` per-request
|
|
182
|
-
* 2. Makes `env` accessible via `getCloudflareBindings()` per-request via ALS
|
|
183
|
-
*/
|
|
184
|
-
export function wrapWithExecutionContext(
|
|
185
|
-
adapter: TimberPlatformAdapter,
|
|
186
|
-
handler: (req: Request) => Promise<Response>
|
|
187
|
-
): ExportedHandler<Record<string, unknown>> {
|
|
188
|
-
return {
|
|
189
|
-
async fetch(
|
|
190
|
-
request: Request,
|
|
191
|
-
env: Record<string, unknown>,
|
|
192
|
-
ctx: ExecutionContext
|
|
193
|
-
): Promise<Response> {
|
|
194
|
-
// Bind the adapter's waitUntil to the Workers execution context
|
|
195
|
-
const originalWaitUntil = adapter.waitUntil;
|
|
196
|
-
adapter.waitUntil = (promise: Promise<unknown>) => {
|
|
197
|
-
ctx.waitUntil(promise);
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
try {
|
|
201
|
-
// Run the handler within ALS so getCloudflareBindings() works
|
|
202
|
-
return await runWithBindings(env, () => handler(request));
|
|
203
|
-
} finally {
|
|
204
|
-
// Restore (in case adapter is reused across isolate resets)
|
|
205
|
-
adapter.waitUntil = originalWaitUntil;
|
|
206
|
-
}
|
|
207
|
-
},
|
|
334
|
+
// No adapter-level waitUntil: on Workers there is no ambient
|
|
335
|
+
// ExecutionContext outside a request, so support is provided
|
|
336
|
+
// per-request by the generated _worker.js, which bridges
|
|
337
|
+
// ctx.waitUntil() into the ALS via runWithWaitUntil().
|
|
338
|
+
// See design/11-platform.md §"waitUntil()".
|
|
208
339
|
};
|
|
209
340
|
}
|
|
210
341
|
|
|
@@ -214,7 +345,8 @@ export function wrapWithExecutionContext(
|
|
|
214
345
|
export function generateWorkerEntry(
|
|
215
346
|
buildDir: string,
|
|
216
347
|
outDir: string,
|
|
217
|
-
hasManifestInit = false
|
|
348
|
+
hasManifestInit = false,
|
|
349
|
+
hasWorkerHandlers = false
|
|
218
350
|
): string {
|
|
219
351
|
// The RSC entry is the main request handler — it exports the fetch handler as default.
|
|
220
352
|
// The Vite RSC plugin outputs it to rsc/index.js.
|
|
@@ -229,50 +361,538 @@ export function generateWorkerEntry(
|
|
|
229
361
|
// ESM guarantees imports are evaluated in order.
|
|
230
362
|
const manifestImport = hasManifestInit ? "import './_timber-manifest-init.js'\n" : '';
|
|
231
363
|
|
|
364
|
+
// Optional additional Worker handlers (queue, scheduled, email, etc.)
|
|
365
|
+
// Compiled by buildOutput via Vite's build API into _worker-handlers.js.
|
|
366
|
+
// The module's named exports are spread into the default export alongside fetch.
|
|
367
|
+
const handlersImport = hasWorkerHandlers
|
|
368
|
+
? "import * as workerHandlers from './_worker-handlers.js'\n"
|
|
369
|
+
: '';
|
|
370
|
+
const handlersSpread = hasWorkerHandlers ? ' ...workerHandlers,\n' : '';
|
|
371
|
+
|
|
232
372
|
return `// Generated by @timber-js/app/adapters/cloudflare
|
|
233
373
|
// Do not edit — this file is regenerated on each build.
|
|
234
374
|
|
|
235
|
-
|
|
375
|
+
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
376
|
+
// Side-effect imports: evaluated IN ORDER before the _worker.js body runs.
|
|
377
|
+
// _timber-runtime-init.js sets TIMBER_RUNTIME before createRequestHandler()
|
|
378
|
+
// runs (during the RSC entry's top-level await) so the auto-wire for
|
|
379
|
+
// WorkersCachePurge can detect the Cloudflare runtime (TIM-1170).
|
|
380
|
+
// _timber-prebuilt-source.js sets globalThis.__TIMBER_PREBUILT_SOURCE__
|
|
381
|
+
// for cache.component payloads.
|
|
382
|
+
import './_timber-runtime-init.js'
|
|
383
|
+
import './_timber-prebuilt-source.js'
|
|
384
|
+
${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge, stripHeadBody } from '${rscEntryRelative}'
|
|
385
|
+
${handlersImport}
|
|
386
|
+
|
|
387
|
+
// Bind Cloudflare env to ALS so getCloudflareBindings() works at runtime.
|
|
388
|
+
// Uses the same Symbol.for key as getCloudflareBindings() reads from.
|
|
389
|
+
const ALS_KEY = Symbol.for('timber:cf-bindings-als')
|
|
390
|
+
let bindingsAls = globalThis[ALS_KEY]
|
|
391
|
+
if (!bindingsAls) {
|
|
392
|
+
bindingsAls = new AsyncLocalStorage()
|
|
393
|
+
globalThis[ALS_KEY] = bindingsAls
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// Register timber's platform tracer so pipeline phase spans (timber.proxy,
|
|
397
|
+
// timber.middleware, timber.render, timber.access, timber.action, …) appear
|
|
398
|
+
// as native Cloudflare spans in the Observability dashboard, nested under
|
|
399
|
+
// the auto-instrumented fetch/KV/D1 spans. Requires observability.traces
|
|
400
|
+
// enabled in wrangler.jsonc (generated by default).
|
|
401
|
+
//
|
|
402
|
+
// Lazily imported and guarded: runtimes without the custom spans API
|
|
403
|
+
// (older compatibility dates, older local workerd) fall back to OTEL-only
|
|
404
|
+
// emission. withSpan() in the framework composes both channels.
|
|
405
|
+
const TRACER_KEY = Symbol.for('timber:platform-tracer')
|
|
406
|
+
let tracerInit
|
|
407
|
+
function initPlatformTracer() {
|
|
408
|
+
tracerInit ??= import('cloudflare:workers')
|
|
409
|
+
.then(({ tracing }) => {
|
|
410
|
+
if (tracing && typeof tracing.enterSpan === 'function') {
|
|
411
|
+
globalThis[TRACER_KEY] ??= {
|
|
412
|
+
enterSpan: (name, fn) => tracing.enterSpan(name, fn),
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
})
|
|
416
|
+
.catch(() => {})
|
|
417
|
+
return tracerInit
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// The \`Vary\` tokens this cache can serve a correct answer for.
|
|
421
|
+
//
|
|
422
|
+
// Cloudflare's Cache API keys on the request URL. It does not implement
|
|
423
|
+
// RFC 9111 §4.1 secondary key selection, so a stored response is handed to
|
|
424
|
+
// every request for that URL regardless of what \`Vary\` nominates — except
|
|
425
|
+
// \`Accept-Encoding\`, which the platform segregates itself. Storing a
|
|
426
|
+
// response whose \`Vary\` says "this answer is specific to header H" under a
|
|
427
|
+
// key that ignores H is cross-client reuse (TIM-1269): a developer writing
|
|
428
|
+
// the correct \`public, s-maxage=60\` + \`Vary: Cookie\` gets their logged-in
|
|
429
|
+
// page served to anonymous visitors. Refusing to store is the conservative
|
|
430
|
+
// answer, and the only one available without rewriting the key.
|
|
431
|
+
//
|
|
432
|
+
// The framework's own tokens are on this list because the adapter already
|
|
433
|
+
// segregates them, more strictly than \`Vary\` would:
|
|
434
|
+
//
|
|
435
|
+
// - \`Accept\` — \`isRsc\` above excludes \`text/x-component\` from both lookup
|
|
436
|
+
// and store, so the HTML/Flight split \`Vary: Accept\` exists to protect
|
|
437
|
+
// never reaches this cache in the first place.
|
|
438
|
+
// - \`X-Timber-State-Tree\`, \`X-Timber-URL\`, \`X-Timber-Deployment-Id\` — the
|
|
439
|
+
// origin reads all three only on RSC requests (version skew at
|
|
440
|
+
// \`server/pipeline-phases.ts\`, interception rewrites likewise, state-tree
|
|
441
|
+
// diffing at \`server/rsc-entry/render-route.ts\`). On the non-RSC requests
|
|
442
|
+
// this cache stores, they cannot change the response.
|
|
443
|
+
//
|
|
444
|
+
// That second bullet is a coupling, not an observation: if any of those
|
|
445
|
+
// headers ever starts varying a document response, this list is wrong and
|
|
446
|
+
// the cache poisons. Because the list is derived, a header added to
|
|
447
|
+
// \`RSC_KEY_HEADERS\` inherits the exemption silently — so
|
|
448
|
+
// \`tests/adapters/cloudflare-vary.test.ts\` fails until that header is named
|
|
449
|
+
// there alongside the evidence for its gate, and the gates themselves are
|
|
450
|
+
// covered there, in \`tests/render-route.test.ts\`, and in
|
|
451
|
+
// \`tests/interception-x-timber-url.test.ts\`.
|
|
452
|
+
//
|
|
453
|
+
// Interpolated from \`RSC_KEY_HEADERS\` rather than spelled again — "which
|
|
454
|
+
// headers vary an RSC response" has one answer, and a hand-copied second
|
|
455
|
+
// list here would drift silently on the fallback path nobody exercises.
|
|
456
|
+
//
|
|
457
|
+
// Known residual: a route handler that content-negotiates on \`Accept\`
|
|
458
|
+
// (JSON vs HTML) *and* marks itself \`public\` is still mis-keyed, because the
|
|
459
|
+
// \`isRsc\` split is binary and does not separate those two. That is no worse
|
|
460
|
+
// than the pre-TIM-1269 behaviour, which stored every \`Vary\` but \`*\`.
|
|
461
|
+
const VARY_HONORED = new Set(${JSON.stringify(['accept-encoding', ...RSC_KEY_HEADERS.map((h) => h.toLowerCase())])})
|
|
462
|
+
|
|
463
|
+
// Applied to BOTH sides of the cache — what may be stored, and what a hit
|
|
464
|
+
// may serve. Refusing to store only stops new poisoning: entries a previous
|
|
465
|
+
// deployment wrote under the old predicate stay servable for whatever
|
|
466
|
+
// s-maxage the developer chose, which can be a day. Checking on the way out
|
|
467
|
+
// makes the fix take effect on deploy rather than on expiry, and costs one
|
|
468
|
+
// header read per hit. A rejected entry falls through to the origin and is
|
|
469
|
+
// then declined by the same predicate on the way back in, so it is not
|
|
470
|
+
// rewritten — it simply ages out.
|
|
471
|
+
function canHonorVary(vary) {
|
|
472
|
+
// Absent or empty Vary nominates nothing — the URL is the whole key.
|
|
473
|
+
if (!vary) return true
|
|
474
|
+
return vary.split(',').every((token) => VARY_HONORED.has(token.trim().toLowerCase()))
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
export default {
|
|
478
|
+
${handlersSpread} async fetch(request, env, ctx) {
|
|
479
|
+
// One-time on first request; resolved-promise await thereafter.
|
|
480
|
+
await initPlatformTracer()
|
|
481
|
+
|
|
482
|
+
// Edge-cache GET/HEAD responses via the Cache API (caches.default).
|
|
483
|
+
// caches.default and ctx.cache.purge() operate on the same underlying
|
|
484
|
+
// Cloudflare CDN cache — "independent" in the CF docs means independent
|
|
485
|
+
// write APIs, not independent stores (TIM-1172). Tag-based purging via
|
|
486
|
+
// revalidateTag() clears entries stored here when their Cache-Tag header
|
|
487
|
+
// matches the invalidated tag. See design/25 §TIM-1172.
|
|
488
|
+
//
|
|
489
|
+
// RSC navigation requests (Accept: text/x-component) are excluded.
|
|
490
|
+
// Their varying inputs are now in the URL via ?_rsc= (TIM-1268), but
|
|
491
|
+
// this cache keys on the request URL alone and cannot honour Vary, so a
|
|
492
|
+
// payload request that arrives without the param — stripped query,
|
|
493
|
+
// hand-rolled client — would share a key with the document.
|
|
494
|
+
//
|
|
495
|
+
// This exclusion is load-bearing in the other direction too: the store
|
|
496
|
+
// predicate below treats "Vary: Accept" as honoured *because* of it
|
|
497
|
+
// (see VARY_HONORED). Removing it would make that allowlist unsound.
|
|
498
|
+
const isRsc = request.headers.get('Accept')?.includes(${JSON.stringify(RSC_CONTENT_TYPE)})
|
|
499
|
+
const reqCc = request.headers.get('Cache-Control') || ''
|
|
500
|
+
const bypassCache = reqCc.includes('no-cache') || reqCc.includes('max-age=0')
|
|
501
|
+
|| request.headers.has('Pragma')
|
|
502
|
+
const cacheable = !isRsc && !bypassCache
|
|
503
|
+
&& (request.method === 'GET' || request.method === 'HEAD')
|
|
504
|
+
const cache = cacheable && typeof caches !== 'undefined' ? caches.default : null
|
|
505
|
+
if (cache) {
|
|
506
|
+
const cached = await cache.match(request)
|
|
507
|
+
// A hit whose Vary this cache cannot key on is treated as a miss —
|
|
508
|
+
// see canHonorVary. Entries written before that predicate existed are
|
|
509
|
+
// exactly the ones that would be served to the wrong client.
|
|
510
|
+
if (cached) {
|
|
511
|
+
if (canHonorVary(cached.headers.get('Vary'))) return stripHeadBody(cached, request.method)
|
|
512
|
+
// Declining the hit means nobody will ever read this body. Release
|
|
513
|
+
// it rather than leaving the stream dangling for the rest of the
|
|
514
|
+
// request (design/02-rendering-pipeline.md §"Cancel Readers When You
|
|
515
|
+
// No Longer Need the Stream").
|
|
516
|
+
cached.body?.cancel().catch(() => {})
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// Bridge ctx.cache into the per-request ALS so WorkersCachePurge can
|
|
521
|
+
// call ctx.cache.purge({ tags }) during cache.invalidate/revalidateTag.
|
|
522
|
+
// Workers Cache is available on all Cloudflare plans — no API token needed.
|
|
523
|
+
const workersCacheCtx = ctx.cache && typeof ctx.cache.purge === 'function' ? ctx.cache : null
|
|
524
|
+
const runHandler = () =>
|
|
525
|
+
runWithWaitUntil((promise) => ctx.waitUntil(promise), () => handler(request))
|
|
526
|
+
const response = await bindingsAls.run(env, () =>
|
|
527
|
+
workersCacheCtx
|
|
528
|
+
? runWithWorkersCachePurge(workersCacheCtx, runHandler)
|
|
529
|
+
: runHandler()
|
|
530
|
+
)
|
|
531
|
+
|
|
532
|
+
// Cache public responses at the edge. A response is edge-cacheable if
|
|
533
|
+
// it has 'public' or 's-maxage' (a shared-cache TTL directive) and no
|
|
534
|
+
// 'no-store' or 'private'. Cloudflare's cache.put() only accepts GET
|
|
535
|
+
// requests and rejects 206, so only store GET 200s. HEAD requests
|
|
536
|
+
// are served from cache.match() hits with the body stripped (TIM-1325).
|
|
537
|
+
// See design/25-production-deployments.md §"CDN / Edge Cache".
|
|
538
|
+
if (cache && request.method === 'GET' && response.status === 200) {
|
|
539
|
+
const cc = response.headers.get('Cache-Control')
|
|
540
|
+
if (cc && !cc.includes('no-store') && !cc.includes('private')
|
|
541
|
+
&& (cc.includes('public') || cc.includes('s-maxage'))
|
|
542
|
+
&& canHonorVary(response.headers.get('Vary'))
|
|
543
|
+
&& !response.headers.has('Set-Cookie')) {
|
|
544
|
+
ctx.waitUntil(cache.put(request, response.clone()))
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
return response
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
`;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
/** Build-time prebuilt data read from `.timber/dist/prebuilt/`. */
|
|
555
|
+
export interface PrebuiltModuleData {
|
|
556
|
+
/** Raw manifest.json content. */
|
|
557
|
+
manifestJson: string;
|
|
558
|
+
/** Payload file paths and their raw bytes. */
|
|
559
|
+
payloads: Array<{ file: string; bytes: Buffer }>;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Discover and read prebuilt flight payload files from the build directory.
|
|
564
|
+
* Returns null when no prebuilt artifacts exist (no cache.component usage).
|
|
565
|
+
*
|
|
566
|
+
* @internal Exported for testing.
|
|
567
|
+
*/
|
|
568
|
+
export async function readPrebuiltData(buildDir: string): Promise<PrebuiltModuleData | null> {
|
|
569
|
+
const prebuiltDir = join(buildDir, 'prebuilt');
|
|
570
|
+
let manifestJson: string;
|
|
571
|
+
try {
|
|
572
|
+
manifestJson = await readFile(join(prebuiltDir, 'manifest.json'), 'utf-8');
|
|
573
|
+
} catch {
|
|
574
|
+
return null;
|
|
575
|
+
}
|
|
576
|
+
const payloads: PrebuiltModuleData['payloads'] = [];
|
|
577
|
+
try {
|
|
578
|
+
const componentDirs = await readdir(prebuiltDir, { withFileTypes: true });
|
|
579
|
+
for (const dir of componentDirs) {
|
|
580
|
+
if (!dir.isDirectory()) continue;
|
|
581
|
+
const files = await readdir(join(prebuiltDir, dir.name));
|
|
582
|
+
for (const file of files) {
|
|
583
|
+
if (file.endsWith('.flight')) {
|
|
584
|
+
const filePath = `${dir.name}/${file}`;
|
|
585
|
+
const bytes = await readFile(join(prebuiltDir, filePath));
|
|
586
|
+
payloads.push({ file: filePath, bytes });
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
} catch {
|
|
591
|
+
// No subdirectories — manifest exists but no payloads
|
|
592
|
+
}
|
|
593
|
+
return { manifestJson, payloads };
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
/**
|
|
597
|
+
* Generate the prebuilt payload source module for Cloudflare Workers.
|
|
598
|
+
*
|
|
599
|
+
* Inlines manifest JSON and flight payload bytes directly into the module
|
|
600
|
+
* so they're part of the worker's JS bundle — no external Text/Data module
|
|
601
|
+
* imports needed. This avoids depending on wrangler's find_additional_modules
|
|
602
|
+
* to discover non-JS files, which doesn't reliably resolve Text/Data imports.
|
|
603
|
+
*
|
|
604
|
+
* @internal Exported for testing.
|
|
605
|
+
*/
|
|
606
|
+
export function generatePrebuiltSourceModule(data: PrebuiltModuleData | null): string {
|
|
607
|
+
if (!data) {
|
|
608
|
+
return `// Generated by @timber-js/app/adapters/cloudflare
|
|
609
|
+
// No prebuilt artifacts — all cache.component wrappers render dynamically.
|
|
610
|
+
globalThis.__TIMBER_PREBUILT_SOURCE__ = {
|
|
611
|
+
async loadManifest() { return null },
|
|
612
|
+
async readPayload() { return null },
|
|
613
|
+
}
|
|
614
|
+
`;
|
|
615
|
+
}
|
|
236
616
|
|
|
237
|
-
|
|
238
|
-
|
|
617
|
+
const entries: string[] = [];
|
|
618
|
+
for (const { file, bytes } of data.payloads) {
|
|
619
|
+
const b64 = Buffer.from(bytes).toString('base64');
|
|
620
|
+
entries.push(` ${JSON.stringify(file)}: ${JSON.stringify(b64)}`);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
return `// Generated by @timber-js/app/adapters/cloudflare
|
|
624
|
+
// Prebuilt payload source — inlines cache.component flight payloads
|
|
625
|
+
// directly into the worker bundle (TIM-1162).
|
|
626
|
+
const _manifest = ${data.manifestJson.trim()}
|
|
627
|
+
|
|
628
|
+
function _decode(b64) {
|
|
629
|
+
const bin = atob(b64)
|
|
630
|
+
const buf = new Uint8Array(bin.length)
|
|
631
|
+
for (let i = 0; i < bin.length; i++) buf[i] = bin.charCodeAt(i)
|
|
632
|
+
return buf
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
const _payloads = {
|
|
636
|
+
${entries.join(',\n')}
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
globalThis.__TIMBER_PREBUILT_SOURCE__ = {
|
|
640
|
+
async loadManifest() { return _manifest },
|
|
641
|
+
async readPayload(file) {
|
|
642
|
+
const b64 = _payloads[file]
|
|
643
|
+
return b64 ? _decode(b64) : null
|
|
644
|
+
},
|
|
645
|
+
}
|
|
646
|
+
`;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* Generate the runtime init module that sets TIMBER_RUNTIME before the
|
|
651
|
+
* RSC entry evaluates. Imported as a side-effect module in _worker.js.
|
|
652
|
+
*
|
|
653
|
+
* @internal Exported for testing.
|
|
654
|
+
*/
|
|
655
|
+
export function generateRuntimeInitModule(): string {
|
|
656
|
+
return `// Generated by @timber-js/app/adapters/cloudflare
|
|
657
|
+
// Sets TIMBER_RUNTIME before the RSC handler evaluates (TIM-1170).
|
|
658
|
+
// Must be a separate module imported before rsc/index.js so that ESM
|
|
659
|
+
// evaluation order guarantees the env var is set when
|
|
660
|
+
// createRequestHandler() runs its auto-wire logic.
|
|
239
661
|
globalThis.process ??= { env: {} }
|
|
240
662
|
process.env.TIMBER_RUNTIME = 'cloudflare'
|
|
241
|
-
|
|
242
|
-
export default { fetch: handler }
|
|
243
663
|
`;
|
|
244
664
|
}
|
|
245
665
|
|
|
666
|
+
/** Wrangler binding sections generated from `CloudflareBindings`. */
|
|
667
|
+
export interface WranglerBindingsConfig {
|
|
668
|
+
kv_namespaces?: Array<{ binding: string; id: string }>;
|
|
669
|
+
d1_databases?: Array<{ binding: string; database_id: string }>;
|
|
670
|
+
r2_buckets?: Array<{ binding: string; bucket_name: string }>;
|
|
671
|
+
queues?: {
|
|
672
|
+
producers?: Array<{ binding: string; queue: string }>;
|
|
673
|
+
consumers?: Array<Record<string, unknown>>;
|
|
674
|
+
};
|
|
675
|
+
durable_objects?: {
|
|
676
|
+
bindings: Array<Record<string, string>>;
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/**
|
|
681
|
+
* Convert declarative `CloudflareBindings` into wrangler.jsonc binding sections.
|
|
682
|
+
*
|
|
683
|
+
* Maps:
|
|
684
|
+
* - `kv` → `kv_namespaces`
|
|
685
|
+
* - `d1` → `d1_databases`
|
|
686
|
+
* - `r2` → `r2_buckets`
|
|
687
|
+
* - `queues` → `queues` (producers + consumers)
|
|
688
|
+
* - `durableObjects` → `durable_objects`
|
|
689
|
+
*
|
|
690
|
+
* Empty arrays are omitted from the output.
|
|
691
|
+
*
|
|
692
|
+
* @internal Exported for testing.
|
|
693
|
+
*/
|
|
694
|
+
export function generateBindingsConfig(
|
|
695
|
+
bindings: CloudflareBindings | undefined
|
|
696
|
+
): WranglerBindingsConfig {
|
|
697
|
+
if (!bindings) return {};
|
|
698
|
+
|
|
699
|
+
const result: WranglerBindingsConfig = {};
|
|
700
|
+
|
|
701
|
+
// KV namespaces
|
|
702
|
+
if (bindings.kv && bindings.kv.length > 0) {
|
|
703
|
+
result.kv_namespaces = bindings.kv.map((kv) => ({
|
|
704
|
+
binding: kv.name,
|
|
705
|
+
id: kv.id ?? '',
|
|
706
|
+
}));
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
// D1 databases
|
|
710
|
+
if (bindings.d1 && bindings.d1.length > 0) {
|
|
711
|
+
result.d1_databases = bindings.d1.map((d1) => ({
|
|
712
|
+
binding: d1.name,
|
|
713
|
+
database_id: d1.database_id,
|
|
714
|
+
}));
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
// R2 buckets
|
|
718
|
+
if (bindings.r2 && bindings.r2.length > 0) {
|
|
719
|
+
result.r2_buckets = bindings.r2.map((r2) => ({
|
|
720
|
+
binding: r2.name,
|
|
721
|
+
bucket_name: r2.bucket_name,
|
|
722
|
+
}));
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// Queues (producers and/or consumers)
|
|
726
|
+
if (bindings.queues) {
|
|
727
|
+
const queues: Record<string, unknown> = {};
|
|
728
|
+
if (bindings.queues.producers && bindings.queues.producers.length > 0) {
|
|
729
|
+
queues.producers = bindings.queues.producers.map((p) => ({
|
|
730
|
+
binding: p.name,
|
|
731
|
+
queue: p.queue,
|
|
732
|
+
}));
|
|
733
|
+
}
|
|
734
|
+
if (bindings.queues.consumers && bindings.queues.consumers.length > 0) {
|
|
735
|
+
queues.consumers = bindings.queues.consumers.map((c) => {
|
|
736
|
+
const consumer: Record<string, unknown> = { queue: c.queue };
|
|
737
|
+
if (c.max_batch_size !== undefined) consumer.max_batch_size = c.max_batch_size;
|
|
738
|
+
if (c.max_retries !== undefined) consumer.max_retries = c.max_retries;
|
|
739
|
+
if (c.dead_letter_queue !== undefined) consumer.dead_letter_queue = c.dead_letter_queue;
|
|
740
|
+
return consumer;
|
|
741
|
+
});
|
|
742
|
+
}
|
|
743
|
+
if (Object.keys(queues).length > 0) {
|
|
744
|
+
result.queues = queues;
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
// Durable Objects
|
|
749
|
+
if (bindings.durableObjects && bindings.durableObjects.length > 0) {
|
|
750
|
+
result.durable_objects = {
|
|
751
|
+
bindings: bindings.durableObjects.map((dobj) => {
|
|
752
|
+
const entry: Record<string, string> = {
|
|
753
|
+
name: dobj.name,
|
|
754
|
+
class_name: dobj.class_name,
|
|
755
|
+
};
|
|
756
|
+
if (dobj.script_name) entry.script_name = dobj.script_name;
|
|
757
|
+
return entry;
|
|
758
|
+
}),
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
return result;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
/**
|
|
766
|
+
* One-level deep merge: for each key in `override`, if both the base and
|
|
767
|
+
* override values are plain objects (not arrays, not null), merge their
|
|
768
|
+
* keys with override winning on conflicts. Everything else (primitives,
|
|
769
|
+
* arrays, null) is replaced outright — matching the intuitive behavior
|
|
770
|
+
* where `kv_namespaces: [...]` replaces fully but
|
|
771
|
+
* `durable_objects: { migrations }` merges with generated `bindings`.
|
|
772
|
+
*/
|
|
773
|
+
function shallowDeepMerge(
|
|
774
|
+
base: Record<string, unknown>,
|
|
775
|
+
override: Record<string, unknown>
|
|
776
|
+
): Record<string, unknown> {
|
|
777
|
+
const result = { ...base };
|
|
778
|
+
for (const key of Object.keys(override)) {
|
|
779
|
+
const baseVal = result[key];
|
|
780
|
+
const overVal = override[key];
|
|
781
|
+
if (isPlainObject(baseVal) && isPlainObject(overVal)) {
|
|
782
|
+
result[key] = { ...baseVal, ...overVal };
|
|
783
|
+
} else {
|
|
784
|
+
result[key] = overVal;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
return result;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
/** True for `{}` literals — false for arrays, null, Date, etc. */
|
|
791
|
+
function isPlainObject(val: unknown): val is Record<string, unknown> {
|
|
792
|
+
return val !== null && typeof val === 'object' && !Array.isArray(val);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
const WRANGLER_CONFIG_FILES = ['wrangler.jsonc', 'wrangler.json'] as const;
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Read the user's wrangler config from the project root, if one exists.
|
|
799
|
+
* Checks wrangler.jsonc first, then wrangler.json.
|
|
800
|
+
* @internal Exported for testing.
|
|
801
|
+
*/
|
|
802
|
+
export async function readUserWranglerConfig(
|
|
803
|
+
root: string
|
|
804
|
+
): Promise<Record<string, unknown> | null> {
|
|
805
|
+
for (const filename of WRANGLER_CONFIG_FILES) {
|
|
806
|
+
const filepath = join(root, filename);
|
|
807
|
+
try {
|
|
808
|
+
await access(filepath);
|
|
809
|
+
} catch {
|
|
810
|
+
continue;
|
|
811
|
+
}
|
|
812
|
+
const content = await readFile(filepath, 'utf-8');
|
|
813
|
+
return parseJsonc(content) as Record<string, unknown>;
|
|
814
|
+
}
|
|
815
|
+
return null;
|
|
816
|
+
}
|
|
817
|
+
|
|
246
818
|
/** @internal Exported for testing. */
|
|
247
819
|
export function generateWranglerConfig(
|
|
248
820
|
config: TimberConfig,
|
|
249
|
-
options: CloudflareAdapterOptions
|
|
821
|
+
options: CloudflareAdapterOptions,
|
|
822
|
+
userConfig?: Record<string, unknown> | null
|
|
250
823
|
): Record<string, unknown> {
|
|
251
|
-
const compatDate = options.compatibilityDate ?? new Date().toISOString().slice(0, 10);
|
|
252
|
-
|
|
253
|
-
const flags = options.compatibilityFlags ?? ['nodejs_compat'];
|
|
254
|
-
|
|
255
824
|
const base: Record<string, unknown> = {
|
|
256
825
|
name: 'timber-app',
|
|
257
826
|
main: '_worker.js',
|
|
258
|
-
compatibility_date:
|
|
259
|
-
compatibility_flags:
|
|
260
|
-
// The build output is already fully bundled by Vite — skip wrangler's
|
|
261
|
-
// esbuild pass to avoid issues with top-level await and module format.
|
|
827
|
+
compatibility_date: new Date().toISOString().slice(0, 10),
|
|
828
|
+
compatibility_flags: ['nodejs_compat'],
|
|
262
829
|
no_bundle: true,
|
|
263
830
|
find_additional_modules: true,
|
|
264
831
|
rules: [{ type: 'ESModule', globs: ['**/*.js'] }],
|
|
265
832
|
assets: {
|
|
266
833
|
directory: './static',
|
|
834
|
+
binding: 'ASSETS',
|
|
835
|
+
},
|
|
836
|
+
observability: {
|
|
837
|
+
traces: { enabled: true },
|
|
267
838
|
},
|
|
268
839
|
};
|
|
269
840
|
|
|
270
|
-
//
|
|
841
|
+
// Layer 1: user's wrangler.jsonc / wrangler.json from disk
|
|
842
|
+
let merged: Record<string, unknown> = userConfig ? shallowDeepMerge(base, userConfig) : base;
|
|
843
|
+
|
|
844
|
+
// Layer 2: explicit adapter options override disk config
|
|
845
|
+
const explicit: Record<string, unknown> = {};
|
|
846
|
+
if (options.name != null) explicit.name = options.name;
|
|
847
|
+
if (options.compatibilityDate != null) explicit.compatibility_date = options.compatibilityDate;
|
|
848
|
+
if (options.compatibilityFlags != null) explicit.compatibility_flags = options.compatibilityFlags;
|
|
849
|
+
if (Object.keys(explicit).length > 0) {
|
|
850
|
+
merged = { ...merged, ...explicit };
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
// Layer 3: declarative bindings
|
|
854
|
+
const bindingsConfig = generateBindingsConfig(options.bindings);
|
|
855
|
+
merged = shallowDeepMerge(merged, bindingsConfig as Record<string, unknown>);
|
|
856
|
+
|
|
857
|
+
// Layer 4: wrangler escape hatch — highest priority, deep merge.
|
|
271
858
|
if (options.wrangler) {
|
|
272
|
-
|
|
859
|
+
merged = shallowDeepMerge(merged, options.wrangler);
|
|
273
860
|
}
|
|
274
861
|
|
|
275
|
-
|
|
862
|
+
// Generated config targets a single environment — env blocks can override
|
|
863
|
+
// main/assets per-environment and break the build output.
|
|
864
|
+
delete merged.env;
|
|
865
|
+
|
|
866
|
+
// These fields are required for the build output to work correctly.
|
|
867
|
+
merged.main = '_worker.js';
|
|
868
|
+
merged.find_additional_modules = true;
|
|
869
|
+
|
|
870
|
+
return merged;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
// ─── Static output ──────────────────────────────────────────────────────────
|
|
874
|
+
|
|
875
|
+
/**
|
|
876
|
+
* Build a Cloudflare Pages-compatible static output directory.
|
|
877
|
+
*
|
|
878
|
+
* No Workers entry — just pre-rendered HTML, RSC flight files, and client
|
|
879
|
+
* assets in a flat directory. Uses the shared buildStaticDirectoryOutput
|
|
880
|
+
* then adds a `_headers` file for cache control.
|
|
881
|
+
*
|
|
882
|
+
* @internal Exported for testing.
|
|
883
|
+
*/
|
|
884
|
+
export async function buildStaticOutput(
|
|
885
|
+
config: TimberConfig,
|
|
886
|
+
buildDir: string,
|
|
887
|
+
outDir: string,
|
|
888
|
+
_options: CloudflareAdapterOptions
|
|
889
|
+
): Promise<void> {
|
|
890
|
+
// Cloudflare Pages serves from the outDir root directly (no subdirectory).
|
|
891
|
+
// Use '.' as publicDirName so files land at outDir/ not outDir/static/.
|
|
892
|
+
await buildStaticDirectoryOutput(config, buildDir, outDir, '.');
|
|
893
|
+
|
|
894
|
+
// Write _headers file for cache control + content-type rules.
|
|
895
|
+
await writeHeadersFile(outDir, config, await findUnhashedStaticFiles(outDir));
|
|
276
896
|
}
|
|
277
897
|
|
|
278
898
|
// ─── Preview ─────────────────────────────────────────────────────────────────
|
|
@@ -310,16 +930,13 @@ function spawnPreviewProcess(command: string, args: string[], cwd: string): Prom
|
|
|
310
930
|
}
|
|
311
931
|
|
|
312
932
|
// ─── Cloudflare Workers type stubs ───────────────────────────────────────────
|
|
313
|
-
//
|
|
314
|
-
//
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
interface ExportedHandler<Env = Record<string, unknown>> {
|
|
323
|
-
fetch?(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> | Response;
|
|
324
|
-
}
|
|
933
|
+
// Local type declarations so this file compiles without @cloudflare/workers-types.
|
|
934
|
+
// These are NOT declared globally — that would clash with @cloudflare/workers-types
|
|
935
|
+
// when users install it. Instead, they're module-scoped and used only within
|
|
936
|
+
// this file's function signatures.
|
|
937
|
+
|
|
938
|
+
/** @internal Minimal stub — use @cloudflare/workers-types for full types. */
|
|
939
|
+
export interface CfExecutionContext {
|
|
940
|
+
waitUntil(promise: Promise<unknown>): void;
|
|
941
|
+
passThroughOnException(): void;
|
|
325
942
|
}
|