@rangojs/router 0.0.0-experimental.4 → 0.0.0-experimental.40

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 (1104) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +884 -4
  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 +1601 -0
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/dist/browser/react/use-client-cache.js +39 -0
  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/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  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/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +4544 -685
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +16 -18
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +77 -58
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +262 -0
  811. package/skills/caching/SKILL.md +50 -21
  812. package/skills/composability/SKILL.md +172 -0
  813. package/skills/debug-manifest/SKILL.md +12 -8
  814. package/skills/document-cache/SKILL.md +18 -16
  815. package/skills/fonts/SKILL.md +167 -0
  816. package/skills/hooks/SKILL.md +334 -72
  817. package/skills/host-router/SKILL.md +218 -0
  818. package/skills/intercept/SKILL.md +131 -8
  819. package/skills/layout/SKILL.md +100 -3
  820. package/skills/links/SKILL.md +89 -30
  821. package/skills/loader/SKILL.md +388 -38
  822. package/skills/middleware/SKILL.md +171 -34
  823. package/skills/mime-routes/SKILL.md +128 -0
  824. package/skills/parallel/SKILL.md +78 -1
  825. package/skills/prerender/SKILL.md +643 -0
  826. package/skills/rango/SKILL.md +85 -16
  827. package/skills/response-routes/SKILL.md +411 -0
  828. package/skills/route/SKILL.md +226 -14
  829. package/skills/router-setup/SKILL.md +153 -29
  830. package/skills/tailwind/SKILL.md +129 -0
  831. package/skills/theme/SKILL.md +9 -8
  832. package/skills/typesafety/SKILL.md +318 -89
  833. package/skills/use-cache/SKILL.md +324 -0
  834. package/src/__internal.ts +102 -4
  835. package/src/bin/rango.ts +321 -0
  836. package/src/browser/action-coordinator.ts +97 -0
  837. package/src/browser/action-response-classifier.ts +99 -0
  838. package/src/browser/event-controller.ts +87 -64
  839. package/src/browser/history-state.ts +80 -0
  840. package/src/browser/intercept-utils.ts +52 -0
  841. package/src/browser/link-interceptor.ts +24 -4
  842. package/src/browser/logging.ts +55 -0
  843. package/src/browser/merge-segment-loaders.ts +20 -12
  844. package/src/browser/navigation-bridge.ts +281 -554
  845. package/src/browser/navigation-client.ts +124 -71
  846. package/src/browser/navigation-store.ts +33 -50
  847. package/src/browser/navigation-transaction.ts +295 -0
  848. package/src/browser/network-error-handler.ts +61 -0
  849. package/src/browser/partial-update.ts +261 -309
  850. package/src/browser/prefetch/cache.ts +154 -0
  851. package/src/browser/prefetch/fetch.ts +135 -0
  852. package/src/browser/prefetch/observer.ts +65 -0
  853. package/src/browser/prefetch/policy.ts +48 -0
  854. package/src/browser/prefetch/queue.ts +88 -0
  855. package/src/browser/rango-state.ts +112 -0
  856. package/src/browser/react/Link.tsx +185 -73
  857. package/src/browser/react/NavigationProvider.tsx +139 -10
  858. package/src/browser/react/context.ts +6 -0
  859. package/src/browser/react/filter-segment-order.ts +11 -0
  860. package/src/browser/react/index.ts +12 -12
  861. package/src/browser/react/location-state-shared.ts +95 -53
  862. package/src/browser/react/location-state.ts +60 -15
  863. package/src/browser/react/mount-context.ts +24 -1
  864. package/src/browser/react/nonce-context.ts +23 -0
  865. package/src/browser/react/shallow-equal.ts +27 -0
  866. package/src/browser/react/use-action.ts +29 -51
  867. package/src/browser/react/use-client-cache.ts +5 -3
  868. package/src/browser/react/use-handle.ts +32 -79
  869. package/src/browser/react/use-href.tsx +2 -2
  870. package/src/browser/react/use-link-status.ts +6 -5
  871. package/src/browser/react/use-navigation.ts +22 -63
  872. package/src/browser/react/use-params.ts +65 -0
  873. package/src/browser/react/use-pathname.ts +47 -0
  874. package/src/browser/react/use-router.ts +63 -0
  875. package/src/browser/react/use-search-params.ts +56 -0
  876. package/src/browser/react/use-segments.ts +80 -97
  877. package/src/browser/response-adapter.ts +73 -0
  878. package/src/browser/rsc-router.tsx +111 -30
  879. package/src/browser/scroll-restoration.ts +98 -38
  880. package/src/browser/segment-reconciler.ts +216 -0
  881. package/src/browser/segment-structure-assert.ts +16 -0
  882. package/src/browser/server-action-bridge.ts +504 -599
  883. package/src/browser/shallow.ts +6 -1
  884. package/src/browser/types.ts +109 -47
  885. package/src/browser/validate-redirect-origin.ts +29 -0
  886. package/src/build/generate-manifest.ts +235 -24
  887. package/src/build/generate-route-types.ts +36 -0
  888. package/src/build/index.ts +13 -0
  889. package/src/build/route-trie.ts +265 -0
  890. package/src/build/route-types/ast-helpers.ts +25 -0
  891. package/src/build/route-types/ast-route-extraction.ts +98 -0
  892. package/src/build/route-types/codegen.ts +102 -0
  893. package/src/build/route-types/include-resolution.ts +411 -0
  894. package/src/build/route-types/param-extraction.ts +48 -0
  895. package/src/build/route-types/per-module-writer.ts +128 -0
  896. package/src/build/route-types/router-processing.ts +469 -0
  897. package/src/build/route-types/scan-filter.ts +78 -0
  898. package/src/build/runtime-discovery.ts +231 -0
  899. package/src/cache/background-task.ts +34 -0
  900. package/src/cache/cache-key-utils.ts +44 -0
  901. package/src/cache/cache-policy.ts +125 -0
  902. package/src/cache/cache-runtime.ts +338 -0
  903. package/src/cache/cache-scope.ts +120 -303
  904. package/src/cache/cf/cf-cache-store.ts +119 -7
  905. package/src/cache/cf/index.ts +8 -2
  906. package/src/cache/document-cache.ts +101 -72
  907. package/src/cache/handle-capture.ts +81 -0
  908. package/src/cache/handle-snapshot.ts +41 -0
  909. package/src/cache/index.ts +0 -15
  910. package/src/cache/memory-segment-store.ts +191 -13
  911. package/src/cache/profile-registry.ts +73 -0
  912. package/src/cache/read-through-swr.ts +134 -0
  913. package/src/cache/segment-codec.ts +256 -0
  914. package/src/cache/taint.ts +98 -0
  915. package/src/cache/types.ts +72 -122
  916. package/src/client.rsc.tsx +3 -1
  917. package/src/client.tsx +106 -126
  918. package/src/component-utils.ts +4 -4
  919. package/src/components/DefaultDocument.tsx +5 -1
  920. package/src/context-var.ts +86 -0
  921. package/src/debug.ts +17 -7
  922. package/src/errors.ts +108 -2
  923. package/src/handle.ts +15 -29
  924. package/src/handles/MetaTags.tsx +73 -24
  925. package/src/handles/breadcrumbs.ts +66 -0
  926. package/src/handles/index.ts +1 -0
  927. package/src/handles/meta.ts +30 -13
  928. package/src/host/cookie-handler.ts +165 -0
  929. package/src/host/errors.ts +97 -0
  930. package/src/host/index.ts +53 -0
  931. package/src/host/pattern-matcher.ts +214 -0
  932. package/src/host/router.ts +352 -0
  933. package/src/host/testing.ts +79 -0
  934. package/src/host/types.ts +146 -0
  935. package/src/host/utils.ts +25 -0
  936. package/src/href-client.ts +119 -29
  937. package/src/index.rsc.ts +153 -19
  938. package/src/index.ts +211 -30
  939. package/src/internal-debug.ts +11 -0
  940. package/src/loader.rsc.ts +26 -147
  941. package/src/loader.ts +27 -10
  942. package/src/network-error-thrower.tsx +3 -1
  943. package/src/outlet-provider.tsx +45 -0
  944. package/src/prerender/param-hash.ts +37 -0
  945. package/src/prerender/store.ts +185 -0
  946. package/src/prerender.ts +463 -0
  947. package/src/reverse.ts +330 -0
  948. package/src/root-error-boundary.tsx +41 -29
  949. package/src/route-content-wrapper.tsx +7 -4
  950. package/src/route-definition/dsl-helpers.ts +934 -0
  951. package/src/route-definition/helper-factories.ts +200 -0
  952. package/src/route-definition/helpers-types.ts +430 -0
  953. package/src/route-definition/index.ts +52 -0
  954. package/src/route-definition/redirect.ts +93 -0
  955. package/src/route-definition.ts +1 -1428
  956. package/src/route-map-builder.ts +211 -123
  957. package/src/route-name.ts +53 -0
  958. package/src/route-types.ts +59 -8
  959. package/src/router/content-negotiation.ts +116 -0
  960. package/src/router/debug-manifest.ts +72 -0
  961. package/src/router/error-handling.ts +9 -9
  962. package/src/router/find-match.ts +158 -0
  963. package/src/router/handler-context.ts +374 -81
  964. package/src/router/intercept-resolution.ts +395 -0
  965. package/src/router/lazy-includes.ts +234 -0
  966. package/src/router/loader-resolution.ts +215 -122
  967. package/src/router/logging.ts +248 -0
  968. package/src/router/manifest.ts +148 -35
  969. package/src/router/match-api.ts +620 -0
  970. package/src/router/match-context.ts +5 -3
  971. package/src/router/match-handlers.ts +440 -0
  972. package/src/router/match-middleware/background-revalidation.ts +80 -93
  973. package/src/router/match-middleware/cache-lookup.ts +382 -9
  974. package/src/router/match-middleware/cache-store.ts +51 -22
  975. package/src/router/match-middleware/intercept-resolution.ts +55 -17
  976. package/src/router/match-middleware/segment-resolution.ts +24 -6
  977. package/src/router/match-pipelines.ts +10 -45
  978. package/src/router/match-result.ts +34 -28
  979. package/src/router/metrics.ts +235 -15
  980. package/src/router/middleware-cookies.ts +55 -0
  981. package/src/router/middleware-types.ts +222 -0
  982. package/src/router/middleware.ts +324 -367
  983. package/src/router/pattern-matching.ts +211 -43
  984. package/src/router/prerender-match.ts +402 -0
  985. package/src/router/preview-match.ts +170 -0
  986. package/src/router/revalidation.ts +137 -38
  987. package/src/router/router-context.ts +36 -21
  988. package/src/router/router-interfaces.ts +452 -0
  989. package/src/router/router-options.ts +592 -0
  990. package/src/router/router-registry.ts +24 -0
  991. package/src/router/segment-resolution/fresh.ts +570 -0
  992. package/src/router/segment-resolution/helpers.ts +263 -0
  993. package/src/router/segment-resolution/loader-cache.ts +198 -0
  994. package/src/router/segment-resolution/revalidation.ts +1239 -0
  995. package/src/router/segment-resolution/static-store.ts +67 -0
  996. package/src/router/segment-resolution.ts +21 -0
  997. package/src/router/segment-wrappers.ts +289 -0
  998. package/src/router/telemetry-otel.ts +299 -0
  999. package/src/router/telemetry.ts +300 -0
  1000. package/src/router/timeout.ts +148 -0
  1001. package/src/router/trie-matching.ts +239 -0
  1002. package/src/router/types.ts +77 -3
  1003. package/src/router.ts +661 -4182
  1004. package/src/rsc/handler-context.ts +45 -0
  1005. package/src/rsc/handler.ts +764 -756
  1006. package/src/rsc/helpers.ts +140 -6
  1007. package/src/rsc/index.ts +0 -20
  1008. package/src/rsc/loader-fetch.ts +209 -0
  1009. package/src/rsc/manifest-init.ts +86 -0
  1010. package/src/rsc/nonce.ts +14 -0
  1011. package/src/rsc/origin-guard.ts +141 -0
  1012. package/src/rsc/progressive-enhancement.ts +379 -0
  1013. package/src/rsc/response-error.ts +37 -0
  1014. package/src/rsc/response-route-handler.ts +347 -0
  1015. package/src/rsc/rsc-rendering.ts +237 -0
  1016. package/src/rsc/runtime-warnings.ts +42 -0
  1017. package/src/rsc/server-action.ts +348 -0
  1018. package/src/rsc/ssr-setup.ts +128 -0
  1019. package/src/rsc/types.ts +38 -11
  1020. package/src/search-params.ts +230 -0
  1021. package/src/segment-system.tsx +32 -17
  1022. package/src/server/context.ts +182 -51
  1023. package/src/server/cookie-store.ts +190 -0
  1024. package/src/server/fetchable-loader-store.ts +37 -0
  1025. package/src/server/handle-store.ts +94 -15
  1026. package/src/server/loader-registry.ts +15 -56
  1027. package/src/server/request-context.ts +430 -70
  1028. package/src/server.ts +35 -128
  1029. package/src/ssr/index.tsx +100 -31
  1030. package/src/static-handler.ts +114 -0
  1031. package/src/theme/ThemeProvider.tsx +21 -15
  1032. package/src/theme/ThemeScript.tsx +5 -5
  1033. package/src/theme/constants.ts +5 -2
  1034. package/src/theme/index.ts +4 -14
  1035. package/src/theme/theme-context.ts +4 -30
  1036. package/src/theme/theme-script.ts +21 -18
  1037. package/src/types/boundaries.ts +158 -0
  1038. package/src/types/cache-types.ts +198 -0
  1039. package/src/types/error-types.ts +192 -0
  1040. package/src/types/global-namespace.ts +100 -0
  1041. package/src/types/handler-context.ts +687 -0
  1042. package/src/types/index.ts +88 -0
  1043. package/src/types/loader-types.ts +183 -0
  1044. package/src/types/route-config.ts +170 -0
  1045. package/src/types/route-entry.ts +102 -0
  1046. package/src/types/segments.ts +148 -0
  1047. package/src/types.ts +1 -1623
  1048. package/src/urls/include-helper.ts +197 -0
  1049. package/src/urls/index.ts +53 -0
  1050. package/src/urls/path-helper-types.ts +339 -0
  1051. package/src/urls/path-helper.ts +329 -0
  1052. package/src/urls/pattern-types.ts +95 -0
  1053. package/src/urls/response-types.ts +106 -0
  1054. package/src/urls/type-extraction.ts +372 -0
  1055. package/src/urls/urls-function.ts +98 -0
  1056. package/src/urls.ts +1 -802
  1057. package/src/use-loader.tsx +85 -77
  1058. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1059. package/src/vite/discovery/discover-routers.ts +344 -0
  1060. package/src/vite/discovery/prerender-collection.ts +385 -0
  1061. package/src/vite/discovery/route-types-writer.ts +258 -0
  1062. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1063. package/src/vite/discovery/state.ts +110 -0
  1064. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1065. package/src/vite/index.ts +11 -782
  1066. package/src/vite/plugin-types.ts +131 -0
  1067. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1068. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1069. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1070. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -51
  1071. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1072. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1073. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1074. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1075. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1076. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1077. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1078. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1079. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1080. package/src/vite/plugins/version-injector.ts +83 -0
  1081. package/src/vite/plugins/version-plugin.ts +254 -0
  1082. package/src/vite/plugins/virtual-entries.ts +123 -0
  1083. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1084. package/src/vite/rango.ts +510 -0
  1085. package/src/vite/router-discovery.ts +785 -0
  1086. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1087. package/src/vite/utils/banner.ts +36 -0
  1088. package/src/vite/utils/bundle-analysis.ts +137 -0
  1089. package/src/vite/utils/manifest-utils.ts +70 -0
  1090. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1091. package/src/vite/utils/prerender-utils.ts +189 -0
  1092. package/src/vite/utils/shared-utils.ts +169 -0
  1093. package/CLAUDE.md +0 -43
  1094. package/src/browser/lru-cache.ts +0 -69
  1095. package/src/browser/request-controller.ts +0 -164
  1096. package/src/cache/memory-store.ts +0 -253
  1097. package/src/href.ts +0 -255
  1098. package/src/server/route-manifest-cache.ts +0 -173
  1099. package/src/vite/expose-handle-id.ts +0 -209
  1100. package/src/vite/expose-loader-id.ts +0 -426
  1101. package/src/vite/expose-location-state-id.ts +0 -177
  1102. package/src/warmup/connection-warmup.tsx +0 -94
  1103. package/src/warmup/warmup-context.ts +0 -35
  1104. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -8,8 +8,18 @@
8
8
  * - Supports hash link scrolling
9
9
  */
10
10
 
11
+ import { debugLog } from "./logging.js";
12
+
11
13
  const SCROLL_STORAGE_KEY = "rsc-router-scroll-positions";
12
14
 
15
+ /**
16
+ * Maximum number of scroll position entries to retain.
17
+ * When exceeded, the oldest entries (by insertion order) are evicted.
18
+ * 200 entries is well within sessionStorage limits while covering
19
+ * realistic back/forward navigation depth.
20
+ */
21
+ const MAX_SCROLL_ENTRIES = 200;
22
+
13
23
  /**
14
24
  * Interval for polling scroll restoration during streaming (ms).
15
25
  * If content is still loading and we can't scroll to saved position,
@@ -29,6 +39,13 @@ const SCROLL_POLL_TIMEOUT_MS = 5000;
29
39
  */
30
40
  let savedScrollPositions: Record<string, number> = {};
31
41
 
42
+ /**
43
+ * Tracks insertion order of scroll position keys for LRU eviction.
44
+ * Most recent entries are at the end of the array.
45
+ * When a key is updated, it is moved to the end.
46
+ */
47
+ let scrollKeyOrder: string[] = [];
48
+
32
49
  /**
33
50
  * Whether scroll restoration has been initialized
34
51
  */
@@ -37,9 +54,12 @@ let initialized = false;
37
54
  /**
38
55
  * Custom getKey function for determining scroll restoration key
39
56
  */
40
- type GetScrollKeyFunction = (
41
- location: { pathname: string; search: string; hash: string; key: string }
42
- ) => string;
57
+ type GetScrollKeyFunction = (location: {
58
+ pathname: string;
59
+ search: string;
60
+ hash: string;
61
+ key: string;
62
+ }) => string;
43
63
 
44
64
  let customGetKey: GetScrollKeyFunction | null = null;
45
65
 
@@ -99,9 +119,13 @@ export function initScrollRestoration(options?: {
99
119
  const stored = sessionStorage.getItem(SCROLL_STORAGE_KEY);
100
120
  if (stored) {
101
121
  savedScrollPositions = JSON.parse(stored);
122
+ // Rebuild key order from loaded positions.
123
+ // Exact original order is lost across page loads, but this is
124
+ // acceptable -- the important invariant is bounded size.
125
+ scrollKeyOrder = Object.keys(savedScrollPositions);
102
126
  }
103
127
  } catch (e) {
104
- // Ignore parse errors
128
+ // Ignore parse errors, start with empty state
105
129
  }
106
130
 
107
131
  // Ensure current history entry has a key
@@ -117,31 +141,82 @@ export function initScrollRestoration(options?: {
117
141
 
118
142
  window.addEventListener("pagehide", handlePageHide);
119
143
 
120
- console.log("[Scroll] Initialized, loaded positions:", Object.keys(savedScrollPositions).length);
144
+ debugLog(
145
+ "[Scroll] Initialized, loaded positions:",
146
+ Object.keys(savedScrollPositions).length,
147
+ );
121
148
 
122
149
  return () => {
150
+ cancelScrollRestorationPolling();
123
151
  window.removeEventListener("pagehide", handlePageHide);
124
152
  window.history.scrollRestoration = "auto";
125
153
  initialized = false;
154
+ savedScrollPositions = {};
155
+ scrollKeyOrder = [];
126
156
  };
127
157
  }
128
158
 
129
159
  /**
130
- * Save the current scroll position for the current history entry
160
+ * Save the current scroll position for the current history entry.
161
+ * Maintains bounded size by evicting oldest entries when the limit is exceeded.
131
162
  */
132
163
  export function saveCurrentScrollPosition(): void {
133
164
  const key = getScrollKey();
165
+
166
+ // If this key already exists, remove it from its current position
167
+ // in the order array so it can be re-appended at the end (most recent).
168
+ const existingIndex = scrollKeyOrder.indexOf(key);
169
+ if (existingIndex !== -1) {
170
+ scrollKeyOrder.splice(existingIndex, 1);
171
+ }
172
+
134
173
  savedScrollPositions[key] = window.scrollY;
174
+ scrollKeyOrder.push(key);
175
+
176
+ // Evict oldest entries if we exceed the limit
177
+ while (scrollKeyOrder.length > MAX_SCROLL_ENTRIES) {
178
+ const oldestKey = scrollKeyOrder.shift()!;
179
+ delete savedScrollPositions[oldestKey];
180
+ }
135
181
  }
136
182
 
137
183
  /**
138
- * Persist scroll positions to sessionStorage
184
+ * Persist scroll positions to sessionStorage.
185
+ * If the write fails due to quota exceeded, progressively evict the oldest
186
+ * entries and retry until it succeeds or the store is empty.
139
187
  */
140
188
  function persistToSessionStorage(): void {
141
189
  try {
142
- sessionStorage.setItem(SCROLL_STORAGE_KEY, JSON.stringify(savedScrollPositions));
190
+ sessionStorage.setItem(
191
+ SCROLL_STORAGE_KEY,
192
+ JSON.stringify(savedScrollPositions),
193
+ );
143
194
  } catch (e) {
144
- console.warn("[Scroll] Failed to persist to sessionStorage:", e);
195
+ // Likely QuotaExceededError. Evict oldest entries and retry.
196
+ const evictCount = Math.max(1, Math.floor(scrollKeyOrder.length / 4));
197
+ for (let i = 0; i < evictCount && scrollKeyOrder.length > 0; i++) {
198
+ const oldestKey = scrollKeyOrder.shift()!;
199
+ delete savedScrollPositions[oldestKey];
200
+ }
201
+
202
+ try {
203
+ sessionStorage.setItem(
204
+ SCROLL_STORAGE_KEY,
205
+ JSON.stringify(savedScrollPositions),
206
+ );
207
+ } catch (retryErr) {
208
+ // Storage still full after eviction. Clear our key entirely so we
209
+ // don't block other sessionStorage consumers.
210
+ console.warn(
211
+ "[Scroll] Failed to persist to sessionStorage after eviction, clearing scroll data:",
212
+ retryErr,
213
+ );
214
+ try {
215
+ sessionStorage.removeItem(SCROLL_STORAGE_KEY);
216
+ } catch {
217
+ // Nothing more we can do
218
+ }
219
+ }
145
220
  }
146
221
  }
147
222
 
@@ -189,50 +264,35 @@ export function restoreScrollPosition(options?: {
189
264
  return false;
190
265
  }
191
266
 
192
- // Check if page is tall enough to scroll to saved position
193
- const maxScrollY = document.documentElement.scrollHeight - window.innerHeight;
194
- const canScrollToPosition = savedY <= maxScrollY;
195
-
196
- if (canScrollToPosition) {
197
- window.scrollTo(0, savedY);
198
- console.log("[Scroll] Restored position:", savedY, "for key:", key);
199
- return true;
200
- }
201
-
202
- // Scroll as far as we can for now
203
- window.scrollTo(0, maxScrollY);
204
- console.log("[Scroll] Partial restore to:", maxScrollY, "target:", savedY);
205
-
206
- // Poll while streaming until we can scroll to target position
267
+ // If streaming, poll until streaming ends then scroll to saved position
207
268
  if (options?.retryIfStreaming && options?.isStreaming?.()) {
208
269
  const startTime = Date.now();
209
270
 
210
271
  pendingPollInterval = setInterval(() => {
211
- // Stop if we've exceeded the timeout
212
272
  if (Date.now() - startTime > SCROLL_POLL_TIMEOUT_MS) {
213
- console.log("[Scroll] Polling timeout, giving up");
273
+ debugLog("[Scroll] Polling timeout, giving up");
214
274
  cancelScrollRestorationPolling();
215
275
  return;
216
276
  }
217
277
 
218
- // Stop if streaming ended
219
278
  if (!options.isStreaming?.()) {
220
- console.log("[Scroll] Streaming ended, stopping poll");
221
- cancelScrollRestorationPolling();
222
- return;
223
- }
224
-
225
- // Check if we can now scroll to the target position
226
- const currentMaxScrollY = document.documentElement.scrollHeight - window.innerHeight;
227
- if (savedY <= currentMaxScrollY) {
228
279
  window.scrollTo(0, savedY);
229
- console.log("[Scroll] Poll restored position:", savedY);
280
+ debugLog("[Scroll] Restored after streaming:", savedY);
230
281
  cancelScrollRestorationPolling();
231
282
  }
232
283
  }, SCROLL_POLL_INTERVAL_MS);
284
+
285
+ return true;
233
286
  }
234
287
 
235
- return false;
288
+ // Not streaming — scroll after React commits and browser paints.
289
+ // startTransition defers the DOM commit, so scrolling synchronously
290
+ // would be overwritten when React replaces the content.
291
+ requestAnimationFrame(() => {
292
+ window.scrollTo(0, savedY);
293
+ debugLog("[Scroll] Restored position:", savedY, "for key:", key);
294
+ });
295
+ return true;
236
296
  }
237
297
 
238
298
  /**
@@ -249,7 +309,7 @@ export function scrollToHash(): boolean {
249
309
  const element = document.getElementById(id);
250
310
  if (element) {
251
311
  element.scrollIntoView();
252
- console.log("[Scroll] Scrolled to hash element:", id);
312
+ debugLog("[Scroll] Scrolled to hash element:", id);
253
313
  return true;
254
314
  }
255
315
  } catch (e) {
@@ -0,0 +1,216 @@
1
+ import type { ResolvedSegment } from "./types.js";
2
+ import {
3
+ mergeSegmentLoaders,
4
+ needsLoaderMerge,
5
+ insertMissingDiffSegments,
6
+ } from "./merge-segment-loaders.js";
7
+ import { assertSegmentStructure } from "./segment-structure-assert.js";
8
+ import { splitInterceptSegments } from "./intercept-utils.js";
9
+
10
+ /**
11
+ * Determines the merging behavior for segment reconciliation.
12
+ *
13
+ * - 'action': From server-action-bridge's own merge. Always merges loaders,
14
+ * always preserves cached loading (even undefined), never clears cached
15
+ * segment loading.
16
+ * - 'navigation': From partial-update during normal navigation. Does NOT merge
17
+ * loaders, preserves cached loading only when defined, clears truthy loading
18
+ * on cached segments not in server diff.
19
+ * - 'stale-revalidation': From partial-update during stale revalidation or
20
+ * action-triggered refetch. Merges loaders, always preserves cached loading
21
+ * (same as action), clears truthy loading on cached segments not in server diff.
22
+ */
23
+ export type ReconcileActor = "navigation" | "action" | "stale-revalidation";
24
+
25
+ export interface ReconcileInput {
26
+ actor: ReconcileActor;
27
+ /** All segment IDs the server expects the client to have (matched array) */
28
+ matched: string[];
29
+ /** Segment IDs that changed (diff array) */
30
+ diff: string[];
31
+ /** Segments returned from server (raw array, keyed internally by ID) */
32
+ serverSegments: ResolvedSegment[];
33
+ /** Cached segments from current page (raw array, keyed internally by ID) */
34
+ cachedSegments: ResolvedSegment[];
35
+ /** When true, diff segments not in matched are inserted after their parent
36
+ * layout. Used during navigation when consolidation fetch returns loader
37
+ * segments that aren't in the matched array. */
38
+ insertMissingDiff?: boolean;
39
+ }
40
+
41
+ export interface ReconcileResult {
42
+ /** All merged segments in matched order (for caching and committing) */
43
+ segments: ResolvedSegment[];
44
+ /** Main segments excluding intercepts (for rendering) */
45
+ mainSegments: ResolvedSegment[];
46
+ /** Intercept segments only (passed via render options) */
47
+ interceptSegments: ResolvedSegment[];
48
+ }
49
+
50
+ /**
51
+ * Single source of truth for merging server segments with cached segments.
52
+ *
53
+ * Replaces the duplicated merge loops in server-action-bridge.ts and
54
+ * partial-update.ts. The actor parameter controls the subtle behavioral
55
+ * differences between action and navigation merging:
56
+ *
57
+ * Loading preservation:
58
+ * - action/stale-revalidation: Always preserves cached loading value when it
59
+ * differs from server (even when cached is undefined). This prevents tree
60
+ * structure changes that would remount components and destroy useActionState
61
+ * during action revalidation or action-triggered refetch.
62
+ * - navigation: Preserves cached loading only when the cached value is defined
63
+ * (not undefined). When cached is undefined, lets server value through
64
+ * because we're building a new tree.
65
+ *
66
+ * Loader merging:
67
+ * - action/stale-revalidation: Merges partial loader data when server returns
68
+ * fewer loaders than cached (revalidation only updated some loaders).
69
+ * - navigation: Does not merge (full navigation fetches complete data).
70
+ *
71
+ * Cached segment handling (segments in matched but not in server response):
72
+ * - action: Returns cached segment as-is (preserve tree structure).
73
+ * - navigation/stale-revalidation: Clears truthy loading to undefined
74
+ * (prevents showing stale skeletons), but preserves loading=false
75
+ * (suppressed boundary is structural).
76
+ */
77
+ export function reconcileSegments(input: ReconcileInput): ReconcileResult {
78
+ const { actor, matched, diff, insertMissingDiff } = input;
79
+ const shouldMergeLoaders = actor !== "navigation";
80
+ const context = actor === "action" ? "action-bridge" : "partial-update";
81
+
82
+ // Build lookup maps from arrays
83
+ const serverSegments = new Map<string, ResolvedSegment>();
84
+ input.serverSegments.forEach((s) => serverSegments.set(s.id, s));
85
+ const cachedSegments = new Map<string, ResolvedSegment>();
86
+ input.cachedSegments.forEach((s) => cachedSegments.set(s.id, s));
87
+
88
+ const segments = matched
89
+ .map((segId: string) => {
90
+ const fromServer = serverSegments.get(segId);
91
+ const fromCache = cachedSegments.get(segId);
92
+
93
+ if (fromServer) {
94
+ // Merge partial loader data when server returns fewer loaders than cached
95
+ if (shouldMergeLoaders && needsLoaderMerge(fromServer, fromCache)) {
96
+ return mergeSegmentLoaders(fromServer, fromCache);
97
+ }
98
+
99
+ // Preserve cached structural properties to maintain consistent React tree.
100
+ // Changing these between renders alters the element nesting
101
+ // (with/without RouteContentWrapper, MountContextProvider, etc.),
102
+ // causing React to remount components and destroy useActionState.
103
+ if (fromCache) {
104
+ let merged = fromServer;
105
+
106
+ // When server returns component: null for a layout segment, it means
107
+ // "this segment doesn't need re-rendering" - preserve the cached component
108
+ // to maintain the outlet chain and prevent React tree changes
109
+ if (
110
+ fromServer.component === null &&
111
+ fromServer.type === "layout" &&
112
+ fromCache.component != null
113
+ ) {
114
+ merged = { ...merged, component: fromCache.component };
115
+ }
116
+
117
+ // Loading preservation is actor-aware:
118
+ // - action/stale-revalidation: always preserve cached value to prevent
119
+ // tree remount (even when cached is undefined, to avoid adding a
120
+ // Suspense boundary that wasn't there before)
121
+ // - navigation: only when cached is defined (building a new tree)
122
+ if (actor !== "navigation") {
123
+ if (fromServer.loading !== fromCache.loading) {
124
+ merged = { ...merged, loading: fromCache.loading };
125
+ }
126
+ } else {
127
+ if (
128
+ fromCache.loading !== undefined &&
129
+ fromServer.loading !== fromCache.loading
130
+ ) {
131
+ merged = { ...merged, loading: fromCache.loading };
132
+ }
133
+ }
134
+
135
+ // mountPath: SSR segments may lack mountPath while revalidated segments
136
+ // include it. The conditional MountContextProvider wrapper changes tree depth.
137
+ if (fromServer.mountPath !== fromCache.mountPath) {
138
+ merged = { ...merged, mountPath: fromCache.mountPath };
139
+ }
140
+
141
+ // Dev-mode assertion: warn if the merged result still differs from cache
142
+ // in tree-structural properties. This catches bugs where the merge code
143
+ // above fails to preserve a value it should have.
144
+ assertSegmentStructure(fromCache, merged, context);
145
+
146
+ return merged;
147
+ }
148
+ return fromServer;
149
+ }
150
+
151
+ // Fall back to cached segment (server expects client to already have it)
152
+ if (!fromCache) {
153
+ if (actor === "action") {
154
+ console.error(`[Browser] MISSING SEGMENT: ${segId} not in cache!`);
155
+ } else {
156
+ console.warn(`[Browser] Missing segment: ${segId}`);
157
+ }
158
+ return fromCache;
159
+ }
160
+
161
+ // For non-action actors: cached segments the server decided not to re-render.
162
+ // - Preserve loading=false (suppressed boundary) to maintain tree structure
163
+ // - Clear truthy loading (active skeleton) to prevent suspense on cached content
164
+ if (actor !== "action") {
165
+ if (fromCache.loading !== undefined && fromCache.loading !== false) {
166
+ return { ...fromCache, loading: undefined };
167
+ }
168
+ }
169
+
170
+ return fromCache;
171
+ })
172
+ .filter(Boolean) as ResolvedSegment[];
173
+
174
+ // Insert diff segments not in matched (e.g., loader segments from consolidation fetch).
175
+ // Only needed during navigation - action bridge doesn't use this.
176
+ if (insertMissingDiff) {
177
+ const matchedIdSet = new Set(matched);
178
+ insertMissingDiffSegments(segments, diff, matchedIdSet, serverSegments);
179
+ }
180
+
181
+ const { main, intercept } = splitInterceptSegments(segments);
182
+
183
+ return {
184
+ segments,
185
+ mainSegments: main,
186
+ interceptSegments: intercept,
187
+ };
188
+ }
189
+
190
+ /**
191
+ * Reconcile error segments with cached segments.
192
+ *
193
+ * For error responses, the server returns the error boundary segment.
194
+ * This function overlays error segments onto the full cached tree,
195
+ * preserving sibling layouts that aren't in the error parent chain.
196
+ */
197
+ export function reconcileErrorSegments(
198
+ cachedSegments: ResolvedSegment[],
199
+ errorSegments: ResolvedSegment[],
200
+ ): ReconcileResult {
201
+ const errorMap = new Map<string, ResolvedSegment>();
202
+ errorSegments.forEach((s) => errorMap.set(s.id, s));
203
+
204
+ const segments = cachedSegments.map((cached) => {
205
+ const fromServer = errorMap.get(cached.id);
206
+ return fromServer || cached;
207
+ });
208
+
209
+ const { main, intercept } = splitInterceptSegments(segments);
210
+
211
+ return {
212
+ segments,
213
+ mainSegments: main,
214
+ interceptSegments: intercept,
215
+ };
216
+ }
@@ -57,6 +57,22 @@ export function assertSegmentStructure(
57
57
  `The merge code should preserve the cached loading value.`,
58
58
  );
59
59
  }
60
+
61
+ // Check mountPath consistency. MountContextProvider is conditionally added
62
+ // in renderSegments() when mountPath is truthy, changing tree depth.
63
+ const cachedHasMount = !!cached.mountPath;
64
+ const incomingHasMount = !!incoming.mountPath;
65
+ if (cachedHasMount !== incomingHasMount) {
66
+ console.warn(
67
+ `[RSC Router] MountContextProvider mismatch detected in ${context} ` +
68
+ `for segment "${cached.id}": mountPath changed from ` +
69
+ `${cachedHasMount ? `"${cached.mountPath}"` : "undefined"} to ` +
70
+ `${incomingHasMount ? `"${incoming.mountPath}"` : "undefined"}. ` +
71
+ `This will cause React to remount the component, destroying ` +
72
+ `useActionState and other client state. ` +
73
+ `The merge code should preserve the cached mountPath value.`,
74
+ );
75
+ }
60
76
  }
61
77
 
62
78
  function describeLoading(loading: unknown): string {