@rangojs/router 0.0.0-experimental.8 → 0.0.0-experimental.8123bb7e

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 (1106) 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 +1606 -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 +4636 -935
  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} +12 -16
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +69 -59
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +294 -0
  811. package/skills/caching/SKILL.md +93 -23
  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 +404 -44
  822. package/skills/middleware/SKILL.md +171 -34
  823. package/skills/mime-routes/SKILL.md +128 -0
  824. package/skills/parallel/SKILL.md +204 -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 +257 -14
  829. package/skills/router-setup/SKILL.md +175 -32
  830. package/skills/tailwind/SKILL.md +129 -0
  831. package/skills/theme/SKILL.md +9 -8
  832. package/skills/typesafety/SKILL.md +328 -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/debug-channel.ts +93 -0
  839. package/src/browser/event-controller.ts +92 -64
  840. package/src/browser/history-state.ts +80 -0
  841. package/src/browser/intercept-utils.ts +52 -0
  842. package/src/browser/link-interceptor.ts +24 -4
  843. package/src/browser/logging.ts +55 -0
  844. package/src/browser/merge-segment-loaders.ts +20 -12
  845. package/src/browser/navigation-bridge.ts +282 -557
  846. package/src/browser/navigation-client.ts +182 -72
  847. package/src/browser/navigation-store.ts +33 -50
  848. package/src/browser/navigation-transaction.ts +297 -0
  849. package/src/browser/network-error-handler.ts +61 -0
  850. package/src/browser/partial-update.ts +303 -310
  851. package/src/browser/prefetch/cache.ts +206 -0
  852. package/src/browser/prefetch/fetch.ts +144 -0
  853. package/src/browser/prefetch/observer.ts +65 -0
  854. package/src/browser/prefetch/policy.ts +48 -0
  855. package/src/browser/prefetch/queue.ts +160 -0
  856. package/src/browser/prefetch/resource-ready.ts +77 -0
  857. package/src/browser/rango-state.ts +112 -0
  858. package/src/browser/react/Link.tsx +193 -73
  859. package/src/browser/react/NavigationProvider.tsx +80 -11
  860. package/src/browser/react/context.ts +6 -0
  861. package/src/browser/react/filter-segment-order.ts +11 -0
  862. package/src/browser/react/index.ts +12 -12
  863. package/src/browser/react/location-state-shared.ts +95 -53
  864. package/src/browser/react/location-state.ts +60 -15
  865. package/src/browser/react/mount-context.ts +6 -1
  866. package/src/browser/react/nonce-context.ts +23 -0
  867. package/src/browser/react/shallow-equal.ts +27 -0
  868. package/src/browser/react/use-action.ts +29 -51
  869. package/src/browser/react/use-client-cache.ts +5 -3
  870. package/src/browser/react/use-handle.ts +32 -79
  871. package/src/browser/react/use-href.tsx +2 -2
  872. package/src/browser/react/use-link-status.ts +6 -5
  873. package/src/browser/react/use-navigation.ts +22 -63
  874. package/src/browser/react/use-params.ts +65 -0
  875. package/src/browser/react/use-pathname.ts +47 -0
  876. package/src/browser/react/use-router.ts +63 -0
  877. package/src/browser/react/use-search-params.ts +56 -0
  878. package/src/browser/react/use-segments.ts +80 -97
  879. package/src/browser/response-adapter.ts +73 -0
  880. package/src/browser/rsc-router.tsx +188 -55
  881. package/src/browser/scroll-restoration.ts +117 -44
  882. package/src/browser/segment-reconciler.ts +221 -0
  883. package/src/browser/segment-structure-assert.ts +16 -0
  884. package/src/browser/server-action-bridge.ts +516 -599
  885. package/src/browser/shallow.ts +6 -1
  886. package/src/browser/types.ts +125 -47
  887. package/src/browser/validate-redirect-origin.ts +29 -0
  888. package/src/build/generate-manifest.ts +235 -24
  889. package/src/build/generate-route-types.ts +36 -0
  890. package/src/build/index.ts +13 -0
  891. package/src/build/route-trie.ts +265 -0
  892. package/src/build/route-types/ast-helpers.ts +25 -0
  893. package/src/build/route-types/ast-route-extraction.ts +98 -0
  894. package/src/build/route-types/codegen.ts +102 -0
  895. package/src/build/route-types/include-resolution.ts +411 -0
  896. package/src/build/route-types/param-extraction.ts +48 -0
  897. package/src/build/route-types/per-module-writer.ts +128 -0
  898. package/src/build/route-types/router-processing.ts +479 -0
  899. package/src/build/route-types/scan-filter.ts +78 -0
  900. package/src/build/runtime-discovery.ts +231 -0
  901. package/src/cache/background-task.ts +34 -0
  902. package/src/cache/cache-key-utils.ts +44 -0
  903. package/src/cache/cache-policy.ts +125 -0
  904. package/src/cache/cache-runtime.ts +342 -0
  905. package/src/cache/cache-scope.ts +167 -309
  906. package/src/cache/cf/cf-cache-store.ts +571 -17
  907. package/src/cache/cf/index.ts +13 -3
  908. package/src/cache/document-cache.ts +116 -77
  909. package/src/cache/handle-capture.ts +81 -0
  910. package/src/cache/handle-snapshot.ts +41 -0
  911. package/src/cache/index.ts +1 -15
  912. package/src/cache/memory-segment-store.ts +191 -13
  913. package/src/cache/profile-registry.ts +73 -0
  914. package/src/cache/read-through-swr.ts +134 -0
  915. package/src/cache/segment-codec.ts +256 -0
  916. package/src/cache/taint.ts +153 -0
  917. package/src/cache/types.ts +72 -122
  918. package/src/client.rsc.tsx +3 -1
  919. package/src/client.tsx +106 -126
  920. package/src/component-utils.ts +4 -4
  921. package/src/components/DefaultDocument.tsx +5 -1
  922. package/src/context-var.ts +156 -0
  923. package/src/debug.ts +19 -9
  924. package/src/deps/browser.ts +1 -0
  925. package/src/errors.ts +108 -2
  926. package/src/handle.ts +15 -29
  927. package/src/handles/MetaTags.tsx +73 -20
  928. package/src/handles/breadcrumbs.ts +66 -0
  929. package/src/handles/index.ts +1 -0
  930. package/src/handles/meta.ts +30 -13
  931. package/src/host/cookie-handler.ts +21 -15
  932. package/src/host/errors.ts +8 -8
  933. package/src/host/index.ts +4 -7
  934. package/src/host/pattern-matcher.ts +27 -27
  935. package/src/host/router.ts +61 -39
  936. package/src/host/testing.ts +8 -8
  937. package/src/host/types.ts +15 -7
  938. package/src/host/utils.ts +1 -1
  939. package/src/href-client.ts +119 -29
  940. package/src/index.rsc.ts +153 -19
  941. package/src/index.ts +211 -30
  942. package/src/internal-debug.ts +11 -0
  943. package/src/loader.rsc.ts +26 -157
  944. package/src/loader.ts +27 -10
  945. package/src/network-error-thrower.tsx +3 -1
  946. package/src/outlet-provider.tsx +45 -0
  947. package/src/prerender/param-hash.ts +37 -0
  948. package/src/prerender/store.ts +185 -0
  949. package/src/prerender.ts +463 -0
  950. package/src/reverse.ts +330 -0
  951. package/src/root-error-boundary.tsx +41 -29
  952. package/src/route-content-wrapper.tsx +7 -4
  953. package/src/route-definition/dsl-helpers.ts +959 -0
  954. package/src/route-definition/helper-factories.ts +200 -0
  955. package/src/route-definition/helpers-types.ts +431 -0
  956. package/src/route-definition/index.ts +52 -0
  957. package/src/route-definition/redirect.ts +93 -0
  958. package/src/route-definition.ts +1 -1428
  959. package/src/route-map-builder.ts +217 -123
  960. package/src/route-name.ts +53 -0
  961. package/src/route-types.ts +59 -8
  962. package/src/router/content-negotiation.ts +116 -0
  963. package/src/router/debug-manifest.ts +72 -0
  964. package/src/router/error-handling.ts +9 -9
  965. package/src/router/find-match.ts +160 -0
  966. package/src/router/handler-context.ts +400 -84
  967. package/src/router/intercept-resolution.ts +397 -0
  968. package/src/router/lazy-includes.ts +237 -0
  969. package/src/router/loader-resolution.ts +222 -123
  970. package/src/router/logging.ts +251 -0
  971. package/src/router/manifest.ts +154 -35
  972. package/src/router/match-api.ts +620 -0
  973. package/src/router/match-context.ts +5 -3
  974. package/src/router/match-handlers.ts +440 -0
  975. package/src/router/match-middleware/background-revalidation.ts +108 -93
  976. package/src/router/match-middleware/cache-lookup.ts +440 -10
  977. package/src/router/match-middleware/cache-store.ts +98 -26
  978. package/src/router/match-middleware/intercept-resolution.ts +57 -17
  979. package/src/router/match-middleware/segment-resolution.ts +27 -6
  980. package/src/router/match-pipelines.ts +10 -45
  981. package/src/router/match-result.ts +55 -33
  982. package/src/router/metrics.ts +240 -15
  983. package/src/router/middleware-cookies.ts +55 -0
  984. package/src/router/middleware-types.ts +226 -0
  985. package/src/router/middleware.ts +327 -369
  986. package/src/router/pattern-matching.ts +211 -43
  987. package/src/router/prerender-match.ts +402 -0
  988. package/src/router/preview-match.ts +170 -0
  989. package/src/router/revalidation.ts +137 -38
  990. package/src/router/router-context.ts +41 -21
  991. package/src/router/router-interfaces.ts +452 -0
  992. package/src/router/router-options.ts +592 -0
  993. package/src/router/router-registry.ts +24 -0
  994. package/src/router/segment-resolution/fresh.ts +683 -0
  995. package/src/router/segment-resolution/helpers.ts +268 -0
  996. package/src/router/segment-resolution/loader-cache.ts +199 -0
  997. package/src/router/segment-resolution/revalidation.ts +1301 -0
  998. package/src/router/segment-resolution/static-store.ts +67 -0
  999. package/src/router/segment-resolution.ts +21 -0
  1000. package/src/router/segment-wrappers.ts +291 -0
  1001. package/src/router/telemetry-otel.ts +299 -0
  1002. package/src/router/telemetry.ts +300 -0
  1003. package/src/router/timeout.ts +148 -0
  1004. package/src/router/trie-matching.ts +239 -0
  1005. package/src/router/types.ts +78 -3
  1006. package/src/router.ts +697 -4257
  1007. package/src/rsc/handler-context.ts +45 -0
  1008. package/src/rsc/handler.ts +790 -755
  1009. package/src/rsc/helpers.ts +140 -6
  1010. package/src/rsc/index.ts +0 -20
  1011. package/src/rsc/loader-fetch.ts +214 -0
  1012. package/src/rsc/manifest-init.ts +86 -0
  1013. package/src/rsc/nonce.ts +14 -0
  1014. package/src/rsc/origin-guard.ts +141 -0
  1015. package/src/rsc/progressive-enhancement.ts +382 -0
  1016. package/src/rsc/response-error.ts +37 -0
  1017. package/src/rsc/response-route-handler.ts +347 -0
  1018. package/src/rsc/rsc-rendering.ts +240 -0
  1019. package/src/rsc/runtime-warnings.ts +42 -0
  1020. package/src/rsc/server-action.ts +350 -0
  1021. package/src/rsc/ssr-setup.ts +128 -0
  1022. package/src/rsc/types.ts +44 -11
  1023. package/src/search-params.ts +230 -0
  1024. package/src/segment-system.tsx +165 -17
  1025. package/src/server/context.ts +278 -58
  1026. package/src/server/cookie-store.ts +190 -0
  1027. package/src/server/fetchable-loader-store.ts +37 -0
  1028. package/src/server/handle-store.ts +94 -15
  1029. package/src/server/loader-registry.ts +15 -56
  1030. package/src/server/request-context.ts +481 -74
  1031. package/src/server.ts +35 -130
  1032. package/src/ssr/index.tsx +101 -31
  1033. package/src/static-handler.ts +114 -0
  1034. package/src/theme/ThemeProvider.tsx +21 -15
  1035. package/src/theme/ThemeScript.tsx +5 -5
  1036. package/src/theme/constants.ts +5 -2
  1037. package/src/theme/index.ts +4 -14
  1038. package/src/theme/theme-context.ts +4 -30
  1039. package/src/theme/theme-script.ts +21 -18
  1040. package/src/types/boundaries.ts +158 -0
  1041. package/src/types/cache-types.ts +198 -0
  1042. package/src/types/error-types.ts +192 -0
  1043. package/src/types/global-namespace.ts +100 -0
  1044. package/src/types/handler-context.ts +785 -0
  1045. package/src/types/index.ts +88 -0
  1046. package/src/types/loader-types.ts +183 -0
  1047. package/src/types/route-config.ts +170 -0
  1048. package/src/types/route-entry.ts +109 -0
  1049. package/src/types/segments.ts +150 -0
  1050. package/src/types.ts +1 -1623
  1051. package/src/urls/include-helper.ts +197 -0
  1052. package/src/urls/index.ts +53 -0
  1053. package/src/urls/path-helper-types.ts +339 -0
  1054. package/src/urls/path-helper.ts +329 -0
  1055. package/src/urls/pattern-types.ts +95 -0
  1056. package/src/urls/response-types.ts +106 -0
  1057. package/src/urls/type-extraction.ts +372 -0
  1058. package/src/urls/urls-function.ts +98 -0
  1059. package/src/urls.ts +1 -802
  1060. package/src/use-loader.tsx +85 -77
  1061. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1062. package/src/vite/discovery/discover-routers.ts +344 -0
  1063. package/src/vite/discovery/prerender-collection.ts +385 -0
  1064. package/src/vite/discovery/route-types-writer.ts +258 -0
  1065. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1066. package/src/vite/discovery/state.ts +108 -0
  1067. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1068. package/src/vite/index.ts +11 -1133
  1069. package/src/vite/plugin-types.ts +48 -0
  1070. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1071. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1072. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1073. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
  1074. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1075. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1076. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1077. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1078. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1079. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1080. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1081. package/src/vite/plugins/performance-tracks.ts +235 -0
  1082. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1083. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1084. package/src/vite/plugins/version-injector.ts +83 -0
  1085. package/src/vite/plugins/version-plugin.ts +266 -0
  1086. package/src/vite/plugins/virtual-entries.ts +123 -0
  1087. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1088. package/src/vite/rango.ts +456 -0
  1089. package/src/vite/router-discovery.ts +777 -0
  1090. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1091. package/src/vite/utils/banner.ts +36 -0
  1092. package/src/vite/utils/bundle-analysis.ts +137 -0
  1093. package/src/vite/utils/manifest-utils.ts +70 -0
  1094. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1095. package/src/vite/utils/prerender-utils.ts +189 -0
  1096. package/src/vite/utils/shared-utils.ts +169 -0
  1097. package/CLAUDE.md +0 -43
  1098. package/src/browser/lru-cache.ts +0 -69
  1099. package/src/browser/request-controller.ts +0 -164
  1100. package/src/cache/memory-store.ts +0 -253
  1101. package/src/href.ts +0 -255
  1102. package/src/server/route-manifest-cache.ts +0 -173
  1103. package/src/vite/expose-handle-id.ts +0 -209
  1104. package/src/vite/expose-loader-id.ts +0 -426
  1105. package/src/vite/expose-location-state-id.ts +0 -177
  1106. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -11,8 +11,7 @@ import { createEventController } from "./event-controller.js";
11
11
  import { createNavigationClient } from "./navigation-client.js";
12
12
  import { createServerActionBridge } from "./server-action-bridge.js";
13
13
  import { createNavigationBridge } from "./navigation-bridge.js";
14
- import { NavigationProvider, initHandleDataSync, initSegmentsSync } from "./react/index.js";
15
- import { initThemeConfigSync } from "../theme/theme-context.js";
14
+ import { NavigationProvider } from "./react/index.js";
16
15
  import type {
17
16
  RscPayload,
18
17
  RscBrowserDependencies,
@@ -22,6 +21,12 @@ import type {
22
21
  } from "./types.js";
23
22
  import type { EventController } from "./event-controller.js";
24
23
  import type { ResolvedThemeConfig, Theme } from "../theme/types.js";
24
+ import { initRangoState } from "./rango-state.js";
25
+ import { initPrefetchCache } from "./prefetch/cache.js";
26
+ import {
27
+ isInterceptSegment,
28
+ splitInterceptSegments,
29
+ } from "./intercept-utils.js";
25
30
 
26
31
  // Vite HMR types are provided by vite/client
27
32
 
@@ -106,6 +111,8 @@ export interface BrowserAppContext {
106
111
  initialTheme?: Theme;
107
112
  /** Whether connection warmup is enabled */
108
113
  warmupEnabled?: boolean;
114
+ /** App version for prefetch version mismatch detection */
115
+ version?: string;
109
116
  }
110
117
 
111
118
  // Module-level state for the initialized app
@@ -121,9 +128,16 @@ let browserAppContext: BrowserAppContext | null = null;
121
128
  * - Configures HMR support
122
129
  */
123
130
  export async function initBrowserApp(
124
- options: InitBrowserAppOptions
131
+ options: InitBrowserAppOptions,
125
132
  ): Promise<BrowserAppContext> {
126
- const { rscStream, deps, storeOptions, linkInterception = true, themeConfig, initialTheme } = options;
133
+ const {
134
+ rscStream,
135
+ deps,
136
+ storeOptions,
137
+ linkInterception = true,
138
+ themeConfig,
139
+ initialTheme,
140
+ } = options;
127
141
 
128
142
  // Load initial payload from SSR-injected __FLIGHT_DATA__
129
143
  const initialPayload =
@@ -131,8 +145,10 @@ export async function initBrowserApp(
131
145
 
132
146
  // Extract themeConfig and initialTheme from payload if not explicitly provided
133
147
  // This allows virtual entries to work without importing the router
134
- const effectiveThemeConfig = themeConfig ?? initialPayload.metadata?.themeConfig ?? null;
135
- const effectiveInitialTheme = initialTheme ?? initialPayload.metadata?.initialTheme;
148
+ const effectiveThemeConfig =
149
+ themeConfig ?? initialPayload.metadata?.themeConfig ?? null;
150
+ const effectiveInitialTheme =
151
+ initialTheme ?? initialPayload.metadata?.initialTheme;
136
152
 
137
153
  // Get initial segments and compute history key from current URL
138
154
  const initialSegments = (initialPayload.metadata?.segments ??
@@ -153,15 +169,12 @@ export async function initBrowserApp(
153
169
  initialLocation: new URL(window.location.href),
154
170
  });
155
171
 
156
- // Initialize segments state BEFORE hydration to avoid mismatch
157
- initSegmentsSync(initialPayload.metadata?.matched, initialPayload.metadata?.pathname);
158
-
159
- // Initialize theme config for MetaTags (must match SSR state)
160
- initThemeConfigSync(effectiveThemeConfig);
161
-
162
172
  // Initialize event controller with segment order (even without handles)
163
173
  eventController.setHandleData({}, initialPayload.metadata?.matched);
164
174
 
175
+ // Initialize route params
176
+ eventController.setParams(initialPayload.metadata?.params ?? {});
177
+
165
178
  // Initialize handle data from initial payload BEFORE hydration
166
179
  // This ensures useHandle returns correct data during hydration to avoid mismatch
167
180
  // The handles property is an async generator that yields on each push
@@ -171,16 +184,17 @@ export async function initBrowserApp(
171
184
  for await (const handleData of handlesGenerator) {
172
185
  lastHandleData = handleData;
173
186
  }
174
- // Initialize both event controller AND module-level SSR state for hydration compatibility
175
- eventController.setHandleData(lastHandleData, initialPayload.metadata?.matched);
176
- initHandleDataSync(lastHandleData, initialPayload.metadata?.matched);
187
+ // Initialize event controller with initial handle state before hydration.
188
+ eventController.setHandleData(
189
+ lastHandleData,
190
+ initialPayload.metadata?.matched,
191
+ );
177
192
 
178
193
  // Update the initial cache entry with the processed handleData
179
194
  // The cache entry was created by createNavigationStore but without handleData
180
195
  store.updateCacheHandleData(initialHistoryKey, lastHandleData);
181
196
  }
182
197
 
183
-
184
198
  // Create composable utilities
185
199
  const client = createNavigationClient(deps);
186
200
 
@@ -188,12 +202,27 @@ export async function initBrowserApp(
188
202
  const rootLayout = initialPayload.metadata?.rootLayout;
189
203
  const version = initialPayload.metadata?.version;
190
204
 
205
+ // Initialize the localStorage state key for cache invalidation.
206
+ // Uses the build version so a new deploy automatically busts all cached prefetches.
207
+ initRangoState(version ?? "0");
208
+
209
+ // Initialize the in-memory prefetch cache TTL from server config.
210
+ // A value of 0 disables the cache; undefined falls back to the module default.
211
+ const prefetchCacheTTL = initialPayload.metadata?.prefetchCacheTTL;
212
+ if (prefetchCacheTTL !== undefined) {
213
+ initPrefetchCache(prefetchCacheTTL);
214
+ }
215
+
191
216
  // Create a bound renderSegments that includes rootLayout
192
217
  const renderSegments = (
193
218
  segments: ResolvedSegment[],
194
- options?: RenderSegmentsOptions
219
+ options?: RenderSegmentsOptions,
195
220
  ) => baseRenderSegments(segments, { ...options, rootLayout });
196
221
 
222
+ // Lazy reference for navigation bridge — the action bridge is created first
223
+ // but may need to trigger SPA navigation for action redirects.
224
+ let navigateFn: ((url: string, options?: any) => Promise<void>) | null = null;
225
+
197
226
  // Setup server action bridge
198
227
  const actionBridge = createServerActionBridge({
199
228
  store,
@@ -203,6 +232,13 @@ export async function initBrowserApp(
203
232
  onUpdate: (update) => store.emitUpdate(update),
204
233
  renderSegments,
205
234
  version,
235
+ onNavigate: (url, options) => {
236
+ if (!navigateFn) {
237
+ window.location.href = url;
238
+ return Promise.resolve();
239
+ }
240
+ return navigateFn(url, options);
241
+ },
206
242
  });
207
243
  actionBridge.register();
208
244
 
@@ -216,6 +252,9 @@ export async function initBrowserApp(
216
252
  version,
217
253
  });
218
254
 
255
+ // Connect action redirect → navigation bridge (now that both are initialized)
256
+ navigateFn = (url, options) => navigationBridge.navigate(url, options);
257
+
219
258
  // Optionally enable global link interception
220
259
  if (linkInterception) {
221
260
  navigationBridge.registerLinkInterception();
@@ -224,47 +263,123 @@ export async function initBrowserApp(
224
263
  // Build initial tree with rootLayout
225
264
  const initialTree = renderSegments(initialPayload.metadata!.segments);
226
265
 
227
- // Setup HMR
266
+ // Setup HMR with debounce — burst saves (format-on-save, rapid edits)
267
+ // fire many rsc:update events in quick succession. Without debouncing,
268
+ // each event triggers a fetchPartial() which on slow routes can pile up
269
+ // and overwhelm the worker (cross-request promise issues, 500s).
228
270
  if (import.meta.hot) {
229
- import.meta.hot.on("rsc:update", async () => {
230
- console.log("[RSCRouter] HMR: Server update, refetching RSC");
231
-
232
- const handle = eventController.startNavigation(window.location.href, {
233
- replace: true,
234
- });
235
- const streamingToken = handle.startStreaming();
236
-
237
- try {
238
- const { payload, streamComplete } = await client.fetchPartial({
239
- targetUrl: window.location.href,
240
- segmentIds: [],
241
- previousUrl: store.getSegmentState().currentUrl,
242
- });
271
+ let hmrTimer: ReturnType<typeof setTimeout> | null = null;
272
+ let hmrAbort: AbortController | null = null;
273
+
274
+ import.meta.hot.on("rsc:update", () => {
275
+ // Cancel any pending debounce timer
276
+ if (hmrTimer !== null) {
277
+ clearTimeout(hmrTimer);
278
+ }
279
+
280
+ // Abort any in-flight HMR fetch so it doesn't race with the next one
281
+ if (hmrAbort) {
282
+ hmrAbort.abort();
283
+ hmrAbort = null;
284
+ }
243
285
 
244
- if (payload.metadata?.isPartial) {
245
- const segments = payload.metadata.segments || [];
246
- const matched = payload.metadata.matched || [];
286
+ // Debounce: wait 200ms of quiet before fetching
287
+ hmrTimer = setTimeout(async () => {
288
+ hmrTimer = null;
289
+
290
+ // Don't interrupt an active user navigation — startNavigation()
291
+ // would abort it and refetch the old URL (window.location.href
292
+ // hasn't updated yet). The user's navigation will pick up the
293
+ // new server code when it completes. isNavigating covers the
294
+ // full lifecycle (fetching + streaming, before commit) without
295
+ // blocking on server actions.
296
+ if (eventController.getState().isNavigating) {
297
+ console.log("[RSCRouter] HMR: Skipping — navigation in progress");
298
+ return;
299
+ }
247
300
 
248
- store.setSegmentIds(matched);
249
- store.setCurrentUrl(window.location.href);
301
+ console.log("[RSCRouter] HMR: Server update, refetching RSC");
250
302
 
251
- const historyKey = generateHistoryKey(window.location.href);
252
- store.setHistoryKey(historyKey);
253
- const currentHandleData = eventController.getHandleState().data;
254
- store.cacheSegmentsForHistory(historyKey, segments, currentHandleData);
303
+ const abort = new AbortController();
304
+ hmrAbort = abort;
255
305
 
256
- store.emitUpdate({
257
- root: renderSegments(segments),
258
- metadata: payload.metadata,
306
+ const handle = eventController.startNavigation(window.location.href, {
307
+ replace: true,
308
+ });
309
+ const streamingToken = handle.startStreaming();
310
+
311
+ const interceptSourceUrl = store.getInterceptSourceUrl();
312
+
313
+ try {
314
+ const { payload, streamComplete } = await client.fetchPartial({
315
+ targetUrl: window.location.href,
316
+ segmentIds: [],
317
+ previousUrl: store.getSegmentState().currentUrl,
318
+ interceptSourceUrl: interceptSourceUrl || undefined,
319
+ hmr: true,
320
+ signal: abort.signal,
259
321
  });
260
- }
261
322
 
262
- await streamComplete;
263
- } finally {
264
- streamingToken.end();
265
- }
266
- handle.complete(new URL(window.location.href));
267
- console.log("[RSCRouter] HMR: RSC stream complete");
323
+ if (abort.signal.aborted) return;
324
+
325
+ // If the server returned a non-RSC response (404, 500 without
326
+ // error boundary), the payload won't have valid metadata.
327
+ // Reload to recover rather than leaving the page stale.
328
+ if (!payload.metadata) {
329
+ throw new Error("HMR refetch returned invalid payload");
330
+ }
331
+
332
+ if (payload.metadata?.isPartial) {
333
+ const segments = payload.metadata.segments || [];
334
+ const matched = payload.metadata.matched || [];
335
+
336
+ // Derive intercept state from the returned payload, not the
337
+ // pre-fetch store snapshot. If the HMR edit removed intercept
338
+ // behavior, the response won't contain intercept segments.
339
+ const responseIsIntercept = segments.some(isInterceptSegment);
340
+
341
+ // Sync store intercept state with what the server returned
342
+ if (!responseIsIntercept && interceptSourceUrl) {
343
+ store.setInterceptSourceUrl(null);
344
+ }
345
+
346
+ store.setSegmentIds(matched);
347
+ store.setCurrentUrl(window.location.href);
348
+
349
+ const historyKey = generateHistoryKey(window.location.href, {
350
+ intercept: responseIsIntercept,
351
+ });
352
+ store.setHistoryKey(historyKey);
353
+ const currentHandleData = eventController.getHandleState().data;
354
+ store.cacheSegmentsForHistory(
355
+ historyKey,
356
+ segments,
357
+ currentHandleData,
358
+ );
359
+
360
+ const { main, intercept } = splitInterceptSegments(segments);
361
+ store.emitUpdate({
362
+ root: renderSegments(main, {
363
+ interceptSegments: intercept.length > 0 ? intercept : undefined,
364
+ }),
365
+ metadata: payload.metadata,
366
+ });
367
+ }
368
+
369
+ await streamComplete;
370
+ handle.complete(new URL(window.location.href));
371
+ console.log("[RSCRouter] HMR: RSC stream complete");
372
+ } catch (err) {
373
+ if (abort.signal.aborted) return;
374
+ console.warn("[RSCRouter] HMR: Refetch failed, reloading page", err);
375
+ window.location.reload();
376
+ return;
377
+ } finally {
378
+ if (hmrAbort === abort) hmrAbort = null;
379
+ streamingToken.end();
380
+ handle[Symbol.dispose]();
381
+ }
382
+ }, 200);
268
383
  });
269
384
  }
270
385
 
@@ -278,6 +393,7 @@ export async function initBrowserApp(
278
393
  themeConfig: effectiveThemeConfig,
279
394
  initialTheme: effectiveInitialTheme,
280
395
  warmupEnabled: initialPayload.metadata?.warmupEnabled ?? true,
396
+ version,
281
397
  };
282
398
  browserAppContext = context;
283
399
 
@@ -290,7 +406,7 @@ export async function initBrowserApp(
290
406
  export function getBrowserAppContext(): BrowserAppContext {
291
407
  if (!browserAppContext) {
292
408
  throw new Error(
293
- "RSCRouter: initBrowserApp() must be called before rendering RSCRouter"
409
+ "RSCRouter: initBrowserApp() must be called before rendering RSCRouter",
294
410
  );
295
411
  }
296
412
  return browserAppContext;
@@ -333,18 +449,35 @@ export interface RSCRouterProps {}
333
449
  * ```
334
450
  */
335
451
  export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
336
- const { store, eventController, bridge, initialPayload, initialTree, themeConfig, initialTheme, warmupEnabled } =
337
- getBrowserAppContext();
452
+ const {
453
+ store,
454
+ eventController,
455
+ bridge,
456
+ initialPayload,
457
+ initialTree,
458
+ themeConfig,
459
+ initialTheme,
460
+ warmupEnabled,
461
+ version,
462
+ } = getBrowserAppContext();
463
+
464
+ // Signal that the React tree has hydrated. useEffect only fires after
465
+ // hydration completes, so this attribute is a stable readiness marker
466
+ // that does not depend on React internals like __reactFiber.
467
+ React.useEffect(() => {
468
+ document.documentElement.dataset.hydrated = "";
469
+ }, []);
338
470
 
339
471
  return (
340
472
  <NavigationProvider
341
473
  store={store}
342
474
  eventController={eventController}
343
- initialPayload={{ ...initialPayload, root: initialTree }}
475
+ initialPayload={{ root: initialTree, metadata: initialPayload.metadata! }}
344
476
  bridge={bridge}
345
477
  themeConfig={themeConfig}
346
478
  initialTheme={initialTheme}
347
479
  warmupEnabled={warmupEnabled}
480
+ version={version}
348
481
  />
349
482
  );
350
483
  }
@@ -8,8 +8,27 @@
8
8
  * - Supports hash link scrolling
9
9
  */
10
10
 
11
+ import { debugLog } from "./logging.js";
12
+
13
+ /**
14
+ * Defers a callback to the next animation frame.
15
+ * Falls back to setTimeout(0) in environments without requestAnimationFrame.
16
+ */
17
+ const deferToNextPaint: (fn: () => void) => void =
18
+ typeof requestAnimationFrame === "function"
19
+ ? requestAnimationFrame
20
+ : (fn) => setTimeout(fn, 0);
21
+
11
22
  const SCROLL_STORAGE_KEY = "rsc-router-scroll-positions";
12
23
 
24
+ /**
25
+ * Maximum number of scroll position entries to retain.
26
+ * When exceeded, the oldest entries (by insertion order) are evicted.
27
+ * 200 entries is well within sessionStorage limits while covering
28
+ * realistic back/forward navigation depth.
29
+ */
30
+ const MAX_SCROLL_ENTRIES = 200;
31
+
13
32
  /**
14
33
  * Interval for polling scroll restoration during streaming (ms).
15
34
  * If content is still loading and we can't scroll to saved position,
@@ -29,6 +48,13 @@ const SCROLL_POLL_TIMEOUT_MS = 5000;
29
48
  */
30
49
  let savedScrollPositions: Record<string, number> = {};
31
50
 
51
+ /**
52
+ * Tracks insertion order of scroll position keys for LRU eviction.
53
+ * Most recent entries are at the end of the array.
54
+ * When a key is updated, it is moved to the end.
55
+ */
56
+ let scrollKeyOrder: string[] = [];
57
+
32
58
  /**
33
59
  * Whether scroll restoration has been initialized
34
60
  */
@@ -37,9 +63,12 @@ let initialized = false;
37
63
  /**
38
64
  * Custom getKey function for determining scroll restoration key
39
65
  */
40
- type GetScrollKeyFunction = (
41
- location: { pathname: string; search: string; hash: string; key: string }
42
- ) => string;
66
+ type GetScrollKeyFunction = (location: {
67
+ pathname: string;
68
+ search: string;
69
+ hash: string;
70
+ key: string;
71
+ }) => string;
43
72
 
44
73
  let customGetKey: GetScrollKeyFunction | null = null;
45
74
 
@@ -99,9 +128,13 @@ export function initScrollRestoration(options?: {
99
128
  const stored = sessionStorage.getItem(SCROLL_STORAGE_KEY);
100
129
  if (stored) {
101
130
  savedScrollPositions = JSON.parse(stored);
131
+ // Rebuild key order from loaded positions.
132
+ // Exact original order is lost across page loads, but this is
133
+ // acceptable -- the important invariant is bounded size.
134
+ scrollKeyOrder = Object.keys(savedScrollPositions);
102
135
  }
103
136
  } catch (e) {
104
- // Ignore parse errors
137
+ // Ignore parse errors, start with empty state
105
138
  }
106
139
 
107
140
  // Ensure current history entry has a key
@@ -117,31 +150,82 @@ export function initScrollRestoration(options?: {
117
150
 
118
151
  window.addEventListener("pagehide", handlePageHide);
119
152
 
120
- console.log("[Scroll] Initialized, loaded positions:", Object.keys(savedScrollPositions).length);
153
+ debugLog(
154
+ "[Scroll] Initialized, loaded positions:",
155
+ Object.keys(savedScrollPositions).length,
156
+ );
121
157
 
122
158
  return () => {
159
+ cancelScrollRestorationPolling();
123
160
  window.removeEventListener("pagehide", handlePageHide);
124
161
  window.history.scrollRestoration = "auto";
125
162
  initialized = false;
163
+ savedScrollPositions = {};
164
+ scrollKeyOrder = [];
126
165
  };
127
166
  }
128
167
 
129
168
  /**
130
- * Save the current scroll position for the current history entry
169
+ * Save the current scroll position for the current history entry.
170
+ * Maintains bounded size by evicting oldest entries when the limit is exceeded.
131
171
  */
132
172
  export function saveCurrentScrollPosition(): void {
133
173
  const key = getScrollKey();
174
+
175
+ // If this key already exists, remove it from its current position
176
+ // in the order array so it can be re-appended at the end (most recent).
177
+ const existingIndex = scrollKeyOrder.indexOf(key);
178
+ if (existingIndex !== -1) {
179
+ scrollKeyOrder.splice(existingIndex, 1);
180
+ }
181
+
134
182
  savedScrollPositions[key] = window.scrollY;
183
+ scrollKeyOrder.push(key);
184
+
185
+ // Evict oldest entries if we exceed the limit
186
+ while (scrollKeyOrder.length > MAX_SCROLL_ENTRIES) {
187
+ const oldestKey = scrollKeyOrder.shift()!;
188
+ delete savedScrollPositions[oldestKey];
189
+ }
135
190
  }
136
191
 
137
192
  /**
138
- * Persist scroll positions to sessionStorage
193
+ * Persist scroll positions to sessionStorage.
194
+ * If the write fails due to quota exceeded, progressively evict the oldest
195
+ * entries and retry until it succeeds or the store is empty.
139
196
  */
140
197
  function persistToSessionStorage(): void {
141
198
  try {
142
- sessionStorage.setItem(SCROLL_STORAGE_KEY, JSON.stringify(savedScrollPositions));
199
+ sessionStorage.setItem(
200
+ SCROLL_STORAGE_KEY,
201
+ JSON.stringify(savedScrollPositions),
202
+ );
143
203
  } catch (e) {
144
- console.warn("[Scroll] Failed to persist to sessionStorage:", e);
204
+ // Likely QuotaExceededError. Evict oldest entries and retry.
205
+ const evictCount = Math.max(1, Math.floor(scrollKeyOrder.length / 4));
206
+ for (let i = 0; i < evictCount && scrollKeyOrder.length > 0; i++) {
207
+ const oldestKey = scrollKeyOrder.shift()!;
208
+ delete savedScrollPositions[oldestKey];
209
+ }
210
+
211
+ try {
212
+ sessionStorage.setItem(
213
+ SCROLL_STORAGE_KEY,
214
+ JSON.stringify(savedScrollPositions),
215
+ );
216
+ } catch (retryErr) {
217
+ // Storage still full after eviction. Clear our key entirely so we
218
+ // don't block other sessionStorage consumers.
219
+ console.warn(
220
+ "[Scroll] Failed to persist to sessionStorage after eviction, clearing scroll data:",
221
+ retryErr,
222
+ );
223
+ try {
224
+ sessionStorage.removeItem(SCROLL_STORAGE_KEY);
225
+ } catch {
226
+ // Nothing more we can do
227
+ }
228
+ }
145
229
  }
146
230
  }
147
231
 
@@ -189,50 +273,35 @@ export function restoreScrollPosition(options?: {
189
273
  return false;
190
274
  }
191
275
 
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
276
+ // If streaming, poll until streaming ends then scroll to saved position
207
277
  if (options?.retryIfStreaming && options?.isStreaming?.()) {
208
278
  const startTime = Date.now();
209
279
 
210
280
  pendingPollInterval = setInterval(() => {
211
- // Stop if we've exceeded the timeout
212
281
  if (Date.now() - startTime > SCROLL_POLL_TIMEOUT_MS) {
213
- console.log("[Scroll] Polling timeout, giving up");
282
+ debugLog("[Scroll] Polling timeout, giving up");
214
283
  cancelScrollRestorationPolling();
215
284
  return;
216
285
  }
217
286
 
218
- // Stop if streaming ended
219
287
  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
288
  window.scrollTo(0, savedY);
229
- console.log("[Scroll] Poll restored position:", savedY);
289
+ debugLog("[Scroll] Restored after streaming:", savedY);
230
290
  cancelScrollRestorationPolling();
231
291
  }
232
292
  }, SCROLL_POLL_INTERVAL_MS);
293
+
294
+ return true;
233
295
  }
234
296
 
235
- return false;
297
+ // Not streaming — scroll after React commits and browser paints.
298
+ // startTransition defers the DOM commit, so scrolling synchronously
299
+ // would be overwritten when React replaces the content.
300
+ deferToNextPaint(() => {
301
+ window.scrollTo(0, savedY);
302
+ debugLog("[Scroll] Restored position:", savedY, "for key:", key);
303
+ });
304
+ return true;
236
305
  }
237
306
 
238
307
  /**
@@ -249,7 +318,7 @@ export function scrollToHash(): boolean {
249
318
  const element = document.getElementById(id);
250
319
  if (element) {
251
320
  element.scrollIntoView();
252
- console.log("[Scroll] Scrolled to hash element:", id);
321
+ debugLog("[Scroll] Scrolled to hash element:", id);
253
322
  return true;
254
323
  }
255
324
  } catch (e) {
@@ -306,13 +375,17 @@ export function handleNavigationEnd(options: {
306
375
  // Fall through to hash or top if no saved position
307
376
  }
308
377
 
309
- // Try hash scrolling first
310
- if (scrollToHash()) {
311
- return;
312
- }
378
+ // Defer hash and scroll-to-top to after React paints the new content,
379
+ // so the user doesn't see the current page jump before the new route appears.
380
+ deferToNextPaint(() => {
381
+ // Try hash scrolling first
382
+ if (scrollToHash()) {
383
+ return;
384
+ }
313
385
 
314
- // Default: scroll to top
315
- scrollToTop();
386
+ // Default: scroll to top
387
+ scrollToTop();
388
+ });
316
389
  }
317
390
 
318
391
  /**