@timber-js/app 0.2.0-alpha.9 → 0.2.0-alpha.90
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/dist/_chunks/actions-DLnUaR65.js +421 -0
- package/dist/_chunks/actions-DLnUaR65.js.map +1 -0
- package/dist/_chunks/{als-registry-B7DbZ2hS.js → als-registry-HS0LGUl2.js} +1 -1
- package/dist/_chunks/als-registry-HS0LGUl2.js.map +1 -0
- package/dist/_chunks/chunk-BYIpzuS7.js +39 -0
- package/dist/_chunks/{debug-gwlJkDuf.js → debug-ECi_61pb.js} +2 -2
- package/dist/_chunks/debug-ECi_61pb.js.map +1 -0
- package/dist/_chunks/define-C77ScO0m.js +106 -0
- package/dist/_chunks/define-C77ScO0m.js.map +1 -0
- package/dist/_chunks/define-Itxvcd7F.js +199 -0
- package/dist/_chunks/define-Itxvcd7F.js.map +1 -0
- package/dist/_chunks/define-cookie-BowvzoP0.js +94 -0
- package/dist/_chunks/define-cookie-BowvzoP0.js.map +1 -0
- package/dist/_chunks/{format-DviM89f0.js → dev-warnings-DpGRGoDi.js} +5 -44
- package/dist/_chunks/dev-warnings-DpGRGoDi.js.map +1 -0
- package/dist/_chunks/format-CYBGxKtc.js +14 -0
- package/dist/_chunks/format-CYBGxKtc.js.map +1 -0
- package/dist/_chunks/{interception-BOoWmLUA.js → interception-DRlhJWbu.js} +219 -97
- package/dist/_chunks/interception-DRlhJWbu.js.map +1 -0
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js +41 -0
- package/dist/_chunks/merge-search-params-Cm_KIWDX.js.map +1 -0
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DS3eKNmf.js} +1 -1
- package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js.map → metadata-routes-DS3eKNmf.js.map} +1 -1
- package/dist/_chunks/request-context-CK5tZqIP.js +478 -0
- package/dist/_chunks/request-context-CK5tZqIP.js.map +1 -0
- package/dist/_chunks/schema-bridge-C3xl_vfb.js +86 -0
- package/dist/_chunks/schema-bridge-C3xl_vfb.js.map +1 -0
- package/dist/_chunks/segment-classify-BDNn6EzD.js +65 -0
- package/dist/_chunks/segment-classify-BDNn6EzD.js.map +1 -0
- package/dist/_chunks/segment-context-fHFLF1PE.js +34 -0
- package/dist/_chunks/segment-context-fHFLF1PE.js.map +1 -0
- package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-DzuI0bIV.js} +1 -1
- package/dist/_chunks/{ssr-data-MjmprTmO.js.map → ssr-data-DzuI0bIV.js.map} +1 -1
- package/dist/_chunks/stale-reload-BX5gL1r-.js +64 -0
- package/dist/_chunks/stale-reload-BX5gL1r-.js.map +1 -0
- package/dist/_chunks/{tracing-CemImE6h.js → tracing-CCYbKn5n.js} +60 -9
- package/dist/_chunks/tracing-CCYbKn5n.js.map +1 -0
- package/dist/_chunks/use-params-Br9YSUFV.js +295 -0
- package/dist/_chunks/use-params-Br9YSUFV.js.map +1 -0
- package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-BiV5GJgm.js} +7 -4
- package/dist/_chunks/use-query-states-BiV5GJgm.js.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 +64 -0
- package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
- package/dist/adapters/cloudflare-kv-cache.js +95 -0
- package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
- package/dist/adapters/cloudflare.d.ts +148 -12
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +135 -11
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/compress-module.d.ts.map +1 -1
- package/dist/adapters/nitro.d.ts +17 -1
- package/dist/adapters/nitro.d.ts.map +1 -1
- package/dist/adapters/nitro.js +56 -13
- package/dist/adapters/nitro.js.map +1 -1
- package/dist/cache/cache-api.d.ts +24 -0
- package/dist/cache/cache-api.d.ts.map +1 -0
- package/dist/cache/handler-store.d.ts +31 -0
- package/dist/cache/handler-store.d.ts.map +1 -0
- package/dist/cache/index.d.ts +23 -7
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +142 -80
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/singleflight.d.ts +18 -1
- 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/timber-cache.d.ts +1 -1
- package/dist/cache/timber-cache.d.ts.map +1 -1
- package/dist/cli.d.ts +6 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/browser-dev.d.ts +27 -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 +46 -0
- package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
- package/dist/client/browser-entry/index.d.ts +30 -0
- package/dist/client/browser-entry/index.d.ts.map +1 -0
- package/dist/client/browser-entry/post-hydration.d.ts +26 -0
- package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
- package/dist/client/browser-entry/router-init.d.ts +23 -0
- package/dist/client/browser-entry/router-init.d.ts.map +1 -0
- package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
- package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
- package/dist/client/browser-entry/scroll.d.ts +19 -0
- package/dist/client/browser-entry/scroll.d.ts.map +1 -0
- package/dist/client/error-boundary.d.ts +12 -5
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +10 -4
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/error-reconstituter.d.ts +54 -0
- package/dist/client/error-reconstituter.d.ts.map +1 -0
- package/dist/client/form.d.ts +6 -3
- package/dist/client/form.d.ts.map +1 -1
- package/dist/client/history.d.ts +19 -4
- package/dist/client/history.d.ts.map +1 -1
- package/dist/client/index.d.ts +9 -21
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +229 -1018
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal.d.ts +18 -0
- package/dist/client/internal.d.ts.map +1 -0
- package/dist/client/internal.js +890 -0
- package/dist/client/internal.js.map +1 -0
- package/dist/client/link-pending-store.d.ts +63 -0
- package/dist/client/link-pending-store.d.ts.map +1 -0
- package/dist/client/link.d.ts +62 -55
- package/dist/client/link.d.ts.map +1 -1
- package/dist/client/nav-link-store.d.ts +36 -0
- package/dist/client/nav-link-store.d.ts.map +1 -0
- package/dist/client/navigation-api-types.d.ts +90 -0
- package/dist/client/navigation-api-types.d.ts.map +1 -0
- package/dist/client/navigation-api.d.ts +115 -0
- package/dist/client/navigation-api.d.ts.map +1 -0
- package/dist/client/navigation-context.d.ts +13 -2
- package/dist/client/navigation-context.d.ts.map +1 -1
- package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
- package/dist/client/navigation-root.d.ts.map +1 -0
- package/dist/client/nuqs-adapter.d.ts.map +1 -1
- package/dist/client/router-ref.d.ts +1 -1
- package/dist/client/router.d.ts +70 -4
- package/dist/client/router.d.ts.map +1 -1
- package/dist/client/rsc-fetch.d.ts +38 -3
- package/dist/client/rsc-fetch.d.ts.map +1 -1
- package/dist/client/segment-cache.d.ts +1 -1
- package/dist/client/segment-cache.d.ts.map +1 -1
- package/dist/client/segment-outlet.d.ts +63 -0
- package/dist/client/segment-outlet.d.ts.map +1 -0
- package/dist/client/ssr-data.d.ts +13 -4
- package/dist/client/ssr-data.d.ts.map +1 -1
- package/dist/client/stale-reload.d.ts +15 -0
- package/dist/client/stale-reload.d.ts.map +1 -1
- package/dist/client/top-loader.d.ts +5 -5
- package/dist/client/top-loader.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-params.d.ts +6 -4
- package/dist/client/use-params.d.ts.map +1 -1
- package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
- package/dist/client/use-pending-navigation.d.ts.map +1 -0
- package/dist/client/use-query-states.d.ts +1 -1
- package/dist/client/use-query-states.d.ts.map +1 -1
- package/dist/client/use-router.d.ts +1 -1
- package/dist/codec.d.ts +33 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +2 -0
- package/dist/config-types.d.ts +266 -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 +35 -14
- package/dist/cookies/define-cookie.d.ts.map +1 -1
- package/dist/cookies/index.js +1 -83
- package/dist/fonts/bundle.d.ts +48 -0
- package/dist/fonts/bundle.d.ts.map +1 -0
- package/dist/fonts/css.d.ts +1 -0
- package/dist/fonts/css.d.ts.map +1 -1
- package/dist/fonts/dev-middleware.d.ts +22 -0
- package/dist/fonts/dev-middleware.d.ts.map +1 -0
- package/dist/fonts/pipeline.d.ts +138 -0
- package/dist/fonts/pipeline.d.ts.map +1 -0
- package/dist/fonts/transform.d.ts +72 -0
- package/dist/fonts/transform.d.ts.map +1 -0
- package/dist/fonts/types.d.ts +45 -1
- package/dist/fonts/types.d.ts.map +1 -1
- package/dist/fonts/virtual-modules.d.ts +59 -0
- package/dist/fonts/virtual-modules.d.ts.map +1 -0
- package/dist/index.d.ts +45 -190
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4294 -2453
- package/dist/index.js.map +1 -1
- package/dist/plugin-context.d.ts +107 -0
- package/dist/plugin-context.d.ts.map +1 -0
- package/dist/plugins/adapter-build.d.ts +1 -1
- package/dist/plugins/adapter-build.d.ts.map +1 -1
- package/dist/plugins/build-manifest.d.ts +2 -2
- package/dist/plugins/build-manifest.d.ts.map +1 -1
- package/dist/plugins/build-report.d.ts +3 -3
- package/dist/plugins/build-report.d.ts.map +1 -1
- package/dist/plugins/client-chunks.d.ts +32 -0
- package/dist/plugins/client-chunks.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-404-page.d.ts +56 -0
- package/dist/plugins/dev-404-page.d.ts.map +1 -0
- package/dist/plugins/dev-browser-logs.d.ts +84 -0
- package/dist/plugins/dev-browser-logs.d.ts.map +1 -0
- package/dist/plugins/dev-error-overlay.d.ts +49 -9
- package/dist/plugins/dev-error-overlay.d.ts.map +1 -1
- package/dist/plugins/dev-error-page.d.ts +58 -0
- package/dist/plugins/dev-error-page.d.ts.map +1 -0
- package/dist/plugins/dev-logs.d.ts +1 -1
- package/dist/plugins/dev-logs.d.ts.map +1 -1
- package/dist/plugins/dev-server.d.ts +1 -1
- package/dist/plugins/dev-server.d.ts.map +1 -1
- package/dist/plugins/dev-terminal-error.d.ts +28 -0
- package/dist/plugins/dev-terminal-error.d.ts.map +1 -0
- package/dist/plugins/entries.d.ts +1 -1
- package/dist/plugins/entries.d.ts.map +1 -1
- package/dist/plugins/fonts.d.ts +17 -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/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 +6 -5
- package/dist/plugins/shims.d.ts.map +1 -1
- package/dist/plugins/static-build.d.ts +4 -4
- package/dist/plugins/static-build.d.ts.map +1 -1
- package/dist/routing/codegen.d.ts +2 -2
- package/dist/routing/codegen.d.ts.map +1 -1
- package/dist/routing/convention-lint.d.ts +41 -0
- package/dist/routing/convention-lint.d.ts.map +1 -0
- package/dist/routing/index.d.ts +2 -0
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +3 -2
- package/dist/routing/scanner.d.ts.map +1 -1
- package/dist/routing/segment-classify.d.ts +46 -0
- package/dist/routing/segment-classify.d.ts.map +1 -0
- package/dist/routing/status-file-lint.d.ts +2 -1
- package/dist/routing/status-file-lint.d.ts.map +1 -1
- package/dist/routing/types.d.ts +16 -4
- package/dist/routing/types.d.ts.map +1 -1
- 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 +76 -0
- package/dist/schema-bridge.d.ts.map +1 -0
- package/dist/search-params/define.d.ts +139 -0
- package/dist/search-params/define.d.ts.map +1 -0
- package/dist/search-params/index.d.ts +4 -7
- package/dist/search-params/index.d.ts.map +1 -1
- package/dist/search-params/index.js +32 -441
- package/dist/search-params/index.js.map +1 -1
- package/dist/search-params/registry.d.ts +2 -2
- package/dist/search-params/registry.d.ts.map +1 -1
- package/dist/search-params/wrappers.d.ts +53 -0
- package/dist/search-params/wrappers.d.ts.map +1 -0
- package/dist/segment-params/define.d.ts +78 -0
- package/dist/segment-params/define.d.ts.map +1 -0
- package/dist/segment-params/index.d.ts +3 -0
- package/dist/segment-params/index.d.ts.map +1 -0
- package/dist/segment-params/index.js +2 -0
- package/dist/server/access-gate.d.ts +4 -0
- package/dist/server/access-gate.d.ts.map +1 -1
- package/dist/server/action-client.d.ts +41 -6
- 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 +7 -0
- package/dist/server/action-handler.d.ts.map +1 -1
- package/dist/server/actions.d.ts +3 -6
- package/dist/server/actions.d.ts.map +1 -1
- package/dist/server/als-registry.d.ts +32 -4
- package/dist/server/als-registry.d.ts.map +1 -1
- package/dist/server/build-manifest.d.ts +2 -2
- package/dist/server/build-manifest.d.ts.map +1 -1
- package/dist/server/debug.d.ts +1 -1
- package/dist/server/default-logger.d.ts +22 -0
- package/dist/server/default-logger.d.ts.map +1 -0
- package/dist/server/deny-page-resolver.d.ts +52 -0
- package/dist/server/deny-page-resolver.d.ts.map +1 -0
- package/dist/server/deny-renderer.d.ts.map +1 -1
- package/dist/server/dev-holding-server.d.ts +52 -0
- package/dist/server/dev-holding-server.d.ts.map +1 -0
- package/dist/server/dev-source-map.d.ts +22 -0
- package/dist/server/dev-source-map.d.ts.map +1 -0
- package/dist/server/dev-warnings.d.ts +1 -21
- package/dist/server/dev-warnings.d.ts.map +1 -1
- package/dist/server/early-hints.d.ts +13 -5
- package/dist/server/early-hints.d.ts.map +1 -1
- package/dist/server/error-boundary-wrapper.d.ts +7 -1
- 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/flush.d.ts.map +1 -1
- package/dist/server/form-data.d.ts +29 -0
- package/dist/server/form-data.d.ts.map +1 -1
- package/dist/server/html-injectors.d.ts +51 -11
- package/dist/server/html-injectors.d.ts.map +1 -1
- package/dist/server/index.d.ts +5 -43
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +195 -2800
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal.d.ts +46 -0
- package/dist/server/internal.d.ts.map +1 -0
- package/dist/server/internal.js +2900 -0
- package/dist/server/internal.js.map +1 -0
- package/dist/server/logger.d.ts +25 -7
- package/dist/server/logger.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 +113 -0
- package/dist/server/node-stream-transforms.d.ts.map +1 -0
- package/dist/server/page-deny-boundary.d.ts +31 -0
- package/dist/server/page-deny-boundary.d.ts.map +1 -0
- package/dist/server/pipeline-interception.d.ts +1 -1
- 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.d.ts +52 -10
- package/dist/server/pipeline.d.ts.map +1 -1
- package/dist/server/primitives.d.ts +69 -18
- package/dist/server/primitives.d.ts.map +1 -1
- package/dist/server/render-timeout.d.ts +51 -0
- package/dist/server/render-timeout.d.ts.map +1 -0
- package/dist/server/request-context.d.ts +112 -43
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/route-element-builder.d.ts +27 -1
- 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 +16 -2
- package/dist/server/route-matcher.d.ts.map +1 -1
- package/dist/server/rsc-entry/api-handler.d.ts +2 -2
- package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
- package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
- package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
- package/dist/server/rsc-entry/helpers.d.ts +48 -5
- package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
- package/dist/server/rsc-entry/index.d.ts +20 -3
- package/dist/server/rsc-entry/index.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
- package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts +14 -1
- package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
- package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
- package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
- package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
- package/dist/server/safe-load.d.ts +46 -0
- package/dist/server/safe-load.d.ts.map +1 -0
- package/dist/server/sensitive-fields.d.ts +74 -0
- package/dist/server/sensitive-fields.d.ts.map +1 -0
- package/dist/server/sitemap-generator.d.ts +129 -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/slot-resolver.d.ts +1 -1
- package/dist/server/slot-resolver.d.ts.map +1 -1
- package/dist/server/ssr-entry.d.ts +23 -0
- package/dist/server/ssr-entry.d.ts.map +1 -1
- package/dist/server/ssr-render.d.ts +39 -21
- package/dist/server/ssr-render.d.ts.map +1 -1
- package/dist/server/ssr-wrappers.d.ts +50 -0
- package/dist/server/ssr-wrappers.d.ts.map +1 -0
- package/dist/server/status-code-resolver.d.ts +1 -1
- package/dist/server/status-code-resolver.d.ts.map +1 -1
- package/dist/server/stream-utils.d.ts +36 -0
- package/dist/server/stream-utils.d.ts.map +1 -0
- package/dist/server/tracing.d.ts +4 -4
- package/dist/server/tracing.d.ts.map +1 -1
- package/dist/server/tree-builder.d.ts +22 -19
- package/dist/server/tree-builder.d.ts.map +1 -1
- package/dist/server/types.d.ts +1 -4
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/version-skew.d.ts +61 -0
- package/dist/server/version-skew.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/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 +2 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/navigation-client.d.ts +1 -1
- package/dist/shims/navigation-client.d.ts.map +1 -1
- package/dist/shims/navigation.d.ts +3 -2
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/utils/directive-parser.d.ts +5 -2
- package/dist/utils/directive-parser.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/package.json +51 -16
- package/src/adapters/cloudflare-dev.ts +177 -0
- package/src/adapters/cloudflare-kv-cache.ts +142 -0
- package/src/adapters/cloudflare.ts +342 -28
- package/src/adapters/compress-module.ts +24 -4
- package/src/adapters/nitro.ts +52 -8
- package/src/adapters/wrangler.d.ts +7 -0
- package/src/cache/cache-api.ts +38 -0
- package/src/cache/handler-store.ts +68 -0
- package/src/cache/index.ts +81 -18
- package/src/cache/singleflight.ts +62 -4
- package/src/cache/sizeof.ts +31 -0
- package/src/cache/timber-cache.ts +24 -20
- package/src/cli.ts +16 -6
- package/src/client/browser-dev.ts +128 -1
- package/src/client/browser-entry/action-dispatch.ts +116 -0
- package/src/client/browser-entry/hmr.ts +81 -0
- package/src/client/browser-entry/hydrate.ts +145 -0
- package/src/client/browser-entry/index.ts +143 -0
- package/src/client/browser-entry/post-hydration.ts +119 -0
- package/src/client/browser-entry/router-init.ts +193 -0
- package/src/client/browser-entry/rsc-stream.ts +157 -0
- package/src/client/browser-entry/scroll.ts +27 -0
- package/src/client/error-boundary.tsx +48 -16
- package/src/client/error-reconstituter.tsx +65 -0
- package/src/client/form.tsx +14 -7
- package/src/client/history.ts +26 -4
- package/src/client/index.ts +65 -38
- package/src/client/internal.ts +57 -0
- package/src/client/link-pending-store.ts +111 -0
- package/src/client/link.tsx +342 -113
- package/src/client/nav-link-store.ts +47 -0
- package/src/client/navigation-api-types.ts +112 -0
- package/src/client/navigation-api.ts +332 -0
- package/src/client/navigation-context.ts +31 -6
- package/src/client/navigation-root.tsx +342 -0
- package/src/client/nuqs-adapter.tsx +16 -3
- package/src/client/router-ref.ts +1 -1
- package/src/client/router.ts +299 -72
- package/src/client/rsc-fetch.ts +97 -8
- package/src/client/segment-cache.ts +1 -1
- package/src/client/segment-outlet.tsx +86 -0
- package/src/client/ssr-data.ts +13 -5
- package/src/client/stale-reload.ts +72 -3
- package/src/client/top-loader.tsx +18 -6
- package/src/client/use-link-status.ts +7 -7
- package/src/client/use-params.ts +7 -5
- package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
- package/src/client/use-query-states.ts +9 -3
- package/src/client/use-router.ts +1 -1
- package/src/codec.ts +49 -0
- package/src/config-types.ts +264 -0
- package/src/config-validation.ts +303 -0
- package/src/content/index.ts +5 -13
- package/src/cookies/define-cookie.ts +78 -25
- package/src/cookies/index.ts +8 -0
- package/src/fonts/bundle.ts +142 -0
- package/src/fonts/css.ts +2 -1
- package/src/fonts/dev-middleware.ts +74 -0
- package/src/fonts/pipeline.ts +275 -0
- package/src/fonts/transform.ts +353 -0
- package/src/fonts/types.ts +50 -1
- package/src/fonts/virtual-modules.ts +159 -0
- package/src/index.ts +314 -355
- package/src/plugin-context.ts +240 -0
- package/src/plugins/adapter-build.ts +9 -3
- package/src/plugins/build-manifest.ts +13 -2
- package/src/plugins/build-report.ts +3 -3
- package/src/plugins/client-chunks.ts +65 -0
- package/src/plugins/content.ts +1 -1
- package/src/plugins/dev-404-page.ts +418 -0
- package/src/plugins/dev-browser-logs.ts +288 -0
- package/src/plugins/dev-error-overlay.ts +286 -42
- package/src/plugins/dev-error-page.ts +536 -0
- package/src/plugins/dev-logs.ts +1 -1
- package/src/plugins/dev-server.ts +146 -19
- package/src/plugins/dev-terminal-error.ts +217 -0
- package/src/plugins/entries.ts +111 -10
- package/src/plugins/fonts.ts +133 -638
- package/src/plugins/mdx.ts +1 -1
- package/src/plugins/routing.ts +213 -31
- package/src/plugins/server-action-exports.ts +1 -1
- package/src/plugins/server-bundle.ts +32 -1
- package/src/plugins/shims.ts +136 -35
- package/src/plugins/static-build.ts +17 -11
- package/src/routing/codegen.ts +273 -105
- package/src/routing/convention-lint.ts +356 -0
- package/src/routing/index.ts +2 -0
- package/src/routing/scanner.ts +93 -23
- package/src/routing/segment-classify.ts +89 -0
- package/src/routing/status-file-lint.ts +3 -2
- package/src/routing/types.ts +17 -4
- package/src/rsc-runtime/rsc.ts +2 -0
- package/src/rsc-runtime/ssr.ts +50 -0
- package/src/rsc-runtime/vendor-types.d.ts +7 -0
- package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
- package/src/search-params/define.ts +482 -0
- package/src/search-params/index.ts +14 -20
- package/src/search-params/registry.ts +2 -2
- package/src/search-params/wrappers.ts +85 -0
- package/src/segment-params/define.ts +279 -0
- package/src/segment-params/index.ts +9 -0
- package/src/server/access-gate.tsx +70 -29
- package/src/server/action-client.ts +88 -15
- package/src/server/action-encryption.ts +144 -0
- package/src/server/action-handler.ts +53 -6
- package/src/server/actions.ts +10 -9
- package/src/server/als-registry.ts +34 -6
- package/src/server/build-manifest.ts +10 -4
- package/src/server/compress.ts +25 -7
- package/src/server/debug.ts +1 -1
- package/src/server/default-logger.ts +99 -0
- package/src/server/deny-page-resolver.ts +154 -0
- package/src/server/deny-renderer.ts +24 -38
- package/src/server/dev-holding-server.ts +185 -0
- package/src/server/dev-source-map.ts +31 -0
- package/src/server/dev-warnings.ts +4 -49
- package/src/server/early-hints.ts +36 -15
- package/src/server/error-boundary-wrapper.ts +74 -22
- package/src/server/fallback-error.ts +74 -102
- package/src/server/flight-injection-state.ts +113 -0
- package/src/server/flight-scripts.ts +62 -0
- package/src/server/flush.ts +2 -1
- package/src/server/form-data.ts +76 -0
- package/src/server/html-injectors.ts +280 -120
- package/src/server/index.ts +25 -177
- package/src/server/internal.ts +169 -0
- package/src/server/logger.ts +44 -36
- package/src/server/middleware-runner.ts +31 -4
- package/src/server/node-stream-transforms.ts +509 -0
- package/src/server/page-deny-boundary.tsx +56 -0
- package/src/server/pipeline-interception.ts +17 -16
- package/src/server/pipeline-metadata.ts +13 -0
- package/src/server/pipeline.ts +261 -66
- package/src/server/primitives.ts +111 -28
- package/src/server/render-timeout.ts +108 -0
- package/src/server/request-context.ts +293 -132
- package/src/server/route-element-builder.ts +283 -191
- package/src/server/route-handler.ts +24 -4
- package/src/server/route-matcher.ts +31 -20
- package/src/server/rsc-entry/api-handler.ts +15 -16
- package/src/server/rsc-entry/error-renderer.ts +305 -89
- package/src/server/rsc-entry/helpers.ts +134 -5
- package/src/server/rsc-entry/index.ts +304 -111
- package/src/server/rsc-entry/rsc-payload.ts +65 -18
- package/src/server/rsc-entry/rsc-stream.ts +81 -13
- package/src/server/rsc-entry/ssr-bridge.ts +14 -5
- package/src/server/rsc-entry/ssr-renderer.ts +171 -38
- package/src/server/safe-load.ts +60 -0
- package/src/server/sensitive-fields.ts +230 -0
- package/src/server/sitemap-generator.ts +338 -0
- package/src/server/sitemap-handler.ts +126 -0
- package/src/server/slot-resolver.ts +244 -229
- package/src/server/ssr-entry.ts +215 -32
- package/src/server/ssr-render.ts +289 -67
- package/src/server/ssr-wrappers.tsx +139 -0
- package/src/server/status-code-resolver.ts +1 -1
- package/src/server/stream-utils.ts +213 -0
- package/src/server/tracing.ts +20 -9
- package/src/server/tree-builder.ts +92 -58
- package/src/server/types.ts +3 -6
- package/src/server/version-skew.ts +104 -0
- package/src/shared/merge-search-params.ts +55 -0
- package/src/shims/font-google.ts +1 -1
- package/src/shims/font-local.ts +34 -0
- package/src/shims/headers.ts +5 -1
- package/src/shims/navigation-client.ts +1 -1
- package/src/shims/navigation.ts +7 -2
- package/src/utils/directive-parser.ts +5 -2
- package/src/utils/state-machine.ts +111 -0
- package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
- package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
- package/dist/_chunks/format-DviM89f0.js.map +0 -1
- package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
- package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
- package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
- 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.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/link-status-provider.d.ts +0 -11
- package/dist/client/link-status-provider.d.ts.map +0 -1
- package/dist/client/transition-root.d.ts.map +0 -1
- package/dist/client/use-navigation-pending.d.ts.map +0 -1
- package/dist/cookies/index.js.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/dynamic-transform.d.ts +0 -72
- package/dist/plugins/dynamic-transform.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/server/prerender.d.ts +0 -77
- package/dist/server/prerender.d.ts.map +0 -1
- package/dist/server/response-cache.d.ts +0 -54
- package/dist/server/response-cache.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/link-status-provider.tsx +0 -30
- package/src/client/transition-root.tsx +0 -166
- package/src/plugins/cache-transform.ts +0 -199
- package/src/plugins/dynamic-transform.ts +0 -161
- package/src/search-params/analyze.ts +0 -192
- package/src/search-params/builtin-codecs.ts +0 -228
- package/src/search-params/create.ts +0 -321
- package/src/server/prerender.ts +0 -139
- package/src/server/response-cache.ts +0 -410
|
@@ -17,45 +17,50 @@
|
|
|
17
17
|
|
|
18
18
|
// @ts-expect-error — virtual module provided by timber-routing plugin
|
|
19
19
|
import routeManifest from 'virtual:timber-route-manifest';
|
|
20
|
+
// TIM-830: Populate the search-params registry eagerly so <Link> can
|
|
21
|
+
// serialize flat `Partial<T>` values synchronously in RSC renders.
|
|
22
|
+
// The module has side effects only — no exports consumed here.
|
|
23
|
+
// @ts-expect-error — virtual module provided by timber-routing plugin
|
|
24
|
+
import 'virtual:timber-search-params-registry';
|
|
20
25
|
// @ts-expect-error — virtual module provided by timber-entries plugin
|
|
21
26
|
import config from 'virtual:timber-config';
|
|
22
27
|
// @ts-expect-error — virtual module provided by timber-build-manifest plugin
|
|
23
28
|
import buildManifest from 'virtual:timber-build-manifest';
|
|
24
29
|
// @ts-expect-error — virtual module provided by timber-entries plugin
|
|
25
30
|
import loadUserInstrumentation from 'virtual:timber-instrumentation';
|
|
26
|
-
// @ts-expect-error — virtual module provided by timber-
|
|
27
|
-
import
|
|
31
|
+
// @ts-expect-error — virtual module provided by timber-entries plugin
|
|
32
|
+
import loadCacheHandler from 'virtual:timber-cache-handler';
|
|
28
33
|
|
|
29
|
-
import type { FormRerender } from '
|
|
30
|
-
import { handleActionRequest, isActionRequest } from '
|
|
31
|
-
import type { BodyLimitsConfig } from '
|
|
32
|
-
import type { BuildManifest } from '
|
|
34
|
+
import type { FormRerender } from '../action-handler.js';
|
|
35
|
+
import { handleActionRequest, isActionRequest } from '../action-handler.js';
|
|
36
|
+
import type { BodyLimitsConfig } from '../body-limits.js';
|
|
37
|
+
import type { BuildManifest } from '../build-manifest.js';
|
|
33
38
|
import {
|
|
34
|
-
buildCssLinkTags,
|
|
35
39
|
buildFontPreloadTags,
|
|
36
40
|
buildModulepreloadTags,
|
|
37
|
-
collectRouteCss,
|
|
38
41
|
collectRouteFonts,
|
|
39
42
|
collectRouteModulepreloads,
|
|
40
|
-
} from '
|
|
41
|
-
import type { LayoutEntry } from '
|
|
42
|
-
import { renderDenyPage, renderDenyPageAsRsc } from '
|
|
43
|
-
import { resolveLogMode } from '
|
|
44
|
-
import { sendEarlyHints103 } from '
|
|
45
|
-
import { collectEarlyHintHeaders } from '
|
|
46
|
-
import { runWithFormFlash } from '
|
|
47
|
-
import type { ClientBootstrapConfig } from '
|
|
48
|
-
import { buildClientScripts } from '
|
|
49
|
-
import type { InterceptionContext, PipelineConfig, RouteMatch } from '
|
|
50
|
-
import { createPipeline } from '
|
|
51
|
-
import {
|
|
52
|
-
import { buildRouteElement,
|
|
53
|
-
import type { ManifestSegmentNode } from '
|
|
54
|
-
import { createMetadataRouteMatcher, createRouteMatcher } from '
|
|
55
|
-
import { initDevTracing } from '
|
|
56
|
-
|
|
57
|
-
import { renderFallbackError as renderFallback } from '
|
|
58
|
-
import { loadInstrumentation } from '
|
|
43
|
+
} from '../build-manifest.js';
|
|
44
|
+
import type { LayoutEntry } from '../deny-renderer.js';
|
|
45
|
+
import { renderDenyPage, renderDenyPageAsRsc } from '../deny-renderer.js';
|
|
46
|
+
import { resolveLogMode } from '../dev-logger.js';
|
|
47
|
+
import { sendEarlyHints103 } from '../early-hints-sender.js';
|
|
48
|
+
import { collectEarlyHintHeaders } from '../early-hints.js';
|
|
49
|
+
import { runWithFormFlash } from '../form-flash.js';
|
|
50
|
+
import type { ClientBootstrapConfig } from '../html-injectors.js';
|
|
51
|
+
import { buildClientScripts } from '../html-injectors.js';
|
|
52
|
+
import type { InterceptionContext, PipelineConfig, RouteMatch } from '../pipeline.js';
|
|
53
|
+
import { createPipeline, coerceSegmentParams } from '../pipeline.js';
|
|
54
|
+
import { setSegmentParams } from '../request-context.js';
|
|
55
|
+
import { buildRouteElement, ParamCoercionError } from '../route-element-builder.js';
|
|
56
|
+
import type { ManifestSegmentNode } from '../route-matcher.js';
|
|
57
|
+
import { createMetadataRouteMatcher, createRouteMatcher } from '../route-matcher.js';
|
|
58
|
+
import { initDevTracing } from '../tracing.js';
|
|
59
|
+
|
|
60
|
+
import { renderFallbackError as renderFallback } from '../fallback-error.js';
|
|
61
|
+
import { loadInstrumentation } from '../instrumentation.js';
|
|
62
|
+
import { loadModule } from '../safe-load.js';
|
|
63
|
+
import { logRenderError } from '../logger.js';
|
|
59
64
|
import { handleApiRoute } from './api-handler.js';
|
|
60
65
|
import { renderErrorPage, renderNoMatchPage } from './error-renderer.js';
|
|
61
66
|
import {
|
|
@@ -63,33 +68,77 @@ import {
|
|
|
63
68
|
createDebugChannelSink,
|
|
64
69
|
escapeHtml,
|
|
65
70
|
isRscPayloadRequest,
|
|
71
|
+
type DebugComponentEntry,
|
|
66
72
|
} from './helpers.js';
|
|
67
|
-
import { parseClientStateTree } from '
|
|
68
|
-
import {
|
|
69
|
-
createResponseCache,
|
|
70
|
-
resolveResponseCacheConfig,
|
|
71
|
-
type ResponseCache,
|
|
72
|
-
} from '#/server/response-cache.js';
|
|
73
|
+
import { parseClientStateTree } from '../state-tree-diff.js';
|
|
73
74
|
import { buildRscPayloadResponse } from './rsc-payload.js';
|
|
74
75
|
import { renderRscStream } from './rsc-stream.js';
|
|
75
76
|
import { renderSsrResponse } from './ssr-renderer.js';
|
|
76
77
|
import { callSsr } from './ssr-bridge.js';
|
|
77
|
-
import { isDebug, isDevMode, setDebugFromConfig } from '
|
|
78
|
+
import { isDebug, isDevMode, setDebugFromConfig } from '../debug.js';
|
|
79
|
+
import { setSourceMapCallback } from '../dev-source-map.js';
|
|
80
|
+
import { recordTiming } from '../server-timing.js';
|
|
81
|
+
import { requestContextAls } from '../als-registry.js';
|
|
82
|
+
import { createAutoSitemapHandler } from '../sitemap-handler.js';
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Resolve the Server-Timing mode from timber.config.ts.
|
|
86
|
+
*
|
|
87
|
+
* If the user set `serverTiming` explicitly, use that value.
|
|
88
|
+
* Otherwise: `'detailed'` in dev, `'total'` in production.
|
|
89
|
+
*/
|
|
90
|
+
function resolveServerTimingMode(
|
|
91
|
+
config: Record<string, unknown>,
|
|
92
|
+
isDev: boolean
|
|
93
|
+
): 'detailed' | 'total' | false {
|
|
94
|
+
const userValue = config.serverTiming as 'detailed' | 'total' | false | undefined;
|
|
95
|
+
if (userValue !== undefined) return userValue;
|
|
96
|
+
return isDev ? 'detailed' : 'total';
|
|
97
|
+
}
|
|
78
98
|
|
|
79
99
|
// Dev-only pipeline error handler, set by the dev server after import.
|
|
80
100
|
// In production this is always undefined — no overhead.
|
|
81
|
-
|
|
101
|
+
// The third argument provides RSC debug component data (from the Flight
|
|
102
|
+
// debug channel) when available — used by the error overlay to show the
|
|
103
|
+
// server component tree context for render errors.
|
|
104
|
+
let _devPipelineErrorHandler:
|
|
105
|
+
| ((error: Error, phase: string, debugComponents?: DebugComponentEntry[]) => void)
|
|
106
|
+
| undefined;
|
|
82
107
|
|
|
83
108
|
/**
|
|
84
109
|
* Set the dev pipeline error handler.
|
|
85
110
|
*
|
|
86
111
|
* Called by the dev server after importing this module to wire pipeline
|
|
87
112
|
* errors into the Vite browser error overlay. No-op in production.
|
|
113
|
+
*
|
|
114
|
+
* The handler receives an optional third argument with RSC debug component
|
|
115
|
+
* info — component names, environments, and stack frames from the Flight
|
|
116
|
+
* debug channel. This is only populated for render-phase errors.
|
|
88
117
|
*/
|
|
89
|
-
export function setDevPipelineErrorHandler(
|
|
118
|
+
export function setDevPipelineErrorHandler(
|
|
119
|
+
handler: (error: Error, phase: string, debugComponents?: DebugComponentEntry[]) => void
|
|
120
|
+
): void {
|
|
90
121
|
_devPipelineErrorHandler = handler;
|
|
91
122
|
}
|
|
92
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Set the dev source-map handler.
|
|
126
|
+
*
|
|
127
|
+
* Called by the dev server after importing this module to wire Vite's
|
|
128
|
+
* module graph source-mapping into the error rendering pipeline. Errors
|
|
129
|
+
* rendered by renderErrorPage / renderFallbackError will have their
|
|
130
|
+
* stack traces rewritten to show original source positions.
|
|
131
|
+
*
|
|
132
|
+
* No-op in production.
|
|
133
|
+
*/
|
|
134
|
+
export function setDevSourceMapHandler(handler: (error: Error) => void): void {
|
|
135
|
+
setSourceMapCallback(handler);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Dev-only: debug components getter is stored per-request in ALS
|
|
139
|
+
// (RequestContextStore.debugComponentsGetter) to avoid cross-request
|
|
140
|
+
// race conditions. See TIM-557.
|
|
141
|
+
|
|
93
142
|
/**
|
|
94
143
|
* Create the RSC request handler from the route manifest.
|
|
95
144
|
*
|
|
@@ -103,13 +152,25 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
|
|
|
103
152
|
// See design/17-logging.md §"register() — Server Startup"
|
|
104
153
|
await loadInstrumentation(loadUserInstrumentation);
|
|
105
154
|
|
|
106
|
-
// Initialize
|
|
107
|
-
|
|
108
|
-
|
|
155
|
+
// Initialize deployment ID for version skew detection (TIM-446).
|
|
156
|
+
// The manifest init module sets globalThis.__TIMBER_DEPLOYMENT_ID__ at startup.
|
|
157
|
+
// In dev mode this is undefined — skew checks are skipped.
|
|
158
|
+
const deploymentId = (globalThis as Record<string, unknown>).__TIMBER_DEPLOYMENT_ID__ as
|
|
159
|
+
| string
|
|
109
160
|
| undefined;
|
|
110
|
-
if (
|
|
111
|
-
const {
|
|
112
|
-
|
|
161
|
+
if (deploymentId) {
|
|
162
|
+
const { setDeploymentId } = await import('../version-skew.js');
|
|
163
|
+
setDeploymentId(deploymentId);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Wire the configured cache handler into the module-level singleton (TIM-599).
|
|
167
|
+
// The cacheHandler is a class instance (e.g. RedisCacheHandler) that can't be
|
|
168
|
+
// JSON-serialized into virtual:timber-config. Instead, virtual:timber-cache-handler
|
|
169
|
+
// dynamically imports the user's timber.config.ts and extracts the handler.
|
|
170
|
+
const userCacheHandler = await loadCacheHandler();
|
|
171
|
+
if (userCacheHandler) {
|
|
172
|
+
const { setCacheHandler } = await import('../../cache/handler-store.js');
|
|
173
|
+
setCacheHandler(userCacheHandler as Parameters<typeof setCacheHandler>[0]);
|
|
113
174
|
}
|
|
114
175
|
|
|
115
176
|
const matchRoute = createRouteMatcher(manifest);
|
|
@@ -136,6 +197,18 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
|
|
|
136
197
|
setDebugFromConfig(true);
|
|
137
198
|
}
|
|
138
199
|
|
|
200
|
+
// Wire the global sensitive-field stripping config so `createActionClient`
|
|
201
|
+
// instances in user code pick up `forms.stripSensitiveFields` from
|
|
202
|
+
// `timber.config.ts` without needing to plumb config through each action.
|
|
203
|
+
// See TIM-816 and design/08-forms-and-actions.md §"Validation errors".
|
|
204
|
+
const formsConfig = (runtimeConfig as Record<string, unknown>).forms as
|
|
205
|
+
| { stripSensitiveFields?: import('../sensitive-fields.js').SensitiveFieldsOption }
|
|
206
|
+
| undefined;
|
|
207
|
+
if (formsConfig) {
|
|
208
|
+
const { setGlobalSensitiveFieldsConfig } = await import('../sensitive-fields.js');
|
|
209
|
+
setGlobalSensitiveFieldsConfig(formsConfig.stripSensitiveFields);
|
|
210
|
+
}
|
|
211
|
+
|
|
139
212
|
// Two separate flags for two different security levels:
|
|
140
213
|
//
|
|
141
214
|
// isDev (isDevMode) — gates client-visible behavior: dev error pages with
|
|
@@ -166,17 +239,6 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
|
|
|
166
239
|
|
|
167
240
|
const typedBuildManifest = buildManifest as BuildManifest;
|
|
168
241
|
|
|
169
|
-
// Initialize response-level caching and singleflight deduplication.
|
|
170
|
-
// See design/31-benchmarking.md for performance motivation.
|
|
171
|
-
const responseCacheRaw = (runtimeConfig as Record<string, unknown>).responseCache as
|
|
172
|
-
| { maxSize?: number; ttlMs?: number; publicOnly?: boolean }
|
|
173
|
-
| false
|
|
174
|
-
| undefined;
|
|
175
|
-
const responseCacheConfig = resolveResponseCacheConfig(responseCacheRaw);
|
|
176
|
-
const responseCache: ResponseCache | null = responseCacheConfig
|
|
177
|
-
? createResponseCache(responseCacheConfig)
|
|
178
|
-
: null;
|
|
179
|
-
|
|
180
242
|
const pipelineConfig: PipelineConfig = {
|
|
181
243
|
proxyLoader: manifest.proxy?.load,
|
|
182
244
|
matchRoute,
|
|
@@ -207,33 +269,125 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
|
|
|
207
269
|
_requestHeaderOverlay: Headers,
|
|
208
270
|
interception?: InterceptionContext
|
|
209
271
|
) => {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
return doRender();
|
|
272
|
+
return renderRoute(
|
|
273
|
+
req,
|
|
274
|
+
match,
|
|
275
|
+
responseHeaders,
|
|
276
|
+
clientBootstrap,
|
|
277
|
+
clientJsDisabled,
|
|
278
|
+
interception,
|
|
279
|
+
manifest.root,
|
|
280
|
+
manifest.globalError
|
|
281
|
+
);
|
|
221
282
|
},
|
|
222
283
|
renderNoMatch: async (req: Request, responseHeaders: Headers) => {
|
|
223
|
-
|
|
284
|
+
const response = await renderNoMatchPage(
|
|
285
|
+
req,
|
|
286
|
+
manifest.root,
|
|
287
|
+
responseHeaders,
|
|
288
|
+
clientBootstrap
|
|
289
|
+
);
|
|
290
|
+
|
|
291
|
+
// In dev mode, if the pipeline returned a bare 404 (no body — meaning
|
|
292
|
+
// no user-defined 404.tsx was found), replace it with a helpful dev
|
|
293
|
+
// page that lists available routes and suggests similar paths.
|
|
294
|
+
// Only for GET requests that accept HTML — HEAD/API/RSC clients
|
|
295
|
+
// should receive the bare 404 without an HTML body (TIM-793).
|
|
296
|
+
const acceptsHtml = (req.headers.get('accept') ?? '').includes('text/html');
|
|
297
|
+
if (isDev && !response.body && req.method === 'GET' && acceptsHtml) {
|
|
298
|
+
const { generateDev404Page, collectRoutes } = await import('../../plugins/dev-404-page.js');
|
|
299
|
+
const routes = collectRoutes(manifest.root);
|
|
300
|
+
const pathname = new URL(req.url).pathname;
|
|
301
|
+
const html = generateDev404Page(pathname, routes);
|
|
302
|
+
return new Response(html, {
|
|
303
|
+
status: 404,
|
|
304
|
+
headers: {
|
|
305
|
+
...Object.fromEntries(responseHeaders.entries()),
|
|
306
|
+
'content-type': 'text/html; charset=utf-8',
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
return response;
|
|
224
312
|
},
|
|
225
313
|
interceptionRewrites: manifest.interceptionRewrites,
|
|
226
314
|
// Slow request threshold from timber.config.ts. Default 3000ms, 0 to disable.
|
|
227
315
|
// See design/17-logging.md §"slowRequestMs"
|
|
228
316
|
slowRequestMs: (runtimeConfig as Record<string, unknown>).slowRequestMs as number | undefined,
|
|
229
|
-
|
|
317
|
+
serverTiming: resolveServerTimingMode(runtimeConfig, isDev),
|
|
230
318
|
onPipelineError: isDev
|
|
231
319
|
? (error: Error, phase: string) => {
|
|
232
|
-
if (_devPipelineErrorHandler)
|
|
320
|
+
if (_devPipelineErrorHandler) {
|
|
321
|
+
// For render-phase errors, include RSC debug component data
|
|
322
|
+
// from the Flight debug channel (if available from the current request).
|
|
323
|
+
const store = requestContextAls.getStore();
|
|
324
|
+
const debugComponents =
|
|
325
|
+
phase === 'render' && store?.debugComponentsGetter
|
|
326
|
+
? store.debugComponentsGetter()
|
|
327
|
+
: undefined;
|
|
328
|
+
_devPipelineErrorHandler(error, phase, debugComponents);
|
|
329
|
+
}
|
|
233
330
|
}
|
|
234
331
|
: undefined,
|
|
332
|
+
|
|
235
333
|
renderFallbackError: (error, req, responseHeaders) =>
|
|
236
|
-
renderFallback(
|
|
334
|
+
renderFallback(
|
|
335
|
+
error,
|
|
336
|
+
req,
|
|
337
|
+
responseHeaders,
|
|
338
|
+
isDev,
|
|
339
|
+
manifest.root,
|
|
340
|
+
clientBootstrap,
|
|
341
|
+
manifest.globalError,
|
|
342
|
+
// Project root for dev error page frame classification.
|
|
343
|
+
// Not in runtimeConfig (TIM-787: leaked to client bundles).
|
|
344
|
+
// manifest.viteRoot is the resolved Vite root string — correct even
|
|
345
|
+
// when CWD differs from project root (e.g., monorepo custom root)
|
|
346
|
+
// (TIM-807). Passing manifest.root (segment tree object) here would
|
|
347
|
+
// stringify to "[object Object]" and misclassify app frames as
|
|
348
|
+
// internal, dropping source locations from the dev error page (TIM-808).
|
|
349
|
+
isDev ? manifest.viteRoot : undefined
|
|
350
|
+
),
|
|
351
|
+
renderDenyFallback: async (deny, req, responseHeaders) => {
|
|
352
|
+
// Render the deny page (403.tsx, 404.tsx, etc.) for DenySignals
|
|
353
|
+
// that escape from middleware or the render phase. Uses the root
|
|
354
|
+
// segment to resolve status-code files and layout wrapping.
|
|
355
|
+
const segments = [
|
|
356
|
+
manifest.root,
|
|
357
|
+
] as unknown as import('../route-matcher.js').ManifestSegmentNode[];
|
|
358
|
+
const layoutComponents: LayoutEntry[] = [];
|
|
359
|
+
try {
|
|
360
|
+
if (manifest.root.layout) {
|
|
361
|
+
const mod = await loadModule(manifest.root.layout);
|
|
362
|
+
if (mod.default) {
|
|
363
|
+
layoutComponents.push({
|
|
364
|
+
component: mod.default as (...args: unknown[]) => unknown,
|
|
365
|
+
segment:
|
|
366
|
+
manifest.root as unknown as import('../route-matcher.js').ManifestSegmentNode,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
} catch (layoutError) {
|
|
371
|
+
// Layout failed to load — proceed without it.
|
|
372
|
+
logRenderError({ method: req.method, path: new URL(req.url).pathname, error: layoutError });
|
|
373
|
+
}
|
|
374
|
+
const match = { segments: segments as never, segmentParams: {}, middlewareChain: [] };
|
|
375
|
+
return renderDenyPage(
|
|
376
|
+
deny,
|
|
377
|
+
segments,
|
|
378
|
+
layoutComponents,
|
|
379
|
+
req,
|
|
380
|
+
match,
|
|
381
|
+
responseHeaders,
|
|
382
|
+
clientBootstrap,
|
|
383
|
+
createDebugChannelSink,
|
|
384
|
+
callSsr
|
|
385
|
+
);
|
|
386
|
+
},
|
|
387
|
+
// Auto-generated sitemap handler — enabled when sitemap.enabled is true
|
|
388
|
+
// and no user-authored sitemap exists at the app root.
|
|
389
|
+
// See design/16-metadata.md §"Auto-generated Sitemap"
|
|
390
|
+
autoSitemapHandler: createAutoSitemapHandler(manifest.root, runtimeConfig),
|
|
237
391
|
};
|
|
238
392
|
|
|
239
393
|
const pipeline = createPipeline(pipelineConfig);
|
|
@@ -255,6 +409,7 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
|
|
|
255
409
|
bodyLimits: {
|
|
256
410
|
limits: (runtimeConfig as Record<string, unknown>).limits as BodyLimitsConfig['limits'],
|
|
257
411
|
},
|
|
412
|
+
sensitiveFields: formsConfig?.stripSensitiveFields,
|
|
258
413
|
revalidateRenderer: async (path: string) => {
|
|
259
414
|
// Build the React element tree for the route at `path`.
|
|
260
415
|
// Returns the element tree (not serialized) so the action handler can
|
|
@@ -269,6 +424,14 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
|
|
|
269
424
|
if (!revalidateMatch) {
|
|
270
425
|
throw new Error(`revalidatePath('${path}') — no matching route`);
|
|
271
426
|
}
|
|
427
|
+
// Coerce segment params (params.ts) before building the element tree.
|
|
428
|
+
// Without this, components receive raw strings instead of typed values.
|
|
429
|
+
await coerceSegmentParams(revalidateMatch);
|
|
430
|
+
// Set coerced params in ALS so getSegmentParams() works during
|
|
431
|
+
// the revalidation render (AccessGate reads params via ALS).
|
|
432
|
+
// Without this, AccessGate → getSegmentParams() throws because
|
|
433
|
+
// segmentParamsPromise is never set. See TIM-667.
|
|
434
|
+
setSegmentParams(revalidateMatch.segmentParams);
|
|
272
435
|
const routeResult = await buildRouteElement(revalidateReq, revalidateMatch);
|
|
273
436
|
return {
|
|
274
437
|
element: routeResult.element,
|
|
@@ -309,7 +472,9 @@ async function renderRoute(
|
|
|
309
472
|
responseHeaders: Headers,
|
|
310
473
|
clientBootstrap: ClientBootstrapConfig,
|
|
311
474
|
clientJsDisabled: boolean,
|
|
312
|
-
interception?: InterceptionContext
|
|
475
|
+
interception?: InterceptionContext,
|
|
476
|
+
rootSegment?: ManifestSegmentNode,
|
|
477
|
+
globalError?: { load: () => Promise<unknown>; filePath: string }
|
|
313
478
|
): Promise<Response> {
|
|
314
479
|
const segments = match.segments as unknown as ManifestSegmentNode[];
|
|
315
480
|
const leaf = segments[segments.length - 1];
|
|
@@ -328,48 +493,40 @@ async function renderRoute(
|
|
|
328
493
|
// See design/19-client-navigation.md §"X-Timber-State-Tree Header"
|
|
329
494
|
const clientStateTree = isRscPayloadRequest(_req) ? parseClientStateTree(_req) : null;
|
|
330
495
|
|
|
331
|
-
// Build the React element tree — loads modules,
|
|
332
|
-
// resolves metadata.
|
|
496
|
+
// Build the React element tree — loads modules, collects access checks,
|
|
497
|
+
// resolves metadata. Access checks are NOT run here — they run inside
|
|
498
|
+
// AccessPreRunner during renderToReadableStream so that access.ts and
|
|
499
|
+
// render components share the same React.cache scope (TIM-662).
|
|
500
|
+
//
|
|
501
|
+
// DenySignal/RedirectSignal from access checks are caught by onError
|
|
502
|
+
// during stream consumption and handled by renderSsrResponse /
|
|
503
|
+
// buildRscPayloadResponse.
|
|
333
504
|
let routeResult;
|
|
505
|
+
const _buildStart = performance.now();
|
|
334
506
|
try {
|
|
335
507
|
routeResult = await buildRouteElement(_req, match, interception, clientStateTree);
|
|
336
508
|
} catch (error) {
|
|
337
|
-
//
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
signal,
|
|
344
|
-
segs,
|
|
345
|
-
lc as LayoutEntry[],
|
|
346
|
-
responseHeaders,
|
|
347
|
-
createDebugChannelSink
|
|
348
|
-
);
|
|
349
|
-
}
|
|
350
|
-
return renderDenyPage(
|
|
351
|
-
signal,
|
|
352
|
-
segs,
|
|
353
|
-
lc as LayoutEntry[],
|
|
354
|
-
_req,
|
|
355
|
-
match,
|
|
356
|
-
responseHeaders,
|
|
357
|
-
clientBootstrap,
|
|
358
|
-
createDebugChannelSink,
|
|
359
|
-
callSsr
|
|
360
|
-
);
|
|
361
|
-
}
|
|
362
|
-
if (signal instanceof RedirectSignal) {
|
|
363
|
-
return buildRedirectResponse(_req, signal, responseHeaders);
|
|
364
|
-
}
|
|
509
|
+
// Param coercion failed — render the custom 404 page (status files / not-found).
|
|
510
|
+
// Previously returned a bare Response(null, { status: 404 }) which bypassed
|
|
511
|
+
// custom not-found pages. Now routes through renderNoMatchPage so apps with
|
|
512
|
+
// 404.tsx / not-found status files render their custom page.
|
|
513
|
+
if (error instanceof ParamCoercionError) {
|
|
514
|
+
return renderNoMatchPage(_req, rootSegment!, responseHeaders, clientBootstrap);
|
|
365
515
|
}
|
|
366
|
-
// No PageComponent found
|
|
516
|
+
// No PageComponent found — same treatment as param coercion: render custom 404.
|
|
367
517
|
if (error instanceof Error && error.message.startsWith('No page component')) {
|
|
368
|
-
return
|
|
518
|
+
return renderNoMatchPage(_req, rootSegment!, responseHeaders, clientBootstrap);
|
|
369
519
|
}
|
|
370
520
|
throw error;
|
|
371
521
|
}
|
|
372
522
|
|
|
523
|
+
const _buildEnd = performance.now();
|
|
524
|
+
recordTiming({
|
|
525
|
+
name: 'build',
|
|
526
|
+
dur: Math.round(_buildEnd - _buildStart),
|
|
527
|
+
desc: 'build element tree',
|
|
528
|
+
});
|
|
529
|
+
|
|
373
530
|
const { element, headElements, layoutComponents, deferSuspenseFor, skippedSegments } =
|
|
374
531
|
routeResult;
|
|
375
532
|
|
|
@@ -383,14 +540,22 @@ async function renderRoute(
|
|
|
383
540
|
const typedManifest = buildManifest as BuildManifest;
|
|
384
541
|
let headHtml = '';
|
|
385
542
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
543
|
+
// CSS is handled by the RSC plugin via ReactDOM.preinit() with
|
|
544
|
+
// data-precedence attributes. This injects <link rel="stylesheet">
|
|
545
|
+
// tags during the RSC render phase — before our headHtml injection.
|
|
546
|
+
// We do NOT emit additional <link rel="stylesheet"> tags here because:
|
|
547
|
+
// 1. React's Float system deduplicates them, making ours redundant
|
|
548
|
+
// 2. The duplicate reference confuses React's client-side preload
|
|
549
|
+
// deduplication, causing "preload ignored" browser warnings
|
|
550
|
+
//
|
|
551
|
+
// CSS URLs are still collected for Early Hints (Link headers) in
|
|
552
|
+
// buildEarlyHintsHeaders() — those are HTTP headers, not DOM elements,
|
|
553
|
+
// so they don't conflict with Float.
|
|
390
554
|
|
|
391
555
|
// Inline font CSS as a <style> tag — @font-face rules and scoped classes.
|
|
392
|
-
// The
|
|
393
|
-
//
|
|
556
|
+
// The font CSS is set on globalThis by the transformed font file's
|
|
557
|
+
// side-effect import of virtual:timber-font-css-register.
|
|
558
|
+
const fontCss = (globalThis as Record<string, unknown>).__timber_font_css as string | undefined;
|
|
394
559
|
if (fontCss) {
|
|
395
560
|
headHtml += `<style data-timber-fonts>${fontCss}</style>`;
|
|
396
561
|
}
|
|
@@ -420,8 +585,34 @@ async function renderRoute(
|
|
|
420
585
|
}
|
|
421
586
|
}
|
|
422
587
|
|
|
588
|
+
// In dev mode, inject the browser log forwarding script so console
|
|
589
|
+
// errors/warnings from the browser appear in the server terminal.
|
|
590
|
+
// Set by timber-dev-browser-logs plugin via globalThis (TIM-575).
|
|
591
|
+
if (isDevMode()) {
|
|
592
|
+
const devLogScript = (globalThis as Record<string, unknown>).__timber_dev_browser_log_script as
|
|
593
|
+
| string
|
|
594
|
+
| undefined;
|
|
595
|
+
if (devLogScript) {
|
|
596
|
+
headHtml += devLogScript;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
|
|
423
600
|
// Render to RSC Flight stream with signal tracking.
|
|
424
|
-
const
|
|
601
|
+
const _rscStart = performance.now();
|
|
602
|
+
const { rscStream, signals, getDebugComponents } = renderRscStream(element, _req);
|
|
603
|
+
|
|
604
|
+
// Store the debug components getter in ALS so onPipelineError can
|
|
605
|
+
// include component tree context for render-phase errors (dev mode only).
|
|
606
|
+
// Per-request via ALS — no cross-request race. See TIM-557.
|
|
607
|
+
const alsStore = requestContextAls.getStore();
|
|
608
|
+
if (alsStore) {
|
|
609
|
+
alsStore.debugComponentsGetter = getDebugComponents;
|
|
610
|
+
}
|
|
611
|
+
recordTiming({
|
|
612
|
+
name: 'rsc-init',
|
|
613
|
+
dur: Math.round(performance.now() - _rscStart),
|
|
614
|
+
desc: 'RSC stream init',
|
|
615
|
+
});
|
|
425
616
|
|
|
426
617
|
// Synchronous redirect — redirect() in access.ts or a non-async component
|
|
427
618
|
// throws during renderToReadableStream creation. Return HTTP redirect.
|
|
@@ -466,7 +657,8 @@ async function renderRoute(
|
|
|
466
657
|
_req,
|
|
467
658
|
match,
|
|
468
659
|
responseHeaders,
|
|
469
|
-
clientBootstrap
|
|
660
|
+
clientBootstrap,
|
|
661
|
+
globalError
|
|
470
662
|
);
|
|
471
663
|
}
|
|
472
664
|
|
|
@@ -500,15 +692,16 @@ async function renderRoute(
|
|
|
500
692
|
clientJsDisabled,
|
|
501
693
|
headHtml,
|
|
502
694
|
deferSuspenseFor,
|
|
695
|
+
globalError,
|
|
503
696
|
});
|
|
504
697
|
}
|
|
505
698
|
|
|
506
699
|
// Re-export for generated entry points (e.g., Nitro node-server/bun) to wrap
|
|
507
700
|
// the handler with per-request 103 Early Hints sender via ALS.
|
|
508
|
-
export { runWithEarlyHintsSender } from '
|
|
701
|
+
export { runWithEarlyHintsSender } from '../early-hints-sender.js';
|
|
509
702
|
|
|
510
703
|
// Re-export for generated entry points to wrap the handler with per-request
|
|
511
704
|
// waitUntil support via ALS. See design/11-platform.md §"waitUntil()".
|
|
512
|
-
export { runWithWaitUntil } from '
|
|
705
|
+
export { runWithWaitUntil } from '../waituntil-bridge.js';
|
|
513
706
|
|
|
514
707
|
export default await createRequestHandler(routeManifest, config);
|