@rangojs/router 0.0.0-experimental.259 → 0.0.0-experimental.25dbaac3

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 (1077) hide show
  1. package/{CLAUDE.md → AGENTS.md} +4 -0
  2. package/README.md +471 -51
  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 +490 -94
  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 +3423 -1718
  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/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  806. package/dist/vite/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/dist/vite/virtual-entries.js +110 -0
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +21 -18
  811. package/skills/breadcrumbs/SKILL.md +252 -0
  812. package/skills/cache-guide/SKILL.md +41 -5
  813. package/skills/caching/SKILL.md +49 -8
  814. package/skills/document-cache/SKILL.md +2 -2
  815. package/skills/handler-use/SKILL.md +362 -0
  816. package/skills/hooks/SKILL.md +94 -52
  817. package/skills/host-router/SKILL.md +218 -0
  818. package/skills/intercept/SKILL.md +99 -0
  819. package/skills/layout/SKILL.md +84 -2
  820. package/skills/links/SKILL.md +93 -17
  821. package/skills/loader/SKILL.md +367 -36
  822. package/skills/middleware/SKILL.md +145 -33
  823. package/skills/migrate-nextjs/SKILL.md +562 -0
  824. package/skills/migrate-react-router/SKILL.md +769 -0
  825. package/skills/parallel/SKILL.md +249 -2
  826. package/skills/prerender/SKILL.md +261 -49
  827. package/skills/rango/SKILL.md +26 -24
  828. package/skills/response-routes/SKILL.md +11 -3
  829. package/skills/route/SKILL.md +100 -5
  830. package/skills/router-setup/SKILL.md +172 -5
  831. package/skills/server-actions/SKILL.md +739 -0
  832. package/skills/streams-and-websockets/SKILL.md +283 -0
  833. package/skills/theme/SKILL.md +5 -4
  834. package/skills/typesafety/SKILL.md +95 -38
  835. package/skills/use-cache/SKILL.md +16 -2
  836. package/src/__internal.ts +93 -1
  837. package/src/bin/rango.ts +56 -19
  838. package/src/browser/action-coordinator.ts +97 -0
  839. package/src/browser/app-shell.ts +52 -0
  840. package/src/browser/app-version.ts +14 -0
  841. package/src/browser/event-controller.ts +78 -52
  842. package/src/browser/history-state.ts +80 -0
  843. package/src/browser/intercept-utils.ts +1 -1
  844. package/src/browser/link-interceptor.ts +23 -3
  845. package/src/browser/merge-segment-loaders.ts +9 -2
  846. package/src/browser/navigation-bridge.ts +234 -453
  847. package/src/browser/navigation-client.ts +191 -86
  848. package/src/browser/navigation-store.ts +71 -41
  849. package/src/browser/navigation-transaction.ts +297 -0
  850. package/src/browser/partial-update.ts +215 -167
  851. package/src/browser/prefetch/cache.ts +314 -0
  852. package/src/browser/prefetch/fetch.ts +282 -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 +191 -0
  856. package/src/browser/prefetch/resource-ready.ts +77 -0
  857. package/src/browser/rango-state.ts +152 -0
  858. package/src/browser/react/Link.tsx +241 -47
  859. package/src/browser/react/NavigationProvider.tsx +136 -16
  860. package/src/browser/react/context.ts +11 -0
  861. package/src/browser/react/filter-segment-order.ts +55 -0
  862. package/src/browser/react/index.ts +2 -6
  863. package/src/browser/react/location-state-shared.ts +29 -11
  864. package/src/browser/react/location-state.ts +6 -4
  865. package/src/browser/react/nonce-context.ts +23 -0
  866. package/src/browser/react/shallow-equal.ts +27 -0
  867. package/src/browser/react/use-action.ts +23 -45
  868. package/src/browser/react/use-client-cache.ts +5 -3
  869. package/src/browser/react/use-handle.ts +28 -120
  870. package/src/browser/react/use-navigation.ts +29 -34
  871. package/src/browser/react/use-params.ts +16 -35
  872. package/src/browser/react/use-pathname.ts +2 -3
  873. package/src/browser/react/use-router.ts +31 -14
  874. package/src/browser/react/use-search-params.ts +2 -1
  875. package/src/browser/react/use-segments.ts +82 -118
  876. package/src/browser/response-adapter.ts +73 -0
  877. package/src/browser/rsc-router.tsx +202 -67
  878. package/src/browser/scroll-restoration.ts +47 -45
  879. package/src/browser/segment-reconciler.ts +36 -9
  880. package/src/browser/server-action-bridge.ts +464 -409
  881. package/src/browser/types.ts +100 -40
  882. package/src/browser/validate-redirect-origin.ts +29 -0
  883. package/src/build/generate-manifest.ts +44 -19
  884. package/src/build/generate-route-types.ts +7 -0
  885. package/src/build/index.ts +1 -0
  886. package/src/build/route-trie.ts +67 -25
  887. package/src/build/route-types/codegen.ts +13 -4
  888. package/src/build/route-types/include-resolution.ts +21 -1
  889. package/src/build/route-types/per-module-writer.ts +15 -3
  890. package/src/build/route-types/router-processing.ts +391 -90
  891. package/src/build/route-types/scan-filter.ts +8 -1
  892. package/src/build/runtime-discovery.ts +13 -1
  893. package/src/cache/background-task.ts +34 -0
  894. package/src/cache/cache-key-utils.ts +44 -0
  895. package/src/cache/cache-policy.ts +125 -0
  896. package/src/cache/cache-runtime.ts +140 -123
  897. package/src/cache/cache-scope.ts +124 -90
  898. package/src/cache/cf/cf-cache-store.ts +467 -22
  899. package/src/cache/cf/index.ts +5 -1
  900. package/src/cache/document-cache.ts +109 -75
  901. package/src/cache/handle-capture.ts +81 -0
  902. package/src/cache/index.ts +1 -15
  903. package/src/cache/memory-segment-store.ts +43 -69
  904. package/src/cache/profile-registry.ts +43 -8
  905. package/src/cache/read-through-swr.ts +134 -0
  906. package/src/cache/segment-codec.ts +140 -117
  907. package/src/cache/taint.ts +85 -3
  908. package/src/cache/types.ts +1 -115
  909. package/src/client.rsc.tsx +2 -1
  910. package/src/client.tsx +86 -254
  911. package/src/context-var.ts +72 -2
  912. package/src/debug.ts +2 -2
  913. package/src/errors.ts +6 -1
  914. package/src/handle.ts +41 -1
  915. package/src/handles/MetaTags.tsx +5 -2
  916. package/src/handles/breadcrumbs.ts +66 -0
  917. package/src/handles/index.ts +1 -0
  918. package/src/host/cookie-handler.ts +8 -3
  919. package/src/host/index.ts +0 -3
  920. package/src/host/router.ts +14 -1
  921. package/src/href-client.ts +3 -1
  922. package/src/index.rsc.ts +48 -32
  923. package/src/index.ts +104 -64
  924. package/src/loader.rsc.ts +12 -4
  925. package/src/loader.ts +8 -0
  926. package/src/outlet-context.ts +1 -1
  927. package/src/prerender/store.ts +61 -18
  928. package/src/prerender.ts +207 -88
  929. package/src/response-utils.ts +28 -0
  930. package/src/reverse.ts +36 -7
  931. package/src/root-error-boundary.tsx +30 -26
  932. package/src/route-definition/dsl-helpers.ts +249 -46
  933. package/src/route-definition/helpers-types.ts +73 -20
  934. package/src/route-definition/index.ts +3 -3
  935. package/src/route-definition/redirect.ts +24 -4
  936. package/src/route-definition/resolve-handler-use.ts +155 -0
  937. package/src/route-map-builder.ts +45 -3
  938. package/src/route-name.ts +53 -0
  939. package/src/route-types.ts +25 -0
  940. package/src/router/content-negotiation.ts +101 -2
  941. package/src/router/debug-manifest.ts +16 -3
  942. package/src/router/find-match.ts +4 -2
  943. package/src/router/handler-context.ts +221 -39
  944. package/src/router/intercept-resolution.ts +17 -8
  945. package/src/router/lazy-includes.ts +12 -5
  946. package/src/router/loader-resolution.ts +164 -31
  947. package/src/router/logging.ts +104 -4
  948. package/src/router/manifest.ts +53 -9
  949. package/src/router/match-api.ts +150 -206
  950. package/src/router/match-context.ts +3 -0
  951. package/src/router/match-handlers.ts +186 -11
  952. package/src/router/match-middleware/background-revalidation.ts +94 -86
  953. package/src/router/match-middleware/cache-lookup.ts +164 -19
  954. package/src/router/match-middleware/cache-store.ts +55 -10
  955. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  956. package/src/router/match-middleware/segment-resolution.ts +61 -5
  957. package/src/router/match-pipelines.ts +8 -43
  958. package/src/router/match-result.ts +122 -18
  959. package/src/router/metrics.ts +238 -13
  960. package/src/router/middleware-types.ts +64 -61
  961. package/src/router/middleware.ts +316 -145
  962. package/src/router/navigation-snapshot.ts +182 -0
  963. package/src/router/pattern-matching.ts +134 -15
  964. package/src/router/prerender-match.ts +150 -16
  965. package/src/router/preview-match.ts +30 -96
  966. package/src/router/request-classification.ts +310 -0
  967. package/src/router/revalidation.ts +102 -9
  968. package/src/router/route-snapshot.ts +245 -0
  969. package/src/router/router-context.ts +20 -0
  970. package/src/router/router-interfaces.ts +200 -43
  971. package/src/router/router-options.ts +265 -12
  972. package/src/router/router-registry.ts +5 -2
  973. package/src/router/segment-resolution/fresh.ts +365 -256
  974. package/src/router/segment-resolution/helpers.ts +268 -0
  975. package/src/router/segment-resolution/loader-cache.ts +103 -98
  976. package/src/router/segment-resolution/revalidation.ts +711 -423
  977. package/src/router/segment-resolution/static-store.ts +2 -2
  978. package/src/router/segment-resolution.ts +1 -3
  979. package/src/router/segment-wrappers.ts +5 -0
  980. package/src/router/telemetry-otel.ts +299 -0
  981. package/src/router/telemetry.ts +300 -0
  982. package/src/router/timeout.ts +148 -0
  983. package/src/router/trie-matching.ts +30 -6
  984. package/src/router/types.ts +8 -1
  985. package/src/router/url-params.ts +49 -0
  986. package/src/router.ts +269 -25
  987. package/src/rsc/handler-context.ts +13 -2
  988. package/src/rsc/handler.ts +784 -629
  989. package/src/rsc/helpers.ts +168 -20
  990. package/src/rsc/index.ts +0 -20
  991. package/src/rsc/loader-fetch.ts +105 -43
  992. package/src/rsc/manifest-init.ts +7 -2
  993. package/src/rsc/origin-guard.ts +141 -0
  994. package/src/rsc/progressive-enhancement.ts +262 -20
  995. package/src/rsc/response-route-handler.ts +360 -0
  996. package/src/rsc/rsc-rendering.ts +70 -44
  997. package/src/rsc/runtime-warnings.ts +42 -0
  998. package/src/rsc/server-action.ts +178 -66
  999. package/src/rsc/ssr-setup.ts +128 -0
  1000. package/src/rsc/types.ts +37 -3
  1001. package/src/search-params.ts +38 -23
  1002. package/src/segment-content-promise.ts +67 -0
  1003. package/src/segment-loader-promise.ts +122 -0
  1004. package/src/segment-system.tsx +109 -23
  1005. package/src/server/context.ts +227 -24
  1006. package/src/server/cookie-store.ts +190 -0
  1007. package/src/server/fetchable-loader-store.ts +11 -6
  1008. package/src/server/handle-store.ts +103 -12
  1009. package/src/server/loader-registry.ts +20 -54
  1010. package/src/server/request-context.ts +475 -105
  1011. package/src/server.ts +6 -0
  1012. package/src/ssr/index.tsx +74 -27
  1013. package/src/static-handler.ts +25 -6
  1014. package/src/theme/ThemeProvider.tsx +6 -1
  1015. package/src/theme/index.ts +4 -18
  1016. package/src/theme/theme-context.ts +1 -28
  1017. package/src/theme/theme-script.ts +2 -1
  1018. package/src/types/cache-types.ts +10 -5
  1019. package/src/types/error-types.ts +3 -0
  1020. package/src/types/global-namespace.ts +22 -0
  1021. package/src/types/handler-context.ts +242 -82
  1022. package/src/types/index.ts +1 -1
  1023. package/src/types/loader-types.ts +50 -21
  1024. package/src/types/request-scope.ts +126 -0
  1025. package/src/types/route-config.ts +17 -26
  1026. package/src/types/route-entry.ts +46 -0
  1027. package/src/types/segments.ts +19 -5
  1028. package/src/urls/include-helper.ts +72 -21
  1029. package/src/urls/index.ts +1 -0
  1030. package/src/urls/path-helper-types.ts +69 -18
  1031. package/src/urls/path-helper.ts +65 -15
  1032. package/src/urls/pattern-types.ts +33 -1
  1033. package/src/urls/response-types.ts +47 -23
  1034. package/src/urls/type-extraction.ts +23 -15
  1035. package/src/use-loader.tsx +103 -13
  1036. package/src/vite/debug.ts +184 -0
  1037. package/src/vite/discovery/bundle-postprocess.ts +62 -85
  1038. package/src/vite/discovery/discover-routers.ts +87 -29
  1039. package/src/vite/discovery/gate-state.ts +171 -0
  1040. package/src/vite/discovery/prerender-collection.ts +224 -106
  1041. package/src/vite/discovery/route-types-writer.ts +7 -7
  1042. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1043. package/src/vite/discovery/state.ts +20 -13
  1044. package/src/vite/discovery/virtual-module-codegen.ts +5 -2
  1045. package/src/vite/index.ts +14 -51
  1046. package/src/vite/plugin-types.ts +51 -79
  1047. package/src/vite/plugins/cjs-to-esm.ts +5 -0
  1048. package/src/vite/plugins/client-ref-dedup.ts +131 -0
  1049. package/src/vite/plugins/client-ref-hashing.ts +19 -7
  1050. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1051. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1052. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  1053. package/src/vite/plugins/expose-action-id.ts +53 -31
  1054. package/src/vite/plugins/expose-id-utils.ts +12 -0
  1055. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  1056. package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
  1057. package/src/vite/plugins/expose-internal-ids.ts +567 -319
  1058. package/src/vite/plugins/performance-tracks.ts +96 -0
  1059. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1060. package/src/vite/plugins/use-cache-transform.ts +139 -38
  1061. package/src/vite/plugins/version-injector.ts +37 -11
  1062. package/src/vite/plugins/version-plugin.ts +200 -18
  1063. package/src/vite/rango.ts +233 -221
  1064. package/src/vite/router-discovery.ts +887 -176
  1065. package/src/vite/utils/banner.ts +4 -4
  1066. package/src/vite/utils/package-resolution.ts +41 -1
  1067. package/src/vite/utils/prerender-utils.ts +113 -0
  1068. package/src/vite/utils/shared-utils.ts +22 -11
  1069. package/skills/testing/SKILL.md +0 -226
  1070. package/src/browser/lru-cache.ts +0 -61
  1071. package/src/browser/react/prefetch.ts +0 -27
  1072. package/src/browser/request-controller.ts +0 -164
  1073. package/src/cache/memory-store.ts +0 -253
  1074. package/src/route-definition/route-function.ts +0 -119
  1075. package/src/router.gen.ts +0 -6
  1076. package/src/static-handler.gen.ts +0 -5
  1077. package/src/urls.gen.ts +0 -8
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Build the handle-collection segment order from a raw `matched` list.
3
+ *
4
+ * Two responsibilities:
5
+ *
6
+ * 1. Drop loader sub-ids ("D" followed by a digit, e.g. "M0L0D1.user") —
7
+ * loaders never push handles.
8
+ *
9
+ * 2. Place each parallel slot id (contains ".@") immediately after its
10
+ * parent layout/route id. Raw segment-resolution emission order does NOT
11
+ * guarantee this: route-mounted parallels are resolved/pushed BEFORE the
12
+ * route handler's segment is appended (see fresh.ts:resolveSegment for
13
+ * routes, and revalidation.ts ~915-919), so matched can read
14
+ * `[..., R0.@panel, R0]`. collectHandleData consumes segmentOrder verbatim
15
+ * with later-wins semantics, so without normalization the route handler's
16
+ * Meta would override the slot's more-specific Meta — backwards.
17
+ *
18
+ * Slot-id format is `<parentShortCode>.@<slotName>`; `parentShortCode` never
19
+ * contains ".@", so splitting at the first ".@" reliably yields the parent.
20
+ */
21
+ export function filterSegmentOrder(matched: string[]): string[] {
22
+ const slotsByParent = new Map<string, string[]>();
23
+ const nonSlots: string[] = [];
24
+ const nonSlotSet = new Set<string>();
25
+
26
+ for (const id of matched) {
27
+ if (/D\d+\./.test(id)) continue;
28
+ const slotIdx = id.indexOf(".@");
29
+ if (slotIdx >= 0) {
30
+ const parent = id.slice(0, slotIdx);
31
+ const list = slotsByParent.get(parent);
32
+ if (list) {
33
+ list.push(id);
34
+ } else {
35
+ slotsByParent.set(parent, [id]);
36
+ }
37
+ } else {
38
+ nonSlots.push(id);
39
+ nonSlotSet.add(id);
40
+ }
41
+ }
42
+
43
+ const result: string[] = [];
44
+ for (const id of nonSlots) {
45
+ result.push(id);
46
+ const slots = slotsByParent.get(id);
47
+ if (slots) result.push(...slots);
48
+ }
49
+ // Defensive: any slot whose parent is missing from the filtered list still
50
+ // gets included rather than silently dropped. Shouldn't happen in practice.
51
+ for (const [parent, slots] of slotsByParent) {
52
+ if (!nonSlotSet.has(parent)) result.push(...slots);
53
+ }
54
+ return result;
55
+ }
@@ -15,14 +15,10 @@ export { useParams } from "./use-params.js";
15
15
  export { useAction, type TrackedActionState } from "./use-action.js";
16
16
 
17
17
  // Segments state hook
18
- export {
19
- useSegments,
20
- initSegmentsSync,
21
- type SegmentsState,
22
- } from "./use-segments.js";
18
+ export { useSegments, type SegmentsState } from "./use-segments.js";
23
19
 
24
20
  // Handle data hook
25
- export { useHandle, initHandleDataSync } from "./use-handle.js";
21
+ export { useHandle } from "./use-handle.js";
26
22
 
27
23
  // Client cache controls hook
28
24
  export {
@@ -4,11 +4,14 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Internal entry representing a state value with its unique key
7
+ * Internal entry representing a state value with its unique key.
8
+ * When __rsc_ls_lazy is true, __rsc_ls_value holds a getter function
9
+ * that is called at navigation time (not at entry creation time).
8
10
  */
9
11
  export interface LocationStateEntry {
10
12
  readonly __rsc_ls_key: string;
11
13
  readonly __rsc_ls_value: unknown;
14
+ readonly __rsc_ls_lazy?: boolean;
12
15
  }
13
16
 
14
17
  /**
@@ -55,6 +58,13 @@ export interface LocationStateDefinition<TArgs extends unknown[], TState> {
55
58
  * // Use in Link
56
59
  * <Link to="/product/123" state={[ProductState({ name: "Widget", price: 9.99 })]}>
57
60
  *
61
+ * // Just-in-time typed state (getter called at click time, not render time).
62
+ * // Must be in a client component — the getter function can't cross the RSC boundary.
63
+ * <Link
64
+ * to="/product/123"
65
+ * state={[ProductState(() => ({ name: product.name, price: product.price }))]}
66
+ * >
67
+ *
58
68
  * // Read with hook (reactive)
59
69
  * const product = useLocationState(ProductState);
60
70
  *
@@ -69,7 +79,7 @@ export function createLocationState<TState>(
69
79
  let _key: string | undefined;
70
80
 
71
81
  function getKey(): string {
72
- if (!_key && process.env.NODE_ENV !== "production") {
82
+ if (!_key && process.env.NODE_ENV === "development") {
73
83
  throw new Error(
74
84
  "[rsc-router] createLocationState key not set. " +
75
85
  "Make sure the exposeInternalIds Vite plugin is enabled and " +
@@ -79,14 +89,20 @@ export function createLocationState<TState>(
79
89
  return _key!;
80
90
  }
81
91
 
82
- const fn = (stateOrGetter: TState | (() => TState)): LocationStateEntry => ({
83
- __rsc_ls_key: getKey(),
84
- // Resolve getter immediately - lazy evaluation happens via Link's stateRef pattern
85
- __rsc_ls_value:
86
- typeof stateOrGetter === "function"
87
- ? (stateOrGetter as () => TState)()
88
- : stateOrGetter,
89
- });
92
+ const fn = (stateOrGetter: TState | (() => TState)): LocationStateEntry => {
93
+ if (typeof stateOrGetter === "function") {
94
+ // Store getter as-is; resolved at navigation time by resolveLocationStateEntries()
95
+ return {
96
+ __rsc_ls_key: getKey(),
97
+ __rsc_ls_value: stateOrGetter,
98
+ __rsc_ls_lazy: true,
99
+ };
100
+ }
101
+ return {
102
+ __rsc_ls_key: getKey(),
103
+ __rsc_ls_value: stateOrGetter,
104
+ };
105
+ };
90
106
 
91
107
  // Use defineProperty for __rsc_ls_key to avoid Object.assign evaluating
92
108
  // the getter during construction (before the Vite plugin sets the key).
@@ -138,7 +154,9 @@ export function resolveLocationStateEntries(
138
154
  ): Record<string, unknown> {
139
155
  const result: Record<string, unknown> = {};
140
156
  for (const entry of entries) {
141
- result[entry.__rsc_ls_key] = entry.__rsc_ls_value;
157
+ result[entry.__rsc_ls_key] = entry.__rsc_ls_lazy
158
+ ? (entry.__rsc_ls_value as () => unknown)()
159
+ : entry.__rsc_ls_value;
142
160
  }
143
161
  return result;
144
162
  }
@@ -22,7 +22,7 @@ export {
22
22
  *
23
23
  * Overloaded:
24
24
  * - With definition: Returns typed state from the specific key
25
- * - With type param only: Returns legacy state from history.state.state (backwards compat)
25
+ * - With type param only: Returns plain state from history.state.state
26
26
  *
27
27
  * @example
28
28
  * ```typescript
@@ -34,8 +34,8 @@ export {
34
34
  * const FlashMsg = createLocationState<{ text: string }>({ flash: true });
35
35
  * const flash = useLocationState(FlashMsg);
36
36
  *
37
- * // Legacy typed access (backwards compatible)
38
- * const legacyState = useLocationState<{ from?: string }>();
37
+ * // Plain state access (reads from history.state.state)
38
+ * const state = useLocationState<{ from?: string }>();
39
39
  * ```
40
40
  */
41
41
  export function useLocationState<TArgs extends unknown[], TState>(
@@ -53,7 +53,7 @@ export function useLocationState<TArgs extends unknown[], TState>(
53
53
  if (key) {
54
54
  return window.history.state?.[key] as TState | undefined;
55
55
  }
56
- // Legacy: return history.state.state for backwards compatibility
56
+ // Plain state: stored under history.state.state
57
57
  return window.history.state?.state as TState | undefined;
58
58
  });
59
59
 
@@ -80,6 +80,8 @@ export function useLocationState<TArgs extends unknown[], TState>(
80
80
  } else {
81
81
  setState(val);
82
82
  }
83
+ } else {
84
+ setState(window.history.state?.state as TState | undefined);
83
85
  }
84
86
  };
85
87
 
@@ -0,0 +1,23 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Context for CSP nonce propagation to client components during SSR.
5
+ *
6
+ * The SSR renderer wraps the tree with NonceContext.Provider so that
7
+ * client components (e.g. MetaTags) can apply nonces to inline scripts.
8
+ * On the browser side, no provider is needed — the default undefined
9
+ * is correct since CSP nonces are a server-side HTML concern.
10
+ */
11
+
12
+ import { createContext, useContext, type Context } from "react";
13
+
14
+ export const NonceContext: Context<string | undefined> = createContext<
15
+ string | undefined
16
+ >(undefined);
17
+
18
+ /**
19
+ * Read the CSP nonce during SSR. Returns undefined on the client.
20
+ */
21
+ export function useNonce(): string | undefined {
22
+ return useContext(NonceContext);
23
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Shallow equality check for selector results.
3
+ * Uses Object.is for value comparison (handles NaN and +-0 correctly).
4
+ */
5
+ export function shallowEqual<T>(a: T, b: T): boolean {
6
+ if (Object.is(a, b)) return true;
7
+ if (
8
+ typeof a !== "object" ||
9
+ a === null ||
10
+ typeof b !== "object" ||
11
+ b === null
12
+ ) {
13
+ return false;
14
+ }
15
+ const keysA = Object.keys(a);
16
+ const keysB = Object.keys(b);
17
+ if (keysA.length !== keysB.length) return false;
18
+ for (const key of keysA) {
19
+ if (
20
+ !Object.hasOwn(b, key) ||
21
+ !Object.is((a as any)[key], (b as any)[key])
22
+ ) {
23
+ return false;
24
+ }
25
+ }
26
+ return true;
27
+ }
@@ -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
  /**
@@ -126,6 +127,11 @@ 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
  */
@@ -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,7 +197,7 @@ 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(() => {
@@ -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,121 +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 (
57
- segments: T[][],
58
- ) => A;
59
- }
60
-
61
- /**
62
- * Collect handle data from segments and transform to final value.
63
- */
64
- function collectHandle<T, A>(
65
- handle: Handle<T, A>,
66
- data: HandleData,
67
- segmentOrder: string[],
68
- ): A {
69
- const collect = resolveCollect(handle);
70
- const segmentData = data[handle.$$id];
71
-
72
- if (!segmentData) {
73
- return collect([]);
74
- }
75
-
76
- // Build array of segment arrays in parent -> child order
77
- const segmentArrays: T[][] = [];
78
- for (const segmentId of segmentOrder) {
79
- const entries = segmentData[segmentId];
80
- if (entries && entries.length > 0) {
81
- segmentArrays.push(entries as T[]);
82
- }
83
- }
84
-
85
- // Call collect once with all segment data
86
- return collect(segmentArrays);
87
- }
88
-
89
- /**
90
- * Shallow equality check for selector results.
91
- */
92
- function shallowEqual<T>(a: T, b: T): boolean {
93
- if (Object.is(a, b)) return true;
94
- if (
95
- typeof a !== "object" ||
96
- a === null ||
97
- typeof b !== "object" ||
98
- b === null
99
- ) {
100
- return false;
101
- }
102
- const keysA = Object.keys(a);
103
- const keysB = Object.keys(b);
104
- if (keysA.length !== keysB.length) return false;
105
- for (const key of keysA) {
106
- if (
107
- !Object.hasOwn(b, key) ||
108
- !Object.is((a as any)[key], (b as any)[key])
109
- ) {
110
- return false;
111
- }
112
- }
113
- return true;
114
- }
115
-
116
- /**
117
- * Initialize handle data synchronously for SSR.
118
- * Called before rendering to populate state for useState initializer.
119
- *
120
- * @param data - Handle data from RSC payload
121
- * @param matched - Segment order for reduction
122
- */
123
- export function initHandleDataSync(data: HandleData, matched?: string[]): void {
124
- ssrHandleData = data;
125
- ssrSegmentOrder = filterSegmentOrder(matched ?? []);
126
- }
15
+ import { shallowEqual } from "./shallow-equal.js";
127
16
 
128
17
  /**
129
18
  * Hook to access collected handle data.
@@ -154,17 +43,16 @@ export function useHandle<T, A, S>(
154
43
  ): A | S {
155
44
  const ctx = useContext(NavigationStoreContext);
156
45
 
157
- // Initial state from SSR module state or event controller
46
+ // Initial state from context event controller, or empty fallback without provider.
158
47
  const [value, setValue] = useState<A | S>(() => {
159
- // During SSR, use module-level state
160
- if (typeof document === "undefined" || !ctx) {
161
- const collected = collectHandle(handle, ssrHandleData, ssrSegmentOrder);
48
+ if (!ctx) {
49
+ const collected = collectHandleData(handle, {}, []);
162
50
  return selector ? selector(collected) : collected;
163
51
  }
164
52
 
165
53
  // On client, use event controller state
166
54
  const state = ctx.eventController.getHandleState();
167
- const collected = collectHandle(handle, state.data, state.segmentOrder);
55
+ const collected = collectHandleData(handle, state.data, state.segmentOrder);
168
56
  return selector ? selector(collected) : collected;
169
57
  });
170
58
  const [optimisticValue, setOptimisticValue] = useOptimistic(value);
@@ -173,7 +61,7 @@ export function useHandle<T, A, S>(
173
61
  const prevValueRef = useRef(value);
174
62
  prevValueRef.current = value;
175
63
 
176
- // Memoize selector ref
64
+ // Ref keeps the latest selector without re-subscribing on every render.
177
65
  const selectorRef = useRef(selector);
178
66
  selectorRef.current = selector;
179
67
 
@@ -181,11 +69,31 @@ export function useHandle<T, A, S>(
181
69
  useEffect(() => {
182
70
  if (!ctx) return;
183
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
+
184
88
  return ctx.eventController.subscribeToHandles(() => {
185
89
  const state = ctx.eventController.getHandleState();
186
90
  const isAction =
187
91
  ctx.eventController.getState().inflightActions.length > 0;
188
- const collected = collectHandle(handle, state.data, state.segmentOrder);
92
+ const collected = collectHandleData(
93
+ handle,
94
+ state.data,
95
+ state.segmentOrder,
96
+ );
189
97
  const nextValue = selectorRef.current
190
98
  ? selectorRef.current(collected)
191
99
  : collected;
@@ -9,36 +9,10 @@ import {
9
9
  useRef,
10
10
  } from "react";
11
11
  import { NavigationStoreContext } from "./context.js";
12
+ import { shallowEqual } from "./shallow-equal.js";
12
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
  */
@@ -69,9 +43,7 @@ export function useNavigation<T>(
69
43
  const ctx = useContext(NavigationStoreContext);
70
44
 
71
45
  if (!ctx) {
72
- throw new Error(
73
- "useNavigation must be used within NavigationStoreContext.Provider",
74
- );
46
+ throw new Error("useNavigation must be used within NavigationProvider");
75
47
  }
76
48
 
77
49
  // Base state for useOptimistic
@@ -81,11 +53,20 @@ export function useNavigation<T>(
81
53
  });
82
54
  const prevState = useRef(baseValue);
83
55
 
56
+ // Tracks whether the most recent setOptimisticValue call pinned the value
57
+ // to a non-idle state. Used to decide whether to emit a release update when
58
+ // returning to idle, so the optimistic store doesn't stay pinned if a
59
+ // parent transition (e.g. <Link> click) is still pending.
60
+ const optimisticPinnedRef = useRef(false);
61
+
84
62
  // useOptimistic allows immediate updates during transitions/actions
85
63
  const [value, setOptimisticValue] = useOptimistic(baseValue);
86
64
 
87
- // Store selector in a ref to avoid re-subscribing when an inline
88
- // function is passed (its identity changes every render).
65
+ // Store selector in a ref so the subscription callback always uses the
66
+ // latest selector without re-subscribing on every render (inline functions
67
+ // have a new identity each render). This is event-driven by design: the
68
+ // value updates when the store emits, not when the selector changes.
69
+ // Between events there is nothing new to select from.
89
70
  const selectorRef = useRef(selector);
90
71
  selectorRef.current = selector;
91
72
 
@@ -107,11 +88,25 @@ export function useNavigation<T>(
107
88
  const hasInflightActions =
108
89
  ctx.eventController.getInflightActions().size > 0;
109
90
 
110
- if (hasInflightActions || publicState.state !== "idle") {
111
- // Use optimistic update for immediate feedback during transitions
91
+ const shouldPin = hasInflightActions || publicState.state !== "idle";
92
+
93
+ if (shouldPin) {
94
+ // Pin the optimistic store so the loading value shows immediately
95
+ // even if a parent transition (e.g. <Link> click) defers the
96
+ // urgent setBaseValue commit.
97
+ startTransition(() => {
98
+ setOptimisticValue(nextSelected);
99
+ });
100
+ optimisticPinnedRef.current = true;
101
+ } else if (optimisticPinnedRef.current) {
102
+ // Release a previously-pinned optimistic value. Without this,
103
+ // useOptimistic keeps returning the stale loading value while
104
+ // any parent transition is still pending, even after baseValue
105
+ // flipped to idle.
112
106
  startTransition(() => {
113
107
  setOptimisticValue(nextSelected);
114
108
  });
109
+ optimisticPinnedRef.current = false;
115
110
  }
116
111
 
117
112
  // Always update base state so UI reflects current state