@rangojs/router 0.0.0-experimental.19 → 0.0.0-experimental.190fb30d

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 (1254) hide show
  1. package/AGENTS.md +13 -0
  2. package/README.md +304 -708
  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 +822 -182
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/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/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +4644 -1433
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/index.named-routes.gen.ts +103 -0
  802. package/dist/vite/package-resolution.d.ts +43 -0
  803. package/dist/vite/package-resolution.d.ts.map +1 -0
  804. package/dist/vite/package-resolution.js +112 -0
  805. package/dist/vite/package-resolution.js.map +1 -0
  806. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  807. package/dist/vite/virtual-entries.d.ts +25 -0
  808. package/dist/vite/virtual-entries.d.ts.map +1 -0
  809. package/dist/vite/virtual-entries.js +110 -0
  810. package/dist/vite/virtual-entries.js.map +1 -0
  811. package/package.json +87 -16
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +329 -0
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +251 -24
  816. package/skills/caching/SKILL.md +379 -21
  817. package/skills/catalog.json +271 -0
  818. package/skills/comparison/SKILL.md +50 -0
  819. package/skills/comparison/agents/openai.yaml +4 -0
  820. package/skills/comparison/references/framework-comparison.md +837 -0
  821. package/skills/composability/SKILL.md +110 -4
  822. package/skills/css/SKILL.md +76 -0
  823. package/skills/debug-manifest/SKILL.md +5 -3
  824. package/skills/defer-hydration/SKILL.md +235 -0
  825. package/skills/document-cache/SKILL.md +87 -56
  826. package/skills/fonts/SKILL.md +1 -1
  827. package/skills/handler-use/SKILL.md +364 -0
  828. package/skills/hooks/SKILL.md +76 -692
  829. package/skills/hooks/data.md +273 -0
  830. package/skills/hooks/handle-and-actions.md +103 -0
  831. package/skills/hooks/navigation.md +110 -0
  832. package/skills/hooks/outlets.md +41 -0
  833. package/skills/hooks/state.md +228 -0
  834. package/skills/hooks/urls.md +135 -0
  835. package/skills/host-router/SKILL.md +320 -0
  836. package/skills/i18n/SKILL.md +276 -0
  837. package/skills/intercept/SKILL.md +94 -18
  838. package/skills/layout/SKILL.md +62 -19
  839. package/skills/links/SKILL.md +249 -17
  840. package/skills/loader/SKILL.md +320 -32
  841. package/skills/middleware/SKILL.md +59 -16
  842. package/skills/migrate-nextjs/SKILL.md +745 -0
  843. package/skills/migrate-react-router/SKILL.md +153 -0
  844. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  845. package/skills/migrate-react-router/component-migration.md +196 -0
  846. package/skills/migrate-react-router/data-and-actions.md +225 -0
  847. package/skills/migrate-react-router/route-mapping.md +271 -0
  848. package/skills/mime-routes/SKILL.md +29 -2
  849. package/skills/observability/SKILL.md +202 -0
  850. package/skills/parallel/SKILL.md +225 -10
  851. package/skills/ppr/SKILL.md +618 -0
  852. package/skills/prerender/SKILL.md +180 -126
  853. package/skills/rango/SKILL.md +318 -25
  854. package/skills/react-compiler/SKILL.md +168 -0
  855. package/skills/response-routes/SKILL.md +138 -49
  856. package/skills/route/SKILL.md +175 -13
  857. package/skills/router-setup/SKILL.md +139 -14
  858. package/skills/scripts/SKILL.md +179 -0
  859. package/skills/server-actions/SKILL.md +776 -0
  860. package/skills/shell-manifest/SKILL.md +185 -0
  861. package/skills/streams-and-websockets/SKILL.md +283 -0
  862. package/skills/tailwind/SKILL.md +28 -4
  863. package/skills/testing/SKILL.md +126 -222
  864. package/skills/testing/bindings.md +103 -0
  865. package/skills/testing/cache-prerender.md +127 -0
  866. package/skills/testing/client-components.md +124 -0
  867. package/skills/testing/e2e-parity.md +125 -0
  868. package/skills/testing/flight.md +91 -0
  869. package/skills/testing/handles.md +131 -0
  870. package/skills/testing/loader.md +128 -0
  871. package/skills/testing/middleware.md +99 -0
  872. package/skills/testing/render-handler.md +122 -0
  873. package/skills/testing/response-routes.md +95 -0
  874. package/skills/testing/reverse-and-types.md +85 -0
  875. package/skills/testing/server-actions.md +107 -0
  876. package/skills/testing/server-tree.md +128 -0
  877. package/skills/testing/setup.md +123 -0
  878. package/skills/theme/SKILL.md +1 -1
  879. package/skills/typesafety/SKILL.md +45 -614
  880. package/skills/typesafety/env-and-bindings.md +254 -0
  881. package/skills/typesafety/generated-files-and-cli.md +335 -0
  882. package/skills/typesafety/params-and-search.md +153 -0
  883. package/skills/typesafety/route-types.md +209 -0
  884. package/skills/use-cache/SKILL.md +74 -15
  885. package/skills/vercel/SKILL.md +128 -0
  886. package/skills/view-transitions/SKILL.md +337 -0
  887. package/src/__augment-tests__/augment.ts +81 -0
  888. package/src/__augment-tests__/augmented.check.ts +116 -0
  889. package/src/__internal.ts +67 -40
  890. package/src/bin/rango.ts +18 -0
  891. package/src/browser/action-coordinator.ts +53 -36
  892. package/src/browser/action-fence.ts +47 -0
  893. package/src/browser/app-shell.ts +39 -0
  894. package/src/browser/app-version.ts +14 -0
  895. package/src/browser/connection-warmup.ts +134 -0
  896. package/src/browser/cookie-name.ts +140 -0
  897. package/src/browser/event-controller.ts +257 -158
  898. package/src/browser/history-state.ts +21 -0
  899. package/src/browser/index.ts +3 -3
  900. package/src/browser/invalidate-client-cache.ts +52 -0
  901. package/src/browser/link-interceptor.ts +4 -0
  902. package/src/browser/logging.ts +28 -0
  903. package/src/browser/merge-segment-loaders.ts +6 -4
  904. package/src/browser/navigation-bridge.ts +222 -38
  905. package/src/browser/navigation-client.ts +233 -58
  906. package/src/browser/navigation-store-handle.ts +38 -0
  907. package/src/browser/navigation-store.ts +203 -80
  908. package/src/browser/navigation-transaction.ts +18 -66
  909. package/src/browser/network-error-handler.ts +34 -7
  910. package/src/browser/partial-update.ts +242 -126
  911. package/src/browser/prefetch/cache.ts +344 -30
  912. package/src/browser/prefetch/fetch.ts +373 -48
  913. package/src/browser/prefetch/policy.ts +6 -0
  914. package/src/browser/prefetch/queue.ts +144 -23
  915. package/src/browser/prefetch/resource-ready.ts +77 -0
  916. package/src/browser/rango-state.ts +158 -76
  917. package/src/browser/react/Link.tsx +135 -18
  918. package/src/browser/react/NavigationProvider.tsx +240 -122
  919. package/src/browser/react/ScrollRestoration.tsx +10 -6
  920. package/src/browser/react/context.ts +7 -2
  921. package/src/browser/react/filter-segment-order.ts +66 -7
  922. package/src/browser/react/index.ts +0 -48
  923. package/src/browser/react/location-state-shared.ts +178 -8
  924. package/src/browser/react/location-state.ts +39 -14
  925. package/src/browser/react/use-action.ts +6 -15
  926. package/src/browser/react/use-handle.ts +23 -69
  927. package/src/browser/react/use-href.tsx +8 -1
  928. package/src/browser/react/use-link-status.ts +33 -8
  929. package/src/browser/react/use-navigation.ts +32 -7
  930. package/src/browser/react/use-params.ts +20 -10
  931. package/src/browser/react/use-reverse.ts +106 -0
  932. package/src/browser/react/use-router.ts +46 -11
  933. package/src/browser/react/use-search-params.ts +0 -5
  934. package/src/browser/react/use-segments.ts +11 -21
  935. package/src/browser/response-adapter.ts +99 -8
  936. package/src/browser/rsc-router.tsx +276 -75
  937. package/src/browser/scroll-restoration.ts +61 -47
  938. package/src/browser/segment-reconciler.ts +44 -7
  939. package/src/browser/segment-structure-assert.ts +2 -2
  940. package/src/browser/server-action-bridge.ts +631 -442
  941. package/src/browser/types.ts +160 -12
  942. package/src/browser/validate-redirect-origin.ts +43 -16
  943. package/src/build/collect-fallback-refs.ts +107 -0
  944. package/src/build/generate-manifest.ts +207 -158
  945. package/src/build/generate-route-types.ts +8 -1
  946. package/src/build/index.ts +11 -3
  947. package/src/build/prefix-tree-utils.ts +123 -0
  948. package/src/build/route-trie.ts +215 -42
  949. package/src/build/route-types/ast-route-extraction.ts +15 -8
  950. package/src/build/route-types/codegen.ts +16 -5
  951. package/src/build/route-types/include-resolution.ts +464 -63
  952. package/src/build/route-types/param-extraction.ts +6 -3
  953. package/src/build/route-types/per-module-writer.ts +22 -6
  954. package/src/build/route-types/router-processing.ts +442 -106
  955. package/src/build/route-types/scan-filter.ts +9 -2
  956. package/src/build/route-types/source-scan.ts +216 -0
  957. package/src/build/runtime-discovery.ts +13 -21
  958. package/src/cache/cache-error.ts +104 -0
  959. package/src/cache/cache-key-utils.ts +58 -13
  960. package/src/cache/cache-policy.ts +108 -34
  961. package/src/cache/cache-runtime.ts +454 -97
  962. package/src/cache/cache-scope.ts +235 -103
  963. package/src/cache/cache-tag.ts +149 -0
  964. package/src/cache/cf/cf-base64.ts +33 -0
  965. package/src/cache/cf/cf-cache-constants.ts +127 -0
  966. package/src/cache/cf/cf-cache-store.ts +2446 -170
  967. package/src/cache/cf/cf-cache-types.ts +349 -0
  968. package/src/cache/cf/cf-kv-utils.ts +46 -0
  969. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  970. package/src/cache/cf/index.ts +11 -17
  971. package/src/cache/document-cache.ts +144 -49
  972. package/src/cache/handle-snapshot.ts +70 -0
  973. package/src/cache/index.ts +24 -20
  974. package/src/cache/memory-segment-store.ts +243 -37
  975. package/src/cache/profile-registry.ts +46 -31
  976. package/src/cache/read-through-swr.ts +56 -12
  977. package/src/cache/segment-codec.ts +13 -21
  978. package/src/cache/shell-snapshot.ts +417 -0
  979. package/src/cache/tag-invalidation.ts +230 -0
  980. package/src/cache/taint.ts +55 -0
  981. package/src/cache/types.ts +194 -99
  982. package/src/cache/vercel/index.ts +11 -0
  983. package/src/cache/vercel/vercel-cache-store.ts +1132 -0
  984. package/src/client.rsc.tsx +42 -21
  985. package/src/client.tsx +117 -336
  986. package/src/cloudflare/index.ts +11 -0
  987. package/src/cloudflare/tracing.ts +108 -0
  988. package/src/component-utils.ts +19 -0
  989. package/src/components/DefaultDocument.tsx +8 -2
  990. package/src/context-var.ts +84 -2
  991. package/src/debug.ts +2 -2
  992. package/src/decode-loader-results.ts +52 -0
  993. package/src/defer.ts +185 -0
  994. package/src/deps/ssr.ts +0 -1
  995. package/src/encode-kv.ts +49 -0
  996. package/src/errors.ts +30 -4
  997. package/src/escape-script.ts +52 -0
  998. package/src/handle.ts +104 -34
  999. package/src/handles/MetaTags.tsx +24 -53
  1000. package/src/handles/Scripts.tsx +183 -0
  1001. package/src/handles/breadcrumbs.ts +93 -0
  1002. package/src/handles/deferred-resolution.ts +127 -0
  1003. package/src/handles/is-thenable.ts +18 -0
  1004. package/src/handles/meta.ts +14 -40
  1005. package/src/handles/script.ts +244 -0
  1006. package/src/host/cookie-handler.ts +9 -60
  1007. package/src/host/errors.ts +13 -22
  1008. package/src/host/index.ts +9 -5
  1009. package/src/host/pattern-matcher.ts +23 -52
  1010. package/src/host/router.ts +107 -99
  1011. package/src/host/testing.ts +40 -27
  1012. package/src/host/types.ts +37 -4
  1013. package/src/host/utils.ts +1 -1
  1014. package/src/href-client.ts +137 -22
  1015. package/src/index.rsc.ts +86 -30
  1016. package/src/index.ts +158 -68
  1017. package/src/internal-debug.ts +11 -10
  1018. package/src/loader-store.ts +500 -0
  1019. package/src/loader.rsc.ts +20 -13
  1020. package/src/loader.ts +12 -11
  1021. package/src/missing-id-error.ts +68 -0
  1022. package/src/outlet-context.ts +1 -1
  1023. package/src/outlet-provider.tsx +1 -5
  1024. package/src/prerender/param-hash.ts +16 -16
  1025. package/src/prerender/store.ts +63 -26
  1026. package/src/prerender.ts +215 -86
  1027. package/src/redirect-origin.ts +114 -0
  1028. package/src/regex-escape.ts +8 -0
  1029. package/src/render-error-thrower.tsx +20 -0
  1030. package/src/response-utils.ts +62 -0
  1031. package/src/reverse.ts +65 -15
  1032. package/src/root-error-boundary.tsx +1 -19
  1033. package/src/route-content-wrapper.tsx +19 -77
  1034. package/src/route-definition/dsl-helpers.ts +485 -303
  1035. package/src/route-definition/helper-factories.ts +28 -140
  1036. package/src/route-definition/helpers-types.ts +153 -77
  1037. package/src/route-definition/index.ts +4 -5
  1038. package/src/route-definition/redirect.ts +53 -12
  1039. package/src/route-definition/resolve-handler-use.ts +160 -0
  1040. package/src/route-definition/use-item-types.ts +29 -0
  1041. package/src/route-map-builder.ts +48 -21
  1042. package/src/route-types.ts +37 -46
  1043. package/src/router/basename.ts +14 -0
  1044. package/src/router/content-negotiation.ts +164 -17
  1045. package/src/router/error-handling.ts +45 -18
  1046. package/src/router/find-match.ts +130 -29
  1047. package/src/router/handler-context.ts +110 -39
  1048. package/src/router/instrument.ts +355 -0
  1049. package/src/router/intercept-resolution.ts +50 -24
  1050. package/src/router/lazy-includes.ts +89 -63
  1051. package/src/router/loader-resolution.ts +286 -56
  1052. package/src/router/logging.ts +5 -8
  1053. package/src/router/manifest.ts +105 -56
  1054. package/src/router/match-api.ts +179 -219
  1055. package/src/router/match-context.ts +0 -22
  1056. package/src/router/match-handlers.ts +211 -165
  1057. package/src/router/match-middleware/background-revalidation.ts +66 -22
  1058. package/src/router/match-middleware/cache-lookup.ts +214 -263
  1059. package/src/router/match-middleware/cache-store.ts +105 -50
  1060. package/src/router/match-middleware/intercept-resolution.ts +8 -28
  1061. package/src/router/match-middleware/segment-resolution.ts +52 -18
  1062. package/src/router/match-pipelines.ts +1 -42
  1063. package/src/router/match-result.ts +127 -52
  1064. package/src/router/metrics.ts +217 -26
  1065. package/src/router/middleware-types.ts +24 -110
  1066. package/src/router/middleware.ts +412 -199
  1067. package/src/router/navigation-snapshot.ts +133 -0
  1068. package/src/router/params-util.ts +23 -0
  1069. package/src/router/parse-pattern.ts +115 -0
  1070. package/src/router/pattern-matching.ts +183 -137
  1071. package/src/router/prefetch-cache-ttl.ts +51 -0
  1072. package/src/router/prefetch-limits.ts +37 -0
  1073. package/src/router/prerender-match.ts +207 -58
  1074. package/src/router/preview-match.ts +35 -103
  1075. package/src/router/request-classification.ts +291 -0
  1076. package/src/router/revalidation.ts +144 -74
  1077. package/src/router/route-snapshot.ts +256 -0
  1078. package/src/router/router-context.ts +11 -29
  1079. package/src/router/router-interfaces.ts +160 -36
  1080. package/src/router/router-options.ts +215 -23
  1081. package/src/router/router-registry.ts +2 -5
  1082. package/src/router/segment-resolution/fresh.ts +318 -77
  1083. package/src/router/segment-resolution/helpers.ts +116 -31
  1084. package/src/router/segment-resolution/loader-cache.ts +156 -39
  1085. package/src/router/segment-resolution/loader-mask.ts +67 -0
  1086. package/src/router/segment-resolution/loader-snapshot.ts +308 -0
  1087. package/src/router/segment-resolution/revalidation.ts +496 -391
  1088. package/src/router/segment-resolution/static-store.ts +19 -5
  1089. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1090. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1091. package/src/router/segment-resolution.ts +5 -1
  1092. package/src/router/segment-wrappers.ts +8 -5
  1093. package/src/router/state-cookie-name.ts +33 -0
  1094. package/src/router/substitute-pattern-params.ts +75 -0
  1095. package/src/router/telemetry-otel.ts +160 -200
  1096. package/src/router/telemetry.ts +105 -20
  1097. package/src/router/timeout.ts +0 -20
  1098. package/src/router/tracing.ts +215 -0
  1099. package/src/router/trie-matching.ts +188 -58
  1100. package/src/router/types.ts +10 -63
  1101. package/src/router/url-params.ts +57 -0
  1102. package/src/router.ts +224 -65
  1103. package/src/rsc/full-payload.ts +70 -0
  1104. package/src/rsc/handler-context.ts +3 -2
  1105. package/src/rsc/handler.ts +726 -457
  1106. package/src/rsc/helpers.ts +168 -46
  1107. package/src/rsc/index.ts +2 -25
  1108. package/src/rsc/json-route-result.ts +38 -0
  1109. package/src/rsc/loader-fetch.ts +127 -31
  1110. package/src/rsc/manifest-init.ts +33 -42
  1111. package/src/rsc/nonce.ts +10 -1
  1112. package/src/rsc/origin-guard.ts +39 -25
  1113. package/src/rsc/progressive-enhancement.ts +159 -23
  1114. package/src/rsc/redirect-guard.ts +100 -0
  1115. package/src/rsc/response-cache-serve.ts +238 -0
  1116. package/src/rsc/response-error.ts +79 -12
  1117. package/src/rsc/response-route-handler.ts +99 -189
  1118. package/src/rsc/rsc-rendering.ts +516 -104
  1119. package/src/rsc/runtime-warnings.ts +23 -10
  1120. package/src/rsc/server-action.ts +293 -115
  1121. package/src/rsc/shell-capture.ts +1166 -0
  1122. package/src/rsc/shell-serve.ts +181 -0
  1123. package/src/rsc/ssr-setup.ts +144 -0
  1124. package/src/rsc/transition-gate.ts +89 -0
  1125. package/src/rsc/types.ts +64 -6
  1126. package/src/runtime-env.ts +18 -0
  1127. package/src/search-params.ts +49 -41
  1128. package/src/segment-content-promise.ts +67 -0
  1129. package/src/segment-loader-promise.ts +167 -0
  1130. package/src/segment-system.tsx +418 -131
  1131. package/src/serialize.ts +243 -0
  1132. package/src/server/context.ts +375 -63
  1133. package/src/server/cookie-parse.ts +32 -0
  1134. package/src/server/cookie-store.ts +152 -5
  1135. package/src/server/handle-store.ts +40 -38
  1136. package/src/server/loader-registry.ts +38 -46
  1137. package/src/server/request-context.ts +585 -178
  1138. package/src/server.ts +6 -0
  1139. package/src/ssr/index.tsx +467 -174
  1140. package/src/ssr/inject-rsc-eager.ts +167 -0
  1141. package/src/ssr/ssr-root.tsx +228 -0
  1142. package/src/static-handler.ts +27 -18
  1143. package/src/testing/cache-status.ts +162 -0
  1144. package/src/testing/collect-handle.ts +46 -0
  1145. package/src/testing/dispatch.ts +813 -0
  1146. package/src/testing/dom.entry.ts +22 -0
  1147. package/src/testing/e2e/fixture.ts +188 -0
  1148. package/src/testing/e2e/index.ts +128 -0
  1149. package/src/testing/e2e/matchers.ts +35 -0
  1150. package/src/testing/e2e/page-helpers.ts +272 -0
  1151. package/src/testing/e2e/parity.ts +387 -0
  1152. package/src/testing/e2e/server.ts +195 -0
  1153. package/src/testing/flight-matchers.ts +97 -0
  1154. package/src/testing/flight-normalize.ts +11 -0
  1155. package/src/testing/flight-runtime.d.ts +57 -0
  1156. package/src/testing/flight-tree.ts +682 -0
  1157. package/src/testing/flight.entry.ts +52 -0
  1158. package/src/testing/flight.ts +257 -0
  1159. package/src/testing/generated-routes.ts +199 -0
  1160. package/src/testing/index.ts +105 -0
  1161. package/src/testing/internal/context.ts +371 -0
  1162. package/src/testing/internal/flight-client-globals.ts +30 -0
  1163. package/src/testing/internal/seed-vars.ts +54 -0
  1164. package/src/testing/render-handler.ts +357 -0
  1165. package/src/testing/render-route.tsx +584 -0
  1166. package/src/testing/run-loader.ts +385 -0
  1167. package/src/testing/run-middleware.ts +205 -0
  1168. package/src/testing/run-transition-when.ts +164 -0
  1169. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1170. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1171. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1172. package/src/testing/vitest-stubs/version.ts +5 -0
  1173. package/src/testing/vitest.ts +305 -0
  1174. package/src/theme/ThemeProvider.tsx +56 -84
  1175. package/src/theme/ThemeScript.tsx +7 -9
  1176. package/src/theme/constants.ts +52 -13
  1177. package/src/theme/index.ts +3 -19
  1178. package/src/theme/theme-context.ts +1 -5
  1179. package/src/theme/theme-script.ts +22 -21
  1180. package/src/theme/use-theme.ts +0 -3
  1181. package/src/types/boundaries.ts +0 -35
  1182. package/src/types/cache-types.ts +17 -8
  1183. package/src/types/error-types.ts +30 -90
  1184. package/src/types/global-namespace.ts +54 -41
  1185. package/src/types/handler-context.ts +237 -89
  1186. package/src/types/index.ts +3 -10
  1187. package/src/types/loader-types.ts +44 -15
  1188. package/src/types/request-scope.ts +112 -0
  1189. package/src/types/route-config.ts +23 -46
  1190. package/src/types/route-entry.ts +19 -7
  1191. package/src/types/segments.ts +137 -19
  1192. package/src/urls/include-helper.ts +40 -75
  1193. package/src/urls/include-provider.ts +71 -0
  1194. package/src/urls/index.ts +2 -11
  1195. package/src/urls/path-helper-types.ts +102 -23
  1196. package/src/urls/path-helper.ts +62 -111
  1197. package/src/urls/pattern-types.ts +84 -19
  1198. package/src/urls/response-types.ts +25 -22
  1199. package/src/urls/type-extraction.ts +98 -154
  1200. package/src/urls/urls-function.ts +1 -19
  1201. package/src/use-loader.tsx +346 -89
  1202. package/src/vercel/index.ts +11 -0
  1203. package/src/vercel/tracing.ts +88 -0
  1204. package/src/vite/debug.ts +185 -0
  1205. package/src/vite/discovery/bundle-postprocess.ts +64 -91
  1206. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1207. package/src/vite/discovery/discover-routers.ts +147 -88
  1208. package/src/vite/discovery/discovery-errors.ts +255 -0
  1209. package/src/vite/discovery/gate-state.ts +171 -0
  1210. package/src/vite/discovery/prerender-collection.ts +247 -145
  1211. package/src/vite/discovery/route-types-writer.ts +40 -84
  1212. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1213. package/src/vite/discovery/state.ts +61 -13
  1214. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1215. package/src/vite/index.ts +19 -3
  1216. package/src/vite/inject-client-debug.ts +88 -0
  1217. package/src/vite/plugin-types.ts +234 -62
  1218. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1219. package/src/vite/plugins/client-ref-dedup.ts +120 -0
  1220. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1221. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1222. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1223. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1224. package/src/vite/plugins/expose-action-id.ts +49 -98
  1225. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1226. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1227. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1228. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1229. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1230. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1231. package/src/vite/plugins/performance-tracks.ts +89 -0
  1232. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1233. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1234. package/src/vite/plugins/vercel-output.ts +384 -0
  1235. package/src/vite/plugins/version-injector.ts +40 -29
  1236. package/src/vite/plugins/version-plugin.ts +46 -37
  1237. package/src/vite/plugins/virtual-entries.ts +138 -27
  1238. package/src/vite/rango.ts +356 -295
  1239. package/src/vite/router-discovery.ts +1106 -166
  1240. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1241. package/src/vite/utils/banner.ts +4 -4
  1242. package/src/vite/utils/bundle-analysis.ts +10 -15
  1243. package/src/vite/utils/client-chunks.ts +184 -0
  1244. package/src/vite/utils/directive-prologue.ts +40 -0
  1245. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1246. package/src/vite/utils/manifest-utils.ts +4 -59
  1247. package/src/vite/utils/package-resolution.ts +20 -52
  1248. package/src/vite/utils/prerender-utils.ts +158 -38
  1249. package/src/vite/utils/shared-utils.ts +144 -44
  1250. package/CLAUDE.md +0 -5
  1251. package/src/browser/action-response-classifier.ts +0 -99
  1252. package/src/browser/shallow.ts +0 -40
  1253. package/src/route-definition/route-function.ts +0 -119
  1254. package/src/router/middleware-cookies.ts +0 -55
@@ -14,11 +14,38 @@ const addTransitionType: ((type: string) => void) | undefined =
14
14
  import type { RenderSegmentsOptions } from "../segment-system.js";
15
15
  import { reconcileSegments } from "./segment-reconciler.js";
16
16
  import type { ReconcileActor } from "./segment-reconciler.js";
17
- import { hasActiveIntercept as hasActiveInterceptSlots } from "./intercept-utils.js";
17
+ import {
18
+ hasActiveIntercept as hasActiveInterceptSlots,
19
+ isInterceptSegment,
20
+ } from "./intercept-utils.js";
18
21
  import type { BoundTransaction } from "./navigation-transaction.js";
19
22
  import { ServerRedirect } from "../errors.js";
20
- import { debugLog } from "./logging.js";
21
- import { validateRedirectOrigin } from "./validate-redirect-origin.js";
23
+ import {
24
+ debugLog,
25
+ isBrowserDebugEnabled,
26
+ IS_BROWSER_DEBUG,
27
+ } from "./logging.js";
28
+ import {
29
+ validateRedirectOrigin,
30
+ validateExternalRedirect,
31
+ } from "./validate-redirect-origin.js";
32
+ import type { NavigationUpdate } from "./types.js";
33
+
34
+ function toScrollPayload(
35
+ scroll: boolean | undefined,
36
+ ): NonNullable<NavigationUpdate["scroll"]> {
37
+ return { enabled: scroll !== false ? scroll : false };
38
+ }
39
+
40
+ function shouldStartViewTransition(segments: ResolvedSegment[]): boolean {
41
+ let hasIntercept = false;
42
+ let hasTransition = false;
43
+ for (const s of segments) {
44
+ if (isInterceptSegment(s)) hasIntercept = true;
45
+ else if (s.transition) hasTransition = true;
46
+ }
47
+ return !hasIntercept && hasTransition;
48
+ }
22
49
 
23
50
  /**
24
51
  * Configuration for creating a partial updater
@@ -31,8 +58,8 @@ export interface PartialUpdateConfig {
31
58
  segments: ResolvedSegment[],
32
59
  options?: RenderSegmentsOptions,
33
60
  ) => Promise<ReactNode> | ReactNode;
34
- /** RSC version received from server (from initial payload metadata) */
35
- version?: string;
61
+ /** RSC version getter — returns the current version (may change after HMR) */
62
+ getVersion?: () => string | undefined;
36
63
  }
37
64
 
38
65
  /**
@@ -68,7 +95,7 @@ export type UpdateMode =
68
95
  /** Source URL for intercept restore (popstate cache miss) */
69
96
  interceptSourceUrl?: string;
70
97
  }
71
- | { type: "leave-intercept" }
98
+ | { type: "leave-intercept"; interceptSourceUrl?: string }
72
99
  | { type: "stale-revalidation"; interceptSourceUrl?: string }
73
100
  | { type: "action"; interceptSourceUrl?: string };
74
101
 
@@ -84,35 +111,23 @@ export type PartialUpdater = (
84
111
  mode?: UpdateMode,
85
112
  ) => Promise<void>;
86
113
 
87
- /**
88
- * Create a partial updater for fetching and applying RSC partial updates
89
- *
90
- * This function is shared between navigation-bridge and server-action-bridge
91
- * to handle partial RSC updates with HMR resilience.
92
- *
93
- * @param config - Partial update configuration
94
- * @returns fetchPartialUpdate function
95
- */
96
114
  export function createPartialUpdater(
97
115
  config: PartialUpdateConfig,
98
116
  ): PartialUpdater {
99
- const { store, client, onUpdate, renderSegments, version } = config;
117
+ const {
118
+ store,
119
+ client,
120
+ onUpdate,
121
+ renderSegments,
122
+ getVersion = () => undefined,
123
+ } = config;
100
124
 
101
- /**
102
- * Get current page's cached segments as an array
103
- */
104
125
  function getCurrentCachedSegments(): ResolvedSegment[] {
105
126
  const currentKey = store.getHistoryKey();
106
127
  const cached = store.getCachedSegments(currentKey);
107
128
  return cached?.segments || [];
108
129
  }
109
130
 
110
- /**
111
- * Fetch partial update and trigger UI update
112
- *
113
- * @param tx - Transaction for committing segment state (required)
114
- * @param signal - AbortSignal to check if navigation is stale (not for aborting fetch)
115
- */
116
131
  async function fetchPartialUpdate(
117
132
  targetUrl: string,
118
133
  segmentIds: string[] | undefined,
@@ -124,86 +139,114 @@ export function createPartialUpdater(
124
139
  const segmentState = store.getSegmentState();
125
140
  const url = targetUrl || window.location.href;
126
141
 
127
- // Capture history key at start for stale revalidation consistency check
128
142
  const historyKeyAtStart = store.getHistoryKey();
129
143
 
130
- // Derive interceptSourceUrl from modes that carry it
131
- const interceptSourceUrl =
132
- mode.type === "stale-revalidation" ||
133
- mode.type === "action" ||
134
- mode.type === "navigate"
135
- ? mode.interceptSourceUrl
136
- : undefined;
144
+ const interceptSourceUrl = mode.interceptSourceUrl;
137
145
 
138
- // When leaving intercept, filter out intercept-specific segments
139
146
  let segments: string[];
140
147
  if (mode.type === "leave-intercept") {
141
148
  const currentSegments = segmentIds ?? segmentState.currentSegmentIds;
142
149
  const currentCached = getCurrentCachedSegments();
143
150
  const interceptIds = new Set(
144
- currentCached
145
- .filter((s) => s.namespace?.startsWith("intercept:"))
146
- .map((s) => s.id),
151
+ currentCached.filter(isInterceptSegment).map((s) => s.id),
147
152
  );
148
153
  segments = currentSegments.filter((id) => !interceptIds.has(id));
149
- debugLog(
150
- `[Browser] Leaving intercept - filtered segments: ${segments.join(", ")}`,
151
- );
154
+ if (IS_BROWSER_DEBUG) {
155
+ debugLog(
156
+ `[Browser] Leaving intercept - filtered segments: ${segments.join(", ")}`,
157
+ );
158
+ }
152
159
  } else {
153
160
  segments = segmentIds ?? segmentState.currentSegmentIds;
154
161
  }
155
162
 
156
- // For intercept revalidation, use the intercept source URL as previousUrl
157
163
  const previousUrl =
158
- interceptSourceUrl || tx.currentUrl || segmentState.currentUrl;
159
-
160
- debugLog(`\n[Browser] >>> NAVIGATION`);
161
- debugLog(`[Browser] From: ${previousUrl}`);
162
- debugLog(`[Browser] To: ${url}`);
163
- debugLog(`[Browser] Segments to send: ${segments.join(", ")}`);
164
- if (interceptSourceUrl) {
165
- debugLog(`[Browser] Intercept context from: ${interceptSourceUrl}`);
164
+ mode.type === "leave-intercept"
165
+ ? segmentState.currentUrl || tx.currentUrl
166
+ : interceptSourceUrl || tx.currentUrl || segmentState.currentUrl;
167
+
168
+ if (IS_BROWSER_DEBUG) {
169
+ debugLog(`\n[Browser] >>> NAVIGATION`);
170
+ debugLog(`[Browser] From: ${previousUrl}`);
171
+ debugLog(`[Browser] To: ${url}`);
172
+ debugLog(`[Browser] Segments to send: ${segments.join(", ")}`);
173
+ if (interceptSourceUrl) {
174
+ debugLog(`[Browser] Intercept context from: ${interceptSourceUrl}`);
175
+ }
166
176
  }
167
177
 
168
- // Get cached segments for merging with server diff.
169
- // When navigating with targetCacheSegments, use those for consistency.
170
- // Otherwise fall back to current page's segments (for same-route revalidation).
171
178
  const targetCache =
172
- mode.type === "navigate" ? mode.targetCacheSegments : undefined;
173
- const cachedSegs =
174
- targetCache && targetCache.length > 0
175
- ? targetCache
176
- : getCurrentCachedSegments();
179
+ mode.type === "navigate" && mode.targetCacheSegments?.length
180
+ ? mode.targetCacheSegments
181
+ : undefined;
182
+ const cachedSegs = targetCache ?? getCurrentCachedSegments();
183
+ const cachedSegsSource = targetCache ? "history-cache" : "current-page";
184
+ if (IS_BROWSER_DEBUG) {
185
+ debugLog(
186
+ `[Browser] cachedSegs source: ${cachedSegsSource} (${cachedSegs.length} segments: ${cachedSegs.map((s) => s.id).join(", ")})`,
187
+ );
188
+ }
177
189
 
178
- // Fetch partial payload (no abort signal - RSC doesn't support it well)
179
190
  let fetchResult: Awaited<ReturnType<NavigationClient["fetchPartial"]>>;
180
191
  fetchResult = await client.fetchPartial({
181
192
  targetUrl: url,
182
193
  segmentIds: segments,
183
194
  previousUrl,
184
- // Mark stale when explicitly requested OR when no segments are sent
185
- // (action redirect sends empty segments for a fresh render).
186
195
  staleRevalidation:
187
196
  mode.type === "stale-revalidation" || segments.length === 0,
188
- version,
197
+ version: getVersion(),
198
+ routerId: store.getRouterId?.(),
189
199
  });
190
- // Mark navigation as streaming (response received, now parsing RSC).
191
- // Called after fetchPartial so pendingUrl stays set during the network wait,
192
- // allowing useLinkStatus to show per-link pending indicators.
193
200
  const streamingToken = tx.startStreaming();
194
- const { payload, streamComplete: rawStreamComplete } = fetchResult;
201
+ const {
202
+ payload,
203
+ streamComplete: rawStreamComplete,
204
+ fullyPrefetched,
205
+ } = fetchResult;
195
206
  debugLog("payload.metadata", payload.metadata);
196
207
 
197
- const streamComplete = rawStreamComplete.then(() => {
198
- streamingToken.end();
199
- });
208
+ // Side effect only: end the streaming token once the stream settles.
209
+ // The wrapped promise was never read as a value; only the .end() matters.
210
+ // The .catch keeps an unhandled rejection from leaking if the stream errors.
211
+ rawStreamComplete.then(() => streamingToken.end()).catch(() => {});
212
+
213
+ const currentRouterId = store.getRouterId?.();
214
+ if (
215
+ payload.metadata?.routerId &&
216
+ currentRouterId &&
217
+ payload.metadata.routerId !== currentRouterId
218
+ ) {
219
+ console.error(
220
+ `[rango] Partial response router id "${payload.metadata.routerId}" does not ` +
221
+ `match this client ("${currentRouterId}"); discarding it and reloading to re-sync.`,
222
+ );
223
+ window.location.href = url;
224
+ return;
225
+ }
200
226
 
201
- // Handle server-side redirect with state
202
227
  if (payload.metadata?.redirect) {
203
228
  if (signal?.aborted) {
204
229
  debugLog("[Browser] Ignoring stale redirect (aborted)");
205
230
  return;
206
231
  }
232
+ // Explicit off-host redirect (redirect(url, { external: true })):
233
+ // hard-navigate, but still scheme-validate (http/https only). external
234
+ // waives the same-origin check the app opted out of, NOT scheme safety, so
235
+ // a forged payload carrying a javascript:/data: URL cannot script via
236
+ // location.assign.
237
+ if (payload.metadata.redirect.external) {
238
+ const externalUrl = validateExternalRedirect(
239
+ payload.metadata.redirect.url,
240
+ window.location.origin,
241
+ );
242
+ if (!externalUrl) {
243
+ debugLog("[Browser] Ignoring blocked external redirect payload");
244
+ return;
245
+ }
246
+ debugLog("[Browser] External redirect (hard navigation)");
247
+ window.location.assign(externalUrl);
248
+ return;
249
+ }
207
250
  const redirectUrl = validateRedirectOrigin(
208
251
  payload.metadata.redirect.url,
209
252
  window.location.origin,
@@ -225,10 +268,11 @@ export function createPartialUpdater(
225
268
  return;
226
269
  }
227
270
 
228
- debugLog(`[Browser] Partial update - matched: ${matched?.join(", ")}`);
229
- debugLog(`[Browser] Diff: ${diff?.join(", ")}`);
271
+ if (IS_BROWSER_DEBUG) {
272
+ debugLog(`[Browser] Partial update - matched: ${matched?.join(", ")}`);
273
+ debugLog(`[Browser] Diff: ${diff?.join(", ")}`);
274
+ }
230
275
 
231
- // If diff is empty, nothing changed on server side.
232
276
  if (!diff || diff.length === 0) {
233
277
  const matchedIds = matched || [];
234
278
  const cacheMap = new Map(cachedSegs.map((s) => [s.id, s]));
@@ -236,8 +280,7 @@ export function createPartialUpdater(
236
280
  .map((id: string) => cacheMap.get(id))
237
281
  .filter(Boolean) as ResolvedSegment[];
238
282
 
239
- // When navigating with cached segments to a different route, render them.
240
- if (mode.type === "navigate" && targetCache && targetCache.length > 0) {
283
+ if (mode.type === "navigate" && targetCache) {
241
284
  debugLog(
242
285
  "[Browser] No diff but navigating with cached segments - rendering target route",
243
286
  );
@@ -246,12 +289,18 @@ export function createPartialUpdater(
246
289
  forceAwait: true,
247
290
  });
248
291
 
249
- tx.commit(matchedIds, existingSegments);
292
+ const { scroll: commitScroll } = tx.commit(
293
+ matchedIds,
294
+ existingSegments,
295
+ );
296
+
297
+ if (mode.targetCacheHandleData) {
298
+ store.updateCacheHandleData(
299
+ store.getHistoryKey(),
300
+ mode.targetCacheHandleData,
301
+ );
302
+ }
250
303
 
251
- // Include cachedHandleData in metadata so NavigationProvider can restore
252
- // breadcrumbs and other handle data from cache.
253
- // Remove `handles` from metadata to prevent NavigationProvider from
254
- // processing an empty handles stream, which would clear the cached breadcrumbs.
255
304
  const { handles: _unusedHandles, ...metadataWithoutHandles } =
256
305
  payload.metadata!;
257
306
  const cachedUpdate = {
@@ -260,12 +309,10 @@ export function createPartialUpdater(
260
309
  ...metadataWithoutHandles,
261
310
  cachedHandleData: mode.targetCacheHandleData,
262
311
  },
312
+ scroll: toScrollPayload(commitScroll),
263
313
  };
264
314
 
265
- const cachedHasTransition = existingSegments.some(
266
- (s) => s.transition,
267
- );
268
- if (cachedHasTransition) {
315
+ if (shouldStartViewTransition(existingSegments)) {
269
316
  startTransition(() => {
270
317
  if (addTransitionType) {
271
318
  addTransitionType("navigation");
@@ -280,7 +327,6 @@ export function createPartialUpdater(
280
327
  return;
281
328
  }
282
329
 
283
- // When leaving intercept, force re-render even with empty diff
284
330
  if (mode.type === "leave-intercept") {
285
331
  debugLog(
286
332
  "[Browser] Leaving intercept - forcing re-render to remove modal",
@@ -290,18 +336,21 @@ export function createPartialUpdater(
290
336
  forceAwait: true,
291
337
  });
292
338
 
293
- tx.commit(matchedIds, existingSegments);
339
+ const { scroll: leaveScroll } = tx.commit(
340
+ matchedIds,
341
+ existingSegments,
342
+ );
294
343
 
295
344
  onUpdate({
296
345
  root: newTree,
297
346
  metadata: payload.metadata,
347
+ scroll: toScrollPayload(leaveScroll),
298
348
  });
299
349
 
300
350
  debugLog("[Browser] Navigation complete (left intercept)");
301
351
  return;
302
352
  }
303
353
 
304
- // Same route revalidation with no changes - skip UI update
305
354
  debugLog(
306
355
  "[Browser] No changes - all revalidations returned false, keeping existing UI",
307
356
  );
@@ -310,7 +359,6 @@ export function createPartialUpdater(
310
359
  return;
311
360
  }
312
361
 
313
- // Reconcile server segments with cached segments (single source of truth)
314
362
  const matchedIds = matched || [];
315
363
  const actor: ReconcileActor =
316
364
  mode.type === "stale-revalidation" || mode.type === "action"
@@ -326,7 +374,6 @@ export function createPartialUpdater(
326
374
  insertMissingDiff: true,
327
375
  });
328
376
 
329
- // HMR RESILIENCE: Check if we're missing any matched segments
330
377
  const reconciledIdSet = new Set(reconciled.segments.map((s) => s.id));
331
378
  const missingIds = matchedIds.filter(
332
379
  (id: string) => !reconciledIdSet.has(id),
@@ -348,13 +395,19 @@ export function createPartialUpdater(
348
395
  return;
349
396
  }
350
397
  if (mode.type === "action") {
398
+ // An action refetch that lands on missing segments (navigated away /
399
+ // consolidation / HMR) drops rather than refetch-all: the action flow
400
+ // is storeOnly / skipLoadingState, so a full refetch here would fight
401
+ // it. Keep the stale-but-consistent tree; log so the drop is visible.
402
+ debugLog(
403
+ `[Browser] Action refetch: ${missingCount} segments missing; dropping (stale-but-consistent tree kept).`,
404
+ );
351
405
  return;
352
406
  }
353
407
  console.warn(
354
408
  `[Browser] HMR detected: Missing ${missingCount} segments. Refetching all...`,
355
409
  );
356
410
 
357
- // Refetch with empty segments = server sends everything
358
411
  return fetchPartialUpdate(url, [], true, signal, tx, mode);
359
412
  }
360
413
 
@@ -363,44 +416,59 @@ export function createPartialUpdater(
363
416
  return;
364
417
  }
365
418
 
366
- // Rebuild tree on client (await for loader data resolution)
367
419
  const renderOptions = {
368
420
  isAction: mode.type === "action",
369
- forceAwait: mode.type === "stale-revalidation",
421
+ // forceAwait unwraps the ROUTER loader promises during render so they
422
+ // land without a loading()/fallback frame. A fully-prefetched nav has
423
+ // its router data already resolved (the prefetch stream drained), so
424
+ // awaiting it here is free and lets us commit NORMALLY (not in a
425
+ // transition) below — a normal commit still shows fallbacks for any
426
+ // CLIENT component that suspends on mount, which a transition would
427
+ // wrongly suppress by holding the old UI until that suspense settles.
428
+ forceAwait: mode.type === "stale-revalidation" || fullyPrefetched,
370
429
  interceptSegments:
371
430
  reconciled.interceptSegments.length > 0
372
431
  ? reconciled.interceptSegments
373
432
  : undefined,
374
433
  };
375
- const newTree = await (signal
376
- ? Promise.race([
434
+ let newTree: Awaited<ReturnType<typeof renderSegments>>;
435
+ if (signal) {
436
+ // Race render against abort. Store the abort handler and register it
437
+ // { once:true } so a non-aborted render (which wins the race) can
438
+ // remove it in finally — otherwise the listener stays attached and the
439
+ // rejecting promise never settles. Mirrors teeWithCompletion in
440
+ // browser/response-adapter.ts.
441
+ let onAbort: (() => void) | undefined;
442
+ const abortPromise = new Promise<never>((_, reject) => {
443
+ if (signal.aborted) {
444
+ reject(new DOMException("Navigation aborted", "AbortError"));
445
+ return;
446
+ }
447
+ onAbort = () =>
448
+ reject(new DOMException("Navigation aborted", "AbortError"));
449
+ signal.addEventListener("abort", onAbort, { once: true });
450
+ });
451
+ try {
452
+ newTree = await Promise.race([
377
453
  renderSegments(reconciled.mainSegments, renderOptions),
378
- new Promise<never>((_, reject) => {
379
- if (signal.aborted) {
380
- reject(new DOMException("Navigation aborted", "AbortError"));
381
- }
382
- signal.addEventListener("abort", () => {
383
- reject(new DOMException("Navigation aborted", "AbortError"));
384
- });
385
- }),
386
- ])
387
- : renderSegments(reconciled.mainSegments, renderOptions));
388
-
389
- // Final abort check before committing - another navigation may have started
454
+ abortPromise,
455
+ ]);
456
+ } finally {
457
+ if (onAbort) signal.removeEventListener("abort", onAbort);
458
+ }
459
+ } else {
460
+ newTree = await renderSegments(reconciled.mainSegments, renderOptions);
461
+ }
462
+
390
463
  if (signal?.aborted) {
391
464
  debugLog("[Browser] Ignoring stale navigation (aborted before commit)");
392
465
  return;
393
466
  }
394
467
 
395
- // Check if this is an intercept response (any slot is active)
396
468
  const isInterceptResponse = hasActiveInterceptSlots(
397
469
  payload.metadata?.slots,
398
470
  );
399
471
 
400
- // Track intercept context (only on navigation, not actions or stale revalidation)
401
- // Use the authoritative source from mode/history state when restoring an
402
- // intercept via popstate cache miss; fall back to the current URL for fresh
403
- // intercept navigations.
404
472
  const effectiveInterceptSource =
405
473
  interceptSourceUrl || segmentState.currentUrl;
406
474
  if (mode.type !== "action" && mode.type !== "stale-revalidation") {
@@ -411,8 +479,7 @@ export function createPartialUpdater(
411
479
  }
412
480
  }
413
481
 
414
- // Commit navigation - transaction handles all store mutations atomically
415
- const allSegmentIds = reconciled.segments.map((s) => s.id);
482
+ const allSegmentIds = matchedIds;
416
483
  const serverLocationState = payload.metadata?.locationState;
417
484
  const overrides: CommitOverrides | undefined = isInterceptResponse
418
485
  ? {
@@ -424,9 +491,12 @@ export function createPartialUpdater(
424
491
  : serverLocationState
425
492
  ? { serverState: serverLocationState }
426
493
  : undefined;
427
- tx.commit(allSegmentIds, reconciled.segments, overrides);
494
+ const { scroll: navScroll } = tx.commit(
495
+ allSegmentIds,
496
+ reconciled.segments,
497
+ overrides,
498
+ );
428
499
 
429
- // For stale revalidation: verify history key hasn't changed before updating UI
430
500
  if (mode.type === "stale-revalidation") {
431
501
  const historyKeyNow = store.getHistoryKey();
432
502
  if (historyKeyNow !== historyKeyAtStart) {
@@ -439,8 +509,23 @@ export function createPartialUpdater(
439
509
 
440
510
  debugLog("[partial-update] updating document");
441
511
 
442
- // Emit update to trigger React render
443
- const hasTransition = reconciled.mainSegments.some((s) => s.transition);
512
+ const hasTransition = shouldStartViewTransition(reconciled.segments);
513
+ // [VT-DIAG] Gated behind INTERNAL_RANGO_DEBUG. Reports which reconciled
514
+ // segment still carries a transition after the server-side when-gate, and
515
+ // whether the commit will be held in a startTransition. If `withTransition`
516
+ // lists an ancestor (layout/root) id rather than the gated leaf, an ungated
517
+ // ancestor transition is holding the subtree (missing loading() fallback).
518
+ if (isBrowserDebugEnabled()) {
519
+ debugLog("[VT-DIAG] commit", {
520
+ mode: mode.type,
521
+ hasTransition,
522
+ withTransition: reconciled.segments
523
+ .filter((s) => s.transition)
524
+ .map((s) => s.id),
525
+ all: reconciled.segments.map((s) => s.id),
526
+ });
527
+ }
528
+ const scrollPayload = toScrollPayload(navScroll);
444
529
 
445
530
  if (mode.type === "action" || mode.type === "stale-revalidation") {
446
531
  startTransition(() => {
@@ -450,6 +535,7 @@ export function createPartialUpdater(
450
535
  onUpdate({
451
536
  root: newTree,
452
537
  metadata: payload.metadata!,
538
+ scroll: scrollPayload,
453
539
  });
454
540
  });
455
541
  } else if (hasTransition) {
@@ -460,19 +546,34 @@ export function createPartialUpdater(
460
546
  onUpdate({
461
547
  root: newTree,
462
548
  metadata: payload.metadata!,
549
+ scroll: scrollPayload,
463
550
  });
464
551
  });
465
552
  } else {
553
+ // Normal commit (cold/partial nav AND fully-prefetched nav). For a
554
+ // fully-prefetched nav, renderOptions.forceAwait (above) unwrapped the
555
+ // already-resolved ROUTER loader data AND route content during render, so
556
+ // the new tree carries it inline with no loading()/fallback frame — yet we
557
+ // still commit NORMALLY here rather than in a transition. A transition
558
+ // holds the OLD UI until ALL suspense in the new tree settles, including a
559
+ // CLIENT component that starts its own data request only when mounted
560
+ // (post-commit) under a persistent boundary; that would retain the
561
+ // previous page indefinitely with no feedback. A normal commit lets such
562
+ // client-initiated suspense reveal a fallback (correct) while the router
563
+ // data — genuinely ready — never flashes. Cold/partial navs
564
+ // (fullyPrefetched=false) do not forceAwait, so they stream their
565
+ // fallbacks. Explicit transition() routes keep the broader content-hold
566
+ // via the hasTransition branch above (the documented opt-in).
466
567
  onUpdate({
467
568
  root: newTree,
468
569
  metadata: payload.metadata!,
570
+ scroll: scrollPayload,
469
571
  });
470
572
  }
471
573
 
472
574
  debugLog("[Browser] Navigation complete");
473
575
  return;
474
576
  } else {
475
- // Full update (fallback)
476
577
  console.warn(`[Browser] Full update (fallback)`);
477
578
 
478
579
  const segments = payload.metadata?.segments || [];
@@ -492,18 +593,29 @@ export function createPartialUpdater(
492
593
  }
493
594
 
494
595
  const fullUpdateServerState = payload.metadata?.locationState;
495
- if (fullUpdateServerState) {
496
- tx.commit(segmentIds, segments, { serverState: fullUpdateServerState });
497
- } else {
498
- tx.commit(segmentIds, segments);
499
- }
596
+ const { scroll: fullScroll } = fullUpdateServerState
597
+ ? tx.commit(segmentIds, segments, {
598
+ serverState: fullUpdateServerState,
599
+ })
600
+ : tx.commit(segmentIds, segments);
500
601
 
501
- const fullHasTransition = segments.some(
502
- (s: ResolvedSegment) => s.transition,
503
- );
602
+ const fullHasTransition = shouldStartViewTransition(segments);
603
+ const fullScrollPayload = toScrollPayload(fullScroll);
504
604
 
505
605
  if (mode.type === "stale-revalidation") {
506
606
  await rawStreamComplete;
607
+ // Mirror the partial branch's history-key staleness guard (above): the
608
+ // await above is a real async suspension, so the user may have navigated
609
+ // away while this background revalidation was draining. Dropping a late
610
+ // full-update here prevents it from clobbering the freshly committed UI
611
+ // of the page the user moved to.
612
+ const historyKeyNow = store.getHistoryKey();
613
+ if (historyKeyNow !== historyKeyAtStart) {
614
+ debugLog(
615
+ `[Browser] Stale revalidation (full update): history key changed (${historyKeyAtStart} -> ${historyKeyNow}), skipping UI update`,
616
+ );
617
+ return;
618
+ }
507
619
  startTransition(() => {
508
620
  if (fullHasTransition && addTransitionType) {
509
621
  addTransitionType("action");
@@ -511,16 +623,18 @@ export function createPartialUpdater(
511
623
  onUpdate({
512
624
  root: newTree,
513
625
  metadata: payload.metadata!,
626
+ scroll: fullScrollPayload,
514
627
  });
515
628
  });
516
629
  } else if (mode.type === "action") {
517
- startTransition(async () => {
630
+ startTransition(() => {
518
631
  if (fullHasTransition && addTransitionType) {
519
632
  addTransitionType("action");
520
633
  }
521
634
  onUpdate({
522
635
  root: newTree,
523
636
  metadata: payload.metadata!,
637
+ scroll: fullScrollPayload,
524
638
  });
525
639
  });
526
640
  } else if (fullHasTransition) {
@@ -531,12 +645,14 @@ export function createPartialUpdater(
531
645
  onUpdate({
532
646
  root: newTree,
533
647
  metadata: payload.metadata!,
648
+ scroll: fullScrollPayload,
534
649
  });
535
650
  });
536
651
  } else {
537
652
  onUpdate({
538
653
  root: newTree,
539
654
  metadata: payload.metadata!,
655
+ scroll: fullScrollPayload,
540
656
  });
541
657
  }
542
658