@timber-js/app 0.2.0-alpha.191 → 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-types.d.ts +24 -6
- package/dist/config-types.d.ts.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 +816 -310
- 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 +18 -5
- 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/34-api-config.mdx +9 -8
- 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/docs/more/04b-mdx.mdx +38 -18
- package/package.json +23 -18
- 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-types.ts +27 -7
- 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 +73 -38
- 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 +11 -3
- 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
package/docs/more/04b-mdx.mdx
CHANGED
|
@@ -17,10 +17,10 @@ export default {
|
|
|
17
17
|
};
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
Install the MDX compiler
|
|
20
|
+
Install the MDX compiler — timber.js uses [Satteri](https://satteri.bruits.org), a Rust-based Markdown/MDX compiler with a native Vite plugin:
|
|
21
21
|
|
|
22
22
|
```bash title="Terminal"
|
|
23
|
-
pnpm add -D
|
|
23
|
+
pnpm add -D vite-plugin-satteri satteri
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
That's it. Any `page.mdx` file in your `app/` directory is now a route.
|
|
@@ -57,7 +57,7 @@ This page is a **server component** — no JavaScript shipped to the browser.
|
|
|
57
57
|
|
|
58
58
|
## Frontmatter
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
Frontmatter parsing is built in — YAML between `---` fences or TOML between `+++` fences. Frontmatter is exported as a single `frontmatter` object:
|
|
61
61
|
|
|
62
62
|
````mdx title="app/blog/hello/page.mdx"
|
|
63
63
|
---
|
|
@@ -127,33 +127,52 @@ pnpm add @timber-js/app
|
|
|
127
127
|
|
|
128
128
|
Only the `CopyButton` ships JavaScript. The rest of the page renders as static HTML.
|
|
129
129
|
|
|
130
|
-
##
|
|
130
|
+
## Plugins and Features
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
GFM (tables, footnotes, strikethrough, task lists) and frontmatter are on by default. Additional syntax is enabled through `features`, and custom transforms are written as Satteri visitor plugins through the `mdx` key in your config:
|
|
133
133
|
|
|
134
134
|
```ts title="timber.config.ts"
|
|
135
|
-
import
|
|
136
|
-
|
|
135
|
+
import { defineHastPlugin } from 'satteri';
|
|
136
|
+
|
|
137
|
+
const externalLinks = defineHastPlugin({
|
|
138
|
+
name: 'external-links',
|
|
139
|
+
element: {
|
|
140
|
+
filter: ['a'],
|
|
141
|
+
visit(node, ctx) {
|
|
142
|
+
const href = node.properties.href;
|
|
143
|
+
if (typeof href === 'string' && href.startsWith('http')) {
|
|
144
|
+
ctx.setProperty(node, 'target', '_blank');
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
});
|
|
137
149
|
|
|
138
150
|
export default {
|
|
139
151
|
pageExtensions: ['tsx', 'ts', 'jsx', 'js', 'mdx'],
|
|
140
152
|
mdx: {
|
|
141
|
-
|
|
142
|
-
|
|
153
|
+
hastPlugins: [externalLinks],
|
|
154
|
+
features: { math: true },
|
|
143
155
|
},
|
|
144
156
|
};
|
|
145
157
|
```
|
|
146
158
|
|
|
147
|
-
The `mdx` config maps directly to
|
|
159
|
+
The `mdx` config maps directly to `vite-plugin-satteri` options. Available fields:
|
|
160
|
+
|
|
161
|
+
| Option | Type | Description |
|
|
162
|
+
| -------------- | -------------------- | ------------------------------------------------------------------------------- |
|
|
163
|
+
| `mdastPlugins` | `MdastPluginInput[]` | Markdown AST visitors (created with `defineMdastPlugin`) |
|
|
164
|
+
| `hastPlugins` | `HastPluginInput[]` | HTML AST visitors (created with `defineHastPlugin`) |
|
|
165
|
+
| `features` | `Features` | Parser toggles — `gfm`, `frontmatter`, `math`, `directive`, `wikilinks`, … |
|
|
148
166
|
|
|
149
|
-
|
|
150
|
-
| --------------------- | --------------- | ------------------------------------------ |
|
|
151
|
-
| `remarkPlugins` | `PluggableList` | remark plugins for Markdown AST transforms |
|
|
152
|
-
| `rehypePlugins` | `PluggableList` | rehype plugins for HTML AST transforms |
|
|
153
|
-
| `recmaPlugins` | `PluggableList` | recma plugins for ESTree transforms |
|
|
154
|
-
| `remarkRehypeOptions` | `object` | Options passed to `remark-rehype` |
|
|
167
|
+
Satteri plugins are filtered visitors, not unified plugins — **remark/rehype plugins do not run** on Satteri's Rust-side AST. Visitors can be async and can replace nodes, which is enough to build things like shiki-based syntax highlighting (shiki transformers such as `@shikijs/twoslash` still work, since they run inside shiki).
|
|
155
168
|
|
|
156
|
-
|
|
169
|
+
If you need the unified MDX pipeline (for example, CodeHike), bypass timber's MDX support entirely: set `mdx: false` in your config and register `@mdx-js/rollup` yourself in `vite.config.ts` with `enforce: 'pre'`:
|
|
170
|
+
|
|
171
|
+
```ts title="timber.config.ts"
|
|
172
|
+
export default {
|
|
173
|
+
mdx: false, // disable timber's built-in MDX — bring your own compiler
|
|
174
|
+
};
|
|
175
|
+
```
|
|
157
176
|
|
|
158
177
|
## Dynamic MDX Loading
|
|
159
178
|
|
|
@@ -205,5 +224,6 @@ For structured content outside the route tree (blog posts, docs, changelogs), us
|
|
|
205
224
|
| `@next/mdx` wrapper package | Built-in — just add `'mdx'` to pageExtensions |
|
|
206
225
|
| `next.config.mjs` `withMDX()` wrapper | `timber.config.ts` `mdx` key |
|
|
207
226
|
| MDX pages are client components by default | MDX pages are server components by default |
|
|
208
|
-
|
|
|
227
|
+
| unified (remark/rehype) plugins | Satteri visitor plugins + built-in features |
|
|
228
|
+
| Custom loader for `.md` files | Built in — `.md` imports export an HTML string |
|
|
209
229
|
| `mdx-components.tsx` at project root | Same convention |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timber-js/app",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.194",
|
|
4
4
|
"description": "Vite-native React framework built for Servers and Serverless Platforms — correct HTTP semantics, real status codes, pages that work without JavaScript",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cloudflare-workers",
|
|
@@ -146,28 +146,35 @@
|
|
|
146
146
|
"publishConfig": {
|
|
147
147
|
"access": "public"
|
|
148
148
|
},
|
|
149
|
+
"scripts": {
|
|
150
|
+
"copy-docs": "node scripts/copy-docs.js",
|
|
151
|
+
"build": "vite build --config vite.lib.config.ts && node scripts/build-types.js && pnpm run copy-docs",
|
|
152
|
+
"typecheck": "tsgo --noEmit",
|
|
153
|
+
"prepublishOnly": "pnpm run build"
|
|
154
|
+
},
|
|
149
155
|
"dependencies": {
|
|
150
156
|
"@opentelemetry/api": "^1.9.1",
|
|
151
|
-
"@opentelemetry/context-async-hooks": "^2.
|
|
152
|
-
"@opentelemetry/sdk-trace-base": "^2.
|
|
153
|
-
"cookie": "^
|
|
157
|
+
"@opentelemetry/context-async-hooks": "^2.10.0",
|
|
158
|
+
"@opentelemetry/sdk-trace-base": "^2.10.0",
|
|
159
|
+
"cookie": "^2.0.1",
|
|
154
160
|
"jsonc-parser": "^3.3.1",
|
|
155
|
-
"magic-string": "^
|
|
161
|
+
"magic-string": "^1.2.0",
|
|
156
162
|
"nitro": "3.0.260610-beta",
|
|
157
|
-
"srvx": "^0.12.
|
|
163
|
+
"srvx": "^0.12.5"
|
|
158
164
|
},
|
|
159
165
|
"peerDependencies": {
|
|
160
166
|
"@content-collections/core": "^0.14.0 || ^0.15.0",
|
|
161
167
|
"@content-collections/mdx": "^0.2.0",
|
|
162
168
|
"@content-collections/vite": "^0.2.0 || ^0.3.0",
|
|
163
|
-
"@mdx-js/rollup": "^3.0.0",
|
|
164
169
|
"@typescript/native-preview": "^7.0.0-dev.0",
|
|
165
170
|
"@vitejs/plugin-react": "^6.0.0",
|
|
166
171
|
"@vitejs/plugin-rsc": ">=0.5.28",
|
|
167
172
|
"nuqs": "^2.0.0",
|
|
168
|
-
"react": "19.2.
|
|
169
|
-
"react-dom": "19.2.
|
|
170
|
-
"
|
|
173
|
+
"react": "19.2.8",
|
|
174
|
+
"react-dom": "19.2.8",
|
|
175
|
+
"satteri": "^0.9.5",
|
|
176
|
+
"vite": "8.2.1",
|
|
177
|
+
"vite-plugin-satteri": "^0.2.15",
|
|
171
178
|
"wrangler": "^4.0.0",
|
|
172
179
|
"zod": "^3.22.0 || ^4.0.0"
|
|
173
180
|
},
|
|
@@ -181,7 +188,10 @@
|
|
|
181
188
|
"@content-collections/vite": {
|
|
182
189
|
"optional": true
|
|
183
190
|
},
|
|
184
|
-
"
|
|
191
|
+
"satteri": {
|
|
192
|
+
"optional": true
|
|
193
|
+
},
|
|
194
|
+
"vite-plugin-satteri": {
|
|
185
195
|
"optional": true
|
|
186
196
|
},
|
|
187
197
|
"@typescript/native-preview": {
|
|
@@ -195,14 +205,9 @@
|
|
|
195
205
|
}
|
|
196
206
|
},
|
|
197
207
|
"devDependencies": {
|
|
198
|
-
"@typescript/native-preview": "
|
|
208
|
+
"@typescript/native-preview": "catalog:"
|
|
199
209
|
},
|
|
200
210
|
"engines": {
|
|
201
211
|
"node": ">=22.18.0"
|
|
202
|
-
},
|
|
203
|
-
"scripts": {
|
|
204
|
-
"copy-docs": "node scripts/copy-docs.js",
|
|
205
|
-
"build": "vite build --config vite.lib.config.ts && node scripts/build-types.js && pnpm run copy-docs",
|
|
206
|
-
"typecheck": "tsgo --noEmit"
|
|
207
212
|
}
|
|
208
|
-
}
|
|
213
|
+
}
|
|
@@ -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
|
+
}
|