@timber-js/app 0.2.0-alpha.11 → 0.2.0-alpha.110

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 (725) hide show
  1. package/dist/_chunks/actions-D6gyxlGQ.js +1058 -0
  2. package/dist/_chunks/actions-D6gyxlGQ.js.map +1 -0
  3. package/dist/_chunks/build-output-helper-5TK2Emwp.js +61 -0
  4. package/dist/_chunks/build-output-helper-5TK2Emwp.js.map +1 -0
  5. package/dist/_chunks/define-BflNsrwD.js +124 -0
  6. package/dist/_chunks/define-BflNsrwD.js.map +1 -0
  7. package/dist/_chunks/define-Dn98bPbb.js +195 -0
  8. package/dist/_chunks/define-Dn98bPbb.js.map +1 -0
  9. package/dist/_chunks/format-CYBGxKtc.js +14 -0
  10. package/dist/_chunks/format-CYBGxKtc.js.map +1 -0
  11. package/dist/_chunks/handler-store-B_df5Npe.js +54 -0
  12. package/dist/_chunks/handler-store-B_df5Npe.js.map +1 -0
  13. package/dist/_chunks/logger-DDmK5skc.js +291 -0
  14. package/dist/_chunks/logger-DDmK5skc.js.map +1 -0
  15. package/dist/_chunks/merge-search-params-Cm_KIWDX.js +41 -0
  16. package/dist/_chunks/merge-search-params-Cm_KIWDX.js.map +1 -0
  17. package/dist/_chunks/navigation-root-2ypaZQDx.js +96 -0
  18. package/dist/_chunks/navigation-root-2ypaZQDx.js.map +1 -0
  19. package/dist/_chunks/registry-DB93kT5c.js +20 -0
  20. package/dist/_chunks/registry-DB93kT5c.js.map +1 -0
  21. package/dist/_chunks/router-ref-TkUdmqtM.js +28 -0
  22. package/dist/_chunks/router-ref-TkUdmqtM.js.map +1 -0
  23. package/dist/_chunks/schema-bridge-C3xl_vfb.js +86 -0
  24. package/dist/_chunks/schema-bridge-C3xl_vfb.js.map +1 -0
  25. package/dist/_chunks/segment-classify-CnfLLvir.js +137 -0
  26. package/dist/_chunks/segment-classify-CnfLLvir.js.map +1 -0
  27. package/dist/_chunks/segment-context-Dc-GbSTe.js +34 -0
  28. package/dist/_chunks/segment-context-Dc-GbSTe.js.map +1 -0
  29. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-DzuI0bIV.js} +1 -1
  30. package/dist/_chunks/ssr-data-DzuI0bIV.js.map +1 -0
  31. package/dist/_chunks/stale-reload-D6FlD3xn.js +64 -0
  32. package/dist/_chunks/stale-reload-D6FlD3xn.js.map +1 -0
  33. package/dist/_chunks/tracing-DvKLzCFa.js +329 -0
  34. package/dist/_chunks/tracing-DvKLzCFa.js.map +1 -0
  35. package/dist/_chunks/{use-query-states-D5KaffOK.js → use-query-states-B-cLl8mx.js} +7 -20
  36. package/dist/_chunks/use-query-states-B-cLl8mx.js.map +1 -0
  37. package/dist/_chunks/use-segment-params-07V1TIxL.js +185 -0
  38. package/dist/_chunks/use-segment-params-07V1TIxL.js.map +1 -0
  39. package/dist/_chunks/validation-DfyuMoK2.js +84 -0
  40. package/dist/_chunks/validation-DfyuMoK2.js.map +1 -0
  41. package/dist/_chunks/walkers-DQn5NNrf.js +850 -0
  42. package/dist/_chunks/walkers-DQn5NNrf.js.map +1 -0
  43. package/dist/_chunks/{format-DviM89f0.js → warnings-B30wpfaS.js} +6 -45
  44. package/dist/_chunks/warnings-B30wpfaS.js.map +1 -0
  45. package/dist/adapters/build-output-helper.d.ts +28 -0
  46. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  47. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  48. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  49. package/dist/adapters/cloudflare-dev.js +73 -0
  50. package/dist/adapters/cloudflare-dev.js.map +1 -0
  51. package/dist/adapters/cloudflare-kv-cache.d.ts +64 -0
  52. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  53. package/dist/adapters/cloudflare-kv-cache.js +95 -0
  54. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  55. package/dist/adapters/cloudflare.d.ts +148 -12
  56. package/dist/adapters/cloudflare.d.ts.map +1 -1
  57. package/dist/adapters/cloudflare.js +142 -38
  58. package/dist/adapters/cloudflare.js.map +1 -1
  59. package/dist/adapters/compress-module.d.ts.map +1 -1
  60. package/dist/adapters/nitro.d.ts +17 -1
  61. package/dist/adapters/nitro.d.ts.map +1 -1
  62. package/dist/adapters/nitro.js +143 -45
  63. package/dist/adapters/nitro.js.map +1 -1
  64. package/dist/adapters/shared.d.ts +16 -0
  65. package/dist/adapters/shared.d.ts.map +1 -0
  66. package/dist/cache/cache-api.d.ts +24 -0
  67. package/dist/cache/cache-api.d.ts.map +1 -0
  68. package/dist/cache/handler-store.d.ts +31 -0
  69. package/dist/cache/handler-store.d.ts.map +1 -0
  70. package/dist/cache/index.d.ts +23 -7
  71. package/dist/cache/index.d.ts.map +1 -1
  72. package/dist/cache/index.js +150 -81
  73. package/dist/cache/index.js.map +1 -1
  74. package/dist/cache/singleflight.d.ts +18 -1
  75. package/dist/cache/singleflight.d.ts.map +1 -1
  76. package/dist/cache/sizeof.d.ts +22 -0
  77. package/dist/cache/sizeof.d.ts.map +1 -0
  78. package/dist/cache/timber-cache.d.ts +1 -1
  79. package/dist/cache/timber-cache.d.ts.map +1 -1
  80. package/dist/cli.d.ts +6 -1
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +8 -3
  83. package/dist/cli.js.map +1 -1
  84. package/dist/client/browser-dev.d.ts +34 -1
  85. package/dist/client/browser-dev.d.ts.map +1 -1
  86. package/dist/client/browser-entry/action-dispatch.d.ts +17 -0
  87. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  88. package/dist/client/browser-entry/hmr.d.ts +21 -0
  89. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  90. package/dist/client/browser-entry/hydrate.d.ts +46 -0
  91. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  92. package/dist/client/browser-entry/index.d.ts +30 -0
  93. package/dist/client/browser-entry/index.d.ts.map +1 -0
  94. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  95. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  96. package/dist/client/browser-entry/router-init.d.ts +23 -0
  97. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  98. package/dist/client/browser-entry/rsc-stream.d.ts +24 -0
  99. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  100. package/dist/client/browser-entry/scroll.d.ts +19 -0
  101. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  102. package/dist/client/error-boundary.d.ts +12 -5
  103. package/dist/client/error-boundary.d.ts.map +1 -1
  104. package/dist/client/error-boundary.js +26 -5
  105. package/dist/client/error-boundary.js.map +1 -1
  106. package/dist/client/error-reconstituter.d.ts +54 -0
  107. package/dist/client/error-reconstituter.d.ts.map +1 -0
  108. package/dist/client/form.d.ts +16 -27
  109. package/dist/client/form.d.ts.map +1 -1
  110. package/dist/client/history.d.ts +19 -4
  111. package/dist/client/history.d.ts.map +1 -1
  112. package/dist/client/index.d.ts +9 -24
  113. package/dist/client/index.d.ts.map +1 -1
  114. package/dist/client/index.js +154 -1100
  115. package/dist/client/index.js.map +1 -1
  116. package/dist/client/internal.d.ts +19 -0
  117. package/dist/client/internal.d.ts.map +1 -0
  118. package/dist/client/internal.js +964 -0
  119. package/dist/client/internal.js.map +1 -0
  120. package/dist/client/link-pending-store.d.ts +63 -0
  121. package/dist/client/link-pending-store.d.ts.map +1 -0
  122. package/dist/client/link.d.ts +62 -55
  123. package/dist/client/link.d.ts.map +1 -1
  124. package/dist/client/nav-link-store.d.ts +36 -0
  125. package/dist/client/nav-link-store.d.ts.map +1 -0
  126. package/dist/client/navigation-api-types.d.ts +90 -0
  127. package/dist/client/navigation-api-types.d.ts.map +1 -0
  128. package/dist/client/navigation-api.d.ts +115 -0
  129. package/dist/client/navigation-api.d.ts.map +1 -0
  130. package/dist/client/navigation-context.d.ts +13 -2
  131. package/dist/client/navigation-context.d.ts.map +1 -1
  132. package/dist/client/{transition-root.d.ts → navigation-root.d.ts} +42 -8
  133. package/dist/client/navigation-root.d.ts.map +1 -0
  134. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  135. package/dist/client/router-ref.d.ts +1 -1
  136. package/dist/client/router.d.ts +70 -4
  137. package/dist/client/router.d.ts.map +1 -1
  138. package/dist/client/rsc-fetch.d.ts +38 -3
  139. package/dist/client/rsc-fetch.d.ts.map +1 -1
  140. package/dist/client/segment-cache.d.ts +1 -1
  141. package/dist/client/segment-cache.d.ts.map +1 -1
  142. package/dist/client/segment-outlet.d.ts +63 -0
  143. package/dist/client/segment-outlet.d.ts.map +1 -0
  144. package/dist/client/ssr-data.d.ts +13 -4
  145. package/dist/client/ssr-data.d.ts.map +1 -1
  146. package/dist/client/stale-reload.d.ts +15 -0
  147. package/dist/client/stale-reload.d.ts.map +1 -1
  148. package/dist/client/state.d.ts +1 -1
  149. package/dist/client/top-loader.d.ts +5 -5
  150. package/dist/client/top-loader.d.ts.map +1 -1
  151. package/dist/client/use-cookie.d.ts +12 -0
  152. package/dist/client/use-cookie.d.ts.map +1 -1
  153. package/dist/client/use-link-status.d.ts +5 -5
  154. package/dist/client/use-link-status.d.ts.map +1 -1
  155. package/dist/client/{use-navigation-pending.d.ts → use-pending-navigation.d.ts} +4 -4
  156. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  157. package/dist/client/use-query-states.d.ts +1 -1
  158. package/dist/client/use-query-states.d.ts.map +1 -1
  159. package/dist/client/use-router.d.ts +1 -1
  160. package/dist/client/{use-params.d.ts → use-segment-params.d.ts} +7 -5
  161. package/dist/client/use-segment-params.d.ts.map +1 -0
  162. package/dist/codec.d.ts +33 -0
  163. package/dist/codec.d.ts.map +1 -0
  164. package/dist/codec.js +2 -0
  165. package/dist/config-types.d.ts +294 -0
  166. package/dist/config-types.d.ts.map +1 -0
  167. package/dist/config-validation.d.ts +51 -0
  168. package/dist/config-validation.d.ts.map +1 -0
  169. package/dist/content/index.d.ts +1 -10
  170. package/dist/content/index.d.ts.map +1 -1
  171. package/dist/content/index.js +0 -2
  172. package/dist/cookies/define-cookie.d.ts +58 -25
  173. package/dist/cookies/define-cookie.d.ts.map +1 -1
  174. package/dist/cookies/index.d.ts +2 -1
  175. package/dist/cookies/index.d.ts.map +1 -1
  176. package/dist/cookies/index.js +251 -36
  177. package/dist/cookies/index.js.map +1 -1
  178. package/dist/cookies/json-cookie.d.ts +64 -0
  179. package/dist/cookies/json-cookie.d.ts.map +1 -0
  180. package/dist/cookies/validation.d.ts +46 -0
  181. package/dist/cookies/validation.d.ts.map +1 -0
  182. package/dist/dev-tools/404-page.d.ts +46 -0
  183. package/dist/dev-tools/404-page.d.ts.map +1 -0
  184. package/dist/dev-tools/browser-logs.d.ts +84 -0
  185. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  186. package/dist/dev-tools/error-page.d.ts +58 -0
  187. package/dist/dev-tools/error-page.d.ts.map +1 -0
  188. package/dist/dev-tools/holding-server.d.ts +54 -0
  189. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  190. package/dist/dev-tools/index.d.ts +31 -0
  191. package/dist/dev-tools/index.d.ts.map +1 -0
  192. package/dist/{server/dev-span-processor.d.ts → dev-tools/instrumentation.d.ts} +26 -6
  193. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  194. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  195. package/dist/dev-tools/logger.d.ts.map +1 -0
  196. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +2 -2
  197. package/dist/dev-tools/logs.d.ts.map +1 -0
  198. package/dist/dev-tools/overlay.d.ts +91 -0
  199. package/dist/dev-tools/overlay.d.ts.map +1 -0
  200. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  201. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  202. package/dist/dev-tools/terminal.d.ts +28 -0
  203. package/dist/dev-tools/terminal.d.ts.map +1 -0
  204. package/dist/{server/dev-warnings.d.ts → dev-tools/warnings.d.ts} +2 -22
  205. package/dist/dev-tools/warnings.d.ts.map +1 -0
  206. package/dist/fonts/ast.d.ts +98 -6
  207. package/dist/fonts/ast.d.ts.map +1 -1
  208. package/dist/fonts/bundle.d.ts +48 -0
  209. package/dist/fonts/bundle.d.ts.map +1 -0
  210. package/dist/fonts/css.d.ts +1 -0
  211. package/dist/fonts/css.d.ts.map +1 -1
  212. package/dist/fonts/dev-middleware.d.ts +22 -0
  213. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  214. package/dist/fonts/local.d.ts +1 -1
  215. package/dist/fonts/pipeline.d.ts +167 -0
  216. package/dist/fonts/pipeline.d.ts.map +1 -0
  217. package/dist/fonts/transform.d.ts +78 -0
  218. package/dist/fonts/transform.d.ts.map +1 -0
  219. package/dist/fonts/types.d.ts +45 -1
  220. package/dist/fonts/types.d.ts.map +1 -1
  221. package/dist/fonts/virtual-modules.d.ts +103 -0
  222. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  223. package/dist/index.d.ts +46 -190
  224. package/dist/index.d.ts.map +1 -1
  225. package/dist/index.js +5409 -13290
  226. package/dist/index.js.map +1 -1
  227. package/dist/plugin-context.d.ts +107 -0
  228. package/dist/plugin-context.d.ts.map +1 -0
  229. package/dist/plugins/adapter-build.d.ts +1 -1
  230. package/dist/plugins/adapter-build.d.ts.map +1 -1
  231. package/dist/plugins/build-manifest.d.ts +2 -2
  232. package/dist/plugins/build-manifest.d.ts.map +1 -1
  233. package/dist/plugins/build-report.d.ts +9 -7
  234. package/dist/plugins/build-report.d.ts.map +1 -1
  235. package/dist/plugins/client-chunks.d.ts +32 -0
  236. package/dist/plugins/client-chunks.d.ts.map +1 -0
  237. package/dist/plugins/content.d.ts +1 -1
  238. package/dist/plugins/content.d.ts.map +1 -1
  239. package/dist/plugins/dev-server.d.ts +1 -1
  240. package/dist/plugins/dev-server.d.ts.map +1 -1
  241. package/dist/plugins/entries.d.ts +1 -1
  242. package/dist/plugins/entries.d.ts.map +1 -1
  243. package/dist/plugins/fonts.d.ts +17 -73
  244. package/dist/plugins/fonts.d.ts.map +1 -1
  245. package/dist/plugins/mdx.d.ts +1 -1
  246. package/dist/plugins/mdx.d.ts.map +1 -1
  247. package/dist/plugins/routing.d.ts +1 -1
  248. package/dist/plugins/routing.d.ts.map +1 -1
  249. package/dist/plugins/server-bundle.d.ts.map +1 -1
  250. package/dist/plugins/shims.d.ts +6 -5
  251. package/dist/plugins/shims.d.ts.map +1 -1
  252. package/dist/plugins/static-build.d.ts +5 -26
  253. package/dist/plugins/static-build.d.ts.map +1 -1
  254. package/dist/routing/codegen-shared.d.ts +55 -0
  255. package/dist/routing/codegen-shared.d.ts.map +1 -0
  256. package/dist/routing/codegen-types.d.ts +52 -0
  257. package/dist/routing/codegen-types.d.ts.map +1 -0
  258. package/dist/routing/codegen.d.ts +2 -2
  259. package/dist/routing/codegen.d.ts.map +1 -1
  260. package/dist/routing/convention-lint.d.ts +41 -0
  261. package/dist/routing/convention-lint.d.ts.map +1 -0
  262. package/dist/routing/index.d.ts +5 -1
  263. package/dist/routing/index.d.ts.map +1 -1
  264. package/dist/routing/index.js +3 -2
  265. package/dist/routing/link-codegen.d.ts +90 -0
  266. package/dist/routing/link-codegen.d.ts.map +1 -0
  267. package/dist/routing/scanner.d.ts +1 -10
  268. package/dist/routing/scanner.d.ts.map +1 -1
  269. package/dist/routing/segment-classify.d.ts +75 -0
  270. package/dist/routing/segment-classify.d.ts.map +1 -0
  271. package/dist/routing/types.d.ts +77 -25
  272. package/dist/routing/types.d.ts.map +1 -1
  273. package/dist/routing/walkers.d.ts +51 -0
  274. package/dist/routing/walkers.d.ts.map +1 -0
  275. package/dist/rsc-runtime/rsc.d.ts +1 -1
  276. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  277. package/dist/rsc-runtime/ssr.d.ts +12 -0
  278. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  279. package/dist/schema-bridge.d.ts +76 -0
  280. package/dist/schema-bridge.d.ts.map +1 -0
  281. package/dist/search-params/define.d.ts +157 -0
  282. package/dist/search-params/define.d.ts.map +1 -0
  283. package/dist/search-params/index.d.ts +4 -7
  284. package/dist/search-params/index.d.ts.map +1 -1
  285. package/dist/search-params/index.js +34 -441
  286. package/dist/search-params/index.js.map +1 -1
  287. package/dist/search-params/registry.d.ts +2 -2
  288. package/dist/search-params/registry.d.ts.map +1 -1
  289. package/dist/search-params/wrappers.d.ts +53 -0
  290. package/dist/search-params/wrappers.d.ts.map +1 -0
  291. package/dist/segment-params/define.d.ts +95 -0
  292. package/dist/segment-params/define.d.ts.map +1 -0
  293. package/dist/segment-params/index.d.ts +3 -0
  294. package/dist/segment-params/index.d.ts.map +1 -0
  295. package/dist/segment-params/index.js +2 -0
  296. package/dist/server/access-gate.d.ts +8 -3
  297. package/dist/server/access-gate.d.ts.map +1 -1
  298. package/dist/server/action-client.d.ts +41 -6
  299. package/dist/server/action-client.d.ts.map +1 -1
  300. package/dist/server/action-encryption.d.ts +76 -0
  301. package/dist/server/action-encryption.d.ts.map +1 -0
  302. package/dist/server/action-handler.d.ts +35 -1
  303. package/dist/server/action-handler.d.ts.map +1 -1
  304. package/dist/server/actions.d.ts +3 -6
  305. package/dist/server/actions.d.ts.map +1 -1
  306. package/dist/server/als-registry.d.ts +33 -5
  307. package/dist/server/als-registry.d.ts.map +1 -1
  308. package/dist/server/asset-headers.d.ts +1 -15
  309. package/dist/server/asset-headers.d.ts.map +1 -1
  310. package/dist/server/build-manifest.d.ts +2 -2
  311. package/dist/server/build-manifest.d.ts.map +1 -1
  312. package/dist/server/cookie-context.d.ts +170 -0
  313. package/dist/server/cookie-context.d.ts.map +1 -0
  314. package/dist/server/cookie-parsing.d.ts +51 -0
  315. package/dist/server/cookie-parsing.d.ts.map +1 -0
  316. package/dist/server/debug.d.ts +1 -1
  317. package/dist/server/default-logger.d.ts +22 -0
  318. package/dist/server/default-logger.d.ts.map +1 -0
  319. package/dist/server/deny-boundary.d.ts +90 -0
  320. package/dist/server/deny-boundary.d.ts.map +1 -0
  321. package/dist/server/deny-renderer.d.ts.map +1 -1
  322. package/dist/server/dev-source-map.d.ts +22 -0
  323. package/dist/server/dev-source-map.d.ts.map +1 -0
  324. package/dist/server/early-hints-sender.d.ts.map +1 -1
  325. package/dist/server/early-hints.d.ts +13 -5
  326. package/dist/server/early-hints.d.ts.map +1 -1
  327. package/dist/server/error-boundary-wrapper.d.ts +7 -1
  328. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  329. package/dist/server/fallback-error.d.ts +12 -7
  330. package/dist/server/fallback-error.d.ts.map +1 -1
  331. package/dist/server/flight-injection-state.d.ts +66 -0
  332. package/dist/server/flight-injection-state.d.ts.map +1 -0
  333. package/dist/server/flight-scripts.d.ts +42 -0
  334. package/dist/server/flight-scripts.d.ts.map +1 -0
  335. package/dist/server/flush.d.ts.map +1 -1
  336. package/dist/server/form-data.d.ts +29 -0
  337. package/dist/server/form-data.d.ts.map +1 -1
  338. package/dist/server/html-injector-core.d.ts +212 -0
  339. package/dist/server/html-injector-core.d.ts.map +1 -0
  340. package/dist/server/html-injectors.d.ts +81 -41
  341. package/dist/server/html-injectors.d.ts.map +1 -1
  342. package/dist/server/index.d.ts +9 -46
  343. package/dist/server/index.d.ts.map +1 -1
  344. package/dist/server/index.js +155 -2905
  345. package/dist/server/index.js.map +1 -1
  346. package/dist/server/internal.d.ts +48 -0
  347. package/dist/server/internal.d.ts.map +1 -0
  348. package/dist/server/internal.js +2920 -0
  349. package/dist/server/internal.js.map +1 -0
  350. package/dist/server/logger.d.ts +39 -7
  351. package/dist/server/logger.d.ts.map +1 -1
  352. package/dist/server/middleware-runner.d.ts +36 -4
  353. package/dist/server/middleware-runner.d.ts.map +1 -1
  354. package/dist/server/node-stream-transforms.d.ts +110 -0
  355. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  356. package/dist/server/param-coercion.d.ts +26 -0
  357. package/dist/server/param-coercion.d.ts.map +1 -0
  358. package/dist/server/pipeline-helpers.d.ts +95 -0
  359. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  360. package/dist/server/pipeline-interception.d.ts +1 -1
  361. package/dist/server/pipeline-interception.d.ts.map +1 -1
  362. package/dist/server/pipeline-metadata.d.ts +6 -0
  363. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  364. package/dist/server/pipeline-outcome.d.ts +49 -0
  365. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  366. package/dist/server/pipeline-phases.d.ts +52 -0
  367. package/dist/server/pipeline-phases.d.ts.map +1 -0
  368. package/dist/server/pipeline.d.ts +93 -23
  369. package/dist/server/pipeline.d.ts.map +1 -1
  370. package/dist/server/port-resolution.d.ts +117 -0
  371. package/dist/server/port-resolution.d.ts.map +1 -0
  372. package/dist/server/primitives.d.ts +69 -18
  373. package/dist/server/primitives.d.ts.map +1 -1
  374. package/dist/server/render-timeout.d.ts +51 -0
  375. package/dist/server/render-timeout.d.ts.map +1 -0
  376. package/dist/server/request-context.d.ts +41 -109
  377. package/dist/server/request-context.d.ts.map +1 -1
  378. package/dist/server/route-element-builder.d.ts +27 -1
  379. package/dist/server/route-element-builder.d.ts.map +1 -1
  380. package/dist/server/route-handler.d.ts.map +1 -1
  381. package/dist/server/route-matcher.d.ts +21 -34
  382. package/dist/server/route-matcher.d.ts.map +1 -1
  383. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  384. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  385. package/dist/server/rsc-entry/api-handler.d.ts +2 -2
  386. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  387. package/dist/server/rsc-entry/error-renderer.d.ts +26 -13
  388. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  389. package/dist/server/rsc-entry/helpers.d.ts +49 -6
  390. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  391. package/dist/server/rsc-entry/index.d.ts +20 -3
  392. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  393. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  394. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  395. package/dist/server/rsc-entry/rsc-payload.d.ts +3 -3
  396. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  397. package/dist/server/rsc-entry/rsc-stream.d.ts +14 -1
  398. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  399. package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
  400. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  401. package/dist/server/rsc-entry/ssr-renderer.d.ts +19 -4
  402. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  403. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +119 -0
  404. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  405. package/dist/server/safe-load.d.ts +46 -0
  406. package/dist/server/safe-load.d.ts.map +1 -0
  407. package/dist/server/sensitive-fields.d.ts +74 -0
  408. package/dist/server/sensitive-fields.d.ts.map +1 -0
  409. package/dist/server/sitemap-generator.d.ts +129 -0
  410. package/dist/server/sitemap-generator.d.ts.map +1 -0
  411. package/dist/server/sitemap-handler.d.ts +22 -0
  412. package/dist/server/sitemap-handler.d.ts.map +1 -0
  413. package/dist/server/slot-resolver.d.ts +1 -1
  414. package/dist/server/slot-resolver.d.ts.map +1 -1
  415. package/dist/server/ssr-entry.d.ts +23 -0
  416. package/dist/server/ssr-entry.d.ts.map +1 -1
  417. package/dist/server/ssr-render.d.ts +39 -21
  418. package/dist/server/ssr-render.d.ts.map +1 -1
  419. package/dist/server/ssr-wrappers.d.ts +50 -0
  420. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  421. package/dist/server/state-tree-diff.d.ts.map +1 -1
  422. package/dist/server/status-code-resolver.d.ts +16 -11
  423. package/dist/server/status-code-resolver.d.ts.map +1 -1
  424. package/dist/server/stream-utils.d.ts +36 -0
  425. package/dist/server/stream-utils.d.ts.map +1 -0
  426. package/dist/server/tracing.d.ts +5 -5
  427. package/dist/server/tracing.d.ts.map +1 -1
  428. package/dist/server/tree-builder.d.ts +62 -30
  429. package/dist/server/tree-builder.d.ts.map +1 -1
  430. package/dist/server/types.d.ts +49 -4
  431. package/dist/server/types.d.ts.map +1 -1
  432. package/dist/server/utils/escape-html.d.ts +14 -0
  433. package/dist/server/utils/escape-html.d.ts.map +1 -0
  434. package/dist/server/version-skew.d.ts +61 -0
  435. package/dist/server/version-skew.d.ts.map +1 -0
  436. package/dist/shared/merge-search-params.d.ts +22 -0
  437. package/dist/shared/merge-search-params.d.ts.map +1 -0
  438. package/dist/shims/font-google.d.ts +1 -1
  439. package/dist/shims/font-google.d.ts.map +1 -1
  440. package/dist/shims/font-google.js +42 -0
  441. package/dist/shims/font-google.js.map +1 -0
  442. package/dist/shims/font-local.d.ts +26 -0
  443. package/dist/shims/font-local.d.ts.map +1 -0
  444. package/dist/shims/font-local.js +20 -0
  445. package/dist/shims/font-local.js.map +1 -0
  446. package/dist/shims/headers.d.ts +2 -1
  447. package/dist/shims/headers.d.ts.map +1 -1
  448. package/dist/shims/navigation-client.d.ts +3 -1
  449. package/dist/shims/navigation-client.d.ts.map +1 -1
  450. package/dist/shims/navigation.d.ts +11 -5
  451. package/dist/shims/navigation.d.ts.map +1 -1
  452. package/dist/utils/state-machine.d.ts +80 -0
  453. package/dist/utils/state-machine.d.ts.map +1 -0
  454. package/package.json +52 -16
  455. package/src/adapters/build-output-helper.ts +77 -0
  456. package/src/adapters/cloudflare-dev.ts +177 -0
  457. package/src/adapters/cloudflare-kv-cache.ts +142 -0
  458. package/src/adapters/cloudflare.ts +350 -76
  459. package/src/adapters/compress-module.ts +24 -4
  460. package/src/adapters/nitro.ts +142 -59
  461. package/src/adapters/shared.ts +40 -0
  462. package/src/adapters/wrangler.d.ts +7 -0
  463. package/src/cache/cache-api.ts +38 -0
  464. package/src/cache/handler-store.ts +68 -0
  465. package/src/cache/index.ts +81 -18
  466. package/src/cache/singleflight.ts +62 -4
  467. package/src/cache/sizeof.ts +31 -0
  468. package/src/cache/timber-cache.ts +25 -20
  469. package/src/cli.ts +16 -6
  470. package/src/client/browser-dev.ts +153 -1
  471. package/src/client/browser-entry/action-dispatch.ts +116 -0
  472. package/src/client/browser-entry/hmr.ts +81 -0
  473. package/src/client/browser-entry/hydrate.ts +145 -0
  474. package/src/client/browser-entry/index.ts +143 -0
  475. package/src/client/browser-entry/post-hydration.ts +119 -0
  476. package/src/client/browser-entry/router-init.ts +193 -0
  477. package/src/client/browser-entry/rsc-stream.ts +157 -0
  478. package/src/client/browser-entry/scroll.ts +27 -0
  479. package/src/client/error-boundary.tsx +97 -20
  480. package/src/client/error-reconstituter.tsx +65 -0
  481. package/src/client/form.tsx +31 -32
  482. package/src/client/history.ts +26 -4
  483. package/src/client/index.ts +69 -44
  484. package/src/client/internal.ts +58 -0
  485. package/src/client/link-pending-store.ts +111 -0
  486. package/src/client/link.tsx +342 -113
  487. package/src/client/nav-link-store.ts +47 -0
  488. package/src/client/navigation-api-types.ts +112 -0
  489. package/src/client/navigation-api.ts +332 -0
  490. package/src/client/navigation-context.ts +31 -6
  491. package/src/client/navigation-root.tsx +342 -0
  492. package/src/client/nuqs-adapter.tsx +16 -3
  493. package/src/client/router-ref.ts +1 -1
  494. package/src/client/router.ts +300 -73
  495. package/src/client/rsc-fetch.ts +112 -8
  496. package/src/client/segment-cache.ts +1 -1
  497. package/src/client/segment-outlet.tsx +86 -0
  498. package/src/client/ssr-data.ts +13 -5
  499. package/src/client/stale-reload.ts +72 -3
  500. package/src/client/state.ts +2 -2
  501. package/src/client/top-loader.tsx +18 -6
  502. package/src/client/use-cookie.ts +31 -2
  503. package/src/client/use-link-status.ts +7 -7
  504. package/src/client/{use-navigation-pending.ts → use-pending-navigation.ts} +6 -6
  505. package/src/client/use-query-states.ts +9 -3
  506. package/src/client/use-router.ts +1 -1
  507. package/src/client/{use-params.ts → use-segment-params.ts} +7 -5
  508. package/src/codec.ts +45 -0
  509. package/src/config-types.ts +292 -0
  510. package/src/config-validation.ts +303 -0
  511. package/src/content/index.ts +5 -13
  512. package/src/cookies/define-cookie.ts +233 -53
  513. package/src/cookies/index.ts +12 -1
  514. package/src/cookies/json-cookie.ts +105 -0
  515. package/src/cookies/validation.ts +134 -0
  516. package/src/dev-tools/404-page.ts +387 -0
  517. package/src/dev-tools/browser-logs.ts +288 -0
  518. package/src/dev-tools/error-page.ts +509 -0
  519. package/src/dev-tools/holding-server.ts +187 -0
  520. package/src/dev-tools/index.ts +90 -0
  521. package/src/dev-tools/instrumentation.ts +176 -0
  522. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +3 -3
  523. package/src/dev-tools/overlay.ts +456 -0
  524. package/src/dev-tools/stack-classifier.ts +75 -0
  525. package/src/dev-tools/terminal.ts +183 -0
  526. package/src/{server/dev-warnings.ts → dev-tools/warnings.ts} +5 -50
  527. package/src/fonts/ast.ts +525 -16
  528. package/src/fonts/bundle.ts +142 -0
  529. package/src/fonts/css.ts +2 -1
  530. package/src/fonts/dev-middleware.ts +74 -0
  531. package/src/fonts/local.ts +1 -1
  532. package/src/fonts/pipeline.ts +314 -0
  533. package/src/fonts/transform.ts +317 -0
  534. package/src/fonts/types.ts +50 -1
  535. package/src/fonts/virtual-modules.ts +227 -0
  536. package/src/index.ts +409 -357
  537. package/src/plugin-context.ts +240 -0
  538. package/src/plugins/adapter-build.ts +12 -4
  539. package/src/plugins/build-manifest.ts +13 -2
  540. package/src/plugins/build-report.ts +16 -25
  541. package/src/plugins/client-chunks.ts +65 -0
  542. package/src/plugins/content.ts +1 -1
  543. package/src/plugins/dev-server.ts +162 -30
  544. package/src/plugins/entries.ts +111 -9
  545. package/src/plugins/fonts.ts +155 -654
  546. package/src/plugins/mdx.ts +43 -10
  547. package/src/plugins/routing.ts +217 -44
  548. package/src/plugins/server-bundle.ts +32 -1
  549. package/src/plugins/shims.ts +136 -35
  550. package/src/plugins/static-build.ts +15 -89
  551. package/src/routing/codegen-shared.ts +98 -0
  552. package/src/routing/codegen-types.ts +53 -0
  553. package/src/routing/codegen.ts +143 -176
  554. package/src/routing/convention-lint.ts +357 -0
  555. package/src/routing/index.ts +5 -1
  556. package/src/routing/interception.ts +1 -1
  557. package/src/routing/link-codegen.ts +294 -0
  558. package/src/routing/scanner.ts +107 -110
  559. package/src/routing/segment-classify.ts +188 -0
  560. package/src/routing/types.ts +78 -25
  561. package/src/routing/walkers.ts +90 -0
  562. package/src/rsc-runtime/rsc.ts +2 -0
  563. package/src/rsc-runtime/ssr.ts +50 -0
  564. package/src/rsc-runtime/vendor-types.d.ts +7 -0
  565. package/src/{search-params/codecs.ts → schema-bridge.ts} +57 -20
  566. package/src/search-params/define.ts +538 -0
  567. package/src/search-params/index.ts +14 -20
  568. package/src/search-params/registry.ts +2 -2
  569. package/src/search-params/wrappers.ts +92 -0
  570. package/src/segment-params/define.ts +336 -0
  571. package/src/segment-params/index.ts +9 -0
  572. package/src/server/access-gate.tsx +76 -34
  573. package/src/server/action-client.ts +88 -15
  574. package/src/server/action-encryption.ts +144 -0
  575. package/src/server/action-handler.ts +112 -14
  576. package/src/server/actions.ts +10 -9
  577. package/src/server/als-registry.ts +35 -7
  578. package/src/server/asset-headers.ts +8 -34
  579. package/src/server/build-manifest.ts +10 -4
  580. package/src/server/compress.ts +25 -7
  581. package/src/server/cookie-context.ts +468 -0
  582. package/src/server/cookie-parsing.ts +135 -0
  583. package/src/server/debug.ts +1 -1
  584. package/src/server/default-logger.ts +99 -0
  585. package/src/server/deny-boundary.ts +218 -0
  586. package/src/server/deny-renderer.ts +31 -50
  587. package/src/server/dev-source-map.ts +31 -0
  588. package/src/server/early-hints-sender.ts +3 -2
  589. package/src/server/early-hints.ts +36 -15
  590. package/src/server/error-boundary-wrapper.ts +74 -22
  591. package/src/server/fallback-error.ts +74 -102
  592. package/src/server/flight-injection-state.ts +113 -0
  593. package/src/server/flight-scripts.ts +62 -0
  594. package/src/server/flush.ts +2 -1
  595. package/src/server/form-data.ts +76 -0
  596. package/src/server/html-injector-core.ts +403 -0
  597. package/src/server/html-injectors.ts +244 -223
  598. package/src/server/index.ts +31 -184
  599. package/src/server/internal.ts +176 -0
  600. package/src/server/logger.ts +67 -36
  601. package/src/server/middleware-runner.ts +75 -4
  602. package/src/server/node-stream-transforms.ts +369 -0
  603. package/src/server/param-coercion.ts +95 -0
  604. package/src/server/pipeline-helpers.ts +204 -0
  605. package/src/server/pipeline-interception.ts +17 -16
  606. package/src/server/pipeline-metadata.ts +13 -0
  607. package/src/server/pipeline-outcome.ts +176 -0
  608. package/src/server/pipeline-phases.ts +445 -0
  609. package/src/server/pipeline.ts +128 -394
  610. package/src/server/port-resolution.ts +215 -0
  611. package/src/server/primitives.ts +111 -28
  612. package/src/server/render-timeout.ts +108 -0
  613. package/src/server/request-context.ts +88 -339
  614. package/src/server/route-element-builder.ts +297 -193
  615. package/src/server/route-handler.ts +24 -4
  616. package/src/server/route-matcher.ts +44 -65
  617. package/src/server/rsc-entry/action-middleware-runner.ts +167 -0
  618. package/src/server/rsc-entry/api-handler.ts +16 -17
  619. package/src/server/rsc-entry/error-renderer.ts +305 -89
  620. package/src/server/rsc-entry/helpers.ts +136 -12
  621. package/src/server/rsc-entry/index.ts +312 -341
  622. package/src/server/rsc-entry/render-route.ts +307 -0
  623. package/src/server/rsc-entry/rsc-payload.ts +65 -18
  624. package/src/server/rsc-entry/rsc-stream.ts +81 -13
  625. package/src/server/rsc-entry/ssr-bridge.ts +14 -5
  626. package/src/server/rsc-entry/ssr-renderer.ts +171 -38
  627. package/src/server/rsc-entry/wrap-action-dispatch.ts +449 -0
  628. package/src/server/safe-load.ts +60 -0
  629. package/src/server/sensitive-fields.ts +230 -0
  630. package/src/server/sitemap-generator.ts +338 -0
  631. package/src/server/sitemap-handler.ts +126 -0
  632. package/src/server/slot-resolver.ts +245 -230
  633. package/src/server/ssr-entry.ts +215 -32
  634. package/src/server/ssr-render.ts +289 -67
  635. package/src/server/ssr-wrappers.tsx +139 -0
  636. package/src/server/state-tree-diff.ts +4 -1
  637. package/src/server/status-code-resolver.ts +112 -128
  638. package/src/server/stream-utils.ts +213 -0
  639. package/src/server/tracing.ts +21 -10
  640. package/src/server/tree-builder.ts +202 -90
  641. package/src/server/types.ts +55 -6
  642. package/src/server/utils/escape-html.ts +20 -0
  643. package/src/server/version-skew.ts +104 -0
  644. package/src/shared/merge-search-params.ts +55 -0
  645. package/src/shims/font-google.ts +1 -1
  646. package/src/shims/font-local.ts +34 -0
  647. package/src/shims/headers.ts +5 -1
  648. package/src/shims/navigation-client.ts +4 -3
  649. package/src/shims/navigation.ts +14 -7
  650. package/src/utils/state-machine.ts +111 -0
  651. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  652. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  653. package/dist/_chunks/debug-gwlJkDuf.js +0 -108
  654. package/dist/_chunks/debug-gwlJkDuf.js.map +0 -1
  655. package/dist/_chunks/format-DviM89f0.js.map +0 -1
  656. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  657. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  658. package/dist/_chunks/request-context-DIkVh_jG.js +0 -330
  659. package/dist/_chunks/request-context-DIkVh_jG.js.map +0 -1
  660. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  661. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  662. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  663. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  664. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  665. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  666. package/dist/cache/register-cached-function.d.ts +0 -17
  667. package/dist/cache/register-cached-function.d.ts.map +0 -1
  668. package/dist/client/browser-entry.d.ts +0 -21
  669. package/dist/client/browser-entry.d.ts.map +0 -1
  670. package/dist/client/link-status-provider.d.ts +0 -11
  671. package/dist/client/link-status-provider.d.ts.map +0 -1
  672. package/dist/client/transition-root.d.ts.map +0 -1
  673. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  674. package/dist/client/use-params.d.ts.map +0 -1
  675. package/dist/plugins/cache-transform.d.ts +0 -36
  676. package/dist/plugins/cache-transform.d.ts.map +0 -1
  677. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  678. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  679. package/dist/plugins/dev-logs.d.ts.map +0 -1
  680. package/dist/plugins/dynamic-transform.d.ts +0 -72
  681. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  682. package/dist/plugins/server-action-exports.d.ts +0 -26
  683. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  684. package/dist/routing/status-file-lint.d.ts +0 -33
  685. package/dist/routing/status-file-lint.d.ts.map +0 -1
  686. package/dist/search-params/analyze.d.ts +0 -54
  687. package/dist/search-params/analyze.d.ts.map +0 -1
  688. package/dist/search-params/builtin-codecs.d.ts +0 -105
  689. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  690. package/dist/search-params/codecs.d.ts +0 -53
  691. package/dist/search-params/codecs.d.ts.map +0 -1
  692. package/dist/search-params/create.d.ts +0 -106
  693. package/dist/search-params/create.d.ts.map +0 -1
  694. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  695. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  696. package/dist/server/dev-logger.d.ts.map +0 -1
  697. package/dist/server/dev-span-processor.d.ts.map +0 -1
  698. package/dist/server/dev-warnings.d.ts.map +0 -1
  699. package/dist/server/manifest-status-resolver.d.ts +0 -58
  700. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  701. package/dist/server/prerender.d.ts +0 -77
  702. package/dist/server/prerender.d.ts.map +0 -1
  703. package/dist/server/response-cache.d.ts +0 -54
  704. package/dist/server/response-cache.d.ts.map +0 -1
  705. package/dist/utils/directive-parser.d.ts +0 -70
  706. package/dist/utils/directive-parser.d.ts.map +0 -1
  707. package/src/cache/register-cached-function.ts +0 -103
  708. package/src/client/browser-entry.ts +0 -678
  709. package/src/client/link-status-provider.tsx +0 -30
  710. package/src/client/transition-root.tsx +0 -166
  711. package/src/plugins/cache-transform.ts +0 -199
  712. package/src/plugins/dev-error-overlay.ts +0 -230
  713. package/src/plugins/dynamic-transform.ts +0 -161
  714. package/src/plugins/server-action-exports.ts +0 -220
  715. package/src/routing/status-file-lint.ts +0 -112
  716. package/src/search-params/analyze.ts +0 -192
  717. package/src/search-params/builtin-codecs.ts +0 -228
  718. package/src/search-params/create.ts +0 -321
  719. package/src/server/dev-fetch-instrumentation.ts +0 -96
  720. package/src/server/dev-span-processor.ts +0 -78
  721. package/src/server/manifest-status-resolver.ts +0 -215
  722. package/src/server/prerender.ts +0 -139
  723. package/src/server/response-cache.ts +0 -410
  724. package/src/utils/directive-parser.ts +0 -529
  725. /package/src/{server/dev-logger.ts → dev-tools/logger.ts} +0 -0
@@ -9,6 +9,7 @@
9
9
  */
10
10
 
11
11
  import type { RouteContext } from './types.js';
12
+ import { logRouteError } from './logger.js';
12
13
 
13
14
  // ─── Types ───────────────────────────────────────────────────────────────
14
15
 
@@ -122,7 +123,7 @@ async function runHandler(handler: RouteHandler, ctx: RouteContext): Promise<Res
122
123
  const res = await handler(ctx);
123
124
  return mergeResponseHeaders(res, ctx.headers);
124
125
  } catch (error) {
125
- console.error('[timber] Uncaught error in route.ts handler:', error);
126
+ logRouteError({ method: ctx.req.method, path: new URL(ctx.req.url).pathname, error });
126
127
  return new Response(null, { status: 500 });
127
128
  }
128
129
  }
@@ -140,10 +141,29 @@ function mergeResponseHeaders(res: Response, ctxHeaders: Headers): Response {
140
141
  });
141
142
  if (!hasCtxHeaders) return res;
142
143
 
143
- // Merge: ctx.headers first, then handler response headers override
144
+ // Merge: ctx.headers first, then handler response headers override.
145
+ // Set-Cookie needs special handling: Headers.set() replaces all values
146
+ // for a key, but each Set-Cookie must be its own header per RFC 6265 §4.1.
147
+ // Use append for Set-Cookie, set for everything else.
144
148
  const merged = new Headers();
145
- ctxHeaders.forEach((value, key) => merged.set(key, value));
146
- res.headers.forEach((value, key) => merged.set(key, value));
149
+ ctxHeaders.forEach((value, key) => {
150
+ if (key.toLowerCase() === 'set-cookie') {
151
+ merged.append(key, value);
152
+ } else {
153
+ merged.set(key, value);
154
+ }
155
+ });
156
+ // Response Set-Cookie headers: use getSetCookie() to preserve individual
157
+ // cookies (forEach joins them with ", " into one entry).
158
+ const resCookies = res.headers.getSetCookie();
159
+ for (const cookie of resCookies) {
160
+ merged.append('Set-Cookie', cookie);
161
+ }
162
+ res.headers.forEach((value, key) => {
163
+ if (key.toLowerCase() !== 'set-cookie') {
164
+ merged.set(key, value);
165
+ }
166
+ });
147
167
 
148
168
  return new Response(res.body, {
149
169
  status: res.status,
@@ -10,6 +10,7 @@
10
10
 
11
11
  import type { RouteMatch } from './pipeline.js';
12
12
  import type { MiddlewareFn } from './middleware-runner.js';
13
+ import type { SegmentNode, RouteTree } from '../routing/types.js';
13
14
  import {
14
15
  METADATA_ROUTE_CONVENTIONS,
15
16
  isStaticMetadataExtension,
@@ -18,57 +19,40 @@ import {
18
19
  } from './metadata-routes.js';
19
20
 
20
21
  // ─── Manifest Types ───────────────────────────────────────────────────────
21
- // The virtual module manifest has a slightly different shape than SegmentNode:
22
- // file references are { load, filePath } instead of RouteFile.
22
+ //
23
+ // TIM-848: the runtime route manifest re-uses the same `SegmentNode<TFile>`
24
+ // / `RouteTree<TFile>` interfaces from `routing/types.ts`. The only
25
+ // difference between build-time and runtime is the file reference payload
26
+ // — build-time has `{ filePath, extension }`, runtime has `{ filePath, load }`.
27
+ // Walkers parameterized over `TFile` work on either; there is no separate
28
+ // "manifest" tree shape.
23
29
 
24
30
  /** A file reference in the manifest (lazy import + path). */
25
- interface ManifestFile {
31
+ export interface ManifestFile {
26
32
  load: () => Promise<unknown>;
27
33
  filePath: string;
28
34
  }
29
35
 
30
- /** A segment node as it appears in the virtual:timber-route-manifest module. */
31
- export interface ManifestSegmentNode {
32
- segmentName: string;
33
- segmentType:
34
- | 'static'
35
- | 'dynamic'
36
- | 'catch-all'
37
- | 'optional-catch-all'
38
- | 'group'
39
- | 'slot'
40
- | 'intercepting';
41
- urlPath: string;
42
- paramName?: string;
43
- /** For intercepting segments: the marker used, e.g. "(.)". */
44
- interceptionMarker?: '(.)' | '(..)' | '(...)' | '(..)(..)';
45
- /** For intercepting segments: the segment name after stripping the marker. */
46
- interceptedSegmentName?: string;
47
-
48
- page?: ManifestFile;
49
- layout?: ManifestFile;
50
- middleware?: ManifestFile;
51
- access?: ManifestFile;
52
- route?: ManifestFile;
53
- error?: ManifestFile;
54
- default?: ManifestFile;
55
- denied?: ManifestFile;
56
- searchParams?: ManifestFile;
57
- statusFiles?: Record<string, ManifestFile>;
58
- jsonStatusFiles?: Record<string, ManifestFile>;
59
- legacyStatusFiles?: Record<string, ManifestFile>;
60
- prerender?: ManifestFile;
61
- /** Metadata route files (sitemap.ts, robots.ts, icon.tsx, etc.) keyed by base name */
62
- metadataRoutes?: Record<string, ManifestFile>;
63
-
64
- children: ManifestSegmentNode[];
65
- slots: Record<string, ManifestSegmentNode>;
66
- }
36
+ /**
37
+ * A segment node as it appears in the virtual:timber-route-manifest module.
38
+ *
39
+ * Type alias for `SegmentNode<ManifestFile>` — the same shape used by the
40
+ * scanner, only with lazy `load` functions instead of build-time extension
41
+ * metadata.
42
+ */
43
+ export type ManifestSegmentNode = SegmentNode<ManifestFile>;
67
44
 
68
- /** The manifest shape from virtual:timber-route-manifest. */
69
- export interface ManifestRoot {
70
- root: ManifestSegmentNode;
71
- proxy?: ManifestFile;
45
+ /**
46
+ * The manifest shape from virtual:timber-route-manifest.
47
+ *
48
+ * Extends `RouteTree<ManifestFile>` with `viteRoot`, the absolute path
49
+ * to the Vite project root captured at build/load time. Used by dev-only
50
+ * features (e.g., dev error page frame classification) that need a
51
+ * correct project root even when CWD differs (e.g., monorepo custom root).
52
+ * See TIM-807 / TIM-808.
53
+ */
54
+ export interface ManifestRoot extends RouteTree<ManifestFile> {
55
+ viteRoot: string;
72
56
  }
73
57
 
74
58
  // ─── Matcher ──────────────────────────────────────────────────────────────
@@ -102,30 +86,25 @@ function matchPathname(root: ManifestSegmentNode, pathname: string): RouteMatch
102
86
  const matched = matchSegments(root, parts, 0, segments, params);
103
87
  if (!matched) return null;
104
88
 
105
- // Convert ManifestSegmentNodes to the SegmentNode shape expected by RouteMatch.
106
- // The pipeline and tree builder use SegmentNode which has RouteFile references,
107
- // but we pass the manifest nodes directly — they're structurally compatible
108
- // for the fields the pipeline cares about (segments array + params).
109
- // Resolve the leaf segment's middleware.ts if present.
110
- // Only the leaf route's middleware runs — no chain, no inheritance.
111
- const leafSegment = segments[segments.length - 1];
112
- let middleware: MiddlewareFn | undefined;
113
- if (leafSegment?.middleware) {
114
- const loader = leafSegment.middleware.load;
115
- middleware = async (ctx) => {
116
- const mod = (await loader()) as { default?: MiddlewareFn };
117
- if (mod.default) {
118
- return mod.default(ctx);
119
- }
120
- };
89
+ // Collect middleware from all segments in the chain, root to leaf.
90
+ // Each middleware is lazy-loaded via dynamic import on first invocation.
91
+ const middlewareChain: MiddlewareFn[] = [];
92
+ for (const segment of segments) {
93
+ if (segment.middleware) {
94
+ const loader = segment.middleware.load;
95
+ middlewareChain.push(async (ctx) => {
96
+ const mod = (await loader()) as { default?: MiddlewareFn };
97
+ if (mod.default) {
98
+ return mod.default(ctx);
99
+ }
100
+ });
101
+ }
121
102
  }
122
103
 
123
104
  return {
124
- // The pipeline uses segments as opaque objects passed to the renderer.
125
- // Cast is safe — the renderer receives what the manifest provides.
126
- segments: segments as unknown as RouteMatch['segments'],
127
- params,
128
- middleware,
105
+ segments,
106
+ segmentParams: params,
107
+ middlewareChain,
129
108
  };
130
109
  }
131
110
 
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Middleware-on-actions runner — runs the matched route's `middleware.ts`
3
+ * chain for an action POST inside its own `runWithRequestContext` scope
4
+ * and returns a `MiddlewareOutcome` value the dispatcher can translate.
5
+ *
6
+ * Lifted out of `wrap-action-dispatch.ts` (TIM-853) so the dispatcher
7
+ * can be read top-to-bottom without scrolling past the chain runner. The
8
+ * function is intentionally a free function (not a closure over deps)
9
+ * so it can be unit-tested in isolation. It does not import virtual
10
+ * modules and does not call into the action handler — it owns exactly
11
+ * the "run middleware once" step and nothing else.
12
+ *
13
+ * Failure modes are encoded as outcome variants rather than thrown so the
14
+ * caller never has to wrap this in try/catch. The only thrown errors are
15
+ * truly unexpected (programmer bugs) and propagate naturally.
16
+ *
17
+ * See TIM-871 for the full design rationale (closing the
18
+ * CVE-2025-29927-class bug where actions silently bypass middleware).
19
+ */
20
+
21
+ import { getCookiesForSsr, getSetCookieHeaders } from '../cookie-context.js';
22
+ import {
23
+ applyRequestHeaderOverlay,
24
+ runWithRequestContext,
25
+ setMutableCookieContext,
26
+ setSegmentParams,
27
+ } from '../request-context.js';
28
+ import { runMiddlewareChain } from '../middleware-runner.js';
29
+ import { DenySignal, RedirectSignal } from '../primitives.js';
30
+ import { ParamCoercionError } from '../route-element-builder.js';
31
+ import type { RouteMatch } from '../pipeline.js';
32
+ import type { MiddlewareContext } from '../types.js';
33
+
34
+ /** Coerce a matched route's segment params via its `params.ts` codecs. */
35
+ export type CoerceSegmentParamsFn = (match: RouteMatch) => Promise<void>;
36
+
37
+ /**
38
+ * Outcome of running middleware on an action request, surfaced from the
39
+ * inner `runWithRequestContext` scope so the outer dispatcher can convert
40
+ * it to a Response (short-circuit) or continue to the action handler.
41
+ *
42
+ * Each variant carries the post-middleware Set-Cookie snapshot so the
43
+ * outer scope can apply cookies to whichever Response it ultimately
44
+ * returns. The middleware ALS scope ends before the action ALS scope
45
+ * begins, so cookie state must be threaded explicitly across the boundary
46
+ * via `seedRequestCookies` (cookie reads) and `setCookieHeaders` (cookie
47
+ * writes).
48
+ */
49
+ export type MiddlewareOutcome =
50
+ | {
51
+ kind: 'continue';
52
+ overlay: Headers;
53
+ cookies: Map<string, string>;
54
+ setCookieHeaders: string[];
55
+ }
56
+ | {
57
+ kind: 'short-circuit';
58
+ response: Response;
59
+ setCookieHeaders: string[];
60
+ }
61
+ | {
62
+ kind: 'redirect';
63
+ signal: RedirectSignal;
64
+ setCookieHeaders: string[];
65
+ }
66
+ | {
67
+ kind: 'deny';
68
+ signal: DenySignal;
69
+ match: RouteMatch;
70
+ setCookieHeaders: string[];
71
+ }
72
+ | {
73
+ kind: 'param-coercion-error';
74
+ }
75
+ | {
76
+ kind: 'error';
77
+ error: unknown;
78
+ };
79
+
80
+ /**
81
+ * Run the matched route's middleware chain inside a fresh request-context
82
+ * scope, captured as a `MiddlewareOutcome` value the outer dispatcher can
83
+ * translate to a Response or use as the seed for the action handler.
84
+ */
85
+ export async function runMiddlewareForAction(
86
+ req: Request,
87
+ match: RouteMatch,
88
+ coerceSegmentParams: CoerceSegmentParamsFn
89
+ ): Promise<MiddlewareOutcome> {
90
+ return runWithRequestContext(req, async (): Promise<MiddlewareOutcome> => {
91
+ // ─── Coerce segment params (mirrors page pipeline) ──────────────
92
+ try {
93
+ await coerceSegmentParams(match);
94
+ } catch (err) {
95
+ if (err instanceof ParamCoercionError) {
96
+ return { kind: 'param-coercion-error' };
97
+ }
98
+ return { kind: 'error', error: err };
99
+ }
100
+ setSegmentParams(match.segmentParams);
101
+
102
+ // ─── Build the middleware context ───────────────────────────────
103
+ const responseHeaders = new Headers();
104
+ const requestHeaderOverlay = new Headers();
105
+ const ctx: MiddlewareContext = {
106
+ req,
107
+ requestHeaders: requestHeaderOverlay,
108
+ headers: responseHeaders,
109
+ segmentParams: match.segmentParams,
110
+ // 103 Early Hints are a page-render concern — server actions are
111
+ // RPC and never produce HTML, so there is nothing to hint about.
112
+ // Provide a no-op so user middleware can call `ctx.earlyHints()`
113
+ // unconditionally without branching on request kind.
114
+ earlyHints: () => {},
115
+ };
116
+
117
+ // ─── Run the chain ──────────────────────────────────────────────
118
+ setMutableCookieContext(true);
119
+ try {
120
+ let middlewareResponse: Response | undefined;
121
+ try {
122
+ middlewareResponse = await runMiddlewareChain(match.middlewareChain, ctx);
123
+ } catch (err) {
124
+ if (err instanceof RedirectSignal) {
125
+ return {
126
+ kind: 'redirect',
127
+ signal: err,
128
+ setCookieHeaders: getSetCookieHeaders(),
129
+ };
130
+ }
131
+ if (err instanceof DenySignal) {
132
+ return {
133
+ kind: 'deny',
134
+ signal: err,
135
+ match,
136
+ setCookieHeaders: getSetCookieHeaders(),
137
+ };
138
+ }
139
+ return { kind: 'error', error: err };
140
+ }
141
+
142
+ if (middlewareResponse) {
143
+ return {
144
+ kind: 'short-circuit',
145
+ response: middlewareResponse,
146
+ setCookieHeaders: getSetCookieHeaders(),
147
+ };
148
+ }
149
+
150
+ // Middleware passed — apply the request-header overlay to the
151
+ // current scope so any code that might still read it within
152
+ // this scope sees the merged view. The overlay is also captured
153
+ // in the outcome so the caller can re-apply it inside the
154
+ // action's request-context scope (which is a separate ALS run).
155
+ applyRequestHeaderOverlay(requestHeaderOverlay);
156
+
157
+ return {
158
+ kind: 'continue',
159
+ overlay: requestHeaderOverlay,
160
+ cookies: getCookiesForSsr(),
161
+ setCookieHeaders: getSetCookieHeaders(),
162
+ };
163
+ } finally {
164
+ setMutableCookieContext(false);
165
+ }
166
+ });
167
+ }
@@ -6,13 +6,14 @@
6
6
  * See design/04-authorization.md §"Auth in API Routes".
7
7
  */
8
8
 
9
- import { withSpan, setSpanAttribute } from '#/server/tracing.js';
10
- import type { ManifestSegmentNode } from '#/server/route-matcher.js';
11
- import type { RouteMatch } from '#/server/pipeline.js';
12
- import { DenySignal, RedirectSignal } from '#/server/primitives.js';
13
- import { handleRouteRequest } from '#/server/route-handler.js';
14
- import type { RouteModule } from '#/server/route-handler.js';
15
- import type { RouteContext } from '#/server/types.js';
9
+ import { withSpan, setSpanAttribute } from '../tracing.js';
10
+ import type { ManifestSegmentNode } from '../route-matcher.js';
11
+ import { loadModule } from '../safe-load.js';
12
+ import type { RouteMatch } from '../pipeline.js';
13
+ import { DenySignal, RedirectSignal } from '../primitives.js';
14
+ import { handleRouteRequest } from '../route-handler.js';
15
+ import type { RouteModule } from '../route-handler.js';
16
+ import type { RouteContext } from '../types.js';
16
17
 
17
18
  export async function handleApiRoute(
18
19
  req: Request,
@@ -26,10 +27,8 @@ export async function handleApiRoute(
26
27
  // Each access.ts is independent — deny()/redirect() throws a signal.
27
28
  for (const segment of segments) {
28
29
  if (segment.access) {
29
- const accessMod = (await segment.access.load()) as Record<string, unknown>;
30
- const accessFn = accessMod.default as
31
- | ((ctx: { params: Record<string, string | string[]>; searchParams: unknown }) => unknown)
32
- | undefined;
30
+ const accessMod = await loadModule(segment.access);
31
+ const accessFn = accessMod.default as (() => unknown) | undefined;
33
32
  if (accessFn) {
34
33
  try {
35
34
  await withSpan(
@@ -37,7 +36,7 @@ export async function handleApiRoute(
37
36
  { 'timber.segment': segment.segmentName ?? 'unknown' },
38
37
  async () => {
39
38
  try {
40
- await accessFn({ params: match.params, searchParams: {} });
39
+ await accessFn();
41
40
  await setSpanAttribute('timber.result', 'pass');
42
41
  } catch (error) {
43
42
  if (error instanceof DenySignal) {
@@ -68,10 +67,10 @@ export async function handleApiRoute(
68
67
  }
69
68
 
70
69
  // Load route.ts module and dispatch
71
- const routeMod = (await leaf.route!.load()) as RouteModule;
70
+ const routeMod = await loadModule<RouteModule>(leaf.route!);
72
71
  const ctx: RouteContext = {
73
72
  req,
74
- params: match.params,
73
+ params: match.segmentParams,
75
74
  searchParams: new URL(req.url).searchParams,
76
75
  headers: responseHeaders,
77
76
  };
@@ -90,11 +89,11 @@ async function renderApiDeny(
90
89
  segments: ManifestSegmentNode[],
91
90
  responseHeaders: Headers
92
91
  ): Promise<Response> {
93
- const { resolveManifestStatusFile } = await import('#/server/manifest-status-resolver.js');
92
+ const { resolveStatusFile } = await import('../status-code-resolver.js');
94
93
 
95
- const resolution = resolveManifestStatusFile(deny.status, segments, 'json');
94
+ const resolution = resolveStatusFile(deny.status, segments, 'json');
96
95
  if (resolution) {
97
- const mod = (await resolution.file.load()) as Record<string, unknown>;
96
+ const mod = await loadModule(resolution.file);
98
97
  const jsonContent = mod.default ?? mod;
99
98
  responseHeaders.set('content-type', 'application/json; charset=utf-8');
100
99
  return new Response(JSON.stringify(jsonContent), {