@timber-js/app 0.2.0-alpha.19 → 0.2.0-alpha.191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -0
- package/agent-skill.md +344 -0
- package/dist/_chunks/actions-BjbbNRFN.js +318 -0
- package/dist/_chunks/actions-BjbbNRFN.js.map +1 -0
- package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
- package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
- package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
- package/dist/_chunks/base-path-DaQrzbez.js +80 -0
- package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
- package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
- package/dist/_chunks/build-output-helper-C3DrfzZR.js +369 -0
- package/dist/_chunks/build-output-helper-C3DrfzZR.js.map +1 -0
- package/dist/_chunks/cache-api-DllJ-Lyw.js +1196 -0
- package/dist/_chunks/cache-api-DllJ-Lyw.js.map +1 -0
- package/dist/_chunks/cli-check-DJZDc22E.js +256 -0
- package/dist/_chunks/cli-check-DJZDc22E.js.map +1 -0
- package/dist/_chunks/cli-schema-sync-D4_AZVUb.js +298 -0
- package/dist/_chunks/cli-schema-sync-D4_AZVUb.js.map +1 -0
- package/dist/_chunks/cloudflare-CGP6BZKO.js +1284 -0
- package/dist/_chunks/cloudflare-CGP6BZKO.js.map +1 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
- package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
- package/dist/_chunks/convention-lint-CpteIpTm.js +784 -0
- package/dist/_chunks/convention-lint-CpteIpTm.js.map +1 -0
- package/dist/_chunks/dist-BA3u1z3W.js +423 -0
- package/dist/_chunks/dist-BA3u1z3W.js.map +1 -0
- package/dist/_chunks/error-boundary-D-ODYX41.js +353 -0
- package/dist/_chunks/error-boundary-D-ODYX41.js.map +1 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
- package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
- package/dist/_chunks/file-cache-DmX7OqZP.js +454 -0
- package/dist/_chunks/file-cache-DmX7OqZP.js.map +1 -0
- package/dist/_chunks/format-CfwjgPz9.js +14 -0
- package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
- package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
- package/dist/_chunks/href-validation-CMc5JRls.js +141 -0
- package/dist/_chunks/href-validation-CMc5JRls.js.map +1 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
- package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
- package/dist/_chunks/logger-CH7IcMmg.js +1436 -0
- package/dist/_chunks/logger-CH7IcMmg.js.map +1 -0
- package/dist/_chunks/mdx-file-C005ay-P.js +25 -0
- package/dist/_chunks/mdx-file-C005ay-P.js.map +1 -0
- package/dist/_chunks/plugin-context-rCinWLiE.js +321 -0
- package/dist/_chunks/plugin-context-rCinWLiE.js.map +1 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
- package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
- package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
- package/dist/_chunks/router-ref-DuYuV_0Q.js +28 -0
- package/dist/_chunks/router-ref-DuYuV_0Q.js.map +1 -0
- package/dist/_chunks/rsc-cache-key-DD0fl_-s.js +243 -0
- package/dist/_chunks/rsc-cache-key-DD0fl_-s.js.map +1 -0
- package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js +40 -0
- package/dist/_chunks/rsc-error-envelope-tT5PJs4q.js.map +1 -0
- package/dist/_chunks/rsc-media-type-DRqE_lD_.js +46 -0
- package/dist/_chunks/rsc-media-type-DRqE_lD_.js.map +1 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
- package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
- package/dist/_chunks/scanner-CAietmj4.js +1564 -0
- package/dist/_chunks/scanner-CAietmj4.js.map +1 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
- package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
- package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
- package/dist/_chunks/segment-context-CjOlyB8Y.js +97 -0
- package/dist/_chunks/segment-context-CjOlyB8Y.js.map +1 -0
- package/dist/_chunks/segment-keys-BawYuNFO.js +307 -0
- package/dist/_chunks/segment-keys-BawYuNFO.js.map +1 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
- package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
- package/dist/_chunks/slot-params-BCTmZkQB.js +76 -0
- package/dist/_chunks/slot-params-BCTmZkQB.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-14MXm7Pj.js} +17 -2
- package/dist/_chunks/ssr-data-14MXm7Pj.js.map +1 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
- package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
- package/dist/_chunks/use-segment-params-C4r4BD9T.js +398 -0
- package/dist/_chunks/use-segment-params-C4r4BD9T.js.map +1 -0
- package/dist/_chunks/walkers-BsVLmD1S.js +141 -0
- package/dist/_chunks/walkers-BsVLmD1S.js.map +1 -0
- package/dist/adapters/build-output-helper.d.ts +72 -0
- package/dist/adapters/build-output-helper.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.d.ts +109 -0
- package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
- package/dist/adapters/cloudflare-dev.js +73 -0
- package/dist/adapters/cloudflare-dev.js.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +124 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +199 -21
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +2 -188
- package/dist/adapters/compress-module.d.ts +17 -4
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/fs-identity.d.ts +64 -0
- package/dist/adapters/fs-identity.d.ts.map +1 -0
- package/dist/adapters/nitro.d.ts +55 -3
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +287 -171
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/adapters/shared.d.ts +62 -0
- package/dist/adapters/shared.d.ts.map +1 -0
- package/dist/adapters/types.d.ts +28 -6
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/cache/cache-api.d.ts +48 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/fast-hash.d.ts +5 -0
- package/dist/cache/fast-hash.d.ts.map +1 -1
- package/dist/cache/handler-store.d.ts +33 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +31 -8
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +3 -326
- package/dist/cache/invalidation-epoch.d.ts +43 -0
- package/dist/cache/invalidation-epoch.d.ts.map +1 -0
- package/dist/cache/json-lossy-check.d.ts +11 -0
- package/dist/cache/json-lossy-check.d.ts.map +1 -0
- package/dist/cache/redis-handler.d.ts +140 -8
- package/dist/cache/redis-handler.d.ts.map +1 -1
- package/dist/cache/singleflight.d.ts +19 -2
- package/dist/cache/singleflight.d.ts.map +1 -1
- package/dist/cache/sizeof.d.ts +22 -0
- package/dist/cache/sizeof.d.ts.map +1 -0
- package/dist/cache/stable-stringify.d.ts +9 -0
- package/dist/cache/stable-stringify.d.ts.map +1 -1
- package/dist/cache/store.d.ts +53 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
- package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
- package/dist/cache/stores/cloudflare-kv.js +29 -0
- package/dist/cache/stores/cloudflare-kv.js.map +1 -0
- package/dist/cache/stores/memory.d.ts +42 -0
- package/dist/cache/stores/memory.d.ts.map +1 -0
- package/dist/cache/stores/memory.js +90 -0
- package/dist/cache/stores/memory.js.map +1 -0
- package/dist/cache/stores/redis.d.ts +69 -0
- package/dist/cache/stores/redis.d.ts.map +1 -0
- package/dist/cache/stores/redis.js +35 -0
- package/dist/cache/stores/redis.js.map +1 -0
- package/dist/cache/stores/vercel.d.ts +36 -0
- package/dist/cache/stores/vercel.d.ts.map +1 -0
- package/dist/cache/stores/vercel.js +33 -0
- package/dist/cache/stores/vercel.js.map +1 -0
- package/dist/cache/tag-aware-handler.d.ts +52 -0
- package/dist/cache/tag-aware-handler.d.ts.map +1 -0
- package/dist/cache/timber-cache.d.ts +20 -10
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cdn/cloudflare-purge.d.ts +23 -0
- package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
- package/dist/cdn/cloudflare-purge.js +30 -0
- package/dist/cdn/cloudflare-purge.js.map +1 -0
- package/dist/cdn/fastly-purge.d.ts +25 -0
- package/dist/cdn/fastly-purge.d.ts.map +1 -0
- package/dist/cdn/fastly-purge.js +33 -0
- package/dist/cdn/fastly-purge.js.map +1 -0
- package/dist/cdn/headers.d.ts +97 -0
- package/dist/cdn/headers.d.ts.map +1 -0
- package/dist/cdn/index.d.ts +5 -0
- package/dist/cdn/index.d.ts.map +1 -0
- package/dist/cdn/index.js +94 -0
- package/dist/cdn/index.js.map +1 -0
- package/dist/cdn/purge-store.d.ts +23 -0
- package/dist/cdn/purge-store.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.d.ts +16 -0
- package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
- package/dist/cdn/workers-cache-purge.js +35 -0
- package/dist/cdn/workers-cache-purge.js.map +1 -0
- package/dist/cli-check.d.ts +153 -0
- package/dist/cli-check.d.ts.map +1 -0
- package/dist/cli-schema-sync.d.ts +59 -0
- package/dist/cli-schema-sync.d.ts.map +1 -0
- package/dist/cli.d.ts +66 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +151 -47
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +37 -1
- package/dist/client/browser-dev.d.ts.map +1 -1
- package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
- package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
- package/dist/client/browser-entry/hmr.d.ts +21 -0
- package/dist/client/browser-entry/hmr.d.ts.map +1 -0
- package/dist/client/browser-entry/hydrate.d.ts +57 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +29 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +29 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +30 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +28 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +19 -5
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +1 -125
- package/dist/client/error-reconstituter.d.ts +61 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +16 -27
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/history.d.ts +29 -7
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +11 -24
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +186 -1134
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +20 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +1624 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link.d.ts +63 -60
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/navigation-api.d.ts +121 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-commit.d.ts +87 -0
- package/dist/client/navigation-commit.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +38 -20
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/navigation-root.d.ts +159 -0
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts +1 -1
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/params-context.d.ts +82 -0
- package/dist/client/params-context.d.ts.map +1 -0
- package/dist/client/router-effects.d.ts +129 -0
- package/dist/client/router-effects.d.ts.map +1 -0
- package/dist/client/router-lifecycle.d.ts +55 -0
- package/dist/client/router-lifecycle.d.ts.map +1 -0
- package/dist/client/router-pipeline.d.ts +84 -0
- package/dist/client/router-pipeline.d.ts.map +1 -0
- package/dist/client/router-ref.d.ts +2 -2
- package/dist/client/router-ref.d.ts.map +1 -1
- package/dist/client/router-skew.d.ts +21 -0
- package/dist/client/router-skew.d.ts.map +1 -0
- package/dist/client/router-types.d.ts +207 -0
- package/dist/client/router-types.d.ts.map +1 -0
- package/dist/client/router.d.ts +1 -97
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +113 -26
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +107 -25
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +57 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/segment-update-context.d.ts +21 -0
- package/dist/client/segment-update-context.d.ts.map +1 -0
- package/dist/client/shallow-url.d.ts +10 -0
- package/dist/client/shallow-url.d.ts.map +1 -0
- package/dist/client/slot-context.d.ts +31 -0
- package/dist/client/slot-context.d.ts.map +1 -0
- package/dist/client/slot-outlet.d.ts +16 -0
- package/dist/client/slot-outlet.d.ts.map +1 -0
- package/dist/client/slot-provider.d.ts +25 -0
- package/dist/client/slot-provider.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +21 -5
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-client.d.ts +69 -0
- package/dist/client/stale-client.d.ts.map +1 -0
- package/dist/client/state.d.ts +14 -4
- package/dist/client/state.d.ts.map +1 -1
- package/dist/client/top-loader.d.ts +7 -6
- package/dist/client/top-loader.d.ts.map +1 -1
- package/dist/client/unload-guard.d.ts +5 -0
- package/dist/client/unload-guard.d.ts.map +1 -1
- package/dist/client/use-cookie.d.ts +12 -0
- package/dist/client/use-cookie.d.ts.map +1 -1
- package/dist/client/use-link-status.d.ts +5 -5
- package/dist/client/use-link-status.d.ts.map +1 -1
- package/dist/client/use-pathname.d.ts.map +1 -1
- package/dist/client/use-pending-navigation.d.ts +23 -0
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +10 -4
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +2 -2
- package/dist/client/use-router.d.ts.map +1 -1
- package/dist/client/use-search-params.d.ts +12 -5
- package/dist/client/use-search-params.d.ts.map +1 -1
- package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +29 -16
- package/dist/client/use-segment-params.d.ts.map +1 -0
- package/dist/codec.d.ts +69 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +76 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-types.d.ts +284 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-validation.d.ts +51 -0
- package/dist/config-validation.d.ts.map +1 -0
- package/dist/content/index.d.ts +1 -10
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +0 -2
- package/dist/cookies/define-cookie.d.ts +58 -25
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.d.ts +2 -1
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +257 -36
- package/dist/cookies/index.js.map +1 -1
- package/dist/cookies/json-cookie.d.ts +64 -0
- package/dist/cookies/json-cookie.d.ts.map +1 -0
- package/dist/cookies/validation.d.ts +34 -0
- package/dist/cookies/validation.d.ts.map +1 -0
- package/dist/dev-tools/404-page.d.ts +50 -0
- package/dist/dev-tools/404-page.d.ts.map +1 -0
- package/dist/dev-tools/browser-logs.d.ts +40 -0
- package/dist/dev-tools/browser-logs.d.ts.map +1 -0
- package/dist/dev-tools/dev-page-shell.d.ts +78 -0
- package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
- package/dist/dev-tools/error-page.d.ts +32 -0
- package/dist/dev-tools/error-page.d.ts.map +1 -0
- package/dist/dev-tools/holding-server.d.ts +54 -0
- package/dist/dev-tools/holding-server.d.ts.map +1 -0
- package/dist/dev-tools/hydration-overlay.d.ts +11 -0
- package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
- package/dist/dev-tools/index.d.ts +31 -0
- package/dist/dev-tools/index.d.ts.map +1 -0
- package/dist/dev-tools/instrumentation.d.ts +59 -0
- package/dist/dev-tools/instrumentation.d.ts.map +1 -0
- package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
- package/dist/dev-tools/logger.d.ts.map +1 -0
- package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
- package/dist/dev-tools/logs.d.ts.map +1 -0
- package/dist/dev-tools/overlay.d.ts +91 -0
- package/dist/dev-tools/overlay.d.ts.map +1 -0
- package/dist/dev-tools/stack-classifier.d.ts +34 -0
- package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
- package/dist/dev-tools/terminal.d.ts +28 -0
- package/dist/dev-tools/terminal.d.ts.map +1 -0
- package/dist/fonts/ast-walk.d.ts +68 -0
- package/dist/fonts/ast-walk.d.ts.map +1 -0
- package/dist/fonts/ast.d.ts +110 -6
- package/dist/fonts/ast.d.ts.map +1 -1
- package/dist/fonts/bundle.d.ts +50 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/fallbacks.d.ts +0 -7
- package/dist/fonts/fallbacks.d.ts.map +1 -1
- package/dist/fonts/google.d.ts +4 -2
- package/dist/fonts/google.d.ts.map +1 -1
- package/dist/fonts/local.d.ts +4 -4
- package/dist/fonts/local.d.ts.map +1 -1
- package/dist/fonts/paths.d.ts +43 -0
- package/dist/fonts/paths.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +177 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +82 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +47 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +77 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +50 -181
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9805 -14134
- package/dist/index.js.map +1 -1
- package/dist/params/codec-registry.d.ts +26 -0
- package/dist/params/codec-registry.d.ts.map +1 -0
- package/dist/params/define-schema.d.ts +81 -0
- package/dist/params/define-schema.d.ts.map +1 -0
- package/dist/params/index.d.ts +5 -0
- package/dist/params/index.d.ts.map +1 -0
- package/dist/params/index.js +34 -0
- package/dist/params/index.js.map +1 -0
- package/dist/params/resolve-schema.d.ts +34 -0
- package/dist/params/resolve-schema.d.ts.map +1 -0
- package/dist/plugin-context.d.ts +276 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +21 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +7 -3
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +47 -10
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/cache.d.ts +64 -0
- package/dist/plugins/cache.d.ts.map +1 -0
- package/dist/plugins/callsite-ast.d.ts +117 -0
- package/dist/plugins/callsite-ast.d.ts.map +1 -0
- package/dist/plugins/callsite-jsx.d.ts +35 -0
- package/dist/plugins/callsite-jsx.d.ts.map +1 -0
- package/dist/plugins/chunks.d.ts +11 -4
- package/dist/plugins/chunks.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +40 -0
- package/dist/plugins/client-chunks.d.ts.map +1 -0
- package/dist/plugins/cloudflare-wasm.d.ts +21 -0
- package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
- package/dist/plugins/content.d.ts +1 -1
- package/dist/plugins/content.d.ts.map +1 -1
- package/dist/plugins/dev-server.d.ts +17 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/entries.d.ts +28 -4
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +16 -73
- package/dist/plugins/fonts.d.ts.map +1 -1
- package/dist/plugins/mdx.d.ts +1 -1
- package/dist/plugins/mdx.d.ts.map +1 -1
- package/dist/plugins/prebuilt-capture.d.ts +60 -0
- package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
- package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
- package/dist/plugins/prebuilt.d.ts +82 -0
- package/dist/plugins/prebuilt.d.ts.map +1 -0
- package/dist/plugins/prerender-sugar.d.ts +42 -0
- package/dist/plugins/prerender-sugar.d.ts.map +1 -0
- package/dist/plugins/request-dep/analysis.d.ts +106 -0
- package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
- package/dist/plugins/request-dep/index.d.ts +75 -0
- package/dist/plugins/request-dep/index.d.ts.map +1 -0
- package/dist/plugins/request-dep/origin.d.ts +61 -0
- package/dist/plugins/request-dep/origin.d.ts.map +1 -0
- package/dist/plugins/routing.d.ts +1 -1
- package/dist/plugins/routing.d.ts.map +1 -1
- package/dist/plugins/server-bundle.d.ts.map +1 -1
- package/dist/plugins/shims.d.ts +29 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +218 -21
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen-shared.d.ts +26 -0
- package/dist/routing/codegen-shared.d.ts.map +1 -0
- package/dist/routing/codegen-types.d.ts +61 -0
- package/dist/routing/codegen-types.d.ts.map +1 -0
- package/dist/routing/codegen-write.d.ts +51 -0
- package/dist/routing/codegen-write.d.ts.map +1 -0
- package/dist/routing/codegen.d.ts +7 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/collision-probe.d.ts +104 -0
- package/dist/routing/collision-probe.d.ts.map +1 -0
- package/dist/routing/collision-spaces.d.ts +26 -0
- package/dist/routing/collision-spaces.d.ts.map +1 -0
- package/dist/routing/convention-lint.d.ts +55 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/export-detect.d.ts +72 -0
- package/dist/routing/export-detect.d.ts.map +1 -0
- package/dist/routing/file-cache.d.ts +8 -0
- package/dist/routing/file-cache.d.ts.map +1 -0
- package/dist/routing/index.d.ts +7 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +5 -2
- package/dist/routing/interception.d.ts +234 -10
- package/dist/routing/interception.d.ts.map +1 -1
- package/dist/routing/link-codegen.d.ts +105 -0
- package/dist/routing/link-codegen.d.ts.map +1 -0
- package/dist/routing/manifest-codegen.d.ts +26 -0
- package/dist/routing/manifest-codegen.d.ts.map +1 -0
- package/dist/routing/scanner.d.ts +1 -10
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/schema-validation.d.ts +35 -0
- package/dist/routing/schema-validation.d.ts.map +1 -0
- package/dist/routing/segment-classify.d.ts +114 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/segment-codegen.d.ts +38 -0
- package/dist/routing/segment-codegen.d.ts.map +1 -0
- package/dist/routing/segment-keys.d.ts +118 -0
- package/dist/routing/segment-keys.d.ts.map +1 -0
- package/dist/routing/slot-placement.d.ts +48 -0
- package/dist/routing/slot-placement.d.ts.map +1 -0
- package/dist/routing/types.d.ts +74 -26
- package/dist/routing/types.d.ts.map +1 -1
- package/dist/routing/walkers.d.ts +57 -0
- package/dist/routing/walkers.d.ts.map +1 -0
- package/dist/rsc-runtime/rsc.d.ts +1 -1
- package/dist/rsc-runtime/rsc.d.ts.map +1 -1
- package/dist/rsc-runtime/ssr.d.ts +12 -0
- package/dist/rsc-runtime/ssr.d.ts.map +1 -1
- package/dist/schema-bridge.d.ts +145 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +262 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +3 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +179 -360
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/parse-total.d.ts +81 -0
- package/dist/search-params/parse-total.d.ts.map +1 -0
- package/dist/search-params/serialize-equal.d.ts +9 -0
- package/dist/search-params/serialize-equal.d.ts.map +1 -0
- package/dist/search-params/wrappers.d.ts +76 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/server/access-gate.d.ts +26 -10
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +42 -7
- package/dist/server/action-client.d.ts.map +1 -1
- package/dist/server/action-encryption.d.ts +76 -0
- package/dist/server/action-encryption.d.ts.map +1 -0
- package/dist/server/action-handler.d.ts +35 -1
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +12 -33
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +115 -11
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/asset-headers.d.ts +8 -18
- package/dist/server/asset-headers.d.ts.map +1 -1
- package/dist/server/body-limits.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +25 -30
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/canonicalize.d.ts +10 -0
- package/dist/server/canonicalize.d.ts.map +1 -1
- package/dist/server/chain-url-parts.d.ts +82 -0
- package/dist/server/chain-url-parts.d.ts.map +1 -0
- package/dist/server/children-interception.d.ts +49 -0
- package/dist/server/children-interception.d.ts.map +1 -0
- package/dist/server/coalesce-tick.d.ts +40 -0
- package/dist/server/coalesce-tick.d.ts.map +1 -0
- package/dist/server/compress.d.ts.map +1 -1
- package/dist/server/cookie-context.d.ts +170 -0
- package/dist/server/cookie-context.d.ts.map +1 -0
- package/dist/server/cookie-parsing.d.ts +65 -0
- package/dist/server/cookie-parsing.d.ts.map +1 -0
- package/dist/server/csrf.d.ts +3 -2
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/default-status-page.d.ts +45 -0
- package/dist/server/default-status-page.d.ts.map +1 -0
- package/dist/server/deny-boundary.d.ts +247 -0
- package/dist/server/deny-boundary.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts +16 -5
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/early-hints-sender.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +13 -11
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +86 -10
- package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
- package/dist/server/fallback-error.d.ts +12 -7
- package/dist/server/fallback-error.d.ts.map +1 -1
- package/dist/server/flight-injection-state.d.ts +66 -0
- package/dist/server/flight-injection-state.d.ts.map +1 -0
- package/dist/server/flight-scripts.d.ts +42 -0
- package/dist/server/flight-scripts.d.ts.map +1 -0
- package/dist/server/form-data.d.ts +41 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/head-response.d.ts +35 -0
- package/dist/server/head-response.d.ts.map +1 -0
- package/dist/server/html-injector-core.d.ts +242 -0
- package/dist/server/html-injector-core.d.ts.map +1 -0
- package/dist/server/html-injectors.d.ts +82 -41
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +11 -47
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +183 -2906
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +51 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +4154 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +39 -7
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/metadata-collector.d.ts +74 -0
- package/dist/server/metadata-collector.d.ts.map +1 -0
- package/dist/server/metadata-routes.d.ts +60 -11
- package/dist/server/metadata-routes.d.ts.map +1 -1
- package/dist/server/metadata.d.ts +8 -0
- package/dist/server/metadata.d.ts.map +1 -1
- package/dist/server/middleware-runner.d.ts +19 -4
- package/dist/server/middleware-runner.d.ts.map +1 -1
- package/dist/server/node-stream-transforms.d.ts +119 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/param-coercion.d.ts +71 -0
- package/dist/server/param-coercion.d.ts.map +1 -0
- package/dist/server/pipeline-helpers.d.ts +77 -0
- package/dist/server/pipeline-helpers.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +59 -9
- package/dist/server/pipeline-interception.d.ts.map +1 -1
- package/dist/server/pipeline-metadata.d.ts +6 -0
- package/dist/server/pipeline-metadata.d.ts.map +1 -1
- package/dist/server/pipeline-outcome.d.ts +49 -0
- package/dist/server/pipeline-outcome.d.ts.map +1 -0
- package/dist/server/pipeline-phases.d.ts +59 -0
- package/dist/server/pipeline-phases.d.ts.map +1 -0
- package/dist/server/pipeline.d.ts +152 -19
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/port-resolution.d.ts +117 -0
- package/dist/server/port-resolution.d.ts.map +1 -0
- package/dist/server/prebuilt/cache-key.d.ts +63 -0
- package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
- package/dist/server/prebuilt/capture-state.d.ts +57 -0
- package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
- package/dist/server/prebuilt/key-discipline.d.ts +23 -0
- package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
- package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
- package/dist/server/prebuilt/overlay.d.ts +100 -0
- package/dist/server/prebuilt/overlay.d.ts.map +1 -0
- package/dist/server/prebuilt/payload-source.d.ts +79 -0
- package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
- package/dist/server/prebuilt/slots.d.ts +99 -0
- package/dist/server/prebuilt/slots.d.ts.map +1 -0
- package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
- package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
- package/dist/server/prebuilt-builder.d.ts +121 -0
- package/dist/server/prebuilt-builder.d.ts.map +1 -0
- package/dist/server/prebuilt-runtime.d.ts +111 -0
- package/dist/server/prebuilt-runtime.d.ts.map +1 -0
- package/dist/server/primitives.d.ts +100 -44
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/publish-params.d.ts +33 -0
- package/dist/server/publish-params.d.ts.map +1 -0
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/render-utils.d.ts +25 -0
- package/dist/server/render-utils.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +110 -106
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-dep.d.ts +15 -0
- package/dist/server/request-dep.d.ts.map +1 -0
- package/dist/server/route-element-builder.d.ts +74 -27
- package/dist/server/route-element-builder.d.ts.map +1 -1
- package/dist/server/route-handler.d.ts.map +1 -1
- package/dist/server/route-matcher.d.ts +38 -36
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-cache-key-guard.d.ts +78 -0
- package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
- package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
- package/dist/server/rsc-entry/api-handler.d.ts +12 -3
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
- package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
- package/dist/server/rsc-entry/error-renderer.d.ts +38 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +59 -42
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +39 -6
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/render-route.d.ts +51 -0
- package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
- package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
- package/dist/server/rsc-entry/rsc-payload.d.ts +5 -6
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +40 -3
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +36 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
- package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +130 -0
- package/dist/server/sitemap-generator.d.ts.map +1 -0
- package/dist/server/sitemap-handler.d.ts +22 -0
- package/dist/server/sitemap-handler.d.ts.map +1 -0
- package/dist/server/skippable-prefix.d.ts +26 -0
- package/dist/server/skippable-prefix.d.ts.map +1 -0
- package/dist/server/slot-interception.d.ts +80 -0
- package/dist/server/slot-interception.d.ts.map +1 -0
- package/dist/server/slot-resolver.d.ts +139 -5
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-bridge-types.d.ts +140 -0
- package/dist/server/ssr-bridge-types.d.ts.map +1 -0
- package/dist/server/ssr-entry.d.ts +1 -43
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +64 -21
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +61 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/state-tree-diff.d.ts +44 -9
- package/dist/server/state-tree-diff.d.ts.map +1 -1
- package/dist/server/static-generator.d.ts +112 -0
- package/dist/server/static-generator.d.ts.map +1 -0
- package/dist/server/static-not-found.d.ts +52 -0
- package/dist/server/static-not-found.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +26 -15
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +47 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +44 -9
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +66 -42
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/tree-match.d.ts +49 -0
- package/dist/server/tree-match.d.ts.map +1 -0
- package/dist/server/types.d.ts +77 -6
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/element-type.d.ts +40 -0
- package/dist/server/utils/element-type.d.ts.map +1 -0
- package/dist/server/utils/escape-html.d.ts +14 -0
- package/dist/server/utils/escape-html.d.ts.map +1 -0
- package/dist/server/utils/mdx-file.d.ts +15 -0
- package/dist/server/utils/mdx-file.d.ts.map +1 -0
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.d.ts.map +1 -0
- package/dist/server/workers-cache-bridge.d.ts +26 -0
- package/dist/server/workers-cache-bridge.d.ts.map +1 -0
- package/dist/shared/als-slots.d.ts +42 -0
- package/dist/shared/als-slots.d.ts.map +1 -0
- package/dist/shared/base-path.d.ts +56 -0
- package/dist/shared/base-path.d.ts.map +1 -0
- package/dist/shared/href-validation.d.ts +49 -0
- package/dist/shared/href-validation.d.ts.map +1 -0
- package/dist/shared/merge-search-params.d.ts +22 -0
- package/dist/shared/merge-search-params.d.ts.map +1 -0
- package/dist/shared/param-value.d.ts +104 -0
- package/dist/shared/param-value.d.ts.map +1 -0
- package/dist/shared/payload-root.d.ts +109 -0
- package/dist/shared/payload-root.d.ts.map +1 -0
- package/dist/shared/redirect-type.d.ts +17 -0
- package/dist/shared/redirect-type.d.ts.map +1 -0
- package/dist/shared/rsc-cache-key.d.ts +163 -0
- package/dist/shared/rsc-cache-key.d.ts.map +1 -0
- package/dist/shared/rsc-error-envelope.d.ts +25 -0
- package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
- package/dist/shared/rsc-manifest.d.ts +28 -0
- package/dist/shared/rsc-manifest.d.ts.map +1 -0
- package/dist/shared/rsc-media-type.d.ts +40 -0
- package/dist/shared/rsc-media-type.d.ts.map +1 -0
- package/dist/shared/rsc-payload-path.d.ts +42 -0
- package/dist/shared/rsc-payload-path.d.ts.map +1 -0
- package/dist/shared/segment-info.d.ts +66 -0
- package/dist/shared/segment-info.d.ts.map +1 -0
- package/dist/shared/slot-params.d.ts +52 -0
- package/dist/shared/slot-params.d.ts.map +1 -0
- package/dist/shared/static-platform-files.d.ts +71 -0
- package/dist/shared/static-platform-files.d.ts.map +1 -0
- package/dist/shims/font-google.d.ts +1 -1
- package/dist/shims/font-google.d.ts.map +1 -1
- package/dist/shims/font-google.js +42 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +26 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +20 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/headers.d.ts +53 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/image.d.ts +120 -120
- package/dist/shims/image.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +25 -12
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +10 -5
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/state-machine.d.ts +80 -0
- package/dist/utils/state-machine.d.ts.map +1 -0
- package/docs/api/30-api-server.mdx +233 -0
- package/docs/api/31-api-client.mdx +163 -0
- package/docs/api/32-api-cache.mdx +311 -0
- package/docs/api/33-api-search-params.mdx +176 -0
- package/docs/api/34-api-config.mdx +325 -0
- package/docs/api/35-api-typescript.mdx +170 -0
- package/docs/api/36-cli.mdx +170 -0
- package/docs/learn/00-introduction.mdx +109 -0
- package/docs/learn/01-quick-start.mdx +94 -0
- package/docs/learn/02-pages-and-layouts.mdx +147 -0
- package/docs/learn/03-fetching-data.mdx +211 -0
- package/docs/learn/03b-access-control.mdx +130 -0
- package/docs/learn/04-loading-states.mdx +67 -0
- package/docs/learn/04b-the-flush-point.mdx +115 -0
- package/docs/learn/05-typed-params.mdx +275 -0
- package/docs/learn/06-forms-and-actions.mdx +146 -0
- package/docs/learn/07-typed-routes.mdx +132 -0
- package/docs/learn/08-streaming.mdx +146 -0
- package/docs/learn/09-caching.mdx +252 -0
- package/docs/learn/10-middleware.mdx +157 -0
- package/docs/learn/11-error-handling.mdx +173 -0
- package/docs/learn/12-client-navigation.mdx +176 -0
- package/docs/learn/13-configuration.mdx +166 -0
- package/docs/learn/14-deploying.mdx +287 -0
- package/docs/more/01-advanced-routing.mdx +343 -0
- package/docs/more/02-advanced-forms.mdx +137 -0
- package/docs/more/03-coming-from-nextjs.mdx +186 -0
- package/docs/more/04-metadata-and-fonts.mdx +193 -0
- package/docs/more/04b-mdx.mdx +209 -0
- package/docs/more/05-content-collections.mdx +90 -0
- package/docs/more/06-instrumentation.mdx +214 -0
- package/docs/more/07-security.mdx +129 -0
- package/docs/more/08-developer-experience.mdx +134 -0
- package/docs/more/40-why-timber.mdx +50 -0
- package/docs/more/41-timber-vs-nextjs.mdx +81 -0
- package/docs/more/42-timber-vs-others.mdx +68 -0
- package/docs/more/50-ai-agent-instructions.mdx +171 -0
- package/llms.txt +55 -0
- package/package.json +108 -26
- package/src/adapters/build-output-helper.ts +351 -0
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +204 -0
- package/src/adapters/cloudflare.ts +740 -129
- package/src/adapters/compress-module.ts +101 -88
- package/src/adapters/fs-identity.ts +156 -0
- package/src/adapters/nitro.ts +320 -120
- package/src/adapters/raw-imports.d.ts +5 -0
- package/src/adapters/shared.ts +274 -0
- package/src/adapters/types.ts +28 -7
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +107 -0
- package/src/cache/fast-hash.ts +5 -0
- package/src/cache/handler-store.ts +76 -0
- package/src/cache/index.ts +114 -21
- package/src/cache/invalidation-epoch.ts +93 -0
- package/src/cache/json-lossy-check.ts +75 -0
- package/src/cache/redis-handler.ts +197 -19
- package/src/cache/singleflight.ts +64 -6
- package/src/cache/sizeof.ts +33 -0
- package/src/cache/stable-stringify.ts +65 -2
- package/src/cache/store.ts +71 -0
- package/src/cache/stores/cloudflare-kv.ts +52 -0
- package/src/cache/stores/memory.ts +125 -0
- package/src/cache/stores/redis.ts +97 -0
- package/src/cache/stores/vercel.ts +59 -0
- package/src/cache/tag-aware-handler.ts +237 -0
- package/src/cache/timber-cache.ts +161 -36
- package/src/cdn/cloudflare-purge.ts +50 -0
- package/src/cdn/fastly-purge.ts +63 -0
- package/src/cdn/headers.ts +153 -0
- package/src/cdn/index.ts +17 -0
- package/src/cdn/purge-store.ts +34 -0
- package/src/cdn/workers-cache-purge.ts +30 -0
- package/src/cli-check.ts +458 -0
- package/src/cli-schema-sync.ts +401 -0
- package/src/cli.ts +221 -53
- package/src/client/browser-dev.ts +156 -1
- package/src/client/browser-entry/action-dispatch.ts +130 -0
- package/src/client/browser-entry/hmr.ts +70 -0
- package/src/client/browser-entry/hydrate.ts +198 -0
- package/src/client/browser-entry/index.ts +121 -0
- package/src/client/browser-entry/post-hydration.ts +122 -0
- package/src/client/browser-entry/router-init.ts +342 -0
- package/src/client/browser-entry/rsc-stream.ts +166 -0
- package/src/client/browser-entry/scroll.ts +50 -0
- package/src/client/error-boundary.tsx +210 -36
- package/src/client/error-reconstituter.tsx +79 -0
- package/src/client/form.tsx +31 -32
- package/src/client/history.ts +29 -7
- package/src/client/index.ts +78 -45
- package/src/client/internal.ts +59 -0
- package/src/client/link.tsx +397 -150
- package/src/client/navigation-api.ts +345 -0
- package/src/client/navigation-commit.ts +197 -0
- package/src/client/navigation-context.ts +43 -62
- package/src/client/navigation-root.tsx +580 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/params-context.ts +192 -0
- package/src/client/router-effects.ts +231 -0
- package/src/client/router-lifecycle.ts +288 -0
- package/src/client/router-pipeline.ts +393 -0
- package/src/client/router-ref.ts +2 -2
- package/src/client/router-skew.ts +30 -0
- package/src/client/router-types.ts +230 -0
- package/src/client/router.ts +339 -410
- package/src/client/rsc-fetch.ts +530 -73
- package/src/client/segment-cache.ts +224 -38
- package/src/client/segment-outlet.tsx +141 -0
- package/src/client/segment-update-context.ts +42 -0
- package/src/client/shallow-url.ts +22 -0
- package/src/client/slot-context.ts +50 -0
- package/src/client/slot-outlet.tsx +22 -0
- package/src/client/slot-provider.tsx +32 -0
- package/src/client/ssr-data.ts +21 -6
- package/src/client/stale-client.ts +191 -0
- package/src/client/state.ts +19 -5
- package/src/client/top-loader.tsx +13 -10
- package/src/client/unload-guard.ts +34 -2
- package/src/client/use-cookie.ts +69 -17
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-pathname.ts +1 -0
- package/src/client/use-pending-navigation.ts +40 -0
- package/src/client/use-query-states.ts +206 -36
- package/src/client/use-router.ts +5 -2
- package/src/client/use-search-params.ts +31 -44
- package/src/client/{use-params.ts → use-segment-params.ts} +52 -25
- package/src/codec.ts +149 -0
- package/src/config-types.ts +282 -0
- package/src/config-validation.ts +330 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +222 -53
- package/src/cookies/index.ts +12 -1
- package/src/cookies/json-cookie.ts +105 -0
- package/src/cookies/validation.ts +192 -0
- package/src/dev-tools/404-page.ts +286 -0
- package/src/dev-tools/browser-logs.ts +55 -0
- package/src/dev-tools/dev-page-shell.ts +260 -0
- package/src/dev-tools/error-page.ts +331 -0
- package/src/dev-tools/holding-server.ts +187 -0
- package/src/dev-tools/hydration-overlay.ts +158 -0
- package/src/dev-tools/index.ts +83 -0
- package/src/dev-tools/instrumentation.ts +213 -0
- package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
- package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
- package/src/dev-tools/overlay.ts +469 -0
- package/src/dev-tools/stack-classifier.ts +75 -0
- package/src/dev-tools/terminal.ts +182 -0
- package/src/fonts/ast-walk.ts +235 -0
- package/src/fonts/ast.ts +477 -126
- package/src/fonts/bundle.ts +138 -0
- package/src/fonts/dev-middleware.ts +85 -0
- package/src/fonts/fallbacks.ts +0 -23
- package/src/fonts/google.ts +100 -18
- package/src/fonts/local.ts +9 -8
- package/src/fonts/paths.ts +58 -0
- package/src/fonts/pipeline.ts +348 -0
- package/src/fonts/transform.ts +311 -0
- package/src/fonts/types.ts +52 -1
- package/src/fonts/virtual-modules.ts +179 -0
- package/src/index.ts +468 -353
- package/src/params/codec-registry.ts +34 -0
- package/src/params/define-schema.ts +115 -0
- package/src/params/index.ts +17 -0
- package/src/params/resolve-schema.ts +84 -0
- package/src/plugin-context.ts +503 -0
- package/src/plugins/adapter-build.ts +229 -7
- package/src/plugins/build-manifest.ts +201 -26
- package/src/plugins/build-report.ts +259 -47
- package/src/plugins/cache.ts +243 -0
- package/src/plugins/callsite-ast.ts +472 -0
- package/src/plugins/callsite-jsx.ts +243 -0
- package/src/plugins/chunks.ts +74 -5
- package/src/plugins/client-chunks.ts +185 -0
- package/src/plugins/cloudflare-wasm.ts +141 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-server.ts +284 -94
- package/src/plugins/entries.ts +138 -16
- package/src/plugins/fonts.ts +228 -660
- package/src/plugins/mdx.ts +47 -10
- package/src/plugins/prebuilt-capture.ts +217 -0
- package/src/plugins/prebuilt-options-analysis.ts +175 -0
- package/src/plugins/prebuilt.ts +655 -0
- package/src/plugins/prerender-sugar.ts +328 -0
- package/src/plugins/request-dep/analysis.ts +447 -0
- package/src/plugins/request-dep/index.ts +376 -0
- package/src/plugins/request-dep/origin.ts +310 -0
- package/src/plugins/routing.ts +268 -277
- package/src/plugins/server-bundle.ts +89 -12
- package/src/plugins/shims.ts +240 -64
- package/src/plugins/static-build.ts +704 -66
- package/src/routing/codegen-shared.ts +39 -0
- package/src/routing/codegen-types.ts +62 -0
- package/src/routing/codegen-write.ts +139 -0
- package/src/routing/codegen.ts +339 -231
- package/src/routing/collision-probe.ts +438 -0
- package/src/routing/collision-spaces.ts +281 -0
- package/src/routing/convention-lint.ts +493 -0
- package/src/routing/export-detect.ts +448 -0
- package/src/routing/file-cache.ts +23 -0
- package/src/routing/index.ts +10 -1
- package/src/routing/interception.ts +894 -67
- package/src/routing/link-codegen.ts +280 -0
- package/src/routing/manifest-codegen.ts +226 -0
- package/src/routing/scanner.ts +368 -218
- package/src/routing/schema-validation.ts +155 -0
- package/src/routing/segment-classify.ts +280 -0
- package/src/routing/segment-codegen.ts +98 -0
- package/src/routing/segment-keys.ts +186 -0
- package/src/routing/slot-placement.ts +97 -0
- package/src/routing/types.ts +75 -26
- package/src/routing/walkers.ts +98 -0
- package/src/rsc-runtime/rsc.ts +9 -0
- package/src/rsc-runtime/ssr.ts +50 -0
- package/src/rsc-runtime/vendor-types.d.ts +7 -0
- package/src/schema-bridge.ts +380 -0
- package/src/search-params/define.ts +677 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/parse-total.ts +91 -0
- package/src/search-params/serialize-equal.ts +14 -0
- package/src/search-params/wrappers.ts +150 -0
- package/src/server/access-gate.tsx +121 -51
- package/src/server/action-client.ts +120 -29
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +230 -43
- package/src/server/actions.ts +54 -57
- package/src/server/als-registry.ts +159 -20
- package/src/server/asset-headers.ts +15 -37
- package/src/server/body-limits.ts +10 -2
- package/src/server/build-manifest.ts +33 -57
- package/src/server/canonicalize.ts +6 -3
- package/src/server/chain-url-parts.ts +163 -0
- package/src/server/children-interception.ts +115 -0
- package/src/server/coalesce-tick.ts +75 -0
- package/src/server/compress.ts +43 -8
- package/src/server/cookie-context.ts +484 -0
- package/src/server/cookie-parsing.ts +163 -0
- package/src/server/csrf.ts +39 -6
- package/src/server/default-logger.ts +99 -0
- package/src/server/default-status-page.ts +127 -0
- package/src/server/deny-boundary.ts +516 -0
- package/src/server/deny-renderer.ts +181 -101
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/early-hints-sender.ts +3 -2
- package/src/server/early-hints.ts +37 -27
- package/src/server/error-boundary-wrapper.ts +170 -44
- package/src/server/fallback-error.ts +79 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/form-data.ts +124 -12
- package/src/server/head-response.ts +54 -0
- package/src/server/html-injector-core.ts +495 -0
- package/src/server/html-injectors.ts +271 -254
- package/src/server/index.ts +32 -184
- package/src/server/internal.ts +181 -0
- package/src/server/logger.ts +72 -36
- package/src/server/metadata-collector.ts +189 -0
- package/src/server/metadata-routes.ts +205 -24
- package/src/server/metadata.ts +21 -0
- package/src/server/middleware-runner.ts +31 -4
- package/src/server/node-stream-transforms.ts +336 -0
- package/src/server/param-coercion.ts +189 -0
- package/src/server/pipeline-helpers.ts +159 -0
- package/src/server/pipeline-interception.ts +109 -33
- package/src/server/pipeline-metadata.ts +14 -0
- package/src/server/pipeline-outcome.ts +196 -0
- package/src/server/pipeline-phases.ts +599 -0
- package/src/server/pipeline.ts +322 -382
- package/src/server/port-resolution.ts +215 -0
- package/src/server/prebuilt/cache-key.ts +299 -0
- package/src/server/prebuilt/capture-state.ts +89 -0
- package/src/server/prebuilt/key-discipline.ts +53 -0
- package/src/server/prebuilt/manifest-tag-index.ts +46 -0
- package/src/server/prebuilt/overlay.ts +256 -0
- package/src/server/prebuilt/payload-source.ts +202 -0
- package/src/server/prebuilt/slots.ts +190 -0
- package/src/server/prebuilt/synthetic-store.ts +122 -0
- package/src/server/prebuilt-builder.ts +804 -0
- package/src/server/prebuilt-runtime.ts +817 -0
- package/src/server/primitives.ts +174 -90
- package/src/server/publish-params.ts +42 -0
- package/src/server/render-timeout.ts +108 -0
- package/src/server/render-utils.ts +31 -0
- package/src/server/request-context.ts +243 -333
- package/src/server/request-dep.ts +37 -0
- package/src/server/route-element-builder.ts +666 -308
- package/src/server/route-handler.ts +39 -12
- package/src/server/route-matcher.ts +162 -269
- package/src/server/rsc-cache-key-guard.ts +164 -0
- package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
- package/src/server/rsc-entry/api-handler.ts +67 -32
- package/src/server/rsc-entry/deny-fallback.ts +93 -0
- package/src/server/rsc-entry/error-renderer.ts +370 -94
- package/src/server/rsc-entry/helpers.ts +226 -95
- package/src/server/rsc-entry/index.ts +357 -330
- package/src/server/rsc-entry/render-route.ts +308 -0
- package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
- package/src/server/rsc-entry/rsc-payload.ts +188 -55
- package/src/server/rsc-entry/rsc-stream.ts +122 -18
- package/src/server/rsc-entry/ssr-bridge.ts +18 -5
- package/src/server/rsc-entry/ssr-renderer.ts +299 -80
- package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/server-only-guard-noop.js +3 -0
- package/src/server/sitemap-generator.ts +337 -0
- package/src/server/sitemap-handler.ts +157 -0
- package/src/server/skippable-prefix.ts +74 -0
- package/src/server/slot-interception.ts +168 -0
- package/src/server/slot-resolver.ts +678 -294
- package/src/server/ssr-bridge-types.ts +145 -0
- package/src/server/ssr-entry.ts +216 -78
- package/src/server/ssr-render.ts +345 -82
- package/src/server/ssr-wrappers.tsx +142 -0
- package/src/server/state-tree-diff.ts +85 -30
- package/src/server/static-generator.ts +715 -0
- package/src/server/static-not-found.ts +134 -0
- package/src/server/status-code-resolver.ts +107 -148
- package/src/server/stream-utils.ts +288 -0
- package/src/server/tracing.ts +126 -14
- package/src/server/tree-builder.ts +99 -168
- package/src/server/tree-match.ts +262 -0
- package/src/server/types.ts +84 -9
- package/src/server/utils/element-type.ts +72 -0
- package/src/server/utils/escape-html.ts +20 -0
- package/src/server/utils/mdx-file.ts +22 -0
- package/src/server/version-skew.ts +104 -0
- package/src/server/workers-cache-bridge.ts +33 -0
- package/src/shared/als-slots.ts +74 -0
- package/src/shared/base-path.ts +80 -0
- package/src/shared/href-validation.ts +159 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shared/param-value.ts +281 -0
- package/src/shared/payload-root.ts +152 -0
- package/src/shared/redirect-type.ts +17 -0
- package/src/shared/rsc-cache-key.ts +269 -0
- package/src/shared/rsc-error-envelope.ts +31 -0
- package/src/shared/rsc-manifest.ts +29 -0
- package/src/shared/rsc-media-type.ts +43 -0
- package/src/shared/rsc-payload-path.ts +45 -0
- package/src/shared/segment-info.ts +67 -0
- package/src/shared/slot-params.ts +110 -0
- package/src/shared/static-platform-files.ts +75 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +122 -1
- package/src/shims/navigation-client.ts +36 -32
- package/src/shims/navigation.ts +10 -7
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-B3Gypr3D.js +0 -108
- package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
- package/dist/_chunks/format-RyoGQL74.js +0 -164
- package/dist/_chunks/format-RyoGQL74.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js +0 -676
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js +0 -153
- package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
- package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
- package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
- package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
- package/dist/_chunks/tracing-CemImE6h.js +0 -187
- package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
- package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
- package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
- package/dist/_chunks/use-query-states-D5KaffOK.js +0 -109
- package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
- package/dist/adapters/cloudflare.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/register-cached-function.d.ts +0 -17
- package/dist/cache/register-cached-function.d.ts.map +0 -1
- package/dist/client/browser-entry.d.ts +0 -21
- package/dist/client/browser-entry.d.ts.map +0 -1
- package/dist/client/error-boundary.js.map +0 -1
- package/dist/client/head.d.ts +0 -16
- package/dist/client/head.d.ts.map +0 -1
- package/dist/client/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/segment-merger.d.ts +0 -119
- package/dist/client/segment-merger.d.ts.map +0 -1
- package/dist/client/stale-reload.d.ts +0 -44
- package/dist/client/stale-reload.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts +0 -74
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts +0 -26
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/client/use-params.d.ts.map +0 -1
- package/dist/plugins/cache-transform.d.ts +0 -36
- package/dist/plugins/cache-transform.d.ts.map +0 -1
- package/dist/plugins/dev-error-overlay.d.ts +0 -60
- package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
- package/dist/plugins/dev-logs.d.ts.map +0 -1
- package/dist/plugins/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.d.ts.map +0 -1
- package/dist/plugins/server-action-exports.d.ts +0 -26
- package/dist/plugins/server-action-exports.d.ts.map +0 -1
- package/dist/routing/status-file-lint.d.ts +0 -33
- package/dist/routing/status-file-lint.d.ts.map +0 -1
- package/dist/search-params/analyze.d.ts +0 -54
- package/dist/search-params/analyze.d.ts.map +0 -1
- package/dist/search-params/builtin-codecs.d.ts +0 -105
- package/dist/search-params/builtin-codecs.d.ts.map +0 -1
- package/dist/search-params/codecs.d.ts +0 -53
- package/dist/search-params/codecs.d.ts.map +0 -1
- package/dist/search-params/create.d.ts +0 -106
- package/dist/search-params/create.d.ts.map +0 -1
- package/dist/search-params/registry.d.ts +0 -20
- package/dist/search-params/registry.d.ts.map +0 -1
- package/dist/server/client-module-map.d.ts +0 -47
- package/dist/server/client-module-map.d.ts.map +0 -1
- package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
- package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
- package/dist/server/dev-logger.d.ts.map +0 -1
- package/dist/server/dev-span-processor.d.ts +0 -29
- package/dist/server/dev-span-processor.d.ts.map +0 -1
- package/dist/server/dev-warnings.d.ts +0 -129
- package/dist/server/dev-warnings.d.ts.map +0 -1
- package/dist/server/flush.d.ts +0 -74
- package/dist/server/flush.d.ts.map +0 -1
- package/dist/server/manifest-status-resolver.d.ts +0 -58
- package/dist/server/manifest-status-resolver.d.ts.map +0 -1
- package/dist/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/utils/directive-parser.d.ts +0 -70
- package/dist/utils/directive-parser.d.ts.map +0 -1
- package/src/cache/register-cached-function.ts +0 -103
- package/src/client/browser-entry.ts +0 -678
- package/src/client/head.ts +0 -61
- package/src/client/link-status-provider.tsx +0 -30
- package/src/client/segment-merger.ts +0 -339
- package/src/client/stale-reload.ts +0 -87
- package/src/client/transition-root.tsx +0 -166
- package/src/client/use-navigation-pending.ts +0 -38
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dev-error-overlay.ts +0 -230
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/plugins/server-action-exports.ts +0 -220
- package/src/routing/status-file-lint.ts +0 -112
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/codecs.ts +0 -153
- package/src/search-params/create.ts +0 -321
- package/src/search-params/registry.ts +0 -31
- package/src/server/client-module-map.ts +0 -58
- package/src/server/dev-fetch-instrumentation.ts +0 -96
- package/src/server/dev-span-processor.ts +0 -78
- package/src/server/dev-warnings.ts +0 -283
- package/src/server/flush.ts +0 -182
- package/src/server/manifest-status-resolver.ts +0 -215
- package/src/server/prerender.ts +0 -139
- package/src/utils/directive-parser.ts +0 -529
package/src/adapters/nitro.ts
CHANGED
|
@@ -5,28 +5,18 @@
|
|
|
5
5
|
// compression, graceful shutdown, static file serving, and platform quirks.
|
|
6
6
|
// See design/11-platform.md and design/25-production-deployments.md.
|
|
7
7
|
|
|
8
|
-
import { writeFile, readFile,
|
|
8
|
+
import { writeFile, readFile, cp, glob } from 'node:fs/promises';
|
|
9
9
|
import { execFile } from 'node:child_process';
|
|
10
|
-
import { join, relative } from 'node:path';
|
|
10
|
+
import { join, relative, dirname, basename } from 'node:path';
|
|
11
11
|
import type { TimberPlatformAdapter, TimberConfig } from './types';
|
|
12
12
|
import { generateCompressModule } from './compress-module.js';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return `# Auto-generated by @timber-js/app — static asset cache headers.
|
|
21
|
-
# See design/25-production-deployments.md §"CDN / Edge Cache"
|
|
22
|
-
|
|
23
|
-
/assets/*
|
|
24
|
-
Cache-Control: ${IMMUTABLE_CACHE}
|
|
25
|
-
|
|
26
|
-
/*
|
|
27
|
-
Cache-Control: ${STATIC_CACHE}
|
|
28
|
-
`;
|
|
29
|
-
}
|
|
13
|
+
import { adapterBase, IMMUTABLE_CACHE, generateHeadersFile } from './shared.js';
|
|
14
|
+
import {
|
|
15
|
+
runSharedBuildSteps,
|
|
16
|
+
buildStaticDirectoryOutput,
|
|
17
|
+
findUnhashedStaticFiles,
|
|
18
|
+
writeHeadersFile,
|
|
19
|
+
} from './build-output-helper.js';
|
|
30
20
|
|
|
31
21
|
// ─── Presets ─────────────────────────────────────────────────────────────────
|
|
32
22
|
|
|
@@ -53,6 +43,12 @@ interface PresetConfig {
|
|
|
53
43
|
nitroPreset: string;
|
|
54
44
|
/** Output directory name within the build dir. */
|
|
55
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;
|
|
56
52
|
/** Whether the runtime supports waitUntil. */
|
|
57
53
|
supportsWaitUntil: boolean;
|
|
58
54
|
/** Whether the runtime supports application-level 103 Early Hints. */
|
|
@@ -67,6 +63,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
67
63
|
'vercel': {
|
|
68
64
|
nitroPreset: 'vercel',
|
|
69
65
|
outputDir: '.vercel/output',
|
|
66
|
+
serverBundleDir: 'functions/__server.func',
|
|
70
67
|
supportsWaitUntil: true,
|
|
71
68
|
supportsEarlyHints: false,
|
|
72
69
|
runtimeName: 'vercel',
|
|
@@ -75,6 +72,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
75
72
|
'vercel-edge': {
|
|
76
73
|
nitroPreset: 'vercel-edge',
|
|
77
74
|
outputDir: '.vercel/output',
|
|
75
|
+
serverBundleDir: 'functions/__server.func',
|
|
78
76
|
supportsWaitUntil: true,
|
|
79
77
|
supportsEarlyHints: false,
|
|
80
78
|
runtimeName: 'vercel-edge',
|
|
@@ -82,6 +80,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
82
80
|
'netlify': {
|
|
83
81
|
nitroPreset: 'netlify',
|
|
84
82
|
outputDir: '.netlify/functions-internal',
|
|
83
|
+
serverBundleDir: 'server',
|
|
85
84
|
supportsWaitUntil: false,
|
|
86
85
|
supportsEarlyHints: false,
|
|
87
86
|
runtimeName: 'netlify',
|
|
@@ -89,6 +88,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
89
88
|
'netlify-edge': {
|
|
90
89
|
nitroPreset: 'netlify-edge',
|
|
91
90
|
outputDir: '.netlify/edge-functions',
|
|
91
|
+
serverBundleDir: 'server',
|
|
92
92
|
supportsWaitUntil: true,
|
|
93
93
|
supportsEarlyHints: false,
|
|
94
94
|
runtimeName: 'netlify-edge',
|
|
@@ -96,6 +96,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
96
96
|
'aws-lambda': {
|
|
97
97
|
nitroPreset: 'aws-lambda',
|
|
98
98
|
outputDir: '.output',
|
|
99
|
+
serverBundleDir: 'server',
|
|
99
100
|
supportsWaitUntil: false,
|
|
100
101
|
supportsEarlyHints: false,
|
|
101
102
|
runtimeName: 'aws-lambda',
|
|
@@ -103,6 +104,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
103
104
|
'deno-deploy': {
|
|
104
105
|
nitroPreset: 'deno-deploy',
|
|
105
106
|
outputDir: '.output',
|
|
107
|
+
serverBundleDir: 'server',
|
|
106
108
|
supportsWaitUntil: true,
|
|
107
109
|
supportsEarlyHints: false,
|
|
108
110
|
runtimeName: 'deno-deploy',
|
|
@@ -110,6 +112,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
110
112
|
'azure-functions': {
|
|
111
113
|
nitroPreset: 'azure-functions',
|
|
112
114
|
outputDir: '.output',
|
|
115
|
+
serverBundleDir: 'server',
|
|
113
116
|
supportsWaitUntil: false,
|
|
114
117
|
supportsEarlyHints: false,
|
|
115
118
|
runtimeName: 'azure-functions',
|
|
@@ -117,6 +120,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
117
120
|
'node-server': {
|
|
118
121
|
nitroPreset: 'node-server',
|
|
119
122
|
outputDir: '.output',
|
|
123
|
+
serverBundleDir: 'server',
|
|
120
124
|
supportsWaitUntil: true,
|
|
121
125
|
// Disabled by default: most node-server deployments sit behind a
|
|
122
126
|
// reverse proxy (nginx, caddy, traefik) that doesn't support 103
|
|
@@ -131,6 +135,7 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
131
135
|
'bun': {
|
|
132
136
|
nitroPreset: 'bun',
|
|
133
137
|
outputDir: '.output',
|
|
138
|
+
serverBundleDir: 'server',
|
|
134
139
|
supportsWaitUntil: true,
|
|
135
140
|
// Disabled for same reason as node-server — reverse proxies choke on 103.
|
|
136
141
|
// Link headers on the 200 response are converted to 103 by CDNs.
|
|
@@ -141,6 +146,15 @@ const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
|
|
|
141
146
|
|
|
142
147
|
// ─── Options ─────────────────────────────────────────────────────────────────
|
|
143
148
|
|
|
149
|
+
/**
|
|
150
|
+
* Static deploy target for `output: 'static'` mode.
|
|
151
|
+
*
|
|
152
|
+
* Controls platform-specific files written alongside the static output:
|
|
153
|
+
* - `'github-pages'` — writes `.nojekyll` to skip Jekyll processing
|
|
154
|
+
* - `'generic'` — no extra files (default)
|
|
155
|
+
*/
|
|
156
|
+
export type StaticTarget = 'github-pages' | 'generic';
|
|
157
|
+
|
|
144
158
|
/** Options for the Nitro adapter. */
|
|
145
159
|
export interface NitroAdapterOptions {
|
|
146
160
|
/**
|
|
@@ -166,6 +180,13 @@ export interface NitroAdapterOptions {
|
|
|
166
180
|
*/
|
|
167
181
|
compress?: boolean;
|
|
168
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Static deploy target for `output: 'static'` mode. Controls
|
|
185
|
+
* platform-specific files (e.g. `.nojekyll` for GitHub Pages).
|
|
186
|
+
* @default 'generic'
|
|
187
|
+
*/
|
|
188
|
+
staticTarget?: StaticTarget;
|
|
189
|
+
|
|
169
190
|
/**
|
|
170
191
|
* Additional Nitro configuration to merge into the generated config.
|
|
171
192
|
* Overrides default values for the selected preset.
|
|
@@ -195,46 +216,63 @@ export function nitro(options: NitroAdapterOptions = {}): TimberPlatformAdapter
|
|
|
195
216
|
const preset = options.preset ?? 'node-server';
|
|
196
217
|
const compress = options.compress ?? true;
|
|
197
218
|
const presetConfig = PRESET_CONFIGS[preset];
|
|
198
|
-
const pendingPromises: Promise<unknown>[] = [];
|
|
199
|
-
|
|
200
219
|
return {
|
|
201
220
|
name: `nitro-${preset}`,
|
|
202
221
|
|
|
203
222
|
async buildOutput(config: TimberConfig, buildDir: string) {
|
|
204
223
|
const outDir = join(buildDir, 'nitro');
|
|
205
|
-
await mkdir(outDir, { recursive: true });
|
|
206
|
-
|
|
207
|
-
// Copy client assets to public directory.
|
|
208
|
-
// When client JavaScript is disabled, skip .js files — only CSS,
|
|
209
|
-
// fonts, images, and other static assets are needed.
|
|
210
|
-
const clientDir = join(buildDir, 'client');
|
|
211
|
-
const publicDir = join(outDir, 'public');
|
|
212
|
-
await mkdir(publicDir, { recursive: true });
|
|
213
|
-
await cp(clientDir, publicDir, {
|
|
214
|
-
recursive: true,
|
|
215
|
-
filter: config.clientJavascriptDisabled ? (src: string) => !src.endsWith('.js') : undefined,
|
|
216
|
-
}).catch(() => {
|
|
217
|
-
// Client dir may not exist when client JavaScript is disabled
|
|
218
|
-
});
|
|
219
224
|
|
|
220
|
-
//
|
|
221
|
-
//
|
|
222
|
-
|
|
225
|
+
// ── Static mode: plain directory output ────────────────────────
|
|
226
|
+
// No Nitro server — just pre-rendered HTML + client assets.
|
|
227
|
+
if (config.output === 'static' && config.staticPagesDir) {
|
|
228
|
+
await buildStaticDirectoryOutput(config, buildDir, outDir, 'public');
|
|
229
|
+
const publicDir = join(outDir, 'public');
|
|
230
|
+
|
|
231
|
+
// Write _headers for cache control + extensionless Content-Type.
|
|
232
|
+
// Netlify supports the _headers convention just like Cloudflare.
|
|
233
|
+
await writeHeadersFile(publicDir, config, await findUnhashedStaticFiles(publicDir));
|
|
234
|
+
|
|
235
|
+
// Platform-specific files for static deploy targets.
|
|
236
|
+
const target = options.staticTarget ?? 'generic';
|
|
237
|
+
if (target === 'github-pages') {
|
|
238
|
+
// Deploy-from-a-branch runs Jekyll, which drops `_`-prefixed paths —
|
|
239
|
+
// every `_rsc/` payload. Written unconditionally: GitHub reads only
|
|
240
|
+
// that the file exists, never its contents.
|
|
241
|
+
await writeFile(join(publicDir, '.nojekyll'), '');
|
|
242
|
+
// GitHub Pages doesn't support _redirects files. Warn if any
|
|
243
|
+
// redirects were generated — those routes will 404 on GH Pages.
|
|
244
|
+
try {
|
|
245
|
+
const redirects = await readFile(join(publicDir, '_redirects'), 'utf-8');
|
|
246
|
+
if (redirects.trim().length > 0) {
|
|
247
|
+
console.warn(
|
|
248
|
+
`[timber] Warning: GitHub Pages does not support _redirects files. ` +
|
|
249
|
+
`Redirect rules from middleware/proxy will not work on this platform.`
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
} catch {
|
|
253
|
+
// No _redirects file — nothing to warn about
|
|
254
|
+
}
|
|
255
|
+
}
|
|
223
256
|
|
|
224
|
-
|
|
225
|
-
if (config.manifestInit) {
|
|
226
|
-
await writeFile(join(outDir, '_timber-manifest-init.js'), config.manifestInit);
|
|
257
|
+
return;
|
|
227
258
|
}
|
|
228
259
|
|
|
229
|
-
//
|
|
260
|
+
// Steps 1–5: shared across all adapters (mkdir, copy client/rsc/ssr,
|
|
261
|
+
// write _headers, write manifest-init).
|
|
262
|
+
await runSharedBuildSteps({
|
|
263
|
+
config,
|
|
264
|
+
buildDir,
|
|
265
|
+
outDir,
|
|
266
|
+
publicDirName: 'public',
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// Write runtime helper modules used by the preview server.
|
|
230
270
|
// See design/25-production-deployments.md — self-hosted deployments
|
|
231
271
|
// need application-level compression (Cloudflare handles it at the edge).
|
|
232
|
-
await writeFile(join(outDir, '_compress.mjs'), generateCompressModule());
|
|
272
|
+
await writeFile(join(outDir, '_compress.mjs'), await generateCompressModule());
|
|
233
273
|
|
|
234
|
-
//
|
|
235
|
-
|
|
236
|
-
await cp(join(buildDir, 'rsc'), join(outDir, 'rsc'), { recursive: true });
|
|
237
|
-
await cp(join(buildDir, 'ssr'), join(outDir, 'ssr'), { recursive: true }).catch(() => {});
|
|
274
|
+
// Web→Node response bridge with backpressure. See TIM-1154.
|
|
275
|
+
await writeFile(join(outDir, '_send-response.mjs'), generateSendResponseModule());
|
|
238
276
|
|
|
239
277
|
// Prepend the manifest assignment directly into the RSC entry so
|
|
240
278
|
// globalThis.__TIMBER_BUILD_MANIFEST__ is set before any module reads it.
|
|
@@ -253,7 +291,29 @@ export function nitro(options: NitroAdapterOptions = {}): TimberPlatformAdapter
|
|
|
253
291
|
// Run the Nitro build to produce a production-ready server bundle.
|
|
254
292
|
// The output goes to dist/nitro/.output/server/index.mjs (for node-server preset).
|
|
255
293
|
// Config is passed programmatically — no nitro.config.ts file needed.
|
|
256
|
-
await runNitroBuild(outDir, preset, options.nitroConfig);
|
|
294
|
+
const { serverDir } = await runNitroBuild(outDir, preset, options.nitroConfig);
|
|
295
|
+
|
|
296
|
+
// Copy prebuilt flight payloads from the canonical build source
|
|
297
|
+
// (buildDir/prebuilt, cleaned by the prebuilt plugin each build) into
|
|
298
|
+
// the Nitro output. The RSC entry resolves `../prebuilt/` relative to
|
|
299
|
+
// its bundled chunk (<serverDir>/_chunks/), so prebuilt/ must live at
|
|
300
|
+
// <serverDir>/prebuilt/. serverDir is the resolved path from Nitro
|
|
301
|
+
// (honors user overrides via nitroConfig.output.serverDir).
|
|
302
|
+
const prebuiltSrc = join(buildDir, 'prebuilt');
|
|
303
|
+
await cp(prebuiltSrc, join(serverDir, 'prebuilt'), {
|
|
304
|
+
recursive: true,
|
|
305
|
+
}).catch((e: NodeJS.ErrnoException) => {
|
|
306
|
+
if (e.code !== 'ENOENT') throw e;
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
// Vercel with functionRules clones __server.func to per-route .func
|
|
310
|
+
// directories during the Nitro build. Copy prebuilt into those clones
|
|
311
|
+
// so requests routed to them also resolve ../prebuilt correctly.
|
|
312
|
+
if (preset === 'vercel' || preset === 'vercel-edge') {
|
|
313
|
+
const functionsDir = dirname(serverDir);
|
|
314
|
+
const baseFuncName = basename(serverDir);
|
|
315
|
+
await copyPrebuiltToVercelFuncClones(functionsDir, prebuiltSrc, baseFuncName);
|
|
316
|
+
}
|
|
257
317
|
},
|
|
258
318
|
|
|
259
319
|
// Only presets that produce a locally-runnable server get preview().
|
|
@@ -272,15 +332,6 @@ export function nitro(options: NitroAdapterOptions = {}): TimberPlatformAdapter
|
|
|
272
332
|
await spawnNitroPreview(command, [scriptPath], join(buildDir, 'nitro'));
|
|
273
333
|
}
|
|
274
334
|
: undefined,
|
|
275
|
-
|
|
276
|
-
waitUntil: presetConfig.supportsWaitUntil
|
|
277
|
-
? (promise: Promise<unknown>) => {
|
|
278
|
-
const tracked = promise.catch((err) => {
|
|
279
|
-
console.error('[timber] waitUntil promise rejected:', err);
|
|
280
|
-
});
|
|
281
|
-
pendingPromises.push(tracked);
|
|
282
|
-
}
|
|
283
|
-
: undefined,
|
|
284
335
|
};
|
|
285
336
|
}
|
|
286
337
|
|
|
@@ -291,8 +342,7 @@ export function generateNitroEntry(
|
|
|
291
342
|
buildDir: string,
|
|
292
343
|
outDir: string,
|
|
293
344
|
preset: NitroPreset,
|
|
294
|
-
compress = true
|
|
295
|
-
hasManifestInit = false
|
|
345
|
+
compress = true
|
|
296
346
|
): string {
|
|
297
347
|
// The RSC entry is the main request handler — it exports the fetch handler as default.
|
|
298
348
|
// rsc/ is copied into the nitro dir so the import is local.
|
|
@@ -349,11 +399,6 @@ export function generateNitroEntry(
|
|
|
349
399
|
handlerCall = ` const webResponse = await handler(webRequest)`;
|
|
350
400
|
}
|
|
351
401
|
|
|
352
|
-
// Build manifest init must be imported before the handler so that
|
|
353
|
-
// globalThis.__TIMBER_BUILD_MANIFEST__ is set when the virtual module evaluates.
|
|
354
|
-
// ESM guarantees imports are evaluated in order.
|
|
355
|
-
const manifestImport = hasManifestInit ? "import './_timber-manifest-init.js'\n" : '';
|
|
356
|
-
|
|
357
402
|
// Import runWithWaitUntil only when the preset supports it.
|
|
358
403
|
const waitUntilImport = supportsWaitUntil ? ', runWithWaitUntil' : '';
|
|
359
404
|
|
|
@@ -363,7 +408,7 @@ export function generateNitroEntry(
|
|
|
363
408
|
return `// Generated by @timber-js/app/adapters/nitro
|
|
364
409
|
// Do not edit — this file is regenerated on each build.
|
|
365
410
|
|
|
366
|
-
|
|
411
|
+
import handler, { runWithEarlyHintsSender${waitUntilImport} } from '${serverEntryRelative}'
|
|
367
412
|
${compressImport}
|
|
368
413
|
// Set TIMBER_RUNTIME for instrumentation.ts conditional SDK initialization.
|
|
369
414
|
// See design/25-production-deployments.md §"TIMBER_RUNTIME".
|
|
@@ -383,37 +428,6 @@ ${handlerCall}
|
|
|
383
428
|
`;
|
|
384
429
|
}
|
|
385
430
|
|
|
386
|
-
/** @internal Exported for testing. */
|
|
387
|
-
export function generateNitroConfig(
|
|
388
|
-
preset: NitroPreset,
|
|
389
|
-
userConfig?: Record<string, unknown>
|
|
390
|
-
): string {
|
|
391
|
-
const presetConfig = PRESET_CONFIGS[preset];
|
|
392
|
-
|
|
393
|
-
const config: Record<string, unknown> = {
|
|
394
|
-
preset: presetConfig.nitroPreset,
|
|
395
|
-
entry: './entry.ts',
|
|
396
|
-
output: { dir: presetConfig.outputDir },
|
|
397
|
-
// Static asset cache headers — hashed assets are immutable, others get 1h.
|
|
398
|
-
// See design/25-production-deployments.md §"CDN / Edge Cache"
|
|
399
|
-
routeRules: {
|
|
400
|
-
'/assets/**': { headers: { 'Cache-Control': IMMUTABLE_CACHE } },
|
|
401
|
-
},
|
|
402
|
-
...presetConfig.extraConfig,
|
|
403
|
-
...userConfig,
|
|
404
|
-
};
|
|
405
|
-
|
|
406
|
-
const configJson = JSON.stringify(config, null, 2);
|
|
407
|
-
|
|
408
|
-
return `// Generated by @timber-js/app/adapters/nitro
|
|
409
|
-
// Do not edit — this file is regenerated on each build.
|
|
410
|
-
|
|
411
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
412
|
-
|
|
413
|
-
export default defineNitroConfig(${configJson})
|
|
414
|
-
`;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
431
|
// ─── Preview ─────────────────────────────────────────────────────────────────
|
|
418
432
|
|
|
419
433
|
/** Presets that produce a locally-runnable server entry. */
|
|
@@ -460,6 +474,9 @@ const { default: handler, runWithEarlyHintsSender } = await import('${rscEntry}'
|
|
|
460
474
|
// Import compression helper for self-hosted response compression.
|
|
461
475
|
const { compressResponse } = await import('./_compress.mjs');
|
|
462
476
|
|
|
477
|
+
// Web→Node response bridge with backpressure (TIM-1154).
|
|
478
|
+
const { sendNodeResponse } = await import('./_send-response.mjs');
|
|
479
|
+
|
|
463
480
|
const MIME_TYPES = {
|
|
464
481
|
'.html': 'text/html',
|
|
465
482
|
'.js': 'application/javascript',
|
|
@@ -486,11 +503,32 @@ const MIME_TYPES = {
|
|
|
486
503
|
};
|
|
487
504
|
|
|
488
505
|
const publicDir = join(__dirname, '${publicDir}');
|
|
489
|
-
|
|
490
|
-
|
|
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;
|
|
491
522
|
|
|
492
523
|
const server = createServer(async (req, res) => {
|
|
493
|
-
|
|
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}\`);
|
|
494
532
|
|
|
495
533
|
// Try serving static files from the public directory first.
|
|
496
534
|
const filePath = join(publicDir, url.pathname);
|
|
@@ -503,7 +541,9 @@ const server = createServer(async (req, res) => {
|
|
|
503
541
|
const contentType = MIME_TYPES[ext] || 'application/octet-stream';
|
|
504
542
|
const body = await readFile(filePath);
|
|
505
543
|
// Hashed assets get immutable cache, others get short cache.
|
|
506
|
-
const
|
|
544
|
+
const isImmutable =
|
|
545
|
+
url.pathname.startsWith('/assets/') || url.pathname.startsWith('/_timber/fonts/');
|
|
546
|
+
const cacheControl = isImmutable
|
|
507
547
|
? 'public, max-age=31536000, immutable'
|
|
508
548
|
: 'public, max-age=3600, must-revalidate';
|
|
509
549
|
res.writeHead(200, {
|
|
@@ -560,22 +600,11 @@ const server = createServer(async (req, res) => {
|
|
|
560
600
|
// Compress the response for self-hosted deployments.
|
|
561
601
|
const webResponse = compressResponse(webRequest, rawResponse);
|
|
562
602
|
|
|
563
|
-
// Write the response
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
const pump = async () => {
|
|
569
|
-
while (true) {
|
|
570
|
-
const { done, value } = await reader.read();
|
|
571
|
-
if (done) { res.end(); return; }
|
|
572
|
-
res.write(value);
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
|
-
await pump();
|
|
576
|
-
} else {
|
|
577
|
-
res.end();
|
|
578
|
-
}
|
|
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);
|
|
579
608
|
} catch (err) {
|
|
580
609
|
console.error('[timber preview] Request error:', err);
|
|
581
610
|
if (!res.headersSent) {
|
|
@@ -585,13 +614,49 @@ const server = createServer(async (req, res) => {
|
|
|
585
614
|
}
|
|
586
615
|
});
|
|
587
616
|
|
|
588
|
-
|
|
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
|
+
});
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
try {
|
|
641
|
+
boundPort = await listenWithBump(startPort);
|
|
642
|
+
if (boundPort !== startPort) {
|
|
643
|
+
console.log();
|
|
644
|
+
console.log(\` [timber] Port \${startPort} in use, using \${boundPort}\`);
|
|
645
|
+
}
|
|
589
646
|
console.log();
|
|
590
647
|
console.log(' ⚡ timber preview server running at:');
|
|
591
648
|
console.log();
|
|
592
|
-
console.log(\` ➜ http://\${host}:\${
|
|
649
|
+
console.log(\` ➜ http://\${host}:\${boundPort}\`);
|
|
593
650
|
console.log();
|
|
594
|
-
})
|
|
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
|
+
}
|
|
595
660
|
`;
|
|
596
661
|
}
|
|
597
662
|
|
|
@@ -626,11 +691,16 @@ export function generateNitroPreviewCommand(
|
|
|
626
691
|
* Externalizes the timber RSC/SSR output — those files are pre-built
|
|
627
692
|
* by timber and have internal references that nitro's bundler can't follow.
|
|
628
693
|
*/
|
|
694
|
+
interface NitroBuildResult {
|
|
695
|
+
/** Resolved output.serverDir — where the server bundle + _chunks/ live. */
|
|
696
|
+
serverDir: string;
|
|
697
|
+
}
|
|
698
|
+
|
|
629
699
|
async function runNitroBuild(
|
|
630
700
|
nitroDir: string,
|
|
631
701
|
preset: NitroPreset,
|
|
632
702
|
userConfig?: Record<string, unknown>
|
|
633
|
-
): Promise<
|
|
703
|
+
): Promise<NitroBuildResult> {
|
|
634
704
|
const presetConfig = PRESET_CONFIGS[preset];
|
|
635
705
|
const {
|
|
636
706
|
createNitro,
|
|
@@ -649,6 +719,7 @@ async function runNitroBuild(
|
|
|
649
719
|
output: { dir: join(nitroDir, presetConfig.outputDir) },
|
|
650
720
|
routeRules: {
|
|
651
721
|
'/assets/**': { headers: { 'Cache-Control': IMMUTABLE_CACHE } },
|
|
722
|
+
'/_timber/fonts/**': { headers: { 'Cache-Control': IMMUTABLE_CACHE } },
|
|
652
723
|
},
|
|
653
724
|
// Don't bundle the timber RSC/SSR build output — it has its own
|
|
654
725
|
// internal file references that nitro's bundler can't follow.
|
|
@@ -660,10 +731,18 @@ async function runNitroBuild(
|
|
|
660
731
|
...userConfig,
|
|
661
732
|
});
|
|
662
733
|
|
|
734
|
+
// Read the resolved serverDir AFTER config merging — userConfig may
|
|
735
|
+
// override output.dir or output.serverDir. Nitro appends a trailing
|
|
736
|
+
// slash during resolution; strip it for join() compatibility.
|
|
737
|
+
const raw = nitro.options.output.serverDir;
|
|
738
|
+
const serverDir = raw.endsWith('/') ? raw.slice(0, -1) : raw;
|
|
739
|
+
|
|
663
740
|
await prepare(nitro);
|
|
664
741
|
await copyPublicAssets(nitro);
|
|
665
742
|
await nitroBuild(nitro);
|
|
666
743
|
await nitro.close();
|
|
744
|
+
|
|
745
|
+
return { serverDir };
|
|
667
746
|
}
|
|
668
747
|
|
|
669
748
|
/** Spawn a Nitro preview process and pipe stdio. */
|
|
@@ -678,6 +757,75 @@ function spawnNitroPreview(command: string, args: string[], cwd: string): Promis
|
|
|
678
757
|
});
|
|
679
758
|
}
|
|
680
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.
|
|
776
|
+
|
|
777
|
+
export function sendNodeResponse(nodeRes, webRes) {
|
|
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
|
+
`;
|
|
827
|
+
}
|
|
828
|
+
|
|
681
829
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
682
830
|
|
|
683
831
|
/**
|
|
@@ -687,3 +835,55 @@ function spawnNitroPreview(command: string, args: string[], cwd: string): Promis
|
|
|
687
835
|
export function getPresetConfig(preset: NitroPreset): PresetConfig {
|
|
688
836
|
return PRESET_CONFIGS[preset];
|
|
689
837
|
}
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* Resolve the destination path for prebuilt flight payloads in the Nitro
|
|
841
|
+
* output directory. The RSC entry resolves `../prebuilt/` relative to its
|
|
842
|
+
* bundled chunk location (`<serverBundleDir>/_chunks/`), so prebuilt/ must
|
|
843
|
+
* live at `<serverBundleDir>/prebuilt/`.
|
|
844
|
+
*
|
|
845
|
+
* The serverBundleDir varies by preset — Nitro's Vercel preset uses
|
|
846
|
+
* `functions/__server.func` while most others use `server`.
|
|
847
|
+
*
|
|
848
|
+
* @internal Exported for testing.
|
|
849
|
+
*/
|
|
850
|
+
export function resolvePrebuiltOutputPath(outDir: string, preset: NitroPreset): string {
|
|
851
|
+
const presetConfig = PRESET_CONFIGS[preset];
|
|
852
|
+
return join(outDir, presetConfig.outputDir, presetConfig.serverBundleDir, 'prebuilt');
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
/**
|
|
856
|
+
* Copy prebuilt payloads into cloned Vercel function directories.
|
|
857
|
+
*
|
|
858
|
+
* When users configure `vercel.functionRules`, Nitro's compiled hook clones
|
|
859
|
+
* the base __server.func to per-route .func directories. These clones are
|
|
860
|
+
* created during `runNitroBuild()` — before our post-build prebuilt copy.
|
|
861
|
+
* Each clone resolves `../prebuilt` independently, so they each need a copy.
|
|
862
|
+
*
|
|
863
|
+
* @internal Exported for testing.
|
|
864
|
+
*/
|
|
865
|
+
export async function copyPrebuiltToVercelFuncClones(
|
|
866
|
+
functionsDir: string,
|
|
867
|
+
prebuiltSrc: string,
|
|
868
|
+
baseFuncName: string
|
|
869
|
+
): Promise<void> {
|
|
870
|
+
const funcDirs: string[] = [];
|
|
871
|
+
try {
|
|
872
|
+
for await (const match of glob('**/*.func', { cwd: functionsDir })) {
|
|
873
|
+
if (!match.endsWith(baseFuncName)) {
|
|
874
|
+
funcDirs.push(join(functionsDir, match));
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
} catch {
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
await Promise.all(
|
|
881
|
+
funcDirs.map((dir) =>
|
|
882
|
+
cp(prebuiltSrc, join(dir, 'prebuilt'), { recursive: true }).catch(
|
|
883
|
+
(e: NodeJS.ErrnoException) => {
|
|
884
|
+
if (e.code !== 'ENOENT') throw e;
|
|
885
|
+
}
|
|
886
|
+
)
|
|
887
|
+
)
|
|
888
|
+
);
|
|
889
|
+
}
|