@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/src/adapters/nitro.ts
CHANGED
|
@@ -6,143 +6,26 @@
|
|
|
6
6
|
// See design/11-platform.md and design/25-production-deployments.md.
|
|
7
7
|
|
|
8
8
|
import { writeFile, readFile, cp, glob } from 'node:fs/promises';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
13
|
-
import { adapterBase, IMMUTABLE_CACHE, generateHeadersFile } from './shared.js';
|
|
9
|
+
import { join, dirname, basename } from 'node:path';
|
|
10
|
+
import type { TimberPlatformAdapter, TimberConfig } from './types.ts';
|
|
11
|
+
import { generateCompressModule } from './compress-module.ts';
|
|
12
|
+
import { adapterBase, IMMUTABLE_CACHE, generateHeadersFile } from './shared.ts';
|
|
14
13
|
import {
|
|
15
14
|
runSharedBuildSteps,
|
|
16
15
|
buildStaticDirectoryOutput,
|
|
17
16
|
findUnhashedStaticFiles,
|
|
18
17
|
writeHeadersFile,
|
|
19
|
-
} from './build-output-helper.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* Each preset maps to a Nitro deployment target. The adapter generates
|
|
27
|
-
* the appropriate configuration and entry point for the selected platform.
|
|
28
|
-
*/
|
|
29
|
-
export type NitroPreset =
|
|
30
|
-
| 'vercel'
|
|
31
|
-
| 'vercel-edge'
|
|
32
|
-
| 'netlify'
|
|
33
|
-
| 'netlify-edge'
|
|
34
|
-
| 'aws-lambda'
|
|
35
|
-
| 'deno-deploy'
|
|
36
|
-
| 'azure-functions'
|
|
37
|
-
| 'node-server'
|
|
38
|
-
| 'bun';
|
|
39
|
-
|
|
40
|
-
/** Preset-specific Nitro configuration. */
|
|
41
|
-
interface PresetConfig {
|
|
42
|
-
/** Nitro preset name passed to the Nitro build. */
|
|
43
|
-
nitroPreset: string;
|
|
44
|
-
/** Output directory name within the build dir. */
|
|
45
|
-
outputDir: string;
|
|
46
|
-
/**
|
|
47
|
-
* Path to the server bundle directory relative to outputDir.
|
|
48
|
-
* Nitro places the bundled server entry + _chunks/ here.
|
|
49
|
-
* Most presets use `server`; Vercel uses `functions/__server.func`.
|
|
50
|
-
*/
|
|
51
|
-
serverBundleDir: string;
|
|
52
|
-
/** Whether the runtime supports waitUntil. */
|
|
53
|
-
supportsWaitUntil: boolean;
|
|
54
|
-
/** Whether the runtime supports application-level 103 Early Hints. */
|
|
55
|
-
supportsEarlyHints: boolean;
|
|
56
|
-
/** Value for TIMBER_RUNTIME env var. See design/25-production-deployments.md. */
|
|
57
|
-
runtimeName: string;
|
|
58
|
-
/** Additional nitro.config fields for this preset. */
|
|
59
|
-
extraConfig?: Record<string, unknown>;
|
|
60
|
-
}
|
|
18
|
+
} from './build-output-helper.ts';
|
|
19
|
+
import { PRESET_CONFIGS, LOCALLY_PREVIEWABLE, type NitroPreset } from './nitro-presets.ts';
|
|
20
|
+
import {
|
|
21
|
+
generatePreviewScript,
|
|
22
|
+
generateSendResponseModule,
|
|
23
|
+
spawnNitroPreview,
|
|
24
|
+
} from './nitro-preview.ts';
|
|
61
25
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
outputDir: '.vercel/output',
|
|
66
|
-
serverBundleDir: 'functions/__server.func',
|
|
67
|
-
supportsWaitUntil: true,
|
|
68
|
-
supportsEarlyHints: false,
|
|
69
|
-
runtimeName: 'vercel',
|
|
70
|
-
extraConfig: { vercel: { functions: { maxDuration: 30 } } },
|
|
71
|
-
},
|
|
72
|
-
'vercel-edge': {
|
|
73
|
-
nitroPreset: 'vercel-edge',
|
|
74
|
-
outputDir: '.vercel/output',
|
|
75
|
-
serverBundleDir: 'functions/__server.func',
|
|
76
|
-
supportsWaitUntil: true,
|
|
77
|
-
supportsEarlyHints: false,
|
|
78
|
-
runtimeName: 'vercel-edge',
|
|
79
|
-
},
|
|
80
|
-
'netlify': {
|
|
81
|
-
nitroPreset: 'netlify',
|
|
82
|
-
outputDir: '.netlify/functions-internal',
|
|
83
|
-
serverBundleDir: 'server',
|
|
84
|
-
supportsWaitUntil: false,
|
|
85
|
-
supportsEarlyHints: false,
|
|
86
|
-
runtimeName: 'netlify',
|
|
87
|
-
},
|
|
88
|
-
'netlify-edge': {
|
|
89
|
-
nitroPreset: 'netlify-edge',
|
|
90
|
-
outputDir: '.netlify/edge-functions',
|
|
91
|
-
serverBundleDir: 'server',
|
|
92
|
-
supportsWaitUntil: true,
|
|
93
|
-
supportsEarlyHints: false,
|
|
94
|
-
runtimeName: 'netlify-edge',
|
|
95
|
-
},
|
|
96
|
-
'aws-lambda': {
|
|
97
|
-
nitroPreset: 'aws-lambda',
|
|
98
|
-
outputDir: '.output',
|
|
99
|
-
serverBundleDir: 'server',
|
|
100
|
-
supportsWaitUntil: false,
|
|
101
|
-
supportsEarlyHints: false,
|
|
102
|
-
runtimeName: 'aws-lambda',
|
|
103
|
-
},
|
|
104
|
-
'deno-deploy': {
|
|
105
|
-
nitroPreset: 'deno-deploy',
|
|
106
|
-
outputDir: '.output',
|
|
107
|
-
serverBundleDir: 'server',
|
|
108
|
-
supportsWaitUntil: true,
|
|
109
|
-
supportsEarlyHints: false,
|
|
110
|
-
runtimeName: 'deno-deploy',
|
|
111
|
-
},
|
|
112
|
-
'azure-functions': {
|
|
113
|
-
nitroPreset: 'azure-functions',
|
|
114
|
-
outputDir: '.output',
|
|
115
|
-
serverBundleDir: 'server',
|
|
116
|
-
supportsWaitUntil: false,
|
|
117
|
-
supportsEarlyHints: false,
|
|
118
|
-
runtimeName: 'azure-functions',
|
|
119
|
-
},
|
|
120
|
-
'node-server': {
|
|
121
|
-
nitroPreset: 'node-server',
|
|
122
|
-
outputDir: '.output',
|
|
123
|
-
serverBundleDir: 'server',
|
|
124
|
-
supportsWaitUntil: true,
|
|
125
|
-
// Disabled by default: most node-server deployments sit behind a
|
|
126
|
-
// reverse proxy (nginx, caddy, traefik) that doesn't support 103
|
|
127
|
-
// Early Hints over HTTP/1.1. Sending 103 causes nginx to intermittently
|
|
128
|
-
// treat the response as an error and retry after proxy_connect_timeout
|
|
129
|
-
// (~5s stalls on ~23% of requests). Link headers on the 200 response
|
|
130
|
-
// are the safe fallback — Cloudflare and other CDNs convert them to
|
|
131
|
-
// 103 automatically at the edge (over HTTP/2+ to the browser).
|
|
132
|
-
supportsEarlyHints: false,
|
|
133
|
-
runtimeName: 'node-server',
|
|
134
|
-
},
|
|
135
|
-
'bun': {
|
|
136
|
-
nitroPreset: 'bun',
|
|
137
|
-
outputDir: '.output',
|
|
138
|
-
serverBundleDir: 'server',
|
|
139
|
-
supportsWaitUntil: true,
|
|
140
|
-
// Disabled for same reason as node-server — reverse proxies choke on 103.
|
|
141
|
-
// Link headers on the 200 response are converted to 103 by CDNs.
|
|
142
|
-
supportsEarlyHints: false,
|
|
143
|
-
runtimeName: 'bun',
|
|
144
|
-
},
|
|
145
|
-
};
|
|
26
|
+
// NitroPreset is part of the public adapter API (NitroAdapterOptions.preset),
|
|
27
|
+
// so it stays importable from this module.
|
|
28
|
+
export type { NitroPreset } from './nitro-presets.ts';
|
|
146
29
|
|
|
147
30
|
// ─── Options ─────────────────────────────────────────────────────────────────
|
|
148
31
|
|
|
@@ -215,7 +98,6 @@ export interface NitroAdapterOptions {
|
|
|
215
98
|
export function nitro(options: NitroAdapterOptions = {}): TimberPlatformAdapter {
|
|
216
99
|
const preset = options.preset ?? 'node-server';
|
|
217
100
|
const compress = options.compress ?? true;
|
|
218
|
-
const presetConfig = PRESET_CONFIGS[preset];
|
|
219
101
|
return {
|
|
220
102
|
name: `nitro-${preset}`,
|
|
221
103
|
|
|
@@ -428,261 +310,88 @@ ${handlerCall}
|
|
|
428
310
|
`;
|
|
429
311
|
}
|
|
430
312
|
|
|
431
|
-
// ───
|
|
432
|
-
|
|
433
|
-
/** Presets that produce a locally-runnable server entry. */
|
|
434
|
-
const LOCALLY_PREVIEWABLE = new Set<NitroPreset>(['node-server', 'bun']);
|
|
313
|
+
// ─── Build Hint Filtering ────────────────────────────────────────────────────
|
|
435
314
|
|
|
436
315
|
/**
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
*
|
|
440
|
-
*
|
|
441
|
-
*
|
|
442
|
-
*
|
|
316
|
+
* Prefixes of nitro build-output lines that give wrong advice for timber
|
|
317
|
+
* builds. Every nitro bundler path emits these hints via `logger.success` —
|
|
318
|
+
* the rollup path hardcodes `npx nitro preview`; rolldown and vite default
|
|
319
|
+
* to it. That command resolves `.output/nitro.json` relative to cwd, but
|
|
320
|
+
* timber's nitro build lives at `.timber/dist/nitro/.output`, so the
|
|
321
|
+
* suggested command can never work from the project root.
|
|
322
|
+
* Prefix matching degrades gracefully: if upstream rewords the line
|
|
323
|
+
* entirely, it passes through rather than being silently eaten.
|
|
443
324
|
*/
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
const publicDir = './public';
|
|
448
|
-
const manifestInitPath = './_timber-manifest-init.js';
|
|
449
|
-
const runtimeName = PRESET_CONFIGS[preset].runtimeName;
|
|
450
|
-
|
|
451
|
-
return `// Generated by @timber-js/app — standalone preview server.
|
|
452
|
-
// Uses Node's built-in HTTP server to serve static assets and route
|
|
453
|
-
// dynamic requests through the RSC handler. No Nitro/h3 dependency.
|
|
325
|
+
const NITRO_PREVIEW_HINT_PREFIX = 'You can preview this build using';
|
|
326
|
+
const NITRO_DEPLOY_HINT_PREFIX = 'You can deploy this build using';
|
|
327
|
+
const SUPPRESSED_NITRO_HINT_PREFIXES = [NITRO_PREVIEW_HINT_PREFIX, NITRO_DEPLOY_HINT_PREFIX];
|
|
454
328
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
// Set runtime before importing the handler.
|
|
462
|
-
process.env.TIMBER_RUNTIME = '${runtimeName}';
|
|
463
|
-
|
|
464
|
-
// Load the build manifest if it exists.
|
|
465
|
-
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
466
|
-
const manifestPath = join(__dirname, '${manifestInitPath}');
|
|
467
|
-
if (existsSync(manifestPath)) {
|
|
468
|
-
await import('${manifestInitPath}');
|
|
329
|
+
/** @internal Exported for testing. */
|
|
330
|
+
export function isSuppressedNitroHint(
|
|
331
|
+
message: unknown,
|
|
332
|
+
prefixes: readonly string[] = SUPPRESSED_NITRO_HINT_PREFIXES
|
|
333
|
+
): boolean {
|
|
334
|
+
return typeof message === 'string' && prefixes.some((prefix) => message.startsWith(prefix));
|
|
469
335
|
}
|
|
470
336
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
'.jpg': 'image/jpeg',
|
|
488
|
-
'.jpeg': 'image/jpeg',
|
|
489
|
-
'.gif': 'image/gif',
|
|
490
|
-
'.svg': 'image/svg+xml',
|
|
491
|
-
'.ico': 'image/x-icon',
|
|
492
|
-
'.woff': 'font/woff',
|
|
493
|
-
'.woff2': 'font/woff2',
|
|
494
|
-
'.ttf': 'font/ttf',
|
|
495
|
-
'.otf': 'font/otf',
|
|
496
|
-
'.webp': 'image/webp',
|
|
497
|
-
'.avif': 'image/avif',
|
|
498
|
-
'.webm': 'video/webm',
|
|
499
|
-
'.mp4': 'video/mp4',
|
|
500
|
-
'.txt': 'text/plain',
|
|
501
|
-
'.xml': 'application/xml',
|
|
502
|
-
'.wasm': 'application/wasm',
|
|
503
|
-
};
|
|
504
|
-
|
|
505
|
-
const publicDir = join(__dirname, '${publicDir}');
|
|
506
|
-
|
|
507
|
-
// Port resolution (TIM-842):
|
|
508
|
-
// - Default to 3000
|
|
509
|
-
// - If PORT env var is set, honor it strictly (fail loudly on conflict)
|
|
510
|
-
// - Otherwise auto-bump from 3000 until a free port is found
|
|
511
|
-
// Mirrors the dev server behavior so timber dev/preview/production all
|
|
512
|
-
// behave the same way around port selection.
|
|
513
|
-
const envPort = process.env.PORT ? parseInt(process.env.PORT, 10) : null;
|
|
514
|
-
const portIsExplicit = envPort != null && Number.isFinite(envPort) && envPort > 0;
|
|
515
|
-
const startPort = portIsExplicit ? envPort : 3000;
|
|
516
|
-
const host = process.env.HOST || 'localhost';
|
|
517
|
-
|
|
518
|
-
// Set after listenWithBump() resolves so request handlers can build
|
|
519
|
-
// absolute URLs from the actual bound port (which may differ from
|
|
520
|
-
// startPort after an auto-bump).
|
|
521
|
-
let boundPort = startPort;
|
|
522
|
-
|
|
523
|
-
const server = createServer(async (req, res) => {
|
|
524
|
-
// Scheme from the socket's TLS state — a hardcoded http:// breaks CSRF
|
|
525
|
-
// origin comparison and absolute-URL construction when TLS is terminated
|
|
526
|
-
// at this server (TIM-1073; mirrors the dev-server fix in TIM-1067).
|
|
527
|
-
// X-Forwarded-Proto is intentionally not consulted here: on a direct
|
|
528
|
-
// connection it would be attacker-controlled. The CSRF layer honors it
|
|
529
|
-
// separately for reverse-proxy deployments.
|
|
530
|
-
const scheme = req.socket?.encrypted ? 'https' : 'http';
|
|
531
|
-
const url = new URL(req.url || '/', \`\${scheme}://\${host}:\${boundPort}\`);
|
|
532
|
-
|
|
533
|
-
// Try serving static files from the public directory first.
|
|
534
|
-
const filePath = join(publicDir, url.pathname);
|
|
535
|
-
// Prevent path traversal.
|
|
536
|
-
if (filePath.startsWith(publicDir)) {
|
|
537
|
-
try {
|
|
538
|
-
const fileStat = await stat(filePath);
|
|
539
|
-
if (fileStat.isFile()) {
|
|
540
|
-
const ext = extname(filePath);
|
|
541
|
-
const contentType = MIME_TYPES[ext] || 'application/octet-stream';
|
|
542
|
-
const body = await readFile(filePath);
|
|
543
|
-
// Hashed assets get immutable cache, others get short cache.
|
|
544
|
-
const isImmutable =
|
|
545
|
-
url.pathname.startsWith('/assets/') || url.pathname.startsWith('/_timber/fonts/');
|
|
546
|
-
const cacheControl = isImmutable
|
|
547
|
-
? 'public, max-age=31536000, immutable'
|
|
548
|
-
: 'public, max-age=3600, must-revalidate';
|
|
549
|
-
res.writeHead(200, {
|
|
550
|
-
'Content-Type': contentType,
|
|
551
|
-
'Content-Length': body.length,
|
|
552
|
-
'Cache-Control': cacheControl,
|
|
553
|
-
});
|
|
554
|
-
res.end(body);
|
|
555
|
-
return;
|
|
556
|
-
}
|
|
557
|
-
} catch {
|
|
558
|
-
// File not found — fall through to the RSC handler.
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
// Convert Node request to Web Request.
|
|
563
|
-
const headers = new Headers();
|
|
564
|
-
for (const [key, value] of Object.entries(req.headers)) {
|
|
565
|
-
if (value) {
|
|
566
|
-
if (Array.isArray(value)) {
|
|
567
|
-
for (const v of value) headers.append(key, v);
|
|
568
|
-
} else {
|
|
569
|
-
headers.set(key, value);
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
let body = undefined;
|
|
575
|
-
if (req.method !== 'GET' && req.method !== 'HEAD') {
|
|
576
|
-
body = await new Promise((resolve) => {
|
|
577
|
-
const chunks = [];
|
|
578
|
-
req.on('data', (chunk) => chunks.push(chunk));
|
|
579
|
-
req.on('end', () => resolve(Buffer.concat(chunks)));
|
|
580
|
-
});
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
const webRequest = new Request(url.href, {
|
|
584
|
-
method: req.method,
|
|
585
|
-
headers,
|
|
586
|
-
body,
|
|
587
|
-
duplex: body ? 'half' : undefined,
|
|
588
|
-
});
|
|
589
|
-
|
|
590
|
-
try {
|
|
591
|
-
// Support 103 Early Hints when available.
|
|
592
|
-
const earlyHintsSender = (typeof res.writeEarlyHints === 'function')
|
|
593
|
-
? (links) => { try { res.writeEarlyHints({ link: links }); } catch {} }
|
|
594
|
-
: undefined;
|
|
595
|
-
|
|
596
|
-
const rawResponse = earlyHintsSender && runWithEarlyHintsSender
|
|
597
|
-
? await runWithEarlyHintsSender(earlyHintsSender, () => handler(webRequest))
|
|
598
|
-
: await handler(webRequest);
|
|
599
|
-
|
|
600
|
-
// Compress the response for self-hosted deployments.
|
|
601
|
-
const webResponse = compressResponse(webRequest, rawResponse);
|
|
602
|
-
|
|
603
|
-
// Write the response to Node's ServerResponse. sendNodeResponse handles
|
|
604
|
-
// status, headers (including Set-Cookie splitting via [...headers]),
|
|
605
|
-
// body streaming with backpressure, and client disconnect cleanup.
|
|
606
|
-
// See TIM-1154.
|
|
607
|
-
await sendNodeResponse(res, webResponse);
|
|
608
|
-
} catch (err) {
|
|
609
|
-
console.error('[timber preview] Request error:', err);
|
|
610
|
-
if (!res.headersSent) {
|
|
611
|
-
res.writeHead(500, { 'Content-Type': 'text/plain' });
|
|
612
|
-
}
|
|
613
|
-
res.end('Internal Server Error');
|
|
614
|
-
}
|
|
615
|
-
});
|
|
616
|
-
|
|
617
|
-
function listenWithBump(port, attempt = 0) {
|
|
618
|
-
return new Promise((resolveListen, rejectListen) => {
|
|
619
|
-
const onError = (err) => {
|
|
620
|
-
server.removeListener('listening', onListening);
|
|
621
|
-
if (err && err.code === 'EADDRINUSE' && !portIsExplicit && attempt < 100) {
|
|
622
|
-
if (attempt === 0) {
|
|
623
|
-
console.log(\` [timber] Port \${port} in use, trying \${port + 1}...\`);
|
|
624
|
-
}
|
|
625
|
-
listenWithBump(port + 1, attempt + 1).then(resolveListen, rejectListen);
|
|
626
|
-
return;
|
|
627
|
-
}
|
|
628
|
-
rejectListen(err);
|
|
629
|
-
};
|
|
630
|
-
const onListening = () => {
|
|
631
|
-
server.removeListener('error', onError);
|
|
632
|
-
resolveListen(port);
|
|
633
|
-
};
|
|
634
|
-
server.once('error', onError);
|
|
635
|
-
server.once('listening', onListening);
|
|
636
|
-
server.listen(port, host);
|
|
637
|
-
});
|
|
337
|
+
/**
|
|
338
|
+
* Nitro's rolldown and vite builders render `framework.previewCommand` /
|
|
339
|
+
* `framework.deployCommand` into these hints. A user who explicitly set one
|
|
340
|
+
* via `nitroConfig` has provided valid guidance — only suppress the hints
|
|
341
|
+
* whose command is still nitro's broken default.
|
|
342
|
+
*
|
|
343
|
+
* @internal Exported for testing.
|
|
344
|
+
*/
|
|
345
|
+
export function selectSuppressedHintPrefixes(framework?: {
|
|
346
|
+
previewCommand?: string;
|
|
347
|
+
deployCommand?: string;
|
|
348
|
+
}): string[] {
|
|
349
|
+
return [
|
|
350
|
+
...(framework?.previewCommand ? [] : [NITRO_PREVIEW_HINT_PREFIX]),
|
|
351
|
+
...(framework?.deployCommand ? [] : [NITRO_DEPLOY_HINT_PREFIX]),
|
|
352
|
+
];
|
|
638
353
|
}
|
|
639
354
|
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
console.log();
|
|
644
|
-
console.log(\` [timber] Port \${startPort} in use, using \${boundPort}\`);
|
|
645
|
-
}
|
|
646
|
-
console.log();
|
|
647
|
-
console.log(' ⚡ timber preview server running at:');
|
|
648
|
-
console.log();
|
|
649
|
-
console.log(\` ➜ http://\${host}:\${boundPort}\`);
|
|
650
|
-
console.log();
|
|
651
|
-
} catch (err) {
|
|
652
|
-
if (err && err.code === 'EADDRINUSE') {
|
|
653
|
-
console.error(\`[timber] Port \${startPort} is already in use. \` +
|
|
654
|
-
'Set PORT to a free port, or unset PORT to auto-pick.');
|
|
655
|
-
} else {
|
|
656
|
-
console.error('[timber] Failed to start preview server:', err);
|
|
657
|
-
}
|
|
658
|
-
process.exit(1);
|
|
659
|
-
}
|
|
660
|
-
`;
|
|
355
|
+
/** Minimal structural view of the nitro (consola) logger the wrap needs. */
|
|
356
|
+
interface NitroBuildLogger {
|
|
357
|
+
success: (message: unknown, ...args: unknown[]) => void;
|
|
661
358
|
}
|
|
662
359
|
|
|
663
|
-
/**
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
360
|
+
/**
|
|
361
|
+
* Wrap a nitro logger's `success` so hardcoded preview/deploy hints are
|
|
362
|
+
* dropped for this programmatic build only. Returns the original
|
|
363
|
+
* (unfiltered) success fn so timber can print its own hint — which shares
|
|
364
|
+
* the suppressed prefix on purpose, replacing nitro's wording.
|
|
365
|
+
*
|
|
366
|
+
* @internal Exported for testing.
|
|
367
|
+
*/
|
|
368
|
+
export function wrapNitroLoggerForBuild(
|
|
369
|
+
logger: NitroBuildLogger,
|
|
370
|
+
prefixes: readonly string[] = SUPPRESSED_NITRO_HINT_PREFIXES
|
|
371
|
+
): NitroBuildLogger['success'] {
|
|
372
|
+
const originalSuccess = logger.success.bind(logger);
|
|
373
|
+
const wrapped = (message: unknown, ...args: unknown[]) => {
|
|
374
|
+
if (isSuppressedNitroHint(message, prefixes)) return;
|
|
375
|
+
originalSuccess(message, ...args);
|
|
376
|
+
};
|
|
377
|
+
// Preserve consola LogFn properties (e.g. `.raw`) on the replacement.
|
|
378
|
+
logger.success = Object.assign(wrapped, logger.success);
|
|
379
|
+
return originalSuccess;
|
|
668
380
|
}
|
|
669
381
|
|
|
670
|
-
/**
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
args: [entryPath],
|
|
684
|
-
cwd: nitroDir,
|
|
685
|
-
};
|
|
382
|
+
/**
|
|
383
|
+
* Timber's own post-build hint. Locally-runnable presets are previewed via
|
|
384
|
+
* `timber preview`, which invokes this adapter's `preview()` to run the
|
|
385
|
+
* generated `_preview-server.mjs`. Serverless presets get no hint — their
|
|
386
|
+
* output lives under `.timber/dist/nitro/`, so any cwd-relative deploy
|
|
387
|
+
* command would be as wrong as the nitro hint this replaces.
|
|
388
|
+
*
|
|
389
|
+
* @internal Exported for testing.
|
|
390
|
+
*/
|
|
391
|
+
export function getPostBuildHint(preset: NitroPreset): string | null {
|
|
392
|
+
return LOCALLY_PREVIEWABLE.has(preset)
|
|
393
|
+
? 'You can preview this build using `timber preview`'
|
|
394
|
+
: null;
|
|
686
395
|
}
|
|
687
396
|
|
|
688
397
|
/**
|
|
@@ -731,6 +440,17 @@ async function runNitroBuild(
|
|
|
731
440
|
...userConfig,
|
|
732
441
|
});
|
|
733
442
|
|
|
443
|
+
// Drop nitro's `npx nitro preview` / `npx nitro deploy` hints —
|
|
444
|
+
// they can never work from the project root (see TIM-1375). Hints whose
|
|
445
|
+
// command the user explicitly configured via framework.previewCommand /
|
|
446
|
+
// deployCommand pass through untouched — except on the rollup builder,
|
|
447
|
+
// which ignores framework commands and unconditionally prints the broken
|
|
448
|
+
// defaults (nitro/dist/_build/rollup.mjs), so user commands are treated
|
|
449
|
+
// as absent there: defaults stay suppressed, timber's hint still prints.
|
|
450
|
+
// logSuccess is the unfiltered fn used below to print timber's hint.
|
|
451
|
+
const framework = nitro.options.builder === 'rollup' ? undefined : nitro.options.framework;
|
|
452
|
+
const logSuccess = wrapNitroLoggerForBuild(nitro.logger, selectSuppressedHintPrefixes(framework));
|
|
453
|
+
|
|
734
454
|
// Read the resolved serverDir AFTER config merging — userConfig may
|
|
735
455
|
// override output.dir or output.serverDir. Nitro appends a trailing
|
|
736
456
|
// slash during resolution; strip it for join() compatibility.
|
|
@@ -742,100 +462,15 @@ async function runNitroBuild(
|
|
|
742
462
|
await nitroBuild(nitro);
|
|
743
463
|
await nitro.close();
|
|
744
464
|
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
function spawnNitroPreview(command: string, args: string[], cwd: string): Promise<void> {
|
|
750
|
-
return new Promise<void>((resolve, reject) => {
|
|
751
|
-
const child = execFile(command, args, { cwd }, (err) => {
|
|
752
|
-
if (err) reject(err);
|
|
753
|
-
else resolve();
|
|
754
|
-
});
|
|
755
|
-
child.stdout?.pipe(process.stdout);
|
|
756
|
-
child.stderr?.pipe(process.stderr);
|
|
757
|
-
});
|
|
758
|
-
}
|
|
759
|
-
|
|
760
|
-
// ─── Send Response Module ───────────────────────────────────────────────────
|
|
761
|
-
|
|
762
|
-
/**
|
|
763
|
-
* Generate a standalone ESM module that exports sendNodeResponse.
|
|
764
|
-
*
|
|
765
|
-
* Mirrors srvx/node's sendNodeResponse: status + headers via writeHead,
|
|
766
|
-
* body streaming with backpressure (waits for drain on write() === false),
|
|
767
|
-
* and client disconnect cleanup. Written to `_send-response.mjs` during
|
|
768
|
-
* buildOutput for use by the preview server script. See TIM-1154.
|
|
769
|
-
*
|
|
770
|
-
* @internal Exported for testing.
|
|
771
|
-
*/
|
|
772
|
-
export function generateSendResponseModule(): string {
|
|
773
|
-
return `// Generated by @timber-js/app — Web→Node response bridge.
|
|
774
|
-
// Do not edit — this file is regenerated on each build.
|
|
775
|
-
// Mirrors srvx/node's sendNodeResponse with backpressure support.
|
|
465
|
+
// A user-configured previewCommand already printed via nitro's own hint —
|
|
466
|
+
// don't print a second, conflicting one.
|
|
467
|
+
const hint = framework?.previewCommand ? null : getPostBuildHint(preset);
|
|
468
|
+
if (hint) logSuccess(hint);
|
|
776
469
|
|
|
777
|
-
|
|
778
|
-
if (!webRes) {
|
|
779
|
-
nodeRes.statusCode = 500;
|
|
780
|
-
return new Promise((resolve) => nodeRes.end(resolve));
|
|
781
|
-
}
|
|
782
|
-
const rawHeaders = [...webRes.headers];
|
|
783
|
-
const writeHeaders = rawHeaders.flat();
|
|
784
|
-
if (!nodeRes.headersSent) {
|
|
785
|
-
if (nodeRes.req?.httpVersion === '2.0') {
|
|
786
|
-
nodeRes.writeHead(webRes.status, writeHeaders);
|
|
787
|
-
} else {
|
|
788
|
-
nodeRes.writeHead(webRes.status, webRes.statusText, writeHeaders);
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
if (!webRes.body) {
|
|
792
|
-
return new Promise((resolve) => nodeRes.end(resolve));
|
|
793
|
-
}
|
|
794
|
-
// Stream with backpressure: pause reading when the kernel buffer is
|
|
795
|
-
// full (write() returns false) and resume on 'drain'.
|
|
796
|
-
if (nodeRes.destroyed) {
|
|
797
|
-
webRes.body.cancel();
|
|
798
|
-
return;
|
|
799
|
-
}
|
|
800
|
-
const reader = webRes.body.getReader();
|
|
801
|
-
function streamCancel(error) {
|
|
802
|
-
reader.cancel(error).catch(() => {});
|
|
803
|
-
if (error) nodeRes.destroy(error);
|
|
804
|
-
}
|
|
805
|
-
function streamHandle({ done, value }) {
|
|
806
|
-
try {
|
|
807
|
-
if (done) {
|
|
808
|
-
nodeRes.end();
|
|
809
|
-
} else if (nodeRes.write(value)) {
|
|
810
|
-
reader.read().then(streamHandle, streamCancel);
|
|
811
|
-
} else {
|
|
812
|
-
nodeRes.once('drain', () => reader.read().then(streamHandle, streamCancel));
|
|
813
|
-
}
|
|
814
|
-
} catch (error) {
|
|
815
|
-
streamCancel(error instanceof Error ? error : undefined);
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
nodeRes.on('close', streamCancel);
|
|
819
|
-
nodeRes.on('error', streamCancel);
|
|
820
|
-
reader.read().then(streamHandle, streamCancel);
|
|
821
|
-
return reader.closed.catch(streamCancel).finally(() => {
|
|
822
|
-
nodeRes.off('close', streamCancel);
|
|
823
|
-
nodeRes.off('error', streamCancel);
|
|
824
|
-
});
|
|
825
|
-
}
|
|
826
|
-
`;
|
|
470
|
+
return { serverDir };
|
|
827
471
|
}
|
|
828
|
-
|
|
829
472
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
830
473
|
|
|
831
|
-
/**
|
|
832
|
-
* Get the preset configuration for a given preset name.
|
|
833
|
-
* @internal Exported for testing.
|
|
834
|
-
*/
|
|
835
|
-
export function getPresetConfig(preset: NitroPreset): PresetConfig {
|
|
836
|
-
return PRESET_CONFIGS[preset];
|
|
837
|
-
}
|
|
838
|
-
|
|
839
474
|
/**
|
|
840
475
|
* Resolve the destination path for prebuilt flight payloads in the Nitro
|
|
841
476
|
* output directory. The RSC entry resolves `../prebuilt/` relative to its
|
package/src/adapters/shared.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// tests/adapters/shared-no-forbidden-imports.test.ts enforces this.
|
|
11
11
|
// ../shared/ is exempt: it is dependency-free by the same rule.
|
|
12
12
|
|
|
13
|
-
import { withBasePath } from '../shared/base-path.
|
|
13
|
+
import { withBasePath } from '../shared/base-path.ts';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* The deployment base an adapter should write platform rules against.
|