@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.
Files changed (610) hide show
  1. package/dist/_chunks/actions-DLnUaR65.js +421 -0
  2. package/dist/_chunks/actions-DLnUaR65.js.map +1 -0
  3. package/dist/_chunks/{als-registry-B7DbZ2hS.js → als-registry-HS0LGUl2.js} +1 -1
  4. package/dist/_chunks/als-registry-HS0LGUl2.js.map +1 -0
  5. package/dist/_chunks/chunk-BYIpzuS7.js +39 -0
  6. package/dist/_chunks/{debug-gwlJkDuf.js → debug-ECi_61pb.js} +2 -2
  7. package/dist/_chunks/debug-ECi_61pb.js.map +1 -0
  8. package/dist/_chunks/define-C77ScO0m.js +106 -0
  9. package/dist/_chunks/define-C77ScO0m.js.map +1 -0
  10. package/dist/_chunks/define-Itxvcd7F.js +199 -0
  11. package/dist/_chunks/define-Itxvcd7F.js.map +1 -0
  12. package/dist/_chunks/define-cookie-BowvzoP0.js +94 -0
  13. package/dist/_chunks/define-cookie-BowvzoP0.js.map +1 -0
  14. package/dist/_chunks/{format-DviM89f0.js → dev-warnings-DpGRGoDi.js} +5 -44
  15. package/dist/_chunks/dev-warnings-DpGRGoDi.js.map +1 -0
  16. package/dist/_chunks/format-CYBGxKtc.js +14 -0
  17. package/dist/_chunks/format-CYBGxKtc.js.map +1 -0
  18. package/dist/_chunks/{interception-BOoWmLUA.js → interception-DRlhJWbu.js} +219 -97
  19. package/dist/_chunks/interception-DRlhJWbu.js.map +1 -0
  20. package/dist/_chunks/merge-search-params-Cm_KIWDX.js +41 -0
  21. package/dist/_chunks/merge-search-params-Cm_KIWDX.js.map +1 -0
  22. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DS3eKNmf.js} +1 -1
  23. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js.map → metadata-routes-DS3eKNmf.js.map} +1 -1
  24. package/dist/_chunks/request-context-CK5tZqIP.js +478 -0
  25. package/dist/_chunks/request-context-CK5tZqIP.js.map +1 -0
  26. package/dist/_chunks/schema-bridge-C3xl_vfb.js +86 -0
  27. package/dist/_chunks/schema-bridge-C3xl_vfb.js.map +1 -0
  28. package/dist/_chunks/segment-classify-BDNn6EzD.js +65 -0
  29. package/dist/_chunks/segment-classify-BDNn6EzD.js.map +1 -0
  30. package/dist/_chunks/segment-context-fHFLF1PE.js +34 -0
  31. package/dist/_chunks/segment-context-fHFLF1PE.js.map +1 -0
  32. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-DzuI0bIV.js} +1 -1
  33. package/dist/_chunks/{ssr-data-MjmprTmO.js.map → ssr-data-DzuI0bIV.js.map} +1 -1
  34. package/dist/_chunks/stale-reload-BX5gL1r-.js +64 -0
  35. package/dist/_chunks/stale-reload-BX5gL1r-.js.map +1 -0
  36. package/dist/_chunks/{tracing-CemImE6h.js → tracing-CCYbKn5n.js} +60 -9
  37. package/dist/_chunks/tracing-CCYbKn5n.js.map +1 -0
  38. package/dist/_chunks/use-params-Br9YSUFV.js +295 -0
  39. package/dist/_chunks/use-params-Br9YSUFV.js.map +1 -0
  40. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-BiV5GJgm.js} +7 -4
  41. package/dist/_chunks/use-query-states-BiV5GJgm.js.map +1 -0
  42. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  43. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  44. package/dist/adapters/cloudflare-dev.js +73 -0
  45. package/dist/adapters/cloudflare-dev.js.map +1 -0
  46. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  47. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  48. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  49. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  50. package/dist/adapters/cloudflare.d.ts +148 -12
  51. package/dist/adapters/cloudflare.d.ts.map +1 -1
  52. package/dist/adapters/cloudflare.js +135 -11
  53. package/dist/adapters/cloudflare.js.map +1 -1
  54. package/dist/adapters/compress-module.d.ts.map +1 -1
  55. package/dist/adapters/nitro.d.ts +17 -1
  56. package/dist/adapters/nitro.d.ts.map +1 -1
  57. package/dist/adapters/nitro.js +56 -13
  58. package/dist/adapters/nitro.js.map +1 -1
  59. package/dist/cache/cache-api.d.ts +24 -0
  60. package/dist/cache/cache-api.d.ts.map +1 -0
  61. package/dist/cache/handler-store.d.ts +31 -0
  62. package/dist/cache/handler-store.d.ts.map +1 -0
  63. package/dist/cache/index.d.ts +23 -7
  64. package/dist/cache/index.d.ts.map +1 -1
  65. package/dist/cache/index.js +142 -80
  66. package/dist/cache/index.js.map +1 -1
  67. package/dist/cache/singleflight.d.ts +18 -1
  68. package/dist/cache/singleflight.d.ts.map +1 -1
  69. package/dist/cache/sizeof.d.ts +22 -0
  70. package/dist/cache/sizeof.d.ts.map +1 -0
  71. package/dist/cache/timber-cache.d.ts +1 -1
  72. package/dist/cache/timber-cache.d.ts.map +1 -1
  73. package/dist/cli.d.ts +6 -1
  74. package/dist/cli.d.ts.map +1 -1
  75. package/dist/cli.js +8 -3
  76. package/dist/cli.js.map +1 -1
  77. package/dist/client/browser-dev.d.ts +27 -1
  78. package/dist/client/browser-dev.d.ts.map +1 -1
  79. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  80. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  81. package/dist/client/browser-entry/hmr.d.ts +21 -0
  82. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  83. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  84. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  85. package/dist/client/browser-entry/index.d.ts +30 -0
  86. package/dist/client/browser-entry/index.d.ts.map +1 -0
  87. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  88. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  89. package/dist/client/browser-entry/router-init.d.ts +23 -0
  90. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  91. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  92. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  93. package/dist/client/browser-entry/scroll.d.ts +19 -0
  94. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  95. package/dist/client/error-boundary.d.ts +12 -5
  96. package/dist/client/error-boundary.d.ts.map +1 -1
  97. package/dist/client/error-boundary.js +10 -4
  98. package/dist/client/error-boundary.js.map +1 -1
  99. package/dist/client/error-reconstituter.d.ts +54 -0
  100. package/dist/client/error-reconstituter.d.ts.map +1 -0
  101. package/dist/client/form.d.ts +6 -3
  102. package/dist/client/form.d.ts.map +1 -1
  103. package/dist/client/history.d.ts +19 -4
  104. package/dist/client/history.d.ts.map +1 -1
  105. package/dist/client/index.d.ts +9 -21
  106. package/dist/client/index.d.ts.map +1 -1
  107. package/dist/client/index.js +229 -1018
  108. package/dist/client/index.js.map +1 -1
  109. package/dist/client/internal.d.ts +18 -0
  110. package/dist/client/internal.d.ts.map +1 -0
  111. package/dist/client/internal.js +890 -0
  112. package/dist/client/internal.js.map +1 -0
  113. package/dist/client/link-pending-store.d.ts +63 -0
  114. package/dist/client/link-pending-store.d.ts.map +1 -0
  115. package/dist/client/link.d.ts +62 -55
  116. package/dist/client/link.d.ts.map +1 -1
  117. package/dist/client/nav-link-store.d.ts +36 -0
  118. package/dist/client/nav-link-store.d.ts.map +1 -0
  119. package/dist/client/navigation-api-types.d.ts +90 -0
  120. package/dist/client/navigation-api-types.d.ts.map +1 -0
  121. package/dist/client/navigation-api.d.ts +115 -0
  122. package/dist/client/navigation-api.d.ts.map +1 -0
  123. package/dist/client/navigation-context.d.ts +13 -2
  124. package/dist/client/navigation-context.d.ts.map +1 -1
  125. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
  126. package/dist/client/navigation-root.d.ts.map +1 -0
  127. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  128. package/dist/client/router-ref.d.ts +1 -1
  129. package/dist/client/router.d.ts +70 -4
  130. package/dist/client/router.d.ts.map +1 -1
  131. package/dist/client/rsc-fetch.d.ts +38 -3
  132. package/dist/client/rsc-fetch.d.ts.map +1 -1
  133. package/dist/client/segment-cache.d.ts +1 -1
  134. package/dist/client/segment-cache.d.ts.map +1 -1
  135. package/dist/client/segment-outlet.d.ts +63 -0
  136. package/dist/client/segment-outlet.d.ts.map +1 -0
  137. package/dist/client/ssr-data.d.ts +13 -4
  138. package/dist/client/ssr-data.d.ts.map +1 -1
  139. package/dist/client/stale-reload.d.ts +15 -0
  140. package/dist/client/stale-reload.d.ts.map +1 -1
  141. package/dist/client/top-loader.d.ts +5 -5
  142. package/dist/client/top-loader.d.ts.map +1 -1
  143. package/dist/client/use-link-status.d.ts +5 -5
  144. package/dist/client/use-link-status.d.ts.map +1 -1
  145. package/dist/client/use-params.d.ts +6 -4
  146. package/dist/client/use-params.d.ts.map +1 -1
  147. package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
  148. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  149. package/dist/client/use-query-states.d.ts +1 -1
  150. package/dist/client/use-query-states.d.ts.map +1 -1
  151. package/dist/client/use-router.d.ts +1 -1
  152. package/dist/codec.d.ts +33 -0
  153. package/dist/codec.d.ts.map +1 -0
  154. package/dist/codec.js +2 -0
  155. package/dist/config-types.d.ts +266 -0
  156. package/dist/config-types.d.ts.map +1 -0
  157. package/dist/config-validation.d.ts +51 -0
  158. package/dist/config-validation.d.ts.map +1 -0
  159. package/dist/content/index.d.ts +1 -10
  160. package/dist/content/index.d.ts.map +1 -1
  161. package/dist/content/index.js +0 -2
  162. package/dist/cookies/define-cookie.d.ts +35 -14
  163. package/dist/cookies/define-cookie.d.ts.map +1 -1
  164. package/dist/cookies/index.js +1 -83
  165. package/dist/fonts/bundle.d.ts +48 -0
  166. package/dist/fonts/bundle.d.ts.map +1 -0
  167. package/dist/fonts/css.d.ts +1 -0
  168. package/dist/fonts/css.d.ts.map +1 -1
  169. package/dist/fonts/dev-middleware.d.ts +22 -0
  170. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  171. package/dist/fonts/pipeline.d.ts +138 -0
  172. package/dist/fonts/pipeline.d.ts.map +1 -0
  173. package/dist/fonts/transform.d.ts +72 -0
  174. package/dist/fonts/transform.d.ts.map +1 -0
  175. package/dist/fonts/types.d.ts +45 -1
  176. package/dist/fonts/types.d.ts.map +1 -1
  177. package/dist/fonts/virtual-modules.d.ts +59 -0
  178. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  179. package/dist/index.d.ts +45 -190
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +4294 -2453
  182. package/dist/index.js.map +1 -1
  183. package/dist/plugin-context.d.ts +107 -0
  184. package/dist/plugin-context.d.ts.map +1 -0
  185. package/dist/plugins/adapter-build.d.ts +1 -1
  186. package/dist/plugins/adapter-build.d.ts.map +1 -1
  187. package/dist/plugins/build-manifest.d.ts +2 -2
  188. package/dist/plugins/build-manifest.d.ts.map +1 -1
  189. package/dist/plugins/build-report.d.ts +3 -3
  190. package/dist/plugins/build-report.d.ts.map +1 -1
  191. package/dist/plugins/client-chunks.d.ts +32 -0
  192. package/dist/plugins/client-chunks.d.ts.map +1 -0
  193. package/dist/plugins/content.d.ts +1 -1
  194. package/dist/plugins/content.d.ts.map +1 -1
  195. package/dist/plugins/dev-404-page.d.ts +56 -0
  196. package/dist/plugins/dev-404-page.d.ts.map +1 -0
  197. package/dist/plugins/dev-browser-logs.d.ts +84 -0
  198. package/dist/plugins/dev-browser-logs.d.ts.map +1 -0
  199. package/dist/plugins/dev-error-overlay.d.ts +49 -9
  200. package/dist/plugins/dev-error-overlay.d.ts.map +1 -1
  201. package/dist/plugins/dev-error-page.d.ts +58 -0
  202. package/dist/plugins/dev-error-page.d.ts.map +1 -0
  203. package/dist/plugins/dev-logs.d.ts +1 -1
  204. package/dist/plugins/dev-logs.d.ts.map +1 -1
  205. package/dist/plugins/dev-server.d.ts +1 -1
  206. package/dist/plugins/dev-server.d.ts.map +1 -1
  207. package/dist/plugins/dev-terminal-error.d.ts +28 -0
  208. package/dist/plugins/dev-terminal-error.d.ts.map +1 -0
  209. package/dist/plugins/entries.d.ts +1 -1
  210. package/dist/plugins/entries.d.ts.map +1 -1
  211. package/dist/plugins/fonts.d.ts +17 -73
  212. package/dist/plugins/fonts.d.ts.map +1 -1
  213. package/dist/plugins/mdx.d.ts +1 -1
  214. package/dist/plugins/mdx.d.ts.map +1 -1
  215. package/dist/plugins/routing.d.ts +1 -1
  216. package/dist/plugins/routing.d.ts.map +1 -1
  217. package/dist/plugins/server-bundle.d.ts.map +1 -1
  218. package/dist/plugins/shims.d.ts +6 -5
  219. package/dist/plugins/shims.d.ts.map +1 -1
  220. package/dist/plugins/static-build.d.ts +4 -4
  221. package/dist/plugins/static-build.d.ts.map +1 -1
  222. package/dist/routing/codegen.d.ts +2 -2
  223. package/dist/routing/codegen.d.ts.map +1 -1
  224. package/dist/routing/convention-lint.d.ts +41 -0
  225. package/dist/routing/convention-lint.d.ts.map +1 -0
  226. package/dist/routing/index.d.ts +2 -0
  227. package/dist/routing/index.d.ts.map +1 -1
  228. package/dist/routing/index.js +3 -2
  229. package/dist/routing/scanner.d.ts.map +1 -1
  230. package/dist/routing/segment-classify.d.ts +46 -0
  231. package/dist/routing/segment-classify.d.ts.map +1 -0
  232. package/dist/routing/status-file-lint.d.ts +2 -1
  233. package/dist/routing/status-file-lint.d.ts.map +1 -1
  234. package/dist/routing/types.d.ts +16 -4
  235. package/dist/routing/types.d.ts.map +1 -1
  236. package/dist/rsc-runtime/rsc.d.ts +1 -1
  237. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  238. package/dist/rsc-runtime/ssr.d.ts +12 -0
  239. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  240. package/dist/schema-bridge.d.ts +76 -0
  241. package/dist/schema-bridge.d.ts.map +1 -0
  242. package/dist/search-params/define.d.ts +139 -0
  243. package/dist/search-params/define.d.ts.map +1 -0
  244. package/dist/search-params/index.d.ts +4 -7
  245. package/dist/search-params/index.d.ts.map +1 -1
  246. package/dist/search-params/index.js +32 -441
  247. package/dist/search-params/index.js.map +1 -1
  248. package/dist/search-params/registry.d.ts +2 -2
  249. package/dist/search-params/registry.d.ts.map +1 -1
  250. package/dist/search-params/wrappers.d.ts +53 -0
  251. package/dist/search-params/wrappers.d.ts.map +1 -0
  252. package/dist/segment-params/define.d.ts +78 -0
  253. package/dist/segment-params/define.d.ts.map +1 -0
  254. package/dist/segment-params/index.d.ts +3 -0
  255. package/dist/segment-params/index.d.ts.map +1 -0
  256. package/dist/segment-params/index.js +2 -0
  257. package/dist/server/access-gate.d.ts +4 -0
  258. package/dist/server/access-gate.d.ts.map +1 -1
  259. package/dist/server/action-client.d.ts +41 -6
  260. package/dist/server/action-client.d.ts.map +1 -1
  261. package/dist/server/action-encryption.d.ts +76 -0
  262. package/dist/server/action-encryption.d.ts.map +1 -0
  263. package/dist/server/action-handler.d.ts +7 -0
  264. package/dist/server/action-handler.d.ts.map +1 -1
  265. package/dist/server/actions.d.ts +3 -6
  266. package/dist/server/actions.d.ts.map +1 -1
  267. package/dist/server/als-registry.d.ts +32 -4
  268. package/dist/server/als-registry.d.ts.map +1 -1
  269. package/dist/server/build-manifest.d.ts +2 -2
  270. package/dist/server/build-manifest.d.ts.map +1 -1
  271. package/dist/server/debug.d.ts +1 -1
  272. package/dist/server/default-logger.d.ts +22 -0
  273. package/dist/server/default-logger.d.ts.map +1 -0
  274. package/dist/server/deny-page-resolver.d.ts +52 -0
  275. package/dist/server/deny-page-resolver.d.ts.map +1 -0
  276. package/dist/server/deny-renderer.d.ts.map +1 -1
  277. package/dist/server/dev-holding-server.d.ts +52 -0
  278. package/dist/server/dev-holding-server.d.ts.map +1 -0
  279. package/dist/server/dev-source-map.d.ts +22 -0
  280. package/dist/server/dev-source-map.d.ts.map +1 -0
  281. package/dist/server/dev-warnings.d.ts +1 -21
  282. package/dist/server/dev-warnings.d.ts.map +1 -1
  283. package/dist/server/early-hints.d.ts +13 -5
  284. package/dist/server/early-hints.d.ts.map +1 -1
  285. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  286. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  287. package/dist/server/fallback-error.d.ts +12 -7
  288. package/dist/server/fallback-error.d.ts.map +1 -1
  289. package/dist/server/flight-injection-state.d.ts +66 -0
  290. package/dist/server/flight-injection-state.d.ts.map +1 -0
  291. package/dist/server/flight-scripts.d.ts +42 -0
  292. package/dist/server/flight-scripts.d.ts.map +1 -0
  293. package/dist/server/flush.d.ts.map +1 -1
  294. package/dist/server/form-data.d.ts +29 -0
  295. package/dist/server/form-data.d.ts.map +1 -1
  296. package/dist/server/html-injectors.d.ts +51 -11
  297. package/dist/server/html-injectors.d.ts.map +1 -1
  298. package/dist/server/index.d.ts +5 -43
  299. package/dist/server/index.d.ts.map +1 -1
  300. package/dist/server/index.js +195 -2800
  301. package/dist/server/index.js.map +1 -1
  302. package/dist/server/internal.d.ts +46 -0
  303. package/dist/server/internal.d.ts.map +1 -0
  304. package/dist/server/internal.js +2900 -0
  305. package/dist/server/internal.js.map +1 -0
  306. package/dist/server/logger.d.ts +25 -7
  307. package/dist/server/logger.d.ts.map +1 -1
  308. package/dist/server/middleware-runner.d.ts +19 -4
  309. package/dist/server/middleware-runner.d.ts.map +1 -1
  310. package/dist/server/node-stream-transforms.d.ts +113 -0
  311. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  312. package/dist/server/page-deny-boundary.d.ts +31 -0
  313. package/dist/server/page-deny-boundary.d.ts.map +1 -0
  314. package/dist/server/pipeline-interception.d.ts +1 -1
  315. package/dist/server/pipeline-interception.d.ts.map +1 -1
  316. package/dist/server/pipeline-metadata.d.ts +6 -0
  317. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  318. package/dist/server/pipeline.d.ts +52 -10
  319. package/dist/server/pipeline.d.ts.map +1 -1
  320. package/dist/server/primitives.d.ts +69 -18
  321. package/dist/server/primitives.d.ts.map +1 -1
  322. package/dist/server/render-timeout.d.ts +51 -0
  323. package/dist/server/render-timeout.d.ts.map +1 -0
  324. package/dist/server/request-context.d.ts +112 -43
  325. package/dist/server/request-context.d.ts.map +1 -1
  326. package/dist/server/route-element-builder.d.ts +27 -1
  327. package/dist/server/route-element-builder.d.ts.map +1 -1
  328. package/dist/server/route-handler.d.ts.map +1 -1
  329. package/dist/server/route-matcher.d.ts +16 -2
  330. package/dist/server/route-matcher.d.ts.map +1 -1
  331. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  332. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  333. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  334. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  335. package/dist/server/rsc-entry/helpers.d.ts +48 -5
  336. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  337. package/dist/server/rsc-entry/index.d.ts +20 -3
  338. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  339. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  340. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  341. package/dist/server/rsc-entry/rsc-stream.d.ts +14 -1
  342. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  343. package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
  344. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  345. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  346. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  347. package/dist/server/safe-load.d.ts +46 -0
  348. package/dist/server/safe-load.d.ts.map +1 -0
  349. package/dist/server/sensitive-fields.d.ts +74 -0
  350. package/dist/server/sensitive-fields.d.ts.map +1 -0
  351. package/dist/server/sitemap-generator.d.ts +129 -0
  352. package/dist/server/sitemap-generator.d.ts.map +1 -0
  353. package/dist/server/sitemap-handler.d.ts +22 -0
  354. package/dist/server/sitemap-handler.d.ts.map +1 -0
  355. package/dist/server/slot-resolver.d.ts +1 -1
  356. package/dist/server/slot-resolver.d.ts.map +1 -1
  357. package/dist/server/ssr-entry.d.ts +23 -0
  358. package/dist/server/ssr-entry.d.ts.map +1 -1
  359. package/dist/server/ssr-render.d.ts +39 -21
  360. package/dist/server/ssr-render.d.ts.map +1 -1
  361. package/dist/server/ssr-wrappers.d.ts +50 -0
  362. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  363. package/dist/server/status-code-resolver.d.ts +1 -1
  364. package/dist/server/status-code-resolver.d.ts.map +1 -1
  365. package/dist/server/stream-utils.d.ts +36 -0
  366. package/dist/server/stream-utils.d.ts.map +1 -0
  367. package/dist/server/tracing.d.ts +4 -4
  368. package/dist/server/tracing.d.ts.map +1 -1
  369. package/dist/server/tree-builder.d.ts +22 -19
  370. package/dist/server/tree-builder.d.ts.map +1 -1
  371. package/dist/server/types.d.ts +1 -4
  372. package/dist/server/types.d.ts.map +1 -1
  373. package/dist/server/version-skew.d.ts +61 -0
  374. package/dist/server/version-skew.d.ts.map +1 -0
  375. package/dist/shared/merge-search-params.d.ts +22 -0
  376. package/dist/shared/merge-search-params.d.ts.map +1 -0
  377. package/dist/shims/font-google.d.ts +1 -1
  378. package/dist/shims/font-google.d.ts.map +1 -1
  379. package/dist/shims/font-google.js +42 -0
  380. package/dist/shims/font-google.js.map +1 -0
  381. package/dist/shims/font-local.d.ts +26 -0
  382. package/dist/shims/font-local.d.ts.map +1 -0
  383. package/dist/shims/font-local.js +20 -0
  384. package/dist/shims/font-local.js.map +1 -0
  385. package/dist/shims/headers.d.ts +2 -1
  386. package/dist/shims/headers.d.ts.map +1 -1
  387. package/dist/shims/navigation-client.d.ts +1 -1
  388. package/dist/shims/navigation-client.d.ts.map +1 -1
  389. package/dist/shims/navigation.d.ts +3 -2
  390. package/dist/shims/navigation.d.ts.map +1 -1
  391. package/dist/utils/directive-parser.d.ts +5 -2
  392. package/dist/utils/directive-parser.d.ts.map +1 -1
  393. package/dist/utils/state-machine.d.ts +80 -0
  394. package/dist/utils/state-machine.d.ts.map +1 -0
  395. package/package.json +51 -16
  396. package/src/adapters/cloudflare-dev.ts +177 -0
  397. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  398. package/src/adapters/cloudflare.ts +342 -28
  399. package/src/adapters/compress-module.ts +24 -4
  400. package/src/adapters/nitro.ts +52 -8
  401. package/src/adapters/wrangler.d.ts +7 -0
  402. package/src/cache/cache-api.ts +38 -0
  403. package/src/cache/handler-store.ts +68 -0
  404. package/src/cache/index.ts +81 -18
  405. package/src/cache/singleflight.ts +62 -4
  406. package/src/cache/sizeof.ts +31 -0
  407. package/src/cache/timber-cache.ts +24 -20
  408. package/src/cli.ts +16 -6
  409. package/src/client/browser-dev.ts +128 -1
  410. package/src/client/browser-entry/action-dispatch.ts +116 -0
  411. package/src/client/browser-entry/hmr.ts +81 -0
  412. package/src/client/browser-entry/hydrate.ts +145 -0
  413. package/src/client/browser-entry/index.ts +143 -0
  414. package/src/client/browser-entry/post-hydration.ts +119 -0
  415. package/src/client/browser-entry/router-init.ts +193 -0
  416. package/src/client/browser-entry/rsc-stream.ts +157 -0
  417. package/src/client/browser-entry/scroll.ts +27 -0
  418. package/src/client/error-boundary.tsx +48 -16
  419. package/src/client/error-reconstituter.tsx +65 -0
  420. package/src/client/form.tsx +14 -7
  421. package/src/client/history.ts +26 -4
  422. package/src/client/index.ts +65 -38
  423. package/src/client/internal.ts +57 -0
  424. package/src/client/link-pending-store.ts +111 -0
  425. package/src/client/link.tsx +342 -113
  426. package/src/client/nav-link-store.ts +47 -0
  427. package/src/client/navigation-api-types.ts +112 -0
  428. package/src/client/navigation-api.ts +332 -0
  429. package/src/client/navigation-context.ts +31 -6
  430. package/src/client/navigation-root.tsx +342 -0
  431. package/src/client/nuqs-adapter.tsx +16 -3
  432. package/src/client/router-ref.ts +1 -1
  433. package/src/client/router.ts +299 -72
  434. package/src/client/rsc-fetch.ts +97 -8
  435. package/src/client/segment-cache.ts +1 -1
  436. package/src/client/segment-outlet.tsx +86 -0
  437. package/src/client/ssr-data.ts +13 -5
  438. package/src/client/stale-reload.ts +72 -3
  439. package/src/client/top-loader.tsx +18 -6
  440. package/src/client/use-link-status.ts +7 -7
  441. package/src/client/use-params.ts +7 -5
  442. package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
  443. package/src/client/use-query-states.ts +9 -3
  444. package/src/client/use-router.ts +1 -1
  445. package/src/codec.ts +49 -0
  446. package/src/config-types.ts +264 -0
  447. package/src/config-validation.ts +303 -0
  448. package/src/content/index.ts +5 -13
  449. package/src/cookies/define-cookie.ts +78 -25
  450. package/src/cookies/index.ts +8 -0
  451. package/src/fonts/bundle.ts +142 -0
  452. package/src/fonts/css.ts +2 -1
  453. package/src/fonts/dev-middleware.ts +74 -0
  454. package/src/fonts/pipeline.ts +275 -0
  455. package/src/fonts/transform.ts +353 -0
  456. package/src/fonts/types.ts +50 -1
  457. package/src/fonts/virtual-modules.ts +159 -0
  458. package/src/index.ts +314 -355
  459. package/src/plugin-context.ts +240 -0
  460. package/src/plugins/adapter-build.ts +9 -3
  461. package/src/plugins/build-manifest.ts +13 -2
  462. package/src/plugins/build-report.ts +3 -3
  463. package/src/plugins/client-chunks.ts +65 -0
  464. package/src/plugins/content.ts +1 -1
  465. package/src/plugins/dev-404-page.ts +418 -0
  466. package/src/plugins/dev-browser-logs.ts +288 -0
  467. package/src/plugins/dev-error-overlay.ts +286 -42
  468. package/src/plugins/dev-error-page.ts +536 -0
  469. package/src/plugins/dev-logs.ts +1 -1
  470. package/src/plugins/dev-server.ts +146 -19
  471. package/src/plugins/dev-terminal-error.ts +217 -0
  472. package/src/plugins/entries.ts +111 -10
  473. package/src/plugins/fonts.ts +133 -638
  474. package/src/plugins/mdx.ts +1 -1
  475. package/src/plugins/routing.ts +213 -31
  476. package/src/plugins/server-action-exports.ts +1 -1
  477. package/src/plugins/server-bundle.ts +32 -1
  478. package/src/plugins/shims.ts +136 -35
  479. package/src/plugins/static-build.ts +17 -11
  480. package/src/routing/codegen.ts +273 -105
  481. package/src/routing/convention-lint.ts +356 -0
  482. package/src/routing/index.ts +2 -0
  483. package/src/routing/scanner.ts +93 -23
  484. package/src/routing/segment-classify.ts +89 -0
  485. package/src/routing/status-file-lint.ts +3 -2
  486. package/src/routing/types.ts +17 -4
  487. package/src/rsc-runtime/rsc.ts +2 -0
  488. package/src/rsc-runtime/ssr.ts +50 -0
  489. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  490. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  491. package/src/search-params/define.ts +482 -0
  492. package/src/search-params/index.ts +14 -20
  493. package/src/search-params/registry.ts +2 -2
  494. package/src/search-params/wrappers.ts +85 -0
  495. package/src/segment-params/define.ts +279 -0
  496. package/src/segment-params/index.ts +9 -0
  497. package/src/server/access-gate.tsx +70 -29
  498. package/src/server/action-client.ts +88 -15
  499. package/src/server/action-encryption.ts +144 -0
  500. package/src/server/action-handler.ts +53 -6
  501. package/src/server/actions.ts +10 -9
  502. package/src/server/als-registry.ts +34 -6
  503. package/src/server/build-manifest.ts +10 -4
  504. package/src/server/compress.ts +25 -7
  505. package/src/server/debug.ts +1 -1
  506. package/src/server/default-logger.ts +99 -0
  507. package/src/server/deny-page-resolver.ts +154 -0
  508. package/src/server/deny-renderer.ts +24 -38
  509. package/src/server/dev-holding-server.ts +185 -0
  510. package/src/server/dev-source-map.ts +31 -0
  511. package/src/server/dev-warnings.ts +4 -49
  512. package/src/server/early-hints.ts +36 -15
  513. package/src/server/error-boundary-wrapper.ts +74 -22
  514. package/src/server/fallback-error.ts +74 -102
  515. package/src/server/flight-injection-state.ts +113 -0
  516. package/src/server/flight-scripts.ts +62 -0
  517. package/src/server/flush.ts +2 -1
  518. package/src/server/form-data.ts +76 -0
  519. package/src/server/html-injectors.ts +280 -120
  520. package/src/server/index.ts +25 -177
  521. package/src/server/internal.ts +169 -0
  522. package/src/server/logger.ts +44 -36
  523. package/src/server/middleware-runner.ts +31 -4
  524. package/src/server/node-stream-transforms.ts +509 -0
  525. package/src/server/page-deny-boundary.tsx +56 -0
  526. package/src/server/pipeline-interception.ts +17 -16
  527. package/src/server/pipeline-metadata.ts +13 -0
  528. package/src/server/pipeline.ts +261 -66
  529. package/src/server/primitives.ts +111 -28
  530. package/src/server/render-timeout.ts +108 -0
  531. package/src/server/request-context.ts +293 -132
  532. package/src/server/route-element-builder.ts +283 -191
  533. package/src/server/route-handler.ts +24 -4
  534. package/src/server/route-matcher.ts +31 -20
  535. package/src/server/rsc-entry/api-handler.ts +15 -16
  536. package/src/server/rsc-entry/error-renderer.ts +305 -89
  537. package/src/server/rsc-entry/helpers.ts +134 -5
  538. package/src/server/rsc-entry/index.ts +304 -111
  539. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  540. package/src/server/rsc-entry/rsc-stream.ts +81 -13
  541. package/src/server/rsc-entry/ssr-bridge.ts +14 -5
  542. package/src/server/rsc-entry/ssr-renderer.ts +171 -38
  543. package/src/server/safe-load.ts +60 -0
  544. package/src/server/sensitive-fields.ts +230 -0
  545. package/src/server/sitemap-generator.ts +338 -0
  546. package/src/server/sitemap-handler.ts +126 -0
  547. package/src/server/slot-resolver.ts +244 -229
  548. package/src/server/ssr-entry.ts +215 -32
  549. package/src/server/ssr-render.ts +289 -67
  550. package/src/server/ssr-wrappers.tsx +139 -0
  551. package/src/server/status-code-resolver.ts +1 -1
  552. package/src/server/stream-utils.ts +213 -0
  553. package/src/server/tracing.ts +20 -9
  554. package/src/server/tree-builder.ts +92 -58
  555. package/src/server/types.ts +3 -6
  556. package/src/server/version-skew.ts +104 -0
  557. package/src/shared/merge-search-params.ts +55 -0
  558. package/src/shims/font-google.ts +1 -1
  559. package/src/shims/font-local.ts +34 -0
  560. package/src/shims/headers.ts +5 -1
  561. package/src/shims/navigation-client.ts +1 -1
  562. package/src/shims/navigation.ts +7 -2
  563. package/src/utils/directive-parser.ts +5 -2
  564. package/src/utils/state-machine.ts +111 -0
  565. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  566. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  567. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  568. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  569. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  570. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  571. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  572. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  573. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  574. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  575. package/dist/cache/register-cached-function.d.ts +0 -17
  576. package/dist/cache/register-cached-function.d.ts.map +0 -1
  577. package/dist/client/browser-entry.d.ts +0 -21
  578. package/dist/client/browser-entry.d.ts.map +0 -1
  579. package/dist/client/link-status-provider.d.ts +0 -11
  580. package/dist/client/link-status-provider.d.ts.map +0 -1
  581. package/dist/client/transition-root.d.ts.map +0 -1
  582. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  583. package/dist/cookies/index.js.map +0 -1
  584. package/dist/plugins/cache-transform.d.ts +0 -36
  585. package/dist/plugins/cache-transform.d.ts.map +0 -1
  586. package/dist/plugins/dynamic-transform.d.ts +0 -72
  587. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  588. package/dist/search-params/analyze.d.ts +0 -54
  589. package/dist/search-params/analyze.d.ts.map +0 -1
  590. package/dist/search-params/builtin-codecs.d.ts +0 -105
  591. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  592. package/dist/search-params/codecs.d.ts +0 -53
  593. package/dist/search-params/codecs.d.ts.map +0 -1
  594. package/dist/search-params/create.d.ts +0 -106
  595. package/dist/search-params/create.d.ts.map +0 -1
  596. package/dist/server/prerender.d.ts +0 -77
  597. package/dist/server/prerender.d.ts.map +0 -1
  598. package/dist/server/response-cache.d.ts +0 -54
  599. package/dist/server/response-cache.d.ts.map +0 -1
  600. package/src/cache/register-cached-function.ts +0 -103
  601. package/src/client/browser-entry.ts +0 -678
  602. package/src/client/link-status-provider.tsx +0 -30
  603. package/src/client/transition-root.tsx +0 -166
  604. package/src/plugins/cache-transform.ts +0 -199
  605. package/src/plugins/dynamic-transform.ts +0 -161
  606. package/src/search-params/analyze.ts +0 -192
  607. package/src/search-params/builtin-codecs.ts +0 -228
  608. package/src/search-params/create.ts +0 -321
  609. package/src/server/prerender.ts +0 -139
  610. 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-fonts plugin
27
- import fontCss from 'virtual:timber-font-css';
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 '#/server/action-handler.js';
30
- import { handleActionRequest, isActionRequest } from '#/server/action-handler.js';
31
- import type { BodyLimitsConfig } from '#/server/body-limits.js';
32
- import type { BuildManifest } from '#/server/build-manifest.js';
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 '#/server/build-manifest.js';
41
- import type { LayoutEntry } from '#/server/deny-renderer.js';
42
- import { renderDenyPage, renderDenyPageAsRsc } from '#/server/deny-renderer.js';
43
- import { resolveLogMode } from '#/server/dev-logger.js';
44
- import { sendEarlyHints103 } from '#/server/early-hints-sender.js';
45
- import { collectEarlyHintHeaders } from '#/server/early-hints.js';
46
- import { runWithFormFlash } from '#/server/form-flash.js';
47
- import type { ClientBootstrapConfig } from '#/server/html-injectors.js';
48
- import { buildClientScripts } from '#/server/html-injectors.js';
49
- import type { InterceptionContext, PipelineConfig, RouteMatch } from '#/server/pipeline.js';
50
- import { createPipeline } from '#/server/pipeline.js';
51
- import { DenySignal, RedirectSignal } from '#/server/primitives.js';
52
- import { buildRouteElement, RouteSignalWithContext } from '#/server/route-element-builder.js';
53
- import type { ManifestSegmentNode } from '#/server/route-matcher.js';
54
- import { createMetadataRouteMatcher, createRouteMatcher } from '#/server/route-matcher.js';
55
- import { initDevTracing } from '#/server/tracing.js';
56
-
57
- import { renderFallbackError as renderFallback } from '#/server/fallback-error.js';
58
- import { loadInstrumentation } from '#/server/instrumentation.js';
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 '#/server/state-tree-diff.js';
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 '#/server/debug.js';
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
- let _devPipelineErrorHandler: ((error: Error, phase: string) => void) | undefined;
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(handler: (error: Error, phase: string) => void): void {
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 cookie signing secrets from config (design/29-cookies.md §"Signed Cookies")
107
- const cookieSecrets = (runtimeConfig as Record<string, unknown>).cookieSecrets as
108
- | string[]
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 (cookieSecrets?.length) {
111
- const { setCookieSecrets } = await import('#/server/request-context.js');
112
- setCookieSecrets(cookieSecrets);
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
- const doRender = () =>
211
- renderRoute(req, match, responseHeaders, clientBootstrap, clientJsDisabled, interception);
212
-
213
- // Response cache wraps the render with singleflight + LRU.
214
- // Interception requests (modals) are excluded — they depend on
215
- // X-Timber-URL which makes caching semantics ambiguous.
216
- if (responseCache && !interception) {
217
- const isRsc = (req.headers.get('Accept') ?? '').includes('text/x-component');
218
- return responseCache.getOrRender(req, isRsc, doRender);
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
- return renderNoMatchPage(req, manifest.root, responseHeaders, clientBootstrap);
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
- enableServerTiming: isDev,
317
+ serverTiming: resolveServerTimingMode(runtimeConfig, isDev),
230
318
  onPipelineError: isDev
231
319
  ? (error: Error, phase: string) => {
232
- if (_devPipelineErrorHandler) _devPipelineErrorHandler(error, phase);
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(error, req, responseHeaders, isDev, manifest.root, clientBootstrap),
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, runs access checks,
332
- // resolves metadata. DenySignal/RedirectSignal propagate for HTTP handling.
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
- // RouteSignalWithContext wraps DenySignal/RedirectSignal with layout context
338
- if (error instanceof RouteSignalWithContext) {
339
- const { signal, layoutComponents: lc, segments: segs } = error;
340
- if (signal instanceof DenySignal) {
341
- if (isRscPayloadRequest(_req)) {
342
- return renderDenyPageAsRsc(
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 new Response(null, { status: 404 });
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
- const cssUrls = collectRouteCss(segments, typedManifest);
387
- if (cssUrls.length > 0) {
388
- headHtml += buildCssLinkTags(cssUrls);
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 virtual:timber-font-css module is loaded lazily, so the font registry
393
- // is always populated by the time we get here (no timing issues).
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 { rscStream, signals } = renderRscStream(element, _req);
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 '#/server/early-hints-sender.js';
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 '#/server/waituntil-bridge.js';
705
+ export { runWithWaitUntil } from '../waituntil-bridge.js';
513
706
 
514
707
  export default await createRequestHandler(routeManifest, config);