@timber-js/app 0.2.0-alpha.20 → 0.2.0-alpha.200

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 (1324) hide show
  1. package/LICENSE +8 -0
  2. package/agent-skill.md +346 -0
  3. package/dist/_chunks/actions-d1hCqnU3.js +345 -0
  4. package/dist/_chunks/actions-d1hCqnU3.js.map +1 -0
  5. package/dist/_chunks/als-registry-C6kcfprT.js +41 -0
  6. package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -0
  7. package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
  8. package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
  9. package/dist/_chunks/base-path-DaQrzbez.js +80 -0
  10. package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
  11. package/dist/_chunks/build-manifest-DTmSGLRz.js +135 -0
  12. package/dist/_chunks/build-manifest-DTmSGLRz.js.map +1 -0
  13. package/dist/_chunks/build-output-helper-9dqCv1pZ.js +370 -0
  14. package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +1 -0
  15. package/dist/_chunks/cache-api-ByagcC-J.js +1149 -0
  16. package/dist/_chunks/cache-api-ByagcC-J.js.map +1 -0
  17. package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
  18. package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
  19. package/dist/_chunks/chains-Bpb0W4ax.js +412 -0
  20. package/dist/_chunks/chains-Bpb0W4ax.js.map +1 -0
  21. package/dist/_chunks/cli-check-D6VolrDV.js +293 -0
  22. package/dist/_chunks/cli-check-D6VolrDV.js.map +1 -0
  23. package/dist/_chunks/cli-schema-sync-D6rO-VcS.js +299 -0
  24. package/dist/_chunks/cli-schema-sync-D6rO-VcS.js.map +1 -0
  25. package/dist/_chunks/cloudflare-BFb__LYG.js +1290 -0
  26. package/dist/_chunks/cloudflare-BFb__LYG.js.map +1 -0
  27. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  28. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  29. package/dist/_chunks/convention-lint-fRkwVwEH.js +893 -0
  30. package/dist/_chunks/convention-lint-fRkwVwEH.js.map +1 -0
  31. package/dist/_chunks/dist-DtrJyBbw.js +386 -0
  32. package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
  33. package/dist/_chunks/error-boundary-BfPHZjm0.js +1050 -0
  34. package/dist/_chunks/error-boundary-BfPHZjm0.js.map +1 -0
  35. package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
  36. package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
  37. package/dist/_chunks/file-cache-Dw6BJPG7.js +458 -0
  38. package/dist/_chunks/file-cache-Dw6BJPG7.js.map +1 -0
  39. package/dist/_chunks/format-BKclgVbk.js +14 -0
  40. package/dist/_chunks/format-BKclgVbk.js.map +1 -0
  41. package/dist/_chunks/fs-identity-D7vb6GdI.js +208 -0
  42. package/dist/_chunks/fs-identity-D7vb6GdI.js.map +1 -0
  43. package/dist/_chunks/graph-cache-CP4GEmf9.js +304 -0
  44. package/dist/_chunks/graph-cache-CP4GEmf9.js.map +1 -0
  45. package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
  46. package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
  47. package/dist/_chunks/json-lossy-check-ClNvBM_3.js +63 -0
  48. package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +1 -0
  49. package/dist/_chunks/live-graph-D_2D32Ad.js +150 -0
  50. package/dist/_chunks/live-graph-D_2D32Ad.js.map +1 -0
  51. package/dist/_chunks/logger-uLBuGKDI.js +1484 -0
  52. package/dist/_chunks/logger-uLBuGKDI.js.map +1 -0
  53. package/dist/_chunks/navigation-context-D0TU0Jog.js +135 -0
  54. package/dist/_chunks/navigation-context-D0TU0Jog.js.map +1 -0
  55. package/dist/_chunks/navigation-root-mHSK9psY.js +126 -0
  56. package/dist/_chunks/navigation-root-mHSK9psY.js.map +1 -0
  57. package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
  58. package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
  59. package/dist/_chunks/plugin-context-8idfR3UZ.js +321 -0
  60. package/dist/_chunks/plugin-context-8idfR3UZ.js.map +1 -0
  61. package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
  62. package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
  63. package/dist/_chunks/poison-scan-Bm9Yyqk9.js +101 -0
  64. package/dist/_chunks/poison-scan-Bm9Yyqk9.js.map +1 -0
  65. package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
  66. package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
  67. package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
  68. package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
  69. package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  70. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
  71. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
  72. package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
  73. package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
  74. package/dist/_chunks/rsc-payload-path-B_LBodc2.js +48 -0
  75. package/dist/_chunks/rsc-payload-path-B_LBodc2.js.map +1 -0
  76. package/dist/_chunks/scan-BoP17W3w.js +140 -0
  77. package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
  78. package/dist/_chunks/scanner-AiazgH_f.js +1771 -0
  79. package/dist/_chunks/scanner-AiazgH_f.js.map +1 -0
  80. package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
  81. package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
  82. package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
  83. package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
  84. package/dist/_chunks/segment-context-D9_89u34.js +34 -0
  85. package/dist/_chunks/segment-context-D9_89u34.js.map +1 -0
  86. package/dist/_chunks/segment-keys-lqtdookO.js +256 -0
  87. package/dist/_chunks/segment-keys-lqtdookO.js.map +1 -0
  88. package/dist/_chunks/singleflight-2lUWfcAk.js +54 -0
  89. package/dist/_chunks/singleflight-2lUWfcAk.js.map +1 -0
  90. package/dist/_chunks/sizeof-lXffQ1Vr.js +35 -0
  91. package/dist/_chunks/sizeof-lXffQ1Vr.js.map +1 -0
  92. package/dist/_chunks/{ssr-data-MjmprTmO.js → ssr-data-D6T6Y3ef.js} +3 -31
  93. package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +1 -0
  94. package/dist/_chunks/state-FippDgxN.js +52 -0
  95. package/dist/_chunks/state-FippDgxN.js.map +1 -0
  96. package/dist/_chunks/status-page-marker-DwQBrLBz.js +496 -0
  97. package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +1 -0
  98. package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
  99. package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
  100. package/dist/_chunks/walkers-B6XUtmqK.js +144 -0
  101. package/dist/_chunks/walkers-B6XUtmqK.js.map +1 -0
  102. package/dist/adapters/build-output-helper.d.ts +72 -0
  103. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  104. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  105. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  106. package/dist/adapters/cloudflare-dev.js +74 -0
  107. package/dist/adapters/cloudflare-dev.js.map +1 -0
  108. package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
  109. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  110. package/dist/adapters/cloudflare-kv-cache.js +123 -0
  111. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  112. package/dist/adapters/cloudflare.d.ts +200 -22
  113. package/dist/adapters/cloudflare.d.ts.map +1 -1
  114. package/dist/adapters/cloudflare.js +2 -188
  115. package/dist/adapters/compress-module.d.ts +17 -4
  116. package/dist/adapters/compress-module.d.ts.map +1 -1
  117. package/dist/adapters/fs-identity.d.ts +64 -0
  118. package/dist/adapters/fs-identity.d.ts.map +1 -0
  119. package/dist/adapters/nitro-presets.d.ts +37 -0
  120. package/dist/adapters/nitro-presets.d.ts.map +1 -0
  121. package/dist/adapters/nitro-preview.d.ts +32 -0
  122. package/dist/adapters/nitro-preview.d.ts.map +1 -0
  123. package/dist/adapters/nitro.d.ts +66 -37
  124. package/dist/adapters/nitro.d.ts.map +1 -1
  125. package/dist/adapters/nitro.js +457 -300
  126. package/dist/adapters/nitro.js.map +1 -1
  127. package/dist/adapters/shared.d.ts +62 -0
  128. package/dist/adapters/shared.d.ts.map +1 -0
  129. package/dist/adapters/types.d.ts +28 -6
  130. package/dist/adapters/types.d.ts.map +1 -1
  131. package/dist/analyze/chains.d.ts +124 -0
  132. package/dist/analyze/chains.d.ts.map +1 -0
  133. package/dist/analyze/classify.d.ts +150 -0
  134. package/dist/analyze/classify.d.ts.map +1 -0
  135. package/dist/analyze/crawl-entry.d.ts +17 -0
  136. package/dist/analyze/crawl-entry.d.ts.map +1 -0
  137. package/dist/analyze/crawl-entry.js +313 -0
  138. package/dist/analyze/crawl-entry.js.map +1 -0
  139. package/dist/analyze/crawl.d.ts +134 -0
  140. package/dist/analyze/crawl.d.ts.map +1 -0
  141. package/dist/analyze/graph-cache.d.ts +104 -0
  142. package/dist/analyze/graph-cache.d.ts.map +1 -0
  143. package/dist/analyze/graph-command.d.ts +43 -0
  144. package/dist/analyze/graph-command.d.ts.map +1 -0
  145. package/dist/analyze/graph-command.js +472 -0
  146. package/dist/analyze/graph-command.js.map +1 -0
  147. package/dist/analyze/live-graph.d.ts +81 -0
  148. package/dist/analyze/live-graph.d.ts.map +1 -0
  149. package/dist/analyze/poison-rules.d.ts +72 -0
  150. package/dist/analyze/poison-rules.d.ts.map +1 -0
  151. package/dist/analyze/poison-scan.d.ts +48 -0
  152. package/dist/analyze/poison-scan.d.ts.map +1 -0
  153. package/dist/analyze/scan.d.ts +73 -0
  154. package/dist/analyze/scan.d.ts.map +1 -0
  155. package/dist/cache/cache-api.d.ts +48 -0
  156. package/dist/cache/cache-api.d.ts.map +1 -0
  157. package/dist/cache/fast-hash.d.ts +5 -0
  158. package/dist/cache/fast-hash.d.ts.map +1 -1
  159. package/dist/cache/handler-store.d.ts +33 -0
  160. package/dist/cache/handler-store.d.ts.map +1 -0
  161. package/dist/cache/index.d.ts +32 -9
  162. package/dist/cache/index.d.ts.map +1 -1
  163. package/dist/cache/index.js +3 -326
  164. package/dist/cache/invalidation-epoch.d.ts +43 -0
  165. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  166. package/dist/cache/json-lossy-check.d.ts +11 -0
  167. package/dist/cache/json-lossy-check.d.ts.map +1 -0
  168. package/dist/cache/redis-handler.d.ts +141 -9
  169. package/dist/cache/redis-handler.d.ts.map +1 -1
  170. package/dist/cache/singleflight.d.ts +21 -2
  171. package/dist/cache/singleflight.d.ts.map +1 -1
  172. package/dist/cache/sizeof.d.ts +22 -0
  173. package/dist/cache/sizeof.d.ts.map +1 -0
  174. package/dist/cache/stable-stringify.d.ts +9 -0
  175. package/dist/cache/stable-stringify.d.ts.map +1 -1
  176. package/dist/cache/store.d.ts +53 -0
  177. package/dist/cache/store.d.ts.map +1 -0
  178. package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
  179. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
  180. package/dist/cache/stores/cloudflare-kv.js +29 -0
  181. package/dist/cache/stores/cloudflare-kv.js.map +1 -0
  182. package/dist/cache/stores/memory.d.ts +42 -0
  183. package/dist/cache/stores/memory.d.ts.map +1 -0
  184. package/dist/cache/stores/memory.js +90 -0
  185. package/dist/cache/stores/memory.js.map +1 -0
  186. package/dist/cache/stores/redis.d.ts +69 -0
  187. package/dist/cache/stores/redis.d.ts.map +1 -0
  188. package/dist/cache/stores/redis.js +35 -0
  189. package/dist/cache/stores/redis.js.map +1 -0
  190. package/dist/cache/stores/vercel.d.ts +36 -0
  191. package/dist/cache/stores/vercel.d.ts.map +1 -0
  192. package/dist/cache/stores/vercel.js +33 -0
  193. package/dist/cache/stores/vercel.js.map +1 -0
  194. package/dist/cache/tag-aware-handler.d.ts +52 -0
  195. package/dist/cache/tag-aware-handler.d.ts.map +1 -0
  196. package/dist/cache/timber-cache.d.ts +21 -11
  197. package/dist/cache/timber-cache.d.ts.map +1 -1
  198. package/dist/cdn/cloudflare-purge.d.ts +23 -0
  199. package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
  200. package/dist/cdn/cloudflare-purge.js +30 -0
  201. package/dist/cdn/cloudflare-purge.js.map +1 -0
  202. package/dist/cdn/fastly-purge.d.ts +25 -0
  203. package/dist/cdn/fastly-purge.d.ts.map +1 -0
  204. package/dist/cdn/fastly-purge.js +33 -0
  205. package/dist/cdn/fastly-purge.js.map +1 -0
  206. package/dist/cdn/headers.d.ts +97 -0
  207. package/dist/cdn/headers.d.ts.map +1 -0
  208. package/dist/cdn/index.d.ts +5 -0
  209. package/dist/cdn/index.d.ts.map +1 -0
  210. package/dist/cdn/index.js +94 -0
  211. package/dist/cdn/index.js.map +1 -0
  212. package/dist/cdn/purge-store.d.ts +23 -0
  213. package/dist/cdn/purge-store.d.ts.map +1 -0
  214. package/dist/cdn/workers-cache-purge.d.ts +20 -0
  215. package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
  216. package/dist/cdn/workers-cache-purge.js +35 -0
  217. package/dist/cdn/workers-cache-purge.js.map +1 -0
  218. package/dist/cli-check.d.ts +163 -0
  219. package/dist/cli-check.d.ts.map +1 -0
  220. package/dist/cli-schema-sync.d.ts +59 -0
  221. package/dist/cli-schema-sync.d.ts.map +1 -0
  222. package/dist/cli.d.ts +75 -8
  223. package/dist/cli.d.ts.map +1 -1
  224. package/dist/cli.js +175 -47
  225. package/dist/cli.js.map +1 -1
  226. package/dist/client/browser-dev.d.ts +37 -1
  227. package/dist/client/browser-dev.d.ts.map +1 -1
  228. package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
  229. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  230. package/dist/client/browser-entry/action-queue.d.ts +44 -0
  231. package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
  232. package/dist/client/browser-entry/hmr.d.ts +21 -0
  233. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  234. package/dist/client/browser-entry/hydrate.d.ts +63 -0
  235. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  236. package/dist/client/browser-entry/index.d.ts +30 -0
  237. package/dist/client/browser-entry/index.d.ts.map +1 -0
  238. package/dist/client/browser-entry/post-hydration.d.ts +29 -0
  239. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  240. package/dist/client/browser-entry/router-init.d.ts +46 -0
  241. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  242. package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
  243. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  244. package/dist/client/browser-entry/scroll.d.ts +28 -0
  245. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  246. package/dist/client/deny-last-resort.d.ts +29 -0
  247. package/dist/client/deny-last-resort.d.ts.map +1 -0
  248. package/dist/client/error-boundary.d.ts +66 -6
  249. package/dist/client/error-boundary.d.ts.map +1 -1
  250. package/dist/client/error-boundary.js +2 -126
  251. package/dist/client/error-reconstituter.d.ts +61 -0
  252. package/dist/client/error-reconstituter.d.ts.map +1 -0
  253. package/dist/client/form.d.ts +16 -27
  254. package/dist/client/form.d.ts.map +1 -1
  255. package/dist/client/global-context.d.ts +15 -0
  256. package/dist/client/global-context.d.ts.map +1 -0
  257. package/dist/client/history.d.ts +50 -9
  258. package/dist/client/history.d.ts.map +1 -1
  259. package/dist/client/index.d.ts +20 -33
  260. package/dist/client/index.d.ts.map +1 -1
  261. package/dist/client/index.js +323 -1148
  262. package/dist/client/index.js.map +1 -1
  263. package/dist/client/internal.d.ts +20 -0
  264. package/dist/client/internal.d.ts.map +1 -0
  265. package/dist/client/internal.js +818 -0
  266. package/dist/client/internal.js.map +1 -0
  267. package/dist/client/link.d.ts +63 -60
  268. package/dist/client/link.d.ts.map +1 -1
  269. package/dist/client/location-search.d.ts +12 -0
  270. package/dist/client/location-search.d.ts.map +1 -0
  271. package/dist/client/navigation-api.d.ts +121 -0
  272. package/dist/client/navigation-api.d.ts.map +1 -0
  273. package/dist/client/navigation-commit.d.ts +98 -0
  274. package/dist/client/navigation-commit.d.ts.map +1 -0
  275. package/dist/client/navigation-context.d.ts +51 -31
  276. package/dist/client/navigation-context.d.ts.map +1 -1
  277. package/dist/client/navigation-root.d.ts +98 -0
  278. package/dist/client/navigation-root.d.ts.map +1 -0
  279. package/dist/client/navigation-transition.d.ts +187 -0
  280. package/dist/client/navigation-transition.d.ts.map +1 -0
  281. package/dist/client/nuqs-adapter.d.ts +1 -1
  282. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  283. package/dist/client/params-context.d.ts +81 -0
  284. package/dist/client/params-context.d.ts.map +1 -0
  285. package/dist/client/react-root.d.ts +44 -0
  286. package/dist/client/react-root.d.ts.map +1 -0
  287. package/dist/client/router-effects.d.ts +130 -0
  288. package/dist/client/router-effects.d.ts.map +1 -0
  289. package/dist/client/router-lifecycle.d.ts +98 -0
  290. package/dist/client/router-lifecycle.d.ts.map +1 -0
  291. package/dist/client/router-pipeline.d.ts +87 -0
  292. package/dist/client/router-pipeline.d.ts.map +1 -0
  293. package/dist/client/router-ref.d.ts +2 -2
  294. package/dist/client/router-ref.d.ts.map +1 -1
  295. package/dist/client/router-skew.d.ts +21 -0
  296. package/dist/client/router-skew.d.ts.map +1 -0
  297. package/dist/client/router-types.d.ts +272 -0
  298. package/dist/client/router-types.d.ts.map +1 -0
  299. package/dist/client/router.d.ts +1 -97
  300. package/dist/client/router.d.ts.map +1 -1
  301. package/dist/client/rsc-fetch.d.ts +104 -26
  302. package/dist/client/rsc-fetch.d.ts.map +1 -1
  303. package/dist/client/segment-cache.d.ts +161 -25
  304. package/dist/client/segment-cache.d.ts.map +1 -1
  305. package/dist/client/segment-context.d.ts.map +1 -1
  306. package/dist/client/segment-outlet.d.ts +68 -0
  307. package/dist/client/segment-outlet.d.ts.map +1 -0
  308. package/dist/client/segment-update-context.d.ts +15 -0
  309. package/dist/client/segment-update-context.d.ts.map +1 -0
  310. package/dist/client/shallow-url.d.ts +10 -0
  311. package/dist/client/shallow-url.d.ts.map +1 -0
  312. package/dist/client/slot-content-cache-context.d.ts +35 -0
  313. package/dist/client/slot-content-cache-context.d.ts.map +1 -0
  314. package/dist/client/slot-context.d.ts +31 -0
  315. package/dist/client/slot-context.d.ts.map +1 -0
  316. package/dist/client/slot-outlet.d.ts +16 -0
  317. package/dist/client/slot-outlet.d.ts.map +1 -0
  318. package/dist/client/slot-provider.d.ts +25 -0
  319. package/dist/client/slot-provider.d.ts.map +1 -0
  320. package/dist/client/ssr-data.d.ts +29 -7
  321. package/dist/client/ssr-data.d.ts.map +1 -1
  322. package/dist/client/stale-client.d.ts +69 -0
  323. package/dist/client/stale-client.d.ts.map +1 -0
  324. package/dist/client/state.d.ts +19 -8
  325. package/dist/client/state.d.ts.map +1 -1
  326. package/dist/client/status-page-marker.d.ts +25 -0
  327. package/dist/client/status-page-marker.d.ts.map +1 -0
  328. package/dist/client/top-loader.d.ts +7 -6
  329. package/dist/client/top-loader.d.ts.map +1 -1
  330. package/dist/client/unload-guard.d.ts +5 -0
  331. package/dist/client/unload-guard.d.ts.map +1 -1
  332. package/dist/client/use-cookie.d.ts +12 -0
  333. package/dist/client/use-cookie.d.ts.map +1 -1
  334. package/dist/client/use-link-status.d.ts +5 -5
  335. package/dist/client/use-link-status.d.ts.map +1 -1
  336. package/dist/client/use-pathname.d.ts +13 -11
  337. package/dist/client/use-pathname.d.ts.map +1 -1
  338. package/dist/client/use-pending-navigation.d.ts +23 -0
  339. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  340. package/dist/client/use-query-states.d.ts +10 -4
  341. package/dist/client/use-query-states.d.ts.map +1 -1
  342. package/dist/client/use-router.d.ts +2 -2
  343. package/dist/client/use-router.d.ts.map +1 -1
  344. package/dist/client/use-search-params.d.ts +15 -8
  345. package/dist/client/use-search-params.d.ts.map +1 -1
  346. package/dist/client/use-segment-params.d.ts +55 -0
  347. package/dist/client/use-segment-params.d.ts.map +1 -0
  348. package/dist/codec.d.ts +69 -0
  349. package/dist/codec.d.ts.map +1 -0
  350. package/dist/codec.js +76 -0
  351. package/dist/codec.js.map +1 -0
  352. package/dist/config-types.d.ts +322 -0
  353. package/dist/config-types.d.ts.map +1 -0
  354. package/dist/config-validation.d.ts +51 -0
  355. package/dist/config-validation.d.ts.map +1 -0
  356. package/dist/cookies/define-cookie.d.ts +58 -25
  357. package/dist/cookies/define-cookie.d.ts.map +1 -1
  358. package/dist/cookies/index.d.ts +3 -2
  359. package/dist/cookies/index.d.ts.map +1 -1
  360. package/dist/cookies/index.js +256 -36
  361. package/dist/cookies/index.js.map +1 -1
  362. package/dist/cookies/json-cookie.d.ts +64 -0
  363. package/dist/cookies/json-cookie.d.ts.map +1 -0
  364. package/dist/cookies/validation.d.ts +34 -0
  365. package/dist/cookies/validation.d.ts.map +1 -0
  366. package/dist/dev-tools/404-page.d.ts +50 -0
  367. package/dist/dev-tools/404-page.d.ts.map +1 -0
  368. package/dist/dev-tools/browser-logs.d.ts +40 -0
  369. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  370. package/dist/dev-tools/dev-page-shell.d.ts +78 -0
  371. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  372. package/dist/dev-tools/error-page.d.ts +32 -0
  373. package/dist/dev-tools/error-page.d.ts.map +1 -0
  374. package/dist/dev-tools/holding-server.d.ts +46 -0
  375. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  376. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  377. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  378. package/dist/dev-tools/index.d.ts +31 -0
  379. package/dist/dev-tools/index.d.ts.map +1 -0
  380. package/dist/dev-tools/instrumentation.d.ts +59 -0
  381. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  382. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  383. package/dist/dev-tools/logger.d.ts.map +1 -0
  384. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
  385. package/dist/dev-tools/logs.d.ts.map +1 -0
  386. package/dist/dev-tools/overlay.d.ts +91 -0
  387. package/dist/dev-tools/overlay.d.ts.map +1 -0
  388. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  389. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  390. package/dist/dev-tools/terminal.d.ts +28 -0
  391. package/dist/dev-tools/terminal.d.ts.map +1 -0
  392. package/dist/fonts/ast-walk.d.ts +68 -0
  393. package/dist/fonts/ast-walk.d.ts.map +1 -0
  394. package/dist/fonts/ast.d.ts +112 -8
  395. package/dist/fonts/ast.d.ts.map +1 -1
  396. package/dist/fonts/bundle.d.ts +50 -0
  397. package/dist/fonts/bundle.d.ts.map +1 -0
  398. package/dist/fonts/css.d.ts +1 -1
  399. package/dist/fonts/dev-middleware.d.ts +22 -0
  400. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  401. package/dist/fonts/fallbacks.d.ts +0 -7
  402. package/dist/fonts/fallbacks.d.ts.map +1 -1
  403. package/dist/fonts/google.d.ts +5 -3
  404. package/dist/fonts/google.d.ts.map +1 -1
  405. package/dist/fonts/local.d.ts +5 -5
  406. package/dist/fonts/local.d.ts.map +1 -1
  407. package/dist/fonts/paths.d.ts +43 -0
  408. package/dist/fonts/paths.d.ts.map +1 -0
  409. package/dist/fonts/pipeline.d.ts +177 -0
  410. package/dist/fonts/pipeline.d.ts.map +1 -0
  411. package/dist/fonts/transform.d.ts +82 -0
  412. package/dist/fonts/transform.d.ts.map +1 -0
  413. package/dist/fonts/types.d.ts +47 -1
  414. package/dist/fonts/types.d.ts.map +1 -1
  415. package/dist/fonts/virtual-modules.d.ts +77 -0
  416. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  417. package/dist/index.d.ts +35 -181
  418. package/dist/index.d.ts.map +1 -1
  419. package/dist/index.js +10461 -14176
  420. package/dist/index.js.map +1 -1
  421. package/dist/params/codec-registry.d.ts +26 -0
  422. package/dist/params/codec-registry.d.ts.map +1 -0
  423. package/dist/params/define-schema.d.ts +81 -0
  424. package/dist/params/define-schema.d.ts.map +1 -0
  425. package/dist/params/index.d.ts +5 -0
  426. package/dist/params/index.d.ts.map +1 -0
  427. package/dist/params/index.js +34 -0
  428. package/dist/params/index.js.map +1 -0
  429. package/dist/params/resolve-schema.d.ts +34 -0
  430. package/dist/params/resolve-schema.d.ts.map +1 -0
  431. package/dist/plugin-context.d.ts +276 -0
  432. package/dist/plugin-context.d.ts.map +1 -0
  433. package/dist/plugins/adapter-build.d.ts +21 -1
  434. package/dist/plugins/adapter-build.d.ts.map +1 -1
  435. package/dist/plugins/build-manifest.d.ts +7 -3
  436. package/dist/plugins/build-manifest.d.ts.map +1 -1
  437. package/dist/plugins/build-report.d.ts +47 -10
  438. package/dist/plugins/build-report.d.ts.map +1 -1
  439. package/dist/plugins/cache.d.ts +64 -0
  440. package/dist/plugins/cache.d.ts.map +1 -0
  441. package/dist/plugins/callsite-ast.d.ts +117 -0
  442. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  443. package/dist/plugins/callsite-jsx.d.ts +35 -0
  444. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  445. package/dist/plugins/chunks.d.ts +11 -4
  446. package/dist/plugins/chunks.d.ts.map +1 -1
  447. package/dist/plugins/client-chunks.d.ts +40 -0
  448. package/dist/plugins/client-chunks.d.ts.map +1 -0
  449. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  450. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  451. package/dist/plugins/content.d.ts +1 -1
  452. package/dist/plugins/content.d.ts.map +1 -1
  453. package/dist/plugins/dev-discovery.d.ts +123 -0
  454. package/dist/plugins/dev-discovery.d.ts.map +1 -0
  455. package/dist/plugins/dev-server.d.ts +17 -1
  456. package/dist/plugins/dev-server.d.ts.map +1 -1
  457. package/dist/plugins/entries.d.ts +28 -4
  458. package/dist/plugins/entries.d.ts.map +1 -1
  459. package/dist/plugins/fonts.d.ts +16 -73
  460. package/dist/plugins/fonts.d.ts.map +1 -1
  461. package/dist/plugins/graph-endpoint.d.ts +112 -0
  462. package/dist/plugins/graph-endpoint.d.ts.map +1 -0
  463. package/dist/plugins/mdx.d.ts +18 -5
  464. package/dist/plugins/mdx.d.ts.map +1 -1
  465. package/dist/plugins/prebuilt-capture.d.ts +60 -0
  466. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  467. package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
  468. package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
  469. package/dist/plugins/prebuilt.d.ts +82 -0
  470. package/dist/plugins/prebuilt.d.ts.map +1 -0
  471. package/dist/plugins/prerender-sugar.d.ts +39 -0
  472. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  473. package/dist/plugins/request-dep/analysis.d.ts +106 -0
  474. package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
  475. package/dist/plugins/request-dep/index.d.ts +75 -0
  476. package/dist/plugins/request-dep/index.d.ts.map +1 -0
  477. package/dist/plugins/request-dep/origin.d.ts +61 -0
  478. package/dist/plugins/request-dep/origin.d.ts.map +1 -0
  479. package/dist/plugins/routing.d.ts +1 -1
  480. package/dist/plugins/routing.d.ts.map +1 -1
  481. package/dist/plugins/server-bundle.d.ts.map +1 -1
  482. package/dist/plugins/shims.d.ts +29 -5
  483. package/dist/plugins/shims.d.ts.map +1 -1
  484. package/dist/plugins/static-build.d.ts +218 -21
  485. package/dist/plugins/static-build.d.ts.map +1 -1
  486. package/dist/routing/codegen-shared.d.ts +26 -0
  487. package/dist/routing/codegen-shared.d.ts.map +1 -0
  488. package/dist/routing/codegen-types.d.ts +61 -0
  489. package/dist/routing/codegen-types.d.ts.map +1 -0
  490. package/dist/routing/codegen-write.d.ts +51 -0
  491. package/dist/routing/codegen-write.d.ts.map +1 -0
  492. package/dist/routing/codegen.d.ts +8 -3
  493. package/dist/routing/codegen.d.ts.map +1 -1
  494. package/dist/routing/collision-probe.d.ts +104 -0
  495. package/dist/routing/collision-probe.d.ts.map +1 -0
  496. package/dist/routing/collision-spaces.d.ts +26 -0
  497. package/dist/routing/collision-spaces.d.ts.map +1 -0
  498. package/dist/routing/convention-lint.d.ts +55 -0
  499. package/dist/routing/convention-lint.d.ts.map +1 -0
  500. package/dist/routing/export-detect.d.ts +72 -0
  501. package/dist/routing/export-detect.d.ts.map +1 -0
  502. package/dist/routing/file-cache.d.ts +8 -0
  503. package/dist/routing/file-cache.d.ts.map +1 -0
  504. package/dist/routing/index.d.ts +13 -7
  505. package/dist/routing/index.d.ts.map +1 -1
  506. package/dist/routing/index.js +5 -2
  507. package/dist/routing/interception-overlap.d.ts +35 -0
  508. package/dist/routing/interception-overlap.d.ts.map +1 -0
  509. package/dist/routing/interception.d.ts +234 -10
  510. package/dist/routing/interception.d.ts.map +1 -1
  511. package/dist/routing/link-codegen.d.ts +105 -0
  512. package/dist/routing/link-codegen.d.ts.map +1 -0
  513. package/dist/routing/manifest-codegen.d.ts +26 -0
  514. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  515. package/dist/routing/scanner.d.ts +14 -10
  516. package/dist/routing/scanner.d.ts.map +1 -1
  517. package/dist/routing/schema-validation.d.ts +35 -0
  518. package/dist/routing/schema-validation.d.ts.map +1 -0
  519. package/dist/routing/segment-classify.d.ts +114 -0
  520. package/dist/routing/segment-classify.d.ts.map +1 -0
  521. package/dist/routing/segment-codegen.d.ts +38 -0
  522. package/dist/routing/segment-codegen.d.ts.map +1 -0
  523. package/dist/routing/segment-keys.d.ts +118 -0
  524. package/dist/routing/segment-keys.d.ts.map +1 -0
  525. package/dist/routing/slot-placement.d.ts +48 -0
  526. package/dist/routing/slot-placement.d.ts.map +1 -0
  527. package/dist/routing/types.d.ts +74 -26
  528. package/dist/routing/types.d.ts.map +1 -1
  529. package/dist/routing/walkers.d.ts +57 -0
  530. package/dist/routing/walkers.d.ts.map +1 -0
  531. package/dist/rsc-runtime/rsc.d.ts +1 -1
  532. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  533. package/dist/rsc-runtime/ssr.d.ts +14 -0
  534. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  535. package/dist/rsc-runtime/transforms.d.ts +13 -0
  536. package/dist/rsc-runtime/transforms.d.ts.map +1 -0
  537. package/dist/schema-bridge.d.ts +145 -0
  538. package/dist/schema-bridge.d.ts.map +1 -0
  539. package/dist/search-params/define.d.ts +262 -0
  540. package/dist/search-params/define.d.ts.map +1 -0
  541. package/dist/search-params/index.d.ts +3 -7
  542. package/dist/search-params/index.d.ts.map +1 -1
  543. package/dist/search-params/index.js +179 -360
  544. package/dist/search-params/index.js.map +1 -1
  545. package/dist/search-params/parse-total.d.ts +81 -0
  546. package/dist/search-params/parse-total.d.ts.map +1 -0
  547. package/dist/search-params/serialize-equal.d.ts +9 -0
  548. package/dist/search-params/serialize-equal.d.ts.map +1 -0
  549. package/dist/search-params/wrappers.d.ts +76 -0
  550. package/dist/search-params/wrappers.d.ts.map +1 -0
  551. package/dist/server/access-gate.d.ts +98 -10
  552. package/dist/server/access-gate.d.ts.map +1 -1
  553. package/dist/server/action-client.d.ts +42 -7
  554. package/dist/server/action-client.d.ts.map +1 -1
  555. package/dist/server/action-encryption.d.ts +76 -0
  556. package/dist/server/action-encryption.d.ts.map +1 -0
  557. package/dist/server/action-handler.d.ts +39 -5
  558. package/dist/server/action-handler.d.ts.map +1 -1
  559. package/dist/server/actions.d.ts +29 -35
  560. package/dist/server/actions.d.ts.map +1 -1
  561. package/dist/server/als-registry.d.ts +117 -13
  562. package/dist/server/als-registry.d.ts.map +1 -1
  563. package/dist/server/asset-headers.d.ts +8 -18
  564. package/dist/server/asset-headers.d.ts.map +1 -1
  565. package/dist/server/body-limits.d.ts.map +1 -1
  566. package/dist/server/build-manifest.d.ts +25 -30
  567. package/dist/server/build-manifest.d.ts.map +1 -1
  568. package/dist/server/canonicalize.d.ts +10 -0
  569. package/dist/server/canonicalize.d.ts.map +1 -1
  570. package/dist/server/chain-url-parts.d.ts +82 -0
  571. package/dist/server/chain-url-parts.d.ts.map +1 -0
  572. package/dist/server/children-interception.d.ts +49 -0
  573. package/dist/server/children-interception.d.ts.map +1 -0
  574. package/dist/server/coalesce-tick.d.ts +40 -0
  575. package/dist/server/coalesce-tick.d.ts.map +1 -0
  576. package/dist/server/compress.d.ts.map +1 -1
  577. package/dist/server/cookie-context.d.ts +170 -0
  578. package/dist/server/cookie-context.d.ts.map +1 -0
  579. package/dist/server/cookie-parsing.d.ts +65 -0
  580. package/dist/server/cookie-parsing.d.ts.map +1 -0
  581. package/dist/server/csp-nonce.d.ts +45 -0
  582. package/dist/server/csp-nonce.d.ts.map +1 -0
  583. package/dist/server/csrf.d.ts +3 -2
  584. package/dist/server/csrf.d.ts.map +1 -1
  585. package/dist/server/default-logger.d.ts +22 -0
  586. package/dist/server/default-logger.d.ts.map +1 -0
  587. package/dist/server/default-status-page.d.ts +45 -0
  588. package/dist/server/default-status-page.d.ts.map +1 -0
  589. package/dist/server/deny-boundary.d.ts +253 -0
  590. package/dist/server/deny-boundary.d.ts.map +1 -0
  591. package/dist/server/deny-renderer.d.ts +20 -9
  592. package/dist/server/deny-renderer.d.ts.map +1 -1
  593. package/dist/server/dev-source-map.d.ts +22 -0
  594. package/dist/server/dev-source-map.d.ts.map +1 -0
  595. package/dist/server/early-hints-sender.d.ts.map +1 -1
  596. package/dist/server/early-hints.d.ts +14 -12
  597. package/dist/server/early-hints.d.ts.map +1 -1
  598. package/dist/server/error-boundary-wrapper.d.ts +101 -10
  599. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  600. package/dist/server/error-response-headers.d.ts +3 -0
  601. package/dist/server/error-response-headers.d.ts.map +1 -0
  602. package/dist/server/fallback-error.d.ts +12 -7
  603. package/dist/server/fallback-error.d.ts.map +1 -1
  604. package/dist/server/flight-injection-state.d.ts +66 -0
  605. package/dist/server/flight-injection-state.d.ts.map +1 -0
  606. package/dist/server/flight-scripts.d.ts +45 -0
  607. package/dist/server/flight-scripts.d.ts.map +1 -0
  608. package/dist/server/form-data.d.ts +41 -0
  609. package/dist/server/form-data.d.ts.map +1 -1
  610. package/dist/server/form-flash.d.ts +1 -1
  611. package/dist/server/head-response.d.ts +35 -0
  612. package/dist/server/head-response.d.ts.map +1 -0
  613. package/dist/server/html-injector-core.d.ts +257 -0
  614. package/dist/server/html-injector-core.d.ts.map +1 -0
  615. package/dist/server/html-injectors.d.ts +84 -42
  616. package/dist/server/html-injectors.d.ts.map +1 -1
  617. package/dist/server/index.d.ts +18 -54
  618. package/dist/server/index.d.ts.map +1 -1
  619. package/dist/server/index.js +195 -2922
  620. package/dist/server/index.js.map +1 -1
  621. package/dist/server/instrumentation.d.ts +1 -1
  622. package/dist/server/internal.d.ts +50 -0
  623. package/dist/server/internal.d.ts.map +1 -0
  624. package/dist/server/internal.js +4034 -0
  625. package/dist/server/internal.js.map +1 -0
  626. package/dist/server/logger.d.ts +39 -7
  627. package/dist/server/logger.d.ts.map +1 -1
  628. package/dist/server/metadata-collector.d.ts +71 -0
  629. package/dist/server/metadata-collector.d.ts.map +1 -0
  630. package/dist/server/metadata-platform.d.ts +2 -2
  631. package/dist/server/metadata-render.d.ts +2 -2
  632. package/dist/server/metadata-render.d.ts.map +1 -1
  633. package/dist/server/metadata-routes.d.ts +60 -11
  634. package/dist/server/metadata-routes.d.ts.map +1 -1
  635. package/dist/server/metadata-social.d.ts +2 -2
  636. package/dist/server/metadata.d.ts +10 -2
  637. package/dist/server/metadata.d.ts.map +1 -1
  638. package/dist/server/middleware-runner.d.ts +20 -5
  639. package/dist/server/middleware-runner.d.ts.map +1 -1
  640. package/dist/server/node-stream-transforms.d.ts +105 -0
  641. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  642. package/dist/server/nuqs-ssr-provider.d.ts +7 -3
  643. package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
  644. package/dist/server/param-coercion.d.ts +78 -0
  645. package/dist/server/param-coercion.d.ts.map +1 -0
  646. package/dist/server/pipeline-helpers.d.ts +77 -0
  647. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  648. package/dist/server/pipeline-interception.d.ts +59 -9
  649. package/dist/server/pipeline-interception.d.ts.map +1 -1
  650. package/dist/server/pipeline-metadata.d.ts +7 -1
  651. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  652. package/dist/server/pipeline-outcome.d.ts +49 -0
  653. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  654. package/dist/server/pipeline-phases.d.ts +70 -0
  655. package/dist/server/pipeline-phases.d.ts.map +1 -0
  656. package/dist/server/pipeline.d.ts +153 -20
  657. package/dist/server/pipeline.d.ts.map +1 -1
  658. package/dist/server/port-resolution.d.ts +31 -0
  659. package/dist/server/port-resolution.d.ts.map +1 -0
  660. package/dist/server/prebuilt/cache-key.d.ts +63 -0
  661. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  662. package/dist/server/prebuilt/capture-state.d.ts +57 -0
  663. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  664. package/dist/server/prebuilt/key-discipline.d.ts +52 -0
  665. package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
  666. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  667. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  668. package/dist/server/prebuilt/overlay.d.ts +100 -0
  669. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  670. package/dist/server/prebuilt/payload-source.d.ts +79 -0
  671. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  672. package/dist/server/prebuilt/slots.d.ts +99 -0
  673. package/dist/server/prebuilt/slots.d.ts.map +1 -0
  674. package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
  675. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  676. package/dist/server/prebuilt-builder.d.ts +121 -0
  677. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  678. package/dist/server/prebuilt-runtime.d.ts +111 -0
  679. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  680. package/dist/server/primitives.d.ts +129 -45
  681. package/dist/server/primitives.d.ts.map +1 -1
  682. package/dist/server/publish-params.d.ts +33 -0
  683. package/dist/server/publish-params.d.ts.map +1 -0
  684. package/dist/server/render-timeout.d.ts +51 -0
  685. package/dist/server/render-timeout.d.ts.map +1 -0
  686. package/dist/server/render-utils.d.ts +26 -0
  687. package/dist/server/render-utils.d.ts.map +1 -0
  688. package/dist/server/request-context.d.ts +111 -107
  689. package/dist/server/request-context.d.ts.map +1 -1
  690. package/dist/server/request-dep.d.ts +15 -0
  691. package/dist/server/request-dep.d.ts.map +1 -0
  692. package/dist/server/response-cache-policy.d.ts +3 -0
  693. package/dist/server/response-cache-policy.d.ts.map +1 -0
  694. package/dist/server/route-element-builder.d.ts +57 -30
  695. package/dist/server/route-element-builder.d.ts.map +1 -1
  696. package/dist/server/route-element-helpers.d.ts +12 -0
  697. package/dist/server/route-element-helpers.d.ts.map +1 -0
  698. package/dist/server/route-handler.d.ts +1 -1
  699. package/dist/server/route-handler.d.ts.map +1 -1
  700. package/dist/server/route-matcher.d.ts +40 -38
  701. package/dist/server/route-matcher.d.ts.map +1 -1
  702. package/dist/server/route-module-loader.d.ts +37 -0
  703. package/dist/server/route-module-loader.d.ts.map +1 -0
  704. package/dist/server/rsc-cache-key-guard.d.ts +78 -0
  705. package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
  706. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  707. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  708. package/dist/server/rsc-entry/api-handler.d.ts +12 -3
  709. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  710. package/dist/server/rsc-entry/deny-fallback.d.ts +29 -0
  711. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
  712. package/dist/server/rsc-entry/error-renderer.d.ts +38 -13
  713. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  714. package/dist/server/rsc-entry/helpers.d.ts +59 -42
  715. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  716. package/dist/server/rsc-entry/index.d.ts +40 -6
  717. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  718. package/dist/server/rsc-entry/render-route.d.ts +51 -0
  719. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  720. package/dist/server/rsc-entry/revalidate-renderer.d.ts +108 -0
  721. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  722. package/dist/server/rsc-entry/rsc-payload.d.ts +26 -6
  723. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  724. package/dist/server/rsc-entry/rsc-stream.d.ts +33 -3
  725. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  726. package/dist/server/rsc-entry/ssr-bridge.d.ts +5 -1
  727. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  728. package/dist/server/rsc-entry/ssr-renderer.d.ts +37 -5
  729. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  730. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +89 -0
  731. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -0
  732. package/dist/server/rsc-error-envelope.d.ts +11 -0
  733. package/dist/server/rsc-error-envelope.d.ts.map +1 -0
  734. package/dist/server/safe-load.d.ts +46 -0
  735. package/dist/server/safe-load.d.ts.map +1 -0
  736. package/dist/server/sensitive-fields.d.ts +74 -0
  737. package/dist/server/sensitive-fields.d.ts.map +1 -0
  738. package/dist/server/sitemap-generator.d.ts +130 -0
  739. package/dist/server/sitemap-generator.d.ts.map +1 -0
  740. package/dist/server/sitemap-handler.d.ts +22 -0
  741. package/dist/server/sitemap-handler.d.ts.map +1 -0
  742. package/dist/server/skippable-prefix.d.ts +29 -0
  743. package/dist/server/skippable-prefix.d.ts.map +1 -0
  744. package/dist/server/slot-interception.d.ts +80 -0
  745. package/dist/server/slot-interception.d.ts.map +1 -0
  746. package/dist/server/slot-resolver.d.ts +137 -7
  747. package/dist/server/slot-resolver.d.ts.map +1 -1
  748. package/dist/server/slot-subtree-contain.d.ts +54 -0
  749. package/dist/server/slot-subtree-contain.d.ts.map +1 -0
  750. package/dist/server/ssr-bridge-types.d.ts +160 -0
  751. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  752. package/dist/server/ssr-entry.d.ts +1 -43
  753. package/dist/server/ssr-entry.d.ts.map +1 -1
  754. package/dist/server/ssr-render.d.ts +69 -22
  755. package/dist/server/ssr-render.d.ts.map +1 -1
  756. package/dist/server/ssr-wrappers.d.ts +93 -0
  757. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  758. package/dist/server/state-tree-diff.d.ts +44 -9
  759. package/dist/server/state-tree-diff.d.ts.map +1 -1
  760. package/dist/server/static-generator.d.ts +112 -0
  761. package/dist/server/static-generator.d.ts.map +1 -0
  762. package/dist/server/static-not-found.d.ts +52 -0
  763. package/dist/server/static-not-found.d.ts.map +1 -0
  764. package/dist/server/status-code-resolver.d.ts +26 -15
  765. package/dist/server/status-code-resolver.d.ts.map +1 -1
  766. package/dist/server/stream-utils.d.ts +47 -0
  767. package/dist/server/stream-utils.d.ts.map +1 -0
  768. package/dist/server/tracing.d.ts +46 -11
  769. package/dist/server/tracing.d.ts.map +1 -1
  770. package/dist/server/tree-match.d.ts +49 -0
  771. package/dist/server/tree-match.d.ts.map +1 -0
  772. package/dist/server/types.d.ts +88 -7
  773. package/dist/server/types.d.ts.map +1 -1
  774. package/dist/server/utils/element-type.d.ts +50 -0
  775. package/dist/server/utils/element-type.d.ts.map +1 -0
  776. package/dist/server/utils/escape-html.d.ts +14 -0
  777. package/dist/server/utils/escape-html.d.ts.map +1 -0
  778. package/dist/server/utils/mdx-file.d.ts +17 -0
  779. package/dist/server/utils/mdx-file.d.ts.map +1 -0
  780. package/dist/server/version-skew.d.ts +61 -0
  781. package/dist/server/version-skew.d.ts.map +1 -0
  782. package/dist/server/workers-cache-bridge.d.ts +26 -0
  783. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  784. package/dist/shared/als-slots.d.ts +42 -0
  785. package/dist/shared/als-slots.d.ts.map +1 -0
  786. package/dist/shared/base-path.d.ts +56 -0
  787. package/dist/shared/base-path.d.ts.map +1 -0
  788. package/dist/shared/href-validation.d.ts +49 -0
  789. package/dist/shared/href-validation.d.ts.map +1 -0
  790. package/dist/shared/merge-search-params.d.ts +22 -0
  791. package/dist/shared/merge-search-params.d.ts.map +1 -0
  792. package/dist/shared/param-value.d.ts +104 -0
  793. package/dist/shared/param-value.d.ts.map +1 -0
  794. package/dist/shared/payload-root.d.ts +109 -0
  795. package/dist/shared/payload-root.d.ts.map +1 -0
  796. package/dist/shared/redirect-type.d.ts +17 -0
  797. package/dist/shared/redirect-type.d.ts.map +1 -0
  798. package/dist/shared/rsc-cache-key.d.ts +163 -0
  799. package/dist/shared/rsc-cache-key.d.ts.map +1 -0
  800. package/dist/shared/rsc-error-envelope.d.ts +16 -0
  801. package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
  802. package/dist/shared/rsc-manifest.d.ts +28 -0
  803. package/dist/shared/rsc-manifest.d.ts.map +1 -0
  804. package/dist/shared/rsc-media-type.d.ts +52 -0
  805. package/dist/shared/rsc-media-type.d.ts.map +1 -0
  806. package/dist/shared/rsc-payload-path.d.ts +42 -0
  807. package/dist/shared/rsc-payload-path.d.ts.map +1 -0
  808. package/dist/shared/segment-info.d.ts +66 -0
  809. package/dist/shared/segment-info.d.ts.map +1 -0
  810. package/dist/shared/slot-params.d.ts +52 -0
  811. package/dist/shared/slot-params.d.ts.map +1 -0
  812. package/dist/shared/static-platform-files.d.ts +71 -0
  813. package/dist/shared/static-platform-files.d.ts.map +1 -0
  814. package/dist/shared/status-reason-phrase.d.ts +26 -0
  815. package/dist/shared/status-reason-phrase.d.ts.map +1 -0
  816. package/dist/shims/font-google.d.ts +1 -1
  817. package/dist/shims/font-google.d.ts.map +1 -1
  818. package/dist/shims/font-google.js +42 -0
  819. package/dist/shims/font-google.js.map +1 -0
  820. package/dist/shims/font-local.d.ts +26 -0
  821. package/dist/shims/font-local.d.ts.map +1 -0
  822. package/dist/shims/font-local.js +20 -0
  823. package/dist/shims/font-local.js.map +1 -0
  824. package/dist/shims/headers.d.ts +53 -1
  825. package/dist/shims/headers.d.ts.map +1 -1
  826. package/dist/shims/image.d.ts +120 -120
  827. package/dist/shims/image.d.ts.map +1 -1
  828. package/dist/shims/navigation-client.d.ts +25 -12
  829. package/dist/shims/navigation-client.d.ts.map +1 -1
  830. package/dist/shims/navigation-rsc.d.ts +21 -0
  831. package/dist/shims/navigation-rsc.d.ts.map +1 -0
  832. package/dist/shims/navigation.d.ts +10 -5
  833. package/dist/shims/navigation.d.ts.map +1 -1
  834. package/dist/utils/state-machine.d.ts +80 -0
  835. package/dist/utils/state-machine.d.ts.map +1 -0
  836. package/docs/api/30-api-server.mdx +236 -0
  837. package/docs/api/31-api-client.mdx +167 -0
  838. package/docs/api/32-api-cache.mdx +311 -0
  839. package/docs/api/33-api-search-params.mdx +176 -0
  840. package/docs/api/34-api-config.mdx +329 -0
  841. package/docs/api/35-api-typescript.mdx +91 -0
  842. package/docs/api/36-cli.mdx +192 -0
  843. package/docs/learn/00-introduction.mdx +109 -0
  844. package/docs/learn/01-quick-start.mdx +94 -0
  845. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  846. package/docs/learn/03-fetching-data.mdx +211 -0
  847. package/docs/learn/04-access-control.mdx +115 -0
  848. package/docs/learn/05-the-flush-point.mdx +175 -0
  849. package/docs/learn/06-typed-params.mdx +275 -0
  850. package/docs/learn/07-typed-routes.mdx +108 -0
  851. package/docs/learn/08-forms-and-actions.mdx +146 -0
  852. package/docs/learn/09-streaming.mdx +140 -0
  853. package/docs/learn/10-caching.mdx +252 -0
  854. package/docs/learn/11-middleware.mdx +158 -0
  855. package/docs/learn/12-error-handling.mdx +188 -0
  856. package/docs/learn/13-deploying.mdx +287 -0
  857. package/llms.txt +55 -0
  858. package/package.json +117 -30
  859. package/src/adapters/build-output-helper.ts +351 -0
  860. package/src/adapters/cloudflare-dev.ts +183 -0
  861. package/src/adapters/cloudflare-kv-cache.ts +207 -0
  862. package/src/adapters/cloudflare.ts +747 -130
  863. package/src/adapters/compress-module.ts +101 -88
  864. package/src/adapters/fs-identity.ts +156 -0
  865. package/src/adapters/nitro-presets.ts +139 -0
  866. package/src/adapters/nitro-preview.ts +340 -0
  867. package/src/adapters/nitro.ts +249 -426
  868. package/src/adapters/raw-imports.d.ts +5 -0
  869. package/src/adapters/shared.ts +274 -0
  870. package/src/adapters/types.ts +28 -7
  871. package/src/adapters/wrangler.d.ts +7 -0
  872. package/src/analyze/chains.ts +411 -0
  873. package/src/analyze/classify.ts +258 -0
  874. package/src/analyze/crawl-entry.ts +68 -0
  875. package/src/analyze/crawl.ts +500 -0
  876. package/src/analyze/graph-cache.ts +332 -0
  877. package/src/analyze/graph-command.ts +762 -0
  878. package/src/analyze/live-graph.ts +232 -0
  879. package/src/analyze/poison-rules.ts +165 -0
  880. package/src/analyze/poison-scan.ts +162 -0
  881. package/src/analyze/scan.ts +149 -0
  882. package/src/cache/cache-api.ts +107 -0
  883. package/src/cache/fast-hash.ts +5 -0
  884. package/src/cache/handler-store.ts +76 -0
  885. package/src/cache/index.ts +115 -22
  886. package/src/cache/invalidation-epoch.ts +93 -0
  887. package/src/cache/json-lossy-check.ts +75 -0
  888. package/src/cache/redis-handler.ts +198 -20
  889. package/src/cache/singleflight.ts +69 -6
  890. package/src/cache/sizeof.ts +33 -0
  891. package/src/cache/stable-stringify.ts +65 -2
  892. package/src/cache/store.ts +71 -0
  893. package/src/cache/stores/cloudflare-kv.ts +52 -0
  894. package/src/cache/stores/memory.ts +125 -0
  895. package/src/cache/stores/redis.ts +97 -0
  896. package/src/cache/stores/vercel.ts +59 -0
  897. package/src/cache/tag-aware-handler.ts +237 -0
  898. package/src/cache/timber-cache.ts +165 -40
  899. package/src/cdn/cloudflare-purge.ts +50 -0
  900. package/src/cdn/fastly-purge.ts +63 -0
  901. package/src/cdn/headers.ts +153 -0
  902. package/src/cdn/index.ts +23 -0
  903. package/src/cdn/purge-store.ts +34 -0
  904. package/src/cdn/workers-cache-purge.ts +34 -0
  905. package/src/cli-check.ts +507 -0
  906. package/src/cli-schema-sync.ts +401 -0
  907. package/src/cli.ts +262 -55
  908. package/src/client/browser-dev.ts +157 -2
  909. package/src/client/browser-entry/action-dispatch.ts +197 -0
  910. package/src/client/browser-entry/action-queue.ts +90 -0
  911. package/src/client/browser-entry/hmr.ts +70 -0
  912. package/src/client/browser-entry/hydrate.ts +148 -0
  913. package/src/client/browser-entry/index.ts +131 -0
  914. package/src/client/browser-entry/post-hydration.ts +123 -0
  915. package/src/client/browser-entry/router-init.ts +418 -0
  916. package/src/client/browser-entry/rsc-stream.ts +166 -0
  917. package/src/client/browser-entry/scroll.ts +50 -0
  918. package/src/client/deny-last-resort.tsx +54 -0
  919. package/src/client/error-boundary.tsx +316 -40
  920. package/src/client/error-reconstituter.tsx +79 -0
  921. package/src/client/form.tsx +36 -32
  922. package/src/client/global-context.ts +31 -0
  923. package/src/client/history.ts +81 -10
  924. package/src/client/index.ts +89 -53
  925. package/src/client/internal.ts +59 -0
  926. package/src/client/link.tsx +439 -151
  927. package/src/client/location-search.ts +15 -0
  928. package/src/client/navigation-api.ts +347 -0
  929. package/src/client/navigation-commit.ts +295 -0
  930. package/src/client/navigation-context.ts +67 -98
  931. package/src/client/navigation-root.tsx +224 -0
  932. package/src/client/navigation-transition.ts +327 -0
  933. package/src/client/nuqs-adapter.tsx +21 -9
  934. package/src/client/params-context.ts +187 -0
  935. package/src/client/react-root.ts +72 -0
  936. package/src/client/router-effects.ts +228 -0
  937. package/src/client/router-lifecycle.ts +354 -0
  938. package/src/client/router-pipeline.ts +490 -0
  939. package/src/client/router-ref.ts +3 -3
  940. package/src/client/router-skew.ts +30 -0
  941. package/src/client/router-types.ts +294 -0
  942. package/src/client/router.ts +435 -421
  943. package/src/client/rsc-fetch.ts +512 -73
  944. package/src/client/segment-cache.ts +327 -40
  945. package/src/client/segment-context.ts +7 -4
  946. package/src/client/segment-outlet.tsx +96 -0
  947. package/src/client/segment-update-context.ts +23 -0
  948. package/src/client/shallow-url.ts +22 -0
  949. package/src/client/slot-content-cache-context.ts +43 -0
  950. package/src/client/slot-context.ts +50 -0
  951. package/src/client/slot-outlet.tsx +22 -0
  952. package/src/client/slot-provider.tsx +32 -0
  953. package/src/client/ssr-data.ts +30 -9
  954. package/src/client/stale-client.ts +191 -0
  955. package/src/client/state.ts +29 -15
  956. package/src/client/status-page-marker.tsx +32 -0
  957. package/src/client/top-loader.tsx +13 -10
  958. package/src/client/unload-guard.ts +35 -3
  959. package/src/client/use-cookie.ts +70 -18
  960. package/src/client/use-link-status.ts +7 -7
  961. package/src/client/use-pathname.ts +22 -31
  962. package/src/client/use-pending-navigation.ts +40 -0
  963. package/src/client/use-query-states.ts +206 -36
  964. package/src/client/use-router.ts +6 -3
  965. package/src/client/use-search-params.ts +38 -49
  966. package/src/client/use-segment-params.ts +69 -0
  967. package/src/client/use-selected-layout-segment.ts +2 -2
  968. package/src/codec.ts +149 -0
  969. package/src/config-types.ts +322 -0
  970. package/src/config-validation.ts +347 -0
  971. package/src/cookies/define-cookie.ts +222 -53
  972. package/src/cookies/index.ts +13 -2
  973. package/src/cookies/json-cookie.ts +105 -0
  974. package/src/cookies/validation.ts +192 -0
  975. package/src/dev-tools/404-page.ts +286 -0
  976. package/src/dev-tools/browser-logs.ts +55 -0
  977. package/src/dev-tools/dev-page-shell.ts +260 -0
  978. package/src/dev-tools/error-page.ts +331 -0
  979. package/src/dev-tools/holding-server.ts +185 -0
  980. package/src/dev-tools/hydration-overlay.ts +158 -0
  981. package/src/dev-tools/index.ts +83 -0
  982. package/src/dev-tools/instrumentation.ts +213 -0
  983. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  984. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
  985. package/src/dev-tools/overlay.ts +469 -0
  986. package/src/dev-tools/stack-classifier.ts +75 -0
  987. package/src/dev-tools/terminal.ts +182 -0
  988. package/src/fonts/ast-walk.ts +235 -0
  989. package/src/fonts/ast.ts +479 -128
  990. package/src/fonts/bundle.ts +138 -0
  991. package/src/fonts/css.ts +1 -1
  992. package/src/fonts/dev-middleware.ts +85 -0
  993. package/src/fonts/fallbacks.ts +0 -23
  994. package/src/fonts/google.ts +101 -19
  995. package/src/fonts/local.ts +12 -11
  996. package/src/fonts/paths.ts +58 -0
  997. package/src/fonts/pipeline.ts +348 -0
  998. package/src/fonts/transform.ts +311 -0
  999. package/src/fonts/types.ts +52 -1
  1000. package/src/fonts/virtual-modules.ts +179 -0
  1001. package/src/index.ts +486 -377
  1002. package/src/params/codec-registry.ts +34 -0
  1003. package/src/params/define-schema.ts +115 -0
  1004. package/src/params/index.ts +17 -0
  1005. package/src/params/resolve-schema.ts +84 -0
  1006. package/src/plugin-context.ts +503 -0
  1007. package/src/plugins/adapter-build.ts +229 -7
  1008. package/src/plugins/build-manifest.ts +201 -26
  1009. package/src/plugins/build-report.ts +259 -47
  1010. package/src/plugins/cache.ts +243 -0
  1011. package/src/plugins/callsite-ast.ts +472 -0
  1012. package/src/plugins/callsite-jsx.ts +243 -0
  1013. package/src/plugins/chunks.ts +74 -5
  1014. package/src/plugins/client-chunks.ts +185 -0
  1015. package/src/plugins/cloudflare-wasm.ts +141 -0
  1016. package/src/plugins/content.ts +5 -1
  1017. package/src/plugins/dev-discovery.ts +218 -0
  1018. package/src/plugins/dev-server.ts +369 -96
  1019. package/src/plugins/entries.ts +141 -16
  1020. package/src/plugins/fonts.ts +234 -659
  1021. package/src/plugins/graph-endpoint.ts +532 -0
  1022. package/src/plugins/mdx.ts +107 -35
  1023. package/src/plugins/prebuilt-capture.ts +217 -0
  1024. package/src/plugins/prebuilt-options-analysis.ts +175 -0
  1025. package/src/plugins/prebuilt.ts +655 -0
  1026. package/src/plugins/prerender-sugar.ts +320 -0
  1027. package/src/plugins/request-dep/analysis.ts +447 -0
  1028. package/src/plugins/request-dep/index.ts +376 -0
  1029. package/src/plugins/request-dep/origin.ts +310 -0
  1030. package/src/plugins/routing.ts +273 -277
  1031. package/src/plugins/server-bundle.ts +99 -14
  1032. package/src/plugins/shims.ts +259 -97
  1033. package/src/plugins/static-build.ts +708 -66
  1034. package/src/react-canary.d.ts +2 -0
  1035. package/src/routing/codegen-shared.ts +39 -0
  1036. package/src/routing/codegen-types.ts +62 -0
  1037. package/src/routing/codegen-write.ts +141 -0
  1038. package/src/routing/codegen.ts +349 -232
  1039. package/src/routing/collision-probe.ts +438 -0
  1040. package/src/routing/collision-spaces.ts +281 -0
  1041. package/src/routing/convention-lint.ts +623 -0
  1042. package/src/routing/export-detect.ts +448 -0
  1043. package/src/routing/file-cache.ts +23 -0
  1044. package/src/routing/index.ts +16 -7
  1045. package/src/routing/interception-overlap.ts +141 -0
  1046. package/src/routing/interception.ts +1044 -67
  1047. package/src/routing/link-codegen.ts +280 -0
  1048. package/src/routing/manifest-codegen.ts +226 -0
  1049. package/src/routing/scanner.ts +393 -219
  1050. package/src/routing/schema-validation.ts +155 -0
  1051. package/src/routing/segment-classify.ts +280 -0
  1052. package/src/routing/segment-codegen.ts +98 -0
  1053. package/src/routing/segment-keys.ts +186 -0
  1054. package/src/routing/slot-placement.ts +97 -0
  1055. package/src/routing/types.ts +75 -26
  1056. package/src/routing/walkers.ts +98 -0
  1057. package/src/rsc-runtime/rsc.ts +9 -0
  1058. package/src/rsc-runtime/ssr.ts +51 -0
  1059. package/src/rsc-runtime/transforms.ts +13 -0
  1060. package/src/rsc-runtime/vendor-types.d.ts +19 -0
  1061. package/src/schema-bridge.ts +380 -0
  1062. package/src/search-params/define.ts +677 -0
  1063. package/src/search-params/index.ts +14 -20
  1064. package/src/search-params/parse-total.ts +91 -0
  1065. package/src/search-params/serialize-equal.ts +14 -0
  1066. package/src/search-params/wrappers.ts +150 -0
  1067. package/src/server/access-gate.tsx +194 -56
  1068. package/src/server/action-client.ts +122 -31
  1069. package/src/server/action-encryption.ts +144 -0
  1070. package/src/server/action-handler.ts +256 -56
  1071. package/src/server/actions.ts +112 -68
  1072. package/src/server/als-registry.ts +160 -21
  1073. package/src/server/asset-headers.ts +15 -37
  1074. package/src/server/body-limits.ts +10 -2
  1075. package/src/server/build-manifest.ts +33 -57
  1076. package/src/server/canonicalize.ts +6 -3
  1077. package/src/server/chain-url-parts.ts +163 -0
  1078. package/src/server/children-interception.ts +115 -0
  1079. package/src/server/coalesce-tick.ts +75 -0
  1080. package/src/server/compress.ts +43 -8
  1081. package/src/server/cookie-context.ts +484 -0
  1082. package/src/server/cookie-parsing.ts +163 -0
  1083. package/src/server/csp-nonce.ts +70 -0
  1084. package/src/server/csrf.ts +39 -6
  1085. package/src/server/default-logger.ts +99 -0
  1086. package/src/server/default-status-page.ts +88 -0
  1087. package/src/server/deny-boundary.ts +533 -0
  1088. package/src/server/deny-renderer.ts +213 -112
  1089. package/src/server/dev-source-map.ts +31 -0
  1090. package/src/server/early-hints-sender.ts +4 -3
  1091. package/src/server/early-hints.ts +39 -29
  1092. package/src/server/error-boundary-wrapper.ts +181 -44
  1093. package/src/server/error-response-headers.ts +18 -0
  1094. package/src/server/fallback-error.ts +79 -102
  1095. package/src/server/flight-injection-state.ts +113 -0
  1096. package/src/server/flight-scripts.ts +67 -0
  1097. package/src/server/form-data.ts +124 -12
  1098. package/src/server/form-flash.ts +2 -2
  1099. package/src/server/head-response.ts +54 -0
  1100. package/src/server/html-injector-core.ts +512 -0
  1101. package/src/server/html-injectors.ts +272 -255
  1102. package/src/server/index.ts +40 -192
  1103. package/src/server/instrumentation.ts +1 -1
  1104. package/src/server/internal.ts +173 -0
  1105. package/src/server/logger.ts +73 -37
  1106. package/src/server/metadata-collector.ts +174 -0
  1107. package/src/server/metadata-platform.ts +2 -2
  1108. package/src/server/metadata-render.ts +30 -8
  1109. package/src/server/metadata-routes.ts +205 -24
  1110. package/src/server/metadata-social.ts +2 -2
  1111. package/src/server/metadata.ts +23 -2
  1112. package/src/server/middleware-runner.ts +32 -5
  1113. package/src/server/node-stream-transforms.ts +323 -0
  1114. package/src/server/nuqs-ssr-provider.tsx +8 -7
  1115. package/src/server/param-coercion.ts +198 -0
  1116. package/src/server/pipeline-helpers.ts +159 -0
  1117. package/src/server/pipeline-interception.ts +109 -33
  1118. package/src/server/pipeline-metadata.ts +15 -1
  1119. package/src/server/pipeline-outcome.ts +218 -0
  1120. package/src/server/pipeline-phases.ts +606 -0
  1121. package/src/server/pipeline.ts +324 -384
  1122. package/src/server/port-resolution.ts +53 -0
  1123. package/src/server/prebuilt/cache-key.ts +299 -0
  1124. package/src/server/prebuilt/capture-state.ts +89 -0
  1125. package/src/server/prebuilt/key-discipline.ts +122 -0
  1126. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  1127. package/src/server/prebuilt/overlay.ts +256 -0
  1128. package/src/server/prebuilt/payload-source.ts +202 -0
  1129. package/src/server/prebuilt/slots.ts +190 -0
  1130. package/src/server/prebuilt/synthetic-store.ts +122 -0
  1131. package/src/server/prebuilt-builder.ts +804 -0
  1132. package/src/server/prebuilt-runtime.ts +817 -0
  1133. package/src/server/primitives.ts +245 -97
  1134. package/src/server/publish-params.ts +42 -0
  1135. package/src/server/render-timeout.ts +108 -0
  1136. package/src/server/render-utils.ts +35 -0
  1137. package/src/server/request-context.ts +244 -334
  1138. package/src/server/request-dep.ts +37 -0
  1139. package/src/server/response-cache-policy.ts +45 -0
  1140. package/src/server/route-element-builder.ts +508 -355
  1141. package/src/server/route-element-helpers.ts +37 -0
  1142. package/src/server/route-handler.ts +40 -13
  1143. package/src/server/route-matcher.ts +165 -272
  1144. package/src/server/route-module-loader.ts +161 -0
  1145. package/src/server/rsc-cache-key-guard.ts +122 -0
  1146. package/src/server/rsc-entry/action-middleware-runner.ts +174 -0
  1147. package/src/server/rsc-entry/api-handler.ts +78 -34
  1148. package/src/server/rsc-entry/deny-fallback.ts +93 -0
  1149. package/src/server/rsc-entry/error-renderer.ts +373 -95
  1150. package/src/server/rsc-entry/helpers.ts +226 -95
  1151. package/src/server/rsc-entry/index.ts +370 -331
  1152. package/src/server/rsc-entry/render-route.ts +304 -0
  1153. package/src/server/rsc-entry/revalidate-renderer.ts +350 -0
  1154. package/src/server/rsc-entry/rsc-payload.ts +209 -55
  1155. package/src/server/rsc-entry/rsc-stream.ts +151 -26
  1156. package/src/server/rsc-entry/ssr-bridge.ts +18 -5
  1157. package/src/server/rsc-entry/ssr-renderer.ts +311 -60
  1158. package/src/server/rsc-entry/wrap-action-dispatch.ts +186 -0
  1159. package/src/server/rsc-error-envelope.ts +18 -0
  1160. package/src/server/rsc-prop-warnings.ts +1 -1
  1161. package/src/server/safe-load.ts +60 -0
  1162. package/src/server/sensitive-fields.ts +230 -0
  1163. package/src/server/server-only-guard-noop.js +3 -0
  1164. package/src/server/server-timing.ts +1 -1
  1165. package/src/server/sitemap-generator.ts +337 -0
  1166. package/src/server/sitemap-handler.ts +157 -0
  1167. package/src/server/skippable-prefix.ts +172 -0
  1168. package/src/server/slot-interception.ts +168 -0
  1169. package/src/server/slot-resolver.ts +707 -300
  1170. package/src/server/slot-subtree-contain.ts +255 -0
  1171. package/src/server/ssr-bridge-types.ts +165 -0
  1172. package/src/server/ssr-entry.ts +230 -85
  1173. package/src/server/ssr-render.ts +357 -85
  1174. package/src/server/ssr-wrappers.tsx +162 -0
  1175. package/src/server/state-tree-diff.ts +85 -30
  1176. package/src/server/static-generator.ts +715 -0
  1177. package/src/server/static-not-found.ts +134 -0
  1178. package/src/server/status-code-resolver.ts +107 -148
  1179. package/src/server/stream-utils.ts +292 -0
  1180. package/src/server/tracing.ts +128 -16
  1181. package/src/server/tree-match.ts +262 -0
  1182. package/src/server/types.ts +95 -10
  1183. package/src/server/utils/element-type.ts +88 -0
  1184. package/src/server/utils/escape-html.ts +20 -0
  1185. package/src/server/utils/mdx-file.ts +22 -0
  1186. package/src/server/version-skew.ts +104 -0
  1187. package/src/server/waituntil-bridge.ts +1 -1
  1188. package/src/server/workers-cache-bridge.ts +33 -0
  1189. package/src/shared/als-slots.ts +74 -0
  1190. package/src/shared/base-path.ts +80 -0
  1191. package/src/shared/href-validation.ts +159 -0
  1192. package/src/shared/merge-search-params.ts +55 -0
  1193. package/src/shared/param-value.ts +281 -0
  1194. package/src/shared/payload-root.ts +152 -0
  1195. package/src/shared/redirect-type.ts +17 -0
  1196. package/src/shared/rsc-cache-key.ts +269 -0
  1197. package/src/shared/rsc-error-envelope.ts +16 -0
  1198. package/src/shared/rsc-manifest.ts +29 -0
  1199. package/src/shared/rsc-media-type.ts +59 -0
  1200. package/src/shared/rsc-payload-path.ts +45 -0
  1201. package/src/shared/segment-info.ts +67 -0
  1202. package/src/shared/slot-params.ts +109 -0
  1203. package/src/shared/static-platform-files.ts +75 -0
  1204. package/src/shared/status-reason-phrase.ts +61 -0
  1205. package/src/shims/font-google.ts +1 -1
  1206. package/src/shims/font-local.ts +34 -0
  1207. package/src/shims/headers.ts +122 -1
  1208. package/src/shims/navigation-client.ts +36 -32
  1209. package/src/shims/navigation-rsc.ts +47 -0
  1210. package/src/shims/navigation.ts +10 -7
  1211. package/src/utils/state-machine.ts +111 -0
  1212. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  1213. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  1214. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  1215. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  1216. package/dist/_chunks/format-RyoGQL74.js +0 -164
  1217. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  1218. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  1219. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  1220. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js +0 -153
  1221. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  1222. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  1223. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  1224. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  1225. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  1226. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  1227. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  1228. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  1229. package/dist/_chunks/use-query-states-D5KaffOK.js +0 -109
  1230. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  1231. package/dist/adapters/cloudflare.js.map +0 -1
  1232. package/dist/cache/index.js.map +0 -1
  1233. package/dist/cache/register-cached-function.d.ts +0 -17
  1234. package/dist/cache/register-cached-function.d.ts.map +0 -1
  1235. package/dist/client/browser-entry.d.ts +0 -21
  1236. package/dist/client/browser-entry.d.ts.map +0 -1
  1237. package/dist/client/error-boundary.js.map +0 -1
  1238. package/dist/client/head.d.ts +0 -16
  1239. package/dist/client/head.d.ts.map +0 -1
  1240. package/dist/client/link-status-provider.d.ts +0 -11
  1241. package/dist/client/link-status-provider.d.ts.map +0 -1
  1242. package/dist/client/segment-merger.d.ts +0 -119
  1243. package/dist/client/segment-merger.d.ts.map +0 -1
  1244. package/dist/client/stale-reload.d.ts +0 -44
  1245. package/dist/client/stale-reload.d.ts.map +0 -1
  1246. package/dist/client/transition-root.d.ts +0 -74
  1247. package/dist/client/transition-root.d.ts.map +0 -1
  1248. package/dist/client/use-navigation-pending.d.ts +0 -26
  1249. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  1250. package/dist/client/use-params.d.ts +0 -92
  1251. package/dist/client/use-params.d.ts.map +0 -1
  1252. package/dist/content/index.d.ts +0 -11
  1253. package/dist/content/index.d.ts.map +0 -1
  1254. package/dist/content/index.js +0 -2
  1255. package/dist/plugins/cache-transform.d.ts +0 -36
  1256. package/dist/plugins/cache-transform.d.ts.map +0 -1
  1257. package/dist/plugins/dev-error-overlay.d.ts +0 -60
  1258. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  1259. package/dist/plugins/dev-logs.d.ts.map +0 -1
  1260. package/dist/plugins/dynamic-transform.d.ts +0 -72
  1261. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  1262. package/dist/plugins/server-action-exports.d.ts +0 -26
  1263. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  1264. package/dist/routing/status-file-lint.d.ts +0 -33
  1265. package/dist/routing/status-file-lint.d.ts.map +0 -1
  1266. package/dist/search-params/analyze.d.ts +0 -54
  1267. package/dist/search-params/analyze.d.ts.map +0 -1
  1268. package/dist/search-params/builtin-codecs.d.ts +0 -105
  1269. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  1270. package/dist/search-params/codecs.d.ts +0 -53
  1271. package/dist/search-params/codecs.d.ts.map +0 -1
  1272. package/dist/search-params/create.d.ts +0 -106
  1273. package/dist/search-params/create.d.ts.map +0 -1
  1274. package/dist/search-params/registry.d.ts +0 -20
  1275. package/dist/search-params/registry.d.ts.map +0 -1
  1276. package/dist/server/client-module-map.d.ts +0 -47
  1277. package/dist/server/client-module-map.d.ts.map +0 -1
  1278. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  1279. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  1280. package/dist/server/dev-logger.d.ts.map +0 -1
  1281. package/dist/server/dev-span-processor.d.ts +0 -29
  1282. package/dist/server/dev-span-processor.d.ts.map +0 -1
  1283. package/dist/server/dev-warnings.d.ts +0 -129
  1284. package/dist/server/dev-warnings.d.ts.map +0 -1
  1285. package/dist/server/flush.d.ts +0 -74
  1286. package/dist/server/flush.d.ts.map +0 -1
  1287. package/dist/server/manifest-status-resolver.d.ts +0 -58
  1288. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  1289. package/dist/server/prerender.d.ts +0 -77
  1290. package/dist/server/prerender.d.ts.map +0 -1
  1291. package/dist/server/tree-builder.d.ts +0 -126
  1292. package/dist/server/tree-builder.d.ts.map +0 -1
  1293. package/dist/utils/directive-parser.d.ts +0 -70
  1294. package/dist/utils/directive-parser.d.ts.map +0 -1
  1295. package/src/cache/register-cached-function.ts +0 -103
  1296. package/src/client/browser-entry.ts +0 -678
  1297. package/src/client/head.ts +0 -61
  1298. package/src/client/link-status-provider.tsx +0 -30
  1299. package/src/client/segment-merger.ts +0 -339
  1300. package/src/client/stale-reload.ts +0 -87
  1301. package/src/client/transition-root.tsx +0 -166
  1302. package/src/client/use-navigation-pending.ts +0 -38
  1303. package/src/client/use-params.ts +0 -141
  1304. package/src/content/index.ts +0 -13
  1305. package/src/plugins/cache-transform.ts +0 -199
  1306. package/src/plugins/dev-error-overlay.ts +0 -230
  1307. package/src/plugins/dynamic-transform.ts +0 -161
  1308. package/src/plugins/server-action-exports.ts +0 -220
  1309. package/src/routing/status-file-lint.ts +0 -112
  1310. package/src/search-params/analyze.ts +0 -192
  1311. package/src/search-params/builtin-codecs.ts +0 -228
  1312. package/src/search-params/codecs.ts +0 -153
  1313. package/src/search-params/create.ts +0 -321
  1314. package/src/search-params/registry.ts +0 -31
  1315. package/src/server/client-module-map.ts +0 -58
  1316. package/src/server/dev-fetch-instrumentation.ts +0 -96
  1317. package/src/server/dev-span-processor.ts +0 -78
  1318. package/src/server/dev-warnings.ts +0 -283
  1319. package/src/server/flush.ts +0 -182
  1320. package/src/server/manifest-status-resolver.ts +0 -215
  1321. package/src/server/prerender.ts +0 -139
  1322. package/src/server/tree-builder.ts +0 -382
  1323. package/src/shims/server-only-noop.js +0 -6
  1324. package/src/utils/directive-parser.ts +0 -529
@@ -4,24 +4,23 @@
4
4
  * Pipeline stages (in order):
5
5
  * proxy.ts → canonicalize → route match → 103 Early Hints → middleware.ts → render
6
6
  *
7
- * Each stage is a pure function or returns a Response to short-circuit.
8
- * Each request gets a trace ID, structured logging, and OTEL spans.
7
+ * The phase functions live in `pipeline-phases.ts` so each phase can be
8
+ * tested in isolation. The terminal `outcomeToResponse` translator and
9
+ * stateless helpers live in `pipeline-phases.ts` and `pipeline-helpers.ts`
10
+ * respectively. This file owns only the public type surface and the
11
+ * `createPipeline` entry point: trace ID setup, request-context ALS,
12
+ * Server-Timing wrapping, and the activeRequests counter.
9
13
  *
10
14
  * See design/07-routing.md §"Request Lifecycle", design/02-rendering-pipeline.md §"Request Flow",
11
15
  * and design/17-logging.md §"Production Logging"
12
16
  */
13
17
 
14
- import { canonicalize } from './canonicalize.js';
15
- import { runProxy, type ProxyExport } from './proxy.js';
16
- import { runMiddleware, type MiddlewareFn } from './middleware-runner.js';
17
- import { runWithTimingCollector, withTiming, getServerTimingHeader } from './server-timing.js';
18
- import {
19
- runWithRequestContext,
20
- applyRequestHeaderOverlay,
21
- setMutableCookieContext,
22
- getSetCookieHeaders,
23
- markResponseFlushed,
24
- } from './request-context.js';
18
+ import type { CoercedParams } from '../shared/param-value.ts';
19
+ import type { ProxyExport } from './proxy.ts';
20
+ import type { MiddlewareFn } from './middleware-runner.ts';
21
+ import { runWithTimingCollector, getServerTimingHeader } from './server-timing.ts';
22
+ import { wrapResponseWithStreamTiming } from './stream-utils.ts';
23
+ import { runWithRequestContext } from './request-context.ts';
25
24
  import {
26
25
  generateTraceId,
27
26
  runWithTraceId,
@@ -29,34 +28,44 @@ import {
29
28
  replaceTraceId,
30
29
  withSpan,
31
30
  setSpanAttribute,
32
- traceId,
33
- } from './tracing.js';
34
- import {
35
- logRequestReceived,
36
- logRequestCompleted,
37
- logSlowRequest,
38
- logProxyError,
39
- logMiddlewareError,
40
- logMiddlewareShortCircuit,
41
- logRenderError,
42
- } from './logger.js';
43
- import { callOnRequestError } from './instrumentation.js';
44
- import { RedirectSignal, DenySignal } from './primitives.js';
45
- import { serveStaticMetadataFile, serializeSitemap } from './pipeline-metadata.js';
46
- import { findInterceptionMatch } from './pipeline-interception.js';
47
- import type { MiddlewareContext } from './types.js';
48
- import type { SegmentNode } from '#/routing/types.js';
31
+ } from './tracing.ts';
32
+ import { logRequestReceived, logRequestCompleted, logSlowRequest } from './logger.ts';
33
+ import { DenySignal } from './primitives.ts';
34
+ import type { ManifestSegmentNode } from './route-matcher.ts';
35
+ import { makeProxyResolver } from './pipeline-helpers.ts';
36
+ import { handleRequest, runProxyPhase } from './pipeline-phases.ts';
37
+ import { outcomeToResponse } from './pipeline-outcome.ts';
38
+ import { canonicalize } from './canonicalize.ts';
39
+ import { enforceRscCacheKey, hardenRscPayloadResponse } from './rsc-cache-key-guard.ts';
40
+ import { stripHeadBody } from './head-response.ts';
41
+ import { RSC_KEY_HEADERS } from '../shared/rsc-cache-key.ts';
42
+ import { isDebug } from './debug.ts';
49
43
 
50
44
  // ─── Route Match Result ────────────────────────────────────────────────────
51
45
 
52
- /** Result of matching a canonical pathname against the route tree. */
46
+ /**
47
+ * Result of matching a canonical pathname against the route tree.
48
+ *
49
+ * `segments` is the runtime (`ManifestFile`-specialized) shape — the same
50
+ * nodes carried in the virtual route manifest. TIM-863 unified this: the
51
+ * matcher produces `ManifestSegmentNode[]` directly and every consumer
52
+ * (render, slots, params coercion, early hints, deny fallback) sees the
53
+ * same structural type with no `as unknown as` laundering.
54
+ */
53
55
  export interface RouteMatch {
54
56
  /** The matched segment chain from root to leaf. */
55
- segments: SegmentNode[];
56
- /** Extracted route params (catch-all segments produce string[]). */
57
- params: Record<string, string | string[]>;
58
- /** The leaf segment's middleware.ts export, if any. */
59
- middleware?: MiddlewareFn;
57
+ segments: ManifestSegmentNode[];
58
+ /** Extracted segment params (catch-all segments produce string[]). Post-coercion, values may be non-string (TIM-1347). */
59
+ segmentParams: CoercedParams;
60
+ /**
61
+ * Raw segment params before codec coercion. Always string or string[].
62
+ * Used by slot resolution to reconstruct URL parts — coerced params may
63
+ * have been transformed by codecs and are unsuitable for URL matching.
64
+ * Set by the pipeline before coercion runs.
65
+ */
66
+ rawSegmentParams?: Record<string, string | string[]>;
67
+ /** Middleware chain from the segment tree, ordered root-to-leaf. */
68
+ middlewareChain: MiddlewareFn[];
60
69
  }
61
70
 
62
71
  /** Function that matches a canonical pathname to a route. */
@@ -65,7 +74,7 @@ export type RouteMatcher = (pathname: string) => RouteMatch | null;
65
74
  /** Function that matches a canonical pathname to a metadata route. */
66
75
  export type MetadataRouteMatcher = (
67
76
  pathname: string
68
- ) => import('./route-matcher.js').MetadataRouteMatch | null;
77
+ ) => import('./route-matcher.ts').MetadataRouteMatch | null;
69
78
 
70
79
  /** Context for intercepting route resolution (modal pattern). */
71
80
  export interface InterceptionContext {
@@ -91,11 +100,32 @@ export type EarlyHintsEmitter = (
91
100
 
92
101
  // ─── Pipeline Configuration ────────────────────────────────────────────────
93
102
 
103
+ /**
104
+ * Proxy source — a tagged union so the choice between "already-resolved
105
+ * export" and "lazy HMR-friendly loader" is encoded in the type, not
106
+ * inferred per-request.
107
+ *
108
+ * - `static` — the proxy export is already resolved (production, tests).
109
+ * - `lazy` — a loader is called per-request for HMR freshness (dev).
110
+ *
111
+ * `PipelineConfig.proxy` also accepts a bare `ProxyExport` (a function or
112
+ * function array) as shorthand for the static variant — convenient for tests
113
+ * that construct a `createPipeline` config inline. Omit the field entirely
114
+ * when the app has no `proxy.ts`.
115
+ *
116
+ * See design/07-routing.md §"proxy.ts — Global Middleware".
117
+ */
118
+ export type ProxyConfig =
119
+ | { kind: 'static'; export: ProxyExport }
120
+ | { kind: 'lazy'; loader: () => Promise<{ default: ProxyExport }> };
121
+
94
122
  export interface PipelineConfig {
95
- /** The proxy.ts default export (function or array). Undefined if no proxy.ts. */
96
- proxy?: ProxyExport;
97
- /** Lazy loader for proxy.ts — called per-request so HMR updates take effect. */
98
- proxyLoader?: () => Promise<{ default: ProxyExport }>;
123
+ /**
124
+ * proxy.ts source. Undefined if the app has no proxy.ts. Accepts either a
125
+ * tagged `ProxyConfig` (canonical) or a bare `ProxyExport` as sugar for the
126
+ * static variant.
127
+ */
128
+ proxy?: ProxyConfig | ProxyExport;
99
129
  /** Route matcher — resolves a canonical pathname to a RouteMatch. */
100
130
  matchRoute: RouteMatcher;
101
131
  /** Metadata route matcher — resolves metadata route pathnames (sitemap.xml, robots.txt, etc.) */
@@ -115,7 +145,18 @@ export interface PipelineConfig {
115
145
  * Generated at build time from intercepting route directories.
116
146
  * See design/07-routing.md §"Intercepting Routes"
117
147
  */
118
- interceptionRewrites?: import('#/routing/interception.js').InterceptionRewrite[];
148
+ interceptionRewrites?: import('../routing/interception.ts').InterceptionRewrite[];
149
+ /**
150
+ * Resolver for children-path interceptions — the sibling layout swap.
151
+ *
152
+ * Separate from `matchRoute` because it addresses the owner directory by
153
+ * tree path rather than by pathname, which needs the manifest tree itself.
154
+ * Omitting it disables the `'children'` interception shape and leaves the
155
+ * canonical route rendering, which is the fail-safe outcome.
156
+ *
157
+ * See design/07-routing.md §"Intercepting Routes"
158
+ */
159
+ matchInterceptedRoute?: import('./children-interception.ts').InterceptedRouteMatcher;
119
160
  /**
120
161
  * Control Server-Timing header output.
121
162
  *
@@ -126,6 +167,14 @@ export interface PipelineConfig {
126
167
  * Default: `'total'`.
127
168
  */
128
169
  serverTiming?: 'detailed' | 'total' | false;
170
+ /**
171
+ * Auto-generated sitemap handler. When provided, the pipeline intercepts
172
+ * `/sitemap.xml` and `/sitemap/N.xml` requests and delegates to this
173
+ * function. Returns a Response or null (pass-through to regular routing).
174
+ *
175
+ * See design/16-metadata.md §"Auto-generated Sitemap"
176
+ */
177
+ autoSitemapHandler?: (pathname: string) => Promise<Response | null>;
129
178
  /**
130
179
  * Dev pipeline error callback — called when a pipeline phase (proxy,
131
180
  * middleware, render) catches an unhandled error. Used to wire the error
@@ -134,6 +183,38 @@ export interface PipelineConfig {
134
183
  * Undefined in production — zero overhead.
135
184
  */
136
185
  onPipelineError?: (error: Error, phase: string) => void;
186
+
187
+ /**
188
+ * Dev error handler with RSC debug context — set by the dev server after
189
+ * the RSC entry module is imported. `onPipelineError` resolves debug
190
+ * components from ALS and delegates to this handler.
191
+ *
192
+ * This is a mutable property (not a constructor argument) because the dev
193
+ * server imports the RSC entry module first (which constructs the config),
194
+ * then wires in the overlay handler. Moving the state here (from a
195
+ * module-level `let`) keeps it co-located with the config it belongs to
196
+ * and makes it visible in tests without module-level mutation.
197
+ *
198
+ * Undefined in production — zero overhead.
199
+ */
200
+ devPipelineErrorHandler?: (
201
+ error: Error,
202
+ phase: string,
203
+ debugComponents?: Array<{ name: string; env: string | null; stack: unknown[] | null }>
204
+ ) => void;
205
+
206
+ /**
207
+ * HMR connection options for dev-only HTML pages (dev 404 page, fallback
208
+ * error page) — set by the dev server after the RSC entry module is
209
+ * imported, like `devPipelineErrorHandler`. The RSC environment can't
210
+ * read the Vite server config (separate module graph), so the dev server
211
+ * plumbs the resolved HMR endpoint (protocol/host/port/path/token) here
212
+ * for the pages' auto-reload WebSocket. See TIM-1067.
213
+ *
214
+ * Undefined in production — zero overhead.
215
+ */
216
+ devHmrOptions?: import('../dev-tools/dev-page-shell.ts').DevErrorHmrOptions;
217
+
137
218
  /**
138
219
  * Fallback error renderer — called when a catastrophic error escapes the
139
220
  * render phase. Produces an HTML Response instead of a bare empty 500.
@@ -150,6 +231,51 @@ export interface PipelineConfig {
150
231
  req: Request,
151
232
  responseHeaders: Headers
152
233
  ) => Response | Promise<Response>;
234
+ /**
235
+ * Fallback deny page renderer — called when a DenySignal escapes from
236
+ * middleware or the render phase. Renders the appropriate status-code
237
+ * page (403.tsx, 404.tsx, etc.) instead of returning a bare empty response.
238
+ *
239
+ * If this function throws, the pipeline falls back to a bare
240
+ * `new Response(null, { status: denyStatus })`.
241
+ */
242
+ renderDenyFallback?: (
243
+ deny: DenySignal,
244
+ req: Request,
245
+ responseHeaders: Headers,
246
+ /**
247
+ * The matched route, if available. Provided by both the middleware-stage
248
+ * and render-stage catch blocks (matching runs before middleware). When
249
+ * present, the renderer should resolve the deny status file against the
250
+ * matched chain so colocated `403.tsx`/`4xx.tsx`/`401.json` files are
251
+ * picked up. Falls back to the root-only chain when omitted (e.g. for
252
+ * deny()s thrown before route matching could complete). See TIM-822.
253
+ */
254
+ match?: RouteMatch
255
+ ) => Response | Promise<Response>;
256
+
257
+ /**
258
+ * Server action dispatch — called after proxy.ts runs for POST requests
259
+ * that look like server actions. Returns a Response if the request was
260
+ * handled as an action, or null to fall through to normal routing.
261
+ *
262
+ * `canonicalPath` is the already-decoded canonical pathname — the same
263
+ * value that `handleRequest` and `matchRoute` use. Do NOT re-derive it
264
+ * from `req.url` (which re-encodes).
265
+ *
266
+ * The `reenter` parameter is the full pipeline function (including proxy,
267
+ * ALS, tracing) for the no-JS validation rerender path — the synthetic
268
+ * GET flows through the complete pipeline.
269
+ *
270
+ * Moved into the pipeline (TIM-1213) so proxy.ts runs on action POSTs,
271
+ * matching the design doc contract: "proxy.ts runs on every request,
272
+ * no exclusions."
273
+ */
274
+ dispatchAction?: (
275
+ req: Request,
276
+ canonicalPath: string,
277
+ reenter: (req: Request) => Promise<Response>
278
+ ) => Promise<Response | null>;
153
279
  }
154
280
 
155
281
  // ─── Pipeline ──────────────────────────────────────────────────────────────
@@ -157,26 +283,31 @@ export interface PipelineConfig {
157
283
  /**
158
284
  * Create the request handler from a pipeline configuration.
159
285
  *
160
- * Returns a function that processes an incoming Request through all pipeline stages
161
- * and produces a Response. This is the top-level entry point for the server.
286
+ * Returns a function that processes an incoming Request through all pipeline
287
+ * stages and produces a Response. This is the top-level entry point for the
288
+ * server. The body is intentionally small — phase logic lives in
289
+ * `pipeline-phases.ts`. This function only owns the per-request setup that
290
+ * has to wrap the entire dispatch: trace ID, request context ALS, span
291
+ * scope, Server-Timing header emission, and the active-request counter.
162
292
  */
163
293
  export function createPipeline(config: PipelineConfig): (req: Request) => Promise<Response> {
164
- const {
165
- proxy,
166
- matchRoute,
167
- render,
168
- earlyHints,
169
- stripTrailingSlash = true,
170
- slowRequestMs = 3000,
171
- serverTiming = 'total',
172
- onPipelineError,
173
- } = config;
294
+ // Resolve the proxy source once. The request hot path calls this closure
295
+ // directly with no discriminant check — the branch is taken here during
296
+ // setup. For the lazy variant, `loader()` still runs per-request so HMR
297
+ // continues to re-import the user's proxy.ts.
298
+ const proxyResolver = makeProxyResolver(config.proxy);
299
+ const slowRequestMs = config.slowRequestMs ?? 3000;
300
+ const serverTiming = config.serverTiming ?? 'total';
174
301
 
175
302
  // Concurrent request counter — tracks how many requests are in-flight.
176
303
  // Logged with each request for diagnosing resource contention.
177
304
  let activeRequests = 0;
178
305
 
179
- return async (req: Request): Promise<Response> => {
306
+ // Self-reference for re-entry — the no-JS validation rerender path
307
+ // passes a synthetic GET back through the full pipeline (including
308
+ // proxy, ALS, tracing). The inner closure captures `pipelineFn` by
309
+ // name; by the time it's invoked, the const binding is initialized.
310
+ const pipelineFn = async (req: Request): Promise<Response> => {
180
311
  const url = new URL(req.url);
181
312
  const method = req.method;
182
313
  const path = url.pathname;
@@ -189,7 +320,7 @@ export function createPipeline(config: PipelineConfig): (req: Request) => Promis
189
320
  const traceIdValue = generateTraceId();
190
321
 
191
322
  return runWithTraceId(traceIdValue, async () => {
192
- // Establish request context ALS scope so headers() and cookies() work
323
+ // Establish request context ALS scope so getHeaders() and getCookies() work
193
324
  // throughout the entire request lifecycle (proxy, middleware, render).
194
325
  return runWithRequestContext(req, async () => {
195
326
  // In dev mode, wrap with timing collector for Server-Timing header.
@@ -208,25 +339,143 @@ export function createPipeline(config: PipelineConfig): (req: Request) => Promis
208
339
  replaceTraceId(otelIds.traceId, otelIds.spanId);
209
340
  }
210
341
 
342
+ // Stage 0: Canonicalize URL at the outer boundary — before
343
+ // proxy.ts sees the request. Every layer (proxy, middleware,
344
+ // access, render) must see the same canonical path.
345
+ // See design/07-routing.md §"URL Canonicalization & Security".
346
+ const stripTrailingSlash = config.stripTrailingSlash ?? true;
347
+ const canonResult = canonicalize(url.pathname, stripTrailingSlash);
348
+ if (!canonResult.ok) {
349
+ if (isDebug()) {
350
+ console.warn(
351
+ `[timber] URL canonicalization rejected ${method} ${url.pathname} — responding with ${canonResult.status}\n` +
352
+ ` This usually means the URL contains encoded separators (%2f, %5c),\n` +
353
+ ` null bytes (%00), path traversal (..), or malformed percent-encoding.`
354
+ );
355
+ }
356
+ return new Response(null, { status: canonResult.status });
357
+ }
358
+ const canonicalPath = canonResult.pathname;
359
+
360
+ // Construct a Request with the canonical URL so proxy.ts sees
361
+ // the same path that route matching will use. This prevents
362
+ // auth bypass via /admin/, /%61dmin, etc.
363
+ let canonicalReq = req;
364
+ if (url.pathname !== canonicalPath) {
365
+ const canonicalUrl = new URL(req.url);
366
+ canonicalUrl.pathname = canonicalPath;
367
+ canonicalReq = new Request(canonicalUrl.toString(), req);
368
+ }
369
+
370
+ // Build the inner handler — runs after proxy, before route
371
+ // matching. Checks for server action POSTs and dispatches them
372
+ // without entering the route match → middleware → render chain.
373
+ // Falls through to handleRequest for normal route handling.
374
+ // TIM-1213: action dispatch is now INSIDE the pipeline so
375
+ // proxy.ts runs on every request, including action POSTs.
376
+ const innerHandler = async (): Promise<Response> => {
377
+ if (config.dispatchAction) {
378
+ const actionResult = await config.dispatchAction(
379
+ canonicalReq,
380
+ canonicalPath,
381
+ pipelineFn
382
+ );
383
+ if (actionResult) return actionResult;
384
+ }
385
+ return handleRequest(config, canonicalReq, method, canonicalPath, true);
386
+ };
387
+
211
388
  let result: Response;
212
- if (proxy || config.proxyLoader) {
213
- result = await runProxyPhase(req, method, path);
389
+ if (proxyResolver) {
390
+ const outcome = await runProxyPhase(
391
+ config,
392
+ proxyResolver,
393
+ canonicalReq,
394
+ method,
395
+ canonicalPath,
396
+ innerHandler
397
+ );
398
+ result = await outcomeToResponse(config, outcome, {
399
+ req: canonicalReq,
400
+ method,
401
+ path: canonicalPath,
402
+ });
214
403
  } else {
215
- result = await handleRequest(req, method, path);
404
+ result = await innerHandler();
216
405
  }
217
406
 
218
407
  // Set response status on the root span before it ends —
219
408
  // DevSpanProcessor reads this for tree/summary output.
220
409
  await setSpanAttribute('http.response.status_code', result.status);
221
410
 
411
+ // Vary on exactly the headers the `_rsc` cache key hashes.
412
+ //
413
+ // Those two mechanisms answer the same question — which request
414
+ // headers change this response — so they are the same list, not
415
+ // two lists that happen to agree. A separate hand-written list
416
+ // here drifted from `RSC_KEY_HEADERS` the moment the key set
417
+ // grew, and the drift is invisible: `Vary` is the *fallback*
418
+ // layer, used only when a cache omits the query from its key,
419
+ // which is precisely when nobody is watching (TIM-1268).
420
+ //
421
+ // Why any of it: without `Vary: Accept` a shared cache may serve
422
+ // an RSC Flight payload to a browser expecting HTML, or the
423
+ // reverse (GHSA-wfc6-r584-vfw7, design/13-security.md). The
424
+ // `_rsc` param puts that distinction in the URL, so correctness
425
+ // no longer *depends* on `Vary` — which is opt-in configuration
426
+ // on Cloudflare and CloudFront. `Vary` covers the requests that
427
+ // arrive without the param: a stripped query, a hand-rolled
428
+ // client.
429
+ //
430
+ // It costs no hit rate. Document requests send no `X-Timber-*`
431
+ // header at all, so they collapse to a single cache key; payload
432
+ // requests are already fragmented by these same values via the
433
+ // URL.
434
+ const varyTokens = [...RSC_KEY_HEADERS];
435
+ const existingVary = result.headers.get('Vary');
436
+ const existingTokens = existingVary
437
+ ? existingVary
438
+ .toLowerCase()
439
+ .split(',')
440
+ .map((t) => t.trim())
441
+ : [];
442
+ const newTokens = varyTokens.filter((t) => !existingTokens.includes(t.toLowerCase()));
443
+ if (newTokens.length > 0) {
444
+ result.headers.set(
445
+ 'Vary',
446
+ existingVary ? `${existingVary}, ${newTokens.join(', ')}` : newTokens.join(', ')
447
+ );
448
+ }
449
+
450
+ // A request may only claim an `_rsc` cache key that matches its
451
+ // own headers. The key is predictable by design, so without this
452
+ // a caller could render its own variant under another client's
453
+ // key and have a shared cache store it there (TIM-1268).
454
+ await enforceRscCacheKey(canonicalReq, result);
455
+
456
+ // Flight payloads must never be sniffable into a renderable
457
+ // type — applied at this single exit so every producer is
458
+ // covered, not just the success path (TIM-1268).
459
+ hardenRscPayloadResponse(result);
460
+
461
+ // A HEAD response carries the headers its GET would produce and
462
+ // no content (RFC 9110 §9.3.2). Applied at this single exit so
463
+ // every response shape is covered — page render, API route,
464
+ // metadata route, deny page, error page, proxy short-circuit —
465
+ // rather than per-renderer, where it was missing for page
466
+ // renders entirely (TIM-1324). The render still runs: the
467
+ // headers have to be the ones a GET would have sent.
468
+ result = stripHeadBody(result, method);
469
+
222
470
  // Append Server-Timing header based on configured mode.
223
- // Response.redirect() creates immutable headers, so we must
224
- // ensure mutability before writing Server-Timing.
471
+ // Header mutability is guaranteed by the producer-side clone
472
+ // in `outcomeToResponse` and the metadata-route / auto-sitemap
473
+ // user-handler clones in `handleRequest`, so we can write
474
+ // directly without a runtime probe. See TIM-866.
225
475
  if (serverTiming === 'detailed') {
226
476
  // Detailed: per-phase breakdown (proxy, middleware, render).
227
477
  const timingHeader = getServerTimingHeader();
228
478
  if (timingHeader) {
229
- result = ensureMutableResponse(result);
230
479
  result.headers.set('Server-Timing', timingHeader);
231
480
  }
232
481
  } else if (serverTiming === 'total') {
@@ -234,11 +483,22 @@ export function createPipeline(config: PipelineConfig): (req: Request) => Promis
234
483
  // Prevents information disclosure while giving browser
235
484
  // DevTools useful timing data.
236
485
  const totalMs = Math.round(performance.now() - startTime);
237
- result = ensureMutableResponse(result);
238
486
  result.headers.set('Server-Timing', `total;dur=${totalMs}`);
239
487
  }
240
488
  // serverTiming === false: no header at all
241
489
 
490
+ // Wrap the response body with stream-lifecycle timing when
491
+ // detailed mode is on. Logs firstChunk/lastChunk/maxGap/close
492
+ // on stream close — measures the post-flush stream tail that
493
+ // the Server-Timing header can't capture (TIM-1106).
494
+ if (serverTiming === 'detailed' && result.body) {
495
+ result = new Response(wrapResponseWithStreamTiming(result.body, startTime), {
496
+ status: result.status,
497
+ statusText: result.statusText,
498
+ headers: result.headers,
499
+ });
500
+ }
501
+
242
502
  return result;
243
503
  }
244
504
  );
@@ -262,325 +522,5 @@ export function createPipeline(config: PipelineConfig): (req: Request) => Promis
262
522
  });
263
523
  };
264
524
 
265
- async function runProxyPhase(req: Request, method: string, path: string): Promise<Response> {
266
- try {
267
- // Resolve the proxy export. When a proxyLoader is provided (lazy import),
268
- // it is called per-request so HMR updates in dev take effect immediately.
269
- let proxyExport: ProxyExport;
270
- if (config.proxyLoader) {
271
- const mod = await config.proxyLoader();
272
- proxyExport = mod.default;
273
- } else {
274
- proxyExport = config.proxy!;
275
- }
276
- const proxyFn = () => runProxy(proxyExport, req, () => handleRequest(req, method, path));
277
- return await withSpan('timber.proxy', {}, () =>
278
- serverTiming === 'detailed' ? withTiming('proxy', 'proxy.ts', proxyFn) : proxyFn()
279
- );
280
- } catch (error) {
281
- // Uncaught proxy.ts error → bare HTTP 500
282
- logProxyError({ error });
283
- await fireOnRequestError(error, req, 'proxy');
284
- if (onPipelineError && error instanceof Error) onPipelineError(error, 'proxy');
285
- return new Response(null, { status: 500 });
286
- }
287
- }
288
-
289
- async function handleRequest(req: Request, method: string, path: string): Promise<Response> {
290
- // Stage 1: URL canonicalization
291
- const url = new URL(req.url);
292
- const result = canonicalize(url.pathname, stripTrailingSlash);
293
- if (!result.ok) {
294
- return new Response(null, { status: result.status });
295
- }
296
- const canonicalPathname = result.pathname;
297
-
298
- // Stage 1b: Metadata route matching — runs before regular route matching.
299
- // Metadata routes skip middleware.ts and access.ts (public endpoints for crawlers).
300
- // See design/16-metadata.md §"Pipeline Integration"
301
- if (config.matchMetadataRoute) {
302
- const metaMatch = config.matchMetadataRoute(canonicalPathname);
303
- if (metaMatch) {
304
- try {
305
- // Static metadata files (.xml, .txt, .png, .ico, etc.) are served
306
- // directly from disk. Dynamic metadata routes (.ts, .tsx) export a
307
- // handler function that generates the response.
308
- if (metaMatch.isStatic) {
309
- return await serveStaticMetadataFile(metaMatch);
310
- }
311
-
312
- const mod = (await metaMatch.file.load()) as { default?: Function };
313
- if (typeof mod.default !== 'function') {
314
- return new Response('Metadata route must export a default function', { status: 500 });
315
- }
316
- const handlerResult = await mod.default();
317
- // If the handler returns a Response, use it directly
318
- if (handlerResult instanceof Response) {
319
- return handlerResult;
320
- }
321
- // Otherwise, serialize based on content type
322
- const contentType = metaMatch.contentType;
323
- let body: string;
324
- if (typeof handlerResult === 'string') {
325
- body = handlerResult;
326
- } else if (contentType === 'application/xml') {
327
- body = serializeSitemap(handlerResult);
328
- } else if (contentType === 'application/manifest+json') {
329
- body = JSON.stringify(handlerResult, null, 2);
330
- } else {
331
- body = typeof handlerResult === 'string' ? handlerResult : String(handlerResult);
332
- }
333
- return new Response(body, {
334
- status: 200,
335
- headers: { 'Content-Type': `${contentType}; charset=utf-8` },
336
- });
337
- } catch (error) {
338
- logRenderError({ method, path, error });
339
- if (onPipelineError && error instanceof Error) onPipelineError(error, 'metadata-route');
340
- return new Response(null, { status: 500 });
341
- }
342
- }
343
- }
344
-
345
- // Stage 2: Route matching
346
- let match = matchRoute(canonicalPathname);
347
- let interception: InterceptionContext | undefined;
348
-
349
- // Stage 2a: Intercepting route resolution (modal pattern).
350
- // On soft navigation, check if an intercepting route should render instead.
351
- // The client sends X-Timber-URL with the current pathname (where they're
352
- // navigating FROM). If a rewrite matches, re-route to the source URL so
353
- // the source layout renders with the intercepted content in the slot.
354
- const sourceUrl = req.headers.get('X-Timber-URL');
355
- if (sourceUrl && config.interceptionRewrites?.length) {
356
- const intercepted = findInterceptionMatch(
357
- canonicalPathname,
358
- sourceUrl,
359
- config.interceptionRewrites
360
- );
361
- if (intercepted) {
362
- const sourceMatch = matchRoute(intercepted.sourcePathname);
363
- if (sourceMatch) {
364
- match = sourceMatch;
365
- interception = { targetPathname: canonicalPathname };
366
- }
367
- }
368
- }
369
-
370
- if (!match) {
371
- // No route matched — render 404.tsx in root layout if available,
372
- // otherwise fall back to a bare 404 Response.
373
- if (config.renderNoMatch) {
374
- const responseHeaders = new Headers();
375
- return config.renderNoMatch(req, responseHeaders);
376
- }
377
- return new Response(null, { status: 404 });
378
- }
379
-
380
- // Response and request header containers — created before early hints so
381
- // the emitter can append Link headers (e.g. for Cloudflare CDN → 103).
382
- const responseHeaders = new Headers();
383
- const requestHeaderOverlay = new Headers();
384
-
385
- // Set Cache-Control for dynamic HTML responses. Without this header,
386
- // CDNs (particularly Cloudflare) may attempt to buffer/process the
387
- // response differently, causing intermittent multi-second delays.
388
- // This matches Next.js's default behavior.
389
- responseHeaders.set('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');
390
-
391
- // Stage 2b: 103 Early Hints (before middleware, after match)
392
- // Fires before middleware so the browser can begin fetching critical
393
- // assets while middleware runs. Non-fatal — a failing emitter never
394
- // blocks the request.
395
- if (earlyHints) {
396
- try {
397
- await earlyHints(match, req, responseHeaders);
398
- } catch {
399
- // Early hints failure is non-fatal
400
- }
401
- }
402
-
403
- // Stage 3: Leaf middleware.ts (only the leaf route's middleware runs)
404
- if (match.middleware) {
405
- const ctx: MiddlewareContext = {
406
- req,
407
- requestHeaders: requestHeaderOverlay,
408
- headers: responseHeaders,
409
- params: match.params,
410
- searchParams: new URL(req.url).searchParams,
411
- earlyHints: (hints) => {
412
- for (const hint of hints) {
413
- let value = `<${hint.href}>; rel=${hint.rel}`;
414
- if (hint.as !== undefined) value += `; as=${hint.as}`;
415
- if (hint.crossOrigin !== undefined) value += `; crossorigin=${hint.crossOrigin}`;
416
- if (hint.fetchPriority !== undefined) value += `; fetchpriority=${hint.fetchPriority}`;
417
- responseHeaders.append('Link', value);
418
- }
419
- },
420
- };
421
-
422
- try {
423
- // Enable cookie mutation during middleware (design/29-cookies.md §"Context Tracking")
424
- setMutableCookieContext(true);
425
- const middlewareFn = () => runMiddleware(match.middleware!, ctx);
426
- const middlewareResponse = await withSpan('timber.middleware', {}, () =>
427
- serverTiming === 'detailed'
428
- ? withTiming('mw', 'middleware.ts', middlewareFn)
429
- : middlewareFn()
430
- );
431
- setMutableCookieContext(false);
432
- if (middlewareResponse) {
433
- // Apply cookie jar to short-circuit response.
434
- // Response.redirect() creates immutable headers, so ensure
435
- // mutability before appending Set-Cookie entries.
436
- const finalResponse = ensureMutableResponse(middlewareResponse);
437
- applyCookieJar(finalResponse.headers);
438
- logMiddlewareShortCircuit({ method, path, status: finalResponse.status });
439
- return finalResponse;
440
- }
441
- // Middleware succeeded without short-circuiting — apply any
442
- // injected request headers so headers() returns them downstream.
443
- applyRequestHeaderOverlay(requestHeaderOverlay);
444
- } catch (error) {
445
- setMutableCookieContext(false);
446
- // RedirectSignal from middleware → HTTP redirect (not an error).
447
- // For RSC payload requests (client navigation), return 204 + X-Timber-Redirect
448
- // so the client router can perform a soft SPA redirect. A raw 302 would be
449
- // turned into an opaque redirect by fetch({redirect:'manual'}), crashing
450
- // createFromFetch. See design/19-client-navigation.md.
451
- if (error instanceof RedirectSignal) {
452
- applyCookieJar(responseHeaders);
453
- const isRsc = (req.headers.get('Accept') ?? '').includes('text/x-component');
454
- if (isRsc) {
455
- responseHeaders.set('X-Timber-Redirect', error.location);
456
- return new Response(null, { status: 204, headers: responseHeaders });
457
- }
458
- responseHeaders.set('Location', error.location);
459
- return new Response(null, { status: error.status, headers: responseHeaders });
460
- }
461
- // DenySignal from middleware → HTTP deny status
462
- if (error instanceof DenySignal) {
463
- return new Response(null, { status: error.status });
464
- }
465
- // Middleware throw → HTTP 500 (middleware runs before rendering,
466
- // no error boundary to catch it)
467
- logMiddlewareError({ method, path, error });
468
- await fireOnRequestError(error, req, 'handler');
469
- if (onPipelineError && error instanceof Error) onPipelineError(error, 'middleware');
470
- return new Response(null, { status: 500 });
471
- }
472
- }
473
-
474
- // Apply cookie jar to response headers before render commits them.
475
- // Middleware may have set cookies; they need to be on responseHeaders
476
- // before flushResponse creates the Response object.
477
- applyCookieJar(responseHeaders);
478
-
479
- // Stage 4: Render (access gates + element tree + renderToReadableStream)
480
- try {
481
- const renderFn = () =>
482
- render(req, match, responseHeaders, requestHeaderOverlay, interception);
483
- const response = await withSpan('timber.render', { 'http.route': canonicalPathname }, () =>
484
- serverTiming === 'detailed'
485
- ? withTiming('render', 'RSC + SSR render', renderFn)
486
- : renderFn()
487
- );
488
- markResponseFlushed();
489
- return response;
490
- } catch (error) {
491
- // DenySignal leaked from render (e.g. notFound() in metadata()).
492
- // Return the deny status code instead of 500.
493
- if (error instanceof DenySignal) {
494
- return new Response(null, { status: error.status });
495
- }
496
- // RedirectSignal leaked from render — honour the redirect.
497
- // For RSC payload requests, return 204 + X-Timber-Redirect so the
498
- // client router can perform a soft SPA redirect (same as middleware path).
499
- if (error instanceof RedirectSignal) {
500
- const isRsc = (req.headers.get('Accept') ?? '').includes('text/x-component');
501
- if (isRsc) {
502
- responseHeaders.set('X-Timber-Redirect', error.location);
503
- return new Response(null, { status: 204, headers: responseHeaders });
504
- }
505
- responseHeaders.set('Location', error.location);
506
- return new Response(null, { status: error.status, headers: responseHeaders });
507
- }
508
- logRenderError({ method, path, error });
509
- await fireOnRequestError(error, req, 'render');
510
- if (onPipelineError && error instanceof Error) onPipelineError(error, 'render');
511
- // Try fallback error page before bare 500
512
- if (config.renderFallbackError) {
513
- try {
514
- return await config.renderFallbackError(error, req, responseHeaders);
515
- } catch {
516
- // Fallback rendering itself failed — fall through to bare 500
517
- }
518
- }
519
- return new Response(null, { status: 500 });
520
- }
521
- }
522
- }
523
-
524
- /**
525
- * Fire the user's onRequestError hook with request context.
526
- * Extracts request info from the Request object and calls the instrumentation hook.
527
- */
528
- async function fireOnRequestError(
529
- error: unknown,
530
- req: Request,
531
- phase: 'proxy' | 'handler' | 'render' | 'action' | 'route'
532
- ): Promise<void> {
533
- const url = new URL(req.url);
534
- const headersObj: Record<string, string> = {};
535
- req.headers.forEach((v, k) => {
536
- headersObj[k] = v;
537
- });
538
-
539
- await callOnRequestError(
540
- error,
541
- { method: req.method, path: url.pathname, headers: headersObj },
542
- { phase, routePath: url.pathname, routeType: 'page', traceId: traceId() }
543
- );
544
- }
545
-
546
- // ─── Cookie Helpers ──────────────────────────────────────────────────────
547
-
548
- /**
549
- * Apply all Set-Cookie headers from the cookie jar to a Headers object.
550
- * Each cookie gets its own Set-Cookie header per RFC 6265 §4.1.
551
- */
552
- function applyCookieJar(headers: Headers): void {
553
- for (const value of getSetCookieHeaders()) {
554
- headers.append('Set-Cookie', value);
555
- }
556
- }
557
-
558
- // ─── Immutable Response Helpers ──────────────────────────────────────────
559
-
560
- /**
561
- * Ensure a Response has mutable headers so the pipeline can safely append
562
- * Set-Cookie and Server-Timing entries.
563
- *
564
- * `Response.redirect()` and some platform-level responses return objects
565
- * with immutable headers. Calling `.set()` or `.append()` on them throws
566
- * `TypeError: immutable`. This helper detects the immutable case by
567
- * attempting a no-op write and, on failure, clones into a fresh Response
568
- * with mutable headers.
569
- */
570
- function ensureMutableResponse(response: Response): Response {
571
- try {
572
- // Probe mutability with a benign operation that we immediately undo.
573
- // We pick a header name that is extremely unlikely to collide with
574
- // anything meaningful and delete it right away.
575
- response.headers.set('X-Timber-Probe', '1');
576
- response.headers.delete('X-Timber-Probe');
577
- return response;
578
- } catch {
579
- // Headers are immutable — rebuild with mutable headers.
580
- return new Response(response.body, {
581
- status: response.status,
582
- statusText: response.statusText,
583
- headers: new Headers(response.headers),
584
- });
585
- }
525
+ return pipelineFn;
586
526
  }