@timber-js/app 0.2.0-alpha.19 → 0.2.0-alpha.190

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