@rangojs/router 0.0.0-experimental.debug-cache-fix → 0.0.0-experimental.df410dd5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1077) hide show
  1. package/README.md +196 -43
  2. package/dist/__internal.d.ts +83 -0
  3. package/dist/__internal.d.ts.map +1 -0
  4. package/dist/__internal.js +19 -0
  5. package/dist/__internal.js.map +1 -0
  6. package/dist/__mocks__/version.d.ts +7 -0
  7. package/dist/__mocks__/version.d.ts.map +1 -0
  8. package/dist/__mocks__/version.js +7 -0
  9. package/dist/__mocks__/version.js.map +1 -0
  10. package/dist/__tests__/client-href.test.d.ts +2 -0
  11. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  12. package/dist/__tests__/client-href.test.js +74 -0
  13. package/dist/__tests__/client-href.test.js.map +1 -0
  14. package/dist/__tests__/component-utils.test.d.ts +2 -0
  15. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  16. package/dist/__tests__/component-utils.test.js +51 -0
  17. package/dist/__tests__/component-utils.test.js.map +1 -0
  18. package/dist/__tests__/event-controller.test.d.ts +2 -0
  19. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  20. package/dist/__tests__/event-controller.test.js +538 -0
  21. package/dist/__tests__/event-controller.test.js.map +1 -0
  22. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  24. package/dist/__tests__/helpers/route-tree.js +374 -0
  25. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  26. package/dist/__tests__/match-result.test.d.ts +2 -0
  27. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  28. package/dist/__tests__/match-result.test.js +154 -0
  29. package/dist/__tests__/match-result.test.js.map +1 -0
  30. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  31. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  32. package/dist/__tests__/navigation-store.test.js +440 -0
  33. package/dist/__tests__/navigation-store.test.js.map +1 -0
  34. package/dist/__tests__/partial-update.test.d.ts +2 -0
  35. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  36. package/dist/__tests__/partial-update.test.js +1009 -0
  37. package/dist/__tests__/partial-update.test.js.map +1 -0
  38. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  39. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  40. package/dist/__tests__/reverse-types.test.js +656 -0
  41. package/dist/__tests__/reverse-types.test.js.map +1 -0
  42. package/dist/__tests__/route-definition.test.d.ts +2 -0
  43. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  44. package/dist/__tests__/route-definition.test.js +55 -0
  45. package/dist/__tests__/route-definition.test.js.map +1 -0
  46. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  47. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  48. package/dist/__tests__/router-helpers.test.js +377 -0
  49. package/dist/__tests__/router-helpers.test.js.map +1 -0
  50. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  52. package/dist/__tests__/router-integration-2.test.js +426 -0
  53. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  54. package/dist/__tests__/router-integration.test.d.ts +2 -0
  55. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  56. package/dist/__tests__/router-integration.test.js +1051 -0
  57. package/dist/__tests__/router-integration.test.js.map +1 -0
  58. package/dist/__tests__/search-params.test.d.ts +5 -0
  59. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  60. package/dist/__tests__/search-params.test.js +306 -0
  61. package/dist/__tests__/search-params.test.js.map +1 -0
  62. package/dist/__tests__/segment-system.test.d.ts +2 -0
  63. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  64. package/dist/__tests__/segment-system.test.js +627 -0
  65. package/dist/__tests__/segment-system.test.js.map +1 -0
  66. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  68. package/dist/__tests__/static-handler-types.test.js +63 -0
  69. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  70. package/dist/__tests__/urls.test.d.ts +2 -0
  71. package/dist/__tests__/urls.test.d.ts.map +1 -0
  72. package/dist/__tests__/urls.test.js +421 -0
  73. package/dist/__tests__/urls.test.js.map +1 -0
  74. package/dist/__tests__/use-mount.test.d.ts +2 -0
  75. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  76. package/dist/__tests__/use-mount.test.js +35 -0
  77. package/dist/__tests__/use-mount.test.js.map +1 -0
  78. package/dist/bin/rango.d.ts +2 -0
  79. package/dist/bin/rango.d.ts.map +1 -0
  80. package/dist/bin/rango.js +269 -96
  81. package/dist/bin/rango.js.map +1 -0
  82. package/dist/browser/event-controller.d.ts +191 -0
  83. package/dist/browser/event-controller.d.ts.map +1 -0
  84. package/dist/browser/event-controller.js +559 -0
  85. package/dist/browser/event-controller.js.map +1 -0
  86. package/dist/browser/index.d.ts +2 -0
  87. package/dist/browser/index.d.ts.map +1 -0
  88. package/dist/browser/index.js +14 -0
  89. package/dist/browser/index.js.map +1 -0
  90. package/dist/browser/link-interceptor.d.ts +38 -0
  91. package/dist/browser/link-interceptor.d.ts.map +1 -0
  92. package/dist/browser/link-interceptor.js +99 -0
  93. package/dist/browser/link-interceptor.js.map +1 -0
  94. package/dist/browser/logging.d.ts +10 -0
  95. package/dist/browser/logging.d.ts.map +1 -0
  96. package/dist/browser/logging.js +29 -0
  97. package/dist/browser/logging.js.map +1 -0
  98. package/dist/browser/lru-cache.d.ts +17 -0
  99. package/dist/browser/lru-cache.d.ts.map +1 -0
  100. package/dist/browser/lru-cache.js +50 -0
  101. package/dist/browser/lru-cache.js.map +1 -0
  102. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  103. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  104. package/dist/browser/merge-segment-loaders.js +102 -0
  105. package/dist/browser/merge-segment-loaders.js.map +1 -0
  106. package/dist/browser/navigation-bridge.d.ts +102 -0
  107. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  108. package/dist/browser/navigation-bridge.js +708 -0
  109. package/dist/browser/navigation-bridge.js.map +1 -0
  110. package/dist/browser/navigation-client.d.ts +25 -0
  111. package/dist/browser/navigation-client.d.ts.map +1 -0
  112. package/dist/browser/navigation-client.js +157 -0
  113. package/dist/browser/navigation-client.js.map +1 -0
  114. package/dist/browser/navigation-store.d.ts +101 -0
  115. package/dist/browser/navigation-store.d.ts.map +1 -0
  116. package/dist/browser/navigation-store.js +625 -0
  117. package/dist/browser/navigation-store.js.map +1 -0
  118. package/dist/browser/partial-update.d.ts +75 -0
  119. package/dist/browser/partial-update.d.ts.map +1 -0
  120. package/dist/browser/partial-update.js +426 -0
  121. package/dist/browser/partial-update.js.map +1 -0
  122. package/dist/browser/react/Link.d.ts +86 -0
  123. package/dist/browser/react/Link.d.ts.map +1 -0
  124. package/dist/browser/react/Link.js +128 -0
  125. package/dist/browser/react/Link.js.map +1 -0
  126. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  127. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  128. package/dist/browser/react/NavigationProvider.js +216 -0
  129. package/dist/browser/react/NavigationProvider.js.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  132. package/dist/browser/react/ScrollRestoration.js +57 -0
  133. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  134. package/dist/browser/react/context.d.ts +46 -0
  135. package/dist/browser/react/context.d.ts.map +1 -0
  136. package/dist/browser/react/context.js +10 -0
  137. package/dist/browser/react/context.js.map +1 -0
  138. package/dist/browser/react/index.d.ts +11 -0
  139. package/dist/browser/react/index.d.ts.map +1 -0
  140. package/dist/browser/react/index.js +22 -0
  141. package/dist/browser/react/index.js.map +1 -0
  142. package/dist/browser/react/location-state-shared.d.ts +63 -0
  143. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  144. package/dist/browser/react/location-state-shared.js +81 -0
  145. package/dist/browser/react/location-state-shared.js.map +1 -0
  146. package/dist/browser/react/location-state.d.ts +23 -0
  147. package/dist/browser/react/location-state.d.ts.map +1 -0
  148. package/dist/browser/react/location-state.js +29 -0
  149. package/dist/browser/react/location-state.js.map +1 -0
  150. package/dist/browser/react/mount-context.d.ts +24 -0
  151. package/dist/browser/react/mount-context.d.ts.map +1 -0
  152. package/dist/browser/react/mount-context.js +24 -0
  153. package/dist/browser/react/mount-context.js.map +1 -0
  154. package/dist/browser/react/use-action.d.ts +64 -0
  155. package/dist/browser/react/use-action.d.ts.map +1 -0
  156. package/dist/browser/react/use-action.js +134 -0
  157. package/dist/browser/react/use-action.js.map +1 -0
  158. package/dist/browser/react/use-client-cache.d.ts +41 -0
  159. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  160. package/dist/browser/react/use-client-cache.js +39 -0
  161. package/dist/browser/react/use-client-cache.js.map +1 -0
  162. package/dist/browser/react/use-handle.d.ts +31 -0
  163. package/dist/browser/react/use-handle.d.ts.map +1 -0
  164. package/dist/browser/react/use-handle.js +144 -0
  165. package/dist/browser/react/use-handle.js.map +1 -0
  166. package/dist/browser/react/use-href.d.ts +33 -0
  167. package/dist/browser/react/use-href.d.ts.map +1 -0
  168. package/dist/browser/react/use-href.js +39 -0
  169. package/dist/browser/react/use-href.js.map +1 -0
  170. package/dist/browser/react/use-link-status.d.ts +37 -0
  171. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  172. package/dist/browser/react/use-link-status.js +99 -0
  173. package/dist/browser/react/use-link-status.js.map +1 -0
  174. package/dist/browser/react/use-mount.d.ts +25 -0
  175. package/dist/browser/react/use-mount.d.ts.map +1 -0
  176. package/dist/browser/react/use-mount.js +30 -0
  177. package/dist/browser/react/use-mount.js.map +1 -0
  178. package/dist/browser/react/use-navigation.d.ts +27 -0
  179. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  180. package/dist/browser/react/use-navigation.js +87 -0
  181. package/dist/browser/react/use-navigation.js.map +1 -0
  182. package/dist/browser/react/use-segments.d.ts +38 -0
  183. package/dist/browser/react/use-segments.d.ts.map +1 -0
  184. package/dist/browser/react/use-segments.js +130 -0
  185. package/dist/browser/react/use-segments.js.map +1 -0
  186. package/dist/browser/request-controller.d.ts +26 -0
  187. package/dist/browser/request-controller.d.ts.map +1 -0
  188. package/dist/browser/request-controller.js +147 -0
  189. package/dist/browser/request-controller.js.map +1 -0
  190. package/dist/browser/rsc-router.d.ts +129 -0
  191. package/dist/browser/rsc-router.d.ts.map +1 -0
  192. package/dist/browser/rsc-router.js +195 -0
  193. package/dist/browser/rsc-router.js.map +1 -0
  194. package/dist/browser/scroll-restoration.d.ts +93 -0
  195. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  196. package/dist/browser/scroll-restoration.js +321 -0
  197. package/dist/browser/scroll-restoration.js.map +1 -0
  198. package/dist/browser/segment-structure-assert.d.ts +17 -0
  199. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  200. package/dist/browser/segment-structure-assert.js +59 -0
  201. package/dist/browser/segment-structure-assert.js.map +1 -0
  202. package/dist/browser/server-action-bridge.d.ts +26 -0
  203. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  204. package/dist/browser/server-action-bridge.js +668 -0
  205. package/dist/browser/server-action-bridge.js.map +1 -0
  206. package/dist/browser/shallow.d.ts +12 -0
  207. package/dist/browser/shallow.d.ts.map +1 -0
  208. package/dist/browser/shallow.js +34 -0
  209. package/dist/browser/shallow.js.map +1 -0
  210. package/dist/browser/types.d.ts +369 -0
  211. package/dist/browser/types.d.ts.map +1 -0
  212. package/dist/browser/types.js +2 -0
  213. package/dist/browser/types.js.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  216. package/dist/build/__tests__/generate-cli.test.js +237 -0
  217. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  220. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  221. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  224. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  225. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  230. package/dist/build/generate-manifest.d.ts +81 -0
  231. package/dist/build/generate-manifest.d.ts.map +1 -0
  232. package/dist/build/generate-manifest.js +276 -0
  233. package/dist/build/generate-manifest.js.map +1 -0
  234. package/dist/build/generate-route-types.d.ts +115 -0
  235. package/dist/build/generate-route-types.d.ts.map +1 -0
  236. package/dist/build/generate-route-types.js +740 -0
  237. package/dist/build/generate-route-types.js.map +1 -0
  238. package/dist/build/index.d.ts +21 -0
  239. package/dist/build/index.d.ts.map +1 -0
  240. package/dist/build/index.js +21 -0
  241. package/dist/build/index.js.map +1 -0
  242. package/dist/build/route-trie.d.ts +71 -0
  243. package/dist/build/route-trie.d.ts.map +1 -0
  244. package/dist/build/route-trie.js +175 -0
  245. package/dist/build/route-trie.js.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  248. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  249. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  252. package/dist/cache/__tests__/document-cache.test.js +345 -0
  253. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  260. package/dist/cache/__tests__/memory-store.test.js +367 -0
  261. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  262. package/dist/cache/cache-scope.d.ts +102 -0
  263. package/dist/cache/cache-scope.d.ts.map +1 -0
  264. package/dist/cache/cache-scope.js +440 -0
  265. package/dist/cache/cache-scope.js.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  272. package/dist/cache/cf/cf-cache-store.js +242 -0
  273. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  274. package/dist/cache/cf/index.d.ts +14 -0
  275. package/dist/cache/cf/index.d.ts.map +1 -0
  276. package/dist/cache/cf/index.js +17 -0
  277. package/dist/cache/cf/index.js.map +1 -0
  278. package/dist/cache/document-cache.d.ts +64 -0
  279. package/dist/cache/document-cache.d.ts.map +1 -0
  280. package/dist/cache/document-cache.js +228 -0
  281. package/dist/cache/document-cache.js.map +1 -0
  282. package/dist/cache/index.d.ts +19 -0
  283. package/dist/cache/index.d.ts.map +1 -0
  284. package/dist/cache/index.js +21 -0
  285. package/dist/cache/index.js.map +1 -0
  286. package/dist/cache/memory-segment-store.d.ts +110 -0
  287. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  288. package/dist/cache/memory-segment-store.js +117 -0
  289. package/dist/cache/memory-segment-store.js.map +1 -0
  290. package/dist/cache/memory-store.d.ts +41 -0
  291. package/dist/cache/memory-store.d.ts.map +1 -0
  292. package/dist/cache/memory-store.js +191 -0
  293. package/dist/cache/memory-store.js.map +1 -0
  294. package/dist/cache/types.d.ts +317 -0
  295. package/dist/cache/types.d.ts.map +1 -0
  296. package/dist/cache/types.js +12 -0
  297. package/dist/cache/types.js.map +1 -0
  298. package/dist/client.d.ts +248 -0
  299. package/dist/client.d.ts.map +1 -0
  300. package/dist/client.js +367 -0
  301. package/dist/client.js.map +1 -0
  302. package/dist/client.rsc.d.ts +26 -0
  303. package/dist/client.rsc.d.ts.map +1 -0
  304. package/dist/client.rsc.js +46 -0
  305. package/dist/client.rsc.js.map +1 -0
  306. package/dist/component-utils.d.ts +36 -0
  307. package/dist/component-utils.d.ts.map +1 -0
  308. package/dist/component-utils.js +61 -0
  309. package/dist/component-utils.js.map +1 -0
  310. package/dist/components/DefaultDocument.d.ts +13 -0
  311. package/dist/components/DefaultDocument.d.ts.map +1 -0
  312. package/dist/components/DefaultDocument.js +15 -0
  313. package/dist/components/DefaultDocument.js.map +1 -0
  314. package/dist/debug.d.ts +58 -0
  315. package/dist/debug.d.ts.map +1 -0
  316. package/dist/debug.js +157 -0
  317. package/dist/debug.js.map +1 -0
  318. package/dist/default-error-boundary.d.ts +11 -0
  319. package/dist/default-error-boundary.d.ts.map +1 -0
  320. package/dist/default-error-boundary.js +45 -0
  321. package/dist/default-error-boundary.js.map +1 -0
  322. package/dist/deps/browser.d.ts +2 -0
  323. package/dist/deps/browser.d.ts.map +1 -0
  324. package/dist/deps/browser.js +3 -0
  325. package/dist/deps/browser.js.map +1 -0
  326. package/dist/deps/html-stream-client.d.ts +2 -0
  327. package/dist/deps/html-stream-client.d.ts.map +1 -0
  328. package/dist/deps/html-stream-client.js +3 -0
  329. package/dist/deps/html-stream-client.js.map +1 -0
  330. package/dist/deps/html-stream-server.d.ts +2 -0
  331. package/dist/deps/html-stream-server.d.ts.map +1 -0
  332. package/dist/deps/html-stream-server.js +3 -0
  333. package/dist/deps/html-stream-server.js.map +1 -0
  334. package/dist/deps/rsc.d.ts +2 -0
  335. package/dist/deps/rsc.d.ts.map +1 -0
  336. package/dist/deps/rsc.js +4 -0
  337. package/dist/deps/rsc.js.map +1 -0
  338. package/dist/deps/ssr.d.ts +2 -0
  339. package/dist/deps/ssr.d.ts.map +1 -0
  340. package/dist/deps/ssr.js +3 -0
  341. package/dist/deps/ssr.js.map +1 -0
  342. package/dist/errors.d.ts +174 -0
  343. package/dist/errors.d.ts.map +1 -0
  344. package/dist/errors.js +241 -0
  345. package/dist/errors.js.map +1 -0
  346. package/dist/handle.d.ts +78 -0
  347. package/dist/handle.d.ts.map +1 -0
  348. package/dist/handle.js +82 -0
  349. package/dist/handle.js.map +1 -0
  350. package/dist/handles/MetaTags.d.ts +14 -0
  351. package/dist/handles/MetaTags.d.ts.map +1 -0
  352. package/dist/handles/MetaTags.js +136 -0
  353. package/dist/handles/MetaTags.js.map +1 -0
  354. package/dist/handles/index.d.ts +6 -0
  355. package/dist/handles/index.d.ts.map +1 -0
  356. package/dist/handles/index.js +6 -0
  357. package/dist/handles/index.js.map +1 -0
  358. package/dist/handles/meta.d.ts +39 -0
  359. package/dist/handles/meta.d.ts.map +1 -0
  360. package/dist/handles/meta.js +202 -0
  361. package/dist/handles/meta.js.map +1 -0
  362. package/dist/host/__tests__/errors.test.d.ts +2 -0
  363. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  364. package/dist/host/__tests__/errors.test.js +76 -0
  365. package/dist/host/__tests__/errors.test.js.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  374. package/dist/host/__tests__/router.test.d.ts +2 -0
  375. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  376. package/dist/host/__tests__/router.test.js +241 -0
  377. package/dist/host/__tests__/router.test.js.map +1 -0
  378. package/dist/host/__tests__/testing.test.d.ts +2 -0
  379. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  380. package/dist/host/__tests__/testing.test.js +64 -0
  381. package/dist/host/__tests__/testing.test.js.map +1 -0
  382. package/dist/host/__tests__/utils.test.d.ts +2 -0
  383. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  384. package/dist/host/__tests__/utils.test.js +29 -0
  385. package/dist/host/__tests__/utils.test.js.map +1 -0
  386. package/dist/host/cookie-handler.d.ts +34 -0
  387. package/dist/host/cookie-handler.d.ts.map +1 -0
  388. package/dist/host/cookie-handler.js +124 -0
  389. package/dist/host/cookie-handler.js.map +1 -0
  390. package/dist/host/errors.d.ts +56 -0
  391. package/dist/host/errors.d.ts.map +1 -0
  392. package/dist/host/errors.js +79 -0
  393. package/dist/host/errors.js.map +1 -0
  394. package/dist/host/index.d.ts +29 -0
  395. package/dist/host/index.d.ts.map +1 -0
  396. package/dist/host/index.js +32 -0
  397. package/dist/host/index.js.map +1 -0
  398. package/dist/host/pattern-matcher.d.ts +36 -0
  399. package/dist/host/pattern-matcher.d.ts.map +1 -0
  400. package/dist/host/pattern-matcher.js +172 -0
  401. package/dist/host/pattern-matcher.js.map +1 -0
  402. package/dist/host/router.d.ts +26 -0
  403. package/dist/host/router.d.ts.map +1 -0
  404. package/dist/host/router.js +218 -0
  405. package/dist/host/router.js.map +1 -0
  406. package/dist/host/testing.d.ts +36 -0
  407. package/dist/host/testing.d.ts.map +1 -0
  408. package/dist/host/testing.js +55 -0
  409. package/dist/host/testing.js.map +1 -0
  410. package/dist/host/types.d.ts +115 -0
  411. package/dist/host/types.d.ts.map +1 -0
  412. package/dist/host/types.js +7 -0
  413. package/dist/host/types.js.map +1 -0
  414. package/dist/host/utils.d.ts +21 -0
  415. package/dist/host/utils.d.ts.map +1 -0
  416. package/dist/host/utils.js +23 -0
  417. package/dist/host/utils.js.map +1 -0
  418. package/dist/href-client.d.ts +131 -0
  419. package/dist/href-client.d.ts.map +1 -0
  420. package/dist/href-client.js +64 -0
  421. package/dist/href-client.js.map +1 -0
  422. package/dist/href-context.d.ts +29 -0
  423. package/dist/href-context.d.ts.map +1 -0
  424. package/dist/href-context.js +21 -0
  425. package/dist/href-context.js.map +1 -0
  426. package/dist/index.d.ts +73 -0
  427. package/dist/index.d.ts.map +1 -0
  428. package/dist/index.js +91 -0
  429. package/dist/index.js.map +1 -0
  430. package/dist/index.rsc.d.ts +32 -0
  431. package/dist/index.rsc.d.ts.map +1 -0
  432. package/dist/index.rsc.js +40 -0
  433. package/dist/index.rsc.js.map +1 -0
  434. package/dist/internal-debug.d.ts +2 -0
  435. package/dist/internal-debug.d.ts.map +1 -0
  436. package/dist/internal-debug.js +5 -0
  437. package/dist/internal-debug.js.map +1 -0
  438. package/dist/loader.d.ts +14 -0
  439. package/dist/loader.d.ts.map +1 -0
  440. package/dist/loader.js +20 -0
  441. package/dist/loader.js.map +1 -0
  442. package/dist/loader.rsc.d.ts +19 -0
  443. package/dist/loader.rsc.d.ts.map +1 -0
  444. package/dist/loader.rsc.js +99 -0
  445. package/dist/loader.rsc.js.map +1 -0
  446. package/dist/network-error-thrower.d.ts +17 -0
  447. package/dist/network-error-thrower.d.ts.map +1 -0
  448. package/dist/network-error-thrower.js +14 -0
  449. package/dist/network-error-thrower.js.map +1 -0
  450. package/dist/outlet-context.d.ts +13 -0
  451. package/dist/outlet-context.d.ts.map +1 -0
  452. package/dist/outlet-context.js +3 -0
  453. package/dist/outlet-context.js.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  456. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  457. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  458. package/dist/prerender/param-hash.d.ts +16 -0
  459. package/dist/prerender/param-hash.d.ts.map +1 -0
  460. package/dist/prerender/param-hash.js +36 -0
  461. package/dist/prerender/param-hash.js.map +1 -0
  462. package/dist/prerender/store.d.ts +38 -0
  463. package/dist/prerender/store.d.ts.map +1 -0
  464. package/dist/prerender/store.js +61 -0
  465. package/dist/prerender/store.js.map +1 -0
  466. package/dist/prerender.d.ts +66 -0
  467. package/dist/prerender.d.ts.map +1 -0
  468. package/dist/prerender.js +57 -0
  469. package/dist/prerender.js.map +1 -0
  470. package/dist/reverse.d.ts +196 -0
  471. package/dist/reverse.d.ts.map +1 -0
  472. package/dist/reverse.js +78 -0
  473. package/dist/reverse.js.map +1 -0
  474. package/dist/root-error-boundary.d.ts +33 -0
  475. package/dist/root-error-boundary.d.ts.map +1 -0
  476. package/dist/root-error-boundary.js +165 -0
  477. package/dist/root-error-boundary.js.map +1 -0
  478. package/dist/route-content-wrapper.d.ts +46 -0
  479. package/dist/route-content-wrapper.d.ts.map +1 -0
  480. package/dist/route-content-wrapper.js +77 -0
  481. package/dist/route-content-wrapper.js.map +1 -0
  482. package/dist/route-definition.d.ts +421 -0
  483. package/dist/route-definition.d.ts.map +1 -0
  484. package/dist/route-definition.js +868 -0
  485. package/dist/route-definition.js.map +1 -0
  486. package/dist/route-map-builder.d.ts +155 -0
  487. package/dist/route-map-builder.d.ts.map +1 -0
  488. package/dist/route-map-builder.js +237 -0
  489. package/dist/route-map-builder.js.map +1 -0
  490. package/dist/route-types.d.ts +165 -0
  491. package/dist/route-types.d.ts.map +1 -0
  492. package/dist/route-types.js +7 -0
  493. package/dist/route-types.js.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  496. package/dist/router/__tests__/handler-context.test.js +65 -0
  497. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  502. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  503. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  504. package/dist/router/__tests__/match-context.test.js +92 -0
  505. package/dist/router/__tests__/match-context.test.js.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  508. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  509. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  510. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  511. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  512. package/dist/router/__tests__/match-result.test.js +457 -0
  513. package/dist/router/__tests__/match-result.test.js.map +1 -0
  514. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  515. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  516. package/dist/router/__tests__/on-error.test.js +678 -0
  517. package/dist/router/__tests__/on-error.test.js.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  520. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  521. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  526. package/dist/router/error-handling.d.ts +77 -0
  527. package/dist/router/error-handling.d.ts.map +1 -0
  528. package/dist/router/error-handling.js +202 -0
  529. package/dist/router/error-handling.js.map +1 -0
  530. package/dist/router/handler-context.d.ts +20 -0
  531. package/dist/router/handler-context.d.ts.map +1 -0
  532. package/dist/router/handler-context.js +198 -0
  533. package/dist/router/handler-context.js.map +1 -0
  534. package/dist/router/intercept-resolution.d.ts +66 -0
  535. package/dist/router/intercept-resolution.d.ts.map +1 -0
  536. package/dist/router/intercept-resolution.js +246 -0
  537. package/dist/router/intercept-resolution.js.map +1 -0
  538. package/dist/router/loader-resolution.d.ts +64 -0
  539. package/dist/router/loader-resolution.d.ts.map +1 -0
  540. package/dist/router/loader-resolution.js +284 -0
  541. package/dist/router/loader-resolution.js.map +1 -0
  542. package/dist/router/logging.d.ts +15 -0
  543. package/dist/router/logging.d.ts.map +1 -0
  544. package/dist/router/logging.js +99 -0
  545. package/dist/router/logging.js.map +1 -0
  546. package/dist/router/manifest.d.ts +22 -0
  547. package/dist/router/manifest.d.ts.map +1 -0
  548. package/dist/router/manifest.js +181 -0
  549. package/dist/router/manifest.js.map +1 -0
  550. package/dist/router/match-api.d.ts +35 -0
  551. package/dist/router/match-api.d.ts.map +1 -0
  552. package/dist/router/match-api.js +406 -0
  553. package/dist/router/match-api.js.map +1 -0
  554. package/dist/router/match-context.d.ts +206 -0
  555. package/dist/router/match-context.d.ts.map +1 -0
  556. package/dist/router/match-context.js +17 -0
  557. package/dist/router/match-context.js.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  560. package/dist/router/match-middleware/background-revalidation.js +75 -0
  561. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  564. package/dist/router/match-middleware/cache-lookup.js +257 -0
  565. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  566. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  567. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  568. package/dist/router/match-middleware/cache-store.js +108 -0
  569. package/dist/router/match-middleware/cache-store.js.map +1 -0
  570. package/dist/router/match-middleware/index.d.ts +81 -0
  571. package/dist/router/match-middleware/index.d.ts.map +1 -0
  572. package/dist/router/match-middleware/index.js +80 -0
  573. package/dist/router/match-middleware/index.js.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  576. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  577. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  580. package/dist/router/match-middleware/segment-resolution.js +53 -0
  581. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  582. package/dist/router/match-pipelines.d.ts +147 -0
  583. package/dist/router/match-pipelines.d.ts.map +1 -0
  584. package/dist/router/match-pipelines.js +82 -0
  585. package/dist/router/match-pipelines.js.map +1 -0
  586. package/dist/router/match-result.d.ts +126 -0
  587. package/dist/router/match-result.d.ts.map +1 -0
  588. package/dist/router/match-result.js +93 -0
  589. package/dist/router/match-result.js.map +1 -0
  590. package/dist/router/metrics.d.ts +20 -0
  591. package/dist/router/metrics.d.ts.map +1 -0
  592. package/dist/router/metrics.js +47 -0
  593. package/dist/router/metrics.js.map +1 -0
  594. package/dist/router/middleware.d.ts +249 -0
  595. package/dist/router/middleware.d.ts.map +1 -0
  596. package/dist/router/middleware.js +434 -0
  597. package/dist/router/middleware.js.map +1 -0
  598. package/dist/router/middleware.test.d.ts +2 -0
  599. package/dist/router/middleware.test.d.ts.map +1 -0
  600. package/dist/router/middleware.test.js +816 -0
  601. package/dist/router/middleware.test.js.map +1 -0
  602. package/dist/router/pattern-matching.d.ts +149 -0
  603. package/dist/router/pattern-matching.d.ts.map +1 -0
  604. package/dist/router/pattern-matching.js +349 -0
  605. package/dist/router/pattern-matching.js.map +1 -0
  606. package/dist/router/revalidation.d.ts +44 -0
  607. package/dist/router/revalidation.d.ts.map +1 -0
  608. package/dist/router/revalidation.js +147 -0
  609. package/dist/router/revalidation.js.map +1 -0
  610. package/dist/router/router-context.d.ts +135 -0
  611. package/dist/router/router-context.d.ts.map +1 -0
  612. package/dist/router/router-context.js +36 -0
  613. package/dist/router/router-context.js.map +1 -0
  614. package/dist/router/segment-resolution.d.ts +127 -0
  615. package/dist/router/segment-resolution.d.ts.map +1 -0
  616. package/dist/router/segment-resolution.js +919 -0
  617. package/dist/router/segment-resolution.js.map +1 -0
  618. package/dist/router/trie-matching.d.ts +40 -0
  619. package/dist/router/trie-matching.d.ts.map +1 -0
  620. package/dist/router/trie-matching.js +127 -0
  621. package/dist/router/trie-matching.js.map +1 -0
  622. package/dist/router/types.d.ts +136 -0
  623. package/dist/router/types.d.ts.map +1 -0
  624. package/dist/router/types.js +7 -0
  625. package/dist/router/types.js.map +1 -0
  626. package/dist/router.d.ts +753 -0
  627. package/dist/router.d.ts.map +1 -0
  628. package/dist/router.gen.d.ts +6 -0
  629. package/dist/router.gen.d.ts.map +1 -0
  630. package/dist/router.gen.js +6 -0
  631. package/dist/router.gen.js.map +1 -0
  632. package/dist/router.js +1304 -0
  633. package/dist/router.js.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  636. package/dist/rsc/__tests__/helpers.test.js +140 -0
  637. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  638. package/dist/rsc/handler.d.ts +45 -0
  639. package/dist/rsc/handler.d.ts.map +1 -0
  640. package/dist/rsc/handler.js +1172 -0
  641. package/dist/rsc/handler.js.map +1 -0
  642. package/dist/rsc/helpers.d.ts +16 -0
  643. package/dist/rsc/helpers.d.ts.map +1 -0
  644. package/dist/rsc/helpers.js +55 -0
  645. package/dist/rsc/helpers.js.map +1 -0
  646. package/dist/rsc/index.d.ts +22 -0
  647. package/dist/rsc/index.d.ts.map +1 -0
  648. package/dist/rsc/index.js +23 -0
  649. package/dist/rsc/index.js.map +1 -0
  650. package/dist/rsc/nonce.d.ts +9 -0
  651. package/dist/rsc/nonce.d.ts.map +1 -0
  652. package/dist/rsc/nonce.js +18 -0
  653. package/dist/rsc/nonce.js.map +1 -0
  654. package/dist/rsc/types.d.ts +206 -0
  655. package/dist/rsc/types.d.ts.map +1 -0
  656. package/dist/rsc/types.js +8 -0
  657. package/dist/rsc/types.js.map +1 -0
  658. package/dist/search-params.d.ts +103 -0
  659. package/dist/search-params.d.ts.map +1 -0
  660. package/dist/search-params.js +74 -0
  661. package/dist/search-params.js.map +1 -0
  662. package/dist/segment-system.d.ts +75 -0
  663. package/dist/segment-system.d.ts.map +1 -0
  664. package/dist/segment-system.js +336 -0
  665. package/dist/segment-system.js.map +1 -0
  666. package/dist/server/context.d.ts +245 -0
  667. package/dist/server/context.d.ts.map +1 -0
  668. package/dist/server/context.js +197 -0
  669. package/dist/server/context.js.map +1 -0
  670. package/dist/server/fetchable-loader-store.d.ts +18 -0
  671. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  672. package/dist/server/fetchable-loader-store.js +18 -0
  673. package/dist/server/fetchable-loader-store.js.map +1 -0
  674. package/dist/server/handle-store.d.ts +85 -0
  675. package/dist/server/handle-store.d.ts.map +1 -0
  676. package/dist/server/handle-store.js +142 -0
  677. package/dist/server/handle-store.js.map +1 -0
  678. package/dist/server/loader-registry.d.ts +55 -0
  679. package/dist/server/loader-registry.d.ts.map +1 -0
  680. package/dist/server/loader-registry.js +132 -0
  681. package/dist/server/loader-registry.js.map +1 -0
  682. package/dist/server/request-context.d.ts +226 -0
  683. package/dist/server/request-context.d.ts.map +1 -0
  684. package/dist/server/request-context.js +290 -0
  685. package/dist/server/request-context.js.map +1 -0
  686. package/dist/server/root-layout.d.ts +4 -0
  687. package/dist/server/root-layout.d.ts.map +1 -0
  688. package/dist/server/root-layout.js +5 -0
  689. package/dist/server/root-layout.js.map +1 -0
  690. package/dist/server.d.ts +15 -0
  691. package/dist/server.d.ts.map +1 -0
  692. package/dist/server.js +20 -0
  693. package/dist/server.js.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  698. package/dist/ssr/index.d.ts +98 -0
  699. package/dist/ssr/index.d.ts.map +1 -0
  700. package/dist/ssr/index.js +158 -0
  701. package/dist/ssr/index.js.map +1 -0
  702. package/dist/static-handler.d.ts +50 -0
  703. package/dist/static-handler.d.ts.map +1 -0
  704. package/dist/static-handler.gen.d.ts +5 -0
  705. package/dist/static-handler.gen.d.ts.map +1 -0
  706. package/dist/static-handler.gen.js +5 -0
  707. package/dist/static-handler.gen.js.map +1 -0
  708. package/dist/static-handler.js +29 -0
  709. package/dist/static-handler.js.map +1 -0
  710. package/dist/testing/vitest.js +48 -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 +2659 -883
  798. package/dist/vite/index.js.bak +5448 -0
  799. package/dist/vite/index.js.map +1 -0
  800. package/dist/vite/index.named-routes.gen.ts +103 -0
  801. package/dist/vite/package-resolution.d.ts +43 -0
  802. package/dist/vite/package-resolution.d.ts.map +1 -0
  803. package/dist/vite/package-resolution.js +112 -0
  804. package/dist/vite/package-resolution.js.map +1 -0
  805. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  806. package/dist/vite/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/dist/vite/virtual-entries.js +110 -0
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +57 -11
  811. package/skills/breadcrumbs/SKILL.md +3 -1
  812. package/skills/bundle-analysis/SKILL.md +159 -0
  813. package/skills/cache-guide/SKILL.md +243 -21
  814. package/skills/caching/SKILL.md +118 -2
  815. package/skills/composability/SKILL.md +27 -2
  816. package/skills/document-cache/SKILL.md +78 -55
  817. package/skills/handler-use/SKILL.md +364 -0
  818. package/skills/hooks/SKILL.md +229 -20
  819. package/skills/host-router/SKILL.md +45 -20
  820. package/skills/i18n/SKILL.md +276 -0
  821. package/skills/intercept/SKILL.md +46 -4
  822. package/skills/layout/SKILL.md +28 -7
  823. package/skills/links/SKILL.md +249 -17
  824. package/skills/loader/SKILL.md +273 -53
  825. package/skills/middleware/SKILL.md +49 -12
  826. package/skills/migrate-nextjs/SKILL.md +562 -0
  827. package/skills/migrate-react-router/SKILL.md +769 -0
  828. package/skills/mime-routes/SKILL.md +27 -0
  829. package/skills/observability/SKILL.md +137 -0
  830. package/skills/parallel/SKILL.md +71 -6
  831. package/skills/prerender/SKILL.md +123 -100
  832. package/skills/rango/SKILL.md +242 -22
  833. package/skills/react-compiler/SKILL.md +168 -0
  834. package/skills/response-routes/SKILL.md +66 -9
  835. package/skills/route/SKILL.md +88 -4
  836. package/skills/router-setup/SKILL.md +90 -5
  837. package/skills/server-actions/SKILL.md +751 -0
  838. package/skills/streams-and-websockets/SKILL.md +283 -0
  839. package/skills/testing/SKILL.md +776 -0
  840. package/skills/typesafety/SKILL.md +329 -27
  841. package/skills/use-cache/SKILL.md +34 -5
  842. package/skills/view-transitions/SKILL.md +294 -0
  843. package/src/__augment-tests__/augment.ts +81 -0
  844. package/src/__augment-tests__/augmented.check.ts +117 -0
  845. package/src/__internal.ts +1 -1
  846. package/src/browser/action-coordinator.ts +53 -36
  847. package/src/browser/app-shell.ts +52 -0
  848. package/src/browser/app-version.ts +14 -0
  849. package/src/browser/event-controller.ts +86 -70
  850. package/src/browser/history-state.ts +21 -0
  851. package/src/browser/index.ts +3 -3
  852. package/src/browser/navigation-bridge.ts +101 -13
  853. package/src/browser/navigation-client.ts +125 -53
  854. package/src/browser/navigation-store.ts +75 -17
  855. package/src/browser/navigation-transaction.ts +10 -28
  856. package/src/browser/partial-update.ts +90 -30
  857. package/src/browser/prefetch/cache.ts +129 -21
  858. package/src/browser/prefetch/fetch.ts +156 -18
  859. package/src/browser/prefetch/queue.ts +92 -29
  860. package/src/browser/prefetch/resource-ready.ts +77 -0
  861. package/src/browser/rango-state.ts +53 -13
  862. package/src/browser/react/Link.tsx +72 -8
  863. package/src/browser/react/NavigationProvider.tsx +83 -33
  864. package/src/browser/react/context.ts +7 -2
  865. package/src/browser/react/filter-segment-order.ts +51 -7
  866. package/src/browser/react/index.ts +3 -0
  867. package/src/browser/react/location-state-shared.ts +175 -4
  868. package/src/browser/react/location-state.ts +39 -13
  869. package/src/browser/react/use-handle.ts +23 -64
  870. package/src/browser/react/use-navigation.ts +22 -2
  871. package/src/browser/react/use-params.ts +20 -8
  872. package/src/browser/react/use-reverse.ts +106 -0
  873. package/src/browser/react/use-router.ts +43 -10
  874. package/src/browser/react/use-segments.ts +11 -8
  875. package/src/browser/response-adapter.ts +25 -0
  876. package/src/browser/rsc-router.tsx +87 -22
  877. package/src/browser/scroll-restoration.ts +29 -19
  878. package/src/browser/segment-reconciler.ts +36 -14
  879. package/src/browser/segment-structure-assert.ts +2 -2
  880. package/src/browser/server-action-bridge.ts +31 -36
  881. package/src/browser/types.ts +48 -5
  882. package/src/build/collect-fallback-refs.ts +107 -0
  883. package/src/build/generate-manifest.ts +65 -40
  884. package/src/build/generate-route-types.ts +5 -0
  885. package/src/build/index.ts +2 -0
  886. package/src/build/route-trie.ts +52 -25
  887. package/src/build/route-types/codegen.ts +4 -4
  888. package/src/build/route-types/include-resolution.ts +9 -2
  889. package/src/build/route-types/per-module-writer.ts +7 -4
  890. package/src/build/route-types/router-processing.ts +266 -86
  891. package/src/build/route-types/scan-filter.ts +9 -2
  892. package/src/build/route-types/source-scan.ts +118 -0
  893. package/src/build/runtime-discovery.ts +9 -20
  894. package/src/cache/cache-scope.ts +40 -56
  895. package/src/cache/cf/cf-cache-store.ts +54 -13
  896. package/src/cache/taint.ts +55 -0
  897. package/src/client.rsc.tsx +3 -0
  898. package/src/client.tsx +94 -238
  899. package/src/context-var.ts +72 -2
  900. package/src/decode-loader-results.ts +36 -0
  901. package/src/errors.ts +30 -1
  902. package/src/handle.ts +65 -12
  903. package/src/host/index.ts +2 -2
  904. package/src/host/router.ts +129 -57
  905. package/src/host/types.ts +31 -2
  906. package/src/host/utils.ts +1 -1
  907. package/src/href-client.ts +140 -20
  908. package/src/index.rsc.ts +12 -5
  909. package/src/index.ts +61 -11
  910. package/src/loader-store.ts +500 -0
  911. package/src/loader.rsc.ts +21 -6
  912. package/src/loader.ts +3 -10
  913. package/src/missing-id-error.ts +68 -0
  914. package/src/outlet-context.ts +1 -1
  915. package/src/prerender/store.ts +5 -4
  916. package/src/prerender.ts +141 -80
  917. package/src/response-utils.ts +37 -0
  918. package/src/reverse.ts +65 -15
  919. package/src/route-content-wrapper.tsx +6 -28
  920. package/src/route-definition/dsl-helpers.ts +411 -261
  921. package/src/route-definition/helper-factories.ts +29 -139
  922. package/src/route-definition/helpers-types.ts +110 -34
  923. package/src/route-definition/index.ts +3 -0
  924. package/src/route-definition/redirect.ts +9 -1
  925. package/src/route-definition/resolve-handler-use.ts +155 -0
  926. package/src/route-definition/use-item-types.ts +32 -0
  927. package/src/route-types.ts +37 -41
  928. package/src/router/basename.ts +14 -0
  929. package/src/router/content-negotiation.ts +113 -1
  930. package/src/router/error-handling.ts +1 -1
  931. package/src/router/handler-context.ts +77 -38
  932. package/src/router/intercept-resolution.ts +13 -22
  933. package/src/router/lazy-includes.ts +8 -8
  934. package/src/router/loader-resolution.ts +174 -22
  935. package/src/router/manifest.ts +22 -13
  936. package/src/router/match-api.ts +128 -192
  937. package/src/router/match-handlers.ts +63 -20
  938. package/src/router/match-middleware/cache-lookup.ts +70 -97
  939. package/src/router/match-middleware/cache-store.ts +3 -2
  940. package/src/router/match-middleware/segment-resolution.ts +53 -0
  941. package/src/router/match-result.ts +103 -4
  942. package/src/router/metrics.ts +1 -1
  943. package/src/router/middleware-types.ts +21 -34
  944. package/src/router/middleware.ts +101 -89
  945. package/src/router/navigation-snapshot.ts +182 -0
  946. package/src/router/pattern-matching.ts +101 -17
  947. package/src/router/prerender-match.ts +110 -10
  948. package/src/router/preview-match.ts +32 -102
  949. package/src/router/request-classification.ts +286 -0
  950. package/src/router/revalidation.ts +58 -2
  951. package/src/router/route-snapshot.ts +245 -0
  952. package/src/router/router-interfaces.ts +77 -28
  953. package/src/router/router-options.ts +76 -11
  954. package/src/router/router-registry.ts +2 -5
  955. package/src/router/segment-resolution/fresh.ts +105 -13
  956. package/src/router/segment-resolution/helpers.ts +29 -24
  957. package/src/router/segment-resolution/revalidation.ts +236 -112
  958. package/src/router/segment-resolution/view-transition-default.ts +36 -0
  959. package/src/router/substitute-pattern-params.ts +56 -0
  960. package/src/router/telemetry.ts +99 -0
  961. package/src/router/trie-matching.ts +18 -13
  962. package/src/router/types.ts +9 -0
  963. package/src/router/url-params.ts +49 -0
  964. package/src/router.ts +86 -22
  965. package/src/rsc/handler-context.ts +2 -2
  966. package/src/rsc/handler.ts +440 -381
  967. package/src/rsc/helpers.ts +91 -43
  968. package/src/rsc/index.ts +1 -1
  969. package/src/rsc/loader-fetch.ts +23 -3
  970. package/src/rsc/manifest-init.ts +5 -1
  971. package/src/rsc/origin-guard.ts +28 -10
  972. package/src/rsc/progressive-enhancement.ts +18 -2
  973. package/src/rsc/response-route-handler.ts +46 -53
  974. package/src/rsc/rsc-rendering.ts +41 -48
  975. package/src/rsc/runtime-warnings.ts +9 -10
  976. package/src/rsc/server-action.ts +25 -37
  977. package/src/rsc/ssr-setup.ts +18 -2
  978. package/src/rsc/types.ts +17 -3
  979. package/src/search-params.ts +4 -4
  980. package/src/segment-content-promise.ts +67 -0
  981. package/src/segment-loader-promise.ts +122 -0
  982. package/src/segment-system.tsx +132 -116
  983. package/src/serialize.ts +243 -0
  984. package/src/server/context.ts +190 -51
  985. package/src/server/cookie-store.ts +28 -4
  986. package/src/server/handle-store.ts +19 -0
  987. package/src/server/loader-registry.ts +9 -8
  988. package/src/server/request-context.ts +195 -57
  989. package/src/ssr/index.tsx +8 -1
  990. package/src/static-handler.ts +19 -7
  991. package/src/testing/cache-status.ts +166 -0
  992. package/src/testing/collect-handle.ts +63 -0
  993. package/src/testing/dispatch.ts +440 -0
  994. package/src/testing/dom.entry.ts +22 -0
  995. package/src/testing/e2e/fixture.ts +154 -0
  996. package/src/testing/e2e/index.ts +149 -0
  997. package/src/testing/e2e/matchers.ts +51 -0
  998. package/src/testing/e2e/page-helpers.ts +272 -0
  999. package/src/testing/e2e/parity.ts +306 -0
  1000. package/src/testing/e2e/server.ts +183 -0
  1001. package/src/testing/flight-matchers.ts +104 -0
  1002. package/src/testing/flight-runtime.d.ts +57 -0
  1003. package/src/testing/flight-tree.ts +309 -0
  1004. package/src/testing/flight.entry.ts +39 -0
  1005. package/src/testing/flight.ts +197 -0
  1006. package/src/testing/generated-routes.ts +223 -0
  1007. package/src/testing/index.ts +106 -0
  1008. package/src/testing/internal/context.ts +304 -0
  1009. package/src/testing/internal/flight-client-globals.ts +30 -0
  1010. package/src/testing/render-route.tsx +565 -0
  1011. package/src/testing/run-loader.ts +341 -0
  1012. package/src/testing/run-middleware.ts +179 -0
  1013. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1014. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1015. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1016. package/src/testing/vitest-stubs/version.ts +5 -0
  1017. package/src/testing/vitest.ts +185 -0
  1018. package/src/types/cache-types.ts +4 -4
  1019. package/src/types/global-namespace.ts +39 -26
  1020. package/src/types/handler-context.ts +103 -67
  1021. package/src/types/index.ts +1 -0
  1022. package/src/types/loader-types.ts +41 -15
  1023. package/src/types/request-scope.ts +126 -0
  1024. package/src/types/route-entry.ts +12 -1
  1025. package/src/types/segments.ts +36 -2
  1026. package/src/urls/include-helper.ts +34 -67
  1027. package/src/urls/index.ts +0 -3
  1028. package/src/urls/path-helper-types.ts +50 -9
  1029. package/src/urls/path-helper.ts +63 -63
  1030. package/src/urls/pattern-types.ts +48 -19
  1031. package/src/urls/response-types.ts +25 -22
  1032. package/src/urls/type-extraction.ts +26 -116
  1033. package/src/urls/urls-function.ts +1 -5
  1034. package/src/use-loader.tsx +487 -44
  1035. package/src/vite/debug.ts +185 -0
  1036. package/src/vite/discovery/bundle-postprocess.ts +34 -37
  1037. package/src/vite/discovery/discover-routers.ts +105 -51
  1038. package/src/vite/discovery/discovery-errors.ts +194 -0
  1039. package/src/vite/discovery/gate-state.ts +171 -0
  1040. package/src/vite/discovery/prerender-collection.ts +188 -93
  1041. package/src/vite/discovery/route-types-writer.ts +40 -84
  1042. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1043. package/src/vite/discovery/state.ts +46 -4
  1044. package/src/vite/discovery/virtual-module-codegen.ts +13 -23
  1045. package/src/vite/index.ts +6 -0
  1046. package/src/vite/plugin-types.ts +126 -4
  1047. package/src/vite/plugins/cjs-to-esm.ts +8 -7
  1048. package/src/vite/plugins/client-ref-dedup.ts +16 -0
  1049. package/src/vite/plugins/client-ref-hashing.ts +28 -5
  1050. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1051. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1052. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  1053. package/src/vite/plugins/expose-action-id.ts +54 -30
  1054. package/src/vite/plugins/expose-id-utils.ts +24 -8
  1055. package/src/vite/plugins/expose-ids/export-analysis.ts +100 -20
  1056. package/src/vite/plugins/expose-ids/handler-transform.ts +12 -35
  1057. package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
  1058. package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
  1059. package/src/vite/plugins/expose-internal-ids.ts +544 -317
  1060. package/src/vite/plugins/performance-tracks.ts +92 -0
  1061. package/src/vite/plugins/refresh-cmd.ts +88 -26
  1062. package/src/vite/plugins/use-cache-transform.ts +65 -50
  1063. package/src/vite/plugins/version-injector.ts +39 -23
  1064. package/src/vite/plugins/version-plugin.ts +59 -2
  1065. package/src/vite/plugins/virtual-entries.ts +2 -2
  1066. package/src/vite/rango.ts +130 -26
  1067. package/src/vite/router-discovery.ts +920 -129
  1068. package/src/vite/utils/ast-handler-extract.ts +15 -15
  1069. package/src/vite/utils/banner.ts +1 -1
  1070. package/src/vite/utils/bundle-analysis.ts +4 -2
  1071. package/src/vite/utils/client-chunks.ts +190 -0
  1072. package/src/vite/utils/forward-user-plugins.ts +193 -0
  1073. package/src/vite/utils/manifest-utils.ts +21 -5
  1074. package/src/vite/utils/package-resolution.ts +41 -1
  1075. package/src/vite/utils/prerender-utils.ts +38 -5
  1076. package/src/vite/utils/shared-utils.ts +109 -27
  1077. package/src/browser/action-response-classifier.ts +0 -99
@@ -14,7 +14,10 @@ const addTransitionType: ((type: string) => void) | undefined =
14
14
  import type { RenderSegmentsOptions } from "../segment-system.js";
15
15
  import { reconcileSegments } from "./segment-reconciler.js";
16
16
  import type { ReconcileActor } from "./segment-reconciler.js";
17
- import { hasActiveIntercept as hasActiveInterceptSlots } from "./intercept-utils.js";
17
+ import {
18
+ hasActiveIntercept as hasActiveInterceptSlots,
19
+ isInterceptSegment,
20
+ } from "./intercept-utils.js";
18
21
  import type { BoundTransaction } from "./navigation-transaction.js";
19
22
  import { ServerRedirect } from "../errors.js";
20
23
  import { debugLog } from "./logging.js";
@@ -28,6 +31,23 @@ function toScrollPayload(
28
31
  return { enabled: scroll !== false ? scroll : false };
29
32
  }
30
33
 
34
+ /**
35
+ * Whether to wrap an update in startViewTransition.
36
+ *
37
+ * Intercept-driven updates only mutate the parallel slot — the main outlet
38
+ * shows the same content — so transitions on the underlying main segments
39
+ * shouldn't fire (otherwise their elements get hoisted above the modal).
40
+ */
41
+ function shouldStartViewTransition(segments: ResolvedSegment[]): boolean {
42
+ let hasIntercept = false;
43
+ let hasTransition = false;
44
+ for (const s of segments) {
45
+ if (isInterceptSegment(s)) hasIntercept = true;
46
+ else if (s.transition) hasTransition = true;
47
+ }
48
+ return !hasIntercept && hasTransition;
49
+ }
50
+
31
51
  /**
32
52
  * Configuration for creating a partial updater
33
53
  */
@@ -39,8 +59,15 @@ export interface PartialUpdateConfig {
39
59
  segments: ResolvedSegment[],
40
60
  options?: RenderSegmentsOptions,
41
61
  ) => Promise<ReactNode> | ReactNode;
42
- /** RSC version received from server (from initial payload metadata) */
43
- version?: string;
62
+ /** RSC version getter returns the current version (may change after HMR) */
63
+ getVersion?: () => string | undefined;
64
+ /**
65
+ * Replace the active app-shell when a cross-app navigation is detected.
66
+ * Called before the full-update tree replacement renders, so the new
67
+ * payload's rootLayout, basename, and version are picked up. Theme,
68
+ * warmup, and prefetch TTL are not part of the shell — see AppShell.
69
+ */
70
+ applyAppShell?: (next: import("./app-shell.js").AppShell) => void;
44
71
  }
45
72
 
46
73
  /**
@@ -76,7 +103,7 @@ export type UpdateMode =
76
103
  /** Source URL for intercept restore (popstate cache miss) */
77
104
  interceptSourceUrl?: string;
78
105
  }
79
- | { type: "leave-intercept" }
106
+ | { type: "leave-intercept"; interceptSourceUrl?: string }
80
107
  | { type: "stale-revalidation"; interceptSourceUrl?: string }
81
108
  | { type: "action"; interceptSourceUrl?: string };
82
109
 
@@ -104,7 +131,14 @@ export type PartialUpdater = (
104
131
  export function createPartialUpdater(
105
132
  config: PartialUpdateConfig,
106
133
  ): PartialUpdater {
107
- const { store, client, onUpdate, renderSegments, version } = config;
134
+ const {
135
+ store,
136
+ client,
137
+ onUpdate,
138
+ renderSegments,
139
+ getVersion = () => undefined,
140
+ applyAppShell,
141
+ } = config;
108
142
 
109
143
  /**
110
144
  * Get current page's cached segments as an array
@@ -135,13 +169,7 @@ export function createPartialUpdater(
135
169
  // Capture history key at start for stale revalidation consistency check
136
170
  const historyKeyAtStart = store.getHistoryKey();
137
171
 
138
- // Derive interceptSourceUrl from modes that carry it
139
- const interceptSourceUrl =
140
- mode.type === "stale-revalidation" ||
141
- mode.type === "action" ||
142
- mode.type === "navigate"
143
- ? mode.interceptSourceUrl
144
- : undefined;
172
+ const interceptSourceUrl = mode.interceptSourceUrl;
145
173
 
146
174
  // When leaving intercept, filter out intercept-specific segments
147
175
  let segments: string[];
@@ -161,9 +189,16 @@ export function createPartialUpdater(
161
189
  segments = segmentIds ?? segmentState.currentSegmentIds;
162
190
  }
163
191
 
164
- // For intercept revalidation, use the intercept source URL as previousUrl
192
+ // For intercept revalidation, use the intercept source URL as previousUrl.
193
+ // For leave-intercept, tx.currentUrl captures window.location.href at tx
194
+ // creation, which on popstate is already the destination URL and would
195
+ // tell the server "from == to". segmentState.currentUrl still points at
196
+ // the URL the cached segments render (the intercept URL), which is the
197
+ // correct "from" for the server's diff computation.
165
198
  const previousUrl =
166
- interceptSourceUrl || tx.currentUrl || segmentState.currentUrl;
199
+ mode.type === "leave-intercept"
200
+ ? segmentState.currentUrl || tx.currentUrl
201
+ : interceptSourceUrl || tx.currentUrl || segmentState.currentUrl;
167
202
 
168
203
  debugLog(`\n[Browser] >>> NAVIGATION`);
169
204
  debugLog(`[Browser] From: ${previousUrl}`);
@@ -177,11 +212,14 @@ export function createPartialUpdater(
177
212
  // When navigating with targetCacheSegments, use those for consistency.
178
213
  // Otherwise fall back to current page's segments (for same-route revalidation).
179
214
  const targetCache =
180
- mode.type === "navigate" ? mode.targetCacheSegments : undefined;
181
- const cachedSegs =
182
- targetCache && targetCache.length > 0
183
- ? targetCache
184
- : getCurrentCachedSegments();
215
+ mode.type === "navigate" && mode.targetCacheSegments?.length
216
+ ? mode.targetCacheSegments
217
+ : undefined;
218
+ const cachedSegs = targetCache ?? getCurrentCachedSegments();
219
+ const cachedSegsSource = targetCache ? "history-cache" : "current-page";
220
+ debugLog(
221
+ `[Browser] cachedSegs source: ${cachedSegsSource} (${cachedSegs.length} segments: ${cachedSegs.map((s) => s.id).join(", ")})`,
222
+ );
185
223
 
186
224
  // Fetch partial payload (no abort signal - RSC doesn't support it well)
187
225
  let fetchResult: Awaited<ReturnType<NavigationClient["fetchPartial"]>>;
@@ -193,7 +231,8 @@ export function createPartialUpdater(
193
231
  // (action redirect sends empty segments for a fresh render).
194
232
  staleRevalidation:
195
233
  mode.type === "stale-revalidation" || segments.length === 0,
196
- version,
234
+ version: getVersion(),
235
+ routerId: store.getRouterId?.(),
197
236
  });
198
237
  // Mark navigation as streaming (response received, now parsing RSC).
199
238
  // Called after fetchPartial so pendingUrl stays set during the network wait,
@@ -206,6 +245,32 @@ export function createPartialUpdater(
206
245
  streamingToken.end();
207
246
  });
208
247
 
248
+ // Detect app switch: if routerId changed, the navigation crossed into
249
+ // a different router (e.g., via host router path mount). Downgrade
250
+ // partial to full so the entire tree is replaced without reconciliation
251
+ // against stale segments from the previous app, and replace the app
252
+ // shell (rootLayout, basename, version) so the target app's document
253
+ // and router config take effect instead of remaining captured from the
254
+ // initial load. Theme, warmup, and prefetch TTL are intentionally
255
+ // document-lifetime (see AppShell doc); a new document navigation
256
+ // applies them.
257
+ if (payload.metadata?.routerId) {
258
+ const prevRouterId = store.getRouterId?.();
259
+ if (prevRouterId && prevRouterId !== payload.metadata.routerId) {
260
+ debugLog(
261
+ `[Browser] App switch detected (${prevRouterId} → ${payload.metadata.routerId}), forcing full update`,
262
+ );
263
+ payload.metadata.isPartial = false;
264
+ applyAppShell?.({
265
+ routerId: payload.metadata.routerId,
266
+ rootLayout: payload.metadata.rootLayout,
267
+ basename: payload.metadata.basename,
268
+ version: payload.metadata.version,
269
+ });
270
+ }
271
+ store.setRouterId?.(payload.metadata.routerId);
272
+ }
273
+
209
274
  // Handle server-side redirect with state
210
275
  if (payload.metadata?.redirect) {
211
276
  if (signal?.aborted) {
@@ -245,7 +310,7 @@ export function createPartialUpdater(
245
310
  .filter(Boolean) as ResolvedSegment[];
246
311
 
247
312
  // When navigating with cached segments to a different route, render them.
248
- if (mode.type === "navigate" && targetCache && targetCache.length > 0) {
313
+ if (mode.type === "navigate" && targetCache) {
249
314
  debugLog(
250
315
  "[Browser] No diff but navigating with cached segments - rendering target route",
251
316
  );
@@ -259,7 +324,7 @@ export function createPartialUpdater(
259
324
  existingSegments,
260
325
  );
261
326
 
262
- // Fix: tx.commit() cached the source page's handleData because
327
+ // tx.commit() cached the source page's handleData because
263
328
  // eventController hasn't been updated yet. Overwrite with the
264
329
  // correct cached handleData to prevent cache corruption on
265
330
  // subsequent navigations to this same URL.
@@ -285,10 +350,7 @@ export function createPartialUpdater(
285
350
  scroll: toScrollPayload(commitScroll),
286
351
  };
287
352
 
288
- const cachedHasTransition = existingSegments.some(
289
- (s) => s.transition,
290
- );
291
- if (cachedHasTransition) {
353
+ if (shouldStartViewTransition(existingSegments)) {
292
354
  startTransition(() => {
293
355
  if (addTransitionType) {
294
356
  addTransitionType("navigation");
@@ -474,7 +536,7 @@ export function createPartialUpdater(
474
536
 
475
537
  // Emit update to trigger React render.
476
538
  // Scroll info is included so NavigationProvider applies it after React commits.
477
- const hasTransition = reconciled.mainSegments.some((s) => s.transition);
539
+ const hasTransition = shouldStartViewTransition(reconciled.segments);
478
540
  const scrollPayload = toScrollPayload(navScroll);
479
541
 
480
542
  if (mode.type === "action" || mode.type === "stale-revalidation") {
@@ -536,9 +598,7 @@ export function createPartialUpdater(
536
598
  })
537
599
  : tx.commit(segmentIds, segments);
538
600
 
539
- const fullHasTransition = segments.some(
540
- (s: ResolvedSegment) => s.transition,
541
- );
601
+ const fullHasTransition = shouldStartViewTransition(segments);
542
602
  const fullScrollPayload = toScrollPayload(fullScroll);
543
603
 
544
604
  if (mode.type === "stale-revalidation") {
@@ -2,13 +2,27 @@
2
2
  * Prefetch Cache
3
3
  *
4
4
  * In-memory cache storing prefetched Response objects for instant cache hits
5
- * on subsequent navigation. Cache key is source-dependent (includes the
6
- * current page URL) because the server's diff-based response depends on
7
- * where the user navigates from.
5
+ * on subsequent navigation. Two key scopes are in play:
6
+ * - Wildcard (default): built by `buildPrefetchKey(rangoState, target)`
7
+ * shape `rangoState\0/target?...`. Shared across all source pages and
8
+ * invalidated automatically when Rango state bumps (deploy or
9
+ * server-action invalidation).
10
+ * - Source-scoped: built by `buildSourceKey(rangoState, sourceHref, target)`
11
+ * — shape `rangoState\0sourceHref\0/target?...`. Embeds the Rango state
12
+ * (so rotation invalidates source-scoped entries too) plus the source
13
+ * href (so each originating page gets its own slot). Populated when the
14
+ * server tags a response with `X-RSC-Prefetch-Scope: source` (intercept
15
+ * modals etc.), OR when a Link opts in with `prefetchKey=":source"` — in
16
+ * both cases so source-sensitive responses cannot bleed into navigations
17
+ * from other pages.
8
18
  *
9
19
  * Also tracks in-flight prefetch promises. Each promise resolves to the
10
20
  * navigation branch of a tee'd Response, allowing navigation to adopt a
11
- * still-downloading prefetch without reparsing or buffering the body.
21
+ * still-downloading prefetch without reparsing or buffering the body. A
22
+ * single promise can be registered under multiple alias keys (see
23
+ * `setInflightPromiseWithAliases`) so same-source navigations adopt via
24
+ * their source key while cross-source ones fall through to the wildcard
25
+ * alias — with consume/clear atomically removing every alias.
12
26
  *
13
27
  * Replaces the previous browser HTTP cache approach which was unreliable
14
28
  * due to response draining race conditions and browser inconsistencies.
@@ -55,19 +69,71 @@ const inflight = new Set<string>();
55
69
  */
56
70
  const inflightPromises = new Map<string, Promise<Response | null>>();
57
71
 
72
+ /**
73
+ * Alias map for in-flight promises registered under multiple keys (see
74
+ * dual inflight in prefetch/fetch.ts). Records each key's sibling set so
75
+ * that consuming or clearing any one key atomically removes every alias —
76
+ * guaranteeing a single consumer for the shared Response stream.
77
+ */
78
+ const inflightAliases = new Map<string, string[]>();
79
+
58
80
  // Generation counter incremented on each clearPrefetchCache(). Fetches that
59
81
  // started before a clear carry a stale generation and must not store their
60
82
  // response (the data may be stale due to a server action invalidation).
61
83
  let generation = 0;
62
84
 
63
85
  /**
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).
86
+ * Build a cache key by combining a scope prefix with the target URL.
87
+ *
88
+ * Low-level primitive callers that want a specific scope should use
89
+ * one of:
90
+ * - Wildcard (source-agnostic): prefix is the Rango state value from
91
+ * `getRangoState()`. Shared across all source pages. Invalidated
92
+ * automatically when Rango state bumps (deploy or server-action).
93
+ * Key shape: `rangoState\0/target?...`.
94
+ * - Source-scoped: use `buildSourceKey()`. Key shape:
95
+ * `rangoState\0sourceHref\0/target?...` — embeds the Rango state so
96
+ * rotation invalidates source-scoped entries alongside wildcard ones,
97
+ * plus the source page href so the key is unique per originating page.
98
+ * Populated either when the server tags a response with
99
+ * `X-RSC-Prefetch-Scope: source` (intercept modals, etc.) or when a
100
+ * Link opts in via `prefetchKey=":source"`.
101
+ *
102
+ * The `_rsc_segments` query param that travels in the target URL means
103
+ * clients with different mounted segment trees naturally get different
104
+ * keys — so segment-level diffs remain consistent across both scopes.
105
+ */
106
+ export function buildPrefetchKey(prefix: string, targetUrl: URL): string {
107
+ return prefix + "\0" + targetUrl.pathname + targetUrl.search;
108
+ }
109
+
110
+ /**
111
+ * Build a source-scoped cache key. Key shape:
112
+ * `rangoState\0sourceHref\0/target?...`.
113
+ *
114
+ * - `rangoState` is included so state rotation invalidates source-scoped
115
+ * entries alongside wildcard ones.
116
+ * - `sourceHref` makes the key unique per originating page.
117
+ */
118
+ export function buildSourceKey(
119
+ rangoState: string,
120
+ sourceHref: string,
121
+ targetUrl: URL,
122
+ ): string {
123
+ return buildPrefetchKey(rangoState + "\0" + sourceHref, targetUrl);
124
+ }
125
+
126
+ /**
127
+ * Walk an inflight key plus any sibling aliases registered via
128
+ * `setInflightPromiseWithAliases`, invoking `fn` for each.
68
129
  */
69
- export function buildPrefetchKey(sourceHref: string, targetUrl: URL): string {
70
- return sourceHref + "\0" + targetUrl.pathname + targetUrl.search;
130
+ function forEachAlias(key: string, fn: (k: string) => void): void {
131
+ const aliases = inflightAliases.get(key);
132
+ if (aliases) {
133
+ for (const k of aliases) fn(k);
134
+ } else {
135
+ fn(key);
136
+ }
71
137
  }
72
138
 
73
139
  /**
@@ -110,21 +176,27 @@ export function consumePrefetch(key: string): Response | null {
110
176
  * in-flight for this key. The returned Promise resolves to the buffered
111
177
  * Response (or null if the fetch failed/was aborted).
112
178
  *
113
- * One-time consumption: the promise entry is removed so a second call
114
- * returns null. The `inflight` set entry is intentionally kept so that
115
- * hasPrefetch() continues to return true while the underlying fetch is
116
- * still downloading this prevents prefetchDirect() or other callers
117
- * from starting a duplicate request during the handoff window. The
118
- * inflight flag is cleaned up naturally by clearPrefetchInflight() in
119
- * the fetch's .finally().
179
+ * One-time consumption: the promise entry is removed (along with any
180
+ * sibling aliases registered via `setInflightPromiseWithAliases`) so a
181
+ * second call on any alias returns null only one caller can adopt the
182
+ * shared Response stream. The `inflight` set entry is intentionally
183
+ * kept so that `hasPrefetch()` continues to return true while the
184
+ * underlying fetch is still downloading this prevents
185
+ * `prefetchDirect()` or other callers from starting a duplicate request
186
+ * during the handoff window. The inflight flag is cleaned up naturally
187
+ * by `clearPrefetchInflight()` in the fetch's `.finally()`.
120
188
  */
121
189
  export function consumeInflightPrefetch(
122
190
  key: string,
123
191
  ): Promise<Response | null> | null {
124
192
  const promise = inflightPromises.get(key);
125
193
  if (!promise) return null;
126
- // Remove the promise (one-time consumption) but keep the inflight flag.
127
- inflightPromises.delete(key);
194
+ // Remove the promise under every alias so a second consumer cannot
195
+ // adopt the same stream and race on the body. `inflightAliases` is
196
+ // intentionally preserved — `clearPrefetchInflight()` in the fetch's
197
+ // `.finally()` still needs it to clear every inflight flag; deleting
198
+ // here would strand the sibling's flag forever.
199
+ forEachAlias(key, (k) => inflightPromises.delete(k));
128
200
  return promise;
129
201
  }
130
202
 
@@ -183,9 +255,28 @@ export function setInflightPromise(
183
255
  inflightPromises.set(key, promise);
184
256
  }
185
257
 
258
+ /**
259
+ * Store the same in-flight Promise under multiple keys, recording them
260
+ * as sibling aliases. Consuming or clearing any one alias atomically
261
+ * removes every entry, guaranteeing the shared Response stream has a
262
+ * single consumer even when navigation looks up either key.
263
+ */
264
+ export function setInflightPromiseWithAliases(
265
+ keys: string[],
266
+ promise: Promise<Response | null>,
267
+ ): void {
268
+ for (const k of keys) {
269
+ inflightPromises.set(k, promise);
270
+ inflightAliases.set(k, keys);
271
+ }
272
+ }
273
+
186
274
  export function clearPrefetchInflight(key: string): void {
187
- inflight.delete(key);
188
- inflightPromises.delete(key);
275
+ forEachAlias(key, (k) => {
276
+ inflight.delete(k);
277
+ inflightPromises.delete(k);
278
+ inflightAliases.delete(k);
279
+ });
189
280
  }
190
281
 
191
282
  /**
@@ -200,7 +291,24 @@ export function clearPrefetchCache(): void {
200
291
  generation++;
201
292
  inflight.clear();
202
293
  inflightPromises.clear();
294
+ inflightAliases.clear();
203
295
  cache.clear();
204
296
  abortAllPrefetches();
205
297
  invalidateRangoState();
206
298
  }
299
+
300
+ /**
301
+ * Drop all in-memory prefetch state for this tab without rotating rango-state.
302
+ *
303
+ * Use for local-only invalidations (e.g. app switch in this tab) where
304
+ * other tabs should NOT observe a state rotation. Unlike clearPrefetchCache,
305
+ * does not call invalidateRangoState, so the shared X-Rango-State token
306
+ * stays intact and siblings in the old app keep their prefetches.
307
+ */
308
+ export function clearPrefetchCacheLocal(): void {
309
+ generation++;
310
+ inflight.clear();
311
+ inflightPromises.clear();
312
+ cache.clear();
313
+ abortAllPrefetches();
314
+ }
@@ -13,9 +13,10 @@
13
13
 
14
14
  import {
15
15
  buildPrefetchKey,
16
+ buildSourceKey,
16
17
  hasPrefetch,
17
18
  markPrefetchInflight,
18
- setInflightPromise,
19
+ setInflightPromiseWithAliases,
19
20
  storePrefetch,
20
21
  clearPrefetchInflight,
21
22
  currentGeneration,
@@ -23,6 +24,24 @@ import {
23
24
  import { getRangoState } from "../rango-state.js";
24
25
  import { enqueuePrefetch } from "./queue.js";
25
26
  import { shouldPrefetch } from "./policy.js";
27
+ import { debugLog } from "../logging.js";
28
+
29
+ /**
30
+ * Check if a URL resolves to the current page (same pathname + search).
31
+ * Used to prevent same-page prefetching, which produces a trivial diff
32
+ * that would corrupt the (default wildcard) prefetch cache entry.
33
+ */
34
+ function isSamePage(url: string): boolean {
35
+ try {
36
+ const target = new URL(url, window.location.origin);
37
+ return (
38
+ target.pathname + target.search ===
39
+ window.location.pathname + window.location.search
40
+ );
41
+ } catch {
42
+ return false;
43
+ }
44
+ }
26
45
 
27
46
  /**
28
47
  * Build an RSC partial URL for prefetching.
@@ -34,6 +53,7 @@ function buildPrefetchUrl(
34
53
  url: string,
35
54
  segmentIds: string[],
36
55
  version?: string,
56
+ routerId?: string,
37
57
  ): URL | null {
38
58
  let targetUrl: URL;
39
59
  try {
@@ -51,6 +71,9 @@ function buildPrefetchUrl(
51
71
  if (version) {
52
72
  targetUrl.searchParams.set("_rsc_v", version);
53
73
  }
74
+ if (routerId) {
75
+ targetUrl.searchParams.set("_rsc_rid", routerId);
76
+ }
54
77
  return targetUrl;
55
78
  }
56
79
 
@@ -59,14 +82,33 @@ function buildPrefetchUrl(
59
82
  * one branch in the in-memory cache. The returned Promise resolves to the
60
83
  * sibling navigation branch (or null on failure) so navigation can safely
61
84
  * reuse an in-flight prefetch via consumeInflightPrefetch().
85
+ *
86
+ * Inflight + storage key selection:
87
+ *
88
+ * - `forceSourceScope` (Link opted in with `prefetchKey=":source"`): single
89
+ * inflight registration under `sourceKey`; response stored under
90
+ * `sourceKey`. No wildcard leak is possible.
91
+ *
92
+ * - Otherwise: dual inflight registration under both `wildcardKey` and
93
+ * `sourceKey` so same-source navigations adopt directly via their own
94
+ * source key. Storage key is chosen at response time from the
95
+ * `X-RSC-Prefetch-Scope` header — `"source"` → `sourceKey` (intercept
96
+ * modals etc.), anything else → `wildcardKey`. Cross-source navigations
97
+ * that adopted via `wildcardKey` must bail out in `navigation-client.ts`
98
+ * if the adopted response turns out to be source-scoped.
62
99
  */
63
100
  function executePrefetchFetch(
64
- key: string,
101
+ wildcardKey: string,
102
+ sourceKey: string,
65
103
  fetchUrl: string,
104
+ forceSourceScope: boolean,
66
105
  signal?: AbortSignal,
67
106
  ): Promise<Response | null> {
68
107
  const gen = currentGeneration();
69
- markPrefetchInflight(key);
108
+ const inflightKeys = forceSourceScope
109
+ ? [sourceKey]
110
+ : [wildcardKey, sourceKey];
111
+ for (const k of inflightKeys) markPrefetchInflight(k);
70
112
 
71
113
  const promise: Promise<Response | null> = fetch(fetchUrl, {
72
114
  priority: "low" as RequestPriority,
@@ -88,57 +130,153 @@ function executePrefetchFetch(
88
130
  status: response.status,
89
131
  statusText: response.statusText,
90
132
  };
91
- storePrefetch(key, new Response(cacheStream, responseInit), gen);
133
+ let storageKey: string;
134
+ if (forceSourceScope) {
135
+ storageKey = sourceKey;
136
+ } else {
137
+ const scope = response.headers.get("x-rsc-prefetch-scope");
138
+ storageKey = scope === "source" ? sourceKey : wildcardKey;
139
+ }
140
+ storePrefetch(storageKey, new Response(cacheStream, responseInit), gen);
92
141
  return new Response(navStream, responseInit);
93
142
  })
94
143
  .catch(() => null)
95
144
  .finally(() => {
96
- clearPrefetchInflight(key);
145
+ clearPrefetchInflight(inflightKeys[0]!);
97
146
  });
98
147
 
99
- setInflightPromise(key, promise);
148
+ setInflightPromiseWithAliases(inflightKeys, promise);
100
149
  return promise;
101
150
  }
102
151
 
152
+ /**
153
+ * Dedup check for prefetch entry presence.
154
+ *
155
+ * Forced `:source` must NOT dedupe against a pre-existing wildcard entry —
156
+ * otherwise the source slot would stay unpopulated and navigation from
157
+ * this source would fall through to the (potentially wrong) wildcard
158
+ * response, defeating the opt-out.
159
+ */
160
+ function hasPrefetchHit(
161
+ forceSourceScope: boolean,
162
+ wildcardKey: string,
163
+ sourceKey: string,
164
+ ): boolean {
165
+ return forceSourceScope
166
+ ? hasPrefetch(sourceKey)
167
+ : hasPrefetch(wildcardKey) || hasPrefetch(sourceKey);
168
+ }
169
+
103
170
  /**
104
171
  * Prefetch (direct): fetch with low priority and store in in-memory cache.
105
172
  * Used by hover strategy -- fires immediately without queueing.
173
+ *
174
+ * By default the wildcard key (Rango-state-keyed) is used for inflight
175
+ * dedup and for responses that are not source-sensitive; source-scoped
176
+ * storage is automatic when the server emits `X-RSC-Prefetch-Scope: source`.
177
+ *
178
+ * Pass `prefetchKey=":source"` to force source-scoped inflight + storage
179
+ * (e.g. when the target uses a custom `revalidate()` that reads
180
+ * `currentUrl` and the wildcard slot would serve the wrong diff).
106
181
  */
107
182
  export function prefetchDirect(
108
183
  url: string,
109
184
  segmentIds: string[],
110
185
  version?: string,
186
+ routerId?: string,
187
+ prefetchKey?: ":source",
111
188
  ): void {
112
189
  if (!shouldPrefetch()) return;
113
190
 
114
- const targetUrl = buildPrefetchUrl(url, segmentIds, version);
191
+ const targetUrl = buildPrefetchUrl(url, segmentIds, version, routerId);
115
192
  if (!targetUrl) return;
116
- const key = buildPrefetchKey(window.location.href, targetUrl);
117
- if (hasPrefetch(key)) return;
118
- executePrefetchFetch(key, targetUrl.toString());
193
+ const forceSourceScope = prefetchKey === ":source";
194
+ // Skip same-page prefetch — a same-page diff is trivial and would corrupt
195
+ // the wildcard cache entry used for cross-page navigation.
196
+ // When `:source` is forced the entry is source-scoped (single-aliased to
197
+ // itself), so it cannot poison any shared slot — allow it.
198
+ if (!forceSourceScope && isSamePage(url)) {
199
+ return;
200
+ }
201
+ const sourceHref = window.location.href;
202
+ const rangoState = getRangoState();
203
+ const wildcardKey = buildPrefetchKey(rangoState, targetUrl);
204
+ const sourceKey = buildSourceKey(rangoState, sourceHref, targetUrl);
205
+ if (hasPrefetchHit(forceSourceScope, wildcardKey, sourceKey)) {
206
+ debugLog("[prefetch] direct dedup (key already exists)", {
207
+ url,
208
+ wildcardKey,
209
+ sourceKey,
210
+ forceSourceScope,
211
+ });
212
+ return;
213
+ }
214
+ debugLog("[prefetch] direct fetch", {
215
+ url,
216
+ wildcardKey,
217
+ sourceKey,
218
+ source: sourceHref,
219
+ forceSourceScope,
220
+ });
221
+ executePrefetchFetch(
222
+ wildcardKey,
223
+ sourceKey,
224
+ targetUrl.toString(),
225
+ forceSourceScope,
226
+ );
119
227
  }
120
228
 
121
229
  /**
122
230
  * Prefetch (queued): goes through the concurrency-limited queue.
123
231
  * Used by viewport/render strategies to avoid flooding the server.
124
- * Returns the cache key for use in cleanup.
232
+ * Returns the inflight key (wildcard by default, source-scoped when
233
+ * `prefetchKey=":source"` is passed).
125
234
  */
126
235
  export function prefetchQueued(
127
236
  url: string,
128
237
  segmentIds: string[],
129
238
  version?: string,
239
+ routerId?: string,
240
+ prefetchKey?: ":source",
130
241
  ): string {
131
242
  if (!shouldPrefetch()) return "";
132
- const targetUrl = buildPrefetchUrl(url, segmentIds, version);
243
+ const targetUrl = buildPrefetchUrl(url, segmentIds, version, routerId);
133
244
  if (!targetUrl) return "";
134
- const key = buildPrefetchKey(window.location.href, targetUrl);
135
- if (hasPrefetch(key)) return key;
245
+ const forceSourceScope = prefetchKey === ":source";
246
+ if (!forceSourceScope && isSamePage(url)) {
247
+ return "";
248
+ }
249
+ const sourceHref = window.location.href;
250
+ const rangoState = getRangoState();
251
+ const wildcardKey = buildPrefetchKey(rangoState, targetUrl);
252
+ const sourceKey = buildSourceKey(rangoState, sourceHref, targetUrl);
253
+ const queueKey = forceSourceScope ? sourceKey : wildcardKey;
254
+ if (hasPrefetchHit(forceSourceScope, wildcardKey, sourceKey)) {
255
+ debugLog("[prefetch] queued dedup (key already exists)", {
256
+ url,
257
+ wildcardKey,
258
+ sourceKey,
259
+ forceSourceScope,
260
+ });
261
+ return queueKey;
262
+ }
136
263
  const fetchUrlStr = targetUrl.toString();
137
- enqueuePrefetch(key, (signal) => {
264
+ enqueuePrefetch(queueKey, (signal) => {
138
265
  // Re-check at execution time: a hover-triggered prefetchDirect may
139
266
  // have started or completed this key while the item sat in the queue.
140
- if (hasPrefetch(key)) return Promise.resolve();
141
- return executePrefetchFetch(key, fetchUrlStr, signal).then(() => {});
267
+ if (hasPrefetchHit(forceSourceScope, wildcardKey, sourceKey)) {
268
+ return Promise.resolve();
269
+ }
270
+ if (!forceSourceScope && isSamePage(url)) {
271
+ return Promise.resolve();
272
+ }
273
+ return executePrefetchFetch(
274
+ wildcardKey,
275
+ sourceKey,
276
+ fetchUrlStr,
277
+ forceSourceScope,
278
+ signal,
279
+ ).then(() => {});
142
280
  });
143
- return key;
281
+ return queueKey;
144
282
  }