@timber-js/app 0.2.0-alpha.15 → 0.2.0-alpha.151

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 (854) hide show
  1. package/LICENSE +8 -0
  2. package/dist/_chunks/actions-a0RczDnB.js +1106 -0
  3. package/dist/_chunks/actions-a0RczDnB.js.map +1 -0
  4. package/dist/_chunks/build-output-helper-B20ZuTSA.js +102 -0
  5. package/dist/_chunks/build-output-helper-B20ZuTSA.js.map +1 -0
  6. package/dist/_chunks/cache-api-Co-yI-gP.js +424 -0
  7. package/dist/_chunks/cache-api-Co-yI-gP.js.map +1 -0
  8. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → canonicalize-P41GR6tY.js} +94 -18
  9. package/dist/_chunks/canonicalize-P41GR6tY.js.map +1 -0
  10. package/dist/_chunks/cli-schema-sync-DJDdyEae.js +629 -0
  11. package/dist/_chunks/cli-schema-sync-DJDdyEae.js.map +1 -0
  12. package/dist/_chunks/cli-schema-sync-D_IhHEUW.js +2 -0
  13. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  14. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  15. package/dist/_chunks/define-Bssfp6ot.js +82 -0
  16. package/dist/_chunks/define-Bssfp6ot.js.map +1 -0
  17. package/dist/_chunks/define-CFmvb4Bt.js +203 -0
  18. package/dist/_chunks/define-CFmvb4Bt.js.map +1 -0
  19. package/dist/_chunks/fast-hash-D6hIVt1Y.js +36 -0
  20. package/dist/_chunks/fast-hash-D6hIVt1Y.js.map +1 -0
  21. package/dist/_chunks/format-CfwjgPz9.js +14 -0
  22. package/dist/_chunks/format-CfwjgPz9.js.map +1 -0
  23. package/dist/_chunks/href-validation-FiA_rToW.js +141 -0
  24. package/dist/_chunks/href-validation-FiA_rToW.js.map +1 -0
  25. package/dist/_chunks/logger-CM0clugc.js +645 -0
  26. package/dist/_chunks/logger-CM0clugc.js.map +1 -0
  27. package/dist/_chunks/navigation-root-bUDZLw74.js +124 -0
  28. package/dist/_chunks/navigation-root-bUDZLw74.js.map +1 -0
  29. package/dist/_chunks/plugin-context-DurqFBuY.js +2 -0
  30. package/dist/_chunks/plugin-context-GfDWsdd2.js +268 -0
  31. package/dist/_chunks/plugin-context-GfDWsdd2.js.map +1 -0
  32. package/dist/_chunks/registry-DbJPKoBp.js +20 -0
  33. package/dist/_chunks/registry-DbJPKoBp.js.map +1 -0
  34. package/dist/_chunks/resolve-schema-3iUvBV5T.js +50 -0
  35. package/dist/_chunks/resolve-schema-3iUvBV5T.js.map +1 -0
  36. package/dist/_chunks/router-ref-CtmF-aPv.js +28 -0
  37. package/dist/_chunks/router-ref-CtmF-aPv.js.map +1 -0
  38. package/dist/_chunks/schema-bridge-BY3QLBL7.js +119 -0
  39. package/dist/_chunks/schema-bridge-BY3QLBL7.js.map +1 -0
  40. package/dist/_chunks/segment-classify-CDDRVKs7.js +137 -0
  41. package/dist/_chunks/segment-classify-CDDRVKs7.js.map +1 -0
  42. package/dist/_chunks/segment-context-ZDnXDkbz.js +34 -0
  43. package/dist/_chunks/segment-context-ZDnXDkbz.js.map +1 -0
  44. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-BOWsq18U.js} +1 -1
  45. package/dist/_chunks/ssr-data-BOWsq18U.js.map +1 -0
  46. package/dist/_chunks/tree-match-D2l830j2.js +102 -0
  47. package/dist/_chunks/tree-match-D2l830j2.js.map +1 -0
  48. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-CbeQmext.js} +7 -20
  49. package/dist/_chunks/use-query-states-CbeQmext.js.map +1 -0
  50. package/dist/_chunks/use-segment-params-D1CzlgBo.js +151 -0
  51. package/dist/_chunks/use-segment-params-D1CzlgBo.js.map +1 -0
  52. package/dist/_chunks/validation-taUkvA4Q.js +113 -0
  53. package/dist/_chunks/validation-taUkvA4Q.js.map +1 -0
  54. package/dist/_chunks/walkers-DvWDj453.js +790 -0
  55. package/dist/_chunks/walkers-DvWDj453.js.map +1 -0
  56. package/dist/adapters/build-output-helper.d.ts +28 -0
  57. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  58. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  59. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  60. package/dist/adapters/cloudflare-dev.js +73 -0
  61. package/dist/adapters/cloudflare-dev.js.map +1 -0
  62. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  63. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  64. package/dist/adapters/cloudflare-kv-cache.js +117 -0
  65. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  66. package/dist/adapters/cloudflare.d.ts +142 -20
  67. package/dist/adapters/cloudflare.d.ts.map +1 -1
  68. package/dist/adapters/cloudflare.js +150 -64
  69. package/dist/adapters/cloudflare.js.map +1 -1
  70. package/dist/adapters/compress-module.d.ts +5 -4
  71. package/dist/adapters/compress-module.d.ts.map +1 -1
  72. package/dist/adapters/nitro.d.ts +17 -3
  73. package/dist/adapters/nitro.d.ts.map +1 -1
  74. package/dist/adapters/nitro.js +146 -147
  75. package/dist/adapters/nitro.js.map +1 -1
  76. package/dist/adapters/shared.d.ts +16 -0
  77. package/dist/adapters/shared.d.ts.map +1 -0
  78. package/dist/cache/cache-api.d.ts +24 -0
  79. package/dist/cache/cache-api.d.ts.map +1 -0
  80. package/dist/cache/handler-store.d.ts +31 -0
  81. package/dist/cache/handler-store.d.ts.map +1 -0
  82. package/dist/cache/index.d.ts +25 -7
  83. package/dist/cache/index.d.ts.map +1 -1
  84. package/dist/cache/index.js +100 -240
  85. package/dist/cache/index.js.map +1 -1
  86. package/dist/cache/invalidation-epoch.d.ts +43 -0
  87. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  88. package/dist/cache/redis-handler.d.ts +85 -8
  89. package/dist/cache/redis-handler.d.ts.map +1 -1
  90. package/dist/cache/singleflight.d.ts +18 -1
  91. package/dist/cache/singleflight.d.ts.map +1 -1
  92. package/dist/cache/sizeof.d.ts +22 -0
  93. package/dist/cache/sizeof.d.ts.map +1 -0
  94. package/dist/cache/stable-stringify.d.ts +9 -0
  95. package/dist/cache/stable-stringify.d.ts.map +1 -1
  96. package/dist/cache/timber-cache.d.ts +20 -10
  97. package/dist/cache/timber-cache.d.ts.map +1 -1
  98. package/dist/cli-schema-sync.d.ts +59 -0
  99. package/dist/cli-schema-sync.d.ts.map +1 -0
  100. package/dist/cli.d.ts +26 -2
  101. package/dist/cli.d.ts.map +1 -1
  102. package/dist/cli.js +70 -33
  103. package/dist/cli.js.map +1 -1
  104. package/dist/client/browser-dev.d.ts +34 -1
  105. package/dist/client/browser-dev.d.ts.map +1 -1
  106. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  107. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  108. package/dist/client/browser-entry/hmr.d.ts +21 -0
  109. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  110. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  111. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  112. package/dist/client/browser-entry/index.d.ts +29 -0
  113. package/dist/client/browser-entry/index.d.ts.map +1 -0
  114. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  115. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  116. package/dist/client/browser-entry/router-init.d.ts +26 -0
  117. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  118. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  119. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  120. package/dist/client/browser-entry/scroll.d.ts +28 -0
  121. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  122. package/dist/client/error-boundary.d.ts +12 -5
  123. package/dist/client/error-boundary.d.ts.map +1 -1
  124. package/dist/client/error-boundary.js +47 -10
  125. package/dist/client/error-boundary.js.map +1 -1
  126. package/dist/client/error-reconstituter.d.ts +61 -0
  127. package/dist/client/error-reconstituter.d.ts.map +1 -0
  128. package/dist/client/form.d.ts +16 -27
  129. package/dist/client/form.d.ts.map +1 -1
  130. package/dist/client/history.d.ts +11 -3
  131. package/dist/client/history.d.ts.map +1 -1
  132. package/dist/client/index.d.ts +10 -24
  133. package/dist/client/index.d.ts.map +1 -1
  134. package/dist/client/index.js +183 -1134
  135. package/dist/client/index.js.map +1 -1
  136. package/dist/client/internal.d.ts +19 -0
  137. package/dist/client/internal.d.ts.map +1 -0
  138. package/dist/client/internal.js +900 -0
  139. package/dist/client/internal.js.map +1 -0
  140. package/dist/client/link.d.ts +69 -60
  141. package/dist/client/link.d.ts.map +1 -1
  142. package/dist/client/navigation-api-types.d.ts +90 -0
  143. package/dist/client/navigation-api-types.d.ts.map +1 -0
  144. package/dist/client/navigation-api.d.ts +122 -0
  145. package/dist/client/navigation-api.d.ts.map +1 -0
  146. package/dist/client/navigation-context.d.ts +3 -2
  147. package/dist/client/navigation-context.d.ts.map +1 -1
  148. package/dist/client/navigation-root.d.ts +119 -0
  149. package/dist/client/navigation-root.d.ts.map +1 -0
  150. package/dist/client/nuqs-adapter.d.ts +1 -1
  151. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  152. package/dist/client/router-ref.d.ts +1 -1
  153. package/dist/client/router.d.ts +86 -10
  154. package/dist/client/router.d.ts.map +1 -1
  155. package/dist/client/rsc-fetch.d.ts +46 -3
  156. package/dist/client/rsc-fetch.d.ts.map +1 -1
  157. package/dist/client/segment-cache.d.ts +3 -1
  158. package/dist/client/segment-cache.d.ts.map +1 -1
  159. package/dist/client/segment-outlet.d.ts +49 -0
  160. package/dist/client/segment-outlet.d.ts.map +1 -0
  161. package/dist/client/segment-update-context.d.ts +21 -0
  162. package/dist/client/segment-update-context.d.ts.map +1 -0
  163. package/dist/client/shallow-url.d.ts +10 -0
  164. package/dist/client/shallow-url.d.ts.map +1 -0
  165. package/dist/client/ssr-data.d.ts +13 -4
  166. package/dist/client/ssr-data.d.ts.map +1 -1
  167. package/dist/client/state.d.ts +1 -1
  168. package/dist/client/top-loader.d.ts +5 -5
  169. package/dist/client/top-loader.d.ts.map +1 -1
  170. package/dist/client/use-cookie.d.ts +12 -0
  171. package/dist/client/use-cookie.d.ts.map +1 -1
  172. package/dist/client/use-link-status.d.ts +5 -5
  173. package/dist/client/use-link-status.d.ts.map +1 -1
  174. package/dist/client/use-pathname.d.ts.map +1 -1
  175. package/dist/client/use-pending-navigation.d.ts +23 -0
  176. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  177. package/dist/client/use-query-states.d.ts +1 -1
  178. package/dist/client/use-query-states.d.ts.map +1 -1
  179. package/dist/client/use-router.d.ts +1 -1
  180. package/dist/client/use-router.d.ts.map +1 -1
  181. package/dist/client/use-search-params.d.ts +12 -5
  182. package/dist/client/use-search-params.d.ts.map +1 -1
  183. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +8 -6
  184. package/dist/client/use-segment-params.d.ts.map +1 -0
  185. package/dist/codec.d.ts +69 -0
  186. package/dist/codec.d.ts.map +1 -0
  187. package/dist/codec.js +75 -0
  188. package/dist/codec.js.map +1 -0
  189. package/dist/config-types.d.ts +294 -0
  190. package/dist/config-types.d.ts.map +1 -0
  191. package/dist/config-validation.d.ts +51 -0
  192. package/dist/config-validation.d.ts.map +1 -0
  193. package/dist/content/index.d.ts +1 -10
  194. package/dist/content/index.d.ts.map +1 -1
  195. package/dist/content/index.js +0 -2
  196. package/dist/cookies/define-cookie.d.ts +58 -25
  197. package/dist/cookies/define-cookie.d.ts.map +1 -1
  198. package/dist/cookies/index.d.ts +2 -1
  199. package/dist/cookies/index.d.ts.map +1 -1
  200. package/dist/cookies/index.js +249 -36
  201. package/dist/cookies/index.js.map +1 -1
  202. package/dist/cookies/json-cookie.d.ts +64 -0
  203. package/dist/cookies/json-cookie.d.ts.map +1 -0
  204. package/dist/cookies/validation.d.ts +34 -0
  205. package/dist/cookies/validation.d.ts.map +1 -0
  206. package/dist/dev-tools/404-page.d.ts +50 -0
  207. package/dist/dev-tools/404-page.d.ts.map +1 -0
  208. package/dist/dev-tools/browser-logs.d.ts +84 -0
  209. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  210. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  211. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  212. package/dist/dev-tools/error-page.d.ts +32 -0
  213. package/dist/dev-tools/error-page.d.ts.map +1 -0
  214. package/dist/dev-tools/holding-server.d.ts +54 -0
  215. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  216. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  217. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  218. package/dist/dev-tools/index.d.ts +31 -0
  219. package/dist/dev-tools/index.d.ts.map +1 -0
  220. package/dist/dev-tools/instrumentation.d.ts +59 -0
  221. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  222. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  223. package/dist/dev-tools/logger.d.ts.map +1 -0
  224. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  225. package/dist/dev-tools/logs.d.ts.map +1 -0
  226. package/dist/dev-tools/overlay.d.ts +91 -0
  227. package/dist/dev-tools/overlay.d.ts.map +1 -0
  228. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  229. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  230. package/dist/dev-tools/terminal.d.ts +28 -0
  231. package/dist/dev-tools/terminal.d.ts.map +1 -0
  232. package/dist/fonts/ast-walk.d.ts +68 -0
  233. package/dist/fonts/ast-walk.d.ts.map +1 -0
  234. package/dist/fonts/ast.d.ts +110 -6
  235. package/dist/fonts/ast.d.ts.map +1 -1
  236. package/dist/fonts/bundle.d.ts +50 -0
  237. package/dist/fonts/bundle.d.ts.map +1 -0
  238. package/dist/fonts/dev-middleware.d.ts +22 -0
  239. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  240. package/dist/fonts/fallbacks.d.ts +0 -7
  241. package/dist/fonts/fallbacks.d.ts.map +1 -1
  242. package/dist/fonts/google.d.ts +4 -2
  243. package/dist/fonts/google.d.ts.map +1 -1
  244. package/dist/fonts/local.d.ts +4 -4
  245. package/dist/fonts/local.d.ts.map +1 -1
  246. package/dist/fonts/paths.d.ts +43 -0
  247. package/dist/fonts/paths.d.ts.map +1 -0
  248. package/dist/fonts/pipeline.d.ts +158 -0
  249. package/dist/fonts/pipeline.d.ts.map +1 -0
  250. package/dist/fonts/transform.d.ts +78 -0
  251. package/dist/fonts/transform.d.ts.map +1 -0
  252. package/dist/fonts/types.d.ts +47 -1
  253. package/dist/fonts/types.d.ts.map +1 -1
  254. package/dist/fonts/virtual-modules.d.ts +77 -0
  255. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  256. package/dist/index.d.ts +46 -180
  257. package/dist/index.d.ts.map +1 -1
  258. package/dist/index.js +6452 -13421
  259. package/dist/index.js.map +1 -1
  260. package/dist/params/codec-registry.d.ts +26 -0
  261. package/dist/params/codec-registry.d.ts.map +1 -0
  262. package/dist/params/define-schema.d.ts +81 -0
  263. package/dist/params/define-schema.d.ts.map +1 -0
  264. package/dist/params/index.d.ts +5 -0
  265. package/dist/params/index.d.ts.map +1 -0
  266. package/dist/params/index.js +34 -0
  267. package/dist/params/index.js.map +1 -0
  268. package/dist/params/resolve-schema.d.ts +34 -0
  269. package/dist/params/resolve-schema.d.ts.map +1 -0
  270. package/dist/plugin-context.d.ts +137 -0
  271. package/dist/plugin-context.d.ts.map +1 -0
  272. package/dist/plugins/adapter-build.d.ts +20 -1
  273. package/dist/plugins/adapter-build.d.ts.map +1 -1
  274. package/dist/plugins/build-manifest.d.ts +7 -3
  275. package/dist/plugins/build-manifest.d.ts.map +1 -1
  276. package/dist/plugins/build-report.d.ts +9 -7
  277. package/dist/plugins/build-report.d.ts.map +1 -1
  278. package/dist/plugins/cache.d.ts +73 -0
  279. package/dist/plugins/cache.d.ts.map +1 -0
  280. package/dist/plugins/client-chunks.d.ts +39 -0
  281. package/dist/plugins/client-chunks.d.ts.map +1 -0
  282. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  283. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  284. package/dist/plugins/content.d.ts +1 -1
  285. package/dist/plugins/content.d.ts.map +1 -1
  286. package/dist/plugins/dev-server.d.ts +17 -1
  287. package/dist/plugins/dev-server.d.ts.map +1 -1
  288. package/dist/plugins/entries.d.ts +1 -1
  289. package/dist/plugins/entries.d.ts.map +1 -1
  290. package/dist/plugins/fonts.d.ts +16 -73
  291. package/dist/plugins/fonts.d.ts.map +1 -1
  292. package/dist/plugins/mdx.d.ts +1 -1
  293. package/dist/plugins/mdx.d.ts.map +1 -1
  294. package/dist/plugins/routing.d.ts +1 -1
  295. package/dist/plugins/routing.d.ts.map +1 -1
  296. package/dist/plugins/server-bundle.d.ts.map +1 -1
  297. package/dist/plugins/shims.d.ts +29 -5
  298. package/dist/plugins/shims.d.ts.map +1 -1
  299. package/dist/plugins/static-build.d.ts +5 -26
  300. package/dist/plugins/static-build.d.ts.map +1 -1
  301. package/dist/routing/codegen-shared.d.ts +67 -0
  302. package/dist/routing/codegen-shared.d.ts.map +1 -0
  303. package/dist/routing/codegen-types.d.ts +64 -0
  304. package/dist/routing/codegen-types.d.ts.map +1 -0
  305. package/dist/routing/codegen.d.ts +7 -2
  306. package/dist/routing/codegen.d.ts.map +1 -1
  307. package/dist/routing/convention-lint.d.ts +41 -0
  308. package/dist/routing/convention-lint.d.ts.map +1 -0
  309. package/dist/routing/file-cache.d.ts +8 -0
  310. package/dist/routing/file-cache.d.ts.map +1 -0
  311. package/dist/routing/index.d.ts +7 -1
  312. package/dist/routing/index.d.ts.map +1 -1
  313. package/dist/routing/index.js +4 -2
  314. package/dist/routing/interception.d.ts +0 -5
  315. package/dist/routing/interception.d.ts.map +1 -1
  316. package/dist/routing/link-codegen.d.ts +90 -0
  317. package/dist/routing/link-codegen.d.ts.map +1 -0
  318. package/dist/routing/manifest-codegen.d.ts +32 -0
  319. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  320. package/dist/routing/scanner.d.ts +1 -10
  321. package/dist/routing/scanner.d.ts.map +1 -1
  322. package/dist/routing/schema-validation.d.ts +35 -0
  323. package/dist/routing/schema-validation.d.ts.map +1 -0
  324. package/dist/routing/segment-classify.d.ts +75 -0
  325. package/dist/routing/segment-classify.d.ts.map +1 -0
  326. package/dist/routing/segment-codegen.d.ts +38 -0
  327. package/dist/routing/segment-codegen.d.ts.map +1 -0
  328. package/dist/routing/types.d.ts +77 -25
  329. package/dist/routing/types.d.ts.map +1 -1
  330. package/dist/routing/walkers.d.ts +51 -0
  331. package/dist/routing/walkers.d.ts.map +1 -0
  332. package/dist/rsc-runtime/rsc.d.ts +1 -1
  333. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  334. package/dist/rsc-runtime/ssr.d.ts +12 -0
  335. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  336. package/dist/schema-bridge.d.ts +91 -0
  337. package/dist/schema-bridge.d.ts.map +1 -0
  338. package/dist/search-params/define.d.ts +157 -0
  339. package/dist/search-params/define.d.ts.map +1 -0
  340. package/dist/search-params/index.d.ts +4 -7
  341. package/dist/search-params/index.d.ts.map +1 -1
  342. package/dist/search-params/index.js +37 -440
  343. package/dist/search-params/index.js.map +1 -1
  344. package/dist/search-params/registry.d.ts +2 -2
  345. package/dist/search-params/registry.d.ts.map +1 -1
  346. package/dist/search-params/wrappers.d.ts +53 -0
  347. package/dist/search-params/wrappers.d.ts.map +1 -0
  348. package/dist/segment-params/define.d.ts +89 -0
  349. package/dist/segment-params/define.d.ts.map +1 -0
  350. package/dist/segment-params/index.d.ts +3 -0
  351. package/dist/segment-params/index.d.ts.map +1 -0
  352. package/dist/segment-params/index.js +2 -0
  353. package/dist/server/access-gate.d.ts +8 -3
  354. package/dist/server/access-gate.d.ts.map +1 -1
  355. package/dist/server/action-client.d.ts +41 -6
  356. package/dist/server/action-client.d.ts.map +1 -1
  357. package/dist/server/action-encryption.d.ts +76 -0
  358. package/dist/server/action-encryption.d.ts.map +1 -0
  359. package/dist/server/action-handler.d.ts +35 -1
  360. package/dist/server/action-handler.d.ts.map +1 -1
  361. package/dist/server/actions.d.ts +9 -30
  362. package/dist/server/actions.d.ts.map +1 -1
  363. package/dist/server/als-registry.d.ts +70 -11
  364. package/dist/server/als-registry.d.ts.map +1 -1
  365. package/dist/server/asset-headers.d.ts +1 -15
  366. package/dist/server/asset-headers.d.ts.map +1 -1
  367. package/dist/server/body-limits.d.ts.map +1 -1
  368. package/dist/server/build-manifest.d.ts +6 -29
  369. package/dist/server/build-manifest.d.ts.map +1 -1
  370. package/dist/server/canonicalize.d.ts +10 -0
  371. package/dist/server/canonicalize.d.ts.map +1 -1
  372. package/dist/server/coalesce-tick.d.ts +40 -0
  373. package/dist/server/coalesce-tick.d.ts.map +1 -0
  374. package/dist/server/cookie-context.d.ts +170 -0
  375. package/dist/server/cookie-context.d.ts.map +1 -0
  376. package/dist/server/cookie-parsing.d.ts +51 -0
  377. package/dist/server/cookie-parsing.d.ts.map +1 -0
  378. package/dist/server/csrf.d.ts +3 -2
  379. package/dist/server/csrf.d.ts.map +1 -1
  380. package/dist/server/default-logger.d.ts +22 -0
  381. package/dist/server/default-logger.d.ts.map +1 -0
  382. package/dist/server/deny-boundary.d.ts +115 -0
  383. package/dist/server/deny-boundary.d.ts.map +1 -0
  384. package/dist/server/deny-renderer.d.ts +2 -2
  385. package/dist/server/deny-renderer.d.ts.map +1 -1
  386. package/dist/server/dev-source-map.d.ts +22 -0
  387. package/dist/server/dev-source-map.d.ts.map +1 -0
  388. package/dist/server/early-hints-sender.d.ts.map +1 -1
  389. package/dist/server/early-hints.d.ts +13 -11
  390. package/dist/server/early-hints.d.ts.map +1 -1
  391. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  392. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  393. package/dist/server/fallback-error.d.ts +12 -7
  394. package/dist/server/fallback-error.d.ts.map +1 -1
  395. package/dist/server/flight-injection-state.d.ts +66 -0
  396. package/dist/server/flight-injection-state.d.ts.map +1 -0
  397. package/dist/server/flight-scripts.d.ts +42 -0
  398. package/dist/server/flight-scripts.d.ts.map +1 -0
  399. package/dist/server/form-data.d.ts +29 -0
  400. package/dist/server/form-data.d.ts.map +1 -1
  401. package/dist/server/html-injector-core.d.ts +221 -0
  402. package/dist/server/html-injector-core.d.ts.map +1 -0
  403. package/dist/server/html-injectors.d.ts +81 -41
  404. package/dist/server/html-injectors.d.ts.map +1 -1
  405. package/dist/server/index.d.ts +10 -46
  406. package/dist/server/index.d.ts.map +1 -1
  407. package/dist/server/index.js +170 -2911
  408. package/dist/server/index.js.map +1 -1
  409. package/dist/server/internal.d.ts +44 -0
  410. package/dist/server/internal.d.ts.map +1 -0
  411. package/dist/server/internal.js +3015 -0
  412. package/dist/server/internal.js.map +1 -0
  413. package/dist/server/logger.d.ts +39 -7
  414. package/dist/server/logger.d.ts.map +1 -1
  415. package/dist/server/metadata-routes.d.ts +23 -7
  416. package/dist/server/metadata-routes.d.ts.map +1 -1
  417. package/dist/server/middleware-runner.d.ts +36 -4
  418. package/dist/server/middleware-runner.d.ts.map +1 -1
  419. package/dist/server/node-stream-transforms.d.ts +119 -0
  420. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  421. package/dist/server/param-coercion.d.ts +54 -0
  422. package/dist/server/param-coercion.d.ts.map +1 -0
  423. package/dist/server/pipeline-helpers.d.ts +95 -0
  424. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  425. package/dist/server/pipeline-interception.d.ts +1 -1
  426. package/dist/server/pipeline-interception.d.ts.map +1 -1
  427. package/dist/server/pipeline-metadata.d.ts +6 -0
  428. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  429. package/dist/server/pipeline-outcome.d.ts +49 -0
  430. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  431. package/dist/server/pipeline-phases.d.ts +56 -0
  432. package/dist/server/pipeline-phases.d.ts.map +1 -0
  433. package/dist/server/pipeline.d.ts +122 -19
  434. package/dist/server/pipeline.d.ts.map +1 -1
  435. package/dist/server/port-resolution.d.ts +117 -0
  436. package/dist/server/port-resolution.d.ts.map +1 -0
  437. package/dist/server/primitives.d.ts +75 -31
  438. package/dist/server/primitives.d.ts.map +1 -1
  439. package/dist/server/render-timeout.d.ts +51 -0
  440. package/dist/server/render-timeout.d.ts.map +1 -0
  441. package/dist/server/render-utils.d.ts +25 -0
  442. package/dist/server/render-utils.d.ts.map +1 -0
  443. package/dist/server/request-context.d.ts +62 -107
  444. package/dist/server/request-context.d.ts.map +1 -1
  445. package/dist/server/route-element-builder.d.ts +30 -18
  446. package/dist/server/route-element-builder.d.ts.map +1 -1
  447. package/dist/server/route-handler.d.ts.map +1 -1
  448. package/dist/server/route-matcher.d.ts +25 -36
  449. package/dist/server/route-matcher.d.ts.map +1 -1
  450. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  451. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  452. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  453. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  454. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  455. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  456. package/dist/server/rsc-entry/helpers.d.ts +51 -23
  457. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  458. package/dist/server/rsc-entry/index.d.ts +19 -8
  459. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  460. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  461. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  462. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  463. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  464. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  465. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  466. package/dist/server/rsc-entry/rsc-stream.d.ts +17 -1
  467. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  468. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  469. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  470. package/dist/server/rsc-entry/ssr-renderer.d.ts +34 -4
  471. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  472. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  473. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  474. package/dist/server/safe-load.d.ts +46 -0
  475. package/dist/server/safe-load.d.ts.map +1 -0
  476. package/dist/server/sensitive-fields.d.ts +74 -0
  477. package/dist/server/sensitive-fields.d.ts.map +1 -0
  478. package/dist/server/sitemap-generator.d.ts +129 -0
  479. package/dist/server/sitemap-generator.d.ts.map +1 -0
  480. package/dist/server/sitemap-handler.d.ts +22 -0
  481. package/dist/server/sitemap-handler.d.ts.map +1 -0
  482. package/dist/server/slot-resolver.d.ts +7 -5
  483. package/dist/server/slot-resolver.d.ts.map +1 -1
  484. package/dist/server/ssr-bridge-types.d.ts +121 -0
  485. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  486. package/dist/server/ssr-entry.d.ts +2 -43
  487. package/dist/server/ssr-entry.d.ts.map +1 -1
  488. package/dist/server/ssr-render.d.ts +64 -21
  489. package/dist/server/ssr-render.d.ts.map +1 -1
  490. package/dist/server/ssr-wrappers.d.ts +50 -0
  491. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  492. package/dist/server/state-tree-diff.d.ts +12 -5
  493. package/dist/server/state-tree-diff.d.ts.map +1 -1
  494. package/dist/server/status-code-resolver.d.ts +22 -11
  495. package/dist/server/status-code-resolver.d.ts.map +1 -1
  496. package/dist/server/stream-utils.d.ts +36 -0
  497. package/dist/server/stream-utils.d.ts.map +1 -0
  498. package/dist/server/tracing.d.ts +7 -6
  499. package/dist/server/tracing.d.ts.map +1 -1
  500. package/dist/server/tree-builder.d.ts +62 -30
  501. package/dist/server/tree-builder.d.ts.map +1 -1
  502. package/dist/server/tree-match.d.ts +49 -0
  503. package/dist/server/tree-match.d.ts.map +1 -0
  504. package/dist/server/types.d.ts +71 -6
  505. package/dist/server/types.d.ts.map +1 -1
  506. package/dist/server/utils/escape-html.d.ts +14 -0
  507. package/dist/server/utils/escape-html.d.ts.map +1 -0
  508. package/dist/server/utils/mdx-file.d.ts +15 -0
  509. package/dist/server/utils/mdx-file.d.ts.map +1 -0
  510. package/dist/server/version-skew.d.ts +61 -0
  511. package/dist/server/version-skew.d.ts.map +1 -0
  512. package/dist/shared/head-header.d.ts +54 -0
  513. package/dist/shared/head-header.d.ts.map +1 -0
  514. package/dist/shared/href-validation.d.ts +49 -0
  515. package/dist/shared/href-validation.d.ts.map +1 -0
  516. package/dist/shared/merge-search-params.d.ts +22 -0
  517. package/dist/shared/merge-search-params.d.ts.map +1 -0
  518. package/dist/shared/redirect-type.d.ts +17 -0
  519. package/dist/shared/redirect-type.d.ts.map +1 -0
  520. package/dist/shims/font-google.d.ts +1 -1
  521. package/dist/shims/font-google.d.ts.map +1 -1
  522. package/dist/shims/font-google.js +42 -0
  523. package/dist/shims/font-google.js.map +1 -0
  524. package/dist/shims/font-local.d.ts +26 -0
  525. package/dist/shims/font-local.d.ts.map +1 -0
  526. package/dist/shims/font-local.js +20 -0
  527. package/dist/shims/font-local.js.map +1 -0
  528. package/dist/shims/headers.d.ts +53 -1
  529. package/dist/shims/headers.d.ts.map +1 -1
  530. package/dist/shims/image.d.ts +16 -16
  531. package/dist/shims/navigation-client.d.ts +35 -11
  532. package/dist/shims/navigation-client.d.ts.map +1 -1
  533. package/dist/shims/navigation.d.ts +11 -5
  534. package/dist/shims/navigation.d.ts.map +1 -1
  535. package/dist/utils/state-machine.d.ts +80 -0
  536. package/dist/utils/state-machine.d.ts.map +1 -0
  537. package/package.json +63 -24
  538. package/src/adapters/build-output-helper.ts +139 -0
  539. package/src/adapters/cloudflare-dev.ts +177 -0
  540. package/src/adapters/cloudflare-kv-cache.ts +179 -0
  541. package/src/adapters/cloudflare.ts +356 -116
  542. package/src/adapters/compress-module.ts +27 -92
  543. package/src/adapters/nitro.ts +155 -99
  544. package/src/adapters/raw-imports.d.ts +5 -0
  545. package/src/adapters/shared.ts +40 -0
  546. package/src/adapters/wrangler.d.ts +7 -0
  547. package/src/cache/cache-api.ts +47 -0
  548. package/src/cache/handler-store.ts +68 -0
  549. package/src/cache/index.ts +84 -18
  550. package/src/cache/invalidation-epoch.ts +93 -0
  551. package/src/cache/redis-handler.ts +110 -15
  552. package/src/cache/singleflight.ts +62 -4
  553. package/src/cache/sizeof.ts +33 -0
  554. package/src/cache/stable-stringify.ts +65 -2
  555. package/src/cache/timber-cache.ts +132 -36
  556. package/src/cli-schema-sync.ts +388 -0
  557. package/src/cli.ts +98 -34
  558. package/src/client/browser-dev.ts +153 -1
  559. package/src/client/browser-entry/action-dispatch.ts +119 -0
  560. package/src/client/browser-entry/hmr.ts +70 -0
  561. package/src/client/browser-entry/hydrate.ts +187 -0
  562. package/src/client/browser-entry/index.ts +111 -0
  563. package/src/client/browser-entry/post-hydration.ts +104 -0
  564. package/src/client/browser-entry/router-init.ts +292 -0
  565. package/src/client/browser-entry/rsc-stream.ts +157 -0
  566. package/src/client/browser-entry/scroll.ts +50 -0
  567. package/src/client/error-boundary.tsx +127 -22
  568. package/src/client/error-reconstituter.tsx +79 -0
  569. package/src/client/form.tsx +31 -32
  570. package/src/client/history.ts +11 -3
  571. package/src/client/index.ts +67 -45
  572. package/src/client/internal.ts +58 -0
  573. package/src/client/link.tsx +346 -150
  574. package/src/client/navigation-api-types.ts +112 -0
  575. package/src/client/navigation-api.ts +347 -0
  576. package/src/client/navigation-context.ts +15 -7
  577. package/src/client/navigation-root.tsx +355 -0
  578. package/src/client/nuqs-adapter.tsx +16 -3
  579. package/src/client/router-ref.ts +1 -1
  580. package/src/client/router.ts +490 -140
  581. package/src/client/rsc-fetch.ts +220 -17
  582. package/src/client/segment-cache.ts +6 -3
  583. package/src/client/segment-outlet.tsx +77 -0
  584. package/src/client/segment-update-context.ts +42 -0
  585. package/src/client/shallow-url.ts +22 -0
  586. package/src/client/ssr-data.ts +13 -5
  587. package/src/client/state.ts +2 -2
  588. package/src/client/top-loader.tsx +11 -9
  589. package/src/client/use-cookie.ts +31 -2
  590. package/src/client/use-link-status.ts +7 -7
  591. package/src/client/use-pathname.ts +1 -0
  592. package/src/client/use-pending-navigation.ts +40 -0
  593. package/src/client/use-query-states.ts +9 -3
  594. package/src/client/use-router.ts +4 -1
  595. package/src/client/use-search-params.ts +31 -44
  596. package/src/client/{use-params.ts → use-segment-params.ts} +9 -6
  597. package/src/codec.ts +147 -0
  598. package/src/config-types.ts +292 -0
  599. package/src/config-validation.ts +311 -0
  600. package/src/content/index.ts +5 -13
  601. package/src/cookies/define-cookie.ts +217 -53
  602. package/src/cookies/index.ts +12 -1
  603. package/src/cookies/json-cookie.ts +105 -0
  604. package/src/cookies/validation.ts +192 -0
  605. package/src/dev-tools/404-page.ts +286 -0
  606. package/src/dev-tools/browser-logs.ts +291 -0
  607. package/src/dev-tools/dev-page-shell.ts +260 -0
  608. package/src/dev-tools/error-page.ts +331 -0
  609. package/src/dev-tools/holding-server.ts +187 -0
  610. package/src/dev-tools/hydration-overlay.ts +158 -0
  611. package/src/dev-tools/index.ts +83 -0
  612. package/src/dev-tools/instrumentation.ts +213 -0
  613. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +9 -5
  614. package/src/dev-tools/overlay.ts +469 -0
  615. package/src/dev-tools/stack-classifier.ts +75 -0
  616. package/src/dev-tools/terminal.ts +183 -0
  617. package/src/fonts/ast-walk.ts +235 -0
  618. package/src/fonts/ast.ts +477 -126
  619. package/src/fonts/bundle.ts +138 -0
  620. package/src/fonts/dev-middleware.ts +85 -0
  621. package/src/fonts/fallbacks.ts +0 -23
  622. package/src/fonts/google.ts +7 -3
  623. package/src/fonts/local.ts +9 -8
  624. package/src/fonts/paths.ts +58 -0
  625. package/src/fonts/pipeline.ts +316 -0
  626. package/src/fonts/transform.ts +344 -0
  627. package/src/fonts/types.ts +52 -1
  628. package/src/fonts/virtual-modules.ts +179 -0
  629. package/src/index.ts +417 -346
  630. package/src/params/codec-registry.ts +34 -0
  631. package/src/params/define-schema.ts +115 -0
  632. package/src/params/index.ts +17 -0
  633. package/src/params/resolve-schema.ts +84 -0
  634. package/src/plugin-context.ts +325 -0
  635. package/src/plugins/adapter-build.ts +98 -4
  636. package/src/plugins/build-manifest.ts +168 -23
  637. package/src/plugins/build-report.ts +16 -25
  638. package/src/plugins/cache.ts +285 -0
  639. package/src/plugins/client-chunks.ts +113 -0
  640. package/src/plugins/cloudflare-wasm.ts +141 -0
  641. package/src/plugins/content.ts +1 -1
  642. package/src/plugins/dev-server.ts +293 -46
  643. package/src/plugins/entries.ts +110 -8
  644. package/src/plugins/fonts.ts +170 -663
  645. package/src/plugins/mdx.ts +47 -10
  646. package/src/plugins/routing.ts +237 -241
  647. package/src/plugins/server-bundle.ts +85 -12
  648. package/src/plugins/shims.ts +207 -64
  649. package/src/plugins/static-build.ts +15 -89
  650. package/src/routing/codegen-shared.ts +115 -0
  651. package/src/routing/codegen-types.ts +65 -0
  652. package/src/routing/codegen.ts +380 -178
  653. package/src/routing/convention-lint.ts +358 -0
  654. package/src/routing/file-cache.ts +23 -0
  655. package/src/routing/index.ts +10 -1
  656. package/src/routing/interception.ts +3 -22
  657. package/src/routing/link-codegen.ts +310 -0
  658. package/src/routing/manifest-codegen.ts +290 -0
  659. package/src/routing/scanner.ts +248 -188
  660. package/src/routing/schema-validation.ts +149 -0
  661. package/src/routing/segment-classify.ts +188 -0
  662. package/src/routing/segment-codegen.ts +98 -0
  663. package/src/routing/types.ts +78 -25
  664. package/src/routing/walkers.ts +90 -0
  665. package/src/rsc-runtime/rsc.ts +2 -0
  666. package/src/rsc-runtime/ssr.ts +50 -0
  667. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  668. package/src/schema-bridge.ts +252 -0
  669. package/src/search-params/define.ts +570 -0
  670. package/src/search-params/index.ts +14 -20
  671. package/src/search-params/registry.ts +2 -2
  672. package/src/search-params/wrappers.ts +110 -0
  673. package/src/segment-params/define.ts +249 -0
  674. package/src/segment-params/index.ts +9 -0
  675. package/src/server/access-gate.tsx +84 -34
  676. package/src/server/action-client.ts +119 -28
  677. package/src/server/action-encryption.ts +144 -0
  678. package/src/server/action-handler.ts +122 -16
  679. package/src/server/actions.ts +39 -53
  680. package/src/server/als-registry.ts +108 -20
  681. package/src/server/asset-headers.ts +8 -34
  682. package/src/server/body-limits.ts +10 -2
  683. package/src/server/build-manifest.ts +13 -56
  684. package/src/server/canonicalize.ts +6 -3
  685. package/src/server/coalesce-tick.ts +75 -0
  686. package/src/server/compress.ts +34 -7
  687. package/src/server/cookie-context.ts +484 -0
  688. package/src/server/cookie-parsing.ts +147 -0
  689. package/src/server/csrf.ts +39 -6
  690. package/src/server/default-logger.ts +99 -0
  691. package/src/server/deny-boundary.ts +311 -0
  692. package/src/server/deny-renderer.ts +80 -64
  693. package/src/server/dev-source-map.ts +31 -0
  694. package/src/server/early-hints-sender.ts +3 -2
  695. package/src/server/early-hints.ts +37 -27
  696. package/src/server/error-boundary-wrapper.ts +61 -22
  697. package/src/server/fallback-error.ts +79 -102
  698. package/src/server/flight-injection-state.ts +113 -0
  699. package/src/server/flight-scripts.ts +62 -0
  700. package/src/server/form-data.ts +101 -5
  701. package/src/server/html-injector-core.ts +437 -0
  702. package/src/server/html-injectors.ts +256 -251
  703. package/src/server/index.ts +29 -183
  704. package/src/server/internal.ts +165 -0
  705. package/src/server/logger.ts +67 -36
  706. package/src/server/metadata-routes.ts +44 -19
  707. package/src/server/middleware-runner.ts +75 -4
  708. package/src/server/node-stream-transforms.ts +331 -0
  709. package/src/server/param-coercion.ts +206 -0
  710. package/src/server/pipeline-helpers.ts +204 -0
  711. package/src/server/pipeline-interception.ts +32 -18
  712. package/src/server/pipeline-metadata.ts +13 -0
  713. package/src/server/pipeline-outcome.ts +197 -0
  714. package/src/server/pipeline-phases.ts +527 -0
  715. package/src/server/pipeline.ts +213 -382
  716. package/src/server/port-resolution.ts +215 -0
  717. package/src/server/primitives.ts +126 -63
  718. package/src/server/render-timeout.ts +108 -0
  719. package/src/server/render-utils.ts +31 -0
  720. package/src/server/request-context.ts +168 -337
  721. package/src/server/route-element-builder.ts +481 -222
  722. package/src/server/route-handler.ts +31 -4
  723. package/src/server/route-matcher.ts +144 -277
  724. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  725. package/src/server/rsc-entry/api-handler.ts +69 -32
  726. package/src/server/rsc-entry/error-renderer.ts +306 -89
  727. package/src/server/rsc-entry/helpers.ts +160 -59
  728. package/src/server/rsc-entry/index.ts +299 -329
  729. package/src/server/rsc-entry/render-route.ts +311 -0
  730. package/src/server/rsc-entry/revalidate-renderer.ts +344 -0
  731. package/src/server/rsc-entry/rsc-payload.ts +71 -26
  732. package/src/server/rsc-entry/rsc-stream.ts +85 -13
  733. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  734. package/src/server/rsc-entry/ssr-renderer.ts +273 -43
  735. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  736. package/src/server/safe-load.ts +60 -0
  737. package/src/server/sensitive-fields.ts +230 -0
  738. package/src/server/sitemap-generator.ts +338 -0
  739. package/src/server/sitemap-handler.ts +148 -0
  740. package/src/server/slot-resolver.ts +258 -257
  741. package/src/server/ssr-bridge-types.ts +124 -0
  742. package/src/server/ssr-entry.ts +206 -78
  743. package/src/server/ssr-render.ts +345 -82
  744. package/src/server/ssr-wrappers.tsx +141 -0
  745. package/src/server/state-tree-diff.ts +30 -23
  746. package/src/server/status-code-resolver.ts +115 -130
  747. package/src/server/stream-utils.ts +213 -0
  748. package/src/server/tracing.ts +38 -11
  749. package/src/server/tree-builder.ts +204 -90
  750. package/src/server/tree-match.ts +220 -0
  751. package/src/server/types.ts +78 -9
  752. package/src/server/utils/escape-html.ts +20 -0
  753. package/src/server/utils/mdx-file.ts +22 -0
  754. package/src/server/version-skew.ts +104 -0
  755. package/src/shared/head-header.ts +69 -0
  756. package/src/shared/href-validation.ts +159 -0
  757. package/src/shared/merge-search-params.ts +55 -0
  758. package/src/shared/redirect-type.ts +17 -0
  759. package/src/shims/font-google.ts +1 -1
  760. package/src/shims/font-local.ts +34 -0
  761. package/src/shims/headers.ts +122 -1
  762. package/src/shims/navigation-client.ts +51 -29
  763. package/src/shims/navigation.ts +14 -7
  764. package/src/utils/state-machine.ts +111 -0
  765. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  766. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  767. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  768. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  769. package/dist/_chunks/format-RyoGQL74.js +0 -164
  770. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  771. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  772. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  773. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  774. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  775. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  776. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  777. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  778. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  779. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  780. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  781. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  782. package/dist/cache/register-cached-function.d.ts +0 -17
  783. package/dist/cache/register-cached-function.d.ts.map +0 -1
  784. package/dist/client/browser-entry.d.ts +0 -21
  785. package/dist/client/browser-entry.d.ts.map +0 -1
  786. package/dist/client/link-status-provider.d.ts +0 -11
  787. package/dist/client/link-status-provider.d.ts.map +0 -1
  788. package/dist/client/segment-merger.d.ts +0 -119
  789. package/dist/client/segment-merger.d.ts.map +0 -1
  790. package/dist/client/stale-reload.d.ts +0 -44
  791. package/dist/client/stale-reload.d.ts.map +0 -1
  792. package/dist/client/transition-root.d.ts +0 -74
  793. package/dist/client/transition-root.d.ts.map +0 -1
  794. package/dist/client/use-navigation-pending.d.ts +0 -26
  795. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  796. package/dist/client/use-params.d.ts.map +0 -1
  797. package/dist/plugins/cache-transform.d.ts +0 -36
  798. package/dist/plugins/cache-transform.d.ts.map +0 -1
  799. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  800. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  801. package/dist/plugins/dev-logs.d.ts.map +0 -1
  802. package/dist/plugins/dynamic-transform.d.ts +0 -72
  803. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  804. package/dist/plugins/server-action-exports.d.ts +0 -26
  805. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  806. package/dist/routing/status-file-lint.d.ts +0 -33
  807. package/dist/routing/status-file-lint.d.ts.map +0 -1
  808. package/dist/search-params/analyze.d.ts +0 -54
  809. package/dist/search-params/analyze.d.ts.map +0 -1
  810. package/dist/search-params/builtin-codecs.d.ts +0 -105
  811. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  812. package/dist/search-params/codecs.d.ts +0 -53
  813. package/dist/search-params/codecs.d.ts.map +0 -1
  814. package/dist/search-params/create.d.ts +0 -106
  815. package/dist/search-params/create.d.ts.map +0 -1
  816. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  817. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  818. package/dist/server/dev-logger.d.ts.map +0 -1
  819. package/dist/server/dev-span-processor.d.ts +0 -29
  820. package/dist/server/dev-span-processor.d.ts.map +0 -1
  821. package/dist/server/dev-warnings.d.ts +0 -129
  822. package/dist/server/dev-warnings.d.ts.map +0 -1
  823. package/dist/server/flush.d.ts +0 -74
  824. package/dist/server/flush.d.ts.map +0 -1
  825. package/dist/server/manifest-status-resolver.d.ts +0 -58
  826. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  827. package/dist/server/prerender.d.ts +0 -77
  828. package/dist/server/prerender.d.ts.map +0 -1
  829. package/dist/utils/directive-parser.d.ts +0 -70
  830. package/dist/utils/directive-parser.d.ts.map +0 -1
  831. package/src/cache/register-cached-function.ts +0 -103
  832. package/src/client/browser-entry.ts +0 -678
  833. package/src/client/link-status-provider.tsx +0 -30
  834. package/src/client/segment-merger.ts +0 -339
  835. package/src/client/stale-reload.ts +0 -87
  836. package/src/client/transition-root.tsx +0 -166
  837. package/src/client/use-navigation-pending.ts +0 -38
  838. package/src/plugins/cache-transform.ts +0 -199
  839. package/src/plugins/dev-error-overlay.ts +0 -230
  840. package/src/plugins/dynamic-transform.ts +0 -161
  841. package/src/plugins/server-action-exports.ts +0 -220
  842. package/src/routing/status-file-lint.ts +0 -112
  843. package/src/search-params/analyze.ts +0 -192
  844. package/src/search-params/builtin-codecs.ts +0 -228
  845. package/src/search-params/codecs.ts +0 -153
  846. package/src/search-params/create.ts +0 -321
  847. package/src/server/dev-fetch-instrumentation.ts +0 -96
  848. package/src/server/dev-span-processor.ts +0 -78
  849. package/src/server/dev-warnings.ts +0 -283
  850. package/src/server/flush.ts +0 -182
  851. package/src/server/manifest-status-resolver.ts +0 -215
  852. package/src/server/prerender.ts +0 -139
  853. package/src/utils/directive-parser.ts +0 -529
  854. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -17,57 +17,51 @@
17
17
 
18
18
  // @ts-expect-error — virtual module provided by timber-routing plugin
19
19
  import routeManifest from 'virtual:timber-route-manifest';
20
+ // TIM-830: Populate the search-params registry eagerly so <Link> can
21
+ // serialize flat `Partial<T>` values synchronously in RSC renders.
22
+ // The module has side effects only — no exports consumed here.
23
+ // @ts-expect-error — virtual module provided by timber-routing plugin
24
+ import 'virtual:timber-search-params-registry';
20
25
  // @ts-expect-error — virtual module provided by timber-entries plugin
21
26
  import config from 'virtual:timber-config';
22
27
  // @ts-expect-error — virtual module provided by timber-build-manifest plugin
23
28
  import buildManifest from 'virtual:timber-build-manifest';
24
29
  // @ts-expect-error — virtual module provided by timber-entries plugin
25
30
  import loadUserInstrumentation from 'virtual:timber-instrumentation';
26
-
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';
31
+ // @ts-expect-error — virtual module provided by timber-entries plugin
32
+ import loadCacheHandler from 'virtual:timber-cache-handler';
33
+ // @ts-expect-error — virtual module provided by timber-routing plugin
34
+ import globalSchemaCodecs from 'virtual:timber-schema';
35
+
36
+ import { wrapPipelineWithActionDispatch } from './wrap-action-dispatch.js';
37
+ import type { BodyLimitsConfig } from '../body-limits.js';
38
+ import type { BuildManifest } from '../build-manifest.js';
39
+ import type { LayoutEntry } from '../deny-renderer.js';
40
+ import { renderDenyPage, renderDenyPageAsRsc } from '../deny-renderer.js';
41
+ import { resolveLogMode } from '../../dev-tools/logger.js';
42
+ import { sendEarlyHints103 } from '../early-hints-sender.js';
43
+ import { collectEarlyHintHeaders } from '../early-hints.js';
44
+ import { buildClientScripts } from '../html-injectors.js';
45
+ import type { InterceptionContext, PipelineConfig, RouteMatch } from '../pipeline.js';
46
+ import { createPipeline } from '../pipeline.js';
47
+ import { coerceSegmentParams, setGlobalSchemaCodecs } from '../param-coercion.js';
48
+ import type { ManifestSegmentNode } from '../route-matcher.js';
49
+ import { createMetadataRouteMatcher, createRouteMatcher } from '../route-matcher.js';
50
+ import { initDevTracing } from '../tracing.js';
51
+ import { createRevalidateRendererFactory } from './revalidate-renderer.js';
52
+
53
+ import { renderFallbackError as renderFallback } from '../fallback-error.js';
54
+ import { loadInstrumentation } from '../instrumentation.js';
55
+ import { loadModule } from '../safe-load.js';
56
+ import { logRenderError } from '../logger.js';
57
+ import { renderNoMatchPage } from './error-renderer.js';
58
+ import { createDebugChannelSink, isRscPayloadRequest } from './helpers.js';
59
+ import { renderRoute } from './render-route.js';
69
60
  import { callSsr } from './ssr-bridge.js';
70
- import { isDebug, isDevMode, setDebugFromConfig } from '#/server/debug.js';
61
+ import { isDebug, isDevMode, setDebugFromConfig } from '../debug.js';
62
+ import { setSourceMapCallback } from '../dev-source-map.js';
63
+ import { requestContextAls } from '../als-registry.js';
64
+ import { createAutoSitemapHandler } from '../sitemap-handler.js';
71
65
 
72
66
  /**
73
67
  * Resolve the Server-Timing mode from timber.config.ts.
@@ -84,20 +78,24 @@ function resolveServerTimingMode(
84
78
  return isDev ? 'detailed' : 'total';
85
79
  }
86
80
 
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
81
  /**
92
- * Set the dev pipeline error handler.
82
+ * Set the dev source-map handler.
83
+ *
84
+ * Called by the dev server after importing this module to wire Vite's
85
+ * module graph source-mapping into the error rendering pipeline. Errors
86
+ * rendered by renderErrorPage / renderFallbackError will have their
87
+ * stack traces rewritten to show original source positions.
93
88
  *
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.
89
+ * No-op in production.
96
90
  */
97
- export function setDevPipelineErrorHandler(handler: (error: Error, phase: string) => void): void {
98
- _devPipelineErrorHandler = handler;
91
+ export function setDevSourceMapHandler(handler: (error: Error) => void): void {
92
+ setSourceMapCallback(handler);
99
93
  }
100
94
 
95
+ // Dev-only: debug components getter is stored per-request in ALS
96
+ // (RequestContextStore.debugComponentsGetter) to avoid cross-request
97
+ // race conditions. See TIM-557.
98
+
101
99
  /**
102
100
  * Create the RSC request handler from the route manifest.
103
101
  *
@@ -111,18 +109,47 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
111
109
  // See design/17-logging.md §"register() — Server Startup"
112
110
  await loadInstrumentation(loadUserInstrumentation);
113
111
 
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[]
112
+ // Initialize deployment ID for version skew detection (TIM-446).
113
+ // The manifest init module sets globalThis.__TIMBER_DEPLOYMENT_ID__ at startup.
114
+ // In dev mode this is undefined — skew checks are skipped.
115
+ const deploymentId = (globalThis as Record<string, unknown>).__TIMBER_DEPLOYMENT_ID__ as
116
+ | string
117
117
  | undefined;
118
- if (cookieSecrets?.length) {
119
- const { setCookieSecrets } = await import('#/server/request-context.js');
120
- setCookieSecrets(cookieSecrets);
118
+ if (deploymentId) {
119
+ const { setDeploymentId } = await import('../version-skew.js');
120
+ setDeploymentId(deploymentId);
121
+ }
122
+
123
+ // Wire the configured cache handler into the module-level singleton (TIM-599).
124
+ // The cacheHandler is a class instance (e.g. RedisCacheHandler) that can't be
125
+ // JSON-serialized into virtual:timber-config. Instead, virtual:timber-cache-handler
126
+ // dynamically imports the user's timber.config.ts and extracts the handler.
127
+ const userCacheHandler = await loadCacheHandler();
128
+ if (userCacheHandler) {
129
+ const { setCacheHandler } = await import('../../cache/handler-store.js');
130
+ setCacheHandler(userCacheHandler as Parameters<typeof setCacheHandler>[0]);
131
+ }
132
+
133
+ // Propagate renderTimeoutMs into the default singleflight so cache calls
134
+ // without a per-call timeoutMs still get deadlock protection (TIM-1032).
135
+ const renderTimeoutMs = (runtimeConfig as Record<string, unknown>).renderTimeoutMs as
136
+ | number
137
+ | undefined;
138
+ if (renderTimeoutMs) {
139
+ const { setDefaultSingleflightTimeout } = await import('../../cache/timber-cache.js');
140
+ setDefaultSingleflightTimeout(renderTimeoutMs);
121
141
  }
122
142
 
123
143
  const matchRoute = createRouteMatcher(manifest);
124
144
  const matchMetadataRoute = createMetadataRouteMatcher(manifest);
125
145
 
146
+ // TIM-931: Register global schema codecs for param coercion.
147
+ // When app/schema.ts exists, globalSchemaCodecs is a Record<string, Codec>;
148
+ // otherwise null. Registered once at startup so all coercion paths
149
+ // (pipeline-phases.ts, action-middleware-runner.ts, revalidation) share
150
+ // the same codec source.
151
+ setGlobalSchemaCodecs(globalSchemaCodecs);
152
+
126
153
  // Build the client bootstrap configuration.
127
154
  // When client JavaScript is disabled, no scripts are injected
128
155
  // (unless enableHMRInDev is true in dev mode — then only HMR client).
@@ -144,6 +171,18 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
144
171
  setDebugFromConfig(true);
145
172
  }
146
173
 
174
+ // Wire the global sensitive-field stripping config so `createActionClient`
175
+ // instances in user code pick up `forms.stripSensitiveFields` from
176
+ // `timber.config.ts` without needing to plumb config through each action.
177
+ // See TIM-816 and design/08-forms-and-actions.md §"Validation errors".
178
+ const formsConfig = (runtimeConfig as Record<string, unknown>).forms as
179
+ | { stripSensitiveFields?: import('../sensitive-fields.js').SensitiveFieldsOption }
180
+ | undefined;
181
+ if (formsConfig) {
182
+ const { setGlobalSensitiveFieldsConfig } = await import('../sensitive-fields.js');
183
+ setGlobalSensitiveFieldsConfig(formsConfig.stripSensitiveFields);
184
+ }
185
+
147
186
  // Two separate flags for two different security levels:
148
187
  //
149
188
  // isDev (isDevMode) — gates client-visible behavior: dev error pages with
@@ -167,15 +206,22 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
167
206
  await initDevTracing({ mode: devLogMode, slowPhaseMs });
168
207
  // Patch globalThis.fetch to create OTEL spans for fetch calls.
169
208
  // Spans appear as children of the active component span in the dev log tree.
170
- const { instrumentDevFetch } = await import('../dev-fetch-instrumentation.js');
209
+ const { instrumentDevFetch } = await import('../../dev-tools/instrumentation.js');
171
210
  instrumentDevFetch();
172
211
  }
173
212
  }
174
213
 
175
214
  const typedBuildManifest = buildManifest as BuildManifest;
176
215
 
216
+ // The routing plugin emits `manifest.proxy = { load, filePath }` only when
217
+ // the app has an `app/proxy.ts`. Convert that to the pipeline's lazy variant
218
+ // so HMR re-imports per request; leave it undefined when there's no proxy.
219
+ const proxyConfig: PipelineConfig['proxy'] = manifest.proxy?.load
220
+ ? { kind: 'lazy', loader: manifest.proxy.load }
221
+ : undefined;
222
+
177
223
  const pipelineConfig: PipelineConfig = {
178
- proxyLoader: manifest.proxy?.load,
224
+ proxy: proxyConfig,
179
225
  matchRoute,
180
226
  matchMetadataRoute,
181
227
  // 103 Early Hints — fires after route match, before middleware.
@@ -183,11 +229,7 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
183
229
  // so the browser starts fetching critical resources while the server renders.
184
230
  // In dev mode the manifest is empty — no hints are sent.
185
231
  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, {
232
+ const headers = collectEarlyHintHeaders(match.segments, typedBuildManifest, {
191
233
  skipJs: clientJsDisabled,
192
234
  });
193
235
  for (const h of headers) {
@@ -208,13 +250,47 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
208
250
  req,
209
251
  match,
210
252
  responseHeaders,
211
- clientBootstrap,
212
- clientJsDisabled,
253
+ {
254
+ clientBootstrap,
255
+ clientJsDisabled,
256
+ rootSegment: manifest.root,
257
+ buildManifest: typedBuildManifest,
258
+ globalError: manifest.globalError,
259
+ },
213
260
  interception
214
261
  );
215
262
  },
216
263
  renderNoMatch: async (req: Request, responseHeaders: Headers) => {
217
- return renderNoMatchPage(req, manifest.root, responseHeaders, clientBootstrap);
264
+ const response = await renderNoMatchPage(
265
+ req,
266
+ manifest.root,
267
+ responseHeaders,
268
+ clientBootstrap
269
+ );
270
+
271
+ // In dev mode, if the pipeline returned a bare 404 (no body — meaning
272
+ // no user-defined 404.tsx was found), replace it with a helpful dev
273
+ // page that lists available routes and suggests similar paths.
274
+ // Only for GET requests that accept HTML — HEAD/API/RSC clients
275
+ // should receive the bare 404 without an HTML body (TIM-793).
276
+ const acceptsHtml = (req.headers.get('accept') ?? '').includes('text/html');
277
+ if (isDev && !response.body && req.method === 'GET' && acceptsHtml) {
278
+ const { generateDev404Page, collectRoutes } = await import('../../dev-tools/404-page.js');
279
+ const routes = collectRoutes(manifest.root);
280
+ const pathname = new URL(req.url).pathname;
281
+ // devHmrOptions is set by the dev server after this module is
282
+ // imported (read at request time, not closure-capture time).
283
+ const html = generateDev404Page(pathname, routes, pipelineConfig.devHmrOptions);
284
+ return new Response(html, {
285
+ status: 404,
286
+ headers: {
287
+ ...Object.fromEntries(responseHeaders.entries()),
288
+ 'content-type': 'text/html; charset=utf-8',
289
+ },
290
+ });
291
+ }
292
+
293
+ return response;
218
294
  },
219
295
  interceptionRewrites: manifest.interceptionRewrites,
220
296
  // Slow request threshold from timber.config.ts. Default 3000ms, 0 to disable.
@@ -223,18 +299,120 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
223
299
  serverTiming: resolveServerTimingMode(runtimeConfig, isDev),
224
300
  onPipelineError: isDev
225
301
  ? (error: Error, phase: string) => {
226
- if (_devPipelineErrorHandler) _devPipelineErrorHandler(error, phase);
302
+ if (pipelineConfig.devPipelineErrorHandler) {
303
+ // For render-phase errors, include RSC debug component data
304
+ // from the Flight debug channel (if available from the current request).
305
+ const store = requestContextAls.getStore();
306
+ const debugComponents =
307
+ phase === 'render' && store?.debugComponentsGetter
308
+ ? store.debugComponentsGetter()
309
+ : undefined;
310
+ pipelineConfig.devPipelineErrorHandler(error, phase, debugComponents);
311
+ }
227
312
  }
228
313
  : undefined,
314
+
229
315
  renderFallbackError: (error, req, responseHeaders) =>
230
- renderFallback(error, req, responseHeaders, isDev, manifest.root, clientBootstrap),
316
+ renderFallback(
317
+ error,
318
+ req,
319
+ responseHeaders,
320
+ isDev,
321
+ manifest.root,
322
+ clientBootstrap,
323
+ manifest.globalError,
324
+ // Project root for dev error page frame classification.
325
+ // Not in runtimeConfig (TIM-787: leaked to client bundles).
326
+ // manifest.viteRoot is the resolved Vite root string — correct even
327
+ // when CWD differs from project root (e.g., monorepo custom root)
328
+ // (TIM-807). Passing manifest.root (segment tree object) here would
329
+ // stringify to "[object Object]" and misclassify app frames as
330
+ // internal, dropping source locations from the dev error page (TIM-808).
331
+ isDev ? manifest.viteRoot : undefined,
332
+ // HMR options for the dev error page's auto-reload WebSocket —
333
+ // set by the dev server after import, read at request time.
334
+ isDev ? pipelineConfig.devHmrOptions : undefined
335
+ ),
336
+ renderDenyFallback: async (deny, req, responseHeaders, matchedRoute) => {
337
+ // Render the deny page (403.tsx, 404.tsx, etc.) for DenySignals
338
+ // that escape from middleware or the render phase.
339
+ //
340
+ // When the pipeline already matched a route (the common case — matching
341
+ // runs before middleware and rendering), resolve the status file against
342
+ // the matched chain so colocated files like a nested `403.tsx` or an API
343
+ // route's `401.json` are picked up. Fall back to the root chain when no
344
+ // match is available (e.g. proxy-stage deny before route matching).
345
+ // See TIM-822, design/04-authorization.md, design/10-error-handling.md.
346
+ const chain: ManifestSegmentNode[] = matchedRoute ? matchedRoute.segments : [manifest.root];
347
+ const layoutComponents: LayoutEntry[] = [];
348
+ try {
349
+ for (const segment of chain) {
350
+ if (!segment.layout) continue;
351
+ const mod = await loadModule(segment.layout);
352
+ if (mod.default) {
353
+ layoutComponents.push({
354
+ component: mod.default as (...args: unknown[]) => unknown,
355
+ segment,
356
+ });
357
+ }
358
+ }
359
+ } catch (layoutError) {
360
+ // Layout failed to load — proceed without it. Partial layout chains
361
+ // are acceptable; the deny renderer wraps in whatever loaded.
362
+ logRenderError({ method: req.method, path: new URL(req.url).pathname, error: layoutError });
363
+ }
364
+ // Reuse the matched route's params/middleware metadata when present so
365
+ // downstream rendering sees the real route shape. Otherwise synthesise
366
+ // a root-only stub (no params, no middleware).
367
+ const match: RouteMatch = matchedRoute ?? {
368
+ segments: chain,
369
+ segmentParams: {},
370
+ middlewareChain: [],
371
+ };
372
+ // For client navigation (Accept: text/x-component), the timber router
373
+ // decodes the response as React Flight. Returning HTML to a Flight
374
+ // decoder breaks navigation, so dispatch to the RSC renderer when the
375
+ // request is an RSC payload request — mirroring the normal render path.
376
+ // See design/19-client-navigation.md §"RSC Payload Handling" and TIM-823.
377
+ if (isRscPayloadRequest(req)) {
378
+ return renderDenyPageAsRsc(
379
+ deny,
380
+ chain,
381
+ layoutComponents,
382
+ req,
383
+ responseHeaders,
384
+ createDebugChannelSink
385
+ );
386
+ }
387
+ return renderDenyPage(
388
+ deny,
389
+ chain,
390
+ layoutComponents,
391
+ req,
392
+ match,
393
+ responseHeaders,
394
+ clientBootstrap,
395
+ createDebugChannelSink,
396
+ callSsr
397
+ );
398
+ },
399
+ // Auto-generated sitemap handler — enabled when sitemap.enabled is true
400
+ // and no user-authored sitemap exists at the app root.
401
+ // See design/16-metadata.md §"Auto-generated Sitemap"
402
+ autoSitemapHandler: createAutoSitemapHandler(manifest.root, runtimeConfig),
231
403
  };
232
404
 
233
405
  const pipeline = createPipeline(pipelineConfig);
234
406
 
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".
407
+ // Wrap the pipeline to enforce CSRF at the request boundary and intercept
408
+ // server action requests. By default, the wrapper also runs the matched
409
+ // route's `middleware.ts` chain on action POSTs, so authentication, rate
410
+ // limiting, tenant isolation, and request-header injection apply to
411
+ // actions just like they do to page renders. See TIM-871 and
412
+ // design/08-forms-and-actions.md §"Middleware for Server Actions".
413
+ //
414
+ // CSRF validation lives in the wrapper (not inside the action handler) so
415
+ // it covers route.ts API handlers as well as server actions. See LOCAL-773.
238
416
  const csrfConfig = {
239
417
  csrf: runtimeConfig.csrf,
240
418
  allowedOrigins: (runtimeConfig as Record<string, unknown>).allowedOrigins as
@@ -242,268 +420,60 @@ async function createRequestHandler(manifest: typeof routeManifest, runtimeConfi
242
420
  | undefined,
243
421
  };
244
422
 
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;
369
-
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
- }
384
-
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
- }
392
-
393
- const fontEntries = collectRouteFonts(segments, typedManifest);
394
- if (fontEntries.length > 0) {
395
- headHtml += buildFontPreloadTags(fontEntries);
396
- }
397
-
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
- }
405
-
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
- }
417
-
418
- // Render to RSC Flight stream with signal tracking.
419
- const { rscStream, signals } = renderRscStream(element, _req);
420
-
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
- }
426
-
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
- }
451
-
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
- }
467
-
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
- }
423
+ const actionsConfig = (runtimeConfig as Record<string, unknown>).actions as
424
+ | { runMiddleware?: boolean }
425
+ | undefined;
484
426
 
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,
427
+ const handler = wrapPipelineWithActionDispatch(pipeline, {
428
+ csrfConfig,
429
+ bodyLimits: (runtimeConfig as Record<string, unknown>).limits as BodyLimitsConfig['limits'],
430
+ sensitiveFields: formsConfig?.stripSensitiveFields,
431
+ matchRoute,
432
+ coerceSegmentParams,
433
+ renderDenyFallback: pipelineConfig.renderDenyFallback,
434
+ runMiddleware: actionsConfig?.runMiddleware,
435
+ // Thread the pipeline's `stripTrailingSlash` setting into the wrapper
436
+ // so its canonicalization step (applied before `matchRoute` for
437
+ // action POSTs) matches the page pipeline exactly. Defaults to `true`
438
+ // both here and inside the wrapper.
439
+ stripTrailingSlash: pipelineConfig.stripTrailingSlash,
440
+ // Revalidation renderer — runs the target route's `middleware.ts`
441
+ // chain BEFORE building the element tree so a server action that
442
+ // revalidates a protected path honors that path's auth, tenant
443
+ // isolation, and request-header injection. Closes the silent-bypass
444
+ // bug where `revalidatePath('/admin')` from a public action would
445
+ // serialize the admin RSC tree without ever consulting admin's
446
+ // middleware. Also validates the user-supplied `path` as a local
447
+ // root-relative URL to reject `revalidatePath('//evil.com/admin')`
448
+ // and similar scheme/authority injections. See TIM-996 and
449
+ // design/08-forms-and-actions.md §"revalidatePath()".
450
+ buildRevalidateRenderer: createRevalidateRendererFactory({
451
+ matchRoute,
452
+ coerceSegmentParams,
453
+ buildManifest: buildManifest as BuildManifest,
454
+ }),
498
455
  });
456
+
457
+ return { handler, pipelineConfig };
499
458
  }
500
459
 
501
460
  // Re-export for generated entry points (e.g., Nitro node-server/bun) to wrap
502
461
  // the handler with per-request 103 Early Hints sender via ALS.
503
- export { runWithEarlyHintsSender } from '#/server/early-hints-sender.js';
462
+ export { runWithEarlyHintsSender } from '../early-hints-sender.js';
504
463
 
505
464
  // Re-export for generated entry points to wrap the handler with per-request
506
465
  // waitUntil support via ALS. See design/11-platform.md §"waitUntil()".
507
- export { runWithWaitUntil } from '#/server/waituntil-bridge.js';
466
+ export { runWithWaitUntil } from '../waituntil-bridge.js';
467
+
468
+ const { handler: _handler, pipelineConfig: _pipelineConfig } = await createRequestHandler(
469
+ routeManifest,
470
+ config
471
+ );
472
+
473
+ /**
474
+ * The pipeline configuration object. Exported so the dev server can set
475
+ * `devPipelineErrorHandler` after import without a module-level singleton.
476
+ */
477
+ export const pipelineConfig = _pipelineConfig;
508
478
 
509
- export default await createRequestHandler(routeManifest, config);
479
+ export default _handler;