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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1104) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +884 -4
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +1601 -0
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/dist/browser/react/use-client-cache.js +39 -0
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +4544 -685
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +16 -18
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +77 -58
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +262 -0
  811. package/skills/caching/SKILL.md +50 -21
  812. package/skills/composability/SKILL.md +172 -0
  813. package/skills/debug-manifest/SKILL.md +12 -8
  814. package/skills/document-cache/SKILL.md +18 -16
  815. package/skills/fonts/SKILL.md +167 -0
  816. package/skills/hooks/SKILL.md +334 -72
  817. package/skills/host-router/SKILL.md +218 -0
  818. package/skills/intercept/SKILL.md +131 -8
  819. package/skills/layout/SKILL.md +100 -3
  820. package/skills/links/SKILL.md +89 -30
  821. package/skills/loader/SKILL.md +388 -38
  822. package/skills/middleware/SKILL.md +171 -34
  823. package/skills/mime-routes/SKILL.md +128 -0
  824. package/skills/parallel/SKILL.md +78 -1
  825. package/skills/prerender/SKILL.md +643 -0
  826. package/skills/rango/SKILL.md +85 -16
  827. package/skills/response-routes/SKILL.md +411 -0
  828. package/skills/route/SKILL.md +226 -14
  829. package/skills/router-setup/SKILL.md +153 -29
  830. package/skills/tailwind/SKILL.md +129 -0
  831. package/skills/theme/SKILL.md +9 -8
  832. package/skills/typesafety/SKILL.md +318 -89
  833. package/skills/use-cache/SKILL.md +324 -0
  834. package/src/__internal.ts +102 -4
  835. package/src/bin/rango.ts +321 -0
  836. package/src/browser/action-coordinator.ts +97 -0
  837. package/src/browser/action-response-classifier.ts +99 -0
  838. package/src/browser/event-controller.ts +87 -64
  839. package/src/browser/history-state.ts +80 -0
  840. package/src/browser/intercept-utils.ts +52 -0
  841. package/src/browser/link-interceptor.ts +24 -4
  842. package/src/browser/logging.ts +55 -0
  843. package/src/browser/merge-segment-loaders.ts +20 -12
  844. package/src/browser/navigation-bridge.ts +281 -554
  845. package/src/browser/navigation-client.ts +124 -71
  846. package/src/browser/navigation-store.ts +33 -50
  847. package/src/browser/navigation-transaction.ts +295 -0
  848. package/src/browser/network-error-handler.ts +61 -0
  849. package/src/browser/partial-update.ts +261 -309
  850. package/src/browser/prefetch/cache.ts +154 -0
  851. package/src/browser/prefetch/fetch.ts +135 -0
  852. package/src/browser/prefetch/observer.ts +65 -0
  853. package/src/browser/prefetch/policy.ts +48 -0
  854. package/src/browser/prefetch/queue.ts +88 -0
  855. package/src/browser/rango-state.ts +112 -0
  856. package/src/browser/react/Link.tsx +185 -73
  857. package/src/browser/react/NavigationProvider.tsx +139 -10
  858. package/src/browser/react/context.ts +6 -0
  859. package/src/browser/react/filter-segment-order.ts +11 -0
  860. package/src/browser/react/index.ts +12 -12
  861. package/src/browser/react/location-state-shared.ts +95 -53
  862. package/src/browser/react/location-state.ts +60 -15
  863. package/src/browser/react/mount-context.ts +24 -1
  864. package/src/browser/react/nonce-context.ts +23 -0
  865. package/src/browser/react/shallow-equal.ts +27 -0
  866. package/src/browser/react/use-action.ts +29 -51
  867. package/src/browser/react/use-client-cache.ts +5 -3
  868. package/src/browser/react/use-handle.ts +32 -79
  869. package/src/browser/react/use-href.tsx +2 -2
  870. package/src/browser/react/use-link-status.ts +6 -5
  871. package/src/browser/react/use-navigation.ts +22 -63
  872. package/src/browser/react/use-params.ts +65 -0
  873. package/src/browser/react/use-pathname.ts +47 -0
  874. package/src/browser/react/use-router.ts +63 -0
  875. package/src/browser/react/use-search-params.ts +56 -0
  876. package/src/browser/react/use-segments.ts +80 -97
  877. package/src/browser/response-adapter.ts +73 -0
  878. package/src/browser/rsc-router.tsx +111 -30
  879. package/src/browser/scroll-restoration.ts +98 -38
  880. package/src/browser/segment-reconciler.ts +216 -0
  881. package/src/browser/segment-structure-assert.ts +16 -0
  882. package/src/browser/server-action-bridge.ts +504 -599
  883. package/src/browser/shallow.ts +6 -1
  884. package/src/browser/types.ts +109 -47
  885. package/src/browser/validate-redirect-origin.ts +29 -0
  886. package/src/build/generate-manifest.ts +235 -24
  887. package/src/build/generate-route-types.ts +36 -0
  888. package/src/build/index.ts +13 -0
  889. package/src/build/route-trie.ts +265 -0
  890. package/src/build/route-types/ast-helpers.ts +25 -0
  891. package/src/build/route-types/ast-route-extraction.ts +98 -0
  892. package/src/build/route-types/codegen.ts +102 -0
  893. package/src/build/route-types/include-resolution.ts +411 -0
  894. package/src/build/route-types/param-extraction.ts +48 -0
  895. package/src/build/route-types/per-module-writer.ts +128 -0
  896. package/src/build/route-types/router-processing.ts +469 -0
  897. package/src/build/route-types/scan-filter.ts +78 -0
  898. package/src/build/runtime-discovery.ts +231 -0
  899. package/src/cache/background-task.ts +34 -0
  900. package/src/cache/cache-key-utils.ts +44 -0
  901. package/src/cache/cache-policy.ts +125 -0
  902. package/src/cache/cache-runtime.ts +338 -0
  903. package/src/cache/cache-scope.ts +120 -303
  904. package/src/cache/cf/cf-cache-store.ts +119 -7
  905. package/src/cache/cf/index.ts +8 -2
  906. package/src/cache/document-cache.ts +101 -72
  907. package/src/cache/handle-capture.ts +81 -0
  908. package/src/cache/handle-snapshot.ts +41 -0
  909. package/src/cache/index.ts +0 -15
  910. package/src/cache/memory-segment-store.ts +191 -13
  911. package/src/cache/profile-registry.ts +73 -0
  912. package/src/cache/read-through-swr.ts +134 -0
  913. package/src/cache/segment-codec.ts +256 -0
  914. package/src/cache/taint.ts +98 -0
  915. package/src/cache/types.ts +72 -122
  916. package/src/client.rsc.tsx +3 -1
  917. package/src/client.tsx +106 -126
  918. package/src/component-utils.ts +4 -4
  919. package/src/components/DefaultDocument.tsx +5 -1
  920. package/src/context-var.ts +86 -0
  921. package/src/debug.ts +17 -7
  922. package/src/errors.ts +108 -2
  923. package/src/handle.ts +15 -29
  924. package/src/handles/MetaTags.tsx +73 -24
  925. package/src/handles/breadcrumbs.ts +66 -0
  926. package/src/handles/index.ts +1 -0
  927. package/src/handles/meta.ts +30 -13
  928. package/src/host/cookie-handler.ts +165 -0
  929. package/src/host/errors.ts +97 -0
  930. package/src/host/index.ts +53 -0
  931. package/src/host/pattern-matcher.ts +214 -0
  932. package/src/host/router.ts +352 -0
  933. package/src/host/testing.ts +79 -0
  934. package/src/host/types.ts +146 -0
  935. package/src/host/utils.ts +25 -0
  936. package/src/href-client.ts +119 -29
  937. package/src/index.rsc.ts +153 -19
  938. package/src/index.ts +211 -30
  939. package/src/internal-debug.ts +11 -0
  940. package/src/loader.rsc.ts +26 -147
  941. package/src/loader.ts +27 -10
  942. package/src/network-error-thrower.tsx +3 -1
  943. package/src/outlet-provider.tsx +45 -0
  944. package/src/prerender/param-hash.ts +37 -0
  945. package/src/prerender/store.ts +185 -0
  946. package/src/prerender.ts +463 -0
  947. package/src/reverse.ts +330 -0
  948. package/src/root-error-boundary.tsx +41 -29
  949. package/src/route-content-wrapper.tsx +7 -4
  950. package/src/route-definition/dsl-helpers.ts +934 -0
  951. package/src/route-definition/helper-factories.ts +200 -0
  952. package/src/route-definition/helpers-types.ts +430 -0
  953. package/src/route-definition/index.ts +52 -0
  954. package/src/route-definition/redirect.ts +93 -0
  955. package/src/route-definition.ts +1 -1428
  956. package/src/route-map-builder.ts +211 -123
  957. package/src/route-name.ts +53 -0
  958. package/src/route-types.ts +59 -8
  959. package/src/router/content-negotiation.ts +116 -0
  960. package/src/router/debug-manifest.ts +72 -0
  961. package/src/router/error-handling.ts +9 -9
  962. package/src/router/find-match.ts +158 -0
  963. package/src/router/handler-context.ts +374 -81
  964. package/src/router/intercept-resolution.ts +395 -0
  965. package/src/router/lazy-includes.ts +234 -0
  966. package/src/router/loader-resolution.ts +215 -122
  967. package/src/router/logging.ts +248 -0
  968. package/src/router/manifest.ts +148 -35
  969. package/src/router/match-api.ts +620 -0
  970. package/src/router/match-context.ts +5 -3
  971. package/src/router/match-handlers.ts +440 -0
  972. package/src/router/match-middleware/background-revalidation.ts +80 -93
  973. package/src/router/match-middleware/cache-lookup.ts +382 -9
  974. package/src/router/match-middleware/cache-store.ts +51 -22
  975. package/src/router/match-middleware/intercept-resolution.ts +55 -17
  976. package/src/router/match-middleware/segment-resolution.ts +24 -6
  977. package/src/router/match-pipelines.ts +10 -45
  978. package/src/router/match-result.ts +34 -28
  979. package/src/router/metrics.ts +235 -15
  980. package/src/router/middleware-cookies.ts +55 -0
  981. package/src/router/middleware-types.ts +222 -0
  982. package/src/router/middleware.ts +324 -367
  983. package/src/router/pattern-matching.ts +211 -43
  984. package/src/router/prerender-match.ts +402 -0
  985. package/src/router/preview-match.ts +170 -0
  986. package/src/router/revalidation.ts +137 -38
  987. package/src/router/router-context.ts +36 -21
  988. package/src/router/router-interfaces.ts +452 -0
  989. package/src/router/router-options.ts +592 -0
  990. package/src/router/router-registry.ts +24 -0
  991. package/src/router/segment-resolution/fresh.ts +570 -0
  992. package/src/router/segment-resolution/helpers.ts +263 -0
  993. package/src/router/segment-resolution/loader-cache.ts +198 -0
  994. package/src/router/segment-resolution/revalidation.ts +1239 -0
  995. package/src/router/segment-resolution/static-store.ts +67 -0
  996. package/src/router/segment-resolution.ts +21 -0
  997. package/src/router/segment-wrappers.ts +289 -0
  998. package/src/router/telemetry-otel.ts +299 -0
  999. package/src/router/telemetry.ts +300 -0
  1000. package/src/router/timeout.ts +148 -0
  1001. package/src/router/trie-matching.ts +239 -0
  1002. package/src/router/types.ts +77 -3
  1003. package/src/router.ts +661 -4182
  1004. package/src/rsc/handler-context.ts +45 -0
  1005. package/src/rsc/handler.ts +764 -756
  1006. package/src/rsc/helpers.ts +140 -6
  1007. package/src/rsc/index.ts +0 -20
  1008. package/src/rsc/loader-fetch.ts +209 -0
  1009. package/src/rsc/manifest-init.ts +86 -0
  1010. package/src/rsc/nonce.ts +14 -0
  1011. package/src/rsc/origin-guard.ts +141 -0
  1012. package/src/rsc/progressive-enhancement.ts +379 -0
  1013. package/src/rsc/response-error.ts +37 -0
  1014. package/src/rsc/response-route-handler.ts +347 -0
  1015. package/src/rsc/rsc-rendering.ts +237 -0
  1016. package/src/rsc/runtime-warnings.ts +42 -0
  1017. package/src/rsc/server-action.ts +348 -0
  1018. package/src/rsc/ssr-setup.ts +128 -0
  1019. package/src/rsc/types.ts +38 -11
  1020. package/src/search-params.ts +230 -0
  1021. package/src/segment-system.tsx +32 -17
  1022. package/src/server/context.ts +182 -51
  1023. package/src/server/cookie-store.ts +190 -0
  1024. package/src/server/fetchable-loader-store.ts +37 -0
  1025. package/src/server/handle-store.ts +94 -15
  1026. package/src/server/loader-registry.ts +15 -56
  1027. package/src/server/request-context.ts +430 -70
  1028. package/src/server.ts +35 -128
  1029. package/src/ssr/index.tsx +100 -31
  1030. package/src/static-handler.ts +114 -0
  1031. package/src/theme/ThemeProvider.tsx +21 -15
  1032. package/src/theme/ThemeScript.tsx +5 -5
  1033. package/src/theme/constants.ts +5 -2
  1034. package/src/theme/index.ts +4 -14
  1035. package/src/theme/theme-context.ts +4 -30
  1036. package/src/theme/theme-script.ts +21 -18
  1037. package/src/types/boundaries.ts +158 -0
  1038. package/src/types/cache-types.ts +198 -0
  1039. package/src/types/error-types.ts +192 -0
  1040. package/src/types/global-namespace.ts +100 -0
  1041. package/src/types/handler-context.ts +687 -0
  1042. package/src/types/index.ts +88 -0
  1043. package/src/types/loader-types.ts +183 -0
  1044. package/src/types/route-config.ts +170 -0
  1045. package/src/types/route-entry.ts +102 -0
  1046. package/src/types/segments.ts +148 -0
  1047. package/src/types.ts +1 -1623
  1048. package/src/urls/include-helper.ts +197 -0
  1049. package/src/urls/index.ts +53 -0
  1050. package/src/urls/path-helper-types.ts +339 -0
  1051. package/src/urls/path-helper.ts +329 -0
  1052. package/src/urls/pattern-types.ts +95 -0
  1053. package/src/urls/response-types.ts +106 -0
  1054. package/src/urls/type-extraction.ts +372 -0
  1055. package/src/urls/urls-function.ts +98 -0
  1056. package/src/urls.ts +1 -802
  1057. package/src/use-loader.tsx +85 -77
  1058. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1059. package/src/vite/discovery/discover-routers.ts +344 -0
  1060. package/src/vite/discovery/prerender-collection.ts +385 -0
  1061. package/src/vite/discovery/route-types-writer.ts +258 -0
  1062. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1063. package/src/vite/discovery/state.ts +110 -0
  1064. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1065. package/src/vite/index.ts +11 -782
  1066. package/src/vite/plugin-types.ts +131 -0
  1067. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1068. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1069. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1070. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -51
  1071. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1072. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1073. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1074. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1075. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1076. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1077. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1078. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1079. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1080. package/src/vite/plugins/version-injector.ts +83 -0
  1081. package/src/vite/plugins/version-plugin.ts +254 -0
  1082. package/src/vite/plugins/virtual-entries.ts +123 -0
  1083. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1084. package/src/vite/rango.ts +510 -0
  1085. package/src/vite/router-discovery.ts +785 -0
  1086. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1087. package/src/vite/utils/banner.ts +36 -0
  1088. package/src/vite/utils/bundle-analysis.ts +137 -0
  1089. package/src/vite/utils/manifest-utils.ts +70 -0
  1090. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1091. package/src/vite/utils/prerender-utils.ts +189 -0
  1092. package/src/vite/utils/shared-utils.ts +169 -0
  1093. package/CLAUDE.md +0 -43
  1094. package/src/browser/lru-cache.ts +0 -69
  1095. package/src/browser/request-controller.ts +0 -164
  1096. package/src/cache/memory-store.ts +0 -253
  1097. package/src/href.ts +0 -255
  1098. package/src/server/route-manifest-cache.ts +0 -173
  1099. package/src/vite/expose-handle-id.ts +0 -209
  1100. package/src/vite/expose-loader-id.ts +0 -426
  1101. package/src/vite/expose-location-state-id.ts +0 -177
  1102. package/src/warmup/connection-warmup.tsx +0 -94
  1103. package/src/warmup/warmup-context.ts +0 -35
  1104. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -1,69 +1,71 @@
1
1
  "use client";
2
2
 
3
- import React, { forwardRef, useCallback, useContext, useRef, type ForwardRefExoticComponent, type RefAttributes } from "react";
3
+ import React, {
4
+ forwardRef,
5
+ useCallback,
6
+ useContext,
7
+ useEffect,
8
+ useRef,
9
+ type ForwardRefExoticComponent,
10
+ type RefAttributes,
11
+ } from "react";
4
12
  import { NavigationStoreContext } from "./context.js";
5
13
  import { LinkContext } from "./use-link-status.js";
6
14
  import type { NavigateOptions } from "../types.js";
15
+ import { isHashOnlyNavigation } from "../link-interceptor.js";
7
16
  import {
8
- type LocationStateEntry,
9
17
  isLocationStateEntry,
18
+ type LocationStateEntry,
10
19
  resolveLocationStateEntries,
11
20
  } from "./location-state.js";
12
21
 
13
22
  /**
14
- * State value or getter function for just-in-time state resolution (legacy)
23
+ * State prop type for Link component.
24
+ * - LocationStateEntry[]: Type-safe state entries via createLocationState()
25
+ * - StateOrGetter: Plain state object or click-time getter function
26
+ * - Record<string, unknown>: Plain state object passed to history.pushState
15
27
  */
16
28
  export type StateOrGetter<T = unknown> = T | (() => T);
17
29
 
18
- /**
19
- * State prop type for Link component
20
- * - LocationStateEntry[]: Type-safe state entries (always lazy)
21
- * - StateOrGetter: Legacy format for backwards compatibility
22
- */
23
- export type LinkState = LocationStateEntry[] | StateOrGetter;
24
-
25
- // Track prefetched URLs to avoid duplicate <link> elements
26
- const prefetchedUrls = new Set<string>();
30
+ export type LinkState =
31
+ | LocationStateEntry[]
32
+ | StateOrGetter<Record<string, unknown>>;
27
33
 
28
- /**
29
- * Inject a <link rel="prefetch"> element into the document head
30
- * for the given URL with RSC partial request parameters.
31
- */
32
- function prefetchUrl(url: string, segmentIds: string[]): void {
33
- if (prefetchedUrls.has(url)) return;
34
- prefetchedUrls.add(url);
35
-
36
- // Build RSC partial URL with segment IDs
37
- const targetUrl = new URL(url, window.location.origin);
38
- targetUrl.searchParams.set("_rsc_partial", "true");
39
- if (segmentIds.length > 0) {
40
- targetUrl.searchParams.set("_rsc_segments", segmentIds.join(","));
41
- }
34
+ import { prefetchDirect, prefetchQueued } from "../prefetch/fetch.js";
35
+ import {
36
+ observeForPrefetch,
37
+ unobserveForPrefetch,
38
+ } from "../prefetch/observer.js";
42
39
 
43
- // Inject <link rel="prefetch"> into head
44
- const link = document.createElement("link");
45
- link.rel = "prefetch";
46
- link.href = targetUrl.toString();
47
- link.as = "fetch";
48
- document.head.appendChild(link);
49
- }
40
+ // Touch device detection for adaptive strategy.
41
+ // Checked once at module load (Link.tsx is "use client", runs only in browser).
42
+ const isTouchDevice =
43
+ typeof window !== "undefined" && window.matchMedia("(hover: none)").matches;
50
44
 
51
45
  /**
52
46
  * Prefetch strategy for the Link component
53
- * - "hover": Prefetch on mouse enter (uses native <link rel="prefetch">)
54
- * - "viewport": Prefetch when link enters viewport (not yet implemented)
55
- * - "hybrid": Hover on desktop, viewport on mobile (not yet implemented)
47
+ * - "hover": Prefetch on mouse enter (direct, no queue)
48
+ * - "viewport": Prefetch when link enters viewport (queued, waits for idle)
49
+ * - "render": Prefetch on component mount regardless of visibility (queued, waits for idle)
50
+ * - "adaptive": Hover on pointer devices, viewport on touch devices
56
51
  * - "none": No prefetching (default)
57
52
  */
58
- export type PrefetchStrategy = "hover" | "viewport" | "hybrid" | "none";
53
+ export type PrefetchStrategy =
54
+ | "hover"
55
+ | "viewport"
56
+ | "render"
57
+ | "adaptive"
58
+ | "none";
59
59
 
60
60
  /**
61
61
  * Link component props
62
62
  */
63
- export interface LinkProps
64
- extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "href"> {
63
+ export interface LinkProps extends Omit<
64
+ React.AnchorHTMLAttributes<HTMLAnchorElement>,
65
+ "href"
66
+ > {
65
67
  /**
66
- * The URL to navigate to (typically from router.href())
68
+ * The URL to navigate to (typically from router.reverse())
67
69
  */
68
70
  to: string;
69
71
  /**
@@ -78,6 +80,16 @@ export interface LinkProps
78
80
  * Force full document navigation instead of SPA
79
81
  */
80
82
  reloadDocument?: boolean;
83
+ /**
84
+ * Whether to revalidate server data on navigation.
85
+ * Set to `false` to skip the RSC server fetch and only update the URL.
86
+ *
87
+ * Only takes effect when the pathname stays the same (search param / hash changes).
88
+ * If the pathname changes, this option is ignored and a full navigation occurs.
89
+ *
90
+ * @default true
91
+ */
92
+ revalidate?: boolean;
81
93
  /**
82
94
  * Prefetch strategy for the link destination
83
95
  * @default "none"
@@ -90,16 +102,29 @@ export interface LinkProps
90
102
  * @example
91
103
  * ```tsx
92
104
  * // Type-safe state with createLocationState (recommended)
93
- * const ProductState = createLocationState((p: Product) => ({ name: p.name }));
94
- * <Link to="/product" state={[ProductState(product)]}>View</Link>
105
+ * const ProductState = createLocationState<{ name: string; price: number }>();
106
+ * <Link to="/product" state={[ProductState({ name: product.name, price: product.price })]}>
107
+ * View
108
+ * </Link>
109
+ *
110
+ * // Type-safe just-in-time state (getter called at click time, not render time).
111
+ * // Must be in a client component -- getter can't cross the RSC boundary.
112
+ * <Link
113
+ * to="/product"
114
+ * state={[ProductState(() => ({ name: product.name, price: product.price }))]}
115
+ * >
116
+ * View
117
+ * </Link>
95
118
  *
96
119
  * // Multiple typed states
97
- * <Link to="/checkout" state={[ProductState(p), CartState(c)]}>Checkout</Link>
120
+ * <Link to="/checkout" state={[ProductState({ name: p.name, price: p.price }), CartState(c)]}>
121
+ * Checkout
122
+ * </Link>
98
123
  *
99
- * // Legacy: static state
124
+ * // Plain static state
100
125
  * <Link to="/product" state={{ from: "list" }}>View</Link>
101
126
  *
102
- * // Legacy: dynamic state (called at click time)
127
+ * // Plain just-in-time state (called at click time, requires client component)
103
128
  * <Link to="/product" state={() => ({ scrollY: window.scrollY })}>View</Link>
104
129
  * ```
105
130
  */
@@ -134,9 +159,9 @@ function isExternalUrl(href: string): boolean {
134
159
  /**
135
160
  * Type-safe Link component for SPA navigation
136
161
  *
137
- * Works with router.href() for type-safe URLs:
162
+ * Works with router.reverse() for type-safe URLs:
138
163
  * ```tsx
139
- * <Link to={router.href("shop.products.detail", { slug: "my-product" })}>
164
+ * <Link to={router.reverse("shop.products.detail", { slug: "my-product" })}>
140
165
  * View Product
141
166
  * </Link>
142
167
  * ```
@@ -147,23 +172,45 @@ function isExternalUrl(href: string): boolean {
147
172
  * <Link to="https://example.com">External</Link>
148
173
  * ```
149
174
  */
150
- export const Link: ForwardRefExoticComponent<LinkProps & RefAttributes<HTMLAnchorElement>> = forwardRef<HTMLAnchorElement, LinkProps>(function Link(
175
+ export const Link: ForwardRefExoticComponent<
176
+ LinkProps & RefAttributes<HTMLAnchorElement>
177
+ > = forwardRef<HTMLAnchorElement, LinkProps>(function Link(
151
178
  {
152
179
  to,
153
180
  replace = false,
154
181
  scroll = true,
155
182
  reloadDocument = false,
183
+ revalidate,
156
184
  prefetch = "none",
157
185
  state,
158
186
  children,
159
187
  onClick,
160
188
  ...props
161
189
  },
162
- ref
190
+ ref,
163
191
  ) {
164
192
  const ctx = useContext(NavigationStoreContext);
165
193
  const isExternal = isExternalUrl(to);
166
194
 
195
+ // Resolve adaptive: viewport on touch devices, hover on pointer devices
196
+ const resolvedStrategy =
197
+ prefetch === "adaptive" ? (isTouchDevice ? "viewport" : "hover") : prefetch;
198
+
199
+ // Internal ref for viewport observation; merge with forwarded ref
200
+ const internalRef = useRef<HTMLAnchorElement | null>(null);
201
+ const setRef = useCallback(
202
+ (node: HTMLAnchorElement | null) => {
203
+ internalRef.current = node;
204
+ if (typeof ref === "function") {
205
+ ref(node);
206
+ } else if (ref) {
207
+ (ref as React.MutableRefObject<HTMLAnchorElement | null>).current =
208
+ node;
209
+ }
210
+ },
211
+ [ref],
212
+ );
213
+
167
214
  // Use ref to always get the latest state/getter without adding to useCallback deps
168
215
  // This enables just-in-time state resolution without causing re-renders
169
216
  const stateRef = useRef(state);
@@ -194,43 +241,109 @@ export const Link: ForwardRefExoticComponent<LinkProps & RefAttributes<HTMLAncho
194
241
  const target = (e.currentTarget as HTMLAnchorElement).target;
195
242
  if (target && target !== "_self") return;
196
243
 
244
+ // Hash-only navigation: let the browser handle anchor scrolling natively.
245
+ if (isHashOnlyNavigation(e.currentTarget as HTMLAnchorElement)) {
246
+ return;
247
+ }
248
+
249
+ // No navigation context (outside provider): fall back to native navigation.
250
+ if (!ctx?.navigate) {
251
+ return;
252
+ }
253
+
197
254
  // Prevent default and use SPA navigation
198
255
  e.preventDefault();
199
256
  // Stop propagation to prevent link-interceptor from also handling this
200
257
  e.stopPropagation();
201
258
 
202
- if (ctx?.navigate) {
203
- // Resolve state just-in-time based on format
204
- let resolvedState: unknown;
205
- const currentState = stateRef.current;
206
-
207
- if (Array.isArray(currentState) && currentState.length > 0 && isLocationStateEntry(currentState[0])) {
208
- // Type-safe LocationStateEntry[] - resolve each entry into keyed object
209
- resolvedState = resolveLocationStateEntries(currentState as LocationStateEntry[]);
210
- } else if (typeof currentState === "function") {
211
- // Legacy getter function
212
- resolvedState = currentState();
213
- } else {
214
- // Legacy static value
215
- resolvedState = currentState;
216
- }
259
+ const currentState = stateRef.current;
260
+ let resolvedState: unknown;
217
261
 
218
- ctx.navigate(to, { replace, scroll, state: resolvedState });
262
+ if (
263
+ Array.isArray(currentState) &&
264
+ currentState.length > 0 &&
265
+ isLocationStateEntry(currentState[0])
266
+ ) {
267
+ resolvedState = resolveLocationStateEntries(
268
+ currentState as LocationStateEntry[],
269
+ );
270
+ } else if (typeof currentState === "function") {
271
+ resolvedState = currentState();
272
+ } else if (currentState != null) {
273
+ resolvedState = currentState;
219
274
  }
275
+
276
+ ctx.navigate(to, { replace, scroll, state: resolvedState, revalidate });
220
277
  },
221
- [to, isExternal, reloadDocument, replace, scroll, ctx, onClick]
278
+ [to, isExternal, reloadDocument, replace, scroll, revalidate, ctx, onClick],
222
279
  );
223
280
 
224
281
  const handleMouseEnter = useCallback(() => {
225
- if (prefetch === "hover" && !isExternal && ctx?.store) {
282
+ if (resolvedStrategy === "hover" && !isExternal && ctx?.store) {
283
+ const segmentState = ctx.store.getSegmentState();
284
+ prefetchDirect(to, segmentState.currentSegmentIds, ctx.version);
285
+ }
286
+ }, [resolvedStrategy, to, isExternal, ctx]);
287
+
288
+ // Viewport/render prefetch: waits for idle before starting,
289
+ // uses concurrency-limited queue to avoid flooding.
290
+ useEffect(() => {
291
+ if (isExternal || !ctx?.store) return;
292
+ const isViewport = resolvedStrategy === "viewport";
293
+ const isRender = resolvedStrategy === "render";
294
+ if (!isViewport && !isRender) return;
295
+
296
+ let cancelled = false;
297
+ let unsubIdle: (() => void) | undefined;
298
+ let observedElement: Element | null = null;
299
+
300
+ const triggerPrefetch = () => {
301
+ if (cancelled) return;
226
302
  const segmentState = ctx.store.getSegmentState();
227
- prefetchUrl(to, segmentState.currentSegmentIds);
303
+ prefetchQueued(to, segmentState.currentSegmentIds, ctx.version);
304
+ };
305
+
306
+ // Schedule prefetch only when the app is idle (no navigation/streaming).
307
+ // This avoids competing with hydration and active navigation fetches.
308
+ const scheduleWhenIdle = (callback: () => void) => {
309
+ const state = ctx.eventController.getState();
310
+ if (state.state === "idle" && !state.isStreaming) {
311
+ callback();
312
+ return;
313
+ }
314
+ const unsub = ctx.eventController.subscribe(() => {
315
+ const s = ctx.eventController.getState();
316
+ if (s.state === "idle" && !s.isStreaming) {
317
+ unsub();
318
+ callback();
319
+ }
320
+ });
321
+ unsubIdle = unsub;
322
+ };
323
+
324
+ if (isRender) {
325
+ scheduleWhenIdle(triggerPrefetch);
326
+ } else if (isViewport) {
327
+ const element = internalRef.current;
328
+ if (!element) return;
329
+ observedElement = element;
330
+ observeForPrefetch(element, () => {
331
+ scheduleWhenIdle(triggerPrefetch);
332
+ });
228
333
  }
229
- }, [prefetch, to, isExternal, ctx]);
334
+
335
+ return () => {
336
+ cancelled = true;
337
+ unsubIdle?.();
338
+ if (isViewport && observedElement) {
339
+ unobserveForPrefetch(observedElement);
340
+ }
341
+ };
342
+ }, [resolvedStrategy, to, isExternal, ctx]);
230
343
 
231
344
  return (
232
345
  <a
233
- ref={ref}
346
+ ref={setRef}
234
347
  href={to}
235
348
  onClick={handleClick}
236
349
  onMouseEnter={handleMouseEnter}
@@ -238,11 +351,10 @@ export const Link: ForwardRefExoticComponent<LinkProps & RefAttributes<HTMLAncho
238
351
  data-external={isExternal ? "" : undefined}
239
352
  data-scroll={scroll === false ? "false" : undefined}
240
353
  data-replace={replace ? "true" : undefined}
354
+ data-revalidate={revalidate === false ? "false" : undefined}
241
355
  {...props}
242
356
  >
243
- <LinkContext.Provider value={to}>
244
- {children}
245
- </LinkContext.Provider>
357
+ <LinkContext.Provider value={to}>{children}</LinkContext.Provider>
246
358
  </a>
247
359
  );
248
360
  });
@@ -14,7 +14,7 @@ import {
14
14
  } from "./context.js";
15
15
  import type {
16
16
  NavigationStore,
17
- RscPayload,
17
+ NavigationUpdate,
18
18
  NavigateOptions,
19
19
  NavigationBridge,
20
20
  } from "../types.js";
@@ -22,7 +22,9 @@ import type { EventController } from "../event-controller.js";
22
22
  import { RootErrorBoundary } from "../../root-error-boundary.js";
23
23
  import type { HandleData } from "../types.js";
24
24
  import { ThemeProvider } from "../../theme/ThemeProvider.js";
25
+ import { NonceContext } from "./nonce-context.js";
25
26
  import type { ResolvedThemeConfig, Theme } from "../../theme/types.js";
27
+ import { cancelAllPrefetches } from "../prefetch/queue.js";
26
28
 
27
29
  /**
28
30
  * Process handles from an async generator, updating the event controller
@@ -42,7 +44,7 @@ async function processHandles(
42
44
  matched?: string[];
43
45
  isPartial?: boolean;
44
46
  historyKey: string;
45
- }
47
+ },
46
48
  ): Promise<void> {
47
49
  const { eventController, store, matched, isPartial, historyKey } = opts;
48
50
 
@@ -53,7 +55,7 @@ async function processHandles(
53
55
  // the current route's breadcrumbs (e.g., quick popstate after clicking a link).
54
56
  if (historyKey !== store.getHistoryKey()) {
55
57
  console.log(
56
- "[NavigationProvider] Stopping handle processing - user navigated away"
58
+ "[NavigationProvider] Stopping handle processing - user navigated away",
57
59
  );
58
60
  return;
59
61
  }
@@ -100,9 +102,9 @@ export interface NavigationProviderProps {
100
102
  eventController: EventController;
101
103
 
102
104
  /**
103
- * Initial RSC payload from server
105
+ * Initial rendered tree + metadata from server payload
104
106
  */
105
- initialPayload: RscPayload;
107
+ initialPayload: NavigationUpdate;
106
108
 
107
109
  /**
108
110
  * Navigation bridge for handling navigation
@@ -120,6 +122,18 @@ export interface NavigationProviderProps {
120
122
  * Only used when themeConfig is provided
121
123
  */
122
124
  initialTheme?: Theme;
125
+
126
+ /**
127
+ * Whether connection warmup is enabled.
128
+ * When true, keeps TLS alive by sending HEAD requests after idle periods.
129
+ */
130
+ warmupEnabled?: boolean;
131
+
132
+ /**
133
+ * App version from server payload (stable, immutable).
134
+ * Forwarded to prefetch requests for version mismatch detection.
135
+ */
136
+ version?: string;
123
137
  }
124
138
 
125
139
  /**
@@ -150,6 +164,8 @@ export function NavigationProvider({
150
164
  bridge,
151
165
  themeConfig,
152
166
  initialTheme,
167
+ warmupEnabled,
168
+ version,
153
169
  }: NavigationProviderProps): ReactNode {
154
170
  // Track current payload for rendering (this triggers re-renders)
155
171
  const [payload, setPayload] = useState(initialPayload);
@@ -161,7 +177,7 @@ export function NavigationProvider({
161
177
  async (url: string, options?: NavigateOptions): Promise<void> => {
162
178
  await bridge.navigate(url, options);
163
179
  },
164
- []
180
+ [],
165
181
  );
166
182
 
167
183
  /**
@@ -178,10 +194,113 @@ export function NavigationProvider({
178
194
  eventController,
179
195
  navigate,
180
196
  refresh,
197
+ version,
181
198
  }),
182
- []
199
+ [],
183
200
  );
184
201
 
202
+ // Connection warmup: keep TLS alive after idle periods.
203
+ // After 60s of no user interaction, marks connection as "cold".
204
+ // On next interaction or visibility change, sends a HEAD request to warm TLS
205
+ // before the user actually clicks a link.
206
+ useEffect(() => {
207
+ if (!warmupEnabled) return;
208
+
209
+ const IDLE_TIMEOUT = 60_000;
210
+ const DEBOUNCE_DELAY = 150;
211
+
212
+ let idleTimer: ReturnType<typeof setTimeout> | undefined;
213
+ let debounceTimer: ReturnType<typeof setTimeout> | undefined;
214
+ let isCold = false;
215
+ let warmupListenersAttached = false;
216
+
217
+ function sendWarmup() {
218
+ isCold = false;
219
+ fetch("/?_rsc_warmup", { method: "HEAD" }).catch(() => {});
220
+ }
221
+
222
+ function triggerWarmup() {
223
+ if (!isCold) return;
224
+ clearTimeout(debounceTimer);
225
+ debounceTimer = setTimeout(() => {
226
+ sendWarmup();
227
+ detachWarmupListeners();
228
+ resetIdleTimer();
229
+ }, DEBOUNCE_DELAY);
230
+ }
231
+
232
+ function onVisibilityChange() {
233
+ if (document.visibilityState === "visible" && isCold) {
234
+ triggerWarmup();
235
+ }
236
+ }
237
+
238
+ function attachWarmupListeners() {
239
+ if (warmupListenersAttached) return;
240
+ warmupListenersAttached = true;
241
+ document.addEventListener("visibilitychange", onVisibilityChange);
242
+ document.addEventListener("mousemove", triggerWarmup, { once: true });
243
+ document.addEventListener("touchstart", triggerWarmup, { once: true });
244
+ }
245
+
246
+ function detachWarmupListeners() {
247
+ warmupListenersAttached = false;
248
+ document.removeEventListener("visibilitychange", onVisibilityChange);
249
+ document.removeEventListener("mousemove", triggerWarmup);
250
+ document.removeEventListener("touchstart", triggerWarmup);
251
+ }
252
+
253
+ function markCold() {
254
+ isCold = true;
255
+ attachWarmupListeners();
256
+ }
257
+
258
+ function resetIdleTimer() {
259
+ clearTimeout(idleTimer);
260
+ isCold = false;
261
+ idleTimer = setTimeout(markCold, IDLE_TIMEOUT);
262
+ }
263
+
264
+ // Activity events that reset the idle timer
265
+ const activityEvents = [
266
+ "mousemove",
267
+ "keydown",
268
+ "touchstart",
269
+ "scroll",
270
+ ] as const;
271
+ const activityOptions: AddEventListenerOptions = { passive: true };
272
+
273
+ for (const event of activityEvents) {
274
+ document.addEventListener(event, resetIdleTimer, activityOptions);
275
+ }
276
+
277
+ resetIdleTimer();
278
+
279
+ return () => {
280
+ clearTimeout(idleTimer);
281
+ clearTimeout(debounceTimer);
282
+ detachWarmupListeners();
283
+ for (const event of activityEvents) {
284
+ document.removeEventListener(event, resetIdleTimer);
285
+ }
286
+ };
287
+ }, [warmupEnabled]);
288
+
289
+ // Cancel speculative prefetches when navigation starts.
290
+ // Viewport/render prefetches should not compete with navigation fetches.
291
+ useEffect(() => {
292
+ let wasIdle = true;
293
+ const unsub = eventController.subscribe(() => {
294
+ const state = eventController.getState();
295
+ const isIdle = state.state === "idle" && !state.isStreaming;
296
+ if (wasIdle && !isIdle) {
297
+ cancelAllPrefetches();
298
+ }
299
+ wasIdle = isIdle;
300
+ });
301
+ return unsub;
302
+ }, [eventController]);
303
+
185
304
  // Subscribe to UI updates (for re-rendering the tree)
186
305
  useEffect(() => {
187
306
  const unsubscribe = store.onUpdate((update) => {
@@ -190,6 +309,9 @@ export function NavigationProvider({
190
309
  metadata: update.metadata,
191
310
  });
192
311
 
312
+ // Update route params
313
+ eventController.setParams(update.metadata.params ?? {});
314
+
193
315
  // Update handle data progressively as it streams in
194
316
  if (update.metadata.handles) {
195
317
  // Capture historyKey now - by the time async processing completes,
@@ -203,7 +325,7 @@ export function NavigationProvider({
203
325
  isPartial: update.metadata.isPartial,
204
326
  historyKey,
205
327
  }).catch((err) =>
206
- console.error("[NavigationProvider] Error consuming handles:", err)
328
+ console.error("[NavigationProvider] Error consuming handles:", err),
207
329
  );
208
330
  } else if (update.metadata.cachedHandleData) {
209
331
  // For back/forward navigation from cache, restore the cached handleData
@@ -211,14 +333,14 @@ export function NavigationProvider({
211
333
  eventController.setHandleData(
212
334
  update.metadata.cachedHandleData,
213
335
  update.metadata.matched,
214
- false // full replace - restore entire cached state
336
+ false, // full replace - restore entire cached state
215
337
  );
216
338
  } else if (update.metadata.matched) {
217
339
  // For cached navigations without handleData, update segmentOrder to clean up stale data
218
340
  eventController.setHandleData(
219
341
  {}, // Empty data - all existing data not in matched will be cleaned up
220
342
  update.metadata.matched,
221
- true // partial update - will clean up segments not in matched
343
+ true, // partial update - will clean up segments not in matched
222
344
  );
223
345
  }
224
346
  });
@@ -249,6 +371,13 @@ export function NavigationProvider({
249
371
  );
250
372
  }
251
373
 
374
+ // Match SSR tree shape: NonceContext.Provider is always present so
375
+ // hydration sees the same component tree. Value is undefined on the
376
+ // client — CSP nonces are a server-side HTML concern.
377
+ content = (
378
+ <NonceContext.Provider value={undefined}>{content}</NonceContext.Provider>
379
+ );
380
+
252
381
  return (
253
382
  <NavigationStoreContext.Provider value={contextValue}>
254
383
  {content}
@@ -41,6 +41,12 @@ export interface NavigationStoreContextValue {
41
41
  * @returns Promise that resolves when refresh is complete
42
42
  */
43
43
  refresh: () => Promise<void>;
44
+
45
+ /**
46
+ * App version from server payload (stable, immutable).
47
+ * Used in prefetch requests for version mismatch detection.
48
+ */
49
+ version: string | undefined;
44
50
  }
45
51
 
46
52
  /**
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Filter segment IDs to only include routes and layouts.
3
+ * Excludes parallels (contain .@) and loaders (contain D followed by digit).
4
+ */
5
+ export function filterSegmentOrder(matched: string[]): string[] {
6
+ return matched.filter((id) => {
7
+ if (id.includes(".@")) return false;
8
+ if (/D\d+\./.test(id)) return false;
9
+ return true;
10
+ });
11
+ }
@@ -1,20 +1,24 @@
1
1
  // React exports for browser navigation
2
2
 
3
3
  // Hook with Zustand-style selectors
4
- export {
5
- useNavigation,
6
- type NavigationMethods,
7
- type NavigationValue,
8
- } from "./use-navigation.js";
4
+ export { useNavigation } from "./use-navigation.js";
5
+
6
+ // Router actions hook (stable reference, no re-renders)
7
+ export { useRouter } from "./use-router.js";
8
+
9
+ // URL hooks
10
+ export { usePathname } from "./use-pathname.js";
11
+ export { useSearchParams } from "./use-search-params.js";
12
+ export { useParams } from "./use-params.js";
9
13
 
10
14
  // Action state tracking hook
11
15
  export { useAction, type TrackedActionState } from "./use-action.js";
12
16
 
13
17
  // Segments state hook
14
- export { useSegments, initSegmentsSync, type SegmentsState } from "./use-segments.js";
18
+ export { useSegments, type SegmentsState } from "./use-segments.js";
15
19
 
16
20
  // Handle data hook
17
- export { useHandle, initHandleDataSync } from "./use-handle.js";
21
+ export { useHandle } from "./use-handle.js";
18
22
 
19
23
  // Client cache controls hook
20
24
  export {
@@ -35,11 +39,7 @@ export {
35
39
  } from "./context.js";
36
40
 
37
41
  // Link component
38
- export {
39
- Link,
40
- type LinkProps,
41
- type PrefetchStrategy,
42
- } from "./Link.js";
42
+ export { Link, type LinkProps, type PrefetchStrategy } from "./Link.js";
43
43
 
44
44
  // Link status hook
45
45
  export { useLinkStatus, type LinkStatus } from "./use-link-status.js";