@rangojs/router 0.0.0-experimental.9 → 0.0.0-experimental.963406dd

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 (1109) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +942 -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 +1619 -155
  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 +4916 -2234
  798. package/dist/vite/index.js.bak +5448 -0
  799. package/dist/vite/index.js.map +1 -0
  800. package/dist/vite/index.named-routes.gen.ts +103 -0
  801. package/dist/vite/package-resolution.d.ts +43 -0
  802. package/dist/vite/package-resolution.d.ts.map +1 -0
  803. package/dist/vite/package-resolution.js +112 -0
  804. package/dist/vite/package-resolution.js.map +1 -0
  805. package/dist/vite/virtual-entries.d.ts +25 -0
  806. package/dist/vite/virtual-entries.d.ts.map +1 -0
  807. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  808. package/dist/vite/virtual-entries.js.map +1 -0
  809. package/package.json +70 -63
  810. package/skills/breadcrumbs/SKILL.md +250 -0
  811. package/skills/cache-guide/SKILL.md +294 -0
  812. package/skills/caching/SKILL.md +93 -23
  813. package/skills/composability/SKILL.md +172 -0
  814. package/skills/debug-manifest/SKILL.md +12 -8
  815. package/skills/document-cache/SKILL.md +18 -16
  816. package/skills/fonts/SKILL.md +6 -4
  817. package/skills/hooks/SKILL.md +333 -71
  818. package/skills/host-router/SKILL.md +218 -0
  819. package/skills/intercept/SKILL.md +131 -8
  820. package/skills/layout/SKILL.md +100 -3
  821. package/skills/links/SKILL.md +77 -16
  822. package/skills/loader/SKILL.md +404 -44
  823. package/skills/middleware/SKILL.md +173 -34
  824. package/skills/mime-routes/SKILL.md +15 -11
  825. package/skills/parallel/SKILL.md +204 -1
  826. package/skills/prerender/SKILL.md +467 -65
  827. package/skills/rango/SKILL.md +85 -21
  828. package/skills/response-routes/SKILL.md +144 -91
  829. package/skills/route/SKILL.md +257 -14
  830. package/skills/router-setup/SKILL.md +210 -32
  831. package/skills/theme/SKILL.md +9 -8
  832. package/skills/typesafety/SKILL.md +326 -87
  833. package/skills/use-cache/SKILL.md +324 -0
  834. package/src/__internal.ts +102 -4
  835. package/src/bin/rango.ts +312 -15
  836. package/src/browser/action-coordinator.ts +97 -0
  837. package/src/browser/action-response-classifier.ts +99 -0
  838. package/src/browser/app-version.ts +14 -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 +296 -558
  846. package/src/browser/navigation-client.ts +178 -71
  847. package/src/browser/navigation-store.ts +73 -55
  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 +328 -313
  851. package/src/browser/prefetch/cache.ts +206 -0
  852. package/src/browser/prefetch/fetch.ts +150 -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 +227 -71
  859. package/src/browser/react/NavigationProvider.tsx +87 -11
  860. package/src/browser/react/context.ts +11 -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 +30 -120
  871. package/src/browser/react/use-link-status.ts +6 -5
  872. package/src/browser/react/use-navigation.ts +22 -63
  873. package/src/browser/react/use-params.ts +65 -0
  874. package/src/browser/react/use-pathname.ts +47 -0
  875. package/src/browser/react/use-router.ts +76 -0
  876. package/src/browser/react/use-search-params.ts +56 -0
  877. package/src/browser/react/use-segments.ts +80 -97
  878. package/src/browser/response-adapter.ts +73 -0
  879. package/src/browser/rsc-router.tsx +214 -60
  880. package/src/browser/scroll-restoration.ts +127 -52
  881. package/src/browser/segment-reconciler.ts +221 -0
  882. package/src/browser/segment-structure-assert.ts +16 -0
  883. package/src/browser/server-action-bridge.ts +510 -603
  884. package/src/browser/shallow.ts +6 -1
  885. package/src/browser/types.ts +139 -48
  886. package/src/browser/validate-redirect-origin.ts +29 -0
  887. package/src/build/generate-manifest.ts +84 -23
  888. package/src/build/generate-route-types.ts +39 -752
  889. package/src/build/index.ts +6 -5
  890. package/src/build/route-trie.ts +39 -13
  891. package/src/build/route-types/ast-helpers.ts +25 -0
  892. package/src/build/route-types/ast-route-extraction.ts +98 -0
  893. package/src/build/route-types/codegen.ts +102 -0
  894. package/src/build/route-types/include-resolution.ts +418 -0
  895. package/src/build/route-types/param-extraction.ts +48 -0
  896. package/src/build/route-types/per-module-writer.ts +128 -0
  897. package/src/build/route-types/router-processing.ts +618 -0
  898. package/src/build/route-types/scan-filter.ts +85 -0
  899. package/src/build/runtime-discovery.ts +231 -0
  900. package/src/cache/background-task.ts +34 -0
  901. package/src/cache/cache-key-utils.ts +44 -0
  902. package/src/cache/cache-policy.ts +125 -0
  903. package/src/cache/cache-runtime.ts +342 -0
  904. package/src/cache/cache-scope.ts +167 -307
  905. package/src/cache/cf/cf-cache-store.ts +571 -17
  906. package/src/cache/cf/index.ts +13 -3
  907. package/src/cache/document-cache.ts +116 -77
  908. package/src/cache/handle-capture.ts +81 -0
  909. package/src/cache/handle-snapshot.ts +41 -0
  910. package/src/cache/index.ts +1 -15
  911. package/src/cache/memory-segment-store.ts +191 -13
  912. package/src/cache/profile-registry.ts +73 -0
  913. package/src/cache/read-through-swr.ts +134 -0
  914. package/src/cache/segment-codec.ts +256 -0
  915. package/src/cache/taint.ts +153 -0
  916. package/src/cache/types.ts +72 -122
  917. package/src/client.rsc.tsx +3 -1
  918. package/src/client.tsx +83 -179
  919. package/src/component-utils.ts +4 -4
  920. package/src/components/DefaultDocument.tsx +5 -1
  921. package/src/context-var.ts +156 -0
  922. package/src/debug.ts +19 -9
  923. package/src/errors.ts +77 -7
  924. package/src/handle.ts +55 -10
  925. package/src/handles/MetaTags.tsx +73 -20
  926. package/src/handles/breadcrumbs.ts +66 -0
  927. package/src/handles/index.ts +1 -0
  928. package/src/handles/meta.ts +30 -13
  929. package/src/host/cookie-handler.ts +21 -15
  930. package/src/host/errors.ts +8 -8
  931. package/src/host/index.ts +4 -7
  932. package/src/host/pattern-matcher.ts +27 -27
  933. package/src/host/router.ts +61 -39
  934. package/src/host/testing.ts +8 -8
  935. package/src/host/types.ts +15 -7
  936. package/src/host/utils.ts +1 -1
  937. package/src/href-client.ts +65 -45
  938. package/src/index.rsc.ts +135 -21
  939. package/src/index.ts +175 -51
  940. package/src/internal-debug.ts +11 -0
  941. package/src/loader.rsc.ts +25 -143
  942. package/src/loader.ts +27 -10
  943. package/src/network-error-thrower.tsx +3 -1
  944. package/src/outlet-provider.tsx +45 -0
  945. package/src/prerender/param-hash.ts +4 -2
  946. package/src/prerender/store.ts +159 -13
  947. package/src/prerender.ts +397 -29
  948. package/src/reverse.ts +205 -121
  949. package/src/root-error-boundary.tsx +41 -29
  950. package/src/route-content-wrapper.tsx +7 -4
  951. package/src/route-definition/dsl-helpers.ts +982 -0
  952. package/src/route-definition/helper-factories.ts +200 -0
  953. package/src/route-definition/helpers-types.ts +434 -0
  954. package/src/route-definition/index.ts +55 -0
  955. package/src/route-definition/redirect.ts +101 -0
  956. package/src/route-definition/resolve-handler-use.ts +149 -0
  957. package/src/route-definition.ts +1 -1431
  958. package/src/route-map-builder.ts +162 -123
  959. package/src/route-name.ts +53 -0
  960. package/src/route-types.ts +59 -9
  961. package/src/router/content-negotiation.ts +215 -0
  962. package/src/router/debug-manifest.ts +72 -0
  963. package/src/router/error-handling.ts +9 -9
  964. package/src/router/find-match.ts +160 -0
  965. package/src/router/handler-context.ts +435 -86
  966. package/src/router/intercept-resolution.ts +35 -20
  967. package/src/router/lazy-includes.ts +237 -0
  968. package/src/router/loader-resolution.ts +356 -128
  969. package/src/router/logging.ts +251 -0
  970. package/src/router/manifest.ts +89 -32
  971. package/src/router/match-api.ts +192 -258
  972. package/src/router/match-context.ts +4 -2
  973. package/src/router/match-handlers.ts +440 -0
  974. package/src/router/match-middleware/background-revalidation.ts +108 -93
  975. package/src/router/match-middleware/cache-lookup.ts +414 -86
  976. package/src/router/match-middleware/cache-store.ts +91 -29
  977. package/src/router/match-middleware/intercept-resolution.ts +48 -21
  978. package/src/router/match-middleware/segment-resolution.ts +73 -9
  979. package/src/router/match-pipelines.ts +10 -45
  980. package/src/router/match-result.ts +55 -33
  981. package/src/router/metrics.ts +240 -15
  982. package/src/router/middleware-cookies.ts +55 -0
  983. package/src/router/middleware-types.ts +220 -0
  984. package/src/router/middleware.ts +324 -369
  985. package/src/router/navigation-snapshot.ts +182 -0
  986. package/src/router/pattern-matching.ts +197 -41
  987. package/src/router/prerender-match.ts +502 -0
  988. package/src/router/preview-match.ts +98 -0
  989. package/src/router/request-classification.ts +310 -0
  990. package/src/router/revalidation.ts +137 -38
  991. package/src/router/route-snapshot.ts +245 -0
  992. package/src/router/router-context.ts +41 -21
  993. package/src/router/router-interfaces.ts +484 -0
  994. package/src/router/router-options.ts +618 -0
  995. package/src/router/router-registry.ts +24 -0
  996. package/src/router/segment-resolution/fresh.ts +743 -0
  997. package/src/router/segment-resolution/helpers.ts +268 -0
  998. package/src/router/segment-resolution/loader-cache.ts +199 -0
  999. package/src/router/segment-resolution/revalidation.ts +1373 -0
  1000. package/src/router/segment-resolution/static-store.ts +67 -0
  1001. package/src/router/segment-resolution.ts +21 -1315
  1002. package/src/router/segment-wrappers.ts +291 -0
  1003. package/src/router/telemetry-otel.ts +299 -0
  1004. package/src/router/telemetry.ts +300 -0
  1005. package/src/router/timeout.ts +148 -0
  1006. package/src/router/trie-matching.ts +96 -29
  1007. package/src/router/types.ts +17 -9
  1008. package/src/router.ts +646 -1986
  1009. package/src/rsc/handler-context.ts +45 -0
  1010. package/src/rsc/handler.ts +853 -1111
  1011. package/src/rsc/helpers.ts +140 -6
  1012. package/src/rsc/index.ts +0 -20
  1013. package/src/rsc/loader-fetch.ts +229 -0
  1014. package/src/rsc/manifest-init.ts +90 -0
  1015. package/src/rsc/nonce.ts +14 -0
  1016. package/src/rsc/origin-guard.ts +141 -0
  1017. package/src/rsc/progressive-enhancement.ts +391 -0
  1018. package/src/rsc/response-error.ts +37 -0
  1019. package/src/rsc/response-route-handler.ts +347 -0
  1020. package/src/rsc/rsc-rendering.ts +246 -0
  1021. package/src/rsc/runtime-warnings.ts +42 -0
  1022. package/src/rsc/server-action.ts +356 -0
  1023. package/src/rsc/ssr-setup.ts +128 -0
  1024. package/src/rsc/types.ts +46 -11
  1025. package/src/search-params.ts +230 -0
  1026. package/src/segment-system.tsx +165 -17
  1027. package/src/server/context.ts +307 -56
  1028. package/src/server/cookie-store.ts +190 -0
  1029. package/src/server/fetchable-loader-store.ts +37 -0
  1030. package/src/server/handle-store.ts +113 -15
  1031. package/src/server/loader-registry.ts +24 -64
  1032. package/src/server/request-context.ts +607 -81
  1033. package/src/server.ts +35 -155
  1034. package/src/ssr/index.tsx +103 -30
  1035. package/src/static-handler.ts +126 -0
  1036. package/src/theme/ThemeProvider.tsx +21 -15
  1037. package/src/theme/ThemeScript.tsx +5 -5
  1038. package/src/theme/constants.ts +5 -2
  1039. package/src/theme/index.ts +4 -14
  1040. package/src/theme/theme-context.ts +4 -30
  1041. package/src/theme/theme-script.ts +21 -18
  1042. package/src/types/boundaries.ts +158 -0
  1043. package/src/types/cache-types.ts +198 -0
  1044. package/src/types/error-types.ts +192 -0
  1045. package/src/types/global-namespace.ts +100 -0
  1046. package/src/types/handler-context.ts +791 -0
  1047. package/src/types/index.ts +88 -0
  1048. package/src/types/loader-types.ts +210 -0
  1049. package/src/types/route-config.ts +170 -0
  1050. package/src/types/route-entry.ts +109 -0
  1051. package/src/types/segments.ts +150 -0
  1052. package/src/types.ts +1 -1757
  1053. package/src/urls/include-helper.ts +197 -0
  1054. package/src/urls/index.ts +53 -0
  1055. package/src/urls/path-helper-types.ts +346 -0
  1056. package/src/urls/path-helper.ts +364 -0
  1057. package/src/urls/pattern-types.ts +107 -0
  1058. package/src/urls/response-types.ts +116 -0
  1059. package/src/urls/type-extraction.ts +372 -0
  1060. package/src/urls/urls-function.ts +98 -0
  1061. package/src/urls.ts +1 -1282
  1062. package/src/use-loader.tsx +158 -81
  1063. package/src/vite/discovery/bundle-postprocess.ts +181 -0
  1064. package/src/vite/discovery/discover-routers.ts +348 -0
  1065. package/src/vite/discovery/prerender-collection.ts +439 -0
  1066. package/src/vite/discovery/route-types-writer.ts +258 -0
  1067. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1068. package/src/vite/discovery/state.ts +117 -0
  1069. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1070. package/src/vite/index.ts +15 -1963
  1071. package/src/vite/plugin-types.ts +103 -0
  1072. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1073. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1074. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1075. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
  1076. package/src/vite/plugins/expose-id-utils.ts +299 -0
  1077. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1078. package/src/vite/plugins/expose-ids/handler-transform.ts +209 -0
  1079. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1080. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1081. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1082. package/src/vite/plugins/expose-internal-ids.ts +781 -0
  1083. package/src/vite/plugins/performance-tracks.ts +88 -0
  1084. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1085. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1086. package/src/vite/plugins/version-injector.ts +83 -0
  1087. package/src/vite/plugins/version-plugin.ts +266 -0
  1088. package/src/vite/plugins/virtual-entries.ts +123 -0
  1089. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1090. package/src/vite/rango.ts +462 -0
  1091. package/src/vite/router-discovery.ts +918 -0
  1092. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1093. package/src/vite/utils/banner.ts +36 -0
  1094. package/src/vite/utils/bundle-analysis.ts +137 -0
  1095. package/src/vite/utils/manifest-utils.ts +70 -0
  1096. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1097. package/src/vite/utils/prerender-utils.ts +207 -0
  1098. package/src/vite/utils/shared-utils.ts +170 -0
  1099. package/CLAUDE.md +0 -43
  1100. package/src/browser/lru-cache.ts +0 -69
  1101. package/src/browser/request-controller.ts +0 -164
  1102. package/src/cache/memory-store.ts +0 -253
  1103. package/src/router.gen.ts +0 -6
  1104. package/src/urls.gen.ts +0 -8
  1105. package/src/vite/expose-handle-id.ts +0 -209
  1106. package/src/vite/expose-loader-id.ts +0 -426
  1107. package/src/vite/expose-location-state-id.ts +0 -177
  1108. package/src/vite/expose-prerender-handler-id.ts +0 -429
  1109. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -9,7 +9,8 @@ import {
9
9
  startTransition,
10
10
  } from "react";
11
11
  import { NavigationStoreContext } from "./context.js";
12
- import type { TrackedActionState, ActionLifecycleState } from "../types.js";
12
+ import { shallowEqual } from "./shallow-equal.js";
13
+ import type { TrackedActionState } from "../types.js";
13
14
  import { invariant } from "../../errors.js";
14
15
 
15
16
  /**
@@ -44,7 +45,7 @@ function normalizeActionId(actionId: string): string {
44
45
  export function getActionId(action: ServerActionFunction | string): string {
45
46
  invariant(
46
47
  typeof action === "function" || typeof action === "string",
47
- `useAction: action must be a function or string, got ${typeof action}`
48
+ `useAction: action must be a function or string, got ${typeof action}`,
48
49
  );
49
50
  const actionId = (action as any)?.$$id;
50
51
  if (actionId) {
@@ -72,7 +73,7 @@ Solutions:
72
73
  2. Use the action name as a string:
73
74
  const state = useAction("myAction");
74
75
 
75
- The string must match the exported function name from your "use server" file.`
76
+ The string must match the exported function name from your "use server" file.`,
76
77
  );
77
78
  }
78
79
 
@@ -126,19 +127,24 @@ export type ServerActionFunction = ((...args: any[]) => Promise<any>) & {
126
127
  * const error = useAction(addToCart, state => state.error);
127
128
  * ```
128
129
  *
130
+ * @note The selector is expected to be stable for a given hook instance.
131
+ * This hook tracks one projection of one action. Changing selector semantics
132
+ * for the same action ID without a new action event is not a supported pattern;
133
+ * use separate useAction() subscriptions if you need different projections.
134
+ *
129
135
  * @note Actions passed as props from server components lose their metadata
130
136
  * during RSC serialization. Use a string action name or import directly.
131
137
  */
132
138
  export function useAction(
133
- action: ServerActionFunction | string
139
+ action: ServerActionFunction | string,
134
140
  ): TrackedActionState;
135
141
  export function useAction<T>(
136
142
  action: ServerActionFunction | string,
137
- selector: (state: TrackedActionState) => T
143
+ selector: (state: TrackedActionState) => T,
138
144
  ): T;
139
145
  export function useAction<T>(
140
146
  action: ServerActionFunction | string,
141
- selector?: (state: TrackedActionState) => T
147
+ selector?: (state: TrackedActionState) => T,
142
148
  ): T | TrackedActionState {
143
149
  const ctx = useContext(NavigationStoreContext);
144
150
  const actionId =
@@ -161,7 +167,10 @@ export function useAction<T>(
161
167
  T | TrackedActionState
162
168
  >(null!);
163
169
 
164
- // Memoize the selector to avoid unnecessary re-subscriptions
170
+ // Ref keeps the latest selector for subscription callbacks without
171
+ // re-subscribing on every render. Selector changes themselves are not
172
+ // treated as a reactive input; this hook expects a stable selector and
173
+ // represents one subscription/projection for one action.
165
174
  const selectorRef = useRef(selector);
166
175
  selectorRef.current = selector;
167
176
 
@@ -169,6 +178,17 @@ export function useAction<T>(
169
178
  useEffect(() => {
170
179
  if (!ctx) return;
171
180
 
181
+ // Sync current state for the (possibly new) actionId so that switching
182
+ // actions on an idle page doesn't leave stale data from the old action.
183
+ const currentState = ctx.eventController.getActionState(actionId);
184
+ const currentSelected = selectorRef.current
185
+ ? selectorRef.current(currentState)
186
+ : currentState;
187
+ if (!shallowEqual(currentSelected, prevSelected.current)) {
188
+ prevSelected.current = currentSelected;
189
+ setBaseState(currentSelected);
190
+ }
191
+
172
192
  // Subscribe to action-specific updates
173
193
  const unsubscribe = ctx.eventController.subscribeToAction(
174
194
  actionId,
@@ -177,14 +197,14 @@ export function useAction<T>(
177
197
  ? selectorRef.current(state)
178
198
  : state;
179
199
 
180
- if (!isShallowEqual(selectedState, prevSelected.current)) {
200
+ if (!shallowEqual(selectedState, prevSelected.current)) {
181
201
  prevSelected.current = selectedState;
182
202
  setBaseState(selectedState);
183
203
  startTransition(() => {
184
204
  setOptimisticState(selectedState);
185
205
  });
186
206
  }
187
- }
207
+ },
188
208
  );
189
209
 
190
210
  return () => {
@@ -195,46 +215,4 @@ export function useAction<T>(
195
215
  return (optimisticState ?? baseState) as T | TrackedActionState;
196
216
  }
197
217
 
198
- function isShallowEqual<T, U>(selectedState: T, baseState: U): boolean {
199
- // If references are equal, they're shallow equal
200
- //@ts-expect-error -- TS doesn't like comparing generics
201
- if (selectedState === baseState) {
202
- return true;
203
- }
204
-
205
- // If either is null/undefined and they're not equal, they're not shallow equal
206
- if (selectedState == null || baseState == null) {
207
- return false;
208
- }
209
-
210
- // If types are different, they're not shallow equal
211
- if (typeof selectedState !== typeof baseState) {
212
- return false;
213
- }
214
-
215
- // For primitives, === comparison is sufficient (already checked above)
216
- if (typeof selectedState !== "object") {
217
- return false;
218
- }
219
-
220
- // For objects, compare keys and values shallowly
221
- const keysA = Object.keys(selectedState as object);
222
- const keysB = Object.keys(baseState as object);
223
-
224
- if (keysA.length !== keysB.length) {
225
- return false;
226
- }
227
-
228
- for (const key of keysA) {
229
- if (
230
- !Object.prototype.hasOwnProperty.call(baseState, key) ||
231
- (selectedState as any)[key] !== (baseState as any)[key]
232
- ) {
233
- return false;
234
- }
235
- }
236
-
237
- return true;
238
- }
239
-
240
218
  export type { TrackedActionState };
@@ -46,10 +46,12 @@ export interface ClientCacheControls {
46
46
  export function useClientCache(): ClientCacheControls {
47
47
  const ctx = useContext(NavigationStoreContext);
48
48
 
49
+ if (!ctx) {
50
+ throw new Error("useClientCache must be used within NavigationProvider");
51
+ }
52
+
49
53
  const clear = useCallback(() => {
50
- if (ctx?.store) {
51
- ctx.store.clearHistoryCache();
52
- }
54
+ ctx.store.clearHistoryCache();
53
55
  }, [ctx]);
54
56
 
55
57
  return { clear };
@@ -9,119 +9,10 @@ import {
9
9
  startTransition,
10
10
  } from "react";
11
11
  import type { Handle } from "../../handle.js";
12
- import { getCollectFn } from "../../handle.js";
12
+ import { collectHandleData } from "../../handle.js";
13
13
  import type { HandleData } from "../types.js";
14
14
  import { NavigationStoreContext } from "./context.js";
15
-
16
- /**
17
- * SSR module-level state.
18
- * Populated by initHandleDataSync before React renders.
19
- * Used by useState initializer during SSR.
20
- */
21
- let ssrHandleData: HandleData = {};
22
- let ssrSegmentOrder: string[] = [];
23
-
24
- /**
25
- * Filter segment IDs to only include routes and layouts.
26
- * Excludes parallels (contain .@) and loaders (contain D followed by digit).
27
- */
28
- function filterSegmentOrder(matched: string[]): string[] {
29
- return matched.filter((id) => {
30
- if (id.includes(".@")) return false;
31
- if (/D\d+\./.test(id)) return false;
32
- return true;
33
- });
34
- }
35
-
36
- /**
37
- * Resolve the collect function for a handle.
38
- * Handle objects are plain { __brand, $$id } - collect is stored in the registry
39
- * (populated when createHandle runs on the client).
40
- */
41
- function resolveCollect<T, A>(handle: Handle<T, A>): (segments: T[][]) => A {
42
- // Look up collect from the registry (populated when the handle module is imported).
43
- const registered = getCollectFn(handle.$$id);
44
- if (registered) {
45
- return registered as (segments: T[][]) => A;
46
- }
47
-
48
- // Fall back to default flat collect with a dev warning.
49
- if (process.env.NODE_ENV !== "production") {
50
- console.warn(
51
- `[rsc-router] Handle "${handle.$$id}" was passed as a prop but its collect ` +
52
- `function could not be resolved. Falling back to flat array. ` +
53
- `Import the handle module in a client component to register its collect function.`
54
- );
55
- }
56
- return ((segments: unknown[][]) => segments.flat()) as unknown as (segments: T[][]) => A;
57
- }
58
-
59
- /**
60
- * Collect handle data from segments and transform to final value.
61
- */
62
- function collectHandle<T, A>(
63
- handle: Handle<T, A>,
64
- data: HandleData,
65
- segmentOrder: string[]
66
- ): A {
67
- const collect = resolveCollect(handle);
68
- const segmentData = data[handle.$$id];
69
-
70
- if (!segmentData) {
71
- return collect([]);
72
- }
73
-
74
- // Build array of segment arrays in parent -> child order
75
- const segmentArrays: T[][] = [];
76
- for (const segmentId of segmentOrder) {
77
- const entries = segmentData[segmentId];
78
- if (entries && entries.length > 0) {
79
- segmentArrays.push(entries as T[]);
80
- }
81
- }
82
-
83
- // Call collect once with all segment data
84
- return collect(segmentArrays);
85
- }
86
-
87
- /**
88
- * Shallow equality check for selector results.
89
- */
90
- function shallowEqual<T>(a: T, b: T): boolean {
91
- if (Object.is(a, b)) return true;
92
- if (
93
- typeof a !== "object" ||
94
- a === null ||
95
- typeof b !== "object" ||
96
- b === null
97
- ) {
98
- return false;
99
- }
100
- const keysA = Object.keys(a);
101
- const keysB = Object.keys(b);
102
- if (keysA.length !== keysB.length) return false;
103
- for (const key of keysA) {
104
- if (
105
- !Object.hasOwn(b, key) ||
106
- !Object.is((a as any)[key], (b as any)[key])
107
- ) {
108
- return false;
109
- }
110
- }
111
- return true;
112
- }
113
-
114
- /**
115
- * Initialize handle data synchronously for SSR.
116
- * Called before rendering to populate state for useState initializer.
117
- *
118
- * @param data - Handle data from RSC payload
119
- * @param matched - Segment order for reduction
120
- */
121
- export function initHandleDataSync(data: HandleData, matched?: string[]): void {
122
- ssrHandleData = data;
123
- ssrSegmentOrder = filterSegmentOrder(matched ?? []);
124
- }
15
+ import { shallowEqual } from "./shallow-equal.js";
125
16
 
126
17
  /**
127
18
  * Hook to access collected handle data.
@@ -144,25 +35,24 @@ export function initHandleDataSync(data: HandleData, matched?: string[]): void {
144
35
  export function useHandle<T, A>(handle: Handle<T, A>): A;
145
36
  export function useHandle<T, A, S>(
146
37
  handle: Handle<T, A>,
147
- selector: (data: A) => S
38
+ selector: (data: A) => S,
148
39
  ): S;
149
40
  export function useHandle<T, A, S>(
150
41
  handle: Handle<T, A>,
151
- selector?: (data: A) => S
42
+ selector?: (data: A) => S,
152
43
  ): A | S {
153
44
  const ctx = useContext(NavigationStoreContext);
154
45
 
155
- // Initial state from SSR module state or event controller
46
+ // Initial state from context event controller, or empty fallback without provider.
156
47
  const [value, setValue] = useState<A | S>(() => {
157
- // During SSR, use module-level state
158
- if (typeof document === "undefined" || !ctx) {
159
- const collected = collectHandle(handle, ssrHandleData, ssrSegmentOrder);
48
+ if (!ctx) {
49
+ const collected = collectHandleData(handle, {}, []);
160
50
  return selector ? selector(collected) : collected;
161
51
  }
162
52
 
163
53
  // On client, use event controller state
164
54
  const state = ctx.eventController.getHandleState();
165
- const collected = collectHandle(handle, state.data, state.segmentOrder);
55
+ const collected = collectHandleData(handle, state.data, state.segmentOrder);
166
56
  return selector ? selector(collected) : collected;
167
57
  });
168
58
  const [optimisticValue, setOptimisticValue] = useOptimistic(value);
@@ -171,7 +61,7 @@ export function useHandle<T, A, S>(
171
61
  const prevValueRef = useRef(value);
172
62
  prevValueRef.current = value;
173
63
 
174
- // Memoize selector ref
64
+ // Ref keeps the latest selector without re-subscribing on every render.
175
65
  const selectorRef = useRef(selector);
176
66
  selectorRef.current = selector;
177
67
 
@@ -179,11 +69,31 @@ export function useHandle<T, A, S>(
179
69
  useEffect(() => {
180
70
  if (!ctx) return;
181
71
 
72
+ // Sync current state for the (possibly new) handle so that switching
73
+ // handles on an idle page doesn't leave stale data from the old handle.
74
+ const currentHandleState = ctx.eventController.getHandleState();
75
+ const currentCollected = collectHandleData(
76
+ handle,
77
+ currentHandleState.data,
78
+ currentHandleState.segmentOrder,
79
+ );
80
+ const currentValue = selectorRef.current
81
+ ? selectorRef.current(currentCollected)
82
+ : currentCollected;
83
+ if (!shallowEqual(currentValue, prevValueRef.current)) {
84
+ prevValueRef.current = currentValue;
85
+ setValue(currentValue);
86
+ }
87
+
182
88
  return ctx.eventController.subscribeToHandles(() => {
183
89
  const state = ctx.eventController.getHandleState();
184
90
  const isAction =
185
91
  ctx.eventController.getState().inflightActions.length > 0;
186
- const collected = collectHandle(handle, state.data, state.segmentOrder);
92
+ const collected = collectHandleData(
93
+ handle,
94
+ state.data,
95
+ state.segmentOrder,
96
+ );
187
97
  const nextValue = selectorRef.current
188
98
  ? selectorRef.current(collected)
189
99
  : collected;
@@ -16,7 +16,9 @@ import { NavigationStoreContext } from "./context.js";
16
16
  * Context for Link component to provide its destination URL
17
17
  * Used by useLinkStatus to determine if this specific link is pending
18
18
  */
19
- export const LinkContext: Context<string | null> = createContext<string | null>(null);
19
+ export const LinkContext: Context<string | null> = createContext<string | null>(
20
+ null,
21
+ );
20
22
 
21
23
  /**
22
24
  * Link status returned by useLinkStatus hook
@@ -46,7 +48,7 @@ function normalizeUrl(url: string, origin: string): string {
46
48
  function isPendingFor(
47
49
  linkTo: string | null,
48
50
  pendingUrl: string | null,
49
- origin: string
51
+ origin: string,
50
52
  ): boolean {
51
53
  if (linkTo === null || pendingUrl === null) {
52
54
  return false;
@@ -81,9 +83,8 @@ export function useLinkStatus(): LinkStatus {
81
83
  const ctx = useContext(NavigationStoreContext);
82
84
 
83
85
  // Get origin for URL normalization (stable across renders)
84
- const origin = typeof window !== "undefined"
85
- ? window.location.origin
86
- : "http://localhost";
86
+ const origin =
87
+ typeof window !== "undefined" ? window.location.origin : "http://localhost";
87
88
 
88
89
  // Base state for useOptimistic
89
90
  const [basePending, setBasePending] = useState<boolean>(() => {
@@ -9,36 +9,10 @@ import {
9
9
  useRef,
10
10
  } from "react";
11
11
  import { NavigationStoreContext } from "./context.js";
12
- import type { PublicNavigationState, NavigateOptions } from "../types.js";
12
+ import { shallowEqual } from "./shallow-equal.js";
13
+ import type { PublicNavigationState } from "../types.js";
13
14
  import type { DerivedNavigationState } from "../event-controller.js";
14
15
 
15
- /**
16
- * Shallow equality check for selector results
17
- */
18
- function shallowEqual<T>(a: T, b: T): boolean {
19
- if (Object.is(a, b)) return true;
20
- if (
21
- typeof a !== "object" ||
22
- a === null ||
23
- typeof b !== "object" ||
24
- b === null
25
- ) {
26
- return false;
27
- }
28
- const keysA = Object.keys(a);
29
- const keysB = Object.keys(b);
30
- if (keysA.length !== keysB.length) return false;
31
- for (const key of keysA) {
32
- if (
33
- !Object.hasOwn(b, key) ||
34
- !Object.is((a as any)[key], (b as any)[key])
35
- ) {
36
- return false;
37
- }
38
- }
39
- return true;
40
- }
41
-
42
16
  /**
43
17
  * Convert derived state to public version (strips inflightActions)
44
18
  */
@@ -47,45 +21,29 @@ function toPublicState(state: DerivedNavigationState): PublicNavigationState {
47
21
  return publicState;
48
22
  }
49
23
 
50
-
51
24
  /**
52
- * Navigation methods returned by useNavigation
53
- */
54
- export interface NavigationMethods {
55
- navigate: (url: string, options?: NavigateOptions) => Promise<void>;
56
- refresh: () => Promise<void>;
57
- }
58
-
59
- /**
60
- * Full value returned when no selector is provided
61
- */
62
- export type NavigationValue = PublicNavigationState & NavigationMethods;
63
-
64
- /**
65
- * Hook to access navigation state with optional selector for performance
25
+ * Hook to access reactive navigation state with optional selector for performance.
66
26
  *
67
- * Uses the event controller for reactive state management.
68
- * State is derived from source of truth (currentNavigation, inflightActions).
27
+ * Returns state only. For actions (push, replace, refresh, prefetch),
28
+ * use useRouter() instead.
69
29
  *
70
30
  * @example
71
31
  * ```tsx
72
- * const state = useNavigation(nav => nav.state);
32
+ * const { state, location } = useNavigation();
73
33
  * const isLoading = useNavigation(nav => nav.state === 'loading');
74
34
  * ```
75
35
  */
76
- export function useNavigation(): NavigationValue;
36
+ export function useNavigation(): PublicNavigationState;
77
37
  export function useNavigation<T>(
78
38
  selector: (state: PublicNavigationState) => T,
79
39
  ): T;
80
40
  export function useNavigation<T>(
81
41
  selector?: (state: PublicNavigationState) => T,
82
- ): T | NavigationValue {
42
+ ): T | PublicNavigationState {
83
43
  const ctx = useContext(NavigationStoreContext);
84
44
 
85
45
  if (!ctx) {
86
- throw new Error(
87
- "useNavigation must be used within NavigationStoreContext.Provider"
88
- );
46
+ throw new Error("useNavigation must be used within NavigationProvider");
89
47
  }
90
48
 
91
49
  // Base state for useOptimistic
@@ -98,13 +56,23 @@ export function useNavigation<T>(
98
56
  // useOptimistic allows immediate updates during transitions/actions
99
57
  const [value, setOptimisticValue] = useOptimistic(baseValue);
100
58
 
59
+ // Store selector in a ref so the subscription callback always uses the
60
+ // latest selector without re-subscribing on every render (inline functions
61
+ // have a new identity each render). This is event-driven by design: the
62
+ // value updates when the store emits, not when the selector changes.
63
+ // Between events there is nothing new to select from.
64
+ const selectorRef = useRef(selector);
65
+ selectorRef.current = selector;
66
+
101
67
  // Subscribe to event controller state changes (only runs on client)
102
68
  useEffect(() => {
103
69
  // Subscribe to updates from event controller
104
70
  return ctx.eventController.subscribe(() => {
105
71
  const currentState = ctx.eventController.getState();
106
72
  const publicState = toPublicState(currentState);
107
- const nextSelected = selector ? selector(publicState) : publicState;
73
+ const nextSelected = selectorRef.current
74
+ ? selectorRef.current(publicState)
75
+ : publicState;
108
76
 
109
77
  // Check if selected value has changed
110
78
  if (!shallowEqual(nextSelected, prevState.current)) {
@@ -125,16 +93,7 @@ export function useNavigation<T>(
125
93
  setBaseValue(nextSelected);
126
94
  }
127
95
  });
128
- }, [selector]);
129
-
130
- // If no selector, include navigation methods
131
- if (!selector) {
132
- return {
133
- ...(value as PublicNavigationState),
134
- navigate: ctx.navigate,
135
- refresh: ctx.refresh,
136
- };
137
- }
96
+ }, []);
138
97
 
139
- return value as T;
98
+ return value as T | PublicNavigationState;
140
99
  }
@@ -0,0 +1,65 @@
1
+ "use client";
2
+
3
+ import { useContext, useState, useEffect, useRef } from "react";
4
+ import { NavigationStoreContext } from "./context.js";
5
+ import { shallowEqual } from "./shallow-equal.js";
6
+
7
+ /**
8
+ * Hook to access the current route params.
9
+ *
10
+ * Returns the merged route params from the matched route.
11
+ * Updates when navigation completes, not during pending navigation.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * // Route: /products/:productId
16
+ * const params = useParams();
17
+ * // { productId: "123" }
18
+ *
19
+ * // With selector
20
+ * const productId = useParams(p => p.productId);
21
+ * ```
22
+ */
23
+ export function useParams(): Record<string, string>;
24
+ export function useParams<T>(
25
+ selector: (params: Record<string, string>) => T,
26
+ ): T;
27
+ export function useParams<T>(
28
+ selector?: (params: Record<string, string>) => T,
29
+ ): T | Record<string, string> {
30
+ const ctx = useContext(NavigationStoreContext);
31
+
32
+ const [value, setValue] = useState<T | Record<string, string>>(() => {
33
+ if (!ctx) {
34
+ return selector ? selector({}) : {};
35
+ }
36
+ const params = ctx.eventController.getParams();
37
+ return selector ? selector(params) : params;
38
+ });
39
+
40
+ const prevValue = useRef(value);
41
+ // Ref keeps the latest selector without re-subscribing. Event-driven by
42
+ // design: value updates on store events, not on selector identity change.
43
+ const selectorRef = useRef(selector);
44
+ selectorRef.current = selector;
45
+
46
+ useEffect(() => {
47
+ if (!ctx) return;
48
+
49
+ const update = () => {
50
+ const params = ctx.eventController.getParams();
51
+ const next = selectorRef.current ? selectorRef.current(params) : params;
52
+
53
+ if (!shallowEqual(next, prevValue.current)) {
54
+ prevValue.current = next;
55
+ setValue(next);
56
+ }
57
+ };
58
+
59
+ update();
60
+
61
+ return ctx.eventController.subscribe(update);
62
+ }, []);
63
+
64
+ return value;
65
+ }
@@ -0,0 +1,47 @@
1
+ "use client";
2
+
3
+ import { useContext, useState, useEffect, useRef } from "react";
4
+ import { NavigationStoreContext } from "./context.js";
5
+
6
+ /**
7
+ * Hook to access the current pathname.
8
+ *
9
+ * Returns the committed pathname string (excludes search params and hash).
10
+ * Updates when navigation completes, not during pending navigation.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * const pathname = usePathname();
15
+ * // "/products/123"
16
+ * ```
17
+ */
18
+ export function usePathname(): string {
19
+ const ctx = useContext(NavigationStoreContext);
20
+
21
+ const [pathname, setPathname] = useState<string>(() => {
22
+ if (!ctx) {
23
+ return "/";
24
+ }
25
+ return (ctx.eventController.getState().location as URL).pathname;
26
+ });
27
+
28
+ const prevPathname = useRef(pathname);
29
+
30
+ useEffect(() => {
31
+ if (!ctx) return;
32
+
33
+ const update = () => {
34
+ const next = (ctx.eventController.getState().location as URL).pathname;
35
+ if (next !== prevPathname.current) {
36
+ prevPathname.current = next;
37
+ setPathname(next);
38
+ }
39
+ };
40
+
41
+ update();
42
+
43
+ return ctx.eventController.subscribe(update);
44
+ }, []);
45
+
46
+ return pathname;
47
+ }