@timber-js/app 0.2.0-alpha.192 → 0.2.0-alpha.194
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/agent-skill.md +2 -0
- package/dist/_chunks/{actions-BjbbNRFN.js → actions-CWYtq6ii.js} +3 -3
- package/dist/_chunks/actions-CWYtq6ii.js.map +1 -0
- package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -1
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -1
- package/dist/_chunks/{build-output-helper-C3DrfzZR.js → build-output-helper-9dqCv1pZ.js} +3 -2
- package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +1 -0
- package/dist/_chunks/{cache-api-DllJ-Lyw.js → cache-api-CQeYzA5g.js} +6 -8
- package/dist/_chunks/cache-api-CQeYzA5g.js.map +1 -0
- package/dist/_chunks/chains-h7EO-u3n.js +412 -0
- package/dist/_chunks/chains-h7EO-u3n.js.map +1 -0
- package/dist/_chunks/{cli-check-DJZDc22E.js → cli-check-BVthpfLS.js} +43 -6
- package/dist/_chunks/cli-check-BVthpfLS.js.map +1 -0
- package/dist/_chunks/{cli-schema-sync-D4_AZVUb.js → cli-schema-sync-ZwM9u_ob.js} +6 -5
- package/dist/_chunks/{cli-schema-sync-D4_AZVUb.js.map → cli-schema-sync-ZwM9u_ob.js.map} +1 -1
- package/dist/_chunks/{cloudflare-CGP6BZKO.js → cloudflare-BKJC3SC_.js} +28 -22
- package/dist/_chunks/{cloudflare-CGP6BZKO.js.map → cloudflare-BKJC3SC_.js.map} +1 -1
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -1
- package/dist/_chunks/{convention-lint-CpteIpTm.js → convention-lint-DO10_pVl.js} +93 -7
- package/dist/_chunks/convention-lint-DO10_pVl.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-D-ODYX41.js.map +1 -1
- package/dist/_chunks/{file-cache-DmX7OqZP.js → file-cache-Dw6BJPG7.js} +5 -1
- package/dist/_chunks/{file-cache-DmX7OqZP.js.map → file-cache-Dw6BJPG7.js.map} +1 -1
- package/dist/_chunks/{format-CfwjgPz9.js → format-BKclgVbk.js} +3 -3
- package/dist/_chunks/{format-CfwjgPz9.js.map → format-BKclgVbk.js.map} +1 -1
- package/dist/_chunks/graph-cache-CP4GEmf9.js +304 -0
- package/dist/_chunks/graph-cache-CP4GEmf9.js.map +1 -0
- package/dist/_chunks/href-validation-CMc5JRls.js.map +1 -1
- package/dist/_chunks/live-graph-Bx4HodF1.js +150 -0
- package/dist/_chunks/live-graph-Bx4HodF1.js.map +1 -0
- package/dist/_chunks/{logger-CH7IcMmg.js → logger-pumCm3Il.js} +25 -7
- package/dist/_chunks/{logger-CH7IcMmg.js.map → logger-pumCm3Il.js.map} +1 -1
- package/dist/_chunks/{mdx-file-C005ay-P.js → mdx-file-CXyHGUpS.js} +3 -3
- package/dist/_chunks/mdx-file-CXyHGUpS.js.map +1 -0
- package/dist/_chunks/{plugin-context-rCinWLiE.js → plugin-context-8idfR3UZ.js} +2 -2
- 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-BAxfTT5L.js +101 -0
- package/dist/_chunks/poison-scan-BAxfTT5L.js.map +1 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -1
- package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/_chunks/router-ref-DuYuV_0Q.js.map +1 -1
- package/dist/_chunks/{rsc-media-type-DRqE_lD_.js → rsc-media-type-DDc7duTD.js} +17 -2
- package/dist/_chunks/{rsc-media-type-DRqE_lD_.js.map → rsc-media-type-DDc7duTD.js.map} +1 -1
- package/dist/_chunks/scan-BoP17W3w.js +140 -0
- package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
- package/dist/_chunks/{scanner-CAietmj4.js → scanner-BRIOmHE2.js} +43 -4
- package/dist/_chunks/scanner-BRIOmHE2.js.map +1 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -1
- package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -1
- package/dist/_chunks/{segment-keys-BawYuNFO.js → segment-keys-BhqoHiLc.js} +14 -2
- package/dist/_chunks/{segment-keys-BawYuNFO.js.map → segment-keys-BhqoHiLc.js.map} +1 -1
- package/dist/_chunks/slot-params-BCTmZkQB.js.map +1 -1
- package/dist/_chunks/ssr-data-14MXm7Pj.js.map +1 -1
- package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -1
- package/dist/_chunks/use-segment-params-C4r4BD9T.js.map +1 -1
- package/dist/_chunks/{walkers-BsVLmD1S.js → walkers-uCu3WW6_.js} +9 -6
- package/dist/_chunks/{walkers-BsVLmD1S.js.map → walkers-uCu3WW6_.js.map} +1 -1
- package/dist/adapters/build-output-helper.d.ts +1 -1
- package/dist/adapters/build-output-helper.d.ts.map +1 -1
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -1
- package/dist/adapters/cloudflare-dev.js +2 -1
- package/dist/adapters/cloudflare-dev.js.map +1 -1
- package/dist/adapters/cloudflare-kv-cache.d.ts +1 -1
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -1
- package/dist/adapters/cloudflare-kv-cache.js +7 -8
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -1
- package/dist/adapters/cloudflare.d.ts +1 -1
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +1 -1
- 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 +28 -51
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +224 -171
- package/dist/adapters/nitro.js.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 +2 -2
- package/dist/cache/cache-api.d.ts.map +1 -1
- package/dist/cache/index.d.ts +8 -8
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +1 -1
- package/dist/cache/redis-handler.d.ts +1 -1
- package/dist/cache/redis-handler.d.ts.map +1 -1
- package/dist/cache/stores/cloudflare-kv.d.ts +1 -1
- package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -1
- package/dist/cache/stores/cloudflare-kv.js.map +1 -1
- package/dist/cache/stores/memory.d.ts +1 -1
- package/dist/cache/stores/memory.d.ts.map +1 -1
- package/dist/cache/stores/memory.js.map +1 -1
- package/dist/cache/stores/redis.d.ts +1 -1
- package/dist/cache/stores/redis.d.ts.map +1 -1
- package/dist/cache/stores/redis.js.map +1 -1
- package/dist/cache/stores/vercel.d.ts +1 -1
- package/dist/cache/stores/vercel.d.ts.map +1 -1
- package/dist/cache/stores/vercel.js.map +1 -1
- package/dist/cache/tag-aware-handler.d.ts +2 -2
- package/dist/cache/tag-aware-handler.d.ts.map +1 -1
- package/dist/cache/timber-cache.d.ts +1 -1
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cdn/cloudflare-purge.d.ts +1 -1
- package/dist/cdn/cloudflare-purge.d.ts.map +1 -1
- package/dist/cdn/cloudflare-purge.js.map +1 -1
- package/dist/cdn/fastly-purge.d.ts +1 -1
- package/dist/cdn/fastly-purge.d.ts.map +1 -1
- package/dist/cdn/fastly-purge.js.map +1 -1
- package/dist/cdn/index.d.ts +4 -4
- package/dist/cdn/index.d.ts.map +1 -1
- package/dist/cdn/workers-cache-purge.d.ts +5 -1
- package/dist/cdn/workers-cache-purge.d.ts.map +1 -1
- package/dist/cdn/workers-cache-purge.js.map +1 -1
- package/dist/cli-check.d.ts +10 -0
- package/dist/cli-check.d.ts.map +1 -1
- package/dist/cli.d.ts +12 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +30 -6
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-entry/hydrate.d.ts +2 -2
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -1
- package/dist/client/browser-entry/post-hydration.d.ts +2 -2
- package/dist/client/browser-entry/router-init.d.ts +2 -2
- package/dist/client/browser-entry/rsc-stream.d.ts +1 -1
- package/dist/client/form.d.ts +2 -2
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/history.d.ts +2 -2
- package/dist/client/index.d.ts +18 -18
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +19 -19
- package/dist/client/internal.d.ts.map +1 -1
- package/dist/client/internal.js +11 -15
- package/dist/client/internal.js.map +1 -1
- package/dist/client/link.d.ts +3 -3
- package/dist/client/navigation-commit.d.ts +5 -5
- package/dist/client/navigation-root.d.ts +1 -1
- package/dist/client/navigation-root.d.ts.map +1 -1
- package/dist/client/params-context.d.ts +3 -3
- package/dist/client/router-pipeline.d.ts +7 -7
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/router-types.d.ts +6 -6
- package/dist/client/router-types.d.ts.map +1 -1
- package/dist/client/router.d.ts +1 -1
- package/dist/client/rsc-fetch.d.ts +4 -4
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +2 -2
- package/dist/client/slot-provider.d.ts +1 -1
- package/dist/client/ssr-data.d.ts +2 -2
- package/dist/client/state.d.ts +4 -4
- package/dist/client/use-query-states.d.ts +1 -1
- package/dist/client/use-segment-params.d.ts +3 -3
- package/dist/codec.d.ts +2 -2
- package/dist/codec.js.map +1 -1
- package/dist/config-validation.d.ts +1 -1
- package/dist/cookies/define-cookie.d.ts +3 -3
- package/dist/cookies/index.d.ts +3 -3
- package/dist/cookies/index.js +3 -4
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +1 -1
- package/dist/dev-tools/404-page.d.ts +2 -2
- package/dist/dev-tools/error-page.d.ts +2 -2
- package/dist/dev-tools/index.d.ts +12 -12
- package/dist/dev-tools/instrumentation.d.ts +1 -1
- package/dist/dev-tools/logs.d.ts +1 -1
- package/dist/dev-tools/overlay.d.ts +2 -2
- package/dist/dev-tools/terminal.d.ts +1 -1
- package/dist/fonts/ast.d.ts +4 -4
- package/dist/fonts/bundle.d.ts +3 -3
- package/dist/fonts/css.d.ts +1 -1
- package/dist/fonts/dev-middleware.d.ts +1 -1
- package/dist/fonts/google.d.ts +1 -1
- package/dist/fonts/local.d.ts +1 -1
- package/dist/fonts/pipeline.d.ts +3 -3
- package/dist/fonts/transform.d.ts +2 -2
- package/dist/fonts/types.d.ts +1 -1
- package/dist/fonts/virtual-modules.d.ts +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +785 -282
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +1 -1
- package/dist/params/define-schema.d.ts +2 -2
- package/dist/params/index.d.ts +4 -4
- package/dist/params/index.js.map +1 -1
- package/dist/params/resolve-schema.d.ts +1 -1
- package/dist/plugin-context.d.ts +9 -9
- package/dist/plugin-context.d.ts.map +1 -1
- package/dist/plugins/adapter-build.d.ts +2 -2
- package/dist/plugins/build-manifest.d.ts +2 -2
- package/dist/plugins/build-report.d.ts +5 -5
- package/dist/plugins/cache.d.ts +1 -1
- package/dist/plugins/callsite-jsx.d.ts +2 -2
- package/dist/plugins/chunks.d.ts +1 -1
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/cloudflare-wasm.d.ts +1 -1
- 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 +1 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +1 -1
- package/dist/plugins/fonts.d.ts +3 -3
- 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 +1 -1
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/prebuilt-capture.d.ts +2 -2
- package/dist/plugins/prebuilt-options-analysis.d.ts +1 -1
- package/dist/plugins/prebuilt.d.ts +1 -1
- package/dist/plugins/prerender-sugar.d.ts +11 -14
- package/dist/plugins/prerender-sugar.d.ts.map +1 -1
- package/dist/plugins/request-dep/analysis.d.ts +1 -1
- package/dist/plugins/request-dep/index.d.ts +5 -5
- package/dist/plugins/request-dep/origin.d.ts +1 -1
- 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 +1 -1
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +5 -5
- package/dist/routing/codegen-shared.d.ts +1 -1
- package/dist/routing/codegen-write.d.ts +1 -1
- package/dist/routing/codegen.d.ts +1 -1
- package/dist/routing/collision-probe.d.ts +1 -1
- package/dist/routing/collision-spaces.d.ts +1 -1
- package/dist/routing/convention-lint.d.ts +1 -1
- package/dist/routing/convention-lint.d.ts.map +1 -1
- package/dist/routing/index.d.ts +13 -13
- package/dist/routing/index.js +3 -3
- package/dist/routing/interception.d.ts +1 -1
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +1 -1
- package/dist/routing/manifest-codegen.d.ts +1 -1
- package/dist/routing/scanner.d.ts +14 -1
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/schema-validation.d.ts +1 -1
- package/dist/routing/segment-classify.d.ts +1 -1
- package/dist/routing/segment-codegen.d.ts +1 -1
- package/dist/routing/segment-keys.d.ts +1 -1
- package/dist/routing/slot-placement.d.ts +1 -1
- package/dist/routing/walkers.d.ts +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 +1 -1
- package/dist/search-params/define.d.ts +3 -3
- package/dist/search-params/index.d.ts +3 -3
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/wrappers.d.ts +1 -1
- package/dist/server/access-gate.d.ts +1 -1
- package/dist/server/action-client.d.ts +1 -1
- package/dist/server/action-handler.d.ts +5 -5
- package/dist/server/actions.d.ts +2 -2
- package/dist/server/als-registry.d.ts +8 -8
- package/dist/server/asset-headers.d.ts +1 -1
- package/dist/server/chain-url-parts.d.ts +3 -3
- package/dist/server/children-interception.d.ts +2 -2
- package/dist/server/cookie-context.d.ts +1 -1
- package/dist/server/cookie-parsing.d.ts +2 -2
- package/dist/server/default-logger.d.ts +1 -1
- package/dist/server/deny-boundary.d.ts +2 -2
- package/dist/server/deny-renderer.d.ts +5 -5
- package/dist/server/early-hints.d.ts +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +2 -4
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/fallback-error.d.ts +5 -5
- package/dist/server/flight-injection-state.d.ts +1 -1
- package/dist/server/form-flash.d.ts +1 -1
- package/dist/server/html-injector-core.d.ts +2 -2
- package/dist/server/html-injectors.d.ts +1 -1
- package/dist/server/index.d.ts +18 -18
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +33 -32
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +1 -1
- package/dist/server/internal.d.ts +50 -50
- package/dist/server/internal.d.ts.map +1 -1
- package/dist/server/internal.js +1023 -1025
- package/dist/server/internal.js.map +1 -1
- package/dist/server/metadata-collector.d.ts +2 -2
- package/dist/server/metadata-platform.d.ts +2 -2
- package/dist/server/metadata-render.d.ts +2 -2
- package/dist/server/metadata-routes.d.ts +3 -3
- package/dist/server/metadata-social.d.ts +2 -2
- package/dist/server/metadata.d.ts +2 -2
- package/dist/server/middleware-runner.d.ts +1 -1
- package/dist/server/node-stream-transforms.d.ts +1 -1
- package/dist/server/param-coercion.d.ts +4 -4
- package/dist/server/pipeline-helpers.d.ts +3 -3
- package/dist/server/pipeline-interception.d.ts +1 -1
- package/dist/server/pipeline-metadata.d.ts +1 -1
- package/dist/server/pipeline-outcome.d.ts +2 -2
- package/dist/server/pipeline-phases.d.ts +3 -3
- package/dist/server/pipeline-phases.d.ts.map +1 -1
- package/dist/server/pipeline.d.ts +9 -9
- package/dist/server/prebuilt/cache-key.d.ts +1 -1
- package/dist/server/prebuilt/capture-state.d.ts +1 -1
- package/dist/server/prebuilt/key-discipline.d.ts +1 -1
- package/dist/server/prebuilt/manifest-tag-index.d.ts +1 -1
- package/dist/server/prebuilt/overlay.d.ts +2 -2
- package/dist/server/prebuilt/payload-source.d.ts +1 -1
- package/dist/server/prebuilt/slots.d.ts +1 -1
- package/dist/server/prebuilt/synthetic-store.d.ts +2 -2
- package/dist/server/prebuilt-builder.d.ts +2 -2
- package/dist/server/primitives.d.ts +2 -2
- package/dist/server/publish-params.d.ts +1 -1
- package/dist/server/request-context.d.ts +3 -3
- package/dist/server/route-element-builder.d.ts +16 -6
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-handler.d.ts +1 -1
- package/dist/server/route-matcher.d.ts +4 -4
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -1
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +2 -2
- package/dist/server/rsc-entry/api-handler.d.ts +1 -1
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +3 -3
- package/dist/server/rsc-entry/error-renderer.d.ts +4 -4
- package/dist/server/rsc-entry/helpers.d.ts +6 -6
- package/dist/server/rsc-entry/index.d.ts +7 -6
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +4 -4
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +4 -4
- package/dist/server/rsc-entry/rsc-payload.d.ts +4 -4
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +3 -3
- package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +7 -7
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +5 -5
- package/dist/server/sitemap-generator.d.ts +2 -2
- package/dist/server/sitemap-handler.d.ts +1 -1
- package/dist/server/skippable-prefix.d.ts +3 -3
- package/dist/server/slot-interception.d.ts +2 -2
- package/dist/server/slot-resolver.d.ts +3 -7
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-bridge-types.d.ts +2 -2
- package/dist/server/ssr-entry.d.ts +1 -1
- package/dist/server/static-generator.d.ts +1 -1
- package/dist/server/static-not-found.d.ts +1 -1
- package/dist/server/status-code-resolver.d.ts +1 -1
- package/dist/server/tracing.d.ts +3 -3
- package/dist/server/tree-builder.d.ts +3 -3
- package/dist/server/tree-match.d.ts +1 -1
- package/dist/server/types.d.ts +2 -2
- package/dist/server/utils/mdx-file.d.ts +2 -0
- package/dist/server/utils/mdx-file.d.ts.map +1 -1
- package/dist/server/workers-cache-bridge.d.ts +1 -1
- package/dist/shared/als-slots.d.ts +1 -1
- package/dist/shared/payload-root.d.ts +2 -2
- package/dist/shared/rsc-media-type.d.ts +12 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -1
- package/dist/shared/slot-params.d.ts +1 -1
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.js.map +1 -1
- package/dist/shims/font-local.d.ts +1 -1
- package/dist/shims/font-local.js.map +1 -1
- package/dist/shims/navigation-client.d.ts +4 -4
- package/dist/shims/navigation.d.ts +2 -2
- package/docs/api/36-cli.mdx +23 -3
- package/docs/learn/11-error-handling.mdx +11 -0
- package/docs/more/01-advanced-routing.mdx +1 -0
- package/package.json +17 -16
- package/src/adapters/build-output-helper.ts +4 -4
- package/src/adapters/cloudflare-dev.ts +7 -1
- package/src/adapters/cloudflare-kv-cache.ts +11 -8
- package/src/adapters/cloudflare.ts +21 -15
- package/src/adapters/compress-module.ts +2 -2
- package/src/adapters/nitro-presets.ts +139 -0
- package/src/adapters/nitro-preview.ts +340 -0
- package/src/adapters/nitro.ts +100 -465
- package/src/adapters/shared.ts +1 -1
- 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 +7 -7
- package/src/cache/index.ts +9 -9
- package/src/cache/redis-handler.ts +2 -2
- package/src/cache/stores/cloudflare-kv.ts +1 -1
- package/src/cache/stores/memory.ts +2 -2
- package/src/cache/stores/redis.ts +1 -1
- package/src/cache/stores/vercel.ts +1 -1
- package/src/cache/tag-aware-handler.ts +2 -2
- package/src/cache/timber-cache.ts +8 -8
- package/src/cdn/cloudflare-purge.ts +1 -1
- package/src/cdn/fastly-purge.ts +1 -1
- package/src/cdn/index.ts +10 -4
- package/src/cdn/workers-cache-purge.ts +6 -2
- package/src/cli-check.ts +53 -4
- package/src/cli-schema-sync.ts +3 -3
- package/src/cli.ts +50 -11
- package/src/client/browser-dev.ts +1 -1
- package/src/client/browser-entry/action-dispatch.ts +5 -5
- package/src/client/browser-entry/hmr.ts +1 -1
- package/src/client/browser-entry/hydrate.ts +9 -9
- package/src/client/browser-entry/index.ts +10 -10
- package/src/client/browser-entry/post-hydration.ts +5 -5
- package/src/client/browser-entry/router-init.ts +9 -9
- package/src/client/browser-entry/rsc-stream.ts +3 -3
- package/src/client/error-boundary.tsx +4 -4
- package/src/client/form.tsx +7 -2
- package/src/client/history.ts +2 -2
- package/src/client/index.ts +21 -18
- package/src/client/internal.ts +19 -19
- package/src/client/link.tsx +9 -9
- package/src/client/navigation-api.ts +1 -1
- package/src/client/navigation-commit.ts +5 -5
- package/src/client/navigation-context.ts +1 -1
- package/src/client/navigation-root.tsx +1 -1
- package/src/client/nuqs-adapter.tsx +2 -2
- package/src/client/params-context.ts +4 -4
- package/src/client/router-effects.ts +3 -3
- package/src/client/router-lifecycle.ts +2 -2
- package/src/client/router-pipeline.ts +10 -10
- package/src/client/router-ref.ts +2 -2
- package/src/client/router-skew.ts +2 -2
- package/src/client/router-types.ts +6 -6
- package/src/client/router.ts +13 -13
- package/src/client/rsc-fetch.ts +11 -16
- package/src/client/segment-cache.ts +2 -2
- package/src/client/segment-outlet.tsx +1 -1
- package/src/client/shallow-url.ts +1 -1
- package/src/client/slot-outlet.tsx +1 -1
- package/src/client/slot-provider.tsx +1 -1
- package/src/client/ssr-data.ts +3 -3
- package/src/client/stale-client.ts +1 -1
- package/src/client/state.ts +4 -4
- package/src/client/top-loader.tsx +1 -1
- package/src/client/unload-guard.ts +1 -1
- package/src/client/use-cookie.ts +2 -2
- package/src/client/use-pathname.ts +2 -2
- package/src/client/use-pending-navigation.ts +1 -1
- package/src/client/use-query-states.ts +3 -3
- package/src/client/use-router.ts +2 -2
- package/src/client/use-search-params.ts +3 -3
- package/src/client/use-segment-params.ts +6 -6
- package/src/client/use-selected-layout-segment.ts +2 -2
- package/src/codec.ts +2 -2
- package/src/config-validation.ts +1 -1
- package/src/cookies/define-cookie.ts +6 -6
- package/src/cookies/index.ts +3 -3
- package/src/cookies/json-cookie.ts +1 -1
- package/src/dev-tools/404-page.ts +4 -4
- package/src/dev-tools/dev-page-shell.ts +1 -1
- package/src/dev-tools/error-page.ts +4 -4
- package/src/dev-tools/index.ts +12 -12
- package/src/dev-tools/instrumentation.ts +1 -1
- package/src/dev-tools/logs.ts +1 -1
- package/src/dev-tools/overlay.ts +3 -3
- package/src/dev-tools/terminal.ts +2 -2
- package/src/fonts/ast.ts +5 -5
- package/src/fonts/bundle.ts +5 -5
- package/src/fonts/css.ts +1 -1
- package/src/fonts/dev-middleware.ts +2 -2
- package/src/fonts/google.ts +2 -2
- package/src/fonts/local.ts +4 -4
- package/src/fonts/pipeline.ts +8 -8
- package/src/fonts/transform.ts +5 -5
- package/src/fonts/types.ts +1 -1
- package/src/fonts/virtual-modules.ts +1 -1
- package/src/index.ts +46 -37
- package/src/params/codec-registry.ts +1 -1
- package/src/params/define-schema.ts +2 -2
- package/src/params/index.ts +4 -4
- package/src/params/resolve-schema.ts +2 -2
- package/src/plugin-context.ts +10 -10
- package/src/plugins/adapter-build.ts +5 -5
- package/src/plugins/build-manifest.ts +4 -4
- package/src/plugins/build-report.ts +6 -6
- package/src/plugins/cache.ts +3 -3
- package/src/plugins/callsite-ast.ts +1 -1
- package/src/plugins/callsite-jsx.ts +2 -2
- package/src/plugins/chunks.ts +1 -1
- package/src/plugins/cloudflare-wasm.ts +1 -1
- package/src/plugins/content.ts +5 -1
- package/src/plugins/dev-discovery.ts +218 -0
- package/src/plugins/dev-server.ts +97 -12
- package/src/plugins/entries.ts +1 -1
- package/src/plugins/fonts.ts +17 -10
- package/src/plugins/graph-endpoint.ts +532 -0
- package/src/plugins/mdx.ts +4 -3
- package/src/plugins/prebuilt-capture.ts +3 -3
- package/src/plugins/prebuilt-options-analysis.ts +1 -1
- package/src/plugins/prebuilt.ts +7 -7
- package/src/plugins/prerender-sugar.ts +11 -19
- package/src/plugins/request-dep/analysis.ts +1 -1
- package/src/plugins/request-dep/index.ts +8 -8
- package/src/plugins/request-dep/origin.ts +1 -1
- package/src/plugins/routing.ts +12 -7
- package/src/plugins/server-bundle.ts +9 -2
- package/src/plugins/shims.ts +16 -31
- package/src/plugins/static-build.ts +10 -10
- package/src/routing/codegen-shared.ts +1 -1
- package/src/routing/codegen-write.ts +3 -3
- package/src/routing/codegen.ts +14 -5
- package/src/routing/collision-probe.ts +3 -3
- package/src/routing/collision-spaces.ts +3 -3
- package/src/routing/convention-lint.ts +136 -6
- package/src/routing/export-detect.ts +1 -1
- package/src/routing/index.ts +13 -13
- package/src/routing/interception.ts +41 -4
- package/src/routing/link-codegen.ts +3 -3
- package/src/routing/manifest-codegen.ts +2 -2
- package/src/routing/scanner.ts +33 -9
- package/src/routing/schema-validation.ts +4 -4
- package/src/routing/segment-classify.ts +2 -2
- package/src/routing/segment-codegen.ts +1 -1
- package/src/routing/segment-keys.ts +1 -1
- package/src/routing/slot-placement.ts +1 -1
- package/src/routing/walkers.ts +1 -1
- package/src/rsc-runtime/transforms.ts +13 -0
- package/src/rsc-runtime/vendor-types.d.ts +12 -0
- package/src/schema-bridge.ts +1 -1
- package/src/search-params/define.ts +8 -8
- package/src/search-params/index.ts +3 -3
- package/src/search-params/wrappers.ts +3 -3
- package/src/server/access-gate.tsx +6 -6
- package/src/server/action-client.ts +5 -5
- package/src/server/action-handler.ts +16 -16
- package/src/server/actions.ts +5 -5
- package/src/server/als-registry.ts +8 -8
- package/src/server/asset-headers.ts +2 -2
- package/src/server/chain-url-parts.ts +5 -5
- package/src/server/children-interception.ts +4 -4
- package/src/server/compress.ts +1 -1
- package/src/server/cookie-context.ts +4 -4
- package/src/server/cookie-parsing.ts +2 -2
- package/src/server/default-logger.ts +3 -3
- package/src/server/deny-boundary.ts +10 -10
- package/src/server/deny-renderer.ts +38 -25
- package/src/server/early-hints-sender.ts +2 -2
- package/src/server/early-hints.ts +2 -2
- package/src/server/error-boundary-wrapper.ts +4 -12
- package/src/server/fallback-error.ts +13 -13
- package/src/server/flight-injection-state.ts +1 -1
- package/src/server/form-flash.ts +2 -2
- package/src/server/html-injector-core.ts +4 -4
- package/src/server/html-injectors.ts +5 -5
- package/src/server/index.ts +18 -18
- package/src/server/instrumentation.ts +1 -1
- package/src/server/internal.ts +50 -50
- package/src/server/logger.ts +4 -4
- package/src/server/metadata-collector.ts +7 -7
- package/src/server/metadata-platform.ts +2 -2
- package/src/server/metadata-render.ts +4 -4
- package/src/server/metadata-routes.ts +3 -3
- package/src/server/metadata-social.ts +2 -2
- package/src/server/metadata.ts +2 -2
- package/src/server/middleware-runner.ts +1 -1
- package/src/server/node-stream-transforms.ts +4 -4
- package/src/server/param-coercion.ts +8 -8
- package/src/server/pipeline-helpers.ts +7 -7
- package/src/server/pipeline-interception.ts +2 -2
- package/src/server/pipeline-metadata.ts +1 -1
- package/src/server/pipeline-outcome.ts +8 -8
- package/src/server/pipeline-phases.ts +24 -28
- package/src/server/pipeline.ts +22 -22
- package/src/server/prebuilt/cache-key.ts +1 -1
- package/src/server/prebuilt/capture-state.ts +1 -1
- package/src/server/prebuilt/key-discipline.ts +1 -1
- package/src/server/prebuilt/manifest-tag-index.ts +1 -1
- package/src/server/prebuilt/overlay.ts +6 -6
- package/src/server/prebuilt/payload-source.ts +2 -2
- package/src/server/prebuilt/slots.ts +5 -5
- package/src/server/prebuilt/synthetic-store.ts +2 -2
- package/src/server/prebuilt-builder.ts +16 -16
- package/src/server/prebuilt-runtime.ts +12 -12
- package/src/server/primitives.ts +7 -7
- package/src/server/publish-params.ts +3 -3
- package/src/server/request-context.ts +7 -7
- package/src/server/route-element-builder.ts +108 -50
- package/src/server/route-handler.ts +4 -4
- package/src/server/route-matcher.ts +5 -5
- package/src/server/rsc-cache-key-guard.ts +3 -5
- package/src/server/rsc-entry/action-middleware-runner.ts +7 -7
- package/src/server/rsc-entry/api-handler.ts +18 -9
- package/src/server/rsc-entry/deny-fallback.ts +10 -10
- package/src/server/rsc-entry/error-renderer.ts +27 -27
- package/src/server/rsc-entry/helpers.ts +10 -10
- package/src/server/rsc-entry/index.ts +51 -47
- package/src/server/rsc-entry/render-route.ts +20 -20
- package/src/server/rsc-entry/revalidate-renderer.ts +12 -12
- package/src/server/rsc-entry/rsc-payload.ts +19 -15
- package/src/server/rsc-entry/rsc-stream.ts +8 -8
- package/src/server/rsc-entry/ssr-bridge.ts +3 -3
- package/src/server/rsc-entry/ssr-renderer.ts +23 -23
- package/src/server/rsc-entry/wrap-action-dispatch.ts +9 -9
- package/src/server/rsc-prop-warnings.ts +1 -1
- package/src/server/sensitive-fields.ts +1 -1
- package/src/server/server-timing.ts +1 -1
- package/src/server/sitemap-generator.ts +3 -3
- package/src/server/sitemap-handler.ts +3 -3
- package/src/server/skippable-prefix.ts +7 -7
- package/src/server/slot-interception.ts +5 -5
- package/src/server/slot-resolver.ts +20 -28
- package/src/server/ssr-bridge-types.ts +2 -2
- package/src/server/ssr-entry.ts +18 -18
- package/src/server/ssr-render.ts +4 -4
- package/src/server/ssr-wrappers.tsx +1 -1
- package/src/server/state-tree-diff.ts +1 -1
- package/src/server/static-generator.ts +6 -6
- package/src/server/static-not-found.ts +3 -3
- package/src/server/status-code-resolver.ts +1 -1
- package/src/server/tracing.ts +5 -5
- package/src/server/tree-builder.ts +4 -4
- package/src/server/tree-match.ts +1 -1
- package/src/server/types.ts +2 -2
- package/src/server/utils/mdx-file.ts +2 -2
- package/src/server/waituntil-bridge.ts +1 -1
- package/src/server/workers-cache-bridge.ts +2 -2
- package/src/shared/als-slots.ts +1 -1
- package/src/shared/payload-root.ts +2 -2
- package/src/shared/rsc-media-type.ts +16 -0
- package/src/shared/slot-params.ts +1 -1
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +1 -1
- package/src/shims/navigation-client.ts +5 -5
- package/src/shims/navigation.ts +2 -2
- package/LICENSE +0 -8
- package/dist/_chunks/actions-BjbbNRFN.js.map +0 -1
- package/dist/_chunks/build-output-helper-C3DrfzZR.js.map +0 -1
- package/dist/_chunks/cache-api-DllJ-Lyw.js.map +0 -1
- package/dist/_chunks/cli-check-DJZDc22E.js.map +0 -1
- package/dist/_chunks/convention-lint-CpteIpTm.js.map +0 -1
- package/dist/_chunks/dist-BA3u1z3W.js +0 -423
- package/dist/_chunks/dist-BA3u1z3W.js.map +0 -1
- package/dist/_chunks/mdx-file-C005ay-P.js.map +0 -1
- package/dist/_chunks/plugin-context-rCinWLiE.js.map +0 -1
- package/dist/_chunks/scanner-CAietmj4.js.map +0 -1
- package/dist/content/index.d.ts +0 -2
- package/dist/content/index.d.ts.map +0 -1
- package/dist/content/index.js +0 -0
- package/src/content/index.ts +0 -5
- package/src/shims/server-only-noop.js +0 -6
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import { writeFile, mkdir, cp, rm, readdir, readFile } from 'node:fs/promises';
|
|
15
15
|
import { join, basename, relative } from 'node:path';
|
|
16
|
-
import { adapterBase, generateHeadersFile } from './shared.
|
|
16
|
+
import { adapterBase, generateHeadersFile } from './shared.ts';
|
|
17
17
|
// Isomorphic, zero-import module — safe to load from an adapter, which Node's
|
|
18
18
|
// native ESM loader evaluates before Vite's resolver exists. Same precedent as
|
|
19
19
|
// `adapters/shared.ts` importing `../shared/base-path.js`.
|
|
@@ -21,9 +21,9 @@ import {
|
|
|
21
21
|
HEADERS_FILE,
|
|
22
22
|
USER_MERGED_PLATFORM_FILES,
|
|
23
23
|
USER_PLATFORM_DIR,
|
|
24
|
-
} from '../shared/static-platform-files.
|
|
25
|
-
import { detectFsIdentity, fsKey } from './fs-identity.
|
|
26
|
-
import type { TimberConfig } from './types';
|
|
24
|
+
} from '../shared/static-platform-files.ts';
|
|
25
|
+
import { detectFsIdentity, fsKey } from './fs-identity.ts';
|
|
26
|
+
import type { TimberConfig } from './types.ts';
|
|
27
27
|
|
|
28
28
|
/** Options for the shared build output steps. */
|
|
29
29
|
export interface BuildOutputBaseOptions {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
32
|
import type { Plugin, ViteDevServer } from 'vite';
|
|
33
|
-
import { runWithBindings } from './cloudflare.
|
|
33
|
+
import { runWithBindings } from './cloudflare.ts';
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
36
|
* Dynamically import wrangler. Extracted as a named export so tests
|
|
@@ -140,6 +140,12 @@ export function cloudflareDevBindings(options: CloudflareDevBindingsOptions = {}
|
|
|
140
140
|
apply: 'serve',
|
|
141
141
|
|
|
142
142
|
async configureServer(server: ViteDevServer) {
|
|
143
|
+
// The analyze crawl (design/47 §6) boots a middleware-mode server
|
|
144
|
+
// only to walk import edges — it never renders a request, so the
|
|
145
|
+
// workerd boot and the wrangler remote-bindings handshake (~6.8 s
|
|
146
|
+
// measured) are pure waste there. Skip the proxy entirely.
|
|
147
|
+
if (process.env.TIMBER_ANALYZE === '1') return;
|
|
148
|
+
|
|
143
149
|
// Dynamic import — wrangler is an optional peer dependency.
|
|
144
150
|
// Users must install it themselves: `pnpm add -D wrangler`
|
|
145
151
|
const { getPlatformProxy } = await (options._loadWrangler ?? loadWrangler)();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { CacheHandler } from '../cache/index';
|
|
2
|
-
import { getCloudflareBindings } from './cloudflare';
|
|
3
|
-
import { warnLossyJsonValue } from '../cache/json-lossy-check.
|
|
1
|
+
import type { CacheHandler } from '../cache/index.ts';
|
|
2
|
+
import { getCloudflareBindings } from './cloudflare.ts';
|
|
3
|
+
import { warnLossyJsonValue } from '../cache/json-lossy-check.ts';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Cloudflare Workers KV interface — the subset of KVNamespace we depend on.
|
|
@@ -38,9 +38,9 @@ const LEGACY_GRACE_MS = 30 * 86400 * 1000;
|
|
|
38
38
|
* new format (TagIndexEntry[]). Old-format entries get a 30-day grace period
|
|
39
39
|
* so they survive until explicitly invalidated or cycled through a new set().
|
|
40
40
|
*/
|
|
41
|
-
function parseTagIndex(raw: unknown): TagIndexEntry[] {
|
|
41
|
+
function parseTagIndex(raw: unknown, now: number): TagIndexEntry[] {
|
|
42
42
|
if (!Array.isArray(raw)) return [];
|
|
43
|
-
const legacyDeadline =
|
|
43
|
+
const legacyDeadline = now + LEGACY_GRACE_MS;
|
|
44
44
|
return raw.map((item: unknown) => {
|
|
45
45
|
if (typeof item === 'string') return { key: item, expiresAt: legacyDeadline };
|
|
46
46
|
return item as TagIndexEntry;
|
|
@@ -143,7 +143,7 @@ export class CloudflareKVCacheHandler implements CacheHandler {
|
|
|
143
143
|
const kvExpiresAt = now + kvTtl * 1000;
|
|
144
144
|
await Promise.all(
|
|
145
145
|
opts.tags.map(async (tag) => {
|
|
146
|
-
const existing = parseTagIndex(await kv.get(this.tagKey(tag), { type: 'json' }));
|
|
146
|
+
const existing = parseTagIndex(await kv.get(this.tagKey(tag), { type: 'json' }), now);
|
|
147
147
|
const fresh = existing.filter((e) => e.expiresAt > now && e.key !== key);
|
|
148
148
|
fresh.push({ key, expiresAt: kvExpiresAt });
|
|
149
149
|
await kv.put(this.tagKey(tag), JSON.stringify(fresh), {
|
|
@@ -164,8 +164,8 @@ export class CloudflareKVCacheHandler implements CacheHandler {
|
|
|
164
164
|
if (raw) {
|
|
165
165
|
await Promise.all(
|
|
166
166
|
raw.tags.map(async (tag) => {
|
|
167
|
-
const entries = parseTagIndex(await kv.get(this.tagKey(tag), { type: 'json' }));
|
|
168
167
|
const now = Date.now();
|
|
168
|
+
const entries = parseTagIndex(await kv.get(this.tagKey(tag), { type: 'json' }), now);
|
|
169
169
|
const filtered = entries.filter((e) => e.key !== opts.key);
|
|
170
170
|
if (filtered.length > 0) {
|
|
171
171
|
await kv.put(this.tagKey(tag), JSON.stringify(filtered), {
|
|
@@ -181,7 +181,10 @@ export class CloudflareKVCacheHandler implements CacheHandler {
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
if (opts.tag) {
|
|
184
|
-
const entries = parseTagIndex(
|
|
184
|
+
const entries = parseTagIndex(
|
|
185
|
+
await kv.get(this.tagKey(opts.tag), { type: 'json' }),
|
|
186
|
+
Date.now()
|
|
187
|
+
);
|
|
185
188
|
if (entries.length > 0) {
|
|
186
189
|
// Re-check each member's stored tags before deleting — the tag index
|
|
187
190
|
// can contain stale references from partial writes or entries whose
|
|
@@ -8,21 +8,21 @@ import { execFile } from 'node:child_process';
|
|
|
8
8
|
import { join, relative } from 'node:path';
|
|
9
9
|
import { parse as parseJsonc } from 'jsonc-parser';
|
|
10
10
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
11
|
-
import type { TimberPlatformAdapter, TimberConfig } from './types';
|
|
11
|
+
import type { TimberPlatformAdapter, TimberConfig } from './types.ts';
|
|
12
12
|
import {
|
|
13
13
|
runSharedBuildSteps,
|
|
14
14
|
findUnhashedStaticFiles,
|
|
15
15
|
buildStaticDirectoryOutput,
|
|
16
16
|
writeHeadersFile,
|
|
17
|
-
} from './build-output-helper.
|
|
18
|
-
import { adapterBase, generateHeadersFile } from './shared.
|
|
17
|
+
} from './build-output-helper.ts';
|
|
18
|
+
import { adapterBase, generateHeadersFile } from './shared.ts';
|
|
19
19
|
// Isomorphic, zero-import module — safe to load from an adapter, which Node's
|
|
20
20
|
// native ESM loader evaluates before Vite's resolver exists. Same precedent as
|
|
21
21
|
// `adapters/shared.ts` importing `../shared/base-path.js`.
|
|
22
|
-
import { RSC_KEY_HEADERS } from '../shared/rsc-cache-key.
|
|
22
|
+
import { RSC_KEY_HEADERS } from '../shared/rsc-cache-key.ts';
|
|
23
23
|
// Same reasoning: the media type the origin's own RSC gate matches on, so the
|
|
24
24
|
// two predicates cannot drift apart. See `shared/rsc-media-type.ts`.
|
|
25
|
-
import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.
|
|
25
|
+
import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.ts';
|
|
26
26
|
|
|
27
27
|
// ─── Bindings passthrough ─────────────────────────────────────────────────
|
|
28
28
|
// ALS stores the env object per-request so server components and middleware
|
|
@@ -381,7 +381,7 @@ import { AsyncLocalStorage } from 'node:async_hooks'
|
|
|
381
381
|
// for cache.component payloads.
|
|
382
382
|
import './_timber-runtime-init.js'
|
|
383
383
|
import './_timber-prebuilt-source.js'
|
|
384
|
-
${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge } from '${rscEntryRelative}'
|
|
384
|
+
${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge, stripHeadBody } from '${rscEntryRelative}'
|
|
385
385
|
${handlersImport}
|
|
386
386
|
|
|
387
387
|
// Bind Cloudflare env to ALS so getCloudflareBindings() works at runtime.
|
|
@@ -479,12 +479,18 @@ ${handlersSpread} async fetch(request, env, ctx) {
|
|
|
479
479
|
// One-time on first request; resolved-promise await thereafter.
|
|
480
480
|
await initPlatformTracer()
|
|
481
481
|
|
|
482
|
-
// Edge-cache GET/HEAD responses via the Cache API.
|
|
483
|
-
//
|
|
484
|
-
//
|
|
485
|
-
//
|
|
486
|
-
//
|
|
487
|
-
//
|
|
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.
|
|
488
494
|
//
|
|
489
495
|
// This exclusion is load-bearing in the other direction too: the store
|
|
490
496
|
// predicate below treats "Vary: Accept" as honoured *because* of it
|
|
@@ -502,7 +508,7 @@ ${handlersSpread} async fetch(request, env, ctx) {
|
|
|
502
508
|
// see canHonorVary. Entries written before that predicate existed are
|
|
503
509
|
// exactly the ones that would be served to the wrong client.
|
|
504
510
|
if (cached) {
|
|
505
|
-
if (canHonorVary(cached.headers.get('Vary'))) return cached
|
|
511
|
+
if (canHonorVary(cached.headers.get('Vary'))) return stripHeadBody(cached, request.method)
|
|
506
512
|
// Declining the hit means nobody will ever read this body. Release
|
|
507
513
|
// it rather than leaving the stream dangling for the rest of the
|
|
508
514
|
// request (design/02-rendering-pipeline.md §"Cancel Readers When You
|
|
@@ -527,7 +533,7 @@ ${handlersSpread} async fetch(request, env, ctx) {
|
|
|
527
533
|
// it has 'public' or 's-maxage' (a shared-cache TTL directive) and no
|
|
528
534
|
// 'no-store' or 'private'. Cloudflare's cache.put() only accepts GET
|
|
529
535
|
// requests and rejects 206, so only store GET 200s. HEAD requests
|
|
530
|
-
//
|
|
536
|
+
// are served from cache.match() hits with the body stripped (TIM-1325).
|
|
531
537
|
// See design/25-production-deployments.md §"CDN / Edge Cache".
|
|
532
538
|
if (cache && request.method === 'GET' && response.status === 200) {
|
|
533
539
|
const cc = response.headers.get('Cache-Control')
|
|
@@ -610,7 +616,7 @@ globalThis.__TIMBER_PREBUILT_SOURCE__ = {
|
|
|
610
616
|
|
|
611
617
|
const entries: string[] = [];
|
|
612
618
|
for (const { file, bytes } of data.payloads) {
|
|
613
|
-
const b64 = bytes.toString('base64');
|
|
619
|
+
const b64 = Buffer.from(bytes).toString('base64');
|
|
614
620
|
entries.push(` ${JSON.stringify(file)}: ${JSON.stringify(b64)}`);
|
|
615
621
|
}
|
|
616
622
|
|
|
@@ -21,7 +21,7 @@ import { transformWithOxc } from 'vite';
|
|
|
21
21
|
// in both dev (Vite resolves the TS source) and the published package
|
|
22
22
|
// (the string is inlined into the compiled adapter entry).
|
|
23
23
|
import compressSource from '../server/compress.ts?raw';
|
|
24
|
-
import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.
|
|
24
|
+
import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.ts';
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* The one import `server/compress.ts` is allowed to carry, and its inlined
|
|
@@ -36,7 +36,7 @@ import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.js';
|
|
|
36
36
|
const INLINED_IMPORTS: ReadonlyArray<{ pattern: RegExp; replacement: string }> = [
|
|
37
37
|
{
|
|
38
38
|
pattern:
|
|
39
|
-
/^import\s*\{\s*RSC_CONTENT_TYPE\s*,?\s*\}\s*from\s*["'][^"']*shared\/rsc-media-type\.js["'];?[ \t]*$/m,
|
|
39
|
+
/^import\s*\{\s*RSC_CONTENT_TYPE\s*,?\s*\}\s*from\s*["'][^"']*shared\/rsc-media-type\.(?:js|ts)["'];?[ \t]*$/m,
|
|
40
40
|
replacement: `const RSC_CONTENT_TYPE = ${JSON.stringify(RSC_CONTENT_TYPE)};`,
|
|
41
41
|
},
|
|
42
42
|
];
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// Nitro preset catalog — per-platform build configuration.
|
|
2
|
+
//
|
|
3
|
+
// Shared by the nitro adapter (build + entry generation) and the preview
|
|
4
|
+
// module. See design/25-production-deployments.md for the preset matrix.
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Supported Nitro deployment presets.
|
|
8
|
+
*
|
|
9
|
+
* Each preset maps to a Nitro deployment target. The adapter generates
|
|
10
|
+
* the appropriate configuration and entry point for the selected platform.
|
|
11
|
+
*/
|
|
12
|
+
export type NitroPreset =
|
|
13
|
+
| 'vercel'
|
|
14
|
+
| 'vercel-edge'
|
|
15
|
+
| 'netlify'
|
|
16
|
+
| 'netlify-edge'
|
|
17
|
+
| 'aws-lambda'
|
|
18
|
+
| 'deno-deploy'
|
|
19
|
+
| 'azure-functions'
|
|
20
|
+
| 'node-server'
|
|
21
|
+
| 'bun';
|
|
22
|
+
|
|
23
|
+
/** Preset-specific Nitro configuration. */
|
|
24
|
+
export interface PresetConfig {
|
|
25
|
+
/** Nitro preset name passed to the Nitro build. */
|
|
26
|
+
nitroPreset: string;
|
|
27
|
+
/** Output directory name within the build dir. */
|
|
28
|
+
outputDir: string;
|
|
29
|
+
/**
|
|
30
|
+
* Path to the server bundle directory relative to outputDir.
|
|
31
|
+
* Nitro places the bundled server entry + _chunks/ here.
|
|
32
|
+
* Most presets use `server`; Vercel uses `functions/__server.func`.
|
|
33
|
+
*/
|
|
34
|
+
serverBundleDir: string;
|
|
35
|
+
/** Whether the runtime supports waitUntil. */
|
|
36
|
+
supportsWaitUntil: boolean;
|
|
37
|
+
/** Whether the runtime supports application-level 103 Early Hints. */
|
|
38
|
+
supportsEarlyHints: boolean;
|
|
39
|
+
/** Value for TIMBER_RUNTIME env var. See design/25-production-deployments.md. */
|
|
40
|
+
runtimeName: string;
|
|
41
|
+
/** Additional nitro.config fields for this preset. */
|
|
42
|
+
extraConfig?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
46
|
+
'vercel': {
|
|
47
|
+
nitroPreset: 'vercel',
|
|
48
|
+
outputDir: '.vercel/output',
|
|
49
|
+
serverBundleDir: 'functions/__server.func',
|
|
50
|
+
supportsWaitUntil: true,
|
|
51
|
+
supportsEarlyHints: false,
|
|
52
|
+
runtimeName: 'vercel',
|
|
53
|
+
extraConfig: { vercel: { functions: { maxDuration: 30 } } },
|
|
54
|
+
},
|
|
55
|
+
'vercel-edge': {
|
|
56
|
+
nitroPreset: 'vercel-edge',
|
|
57
|
+
outputDir: '.vercel/output',
|
|
58
|
+
serverBundleDir: 'functions/__server.func',
|
|
59
|
+
supportsWaitUntil: true,
|
|
60
|
+
supportsEarlyHints: false,
|
|
61
|
+
runtimeName: 'vercel-edge',
|
|
62
|
+
},
|
|
63
|
+
'netlify': {
|
|
64
|
+
nitroPreset: 'netlify',
|
|
65
|
+
outputDir: '.netlify/functions-internal',
|
|
66
|
+
serverBundleDir: 'server',
|
|
67
|
+
supportsWaitUntil: false,
|
|
68
|
+
supportsEarlyHints: false,
|
|
69
|
+
runtimeName: 'netlify',
|
|
70
|
+
},
|
|
71
|
+
'netlify-edge': {
|
|
72
|
+
nitroPreset: 'netlify-edge',
|
|
73
|
+
outputDir: '.netlify/edge-functions',
|
|
74
|
+
serverBundleDir: 'server',
|
|
75
|
+
supportsWaitUntil: true,
|
|
76
|
+
supportsEarlyHints: false,
|
|
77
|
+
runtimeName: 'netlify-edge',
|
|
78
|
+
},
|
|
79
|
+
'aws-lambda': {
|
|
80
|
+
nitroPreset: 'aws-lambda',
|
|
81
|
+
outputDir: '.output',
|
|
82
|
+
serverBundleDir: 'server',
|
|
83
|
+
supportsWaitUntil: false,
|
|
84
|
+
supportsEarlyHints: false,
|
|
85
|
+
runtimeName: 'aws-lambda',
|
|
86
|
+
},
|
|
87
|
+
'deno-deploy': {
|
|
88
|
+
nitroPreset: 'deno-deploy',
|
|
89
|
+
outputDir: '.output',
|
|
90
|
+
serverBundleDir: 'server',
|
|
91
|
+
supportsWaitUntil: true,
|
|
92
|
+
supportsEarlyHints: false,
|
|
93
|
+
runtimeName: 'deno-deploy',
|
|
94
|
+
},
|
|
95
|
+
'azure-functions': {
|
|
96
|
+
nitroPreset: 'azure-functions',
|
|
97
|
+
outputDir: '.output',
|
|
98
|
+
serverBundleDir: 'server',
|
|
99
|
+
supportsWaitUntil: false,
|
|
100
|
+
supportsEarlyHints: false,
|
|
101
|
+
runtimeName: 'azure-functions',
|
|
102
|
+
},
|
|
103
|
+
'node-server': {
|
|
104
|
+
nitroPreset: 'node-server',
|
|
105
|
+
outputDir: '.output',
|
|
106
|
+
serverBundleDir: 'server',
|
|
107
|
+
supportsWaitUntil: true,
|
|
108
|
+
// Disabled by default: most node-server deployments sit behind a
|
|
109
|
+
// reverse proxy (nginx, caddy, traefik) that doesn't support 103
|
|
110
|
+
// Early Hints over HTTP/1.1. Sending 103 causes nginx to intermittently
|
|
111
|
+
// treat the response as an error and retry after proxy_connect_timeout
|
|
112
|
+
// (~5s stalls on ~23% of requests). Link headers on the 200 response
|
|
113
|
+
// are the safe fallback — Cloudflare and other CDNs convert them to
|
|
114
|
+
// 103 automatically at the edge (over HTTP/2+ to the browser).
|
|
115
|
+
supportsEarlyHints: false,
|
|
116
|
+
runtimeName: 'node-server',
|
|
117
|
+
},
|
|
118
|
+
'bun': {
|
|
119
|
+
nitroPreset: 'bun',
|
|
120
|
+
outputDir: '.output',
|
|
121
|
+
serverBundleDir: 'server',
|
|
122
|
+
supportsWaitUntil: true,
|
|
123
|
+
// Disabled for same reason as node-server — reverse proxies choke on 103.
|
|
124
|
+
// Link headers on the 200 response are converted to 103 by CDNs.
|
|
125
|
+
supportsEarlyHints: false,
|
|
126
|
+
runtimeName: 'bun',
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
/** Presets that produce a locally-runnable server entry. */
|
|
131
|
+
export const LOCALLY_PREVIEWABLE = new Set<NitroPreset>(['node-server', 'bun']);
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Get the preset configuration for a given preset name.
|
|
135
|
+
* @internal Exported for testing.
|
|
136
|
+
*/
|
|
137
|
+
export function getPresetConfig(preset: NitroPreset): PresetConfig {
|
|
138
|
+
return PRESET_CONFIGS[preset];
|
|
139
|
+
}
|