@rangojs/router 0.0.0-experimental.8 → 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 (1746) hide show
  1. package/AGENTS.md +13 -0
  2. package/README.md +472 -7
  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 +2343 -0
  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 -26
  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/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/{src/handles/index.ts → dist/handles/index.js} +1 -1
  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/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  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 -8
  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 +12042 -1346
  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/{src/vite/package-resolution.ts → dist/vite/package-resolution.js} +53 -66
  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/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  1233. package/dist/vite/virtual-entries.js.map +1 -0
  1234. package/package.json +170 -77
  1235. package/skills/api-client/SKILL.md +211 -0
  1236. package/skills/breadcrumbs/SKILL.md +359 -0
  1237. package/skills/bundle-analysis/SKILL.md +159 -0
  1238. package/skills/cache-guide/SKILL.md +492 -0
  1239. package/skills/caching/SKILL.md +452 -26
  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 +292 -0
  1251. package/skills/css/SKILL.md +76 -0
  1252. package/skills/debug-manifest/SKILL.md +16 -18
  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 +125 -65
  1256. package/skills/fonts/SKILL.md +167 -0
  1257. package/skills/handler-use/SKILL.md +364 -0
  1258. package/skills/hooks/SKILL.md +76 -432
  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 +320 -0
  1266. package/skills/i18n/SKILL.md +276 -0
  1267. package/skills/intercept/SKILL.md +215 -16
  1268. package/skills/layout/SKILL.md +147 -7
  1269. package/skills/links/SKILL.md +360 -33
  1270. package/skills/loader/SKILL.md +762 -51
  1271. package/skills/middleware/SKILL.md +251 -38
  1272. package/skills/migrate-nextjs/SKILL.md +854 -0
  1273. package/skills/migrate-nextjs/backend-host-swap.md +120 -0
  1274. package/skills/migrate-react-router/SKILL.md +189 -0
  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 +165 -0
  1279. package/skills/observability/SKILL.md +231 -0
  1280. package/skills/parallel/SKILL.md +327 -4
  1281. package/skills/ppr/SKILL.md +918 -0
  1282. package/skills/prerender/SKILL.md +751 -0
  1283. package/skills/rango/SKILL.md +387 -17
  1284. package/skills/react-compiler/SKILL.md +168 -0
  1285. package/skills/response-routes/SKILL.md +539 -0
  1286. package/skills/route/SKILL.md +399 -15
  1287. package/skills/router-setup/SKILL.md +270 -34
  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 +153 -0
  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 +16 -12
  1309. package/skills/typesafety/SKILL.md +45 -387
  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 +430 -0
  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 +77 -44
  1320. package/src/bin/rango.ts +325 -0
  1321. package/src/browser/action-coordinator.ts +114 -0
  1322. package/src/browser/action-fence.ts +47 -0
  1323. package/src/browser/app-shell.ts +39 -0
  1324. package/src/browser/app-version.ts +14 -0
  1325. package/src/browser/connection-warmup.ts +134 -0
  1326. package/src/browser/cookie-name.ts +140 -0
  1327. package/src/browser/dev-discovery.ts +66 -0
  1328. package/src/browser/event-controller.ts +477 -217
  1329. package/src/browser/history-state.ts +101 -0
  1330. package/src/browser/index.ts +3 -3
  1331. package/src/browser/intercept-utils.ts +52 -0
  1332. package/src/browser/invalidate-client-cache.ts +52 -0
  1333. package/src/browser/link-interceptor.ts +487 -18
  1334. package/src/browser/logging.ts +83 -0
  1335. package/src/browser/merge-segment-loaders.ts +23 -13
  1336. package/src/browser/navigation-bridge.ts +471 -570
  1337. package/src/browser/navigation-client.ts +343 -79
  1338. package/src/browser/navigation-store-handle.ts +38 -0
  1339. package/src/browser/navigation-store.ts +228 -366
  1340. package/src/browser/navigation-transaction.ts +247 -0
  1341. package/src/browser/network-error-handler.ts +88 -0
  1342. package/src/browser/notify-listeners.ts +22 -0
  1343. package/src/browser/partial-update.ts +491 -365
  1344. package/src/browser/prefetch/cache.ts +457 -0
  1345. package/src/browser/prefetch/default-strategy.ts +74 -0
  1346. package/src/browser/prefetch/fetch.ts +548 -0
  1347. package/src/browser/prefetch/invalidation.ts +30 -0
  1348. package/src/browser/prefetch/loader.ts +111 -0
  1349. package/src/browser/prefetch/observer.ts +93 -0
  1350. package/src/browser/prefetch/policy.ts +48 -0
  1351. package/src/browser/prefetch/queue.ts +209 -0
  1352. package/src/browser/prefetch/resource-ready.ts +77 -0
  1353. package/src/browser/prefetch/runtime.ts +6 -0
  1354. package/src/browser/rango-state.ts +215 -0
  1355. package/src/browser/react/Link.tsx +332 -85
  1356. package/src/browser/react/NavigationProvider.tsx +275 -109
  1357. package/src/browser/react/ScrollRestoration.tsx +10 -6
  1358. package/src/browser/react/context.ts +15 -0
  1359. package/src/browser/react/filter-segment-order.ts +70 -0
  1360. package/src/browser/react/index.ts +0 -48
  1361. package/src/browser/react/location-state-shared.ts +272 -60
  1362. package/src/browser/react/location-state.ts +90 -20
  1363. package/src/browser/react/mount-context.ts +6 -1
  1364. package/src/browser/react/nonce-context.ts +23 -0
  1365. package/src/browser/react/shallow-equal.ts +27 -0
  1366. package/src/browser/react/use-action.ts +35 -66
  1367. package/src/browser/react/use-handle.ts +39 -132
  1368. package/src/browser/react/use-href.tsx +9 -2
  1369. package/src/browser/react/use-link-status.ts +39 -13
  1370. package/src/browser/react/use-navigation.ts +53 -69
  1371. package/src/browser/react/use-params.ts +75 -0
  1372. package/src/browser/react/use-pathname.ts +47 -0
  1373. package/src/browser/react/use-reverse.ts +106 -0
  1374. package/src/browser/react/use-router.ts +127 -0
  1375. package/src/browser/react/use-search-params.ts +174 -0
  1376. package/src/browser/react/use-segments.ts +72 -99
  1377. package/src/browser/response-adapter.ts +164 -0
  1378. package/src/browser/rsc-router.tsx +446 -74
  1379. package/src/browser/scroll-restoration.ts +140 -50
  1380. package/src/browser/segment-reconciler.ts +253 -0
  1381. package/src/browser/segment-structure-assert.ts +17 -1
  1382. package/src/browser/server-action-bridge.ts +707 -603
  1383. package/src/browser/types.ts +266 -75
  1384. package/src/browser/validate-redirect-origin.ts +56 -0
  1385. package/src/build/collect-fallback-refs.ts +107 -0
  1386. package/src/build/generate-manifest.ts +324 -84
  1387. package/src/build/generate-route-types.ts +41 -0
  1388. package/src/build/index.ts +22 -1
  1389. package/src/build/merge-full-manifests.ts +161 -0
  1390. package/src/build/prefix-tree-utils.ts +123 -0
  1391. package/src/build/route-trie.ts +54 -0
  1392. package/src/build/route-types/ast-helpers.ts +25 -0
  1393. package/src/build/route-types/ast-route-extraction.ts +105 -0
  1394. package/src/build/route-types/codegen.ts +113 -0
  1395. package/src/build/route-types/include-resolution.ts +867 -0
  1396. package/src/build/route-types/param-extraction.ts +51 -0
  1397. package/src/build/route-types/per-module-writer.ts +149 -0
  1398. package/src/build/route-types/router-processing.ts +726 -0
  1399. package/src/build/route-types/scan-filter.ts +85 -0
  1400. package/src/build/route-types/source-scan.ts +216 -0
  1401. package/src/build/runtime-discovery.ts +234 -0
  1402. package/src/cache/background-task.ts +34 -0
  1403. package/src/cache/cache-error.ts +104 -0
  1404. package/src/cache/cache-exec-scope.ts +47 -0
  1405. package/src/cache/cache-key-utils.ts +102 -0
  1406. package/src/cache/cache-policy.ts +199 -0
  1407. package/src/cache/cache-runtime.ts +787 -0
  1408. package/src/cache/cache-scope.ts +478 -342
  1409. package/src/cache/cache-tag.ts +149 -0
  1410. package/src/cache/cf/cf-base64.ts +33 -0
  1411. package/src/cache/cf/cf-cache-constants.ts +134 -0
  1412. package/src/cache/cf/cf-cache-store.ts +3397 -152
  1413. package/src/cache/cf/cf-cache-types.ts +417 -0
  1414. package/src/cache/cf/cf-kv-utils.ts +84 -0
  1415. package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
  1416. package/src/cache/cf/cf-zone-purge.ts +101 -0
  1417. package/src/cache/cf/index.ts +21 -16
  1418. package/src/cache/document-cache.ts +275 -105
  1419. package/src/cache/handle-capture.ts +81 -0
  1420. package/src/cache/handle-snapshot.ts +132 -0
  1421. package/src/cache/index.ts +33 -35
  1422. package/src/cache/memory-segment-store.ts +457 -30
  1423. package/src/cache/profile-registry.ts +88 -0
  1424. package/src/cache/read-through-swr.ts +184 -0
  1425. package/src/cache/search-params-filter.ts +118 -0
  1426. package/src/cache/segment-codec.ts +311 -0
  1427. package/src/cache/shell-snapshot.ts +516 -0
  1428. package/src/cache/tag-invalidation.ts +230 -0
  1429. package/src/cache/taint.ts +172 -0
  1430. package/src/cache/types.ts +405 -212
  1431. package/src/cache/vercel/index.ts +11 -0
  1432. package/src/cache/vercel/vercel-cache-store.ts +1264 -0
  1433. package/src/client-urls/client-root.tsx +168 -0
  1434. package/src/client-urls/client-urls.ts +779 -0
  1435. package/src/client-urls/navigation.ts +237 -0
  1436. package/src/client-urls/revalidation-protocol.ts +56 -0
  1437. package/src/client-urls/server-projection.ts +670 -0
  1438. package/src/client-urls/types.ts +202 -0
  1439. package/src/client.rsc.tsx +55 -21
  1440. package/src/client.tsx +179 -330
  1441. package/src/cloudflare/index.ts +11 -0
  1442. package/src/cloudflare/tracing.ts +112 -0
  1443. package/src/component-utils.ts +23 -4
  1444. package/src/components/DefaultDocument.tsx +13 -3
  1445. package/src/context-var.ts +168 -0
  1446. package/src/debug.ts +19 -9
  1447. package/src/decode-loader-results.ts +165 -0
  1448. package/src/defer.ts +185 -0
  1449. package/src/deps/ssr.ts +4 -2
  1450. package/src/dev-discovery-protocol.ts +11 -0
  1451. package/src/encode-kv.ts +49 -0
  1452. package/src/errors.ts +149 -3
  1453. package/src/escape-script.ts +52 -0
  1454. package/src/handle.ts +111 -55
  1455. package/src/handles/MetaTags.tsx +83 -59
  1456. package/src/handles/Scripts.tsx +183 -0
  1457. package/src/handles/breadcrumbs.ts +93 -0
  1458. package/src/handles/deferred-resolution.ts +134 -0
  1459. package/src/handles/is-thenable.ts +16 -0
  1460. package/src/handles/meta.ts +44 -53
  1461. package/src/handles/script.ts +244 -0
  1462. package/src/host/cookie-handler.ts +20 -65
  1463. package/src/host/errors.ts +21 -30
  1464. package/src/host/index.ts +13 -9
  1465. package/src/host/pattern-matcher.ts +50 -79
  1466. package/src/host/router.ts +151 -121
  1467. package/src/host/testing.ts +45 -32
  1468. package/src/host/types.ts +52 -11
  1469. package/src/host/utils.ts +2 -2
  1470. package/src/href-client.ts +236 -31
  1471. package/src/index.rsc.ts +252 -20
  1472. package/src/index.ts +343 -30
  1473. package/src/internal-debug.ts +12 -0
  1474. package/src/loader-redirect.tsx +64 -0
  1475. package/src/loader-store.ts +500 -0
  1476. package/src/loader.rsc.ts +39 -163
  1477. package/src/loader.ts +31 -13
  1478. package/src/missing-id-error.ts +68 -0
  1479. package/src/outlet-context.ts +21 -1
  1480. package/src/outlet-provider.tsx +59 -0
  1481. package/src/prerender/build-shell-capture.ts +453 -0
  1482. package/src/prerender/param-hash.ts +37 -0
  1483. package/src/prerender/shell-manifest-key.ts +20 -0
  1484. package/src/prerender/store.ts +195 -0
  1485. package/src/prerender.ts +592 -0
  1486. package/src/redirect-origin.ts +172 -0
  1487. package/src/regex-escape.ts +8 -0
  1488. package/src/render-error-thrower.tsx +20 -0
  1489. package/src/response-utils.ts +62 -0
  1490. package/src/reverse.ts +380 -0
  1491. package/src/root-error-boundary.tsx +42 -48
  1492. package/src/route-content-wrapper.tsx +123 -78
  1493. package/src/route-definition/dsl-helpers.ts +1150 -0
  1494. package/src/route-definition/helper-factories.ts +88 -0
  1495. package/src/route-definition/helpers-types.ts +522 -0
  1496. package/src/route-definition/index.ts +54 -0
  1497. package/src/route-definition/redirect.ts +133 -0
  1498. package/src/route-definition/resolve-handler-use.ts +160 -0
  1499. package/src/route-definition/use-item-types.ts +29 -0
  1500. package/src/route-definition.ts +1 -1428
  1501. package/src/route-map-builder.ts +249 -127
  1502. package/src/route-name.ts +53 -0
  1503. package/src/route-types.ts +87 -45
  1504. package/src/router/basename.ts +14 -0
  1505. package/src/router/content-negotiation.ts +305 -0
  1506. package/src/router/debug-manifest.ts +72 -0
  1507. package/src/router/error-handling.ts +119 -38
  1508. package/src/router/find-match.ts +259 -0
  1509. package/src/router/handler-context.ts +439 -86
  1510. package/src/router/instrument.ts +401 -0
  1511. package/src/router/intercept-resolution.ts +479 -0
  1512. package/src/router/lazy-includes.ts +261 -0
  1513. package/src/router/loader-resolution.ts +714 -142
  1514. package/src/router/logging.ts +245 -0
  1515. package/src/router/manifest.ts +225 -63
  1516. package/src/router/match-api.ts +591 -0
  1517. package/src/router/match-context.ts +5 -25
  1518. package/src/router/match-handlers.ts +537 -0
  1519. package/src/router/match-middleware/background-revalidation.ts +128 -97
  1520. package/src/router/match-middleware/cache-lookup.ts +537 -73
  1521. package/src/router/match-middleware/cache-store.ts +214 -60
  1522. package/src/router/match-middleware/intercept-resolution.ts +56 -38
  1523. package/src/router/match-middleware/segment-resolution.ts +71 -19
  1524. package/src/router/match-pipelines.ts +11 -87
  1525. package/src/router/match-result.ts +150 -53
  1526. package/src/router/metrics.ts +235 -29
  1527. package/src/router/middleware-types.ts +110 -0
  1528. package/src/router/middleware.ts +526 -441
  1529. package/src/router/navigation-snapshot.ts +173 -0
  1530. package/src/router/params-util.ts +23 -0
  1531. package/src/router/parse-pattern.ts +115 -0
  1532. package/src/router/pattern-matching.ts +348 -149
  1533. package/src/router/prefetch-cache-ttl.ts +51 -0
  1534. package/src/router/prefetch-default.ts +59 -0
  1535. package/src/router/prefetch-limits.ts +37 -0
  1536. package/src/router/prerender-match.ts +592 -0
  1537. package/src/router/preview-match.ts +102 -0
  1538. package/src/router/request-classification.ts +291 -0
  1539. package/src/router/revalidation.ts +252 -90
  1540. package/src/router/route-snapshot.ts +256 -0
  1541. package/src/router/route-trie-builder.ts +334 -0
  1542. package/src/router/router-context.ts +45 -48
  1543. package/src/router/router-interfaces.ts +614 -0
  1544. package/src/router/router-options.ts +842 -0
  1545. package/src/router/router-registry.ts +21 -0
  1546. package/src/router/segment-resolution/fresh.ts +879 -0
  1547. package/src/router/segment-resolution/helpers.ts +346 -0
  1548. package/src/router/segment-resolution/loader-cache.ts +368 -0
  1549. package/src/router/segment-resolution/loader-mask.ts +60 -0
  1550. package/src/router/segment-resolution/loader-snapshot.ts +259 -0
  1551. package/src/router/segment-resolution/mask-nested.ts +99 -0
  1552. package/src/router/segment-resolution/revalidation.ts +1376 -0
  1553. package/src/router/segment-resolution/static-store.ts +107 -0
  1554. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1555. package/src/router/segment-resolution/view-transition-default.ts +60 -0
  1556. package/src/router/segment-resolution.ts +25 -0
  1557. package/src/router/segment-wrappers.ts +292 -0
  1558. package/src/router/state-cookie-name.ts +33 -0
  1559. package/src/router/substitute-pattern-params.ts +75 -0
  1560. package/src/router/telemetry-otel.ts +270 -0
  1561. package/src/router/telemetry.ts +386 -0
  1562. package/src/router/timeout.ts +179 -0
  1563. package/src/router/tracing.ts +235 -0
  1564. package/src/router/transition-when.ts +76 -0
  1565. package/src/router/trie-matching.ts +351 -0
  1566. package/src/router/types.ts +60 -39
  1567. package/src/router/url-params.ts +57 -0
  1568. package/src/router.ts +911 -4253
  1569. package/src/rsc/capture-queue.ts +218 -0
  1570. package/src/rsc/full-payload.ts +77 -0
  1571. package/src/rsc/handler-context.ts +47 -0
  1572. package/src/rsc/handler.ts +1226 -834
  1573. package/src/rsc/helpers.ts +351 -19
  1574. package/src/rsc/index.ts +2 -25
  1575. package/src/rsc/json-route-result.ts +38 -0
  1576. package/src/rsc/loader-fetch.ts +305 -0
  1577. package/src/rsc/manifest-init.ts +89 -0
  1578. package/src/rsc/nonce.ts +39 -0
  1579. package/src/rsc/origin-guard.ts +155 -0
  1580. package/src/rsc/progressive-enhancement.ts +686 -0
  1581. package/src/rsc/redirect-guard.ts +102 -0
  1582. package/src/rsc/render-pipeline.ts +611 -0
  1583. package/src/rsc/response-cache-serve.ts +259 -0
  1584. package/src/rsc/response-error.ts +104 -0
  1585. package/src/rsc/response-route-handler.ts +221 -0
  1586. package/src/rsc/routine-plan.ts +359 -0
  1587. package/src/rsc/rsc-rendering.ts +1729 -0
  1588. package/src/rsc/runtime-warnings.ts +55 -0
  1589. package/src/rsc/server-action.ts +639 -0
  1590. package/src/rsc/shell-build-manifest.ts +343 -0
  1591. package/src/rsc/shell-capture-constants.ts +45 -0
  1592. package/src/rsc/shell-capture.ts +2135 -0
  1593. package/src/rsc/shell-serve.ts +350 -0
  1594. package/src/rsc/ssr-setup.ts +236 -0
  1595. package/src/rsc/stream-idle.ts +137 -0
  1596. package/src/rsc/transition-gate.ts +86 -0
  1597. package/src/rsc/types.ts +167 -14
  1598. package/src/runtime-env.ts +18 -0
  1599. package/src/search-params.ts +235 -0
  1600. package/src/segment-content-promise.ts +67 -0
  1601. package/src/segment-fragments.ts +165 -0
  1602. package/src/segment-loader-promise.ts +167 -0
  1603. package/src/segment-system.tsx +544 -136
  1604. package/src/serialize.ts +243 -0
  1605. package/src/server/context.ts +741 -90
  1606. package/src/server/cookie-parse.ts +32 -0
  1607. package/src/server/cookie-store.ts +337 -0
  1608. package/src/server/fetchable-loader-store.ts +37 -0
  1609. package/src/server/handle-store.ts +278 -60
  1610. package/src/server/loader-registry.ts +51 -100
  1611. package/src/server/request-context.ts +1296 -161
  1612. package/src/server.ts +38 -128
  1613. package/src/ssr/index.tsx +716 -140
  1614. package/src/ssr/inject-rsc-eager.ts +167 -0
  1615. package/src/ssr/preinit-client-references.ts +106 -0
  1616. package/src/ssr/ssr-root.tsx +305 -0
  1617. package/src/ssr-suspension-warning.ts +67 -0
  1618. package/src/static-handler.ts +139 -0
  1619. package/src/testing/cache-status.ts +162 -0
  1620. package/src/testing/collect-handle.ts +46 -0
  1621. package/src/testing/dispatch.ts +951 -0
  1622. package/src/testing/dom.entry.ts +22 -0
  1623. package/src/testing/e2e/fixture.ts +188 -0
  1624. package/src/testing/e2e/index.ts +147 -0
  1625. package/src/testing/e2e/matchers.ts +35 -0
  1626. package/src/testing/e2e/page-helpers.ts +319 -0
  1627. package/src/testing/e2e/parity.ts +400 -0
  1628. package/src/testing/e2e/server.ts +195 -0
  1629. package/src/testing/flight-matchers.ts +97 -0
  1630. package/src/testing/flight-normalize.ts +11 -0
  1631. package/src/testing/flight-runtime.d.ts +57 -0
  1632. package/src/testing/flight-tree.ts +682 -0
  1633. package/src/testing/flight.entry.ts +52 -0
  1634. package/src/testing/flight.ts +257 -0
  1635. package/src/testing/generated-routes.ts +199 -0
  1636. package/src/testing/index.ts +121 -0
  1637. package/src/testing/internal/context.ts +380 -0
  1638. package/src/testing/internal/flight-client-globals.ts +30 -0
  1639. package/src/testing/internal/seed-vars.ts +54 -0
  1640. package/src/testing/render-handler.ts +371 -0
  1641. package/src/testing/render-route.tsx +667 -0
  1642. package/src/testing/run-loader.ts +423 -0
  1643. package/src/testing/run-middleware.ts +219 -0
  1644. package/src/testing/run-transition-when.ts +197 -0
  1645. package/src/testing/shell-status.ts +206 -0
  1646. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1647. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1648. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1649. package/src/testing/vitest-stubs/version.ts +5 -0
  1650. package/src/testing/vitest.ts +305 -0
  1651. package/src/theme/ThemeProvider.tsx +76 -98
  1652. package/src/theme/ThemeScript.tsx +12 -14
  1653. package/src/theme/constants.ts +57 -15
  1654. package/src/theme/index.ts +3 -20
  1655. package/src/theme/theme-context.ts +5 -35
  1656. package/src/theme/theme-script.ts +43 -39
  1657. package/src/theme/use-theme.ts +0 -3
  1658. package/src/types/boundaries.ts +142 -0
  1659. package/src/types/cache-types.ts +207 -0
  1660. package/src/types/error-types.ts +132 -0
  1661. package/src/types/global-namespace.ts +113 -0
  1662. package/src/types/handler-context.ts +850 -0
  1663. package/src/types/index.ts +82 -0
  1664. package/src/types/loader-types.ts +273 -0
  1665. package/src/types/request-scope.ts +112 -0
  1666. package/src/types/route-config.ts +138 -0
  1667. package/src/types/route-entry.ts +117 -0
  1668. package/src/types/segments.ts +291 -0
  1669. package/src/types.ts +1 -1623
  1670. package/src/urls/include-helper.ts +181 -0
  1671. package/src/urls/include-provider.ts +71 -0
  1672. package/src/urls/index.ts +44 -0
  1673. package/src/urls/path-helper-types.ts +435 -0
  1674. package/src/urls/path-helper.ts +284 -0
  1675. package/src/urls/pattern-types.ts +189 -0
  1676. package/src/urls/response-types.ts +109 -0
  1677. package/src/urls/type-extraction.ts +316 -0
  1678. package/src/urls/urls-function.ts +80 -0
  1679. package/src/urls.ts +1 -802
  1680. package/src/use-loader.tsx +487 -138
  1681. package/src/vercel/index.ts +11 -0
  1682. package/src/vercel/tracing.ts +89 -0
  1683. package/src/vite/debug.ts +185 -0
  1684. package/src/vite/discovery/bundle-postprocess.ts +185 -0
  1685. package/src/vite/discovery/client-urls-projection.ts +322 -0
  1686. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1687. package/src/vite/discovery/discover-routers.ts +375 -0
  1688. package/src/vite/discovery/discovery-errors.ts +255 -0
  1689. package/src/vite/discovery/gate-state.ts +171 -0
  1690. package/src/vite/discovery/prerender-collection.ts +494 -0
  1691. package/src/vite/discovery/route-types-writer.ts +214 -0
  1692. package/src/vite/discovery/self-gen-tracking.ts +73 -0
  1693. package/src/vite/discovery/shell-prerender-phase.ts +397 -0
  1694. package/src/vite/discovery/state.ts +215 -0
  1695. package/src/vite/discovery/virtual-module-codegen.ts +342 -0
  1696. package/src/vite/encryption-key.ts +29 -0
  1697. package/src/vite/index.ts +31 -1137
  1698. package/src/vite/inject-client-debug.ts +88 -0
  1699. package/src/vite/plugin-types.ts +336 -0
  1700. package/src/vite/plugins/cjs-to-esm.ts +90 -0
  1701. package/src/vite/plugins/client-ref-dedup.ts +382 -0
  1702. package/src/vite/plugins/client-ref-hashing.ts +118 -0
  1703. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1704. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1705. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1706. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +130 -136
  1707. package/src/vite/plugins/expose-id-utils.ts +332 -0
  1708. package/src/vite/plugins/expose-ids/export-analysis.ts +363 -0
  1709. package/src/vite/plugins/expose-ids/handler-transform.ts +130 -0
  1710. package/src/vite/plugins/expose-ids/loader-transform.ts +64 -0
  1711. package/src/vite/plugins/expose-ids/router-transform.ts +199 -0
  1712. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1713. package/src/vite/plugins/expose-internal-ids.ts +851 -0
  1714. package/src/vite/plugins/performance-tracks.ts +89 -0
  1715. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1716. package/src/vite/plugins/server-ref-hashing.ts +74 -0
  1717. package/src/vite/plugins/server-reference-pattern.ts +10 -0
  1718. package/src/vite/plugins/use-cache-transform.ts +313 -0
  1719. package/src/vite/plugins/vercel-output.ts +384 -0
  1720. package/src/vite/plugins/version-injector.ts +93 -0
  1721. package/src/vite/plugins/version-plugin.ts +271 -0
  1722. package/src/vite/plugins/virtual-entries.ts +286 -0
  1723. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1724. package/src/vite/rango.ts +609 -0
  1725. package/src/vite/router-discovery.ts +2400 -0
  1726. package/src/vite/utils/ast-handler-extract.ts +508 -0
  1727. package/src/vite/utils/banner.ts +36 -0
  1728. package/src/vite/utils/bundle-analysis.ts +132 -0
  1729. package/src/vite/utils/client-chunks.ts +184 -0
  1730. package/src/vite/utils/directive-prologue.ts +40 -0
  1731. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1732. package/src/vite/utils/manifest-utils.ts +12 -0
  1733. package/src/vite/utils/package-resolution.ts +90 -0
  1734. package/src/vite/utils/prerender-utils.ts +268 -0
  1735. package/src/vite/utils/shared-utils.ts +283 -0
  1736. package/CLAUDE.md +0 -43
  1737. package/src/browser/lru-cache.ts +0 -69
  1738. package/src/browser/request-controller.ts +0 -164
  1739. package/src/browser/shallow.ts +0 -35
  1740. package/src/cache/memory-store.ts +0 -253
  1741. package/src/href.ts +0 -255
  1742. package/src/server/route-manifest-cache.ts +0 -173
  1743. package/src/vite/expose-handle-id.ts +0 -209
  1744. package/src/vite/expose-loader-id.ts +0 -426
  1745. package/src/vite/expose-location-state-id.ts +0 -177
  1746. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -11,15 +11,83 @@
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";
24
+ import type { ScopedReverseFunction } from "../reverse.js";
25
+ import type {
26
+ DefaultEnv,
27
+ DefaultReverseRouteMap,
28
+ DefaultRouteName,
29
+ } from "../types/global-namespace.js";
16
30
  import type { Handle } from "../handle.js";
17
- import { createHandleStore, type HandleStore } from "./handle-store.js";
31
+ import {
32
+ type ContextVar,
33
+ contextGet,
34
+ contextSet,
35
+ isNonCacheable,
36
+ } from "../context-var.js";
37
+ import {
38
+ createHandleStore,
39
+ buildHandleSnapshot,
40
+ type HandleStore,
41
+ type HandleData,
42
+ } from "./handle-store.js";
18
43
  import { isHandle } from "../handle.js";
19
- import { track } from "./context.js";
44
+ import { withDefer } from "../defer.js";
45
+ import { type MetricsStore } from "./context.js";
46
+ import { observePhase, PHASES } from "../router/instrument.js";
47
+ import { getFetchableLoader } from "./fetchable-loader-store.js";
20
48
  import type { SegmentCacheStore } from "../cache/types.js";
21
49
  import type { Theme, ResolvedThemeConfig } from "../theme/types.js";
22
- 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";
59
+ import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
60
+ import type { RoutineTrace } from "../rsc/routine-plan.js";
61
+ import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
62
+ import {
63
+ assertCachedHeaderWriteAllowed,
64
+ clearPprHeaderScope,
65
+ isInsideCacheScope,
66
+ } from "./context.js";
67
+ import {
68
+ createReverseFunction,
69
+ stripInternalParams,
70
+ } from "../router/handler-context.js";
71
+ import {
72
+ getGlobalRouteMap,
73
+ isRouteRootScoped,
74
+ getSearchSchema,
75
+ } from "../route-map-builder.js";
76
+ import { parseSearchParams } from "../search-params.js";
77
+ import { invariant } from "../errors.js";
78
+ import { isAutoGeneratedRouteName } from "../route-name.js";
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
+ }
23
91
 
24
92
  /**
25
93
  * Unified request context available via getRequestContext()
@@ -28,46 +96,75 @@ import { THEME_COOKIE } from "../theme/constants.js";
28
96
  * Use this when you need access to request data outside of route handlers.
29
97
  */
30
98
  export interface RequestContext<
31
- TEnv = unknown,
99
+ TEnv = DefaultEnv,
32
100
  TParams = Record<string, string>,
33
- > {
34
- /** Platform bindings (Cloudflare env, etc.) */
35
- env: TEnv;
36
- /** Original HTTP request */
37
- request: Request;
38
- /** Parsed URL (system params like _rsc* are NOT filtered here) */
39
- url: URL;
40
- /** URL pathname */
41
- pathname: string;
42
- /** URL search params (system params like _rsc* are NOT filtered here) */
43
- searchParams: URLSearchParams;
44
- /** Variables set by middleware (same as ctx.var) */
45
- var: Record<string, any>;
101
+ > extends RequestScope<TEnv> {
102
+ /** @internal Shared variable backing store for ctx.get()/ctx.set(). */
103
+ _variables: Record<string, any>;
46
104
  /** Get a variable set by middleware */
47
- get: <K extends string>(key: K) => any;
105
+ get: {
106
+ <T>(contextVar: ContextVar<T>): T | undefined;
107
+ <K extends string>(key: K): any;
108
+ };
48
109
  /** Set a variable (shared with middleware and handlers) */
49
- set: <K extends string>(key: K, value: any) => void;
110
+ set: {
111
+ <T>(
112
+ contextVar: ContextVar<T>,
113
+ value: T,
114
+ options?: { cache?: boolean },
115
+ ): void;
116
+ <K extends string>(key: K, value: any, options?: { cache?: boolean }): void;
117
+ };
50
118
  /**
51
119
  * Route params (populated after route matching)
52
120
  * Initially empty, then set to matched params
53
121
  */
54
122
  params: TParams;
123
+ /** @internal Stub response for collecting headers/cookies. Use ctx.headers or ctx.header() instead. */
124
+ readonly res: Response;
125
+
55
126
  /**
56
- * Stub response for setting headers/cookies
57
- * Headers set here are merged into the final response
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.
58
130
  */
59
- res: Response;
131
+ readonly build: boolean;
60
132
 
61
- /** Get a cookie value from the request */
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
+
147
+ /** @internal Get a cookie value (effective: request + response mutations). Use cookies().get() instead. */
62
148
  cookie(name: string): string | undefined;
63
- /** Get all cookies from the request */
149
+ /** @internal Get all cookies (effective merged view). Use cookies().getAll() instead. */
64
150
  cookies(): Record<string, string>;
65
- /** Set a cookie on the response */
151
+ /** @internal Set a cookie on the response. Use cookies().set() instead. */
66
152
  setCookie(name: string, value: string, options?: CookieOptions): void;
67
- /** Delete a cookie */
68
- deleteCookie(name: string, options?: Pick<CookieOptions, "domain" | "path">): void;
153
+ /** @internal Delete a cookie. Use cookies().delete() instead. */
154
+ deleteCookie(
155
+ name: string,
156
+ options?: Pick<CookieOptions, "domain" | "path">,
157
+ ): void;
69
158
  /** Set a response header */
70
159
  header(name: string, value: string): void;
160
+ /** Set the response status code */
161
+ setStatus(status: number): void;
162
+ /** @internal Set status bypassing cache-exec guard (for framework error handling) */
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;
71
168
 
72
169
  /**
73
170
  * Access loader data or push handle data.
@@ -89,10 +186,12 @@ export interface RequestContext<
89
186
  * ```
90
187
  */
91
188
  use: {
92
- <T, TLoaderParams = any>(loader: LoaderDefinition<T, TLoaderParams>): Promise<T>;
93
- <TData, TAccumulated = TData[]>(handle: Handle<TData, TAccumulated>): (
94
- data: TData | Promise<TData> | (() => Promise<TData>)
95
- ) => void;
189
+ <T, TLoaderParams = any>(
190
+ loader: LoaderDefinition<T, TLoaderParams>,
191
+ ): Promise<T>;
192
+ <TData, TAccumulated = TData[]>(
193
+ handle: Handle<TData, TAccumulated>,
194
+ ): (data: TData | Promise<TData> | (() => Promise<TData>)) => void;
96
195
  };
97
196
 
98
197
  /** HTTP method (GET, POST, PUT, PATCH, DELETE, etc.) */
@@ -101,22 +200,239 @@ export interface RequestContext<
101
200
  /** @internal Handle store for tracking handle data across segments */
102
201
  _handleStore: HandleStore;
103
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
+
104
225
  /** @internal Cache store for segment caching (optional, used by CacheScope) */
105
226
  _cacheStore?: SegmentCacheStore;
106
227
 
107
228
  /**
108
- * Schedule work to run after the response is sent.
109
- * On Cloudflare Workers, uses ctx.waitUntil().
110
- * On Node.js, runs as fire-and-forget.
111
- *
112
- * @example
113
- * ```typescript
114
- * ctx.waitUntil(async () => {
115
- * await cacheStore.set(key, data, ttl);
116
- * });
117
- * ```
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.
118
272
  */
119
- waitUntil(fn: () => Promise<void>): void;
273
+ _shellLoaderSeed?: Map<
274
+ string,
275
+ import("../cache/shell-snapshot.js").ShellLoaderSeedEntry
276
+ >;
277
+
278
+ /**
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`).
294
+ */
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
+ >;
120
436
 
121
437
  /**
122
438
  * Register a callback to run when the response is created.
@@ -140,6 +456,19 @@ export interface RequestContext<
140
456
  /** @internal Registered onResponse callbacks */
141
457
  _onResponseCallbacks: Array<(response: Response) => Response>;
142
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
+
143
472
  /**
144
473
  * Current theme setting (only available when theme is enabled in router config)
145
474
  *
@@ -177,8 +506,311 @@ export interface RequestContext<
177
506
 
178
507
  /** @internal Theme configuration (null if theme not enabled) */
179
508
  _themeConfig?: ResolvedThemeConfig | null;
509
+
510
+ /**
511
+ * Attach location state entries to the current response.
512
+ *
513
+ * For partial (SPA) requests, the state is included in the RSC payload
514
+ * metadata and merged into history.pushState on the client. For redirect
515
+ * responses, the state travels through the redirect payload so the target
516
+ * page can read it via useLocationState.
517
+ *
518
+ * Multiple calls accumulate entries.
519
+ *
520
+ * @example
521
+ * ```typescript
522
+ * ctx.setLocationState(Flash({ text: "Item saved!" }));
523
+ * ```
524
+ */
525
+ setLocationState(entries: LocationStateEntry | LocationStateEntry[]): void;
526
+
527
+ /** @internal Accumulated location state entries */
528
+ _locationState?: LocationStateEntry[];
529
+
530
+ /**
531
+ * The matched route name, if the route has an explicit name.
532
+ * Undefined before route matching or for unnamed routes.
533
+ * Includes the namespace prefix from include() (e.g., "blog.post").
534
+ */
535
+ routeName?: DefaultRouteName;
536
+
537
+ /**
538
+ * Generate URLs from route names.
539
+ * Uses the global route map. After route matching, scoped (`.name`) resolution
540
+ * works within the matched include() scope.
541
+ */
542
+ reverse: ScopedReverseFunction<
543
+ Record<string, string>,
544
+ DefaultReverseRouteMap
545
+ >;
546
+
547
+ /** @internal Route name from route matching, used for scoped reverse resolution */
548
+ _routeName?: string;
549
+
550
+ /** @internal Previous route key (from the navigation source), used for revalidation */
551
+ _prevRouteKey?: string;
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
+
577
+ /**
578
+ * @internal Render barrier for experimental `rendered()` API.
579
+ * Resolves when all non-loader segments have settled and handle data
580
+ * is available. Used by DSL loaders that call `ctx.rendered()`.
581
+ */
582
+ _renderBarrier: Promise<void>;
583
+
584
+ /**
585
+ * @internal Resolve the render barrier. Accepts resolved segments, filters
586
+ * out loaders, and captures non-loader segment IDs as the handle ordering.
587
+ * Called after segment resolution (fresh) or handle replay (cache/prerender).
588
+ */
589
+ _resolveRenderBarrier: (
590
+ segments: Array<{ type: string; id: string }>,
591
+ ) => void;
592
+
593
+ /**
594
+ * @internal Segment order at barrier resolution time, used by loader
595
+ * ctx.use(handle) to collect handle data in correct order.
596
+ */
597
+ _renderBarrierSegmentOrder?: string[];
598
+
599
+ /**
600
+ * @internal Set to true when the matched entry tree contains any `loading()`
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.
604
+ */
605
+ _treeHasStreaming?: boolean;
606
+
607
+ /**
608
+ * @internal Loader IDs that have called rendered() and are waiting for the
609
+ * barrier. Used to detect deadlocks when a handler tries to await the same
610
+ * loader via ctx.use(Loader).
611
+ */
612
+ _renderBarrierWaiters?: Set<string>;
613
+
614
+ /**
615
+ * @internal Loader IDs that handlers have started awaiting via ctx.use().
616
+ * Used for bidirectional deadlock detection: if a loader later calls
617
+ * rendered() and a handler already awaits it, we can detect the deadlock.
618
+ */
619
+ _handlerLoaderDeps?: Set<string>;
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
+
632
+ /**
633
+ * @internal Cached HandleData snapshot built at barrier resolution time.
634
+ * Avoids rebuilding the snapshot on every loader ctx.use(handle) call.
635
+ */
636
+ _renderBarrierHandleSnapshot?: HandleData;
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
+
650
+ /** @internal Per-request error dedup set for onError reporting */
651
+ _reportedErrors: WeakSet<object>;
652
+
653
+ /**
654
+ * @internal Report a non-fatal background error through the router's
655
+ * onError callback. Wired by the RSC handler / router during request
656
+ * creation. Cache-runtime and other subsystems call this to surface
657
+ * errors without failing the response. `category` is surfaced to consumers as
658
+ * `metadata.category` on the onError context (phase `cache`).
659
+ */
660
+ _reportBackgroundError?: (
661
+ error: unknown,
662
+ category: CacheErrorCategory,
663
+ ) => void;
664
+
665
+ /** @internal Per-request debug performance override (set via ctx.debugPerformance()) */
666
+ _debugPerformance?: boolean;
667
+
668
+ /** @internal Request-scoped performance metrics store */
669
+ _metricsStore?: MetricsStore;
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
+
696
+ /** @internal Router basename for this request (used by redirect()) */
697
+ _basename?: string;
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
+
703
+ /**
704
+ * @internal RouteSnapshot from classifyRequest, reused by match/matchPartial
705
+ * to avoid a second resolveRoute call. Cleared on HMR invalidation.
706
+ */
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[];
180
724
  }
181
725
 
726
+ /**
727
+ * Public view of RequestContext, without internal methods and fields.
728
+ *
729
+ * This is the type exported to library consumers. Internal code should
730
+ * use the full RequestContext interface directly.
731
+ */
732
+ export type PublicRequestContext<
733
+ TEnv = DefaultEnv,
734
+ TParams = Record<string, string>,
735
+ > = Omit<
736
+ RequestContext<TEnv, TParams>,
737
+ | "cookie"
738
+ | "cookies"
739
+ | "setCookie"
740
+ | "deleteCookie"
741
+ | "_handleStore"
742
+ | "_transitionWhen"
743
+ | "_pprTransitionDecisions"
744
+ | "_pprReplayPostMatchReason"
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"
758
+ | "_cacheProfiles"
759
+ | "_onResponseCallbacks"
760
+ | "_pendingBackgroundTasks"
761
+ | "_themeConfig"
762
+ | "_locationState"
763
+ | "_routeName"
764
+ | "_prevRouteKey"
765
+ | "_gateCurrentUrl"
766
+ | "_gateCurrentParams"
767
+ | "_gateActionId"
768
+ | "_gateActionUrl"
769
+ | "_gateActionResult"
770
+ | "_gateFormData"
771
+ | "_inActionRevalidation"
772
+ | "_reportedErrors"
773
+ | "_renderBarrier"
774
+ | "_resolveRenderBarrier"
775
+ | "_renderBarrierSegmentOrder"
776
+ | "_treeHasStreaming"
777
+ | "_renderBarrierWaiters"
778
+ | "_handlerLoaderDeps"
779
+ | "_awaitBeforeFlushLoaderIds"
780
+ | "_renderBarrierHandleSnapshot"
781
+ | "_renderBarrierGuardClosed"
782
+ | "_reportBackgroundError"
783
+ | "_debugPerformance"
784
+ | "_metricsStore"
785
+ | "_renderForeground"
786
+ | "_activeRoutine"
787
+ | "_renderDiagnosticsEnabled"
788
+ | "_handlerStart"
789
+ | "_tracing"
790
+ | "_basename"
791
+ | "_routerId"
792
+ | "_setStatus"
793
+ | "_rotateStateCookie"
794
+ | "_setKeepCacheDirective"
795
+ | "_variables"
796
+ | "_classifiedRoute"
797
+ | "_requestMode"
798
+ | "_cacheSignal"
799
+ | "_dynamic"
800
+ | "res"
801
+ >;
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
+
182
814
  // AsyncLocalStorage instance for request context
183
815
  const requestContextStorage = new AsyncLocalStorage<RequestContext<any>>();
184
816
 
@@ -188,16 +820,33 @@ const requestContextStorage = new AsyncLocalStorage<RequestContext<any>>();
188
820
  */
189
821
  export function runWithRequestContext<TEnv, T>(
190
822
  context: RequestContext<TEnv>,
191
- fn: () => T
823
+ fn: () => T,
192
824
  ): T {
193
825
  return requestContextStorage.run(context, fn);
194
826
  }
195
827
 
196
828
  /**
197
829
  * Get the current request context
198
- * Returns undefined if not running within a request context
830
+ * Throws if called outside of a request context
831
+ */
832
+ export function getRequestContext<TEnv = DefaultEnv>(): RequestContext<TEnv> {
833
+ const ctx = requestContextStorage.getStore() as
834
+ | RequestContext<TEnv>
835
+ | undefined;
836
+ invariant(
837
+ ctx,
838
+ "getRequestContext() called outside of a request context. " +
839
+ "This function must be called from within a route handler, loader, middleware, " +
840
+ "server action, or server component.",
841
+ );
842
+ return ctx;
843
+ }
844
+
845
+ /**
846
+ * @internal Get the request context without throwing — for internal code that
847
+ * may run outside a request context (cache stores, optional handle lookups, etc.)
199
848
  */
200
- export function getRequestContext<TEnv = unknown>():
849
+ export function _getRequestContext<TEnv = DefaultEnv>():
201
850
  | RequestContext<TEnv>
202
851
  | undefined {
203
852
  return requestContextStorage.getStore() as RequestContext<TEnv> | undefined;
@@ -205,38 +854,72 @@ export function getRequestContext<TEnv = unknown>():
205
854
 
206
855
  /**
207
856
  * Update params on the current request context
208
- * Called after route matching to populate route params
857
+ * Called after route matching to populate route params and route name
209
858
  */
210
- export function setRequestContextParams(params: Record<string, string>): void {
859
+ export function setRequestContextParams(
860
+ params: Record<string, string>,
861
+ routeName?: string,
862
+ routeMap?: Record<string, string>,
863
+ ): void {
211
864
  const ctx = requestContextStorage.getStore();
212
865
  if (ctx) {
213
866
  ctx.params = params;
867
+ if (routeName !== undefined) {
868
+ ctx._routeName = routeName;
869
+ ctx.routeName = (
870
+ routeName && !isAutoGeneratedRouteName(routeName)
871
+ ? routeName
872
+ : undefined
873
+ ) as DefaultRouteName | undefined;
874
+ }
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.
880
+ ctx.reverse = createReverseFunction(
881
+ routeMap ?? getGlobalRouteMap(),
882
+ routeName,
883
+ params,
884
+ routeName ? isRouteRootScoped(routeName, ctx._routerId) : undefined,
885
+ );
214
886
  }
215
887
  }
216
888
 
217
889
  /**
218
- * Get the current request context, throwing if not available
219
- * Use this when context is required (e.g., in loader actions)
890
+ * Store the previous route key on the request context.
891
+ * Called during partial-match context creation to make the navigation source
892
+ * route key available for revalidation and intercept evaluation.
893
+ * @internal
220
894
  */
221
- export function requireRequestContext<TEnv = unknown>(): RequestContext<TEnv> {
222
- const ctx = getRequestContext<TEnv>();
223
- if (!ctx) {
224
- throw new Error(
225
- "Request context not available. This function must be called from within a server action " +
226
- "executed through the RSC handler."
227
- );
228
- }
229
- return ctx;
895
+ export function setRequestContextPrevRouteKey(
896
+ prevRouteKey: string | undefined,
897
+ currentUrl?: URL,
898
+ currentParams?: Record<string, string>,
899
+ ): void {
900
+ const ctx = requestContextStorage.getStore();
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;
230
908
  }
231
909
 
232
910
  /**
233
- * Cloudflare Workers ExecutionContext (subset we need)
911
+ * Get accumulated location state entries from the current request context.
912
+ * Returns undefined if no state has been set.
913
+ *
914
+ * @internal Used by the RSC handler to include state in payload metadata.
234
915
  */
235
- export interface ExecutionContext {
236
- waitUntil(promise: Promise<any>): void;
237
- passThroughOnException(): void;
916
+ export function getLocationState(): LocationStateEntry[] | undefined {
917
+ const ctx = getRequestContext();
918
+ return ctx?._locationState;
238
919
  }
239
920
 
921
+ export type { ExecutionContext };
922
+
240
923
  /**
241
924
  * Options for creating a request context
242
925
  */
@@ -245,12 +928,35 @@ export interface CreateRequestContextOptions<TEnv> {
245
928
  request: Request;
246
929
  url: URL;
247
930
  variables: Record<string, any>;
931
+ /** Optional initial response stub headers/status to seed effective cookie reads */
932
+ initialResponse?: Response;
248
933
  /** Optional cache store for segment caching (used by CacheScope) */
249
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>;
945
+ /** Optional cache profiles for "use cache" resolution (per-router) */
946
+ cacheProfiles?: Record<
947
+ string,
948
+ import("../cache/profile-registry.js").CacheProfile
949
+ >;
250
950
  /** Optional Cloudflare execution context for waitUntil support */
251
951
  executionContext?: ExecutionContext;
952
+ /** Build-time render/capture request marker. Defaults to false. */
953
+ build?: boolean;
252
954
  /** Optional theme configuration (enables ctx.theme and ctx.setTheme) */
253
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;
254
960
  }
255
961
 
256
962
  /**
@@ -262,20 +968,83 @@ export interface CreateRequestContextOptions<TEnv> {
262
968
  * - Passed to handlers as ctx
263
969
  */
264
970
  export function createRequestContext<TEnv>(
265
- options: CreateRequestContextOptions<TEnv>
971
+ options: CreateRequestContextOptions<TEnv>,
266
972
  ): RequestContext<TEnv> {
267
- const { env, request, url, variables, cacheStore, executionContext, themeConfig } = options;
973
+ const {
974
+ env,
975
+ request,
976
+ url,
977
+ variables,
978
+ initialResponse,
979
+ cacheStore,
980
+ searchParamsFilter,
981
+ explicitTaggedStores,
982
+ cacheProfiles,
983
+ executionContext,
984
+ build = false,
985
+ themeConfig,
986
+ stateCookieName,
987
+ version: stateVersion,
988
+ } = options;
268
989
  const cookieHeader = request.headers.get("Cookie");
990
+ let rangoStateRotated = false;
269
991
  let parsedCookies: Record<string, string> | null = null;
270
992
 
271
- // Create stub response for collecting headers/cookies
272
- const stubResponse = new Response(null, { status: 200 });
993
+ let stubResponse = initialResponse
994
+ ? new Response(null, {
995
+ status: initialResponse.status,
996
+ statusText: initialResponse.statusText,
997
+ headers: new Headers(initialResponse.headers),
998
+ })
999
+ : new Response(null, { status: 200 });
1000
+
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
+ };
273
1044
 
274
- // Create handle store and loader memoization for this request
275
1045
  const handleStore = createHandleStore();
276
1046
  const loaderPromises = new Map<string, Promise<any>>();
277
1047
 
278
- // Lazy parse cookies
279
1048
  const getParsedCookies = (): Record<string, string> => {
280
1049
  if (!parsedCookies) {
281
1050
  parsedCookies = parseCookiesFromHeader(cookieHeader);
@@ -283,13 +1052,40 @@ export function createRequestContext<TEnv>(
283
1052
  return parsedCookies;
284
1053
  };
285
1054
 
286
- // Theme helpers (only used when themeConfig is provided)
1055
+ let responseCookieCache: Map<string, string | null> | null = null;
1056
+ const getResponseCookies = (): Map<string, string | null> => {
1057
+ if (!responseCookieCache) {
1058
+ responseCookieCache = parseResponseCookies(stubResponse);
1059
+ }
1060
+ return responseCookieCache;
1061
+ };
1062
+ const invalidateResponseCookieCache = () => {
1063
+ responseCookieCache = null;
1064
+ };
1065
+
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);
1072
+ }
1073
+
1074
+ // Response stub Set-Cookie wins, then original header (source of truth for mutations).
1075
+ const effectiveCookie = (name: string): string | undefined => {
1076
+ const mutations = getResponseCookies();
1077
+ if (mutations.has(name)) {
1078
+ const v = mutations.get(name);
1079
+ return v === null ? undefined : v;
1080
+ }
1081
+ return getParsedCookies()[name];
1082
+ };
1083
+
287
1084
  const getTheme = (): Theme | undefined => {
288
1085
  if (!themeConfig) return undefined;
289
1086
 
290
- const stored = getParsedCookies()[themeConfig.storageKey];
1087
+ const stored = effectiveCookie(themeConfig.storageKey);
291
1088
  if (stored) {
292
- // Validate stored value
293
1089
  if (stored === "system" && themeConfig.enableSystem) {
294
1090
  return "system";
295
1091
  }
@@ -303,145 +1099,457 @@ export function createRequestContext<TEnv>(
303
1099
  const setTheme = (theme: Theme): void => {
304
1100
  if (!themeConfig) return;
305
1101
 
306
- // Validate theme value
307
- if (theme !== "system" && !themeConfig.themes.includes(theme)) {
308
- console.warn(`[Theme] Invalid theme value: "${theme}". Valid values: system, ${themeConfig.themes.join(", ")}`);
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);
309
1108
  return;
310
1109
  }
311
1110
 
312
- // Set cookie
313
1111
  stubResponse.headers.append(
314
1112
  "Set-Cookie",
315
1113
  serializeCookieValue(themeConfig.storageKey, theme, {
316
1114
  path: THEME_COOKIE.path,
317
1115
  maxAge: THEME_COOKIE.maxAge,
318
1116
  sameSite: THEME_COOKIE.sameSite,
319
- })
1117
+ }),
320
1118
  );
1119
+ invalidateResponseCookieCache();
321
1120
  };
322
1121
 
323
- // Build the context object first (without use), then add use
1122
+ const cleanUrl = stripInternalParams(url);
1123
+
324
1124
  const ctx: RequestContext<TEnv> = {
325
1125
  env,
326
1126
  request,
327
- url,
1127
+ url: cleanUrl,
1128
+ originalUrl: new URL(request.url),
328
1129
  pathname: url.pathname,
329
- searchParams: url.searchParams,
330
- var: variables,
331
- get: <K extends string>(key: K) => variables[key],
332
- set: <K extends string>(key: K, value: any) => {
333
- variables[key] = value;
1130
+ searchParams: cleanUrl.searchParams,
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();
334
1140
  },
1141
+ _dynamic: false,
1142
+ get: ((keyOrVar: any) => {
1143
+ if (isNonCacheable(variables, keyOrVar) && isInsideCacheScope()) {
1144
+ throw new Error(
1145
+ `ctx.get() for a non-cacheable variable cannot be called inside a cache() boundary. ` +
1146
+ `The variable was created with { cache: false } or set with { cache: false }, ` +
1147
+ `and its value would be stale on cache hit. Move the read outside the cached scope.`,
1148
+ );
1149
+ }
1150
+ return contextGet(variables, keyOrVar);
1151
+ }) as RequestContext<TEnv>["get"],
1152
+ set: ((keyOrVar: any, value: any, options?: any) => {
1153
+ assertNotInsideCacheExec(ctx, "set");
1154
+ contextSet(variables, keyOrVar, value, options);
1155
+ }) as RequestContext<TEnv>["set"],
335
1156
  params: {} as Record<string, string>,
336
- res: stubResponse,
1157
+
1158
+ get res(): Response {
1159
+ return stubResponse;
1160
+ },
1161
+ set res(_: Response) {
1162
+ throw new Error(
1163
+ "ctx.res is read-only. Use ctx.header() to set response headers, or cookies() for cookie mutations.",
1164
+ );
1165
+ },
337
1166
 
338
1167
  cookie(name: string): string | undefined {
339
- return getParsedCookies()[name];
1168
+ return effectiveCookie(name);
340
1169
  },
341
1170
 
342
1171
  cookies(): Record<string, string> {
343
- return { ...getParsedCookies() };
1172
+ const parsed = getParsedCookies();
1173
+ const mutations = getResponseCookies();
1174
+ if (mutations.size === 0) return { ...parsed };
1175
+ // Build result without delete (avoids V8 dictionary-mode de-opt)
1176
+ const deleted = new Set<string>();
1177
+ for (const [k, v] of mutations) {
1178
+ if (v === null) deleted.add(k);
1179
+ }
1180
+ const result: Record<string, string> = {};
1181
+ for (const key of Object.keys(parsed)) {
1182
+ if (!deleted.has(key)) result[key] = parsed[key];
1183
+ }
1184
+ for (const [k, v] of mutations) {
1185
+ if (v !== null) result[k] = v;
1186
+ }
1187
+ return result;
344
1188
  },
345
1189
 
346
1190
  setCookie(name: string, value: string, options?: CookieOptions): void {
1191
+ assertNotInsideCacheExec(ctx, "setCookie");
347
1192
  stubResponse.headers.append(
348
1193
  "Set-Cookie",
349
- serializeCookieValue(name, value, options)
1194
+ serializeCookieValue(name, value, options),
350
1195
  );
1196
+ invalidateResponseCookieCache();
351
1197
  },
352
1198
 
353
1199
  deleteCookie(
354
1200
  name: string,
355
- options?: Pick<CookieOptions, "domain" | "path">
1201
+ options?: Pick<CookieOptions, "domain" | "path">,
356
1202
  ): void {
1203
+ assertNotInsideCacheExec(ctx, "deleteCookie");
357
1204
  stubResponse.headers.append(
358
1205
  "Set-Cookie",
359
- serializeCookieValue(name, "", { ...options, maxAge: 0 })
1206
+ serializeCookieValue(name, "", { ...options, maxAge: 0 }),
360
1207
  );
1208
+ invalidateResponseCookieCache();
361
1209
  },
362
1210
 
363
1211
  header(name: string, value: string): void {
1212
+ assertNotInsideCacheExec(ctx, "header");
364
1213
  stubResponse.headers.set(name, value);
365
1214
  },
366
1215
 
367
- // Placeholder - will be replaced below
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
+
1258
+ setStatus(status: number): void {
1259
+ assertNotInsideCacheExec(ctx, "setStatus");
1260
+ assertResponseWriteAllowed("setStatus");
1261
+ replaceStubStatus(status);
1262
+ },
1263
+
1264
+ _setStatus(status: number): void {
1265
+ replaceStubStatus(status);
1266
+ },
1267
+
368
1268
  use: null as any,
369
1269
 
370
1270
  method: request.method,
371
1271
 
372
1272
  _handleStore: handleStore,
1273
+ _transitionWhen: [],
373
1274
  _cacheStore: cacheStore,
1275
+ _searchParamsFilter: searchParamsFilter,
1276
+ _explicitTaggedStores: explicitTaggedStores,
1277
+ _requestTags: new Set<string>(),
1278
+ _cacheProfiles: cacheProfiles,
374
1279
 
375
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
+ }
376
1298
  if (executionContext?.waitUntil) {
377
- // Cloudflare Workers: use native waitUntil
378
- executionContext.waitUntil(fn());
1299
+ executionContext.waitUntil(task);
379
1300
  } else {
380
- // Node.js / dev: fire-and-forget with error logging
381
- fn().catch((err) => console.error("[waitUntil] Background task failed:", err));
1301
+ // Node/dev fallback: fire-and-forget with error logging (the same
1302
+ // policy fireAndForgetWaitUntil applies).
1303
+ task.catch((err) =>
1304
+ console.error("[waitUntil] Background task failed:", err),
1305
+ );
382
1306
  }
383
1307
  },
384
1308
 
1309
+ executionContext,
1310
+
385
1311
  _onResponseCallbacks: [],
1312
+ _pendingBackgroundTasks: [],
386
1313
 
387
1314
  onResponse(callback: (response: Response) => Response): void {
1315
+ assertNotInsideCacheExec(ctx, "onResponse");
1316
+ assertResponseWriteAllowed("onResponse");
388
1317
  this._onResponseCallbacks.push(callback);
389
1318
  },
390
1319
 
391
- // Theme properties (only set when themeConfig is provided)
392
- theme: themeConfig ? getTheme() : undefined,
393
- setTheme: themeConfig ? setTheme : undefined,
1320
+ get theme() {
1321
+ return themeConfig ? getTheme() : undefined;
1322
+ },
1323
+ setTheme: themeConfig
1324
+ ? (theme: Theme) => {
1325
+ assertNotInsideCacheExec(ctx, "setTheme");
1326
+ setTheme(theme);
1327
+ }
1328
+ : undefined,
394
1329
  _themeConfig: themeConfig,
1330
+
1331
+ setLocationState(entries: LocationStateEntry | LocationStateEntry[]): void {
1332
+ assertNotInsideCacheExec(ctx, "setLocationState");
1333
+ const arr = Array.isArray(entries) ? entries : [entries];
1334
+ this._locationState = this._locationState
1335
+ ? [...this._locationState, ...arr]
1336
+ : arr;
1337
+ },
1338
+ _locationState: undefined,
1339
+
1340
+ _reportedErrors: new WeakSet<object>(),
1341
+ _metricsStore: undefined,
1342
+ _renderForeground: undefined,
1343
+ _activeRoutine: undefined,
1344
+ _renderDiagnosticsEnabled: undefined,
1345
+ _handlerStart: undefined,
1346
+
1347
+ _renderBarrier: null as any,
1348
+ _resolveRenderBarrier: null as any,
1349
+ _renderBarrierSegmentOrder: undefined,
1350
+
1351
+ reverse: createReverseFunction(getGlobalRouteMap(), undefined, {}),
395
1352
  };
396
1353
 
397
- // Now create use() with access to ctx
1354
+ wireRenderBarrier(ctx, handleStore);
1355
+
398
1356
  ctx.use = createUseFunction({
399
1357
  handleStore,
400
1358
  loaderPromises,
401
1359
  getContext: () => ctx,
402
1360
  });
403
1361
 
1362
+ (ctx as any)[NOCACHE_SYMBOL] = true;
404
1363
  return ctx;
405
1364
  }
406
1365
 
407
1366
  /**
408
- * Parse cookies from Cookie header
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.
409
1382
  */
410
- function parseCookiesFromHeader(
411
- cookieHeader: string | null
412
- ): Record<string, string> {
413
- if (!cookieHeader) return {};
414
-
415
- const cookies: Record<string, string> = {};
416
- const pairs = cookieHeader.split(";");
417
-
418
- for (const pair of pairs) {
419
- const [name, ...rest] = pair.trim().split("=");
420
- if (name) {
421
- cookies[name] = decodeURIComponent(rest.join("="));
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().
1403
+ let barrierResolved = false;
1404
+ let resolveBarrier: (() => void) | undefined;
1405
+ ctx._resolveRenderBarrier = (
1406
+ segments: Array<{ type: string; id: string }>,
1407
+ ) => {
1408
+ if (barrierResolved) return;
1409
+ barrierResolved = true;
1410
+ const segOrder = segments
1411
+ .filter((s) => s.type !== "loader")
1412
+ .map((s) => s.id);
1413
+ ctx._renderBarrierSegmentOrder = segOrder;
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();
422
1429
  }
1430
+ if (resolveBarrier) resolveBarrier();
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.
1435
+ Object.defineProperty(ctx, "_renderBarrier", {
1436
+ get() {
1437
+ const p = barrierResolved
1438
+ ? Promise.resolve()
1439
+ : new Promise<void>((resolve) => {
1440
+ resolveBarrier = resolve;
1441
+ });
1442
+ Object.defineProperty(ctx, "_renderBarrier", {
1443
+ value: p,
1444
+ writable: false,
1445
+ configurable: false,
1446
+ });
1447
+ return p;
1448
+ },
1449
+ configurable: true,
1450
+ });
1451
+ }
1452
+
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;
1458
+
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;
1463
+ }
1464
+
1465
+ function parseResponseCookies(response: Response): Map<string, string | null> {
1466
+ const result = new Map<string, string | null>();
1467
+ const setCookies = response.headers.getSetCookie();
1468
+
1469
+ for (const header of setCookies) {
1470
+ const semiIdx = header.indexOf(";");
1471
+ const pair = semiIdx === -1 ? header : header.substring(0, semiIdx);
1472
+ const eqIdx = pair.indexOf("=");
1473
+ if (eqIdx === -1) continue;
1474
+
1475
+ let name: string;
1476
+ let value: string;
1477
+ try {
1478
+ name = decodeURIComponent(pair.substring(0, eqIdx).trim());
1479
+ value = decodeURIComponent(pair.substring(eqIdx + 1).trim());
1480
+ } catch {
1481
+ continue;
1482
+ }
1483
+
1484
+ const isDeleted = isCookieDeletion(header);
1485
+ result.set(name, isDeleted ? null : value);
423
1486
  }
424
1487
 
425
- return cookies;
1488
+ return result;
426
1489
  }
427
1490
 
428
- /**
429
- * Serialize a cookie for Set-Cookie header
430
- */
431
- function serializeCookieValue(
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
+ );
1507
+ }
1508
+ }
1509
+ }
1510
+
1511
+ export function serializeCookieValue(
432
1512
  name: string,
433
1513
  value: string,
434
- options: CookieOptions = {}
1514
+ options: CookieOptions = {},
435
1515
  ): string {
436
1516
  let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
437
1517
 
438
- if (options.domain) cookie += `; Domain=${options.domain}`;
439
- if (options.path) cookie += `; Path=${options.path}`;
440
- 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
+ }
441
1540
  if (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;
442
1541
  if (options.httpOnly) cookie += "; HttpOnly";
443
1542
  if (options.secure) cookie += "; Secure";
444
- 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
+ }
445
1553
 
446
1554
  return cookie;
447
1555
  }
@@ -455,20 +1563,12 @@ export interface CreateUseFunctionOptions<TEnv> {
455
1563
  getContext: () => RequestContext<TEnv>;
456
1564
  }
457
1565
 
458
- /**
459
- * Create the use() function for loader and handle composition.
460
- *
461
- * This is the unified implementation used by both RequestContext and HandlerContext.
462
- * - For loaders: executes and memoizes loader functions
463
- * - For handles: returns a push function to add handle data
464
- */
465
1566
  export function createUseFunction<TEnv>(
466
- options: CreateUseFunctionOptions<TEnv>
1567
+ options: CreateUseFunctionOptions<TEnv>,
467
1568
  ): RequestContext["use"] {
468
1569
  const { handleStore, loaderPromises, getContext } = options;
469
1570
 
470
1571
  return ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
471
- // Handle case: return a push function
472
1572
  if (isHandle(item)) {
473
1573
  const handle = item;
474
1574
  const ctx = getContext();
@@ -477,35 +1577,30 @@ export function createUseFunction<TEnv>(
477
1577
  if (!segmentId) {
478
1578
  throw new Error(
479
1579
  `Handle "${handle.$$id}" used outside of handler context. ` +
480
- `Handles must be used within route/layout handlers.`
1580
+ `Handles must be used within route/layout handlers.`,
481
1581
  );
482
1582
  }
483
1583
 
484
- // Return a push function bound to this handle and segment
485
- return (dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
486
- // If it's a function, call it immediately to get the promise
487
- const valueOrPromise = typeof dataOrFn === "function"
488
- ? (dataOrFn as () => Promise<unknown>)()
489
- : dataOrFn;
1584
+ return withDefer(
1585
+ (dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
1586
+ const valueOrPromise =
1587
+ typeof dataOrFn === "function"
1588
+ ? (dataOrFn as () => Promise<unknown>)()
1589
+ : dataOrFn;
490
1590
 
491
- // Push directly - promises will be serialized by RSC and streamed
492
- handleStore.push(handle.$$id, segmentId, valueOrPromise);
493
- };
1591
+ handleStore.push(handle.$$id, segmentId, valueOrPromise);
1592
+ },
1593
+ );
494
1594
  }
495
1595
 
496
- // Loader case
497
1596
  const loader = item as LoaderDefinition<any, any>;
498
1597
 
499
- // Return cached promise if already started
500
1598
  if (loaderPromises.has(loader.$$id)) {
501
1599
  return loaderPromises.get(loader.$$id);
502
1600
  }
503
1601
 
504
- // Get loader function - either from loader object or fetchable registry
505
1602
  let loaderFn = loader.fn;
506
1603
  if (!loaderFn) {
507
- // Lazy import to avoid circular dependency
508
- const { getFetchableLoader } = require("../loader.rsc.js");
509
1604
  const fetchable = getFetchableLoader(loader.$$id);
510
1605
  if (fetchable) {
511
1606
  loaderFn = fetchable.fn;
@@ -514,39 +1609,79 @@ export function createUseFunction<TEnv>(
514
1609
 
515
1610
  if (!loaderFn) {
516
1611
  throw new Error(
517
- `Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`
1612
+ `Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`,
518
1613
  );
519
1614
  }
520
1615
 
521
1616
  const ctx = getContext();
522
1617
 
523
- // 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
+
524
1630
  const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
525
1631
  params: ctx.params,
1632
+ routeParams: (ctx.params ?? {}) as Record<string, string>,
526
1633
  request: ctx.request,
527
1634
  searchParams: ctx.searchParams,
1635
+ search: loaderSearch,
528
1636
  pathname: ctx.pathname,
529
1637
  url: ctx.url,
1638
+ originalUrl: ctx.originalUrl,
530
1639
  env: ctx.env as any,
531
- var: ctx.var as any,
532
- get: ctx.get as any,
533
- use: <TDep, TDepParams = any>(
534
- dep: LoaderDefinition<TDep, TDepParams>
535
- ): Promise<TDep> => {
536
- // Recursive call - will start dep loader if not already started
537
- return ctx.use(dep);
538
- },
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"],
539
1659
  method: "GET",
540
1660
  body: undefined,
1661
+ reverse: createReverseFunction(
1662
+ getGlobalRouteMap(),
1663
+ ctx._routeName,
1664
+ ctx.params as Record<string, string>,
1665
+ ctx._routeName
1666
+ ? isRouteRootScoped(ctx._routeName, ctx._routerId)
1667
+ : undefined,
1668
+ ),
1669
+ rendered: () => {
1670
+ throw new Error(
1671
+ `ctx.rendered() is only available in DSL loaders (registered via loader() in urls()). ` +
1672
+ `It cannot be used from request-context loaders or server actions.`,
1673
+ );
1674
+ },
541
1675
  };
542
1676
 
543
- // Start loader execution with tracking
544
- const doneLoader = track(`loader:${loader.$$id}`);
545
- const promise = Promise.resolve(loaderFn(loaderCtx)).finally(() => {
546
- doneLoader();
547
- });
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
+ );
548
1684
 
549
- // Memoize for subsequent calls
550
1685
  loaderPromises.set(loader.$$id, promise);
551
1686
 
552
1687
  return promise;