@rangojs/router 0.0.0-experimental.19 → 0.0.0-experimental.190fb30d

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 (1254) hide show
  1. package/AGENTS.md +13 -0
  2. package/README.md +304 -708
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +822 -182
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/{src/handles/index.ts → dist/handles/index.js} +1 -1
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +4644 -1433
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/index.named-routes.gen.ts +103 -0
  802. package/dist/vite/package-resolution.d.ts +43 -0
  803. package/dist/vite/package-resolution.d.ts.map +1 -0
  804. package/dist/vite/package-resolution.js +112 -0
  805. package/dist/vite/package-resolution.js.map +1 -0
  806. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  807. package/dist/vite/virtual-entries.d.ts +25 -0
  808. package/dist/vite/virtual-entries.d.ts.map +1 -0
  809. package/dist/vite/virtual-entries.js +110 -0
  810. package/dist/vite/virtual-entries.js.map +1 -0
  811. package/package.json +87 -16
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +329 -0
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +251 -24
  816. package/skills/caching/SKILL.md +379 -21
  817. package/skills/catalog.json +271 -0
  818. package/skills/comparison/SKILL.md +50 -0
  819. package/skills/comparison/agents/openai.yaml +4 -0
  820. package/skills/comparison/references/framework-comparison.md +837 -0
  821. package/skills/composability/SKILL.md +110 -4
  822. package/skills/css/SKILL.md +76 -0
  823. package/skills/debug-manifest/SKILL.md +5 -3
  824. package/skills/defer-hydration/SKILL.md +235 -0
  825. package/skills/document-cache/SKILL.md +87 -56
  826. package/skills/fonts/SKILL.md +1 -1
  827. package/skills/handler-use/SKILL.md +364 -0
  828. package/skills/hooks/SKILL.md +76 -692
  829. package/skills/hooks/data.md +273 -0
  830. package/skills/hooks/handle-and-actions.md +103 -0
  831. package/skills/hooks/navigation.md +110 -0
  832. package/skills/hooks/outlets.md +41 -0
  833. package/skills/hooks/state.md +228 -0
  834. package/skills/hooks/urls.md +135 -0
  835. package/skills/host-router/SKILL.md +320 -0
  836. package/skills/i18n/SKILL.md +276 -0
  837. package/skills/intercept/SKILL.md +94 -18
  838. package/skills/layout/SKILL.md +62 -19
  839. package/skills/links/SKILL.md +249 -17
  840. package/skills/loader/SKILL.md +320 -32
  841. package/skills/middleware/SKILL.md +59 -16
  842. package/skills/migrate-nextjs/SKILL.md +745 -0
  843. package/skills/migrate-react-router/SKILL.md +153 -0
  844. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  845. package/skills/migrate-react-router/component-migration.md +196 -0
  846. package/skills/migrate-react-router/data-and-actions.md +225 -0
  847. package/skills/migrate-react-router/route-mapping.md +271 -0
  848. package/skills/mime-routes/SKILL.md +29 -2
  849. package/skills/observability/SKILL.md +202 -0
  850. package/skills/parallel/SKILL.md +225 -10
  851. package/skills/ppr/SKILL.md +618 -0
  852. package/skills/prerender/SKILL.md +180 -126
  853. package/skills/rango/SKILL.md +318 -25
  854. package/skills/react-compiler/SKILL.md +168 -0
  855. package/skills/response-routes/SKILL.md +138 -49
  856. package/skills/route/SKILL.md +175 -13
  857. package/skills/router-setup/SKILL.md +139 -14
  858. package/skills/scripts/SKILL.md +179 -0
  859. package/skills/server-actions/SKILL.md +776 -0
  860. package/skills/shell-manifest/SKILL.md +185 -0
  861. package/skills/streams-and-websockets/SKILL.md +283 -0
  862. package/skills/tailwind/SKILL.md +28 -4
  863. package/skills/testing/SKILL.md +126 -222
  864. package/skills/testing/bindings.md +103 -0
  865. package/skills/testing/cache-prerender.md +127 -0
  866. package/skills/testing/client-components.md +124 -0
  867. package/skills/testing/e2e-parity.md +125 -0
  868. package/skills/testing/flight.md +91 -0
  869. package/skills/testing/handles.md +131 -0
  870. package/skills/testing/loader.md +128 -0
  871. package/skills/testing/middleware.md +99 -0
  872. package/skills/testing/render-handler.md +122 -0
  873. package/skills/testing/response-routes.md +95 -0
  874. package/skills/testing/reverse-and-types.md +85 -0
  875. package/skills/testing/server-actions.md +107 -0
  876. package/skills/testing/server-tree.md +128 -0
  877. package/skills/testing/setup.md +123 -0
  878. package/skills/theme/SKILL.md +1 -1
  879. package/skills/typesafety/SKILL.md +45 -614
  880. package/skills/typesafety/env-and-bindings.md +254 -0
  881. package/skills/typesafety/generated-files-and-cli.md +335 -0
  882. package/skills/typesafety/params-and-search.md +153 -0
  883. package/skills/typesafety/route-types.md +209 -0
  884. package/skills/use-cache/SKILL.md +74 -15
  885. package/skills/vercel/SKILL.md +128 -0
  886. package/skills/view-transitions/SKILL.md +337 -0
  887. package/src/__augment-tests__/augment.ts +81 -0
  888. package/src/__augment-tests__/augmented.check.ts +116 -0
  889. package/src/__internal.ts +67 -40
  890. package/src/bin/rango.ts +18 -0
  891. package/src/browser/action-coordinator.ts +53 -36
  892. package/src/browser/action-fence.ts +47 -0
  893. package/src/browser/app-shell.ts +39 -0
  894. package/src/browser/app-version.ts +14 -0
  895. package/src/browser/connection-warmup.ts +134 -0
  896. package/src/browser/cookie-name.ts +140 -0
  897. package/src/browser/event-controller.ts +257 -158
  898. package/src/browser/history-state.ts +21 -0
  899. package/src/browser/index.ts +3 -3
  900. package/src/browser/invalidate-client-cache.ts +52 -0
  901. package/src/browser/link-interceptor.ts +4 -0
  902. package/src/browser/logging.ts +28 -0
  903. package/src/browser/merge-segment-loaders.ts +6 -4
  904. package/src/browser/navigation-bridge.ts +222 -38
  905. package/src/browser/navigation-client.ts +233 -58
  906. package/src/browser/navigation-store-handle.ts +38 -0
  907. package/src/browser/navigation-store.ts +203 -80
  908. package/src/browser/navigation-transaction.ts +18 -66
  909. package/src/browser/network-error-handler.ts +34 -7
  910. package/src/browser/partial-update.ts +242 -126
  911. package/src/browser/prefetch/cache.ts +344 -30
  912. package/src/browser/prefetch/fetch.ts +373 -48
  913. package/src/browser/prefetch/policy.ts +6 -0
  914. package/src/browser/prefetch/queue.ts +144 -23
  915. package/src/browser/prefetch/resource-ready.ts +77 -0
  916. package/src/browser/rango-state.ts +158 -76
  917. package/src/browser/react/Link.tsx +135 -18
  918. package/src/browser/react/NavigationProvider.tsx +240 -122
  919. package/src/browser/react/ScrollRestoration.tsx +10 -6
  920. package/src/browser/react/context.ts +7 -2
  921. package/src/browser/react/filter-segment-order.ts +66 -7
  922. package/src/browser/react/index.ts +0 -48
  923. package/src/browser/react/location-state-shared.ts +178 -8
  924. package/src/browser/react/location-state.ts +39 -14
  925. package/src/browser/react/use-action.ts +6 -15
  926. package/src/browser/react/use-handle.ts +23 -69
  927. package/src/browser/react/use-href.tsx +8 -1
  928. package/src/browser/react/use-link-status.ts +33 -8
  929. package/src/browser/react/use-navigation.ts +32 -7
  930. package/src/browser/react/use-params.ts +20 -10
  931. package/src/browser/react/use-reverse.ts +106 -0
  932. package/src/browser/react/use-router.ts +46 -11
  933. package/src/browser/react/use-search-params.ts +0 -5
  934. package/src/browser/react/use-segments.ts +11 -21
  935. package/src/browser/response-adapter.ts +99 -8
  936. package/src/browser/rsc-router.tsx +276 -75
  937. package/src/browser/scroll-restoration.ts +61 -47
  938. package/src/browser/segment-reconciler.ts +44 -7
  939. package/src/browser/segment-structure-assert.ts +2 -2
  940. package/src/browser/server-action-bridge.ts +631 -442
  941. package/src/browser/types.ts +160 -12
  942. package/src/browser/validate-redirect-origin.ts +43 -16
  943. package/src/build/collect-fallback-refs.ts +107 -0
  944. package/src/build/generate-manifest.ts +207 -158
  945. package/src/build/generate-route-types.ts +8 -1
  946. package/src/build/index.ts +11 -3
  947. package/src/build/prefix-tree-utils.ts +123 -0
  948. package/src/build/route-trie.ts +215 -42
  949. package/src/build/route-types/ast-route-extraction.ts +15 -8
  950. package/src/build/route-types/codegen.ts +16 -5
  951. package/src/build/route-types/include-resolution.ts +464 -63
  952. package/src/build/route-types/param-extraction.ts +6 -3
  953. package/src/build/route-types/per-module-writer.ts +22 -6
  954. package/src/build/route-types/router-processing.ts +442 -106
  955. package/src/build/route-types/scan-filter.ts +9 -2
  956. package/src/build/route-types/source-scan.ts +216 -0
  957. package/src/build/runtime-discovery.ts +13 -21
  958. package/src/cache/cache-error.ts +104 -0
  959. package/src/cache/cache-key-utils.ts +58 -13
  960. package/src/cache/cache-policy.ts +108 -34
  961. package/src/cache/cache-runtime.ts +454 -97
  962. package/src/cache/cache-scope.ts +235 -103
  963. package/src/cache/cache-tag.ts +149 -0
  964. package/src/cache/cf/cf-base64.ts +33 -0
  965. package/src/cache/cf/cf-cache-constants.ts +127 -0
  966. package/src/cache/cf/cf-cache-store.ts +2446 -170
  967. package/src/cache/cf/cf-cache-types.ts +349 -0
  968. package/src/cache/cf/cf-kv-utils.ts +46 -0
  969. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  970. package/src/cache/cf/index.ts +11 -17
  971. package/src/cache/document-cache.ts +144 -49
  972. package/src/cache/handle-snapshot.ts +70 -0
  973. package/src/cache/index.ts +24 -20
  974. package/src/cache/memory-segment-store.ts +243 -37
  975. package/src/cache/profile-registry.ts +46 -31
  976. package/src/cache/read-through-swr.ts +56 -12
  977. package/src/cache/segment-codec.ts +13 -21
  978. package/src/cache/shell-snapshot.ts +417 -0
  979. package/src/cache/tag-invalidation.ts +230 -0
  980. package/src/cache/taint.ts +55 -0
  981. package/src/cache/types.ts +194 -99
  982. package/src/cache/vercel/index.ts +11 -0
  983. package/src/cache/vercel/vercel-cache-store.ts +1132 -0
  984. package/src/client.rsc.tsx +42 -21
  985. package/src/client.tsx +117 -336
  986. package/src/cloudflare/index.ts +11 -0
  987. package/src/cloudflare/tracing.ts +108 -0
  988. package/src/component-utils.ts +19 -0
  989. package/src/components/DefaultDocument.tsx +8 -2
  990. package/src/context-var.ts +84 -2
  991. package/src/debug.ts +2 -2
  992. package/src/decode-loader-results.ts +52 -0
  993. package/src/defer.ts +185 -0
  994. package/src/deps/ssr.ts +0 -1
  995. package/src/encode-kv.ts +49 -0
  996. package/src/errors.ts +30 -4
  997. package/src/escape-script.ts +52 -0
  998. package/src/handle.ts +104 -34
  999. package/src/handles/MetaTags.tsx +24 -53
  1000. package/src/handles/Scripts.tsx +183 -0
  1001. package/src/handles/breadcrumbs.ts +93 -0
  1002. package/src/handles/deferred-resolution.ts +127 -0
  1003. package/src/handles/is-thenable.ts +18 -0
  1004. package/src/handles/meta.ts +14 -40
  1005. package/src/handles/script.ts +244 -0
  1006. package/src/host/cookie-handler.ts +9 -60
  1007. package/src/host/errors.ts +13 -22
  1008. package/src/host/index.ts +9 -5
  1009. package/src/host/pattern-matcher.ts +23 -52
  1010. package/src/host/router.ts +107 -99
  1011. package/src/host/testing.ts +40 -27
  1012. package/src/host/types.ts +37 -4
  1013. package/src/host/utils.ts +1 -1
  1014. package/src/href-client.ts +137 -22
  1015. package/src/index.rsc.ts +86 -30
  1016. package/src/index.ts +158 -68
  1017. package/src/internal-debug.ts +11 -10
  1018. package/src/loader-store.ts +500 -0
  1019. package/src/loader.rsc.ts +20 -13
  1020. package/src/loader.ts +12 -11
  1021. package/src/missing-id-error.ts +68 -0
  1022. package/src/outlet-context.ts +1 -1
  1023. package/src/outlet-provider.tsx +1 -5
  1024. package/src/prerender/param-hash.ts +16 -16
  1025. package/src/prerender/store.ts +63 -26
  1026. package/src/prerender.ts +215 -86
  1027. package/src/redirect-origin.ts +114 -0
  1028. package/src/regex-escape.ts +8 -0
  1029. package/src/render-error-thrower.tsx +20 -0
  1030. package/src/response-utils.ts +62 -0
  1031. package/src/reverse.ts +65 -15
  1032. package/src/root-error-boundary.tsx +1 -19
  1033. package/src/route-content-wrapper.tsx +19 -77
  1034. package/src/route-definition/dsl-helpers.ts +485 -303
  1035. package/src/route-definition/helper-factories.ts +28 -140
  1036. package/src/route-definition/helpers-types.ts +153 -77
  1037. package/src/route-definition/index.ts +4 -5
  1038. package/src/route-definition/redirect.ts +53 -12
  1039. package/src/route-definition/resolve-handler-use.ts +160 -0
  1040. package/src/route-definition/use-item-types.ts +29 -0
  1041. package/src/route-map-builder.ts +48 -21
  1042. package/src/route-types.ts +37 -46
  1043. package/src/router/basename.ts +14 -0
  1044. package/src/router/content-negotiation.ts +164 -17
  1045. package/src/router/error-handling.ts +45 -18
  1046. package/src/router/find-match.ts +130 -29
  1047. package/src/router/handler-context.ts +110 -39
  1048. package/src/router/instrument.ts +355 -0
  1049. package/src/router/intercept-resolution.ts +50 -24
  1050. package/src/router/lazy-includes.ts +89 -63
  1051. package/src/router/loader-resolution.ts +286 -56
  1052. package/src/router/logging.ts +5 -8
  1053. package/src/router/manifest.ts +105 -56
  1054. package/src/router/match-api.ts +179 -219
  1055. package/src/router/match-context.ts +0 -22
  1056. package/src/router/match-handlers.ts +211 -165
  1057. package/src/router/match-middleware/background-revalidation.ts +66 -22
  1058. package/src/router/match-middleware/cache-lookup.ts +214 -263
  1059. package/src/router/match-middleware/cache-store.ts +105 -50
  1060. package/src/router/match-middleware/intercept-resolution.ts +8 -28
  1061. package/src/router/match-middleware/segment-resolution.ts +52 -18
  1062. package/src/router/match-pipelines.ts +1 -42
  1063. package/src/router/match-result.ts +127 -52
  1064. package/src/router/metrics.ts +217 -26
  1065. package/src/router/middleware-types.ts +24 -110
  1066. package/src/router/middleware.ts +412 -199
  1067. package/src/router/navigation-snapshot.ts +133 -0
  1068. package/src/router/params-util.ts +23 -0
  1069. package/src/router/parse-pattern.ts +115 -0
  1070. package/src/router/pattern-matching.ts +183 -137
  1071. package/src/router/prefetch-cache-ttl.ts +51 -0
  1072. package/src/router/prefetch-limits.ts +37 -0
  1073. package/src/router/prerender-match.ts +207 -58
  1074. package/src/router/preview-match.ts +35 -103
  1075. package/src/router/request-classification.ts +291 -0
  1076. package/src/router/revalidation.ts +144 -74
  1077. package/src/router/route-snapshot.ts +256 -0
  1078. package/src/router/router-context.ts +11 -29
  1079. package/src/router/router-interfaces.ts +160 -36
  1080. package/src/router/router-options.ts +215 -23
  1081. package/src/router/router-registry.ts +2 -5
  1082. package/src/router/segment-resolution/fresh.ts +318 -77
  1083. package/src/router/segment-resolution/helpers.ts +116 -31
  1084. package/src/router/segment-resolution/loader-cache.ts +156 -39
  1085. package/src/router/segment-resolution/loader-mask.ts +67 -0
  1086. package/src/router/segment-resolution/loader-snapshot.ts +308 -0
  1087. package/src/router/segment-resolution/revalidation.ts +496 -391
  1088. package/src/router/segment-resolution/static-store.ts +19 -5
  1089. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1090. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1091. package/src/router/segment-resolution.ts +5 -1
  1092. package/src/router/segment-wrappers.ts +8 -5
  1093. package/src/router/state-cookie-name.ts +33 -0
  1094. package/src/router/substitute-pattern-params.ts +75 -0
  1095. package/src/router/telemetry-otel.ts +160 -200
  1096. package/src/router/telemetry.ts +105 -20
  1097. package/src/router/timeout.ts +0 -20
  1098. package/src/router/tracing.ts +215 -0
  1099. package/src/router/trie-matching.ts +188 -58
  1100. package/src/router/types.ts +10 -63
  1101. package/src/router/url-params.ts +57 -0
  1102. package/src/router.ts +224 -65
  1103. package/src/rsc/full-payload.ts +70 -0
  1104. package/src/rsc/handler-context.ts +3 -2
  1105. package/src/rsc/handler.ts +726 -457
  1106. package/src/rsc/helpers.ts +168 -46
  1107. package/src/rsc/index.ts +2 -25
  1108. package/src/rsc/json-route-result.ts +38 -0
  1109. package/src/rsc/loader-fetch.ts +127 -31
  1110. package/src/rsc/manifest-init.ts +33 -42
  1111. package/src/rsc/nonce.ts +10 -1
  1112. package/src/rsc/origin-guard.ts +39 -25
  1113. package/src/rsc/progressive-enhancement.ts +159 -23
  1114. package/src/rsc/redirect-guard.ts +100 -0
  1115. package/src/rsc/response-cache-serve.ts +238 -0
  1116. package/src/rsc/response-error.ts +79 -12
  1117. package/src/rsc/response-route-handler.ts +99 -189
  1118. package/src/rsc/rsc-rendering.ts +516 -104
  1119. package/src/rsc/runtime-warnings.ts +23 -10
  1120. package/src/rsc/server-action.ts +293 -115
  1121. package/src/rsc/shell-capture.ts +1166 -0
  1122. package/src/rsc/shell-serve.ts +181 -0
  1123. package/src/rsc/ssr-setup.ts +144 -0
  1124. package/src/rsc/transition-gate.ts +89 -0
  1125. package/src/rsc/types.ts +64 -6
  1126. package/src/runtime-env.ts +18 -0
  1127. package/src/search-params.ts +49 -41
  1128. package/src/segment-content-promise.ts +67 -0
  1129. package/src/segment-loader-promise.ts +167 -0
  1130. package/src/segment-system.tsx +418 -131
  1131. package/src/serialize.ts +243 -0
  1132. package/src/server/context.ts +375 -63
  1133. package/src/server/cookie-parse.ts +32 -0
  1134. package/src/server/cookie-store.ts +152 -5
  1135. package/src/server/handle-store.ts +40 -38
  1136. package/src/server/loader-registry.ts +38 -46
  1137. package/src/server/request-context.ts +585 -178
  1138. package/src/server.ts +6 -0
  1139. package/src/ssr/index.tsx +467 -174
  1140. package/src/ssr/inject-rsc-eager.ts +167 -0
  1141. package/src/ssr/ssr-root.tsx +228 -0
  1142. package/src/static-handler.ts +27 -18
  1143. package/src/testing/cache-status.ts +162 -0
  1144. package/src/testing/collect-handle.ts +46 -0
  1145. package/src/testing/dispatch.ts +813 -0
  1146. package/src/testing/dom.entry.ts +22 -0
  1147. package/src/testing/e2e/fixture.ts +188 -0
  1148. package/src/testing/e2e/index.ts +128 -0
  1149. package/src/testing/e2e/matchers.ts +35 -0
  1150. package/src/testing/e2e/page-helpers.ts +272 -0
  1151. package/src/testing/e2e/parity.ts +387 -0
  1152. package/src/testing/e2e/server.ts +195 -0
  1153. package/src/testing/flight-matchers.ts +97 -0
  1154. package/src/testing/flight-normalize.ts +11 -0
  1155. package/src/testing/flight-runtime.d.ts +57 -0
  1156. package/src/testing/flight-tree.ts +682 -0
  1157. package/src/testing/flight.entry.ts +52 -0
  1158. package/src/testing/flight.ts +257 -0
  1159. package/src/testing/generated-routes.ts +199 -0
  1160. package/src/testing/index.ts +105 -0
  1161. package/src/testing/internal/context.ts +371 -0
  1162. package/src/testing/internal/flight-client-globals.ts +30 -0
  1163. package/src/testing/internal/seed-vars.ts +54 -0
  1164. package/src/testing/render-handler.ts +357 -0
  1165. package/src/testing/render-route.tsx +584 -0
  1166. package/src/testing/run-loader.ts +385 -0
  1167. package/src/testing/run-middleware.ts +205 -0
  1168. package/src/testing/run-transition-when.ts +164 -0
  1169. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1170. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1171. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1172. package/src/testing/vitest-stubs/version.ts +5 -0
  1173. package/src/testing/vitest.ts +305 -0
  1174. package/src/theme/ThemeProvider.tsx +56 -84
  1175. package/src/theme/ThemeScript.tsx +7 -9
  1176. package/src/theme/constants.ts +52 -13
  1177. package/src/theme/index.ts +3 -19
  1178. package/src/theme/theme-context.ts +1 -5
  1179. package/src/theme/theme-script.ts +22 -21
  1180. package/src/theme/use-theme.ts +0 -3
  1181. package/src/types/boundaries.ts +0 -35
  1182. package/src/types/cache-types.ts +17 -8
  1183. package/src/types/error-types.ts +30 -90
  1184. package/src/types/global-namespace.ts +54 -41
  1185. package/src/types/handler-context.ts +237 -89
  1186. package/src/types/index.ts +3 -10
  1187. package/src/types/loader-types.ts +44 -15
  1188. package/src/types/request-scope.ts +112 -0
  1189. package/src/types/route-config.ts +23 -46
  1190. package/src/types/route-entry.ts +19 -7
  1191. package/src/types/segments.ts +137 -19
  1192. package/src/urls/include-helper.ts +40 -75
  1193. package/src/urls/include-provider.ts +71 -0
  1194. package/src/urls/index.ts +2 -11
  1195. package/src/urls/path-helper-types.ts +102 -23
  1196. package/src/urls/path-helper.ts +62 -111
  1197. package/src/urls/pattern-types.ts +84 -19
  1198. package/src/urls/response-types.ts +25 -22
  1199. package/src/urls/type-extraction.ts +98 -154
  1200. package/src/urls/urls-function.ts +1 -19
  1201. package/src/use-loader.tsx +346 -89
  1202. package/src/vercel/index.ts +11 -0
  1203. package/src/vercel/tracing.ts +88 -0
  1204. package/src/vite/debug.ts +185 -0
  1205. package/src/vite/discovery/bundle-postprocess.ts +64 -91
  1206. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1207. package/src/vite/discovery/discover-routers.ts +147 -88
  1208. package/src/vite/discovery/discovery-errors.ts +255 -0
  1209. package/src/vite/discovery/gate-state.ts +171 -0
  1210. package/src/vite/discovery/prerender-collection.ts +247 -145
  1211. package/src/vite/discovery/route-types-writer.ts +40 -84
  1212. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1213. package/src/vite/discovery/state.ts +61 -13
  1214. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1215. package/src/vite/index.ts +19 -3
  1216. package/src/vite/inject-client-debug.ts +88 -0
  1217. package/src/vite/plugin-types.ts +234 -62
  1218. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1219. package/src/vite/plugins/client-ref-dedup.ts +120 -0
  1220. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1221. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1222. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1223. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1224. package/src/vite/plugins/expose-action-id.ts +49 -98
  1225. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1226. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1227. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1228. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1229. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1230. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1231. package/src/vite/plugins/performance-tracks.ts +89 -0
  1232. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1233. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1234. package/src/vite/plugins/vercel-output.ts +384 -0
  1235. package/src/vite/plugins/version-injector.ts +40 -29
  1236. package/src/vite/plugins/version-plugin.ts +46 -37
  1237. package/src/vite/plugins/virtual-entries.ts +138 -27
  1238. package/src/vite/rango.ts +356 -295
  1239. package/src/vite/router-discovery.ts +1106 -166
  1240. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1241. package/src/vite/utils/banner.ts +4 -4
  1242. package/src/vite/utils/bundle-analysis.ts +10 -15
  1243. package/src/vite/utils/client-chunks.ts +184 -0
  1244. package/src/vite/utils/directive-prologue.ts +40 -0
  1245. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1246. package/src/vite/utils/manifest-utils.ts +4 -59
  1247. package/src/vite/utils/package-resolution.ts +20 -52
  1248. package/src/vite/utils/prerender-utils.ts +158 -38
  1249. package/src/vite/utils/shared-utils.ts +144 -44
  1250. package/CLAUDE.md +0 -5
  1251. package/src/browser/action-response-classifier.ts +0 -99
  1252. package/src/browser/shallow.ts +0 -40
  1253. package/src/route-definition/route-function.ts +0 -119
  1254. package/src/router/middleware-cookies.ts +0 -55
@@ -2,32 +2,100 @@
2
2
  * Prefetch Fetch
3
3
  *
4
4
  * Fetch-based prefetch logic used by Link (hover/viewport/render strategies)
5
- * and useRouter().prefetch(). Sends low-priority fetch requests with
6
- * X-Rango-State and X-Rango-Prefetch headers so the browser HTTP cache
7
- * can serve the response on subsequent navigation.
5
+ * and useRouter().prefetch(). Sends the same headers and segment IDs as a
6
+ * real navigation so the server returns a proper diff. The response is fetched
7
+ * AND eagerly decoded (createFromFetch) up front: decoding the Flight stream
8
+ * resolves the route's client references, so the route's JS chunks are imported
9
+ * during prefetch rather than on click. The decoded payload is stored in an
10
+ * in-memory cache and reused verbatim by navigation, so a prefetched click
11
+ * loads no new code.
12
+ *
13
+ * In-flight promises are tracked in the cache so that navigation can reuse
14
+ * a prefetch that is still downloading/decoding instead of starting a
15
+ * duplicate request.
8
16
  */
9
17
 
10
18
  import {
19
+ buildPrefetchKey,
20
+ buildSourceKey,
11
21
  hasPrefetch,
12
22
  markPrefetchInflight,
13
- markPrefetched,
23
+ setInflightPromiseWithAliases,
24
+ storePrefetch,
25
+ removePrefetch,
14
26
  clearPrefetchInflight,
15
27
  currentGeneration,
28
+ type DecodedPrefetch,
16
29
  } from "./cache.js";
17
30
  import { getRangoState } from "../rango-state.js";
31
+ import { isActionFenceActive } from "../action-fence.js";
18
32
  import { enqueuePrefetch } from "./queue.js";
19
33
  import { shouldPrefetch } from "./policy.js";
34
+ import { debugLog, IS_BROWSER_DEBUG } from "../logging.js";
35
+ import { teeWithCompletion, isForeignRouterId } from "../response-adapter.js";
36
+ import type { RscPayload } from "../types.js";
37
+
38
+ /**
39
+ * Decoder injected at app startup (see setPrefetchDecoder). This is
40
+ * `deps.createFromFetch` — decoupled from the RSC runtime exactly like the
41
+ * navigation client. Prefetch decodes through it so the route's client chunks
42
+ * are pulled during the prefetch, not on click.
43
+ */
44
+ type PrefetchDecoder = (response: Promise<Response>) => Promise<RscPayload>;
45
+
46
+ let decoder: PrefetchDecoder | null = null;
47
+
48
+ /**
49
+ * Hard ceiling for ANY prefetch fetch (hover/direct AND queue-driven). A server
50
+ * that stalls leaves the fetch pending forever — its `.finally()` never runs,
51
+ * `clearPrefetchInflight` never fires, and `hasPrefetch(key)` stays true,
52
+ * permanently deduping every future prefetch of that URL. The hover path passes
53
+ * no signal; the queue passes its own AbortController signal that only aborts on
54
+ * navigation, never on a stall — so the timeout is layered on BOTH (combined
55
+ * with any caller signal via AbortSignal.any) and aborts the stalled fetch so it
56
+ * settles (rejects) and the inflight key is always released. Generous so a
57
+ * slow-but-live response is never cut short.
58
+ */
59
+ const PREFETCH_FETCH_TIMEOUT_MS = 30_000;
60
+
61
+ /**
62
+ * Wire the RSC decoder used to eagerly decode prefetched responses. Called
63
+ * once from initBrowserApp with the same createFromFetch the navigation client
64
+ * uses. Until set, prefetch warming is inert (prefetches are skipped) — the
65
+ * browser app always sets it before any Link can fire.
66
+ */
67
+ export function setPrefetchDecoder(fn: PrefetchDecoder): void {
68
+ decoder = fn;
69
+ }
70
+
71
+ /**
72
+ * Check if a URL resolves to the current page (same pathname + search).
73
+ * Used to prevent same-page prefetching, which produces a trivial diff
74
+ * that would corrupt the (default wildcard) prefetch cache entry.
75
+ */
76
+ function isSamePage(url: string): boolean {
77
+ try {
78
+ const target = new URL(url, window.location.origin);
79
+ return (
80
+ target.pathname + target.search ===
81
+ window.location.pathname + window.location.search
82
+ );
83
+ } catch {
84
+ return false;
85
+ }
86
+ }
20
87
 
21
88
  /**
22
89
  * Build an RSC partial URL for prefetching.
23
- * Includes _rsc_v for version mismatch detection when available.
24
- * Returns null for malformed or cross-origin URLs to prevent
25
- * leaking router headers to external origins.
90
+ * Includes _rsc_segments so the server can diff against currently mounted
91
+ * segments, and _rsc_v for version mismatch detection.
92
+ * Returns null for malformed or cross-origin URLs.
26
93
  */
27
94
  function buildPrefetchUrl(
28
95
  url: string,
29
96
  segmentIds: string[],
30
97
  version?: string,
98
+ routerId?: string,
31
99
  ): URL | null {
32
100
  let targetUrl: URL;
33
101
  try {
@@ -45,93 +113,350 @@ function buildPrefetchUrl(
45
113
  if (version) {
46
114
  targetUrl.searchParams.set("_rsc_v", version);
47
115
  }
116
+ if (routerId) {
117
+ targetUrl.searchParams.set("_rsc_rid", routerId);
118
+ }
48
119
  return targetUrl;
49
120
  }
50
121
 
51
122
  /**
52
- * Build the dedup key for prefetch tracking.
53
- * Includes the source page pathname so the same target prefetched from
54
- * different pages gets separate entries — the server response varies on
55
- * X-RSC-Router-Client-Path (source page context).
56
- */
57
- function buildPrefetchKey(targetUrl: URL): string {
58
- return window.location.href + "\0" + targetUrl.pathname + targetUrl.search;
59
- }
60
-
61
- /**
62
- * Core prefetch fetch logic. Returns a Promise and accepts an optional
63
- * AbortSignal for cancellation by the prefetch queue.
123
+ * Core prefetch fetch logic. Fetches the response, eagerly decodes it, and
124
+ * stores the decoded payload in the in-memory cache. The returned Promise
125
+ * resolves to the decoded entry (or null on failure / control header) so
126
+ * navigation can safely reuse an in-flight prefetch via
127
+ * consumeInflightPrefetch().
128
+ *
129
+ * Eager decode is the warming step: createFromFetch parses the Flight stream,
130
+ * which resolves the route's client references and imports its JS chunks. The
131
+ * stored payload is reused as-is by navigation, so the click loads no new code.
132
+ *
133
+ * Control headers are NOT acted on here. A speculative prefetch must never
134
+ * reload the page or throw a redirect — if the response carries X-RSC-Reload
135
+ * or X-RSC-Redirect, we drop it (resolve null) and let the real navigation
136
+ * re-fetch and honor it.
137
+ *
138
+ * Inflight + storage key selection:
139
+ *
140
+ * - `forceSourceScope` (Link opted in with `prefetchKey=":source"`): single
141
+ * inflight registration under `sourceKey`; entry stored under `sourceKey`.
142
+ * No wildcard leak is possible.
143
+ *
144
+ * - Otherwise: dual inflight registration under both `wildcardKey` and
145
+ * `sourceKey` so same-source navigations adopt directly via their own
146
+ * source key. Storage key is chosen at response time from the
147
+ * `X-RSC-Prefetch-Scope` header — `"source"` → `sourceKey` (intercept
148
+ * modals etc.), anything else → `wildcardKey`. The entry records its scope
149
+ * so cross-source navigations that adopted via `wildcardKey` can bail out
150
+ * in `navigation-client.ts` when the adopted entry turns out source-scoped.
64
151
  */
65
152
  function executePrefetchFetch(
66
- key: string,
153
+ wildcardKey: string,
154
+ sourceKey: string,
67
155
  fetchUrl: string,
156
+ forceSourceScope: boolean,
157
+ /** Rango state captured once by the caller (keys + header share one read). */
158
+ rangoState: string,
159
+ expectedRouterId?: string,
68
160
  signal?: AbortSignal,
69
- ): Promise<void> {
161
+ ): Promise<DecodedPrefetch | null> {
70
162
  const gen = currentGeneration();
71
- markPrefetchInflight(key);
163
+ const inflightKeys = forceSourceScope
164
+ ? [sourceKey]
165
+ : [wildcardKey, sourceKey];
166
+ for (const k of inflightKeys) markPrefetchInflight(k);
167
+
168
+ // Always layer a stall timeout. It covers BOTH "no response ever arrives"
169
+ // (strands the inflight key) AND "the body stalls after headers" (leaves a
170
+ // published entry whose payload/streamComplete never settle, that future
171
+ // prefetches dedupe against and navigation awaits forever). Applies to the
172
+ // hover/direct path (no caller signal) and the queue-driven path (whose caller
173
+ // signal only aborts on navigation, never on a stall). On fire it aborts the
174
+ // fetch/stream and evicts the published entry if one exists; it is NOT cleared
175
+ // when headers arrive (see below) — it is cleared when the stream completes, or
176
+ // in `.finally()` for paths that publish no streaming entry.
177
+ let publishedKey: string | undefined;
178
+ let publishedEntry: DecodedPrefetch | undefined;
179
+ const timeoutController = new AbortController();
180
+ const timeoutId: ReturnType<typeof setTimeout> = setTimeout(() => {
181
+ timeoutController.abort();
182
+ // Body stalled after headers: evict the published-but-never-settling entry
183
+ // so future prefetches/navigation refetch. Identity-guarded (pass the exact
184
+ // entry) so a fresh entry republished under the same key — after this one was
185
+ // consumed — is NOT dropped. The abort cancels the tee (its finally resolves
186
+ // streamComplete) and rejects the eager decode.
187
+ if (publishedKey !== undefined && publishedEntry !== undefined) {
188
+ removePrefetch(publishedKey, publishedEntry);
189
+ }
190
+ }, PREFETCH_FETCH_TIMEOUT_MS);
191
+ let effectiveSignal: AbortSignal;
192
+ if (!signal) {
193
+ effectiveSignal = timeoutController.signal;
194
+ } else if (typeof AbortSignal.any === "function") {
195
+ // Combine the caller's signal (navigation-abort) with the timeout so either
196
+ // can settle the fetch.
197
+ effectiveSignal = AbortSignal.any([signal, timeoutController.signal]);
198
+ } else {
199
+ // Legacy runtime without AbortSignal.any: forward the caller's abort onto the
200
+ // timeout controller so a single signal carries both reasons.
201
+ effectiveSignal = timeoutController.signal;
202
+ if (signal.aborted) timeoutController.abort();
203
+ else
204
+ signal.addEventListener("abort", () => timeoutController.abort(), {
205
+ once: true,
206
+ });
207
+ }
72
208
 
73
- return fetch(fetchUrl, {
209
+ const promise: Promise<DecodedPrefetch | null> = fetch(fetchUrl, {
74
210
  priority: "low" as RequestPriority,
75
- signal,
211
+ // During an action's flight the state is not rotated, so the old
212
+ // X-Rango-State still matches the Vary-keyed HTTP-cache entry; bypass it so
213
+ // a prefetch fetches fresh rather than warming the map with stale bytes (the
214
+ // fence's HTTP-cache-bypass requirement applies to prefetch as well as
215
+ // navigation fetches).
216
+ ...(isActionFenceActive() && { cache: "no-store" as RequestCache }),
217
+ signal: effectiveSignal,
76
218
  headers: {
77
- "X-Rango-State": getRangoState(),
219
+ "X-Rango-State": rangoState,
78
220
  "X-RSC-Router-Client-Path": window.location.href,
79
221
  "X-Rango-Prefetch": "1",
80
222
  },
81
223
  })
82
224
  .then((response) => {
83
- // Drain body to ensure full download for browser HTTP cache.
84
- // pipeTo avoids decoding the stream into a JS string (unlike .text()).
85
- if (response.ok && response.body) {
86
- return response.body
87
- .pipeTo(new WritableStream())
88
- .then(() => markPrefetched(key, gen));
225
+ if (!response.ok || !decoder) return null;
226
+ // Control headers mean this response is stale (reload) or redirecting.
227
+ // Don't warm it — drop so navigation re-fetches and acts on the header.
228
+ if (
229
+ response.headers.has("X-RSC-Reload") ||
230
+ response.headers.has("X-RSC-Redirect")
231
+ ) {
232
+ return null;
89
233
  }
234
+ // Integrity check: never warm (or decode/import the chunks of) a foreign
235
+ // app's payload. A speculative prefetch must never reload — just drop it;
236
+ // navigation re-fetches and the server steers it.
237
+ if (isForeignRouterId(response, expectedRouterId)) {
238
+ return null;
239
+ }
240
+
241
+ const scope: "source" | "wildcard" =
242
+ forceSourceScope ||
243
+ response.headers.get("x-rsc-prefetch-scope") === "source"
244
+ ? "source"
245
+ : "wildcard";
246
+ const storageKey = scope === "source" ? sourceKey : wildcardKey;
247
+
248
+ // Track stream completion off a tee so navigation's scroll/revalidation
249
+ // gating matches the fresh-fetch path; decode the other branch. The
250
+ // completion callback reports whether the stream ended on a clean EOF
251
+ // (true) or was aborted/errored (false) — only a clean end can mark the
252
+ // entry complete (see below).
253
+ let resolveStreamComplete!: () => void;
254
+ let endedCleanly = false;
255
+ const streamComplete = new Promise<void>((resolve) => {
256
+ resolveStreamComplete = resolve;
257
+ });
258
+ const tracked = teeWithCompletion(
259
+ response,
260
+ (clean) => {
261
+ endedCleanly = clean;
262
+ resolveStreamComplete();
263
+ },
264
+ effectiveSignal,
265
+ // Speculative prefetch: a never-consumed/aborted stream error is benign.
266
+ true,
267
+ );
268
+
269
+ // Eager decode: parsing the Flight stream imports the route's client
270
+ // chunks now, not on click.
271
+ const payload = decoder(Promise.resolve(tracked));
272
+ // Mark handled so an unconsumed prefetch decode error stays quiet; the
273
+ // error is still surfaced to navigation if it consumes the entry.
274
+ payload.catch(() => {});
275
+
276
+ const entry: DecodedPrefetch = {
277
+ payload,
278
+ streamComplete,
279
+ scope,
280
+ complete: false,
281
+ };
282
+ storePrefetch(storageKey, entry, gen);
283
+ // The stall timeout now owns the body stream: arm eviction (publishedKey)
284
+ // and clear the timer once the stream completes. The tee's finally resolves
285
+ // streamComplete on normal completion AND on abort, so a healthy body pays
286
+ // no lingering timer while a stalled one is evicted when the timer fires.
287
+ publishedKey = storageKey;
288
+ publishedEntry = entry;
289
+ // Evict a broken prefetch IMMEDIATELY on the earliest failure signal — do not
290
+ // wait for both branches to settle. A decode that rejects while the tracking
291
+ // stream is still draining (or hung) would otherwise leave the rejected payload
292
+ // consumable (navigation reads entry.payload regardless of `complete`) until EOF
293
+ // or the stall timeout. removePrefetch is identity-guarded, so a fresh entry
294
+ // republished under the same key is never dropped, and a double call is a no-op.
295
+ payload.catch(() => removePrefetch(storageKey, entry));
296
+ streamComplete.then(() => {
297
+ if (!endedCleanly) removePrefetch(storageKey, entry);
298
+ });
299
+ // Mark complete ONLY on a fully-healthy prefetch (decode resolved AND clean EOF).
300
+ Promise.allSettled([payload, streamComplete]).then(([decode]) => {
301
+ if (decode.status === "fulfilled" && endedCleanly) {
302
+ entry.complete = true;
303
+ }
304
+ clearTimeout(timeoutId);
305
+ });
306
+ return entry;
90
307
  })
91
- .catch(() => {
92
- // Silently ignore prefetch failures (including abort)
93
- })
308
+ .catch(() => null)
94
309
  .finally(() => {
95
- clearPrefetchInflight(key);
310
+ clearPrefetchInflight(inflightKeys[0]!);
311
+ // Clear the stall timer here ONLY for paths that published no streaming
312
+ // entry (null return / fetch error / abort): the operation is fully done.
313
+ // When an entry WAS published, the timer stays armed to bound the body
314
+ // stream and is cleared on streamComplete (above) or on fire (eviction).
315
+ if (publishedKey === undefined) clearTimeout(timeoutId);
96
316
  });
317
+
318
+ setInflightPromiseWithAliases(inflightKeys, promise);
319
+ return promise;
320
+ }
321
+
322
+ /**
323
+ * Dedup check for prefetch entry presence.
324
+ *
325
+ * Forced `:source` must NOT dedupe against a pre-existing wildcard entry —
326
+ * otherwise the source slot would stay unpopulated and navigation from
327
+ * this source would fall through to the (potentially wrong) wildcard
328
+ * response, defeating the opt-out.
329
+ */
330
+ function hasPrefetchHit(
331
+ forceSourceScope: boolean,
332
+ wildcardKey: string,
333
+ sourceKey: string,
334
+ ): boolean {
335
+ return forceSourceScope
336
+ ? hasPrefetch(sourceKey)
337
+ : hasPrefetch(wildcardKey) || hasPrefetch(sourceKey);
97
338
  }
98
339
 
99
340
  /**
100
- * Prefetch (direct): fetch with low priority and store in browser HTTP cache.
341
+ * Prefetch (direct): fetch with low priority and store in in-memory cache.
101
342
  * Used by hover strategy -- fires immediately without queueing.
343
+ *
344
+ * By default the wildcard key (Rango-state-keyed) is used for inflight
345
+ * dedup and for responses that are not source-sensitive; source-scoped
346
+ * storage is automatic when the server emits `X-RSC-Prefetch-Scope: source`.
347
+ *
348
+ * Pass `prefetchKey=":source"` to force source-scoped inflight + storage
349
+ * (e.g. when the target uses a custom `revalidate()` that reads
350
+ * `currentUrl` and the wildcard slot would serve the wrong diff).
102
351
  */
103
352
  export function prefetchDirect(
104
353
  url: string,
105
354
  segmentIds: string[],
106
355
  version?: string,
356
+ routerId?: string,
357
+ prefetchKey?: ":source",
107
358
  ): void {
108
359
  if (!shouldPrefetch()) return;
109
360
 
110
- const targetUrl = buildPrefetchUrl(url, segmentIds, version);
361
+ const targetUrl = buildPrefetchUrl(url, segmentIds, version, routerId);
111
362
  if (!targetUrl) return;
112
- const key = buildPrefetchKey(targetUrl);
113
- if (hasPrefetch(key)) return;
114
- executePrefetchFetch(key, targetUrl.toString());
363
+ const forceSourceScope = prefetchKey === ":source";
364
+ // Skip same-page prefetch — a same-page diff is trivial and would corrupt
365
+ // the wildcard cache entry used for cross-page navigation.
366
+ // When `:source` is forced the entry is source-scoped (single-aliased to
367
+ // itself), so it cannot poison any shared slot — allow it.
368
+ if (!forceSourceScope && isSamePage(url)) {
369
+ return;
370
+ }
371
+ const sourceHref = window.location.href;
372
+ const rangoState = getRangoState();
373
+ const wildcardKey = buildPrefetchKey(rangoState, targetUrl);
374
+ const sourceKey = buildSourceKey(rangoState, sourceHref, targetUrl);
375
+ if (hasPrefetchHit(forceSourceScope, wildcardKey, sourceKey)) {
376
+ if (IS_BROWSER_DEBUG) {
377
+ debugLog("[prefetch] direct dedup (key already exists)", {
378
+ url,
379
+ wildcardKey,
380
+ sourceKey,
381
+ forceSourceScope,
382
+ });
383
+ }
384
+ return;
385
+ }
386
+ if (IS_BROWSER_DEBUG) {
387
+ debugLog("[prefetch] direct fetch", {
388
+ url,
389
+ wildcardKey,
390
+ sourceKey,
391
+ source: sourceHref,
392
+ forceSourceScope,
393
+ });
394
+ }
395
+ executePrefetchFetch(
396
+ wildcardKey,
397
+ sourceKey,
398
+ targetUrl.toString(),
399
+ forceSourceScope,
400
+ rangoState,
401
+ routerId,
402
+ );
115
403
  }
116
404
 
117
405
  /**
118
406
  * Prefetch (queued): goes through the concurrency-limited queue.
119
407
  * Used by viewport/render strategies to avoid flooding the server.
120
- * Returns the cache key for use in cleanup.
408
+ * Returns the inflight key (wildcard by default, source-scoped when
409
+ * `prefetchKey=":source"` is passed).
121
410
  */
122
411
  export function prefetchQueued(
123
412
  url: string,
124
413
  segmentIds: string[],
125
414
  version?: string,
415
+ routerId?: string,
416
+ prefetchKey?: ":source",
126
417
  ): string {
127
418
  if (!shouldPrefetch()) return "";
128
- const targetUrl = buildPrefetchUrl(url, segmentIds, version);
419
+ const targetUrl = buildPrefetchUrl(url, segmentIds, version, routerId);
129
420
  if (!targetUrl) return "";
130
- const key = buildPrefetchKey(targetUrl);
131
- if (hasPrefetch(key)) return key;
421
+ const forceSourceScope = prefetchKey === ":source";
422
+ if (!forceSourceScope && isSamePage(url)) {
423
+ return "";
424
+ }
425
+ const sourceHref = window.location.href;
426
+ const rangoState = getRangoState();
427
+ const wildcardKey = buildPrefetchKey(rangoState, targetUrl);
428
+ const sourceKey = buildSourceKey(rangoState, sourceHref, targetUrl);
429
+ const queueKey = forceSourceScope ? sourceKey : wildcardKey;
430
+ if (hasPrefetchHit(forceSourceScope, wildcardKey, sourceKey)) {
431
+ if (IS_BROWSER_DEBUG) {
432
+ debugLog("[prefetch] queued dedup (key already exists)", {
433
+ url,
434
+ wildcardKey,
435
+ sourceKey,
436
+ forceSourceScope,
437
+ });
438
+ }
439
+ return queueKey;
440
+ }
132
441
  const fetchUrlStr = targetUrl.toString();
133
- enqueuePrefetch(key, (signal) =>
134
- executePrefetchFetch(key, fetchUrlStr, signal),
135
- );
136
- return key;
442
+ enqueuePrefetch(queueKey, (signal) => {
443
+ // Re-check at execution time: a hover-triggered prefetchDirect may
444
+ // have started or completed this key while the item sat in the queue.
445
+ if (hasPrefetchHit(forceSourceScope, wildcardKey, sourceKey)) {
446
+ return Promise.resolve();
447
+ }
448
+ if (!forceSourceScope && isSamePage(url)) {
449
+ return Promise.resolve();
450
+ }
451
+ return executePrefetchFetch(
452
+ wildcardKey,
453
+ sourceKey,
454
+ fetchUrlStr,
455
+ forceSourceScope,
456
+ rangoState,
457
+ routerId,
458
+ signal,
459
+ ).then(() => {});
460
+ });
461
+ return queueKey;
137
462
  }
@@ -5,6 +5,8 @@
5
5
  * Honors browser reduced-data preferences when available.
6
6
  */
7
7
 
8
+ import { isPrefetchCacheDisabled } from "./cache.js";
9
+
8
10
  type NavigatorWithConnection = Navigator & {
9
11
  connection?: {
10
12
  saveData?: boolean;
@@ -18,6 +20,10 @@ type NavigatorWithConnection = Navigator & {
18
20
  export function shouldPrefetch(): boolean {
19
21
  if (typeof window === "undefined") return false;
20
22
 
23
+ // When prefetchCacheTTL is false/0, prefetching is fully disabled —
24
+ // no point issuing requests whose responses will be discarded.
25
+ if (isPrefetchCacheDisabled()) return false;
26
+
21
27
  const nav =
22
28
  typeof navigator !== "undefined"
23
29
  ? (navigator as NavigatorWithConnection)