@timber-js/app 0.2.0-alpha.18 → 0.2.0-alpha.181

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 (1026) hide show
  1. package/LICENSE +8 -0
  2. package/agent-skill.md +344 -0
  3. package/dist/_chunks/actions-O_LsyCE4.js +317 -0
  4. package/dist/_chunks/actions-O_LsyCE4.js.map +1 -0
  5. package/dist/_chunks/build-output-helper-DF5uScqS.js +158 -0
  6. package/dist/_chunks/build-output-helper-DF5uScqS.js.map +1 -0
  7. package/dist/_chunks/cache-api-B-lhk9p4.js +1202 -0
  8. package/dist/_chunks/cache-api-B-lhk9p4.js.map +1 -0
  9. package/dist/_chunks/canonicalize-DQHyFClh.js +248 -0
  10. package/dist/_chunks/canonicalize-DQHyFClh.js.map +1 -0
  11. package/dist/_chunks/cli-schema-sync-D3naS3eH.js +688 -0
  12. package/dist/_chunks/cli-schema-sync-D3naS3eH.js.map +1 -0
  13. package/dist/_chunks/cloudflare-AHoWYTYr.js +1188 -0
  14. package/dist/_chunks/cloudflare-AHoWYTYr.js.map +1 -0
  15. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  16. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  17. package/dist/_chunks/define-COtkxMRT.js +191 -0
  18. package/dist/_chunks/define-COtkxMRT.js.map +1 -0
  19. package/dist/_chunks/define-c4au4I9R.js +82 -0
  20. package/dist/_chunks/define-c4au4I9R.js.map +1 -0
  21. package/dist/_chunks/dist-BA3u1z3W.js +423 -0
  22. package/dist/_chunks/dist-BA3u1z3W.js.map +1 -0
  23. package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
  24. package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
  25. package/dist/_chunks/format-CfwjgPz9.js +14 -0
  26. package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
  27. package/dist/_chunks/href-validation-CMc5JRls.js +141 -0
  28. package/dist/_chunks/href-validation-CMc5JRls.js.map +1 -0
  29. package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
  30. package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
  31. package/dist/_chunks/logger-AWfuX-KJ.js +1468 -0
  32. package/dist/_chunks/logger-AWfuX-KJ.js.map +1 -0
  33. package/dist/_chunks/navigation-root-bUDZLw74.js +124 -0
  34. package/dist/_chunks/navigation-root-bUDZLw74.js.map +1 -0
  35. package/dist/_chunks/plugin-context---kTF5v8.js +315 -0
  36. package/dist/_chunks/plugin-context---kTF5v8.js.map +1 -0
  37. package/dist/_chunks/registry-DbJPKoBp.js +20 -0
  38. package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
  39. package/dist/_chunks/resolve-schema-Dz3fcFUo.js +50 -0
  40. package/dist/_chunks/resolve-schema-Dz3fcFUo.js.map +1 -0
  41. package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
  42. package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
  43. package/dist/_chunks/schema-bridge-DT_Tn0Xf.js +119 -0
  44. package/dist/_chunks/schema-bridge-DT_Tn0Xf.js.map +1 -0
  45. package/dist/_chunks/segment-classify-Byy425ng.js +176 -0
  46. package/dist/_chunks/segment-classify-Byy425ng.js.map +1 -0
  47. package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
  48. package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
  49. package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
  50. package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
  51. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
  52. package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
  53. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-DFvWd-EA.js} +71 -26
  54. package/dist/_chunks/use-query-states-DFvWd-EA.js.map +1 -0
  55. package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
  56. package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
  57. package/dist/_chunks/walkers-BtTlKviE.js +1002 -0
  58. package/dist/_chunks/walkers-BtTlKviE.js.map +1 -0
  59. package/dist/adapters/build-output-helper.d.ts +29 -0
  60. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  61. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  62. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  63. package/dist/adapters/cloudflare-dev.js +73 -0
  64. package/dist/adapters/cloudflare-dev.js.map +1 -0
  65. package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
  66. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  67. package/dist/adapters/cloudflare-kv-cache.js +124 -0
  68. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  69. package/dist/adapters/cloudflare.d.ts +189 -21
  70. package/dist/adapters/cloudflare.d.ts.map +1 -1
  71. package/dist/adapters/cloudflare.js +2 -188
  72. package/dist/adapters/compress-module.d.ts +5 -4
  73. package/dist/adapters/compress-module.d.ts.map +1 -1
  74. package/dist/adapters/nitro.d.ts +41 -3
  75. package/dist/adapters/nitro.d.ts.map +1 -1
  76. package/dist/adapters/nitro.js +224 -172
  77. package/dist/adapters/nitro.js.map +1 -1
  78. package/dist/adapters/shared.d.ts +6 -0
  79. package/dist/adapters/shared.d.ts.map +1 -0
  80. package/dist/adapters/types.d.ts +2 -6
  81. package/dist/adapters/types.d.ts.map +1 -1
  82. package/dist/cache/cache-api.d.ts +48 -0
  83. package/dist/cache/cache-api.d.ts.map +1 -0
  84. package/dist/cache/handler-store.d.ts +33 -0
  85. package/dist/cache/handler-store.d.ts.map +1 -0
  86. package/dist/cache/index.d.ts +31 -8
  87. package/dist/cache/index.d.ts.map +1 -1
  88. package/dist/cache/index.js +3 -326
  89. package/dist/cache/invalidation-epoch.d.ts +43 -0
  90. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  91. package/dist/cache/json-lossy-check.d.ts +11 -0
  92. package/dist/cache/json-lossy-check.d.ts.map +1 -0
  93. package/dist/cache/redis-handler.d.ts +140 -8
  94. package/dist/cache/redis-handler.d.ts.map +1 -1
  95. package/dist/cache/singleflight.d.ts +19 -2
  96. package/dist/cache/singleflight.d.ts.map +1 -1
  97. package/dist/cache/sizeof.d.ts +22 -0
  98. package/dist/cache/sizeof.d.ts.map +1 -0
  99. package/dist/cache/stable-stringify.d.ts +9 -0
  100. package/dist/cache/stable-stringify.d.ts.map +1 -1
  101. package/dist/cache/store.d.ts +53 -0
  102. package/dist/cache/store.d.ts.map +1 -0
  103. package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
  104. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
  105. package/dist/cache/stores/cloudflare-kv.js +29 -0
  106. package/dist/cache/stores/cloudflare-kv.js.map +1 -0
  107. package/dist/cache/stores/memory.d.ts +42 -0
  108. package/dist/cache/stores/memory.d.ts.map +1 -0
  109. package/dist/cache/stores/memory.js +90 -0
  110. package/dist/cache/stores/memory.js.map +1 -0
  111. package/dist/cache/stores/redis.d.ts +69 -0
  112. package/dist/cache/stores/redis.d.ts.map +1 -0
  113. package/dist/cache/stores/redis.js +35 -0
  114. package/dist/cache/stores/redis.js.map +1 -0
  115. package/dist/cache/stores/vercel.d.ts +36 -0
  116. package/dist/cache/stores/vercel.d.ts.map +1 -0
  117. package/dist/cache/stores/vercel.js +33 -0
  118. package/dist/cache/stores/vercel.js.map +1 -0
  119. package/dist/cache/tag-aware-handler.d.ts +52 -0
  120. package/dist/cache/tag-aware-handler.d.ts.map +1 -0
  121. package/dist/cache/timber-cache.d.ts +20 -10
  122. package/dist/cache/timber-cache.d.ts.map +1 -1
  123. package/dist/cdn/cloudflare-purge.d.ts +23 -0
  124. package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
  125. package/dist/cdn/fastly-purge.d.ts +25 -0
  126. package/dist/cdn/fastly-purge.d.ts.map +1 -0
  127. package/dist/cdn/headers.d.ts +97 -0
  128. package/dist/cdn/headers.d.ts.map +1 -0
  129. package/dist/cdn/index.d.ts +5 -0
  130. package/dist/cdn/index.d.ts.map +1 -0
  131. package/dist/cdn/purge-store.d.ts +23 -0
  132. package/dist/cdn/purge-store.d.ts.map +1 -0
  133. package/dist/cdn/workers-cache-purge.d.ts +16 -0
  134. package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
  135. package/dist/cli-schema-sync.d.ts +59 -0
  136. package/dist/cli-schema-sync.d.ts.map +1 -0
  137. package/dist/cli.d.ts +35 -2
  138. package/dist/cli.d.ts.map +1 -1
  139. package/dist/cli.js +113 -34
  140. package/dist/cli.js.map +1 -1
  141. package/dist/client/browser-dev.d.ts +37 -1
  142. package/dist/client/browser-dev.d.ts.map +1 -1
  143. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  144. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  145. package/dist/client/browser-entry/hmr.d.ts +21 -0
  146. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  147. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  148. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  149. package/dist/client/browser-entry/index.d.ts +29 -0
  150. package/dist/client/browser-entry/index.d.ts.map +1 -0
  151. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  152. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  153. package/dist/client/browser-entry/router-init.d.ts +27 -0
  154. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  155. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  156. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  157. package/dist/client/browser-entry/scroll.d.ts +28 -0
  158. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  159. package/dist/client/error-boundary.d.ts +12 -5
  160. package/dist/client/error-boundary.d.ts.map +1 -1
  161. package/dist/client/error-boundary.js +47 -10
  162. package/dist/client/error-boundary.js.map +1 -1
  163. package/dist/client/error-reconstituter.d.ts +61 -0
  164. package/dist/client/error-reconstituter.d.ts.map +1 -0
  165. package/dist/client/form.d.ts +16 -27
  166. package/dist/client/form.d.ts.map +1 -1
  167. package/dist/client/history.d.ts +21 -6
  168. package/dist/client/history.d.ts.map +1 -1
  169. package/dist/client/index.d.ts +10 -24
  170. package/dist/client/index.d.ts.map +1 -1
  171. package/dist/client/index.js +185 -1134
  172. package/dist/client/index.js.map +1 -1
  173. package/dist/client/internal.d.ts +19 -0
  174. package/dist/client/internal.d.ts.map +1 -0
  175. package/dist/client/internal.js +938 -0
  176. package/dist/client/internal.js.map +1 -0
  177. package/dist/client/link.d.ts +69 -60
  178. package/dist/client/link.d.ts.map +1 -1
  179. package/dist/client/navigation-api.d.ts +121 -0
  180. package/dist/client/navigation-api.d.ts.map +1 -0
  181. package/dist/client/navigation-context.d.ts +3 -2
  182. package/dist/client/navigation-context.d.ts.map +1 -1
  183. package/dist/client/navigation-root.d.ts +119 -0
  184. package/dist/client/navigation-root.d.ts.map +1 -0
  185. package/dist/client/nuqs-adapter.d.ts +1 -1
  186. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  187. package/dist/client/router-ref.d.ts +1 -1
  188. package/dist/client/router.d.ts +99 -14
  189. package/dist/client/router.d.ts.map +1 -1
  190. package/dist/client/rsc-fetch.d.ts +62 -15
  191. package/dist/client/rsc-fetch.d.ts.map +1 -1
  192. package/dist/client/segment-cache.d.ts +30 -7
  193. package/dist/client/segment-cache.d.ts.map +1 -1
  194. package/dist/client/segment-outlet.d.ts +57 -0
  195. package/dist/client/segment-outlet.d.ts.map +1 -0
  196. package/dist/client/segment-update-context.d.ts +21 -0
  197. package/dist/client/segment-update-context.d.ts.map +1 -0
  198. package/dist/client/shallow-url.d.ts +10 -0
  199. package/dist/client/shallow-url.d.ts.map +1 -0
  200. package/dist/client/slot-context.d.ts +31 -0
  201. package/dist/client/slot-context.d.ts.map +1 -0
  202. package/dist/client/slot-outlet.d.ts +16 -0
  203. package/dist/client/slot-outlet.d.ts.map +1 -0
  204. package/dist/client/slot-provider.d.ts +25 -0
  205. package/dist/client/slot-provider.d.ts.map +1 -0
  206. package/dist/client/ssr-data.d.ts +13 -4
  207. package/dist/client/ssr-data.d.ts.map +1 -1
  208. package/dist/client/state.d.ts +1 -1
  209. package/dist/client/top-loader.d.ts +5 -5
  210. package/dist/client/top-loader.d.ts.map +1 -1
  211. package/dist/client/use-cookie.d.ts +12 -0
  212. package/dist/client/use-cookie.d.ts.map +1 -1
  213. package/dist/client/use-link-status.d.ts +5 -5
  214. package/dist/client/use-link-status.d.ts.map +1 -1
  215. package/dist/client/use-pathname.d.ts.map +1 -1
  216. package/dist/client/use-pending-navigation.d.ts +23 -0
  217. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  218. package/dist/client/use-query-states.d.ts +1 -1
  219. package/dist/client/use-query-states.d.ts.map +1 -1
  220. package/dist/client/use-router.d.ts +1 -1
  221. package/dist/client/use-router.d.ts.map +1 -1
  222. package/dist/client/use-search-params.d.ts +12 -5
  223. package/dist/client/use-search-params.d.ts.map +1 -1
  224. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  225. package/dist/client/use-segment-params.d.ts.map +1 -0
  226. package/dist/codec.d.ts +69 -0
  227. package/dist/codec.d.ts.map +1 -0
  228. package/dist/codec.js +76 -0
  229. package/dist/codec.js.map +1 -0
  230. package/dist/config-types.d.ts +284 -0
  231. package/dist/config-types.d.ts.map +1 -0
  232. package/dist/config-validation.d.ts +51 -0
  233. package/dist/config-validation.d.ts.map +1 -0
  234. package/dist/content/index.d.ts +1 -10
  235. package/dist/content/index.d.ts.map +1 -1
  236. package/dist/content/index.js +0 -2
  237. package/dist/cookies/define-cookie.d.ts +58 -25
  238. package/dist/cookies/define-cookie.d.ts.map +1 -1
  239. package/dist/cookies/index.d.ts +2 -1
  240. package/dist/cookies/index.d.ts.map +1 -1
  241. package/dist/cookies/index.js +257 -36
  242. package/dist/cookies/index.js.map +1 -1
  243. package/dist/cookies/json-cookie.d.ts +64 -0
  244. package/dist/cookies/json-cookie.d.ts.map +1 -0
  245. package/dist/cookies/validation.d.ts +34 -0
  246. package/dist/cookies/validation.d.ts.map +1 -0
  247. package/dist/dev-tools/404-page.d.ts +50 -0
  248. package/dist/dev-tools/404-page.d.ts.map +1 -0
  249. package/dist/dev-tools/browser-logs.d.ts +40 -0
  250. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  251. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  252. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  253. package/dist/dev-tools/error-page.d.ts +32 -0
  254. package/dist/dev-tools/error-page.d.ts.map +1 -0
  255. package/dist/dev-tools/holding-server.d.ts +54 -0
  256. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  257. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  258. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  259. package/dist/dev-tools/index.d.ts +31 -0
  260. package/dist/dev-tools/index.d.ts.map +1 -0
  261. package/dist/dev-tools/instrumentation.d.ts +59 -0
  262. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  263. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  264. package/dist/dev-tools/logger.d.ts.map +1 -0
  265. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
  266. package/dist/dev-tools/logs.d.ts.map +1 -0
  267. package/dist/dev-tools/overlay.d.ts +91 -0
  268. package/dist/dev-tools/overlay.d.ts.map +1 -0
  269. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  270. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  271. package/dist/dev-tools/terminal.d.ts +28 -0
  272. package/dist/dev-tools/terminal.d.ts.map +1 -0
  273. package/dist/fonts/ast-walk.d.ts +68 -0
  274. package/dist/fonts/ast-walk.d.ts.map +1 -0
  275. package/dist/fonts/ast.d.ts +110 -6
  276. package/dist/fonts/ast.d.ts.map +1 -1
  277. package/dist/fonts/bundle.d.ts +50 -0
  278. package/dist/fonts/bundle.d.ts.map +1 -0
  279. package/dist/fonts/dev-middleware.d.ts +22 -0
  280. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  281. package/dist/fonts/fallbacks.d.ts +0 -7
  282. package/dist/fonts/fallbacks.d.ts.map +1 -1
  283. package/dist/fonts/google.d.ts +4 -2
  284. package/dist/fonts/google.d.ts.map +1 -1
  285. package/dist/fonts/local.d.ts +4 -4
  286. package/dist/fonts/local.d.ts.map +1 -1
  287. package/dist/fonts/paths.d.ts +43 -0
  288. package/dist/fonts/paths.d.ts.map +1 -0
  289. package/dist/fonts/pipeline.d.ts +177 -0
  290. package/dist/fonts/pipeline.d.ts.map +1 -0
  291. package/dist/fonts/transform.d.ts +82 -0
  292. package/dist/fonts/transform.d.ts.map +1 -0
  293. package/dist/fonts/types.d.ts +47 -1
  294. package/dist/fonts/types.d.ts.map +1 -1
  295. package/dist/fonts/virtual-modules.d.ts +77 -0
  296. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  297. package/dist/index.d.ts +46 -180
  298. package/dist/index.d.ts.map +1 -1
  299. package/dist/index.js +9243 -14093
  300. package/dist/index.js.map +1 -1
  301. package/dist/params/codec-registry.d.ts +26 -0
  302. package/dist/params/codec-registry.d.ts.map +1 -0
  303. package/dist/params/define-schema.d.ts +81 -0
  304. package/dist/params/define-schema.d.ts.map +1 -0
  305. package/dist/params/index.d.ts +5 -0
  306. package/dist/params/index.d.ts.map +1 -0
  307. package/dist/params/index.js +34 -0
  308. package/dist/params/index.js.map +1 -0
  309. package/dist/params/resolve-schema.d.ts +34 -0
  310. package/dist/params/resolve-schema.d.ts.map +1 -0
  311. package/dist/plugin-context.d.ts +217 -0
  312. package/dist/plugin-context.d.ts.map +1 -0
  313. package/dist/plugins/adapter-build.d.ts +21 -1
  314. package/dist/plugins/adapter-build.d.ts.map +1 -1
  315. package/dist/plugins/build-manifest.d.ts +7 -3
  316. package/dist/plugins/build-manifest.d.ts.map +1 -1
  317. package/dist/plugins/build-report.d.ts +43 -7
  318. package/dist/plugins/build-report.d.ts.map +1 -1
  319. package/dist/plugins/cache.d.ts +64 -0
  320. package/dist/plugins/cache.d.ts.map +1 -0
  321. package/dist/plugins/callsite-ast.d.ts +117 -0
  322. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  323. package/dist/plugins/callsite-jsx.d.ts +35 -0
  324. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  325. package/dist/plugins/chunks.d.ts +11 -4
  326. package/dist/plugins/chunks.d.ts.map +1 -1
  327. package/dist/plugins/client-chunks.d.ts +40 -0
  328. package/dist/plugins/client-chunks.d.ts.map +1 -0
  329. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  330. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  331. package/dist/plugins/content.d.ts +1 -1
  332. package/dist/plugins/content.d.ts.map +1 -1
  333. package/dist/plugins/dev-server.d.ts +17 -1
  334. package/dist/plugins/dev-server.d.ts.map +1 -1
  335. package/dist/plugins/entries.d.ts +28 -4
  336. package/dist/plugins/entries.d.ts.map +1 -1
  337. package/dist/plugins/fonts.d.ts +16 -73
  338. package/dist/plugins/fonts.d.ts.map +1 -1
  339. package/dist/plugins/mdx.d.ts +1 -1
  340. package/dist/plugins/mdx.d.ts.map +1 -1
  341. package/dist/plugins/prebuilt-capture.d.ts +60 -0
  342. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  343. package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
  344. package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
  345. package/dist/plugins/prebuilt.d.ts +82 -0
  346. package/dist/plugins/prebuilt.d.ts.map +1 -0
  347. package/dist/plugins/prerender-sugar.d.ts +42 -0
  348. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  349. package/dist/plugins/request-dep.d.ts +21 -0
  350. package/dist/plugins/request-dep.d.ts.map +1 -0
  351. package/dist/plugins/routing.d.ts +1 -1
  352. package/dist/plugins/routing.d.ts.map +1 -1
  353. package/dist/plugins/server-bundle.d.ts.map +1 -1
  354. package/dist/plugins/shims.d.ts +29 -5
  355. package/dist/plugins/shims.d.ts.map +1 -1
  356. package/dist/plugins/static-build.d.ts +5 -26
  357. package/dist/plugins/static-build.d.ts.map +1 -1
  358. package/dist/routing/codegen-shared.d.ts +67 -0
  359. package/dist/routing/codegen-shared.d.ts.map +1 -0
  360. package/dist/routing/codegen-types.d.ts +64 -0
  361. package/dist/routing/codegen-types.d.ts.map +1 -0
  362. package/dist/routing/codegen.d.ts +7 -2
  363. package/dist/routing/codegen.d.ts.map +1 -1
  364. package/dist/routing/convention-lint.d.ts +41 -0
  365. package/dist/routing/convention-lint.d.ts.map +1 -0
  366. package/dist/routing/export-detect.d.ts +56 -0
  367. package/dist/routing/export-detect.d.ts.map +1 -0
  368. package/dist/routing/file-cache.d.ts +8 -0
  369. package/dist/routing/file-cache.d.ts.map +1 -0
  370. package/dist/routing/index.d.ts +7 -1
  371. package/dist/routing/index.d.ts.map +1 -1
  372. package/dist/routing/index.js +4 -2
  373. package/dist/routing/interception.d.ts +0 -5
  374. package/dist/routing/interception.d.ts.map +1 -1
  375. package/dist/routing/link-codegen.d.ts +90 -0
  376. package/dist/routing/link-codegen.d.ts.map +1 -0
  377. package/dist/routing/manifest-codegen.d.ts +32 -0
  378. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  379. package/dist/routing/scanner.d.ts +1 -10
  380. package/dist/routing/scanner.d.ts.map +1 -1
  381. package/dist/routing/schema-validation.d.ts +35 -0
  382. package/dist/routing/schema-validation.d.ts.map +1 -0
  383. package/dist/routing/segment-classify.d.ts +81 -0
  384. package/dist/routing/segment-classify.d.ts.map +1 -0
  385. package/dist/routing/segment-codegen.d.ts +38 -0
  386. package/dist/routing/segment-codegen.d.ts.map +1 -0
  387. package/dist/routing/types.d.ts +81 -25
  388. package/dist/routing/types.d.ts.map +1 -1
  389. package/dist/routing/walkers.d.ts +51 -0
  390. package/dist/routing/walkers.d.ts.map +1 -0
  391. package/dist/rsc-runtime/rsc.d.ts +1 -1
  392. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  393. package/dist/rsc-runtime/ssr.d.ts +12 -0
  394. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  395. package/dist/schema-bridge.d.ts +91 -0
  396. package/dist/schema-bridge.d.ts.map +1 -0
  397. package/dist/search-params/define.d.ts +188 -0
  398. package/dist/search-params/define.d.ts.map +1 -0
  399. package/dist/search-params/index.d.ts +4 -7
  400. package/dist/search-params/index.d.ts.map +1 -1
  401. package/dist/search-params/index.js +34 -441
  402. package/dist/search-params/index.js.map +1 -1
  403. package/dist/search-params/registry.d.ts +2 -2
  404. package/dist/search-params/registry.d.ts.map +1 -1
  405. package/dist/search-params/wrappers.d.ts +53 -0
  406. package/dist/search-params/wrappers.d.ts.map +1 -0
  407. package/dist/segment-params/define.d.ts +89 -0
  408. package/dist/segment-params/define.d.ts.map +1 -0
  409. package/dist/segment-params/index.d.ts +3 -0
  410. package/dist/segment-params/index.d.ts.map +1 -0
  411. package/dist/segment-params/index.js +2 -0
  412. package/dist/server/access-gate.d.ts +8 -3
  413. package/dist/server/access-gate.d.ts.map +1 -1
  414. package/dist/server/action-client.d.ts +42 -7
  415. package/dist/server/action-client.d.ts.map +1 -1
  416. package/dist/server/action-encryption.d.ts +76 -0
  417. package/dist/server/action-encryption.d.ts.map +1 -0
  418. package/dist/server/action-handler.d.ts +35 -1
  419. package/dist/server/action-handler.d.ts.map +1 -1
  420. package/dist/server/actions.d.ts +6 -30
  421. package/dist/server/actions.d.ts.map +1 -1
  422. package/dist/server/als-registry.d.ts +93 -11
  423. package/dist/server/als-registry.d.ts.map +1 -1
  424. package/dist/server/asset-headers.d.ts +8 -18
  425. package/dist/server/asset-headers.d.ts.map +1 -1
  426. package/dist/server/body-limits.d.ts.map +1 -1
  427. package/dist/server/build-manifest.d.ts +12 -29
  428. package/dist/server/build-manifest.d.ts.map +1 -1
  429. package/dist/server/canonicalize.d.ts +10 -0
  430. package/dist/server/canonicalize.d.ts.map +1 -1
  431. package/dist/server/coalesce-tick.d.ts +40 -0
  432. package/dist/server/coalesce-tick.d.ts.map +1 -0
  433. package/dist/server/cookie-context.d.ts +170 -0
  434. package/dist/server/cookie-context.d.ts.map +1 -0
  435. package/dist/server/cookie-parsing.d.ts +65 -0
  436. package/dist/server/cookie-parsing.d.ts.map +1 -0
  437. package/dist/server/csrf.d.ts +3 -2
  438. package/dist/server/csrf.d.ts.map +1 -1
  439. package/dist/server/default-logger.d.ts +22 -0
  440. package/dist/server/default-logger.d.ts.map +1 -0
  441. package/dist/server/deny-boundary.d.ts +117 -0
  442. package/dist/server/deny-boundary.d.ts.map +1 -0
  443. package/dist/server/deny-renderer.d.ts +2 -2
  444. package/dist/server/deny-renderer.d.ts.map +1 -1
  445. package/dist/server/dev-source-map.d.ts +22 -0
  446. package/dist/server/dev-source-map.d.ts.map +1 -0
  447. package/dist/server/early-hints-sender.d.ts.map +1 -1
  448. package/dist/server/early-hints.d.ts +13 -11
  449. package/dist/server/early-hints.d.ts.map +1 -1
  450. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  451. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  452. package/dist/server/fallback-error.d.ts +12 -7
  453. package/dist/server/fallback-error.d.ts.map +1 -1
  454. package/dist/server/flight-injection-state.d.ts +66 -0
  455. package/dist/server/flight-injection-state.d.ts.map +1 -0
  456. package/dist/server/flight-scripts.d.ts +42 -0
  457. package/dist/server/flight-scripts.d.ts.map +1 -0
  458. package/dist/server/form-data.d.ts +41 -0
  459. package/dist/server/form-data.d.ts.map +1 -1
  460. package/dist/server/html-injector-core.d.ts +242 -0
  461. package/dist/server/html-injector-core.d.ts.map +1 -0
  462. package/dist/server/html-injectors.d.ts +82 -41
  463. package/dist/server/html-injectors.d.ts.map +1 -1
  464. package/dist/server/index.d.ts +11 -47
  465. package/dist/server/index.d.ts.map +1 -1
  466. package/dist/server/index.js +182 -2906
  467. package/dist/server/index.js.map +1 -1
  468. package/dist/server/internal.d.ts +49 -0
  469. package/dist/server/internal.d.ts.map +1 -0
  470. package/dist/server/internal.js +3892 -0
  471. package/dist/server/internal.js.map +1 -0
  472. package/dist/server/logger.d.ts +39 -7
  473. package/dist/server/logger.d.ts.map +1 -1
  474. package/dist/server/metadata-routes.d.ts +60 -11
  475. package/dist/server/metadata-routes.d.ts.map +1 -1
  476. package/dist/server/metadata.d.ts +8 -0
  477. package/dist/server/metadata.d.ts.map +1 -1
  478. package/dist/server/middleware-runner.d.ts +19 -4
  479. package/dist/server/middleware-runner.d.ts.map +1 -1
  480. package/dist/server/node-stream-transforms.d.ts +119 -0
  481. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  482. package/dist/server/param-coercion.d.ts +54 -0
  483. package/dist/server/param-coercion.d.ts.map +1 -0
  484. package/dist/server/pipeline-helpers.d.ts +95 -0
  485. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  486. package/dist/server/pipeline-interception.d.ts +1 -1
  487. package/dist/server/pipeline-interception.d.ts.map +1 -1
  488. package/dist/server/pipeline-metadata.d.ts +6 -0
  489. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  490. package/dist/server/pipeline-outcome.d.ts +49 -0
  491. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  492. package/dist/server/pipeline-phases.d.ts +59 -0
  493. package/dist/server/pipeline-phases.d.ts.map +1 -0
  494. package/dist/server/pipeline.d.ts +140 -19
  495. package/dist/server/pipeline.d.ts.map +1 -1
  496. package/dist/server/port-resolution.d.ts +117 -0
  497. package/dist/server/port-resolution.d.ts.map +1 -0
  498. package/dist/server/prebuilt/cache-key.d.ts +62 -0
  499. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  500. package/dist/server/prebuilt/capture-state.d.ts +57 -0
  501. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  502. package/dist/server/prebuilt/key-discipline.d.ts +23 -0
  503. package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
  504. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  505. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  506. package/dist/server/prebuilt/overlay.d.ts +100 -0
  507. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  508. package/dist/server/prebuilt/payload-source.d.ts +78 -0
  509. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  510. package/dist/server/prebuilt/slots.d.ts +99 -0
  511. package/dist/server/prebuilt/slots.d.ts.map +1 -0
  512. package/dist/server/prebuilt/synthetic-store.d.ts +66 -0
  513. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  514. package/dist/server/prebuilt-builder.d.ts +120 -0
  515. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  516. package/dist/server/prebuilt-runtime.d.ts +111 -0
  517. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  518. package/dist/server/primitives.d.ts +88 -43
  519. package/dist/server/primitives.d.ts.map +1 -1
  520. package/dist/server/render-timeout.d.ts +51 -0
  521. package/dist/server/render-timeout.d.ts.map +1 -0
  522. package/dist/server/render-utils.d.ts +25 -0
  523. package/dist/server/render-utils.d.ts.map +1 -0
  524. package/dist/server/request-context.d.ts +62 -107
  525. package/dist/server/request-context.d.ts.map +1 -1
  526. package/dist/server/request-dep.d.ts +15 -0
  527. package/dist/server/request-dep.d.ts.map +1 -0
  528. package/dist/server/route-element-builder.d.ts +53 -25
  529. package/dist/server/route-element-builder.d.ts.map +1 -1
  530. package/dist/server/route-handler.d.ts.map +1 -1
  531. package/dist/server/route-matcher.d.ts +25 -36
  532. package/dist/server/route-matcher.d.ts.map +1 -1
  533. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  534. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  535. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  536. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  537. package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
  538. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
  539. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  540. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  541. package/dist/server/rsc-entry/helpers.d.ts +69 -37
  542. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  543. package/dist/server/rsc-entry/index.d.ts +28 -6
  544. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  545. package/dist/server/rsc-entry/render-route.d.ts +51 -0
  546. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  547. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  548. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  549. package/dist/server/rsc-entry/rsc-payload.d.ts +6 -6
  550. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  551. package/dist/server/rsc-entry/rsc-stream.d.ts +25 -1
  552. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  553. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  554. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  555. package/dist/server/rsc-entry/ssr-renderer.d.ts +36 -4
  556. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  557. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
  558. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  559. package/dist/server/safe-load.d.ts +46 -0
  560. package/dist/server/safe-load.d.ts.map +1 -0
  561. package/dist/server/sensitive-fields.d.ts +74 -0
  562. package/dist/server/sensitive-fields.d.ts.map +1 -0
  563. package/dist/server/sitemap-generator.d.ts +129 -0
  564. package/dist/server/sitemap-generator.d.ts.map +1 -0
  565. package/dist/server/sitemap-handler.d.ts +22 -0
  566. package/dist/server/sitemap-handler.d.ts.map +1 -0
  567. package/dist/server/slot-resolver.d.ts +66 -5
  568. package/dist/server/slot-resolver.d.ts.map +1 -1
  569. package/dist/server/ssr-bridge-types.d.ts +121 -0
  570. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  571. package/dist/server/ssr-entry.d.ts +2 -43
  572. package/dist/server/ssr-entry.d.ts.map +1 -1
  573. package/dist/server/ssr-render.d.ts +64 -21
  574. package/dist/server/ssr-render.d.ts.map +1 -1
  575. package/dist/server/ssr-wrappers.d.ts +50 -0
  576. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  577. package/dist/server/state-tree-diff.d.ts +72 -9
  578. package/dist/server/state-tree-diff.d.ts.map +1 -1
  579. package/dist/server/status-code-resolver.d.ts +22 -11
  580. package/dist/server/status-code-resolver.d.ts.map +1 -1
  581. package/dist/server/stream-utils.d.ts +47 -0
  582. package/dist/server/stream-utils.d.ts.map +1 -0
  583. package/dist/server/tracing.d.ts +44 -9
  584. package/dist/server/tracing.d.ts.map +1 -1
  585. package/dist/server/tree-builder.d.ts +69 -30
  586. package/dist/server/tree-builder.d.ts.map +1 -1
  587. package/dist/server/tree-match.d.ts +49 -0
  588. package/dist/server/tree-match.d.ts.map +1 -0
  589. package/dist/server/types.d.ts +71 -6
  590. package/dist/server/types.d.ts.map +1 -1
  591. package/dist/server/utils/escape-html.d.ts +14 -0
  592. package/dist/server/utils/escape-html.d.ts.map +1 -0
  593. package/dist/server/utils/mdx-file.d.ts +15 -0
  594. package/dist/server/utils/mdx-file.d.ts.map +1 -0
  595. package/dist/server/version-skew.d.ts +61 -0
  596. package/dist/server/version-skew.d.ts.map +1 -0
  597. package/dist/server/workers-cache-bridge.d.ts +26 -0
  598. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  599. package/dist/shared/href-validation.d.ts +49 -0
  600. package/dist/shared/href-validation.d.ts.map +1 -0
  601. package/dist/shared/merge-search-params.d.ts +22 -0
  602. package/dist/shared/merge-search-params.d.ts.map +1 -0
  603. package/dist/shared/redirect-type.d.ts +17 -0
  604. package/dist/shared/redirect-type.d.ts.map +1 -0
  605. package/dist/shims/font-google.d.ts +1 -1
  606. package/dist/shims/font-google.d.ts.map +1 -1
  607. package/dist/shims/font-google.js +42 -0
  608. package/dist/shims/font-google.js.map +1 -0
  609. package/dist/shims/font-local.d.ts +26 -0
  610. package/dist/shims/font-local.d.ts.map +1 -0
  611. package/dist/shims/font-local.js +20 -0
  612. package/dist/shims/font-local.js.map +1 -0
  613. package/dist/shims/headers.d.ts +53 -1
  614. package/dist/shims/headers.d.ts.map +1 -1
  615. package/dist/shims/image.d.ts +120 -120
  616. package/dist/shims/image.d.ts.map +1 -1
  617. package/dist/shims/navigation-client.d.ts +35 -11
  618. package/dist/shims/navigation-client.d.ts.map +1 -1
  619. package/dist/shims/navigation.d.ts +11 -5
  620. package/dist/shims/navigation.d.ts.map +1 -1
  621. package/dist/utils/state-machine.d.ts +80 -0
  622. package/dist/utils/state-machine.d.ts.map +1 -0
  623. package/docs/api/30-api-server.mdx +233 -0
  624. package/docs/api/31-api-client.mdx +161 -0
  625. package/docs/api/32-api-cache.mdx +311 -0
  626. package/docs/api/33-api-search-params.mdx +154 -0
  627. package/docs/api/34-api-config.mdx +325 -0
  628. package/docs/api/35-api-typescript.mdx +170 -0
  629. package/docs/api/36-cli.mdx +143 -0
  630. package/docs/learn/00-introduction.mdx +109 -0
  631. package/docs/learn/01-quick-start.mdx +94 -0
  632. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  633. package/docs/learn/03-fetching-data.mdx +211 -0
  634. package/docs/learn/03b-access-control.mdx +130 -0
  635. package/docs/learn/04-loading-states.mdx +67 -0
  636. package/docs/learn/04b-the-flush-point.mdx +115 -0
  637. package/docs/learn/05-typed-params.mdx +275 -0
  638. package/docs/learn/06-forms-and-actions.mdx +146 -0
  639. package/docs/learn/07-typed-routes.mdx +127 -0
  640. package/docs/learn/08-streaming.mdx +146 -0
  641. package/docs/learn/09-caching.mdx +252 -0
  642. package/docs/learn/10-middleware.mdx +157 -0
  643. package/docs/learn/11-error-handling.mdx +156 -0
  644. package/docs/learn/12-client-navigation.mdx +176 -0
  645. package/docs/learn/13-configuration.mdx +162 -0
  646. package/docs/learn/14-deploying.mdx +264 -0
  647. package/docs/more/01-advanced-routing.mdx +173 -0
  648. package/docs/more/02-advanced-forms.mdx +137 -0
  649. package/docs/more/03-coming-from-nextjs.mdx +186 -0
  650. package/docs/more/04-metadata-and-fonts.mdx +193 -0
  651. package/docs/more/04b-mdx.mdx +209 -0
  652. package/docs/more/05-content-collections.mdx +90 -0
  653. package/docs/more/06-instrumentation.mdx +214 -0
  654. package/docs/more/07-security.mdx +129 -0
  655. package/docs/more/08-developer-experience.mdx +134 -0
  656. package/docs/more/40-why-timber.mdx +50 -0
  657. package/docs/more/41-timber-vs-nextjs.mdx +81 -0
  658. package/docs/more/42-timber-vs-others.mdx +68 -0
  659. package/docs/more/50-ai-agent-instructions.mdx +169 -0
  660. package/llms.txt +55 -0
  661. package/package.json +105 -26
  662. package/src/adapters/build-output-helper.ts +199 -0
  663. package/src/adapters/cloudflare-dev.ts +177 -0
  664. package/src/adapters/cloudflare-kv-cache.ts +204 -0
  665. package/src/adapters/cloudflare.ts +620 -129
  666. package/src/adapters/compress-module.ts +27 -92
  667. package/src/adapters/nitro.ts +266 -122
  668. package/src/adapters/raw-imports.d.ts +5 -0
  669. package/src/adapters/shared.ts +68 -0
  670. package/src/adapters/types.ts +2 -7
  671. package/src/adapters/wrangler.d.ts +7 -0
  672. package/src/cache/cache-api.ts +107 -0
  673. package/src/cache/handler-store.ts +76 -0
  674. package/src/cache/index.ts +114 -21
  675. package/src/cache/invalidation-epoch.ts +93 -0
  676. package/src/cache/json-lossy-check.ts +75 -0
  677. package/src/cache/redis-handler.ts +197 -19
  678. package/src/cache/singleflight.ts +64 -6
  679. package/src/cache/sizeof.ts +33 -0
  680. package/src/cache/stable-stringify.ts +65 -2
  681. package/src/cache/store.ts +71 -0
  682. package/src/cache/stores/cloudflare-kv.ts +52 -0
  683. package/src/cache/stores/memory.ts +125 -0
  684. package/src/cache/stores/redis.ts +97 -0
  685. package/src/cache/stores/vercel.ts +59 -0
  686. package/src/cache/tag-aware-handler.ts +237 -0
  687. package/src/cache/timber-cache.ts +161 -36
  688. package/src/cdn/cloudflare-purge.ts +50 -0
  689. package/src/cdn/fastly-purge.ts +63 -0
  690. package/src/cdn/headers.ts +153 -0
  691. package/src/cdn/index.ts +17 -0
  692. package/src/cdn/purge-store.ts +34 -0
  693. package/src/cdn/workers-cache-purge.ts +30 -0
  694. package/src/cli-schema-sync.ts +401 -0
  695. package/src/cli.ts +167 -34
  696. package/src/client/browser-dev.ts +156 -1
  697. package/src/client/browser-entry/action-dispatch.ts +124 -0
  698. package/src/client/browser-entry/hmr.ts +70 -0
  699. package/src/client/browser-entry/hydrate.ts +187 -0
  700. package/src/client/browser-entry/index.ts +113 -0
  701. package/src/client/browser-entry/post-hydration.ts +110 -0
  702. package/src/client/browser-entry/router-init.ts +286 -0
  703. package/src/client/browser-entry/rsc-stream.ts +157 -0
  704. package/src/client/browser-entry/scroll.ts +50 -0
  705. package/src/client/error-boundary.tsx +127 -22
  706. package/src/client/error-reconstituter.tsx +79 -0
  707. package/src/client/form.tsx +31 -32
  708. package/src/client/history.ts +21 -6
  709. package/src/client/index.ts +67 -45
  710. package/src/client/internal.ts +58 -0
  711. package/src/client/link.tsx +349 -150
  712. package/src/client/navigation-api.ts +345 -0
  713. package/src/client/navigation-context.ts +15 -7
  714. package/src/client/navigation-root.tsx +355 -0
  715. package/src/client/nuqs-adapter.tsx +16 -3
  716. package/src/client/router-ref.ts +1 -1
  717. package/src/client/router.ts +589 -215
  718. package/src/client/rsc-fetch.ts +251 -34
  719. package/src/client/segment-cache.ts +105 -17
  720. package/src/client/segment-outlet.tsx +141 -0
  721. package/src/client/segment-update-context.ts +42 -0
  722. package/src/client/shallow-url.ts +22 -0
  723. package/src/client/slot-context.ts +50 -0
  724. package/src/client/slot-outlet.tsx +22 -0
  725. package/src/client/slot-provider.tsx +32 -0
  726. package/src/client/ssr-data.ts +13 -5
  727. package/src/client/state.ts +2 -2
  728. package/src/client/top-loader.tsx +11 -9
  729. package/src/client/use-cookie.ts +60 -15
  730. package/src/client/use-link-status.ts +7 -7
  731. package/src/client/use-pathname.ts +1 -0
  732. package/src/client/use-pending-navigation.ts +40 -0
  733. package/src/client/use-query-states.ts +108 -10
  734. package/src/client/use-router.ts +4 -1
  735. package/src/client/use-search-params.ts +31 -44
  736. package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
  737. package/src/codec.ts +149 -0
  738. package/src/config-types.ts +282 -0
  739. package/src/config-validation.ts +330 -0
  740. package/src/content/index.ts +5 -13
  741. package/src/cookies/define-cookie.ts +217 -53
  742. package/src/cookies/index.ts +12 -1
  743. package/src/cookies/json-cookie.ts +105 -0
  744. package/src/cookies/validation.ts +192 -0
  745. package/src/dev-tools/404-page.ts +286 -0
  746. package/src/dev-tools/browser-logs.ts +55 -0
  747. package/src/dev-tools/dev-page-shell.ts +260 -0
  748. package/src/dev-tools/error-page.ts +331 -0
  749. package/src/dev-tools/holding-server.ts +187 -0
  750. package/src/dev-tools/hydration-overlay.ts +158 -0
  751. package/src/dev-tools/index.ts +83 -0
  752. package/src/dev-tools/instrumentation.ts +213 -0
  753. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  754. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
  755. package/src/dev-tools/overlay.ts +469 -0
  756. package/src/dev-tools/stack-classifier.ts +75 -0
  757. package/src/dev-tools/terminal.ts +182 -0
  758. package/src/fonts/ast-walk.ts +235 -0
  759. package/src/fonts/ast.ts +477 -126
  760. package/src/fonts/bundle.ts +138 -0
  761. package/src/fonts/dev-middleware.ts +85 -0
  762. package/src/fonts/fallbacks.ts +0 -23
  763. package/src/fonts/google.ts +100 -18
  764. package/src/fonts/local.ts +9 -8
  765. package/src/fonts/paths.ts +58 -0
  766. package/src/fonts/pipeline.ts +348 -0
  767. package/src/fonts/transform.ts +311 -0
  768. package/src/fonts/types.ts +52 -1
  769. package/src/fonts/virtual-modules.ts +179 -0
  770. package/src/index.ts +446 -352
  771. package/src/params/codec-registry.ts +34 -0
  772. package/src/params/define-schema.ts +115 -0
  773. package/src/params/index.ts +17 -0
  774. package/src/params/resolve-schema.ts +84 -0
  775. package/src/plugin-context.ts +432 -0
  776. package/src/plugins/adapter-build.ts +220 -7
  777. package/src/plugins/build-manifest.ts +177 -23
  778. package/src/plugins/build-report.ts +253 -35
  779. package/src/plugins/cache.ts +243 -0
  780. package/src/plugins/callsite-ast.ts +472 -0
  781. package/src/plugins/callsite-jsx.ts +243 -0
  782. package/src/plugins/chunks.ts +74 -5
  783. package/src/plugins/client-chunks.ts +185 -0
  784. package/src/plugins/cloudflare-wasm.ts +141 -0
  785. package/src/plugins/content.ts +1 -1
  786. package/src/plugins/dev-server.ts +284 -94
  787. package/src/plugins/entries.ts +134 -16
  788. package/src/plugins/fonts.ts +225 -660
  789. package/src/plugins/mdx.ts +47 -10
  790. package/src/plugins/prebuilt-capture.ts +217 -0
  791. package/src/plugins/prebuilt-options-analysis.ts +175 -0
  792. package/src/plugins/prebuilt.ts +655 -0
  793. package/src/plugins/prerender-sugar.ts +328 -0
  794. package/src/plugins/request-dep.ts +458 -0
  795. package/src/plugins/routing.ts +237 -241
  796. package/src/plugins/server-bundle.ts +89 -12
  797. package/src/plugins/shims.ts +241 -64
  798. package/src/plugins/static-build.ts +15 -90
  799. package/src/routing/codegen-shared.ts +115 -0
  800. package/src/routing/codegen-types.ts +65 -0
  801. package/src/routing/codegen.ts +372 -178
  802. package/src/routing/convention-lint.ts +394 -0
  803. package/src/routing/export-detect.ts +304 -0
  804. package/src/routing/file-cache.ts +23 -0
  805. package/src/routing/index.ts +10 -1
  806. package/src/routing/interception.ts +3 -22
  807. package/src/routing/link-codegen.ts +313 -0
  808. package/src/routing/manifest-codegen.ts +287 -0
  809. package/src/routing/scanner.ts +338 -189
  810. package/src/routing/schema-validation.ts +155 -0
  811. package/src/routing/segment-classify.ts +223 -0
  812. package/src/routing/segment-codegen.ts +98 -0
  813. package/src/routing/types.ts +82 -25
  814. package/src/routing/walkers.ts +90 -0
  815. package/src/rsc-runtime/rsc.ts +9 -0
  816. package/src/rsc-runtime/ssr.ts +50 -0
  817. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  818. package/src/schema-bridge.ts +253 -0
  819. package/src/search-params/define.ts +576 -0
  820. package/src/search-params/index.ts +14 -20
  821. package/src/search-params/registry.ts +2 -2
  822. package/src/search-params/wrappers.ts +101 -0
  823. package/src/segment-params/define.ts +249 -0
  824. package/src/segment-params/index.ts +9 -0
  825. package/src/server/access-gate.tsx +111 -34
  826. package/src/server/action-client.ts +120 -29
  827. package/src/server/action-encryption.ts +144 -0
  828. package/src/server/action-handler.ts +123 -33
  829. package/src/server/actions.ts +48 -54
  830. package/src/server/als-registry.ts +137 -20
  831. package/src/server/asset-headers.ts +15 -37
  832. package/src/server/body-limits.ts +10 -2
  833. package/src/server/build-manifest.ts +19 -56
  834. package/src/server/canonicalize.ts +6 -3
  835. package/src/server/coalesce-tick.ts +75 -0
  836. package/src/server/compress.ts +34 -7
  837. package/src/server/cookie-context.ts +484 -0
  838. package/src/server/cookie-parsing.ts +163 -0
  839. package/src/server/csrf.ts +39 -6
  840. package/src/server/default-logger.ts +99 -0
  841. package/src/server/deny-boundary.ts +314 -0
  842. package/src/server/deny-renderer.ts +85 -77
  843. package/src/server/dev-source-map.ts +31 -0
  844. package/src/server/early-hints-sender.ts +3 -2
  845. package/src/server/early-hints.ts +37 -27
  846. package/src/server/error-boundary-wrapper.ts +61 -22
  847. package/src/server/fallback-error.ts +79 -102
  848. package/src/server/flight-injection-state.ts +113 -0
  849. package/src/server/flight-scripts.ts +62 -0
  850. package/src/server/form-data.ts +124 -12
  851. package/src/server/html-injector-core.ts +495 -0
  852. package/src/server/html-injectors.ts +271 -254
  853. package/src/server/index.ts +31 -185
  854. package/src/server/internal.ts +181 -0
  855. package/src/server/logger.ts +72 -36
  856. package/src/server/metadata-routes.ts +205 -24
  857. package/src/server/metadata.ts +21 -0
  858. package/src/server/middleware-runner.ts +31 -4
  859. package/src/server/node-stream-transforms.ts +336 -0
  860. package/src/server/param-coercion.ts +207 -0
  861. package/src/server/pipeline-helpers.ts +204 -0
  862. package/src/server/pipeline-interception.ts +45 -18
  863. package/src/server/pipeline-metadata.ts +14 -0
  864. package/src/server/pipeline-outcome.ts +197 -0
  865. package/src/server/pipeline-phases.ts +545 -0
  866. package/src/server/pipeline.ts +274 -382
  867. package/src/server/port-resolution.ts +215 -0
  868. package/src/server/prebuilt/cache-key.ts +298 -0
  869. package/src/server/prebuilt/capture-state.ts +89 -0
  870. package/src/server/prebuilt/key-discipline.ts +53 -0
  871. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  872. package/src/server/prebuilt/overlay.ts +256 -0
  873. package/src/server/prebuilt/payload-source.ts +201 -0
  874. package/src/server/prebuilt/slots.ts +190 -0
  875. package/src/server/prebuilt/synthetic-store.ts +121 -0
  876. package/src/server/prebuilt-builder.ts +809 -0
  877. package/src/server/prebuilt-runtime.ts +815 -0
  878. package/src/server/primitives.ts +160 -83
  879. package/src/server/render-timeout.ts +108 -0
  880. package/src/server/render-utils.ts +31 -0
  881. package/src/server/request-context.ts +170 -337
  882. package/src/server/request-dep.ts +37 -0
  883. package/src/server/route-element-builder.ts +699 -295
  884. package/src/server/route-handler.ts +31 -4
  885. package/src/server/route-matcher.ts +158 -277
  886. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  887. package/src/server/rsc-entry/api-handler.ts +69 -32
  888. package/src/server/rsc-entry/deny-fallback.ts +92 -0
  889. package/src/server/rsc-entry/error-renderer.ts +306 -89
  890. package/src/server/rsc-entry/helpers.ts +210 -85
  891. package/src/server/rsc-entry/index.ts +332 -332
  892. package/src/server/rsc-entry/render-route.ts +300 -0
  893. package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
  894. package/src/server/rsc-entry/rsc-payload.ts +102 -42
  895. package/src/server/rsc-entry/rsc-stream.ts +93 -13
  896. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  897. package/src/server/rsc-entry/ssr-renderer.ts +275 -43
  898. package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
  899. package/src/server/safe-load.ts +60 -0
  900. package/src/server/sensitive-fields.ts +230 -0
  901. package/src/server/server-only-guard-noop.js +3 -0
  902. package/src/server/sitemap-generator.ts +345 -0
  903. package/src/server/sitemap-handler.ts +157 -0
  904. package/src/server/slot-resolver.ts +574 -250
  905. package/src/server/ssr-bridge-types.ts +124 -0
  906. package/src/server/ssr-entry.ts +206 -86
  907. package/src/server/ssr-render.ts +345 -86
  908. package/src/server/ssr-wrappers.tsx +141 -0
  909. package/src/server/state-tree-diff.ts +177 -30
  910. package/src/server/status-code-resolver.ts +115 -130
  911. package/src/server/stream-utils.ts +288 -0
  912. package/src/server/tracing.ts +126 -14
  913. package/src/server/tree-builder.ts +214 -90
  914. package/src/server/tree-match.ts +262 -0
  915. package/src/server/types.ts +78 -9
  916. package/src/server/utils/escape-html.ts +20 -0
  917. package/src/server/utils/mdx-file.ts +22 -0
  918. package/src/server/version-skew.ts +104 -0
  919. package/src/server/workers-cache-bridge.ts +33 -0
  920. package/src/shared/href-validation.ts +159 -0
  921. package/src/shared/merge-search-params.ts +55 -0
  922. package/src/shared/redirect-type.ts +17 -0
  923. package/src/shims/font-google.ts +1 -1
  924. package/src/shims/font-local.ts +34 -0
  925. package/src/shims/headers.ts +122 -1
  926. package/src/shims/navigation-client.ts +51 -29
  927. package/src/shims/navigation.ts +14 -7
  928. package/src/utils/state-machine.ts +111 -0
  929. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  930. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  931. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  932. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  933. package/dist/_chunks/format-RyoGQL74.js +0 -164
  934. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  935. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  936. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  937. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js +0 -153
  938. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  939. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  940. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  941. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  942. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  943. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  944. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  945. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  946. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  947. package/dist/adapters/cloudflare.js.map +0 -1
  948. package/dist/cache/index.js.map +0 -1
  949. package/dist/cache/register-cached-function.d.ts +0 -17
  950. package/dist/cache/register-cached-function.d.ts.map +0 -1
  951. package/dist/client/browser-entry.d.ts +0 -21
  952. package/dist/client/browser-entry.d.ts.map +0 -1
  953. package/dist/client/head.d.ts +0 -16
  954. package/dist/client/head.d.ts.map +0 -1
  955. package/dist/client/link-status-provider.d.ts +0 -11
  956. package/dist/client/link-status-provider.d.ts.map +0 -1
  957. package/dist/client/segment-merger.d.ts +0 -119
  958. package/dist/client/segment-merger.d.ts.map +0 -1
  959. package/dist/client/stale-reload.d.ts +0 -44
  960. package/dist/client/stale-reload.d.ts.map +0 -1
  961. package/dist/client/transition-root.d.ts +0 -74
  962. package/dist/client/transition-root.d.ts.map +0 -1
  963. package/dist/client/use-navigation-pending.d.ts +0 -26
  964. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  965. package/dist/client/use-params.d.ts.map +0 -1
  966. package/dist/plugins/cache-transform.d.ts +0 -36
  967. package/dist/plugins/cache-transform.d.ts.map +0 -1
  968. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  969. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  970. package/dist/plugins/dev-logs.d.ts.map +0 -1
  971. package/dist/plugins/dynamic-transform.d.ts +0 -72
  972. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  973. package/dist/plugins/server-action-exports.d.ts +0 -26
  974. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  975. package/dist/routing/status-file-lint.d.ts +0 -33
  976. package/dist/routing/status-file-lint.d.ts.map +0 -1
  977. package/dist/search-params/analyze.d.ts +0 -54
  978. package/dist/search-params/analyze.d.ts.map +0 -1
  979. package/dist/search-params/builtin-codecs.d.ts +0 -105
  980. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  981. package/dist/search-params/codecs.d.ts +0 -53
  982. package/dist/search-params/codecs.d.ts.map +0 -1
  983. package/dist/search-params/create.d.ts +0 -106
  984. package/dist/search-params/create.d.ts.map +0 -1
  985. package/dist/server/client-module-map.d.ts +0 -47
  986. package/dist/server/client-module-map.d.ts.map +0 -1
  987. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  988. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  989. package/dist/server/dev-logger.d.ts.map +0 -1
  990. package/dist/server/dev-span-processor.d.ts +0 -29
  991. package/dist/server/dev-span-processor.d.ts.map +0 -1
  992. package/dist/server/dev-warnings.d.ts +0 -129
  993. package/dist/server/dev-warnings.d.ts.map +0 -1
  994. package/dist/server/flush.d.ts +0 -74
  995. package/dist/server/flush.d.ts.map +0 -1
  996. package/dist/server/manifest-status-resolver.d.ts +0 -58
  997. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  998. package/dist/server/prerender.d.ts +0 -77
  999. package/dist/server/prerender.d.ts.map +0 -1
  1000. package/dist/utils/directive-parser.d.ts +0 -70
  1001. package/dist/utils/directive-parser.d.ts.map +0 -1
  1002. package/src/cache/register-cached-function.ts +0 -103
  1003. package/src/client/browser-entry.ts +0 -678
  1004. package/src/client/head.ts +0 -61
  1005. package/src/client/link-status-provider.tsx +0 -30
  1006. package/src/client/segment-merger.ts +0 -339
  1007. package/src/client/stale-reload.ts +0 -87
  1008. package/src/client/transition-root.tsx +0 -166
  1009. package/src/client/use-navigation-pending.ts +0 -38
  1010. package/src/plugins/cache-transform.ts +0 -199
  1011. package/src/plugins/dev-error-overlay.ts +0 -230
  1012. package/src/plugins/dynamic-transform.ts +0 -161
  1013. package/src/plugins/server-action-exports.ts +0 -220
  1014. package/src/routing/status-file-lint.ts +0 -112
  1015. package/src/search-params/analyze.ts +0 -192
  1016. package/src/search-params/builtin-codecs.ts +0 -228
  1017. package/src/search-params/codecs.ts +0 -153
  1018. package/src/search-params/create.ts +0 -321
  1019. package/src/server/client-module-map.ts +0 -58
  1020. package/src/server/dev-fetch-instrumentation.ts +0 -96
  1021. package/src/server/dev-span-processor.ts +0 -78
  1022. package/src/server/dev-warnings.ts +0 -283
  1023. package/src/server/flush.ts +0 -182
  1024. package/src/server/manifest-status-resolver.ts +0 -215
  1025. package/src/server/prerender.ts +0 -139
  1026. package/src/utils/directive-parser.ts +0 -529
@@ -12,62 +12,63 @@
12
12
  * references. The stream is then passed to the SSR entry (in a separate
13
13
  * Vite environment) which decodes it and renders HTML.
14
14
  *
15
+ * This file is intentionally orchestration-only (audited: TIM-968). It
16
+ * wires virtual modules, config, and one-time startup (cache handler,
17
+ * instrumentation, CDN purge, prebuilt payload source) into the pipeline
18
+ * and delegates all rendering work to siblings in this directory
19
+ * (render-route.ts, error-renderer.ts, deny-fallback.ts,
20
+ * revalidate-renderer.ts, wrap-action-dispatch.ts, ...). Don't add
21
+ * rendering or response-shaping logic here — extract it to a sibling.
22
+ *
15
23
  * Design docs: 18-build-system.md §"Entry Files", 02-rendering-pipeline.md
16
24
  */
17
25
 
18
26
  // @ts-expect-error — virtual module provided by timber-routing plugin
19
27
  import routeManifest from 'virtual:timber-route-manifest';
28
+ // TIM-830: Populate the search-params registry eagerly so <Link> can
29
+ // serialize flat `Partial<T>` values synchronously in RSC renders.
30
+ // The module has side effects only — no exports consumed here.
31
+ // @ts-expect-error — virtual module provided by timber-routing plugin
32
+ import 'virtual:timber-search-params-registry';
20
33
  // @ts-expect-error — virtual module provided by timber-entries plugin
21
34
  import config from 'virtual:timber-config';
22
35
  // @ts-expect-error — virtual module provided by timber-build-manifest plugin
23
36
  import buildManifest from 'virtual:timber-build-manifest';
24
37
  // @ts-expect-error — virtual module provided by timber-entries plugin
25
38
  import loadUserInstrumentation from 'virtual:timber-instrumentation';
26
-
27
- import type { FormRerender } from '#/server/action-handler.js';
28
- import { handleActionRequest, isActionRequest } from '#/server/action-handler.js';
29
- import type { BodyLimitsConfig } from '#/server/body-limits.js';
30
- import type { BuildManifest } from '#/server/build-manifest.js';
31
- import {
32
- buildCssLinkTags,
33
- buildFontPreloadTags,
34
- buildModulepreloadTags,
35
- collectRouteCss,
36
- collectRouteFonts,
37
- collectRouteModulepreloads,
38
- } from '#/server/build-manifest.js';
39
- import type { LayoutEntry } from '#/server/deny-renderer.js';
40
- import { renderDenyPage, renderDenyPageAsRsc } from '#/server/deny-renderer.js';
41
- import { resolveLogMode } from '#/server/dev-logger.js';
42
- import { sendEarlyHints103 } from '#/server/early-hints-sender.js';
43
- import { collectEarlyHintHeaders } from '#/server/early-hints.js';
44
- import { runWithFormFlash } from '#/server/form-flash.js';
45
- import type { ClientBootstrapConfig } from '#/server/html-injectors.js';
46
- import { buildClientScripts } from '#/server/html-injectors.js';
47
- import type { InterceptionContext, PipelineConfig, RouteMatch } from '#/server/pipeline.js';
48
- import { createPipeline } from '#/server/pipeline.js';
49
- import { DenySignal, RedirectSignal } from '#/server/primitives.js';
50
- import { buildRouteElement, RouteSignalWithContext } from '#/server/route-element-builder.js';
51
- import type { ManifestSegmentNode } from '#/server/route-matcher.js';
52
- import { createMetadataRouteMatcher, createRouteMatcher } from '#/server/route-matcher.js';
53
- import { initDevTracing } from '#/server/tracing.js';
54
-
55
- import { renderFallbackError as renderFallback } from '#/server/fallback-error.js';
56
- import { loadInstrumentation } from '#/server/instrumentation.js';
57
- import { handleApiRoute } from './api-handler.js';
58
- import { renderErrorPage, renderNoMatchPage } from './error-renderer.js';
59
- import {
60
- buildRedirectResponse,
61
- createDebugChannelSink,
62
- escapeHtml,
63
- isRscPayloadRequest,
64
- } from './helpers.js';
65
- import { parseClientStateTree } from '#/server/state-tree-diff.js';
66
- import { buildRscPayloadResponse } from './rsc-payload.js';
67
- import { renderRscStream } from './rsc-stream.js';
68
- import { renderSsrResponse } from './ssr-renderer.js';
69
- import { callSsr } from './ssr-bridge.js';
70
- import { isDebug, isDevMode, setDebugFromConfig } from '#/server/debug.js';
39
+ // @ts-expect-error — virtual module provided by timber-entries plugin
40
+ import loadCacheHandler from 'virtual:timber-cache-handler';
41
+ // @ts-expect-error — virtual module provided by timber-entries plugin
42
+ import { loadCdnPurgeHandler } from 'virtual:timber-cache-handler';
43
+ // @ts-expect-error — virtual module provided by timber-routing plugin
44
+ import globalSchemaCodecs from 'virtual:timber-schema';
45
+
46
+ import { wrapPipelineWithActionDispatch, buildActionDispatcher } from './wrap-action-dispatch.js';
47
+ import type { BodyLimitsConfig } from '../body-limits.js';
48
+ import type { BuildManifest } from '../build-manifest.js';
49
+ import { resolveLogMode } from '../../dev-tools/logger.js';
50
+ import { sendEarlyHints103 } from '../early-hints-sender.js';
51
+ import { collectEarlyHintHeaders } from '../early-hints.js';
52
+ import { buildClientScripts } from '../html-injectors.js';
53
+ import type { InterceptionContext, PipelineConfig, RouteMatch } from '../pipeline.js';
54
+ import { createPipeline } from '../pipeline.js';
55
+ import { coerceSegmentParams, setGlobalSchemaCodecs } from '../param-coercion.js';
56
+ import { createMetadataRouteMatcher, createRouteMatcher } from '../route-matcher.js';
57
+ import { initDevTracing } from '../tracing.js';
58
+ import { createRevalidateRendererFactory } from './revalidate-renderer.js';
59
+
60
+ import { renderFallbackError as renderFallback } from '../fallback-error.js';
61
+ import { loadInstrumentation } from '../instrumentation.js';
62
+ import { createDenyFallbackRenderer } from './deny-fallback.js';
63
+ import { renderNoMatchPage } from './error-renderer.js';
64
+ import { renderRoute } from './render-route.js';
65
+ import { isDebug, isDevMode, setDebugFromConfig } from '../debug.js';
66
+ import { setSourceMapCallback } from '../dev-source-map.js';
67
+ import { requestContextAls } from '../als-registry.js';
68
+ import { capturePrebuiltPayloads } from '../prebuilt-builder.js';
69
+ import { setPrebuiltPayloadSource } from '../prebuilt/payload-source.js';
70
+ import { setRscFunctions, setComponentRefreshTimeout } from '../prebuilt-runtime.js';
71
+ import { createAutoSitemapHandler } from '../sitemap-handler.js';
71
72
 
72
73
  /**
73
74
  * Resolve the Server-Timing mode from timber.config.ts.
@@ -84,20 +85,24 @@ function resolveServerTimingMode(
84
85
  return isDev ? 'detailed' : 'total';
85
86
  }
86
87
 
87
- // Dev-only pipeline error handler, set by the dev server after import.
88
- // In production this is always undefined — no overhead.
89
- let _devPipelineErrorHandler: ((error: Error, phase: string) => void) | undefined;
90
-
91
88
  /**
92
- * Set the dev pipeline error handler.
89
+ * Set the dev source-map handler.
90
+ *
91
+ * Called by the dev server after importing this module to wire Vite's
92
+ * module graph source-mapping into the error rendering pipeline. Errors
93
+ * rendered by renderErrorPage / renderFallbackError will have their
94
+ * stack traces rewritten to show original source positions.
93
95
  *
94
- * Called by the dev server after importing this module to wire pipeline
95
- * errors into the Vite browser error overlay. No-op in production.
96
+ * No-op in production.
96
97
  */
97
- export function setDevPipelineErrorHandler(handler: (error: Error, phase: string) => void): void {
98
- _devPipelineErrorHandler = handler;
98
+ export function setDevSourceMapHandler(handler: (error: Error) => void): void {
99
+ setSourceMapCallback(handler);
99
100
  }
100
101
 
102
+ // Dev-only: debug components getter is stored per-request in ALS
103
+ // (RequestContextStore.debugComponentsGetter) to avoid cross-request
104
+ // race conditions. See TIM-557.
105
+
101
106
  /**
102
107
  * Create the RSC request handler from the route manifest.
103
108
  *
@@ -105,21 +110,84 @@ export function setDevPipelineErrorHandler(handler: (error: Error, phase: string
105
110
  * 103 Early Hints → middleware.ts → render (RSC → SSR → HTML).
106
111
  */
107
112
  async function createRequestHandler(manifest: typeof routeManifest, runtimeConfig: typeof config) {
108
- // Load the user's instrumentation.ts — register() is awaited before the
109
- // server accepts any requests. The logger and onRequestError hooks are
110
- // wired into the framework. This runs once at startup.
111
- // See design/17-logging.md §"register() — Server Startup"
112
- await loadInstrumentation(loadUserInstrumentation);
113
-
114
- // Initialize cookie signing secrets from config (design/29-cookies.md §"Signed Cookies")
115
- const cookieSecrets = (runtimeConfig as Record<string, unknown>).cookieSecrets as
116
- | string[]
113
+ // Initialize deployment ID for version skew detection (TIM-446).
114
+ // The manifest init module sets globalThis.__TIMBER_DEPLOYMENT_ID__ at startup.
115
+ // In dev mode this is undefined — skew checks are skipped.
116
+ const deploymentId = (globalThis as Record<string, unknown>).__TIMBER_DEPLOYMENT_ID__ as
117
+ | string
117
118
  | undefined;
118
- if (cookieSecrets?.length) {
119
- const { setCookieSecrets } = await import('#/server/request-context.js');
120
- setCookieSecrets(cookieSecrets);
119
+ if (deploymentId) {
120
+ const { setDeploymentId } = await import('../version-skew.js');
121
+ setDeploymentId(deploymentId);
122
+ }
123
+
124
+ // Wire the CDN purge handler so revalidateTag triggers CDN purge (TIM-1166).
125
+ const userCdnPurge = await loadCdnPurgeHandler();
126
+ if (userCdnPurge) {
127
+ const { setCdnPurgeHandler } = await import('../../cdn/purge-store.js');
128
+ setCdnPurgeHandler(userCdnPurge as Parameters<typeof setCdnPurgeHandler>[0]);
129
+ } else if (typeof process !== 'undefined' && process.env?.TIMBER_RUNTIME === 'cloudflare') {
130
+ // Auto-wire Workers Cache purge on Cloudflare — no API token needed,
131
+ // available on all plans via ctx.cache.purge({ tags }) (TIM-1170).
132
+ const { WorkersCachePurge } = await import('../../cdn/workers-cache-purge.js');
133
+ const { setCdnPurgeHandler } = await import('../../cdn/purge-store.js');
134
+ setCdnPurgeHandler(new WorkersCachePurge());
135
+ }
136
+
137
+ // Wire the prebuilt payload source so cache.component wrappers can look
138
+ // up cached flight payloads at request time (TIM-1122). The source is
139
+ // platform-aware: Node/Nitro reads from disk; Cloudflare reads from
140
+ // static assets via globalThis.__TIMBER_PREBUILT_SOURCE__ (set by the
141
+ // generated _worker.js before this module loads).
142
+ // In dev mode there are no prebuilt artifacts — source stays null and
143
+ // all cache.component wrappers render dynamically.
144
+ if (!isDevMode()) {
145
+ const platformSource = (globalThis as Record<string, unknown>).__TIMBER_PREBUILT_SOURCE__ as
146
+ | import('../prebuilt/payload-source.js').PrebuiltPayloadSource
147
+ | undefined;
148
+ if (platformSource) {
149
+ setPrebuiltPayloadSource(platformSource);
150
+ } else {
151
+ // Default: Node/fs-based source — prebuilt/ is alongside rsc/ in the
152
+ // adapter output directory, so resolve relative to this entry.
153
+ try {
154
+ const { readFile: fsReadFile } = await import('node:fs/promises');
155
+ const { join: pathJoin, dirname } = await import('node:path');
156
+ const { fileURLToPath } = await import('node:url');
157
+ const entryDir = dirname(fileURLToPath(import.meta.url));
158
+ const prebuiltDir = pathJoin(entryDir, '..', 'prebuilt');
159
+ setPrebuiltPayloadSource({
160
+ async loadManifest() {
161
+ try {
162
+ const data = await fsReadFile(pathJoin(prebuiltDir, 'manifest.json'), 'utf-8');
163
+ return JSON.parse(data);
164
+ } catch {
165
+ return null;
166
+ }
167
+ },
168
+ async readPayload(file) {
169
+ try {
170
+ return await fsReadFile(pathJoin(prebuiltDir, file));
171
+ } catch {
172
+ return null;
173
+ }
174
+ },
175
+ });
176
+ } catch {
177
+ // node:fs not available (e.g. edge runtimes without the global
178
+ // override) — source stays null, wrappers render dynamically.
179
+ }
180
+ }
121
181
  }
122
182
 
183
+ // Wire RSC flight functions so prebuilt-runtime can revive cached payloads
184
+ // and capture re-renders without a dynamic import (TIM-1165).
185
+ const rscMod = await import('../../rsc-runtime/rsc.js');
186
+ setRscFunctions({
187
+ createFromReadableStream: rscMod.createFromReadableStream,
188
+ renderToReadableStream: rscMod.renderToReadableStream,
189
+ });
190
+
123
191
  const matchRoute = createRouteMatcher(manifest);
124
192
  const matchMetadataRoute = createMetadataRouteMatcher(manifest);
125
193
 
@@ -131,9 +199,12 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
131
199
  | { disabled: boolean; enableHMRInDev: boolean }
132
200
  | undefined;
133
201
  const clientJsDisabled = clientJsConfig?.disabled ?? false;
202
+ const clientSegmentCache =
203
+ ((runtimeConfig as Record<string, unknown>).clientSegmentCache as boolean) ?? false;
134
204
  const clientBootstrap = buildClientScripts({
135
205
  ...runtimeConfig,
136
206
  clientJavascript: clientJsConfig ?? { disabled: false, enableHMRInDev: false },
207
+ devBrowserLogs: (runtimeConfig as Record<string, unknown>).devBrowserLogs as string | undefined,
137
208
  buildManifest: buildManifest as BuildManifest,
138
209
  });
139
210
 
@@ -144,6 +215,18 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
144
215
  setDebugFromConfig(true);
145
216
  }
146
217
 
218
+ // Wire the global sensitive-field stripping config so `createActionClient`
219
+ // instances in user code pick up `forms.stripSensitiveFields` from
220
+ // `timber.config.ts` without needing to plumb config through each action.
221
+ // See TIM-816 and design/08-forms-and-actions.md §"Validation errors".
222
+ const formsConfig = (runtimeConfig as Record<string, unknown>).forms as
223
+ | { stripSensitiveFields?: import('../sensitive-fields.js').SensitiveFieldsOption }
224
+ | undefined;
225
+ if (formsConfig) {
226
+ const { setGlobalSensitiveFieldsConfig } = await import('../sensitive-fields.js');
227
+ setGlobalSensitiveFieldsConfig(formsConfig.stripSensitiveFields);
228
+ }
229
+
147
230
  // Two separate flags for two different security levels:
148
231
  //
149
232
  // isDev (isDevMode) — gates client-visible behavior: dev error pages with
@@ -167,15 +250,22 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
167
250
  await initDevTracing({ mode: devLogMode, slowPhaseMs });
168
251
  // Patch globalThis.fetch to create OTEL spans for fetch calls.
169
252
  // Spans appear as children of the active component span in the dev log tree.
170
- const { instrumentDevFetch } = await import('../dev-fetch-instrumentation.js');
253
+ const { instrumentDevFetch } = await import('../../dev-tools/instrumentation.js');
171
254
  instrumentDevFetch();
172
255
  }
173
256
  }
174
257
 
175
258
  const typedBuildManifest = buildManifest as BuildManifest;
176
259
 
260
+ // The routing plugin emits `manifest.proxy = { load, filePath }` only when
261
+ // the app has an `app/proxy.ts`. Convert that to the pipeline's lazy variant
262
+ // so HMR re-imports per request; leave it undefined when there's no proxy.
263
+ const proxyConfig: PipelineConfig['proxy'] = manifest.proxy?.load
264
+ ? { kind: 'lazy', loader: manifest.proxy.load }
265
+ : undefined;
266
+
177
267
  const pipelineConfig: PipelineConfig = {
178
- proxyLoader: manifest.proxy?.load,
268
+ proxy: proxyConfig,
179
269
  matchRoute,
180
270
  matchMetadataRoute,
181
271
  // 103 Early Hints — fires after route match, before middleware.
@@ -183,11 +273,7 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
183
273
  // so the browser starts fetching critical resources while the server renders.
184
274
  // In dev mode the manifest is empty — no hints are sent.
185
275
  earlyHints: (match: RouteMatch, _req: Request, responseHeaders: Headers) => {
186
- const segments = match.segments as unknown as Array<{
187
- layout?: { filePath: string };
188
- page?: { filePath: string };
189
- }>;
190
- const headers = collectEarlyHintHeaders(segments, typedBuildManifest, {
276
+ const headers = collectEarlyHintHeaders(match.segments, typedBuildManifest, {
191
277
  skipJs: clientJsDisabled,
192
278
  });
193
279
  for (const h of headers) {
@@ -208,13 +294,48 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
208
294
  req,
209
295
  match,
210
296
  responseHeaders,
211
- clientBootstrap,
212
- clientJsDisabled,
297
+ {
298
+ clientBootstrap,
299
+ clientJsDisabled,
300
+ clientSegmentCache,
301
+ rootSegment: manifest.root,
302
+ buildManifest: typedBuildManifest,
303
+ globalError: manifest.globalError,
304
+ },
213
305
  interception
214
306
  );
215
307
  },
216
308
  renderNoMatch: async (req: Request, responseHeaders: Headers) => {
217
- return renderNoMatchPage(req, manifest.root, responseHeaders, clientBootstrap);
309
+ const response = await renderNoMatchPage(
310
+ req,
311
+ manifest.root,
312
+ responseHeaders,
313
+ clientBootstrap
314
+ );
315
+
316
+ // In dev mode, if the pipeline returned a bare 404 (no body — meaning
317
+ // no user-defined 404.tsx was found), replace it with a helpful dev
318
+ // page that lists available routes and suggests similar paths.
319
+ // Only for GET requests that accept HTML — HEAD/API/RSC clients
320
+ // should receive the bare 404 without an HTML body (TIM-793).
321
+ const acceptsHtml = (req.headers.get('accept') ?? '').includes('text/html');
322
+ if (isDev && !response.body && req.method === 'GET' && acceptsHtml) {
323
+ const { generateDev404Page, collectRoutes } = await import('../../dev-tools/404-page.js');
324
+ const routes = collectRoutes(manifest.root);
325
+ const pathname = new URL(req.url).pathname;
326
+ // devHmrOptions is set by the dev server after this module is
327
+ // imported (read at request time, not closure-capture time).
328
+ const html = generateDev404Page(pathname, routes, pipelineConfig.devHmrOptions);
329
+ return new Response(html, {
330
+ status: 404,
331
+ headers: {
332
+ ...Object.fromEntries(responseHeaders.entries()),
333
+ 'content-type': 'text/html; charset=utf-8',
334
+ },
335
+ });
336
+ }
337
+
338
+ return response;
218
339
  },
219
340
  interceptionRewrites: manifest.interceptionRewrites,
220
341
  // Slow request threshold from timber.config.ts. Default 3000ms, 0 to disable.
@@ -223,18 +344,81 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
223
344
  serverTiming: resolveServerTimingMode(runtimeConfig, isDev),
224
345
  onPipelineError: isDev
225
346
  ? (error: Error, phase: string) => {
226
- if (_devPipelineErrorHandler) _devPipelineErrorHandler(error, phase);
347
+ if (pipelineConfig.devPipelineErrorHandler) {
348
+ // For render-phase errors, include RSC debug component data
349
+ // from the Flight debug channel (if available from the current request).
350
+ const store = requestContextAls.getStore();
351
+ const debugComponents =
352
+ phase === 'render' && store?.debugComponentsGetter
353
+ ? store.debugComponentsGetter()
354
+ : undefined;
355
+ pipelineConfig.devPipelineErrorHandler(error, phase, debugComponents);
356
+ }
227
357
  }
228
358
  : undefined,
359
+
229
360
  renderFallbackError: (error, req, responseHeaders) =>
230
- renderFallback(error, req, responseHeaders, isDev, manifest.root, clientBootstrap),
361
+ renderFallback(
362
+ error,
363
+ req,
364
+ responseHeaders,
365
+ isDev,
366
+ manifest.root,
367
+ clientBootstrap,
368
+ manifest.globalError,
369
+ // Project root for dev error page frame classification.
370
+ // Not in runtimeConfig (TIM-787: leaked to client bundles).
371
+ // manifest.viteRoot is the resolved Vite root string — correct even
372
+ // when CWD differs from project root (e.g., monorepo custom root)
373
+ // (TIM-807). Passing manifest.root (segment tree object) here would
374
+ // stringify to "[object Object]" and misclassify app frames as
375
+ // internal, dropping source locations from the dev error page (TIM-808).
376
+ isDev ? manifest.viteRoot : undefined,
377
+ // HMR options for the dev error page's auto-reload WebSocket —
378
+ // set by the dev server after import, read at request time.
379
+ isDev ? pipelineConfig.devHmrOptions : undefined
380
+ ),
381
+ // Deny fallback — renders the deny page (403.tsx, 404.tsx, etc.) for
382
+ // DenySignals that escape from middleware or the render phase.
383
+ // See deny-fallback.ts, design/04-authorization.md, design/10-error-handling.md.
384
+ renderDenyFallback: createDenyFallbackRenderer({
385
+ rootSegment: manifest.root,
386
+ clientBootstrap,
387
+ }),
388
+ // Auto-generated sitemap handler — enabled when sitemap.enabled is true
389
+ // and no user-authored sitemap exists at the app root.
390
+ // See design/16-metadata.md §"Auto-generated Sitemap"
391
+ autoSitemapHandler: createAutoSitemapHandler(manifest.root, runtimeConfig),
392
+
393
+ // Server action dispatch — runs after proxy.ts, before route matching
394
+ // (TIM-1213). Moved into the pipeline so proxy.ts runs on action POSTs,
395
+ // matching the design doc: "proxy.ts runs on every request, no exclusions."
396
+ // Per-segment `middleware.ts` does NOT run on action POSTs (TIM-1134).
397
+ dispatchAction: buildActionDispatcher({
398
+ csrfConfig: {
399
+ csrf: runtimeConfig.csrf,
400
+ allowedOrigins: (runtimeConfig as Record<string, unknown>).allowedOrigins as
401
+ | string[]
402
+ | undefined,
403
+ },
404
+ bodyLimits: (runtimeConfig as Record<string, unknown>).limits as BodyLimitsConfig['limits'],
405
+ sensitiveFields: formsConfig?.stripSensitiveFields,
406
+ matchRoute,
407
+ buildRevalidateRenderer: createRevalidateRendererFactory({
408
+ matchRoute,
409
+ coerceSegmentParams,
410
+ buildManifest: buildManifest as BuildManifest,
411
+ }),
412
+ }),
231
413
  };
232
414
 
233
415
  const pipeline = createPipeline(pipelineConfig);
234
416
 
235
- // Wrap the pipeline to intercept server action requests before rendering.
236
- // Actions bypass the normal pipeline (no route matching, no middleware)
237
- // per design/08-forms-and-actions.md §"Middleware for Server Actions".
417
+ // Wrap the pipeline to enforce CSRF at the request boundary.
418
+ // CSRF validation lives in the wrapper (not inside the pipeline) so it
419
+ // runs before proxy.ts and covers every unsafe-method request. Server
420
+ // action dispatch has moved into the pipeline (TIM-1213) so proxy.ts
421
+ // runs on action POSTs. See LOCAL-773.
238
422
  const csrfConfig = {
239
423
  csrf: runtimeConfig.csrf,
240
424
  allowedOrigins: (runtimeConfig as Record<string, unknown>).allowedOrigins as
@@ -242,268 +426,84 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
242
426
  | undefined,
243
427
  };
244
428
 
245
- return async (req: Request): Promise<Response> => {
246
- if (isActionRequest(req)) {
247
- const actionResponse = await handleActionRequest(req, {
248
- csrf: csrfConfig,
249
- bodyLimits: {
250
- limits: (runtimeConfig as Record<string, unknown>).limits as BodyLimitsConfig['limits'],
251
- },
252
- revalidateRenderer: async (path: string) => {
253
- // Build the React element tree for the route at `path`.
254
- // Returns the element tree (not serialized) so the action handler can
255
- // combine it with the action result in a single renderToReadableStream call.
256
- // Forward original request headers (cookies, session IDs, etc.).
257
- const revalidateHeaders = new Headers(req.headers);
258
- revalidateHeaders.set('Accept', 'text/x-component');
259
- const revalidateReq = new Request(new URL(path, req.url), {
260
- headers: revalidateHeaders,
261
- });
262
- const revalidateMatch = matchRoute(new URL(revalidateReq.url).pathname);
263
- if (!revalidateMatch) {
264
- throw new Error(`revalidatePath('${path}') — no matching route`);
265
- }
266
- const routeResult = await buildRouteElement(revalidateReq, revalidateMatch);
267
- return {
268
- element: routeResult.element,
269
- headElements: routeResult.headElements,
270
- };
271
- },
272
- });
273
- if (actionResponse) {
274
- // Check if this is a re-render signal (no-JS validation failure)
275
- if ('rerender' in actionResponse) {
276
- const formRerender = actionResponse as FormRerender;
277
- // Re-render the page with the action result as flash data.
278
- // Server components read it via getFormFlash() and pass it to
279
- // client form components as the initial useActionState value.
280
- const response = await runWithFormFlash(formRerender.rerender, () => pipeline(req));
281
- return response;
282
- }
283
- return actionResponse;
284
- }
285
- }
286
- return pipeline(req);
287
- };
288
- }
289
-
290
- /**
291
- * Render a matched route to an HTML Response via RSC → SSR pipeline,
292
- * or return a raw RSC Flight stream for client-side navigation requests.
293
- *
294
- * 1. Load page/layout components from the segment chain
295
- * 2. Resolve metadata
296
- * 3. Render to RSC Flight stream (serializes "use client" as references)
297
- * 4. If Accept: text/x-component → return RSC stream directly
298
- * Otherwise → pass RSC stream to SSR entry for HTML rendering
299
- */
300
- async function renderRoute(
301
- _req: Request,
302
- match: RouteMatch,
303
- responseHeaders: Headers,
304
- clientBootstrap: ClientBootstrapConfig,
305
- clientJsDisabled: boolean,
306
- interception?: InterceptionContext
307
- ): Promise<Response> {
308
- const segments = match.segments as unknown as ManifestSegmentNode[];
309
- const leaf = segments[segments.length - 1];
310
-
311
- // API routes (route.ts) — run access.ts standalone then dispatch to handler.
312
- // No React render pass — AccessGate is not used, React.cache is not active.
313
- // See design/04-authorization.md §"Auth in API Routes".
314
- if (leaf.route && !leaf.page) {
315
- return handleApiRoute(_req, match, segments, responseHeaders);
316
- }
317
-
318
- // Parse X-Timber-State-Tree for RSC payload requests (client navigation).
319
- // The state tree lists sync segments the client has cached — the server
320
- // skips re-rendering those layouts for a smaller, faster RSC payload.
321
- // Only used for RSC requests — HTML requests always get a full render.
322
- // See design/19-client-navigation.md §"X-Timber-State-Tree Header"
323
- const clientStateTree = isRscPayloadRequest(_req) ? parseClientStateTree(_req) : null;
324
-
325
- // Build the React element tree — loads modules, runs access checks,
326
- // resolves metadata. DenySignal/RedirectSignal propagate for HTTP handling.
327
- let routeResult;
328
- try {
329
- routeResult = await buildRouteElement(_req, match, interception, clientStateTree);
330
- } catch (error) {
331
- // RouteSignalWithContext wraps DenySignal/RedirectSignal with layout context
332
- if (error instanceof RouteSignalWithContext) {
333
- const { signal, layoutComponents: lc, segments: segs } = error;
334
- if (signal instanceof DenySignal) {
335
- if (isRscPayloadRequest(_req)) {
336
- return renderDenyPageAsRsc(
337
- signal,
338
- segs,
339
- lc as LayoutEntry[],
340
- responseHeaders,
341
- createDebugChannelSink
342
- );
343
- }
344
- return renderDenyPage(
345
- signal,
346
- segs,
347
- lc as LayoutEntry[],
348
- _req,
349
- match,
350
- responseHeaders,
351
- clientBootstrap,
352
- createDebugChannelSink,
353
- callSsr
354
- );
355
- }
356
- if (signal instanceof RedirectSignal) {
357
- return buildRedirectResponse(_req, signal, responseHeaders);
358
- }
359
- }
360
- // No PageComponent found
361
- if (error instanceof Error && error.message.startsWith('No page component')) {
362
- return new Response(null, { status: 404 });
363
- }
364
- throw error;
365
- }
366
-
367
- const { element, headElements, layoutComponents, deferSuspenseFor, skippedSegments } =
368
- routeResult;
429
+ const handler = wrapPipelineWithActionDispatch(pipeline, {
430
+ csrfConfig,
431
+ });
369
432
 
370
- // Build head HTML for injection into the SSR output.
371
- // Collects CSS, fonts, and modulepreload from the build manifest for matched segments.
372
- // In dev mode the manifest is empty — Vite HMR handles CSS/JS.
373
- //
374
- // Link headers (for 103 Early Hints) are emitted by the earlyHints pipeline
375
- // stage before middleware runs. Here we only emit the <head> HTML fallback tags
376
- // — these ensure resources load even on platforms without Early Hints support.
377
- const typedManifest = buildManifest as BuildManifest;
378
- let headHtml = '';
379
-
380
- const cssUrls = collectRouteCss(segments, typedManifest);
381
- if (cssUrls.length > 0) {
382
- headHtml += buildCssLinkTags(cssUrls);
383
- }
433
+ return { handler, pipelineConfig };
434
+ }
384
435
 
385
- // Inline font CSS as a <style> tag — @font-face rules and scoped classes.
386
- // The font CSS is set on globalThis by the transformed font file's
387
- // side-effect import of virtual:timber-font-css-register.
388
- const fontCss = (globalThis as Record<string, unknown>).__timber_font_css as string | undefined;
389
- if (fontCss) {
390
- headHtml += `<style data-timber-fonts>${fontCss}</style>`;
391
- }
436
+ // Re-export for generated entry points (e.g., Nitro node-server/bun) to wrap
437
+ // the handler with per-request 103 Early Hints sender via ALS.
438
+ export { runWithEarlyHintsSender } from '../early-hints-sender.js';
392
439
 
393
- const fontEntries = collectRouteFonts(segments, typedManifest);
394
- if (fontEntries.length > 0) {
395
- headHtml += buildFontPreloadTags(fontEntries);
396
- }
440
+ // Re-export for generated entry points to wrap the handler with per-request
441
+ // waitUntil support via ALS. See design/11-platform.md §"waitUntil()".
442
+ export { runWithWaitUntil } from '../waituntil-bridge.js';
397
443
 
398
- // Skip modulepreload tags when client JavaScript is disabled — no JS to preload.
399
- if (!clientJsDisabled) {
400
- const preloadUrls = collectRouteModulepreloads(segments, typedManifest);
401
- if (preloadUrls.length > 0) {
402
- headHtml += buildModulepreloadTags(preloadUrls);
403
- }
404
- }
444
+ // Re-export for the Cloudflare adapter's generated _worker.js to bridge
445
+ // ctx.cache from the ExecutionContext into the per-request ALS. The
446
+ // WorkersCachePurge handler reads from this ALS to call ctx.cache.purge().
447
+ export { runWithWorkersCachePurge } from '../workers-cache-bridge.js';
405
448
 
406
- for (const el of headElements) {
407
- if (el.tag === 'title' && el.content) {
408
- headHtml += `<title>${escapeHtml(el.content)}</title>`;
409
- } else if (el.attrs) {
410
- const attrs = Object.entries(el.attrs)
411
- .filter(([, v]) => v != null)
412
- .map(([k, v]) => `${k}="${escapeHtml(v as string)}"`)
413
- .join(' ');
414
- headHtml += `<${el.tag} ${attrs}>`;
415
- }
416
- }
449
+ /**
450
+ * Post-build flight capture entry point (TIM-1119). The capture pass must
451
+ * run inside the built RSC bundle — the prebuilt component registry, the
452
+ * ALS instances, and the flight renderer are module instances in THIS
453
+ * bundle's graph; an outside import of the framework package would get
454
+ * fresh, empty copies. The timber-prebuilt plugin imports the built
455
+ * `rsc/index.js` after the 5-step build and calls this export.
456
+ * See design/44-render-at-build-time.md §Build Phase.
457
+ */
458
+ export function __timber_capturePrebuilt(
459
+ options: import('../prebuilt-builder.js').CaptureOptions
460
+ ): Promise<import('../prebuilt-builder.js').CaptureSummary> {
461
+ return capturePrebuiltPayloads(routeManifest, options);
462
+ }
417
463
 
418
- // Render to RSC Flight stream with signal tracking.
419
- const { rscStream, signals } = renderRscStream(element, _req);
464
+ // Schema codecs are needed by both the capture path (param coercion) and
465
+ // the request handler, so register them unconditionally.
466
+ setGlobalSchemaCodecs(globalSchemaCodecs);
467
+
468
+ // Singleflight timeout protects against deadlocked cache calls — needed
469
+ // in both capture mode (components may call timber.cache) and normal mode.
470
+ const renderTimeoutMs = (config as Record<string, unknown>).renderTimeoutMs as number | undefined;
471
+ if (renderTimeoutMs) {
472
+ const { setDefaultSingleflightTimeout } = await import('../../cache/timber-cache.js');
473
+ setDefaultSingleflightTimeout(renderTimeoutMs);
474
+ setComponentRefreshTimeout(renderTimeoutMs);
475
+ }
420
476
 
421
- // Synchronous redirect — redirect() in access.ts or a non-async component
422
- // throws during renderToReadableStream creation. Return HTTP redirect.
423
- if (signals.redirectSignal) {
424
- return buildRedirectResponse(_req, signals.redirectSignal, responseHeaders);
425
- }
477
+ // Run instrumentation before the capture-mode guard — components may
478
+ // depend on globals or SDKs initialized in register().
479
+ await loadInstrumentation(loadUserInstrumentation);
426
480
 
427
- // Synchronous deny — deny() in a non-async component throws during
428
- // renderToReadableStream creation, caught in the try/catch above.
429
- if (signals.denySignal) {
430
- if (isRscPayloadRequest(_req)) {
431
- return renderDenyPageAsRsc(
432
- signals.denySignal,
433
- segments,
434
- layoutComponents as LayoutEntry[],
435
- responseHeaders,
436
- createDebugChannelSink
437
- );
438
- }
439
- return renderDenyPage(
440
- signals.denySignal,
441
- segments,
442
- layoutComponents as LayoutEntry[],
443
- _req,
444
- match,
445
- responseHeaders,
446
- clientBootstrap,
447
- createDebugChannelSink,
448
- callSsr
449
- );
450
- }
481
+ // Wire the cache handler — prebuilt components may call timber.cache
482
+ // during capture and must see the configured store, not the fallback.
483
+ const userCacheHandler = await loadCacheHandler();
484
+ if (userCacheHandler) {
485
+ const { setCacheHandler } = await import('../../cache/handler-store.js');
486
+ setCacheHandler(userCacheHandler as Parameters<typeof setCacheHandler>[0]);
487
+ }
451
488
 
452
- // Synchronous render error — renderToReadableStream threw before
453
- // creating the stream. Render the error page with correct 5xx status.
454
- // (Async render errors are tracked in onError and handled after SSR.)
455
- if (signals.renderError && !rscStream) {
456
- return renderErrorPage(
457
- signals.renderError.error,
458
- signals.renderError.status,
459
- segments,
460
- layoutComponents as LayoutEntry[],
461
- _req,
462
- match,
463
- responseHeaders,
464
- clientBootstrap
465
- );
466
- }
489
+ // In capture mode the plugin only calls __timber_capturePrebuilt — skip
490
+ // the remaining production startup (CDN purge, OTEL, route matchers)
491
+ // which is expensive and unnecessary.
492
+ const isCaptureMode = !!(globalThis as Record<string, unknown>).__TIMBER_CAPTURE_MODE__;
467
493
 
468
- // For RSC payload requests (client navigation), return the RSC Flight
469
- // stream directly — skip SSR HTML rendering entirely.
470
- // See design/19-client-navigation.md §"RSC Payload Handling"
471
- if (isRscPayloadRequest(_req)) {
472
- return buildRscPayloadResponse(
473
- _req,
474
- rscStream!,
475
- signals,
476
- segments,
477
- layoutComponents,
478
- headElements,
479
- match,
480
- responseHeaders,
481
- skippedSegments
482
- );
483
- }
494
+ let _handler: ((req: Request) => Promise<Response>) | undefined;
495
+ let _pipelineConfig: PipelineConfig | undefined;
484
496
 
485
- // Pipe through SSR for HTML rendering with streaming Suspense support.
486
- return renderSsrResponse({
487
- req: _req,
488
- rscStream: rscStream!,
489
- signals,
490
- segments,
491
- layoutComponents,
492
- match,
493
- responseHeaders,
494
- clientBootstrap,
495
- clientJsDisabled,
496
- headHtml,
497
- deferSuspenseFor,
498
- });
497
+ if (!isCaptureMode) {
498
+ const result = await createRequestHandler(routeManifest, config);
499
+ _handler = result.handler;
500
+ _pipelineConfig = result.pipelineConfig;
499
501
  }
500
502
 
501
- // Re-export for generated entry points (e.g., Nitro node-server/bun) to wrap
502
- // the handler with per-request 103 Early Hints sender via ALS.
503
- export { runWithEarlyHintsSender } from '#/server/early-hints-sender.js';
504
-
505
- // Re-export for generated entry points to wrap the handler with per-request
506
- // waitUntil support via ALS. See design/11-platform.md §"waitUntil()".
507
- export { runWithWaitUntil } from '#/server/waituntil-bridge.js';
503
+ /**
504
+ * The pipeline configuration object. Exported so the dev server can set
505
+ * `devPipelineErrorHandler` after import without a module-level singleton.
506
+ */
507
+ export const pipelineConfig = _pipelineConfig!;
508
508
 
509
- export default await createRequestHandler(routeManifest, config);
509
+ export default _handler!;