@rangojs/router 0.0.0-experimental.80 → 0.0.0-experimental.80daa23e

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 (1717) hide show
  1. package/AGENTS.md +8 -4
  2. package/README.md +318 -791
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +927 -273
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types/__internal.d.ts +127 -0
  749. package/dist/types/bin/rango.d.ts +1 -0
  750. package/dist/types/browser/action-coordinator.d.ts +57 -0
  751. package/dist/types/browser/action-fence.d.ts +33 -0
  752. package/dist/types/browser/app-shell.d.ts +34 -0
  753. package/dist/types/browser/app-version.d.ts +6 -0
  754. package/dist/types/browser/connection-warmup.d.ts +31 -0
  755. package/dist/types/browser/cookie-name.d.ts +66 -0
  756. package/dist/types/browser/dev-discovery.d.ts +11 -0
  757. package/dist/types/browser/event-controller.d.ts +231 -0
  758. package/dist/types/browser/history-state.d.ts +26 -0
  759. package/dist/types/browser/index.d.ts +1 -0
  760. package/dist/types/browser/intercept-utils.d.ts +30 -0
  761. package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
  762. package/dist/types/browser/link-interceptor.d.ts +53 -0
  763. package/dist/types/browser/logging.d.ts +33 -0
  764. package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
  765. package/dist/types/browser/navigation-bridge.d.ts +39 -0
  766. package/dist/types/browser/navigation-client.d.ts +17 -0
  767. package/dist/types/browser/navigation-store-handle.d.ts +25 -0
  768. package/dist/types/browser/navigation-store.d.ts +85 -0
  769. package/dist/types/browser/navigation-transaction.d.ts +75 -0
  770. package/dist/types/browser/network-error-handler.d.ts +35 -0
  771. package/dist/types/browser/notify-listeners.d.ts +2 -0
  772. package/dist/types/browser/partial-update.d.ts +61 -0
  773. package/dist/types/browser/prefetch/cache.d.ts +224 -0
  774. package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
  775. package/dist/types/browser/prefetch/fetch.d.ts +52 -0
  776. package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
  777. package/dist/types/browser/prefetch/loader.d.ts +12 -0
  778. package/dist/types/browser/prefetch/observer.d.ts +24 -0
  779. package/dist/types/browser/prefetch/policy.d.ts +13 -0
  780. package/dist/types/browser/prefetch/queue.d.ts +48 -0
  781. package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
  782. package/dist/types/browser/prefetch/runtime.d.ts +2 -0
  783. package/dist/types/browser/rango-state.d.ts +56 -0
  784. package/dist/types/browser/react/Link.d.ts +132 -0
  785. package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
  786. package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
  787. package/dist/types/browser/react/context.d.ts +57 -0
  788. package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
  789. package/dist/types/browser/react/index.d.ts +1 -0
  790. package/dist/types/browser/react/location-state-shared.d.ts +162 -0
  791. package/dist/types/browser/react/location-state.d.ts +29 -0
  792. package/dist/types/browser/react/mount-context.d.ts +23 -0
  793. package/dist/types/browser/react/nonce-context.d.ts +14 -0
  794. package/dist/types/browser/react/shallow-equal.d.ts +5 -0
  795. package/dist/types/browser/react/use-action.d.ts +61 -0
  796. package/dist/types/browser/react/use-handle.d.ts +21 -0
  797. package/dist/types/browser/react/use-href.d.ts +32 -0
  798. package/dist/types/browser/react/use-link-status.d.ts +36 -0
  799. package/dist/types/browser/react/use-mount.d.ts +24 -0
  800. package/dist/types/browser/react/use-navigation.d.ts +15 -0
  801. package/dist/types/browser/react/use-params.d.ts +21 -0
  802. package/dist/types/browser/react/use-pathname.d.ts +13 -0
  803. package/dist/types/browser/react/use-reverse.d.ts +40 -0
  804. package/dist/types/browser/react/use-router.d.ts +30 -0
  805. package/dist/types/browser/react/use-search-params.d.ts +66 -0
  806. package/dist/types/browser/react/use-segments.d.ts +29 -0
  807. package/dist/types/browser/response-adapter.d.ts +58 -0
  808. package/dist/types/browser/rsc-router.d.ts +146 -0
  809. package/dist/types/browser/scroll-restoration.d.ts +103 -0
  810. package/dist/types/browser/segment-reconciler.d.ts +74 -0
  811. package/dist/types/browser/segment-structure-assert.d.ts +16 -0
  812. package/dist/types/browser/server-action-bridge.d.ts +29 -0
  813. package/dist/types/browser/types.d.ts +546 -0
  814. package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
  815. package/dist/types/build/collect-fallback-refs.d.ts +5 -0
  816. package/dist/types/build/generate-manifest.d.ts +106 -0
  817. package/dist/types/build/generate-route-types.d.ts +8 -0
  818. package/dist/types/build/index.d.ts +21 -0
  819. package/dist/types/build/merge-full-manifests.d.ts +3 -0
  820. package/dist/types/build/prefix-tree-utils.d.ts +56 -0
  821. package/dist/types/build/route-trie.d.ts +20 -0
  822. package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
  823. package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
  824. package/dist/types/build/route-types/codegen.d.ts +16 -0
  825. package/dist/types/build/route-types/include-resolution.d.ts +74 -0
  826. package/dist/types/build/route-types/param-extraction.d.ts +13 -0
  827. package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
  828. package/dist/types/build/route-types/router-processing.d.ts +81 -0
  829. package/dist/types/build/route-types/scan-filter.d.ts +17 -0
  830. package/dist/types/build/route-types/source-scan.d.ts +13 -0
  831. package/dist/types/build/runtime-discovery.d.ts +24 -0
  832. package/dist/types/cache/background-task.d.ts +21 -0
  833. package/dist/types/cache/cache-error.d.ts +71 -0
  834. package/dist/types/cache/cache-exec-scope.d.ts +31 -0
  835. package/dist/types/cache/cache-key-utils.d.ts +43 -0
  836. package/dist/types/cache/cache-policy.d.ts +59 -0
  837. package/dist/types/cache/cache-runtime.d.ts +51 -0
  838. package/dist/types/cache/cache-scope.d.ts +215 -0
  839. package/dist/types/cache/cache-tag.d.ts +79 -0
  840. package/dist/types/cache/cf/cf-base64.d.ts +4 -0
  841. package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
  842. package/dist/types/cache/cf/cf-cache-store.d.ts +630 -0
  843. package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
  844. package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
  845. package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
  846. package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
  847. package/dist/types/cache/cf/index.d.ts +4 -0
  848. package/dist/types/cache/document-cache.d.ts +71 -0
  849. package/dist/types/cache/handle-capture.d.ts +23 -0
  850. package/dist/types/cache/handle-snapshot.d.ts +39 -0
  851. package/dist/types/cache/index.d.ts +9 -0
  852. package/dist/types/cache/memory-segment-store.d.ts +163 -0
  853. package/dist/types/cache/profile-registry.d.ts +40 -0
  854. package/dist/types/cache/read-through-swr.d.ts +61 -0
  855. package/dist/types/cache/search-params-filter.d.ts +64 -0
  856. package/dist/types/cache/segment-codec.d.ts +78 -0
  857. package/dist/types/cache/shell-snapshot.d.ts +186 -0
  858. package/dist/types/cache/tag-invalidation.d.ts +74 -0
  859. package/dist/types/cache/taint.d.ts +77 -0
  860. package/dist/types/cache/types.d.ts +522 -0
  861. package/dist/types/cache/vercel/index.d.ts +1 -0
  862. package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
  863. package/dist/types/client-urls/client-root.d.ts +38 -0
  864. package/dist/types/client-urls/client-urls.d.ts +5 -0
  865. package/dist/types/client-urls/navigation.d.ts +38 -0
  866. package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
  867. package/dist/types/client-urls/server-projection.d.ts +71 -0
  868. package/dist/types/client-urls/types.d.ts +148 -0
  869. package/dist/types/client.d.ts +192 -0
  870. package/dist/types/client.rsc.d.ts +42 -0
  871. package/dist/types/cloudflare/index.d.ts +7 -0
  872. package/dist/types/cloudflare/tracing.d.ts +57 -0
  873. package/dist/types/component-utils.d.ts +46 -0
  874. package/dist/types/components/DefaultDocument.d.ts +13 -0
  875. package/dist/types/context-var.d.ts +84 -0
  876. package/dist/types/debug.d.ts +57 -0
  877. package/dist/types/decode-loader-results.d.ts +42 -0
  878. package/dist/types/default-error-boundary.d.ts +10 -0
  879. package/dist/types/defer.d.ts +89 -0
  880. package/dist/types/deps/browser.d.ts +1 -0
  881. package/dist/types/deps/html-stream-client.d.ts +1 -0
  882. package/dist/types/deps/html-stream-server.d.ts +1 -0
  883. package/dist/types/deps/rsc.d.ts +1 -0
  884. package/dist/types/deps/ssr.d.ts +1 -0
  885. package/dist/types/dev-discovery-protocol.d.ts +5 -0
  886. package/dist/types/encode-kv.d.ts +35 -0
  887. package/dist/types/errors.d.ts +227 -0
  888. package/dist/types/escape-script.d.ts +44 -0
  889. package/dist/types/handle.d.ts +93 -0
  890. package/dist/types/handles/MetaTags.d.ts +17 -0
  891. package/dist/types/handles/Scripts.d.ts +38 -0
  892. package/dist/types/handles/breadcrumbs.d.ts +43 -0
  893. package/dist/types/handles/deferred-resolution.d.ts +53 -0
  894. package/dist/types/handles/is-thenable.d.ts +10 -0
  895. package/dist/types/handles/meta.d.ts +43 -0
  896. package/dist/types/handles/script.d.ts +139 -0
  897. package/dist/types/host/cookie-handler.d.ts +8 -0
  898. package/dist/types/host/errors.d.ts +40 -0
  899. package/dist/types/host/index.d.ts +33 -0
  900. package/dist/types/host/pattern-matcher.d.ts +30 -0
  901. package/dist/types/host/router.d.ts +12 -0
  902. package/dist/types/host/testing.d.ts +41 -0
  903. package/dist/types/host/types.d.ts +148 -0
  904. package/dist/types/host/utils.d.ts +20 -0
  905. package/dist/types/href-client.d.ts +214 -0
  906. package/dist/types/index.d.ts +113 -0
  907. package/dist/types/index.rsc.d.ts +52 -0
  908. package/dist/types/internal-debug.d.ts +1 -0
  909. package/dist/types/loader-redirect.d.ts +27 -0
  910. package/dist/types/loader-store.d.ts +193 -0
  911. package/dist/types/loader.d.ts +18 -0
  912. package/dist/types/loader.rsc.d.ts +18 -0
  913. package/dist/types/missing-id-error.d.ts +1 -0
  914. package/dist/types/outlet-context.d.ts +32 -0
  915. package/dist/types/outlet-provider.d.ts +15 -0
  916. package/dist/types/prerender/build-shell-capture.d.ts +104 -0
  917. package/dist/types/prerender/param-hash.d.ts +6 -0
  918. package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
  919. package/dist/types/prerender/store.d.ts +63 -0
  920. package/dist/types/prerender.d.ts +292 -0
  921. package/dist/types/redirect-origin.d.ts +71 -0
  922. package/dist/types/regex-escape.d.ts +6 -0
  923. package/dist/types/render-error-thrower.d.ts +13 -0
  924. package/dist/types/response-utils.d.ts +35 -0
  925. package/dist/types/reverse.d.ts +206 -0
  926. package/dist/types/root-error-boundary.d.ts +32 -0
  927. package/dist/types/route-content-wrapper.d.ts +84 -0
  928. package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
  929. package/dist/types/route-definition/helper-factories.d.ts +22 -0
  930. package/dist/types/route-definition/helpers-types.d.ts +405 -0
  931. package/dist/types/route-definition/index.d.ts +7 -0
  932. package/dist/types/route-definition/redirect.d.ts +48 -0
  933. package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
  934. package/dist/types/route-definition/use-item-types.d.ts +1 -0
  935. package/dist/types/route-definition.d.ts +1 -0
  936. package/dist/types/route-map-builder.d.ts +102 -0
  937. package/dist/types/route-name.d.ts +27 -0
  938. package/dist/types/route-types.d.ts +172 -0
  939. package/dist/types/router/basename.d.ts +10 -0
  940. package/dist/types/router/content-negotiation.d.ts +91 -0
  941. package/dist/types/router/debug-manifest.d.ts +7 -0
  942. package/dist/types/router/error-handling.d.ts +110 -0
  943. package/dist/types/router/find-match.d.ts +19 -0
  944. package/dist/types/router/handler-context.d.ts +41 -0
  945. package/dist/types/router/instrument.d.ts +191 -0
  946. package/dist/types/router/intercept-resolution.d.ts +91 -0
  947. package/dist/types/router/lazy-includes.d.ts +26 -0
  948. package/dist/types/router/loader-resolution.d.ts +85 -0
  949. package/dist/types/router/logging.d.ts +41 -0
  950. package/dist/types/router/manifest.d.ts +8 -0
  951. package/dist/types/router/match-api.d.ts +19 -0
  952. package/dist/types/router/match-context.d.ts +184 -0
  953. package/dist/types/router/match-handlers.d.ts +48 -0
  954. package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
  955. package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
  956. package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
  957. package/dist/types/router/match-middleware/index.d.ts +80 -0
  958. package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
  959. package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
  960. package/dist/types/router/match-pipelines.d.ts +103 -0
  961. package/dist/types/router/match-result.d.ts +114 -0
  962. package/dist/types/router/metrics.d.ts +6 -0
  963. package/dist/types/router/middleware-types.d.ts +74 -0
  964. package/dist/types/router/middleware.d.ts +116 -0
  965. package/dist/types/router/navigation-snapshot.d.ts +51 -0
  966. package/dist/types/router/params-util.d.ts +8 -0
  967. package/dist/types/router/parse-pattern.d.ts +38 -0
  968. package/dist/types/router/pattern-matching.d.ts +169 -0
  969. package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
  970. package/dist/types/router/prefetch-default.d.ts +28 -0
  971. package/dist/types/router/prefetch-limits.d.ts +20 -0
  972. package/dist/types/router/prerender-match.d.ts +53 -0
  973. package/dist/types/router/preview-match.d.ts +22 -0
  974. package/dist/types/router/request-classification.d.ts +104 -0
  975. package/dist/types/router/revalidation.d.ts +64 -0
  976. package/dist/types/router/route-snapshot.d.ts +112 -0
  977. package/dist/types/router/route-trie-builder.d.ts +77 -0
  978. package/dist/types/router/router-context.d.ts +137 -0
  979. package/dist/types/router/router-interfaces.d.ts +461 -0
  980. package/dist/types/router/router-options.d.ts +792 -0
  981. package/dist/types/router/router-registry.d.ts +15 -0
  982. package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
  983. package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
  984. package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
  985. package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
  986. package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
  987. package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
  988. package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
  989. package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
  990. package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
  991. package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
  992. package/dist/types/router/segment-resolution.d.ts +3 -0
  993. package/dist/types/router/segment-wrappers.d.ts +53 -0
  994. package/dist/types/router/state-cookie-name.d.ts +1 -0
  995. package/dist/types/router/substitute-pattern-params.d.ts +23 -0
  996. package/dist/types/router/telemetry-otel.d.ts +113 -0
  997. package/dist/types/router/telemetry.d.ts +216 -0
  998. package/dist/types/router/timeout.d.ts +107 -0
  999. package/dist/types/router/tracing.d.ts +139 -0
  1000. package/dist/types/router/transition-when.d.ts +13 -0
  1001. package/dist/types/router/trie-matching.d.ts +32 -0
  1002. package/dist/types/router/types.d.ts +98 -0
  1003. package/dist/types/router/url-params.d.ts +26 -0
  1004. package/dist/types/router.d.ts +7 -0
  1005. package/dist/types/rsc/capture-queue.d.ts +49 -0
  1006. package/dist/types/rsc/full-payload.d.ts +22 -0
  1007. package/dist/types/rsc/handler-context.d.ts +32 -0
  1008. package/dist/types/rsc/handler.d.ts +9 -0
  1009. package/dist/types/rsc/helpers.d.ts +127 -0
  1010. package/dist/types/rsc/index.d.ts +17 -0
  1011. package/dist/types/rsc/json-route-result.d.ts +20 -0
  1012. package/dist/types/rsc/loader-fetch.d.ts +14 -0
  1013. package/dist/types/rsc/manifest-init.d.ts +18 -0
  1014. package/dist/types/rsc/nonce.d.ts +38 -0
  1015. package/dist/types/rsc/origin-guard.d.ts +50 -0
  1016. package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
  1017. package/dist/types/rsc/redirect-guard.d.ts +37 -0
  1018. package/dist/types/rsc/render-pipeline.d.ts +148 -0
  1019. package/dist/types/rsc/response-cache-serve.d.ts +46 -0
  1020. package/dist/types/rsc/response-error.d.ts +19 -0
  1021. package/dist/types/rsc/response-route-handler.d.ts +29 -0
  1022. package/dist/types/rsc/routine-plan.d.ts +124 -0
  1023. package/dist/types/rsc/rsc-rendering.d.ts +18 -0
  1024. package/dist/types/rsc/runtime-warnings.d.ts +22 -0
  1025. package/dist/types/rsc/server-action.d.ts +68 -0
  1026. package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
  1027. package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
  1028. package/dist/types/rsc/shell-capture.d.ts +425 -0
  1029. package/dist/types/rsc/shell-serve.d.ts +200 -0
  1030. package/dist/types/rsc/ssr-setup.d.ts +73 -0
  1031. package/dist/types/rsc/stream-idle.d.ts +60 -0
  1032. package/dist/types/rsc/transition-gate.d.ts +23 -0
  1033. package/dist/types/rsc/types.d.ts +353 -0
  1034. package/dist/types/runtime-env.d.ts +1 -0
  1035. package/dist/types/search-params.d.ts +125 -0
  1036. package/dist/types/segment-content-promise.d.ts +13 -0
  1037. package/dist/types/segment-fragments.d.ts +79 -0
  1038. package/dist/types/segment-loader-promise.d.ts +22 -0
  1039. package/dist/types/segment-system.d.ts +86 -0
  1040. package/dist/types/serialize.d.ts +164 -0
  1041. package/dist/types/server/context.d.ts +520 -0
  1042. package/dist/types/server/cookie-parse.d.ts +10 -0
  1043. package/dist/types/server/cookie-store.d.ts +107 -0
  1044. package/dist/types/server/fetchable-loader-store.d.ts +20 -0
  1045. package/dist/types/server/handle-store.d.ts +131 -0
  1046. package/dist/types/server/loader-registry.d.ts +32 -0
  1047. package/dist/types/server/request-context.d.ts +717 -0
  1048. package/dist/types/server/root-layout.d.ts +3 -0
  1049. package/dist/types/server.d.ts +16 -0
  1050. package/dist/types/ssr/index.d.ts +271 -0
  1051. package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
  1052. package/dist/types/ssr/preinit-client-references.d.ts +71 -0
  1053. package/dist/types/ssr/ssr-root.d.ts +84 -0
  1054. package/dist/types/ssr-suspension-warning.d.ts +19 -0
  1055. package/dist/types/static-handler.d.ts +71 -0
  1056. package/dist/types/testing/cache-status.d.ts +63 -0
  1057. package/dist/types/testing/collect-handle.d.ts +20 -0
  1058. package/dist/types/testing/dispatch.d.ts +127 -0
  1059. package/dist/types/testing/dom.entry.d.ts +15 -0
  1060. package/dist/types/testing/e2e/fixture.d.ts +37 -0
  1061. package/dist/types/testing/e2e/index.d.ts +31 -0
  1062. package/dist/types/testing/e2e/matchers.d.ts +17 -0
  1063. package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
  1064. package/dist/types/testing/e2e/parity.d.ts +111 -0
  1065. package/dist/types/testing/e2e/server.d.ts +35 -0
  1066. package/dist/types/testing/flight-matchers.d.ts +55 -0
  1067. package/dist/types/testing/flight-normalize.d.ts +1 -0
  1068. package/dist/types/testing/flight-tree.d.ts +192 -0
  1069. package/dist/types/testing/flight.d.ts +115 -0
  1070. package/dist/types/testing/flight.entry.d.ts +27 -0
  1071. package/dist/types/testing/generated-routes.d.ts +66 -0
  1072. package/dist/types/testing/index.d.ts +54 -0
  1073. package/dist/types/testing/internal/context.d.ts +225 -0
  1074. package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
  1075. package/dist/types/testing/internal/seed-vars.d.ts +30 -0
  1076. package/dist/types/testing/render-handler.d.ts +160 -0
  1077. package/dist/types/testing/render-route.d.ts +265 -0
  1078. package/dist/types/testing/run-loader.d.ts +195 -0
  1079. package/dist/types/testing/run-middleware.d.ts +132 -0
  1080. package/dist/types/testing/run-transition-when.d.ts +78 -0
  1081. package/dist/types/testing/shell-status.d.ts +81 -0
  1082. package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
  1083. package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
  1084. package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
  1085. package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
  1086. package/dist/types/testing/vitest.d.ts +205 -0
  1087. package/dist/types/theme/ThemeProvider.d.ts +13 -0
  1088. package/dist/types/theme/ThemeScript.d.ts +45 -0
  1089. package/dist/types/theme/constants.d.ts +39 -0
  1090. package/dist/types/theme/index.d.ts +29 -0
  1091. package/dist/types/theme/theme-context.d.ts +21 -0
  1092. package/dist/types/theme/theme-script.d.ts +26 -0
  1093. package/dist/types/theme/types.d.ts +162 -0
  1094. package/dist/types/theme/use-theme.d.ts +8 -0
  1095. package/dist/types/types/boundaries.d.ts +115 -0
  1096. package/dist/types/types/cache-types.d.ts +191 -0
  1097. package/dist/types/types/error-types.d.ts +114 -0
  1098. package/dist/types/types/global-namespace.d.ts +90 -0
  1099. package/dist/types/types/handler-context.d.ts +658 -0
  1100. package/dist/types/types/index.d.ts +11 -0
  1101. package/dist/types/types/loader-types.d.ts +240 -0
  1102. package/dist/types/types/request-scope.d.ts +93 -0
  1103. package/dist/types/types/route-config.d.ts +105 -0
  1104. package/dist/types/types/route-entry.d.ts +98 -0
  1105. package/dist/types/types/segments.d.ts +254 -0
  1106. package/dist/types/types.d.ts +1 -0
  1107. package/dist/types/urls/include-helper.d.ts +17 -0
  1108. package/dist/types/urls/include-provider.d.ts +27 -0
  1109. package/dist/types/urls/index.d.ts +6 -0
  1110. package/dist/types/urls/path-helper-types.d.ts +207 -0
  1111. package/dist/types/urls/path-helper.d.ts +12 -0
  1112. package/dist/types/urls/pattern-types.d.ts +166 -0
  1113. package/dist/types/urls/response-types.d.ts +67 -0
  1114. package/dist/types/urls/type-extraction.d.ts +157 -0
  1115. package/dist/types/urls/urls-function.d.ts +24 -0
  1116. package/dist/types/urls.d.ts +1 -0
  1117. package/dist/types/use-loader.d.ts +150 -0
  1118. package/dist/types/vercel/index.d.ts +10 -0
  1119. package/dist/types/vercel/tracing.d.ts +71 -0
  1120. package/dist/types/vite/debug.d.ts +80 -0
  1121. package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
  1122. package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
  1123. package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
  1124. package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
  1125. package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
  1126. package/dist/types/vite/discovery/gate-state.d.ts +79 -0
  1127. package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
  1128. package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
  1129. package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
  1130. package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
  1131. package/dist/types/vite/discovery/state.d.ts +170 -0
  1132. package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
  1133. package/dist/types/vite/encryption-key.d.ts +2 -0
  1134. package/dist/types/vite/index.d.ts +11 -0
  1135. package/dist/types/vite/inject-client-debug.d.ts +56 -0
  1136. package/dist/types/vite/plugin-types.d.ts +298 -0
  1137. package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
  1138. package/dist/types/vite/plugins/client-ref-dedup.d.ts +29 -0
  1139. package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
  1140. package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
  1141. package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
  1142. package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
  1143. package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
  1144. package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
  1145. package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
  1146. package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
  1147. package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
  1148. package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
  1149. package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
  1150. package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
  1151. package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
  1152. package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
  1153. package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
  1154. package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
  1155. package/dist/types/vite/plugins/version-injector.d.ts +21 -0
  1156. package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
  1157. package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
  1158. package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
  1159. package/dist/types/vite/rango.d.ts +29 -0
  1160. package/dist/types/vite/router-discovery.d.ts +23 -0
  1161. package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
  1162. package/dist/types/vite/utils/banner.d.ts +2 -0
  1163. package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
  1164. package/dist/types/vite/utils/client-chunks.d.ts +55 -0
  1165. package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
  1166. package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
  1167. package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
  1168. package/dist/types/vite/utils/package-resolution.d.ts +6 -0
  1169. package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
  1170. package/dist/types/vite/utils/shared-utils.d.ts +67 -0
  1171. package/dist/types.d.ts +1479 -0
  1172. package/dist/types.d.ts.map +1 -0
  1173. package/dist/types.js +10 -0
  1174. package/dist/types.js.map +1 -0
  1175. package/dist/urls.d.ts +441 -0
  1176. package/dist/urls.d.ts.map +1 -0
  1177. package/dist/urls.gen.d.ts +8 -0
  1178. package/dist/urls.gen.d.ts.map +1 -0
  1179. package/dist/urls.gen.js +8 -0
  1180. package/dist/urls.gen.js.map +1 -0
  1181. package/dist/urls.js +443 -0
  1182. package/dist/urls.js.map +1 -0
  1183. package/dist/use-loader.d.ts +127 -0
  1184. package/dist/use-loader.d.ts.map +1 -0
  1185. package/dist/use-loader.js +237 -0
  1186. package/dist/use-loader.js.map +1 -0
  1187. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  1188. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  1189. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  1190. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  1191. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  1192. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  1193. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  1194. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  1195. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  1196. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  1197. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  1198. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  1199. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  1200. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  1201. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  1202. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  1203. package/dist/vite/ast-handler-extract.d.ts +49 -0
  1204. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  1205. package/dist/vite/ast-handler-extract.js +249 -0
  1206. package/dist/vite/ast-handler-extract.js.map +1 -0
  1207. package/dist/vite/expose-action-id.d.ts +19 -0
  1208. package/dist/vite/expose-action-id.d.ts.map +1 -0
  1209. package/dist/vite/expose-action-id.js +250 -0
  1210. package/dist/vite/expose-action-id.js.map +1 -0
  1211. package/dist/vite/expose-id-utils.d.ts +69 -0
  1212. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  1213. package/dist/vite/expose-id-utils.js +289 -0
  1214. package/dist/vite/expose-id-utils.js.map +1 -0
  1215. package/dist/vite/expose-internal-ids.d.ts +22 -0
  1216. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  1217. package/dist/vite/expose-internal-ids.js +886 -0
  1218. package/dist/vite/expose-internal-ids.js.map +1 -0
  1219. package/dist/vite/index.d.ts +149 -0
  1220. package/dist/vite/index.d.ts.map +1 -0
  1221. package/dist/vite/index.js +10793 -4122
  1222. package/dist/vite/index.js.bak +5448 -0
  1223. package/dist/vite/index.js.map +1 -0
  1224. package/dist/vite/index.named-routes.gen.ts +103 -0
  1225. package/dist/vite/package-resolution.d.ts +43 -0
  1226. package/dist/vite/package-resolution.d.ts.map +1 -0
  1227. package/dist/vite/package-resolution.js +112 -0
  1228. package/dist/vite/package-resolution.js.map +1 -0
  1229. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1230. package/dist/vite/virtual-entries.d.ts +25 -0
  1231. package/dist/vite/virtual-entries.d.ts.map +1 -0
  1232. package/dist/vite/virtual-entries.js +110 -0
  1233. package/dist/vite/virtual-entries.js.map +1 -0
  1234. package/package.json +121 -38
  1235. package/skills/api-client/SKILL.md +211 -0
  1236. package/skills/breadcrumbs/SKILL.md +117 -8
  1237. package/skills/bundle-analysis/SKILL.md +159 -0
  1238. package/skills/cache-guide/SKILL.md +232 -34
  1239. package/skills/caching/SKILL.md +375 -19
  1240. package/skills/catalog.json +289 -0
  1241. package/skills/client-urls/SKILL.md +339 -0
  1242. package/skills/cloudflare/SKILL.md +153 -0
  1243. package/skills/cloudflare/agents/openai.yaml +4 -0
  1244. package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
  1245. package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
  1246. package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
  1247. package/skills/comparison/SKILL.md +50 -0
  1248. package/skills/comparison/agents/openai.yaml +4 -0
  1249. package/skills/comparison/references/framework-comparison.md +858 -0
  1250. package/skills/composability/SKILL.md +124 -4
  1251. package/skills/css/SKILL.md +76 -0
  1252. package/skills/debug-manifest/SKILL.md +5 -11
  1253. package/skills/defer-hydration/SKILL.md +235 -0
  1254. package/skills/deployment-caching/SKILL.md +176 -0
  1255. package/skills/document-cache/SKILL.md +116 -58
  1256. package/skills/fonts/SKILL.md +1 -1
  1257. package/skills/handler-use/SKILL.md +12 -10
  1258. package/skills/hooks/SKILL.md +73 -691
  1259. package/skills/hooks/data.md +282 -0
  1260. package/skills/hooks/handle-and-actions.md +110 -0
  1261. package/skills/hooks/navigation.md +110 -0
  1262. package/skills/hooks/outlets.md +62 -0
  1263. package/skills/hooks/state.md +228 -0
  1264. package/skills/hooks/urls.md +172 -0
  1265. package/skills/host-router/SKILL.md +129 -27
  1266. package/skills/i18n/SKILL.md +276 -0
  1267. package/skills/intercept/SKILL.md +75 -19
  1268. package/skills/layout/SKILL.md +40 -19
  1269. package/skills/links/SKILL.md +283 -17
  1270. package/skills/loader/SKILL.md +362 -11
  1271. package/skills/middleware/SKILL.md +58 -13
  1272. package/skills/migrate-nextjs/SKILL.md +336 -42
  1273. package/skills/migrate-nextjs/backend-host-swap.md +120 -0
  1274. package/skills/migrate-react-router/SKILL.md +95 -670
  1275. package/skills/migrate-react-router/component-migration.md +201 -0
  1276. package/skills/migrate-react-router/data-and-actions.md +236 -0
  1277. package/skills/migrate-react-router/route-mapping.md +284 -0
  1278. package/skills/mime-routes/SKILL.md +55 -18
  1279. package/skills/observability/SKILL.md +231 -0
  1280. package/skills/parallel/SKILL.md +72 -11
  1281. package/skills/ppr/SKILL.md +918 -0
  1282. package/skills/prerender/SKILL.md +137 -71
  1283. package/skills/rango/SKILL.md +325 -26
  1284. package/skills/react-compiler/SKILL.md +168 -0
  1285. package/skills/response-routes/SKILL.md +180 -52
  1286. package/skills/route/SKILL.md +126 -9
  1287. package/skills/router-setup/SKILL.md +69 -11
  1288. package/skills/scripts/SKILL.md +189 -0
  1289. package/skills/server-actions/SKILL.md +776 -0
  1290. package/skills/shell-manifest/SKILL.md +194 -0
  1291. package/skills/streams-and-websockets/SKILL.md +283 -0
  1292. package/skills/tailwind/SKILL.md +28 -4
  1293. package/skills/testing/SKILL.md +131 -0
  1294. package/skills/testing/bindings.md +103 -0
  1295. package/skills/testing/cache-prerender.md +172 -0
  1296. package/skills/testing/client-components.md +131 -0
  1297. package/skills/testing/e2e-parity.md +125 -0
  1298. package/skills/testing/flight.md +91 -0
  1299. package/skills/testing/handles.md +153 -0
  1300. package/skills/testing/loader.md +130 -0
  1301. package/skills/testing/middleware.md +99 -0
  1302. package/skills/testing/render-handler.md +122 -0
  1303. package/skills/testing/response-routes.md +95 -0
  1304. package/skills/testing/reverse-and-types.md +85 -0
  1305. package/skills/testing/server-actions.md +107 -0
  1306. package/skills/testing/server-tree.md +128 -0
  1307. package/skills/testing/setup.md +123 -0
  1308. package/skills/theme/SKILL.md +9 -6
  1309. package/skills/typesafety/SKILL.md +45 -626
  1310. package/skills/typesafety/env-and-bindings.md +254 -0
  1311. package/skills/typesafety/generated-files-and-cli.md +342 -0
  1312. package/skills/typesafety/params-and-search.md +153 -0
  1313. package/skills/typesafety/route-types.md +213 -0
  1314. package/skills/use-cache/SKILL.md +121 -15
  1315. package/skills/vercel/SKILL.md +149 -0
  1316. package/skills/view-transitions/SKILL.md +341 -0
  1317. package/src/__augment-tests__/augment.ts +81 -0
  1318. package/src/__augment-tests__/augmented.check.ts +116 -0
  1319. package/src/__internal.ts +0 -65
  1320. package/src/bin/rango.ts +7 -3
  1321. package/src/browser/action-coordinator.ts +53 -36
  1322. package/src/browser/action-fence.ts +47 -0
  1323. package/src/browser/app-shell.ts +39 -0
  1324. package/src/browser/connection-warmup.ts +134 -0
  1325. package/src/browser/cookie-name.ts +140 -0
  1326. package/src/browser/dev-discovery.ts +66 -0
  1327. package/src/browser/event-controller.ts +400 -168
  1328. package/src/browser/history-state.ts +21 -0
  1329. package/src/browser/index.ts +3 -3
  1330. package/src/browser/invalidate-client-cache.ts +52 -0
  1331. package/src/browser/link-interceptor.ts +469 -20
  1332. package/src/browser/logging.ts +28 -0
  1333. package/src/browser/merge-segment-loaders.ts +6 -4
  1334. package/src/browser/navigation-bridge.ts +171 -27
  1335. package/src/browser/navigation-client.ts +216 -90
  1336. package/src/browser/navigation-store-handle.ts +38 -0
  1337. package/src/browser/navigation-store.ts +167 -323
  1338. package/src/browser/navigation-transaction.ts +9 -59
  1339. package/src/browser/network-error-handler.ts +34 -7
  1340. package/src/browser/notify-listeners.ts +22 -0
  1341. package/src/browser/partial-update.ts +243 -144
  1342. package/src/browser/prefetch/cache.ts +325 -84
  1343. package/src/browser/prefetch/default-strategy.ts +74 -0
  1344. package/src/browser/prefetch/fetch.ts +411 -69
  1345. package/src/browser/prefetch/invalidation.ts +30 -0
  1346. package/src/browser/prefetch/loader.ts +111 -0
  1347. package/src/browser/prefetch/observer.ts +50 -22
  1348. package/src/browser/prefetch/queue.ts +61 -12
  1349. package/src/browser/prefetch/runtime.ts +6 -0
  1350. package/src/browser/rango-state.ts +178 -75
  1351. package/src/browser/react/Link.tsx +160 -92
  1352. package/src/browser/react/NavigationProvider.tsx +211 -121
  1353. package/src/browser/react/ScrollRestoration.tsx +10 -6
  1354. package/src/browser/react/context.ts +4 -0
  1355. package/src/browser/react/filter-segment-order.ts +66 -7
  1356. package/src/browser/react/index.ts +0 -48
  1357. package/src/browser/react/location-state-shared.ts +178 -8
  1358. package/src/browser/react/location-state.ts +39 -14
  1359. package/src/browser/react/use-action.ts +6 -15
  1360. package/src/browser/react/use-handle.ts +17 -14
  1361. package/src/browser/react/use-href.tsx +8 -1
  1362. package/src/browser/react/use-link-status.ts +33 -8
  1363. package/src/browser/react/use-navigation.ts +10 -5
  1364. package/src/browser/react/use-params.ts +20 -10
  1365. package/src/browser/react/use-reverse.ts +106 -0
  1366. package/src/browser/react/use-router.ts +62 -11
  1367. package/src/browser/react/use-search-params.ts +140 -22
  1368. package/src/browser/react/use-segments.ts +11 -21
  1369. package/src/browser/response-adapter.ts +99 -8
  1370. package/src/browser/rsc-router.tsx +248 -32
  1371. package/src/browser/scroll-restoration.ts +37 -22
  1372. package/src/browser/segment-reconciler.ts +31 -21
  1373. package/src/browser/segment-structure-assert.ts +2 -2
  1374. package/src/browser/server-action-bridge.ts +262 -65
  1375. package/src/browser/types.ts +132 -34
  1376. package/src/browser/validate-redirect-origin.ts +43 -16
  1377. package/src/build/collect-fallback-refs.ts +107 -0
  1378. package/src/build/generate-manifest.ts +213 -184
  1379. package/src/build/generate-route-types.ts +3 -1
  1380. package/src/build/index.ts +11 -3
  1381. package/src/build/merge-full-manifests.ts +161 -0
  1382. package/src/build/prefix-tree-utils.ts +123 -0
  1383. package/src/build/route-trie.ts +43 -280
  1384. package/src/build/route-types/ast-route-extraction.ts +15 -8
  1385. package/src/build/route-types/codegen.ts +16 -5
  1386. package/src/build/route-types/include-resolution.ts +513 -64
  1387. package/src/build/route-types/param-extraction.ts +6 -3
  1388. package/src/build/route-types/per-module-writer.ts +33 -12
  1389. package/src/build/route-types/router-processing.ts +312 -204
  1390. package/src/build/route-types/scan-filter.ts +1 -1
  1391. package/src/build/route-types/source-scan.ts +216 -0
  1392. package/src/build/runtime-discovery.ts +32 -29
  1393. package/src/cache/cache-error.ts +104 -0
  1394. package/src/cache/cache-exec-scope.ts +47 -0
  1395. package/src/cache/cache-key-utils.ts +73 -15
  1396. package/src/cache/cache-policy.ts +108 -34
  1397. package/src/cache/cache-runtime.ts +566 -121
  1398. package/src/cache/cache-scope.ts +383 -105
  1399. package/src/cache/cache-tag.ts +149 -0
  1400. package/src/cache/cf/cf-base64.ts +33 -0
  1401. package/src/cache/cf/cf-cache-constants.ts +134 -0
  1402. package/src/cache/cf/cf-cache-store.ts +3083 -392
  1403. package/src/cache/cf/cf-cache-types.ts +417 -0
  1404. package/src/cache/cf/cf-kv-utils.ts +84 -0
  1405. package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
  1406. package/src/cache/cf/cf-zone-purge.ts +101 -0
  1407. package/src/cache/cf/index.ts +11 -16
  1408. package/src/cache/document-cache.ts +184 -53
  1409. package/src/cache/handle-snapshot.ts +92 -1
  1410. package/src/cache/index.ts +32 -20
  1411. package/src/cache/memory-segment-store.ts +286 -37
  1412. package/src/cache/profile-registry.ts +46 -31
  1413. package/src/cache/read-through-swr.ts +66 -16
  1414. package/src/cache/search-params-filter.ts +118 -0
  1415. package/src/cache/segment-codec.ts +80 -25
  1416. package/src/cache/shell-snapshot.ts +516 -0
  1417. package/src/cache/tag-invalidation.ts +230 -0
  1418. package/src/cache/taint.ts +28 -9
  1419. package/src/cache/types.ts +343 -100
  1420. package/src/cache/vercel/index.ts +11 -0
  1421. package/src/cache/vercel/vercel-cache-store.ts +1264 -0
  1422. package/src/client-urls/client-root.tsx +168 -0
  1423. package/src/client-urls/client-urls.ts +779 -0
  1424. package/src/client-urls/navigation.ts +237 -0
  1425. package/src/client-urls/revalidation-protocol.ts +56 -0
  1426. package/src/client-urls/server-projection.ts +670 -0
  1427. package/src/client-urls/types.ts +202 -0
  1428. package/src/client.rsc.tsx +53 -21
  1429. package/src/client.tsx +82 -67
  1430. package/src/cloudflare/index.ts +11 -0
  1431. package/src/cloudflare/tracing.ts +112 -0
  1432. package/src/component-utils.ts +19 -0
  1433. package/src/components/DefaultDocument.tsx +8 -2
  1434. package/src/context-var.ts +18 -6
  1435. package/src/decode-loader-results.ts +165 -0
  1436. package/src/defer.ts +185 -0
  1437. package/src/deps/ssr.ts +4 -2
  1438. package/src/dev-discovery-protocol.ts +11 -0
  1439. package/src/encode-kv.ts +49 -0
  1440. package/src/errors.ts +44 -4
  1441. package/src/escape-script.ts +52 -0
  1442. package/src/handle.ts +67 -37
  1443. package/src/handles/MetaTags.tsx +24 -53
  1444. package/src/handles/Scripts.tsx +183 -0
  1445. package/src/handles/breadcrumbs.ts +35 -8
  1446. package/src/handles/deferred-resolution.ts +134 -0
  1447. package/src/handles/is-thenable.ts +16 -0
  1448. package/src/handles/meta.ts +14 -40
  1449. package/src/handles/script.ts +244 -0
  1450. package/src/host/cookie-handler.ts +9 -60
  1451. package/src/host/errors.ts +13 -22
  1452. package/src/host/index.ts +9 -2
  1453. package/src/host/pattern-matcher.ts +23 -52
  1454. package/src/host/router.ts +107 -99
  1455. package/src/host/testing.ts +40 -27
  1456. package/src/host/types.ts +37 -4
  1457. package/src/host/utils.ts +1 -1
  1458. package/src/href-client.ts +137 -22
  1459. package/src/index.rsc.ts +108 -12
  1460. package/src/index.ts +106 -14
  1461. package/src/internal-debug.ts +11 -10
  1462. package/src/loader-redirect.tsx +64 -0
  1463. package/src/loader-store.ts +500 -0
  1464. package/src/loader.rsc.ts +20 -13
  1465. package/src/loader.ts +12 -11
  1466. package/src/missing-id-error.ts +68 -0
  1467. package/src/outlet-context.ts +21 -1
  1468. package/src/outlet-provider.tsx +20 -6
  1469. package/src/prerender/build-shell-capture.ts +453 -0
  1470. package/src/prerender/param-hash.ts +16 -16
  1471. package/src/prerender/shell-manifest-key.ts +20 -0
  1472. package/src/prerender/store.ts +47 -38
  1473. package/src/prerender.ts +81 -13
  1474. package/src/redirect-origin.ts +172 -0
  1475. package/src/regex-escape.ts +8 -0
  1476. package/src/render-error-thrower.tsx +20 -0
  1477. package/src/response-utils.ts +62 -0
  1478. package/src/reverse.ts +65 -39
  1479. package/src/root-error-boundary.tsx +1 -19
  1480. package/src/route-content-wrapper.tsx +120 -78
  1481. package/src/route-definition/dsl-helpers.ts +342 -313
  1482. package/src/route-definition/helper-factories.ts +28 -140
  1483. package/src/route-definition/helpers-types.ts +106 -62
  1484. package/src/route-definition/index.ts +1 -2
  1485. package/src/route-definition/redirect.ts +60 -28
  1486. package/src/route-definition/resolve-handler-use.ts +12 -1
  1487. package/src/route-definition/use-item-types.ts +29 -0
  1488. package/src/route-map-builder.ts +102 -74
  1489. package/src/route-types.ts +19 -46
  1490. package/src/router/basename.ts +14 -0
  1491. package/src/router/content-negotiation.ts +120 -30
  1492. package/src/router/error-handling.ts +110 -29
  1493. package/src/router/find-match.ts +129 -30
  1494. package/src/router/handler-context.ts +58 -57
  1495. package/src/router/instrument.ts +401 -0
  1496. package/src/router/intercept-resolution.ts +98 -21
  1497. package/src/router/lazy-includes.ts +83 -59
  1498. package/src/router/loader-resolution.ts +429 -85
  1499. package/src/router/logging.ts +0 -6
  1500. package/src/router/manifest.ts +74 -40
  1501. package/src/router/match-api.ts +94 -58
  1502. package/src/router/match-context.ts +0 -22
  1503. package/src/router/match-handlers.ts +268 -171
  1504. package/src/router/match-middleware/background-revalidation.ts +40 -24
  1505. package/src/router/match-middleware/cache-lookup.ts +316 -302
  1506. package/src/router/match-middleware/cache-store.ts +134 -52
  1507. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1508. package/src/router/match-middleware/segment-resolution.ts +0 -22
  1509. package/src/router/match-pipelines.ts +1 -42
  1510. package/src/router/match-result.ts +76 -79
  1511. package/src/router/metrics.ts +17 -36
  1512. package/src/router/middleware-types.ts +20 -130
  1513. package/src/router/middleware.ts +302 -172
  1514. package/src/router/navigation-snapshot.ts +51 -60
  1515. package/src/router/params-util.ts +23 -0
  1516. package/src/router/parse-pattern.ts +115 -0
  1517. package/src/router/pattern-matching.ts +181 -150
  1518. package/src/router/prefetch-cache-ttl.ts +51 -0
  1519. package/src/router/prefetch-default.ts +59 -0
  1520. package/src/router/prefetch-limits.ts +37 -0
  1521. package/src/router/prerender-match.ts +159 -69
  1522. package/src/router/preview-match.ts +6 -2
  1523. package/src/router/request-classification.ts +50 -69
  1524. package/src/router/revalidation.ts +146 -83
  1525. package/src/router/route-snapshot.ts +14 -3
  1526. package/src/router/route-trie-builder.ts +334 -0
  1527. package/src/router/router-context.ts +6 -29
  1528. package/src/router/router-interfaces.ts +168 -38
  1529. package/src/router/router-options.ts +235 -11
  1530. package/src/router/router-registry.ts +2 -5
  1531. package/src/router/segment-resolution/fresh.ts +219 -88
  1532. package/src/router/segment-resolution/helpers.ts +96 -18
  1533. package/src/router/segment-resolution/loader-cache.ts +208 -39
  1534. package/src/router/segment-resolution/loader-mask.ts +60 -0
  1535. package/src/router/segment-resolution/loader-snapshot.ts +259 -0
  1536. package/src/router/segment-resolution/mask-nested.ts +99 -0
  1537. package/src/router/segment-resolution/revalidation.ts +318 -321
  1538. package/src/router/segment-resolution/static-store.ts +55 -15
  1539. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1540. package/src/router/segment-resolution/view-transition-default.ts +60 -0
  1541. package/src/router/segment-resolution.ts +5 -1
  1542. package/src/router/segment-wrappers.ts +6 -5
  1543. package/src/router/state-cookie-name.ts +33 -0
  1544. package/src/router/substitute-pattern-params.ts +75 -0
  1545. package/src/router/telemetry-otel.ts +171 -200
  1546. package/src/router/telemetry.ts +106 -20
  1547. package/src/router/timeout.ts +53 -22
  1548. package/src/router/tracing.ts +235 -0
  1549. package/src/router/transition-when.ts +76 -0
  1550. package/src/router/trie-matching.ts +171 -59
  1551. package/src/router/types.ts +9 -63
  1552. package/src/router/url-params.ts +57 -0
  1553. package/src/router.ts +249 -79
  1554. package/src/rsc/capture-queue.ts +218 -0
  1555. package/src/rsc/full-payload.ts +77 -0
  1556. package/src/rsc/handler-context.ts +4 -2
  1557. package/src/rsc/handler.ts +570 -288
  1558. package/src/rsc/helpers.ts +245 -47
  1559. package/src/rsc/index.ts +2 -5
  1560. package/src/rsc/json-route-result.ts +38 -0
  1561. package/src/rsc/loader-fetch.ts +116 -40
  1562. package/src/rsc/manifest-init.ts +55 -56
  1563. package/src/rsc/nonce.ts +26 -1
  1564. package/src/rsc/origin-guard.ts +39 -25
  1565. package/src/rsc/progressive-enhancement.ts +378 -83
  1566. package/src/rsc/redirect-guard.ts +102 -0
  1567. package/src/rsc/render-pipeline.ts +611 -0
  1568. package/src/rsc/response-cache-serve.ts +259 -0
  1569. package/src/rsc/response-error.ts +79 -12
  1570. package/src/rsc/response-route-handler.ts +80 -206
  1571. package/src/rsc/routine-plan.ts +359 -0
  1572. package/src/rsc/rsc-rendering.ts +1647 -164
  1573. package/src/rsc/runtime-warnings.ts +23 -10
  1574. package/src/rsc/server-action.ts +421 -138
  1575. package/src/rsc/shell-build-manifest.ts +343 -0
  1576. package/src/rsc/shell-capture-constants.ts +45 -0
  1577. package/src/rsc/shell-capture.ts +2135 -0
  1578. package/src/rsc/shell-serve.ts +350 -0
  1579. package/src/rsc/ssr-setup.ts +124 -16
  1580. package/src/rsc/stream-idle.ts +137 -0
  1581. package/src/rsc/transition-gate.ts +86 -0
  1582. package/src/rsc/types.ts +125 -7
  1583. package/src/runtime-env.ts +18 -0
  1584. package/src/search-params.ts +35 -30
  1585. package/src/segment-fragments.ts +165 -0
  1586. package/src/segment-loader-promise.ts +49 -4
  1587. package/src/segment-system.tsx +463 -153
  1588. package/src/serialize.ts +243 -0
  1589. package/src/server/context.ts +426 -55
  1590. package/src/server/cookie-parse.ts +32 -0
  1591. package/src/server/cookie-store.ts +162 -15
  1592. package/src/server/handle-store.ts +190 -70
  1593. package/src/server/loader-registry.ts +33 -42
  1594. package/src/server/request-context.ts +824 -215
  1595. package/src/server.ts +7 -2
  1596. package/src/ssr/index.tsx +687 -184
  1597. package/src/ssr/inject-rsc-eager.ts +167 -0
  1598. package/src/ssr/preinit-client-references.ts +106 -0
  1599. package/src/ssr/ssr-root.tsx +305 -0
  1600. package/src/ssr-suspension-warning.ts +67 -0
  1601. package/src/static-handler.ts +28 -15
  1602. package/src/testing/cache-status.ts +162 -0
  1603. package/src/testing/collect-handle.ts +46 -0
  1604. package/src/testing/dispatch.ts +951 -0
  1605. package/src/testing/dom.entry.ts +22 -0
  1606. package/src/testing/e2e/fixture.ts +188 -0
  1607. package/src/testing/e2e/index.ts +147 -0
  1608. package/src/testing/e2e/matchers.ts +35 -0
  1609. package/src/testing/e2e/page-helpers.ts +319 -0
  1610. package/src/testing/e2e/parity.ts +400 -0
  1611. package/src/testing/e2e/server.ts +195 -0
  1612. package/src/testing/flight-matchers.ts +97 -0
  1613. package/src/testing/flight-normalize.ts +11 -0
  1614. package/src/testing/flight-runtime.d.ts +57 -0
  1615. package/src/testing/flight-tree.ts +682 -0
  1616. package/src/testing/flight.entry.ts +52 -0
  1617. package/src/testing/flight.ts +257 -0
  1618. package/src/testing/generated-routes.ts +199 -0
  1619. package/src/testing/index.ts +121 -0
  1620. package/src/testing/internal/context.ts +380 -0
  1621. package/src/testing/internal/flight-client-globals.ts +30 -0
  1622. package/src/testing/internal/seed-vars.ts +54 -0
  1623. package/src/testing/render-handler.ts +371 -0
  1624. package/src/testing/render-route.tsx +667 -0
  1625. package/src/testing/run-loader.ts +423 -0
  1626. package/src/testing/run-middleware.ts +219 -0
  1627. package/src/testing/run-transition-when.ts +197 -0
  1628. package/src/testing/shell-status.ts +206 -0
  1629. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1630. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1631. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1632. package/src/testing/vitest-stubs/version.ts +5 -0
  1633. package/src/testing/vitest.ts +305 -0
  1634. package/src/theme/ThemeProvider.tsx +56 -84
  1635. package/src/theme/ThemeScript.tsx +7 -9
  1636. package/src/theme/constants.ts +52 -13
  1637. package/src/theme/index.ts +0 -7
  1638. package/src/theme/theme-context.ts +1 -5
  1639. package/src/theme/theme-script.ts +22 -21
  1640. package/src/theme/use-theme.ts +0 -3
  1641. package/src/types/boundaries.ts +19 -35
  1642. package/src/types/cache-types.ts +13 -4
  1643. package/src/types/error-types.ts +30 -90
  1644. package/src/types/global-namespace.ts +54 -41
  1645. package/src/types/handler-context.ts +123 -64
  1646. package/src/types/index.ts +4 -10
  1647. package/src/types/loader-types.ts +76 -13
  1648. package/src/types/request-scope.ts +112 -0
  1649. package/src/types/route-config.ts +20 -52
  1650. package/src/types/route-entry.ts +3 -6
  1651. package/src/types/segments.ts +155 -14
  1652. package/src/urls/include-helper.ts +38 -64
  1653. package/src/urls/include-provider.ts +71 -0
  1654. package/src/urls/index.ts +2 -11
  1655. package/src/urls/path-helper-types.ts +88 -25
  1656. package/src/urls/path-helper.ts +30 -110
  1657. package/src/urls/pattern-types.ts +101 -19
  1658. package/src/urls/response-types.ts +22 -29
  1659. package/src/urls/type-extraction.ts +98 -154
  1660. package/src/urls/urls-function.ts +1 -19
  1661. package/src/use-loader.tsx +379 -110
  1662. package/src/vercel/index.ts +11 -0
  1663. package/src/vercel/tracing.ts +89 -0
  1664. package/src/vite/debug.ts +185 -0
  1665. package/src/vite/discovery/bundle-postprocess.ts +18 -14
  1666. package/src/vite/discovery/client-urls-projection.ts +322 -0
  1667. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1668. package/src/vite/discovery/discover-routers.ts +178 -151
  1669. package/src/vite/discovery/discovery-errors.ts +255 -0
  1670. package/src/vite/discovery/gate-state.ts +171 -0
  1671. package/src/vite/discovery/prerender-collection.ts +125 -70
  1672. package/src/vite/discovery/route-types-writer.ts +40 -84
  1673. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1674. package/src/vite/discovery/shell-prerender-phase.ts +397 -0
  1675. package/src/vite/discovery/state.ts +104 -6
  1676. package/src/vite/discovery/virtual-module-codegen.ts +226 -87
  1677. package/src/vite/encryption-key.ts +29 -0
  1678. package/src/vite/index.ts +12 -0
  1679. package/src/vite/inject-client-debug.ts +88 -0
  1680. package/src/vite/plugin-types.ts +243 -10
  1681. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1682. package/src/vite/plugins/client-ref-dedup.ts +296 -29
  1683. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1684. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1685. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1686. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1687. package/src/vite/plugins/expose-action-id.ts +95 -120
  1688. package/src/vite/plugins/expose-id-utils.ts +88 -55
  1689. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1690. package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
  1691. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1692. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1693. package/src/vite/plugins/expose-internal-ids.ts +551 -486
  1694. package/src/vite/plugins/performance-tracks.ts +26 -25
  1695. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1696. package/src/vite/plugins/server-ref-hashing.ts +74 -0
  1697. package/src/vite/plugins/server-reference-pattern.ts +10 -0
  1698. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1699. package/src/vite/plugins/vercel-output.ts +384 -0
  1700. package/src/vite/plugins/version-injector.ts +39 -29
  1701. package/src/vite/plugins/version-plugin.ts +45 -40
  1702. package/src/vite/plugins/virtual-entries.ts +193 -30
  1703. package/src/vite/rango.ts +287 -140
  1704. package/src/vite/router-discovery.ts +1639 -157
  1705. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1706. package/src/vite/utils/banner.ts +1 -1
  1707. package/src/vite/utils/bundle-analysis.ts +10 -15
  1708. package/src/vite/utils/client-chunks.ts +184 -0
  1709. package/src/vite/utils/directive-prologue.ts +40 -0
  1710. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1711. package/src/vite/utils/manifest-utils.ts +1 -59
  1712. package/src/vite/utils/package-resolution.ts +21 -52
  1713. package/src/vite/utils/prerender-utils.ts +96 -49
  1714. package/src/vite/utils/shared-utils.ts +156 -43
  1715. package/src/browser/action-response-classifier.ts +0 -99
  1716. package/src/browser/shallow.ts +0 -40
  1717. package/src/router/middleware-cookies.ts +0 -55
@@ -11,7 +11,15 @@
11
11
  */
12
12
 
13
13
  import { AsyncLocalStorage } from "node:async_hooks";
14
+ import { parseCookiesFromHeader } from "./cookie-parse.js";
15
+ import type { CacheErrorCategory } from "../cache/cache-error.js";
14
16
  import type { CookieOptions } from "../router/middleware.js";
17
+ import {
18
+ KEEP_CACHE_HEADER,
19
+ getRawCookieValue,
20
+ mintStateValue,
21
+ serializeStateCookie,
22
+ } from "../browser/cookie-name.js";
15
23
  import type { LoaderDefinition, LoaderContext } from "../types.js";
16
24
  import type { ScopedReverseFunction } from "../reverse.js";
17
25
  import type {
@@ -33,22 +41,54 @@ import {
33
41
  type HandleData,
34
42
  } from "./handle-store.js";
35
43
  import { isHandle } from "../handle.js";
36
- import { track, type MetricsStore } from "./context.js";
44
+ import { withDefer } from "../defer.js";
45
+ import { type MetricsStore } from "./context.js";
46
+ import { observePhase, PHASES } from "../router/instrument.js";
37
47
  import { getFetchableLoader } from "./fetchable-loader-store.js";
38
48
  import type { SegmentCacheStore } from "../cache/types.js";
39
49
  import type { Theme, ResolvedThemeConfig } from "../theme/types.js";
40
- import { THEME_COOKIE } from "../theme/constants.js";
50
+ import type { ExecutionContext, RequestScope } from "../types/request-scope.js";
51
+ import type { TransitionWhenFn } from "../types/segments.js";
52
+ import type { ResolvedTracing } from "../router/tracing.js";
53
+ import type { RenderMode, RenderPhase } from "../router/timeout.js";
54
+ import {
55
+ THEME_COOKIE,
56
+ isValidTheme,
57
+ warnInvalidTheme,
58
+ } from "../theme/constants.js";
41
59
  import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
60
+ import type { RoutineTrace } from "../rsc/routine-plan.js";
42
61
  import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
43
- import { isInsideCacheScope } from "./context.js";
62
+ import {
63
+ assertCachedHeaderWriteAllowed,
64
+ clearPprHeaderScope,
65
+ isInsideCacheScope,
66
+ } from "./context.js";
44
67
  import {
45
68
  createReverseFunction,
46
69
  stripInternalParams,
47
70
  } from "../router/handler-context.js";
48
- import { getGlobalRouteMap, isRouteRootScoped } from "../route-map-builder.js";
71
+ import {
72
+ getGlobalRouteMap,
73
+ isRouteRootScoped,
74
+ getSearchSchema,
75
+ } from "../route-map-builder.js";
76
+ import { parseSearchParams } from "../search-params.js";
49
77
  import { invariant } from "../errors.js";
50
78
  import { isAutoGeneratedRouteName } from "../route-name.js";
51
79
 
80
+ export interface RenderForegroundCursor {
81
+ mode: RenderMode;
82
+ phase: RenderPhase;
83
+ state: "paused" | "running";
84
+ completed: number;
85
+ total: number;
86
+ pipelineStartedAt: number;
87
+ phaseStartedAt?: number;
88
+ routeKey?: string;
89
+ actionId?: string;
90
+ }
91
+
52
92
  /**
53
93
  * Unified request context available via getRequestContext()
54
94
  *
@@ -58,22 +98,7 @@ import { isAutoGeneratedRouteName } from "../route-name.js";
58
98
  export interface RequestContext<
59
99
  TEnv = DefaultEnv,
60
100
  TParams = Record<string, string>,
61
- > {
62
- /** Platform bindings (Cloudflare env, etc.) */
63
- env: TEnv;
64
- /** Original HTTP request */
65
- request: Request;
66
- /** Parsed URL (with internal `_rsc*` params stripped) */
67
- url: URL;
68
- /**
69
- * The original request URL with all parameters intact, including
70
- * internal `_rsc*` transport params.
71
- */
72
- originalUrl: URL;
73
- /** URL pathname */
74
- pathname: string;
75
- /** URL search params (with internal `_rsc*` params stripped, same as `url.searchParams`) */
76
- searchParams: URLSearchParams;
101
+ > extends RequestScope<TEnv> {
77
102
  /** @internal Shared variable backing store for ctx.get()/ctx.set(). */
78
103
  _variables: Record<string, any>;
79
104
  /** Get a variable set by middleware */
@@ -98,6 +123,27 @@ export interface RequestContext<
98
123
  /** @internal Stub response for collecting headers/cookies. Use ctx.headers or ctx.header() instead. */
99
124
  readonly res: Response;
100
125
 
126
+ /**
127
+ * True for build-time render/capture requests. Live requests use false.
128
+ * Build-time shell capture sets this while replaying middleware so apps can
129
+ * skip side-effectful runtime work.
130
+ */
131
+ readonly build: boolean;
132
+
133
+ /**
134
+ * Opt this request out of PPR shell serving/capture.
135
+ * Runtime middleware can call this before the PPR commit point; handlers can
136
+ * call it on a MISS to prevent the follow-up capture.
137
+ *
138
+ * Scope: the PPR SHELL axis only. It does NOT disable prerender B-segment
139
+ * (Prerender/Static) serving, and it is inert in the prerender-collect /
140
+ * static-render contexts (no live shell decision to influence there).
141
+ */
142
+ dynamic(): void;
143
+
144
+ /** @internal Request-local PPR opt-out marker set by ctx.dynamic(). */
145
+ _dynamic?: boolean;
146
+
101
147
  /** @internal Get a cookie value (effective: request + response mutations). Use cookies().get() instead. */
102
148
  cookie(name: string): string | undefined;
103
149
  /** @internal Get all cookies (effective merged view). Use cookies().getAll() instead. */
@@ -115,6 +161,10 @@ export interface RequestContext<
115
161
  setStatus(status: number): void;
116
162
  /** @internal Set status bypassing cache-exec guard (for framework error handling) */
117
163
  _setStatus(status: number): void;
164
+ /** @internal Rotate the rango state cookie (server seat of invalidateClientCache). */
165
+ _rotateStateCookie(): void;
166
+ /** @internal Set the keepClientCache() directive header on the response. */
167
+ _setKeepCacheDirective(): void;
118
168
 
119
169
  /**
120
170
  * Access loader data or push handle data.
@@ -150,28 +200,239 @@ export interface RequestContext<
150
200
  /** @internal Handle store for tracking handle data across segments */
151
201
  _handleStore: HandleStore;
152
202
 
203
+ /**
204
+ * @internal transition({ when }) predicates for segments matched this request,
205
+ * keyed by segment id. Collected during resolution (the function is stripped
206
+ * from the serialized segment config), then evaluated post-handler in
207
+ * rsc-rendering — outside any cache scope — to drop the transition of any
208
+ * segment whose predicate returns false.
209
+ */
210
+ _transitionWhen?: Array<{ id: string; when: TransitionWhenFn }>;
211
+
212
+ /** @internal PPR transition decisions evaluated before cache lookup/handlers. */
213
+ _pprTransitionDecisions?: Map<string, boolean>;
214
+
215
+ /**
216
+ * @internal Post-match serve-source truth for the PPR replay reporter.
217
+ * Stamped from the match context as `intercept`, then overwritten as
218
+ * `prerender-store` if that lookup actually serves. The latter wins because
219
+ * it identifies the response source. matchPartialWithPprReplay reads this
220
+ * AFTER matching to reclassify its pre-match guess and suppress pointless
221
+ * heal captures.
222
+ */
223
+ _pprReplayPostMatchReason?: "prerender-store" | "intercept";
224
+
153
225
  /** @internal Cache store for segment caching (optional, used by CacheScope) */
154
226
  _cacheStore?: SegmentCacheStore;
155
227
 
156
- /** @internal Cache profiles for "use cache" profile resolution (per-router) */
157
- _cacheProfiles?: Record<
228
+ /**
229
+ * @internal Compiled `cache.searchParams` filter for default cache-key
230
+ * generation (undefined = "all", the byte-stable unfiltered format). Set
231
+ * once per request by handler.ts; every URL-keyed tier (segment, document,
232
+ * response, shell, "use cache") reads it so the tiers cannot drift.
233
+ */
234
+ _searchParamsFilter?: import("../cache/search-params-filter.js").SearchParamsFilter;
235
+
236
+ /**
237
+ * @internal PPR shell-capture ACTIVE marker. True ONLY inside the background
238
+ * capture task's derived request context (built by shell-capture.ts). This is
239
+ * the switch every capture-specific behavior reads: loader masking
240
+ * (loader-mask.ts isShellCaptureActive / fresh.ts emitStreaming) and the
241
+ * cookies()/headers() capture guard (cookie-store.ts
242
+ * assertNotInsideShellCapture). The foreground render never sets it, so the
243
+ * served response is byte-identical to axis 1. The capture descriptor itself
244
+ * (key/ttl/swr/tags/store) is NOT threaded through the request context — the
245
+ * integrated PPR serve path (rsc/shell-serve.ts + rsc-rendering.ts) builds it
246
+ * locally and passes it to scheduleShellCapture directly.
247
+ */
248
+ _shellCaptureRun?: boolean;
249
+
250
+ /**
251
+ * @internal Bake-lane loader containers collected DURING a shell capture:
252
+ * segment-key -> the loader's (pre-wrap) result promise. Populated by
253
+ * resolveLoaderData for loaders on entries with no renderable loading() (the
254
+ * bake lane — they execute at capture instead of being masked; see
255
+ * docs/design/loader-container-bake.md). Drained by captureAndStoreShell
256
+ * after the shell quiesces: settled containers are promise-elided,
257
+ * Flight-serialized, and pinned into the snapshot's loader family; a
258
+ * REJECTED container refuses the capture (error UI must never bake into the
259
+ * shared shell). Own property of the capture's derived context only.
260
+ */
261
+ _shellCaptureLoaderRecords?: Map<string, Promise<unknown>>;
262
+
263
+ /**
264
+ * @internal Loader-family snapshot seed for a shell HIT's tail render:
265
+ * segment-key -> the capture's elided container (already Flight-deserialized
266
+ * by serveShellHit) plus its capture-computed hole bit. resolveLoaderData
267
+ * overlays it onto the fresh run's container (recorded paths pinned,
268
+ * hole-marker paths keep the fresh nested promises) so the payload's baked
269
+ * bytes match the frozen prelude; a hole-free entry resolves pin-first
270
+ * without gating on the fresh run. Own property of the HIT tail's derived
271
+ * context only.
272
+ */
273
+ _shellLoaderSeed?: Map<
158
274
  string,
159
- import("../cache/profile-registry.js").CacheProfile
275
+ import("../cache/shell-snapshot.js").ShellLoaderSeedEntry
160
276
  >;
161
277
 
162
278
  /**
163
- * Schedule work to run after the response is sent.
164
- * On Cloudflare Workers, uses ctx.waitUntil().
165
- * On Node.js, runs as fire-and-forget.
166
- *
167
- * @example
168
- * ```typescript
169
- * ctx.waitUntil(async () => {
170
- * await cacheStore.set(key, data, ttl);
171
- * });
172
- * ```
279
+ * @internal Shell fast-path marker: makes the next eligible match treat the
280
+ * whole matched route as an implicit doc-level cache() boundary (see
281
+ * resolveShellImplicitCacheScope in cache/cache-scope.ts). Set ONLY on
282
+ * (a) the capture's derived context — with a record-only store so the
283
+ * capture's cacheRoute write lands in the snapshot, never the real store —
284
+ * (b) a HIT tail's seeded context, and (c) an eligible normal-route partial
285
+ * replay, where `store` is a request-local segment overlay. Handler-live holes
286
+ * and conditional transitions decline replay.
287
+ * Routes with their own cache() config are never overridden — their scope's
288
+ * store/key/ttl/swr/condition semantics stay authoritative. On the
289
+ * navigation-replay serve path (`onExplicitHit` set) the marker COMPOSES with
290
+ * such a scope instead of being ignored: the seeded doc record supplies the match
291
+ * only when the explicit tier misses (withCacheLookup). cache(false) and a
292
+ * false condition() stay absolute opt-outs — replay bypasses before any
293
+ * shell read (`cache-disabled`).
173
294
  */
174
- waitUntil(fn: () => Promise<void>): void;
295
+ _shellImplicitCache?: {
296
+ ttl?: number;
297
+ swr?: number;
298
+ store?: SegmentCacheStore;
299
+ /**
300
+ * @internal Override the implicit scope's default cache namespace. Shell
301
+ * captures and navigation replay both consume the canonical document
302
+ * segment record even when the triggering request is partial.
303
+ */
304
+ keyPrefix?: "doc";
305
+ /** @internal Called only after the implicit cache hit decodes successfully. */
306
+ onHit?: () => void;
307
+ /**
308
+ * @internal Called when the seeded document record fails server-side
309
+ * deserialization. Partial replay uses it to replace the enclosing shell
310
+ * snapshot after serving the fresh fallback.
311
+ */
312
+ onCorrupt?: () => void;
313
+ /**
314
+ * @internal The resolved key of the canonical document segment record.
315
+ * Written during a CAPTURE render by CacheScope.cacheRoute when a
316
+ * doc-namespaced scope records the matched segments; captureAndStoreShell
317
+ * stamps it onto the ShellCacheEntry (`docKey`) so replay eligibility can
318
+ * require the exact consumable record instead of "any segment record".
319
+ */
320
+ docKey?: string;
321
+ /**
322
+ * @internal Set ONLY by matchPartialWithPprReplay on the navigation-replay
323
+ * serve path. Its presence arms the explicit-scope composition in
324
+ * withCacheLookup: a route-derived cache() scope stays authoritative, and
325
+ * only when its lookup MISSes does the seeded doc record supply the match.
326
+ * A capture render must never set this (its match must re-run handlers so
327
+ * SWR recapture stays fresh), which is why the fallback keys off this
328
+ * field and not off the marker itself. Fired when the route-derived
329
+ * scope's own lookup supplied the match — the header then reports
330
+ * `BYPASS; reason=explicit-cache-hit`, never a false replay HIT.
331
+ */
332
+ onExplicitHit?: () => void;
333
+ /**
334
+ * @internal Companion to onExplicitHit, same lifecycle: fired when the
335
+ * route-derived scope's lookup REFUSED the read (`bypass` outcome — a
336
+ * false condition() or no store). The gate only pre-decides the static
337
+ * cache(false) case; a predicate refusal is known only at lookup time and
338
+ * reports `BYPASS; reason=cache-disabled` post-match.
339
+ */
340
+ onExplicitBypass?: () => void;
341
+ };
342
+
343
+ /**
344
+ * @internal Fragment-passthrough marker: cache/prerender-store hits during
345
+ * THIS render emit stored segment fragments VERBATIM into the payload
346
+ * (segment-codec fragmentSegments) instead of deserialize -> re-serialize
347
+ * per request; the payload consumers (SSR resume, browser hydration, and
348
+ * the client partial-navigation decode chokepoints) expand them
349
+ * (segment-fragments.ts, issue #700). Partial requests arm only after the
350
+ * browser advertises `X-Rango-Fragment-Passthrough: 1`; a decode failure
351
+ * retries without it so CacheScope can evict the bad record. Two arming sites,
352
+ * both scoped to a
353
+ * render/match window: serveShellHit's derived tail context (document
354
+ * HIT), and matchPartialWithPprReplay's mutate-restore around the partial
355
+ * match (matchPartialForReplay). It must never be visible to a capture
356
+ * render: the capture SSR-prerenders the payload AND serializes segments
357
+ * into records (cacheRoute), and an envelope reaching serializeSegments
358
+ * would store a double-encoded fragment — deriveShellCaptureContext resets
359
+ * it as an own property for exactly that reason.
360
+ */
361
+ _shellFragmentPayload?: boolean;
362
+
363
+ /**
364
+ * @internal Handler-layer liveness observed DURING a shell capture, from
365
+ * three sources: (a) the capture handle-store push wrapper (shell-capture.ts)
366
+ * when a push made OUTSIDE a DSL loader scope carries a nested thenable
367
+ * (masked to a never-filling hole); (b) still-pending top-level handler
368
+ * pushes (liveness unknowable at the barrier); (c) a handler-invoked loader
369
+ * executing during the capture (loader-resolution.ts — its consumption-lane
370
+ * value would freeze on a handler-free HIT). captureAndStoreShell folds it
371
+ * into ShellCacheEntry.handlerLiveHoles at the putShell barrier. Own
372
+ * property of the capture's derived context only.
373
+ */
374
+ _shellCaptureHandleLiveness?: {
375
+ holes: boolean;
376
+ pendingPushes: number;
377
+ handlerInvokedLoader: boolean;
378
+ };
379
+
380
+ /**
381
+ * @internal Handle values pushed from a DSL loader scope DURING a shell
382
+ * capture (identity set; populated by the capture push wrapper in
383
+ * shell-capture.ts). cacheRoute threads it into captureHandles so those
384
+ * values stay out of cache-write handle records — loaders re-run fresh on
385
+ * every HIT, so replaying their captured (masked) values would duplicate
386
+ * the fresh push and stall the Flight handle encode. Own property of the
387
+ * capture's derived context only; render-time handle consumers are
388
+ * unaffected (the exclusion applies only at the captureHandles call site).
389
+ */
390
+ _shellCaptureLoaderHandleValues?: WeakSet<object>;
391
+
392
+ /**
393
+ * @internal Set (to the offending fn name) by the cookies()/headers()
394
+ * capture guard when it throws DURING a capture render. Load-bearing for the
395
+ * bake lane: a guard throw inside an executing loader is swallowed by
396
+ * wrapLoaderPromise into per-loader error UI, which would otherwise bake
397
+ * silently into the shared shell — the capture checks this flag after the
398
+ * render and refuses instead. Deterministic, so the capture does not retry.
399
+ */
400
+ _shellCaptureGuardTripped?: string;
401
+
402
+ /**
403
+ * @internal The loader $$id whose BODY was executing when the capture guard
404
+ * tripped (read off the loader-body ALS scope at trip time), or undefined
405
+ * when the read came from handler/render code. Only used to make the
406
+ * once-per-key refusal warning name the real source — the old text
407
+ * hardcoded "a bake-lane loader", which misattributed handler-land reads
408
+ * and sent users debugging the wrong lane (issue #672, secondary).
409
+ */
410
+ _shellCaptureGuardTrippedLoaderId?: string;
411
+
412
+ /**
413
+ * @internal Handler-owned registry of explicit per-scope stores from
414
+ * cache({ store }). Created once per createRSCHandler() and threaded into
415
+ * every request context, so it accumulates every explicit store the handler
416
+ * resolves. updateTag()/revalidateTag() iterate this set plus _cacheStore to
417
+ * reach every store that may hold tagged entries. The app-level store is not
418
+ * added here (it is always reachable via _cacheStore).
419
+ */
420
+ _explicitTaggedStores?: Set<SegmentCacheStore>;
421
+
422
+ /**
423
+ * @internal Union of every cache tag resolved while producing this request's
424
+ * response (from cache({ tags }), runtime cacheTag(), and loader cache tags).
425
+ * Populated at the tag-resolution sites via recordRequestTags(). Read by the
426
+ * document cache middleware so a full-page entry is tagged with everything its
427
+ * content used and can therefore be invalidated by updateTag()/revalidateTag().
428
+ */
429
+ _requestTags: Set<string>;
430
+
431
+ /** @internal Cache profiles for "use cache" profile resolution (per-router) */
432
+ _cacheProfiles?: Record<
433
+ string,
434
+ import("../cache/profile-registry.js").CacheProfile
435
+ >;
175
436
 
176
437
  /**
177
438
  * Register a callback to run when the response is created.
@@ -195,6 +456,19 @@ export interface RequestContext<
195
456
  /** @internal Registered onResponse callbacks */
196
457
  _onResponseCallbacks: Array<(response: Response) => Response>;
197
458
 
459
+ /**
460
+ * @internal Promises of the background tasks scheduled via this context's
461
+ * waitUntil (deferred cache writes, revalidations, consumer tasks). The PPR
462
+ * shell capture drains this list BEFORE its match/render as an ORDERING EDGE:
463
+ * every foreground deferred cache write is scheduled here before the capture
464
+ * task is, so settling the list first guarantees the capture's cache reads
465
+ * observe the foreground's generation instead of racing it (see
466
+ * shell-capture.ts). Tasks whose scheduling fn carries
467
+ * UNTRACKED_BACKGROUND_TASK are not tracked (the capture task itself —
468
+ * tracking it would make that drain await its own promise).
469
+ */
470
+ _pendingBackgroundTasks?: Array<Promise<unknown>>;
471
+
198
472
  /**
199
473
  * Current theme setting (only available when theme is enabled in router config)
200
474
  *
@@ -276,6 +550,30 @@ export interface RequestContext<
276
550
  /** @internal Previous route key (from the navigation source), used for revalidation */
277
551
  _prevRouteKey?: string;
278
552
 
553
+ /**
554
+ * @internal Navigation/action source data the transition({ when }) gate reads
555
+ * to build its ShouldRevalidateFn-shaped predicate context. currentUrl/Params
556
+ * come from the navigation snapshot (set at match time); action* are stashed
557
+ * at the action-bearing gate call sites. All undefined when there is no source
558
+ * (initial full load) or no action (plain navigation).
559
+ */
560
+ _gateCurrentUrl?: URL;
561
+ _gateCurrentParams?: Record<string, string>;
562
+ _gateActionId?: string;
563
+ _gateActionUrl?: URL;
564
+ _gateActionResult?: unknown;
565
+ _gateFormData?: FormData;
566
+
567
+ /**
568
+ * @internal True while the post-action revalidation render is running (set by
569
+ * revalidateAfterAction). The "use cache" runtime reads this to prefer
570
+ * freshness over a fast stale response during an action: a stale entry
571
+ * re-executes in the foreground (so the action response reflects the refreshed
572
+ * value) with only the store write deferred, instead of serving stale and
573
+ * revalidating in the background. A plain navigation (flag unset) keeps SWR.
574
+ */
575
+ _inActionRevalidation?: boolean;
576
+
279
577
  /**
280
578
  * @internal Render barrier for experimental `rendered()` API.
281
579
  * Resolves when all non-loader segments have settled and handle data
@@ -300,7 +598,9 @@ export interface RequestContext<
300
598
 
301
599
  /**
302
600
  * @internal Set to true when the matched entry tree contains any `loading()`
303
- * entries (streaming). Used by rendered() to fail fast.
601
+ * entries (streaming). On a streaming tree rendered() waits for the streaming
602
+ * handlers to settle (via handleStore.settled) before resolving, and the
603
+ * deadlock guard state is kept live until that wait completes.
304
604
  */
305
605
  _treeHasStreaming?: boolean;
306
606
 
@@ -318,12 +618,35 @@ export interface RequestContext<
318
618
  */
319
619
  _handlerLoaderDeps?: Set<string>;
320
620
 
621
+ /**
622
+ * @internal Loader IDs ($$id) whose entries carry `awaitBeforeFlush`
623
+ * (loader(Def, { ssr: false })): segment resolution awaits these
624
+ * before returning, so the render barrier cannot resolve until they settle.
625
+ * rendered() checks this set to fail fast — a flagged loader awaiting the
626
+ * barrier is a guaranteed cycle, not a race. Registered by resolveLoaders
627
+ * (fresh.ts) before loader kickoff; only ever populated on document renders
628
+ * (the flag is stamped per-isSSR at DSL evaluation).
629
+ */
630
+ _awaitBeforeFlushLoaderIds?: Set<string>;
631
+
321
632
  /**
322
633
  * @internal Cached HandleData snapshot built at barrier resolution time.
323
634
  * Avoids rebuilding the snapshot on every loader ctx.use(handle) call.
324
635
  */
325
636
  _renderBarrierHandleSnapshot?: HandleData;
326
637
 
638
+ /**
639
+ * @internal The deadlock guard window is closed (no further handler-awaits-
640
+ * loader cycle is possible). For non-streaming trees this is set when the
641
+ * barrier resolves. For streaming trees the window stays open until
642
+ * handleStore.settled — rendered() keeps waiting past the barrier and a
643
+ * loading() handler can still resume and await a still-waiting loader — so it
644
+ * is set only after settled. The guard (loader-resolution `setupLoaderAccess`)
645
+ * reads this instead of `_renderBarrierSegmentOrder` so it does not go blind
646
+ * during the streaming settle wait.
647
+ */
648
+ _renderBarrierGuardClosed?: boolean;
649
+
327
650
  /** @internal Per-request error dedup set for onError reporting */
328
651
  _reportedErrors: WeakSet<object>;
329
652
 
@@ -331,9 +654,13 @@ export interface RequestContext<
331
654
  * @internal Report a non-fatal background error through the router's
332
655
  * onError callback. Wired by the RSC handler / router during request
333
656
  * creation. Cache-runtime and other subsystems call this to surface
334
- * errors without failing the response.
657
+ * errors without failing the response. `category` is surfaced to consumers as
658
+ * `metadata.category` on the onError context (phase `cache`).
335
659
  */
336
- _reportBackgroundError?: (error: unknown, category: string) => void;
660
+ _reportBackgroundError?: (
661
+ error: unknown,
662
+ category: CacheErrorCategory,
663
+ ) => void;
337
664
 
338
665
  /** @internal Per-request debug performance override (set via ctx.debugPerformance()) */
339
666
  _debugPerformance?: boolean;
@@ -341,14 +668,59 @@ export interface RequestContext<
341
668
  /** @internal Request-scoped performance metrics store */
342
669
  _metricsStore?: MetricsStore;
343
670
 
671
+ /**
672
+ * @internal Foreground response-construction cursor. It reports only the
673
+ * generator driver's current Flight/HTML/response operation; concurrent
674
+ * loaders and post-commit stream work have separate lifetimes.
675
+ */
676
+ _renderForeground?: RenderForegroundCursor;
677
+
678
+ /** @internal Request routine currently executing, used by timeout diagnostics. */
679
+ _activeRoutine?: RoutineTrace;
680
+
681
+ /** @internal Keep the render cursor active for timeout support. */
682
+ _renderDiagnosticsEnabled?: boolean;
683
+
684
+ /**
685
+ * @internal True request entry timestamp (performance.now() at handler entry).
686
+ * Set once at request-context creation (rsc/handler.ts) so a metrics store
687
+ * created MID-request — ctx.debugPerformance() or the getMetricsStore wrapper —
688
+ * anchors its timeline to the real request start instead of the opt-in moment,
689
+ * keeping phases that began before the opt-in at their true (non-negative) offset.
690
+ */
691
+ _handlerStart?: number;
692
+
693
+ /** @internal Resolved platform phase-span tracing for this request (Cloudflare or OTel) */
694
+ _tracing?: ResolvedTracing;
695
+
344
696
  /** @internal Router basename for this request (used by redirect()) */
345
697
  _basename?: string;
346
698
 
699
+ /** @internal Owning router id; scopes the search-schema/root-scope registry
700
+ * lookups per router (route-map-builder.ts) */
701
+ _routerId?: string;
702
+
347
703
  /**
348
704
  * @internal RouteSnapshot from classifyRequest, reused by match/matchPartial
349
705
  * to avoid a second resolveRoute call. Cleared on HMR invalidation.
350
706
  */
351
707
  _classifiedRoute?: import("../router/route-snapshot.js").RouteSnapshot;
708
+
709
+ /**
710
+ * @internal Classified request mode from classifyRequest, read by the
711
+ * rango.response span tail (rsc/handler.ts) for the rango.response.mode
712
+ * attribute. Unset when middleware short-circuits before core execution.
713
+ */
714
+ _requestMode?: import("../router/request-classification.js").RequestPlan["mode"];
715
+
716
+ /**
717
+ * @internal Coarse route-level cache signal for the X-Rango-Cache debug
718
+ * header. Populated by match/matchPartial only when the debug cache signal
719
+ * gate is enabled (debugCacheSignal option or RANGO_TEST_SIGNALS=1). Read by
720
+ * the response-finalization path (createResponseWithMergedHeaders). Undefined
721
+ * when the gate is off, so no header is emitted.
722
+ */
723
+ _cacheSignal?: import("../router/telemetry.js").CacheSegmentSignal[];
352
724
  }
353
725
 
354
726
  /**
@@ -367,13 +739,36 @@ export type PublicRequestContext<
367
739
  | "setCookie"
368
740
  | "deleteCookie"
369
741
  | "_handleStore"
742
+ | "_transitionWhen"
743
+ | "_pprTransitionDecisions"
744
+ | "_pprReplayPostMatchReason"
370
745
  | "_cacheStore"
746
+ | "_searchParamsFilter"
747
+ | "_shellCaptureRun"
748
+ | "_shellImplicitCache"
749
+ | "_shellLoaderSeed"
750
+ | "_shellCaptureLoaderRecords"
751
+ | "_shellCaptureHandleLiveness"
752
+ | "_shellCaptureLoaderHandleValues"
753
+ | "_shellFragmentPayload"
754
+ | "_shellCaptureGuardTripped"
755
+ | "_shellCaptureGuardTrippedLoaderId"
756
+ | "_explicitTaggedStores"
757
+ | "_requestTags"
371
758
  | "_cacheProfiles"
372
759
  | "_onResponseCallbacks"
760
+ | "_pendingBackgroundTasks"
373
761
  | "_themeConfig"
374
762
  | "_locationState"
375
763
  | "_routeName"
376
764
  | "_prevRouteKey"
765
+ | "_gateCurrentUrl"
766
+ | "_gateCurrentParams"
767
+ | "_gateActionId"
768
+ | "_gateActionUrl"
769
+ | "_gateActionResult"
770
+ | "_gateFormData"
771
+ | "_inActionRevalidation"
377
772
  | "_reportedErrors"
378
773
  | "_renderBarrier"
379
774
  | "_resolveRenderBarrier"
@@ -381,17 +776,41 @@ export type PublicRequestContext<
381
776
  | "_treeHasStreaming"
382
777
  | "_renderBarrierWaiters"
383
778
  | "_handlerLoaderDeps"
779
+ | "_awaitBeforeFlushLoaderIds"
384
780
  | "_renderBarrierHandleSnapshot"
781
+ | "_renderBarrierGuardClosed"
385
782
  | "_reportBackgroundError"
386
783
  | "_debugPerformance"
387
784
  | "_metricsStore"
785
+ | "_renderForeground"
786
+ | "_activeRoutine"
787
+ | "_renderDiagnosticsEnabled"
788
+ | "_handlerStart"
789
+ | "_tracing"
388
790
  | "_basename"
791
+ | "_routerId"
389
792
  | "_setStatus"
793
+ | "_rotateStateCookie"
794
+ | "_setKeepCacheDirective"
390
795
  | "_variables"
391
796
  | "_classifiedRoute"
797
+ | "_requestMode"
798
+ | "_cacheSignal"
799
+ | "_dynamic"
392
800
  | "res"
393
801
  >;
394
802
 
803
+ /**
804
+ * Marker for a waitUntil-scheduled fn whose task promise must NOT enter
805
+ * _pendingBackgroundTasks. Used by the PPR shell capture for its own task:
806
+ * the capture's pre-render write barrier settles that list, so tracking the
807
+ * capture itself would make the drain wait on its own (still-running) promise.
808
+ * @internal
809
+ */
810
+ export const UNTRACKED_BACKGROUND_TASK: unique symbol = Symbol.for(
811
+ "rango.untrackedBackgroundTask",
812
+ );
813
+
395
814
  // AsyncLocalStorage instance for request context
396
815
  const requestContextStorage = new AsyncLocalStorage<RequestContext<any>>();
397
816
 
@@ -440,6 +859,7 @@ export function _getRequestContext<TEnv = DefaultEnv>():
440
859
  export function setRequestContextParams(
441
860
  params: Record<string, string>,
442
861
  routeName?: string,
862
+ routeMap?: Record<string, string>,
443
863
  ): void {
444
864
  const ctx = requestContextStorage.getStore();
445
865
  if (ctx) {
@@ -452,12 +872,16 @@ export function setRequestContextParams(
452
872
  : undefined
453
873
  ) as DefaultRouteName | undefined;
454
874
  }
455
- // Update reverse with scoped resolution now that route is known
875
+ // Update reverse with scoped resolution now that route is known. Production
876
+ // omits routeMap and uses the global map (routes are registered globally);
877
+ // the testing primitives (renderToFlightString/renderServerTree) pass a
878
+ // scoped routeMap so `ctx.reverse` is not order-dependent on whatever router
879
+ // registered last.
456
880
  ctx.reverse = createReverseFunction(
457
- getGlobalRouteMap(),
881
+ routeMap ?? getGlobalRouteMap(),
458
882
  routeName,
459
883
  params,
460
- routeName ? isRouteRootScoped(routeName) : undefined,
884
+ routeName ? isRouteRootScoped(routeName, ctx._routerId) : undefined,
461
885
  );
462
886
  }
463
887
  }
@@ -470,11 +894,17 @@ export function setRequestContextParams(
470
894
  */
471
895
  export function setRequestContextPrevRouteKey(
472
896
  prevRouteKey: string | undefined,
897
+ currentUrl?: URL,
898
+ currentParams?: Record<string, string>,
473
899
  ): void {
474
900
  const ctx = requestContextStorage.getStore();
475
- if (ctx && prevRouteKey !== undefined) {
476
- ctx._prevRouteKey = prevRouteKey;
477
- }
901
+ if (!ctx) return;
902
+ if (prevRouteKey !== undefined) ctx._prevRouteKey = prevRouteKey;
903
+ // Source URL/params for the transition({ when }) gate (effectiveFromUrl /
904
+ // effectiveFromMatch.params from the navigation snapshot). Same write point as
905
+ // _prevRouteKey, which doubles as fromRouteName.
906
+ if (currentUrl !== undefined) ctx._gateCurrentUrl = currentUrl;
907
+ if (currentParams !== undefined) ctx._gateCurrentParams = currentParams;
478
908
  }
479
909
 
480
910
  /**
@@ -488,23 +918,7 @@ export function getLocationState(): LocationStateEntry[] | undefined {
488
918
  return ctx?._locationState;
489
919
  }
490
920
 
491
- /**
492
- * Get the current request context, throwing if not available
493
- * @deprecated Use getRequestContext() directly — it now throws if outside context
494
- */
495
- export function requireRequestContext<
496
- TEnv = DefaultEnv,
497
- >(): RequestContext<TEnv> {
498
- return getRequestContext<TEnv>();
499
- }
500
-
501
- /**
502
- * Cloudflare Workers ExecutionContext (subset we need)
503
- */
504
- export interface ExecutionContext {
505
- waitUntil(promise: Promise<any>): void;
506
- passThroughOnException(): void;
507
- }
921
+ export type { ExecutionContext };
508
922
 
509
923
  /**
510
924
  * Options for creating a request context
@@ -518,6 +932,16 @@ export interface CreateRequestContextOptions<TEnv> {
518
932
  initialResponse?: Response;
519
933
  /** Optional cache store for segment caching (used by CacheScope) */
520
934
  cacheStore?: SegmentCacheStore;
935
+ /**
936
+ * Compiled `cache.searchParams` filter from the resolved handler cache
937
+ * config (handler.ts). Stored as _searchParamsFilter.
938
+ */
939
+ searchParamsFilter?: import("../cache/search-params-filter.js").SearchParamsFilter;
940
+ /**
941
+ * Handler-owned registry of explicit per-scope stores for cross-store tag
942
+ * invalidation. Created once per handler, reused across requests.
943
+ */
944
+ explicitTaggedStores?: Set<SegmentCacheStore>;
521
945
  /** Optional cache profiles for "use cache" resolution (per-router) */
522
946
  cacheProfiles?: Record<
523
947
  string,
@@ -525,8 +949,14 @@ export interface CreateRequestContextOptions<TEnv> {
525
949
  >;
526
950
  /** Optional Cloudflare execution context for waitUntil support */
527
951
  executionContext?: ExecutionContext;
952
+ /** Build-time render/capture request marker. Defaults to false. */
953
+ build?: boolean;
528
954
  /** Optional theme configuration (enables ctx.theme and ctx.setTheme) */
529
955
  themeConfig?: ResolvedThemeConfig | null;
956
+ /** Resolved rango state cookie name, for the server seat of invalidateClientCache(). */
957
+ stateCookieName?: string;
958
+ /** Build version, used as the prefix of a server-rotated rango state value. */
959
+ version?: string;
530
960
  }
531
961
 
532
962
  /**
@@ -547,15 +977,19 @@ export function createRequestContext<TEnv>(
547
977
  variables,
548
978
  initialResponse,
549
979
  cacheStore,
980
+ searchParamsFilter,
981
+ explicitTaggedStores,
550
982
  cacheProfiles,
551
983
  executionContext,
984
+ build = false,
552
985
  themeConfig,
986
+ stateCookieName,
987
+ version: stateVersion,
553
988
  } = options;
554
989
  const cookieHeader = request.headers.get("Cookie");
990
+ let rangoStateRotated = false;
555
991
  let parsedCookies: Record<string, string> | null = null;
556
992
 
557
- // Create stub response for collecting headers/cookies.
558
- // All cookie/header mutations go here; cookie reads derive from it.
559
993
  let stubResponse = initialResponse
560
994
  ? new Response(null, {
561
995
  status: initialResponse.status,
@@ -564,11 +998,53 @@ export function createRequestContext<TEnv>(
564
998
  })
565
999
  : new Response(null, { status: 200 });
566
1000
 
567
- // Create handle store and loader memoization for this request
1001
+ // The #713 choke point: `rawStubHeaders` is the stub's REAL Headers; the
1002
+ // proxy below is the only view reachable from consumer code, and its
1003
+ // mutating methods consult the cached-scope guard first. shadowStubHeaders
1004
+ // shadows `headers` on the stub Response INSTANCE (a real Response, not a
1005
+ // facade — safe to hand to the platform), so every surface that ends in a
1006
+ // stub-header mutation — ctx.header/setCookie/deleteCookie, ctx.setTheme,
1007
+ // the handler ctx.headers proxy, and raw `ctx.res.headers.set(...)` — is
1008
+ // guarded at the mutation itself, not per enumerated wrapper. Guard-exempt
1009
+ // internal writers (_rotateStateCookie, _setKeepCacheDirective — serve
1010
+ // machinery, documented callable from loaders/during capture) write to
1011
+ // rawStubHeaders directly. The serve/commit path's stub reads and its
1012
+ // Set-Cookie drain (rsc/helpers.ts) run outside any latched funnel scope,
1013
+ // where assertCachedHeaderWriteAllowed is a no-op.
1014
+ let rawStubHeaders = stubResponse.headers;
1015
+ const guardedStubHeaders: Headers = new Proxy(new Headers(), {
1016
+ get(_target, prop) {
1017
+ const raw = rawStubHeaders;
1018
+ const value = Reflect.get(raw, prop) as unknown;
1019
+ if (typeof value !== "function") return value;
1020
+ if (prop === "set" || prop === "append" || prop === "delete") {
1021
+ return (...args: unknown[]) => {
1022
+ assertCachedHeaderWriteAllowed("response headers", prop);
1023
+ return (value as (...a: unknown[]) => unknown).apply(raw, args);
1024
+ };
1025
+ }
1026
+ return (value as (...a: unknown[]) => unknown).bind(raw);
1027
+ },
1028
+ });
1029
+ const shadowStubHeaders = (res: Response): void => {
1030
+ Object.defineProperty(res, "headers", {
1031
+ value: guardedStubHeaders,
1032
+ enumerable: true,
1033
+ configurable: true,
1034
+ });
1035
+ };
1036
+ shadowStubHeaders(stubResponse);
1037
+ // Rebuild the stub with a new status, re-shadowing the fresh instance
1038
+ // (the Response constructor copies rawStubHeaders into new raw Headers).
1039
+ const replaceStubStatus = (status: number): void => {
1040
+ stubResponse = new Response(null, { status, headers: rawStubHeaders });
1041
+ rawStubHeaders = stubResponse.headers;
1042
+ shadowStubHeaders(stubResponse);
1043
+ };
1044
+
568
1045
  const handleStore = createHandleStore();
569
1046
  const loaderPromises = new Map<string, Promise<any>>();
570
1047
 
571
- // Lazy parse cookies from the original Cookie header
572
1048
  const getParsedCookies = (): Record<string, string> => {
573
1049
  if (!parsedCookies) {
574
1050
  parsedCookies = parseCookiesFromHeader(cookieHeader);
@@ -576,7 +1052,6 @@ export function createRequestContext<TEnv>(
576
1052
  return parsedCookies;
577
1053
  };
578
1054
 
579
- // Cached response cookie mutations — invalidated on setCookie/deleteCookie/setTheme
580
1055
  let responseCookieCache: Map<string, string | null> | null = null;
581
1056
  const getResponseCookies = (): Map<string, string | null> => {
582
1057
  if (!responseCookieCache) {
@@ -588,20 +1063,15 @@ export function createRequestContext<TEnv>(
588
1063
  responseCookieCache = null;
589
1064
  };
590
1065
 
591
- // Guard: throw if a response-level side effect is called inside a cache() scope.
592
- // Uses ALS to detect the scope (set during segment resolution).
593
- function assertNotInsideCacheScopeALS(methodName: string): void {
594
- if (isInsideCacheScope()) {
595
- throw new Error(
596
- `ctx.${methodName}() cannot be called inside a cache() boundary. ` +
597
- `On cache hit the handler is skipped, so this side effect would be lost. ` +
598
- `Move ctx.${methodName}() to a middleware or layout outside the cache() scope.`,
599
- );
600
- }
1066
+ // Guard for the two response-write surfaces that are NOT Headers mutations
1067
+ // (setStatus rebuilds the stub Response, onResponse registers a callback)
1068
+ // these can't ride the guarded-headers choke point above, so they stay
1069
+ // enumerated. Same unified #713 guard, same message family.
1070
+ function assertResponseWriteAllowed(methodName: string): void {
1071
+ assertCachedHeaderWriteAllowed("ctx", methodName);
601
1072
  }
602
1073
 
603
- // Effective cookie read: response stub Set-Cookie wins, then original header.
604
- // The stub IS the source of truth for same-request mutations.
1074
+ // Response stub Set-Cookie wins, then original header (source of truth for mutations).
605
1075
  const effectiveCookie = (name: string): string | undefined => {
606
1076
  const mutations = getResponseCookies();
607
1077
  if (mutations.has(name)) {
@@ -611,14 +1081,11 @@ export function createRequestContext<TEnv>(
611
1081
  return getParsedCookies()[name];
612
1082
  };
613
1083
 
614
- // Theme helpers (only used when themeConfig is provided)
615
1084
  const getTheme = (): Theme | undefined => {
616
1085
  if (!themeConfig) return undefined;
617
1086
 
618
- // Use overlay-aware read so setTheme() in the same request is reflected
619
1087
  const stored = effectiveCookie(themeConfig.storageKey);
620
1088
  if (stored) {
621
- // Validate stored value
622
1089
  if (stored === "system" && themeConfig.enableSystem) {
623
1090
  return "system";
624
1091
  }
@@ -632,15 +1099,15 @@ export function createRequestContext<TEnv>(
632
1099
  const setTheme = (theme: Theme): void => {
633
1100
  if (!themeConfig) return;
634
1101
 
635
- // Validate theme value
636
- if (theme !== "system" && !themeConfig.themes.includes(theme)) {
637
- console.warn(
638
- `[Theme] Invalid theme value: "${theme}". Valid values: system, ${themeConfig.themes.join(", ")}`,
639
- );
1102
+ // Shared guard (isValidTheme): reject any value not in the configured theme
1103
+ // set, AND reject "system" when system detection is off — a cookie of
1104
+ // theme=system with enableSystem:false would re-apply a bogus class="system"
1105
+ // on the next SSR.
1106
+ if (!isValidTheme(theme, themeConfig)) {
1107
+ warnInvalidTheme(theme, themeConfig);
640
1108
  return;
641
1109
  }
642
1110
 
643
- // Write to stub — effectiveCookie() will pick it up on next read
644
1111
  stubResponse.headers.append(
645
1112
  "Set-Cookie",
646
1113
  serializeCookieValue(themeConfig.storageKey, theme, {
@@ -652,10 +1119,8 @@ export function createRequestContext<TEnv>(
652
1119
  invalidateResponseCookieCache();
653
1120
  };
654
1121
 
655
- // Strip internal _rsc* params so userland sees a clean URL.
656
1122
  const cleanUrl = stripInternalParams(url);
657
1123
 
658
- // Build the context object first (without use), then add use
659
1124
  const ctx: RequestContext<TEnv> = {
660
1125
  env,
661
1126
  request,
@@ -664,6 +1129,16 @@ export function createRequestContext<TEnv>(
664
1129
  pathname: url.pathname,
665
1130
  searchParams: cleanUrl.searchParams,
666
1131
  _variables: variables,
1132
+ build,
1133
+ dynamic(): void {
1134
+ ctx._dynamic = true;
1135
+ // A dynamic() render is always live (never a shell HIT), so its handler
1136
+ // header writes are deterministic — clear the ppr latch to re-permit them
1137
+ // (#735). No-op from middleware (outside the funnel scope) or on non-ppr
1138
+ // routes; cache() latches are left alone.
1139
+ clearPprHeaderScope();
1140
+ },
1141
+ _dynamic: false,
667
1142
  get: ((keyOrVar: any) => {
668
1143
  if (isNonCacheable(variables, keyOrVar) && isInsideCacheScope()) {
669
1144
  throw new Error(
@@ -714,7 +1189,6 @@ export function createRequestContext<TEnv>(
714
1189
 
715
1190
  setCookie(name: string, value: string, options?: CookieOptions): void {
716
1191
  assertNotInsideCacheExec(ctx, "setCookie");
717
- assertNotInsideCacheScopeALS("setCookie");
718
1192
  stubResponse.headers.append(
719
1193
  "Set-Cookie",
720
1194
  serializeCookieValue(name, value, options),
@@ -727,7 +1201,6 @@ export function createRequestContext<TEnv>(
727
1201
  options?: Pick<CookieOptions, "domain" | "path">,
728
1202
  ): void {
729
1203
  assertNotInsideCacheExec(ctx, "deleteCookie");
730
- assertNotInsideCacheScopeALS("deleteCookie");
731
1204
  stubResponse.headers.append(
732
1205
  "Set-Cookie",
733
1206
  serializeCookieValue(name, "", { ...options, maxAge: 0 }),
@@ -737,56 +1210,113 @@ export function createRequestContext<TEnv>(
737
1210
 
738
1211
  header(name: string, value: string): void {
739
1212
  assertNotInsideCacheExec(ctx, "header");
740
- assertNotInsideCacheScopeALS("header");
741
1213
  stubResponse.headers.set(name, value);
742
1214
  },
743
1215
 
1216
+ // Rotate the rango state cookie for the responding client (the server seat
1217
+ // of invalidateClientCache). Writes ONE Set-Cookie per request with the
1218
+ // value {version}:{timestamp}; the `:` stays raw (the cookie-name.ts
1219
+ // serializer), not the URL-encoded form serializeCookieValue would produce.
1220
+ // The timestamp is strictly greater than the client's current one (inbound
1221
+ // X-Rango-State), so a same-millisecond server rotation still differs from
1222
+ // the client value and the divergence observer fires.
1223
+ _rotateStateCookie(): void {
1224
+ if (rangoStateRotated) return;
1225
+ rangoStateRotated = true;
1226
+ if (!stateCookieName) return;
1227
+ // The client's current value, for the monotonic guard: prefer the
1228
+ // X-Rango-State header (router navigation/prefetch fetches send it), but
1229
+ // fall back to the request's rango state cookie — action POSTs / plain
1230
+ // app fetch()s carry no router header yet DO send the cookie. Without the
1231
+ // fallback, prevTs stays 0 and a same-ms mint can equal the client value,
1232
+ // leaving the divergence observer silent. `|| null` so an empty header
1233
+ // ('' from proxy normalization) falls through instead of short-circuiting.
1234
+ // getRawCookieValue reads the cookie undecoded (the wire value
1235
+ // decodeStateValue decodes exactly once) AND is the same parser the client
1236
+ // mirror uses, so both seats read the same jar entry.
1237
+ const prevRaw =
1238
+ (request.headers.get("x-rango-state") || null) ??
1239
+ getRawCookieValue(cookieHeader, stateCookieName);
1240
+ const value = mintStateValue(stateVersion ?? "0", prevRaw);
1241
+ // rawStubHeaders: guard-exempt internal writer — invalidateClientCache()
1242
+ // is documented callable from loaders and during shell capture.
1243
+ rawStubHeaders.append(
1244
+ "Set-Cookie",
1245
+ serializeStateCookie(stateCookieName, value, url.protocol === "https:"),
1246
+ );
1247
+ invalidateResponseCookieCache();
1248
+ },
1249
+
1250
+ // Set the keepClientCache() directive header. The action bridge reads it on
1251
+ // the response and suppresses its automatic invalidation. `.set` makes this
1252
+ // idempotent (one header regardless of call count). rawStubHeaders:
1253
+ // guard-exempt internal writer.
1254
+ _setKeepCacheDirective(): void {
1255
+ rawStubHeaders.set(KEEP_CACHE_HEADER, "1");
1256
+ },
1257
+
744
1258
  setStatus(status: number): void {
745
1259
  assertNotInsideCacheExec(ctx, "setStatus");
746
- assertNotInsideCacheScopeALS("setStatus");
747
- stubResponse = new Response(null, {
748
- status,
749
- headers: stubResponse.headers,
750
- });
1260
+ assertResponseWriteAllowed("setStatus");
1261
+ replaceStubStatus(status);
751
1262
  },
752
1263
 
753
1264
  _setStatus(status: number): void {
754
- stubResponse = new Response(null, {
755
- status,
756
- headers: stubResponse.headers,
757
- });
1265
+ replaceStubStatus(status);
758
1266
  },
759
1267
 
760
- // Placeholder - will be replaced below
761
1268
  use: null as any,
762
1269
 
763
1270
  method: request.method,
764
1271
 
765
1272
  _handleStore: handleStore,
1273
+ _transitionWhen: [],
766
1274
  _cacheStore: cacheStore,
1275
+ _searchParamsFilter: searchParamsFilter,
1276
+ _explicitTaggedStores: explicitTaggedStores,
1277
+ _requestTags: new Set<string>(),
767
1278
  _cacheProfiles: cacheProfiles,
768
1279
 
769
1280
  waitUntil(fn: () => Promise<void>): void {
1281
+ if (ctx.build) return;
1282
+ // Wrap in Promise.resolve().then(fn) so a SYNCHRONOUS throw in a
1283
+ // non-async callback becomes a rejected promise handed to the host's
1284
+ // waitUntil (logged as a background failure), instead of escaping into
1285
+ // the request flow. Mirrors fireAndForgetWaitUntil's deferral.
1286
+ const task = Promise.resolve().then(fn);
1287
+ // Track the task promise so the PPR shell capture can settle the
1288
+ // foreground's deferred cache writes before its own match/render (the
1289
+ // ordering edge; see _pendingBackgroundTasks). The capture task itself
1290
+ // opts out via the marker — the drain must never await its own promise.
1291
+ if (
1292
+ !(fn as { [UNTRACKED_BACKGROUND_TASK]?: boolean })[
1293
+ UNTRACKED_BACKGROUND_TASK
1294
+ ]
1295
+ ) {
1296
+ ctx._pendingBackgroundTasks?.push(task);
1297
+ }
770
1298
  if (executionContext?.waitUntil) {
771
- // Cloudflare Workers: use native waitUntil
772
- executionContext.waitUntil(fn());
1299
+ executionContext.waitUntil(task);
773
1300
  } else {
774
- // Node.js / dev: fire-and-forget with error logging
775
- fn().catch((err) =>
1301
+ // Node/dev fallback: fire-and-forget with error logging (the same
1302
+ // policy fireAndForgetWaitUntil applies).
1303
+ task.catch((err) =>
776
1304
  console.error("[waitUntil] Background task failed:", err),
777
1305
  );
778
1306
  }
779
1307
  },
780
1308
 
1309
+ executionContext,
1310
+
781
1311
  _onResponseCallbacks: [],
1312
+ _pendingBackgroundTasks: [],
782
1313
 
783
1314
  onResponse(callback: (response: Response) => Response): void {
784
1315
  assertNotInsideCacheExec(ctx, "onResponse");
785
- assertNotInsideCacheScopeALS("onResponse");
1316
+ assertResponseWriteAllowed("onResponse");
786
1317
  this._onResponseCallbacks.push(callback);
787
1318
  },
788
1319
 
789
- // Theme properties (only set when themeConfig is provided)
790
1320
  get theme() {
791
1321
  return themeConfig ? getTheme() : undefined;
792
1322
  },
@@ -809,20 +1339,69 @@ export function createRequestContext<TEnv>(
809
1339
 
810
1340
  _reportedErrors: new WeakSet<object>(),
811
1341
  _metricsStore: undefined,
1342
+ _renderForeground: undefined,
1343
+ _activeRoutine: undefined,
1344
+ _renderDiagnosticsEnabled: undefined,
1345
+ _handlerStart: undefined,
812
1346
 
813
- // Render barrier: deferred promise resolved after non-loader segments settle.
814
- _renderBarrier: null as any, // set below
815
- _resolveRenderBarrier: null as any, // set below
1347
+ _renderBarrier: null as any,
1348
+ _resolveRenderBarrier: null as any,
816
1349
  _renderBarrierSegmentOrder: undefined,
817
1350
 
818
1351
  reverse: createReverseFunction(getGlobalRouteMap(), undefined, {}),
819
1352
  };
820
1353
 
821
- // Lazy render barrier: only allocate the Promise when a loader actually
822
- // calls rendered(). Requests that don't use rendered() pay zero cost.
1354
+ wireRenderBarrier(ctx, handleStore);
1355
+
1356
+ ctx.use = createUseFunction({
1357
+ handleStore,
1358
+ loaderPromises,
1359
+ getContext: () => ctx,
1360
+ });
1361
+
1362
+ (ctx as any)[NOCACHE_SYMBOL] = true;
1363
+ return ctx;
1364
+ }
1365
+
1366
+ /**
1367
+ * Wire a fresh render barrier onto `ctx`, closure-bound to THIS ctx and THIS
1368
+ * handle store. Called by createRequestContext for every fresh context, and by
1369
+ * deriveShellCaptureContext (rsc/shell-capture.ts) for the PPR capture's
1370
+ * derived context.
1371
+ *
1372
+ * The derived-context call is load-bearing (issue #684, plan 009): the capture
1373
+ * context is `Object.create(reqCtx)`, so without its own wiring every
1374
+ * `_renderBarrier*` read fell through the prototype to the FOREGROUND
1375
+ * request's barrier — whose getter and resolver are closure-bound to the
1376
+ * foreground ctx and its handle store, and whose resolver no-ops once
1377
+ * resolved. A bake-lane loader's `await ctx.rendered()` during capture then
1378
+ * resolved instantly against the foreground's barrier and `ctx.use(handle)`
1379
+ * read the foreground's handle snapshot; the capture's fresh `_handleStore`
1380
+ * was invisible, so foreground per-request handle data could bake into the
1381
+ * shared shell.
1382
+ */
1383
+ export function wireRenderBarrier(
1384
+ ctx: RequestContext<any, any>,
1385
+ handleStore: HandleStore,
1386
+ ): void {
1387
+ // Reset the whole barrier family as OWN properties. No-op for a fresh
1388
+ // context; for the derived capture context this shadows the foreground's
1389
+ // resolved state so the capture runs its own barrier lifecycle. In
1390
+ // particular _treeHasStreaming must be recomputed for the CAPTURE's tree
1391
+ // (cache-lookup/segment-resolution only set it when undefined): an
1392
+ // inherited `true` made a capture-lane rendered() seal the capture's fresh
1393
+ // store at loader start and pair it with the foreground's segment order.
1394
+ ctx._renderBarrierSegmentOrder = undefined;
1395
+ ctx._renderBarrierWaiters = undefined;
1396
+ ctx._renderBarrierHandleSnapshot = undefined;
1397
+ ctx._renderBarrierGuardClosed = undefined;
1398
+ ctx._handlerLoaderDeps = undefined;
1399
+ ctx._awaitBeforeFlushLoaderIds = undefined;
1400
+ ctx._treeHasStreaming = undefined;
1401
+
1402
+ // Lazy allocation: only create the Promise when a loader calls rendered().
823
1403
  let barrierResolved = false;
824
1404
  let resolveBarrier: (() => void) | undefined;
825
- ctx._renderBarrier = null as any; // lazy — created on first access
826
1405
  ctx._resolveRenderBarrier = (
827
1406
  segments: Array<{ type: string; id: string }>,
828
1407
  ) => {
@@ -832,21 +1411,29 @@ export function createRequestContext<TEnv>(
832
1411
  .filter((s) => s.type !== "loader")
833
1412
  .map((s) => s.id);
834
1413
  ctx._renderBarrierSegmentOrder = segOrder;
835
- // Build and cache handle snapshot so loader ctx.use(handle) calls
836
- // don't rebuild it on every invocation.
837
- ctx._renderBarrierHandleSnapshot = buildHandleSnapshot(
838
- handleStore,
839
- segOrder,
840
- );
841
- ctx._renderBarrierWaiters = undefined;
842
- ctx._handlerLoaderDeps = undefined;
1414
+
1415
+ const closeGuard = () => {
1416
+ ctx._renderBarrierWaiters = undefined;
1417
+ ctx._handlerLoaderDeps = undefined;
1418
+ ctx._renderBarrierGuardClosed = true;
1419
+ };
1420
+
1421
+ if (ctx._treeHasStreaming) {
1422
+ handleStore.settled.then(closeGuard);
1423
+ } else {
1424
+ ctx._renderBarrierHandleSnapshot = buildHandleSnapshot(
1425
+ handleStore,
1426
+ segOrder,
1427
+ );
1428
+ closeGuard();
1429
+ }
843
1430
  if (resolveBarrier) resolveBarrier();
844
1431
  };
1432
+ // defineProperty, not assignment: on a derived context the prototype's
1433
+ // _renderBarrier may already be a non-writable data property (the getter
1434
+ // pins it after first access), which would reject a plain assignment.
845
1435
  Object.defineProperty(ctx, "_renderBarrier", {
846
1436
  get() {
847
- // Barrier already resolved (cache/prerender hit) or first lazy access.
848
- // Either way, replace the getter with a concrete value to avoid
849
- // repeated Promise.resolve() allocations on subsequent reads.
850
1437
  const p = barrierResolved
851
1438
  ? Promise.resolve()
852
1439
  : new Promise<void>((resolve) => {
@@ -861,33 +1448,25 @@ export function createRequestContext<TEnv>(
861
1448
  },
862
1449
  configurable: true,
863
1450
  });
1451
+ }
864
1452
 
865
- // Now create use() with access to ctx
866
- ctx.use = createUseFunction({
867
- handleStore,
868
- loaderPromises,
869
- getContext: () => ctx,
870
- });
1453
+ // Capture the Max-Age value so it can be parsed numerically. A leading zero
1454
+ // (Max-Age=05) is a non-zero lifetime, not a deletion; only a value that parses
1455
+ // to <= 0 marks a cookie for deletion. Pattern-matching a leading "0" misread
1456
+ // zero-prefixed values like 05 / 010 as deletions.
1457
+ const MAX_AGE_RE = /;\s*Max-Age\s*=\s*(-?\d+)/i;
871
1458
 
872
- // Brand with taint symbol so "use cache" excludes ctx from cache keys
873
- (ctx as any)[NOCACHE_SYMBOL] = true;
874
- return ctx;
1459
+ function isCookieDeletion(header: string): boolean {
1460
+ const m = MAX_AGE_RE.exec(header);
1461
+ if (!m) return false;
1462
+ return Number(m[1]) <= 0;
875
1463
  }
876
1464
 
877
- /**
878
- * Parse Set-Cookie headers from a response into effective cookie state.
879
- * Returns a map of cookie name -> value (string) or name -> null (deleted).
880
- * Last-write-wins: later Set-Cookie entries for the same name overwrite earlier ones.
881
- * Max-Age=0 is treated as a delete.
882
- */
883
- const MAX_AGE_ZERO_RE = /;\s*Max-Age\s*=\s*0/i;
884
-
885
1465
  function parseResponseCookies(response: Response): Map<string, string | null> {
886
1466
  const result = new Map<string, string | null>();
887
1467
  const setCookies = response.headers.getSetCookie();
888
1468
 
889
1469
  for (const header of setCookies) {
890
- // First segment before ';' is the name=value pair
891
1470
  const semiIdx = header.indexOf(";");
892
1471
  const pair = semiIdx === -1 ? header : header.substring(0, semiIdx);
893
1472
  const eqIdx = pair.indexOf("=");
@@ -899,62 +1478,78 @@ function parseResponseCookies(response: Response): Map<string, string | null> {
899
1478
  name = decodeURIComponent(pair.substring(0, eqIdx).trim());
900
1479
  value = decodeURIComponent(pair.substring(eqIdx + 1).trim());
901
1480
  } catch {
902
- // Malformed encoding — skip this entry
903
1481
  continue;
904
1482
  }
905
1483
 
906
- // Max-Age=0 means the cookie is being deleted
907
- const isDeleted = MAX_AGE_ZERO_RE.test(header);
1484
+ const isDeleted = isCookieDeletion(header);
908
1485
  result.set(name, isDeleted ? null : value);
909
1486
  }
910
1487
 
911
1488
  return result;
912
1489
  }
913
1490
 
914
- /**
915
- * Parse cookies from Cookie header
916
- */
917
- function parseCookiesFromHeader(
918
- cookieHeader: string | null,
919
- ): Record<string, string> {
920
- if (!cookieHeader) return {};
921
-
922
- const cookies: Record<string, string> = {};
923
- const pairs = cookieHeader.split(";");
924
-
925
- for (const pair of pairs) {
926
- const [name, ...rest] = pair.trim().split("=");
927
- if (name) {
928
- const raw = rest.join("=");
929
- try {
930
- cookies[name] = decodeURIComponent(raw);
931
- } catch {
932
- // Malformed percent-encoded value (e.g. %zz, %2) - fall back to raw value
933
- cookies[name] = raw;
934
- }
1491
+ // Re-exported for unit tests and the existing import path. The implementation
1492
+ // lives in the dependency-free ./cookie-parse leaf so consumers (e.g. the host
1493
+ // dispatcher) can share it without pulling this module's request-context graph.
1494
+ export { parseCookiesFromHeader };
1495
+
1496
+ /** Reject CR/LF/;/,/whitespace/control so raw attribute interpolation cannot inject. */
1497
+ function assertSafeCookieAttribute(
1498
+ value: string,
1499
+ label: "domain" | "path",
1500
+ ): void {
1501
+ for (let i = 0; i < value.length; i++) {
1502
+ const code = value.charCodeAt(i);
1503
+ if (code <= 0x20 || code === 0x7f || value[i] === ";" || value[i] === ",") {
1504
+ throw new Error(
1505
+ label === "domain" ? "invalid cookie domain" : "invalid cookie path",
1506
+ );
935
1507
  }
936
1508
  }
937
-
938
- return cookies;
939
1509
  }
940
1510
 
941
- /**
942
- * Serialize a cookie for Set-Cookie header
943
- */
944
- function serializeCookieValue(
1511
+ export function serializeCookieValue(
945
1512
  name: string,
946
1513
  value: string,
947
1514
  options: CookieOptions = {},
948
1515
  ): string {
949
1516
  let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
950
1517
 
951
- if (options.domain) cookie += `; Domain=${options.domain}`;
952
- if (options.path) cookie += `; Path=${options.path}`;
953
- if (options.maxAge !== undefined) cookie += `; Max-Age=${options.maxAge}`;
1518
+ if (options.domain) {
1519
+ assertSafeCookieAttribute(options.domain, "domain");
1520
+ cookie += `; Domain=${options.domain}`;
1521
+ }
1522
+ if (options.path) {
1523
+ if (!options.path.startsWith("/")) {
1524
+ throw new Error("invalid cookie path");
1525
+ }
1526
+ assertSafeCookieAttribute(options.path, "path");
1527
+ cookie += `; Path=${options.path}`;
1528
+ }
1529
+ if (options.maxAge !== undefined) {
1530
+ // Safe integer: Number.isInteger(1e21) is true but stringifies as "1e+21",
1531
+ // which is invalid Max-Age wire syntax. Number.isSafeInteger rejects that.
1532
+ if (
1533
+ typeof options.maxAge !== "number" ||
1534
+ !Number.isSafeInteger(options.maxAge)
1535
+ ) {
1536
+ throw new Error("invalid cookie maxAge");
1537
+ }
1538
+ cookie += `; Max-Age=${options.maxAge}`;
1539
+ }
954
1540
  if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;
955
1541
  if (options.httpOnly) cookie += "; HttpOnly";
956
1542
  if (options.secure) cookie += "; Secure";
957
- if (options.sameSite) cookie += `; SameSite=${options.sameSite}`;
1543
+ if (options.sameSite) {
1544
+ if (
1545
+ options.sameSite !== "strict" &&
1546
+ options.sameSite !== "lax" &&
1547
+ options.sameSite !== "none"
1548
+ ) {
1549
+ throw new Error("invalid cookie sameSite");
1550
+ }
1551
+ cookie += `; SameSite=${options.sameSite}`;
1552
+ }
958
1553
 
959
1554
  return cookie;
960
1555
  }
@@ -968,20 +1563,12 @@ export interface CreateUseFunctionOptions<TEnv> {
968
1563
  getContext: () => RequestContext<TEnv>;
969
1564
  }
970
1565
 
971
- /**
972
- * Create the use() function for loader and handle composition.
973
- *
974
- * This is the unified implementation used by both RequestContext and HandlerContext.
975
- * - For loaders: executes and memoizes loader functions
976
- * - For handles: returns a push function to add handle data
977
- */
978
1566
  export function createUseFunction<TEnv>(
979
1567
  options: CreateUseFunctionOptions<TEnv>,
980
1568
  ): RequestContext["use"] {
981
1569
  const { handleStore, loaderPromises, getContext } = options;
982
1570
 
983
1571
  return ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
984
- // Handle case: return a push function
985
1572
  if (isHandle(item)) {
986
1573
  const handle = item;
987
1574
  const ctx = getContext();
@@ -994,30 +1581,24 @@ export function createUseFunction<TEnv>(
994
1581
  );
995
1582
  }
996
1583
 
997
- // Return a push function bound to this handle and segment
998
- return (
999
- dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
1000
- ) => {
1001
- // If it's a function, call it immediately to get the promise
1002
- const valueOrPromise =
1003
- typeof dataOrFn === "function"
1004
- ? (dataOrFn as () => Promise<unknown>)()
1005
- : dataOrFn;
1006
-
1007
- // Push directly - promises will be serialized by RSC and streamed
1008
- handleStore.push(handle.$$id, segmentId, valueOrPromise);
1009
- };
1584
+ return withDefer(
1585
+ (dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
1586
+ const valueOrPromise =
1587
+ typeof dataOrFn === "function"
1588
+ ? (dataOrFn as () => Promise<unknown>)()
1589
+ : dataOrFn;
1590
+
1591
+ handleStore.push(handle.$$id, segmentId, valueOrPromise);
1592
+ },
1593
+ );
1010
1594
  }
1011
1595
 
1012
- // Loader case
1013
1596
  const loader = item as LoaderDefinition<any, any>;
1014
1597
 
1015
- // Return cached promise if already started
1016
1598
  if (loaderPromises.has(loader.$$id)) {
1017
1599
  return loaderPromises.get(loader.$$id);
1018
1600
  }
1019
1601
 
1020
- // Get loader function - either from loader object or fetchable registry
1021
1602
  let loaderFn = loader.fn;
1022
1603
  if (!loaderFn) {
1023
1604
  const fetchable = getFetchableLoader(loader.$$id);
@@ -1034,30 +1615,56 @@ export function createUseFunction<TEnv>(
1034
1615
 
1035
1616
  const ctx = getContext();
1036
1617
 
1037
- // Create loader context with recursive use() support
1618
+ // Build the typed ctx.search the same way the render path
1619
+ // (createHandlerContext) and the fetchable-loader path (loader-fetch.ts) do:
1620
+ // parse the route's search schema over the cleaned searchParams. The base
1621
+ // RequestContext carries no `search` field, so reading `(ctx as any).search`
1622
+ // here always yielded {} — dropping typed search for action/dispatch loaders.
1623
+ const searchSchema = ctx._routeName
1624
+ ? getSearchSchema(ctx._routeName, ctx._routerId)
1625
+ : undefined;
1626
+ const loaderSearch = searchSchema
1627
+ ? parseSearchParams(ctx.searchParams, searchSchema)
1628
+ : {};
1629
+
1038
1630
  const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
1039
1631
  params: ctx.params,
1040
1632
  routeParams: (ctx.params ?? {}) as Record<string, string>,
1041
1633
  request: ctx.request,
1042
1634
  searchParams: ctx.searchParams,
1043
- search: (ctx as any).search ?? {},
1635
+ search: loaderSearch,
1044
1636
  pathname: ctx.pathname,
1045
1637
  url: ctx.url,
1638
+ originalUrl: ctx.originalUrl,
1046
1639
  env: ctx.env as any,
1047
- get: ctx.get as any,
1048
- use: (<TDep, TDepParams = any>(
1049
- dep: LoaderDefinition<TDep, TDepParams>,
1050
- ): Promise<TDep> => {
1051
- // Recursive call - will start dep loader if not already started
1052
- return ctx.use(dep);
1053
- }) as LoaderContext["use"],
1640
+ waitUntil: ctx.waitUntil.bind(ctx),
1641
+ executionContext: ctx.executionContext,
1642
+ get: ((keyOrVar: any) => {
1643
+ // Handle READS need the rendered() barrier, which this lane
1644
+ // (action/dispatch-invoked loaders) does not run. Fail with guidance
1645
+ // instead of returning a misleading empty collect.
1646
+ if (isHandle(keyOrVar)) {
1647
+ throw new Error(
1648
+ `ctx.get(handle) is only available in DSL loaders after ` +
1649
+ `"await ctx.rendered()". It cannot be used from request-context ` +
1650
+ `loaders or server actions.`,
1651
+ );
1652
+ }
1653
+ return (ctx.get as any)(keyOrVar);
1654
+ }) as any,
1655
+ // Pass items through: loaders delegate to the request ctx's loader
1656
+ // executor; a handle yields the ctx's push function (write parity —
1657
+ // ctx.use(Meta)({...}) works in this lane exactly like in a handler).
1658
+ use: ((item: any) => ctx.use(item)) as LoaderContext["use"],
1054
1659
  method: "GET",
1055
1660
  body: undefined,
1056
1661
  reverse: createReverseFunction(
1057
1662
  getGlobalRouteMap(),
1058
1663
  ctx._routeName,
1059
1664
  ctx.params as Record<string, string>,
1060
- ctx._routeName ? isRouteRootScoped(ctx._routeName) : undefined,
1665
+ ctx._routeName
1666
+ ? isRouteRootScoped(ctx._routeName, ctx._routerId)
1667
+ : undefined,
1061
1668
  ),
1062
1669
  rendered: () => {
1063
1670
  throw new Error(
@@ -1067,12 +1674,14 @@ export function createUseFunction<TEnv>(
1067
1674
  },
1068
1675
  };
1069
1676
 
1070
- const doneLoader = track(`loader:${loader.$$id}`, 2);
1071
- const promise = Promise.resolve(loaderFn(loaderCtx)).finally(() => {
1072
- doneLoader();
1073
- });
1677
+ // Meter through the same unified phase API as the loader-resolution funnel
1678
+ // (observePhase), so a loader resolved via this base request-context ctx.use
1679
+ // co-emits the "loader:<id>" perf metric AND the "rango.loader" span — no
1680
+ // drift between the two ctx.use implementations.
1681
+ const promise = observePhase(PHASES.loader(loader.$$id), () =>
1682
+ Promise.resolve(loaderFn(loaderCtx)),
1683
+ );
1074
1684
 
1075
- // Memoize for subsequent calls
1076
1685
  loaderPromises.set(loader.$$id, promise);
1077
1686
 
1078
1687
  return promise;