@rangojs/router 0.0.0-experimental.ae6e7825 → 0.0.0-experimental.bf2846be

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 (908) hide show
  1. package/README.md +76 -18
  2. package/dist/bin/rango.js +130 -47
  3. package/dist/vite/index.js +688 -433
  4. package/package.json +1 -1
  5. package/skills/links/SKILL.md +3 -1
  6. package/skills/middleware/SKILL.md +2 -0
  7. package/skills/prerender/SKILL.md +110 -68
  8. package/skills/router-setup/SKILL.md +35 -0
  9. package/src/__internal.ts +1 -1
  10. package/src/browser/app-version.ts +14 -0
  11. package/src/browser/navigation-bridge.ts +16 -3
  12. package/src/browser/navigation-client.ts +98 -69
  13. package/src/browser/navigation-store.ts +43 -8
  14. package/src/browser/partial-update.ts +32 -5
  15. package/src/browser/prefetch/cache.ts +16 -6
  16. package/src/browser/prefetch/fetch.ts +35 -6
  17. package/src/browser/react/Link.tsx +67 -8
  18. package/src/browser/react/NavigationProvider.tsx +8 -1
  19. package/src/browser/react/context.ts +7 -2
  20. package/src/browser/react/use-handle.ts +9 -58
  21. package/src/browser/react/use-router.ts +21 -8
  22. package/src/browser/rsc-router.tsx +28 -22
  23. package/src/browser/scroll-restoration.ts +10 -8
  24. package/src/browser/segment-reconciler.ts +26 -0
  25. package/src/browser/server-action-bridge.ts +8 -18
  26. package/src/browser/types.ts +21 -15
  27. package/src/build/generate-manifest.ts +6 -6
  28. package/src/build/generate-route-types.ts +3 -0
  29. package/src/build/route-types/include-resolution.ts +8 -1
  30. package/src/build/route-types/router-processing.ts +211 -72
  31. package/src/build/route-types/scan-filter.ts +8 -1
  32. package/src/client.tsx +2 -56
  33. package/src/deps/browser.ts +0 -1
  34. package/src/handle.ts +40 -0
  35. package/src/index.rsc.ts +3 -1
  36. package/src/index.ts +12 -0
  37. package/src/prerender/store.ts +5 -4
  38. package/src/prerender.ts +138 -77
  39. package/src/reverse.ts +22 -1
  40. package/src/route-definition/dsl-helpers.ts +42 -19
  41. package/src/route-definition/helpers-types.ts +4 -1
  42. package/src/route-definition/index.ts +3 -0
  43. package/src/route-definition/redirect.ts +9 -1
  44. package/src/route-definition/resolve-handler-use.ts +149 -0
  45. package/src/route-types.ts +11 -0
  46. package/src/router/content-negotiation.ts +100 -1
  47. package/src/router/handler-context.ts +48 -15
  48. package/src/router/intercept-resolution.ts +9 -4
  49. package/src/router/loader-resolution.ts +150 -21
  50. package/src/router/match-api.ts +124 -189
  51. package/src/router/match-middleware/cache-lookup.ts +26 -7
  52. package/src/router/match-middleware/segment-resolution.ts +53 -0
  53. package/src/router/match-result.ts +82 -4
  54. package/src/router/middleware-types.ts +0 -6
  55. package/src/router/middleware.ts +0 -3
  56. package/src/router/navigation-snapshot.ts +182 -0
  57. package/src/router/prerender-match.ts +110 -10
  58. package/src/router/preview-match.ts +30 -102
  59. package/src/router/request-classification.ts +310 -0
  60. package/src/router/route-snapshot.ts +245 -0
  61. package/src/router/router-interfaces.ts +36 -4
  62. package/src/router/router-options.ts +37 -11
  63. package/src/router/segment-resolution/fresh.ts +70 -5
  64. package/src/router/segment-resolution/revalidation.ts +87 -9
  65. package/src/router.ts +53 -5
  66. package/src/rsc/handler.ts +472 -398
  67. package/src/rsc/loader-fetch.ts +18 -3
  68. package/src/rsc/manifest-init.ts +5 -1
  69. package/src/rsc/progressive-enhancement.ts +12 -3
  70. package/src/rsc/rsc-rendering.ts +8 -3
  71. package/src/rsc/server-action.ts +8 -2
  72. package/src/rsc/ssr-setup.ts +2 -2
  73. package/src/rsc/types.ts +6 -7
  74. package/src/server/context.ts +39 -2
  75. package/src/server/handle-store.ts +19 -0
  76. package/src/server/loader-registry.ts +9 -8
  77. package/src/server/request-context.ts +131 -16
  78. package/src/ssr/index.tsx +4 -13
  79. package/src/static-handler.ts +18 -6
  80. package/src/types/cache-types.ts +4 -4
  81. package/src/types/handler-context.ts +17 -11
  82. package/src/types/loader-types.ts +32 -5
  83. package/src/types/route-entry.ts +1 -1
  84. package/src/types/segments.ts +1 -0
  85. package/src/urls/path-helper-types.ts +9 -2
  86. package/src/urls/path-helper.ts +47 -12
  87. package/src/urls/pattern-types.ts +12 -0
  88. package/src/urls/response-types.ts +16 -6
  89. package/src/use-loader.tsx +77 -5
  90. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  91. package/src/vite/discovery/discover-routers.ts +5 -1
  92. package/src/vite/discovery/prerender-collection.ts +128 -74
  93. package/src/vite/discovery/state.ts +13 -4
  94. package/src/vite/index.ts +4 -0
  95. package/src/vite/plugin-types.ts +60 -5
  96. package/src/vite/plugins/expose-id-utils.ts +12 -0
  97. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  98. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  99. package/src/vite/plugins/performance-tracks.ts +57 -280
  100. package/src/vite/plugins/refresh-cmd.ts +88 -26
  101. package/src/vite/rango.ts +17 -11
  102. package/src/vite/router-discovery.ts +178 -37
  103. package/src/vite/utils/prerender-utils.ts +18 -0
  104. package/src/vite/utils/shared-utils.ts +3 -2
  105. package/dist/__internal.d.ts +0 -83
  106. package/dist/__internal.d.ts.map +0 -1
  107. package/dist/__internal.js +0 -19
  108. package/dist/__internal.js.map +0 -1
  109. package/dist/__mocks__/version.d.ts +0 -7
  110. package/dist/__mocks__/version.d.ts.map +0 -1
  111. package/dist/__mocks__/version.js +0 -7
  112. package/dist/__mocks__/version.js.map +0 -1
  113. package/dist/__tests__/client-href.test.d.ts +0 -2
  114. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  115. package/dist/__tests__/client-href.test.js +0 -74
  116. package/dist/__tests__/client-href.test.js.map +0 -1
  117. package/dist/__tests__/component-utils.test.d.ts +0 -2
  118. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  119. package/dist/__tests__/component-utils.test.js +0 -51
  120. package/dist/__tests__/component-utils.test.js.map +0 -1
  121. package/dist/__tests__/event-controller.test.d.ts +0 -2
  122. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  123. package/dist/__tests__/event-controller.test.js +0 -538
  124. package/dist/__tests__/event-controller.test.js.map +0 -1
  125. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  126. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  127. package/dist/__tests__/helpers/route-tree.js +0 -374
  128. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  129. package/dist/__tests__/match-result.test.d.ts +0 -2
  130. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  131. package/dist/__tests__/match-result.test.js +0 -154
  132. package/dist/__tests__/match-result.test.js.map +0 -1
  133. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  134. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  135. package/dist/__tests__/navigation-store.test.js +0 -440
  136. package/dist/__tests__/navigation-store.test.js.map +0 -1
  137. package/dist/__tests__/partial-update.test.d.ts +0 -2
  138. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  139. package/dist/__tests__/partial-update.test.js +0 -1009
  140. package/dist/__tests__/partial-update.test.js.map +0 -1
  141. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  142. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  143. package/dist/__tests__/reverse-types.test.js +0 -656
  144. package/dist/__tests__/reverse-types.test.js.map +0 -1
  145. package/dist/__tests__/route-definition.test.d.ts +0 -2
  146. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  147. package/dist/__tests__/route-definition.test.js +0 -55
  148. package/dist/__tests__/route-definition.test.js.map +0 -1
  149. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  150. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  151. package/dist/__tests__/router-helpers.test.js +0 -377
  152. package/dist/__tests__/router-helpers.test.js.map +0 -1
  153. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  154. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  155. package/dist/__tests__/router-integration-2.test.js +0 -426
  156. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  157. package/dist/__tests__/router-integration.test.d.ts +0 -2
  158. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  159. package/dist/__tests__/router-integration.test.js +0 -1051
  160. package/dist/__tests__/router-integration.test.js.map +0 -1
  161. package/dist/__tests__/search-params.test.d.ts +0 -5
  162. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  163. package/dist/__tests__/search-params.test.js +0 -306
  164. package/dist/__tests__/search-params.test.js.map +0 -1
  165. package/dist/__tests__/segment-system.test.d.ts +0 -2
  166. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  167. package/dist/__tests__/segment-system.test.js +0 -627
  168. package/dist/__tests__/segment-system.test.js.map +0 -1
  169. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  170. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  171. package/dist/__tests__/static-handler-types.test.js +0 -63
  172. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  173. package/dist/__tests__/urls.test.d.ts +0 -2
  174. package/dist/__tests__/urls.test.d.ts.map +0 -1
  175. package/dist/__tests__/urls.test.js +0 -421
  176. package/dist/__tests__/urls.test.js.map +0 -1
  177. package/dist/__tests__/use-mount.test.d.ts +0 -2
  178. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  179. package/dist/__tests__/use-mount.test.js +0 -35
  180. package/dist/__tests__/use-mount.test.js.map +0 -1
  181. package/dist/bin/rango.d.ts +0 -2
  182. package/dist/bin/rango.d.ts.map +0 -1
  183. package/dist/bin/rango.js.map +0 -1
  184. package/dist/browser/event-controller.d.ts +0 -191
  185. package/dist/browser/event-controller.d.ts.map +0 -1
  186. package/dist/browser/event-controller.js +0 -559
  187. package/dist/browser/event-controller.js.map +0 -1
  188. package/dist/browser/index.d.ts +0 -2
  189. package/dist/browser/index.d.ts.map +0 -1
  190. package/dist/browser/index.js +0 -14
  191. package/dist/browser/index.js.map +0 -1
  192. package/dist/browser/link-interceptor.d.ts +0 -38
  193. package/dist/browser/link-interceptor.d.ts.map +0 -1
  194. package/dist/browser/link-interceptor.js +0 -99
  195. package/dist/browser/link-interceptor.js.map +0 -1
  196. package/dist/browser/logging.d.ts +0 -10
  197. package/dist/browser/logging.d.ts.map +0 -1
  198. package/dist/browser/logging.js +0 -29
  199. package/dist/browser/logging.js.map +0 -1
  200. package/dist/browser/lru-cache.d.ts +0 -17
  201. package/dist/browser/lru-cache.d.ts.map +0 -1
  202. package/dist/browser/lru-cache.js +0 -50
  203. package/dist/browser/lru-cache.js.map +0 -1
  204. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  205. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  206. package/dist/browser/merge-segment-loaders.js +0 -102
  207. package/dist/browser/merge-segment-loaders.js.map +0 -1
  208. package/dist/browser/navigation-bridge.d.ts +0 -102
  209. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  210. package/dist/browser/navigation-bridge.js +0 -708
  211. package/dist/browser/navigation-bridge.js.map +0 -1
  212. package/dist/browser/navigation-client.d.ts +0 -25
  213. package/dist/browser/navigation-client.d.ts.map +0 -1
  214. package/dist/browser/navigation-client.js +0 -157
  215. package/dist/browser/navigation-client.js.map +0 -1
  216. package/dist/browser/navigation-store.d.ts +0 -101
  217. package/dist/browser/navigation-store.d.ts.map +0 -1
  218. package/dist/browser/navigation-store.js +0 -625
  219. package/dist/browser/navigation-store.js.map +0 -1
  220. package/dist/browser/partial-update.d.ts +0 -75
  221. package/dist/browser/partial-update.d.ts.map +0 -1
  222. package/dist/browser/partial-update.js +0 -426
  223. package/dist/browser/partial-update.js.map +0 -1
  224. package/dist/browser/react/Link.d.ts +0 -86
  225. package/dist/browser/react/Link.d.ts.map +0 -1
  226. package/dist/browser/react/Link.js +0 -128
  227. package/dist/browser/react/Link.js.map +0 -1
  228. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  229. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  230. package/dist/browser/react/NavigationProvider.js +0 -216
  231. package/dist/browser/react/NavigationProvider.js.map +0 -1
  232. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  233. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  234. package/dist/browser/react/ScrollRestoration.js +0 -57
  235. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  236. package/dist/browser/react/context.d.ts +0 -46
  237. package/dist/browser/react/context.d.ts.map +0 -1
  238. package/dist/browser/react/context.js +0 -10
  239. package/dist/browser/react/context.js.map +0 -1
  240. package/dist/browser/react/index.d.ts +0 -11
  241. package/dist/browser/react/index.d.ts.map +0 -1
  242. package/dist/browser/react/index.js +0 -22
  243. package/dist/browser/react/index.js.map +0 -1
  244. package/dist/browser/react/location-state-shared.d.ts +0 -63
  245. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  246. package/dist/browser/react/location-state-shared.js +0 -81
  247. package/dist/browser/react/location-state-shared.js.map +0 -1
  248. package/dist/browser/react/location-state.d.ts +0 -23
  249. package/dist/browser/react/location-state.d.ts.map +0 -1
  250. package/dist/browser/react/location-state.js +0 -29
  251. package/dist/browser/react/location-state.js.map +0 -1
  252. package/dist/browser/react/mount-context.d.ts +0 -24
  253. package/dist/browser/react/mount-context.d.ts.map +0 -1
  254. package/dist/browser/react/mount-context.js +0 -24
  255. package/dist/browser/react/mount-context.js.map +0 -1
  256. package/dist/browser/react/use-action.d.ts +0 -64
  257. package/dist/browser/react/use-action.d.ts.map +0 -1
  258. package/dist/browser/react/use-action.js +0 -134
  259. package/dist/browser/react/use-action.js.map +0 -1
  260. package/dist/browser/react/use-client-cache.d.ts +0 -41
  261. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  262. package/dist/browser/react/use-client-cache.js +0 -39
  263. package/dist/browser/react/use-client-cache.js.map +0 -1
  264. package/dist/browser/react/use-handle.d.ts +0 -31
  265. package/dist/browser/react/use-handle.d.ts.map +0 -1
  266. package/dist/browser/react/use-handle.js +0 -144
  267. package/dist/browser/react/use-handle.js.map +0 -1
  268. package/dist/browser/react/use-href.d.ts +0 -33
  269. package/dist/browser/react/use-href.d.ts.map +0 -1
  270. package/dist/browser/react/use-href.js +0 -39
  271. package/dist/browser/react/use-href.js.map +0 -1
  272. package/dist/browser/react/use-link-status.d.ts +0 -37
  273. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  274. package/dist/browser/react/use-link-status.js +0 -99
  275. package/dist/browser/react/use-link-status.js.map +0 -1
  276. package/dist/browser/react/use-mount.d.ts +0 -25
  277. package/dist/browser/react/use-mount.d.ts.map +0 -1
  278. package/dist/browser/react/use-mount.js +0 -30
  279. package/dist/browser/react/use-mount.js.map +0 -1
  280. package/dist/browser/react/use-navigation.d.ts +0 -27
  281. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  282. package/dist/browser/react/use-navigation.js +0 -87
  283. package/dist/browser/react/use-navigation.js.map +0 -1
  284. package/dist/browser/react/use-segments.d.ts +0 -38
  285. package/dist/browser/react/use-segments.d.ts.map +0 -1
  286. package/dist/browser/react/use-segments.js +0 -130
  287. package/dist/browser/react/use-segments.js.map +0 -1
  288. package/dist/browser/request-controller.d.ts +0 -26
  289. package/dist/browser/request-controller.d.ts.map +0 -1
  290. package/dist/browser/request-controller.js +0 -147
  291. package/dist/browser/request-controller.js.map +0 -1
  292. package/dist/browser/rsc-router.d.ts +0 -129
  293. package/dist/browser/rsc-router.d.ts.map +0 -1
  294. package/dist/browser/rsc-router.js +0 -195
  295. package/dist/browser/rsc-router.js.map +0 -1
  296. package/dist/browser/scroll-restoration.d.ts +0 -93
  297. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  298. package/dist/browser/scroll-restoration.js +0 -321
  299. package/dist/browser/scroll-restoration.js.map +0 -1
  300. package/dist/browser/segment-structure-assert.d.ts +0 -17
  301. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  302. package/dist/browser/segment-structure-assert.js +0 -59
  303. package/dist/browser/segment-structure-assert.js.map +0 -1
  304. package/dist/browser/server-action-bridge.d.ts +0 -26
  305. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  306. package/dist/browser/server-action-bridge.js +0 -668
  307. package/dist/browser/server-action-bridge.js.map +0 -1
  308. package/dist/browser/shallow.d.ts +0 -12
  309. package/dist/browser/shallow.d.ts.map +0 -1
  310. package/dist/browser/shallow.js +0 -34
  311. package/dist/browser/shallow.js.map +0 -1
  312. package/dist/browser/types.d.ts +0 -369
  313. package/dist/browser/types.d.ts.map +0 -1
  314. package/dist/browser/types.js +0 -2
  315. package/dist/browser/types.js.map +0 -1
  316. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  317. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  318. package/dist/build/__tests__/generate-cli.test.js +0 -237
  319. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  320. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  321. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  322. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  323. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  324. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  325. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  326. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  327. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  328. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  329. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  330. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  331. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  332. package/dist/build/generate-manifest.d.ts +0 -81
  333. package/dist/build/generate-manifest.d.ts.map +0 -1
  334. package/dist/build/generate-manifest.js +0 -276
  335. package/dist/build/generate-manifest.js.map +0 -1
  336. package/dist/build/generate-route-types.d.ts +0 -115
  337. package/dist/build/generate-route-types.d.ts.map +0 -1
  338. package/dist/build/generate-route-types.js +0 -740
  339. package/dist/build/generate-route-types.js.map +0 -1
  340. package/dist/build/index.d.ts +0 -21
  341. package/dist/build/index.d.ts.map +0 -1
  342. package/dist/build/index.js +0 -21
  343. package/dist/build/index.js.map +0 -1
  344. package/dist/build/route-trie.d.ts +0 -71
  345. package/dist/build/route-trie.d.ts.map +0 -1
  346. package/dist/build/route-trie.js +0 -175
  347. package/dist/build/route-trie.js.map +0 -1
  348. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  349. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  350. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  351. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  352. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  353. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  354. package/dist/cache/__tests__/document-cache.test.js +0 -345
  355. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  356. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  357. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  358. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  359. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  360. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  361. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  362. package/dist/cache/__tests__/memory-store.test.js +0 -367
  363. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  364. package/dist/cache/cache-scope.d.ts +0 -102
  365. package/dist/cache/cache-scope.d.ts.map +0 -1
  366. package/dist/cache/cache-scope.js +0 -440
  367. package/dist/cache/cache-scope.js.map +0 -1
  368. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  369. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  370. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  371. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  372. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  373. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  374. package/dist/cache/cf/cf-cache-store.js +0 -242
  375. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  376. package/dist/cache/cf/index.d.ts +0 -14
  377. package/dist/cache/cf/index.d.ts.map +0 -1
  378. package/dist/cache/cf/index.js +0 -17
  379. package/dist/cache/cf/index.js.map +0 -1
  380. package/dist/cache/document-cache.d.ts +0 -64
  381. package/dist/cache/document-cache.d.ts.map +0 -1
  382. package/dist/cache/document-cache.js +0 -228
  383. package/dist/cache/document-cache.js.map +0 -1
  384. package/dist/cache/index.d.ts +0 -19
  385. package/dist/cache/index.d.ts.map +0 -1
  386. package/dist/cache/index.js +0 -21
  387. package/dist/cache/index.js.map +0 -1
  388. package/dist/cache/memory-segment-store.d.ts +0 -110
  389. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  390. package/dist/cache/memory-segment-store.js +0 -117
  391. package/dist/cache/memory-segment-store.js.map +0 -1
  392. package/dist/cache/memory-store.d.ts +0 -41
  393. package/dist/cache/memory-store.d.ts.map +0 -1
  394. package/dist/cache/memory-store.js +0 -191
  395. package/dist/cache/memory-store.js.map +0 -1
  396. package/dist/cache/types.d.ts +0 -317
  397. package/dist/cache/types.d.ts.map +0 -1
  398. package/dist/cache/types.js +0 -12
  399. package/dist/cache/types.js.map +0 -1
  400. package/dist/client.d.ts +0 -248
  401. package/dist/client.d.ts.map +0 -1
  402. package/dist/client.js +0 -367
  403. package/dist/client.js.map +0 -1
  404. package/dist/client.rsc.d.ts +0 -26
  405. package/dist/client.rsc.d.ts.map +0 -1
  406. package/dist/client.rsc.js +0 -46
  407. package/dist/client.rsc.js.map +0 -1
  408. package/dist/component-utils.d.ts +0 -36
  409. package/dist/component-utils.d.ts.map +0 -1
  410. package/dist/component-utils.js +0 -61
  411. package/dist/component-utils.js.map +0 -1
  412. package/dist/components/DefaultDocument.d.ts +0 -13
  413. package/dist/components/DefaultDocument.d.ts.map +0 -1
  414. package/dist/components/DefaultDocument.js +0 -15
  415. package/dist/components/DefaultDocument.js.map +0 -1
  416. package/dist/debug.d.ts +0 -58
  417. package/dist/debug.d.ts.map +0 -1
  418. package/dist/debug.js +0 -157
  419. package/dist/debug.js.map +0 -1
  420. package/dist/default-error-boundary.d.ts +0 -11
  421. package/dist/default-error-boundary.d.ts.map +0 -1
  422. package/dist/default-error-boundary.js +0 -45
  423. package/dist/default-error-boundary.js.map +0 -1
  424. package/dist/deps/browser.d.ts +0 -2
  425. package/dist/deps/browser.d.ts.map +0 -1
  426. package/dist/deps/browser.js +0 -3
  427. package/dist/deps/browser.js.map +0 -1
  428. package/dist/deps/html-stream-client.d.ts +0 -2
  429. package/dist/deps/html-stream-client.d.ts.map +0 -1
  430. package/dist/deps/html-stream-client.js +0 -3
  431. package/dist/deps/html-stream-client.js.map +0 -1
  432. package/dist/deps/html-stream-server.d.ts +0 -2
  433. package/dist/deps/html-stream-server.d.ts.map +0 -1
  434. package/dist/deps/html-stream-server.js +0 -3
  435. package/dist/deps/html-stream-server.js.map +0 -1
  436. package/dist/deps/rsc.d.ts +0 -2
  437. package/dist/deps/rsc.d.ts.map +0 -1
  438. package/dist/deps/rsc.js +0 -4
  439. package/dist/deps/rsc.js.map +0 -1
  440. package/dist/deps/ssr.d.ts +0 -2
  441. package/dist/deps/ssr.d.ts.map +0 -1
  442. package/dist/deps/ssr.js +0 -3
  443. package/dist/deps/ssr.js.map +0 -1
  444. package/dist/errors.d.ts +0 -174
  445. package/dist/errors.d.ts.map +0 -1
  446. package/dist/errors.js +0 -241
  447. package/dist/errors.js.map +0 -1
  448. package/dist/handle.d.ts +0 -78
  449. package/dist/handle.d.ts.map +0 -1
  450. package/dist/handle.js +0 -82
  451. package/dist/handle.js.map +0 -1
  452. package/dist/handles/MetaTags.d.ts +0 -14
  453. package/dist/handles/MetaTags.d.ts.map +0 -1
  454. package/dist/handles/MetaTags.js +0 -136
  455. package/dist/handles/MetaTags.js.map +0 -1
  456. package/dist/handles/index.d.ts +0 -6
  457. package/dist/handles/index.d.ts.map +0 -1
  458. package/dist/handles/index.js +0 -6
  459. package/dist/handles/index.js.map +0 -1
  460. package/dist/handles/meta.d.ts +0 -39
  461. package/dist/handles/meta.d.ts.map +0 -1
  462. package/dist/handles/meta.js +0 -202
  463. package/dist/handles/meta.js.map +0 -1
  464. package/dist/host/__tests__/errors.test.d.ts +0 -2
  465. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  466. package/dist/host/__tests__/errors.test.js +0 -76
  467. package/dist/host/__tests__/errors.test.js.map +0 -1
  468. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  469. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  470. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  471. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  472. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  473. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  474. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  475. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  476. package/dist/host/__tests__/router.test.d.ts +0 -2
  477. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  478. package/dist/host/__tests__/router.test.js +0 -241
  479. package/dist/host/__tests__/router.test.js.map +0 -1
  480. package/dist/host/__tests__/testing.test.d.ts +0 -2
  481. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  482. package/dist/host/__tests__/testing.test.js +0 -64
  483. package/dist/host/__tests__/testing.test.js.map +0 -1
  484. package/dist/host/__tests__/utils.test.d.ts +0 -2
  485. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  486. package/dist/host/__tests__/utils.test.js +0 -29
  487. package/dist/host/__tests__/utils.test.js.map +0 -1
  488. package/dist/host/cookie-handler.d.ts +0 -34
  489. package/dist/host/cookie-handler.d.ts.map +0 -1
  490. package/dist/host/cookie-handler.js +0 -124
  491. package/dist/host/cookie-handler.js.map +0 -1
  492. package/dist/host/errors.d.ts +0 -56
  493. package/dist/host/errors.d.ts.map +0 -1
  494. package/dist/host/errors.js +0 -79
  495. package/dist/host/errors.js.map +0 -1
  496. package/dist/host/index.d.ts +0 -29
  497. package/dist/host/index.d.ts.map +0 -1
  498. package/dist/host/index.js +0 -32
  499. package/dist/host/index.js.map +0 -1
  500. package/dist/host/pattern-matcher.d.ts +0 -36
  501. package/dist/host/pattern-matcher.d.ts.map +0 -1
  502. package/dist/host/pattern-matcher.js +0 -172
  503. package/dist/host/pattern-matcher.js.map +0 -1
  504. package/dist/host/router.d.ts +0 -26
  505. package/dist/host/router.d.ts.map +0 -1
  506. package/dist/host/router.js +0 -218
  507. package/dist/host/router.js.map +0 -1
  508. package/dist/host/testing.d.ts +0 -36
  509. package/dist/host/testing.d.ts.map +0 -1
  510. package/dist/host/testing.js +0 -55
  511. package/dist/host/testing.js.map +0 -1
  512. package/dist/host/types.d.ts +0 -115
  513. package/dist/host/types.d.ts.map +0 -1
  514. package/dist/host/types.js +0 -7
  515. package/dist/host/types.js.map +0 -1
  516. package/dist/host/utils.d.ts +0 -21
  517. package/dist/host/utils.d.ts.map +0 -1
  518. package/dist/host/utils.js +0 -23
  519. package/dist/host/utils.js.map +0 -1
  520. package/dist/href-client.d.ts +0 -131
  521. package/dist/href-client.d.ts.map +0 -1
  522. package/dist/href-client.js +0 -64
  523. package/dist/href-client.js.map +0 -1
  524. package/dist/href-context.d.ts +0 -29
  525. package/dist/href-context.d.ts.map +0 -1
  526. package/dist/href-context.js +0 -21
  527. package/dist/href-context.js.map +0 -1
  528. package/dist/index.d.ts +0 -73
  529. package/dist/index.d.ts.map +0 -1
  530. package/dist/index.js +0 -91
  531. package/dist/index.js.map +0 -1
  532. package/dist/index.rsc.d.ts +0 -32
  533. package/dist/index.rsc.d.ts.map +0 -1
  534. package/dist/index.rsc.js +0 -40
  535. package/dist/index.rsc.js.map +0 -1
  536. package/dist/internal-debug.d.ts +0 -2
  537. package/dist/internal-debug.d.ts.map +0 -1
  538. package/dist/internal-debug.js +0 -5
  539. package/dist/internal-debug.js.map +0 -1
  540. package/dist/loader.d.ts +0 -14
  541. package/dist/loader.d.ts.map +0 -1
  542. package/dist/loader.js +0 -20
  543. package/dist/loader.js.map +0 -1
  544. package/dist/loader.rsc.d.ts +0 -19
  545. package/dist/loader.rsc.d.ts.map +0 -1
  546. package/dist/loader.rsc.js +0 -99
  547. package/dist/loader.rsc.js.map +0 -1
  548. package/dist/network-error-thrower.d.ts +0 -17
  549. package/dist/network-error-thrower.d.ts.map +0 -1
  550. package/dist/network-error-thrower.js +0 -14
  551. package/dist/network-error-thrower.js.map +0 -1
  552. package/dist/outlet-context.d.ts +0 -13
  553. package/dist/outlet-context.d.ts.map +0 -1
  554. package/dist/outlet-context.js +0 -3
  555. package/dist/outlet-context.js.map +0 -1
  556. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  557. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  558. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  559. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  560. package/dist/prerender/param-hash.d.ts +0 -16
  561. package/dist/prerender/param-hash.d.ts.map +0 -1
  562. package/dist/prerender/param-hash.js +0 -36
  563. package/dist/prerender/param-hash.js.map +0 -1
  564. package/dist/prerender/store.d.ts +0 -38
  565. package/dist/prerender/store.d.ts.map +0 -1
  566. package/dist/prerender/store.js +0 -61
  567. package/dist/prerender/store.js.map +0 -1
  568. package/dist/prerender.d.ts +0 -66
  569. package/dist/prerender.d.ts.map +0 -1
  570. package/dist/prerender.js +0 -57
  571. package/dist/prerender.js.map +0 -1
  572. package/dist/reverse.d.ts +0 -196
  573. package/dist/reverse.d.ts.map +0 -1
  574. package/dist/reverse.js +0 -78
  575. package/dist/reverse.js.map +0 -1
  576. package/dist/root-error-boundary.d.ts +0 -33
  577. package/dist/root-error-boundary.d.ts.map +0 -1
  578. package/dist/root-error-boundary.js +0 -165
  579. package/dist/root-error-boundary.js.map +0 -1
  580. package/dist/route-content-wrapper.d.ts +0 -46
  581. package/dist/route-content-wrapper.d.ts.map +0 -1
  582. package/dist/route-content-wrapper.js +0 -77
  583. package/dist/route-content-wrapper.js.map +0 -1
  584. package/dist/route-definition.d.ts +0 -421
  585. package/dist/route-definition.d.ts.map +0 -1
  586. package/dist/route-definition.js +0 -868
  587. package/dist/route-definition.js.map +0 -1
  588. package/dist/route-map-builder.d.ts +0 -155
  589. package/dist/route-map-builder.d.ts.map +0 -1
  590. package/dist/route-map-builder.js +0 -237
  591. package/dist/route-map-builder.js.map +0 -1
  592. package/dist/route-types.d.ts +0 -165
  593. package/dist/route-types.d.ts.map +0 -1
  594. package/dist/route-types.js +0 -7
  595. package/dist/route-types.js.map +0 -1
  596. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  597. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  598. package/dist/router/__tests__/handler-context.test.js +0 -65
  599. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  600. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  601. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  602. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  603. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  604. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  605. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  606. package/dist/router/__tests__/match-context.test.js +0 -92
  607. package/dist/router/__tests__/match-context.test.js.map +0 -1
  608. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  609. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  610. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  611. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  612. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  613. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  614. package/dist/router/__tests__/match-result.test.js +0 -457
  615. package/dist/router/__tests__/match-result.test.js.map +0 -1
  616. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  617. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  618. package/dist/router/__tests__/on-error.test.js +0 -678
  619. package/dist/router/__tests__/on-error.test.js.map +0 -1
  620. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  621. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  622. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  623. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  624. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  625. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  626. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  627. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  628. package/dist/router/error-handling.d.ts +0 -77
  629. package/dist/router/error-handling.d.ts.map +0 -1
  630. package/dist/router/error-handling.js +0 -202
  631. package/dist/router/error-handling.js.map +0 -1
  632. package/dist/router/handler-context.d.ts +0 -20
  633. package/dist/router/handler-context.d.ts.map +0 -1
  634. package/dist/router/handler-context.js +0 -198
  635. package/dist/router/handler-context.js.map +0 -1
  636. package/dist/router/intercept-resolution.d.ts +0 -66
  637. package/dist/router/intercept-resolution.d.ts.map +0 -1
  638. package/dist/router/intercept-resolution.js +0 -246
  639. package/dist/router/intercept-resolution.js.map +0 -1
  640. package/dist/router/loader-resolution.d.ts +0 -64
  641. package/dist/router/loader-resolution.d.ts.map +0 -1
  642. package/dist/router/loader-resolution.js +0 -284
  643. package/dist/router/loader-resolution.js.map +0 -1
  644. package/dist/router/logging.d.ts +0 -15
  645. package/dist/router/logging.d.ts.map +0 -1
  646. package/dist/router/logging.js +0 -99
  647. package/dist/router/logging.js.map +0 -1
  648. package/dist/router/manifest.d.ts +0 -22
  649. package/dist/router/manifest.d.ts.map +0 -1
  650. package/dist/router/manifest.js +0 -181
  651. package/dist/router/manifest.js.map +0 -1
  652. package/dist/router/match-api.d.ts +0 -35
  653. package/dist/router/match-api.d.ts.map +0 -1
  654. package/dist/router/match-api.js +0 -406
  655. package/dist/router/match-api.js.map +0 -1
  656. package/dist/router/match-context.d.ts +0 -206
  657. package/dist/router/match-context.d.ts.map +0 -1
  658. package/dist/router/match-context.js +0 -17
  659. package/dist/router/match-context.js.map +0 -1
  660. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  661. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  662. package/dist/router/match-middleware/background-revalidation.js +0 -75
  663. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  664. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  665. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  666. package/dist/router/match-middleware/cache-lookup.js +0 -257
  667. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  668. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  669. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  670. package/dist/router/match-middleware/cache-store.js +0 -108
  671. package/dist/router/match-middleware/cache-store.js.map +0 -1
  672. package/dist/router/match-middleware/index.d.ts +0 -81
  673. package/dist/router/match-middleware/index.d.ts.map +0 -1
  674. package/dist/router/match-middleware/index.js +0 -80
  675. package/dist/router/match-middleware/index.js.map +0 -1
  676. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  677. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  678. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  679. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  680. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  681. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  682. package/dist/router/match-middleware/segment-resolution.js +0 -53
  683. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  684. package/dist/router/match-pipelines.d.ts +0 -147
  685. package/dist/router/match-pipelines.d.ts.map +0 -1
  686. package/dist/router/match-pipelines.js +0 -82
  687. package/dist/router/match-pipelines.js.map +0 -1
  688. package/dist/router/match-result.d.ts +0 -126
  689. package/dist/router/match-result.d.ts.map +0 -1
  690. package/dist/router/match-result.js +0 -93
  691. package/dist/router/match-result.js.map +0 -1
  692. package/dist/router/metrics.d.ts +0 -20
  693. package/dist/router/metrics.d.ts.map +0 -1
  694. package/dist/router/metrics.js +0 -47
  695. package/dist/router/metrics.js.map +0 -1
  696. package/dist/router/middleware.d.ts +0 -249
  697. package/dist/router/middleware.d.ts.map +0 -1
  698. package/dist/router/middleware.js +0 -434
  699. package/dist/router/middleware.js.map +0 -1
  700. package/dist/router/middleware.test.d.ts +0 -2
  701. package/dist/router/middleware.test.d.ts.map +0 -1
  702. package/dist/router/middleware.test.js +0 -816
  703. package/dist/router/middleware.test.js.map +0 -1
  704. package/dist/router/pattern-matching.d.ts +0 -149
  705. package/dist/router/pattern-matching.d.ts.map +0 -1
  706. package/dist/router/pattern-matching.js +0 -349
  707. package/dist/router/pattern-matching.js.map +0 -1
  708. package/dist/router/revalidation.d.ts +0 -44
  709. package/dist/router/revalidation.d.ts.map +0 -1
  710. package/dist/router/revalidation.js +0 -147
  711. package/dist/router/revalidation.js.map +0 -1
  712. package/dist/router/router-context.d.ts +0 -135
  713. package/dist/router/router-context.d.ts.map +0 -1
  714. package/dist/router/router-context.js +0 -36
  715. package/dist/router/router-context.js.map +0 -1
  716. package/dist/router/segment-resolution.d.ts +0 -127
  717. package/dist/router/segment-resolution.d.ts.map +0 -1
  718. package/dist/router/segment-resolution.js +0 -919
  719. package/dist/router/segment-resolution.js.map +0 -1
  720. package/dist/router/trie-matching.d.ts +0 -40
  721. package/dist/router/trie-matching.d.ts.map +0 -1
  722. package/dist/router/trie-matching.js +0 -127
  723. package/dist/router/trie-matching.js.map +0 -1
  724. package/dist/router/types.d.ts +0 -136
  725. package/dist/router/types.d.ts.map +0 -1
  726. package/dist/router/types.js +0 -7
  727. package/dist/router/types.js.map +0 -1
  728. package/dist/router.d.ts +0 -753
  729. package/dist/router.d.ts.map +0 -1
  730. package/dist/router.gen.d.ts +0 -6
  731. package/dist/router.gen.d.ts.map +0 -1
  732. package/dist/router.gen.js +0 -6
  733. package/dist/router.gen.js.map +0 -1
  734. package/dist/router.js +0 -1304
  735. package/dist/router.js.map +0 -1
  736. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  737. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  738. package/dist/rsc/__tests__/helpers.test.js +0 -140
  739. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  740. package/dist/rsc/handler.d.ts +0 -45
  741. package/dist/rsc/handler.d.ts.map +0 -1
  742. package/dist/rsc/handler.js +0 -1172
  743. package/dist/rsc/handler.js.map +0 -1
  744. package/dist/rsc/helpers.d.ts +0 -16
  745. package/dist/rsc/helpers.d.ts.map +0 -1
  746. package/dist/rsc/helpers.js +0 -55
  747. package/dist/rsc/helpers.js.map +0 -1
  748. package/dist/rsc/index.d.ts +0 -22
  749. package/dist/rsc/index.d.ts.map +0 -1
  750. package/dist/rsc/index.js +0 -23
  751. package/dist/rsc/index.js.map +0 -1
  752. package/dist/rsc/nonce.d.ts +0 -9
  753. package/dist/rsc/nonce.d.ts.map +0 -1
  754. package/dist/rsc/nonce.js +0 -18
  755. package/dist/rsc/nonce.js.map +0 -1
  756. package/dist/rsc/types.d.ts +0 -206
  757. package/dist/rsc/types.d.ts.map +0 -1
  758. package/dist/rsc/types.js +0 -8
  759. package/dist/rsc/types.js.map +0 -1
  760. package/dist/search-params.d.ts +0 -103
  761. package/dist/search-params.d.ts.map +0 -1
  762. package/dist/search-params.js +0 -74
  763. package/dist/search-params.js.map +0 -1
  764. package/dist/segment-system.d.ts +0 -75
  765. package/dist/segment-system.d.ts.map +0 -1
  766. package/dist/segment-system.js +0 -336
  767. package/dist/segment-system.js.map +0 -1
  768. package/dist/server/context.d.ts +0 -245
  769. package/dist/server/context.d.ts.map +0 -1
  770. package/dist/server/context.js +0 -197
  771. package/dist/server/context.js.map +0 -1
  772. package/dist/server/fetchable-loader-store.d.ts +0 -18
  773. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  774. package/dist/server/fetchable-loader-store.js +0 -18
  775. package/dist/server/fetchable-loader-store.js.map +0 -1
  776. package/dist/server/handle-store.d.ts +0 -85
  777. package/dist/server/handle-store.d.ts.map +0 -1
  778. package/dist/server/handle-store.js +0 -142
  779. package/dist/server/handle-store.js.map +0 -1
  780. package/dist/server/loader-registry.d.ts +0 -55
  781. package/dist/server/loader-registry.d.ts.map +0 -1
  782. package/dist/server/loader-registry.js +0 -132
  783. package/dist/server/loader-registry.js.map +0 -1
  784. package/dist/server/request-context.d.ts +0 -226
  785. package/dist/server/request-context.d.ts.map +0 -1
  786. package/dist/server/request-context.js +0 -290
  787. package/dist/server/request-context.js.map +0 -1
  788. package/dist/server/root-layout.d.ts +0 -4
  789. package/dist/server/root-layout.d.ts.map +0 -1
  790. package/dist/server/root-layout.js +0 -5
  791. package/dist/server/root-layout.js.map +0 -1
  792. package/dist/server.d.ts +0 -15
  793. package/dist/server.d.ts.map +0 -1
  794. package/dist/server.js +0 -20
  795. package/dist/server.js.map +0 -1
  796. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  797. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  798. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  799. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  800. package/dist/ssr/index.d.ts +0 -98
  801. package/dist/ssr/index.d.ts.map +0 -1
  802. package/dist/ssr/index.js +0 -158
  803. package/dist/ssr/index.js.map +0 -1
  804. package/dist/static-handler.d.ts +0 -50
  805. package/dist/static-handler.d.ts.map +0 -1
  806. package/dist/static-handler.gen.d.ts +0 -5
  807. package/dist/static-handler.gen.d.ts.map +0 -1
  808. package/dist/static-handler.gen.js +0 -5
  809. package/dist/static-handler.gen.js.map +0 -1
  810. package/dist/static-handler.js +0 -29
  811. package/dist/static-handler.js.map +0 -1
  812. package/dist/theme/ThemeProvider.d.ts +0 -20
  813. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  814. package/dist/theme/ThemeProvider.js +0 -240
  815. package/dist/theme/ThemeProvider.js.map +0 -1
  816. package/dist/theme/ThemeScript.d.ts +0 -48
  817. package/dist/theme/ThemeScript.d.ts.map +0 -1
  818. package/dist/theme/ThemeScript.js +0 -13
  819. package/dist/theme/ThemeScript.js.map +0 -1
  820. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  821. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  822. package/dist/theme/__tests__/theme.test.js +0 -103
  823. package/dist/theme/__tests__/theme.test.js.map +0 -1
  824. package/dist/theme/constants.d.ts +0 -29
  825. package/dist/theme/constants.d.ts.map +0 -1
  826. package/dist/theme/constants.js +0 -48
  827. package/dist/theme/constants.js.map +0 -1
  828. package/dist/theme/index.d.ts +0 -31
  829. package/dist/theme/index.d.ts.map +0 -1
  830. package/dist/theme/index.js +0 -36
  831. package/dist/theme/index.js.map +0 -1
  832. package/dist/theme/theme-context.d.ts +0 -40
  833. package/dist/theme/theme-context.d.ts.map +0 -1
  834. package/dist/theme/theme-context.js +0 -60
  835. package/dist/theme/theme-context.js.map +0 -1
  836. package/dist/theme/theme-script.d.ts +0 -27
  837. package/dist/theme/theme-script.d.ts.map +0 -1
  838. package/dist/theme/theme-script.js +0 -147
  839. package/dist/theme/theme-script.js.map +0 -1
  840. package/dist/theme/types.d.ts +0 -163
  841. package/dist/theme/types.d.ts.map +0 -1
  842. package/dist/theme/types.js +0 -11
  843. package/dist/theme/types.js.map +0 -1
  844. package/dist/theme/use-theme.d.ts +0 -12
  845. package/dist/theme/use-theme.d.ts.map +0 -1
  846. package/dist/theme/use-theme.js +0 -40
  847. package/dist/theme/use-theme.js.map +0 -1
  848. package/dist/types.d.ts +0 -1479
  849. package/dist/types.d.ts.map +0 -1
  850. package/dist/types.js +0 -10
  851. package/dist/types.js.map +0 -1
  852. package/dist/urls.d.ts +0 -441
  853. package/dist/urls.d.ts.map +0 -1
  854. package/dist/urls.gen.d.ts +0 -8
  855. package/dist/urls.gen.d.ts.map +0 -1
  856. package/dist/urls.gen.js +0 -8
  857. package/dist/urls.gen.js.map +0 -1
  858. package/dist/urls.js +0 -443
  859. package/dist/urls.js.map +0 -1
  860. package/dist/use-loader.d.ts +0 -127
  861. package/dist/use-loader.d.ts.map +0 -1
  862. package/dist/use-loader.js +0 -237
  863. package/dist/use-loader.js.map +0 -1
  864. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  865. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  866. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  867. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  868. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  869. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  870. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  871. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  872. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  873. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  874. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  875. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  876. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  877. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  878. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  879. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  880. package/dist/vite/ast-handler-extract.d.ts +0 -49
  881. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  882. package/dist/vite/ast-handler-extract.js +0 -249
  883. package/dist/vite/ast-handler-extract.js.map +0 -1
  884. package/dist/vite/expose-action-id.d.ts +0 -19
  885. package/dist/vite/expose-action-id.d.ts.map +0 -1
  886. package/dist/vite/expose-action-id.js +0 -250
  887. package/dist/vite/expose-action-id.js.map +0 -1
  888. package/dist/vite/expose-id-utils.d.ts +0 -69
  889. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  890. package/dist/vite/expose-id-utils.js +0 -289
  891. package/dist/vite/expose-id-utils.js.map +0 -1
  892. package/dist/vite/expose-internal-ids.d.ts +0 -22
  893. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  894. package/dist/vite/expose-internal-ids.js +0 -886
  895. package/dist/vite/expose-internal-ids.js.map +0 -1
  896. package/dist/vite/index.d.ts +0 -149
  897. package/dist/vite/index.d.ts.map +0 -1
  898. package/dist/vite/index.js.map +0 -1
  899. package/dist/vite/index.named-routes.gen.ts +0 -103
  900. package/dist/vite/package-resolution.d.ts +0 -43
  901. package/dist/vite/package-resolution.d.ts.map +0 -1
  902. package/dist/vite/package-resolution.js +0 -112
  903. package/dist/vite/package-resolution.js.map +0 -1
  904. package/dist/vite/virtual-entries.d.ts +0 -25
  905. package/dist/vite/virtual-entries.d.ts.map +0 -1
  906. package/dist/vite/virtual-entries.js +0 -110
  907. package/dist/vite/virtual-entries.js.map +0 -1
  908. package/src/browser/debug-channel.ts +0 -112
@@ -12,8 +12,6 @@ import {
12
12
  startBrowserTransaction,
13
13
  } from "./logging.js";
14
14
  import { getRangoState } from "./rango-state.js";
15
- import { createClientDebugChannel, DEBUG_ID_HEADER } from "./debug-channel.js";
16
- import { findSourceMapURL } from "../deps/browser.js";
17
15
  import {
18
16
  extractRscHeaderUrl,
19
17
  emptyResponse,
@@ -63,6 +61,7 @@ export function createNavigationClient(
63
61
  staleRevalidation,
64
62
  interceptSourceUrl,
65
63
  version,
64
+ routerId,
66
65
  hmr,
67
66
  } = options;
68
67
 
@@ -90,6 +89,9 @@ export function createNavigationClient(
90
89
  if (version) {
91
90
  fetchUrl.searchParams.set("_rsc_v", version);
92
91
  }
92
+ if (routerId) {
93
+ fetchUrl.searchParams.set("_rsc_rid", routerId);
94
+ }
93
95
 
94
96
  // Check completed in-memory prefetch cache before making a network request.
95
97
  // The cache key includes the source URL (previousUrl) because the
@@ -99,35 +101,88 @@ export function createNavigationClient(
99
101
  //
100
102
  const canUsePrefetch = !staleRevalidation && !hmr && !interceptSourceUrl;
101
103
  const cacheKey = buildPrefetchKey(previousUrl, fetchUrl);
102
- const cachedResponse = canUsePrefetch ? consumePrefetch(cacheKey) : null;
103
- const inflightResponsePromise = canUsePrefetch
104
- ? consumeInflightPrefetch(cacheKey)
105
- : null;
104
+ // Wildcard key matches prefetch entries stored with a custom prefetchKey
105
+ // (Link's prefetchKey prop stores under "*" instead of the source URL).
106
+ const wildcardKey = "*\0" + fetchUrl.pathname + fetchUrl.search;
107
+
108
+ let cachedResponse: Response | null = null;
109
+ let hitKey: string | null = null;
110
+ if (canUsePrefetch) {
111
+ cachedResponse = consumePrefetch(cacheKey);
112
+ if (cachedResponse) {
113
+ hitKey = cacheKey;
114
+ } else {
115
+ cachedResponse = consumePrefetch(wildcardKey);
116
+ if (cachedResponse) hitKey = wildcardKey;
117
+ }
118
+ }
119
+
120
+ let inflightResponsePromise: Promise<Response | null> | null = null;
121
+ if (canUsePrefetch && !cachedResponse) {
122
+ inflightResponsePromise = consumeInflightPrefetch(cacheKey);
123
+ if (inflightResponsePromise) {
124
+ hitKey = cacheKey;
125
+ } else {
126
+ inflightResponsePromise = consumeInflightPrefetch(wildcardKey);
127
+ if (inflightResponsePromise) hitKey = wildcardKey;
128
+ }
129
+ }
106
130
  // Track when the stream completes
107
131
  let resolveStreamComplete: () => void;
108
132
  const streamComplete = new Promise<void>((resolve) => {
109
133
  resolveStreamComplete = resolve;
110
134
  });
111
135
 
112
- // Dev-only: debug channel is created lazily only for fresh fetches.
113
- // Cached/inflight responses don't have a server-side channel, so passing
114
- // debugChannel to createFromFetch would hang waiting for data that never comes.
115
- let debugChannel: {
116
- readable: ReadableStream<Uint8Array>;
117
- writable: WritableStream<Uint8Array>;
118
- } | null = null;
136
+ /**
137
+ * Validate RSC control headers on any response (fresh, cached, or
138
+ * in-flight). Handles version-mismatch reloads and server redirects.
139
+ * Returns the response unchanged when no control header is present.
140
+ */
141
+ const validateRscHeaders = (
142
+ response: Response,
143
+ source: string,
144
+ ): Response | Promise<Response> => {
145
+ // Version mismatch — server wants a full page reload
146
+ const reload = extractRscHeaderUrl(response, "X-RSC-Reload");
147
+ if (reload === "blocked") {
148
+ resolveStreamComplete();
149
+ return emptyResponse();
150
+ }
151
+ if (reload) {
152
+ if (tx) {
153
+ browserDebugLog(tx, `version mismatch, reloading (${source})`, {
154
+ reloadUrl: reload.url,
155
+ });
156
+ }
157
+ window.location.href = reload.url;
158
+ // Block further processing — page is reloading
159
+ return new Promise<Response>(() => {});
160
+ }
119
161
 
120
- /** Start a fresh navigation fetch (no cache / inflight hit). */
121
- const doFreshFetch = (): Promise<Response> => {
122
- // Dev-only: create debug channel for React Performance Tracks
123
- const debugId = (import.meta as any).hot
124
- ? crypto.randomUUID()
125
- : undefined;
126
- if (debugId) {
127
- debugChannel = createClientDebugChannel(debugId);
128
- console.log("[perf-tracks] client: fresh fetch, debugId =", debugId);
162
+ // Server-side redirect without state: the server returned 204 with
163
+ // X-RSC-Redirect instead of a 3xx (which fetch would auto-follow
164
+ // to a URL rendering full HTML). Throw ServerRedirect so the
165
+ // navigation bridge catches it and re-navigates with _skipCache.
166
+ const redirect = extractRscHeaderUrl(response, "X-RSC-Redirect");
167
+ if (redirect === "blocked") {
168
+ resolveStreamComplete();
169
+ return emptyResponse();
129
170
  }
171
+ if (redirect) {
172
+ if (tx) {
173
+ browserDebugLog(tx, `server redirect (${source})`, {
174
+ redirectUrl: redirect.url,
175
+ });
176
+ }
177
+ resolveStreamComplete();
178
+ throw new ServerRedirect(redirect.url, undefined);
179
+ }
180
+
181
+ return response;
182
+ };
130
183
 
184
+ /** Start a fresh navigation fetch (no cache / inflight hit). */
185
+ const doFreshFetch = (): Promise<Response> => {
131
186
  if (tx) {
132
187
  browserDebugLog(tx, "fetching", {
133
188
  path: `${fetchUrl.pathname}${fetchUrl.search}`,
@@ -143,47 +198,14 @@ export function createNavigationClient(
143
198
  "X-RSC-Router-Intercept-Source": interceptSourceUrl,
144
199
  }),
145
200
  ...(hmr && { "X-RSC-HMR": "1" }),
146
- ...(debugId && { [DEBUG_ID_HEADER]: debugId }),
147
201
  },
148
202
  signal,
149
203
  }).then((response) => {
150
- // Check for version mismatch - server wants us to reload
151
- const reload = extractRscHeaderUrl(response, "X-RSC-Reload");
152
- if (reload === "blocked") {
153
- resolveStreamComplete();
154
- return emptyResponse();
155
- }
156
- if (reload) {
157
- if (tx) {
158
- browserDebugLog(tx, "version mismatch, reloading", {
159
- reloadUrl: reload.url,
160
- });
161
- }
162
- window.location.href = reload.url;
163
- return new Promise<Response>(() => {});
164
- }
165
-
166
- // Server-side redirect without state: the server returned 204 with
167
- // X-RSC-Redirect instead of a 3xx (which fetch would auto-follow
168
- // to a URL rendering full HTML). Throw ServerRedirect so the
169
- // navigation bridge catches it and re-navigates with _skipCache.
170
- const redirect = extractRscHeaderUrl(response, "X-RSC-Redirect");
171
- if (redirect === "blocked") {
172
- resolveStreamComplete();
173
- return emptyResponse();
174
- }
175
- if (redirect) {
176
- if (tx) {
177
- browserDebugLog(tx, "server redirect", {
178
- redirectUrl: redirect.url,
179
- });
180
- }
181
- resolveStreamComplete();
182
- throw new ServerRedirect(redirect.url, undefined);
183
- }
204
+ const validated = validateRscHeaders(response, "fetch");
205
+ if (validated instanceof Promise) return validated;
184
206
 
185
207
  return teeWithCompletion(
186
- response,
208
+ validated,
187
209
  () => {
188
210
  if (tx) browserDebugLog(tx, "stream complete");
189
211
  resolveStreamComplete();
@@ -197,13 +219,17 @@ export function createNavigationClient(
197
219
 
198
220
  if (cachedResponse) {
199
221
  if (tx) {
200
- browserDebugLog(tx, "prefetch cache hit", { key: cacheKey });
222
+ browserDebugLog(tx, "prefetch cache hit", {
223
+ key: hitKey,
224
+ wildcard: hitKey === wildcardKey,
225
+ });
201
226
  }
202
- // Cached response body is already fully buffered (arrayBuffer),
203
- // so stream completion is immediate.
204
227
  responsePromise = Promise.resolve(cachedResponse).then((response) => {
228
+ const validated = validateRscHeaders(response, "prefetch cache");
229
+ if (validated instanceof Promise) return validated;
230
+
205
231
  return teeWithCompletion(
206
- response,
232
+ validated,
207
233
  () => {
208
234
  if (tx) browserDebugLog(tx, "stream complete (from cache)");
209
235
  resolveStreamComplete();
@@ -213,7 +239,10 @@ export function createNavigationClient(
213
239
  });
214
240
  } else if (inflightResponsePromise) {
215
241
  if (tx) {
216
- browserDebugLog(tx, "reusing inflight prefetch", { key: cacheKey });
242
+ browserDebugLog(tx, "reusing inflight prefetch", {
243
+ key: hitKey,
244
+ wildcard: hitKey === wildcardKey,
245
+ });
217
246
  }
218
247
  responsePromise = inflightResponsePromise.then(async (response) => {
219
248
  if (!response) {
@@ -223,8 +252,11 @@ export function createNavigationClient(
223
252
  return doFreshFetch();
224
253
  }
225
254
 
255
+ const validated = validateRscHeaders(response, "inflight prefetch");
256
+ if (validated instanceof Promise) return validated;
257
+
226
258
  return teeWithCompletion(
227
- response,
259
+ validated,
228
260
  () => {
229
261
  if (tx) {
230
262
  browserDebugLog(tx, "stream complete (from inflight prefetch)");
@@ -239,11 +271,8 @@ export function createNavigationClient(
239
271
  }
240
272
 
241
273
  try {
242
- // Deserialize RSC payload
243
- const payload = await deps.createFromFetch<RscPayload>(
244
- responsePromise,
245
- debugChannel ? { debugChannel, findSourceMapURL } : undefined,
246
- );
274
+ const payload = await deps.createFromFetch<RscPayload>(responsePromise);
275
+
247
276
  if (tx) {
248
277
  browserDebugLog(tx, "response received", {
249
278
  isPartial: payload.metadata?.isPartial,
@@ -28,9 +28,15 @@ const DEFAULT_ACTION_STATE: TrackedActionState = {
28
28
  // Maximum number of history entries to cache (URLs visited)
29
29
  const HISTORY_CACHE_SIZE = 20;
30
30
 
31
- // Cache entry: [url-key, segments, stale, handleData?]
31
+ // Cache entry: [url-key, segments, stale, handleData?, routerId?]
32
32
  // stale=true means the data may be outdated and should be revalidated on access
33
- type HistoryCacheEntry = [string, ResolvedSegment[], boolean, HandleData?];
33
+ type HistoryCacheEntry = [
34
+ string,
35
+ ResolvedSegment[],
36
+ boolean,
37
+ HandleData?,
38
+ string?,
39
+ ];
34
40
 
35
41
  /**
36
42
  * Shallow clone handleData to avoid reference sharing between cache entries.
@@ -258,6 +264,11 @@ export function createNavigationStore(
258
264
  // Used to maintain intercept context during action revalidation
259
265
  let interceptSourceUrl: string | null = null;
260
266
 
267
+ // Router identity - tracks which router is currently active.
268
+ // When this changes on a partial response, the client forces a full
269
+ // tree replacement instead of reconciling with stale segments.
270
+ let currentRouterId: string | undefined;
271
+
261
272
  // Action state tracking (for useAction hook)
262
273
  // Maps action function ID to its tracked state
263
274
  const actionStates = new Map<string, TrackedActionState>();
@@ -571,10 +582,17 @@ export function createNavigationStore(
571
582
  segments,
572
583
  false,
573
584
  clonedHandleData,
585
+ currentRouterId,
574
586
  ];
575
587
  } else {
576
588
  // Add new entry at the end (not stale)
577
- historyCache.push([historyKey, segments, false, clonedHandleData]);
589
+ historyCache.push([
590
+ historyKey,
591
+ segments,
592
+ false,
593
+ clonedHandleData,
594
+ currentRouterId,
595
+ ]);
578
596
  // Remove oldest entries if over limit
579
597
  while (historyCache.length > cacheSize) {
580
598
  historyCache.shift();
@@ -586,14 +604,22 @@ export function createNavigationStore(
586
604
  * Get cached segments for a history entry
587
605
  * Returns { segments, stale, handleData } or undefined if not cached
588
606
  */
589
- getCachedSegments(
590
- historyKey: string,
591
- ):
592
- | { segments: ResolvedSegment[]; stale: boolean; handleData?: HandleData }
607
+ getCachedSegments(historyKey: string):
608
+ | {
609
+ segments: ResolvedSegment[];
610
+ stale: boolean;
611
+ handleData?: HandleData;
612
+ routerId?: string;
613
+ }
593
614
  | undefined {
594
615
  const entry = historyCache.find(([key]) => key === historyKey);
595
616
  if (!entry) return undefined;
596
- return { segments: entry[1], stale: entry[2], handleData: entry[3] };
617
+ return {
618
+ segments: entry[1],
619
+ stale: entry[2],
620
+ handleData: entry[3],
621
+ routerId: entry[4],
622
+ };
597
623
  },
598
624
 
599
625
  /**
@@ -621,6 +647,7 @@ export function createNavigationStore(
621
647
  entry[1],
622
648
  entry[2],
623
649
  clonedHandleData,
650
+ entry[4], // preserve routerId
624
651
  ];
625
652
  }
626
653
  },
@@ -687,6 +714,14 @@ export function createNavigationStore(
687
714
  interceptSourceUrl = url;
688
715
  },
689
716
 
717
+ getRouterId(): string | undefined {
718
+ return currentRouterId;
719
+ },
720
+
721
+ setRouterId(id: string): void {
722
+ currentRouterId = id;
723
+ },
724
+
690
725
  // ========================================================================
691
726
  // UI Update Notifications
692
727
  // ========================================================================
@@ -39,8 +39,8 @@ export interface PartialUpdateConfig {
39
39
  segments: ResolvedSegment[],
40
40
  options?: RenderSegmentsOptions,
41
41
  ) => Promise<ReactNode> | ReactNode;
42
- /** RSC version received from server (from initial payload metadata) */
43
- version?: string;
42
+ /** RSC version getter returns the current version (may change after HMR) */
43
+ getVersion?: () => string | undefined;
44
44
  }
45
45
 
46
46
  /**
@@ -104,7 +104,13 @@ export type PartialUpdater = (
104
104
  export function createPartialUpdater(
105
105
  config: PartialUpdateConfig,
106
106
  ): PartialUpdater {
107
- const { store, client, onUpdate, renderSegments, version } = config;
107
+ const {
108
+ store,
109
+ client,
110
+ onUpdate,
111
+ renderSegments,
112
+ getVersion = () => undefined,
113
+ } = config;
108
114
 
109
115
  /**
110
116
  * Get current page's cached segments as an array
@@ -182,6 +188,11 @@ export function createPartialUpdater(
182
188
  targetCache && targetCache.length > 0
183
189
  ? targetCache
184
190
  : getCurrentCachedSegments();
191
+ const cachedSegsSource =
192
+ targetCache && targetCache.length > 0 ? "history-cache" : "current-page";
193
+ debugLog(
194
+ `[Browser] cachedSegs source: ${cachedSegsSource} (${cachedSegs.length} segments: ${cachedSegs.map((s) => s.id).join(", ")})`,
195
+ );
185
196
 
186
197
  // Fetch partial payload (no abort signal - RSC doesn't support it well)
187
198
  let fetchResult: Awaited<ReturnType<NavigationClient["fetchPartial"]>>;
@@ -193,7 +204,8 @@ export function createPartialUpdater(
193
204
  // (action redirect sends empty segments for a fresh render).
194
205
  staleRevalidation:
195
206
  mode.type === "stale-revalidation" || segments.length === 0,
196
- version,
207
+ version: getVersion(),
208
+ routerId: store.getRouterId?.(),
197
209
  });
198
210
  // Mark navigation as streaming (response received, now parsing RSC).
199
211
  // Called after fetchPartial so pendingUrl stays set during the network wait,
@@ -206,6 +218,21 @@ export function createPartialUpdater(
206
218
  streamingToken.end();
207
219
  });
208
220
 
221
+ // Detect app switch: if routerId changed, the navigation crossed into
222
+ // a different router (e.g., via host router path mount). Downgrade
223
+ // partial to full so the entire tree is replaced without reconciliation
224
+ // against stale segments from the previous app.
225
+ if (payload.metadata?.routerId) {
226
+ const prevRouterId = store.getRouterId?.();
227
+ if (prevRouterId && prevRouterId !== payload.metadata.routerId) {
228
+ debugLog(
229
+ `[Browser] App switch detected (${prevRouterId} → ${payload.metadata.routerId}), forcing full update`,
230
+ );
231
+ payload.metadata.isPartial = false;
232
+ }
233
+ store.setRouterId?.(payload.metadata.routerId);
234
+ }
235
+
209
236
  // Handle server-side redirect with state
210
237
  if (payload.metadata?.redirect) {
211
238
  if (signal?.aborted) {
@@ -259,7 +286,7 @@ export function createPartialUpdater(
259
286
  existingSegments,
260
287
  );
261
288
 
262
- // Fix: tx.commit() cached the source page's handleData because
289
+ // tx.commit() cached the source page's handleData because
263
290
  // eventController hasn't been updated yet. Overwrite with the
264
291
  // correct cached handleData to prevent cache corruption on
265
292
  // subsequent navigations to this same URL.
@@ -61,13 +61,23 @@ const inflightPromises = new Map<string, Promise<Response | null>>();
61
61
  let generation = 0;
62
62
 
63
63
  /**
64
- * Build a source-dependent cache key.
65
- * Includes the source page href so the same target prefetched from
66
- * different pages gets separate entries the server response varies
67
- * based on the source page context (diff-based rendering).
64
+ * Build a cache key for prefetched responses.
65
+ *
66
+ * By default the key includes the source page href so the same target
67
+ * prefetched from different pages gets separate entries (the server's
68
+ * diff response depends on the source page context).
69
+ *
70
+ * When `prefetchKey` is provided, the source portion is replaced with
71
+ * a `*` sentinel so all custom-keyed entries share one cache slot per
72
+ * target — enabling source-agnostic cache reuse.
68
73
  */
69
- export function buildPrefetchKey(sourceHref: string, targetUrl: URL): string {
70
- return sourceHref + "\0" + targetUrl.pathname + targetUrl.search;
74
+ export function buildPrefetchKey(
75
+ sourceHref: string,
76
+ targetUrl: URL,
77
+ prefetchKey?: string | ((from: string) => string),
78
+ ): string {
79
+ const source = prefetchKey != null ? "*" : sourceHref;
80
+ return source + "\0" + targetUrl.pathname + targetUrl.search;
71
81
  }
72
82
 
73
83
  /**
@@ -23,6 +23,7 @@ import {
23
23
  import { getRangoState } from "../rango-state.js";
24
24
  import { enqueuePrefetch } from "./queue.js";
25
25
  import { shouldPrefetch } from "./policy.js";
26
+ import { debugLog } from "../logging.js";
26
27
 
27
28
  /**
28
29
  * Build an RSC partial URL for prefetching.
@@ -34,6 +35,7 @@ function buildPrefetchUrl(
34
35
  url: string,
35
36
  segmentIds: string[],
36
37
  version?: string,
38
+ routerId?: string,
37
39
  ): URL | null {
38
40
  let targetUrl: URL;
39
41
  try {
@@ -51,6 +53,9 @@ function buildPrefetchUrl(
51
53
  if (version) {
52
54
  targetUrl.searchParams.set("_rsc_v", version);
53
55
  }
56
+ if (routerId) {
57
+ targetUrl.searchParams.set("_rsc_rid", routerId);
58
+ }
54
59
  return targetUrl;
55
60
  }
56
61
 
@@ -108,13 +113,28 @@ export function prefetchDirect(
108
113
  url: string,
109
114
  segmentIds: string[],
110
115
  version?: string,
116
+ routerId?: string,
117
+ prefetchKey?: string | ((from: string) => string),
111
118
  ): void {
112
119
  if (!shouldPrefetch()) return;
113
120
 
114
- const targetUrl = buildPrefetchUrl(url, segmentIds, version);
121
+ const targetUrl = buildPrefetchUrl(url, segmentIds, version, routerId);
115
122
  if (!targetUrl) return;
116
- const key = buildPrefetchKey(window.location.href, targetUrl);
117
- if (hasPrefetch(key)) return;
123
+ const key = buildPrefetchKey(window.location.href, targetUrl, prefetchKey);
124
+ if (hasPrefetch(key)) {
125
+ debugLog("[prefetch] direct dedup (key already exists)", {
126
+ url,
127
+ key,
128
+ prefetchKey: prefetchKey != null ? String(prefetchKey) : undefined,
129
+ });
130
+ return;
131
+ }
132
+ debugLog("[prefetch] direct fetch", {
133
+ url,
134
+ key,
135
+ source: window.location.href,
136
+ prefetchKey: prefetchKey != null ? String(prefetchKey) : undefined,
137
+ });
118
138
  executePrefetchFetch(key, targetUrl.toString());
119
139
  }
120
140
 
@@ -127,12 +147,21 @@ export function prefetchQueued(
127
147
  url: string,
128
148
  segmentIds: string[],
129
149
  version?: string,
150
+ routerId?: string,
151
+ prefetchKey?: string | ((from: string) => string),
130
152
  ): string {
131
153
  if (!shouldPrefetch()) return "";
132
- const targetUrl = buildPrefetchUrl(url, segmentIds, version);
154
+ const targetUrl = buildPrefetchUrl(url, segmentIds, version, routerId);
133
155
  if (!targetUrl) return "";
134
- const key = buildPrefetchKey(window.location.href, targetUrl);
135
- if (hasPrefetch(key)) return key;
156
+ const key = buildPrefetchKey(window.location.href, targetUrl, prefetchKey);
157
+ if (hasPrefetch(key)) {
158
+ debugLog("[prefetch] queued dedup (key already exists)", {
159
+ url,
160
+ key,
161
+ prefetchKey: prefetchKey != null ? String(prefetchKey) : undefined,
162
+ });
163
+ return key;
164
+ }
136
165
  const fetchUrlStr = targetUrl.toString();
137
166
  enqueuePrefetch(key, (signal) => {
138
167
  // Re-check at execution time: a hover-triggered prefetchDirect may
@@ -5,6 +5,7 @@ import React, {
5
5
  useCallback,
6
6
  useContext,
7
7
  useEffect,
8
+ useMemo,
8
9
  useRef,
9
10
  type ForwardRefExoticComponent,
10
11
  type RefAttributes,
@@ -32,6 +33,7 @@ export type LinkState =
32
33
  | StateOrGetter<Record<string, unknown>>;
33
34
 
34
35
  import { prefetchDirect, prefetchQueued } from "../prefetch/fetch.js";
36
+ import { getAppVersion } from "../app-version.js";
35
37
  import {
36
38
  observeForPrefetch,
37
39
  unobserveForPrefetch,
@@ -95,6 +97,26 @@ export interface LinkProps extends Omit<
95
97
  * @default "none"
96
98
  */
97
99
  prefetch?: PrefetchStrategy;
100
+ /**
101
+ * Custom prefetch cache key for source-agnostic cache reuse.
102
+ * When set, prefetch responses are cached independently of the current
103
+ * page URL, so navigating to the same target from different source pages
104
+ * reuses the cached prefetch.
105
+ *
106
+ * - String: static group name (e.g., `"pages"`)
107
+ * - Function: receives current URL (`window.location.href`), returns a
108
+ * normalized source key
109
+ *
110
+ * @example
111
+ * ```tsx
112
+ * // Static group — all "pages" links share one cache entry per target
113
+ * <Link to="/page/3" prefetch="hover" prefetchKey="pages" />
114
+ *
115
+ * // Normalize — strip trailing page number from source URL
116
+ * <Link to="/page/3" prefetch="hover" prefetchKey={(from) => from.replace(/\/\d+$/, '')} />
117
+ * ```
118
+ */
119
+ prefetchKey?: string | ((from: string) => string);
98
120
  /**
99
121
  * State to pass to history.pushState/replaceState.
100
122
  * Accessible via useLocationState() hook.
@@ -182,6 +204,7 @@ export const Link: ForwardRefExoticComponent<
182
204
  reloadDocument = false,
183
205
  revalidate,
184
206
  prefetch = "none",
207
+ prefetchKey,
185
208
  state,
186
209
  children,
187
210
  onClick,
@@ -192,6 +215,16 @@ export const Link: ForwardRefExoticComponent<
192
215
  const ctx = useContext(NavigationStoreContext);
193
216
  const isExternal = isExternalUrl(to);
194
217
 
218
+ // Auto-prefix with basename for app-local paths.
219
+ // Skip if external, already prefixed, or not a root-relative path.
220
+ const resolvedTo = useMemo(() => {
221
+ if (isExternal) return to;
222
+ const bn = ctx?.basename;
223
+ if (!bn || !to.startsWith("/") || to.startsWith(bn + "/") || to === bn)
224
+ return to;
225
+ return to === "/" ? bn : bn + to;
226
+ }, [to, isExternal, ctx?.basename]);
227
+
195
228
  // Resolve adaptive: viewport on touch devices, hover on pointer devices
196
229
  const resolvedStrategy =
197
230
  prefetch === "adaptive" ? (isTouchDevice ? "viewport" : "hover") : prefetch;
@@ -273,9 +306,23 @@ export const Link: ForwardRefExoticComponent<
273
306
  resolvedState = currentState;
274
307
  }
275
308
 
276
- ctx.navigate(to, { replace, scroll, state: resolvedState, revalidate });
309
+ ctx.navigate(resolvedTo, {
310
+ replace,
311
+ scroll,
312
+ state: resolvedState,
313
+ revalidate,
314
+ });
277
315
  },
278
- [to, isExternal, reloadDocument, replace, scroll, revalidate, ctx, onClick],
316
+ [
317
+ resolvedTo,
318
+ isExternal,
319
+ reloadDocument,
320
+ replace,
321
+ scroll,
322
+ revalidate,
323
+ ctx,
324
+ onClick,
325
+ ],
279
326
  );
280
327
 
281
328
  const handleMouseEnter = useCallback(() => {
@@ -289,9 +336,15 @@ export const Link: ForwardRefExoticComponent<
289
336
  // prefetch — prefetchDirect bypasses the queue, and hasPrefetch
290
337
  // deduplicates if the viewport prefetch already completed.
291
338
  const segmentState = ctx.store.getSegmentState();
292
- prefetchDirect(to, segmentState.currentSegmentIds, ctx.version);
339
+ prefetchDirect(
340
+ resolvedTo,
341
+ segmentState.currentSegmentIds,
342
+ getAppVersion(),
343
+ ctx.store.getRouterId?.(),
344
+ prefetchKey,
345
+ );
293
346
  }
294
- }, [resolvedStrategy, to, isExternal, ctx]);
347
+ }, [resolvedStrategy, resolvedTo, isExternal, ctx, prefetchKey]);
295
348
 
296
349
  // Viewport/render prefetch: waits for idle before starting,
297
350
  // uses concurrency-limited queue to avoid flooding.
@@ -308,7 +361,13 @@ export const Link: ForwardRefExoticComponent<
308
361
  const triggerPrefetch = () => {
309
362
  if (cancelled) return;
310
363
  const segmentState = ctx.store.getSegmentState();
311
- prefetchQueued(to, segmentState.currentSegmentIds, ctx.version);
364
+ prefetchQueued(
365
+ resolvedTo,
366
+ segmentState.currentSegmentIds,
367
+ getAppVersion(),
368
+ ctx.store.getRouterId?.(),
369
+ prefetchKey,
370
+ );
312
371
  };
313
372
 
314
373
  // Schedule prefetch only when the app is idle (no navigation/streaming).
@@ -347,12 +406,12 @@ export const Link: ForwardRefExoticComponent<
347
406
  unobserveForPrefetch(observedElement);
348
407
  }
349
408
  };
350
- }, [resolvedStrategy, to, isExternal, ctx]);
409
+ }, [resolvedStrategy, resolvedTo, isExternal, ctx, prefetchKey]);
351
410
 
352
411
  return (
353
412
  <a
354
413
  ref={setRef}
355
- href={to}
414
+ href={resolvedTo}
356
415
  onClick={handleClick}
357
416
  onMouseEnter={handleMouseEnter}
358
417
  data-link-component
@@ -362,7 +421,7 @@ export const Link: ForwardRefExoticComponent<
362
421
  data-revalidate={revalidate === false ? "false" : undefined}
363
422
  {...props}
364
423
  >
365
- <LinkContext.Provider value={to}>{children}</LinkContext.Provider>
424
+ <LinkContext.Provider value={resolvedTo}>{children}</LinkContext.Provider>
366
425
  </a>
367
426
  );
368
427
  });