@rangojs/router 0.0.0-experimental.a62282ba → 0.0.0-experimental.a6f6907d

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 (940) hide show
  1. package/README.md +76 -18
  2. package/dist/bin/rango.js +138 -50
  3. package/dist/vite/index.js +839 -429
  4. package/package.json +2 -2
  5. package/skills/cache-guide/SKILL.md +32 -0
  6. package/skills/caching/SKILL.md +45 -4
  7. package/skills/links/SKILL.md +3 -1
  8. package/skills/loader/SKILL.md +53 -43
  9. package/skills/middleware/SKILL.md +2 -0
  10. package/skills/parallel/SKILL.md +126 -0
  11. package/skills/prerender/SKILL.md +110 -68
  12. package/skills/route/SKILL.md +31 -0
  13. package/skills/router-setup/SKILL.md +87 -2
  14. package/skills/typesafety/SKILL.md +10 -0
  15. package/src/__internal.ts +1 -1
  16. package/src/browser/app-version.ts +14 -0
  17. package/src/browser/event-controller.ts +5 -0
  18. package/src/browser/navigation-bridge.ts +24 -11
  19. package/src/browser/navigation-client.ts +142 -57
  20. package/src/browser/navigation-store.ts +43 -8
  21. package/src/browser/navigation-transaction.ts +11 -9
  22. package/src/browser/partial-update.ts +81 -13
  23. package/src/browser/prefetch/cache.ts +73 -11
  24. package/src/browser/prefetch/fetch.ts +98 -27
  25. package/src/browser/prefetch/queue.ts +92 -20
  26. package/src/browser/prefetch/resource-ready.ts +77 -0
  27. package/src/browser/react/Link.tsx +76 -9
  28. package/src/browser/react/NavigationProvider.tsx +40 -4
  29. package/src/browser/react/context.ts +7 -2
  30. package/src/browser/react/use-handle.ts +9 -58
  31. package/src/browser/react/use-router.ts +21 -8
  32. package/src/browser/rsc-router.tsx +134 -59
  33. package/src/browser/scroll-restoration.ts +21 -18
  34. package/src/browser/segment-reconciler.ts +32 -1
  35. package/src/browser/server-action-bridge.ts +8 -6
  36. package/src/browser/types.ts +36 -5
  37. package/src/build/generate-manifest.ts +6 -6
  38. package/src/build/generate-route-types.ts +3 -0
  39. package/src/build/route-types/include-resolution.ts +8 -1
  40. package/src/build/route-types/router-processing.ts +223 -74
  41. package/src/build/route-types/scan-filter.ts +8 -1
  42. package/src/cache/cache-runtime.ts +15 -11
  43. package/src/cache/cache-scope.ts +48 -7
  44. package/src/cache/cf/cf-cache-store.ts +453 -11
  45. package/src/cache/cf/index.ts +5 -1
  46. package/src/cache/document-cache.ts +17 -7
  47. package/src/cache/index.ts +1 -0
  48. package/src/cache/taint.ts +55 -0
  49. package/src/client.tsx +2 -56
  50. package/src/context-var.ts +72 -2
  51. package/src/debug.ts +2 -2
  52. package/src/handle.ts +40 -0
  53. package/src/index.rsc.ts +3 -1
  54. package/src/index.ts +12 -0
  55. package/src/prerender/store.ts +5 -4
  56. package/src/prerender.ts +138 -77
  57. package/src/reverse.ts +22 -1
  58. package/src/route-definition/dsl-helpers.ts +73 -25
  59. package/src/route-definition/helpers-types.ts +10 -6
  60. package/src/route-definition/index.ts +3 -0
  61. package/src/route-definition/redirect.ts +11 -3
  62. package/src/route-definition/resolve-handler-use.ts +149 -0
  63. package/src/route-types.ts +11 -0
  64. package/src/router/content-negotiation.ts +100 -1
  65. package/src/router/handler-context.ts +79 -23
  66. package/src/router/intercept-resolution.ts +9 -4
  67. package/src/router/lazy-includes.ts +2 -1
  68. package/src/router/loader-resolution.ts +156 -21
  69. package/src/router/logging.ts +1 -1
  70. package/src/router/manifest.ts +6 -2
  71. package/src/router/match-api.ts +124 -189
  72. package/src/router/match-middleware/background-revalidation.ts +30 -2
  73. package/src/router/match-middleware/cache-lookup.ts +94 -17
  74. package/src/router/match-middleware/cache-store.ts +53 -10
  75. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  76. package/src/router/match-middleware/segment-resolution.ts +60 -5
  77. package/src/router/match-result.ts +104 -10
  78. package/src/router/metrics.ts +6 -1
  79. package/src/router/middleware-types.ts +6 -8
  80. package/src/router/middleware.ts +4 -6
  81. package/src/router/navigation-snapshot.ts +182 -0
  82. package/src/router/prerender-match.ts +110 -10
  83. package/src/router/preview-match.ts +30 -102
  84. package/src/router/request-classification.ts +310 -0
  85. package/src/router/route-snapshot.ts +245 -0
  86. package/src/router/router-context.ts +1 -0
  87. package/src/router/router-interfaces.ts +36 -4
  88. package/src/router/router-options.ts +37 -11
  89. package/src/router/segment-resolution/fresh.ts +198 -20
  90. package/src/router/segment-resolution/helpers.ts +29 -24
  91. package/src/router/segment-resolution/loader-cache.ts +1 -0
  92. package/src/router/segment-resolution/revalidation.ts +433 -296
  93. package/src/router/types.ts +1 -0
  94. package/src/router.ts +55 -6
  95. package/src/rsc/handler.ts +472 -372
  96. package/src/rsc/loader-fetch.ts +23 -3
  97. package/src/rsc/manifest-init.ts +5 -1
  98. package/src/rsc/progressive-enhancement.ts +14 -2
  99. package/src/rsc/rsc-rendering.ts +10 -1
  100. package/src/rsc/server-action.ts +8 -0
  101. package/src/rsc/ssr-setup.ts +2 -2
  102. package/src/rsc/types.ts +9 -1
  103. package/src/segment-system.tsx +140 -4
  104. package/src/server/context.ts +140 -14
  105. package/src/server/handle-store.ts +19 -0
  106. package/src/server/loader-registry.ts +9 -8
  107. package/src/server/request-context.ts +185 -19
  108. package/src/ssr/index.tsx +4 -0
  109. package/src/static-handler.ts +18 -6
  110. package/src/types/cache-types.ts +4 -4
  111. package/src/types/handler-context.ts +137 -33
  112. package/src/types/loader-types.ts +36 -9
  113. package/src/types/route-entry.ts +1 -1
  114. package/src/types/segments.ts +3 -0
  115. package/src/urls/path-helper-types.ts +9 -2
  116. package/src/urls/path-helper.ts +48 -13
  117. package/src/urls/pattern-types.ts +12 -0
  118. package/src/urls/response-types.ts +16 -6
  119. package/src/use-loader.tsx +77 -5
  120. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  121. package/src/vite/discovery/discover-routers.ts +5 -1
  122. package/src/vite/discovery/prerender-collection.ts +128 -74
  123. package/src/vite/discovery/state.ts +13 -6
  124. package/src/vite/index.ts +4 -0
  125. package/src/vite/plugin-types.ts +51 -79
  126. package/src/vite/plugins/expose-action-id.ts +1 -3
  127. package/src/vite/plugins/expose-id-utils.ts +12 -0
  128. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  129. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  130. package/src/vite/plugins/performance-tracks.ts +88 -0
  131. package/src/vite/plugins/refresh-cmd.ts +88 -26
  132. package/src/vite/plugins/version-plugin.ts +13 -1
  133. package/src/vite/rango.ts +163 -211
  134. package/src/vite/router-discovery.ts +178 -45
  135. package/src/vite/utils/banner.ts +3 -3
  136. package/src/vite/utils/prerender-utils.ts +18 -0
  137. package/src/vite/utils/shared-utils.ts +3 -2
  138. package/dist/__internal.d.ts +0 -83
  139. package/dist/__internal.d.ts.map +0 -1
  140. package/dist/__internal.js +0 -19
  141. package/dist/__internal.js.map +0 -1
  142. package/dist/__mocks__/version.d.ts +0 -7
  143. package/dist/__mocks__/version.d.ts.map +0 -1
  144. package/dist/__mocks__/version.js +0 -7
  145. package/dist/__mocks__/version.js.map +0 -1
  146. package/dist/__tests__/client-href.test.d.ts +0 -2
  147. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  148. package/dist/__tests__/client-href.test.js +0 -74
  149. package/dist/__tests__/client-href.test.js.map +0 -1
  150. package/dist/__tests__/component-utils.test.d.ts +0 -2
  151. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  152. package/dist/__tests__/component-utils.test.js +0 -51
  153. package/dist/__tests__/component-utils.test.js.map +0 -1
  154. package/dist/__tests__/event-controller.test.d.ts +0 -2
  155. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  156. package/dist/__tests__/event-controller.test.js +0 -538
  157. package/dist/__tests__/event-controller.test.js.map +0 -1
  158. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  159. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  160. package/dist/__tests__/helpers/route-tree.js +0 -374
  161. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  162. package/dist/__tests__/match-result.test.d.ts +0 -2
  163. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  164. package/dist/__tests__/match-result.test.js +0 -154
  165. package/dist/__tests__/match-result.test.js.map +0 -1
  166. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  167. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  168. package/dist/__tests__/navigation-store.test.js +0 -440
  169. package/dist/__tests__/navigation-store.test.js.map +0 -1
  170. package/dist/__tests__/partial-update.test.d.ts +0 -2
  171. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  172. package/dist/__tests__/partial-update.test.js +0 -1009
  173. package/dist/__tests__/partial-update.test.js.map +0 -1
  174. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  175. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  176. package/dist/__tests__/reverse-types.test.js +0 -656
  177. package/dist/__tests__/reverse-types.test.js.map +0 -1
  178. package/dist/__tests__/route-definition.test.d.ts +0 -2
  179. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  180. package/dist/__tests__/route-definition.test.js +0 -55
  181. package/dist/__tests__/route-definition.test.js.map +0 -1
  182. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  183. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  184. package/dist/__tests__/router-helpers.test.js +0 -377
  185. package/dist/__tests__/router-helpers.test.js.map +0 -1
  186. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  187. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  188. package/dist/__tests__/router-integration-2.test.js +0 -426
  189. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  190. package/dist/__tests__/router-integration.test.d.ts +0 -2
  191. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  192. package/dist/__tests__/router-integration.test.js +0 -1051
  193. package/dist/__tests__/router-integration.test.js.map +0 -1
  194. package/dist/__tests__/search-params.test.d.ts +0 -5
  195. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  196. package/dist/__tests__/search-params.test.js +0 -306
  197. package/dist/__tests__/search-params.test.js.map +0 -1
  198. package/dist/__tests__/segment-system.test.d.ts +0 -2
  199. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  200. package/dist/__tests__/segment-system.test.js +0 -627
  201. package/dist/__tests__/segment-system.test.js.map +0 -1
  202. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  203. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  204. package/dist/__tests__/static-handler-types.test.js +0 -63
  205. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  206. package/dist/__tests__/urls.test.d.ts +0 -2
  207. package/dist/__tests__/urls.test.d.ts.map +0 -1
  208. package/dist/__tests__/urls.test.js +0 -421
  209. package/dist/__tests__/urls.test.js.map +0 -1
  210. package/dist/__tests__/use-mount.test.d.ts +0 -2
  211. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  212. package/dist/__tests__/use-mount.test.js +0 -35
  213. package/dist/__tests__/use-mount.test.js.map +0 -1
  214. package/dist/bin/rango.d.ts +0 -2
  215. package/dist/bin/rango.d.ts.map +0 -1
  216. package/dist/bin/rango.js.map +0 -1
  217. package/dist/browser/event-controller.d.ts +0 -191
  218. package/dist/browser/event-controller.d.ts.map +0 -1
  219. package/dist/browser/event-controller.js +0 -559
  220. package/dist/browser/event-controller.js.map +0 -1
  221. package/dist/browser/index.d.ts +0 -2
  222. package/dist/browser/index.d.ts.map +0 -1
  223. package/dist/browser/index.js +0 -14
  224. package/dist/browser/index.js.map +0 -1
  225. package/dist/browser/link-interceptor.d.ts +0 -38
  226. package/dist/browser/link-interceptor.d.ts.map +0 -1
  227. package/dist/browser/link-interceptor.js +0 -99
  228. package/dist/browser/link-interceptor.js.map +0 -1
  229. package/dist/browser/logging.d.ts +0 -10
  230. package/dist/browser/logging.d.ts.map +0 -1
  231. package/dist/browser/logging.js +0 -29
  232. package/dist/browser/logging.js.map +0 -1
  233. package/dist/browser/lru-cache.d.ts +0 -17
  234. package/dist/browser/lru-cache.d.ts.map +0 -1
  235. package/dist/browser/lru-cache.js +0 -50
  236. package/dist/browser/lru-cache.js.map +0 -1
  237. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  238. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  239. package/dist/browser/merge-segment-loaders.js +0 -102
  240. package/dist/browser/merge-segment-loaders.js.map +0 -1
  241. package/dist/browser/navigation-bridge.d.ts +0 -102
  242. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  243. package/dist/browser/navigation-bridge.js +0 -708
  244. package/dist/browser/navigation-bridge.js.map +0 -1
  245. package/dist/browser/navigation-client.d.ts +0 -25
  246. package/dist/browser/navigation-client.d.ts.map +0 -1
  247. package/dist/browser/navigation-client.js +0 -157
  248. package/dist/browser/navigation-client.js.map +0 -1
  249. package/dist/browser/navigation-store.d.ts +0 -101
  250. package/dist/browser/navigation-store.d.ts.map +0 -1
  251. package/dist/browser/navigation-store.js +0 -625
  252. package/dist/browser/navigation-store.js.map +0 -1
  253. package/dist/browser/partial-update.d.ts +0 -75
  254. package/dist/browser/partial-update.d.ts.map +0 -1
  255. package/dist/browser/partial-update.js +0 -426
  256. package/dist/browser/partial-update.js.map +0 -1
  257. package/dist/browser/react/Link.d.ts +0 -86
  258. package/dist/browser/react/Link.d.ts.map +0 -1
  259. package/dist/browser/react/Link.js +0 -128
  260. package/dist/browser/react/Link.js.map +0 -1
  261. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  262. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  263. package/dist/browser/react/NavigationProvider.js +0 -216
  264. package/dist/browser/react/NavigationProvider.js.map +0 -1
  265. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  266. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  267. package/dist/browser/react/ScrollRestoration.js +0 -57
  268. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  269. package/dist/browser/react/context.d.ts +0 -46
  270. package/dist/browser/react/context.d.ts.map +0 -1
  271. package/dist/browser/react/context.js +0 -10
  272. package/dist/browser/react/context.js.map +0 -1
  273. package/dist/browser/react/index.d.ts +0 -11
  274. package/dist/browser/react/index.d.ts.map +0 -1
  275. package/dist/browser/react/index.js +0 -22
  276. package/dist/browser/react/index.js.map +0 -1
  277. package/dist/browser/react/location-state-shared.d.ts +0 -63
  278. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  279. package/dist/browser/react/location-state-shared.js +0 -81
  280. package/dist/browser/react/location-state-shared.js.map +0 -1
  281. package/dist/browser/react/location-state.d.ts +0 -23
  282. package/dist/browser/react/location-state.d.ts.map +0 -1
  283. package/dist/browser/react/location-state.js +0 -29
  284. package/dist/browser/react/location-state.js.map +0 -1
  285. package/dist/browser/react/mount-context.d.ts +0 -24
  286. package/dist/browser/react/mount-context.d.ts.map +0 -1
  287. package/dist/browser/react/mount-context.js +0 -24
  288. package/dist/browser/react/mount-context.js.map +0 -1
  289. package/dist/browser/react/use-action.d.ts +0 -64
  290. package/dist/browser/react/use-action.d.ts.map +0 -1
  291. package/dist/browser/react/use-action.js +0 -134
  292. package/dist/browser/react/use-action.js.map +0 -1
  293. package/dist/browser/react/use-client-cache.d.ts +0 -41
  294. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  295. package/dist/browser/react/use-client-cache.js +0 -39
  296. package/dist/browser/react/use-client-cache.js.map +0 -1
  297. package/dist/browser/react/use-handle.d.ts +0 -31
  298. package/dist/browser/react/use-handle.d.ts.map +0 -1
  299. package/dist/browser/react/use-handle.js +0 -144
  300. package/dist/browser/react/use-handle.js.map +0 -1
  301. package/dist/browser/react/use-href.d.ts +0 -33
  302. package/dist/browser/react/use-href.d.ts.map +0 -1
  303. package/dist/browser/react/use-href.js +0 -39
  304. package/dist/browser/react/use-href.js.map +0 -1
  305. package/dist/browser/react/use-link-status.d.ts +0 -37
  306. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  307. package/dist/browser/react/use-link-status.js +0 -99
  308. package/dist/browser/react/use-link-status.js.map +0 -1
  309. package/dist/browser/react/use-mount.d.ts +0 -25
  310. package/dist/browser/react/use-mount.d.ts.map +0 -1
  311. package/dist/browser/react/use-mount.js +0 -30
  312. package/dist/browser/react/use-mount.js.map +0 -1
  313. package/dist/browser/react/use-navigation.d.ts +0 -27
  314. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  315. package/dist/browser/react/use-navigation.js +0 -87
  316. package/dist/browser/react/use-navigation.js.map +0 -1
  317. package/dist/browser/react/use-segments.d.ts +0 -38
  318. package/dist/browser/react/use-segments.d.ts.map +0 -1
  319. package/dist/browser/react/use-segments.js +0 -130
  320. package/dist/browser/react/use-segments.js.map +0 -1
  321. package/dist/browser/request-controller.d.ts +0 -26
  322. package/dist/browser/request-controller.d.ts.map +0 -1
  323. package/dist/browser/request-controller.js +0 -147
  324. package/dist/browser/request-controller.js.map +0 -1
  325. package/dist/browser/rsc-router.d.ts +0 -129
  326. package/dist/browser/rsc-router.d.ts.map +0 -1
  327. package/dist/browser/rsc-router.js +0 -195
  328. package/dist/browser/rsc-router.js.map +0 -1
  329. package/dist/browser/scroll-restoration.d.ts +0 -93
  330. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  331. package/dist/browser/scroll-restoration.js +0 -321
  332. package/dist/browser/scroll-restoration.js.map +0 -1
  333. package/dist/browser/segment-structure-assert.d.ts +0 -17
  334. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  335. package/dist/browser/segment-structure-assert.js +0 -59
  336. package/dist/browser/segment-structure-assert.js.map +0 -1
  337. package/dist/browser/server-action-bridge.d.ts +0 -26
  338. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  339. package/dist/browser/server-action-bridge.js +0 -668
  340. package/dist/browser/server-action-bridge.js.map +0 -1
  341. package/dist/browser/shallow.d.ts +0 -12
  342. package/dist/browser/shallow.d.ts.map +0 -1
  343. package/dist/browser/shallow.js +0 -34
  344. package/dist/browser/shallow.js.map +0 -1
  345. package/dist/browser/types.d.ts +0 -369
  346. package/dist/browser/types.d.ts.map +0 -1
  347. package/dist/browser/types.js +0 -2
  348. package/dist/browser/types.js.map +0 -1
  349. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  350. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  351. package/dist/build/__tests__/generate-cli.test.js +0 -237
  352. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  353. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  354. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  355. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  356. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  357. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  358. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  359. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  360. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  361. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  362. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  363. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  364. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  365. package/dist/build/generate-manifest.d.ts +0 -81
  366. package/dist/build/generate-manifest.d.ts.map +0 -1
  367. package/dist/build/generate-manifest.js +0 -276
  368. package/dist/build/generate-manifest.js.map +0 -1
  369. package/dist/build/generate-route-types.d.ts +0 -115
  370. package/dist/build/generate-route-types.d.ts.map +0 -1
  371. package/dist/build/generate-route-types.js +0 -740
  372. package/dist/build/generate-route-types.js.map +0 -1
  373. package/dist/build/index.d.ts +0 -21
  374. package/dist/build/index.d.ts.map +0 -1
  375. package/dist/build/index.js +0 -21
  376. package/dist/build/index.js.map +0 -1
  377. package/dist/build/route-trie.d.ts +0 -71
  378. package/dist/build/route-trie.d.ts.map +0 -1
  379. package/dist/build/route-trie.js +0 -175
  380. package/dist/build/route-trie.js.map +0 -1
  381. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  382. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  383. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  384. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  385. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  386. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  387. package/dist/cache/__tests__/document-cache.test.js +0 -345
  388. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  389. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  390. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  391. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  392. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  393. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  394. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  395. package/dist/cache/__tests__/memory-store.test.js +0 -367
  396. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  397. package/dist/cache/cache-scope.d.ts +0 -102
  398. package/dist/cache/cache-scope.d.ts.map +0 -1
  399. package/dist/cache/cache-scope.js +0 -440
  400. package/dist/cache/cache-scope.js.map +0 -1
  401. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  402. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  403. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  404. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  405. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  406. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  407. package/dist/cache/cf/cf-cache-store.js +0 -242
  408. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  409. package/dist/cache/cf/index.d.ts +0 -14
  410. package/dist/cache/cf/index.d.ts.map +0 -1
  411. package/dist/cache/cf/index.js +0 -17
  412. package/dist/cache/cf/index.js.map +0 -1
  413. package/dist/cache/document-cache.d.ts +0 -64
  414. package/dist/cache/document-cache.d.ts.map +0 -1
  415. package/dist/cache/document-cache.js +0 -228
  416. package/dist/cache/document-cache.js.map +0 -1
  417. package/dist/cache/index.d.ts +0 -19
  418. package/dist/cache/index.d.ts.map +0 -1
  419. package/dist/cache/index.js +0 -21
  420. package/dist/cache/index.js.map +0 -1
  421. package/dist/cache/memory-segment-store.d.ts +0 -110
  422. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  423. package/dist/cache/memory-segment-store.js +0 -117
  424. package/dist/cache/memory-segment-store.js.map +0 -1
  425. package/dist/cache/memory-store.d.ts +0 -41
  426. package/dist/cache/memory-store.d.ts.map +0 -1
  427. package/dist/cache/memory-store.js +0 -191
  428. package/dist/cache/memory-store.js.map +0 -1
  429. package/dist/cache/types.d.ts +0 -317
  430. package/dist/cache/types.d.ts.map +0 -1
  431. package/dist/cache/types.js +0 -12
  432. package/dist/cache/types.js.map +0 -1
  433. package/dist/client.d.ts +0 -248
  434. package/dist/client.d.ts.map +0 -1
  435. package/dist/client.js +0 -367
  436. package/dist/client.js.map +0 -1
  437. package/dist/client.rsc.d.ts +0 -26
  438. package/dist/client.rsc.d.ts.map +0 -1
  439. package/dist/client.rsc.js +0 -46
  440. package/dist/client.rsc.js.map +0 -1
  441. package/dist/component-utils.d.ts +0 -36
  442. package/dist/component-utils.d.ts.map +0 -1
  443. package/dist/component-utils.js +0 -61
  444. package/dist/component-utils.js.map +0 -1
  445. package/dist/components/DefaultDocument.d.ts +0 -13
  446. package/dist/components/DefaultDocument.d.ts.map +0 -1
  447. package/dist/components/DefaultDocument.js +0 -15
  448. package/dist/components/DefaultDocument.js.map +0 -1
  449. package/dist/debug.d.ts +0 -58
  450. package/dist/debug.d.ts.map +0 -1
  451. package/dist/debug.js +0 -157
  452. package/dist/debug.js.map +0 -1
  453. package/dist/default-error-boundary.d.ts +0 -11
  454. package/dist/default-error-boundary.d.ts.map +0 -1
  455. package/dist/default-error-boundary.js +0 -45
  456. package/dist/default-error-boundary.js.map +0 -1
  457. package/dist/deps/browser.d.ts +0 -2
  458. package/dist/deps/browser.d.ts.map +0 -1
  459. package/dist/deps/browser.js +0 -3
  460. package/dist/deps/browser.js.map +0 -1
  461. package/dist/deps/html-stream-client.d.ts +0 -2
  462. package/dist/deps/html-stream-client.d.ts.map +0 -1
  463. package/dist/deps/html-stream-client.js +0 -3
  464. package/dist/deps/html-stream-client.js.map +0 -1
  465. package/dist/deps/html-stream-server.d.ts +0 -2
  466. package/dist/deps/html-stream-server.d.ts.map +0 -1
  467. package/dist/deps/html-stream-server.js +0 -3
  468. package/dist/deps/html-stream-server.js.map +0 -1
  469. package/dist/deps/rsc.d.ts +0 -2
  470. package/dist/deps/rsc.d.ts.map +0 -1
  471. package/dist/deps/rsc.js +0 -4
  472. package/dist/deps/rsc.js.map +0 -1
  473. package/dist/deps/ssr.d.ts +0 -2
  474. package/dist/deps/ssr.d.ts.map +0 -1
  475. package/dist/deps/ssr.js +0 -3
  476. package/dist/deps/ssr.js.map +0 -1
  477. package/dist/errors.d.ts +0 -174
  478. package/dist/errors.d.ts.map +0 -1
  479. package/dist/errors.js +0 -241
  480. package/dist/errors.js.map +0 -1
  481. package/dist/handle.d.ts +0 -78
  482. package/dist/handle.d.ts.map +0 -1
  483. package/dist/handle.js +0 -82
  484. package/dist/handle.js.map +0 -1
  485. package/dist/handles/MetaTags.d.ts +0 -14
  486. package/dist/handles/MetaTags.d.ts.map +0 -1
  487. package/dist/handles/MetaTags.js +0 -136
  488. package/dist/handles/MetaTags.js.map +0 -1
  489. package/dist/handles/index.d.ts +0 -6
  490. package/dist/handles/index.d.ts.map +0 -1
  491. package/dist/handles/index.js +0 -6
  492. package/dist/handles/index.js.map +0 -1
  493. package/dist/handles/meta.d.ts +0 -39
  494. package/dist/handles/meta.d.ts.map +0 -1
  495. package/dist/handles/meta.js +0 -202
  496. package/dist/handles/meta.js.map +0 -1
  497. package/dist/host/__tests__/errors.test.d.ts +0 -2
  498. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  499. package/dist/host/__tests__/errors.test.js +0 -76
  500. package/dist/host/__tests__/errors.test.js.map +0 -1
  501. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  502. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  503. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  504. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  505. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  506. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  507. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  508. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  509. package/dist/host/__tests__/router.test.d.ts +0 -2
  510. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  511. package/dist/host/__tests__/router.test.js +0 -241
  512. package/dist/host/__tests__/router.test.js.map +0 -1
  513. package/dist/host/__tests__/testing.test.d.ts +0 -2
  514. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  515. package/dist/host/__tests__/testing.test.js +0 -64
  516. package/dist/host/__tests__/testing.test.js.map +0 -1
  517. package/dist/host/__tests__/utils.test.d.ts +0 -2
  518. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  519. package/dist/host/__tests__/utils.test.js +0 -29
  520. package/dist/host/__tests__/utils.test.js.map +0 -1
  521. package/dist/host/cookie-handler.d.ts +0 -34
  522. package/dist/host/cookie-handler.d.ts.map +0 -1
  523. package/dist/host/cookie-handler.js +0 -124
  524. package/dist/host/cookie-handler.js.map +0 -1
  525. package/dist/host/errors.d.ts +0 -56
  526. package/dist/host/errors.d.ts.map +0 -1
  527. package/dist/host/errors.js +0 -79
  528. package/dist/host/errors.js.map +0 -1
  529. package/dist/host/index.d.ts +0 -29
  530. package/dist/host/index.d.ts.map +0 -1
  531. package/dist/host/index.js +0 -32
  532. package/dist/host/index.js.map +0 -1
  533. package/dist/host/pattern-matcher.d.ts +0 -36
  534. package/dist/host/pattern-matcher.d.ts.map +0 -1
  535. package/dist/host/pattern-matcher.js +0 -172
  536. package/dist/host/pattern-matcher.js.map +0 -1
  537. package/dist/host/router.d.ts +0 -26
  538. package/dist/host/router.d.ts.map +0 -1
  539. package/dist/host/router.js +0 -218
  540. package/dist/host/router.js.map +0 -1
  541. package/dist/host/testing.d.ts +0 -36
  542. package/dist/host/testing.d.ts.map +0 -1
  543. package/dist/host/testing.js +0 -55
  544. package/dist/host/testing.js.map +0 -1
  545. package/dist/host/types.d.ts +0 -115
  546. package/dist/host/types.d.ts.map +0 -1
  547. package/dist/host/types.js +0 -7
  548. package/dist/host/types.js.map +0 -1
  549. package/dist/host/utils.d.ts +0 -21
  550. package/dist/host/utils.d.ts.map +0 -1
  551. package/dist/host/utils.js +0 -23
  552. package/dist/host/utils.js.map +0 -1
  553. package/dist/href-client.d.ts +0 -131
  554. package/dist/href-client.d.ts.map +0 -1
  555. package/dist/href-client.js +0 -64
  556. package/dist/href-client.js.map +0 -1
  557. package/dist/href-context.d.ts +0 -29
  558. package/dist/href-context.d.ts.map +0 -1
  559. package/dist/href-context.js +0 -21
  560. package/dist/href-context.js.map +0 -1
  561. package/dist/index.d.ts +0 -73
  562. package/dist/index.d.ts.map +0 -1
  563. package/dist/index.js +0 -91
  564. package/dist/index.js.map +0 -1
  565. package/dist/index.rsc.d.ts +0 -32
  566. package/dist/index.rsc.d.ts.map +0 -1
  567. package/dist/index.rsc.js +0 -40
  568. package/dist/index.rsc.js.map +0 -1
  569. package/dist/internal-debug.d.ts +0 -2
  570. package/dist/internal-debug.d.ts.map +0 -1
  571. package/dist/internal-debug.js +0 -5
  572. package/dist/internal-debug.js.map +0 -1
  573. package/dist/loader.d.ts +0 -14
  574. package/dist/loader.d.ts.map +0 -1
  575. package/dist/loader.js +0 -20
  576. package/dist/loader.js.map +0 -1
  577. package/dist/loader.rsc.d.ts +0 -19
  578. package/dist/loader.rsc.d.ts.map +0 -1
  579. package/dist/loader.rsc.js +0 -99
  580. package/dist/loader.rsc.js.map +0 -1
  581. package/dist/network-error-thrower.d.ts +0 -17
  582. package/dist/network-error-thrower.d.ts.map +0 -1
  583. package/dist/network-error-thrower.js +0 -14
  584. package/dist/network-error-thrower.js.map +0 -1
  585. package/dist/outlet-context.d.ts +0 -13
  586. package/dist/outlet-context.d.ts.map +0 -1
  587. package/dist/outlet-context.js +0 -3
  588. package/dist/outlet-context.js.map +0 -1
  589. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  590. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  591. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  592. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  593. package/dist/prerender/param-hash.d.ts +0 -16
  594. package/dist/prerender/param-hash.d.ts.map +0 -1
  595. package/dist/prerender/param-hash.js +0 -36
  596. package/dist/prerender/param-hash.js.map +0 -1
  597. package/dist/prerender/store.d.ts +0 -38
  598. package/dist/prerender/store.d.ts.map +0 -1
  599. package/dist/prerender/store.js +0 -61
  600. package/dist/prerender/store.js.map +0 -1
  601. package/dist/prerender.d.ts +0 -66
  602. package/dist/prerender.d.ts.map +0 -1
  603. package/dist/prerender.js +0 -57
  604. package/dist/prerender.js.map +0 -1
  605. package/dist/reverse.d.ts +0 -196
  606. package/dist/reverse.d.ts.map +0 -1
  607. package/dist/reverse.js +0 -78
  608. package/dist/reverse.js.map +0 -1
  609. package/dist/root-error-boundary.d.ts +0 -33
  610. package/dist/root-error-boundary.d.ts.map +0 -1
  611. package/dist/root-error-boundary.js +0 -165
  612. package/dist/root-error-boundary.js.map +0 -1
  613. package/dist/route-content-wrapper.d.ts +0 -46
  614. package/dist/route-content-wrapper.d.ts.map +0 -1
  615. package/dist/route-content-wrapper.js +0 -77
  616. package/dist/route-content-wrapper.js.map +0 -1
  617. package/dist/route-definition.d.ts +0 -421
  618. package/dist/route-definition.d.ts.map +0 -1
  619. package/dist/route-definition.js +0 -868
  620. package/dist/route-definition.js.map +0 -1
  621. package/dist/route-map-builder.d.ts +0 -155
  622. package/dist/route-map-builder.d.ts.map +0 -1
  623. package/dist/route-map-builder.js +0 -237
  624. package/dist/route-map-builder.js.map +0 -1
  625. package/dist/route-types.d.ts +0 -165
  626. package/dist/route-types.d.ts.map +0 -1
  627. package/dist/route-types.js +0 -7
  628. package/dist/route-types.js.map +0 -1
  629. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  630. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  631. package/dist/router/__tests__/handler-context.test.js +0 -65
  632. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  633. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  634. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  635. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  636. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  637. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  638. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  639. package/dist/router/__tests__/match-context.test.js +0 -92
  640. package/dist/router/__tests__/match-context.test.js.map +0 -1
  641. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  642. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  643. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  644. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  645. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  646. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  647. package/dist/router/__tests__/match-result.test.js +0 -457
  648. package/dist/router/__tests__/match-result.test.js.map +0 -1
  649. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  650. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  651. package/dist/router/__tests__/on-error.test.js +0 -678
  652. package/dist/router/__tests__/on-error.test.js.map +0 -1
  653. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  654. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  655. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  656. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  657. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  658. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  659. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  660. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  661. package/dist/router/error-handling.d.ts +0 -77
  662. package/dist/router/error-handling.d.ts.map +0 -1
  663. package/dist/router/error-handling.js +0 -202
  664. package/dist/router/error-handling.js.map +0 -1
  665. package/dist/router/handler-context.d.ts +0 -20
  666. package/dist/router/handler-context.d.ts.map +0 -1
  667. package/dist/router/handler-context.js +0 -198
  668. package/dist/router/handler-context.js.map +0 -1
  669. package/dist/router/intercept-resolution.d.ts +0 -66
  670. package/dist/router/intercept-resolution.d.ts.map +0 -1
  671. package/dist/router/intercept-resolution.js +0 -246
  672. package/dist/router/intercept-resolution.js.map +0 -1
  673. package/dist/router/loader-resolution.d.ts +0 -64
  674. package/dist/router/loader-resolution.d.ts.map +0 -1
  675. package/dist/router/loader-resolution.js +0 -284
  676. package/dist/router/loader-resolution.js.map +0 -1
  677. package/dist/router/logging.d.ts +0 -15
  678. package/dist/router/logging.d.ts.map +0 -1
  679. package/dist/router/logging.js +0 -99
  680. package/dist/router/logging.js.map +0 -1
  681. package/dist/router/manifest.d.ts +0 -22
  682. package/dist/router/manifest.d.ts.map +0 -1
  683. package/dist/router/manifest.js +0 -181
  684. package/dist/router/manifest.js.map +0 -1
  685. package/dist/router/match-api.d.ts +0 -35
  686. package/dist/router/match-api.d.ts.map +0 -1
  687. package/dist/router/match-api.js +0 -406
  688. package/dist/router/match-api.js.map +0 -1
  689. package/dist/router/match-context.d.ts +0 -206
  690. package/dist/router/match-context.d.ts.map +0 -1
  691. package/dist/router/match-context.js +0 -17
  692. package/dist/router/match-context.js.map +0 -1
  693. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  694. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  695. package/dist/router/match-middleware/background-revalidation.js +0 -75
  696. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  697. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  698. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  699. package/dist/router/match-middleware/cache-lookup.js +0 -257
  700. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  701. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  702. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  703. package/dist/router/match-middleware/cache-store.js +0 -108
  704. package/dist/router/match-middleware/cache-store.js.map +0 -1
  705. package/dist/router/match-middleware/index.d.ts +0 -81
  706. package/dist/router/match-middleware/index.d.ts.map +0 -1
  707. package/dist/router/match-middleware/index.js +0 -80
  708. package/dist/router/match-middleware/index.js.map +0 -1
  709. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  710. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  711. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  712. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  713. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  714. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  715. package/dist/router/match-middleware/segment-resolution.js +0 -53
  716. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  717. package/dist/router/match-pipelines.d.ts +0 -147
  718. package/dist/router/match-pipelines.d.ts.map +0 -1
  719. package/dist/router/match-pipelines.js +0 -82
  720. package/dist/router/match-pipelines.js.map +0 -1
  721. package/dist/router/match-result.d.ts +0 -126
  722. package/dist/router/match-result.d.ts.map +0 -1
  723. package/dist/router/match-result.js +0 -93
  724. package/dist/router/match-result.js.map +0 -1
  725. package/dist/router/metrics.d.ts +0 -20
  726. package/dist/router/metrics.d.ts.map +0 -1
  727. package/dist/router/metrics.js +0 -47
  728. package/dist/router/metrics.js.map +0 -1
  729. package/dist/router/middleware.d.ts +0 -249
  730. package/dist/router/middleware.d.ts.map +0 -1
  731. package/dist/router/middleware.js +0 -434
  732. package/dist/router/middleware.js.map +0 -1
  733. package/dist/router/middleware.test.d.ts +0 -2
  734. package/dist/router/middleware.test.d.ts.map +0 -1
  735. package/dist/router/middleware.test.js +0 -816
  736. package/dist/router/middleware.test.js.map +0 -1
  737. package/dist/router/pattern-matching.d.ts +0 -149
  738. package/dist/router/pattern-matching.d.ts.map +0 -1
  739. package/dist/router/pattern-matching.js +0 -349
  740. package/dist/router/pattern-matching.js.map +0 -1
  741. package/dist/router/revalidation.d.ts +0 -44
  742. package/dist/router/revalidation.d.ts.map +0 -1
  743. package/dist/router/revalidation.js +0 -147
  744. package/dist/router/revalidation.js.map +0 -1
  745. package/dist/router/router-context.d.ts +0 -135
  746. package/dist/router/router-context.d.ts.map +0 -1
  747. package/dist/router/router-context.js +0 -36
  748. package/dist/router/router-context.js.map +0 -1
  749. package/dist/router/segment-resolution.d.ts +0 -127
  750. package/dist/router/segment-resolution.d.ts.map +0 -1
  751. package/dist/router/segment-resolution.js +0 -919
  752. package/dist/router/segment-resolution.js.map +0 -1
  753. package/dist/router/trie-matching.d.ts +0 -40
  754. package/dist/router/trie-matching.d.ts.map +0 -1
  755. package/dist/router/trie-matching.js +0 -127
  756. package/dist/router/trie-matching.js.map +0 -1
  757. package/dist/router/types.d.ts +0 -136
  758. package/dist/router/types.d.ts.map +0 -1
  759. package/dist/router/types.js +0 -7
  760. package/dist/router/types.js.map +0 -1
  761. package/dist/router.d.ts +0 -753
  762. package/dist/router.d.ts.map +0 -1
  763. package/dist/router.gen.d.ts +0 -6
  764. package/dist/router.gen.d.ts.map +0 -1
  765. package/dist/router.gen.js +0 -6
  766. package/dist/router.gen.js.map +0 -1
  767. package/dist/router.js +0 -1304
  768. package/dist/router.js.map +0 -1
  769. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  770. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  771. package/dist/rsc/__tests__/helpers.test.js +0 -140
  772. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  773. package/dist/rsc/handler.d.ts +0 -45
  774. package/dist/rsc/handler.d.ts.map +0 -1
  775. package/dist/rsc/handler.js +0 -1172
  776. package/dist/rsc/handler.js.map +0 -1
  777. package/dist/rsc/helpers.d.ts +0 -16
  778. package/dist/rsc/helpers.d.ts.map +0 -1
  779. package/dist/rsc/helpers.js +0 -55
  780. package/dist/rsc/helpers.js.map +0 -1
  781. package/dist/rsc/index.d.ts +0 -22
  782. package/dist/rsc/index.d.ts.map +0 -1
  783. package/dist/rsc/index.js +0 -23
  784. package/dist/rsc/index.js.map +0 -1
  785. package/dist/rsc/nonce.d.ts +0 -9
  786. package/dist/rsc/nonce.d.ts.map +0 -1
  787. package/dist/rsc/nonce.js +0 -18
  788. package/dist/rsc/nonce.js.map +0 -1
  789. package/dist/rsc/types.d.ts +0 -206
  790. package/dist/rsc/types.d.ts.map +0 -1
  791. package/dist/rsc/types.js +0 -8
  792. package/dist/rsc/types.js.map +0 -1
  793. package/dist/search-params.d.ts +0 -103
  794. package/dist/search-params.d.ts.map +0 -1
  795. package/dist/search-params.js +0 -74
  796. package/dist/search-params.js.map +0 -1
  797. package/dist/segment-system.d.ts +0 -75
  798. package/dist/segment-system.d.ts.map +0 -1
  799. package/dist/segment-system.js +0 -336
  800. package/dist/segment-system.js.map +0 -1
  801. package/dist/server/context.d.ts +0 -245
  802. package/dist/server/context.d.ts.map +0 -1
  803. package/dist/server/context.js +0 -197
  804. package/dist/server/context.js.map +0 -1
  805. package/dist/server/fetchable-loader-store.d.ts +0 -18
  806. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  807. package/dist/server/fetchable-loader-store.js +0 -18
  808. package/dist/server/fetchable-loader-store.js.map +0 -1
  809. package/dist/server/handle-store.d.ts +0 -85
  810. package/dist/server/handle-store.d.ts.map +0 -1
  811. package/dist/server/handle-store.js +0 -142
  812. package/dist/server/handle-store.js.map +0 -1
  813. package/dist/server/loader-registry.d.ts +0 -55
  814. package/dist/server/loader-registry.d.ts.map +0 -1
  815. package/dist/server/loader-registry.js +0 -132
  816. package/dist/server/loader-registry.js.map +0 -1
  817. package/dist/server/request-context.d.ts +0 -226
  818. package/dist/server/request-context.d.ts.map +0 -1
  819. package/dist/server/request-context.js +0 -290
  820. package/dist/server/request-context.js.map +0 -1
  821. package/dist/server/root-layout.d.ts +0 -4
  822. package/dist/server/root-layout.d.ts.map +0 -1
  823. package/dist/server/root-layout.js +0 -5
  824. package/dist/server/root-layout.js.map +0 -1
  825. package/dist/server.d.ts +0 -15
  826. package/dist/server.d.ts.map +0 -1
  827. package/dist/server.js +0 -20
  828. package/dist/server.js.map +0 -1
  829. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  830. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  831. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  832. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  833. package/dist/ssr/index.d.ts +0 -98
  834. package/dist/ssr/index.d.ts.map +0 -1
  835. package/dist/ssr/index.js +0 -158
  836. package/dist/ssr/index.js.map +0 -1
  837. package/dist/static-handler.d.ts +0 -50
  838. package/dist/static-handler.d.ts.map +0 -1
  839. package/dist/static-handler.gen.d.ts +0 -5
  840. package/dist/static-handler.gen.d.ts.map +0 -1
  841. package/dist/static-handler.gen.js +0 -5
  842. package/dist/static-handler.gen.js.map +0 -1
  843. package/dist/static-handler.js +0 -29
  844. package/dist/static-handler.js.map +0 -1
  845. package/dist/theme/ThemeProvider.d.ts +0 -20
  846. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  847. package/dist/theme/ThemeProvider.js +0 -240
  848. package/dist/theme/ThemeProvider.js.map +0 -1
  849. package/dist/theme/ThemeScript.d.ts +0 -48
  850. package/dist/theme/ThemeScript.d.ts.map +0 -1
  851. package/dist/theme/ThemeScript.js +0 -13
  852. package/dist/theme/ThemeScript.js.map +0 -1
  853. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  854. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  855. package/dist/theme/__tests__/theme.test.js +0 -103
  856. package/dist/theme/__tests__/theme.test.js.map +0 -1
  857. package/dist/theme/constants.d.ts +0 -29
  858. package/dist/theme/constants.d.ts.map +0 -1
  859. package/dist/theme/constants.js +0 -48
  860. package/dist/theme/constants.js.map +0 -1
  861. package/dist/theme/index.d.ts +0 -31
  862. package/dist/theme/index.d.ts.map +0 -1
  863. package/dist/theme/index.js +0 -36
  864. package/dist/theme/index.js.map +0 -1
  865. package/dist/theme/theme-context.d.ts +0 -40
  866. package/dist/theme/theme-context.d.ts.map +0 -1
  867. package/dist/theme/theme-context.js +0 -60
  868. package/dist/theme/theme-context.js.map +0 -1
  869. package/dist/theme/theme-script.d.ts +0 -27
  870. package/dist/theme/theme-script.d.ts.map +0 -1
  871. package/dist/theme/theme-script.js +0 -147
  872. package/dist/theme/theme-script.js.map +0 -1
  873. package/dist/theme/types.d.ts +0 -163
  874. package/dist/theme/types.d.ts.map +0 -1
  875. package/dist/theme/types.js +0 -11
  876. package/dist/theme/types.js.map +0 -1
  877. package/dist/theme/use-theme.d.ts +0 -12
  878. package/dist/theme/use-theme.d.ts.map +0 -1
  879. package/dist/theme/use-theme.js +0 -40
  880. package/dist/theme/use-theme.js.map +0 -1
  881. package/dist/types.d.ts +0 -1479
  882. package/dist/types.d.ts.map +0 -1
  883. package/dist/types.js +0 -10
  884. package/dist/types.js.map +0 -1
  885. package/dist/urls.d.ts +0 -441
  886. package/dist/urls.d.ts.map +0 -1
  887. package/dist/urls.gen.d.ts +0 -8
  888. package/dist/urls.gen.d.ts.map +0 -1
  889. package/dist/urls.gen.js +0 -8
  890. package/dist/urls.gen.js.map +0 -1
  891. package/dist/urls.js +0 -443
  892. package/dist/urls.js.map +0 -1
  893. package/dist/use-loader.d.ts +0 -127
  894. package/dist/use-loader.d.ts.map +0 -1
  895. package/dist/use-loader.js +0 -237
  896. package/dist/use-loader.js.map +0 -1
  897. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  898. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  899. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  900. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  901. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  902. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  903. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  904. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  905. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  906. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  907. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  908. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  909. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  910. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  911. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  912. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  913. package/dist/vite/ast-handler-extract.d.ts +0 -49
  914. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  915. package/dist/vite/ast-handler-extract.js +0 -249
  916. package/dist/vite/ast-handler-extract.js.map +0 -1
  917. package/dist/vite/expose-action-id.d.ts +0 -19
  918. package/dist/vite/expose-action-id.d.ts.map +0 -1
  919. package/dist/vite/expose-action-id.js +0 -250
  920. package/dist/vite/expose-action-id.js.map +0 -1
  921. package/dist/vite/expose-id-utils.d.ts +0 -69
  922. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  923. package/dist/vite/expose-id-utils.js +0 -289
  924. package/dist/vite/expose-id-utils.js.map +0 -1
  925. package/dist/vite/expose-internal-ids.d.ts +0 -22
  926. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  927. package/dist/vite/expose-internal-ids.js +0 -886
  928. package/dist/vite/expose-internal-ids.js.map +0 -1
  929. package/dist/vite/index.d.ts +0 -149
  930. package/dist/vite/index.d.ts.map +0 -1
  931. package/dist/vite/index.js.map +0 -1
  932. package/dist/vite/index.named-routes.gen.ts +0 -103
  933. package/dist/vite/package-resolution.d.ts +0 -43
  934. package/dist/vite/package-resolution.d.ts.map +0 -1
  935. package/dist/vite/package-resolution.js +0 -112
  936. package/dist/vite/package-resolution.js.map +0 -1
  937. package/dist/vite/virtual-entries.d.ts +0 -25
  938. package/dist/vite/virtual-entries.d.ts.map +0 -1
  939. package/dist/vite/virtual-entries.js +0 -110
  940. package/dist/vite/virtual-entries.js.map +0 -1
@@ -4,6 +4,7 @@ import type {
4
4
  NavigateOptionsInternal,
5
5
  ResolvedSegment,
6
6
  } from "./types.js";
7
+ import { setAppVersion } from "./app-version.js";
7
8
  import * as React from "react";
8
9
  import { startTransition } from "react";
9
10
  import {
@@ -67,8 +68,8 @@ export interface NavigationBridgeConfigWithController extends NavigationBridgeCo
67
68
  export function createNavigationBridge(
68
69
  config: NavigationBridgeConfigWithController,
69
70
  ): NavigationBridge {
70
- const { store, client, eventController, onUpdate, renderSegments, version } =
71
- config;
71
+ const { store, client, eventController, onUpdate, renderSegments } = config;
72
+ let version = config.version;
72
73
 
73
74
  // Create shared partial updater
74
75
  const fetchPartialUpdate = createPartialUpdater({
@@ -76,7 +77,7 @@ export function createNavigationBridge(
76
77
  client,
77
78
  onUpdate,
78
79
  renderSegments,
79
- version,
80
+ getVersion: () => version,
80
81
  });
81
82
 
82
83
  return {
@@ -260,18 +261,24 @@ export function createNavigationBridge(
260
261
  // 2. routes that CAN be intercepted - we don't know if this navigation will intercept
261
262
  // 3. when leaving intercept - we need fresh non-intercept segments from server
262
263
  // 4. redirect-with-state - force re-render so hooks read fresh state
264
+ // 5. stale cache - server action invalidated it, need fresh data with loading state
263
265
  const hasUsableCache =
264
266
  cachedSegments &&
265
267
  cachedSegments.length > 0 &&
266
268
  !isInterceptOnlyCache(cachedSegments) &&
267
269
  !hasInterceptCache &&
268
270
  !isLeavingIntercept &&
271
+ !cached?.stale &&
269
272
  !options?._skipCache;
270
273
 
274
+ // Forward navigations always await fetchPartialUpdate before rendering,
275
+ // so useNavigation should always report "loading". skipLoadingState is
276
+ // only used for popstate background revalidation (line ~526) where
277
+ // cached content renders instantly without a network wait.
271
278
  const tx = createNavigationTransaction(store, eventController, url, {
272
279
  ...options,
273
280
  state: resolvedState,
274
- skipLoadingState: hasUsableCache,
281
+ skipLoadingState: false,
275
282
  });
276
283
 
277
284
  // REVALIDATE: Fetch fresh data from server
@@ -447,6 +454,12 @@ export function createNavigationBridge(
447
454
  store.setCurrentUrl(url);
448
455
  store.setPath(new URL(url).pathname);
449
456
 
457
+ // Restore router identity from cache so subsequent navigations
458
+ // don't falsely detect an app switch.
459
+ if (cached?.routerId) {
460
+ store.setRouterId?.(cached.routerId);
461
+ }
462
+
450
463
  // Render from cache - force await to skip loading fallbacks
451
464
  try {
452
465
  const root = await renderSegments(cachedSegments, {
@@ -461,10 +474,6 @@ export function createNavigationBridge(
461
474
  }
462
475
  eventController.setParams(cachedParams);
463
476
 
464
- // Scroll to top immediately to avoid flicker from the previous
465
- // page's scroll position while React paints the cached content.
466
- window.scrollTo(0, 0);
467
-
468
477
  const popstateUpdate = {
469
478
  root,
470
479
  metadata: {
@@ -476,6 +485,7 @@ export function createNavigationBridge(
476
485
  cachedHandleData,
477
486
  params: cachedParams,
478
487
  },
488
+ scroll: { restore: true, isStreaming },
479
489
  };
480
490
  const hasTransition = cachedSegments.some((s) => s.transition);
481
491
  if (hasTransition) {
@@ -489,9 +499,6 @@ export function createNavigationBridge(
489
499
  onUpdate(popstateUpdate);
490
500
  }
491
501
 
492
- // Restore the actual saved scroll position after React paints.
493
- handleNavigationEnd({ restore: true, isStreaming });
494
-
495
502
  // SWR: If stale, trigger background revalidation
496
503
  if (isStale) {
497
504
  debugLog("[Browser] Cache is stale, background revalidating...");
@@ -638,6 +645,12 @@ export function createNavigationBridge(
638
645
  window.removeEventListener("pageshow", handlePageShow);
639
646
  };
640
647
  },
648
+
649
+ updateVersion(newVersion: string): void {
650
+ version = newVersion;
651
+ setAppVersion(newVersion);
652
+ store.clearHistoryCache();
653
+ },
641
654
  };
642
655
  }
643
656
 
@@ -17,7 +17,11 @@ import {
17
17
  emptyResponse,
18
18
  teeWithCompletion,
19
19
  } from "./response-adapter.js";
20
- import { buildPrefetchKey, consumePrefetch } from "./prefetch/cache.js";
20
+ import {
21
+ buildPrefetchKey,
22
+ consumeInflightPrefetch,
23
+ consumePrefetch,
24
+ } from "./prefetch/cache.js";
21
25
 
22
26
  /**
23
27
  * Create a navigation client for fetching RSC payloads
@@ -57,6 +61,7 @@ export function createNavigationClient(
57
61
  staleRevalidation,
58
62
  interceptSourceUrl,
59
63
  version,
64
+ routerId,
60
65
  hmr,
61
66
  } = options;
62
67
 
@@ -84,50 +89,107 @@ export function createNavigationClient(
84
89
  if (version) {
85
90
  fetchUrl.searchParams.set("_rsc_v", version);
86
91
  }
92
+ if (routerId) {
93
+ fetchUrl.searchParams.set("_rsc_rid", routerId);
94
+ }
87
95
 
88
- // Check in-memory prefetch cache before making a network request.
96
+ // Check completed in-memory prefetch cache before making a network request.
89
97
  // The cache key includes the source URL (previousUrl) because the
90
98
  // server's diff response depends on the source page context.
91
99
  // Skip cache for stale revalidation (needs fresh data), HMR (needs
92
100
  // fresh modules), and intercept contexts (source-dependent responses).
101
+ //
102
+ const canUsePrefetch = !staleRevalidation && !hmr && !interceptSourceUrl;
93
103
  const cacheKey = buildPrefetchKey(previousUrl, fetchUrl);
94
- const cachedResponse =
95
- !staleRevalidation && !hmr && !interceptSourceUrl
96
- ? consumePrefetch(cacheKey)
97
- : null;
104
+ // Wildcard key matches prefetch entries stored with a custom prefetchKey
105
+ // (Link's prefetchKey prop stores under "*" instead of the source URL).
106
+ const wildcardKey = "*\0" + fetchUrl.pathname + fetchUrl.search;
107
+
108
+ let cachedResponse: Response | null = null;
109
+ let hitKey: string | null = null;
110
+ if (canUsePrefetch) {
111
+ cachedResponse = consumePrefetch(cacheKey);
112
+ if (cachedResponse) {
113
+ hitKey = cacheKey;
114
+ } else {
115
+ cachedResponse = consumePrefetch(wildcardKey);
116
+ if (cachedResponse) hitKey = wildcardKey;
117
+ }
118
+ }
98
119
 
120
+ let inflightResponsePromise: Promise<Response | null> | null = null;
121
+ if (canUsePrefetch && !cachedResponse) {
122
+ inflightResponsePromise = consumeInflightPrefetch(cacheKey);
123
+ if (inflightResponsePromise) {
124
+ hitKey = cacheKey;
125
+ } else {
126
+ inflightResponsePromise = consumeInflightPrefetch(wildcardKey);
127
+ if (inflightResponsePromise) hitKey = wildcardKey;
128
+ }
129
+ }
99
130
  // Track when the stream completes
100
131
  let resolveStreamComplete: () => void;
101
132
  const streamComplete = new Promise<void>((resolve) => {
102
133
  resolveStreamComplete = resolve;
103
134
  });
104
135
 
105
- let responsePromise: Promise<Response>;
136
+ /**
137
+ * Validate RSC control headers on any response (fresh, cached, or
138
+ * in-flight). Handles version-mismatch reloads and server redirects.
139
+ * Returns the response unchanged when no control header is present.
140
+ */
141
+ const validateRscHeaders = (
142
+ response: Response,
143
+ source: string,
144
+ ): Response | Promise<Response> => {
145
+ // Version mismatch — server wants a full page reload
146
+ const reload = extractRscHeaderUrl(response, "X-RSC-Reload");
147
+ if (reload === "blocked") {
148
+ resolveStreamComplete();
149
+ return emptyResponse();
150
+ }
151
+ if (reload) {
152
+ if (tx) {
153
+ browserDebugLog(tx, `version mismatch, reloading (${source})`, {
154
+ reloadUrl: reload.url,
155
+ });
156
+ }
157
+ window.location.href = reload.url;
158
+ // Block further processing — page is reloading
159
+ return new Promise<Response>(() => {});
160
+ }
106
161
 
107
- if (cachedResponse) {
108
- if (tx) {
109
- browserDebugLog(tx, "prefetch cache hit", { key: cacheKey });
162
+ // Server-side redirect without state: the server returned 204 with
163
+ // X-RSC-Redirect instead of a 3xx (which fetch would auto-follow
164
+ // to a URL rendering full HTML). Throw ServerRedirect so the
165
+ // navigation bridge catches it and re-navigates with _skipCache.
166
+ const redirect = extractRscHeaderUrl(response, "X-RSC-Redirect");
167
+ if (redirect === "blocked") {
168
+ resolveStreamComplete();
169
+ return emptyResponse();
110
170
  }
111
- // Cached response body is already fully buffered (arrayBuffer),
112
- // so stream completion is immediate.
113
- responsePromise = Promise.resolve(cachedResponse).then((response) => {
114
- return teeWithCompletion(
115
- response,
116
- () => {
117
- if (tx) browserDebugLog(tx, "stream complete (from cache)");
118
- resolveStreamComplete();
119
- },
120
- signal,
121
- );
122
- });
123
- } else {
171
+ if (redirect) {
172
+ if (tx) {
173
+ browserDebugLog(tx, `server redirect (${source})`, {
174
+ redirectUrl: redirect.url,
175
+ });
176
+ }
177
+ resolveStreamComplete();
178
+ throw new ServerRedirect(redirect.url, undefined);
179
+ }
180
+
181
+ return response;
182
+ };
183
+
184
+ /** Start a fresh navigation fetch (no cache / inflight hit). */
185
+ const doFreshFetch = (): Promise<Response> => {
124
186
  if (tx) {
125
187
  browserDebugLog(tx, "fetching", {
126
188
  path: `${fetchUrl.pathname}${fetchUrl.search}`,
127
189
  });
128
190
  }
129
191
 
130
- responsePromise = fetch(fetchUrl, {
192
+ return fetch(fetchUrl, {
131
193
  headers: {
132
194
  "X-RSC-Router-Client-Path": previousUrl,
133
195
  "X-Rango-State": getRangoState(),
@@ -139,55 +201,78 @@ export function createNavigationClient(
139
201
  },
140
202
  signal,
141
203
  }).then((response) => {
142
- // Check for version mismatch - server wants us to reload
143
- const reload = extractRscHeaderUrl(response, "X-RSC-Reload");
144
- if (reload === "blocked") {
145
- resolveStreamComplete();
146
- return emptyResponse();
147
- }
148
- if (reload) {
149
- if (tx) {
150
- browserDebugLog(tx, "version mismatch, reloading", {
151
- reloadUrl: reload.url,
152
- });
153
- }
154
- window.location.href = reload.url;
155
- return new Promise<Response>(() => {});
156
- }
204
+ const validated = validateRscHeaders(response, "fetch");
205
+ if (validated instanceof Promise) return validated;
157
206
 
158
- // Server-side redirect without state: the server returned 204 with
159
- // X-RSC-Redirect instead of a 3xx (which fetch would auto-follow
160
- // to a URL rendering full HTML). Throw ServerRedirect so the
161
- // navigation bridge catches it and re-navigates with _skipCache.
162
- const redirect = extractRscHeaderUrl(response, "X-RSC-Redirect");
163
- if (redirect === "blocked") {
164
- resolveStreamComplete();
165
- return emptyResponse();
166
- }
167
- if (redirect) {
207
+ return teeWithCompletion(
208
+ validated,
209
+ () => {
210
+ if (tx) browserDebugLog(tx, "stream complete");
211
+ resolveStreamComplete();
212
+ },
213
+ signal,
214
+ );
215
+ });
216
+ };
217
+
218
+ let responsePromise: Promise<Response>;
219
+
220
+ if (cachedResponse) {
221
+ if (tx) {
222
+ browserDebugLog(tx, "prefetch cache hit", {
223
+ key: hitKey,
224
+ wildcard: hitKey === wildcardKey,
225
+ });
226
+ }
227
+ responsePromise = Promise.resolve(cachedResponse).then((response) => {
228
+ const validated = validateRscHeaders(response, "prefetch cache");
229
+ if (validated instanceof Promise) return validated;
230
+
231
+ return teeWithCompletion(
232
+ validated,
233
+ () => {
234
+ if (tx) browserDebugLog(tx, "stream complete (from cache)");
235
+ resolveStreamComplete();
236
+ },
237
+ signal,
238
+ );
239
+ });
240
+ } else if (inflightResponsePromise) {
241
+ if (tx) {
242
+ browserDebugLog(tx, "reusing inflight prefetch", {
243
+ key: hitKey,
244
+ wildcard: hitKey === wildcardKey,
245
+ });
246
+ }
247
+ responsePromise = inflightResponsePromise.then(async (response) => {
248
+ if (!response) {
168
249
  if (tx) {
169
- browserDebugLog(tx, "server redirect", {
170
- redirectUrl: redirect.url,
171
- });
250
+ browserDebugLog(tx, "inflight prefetch unavailable, refetching");
172
251
  }
173
- resolveStreamComplete();
174
- throw new ServerRedirect(redirect.url, undefined);
252
+ return doFreshFetch();
175
253
  }
176
254
 
255
+ const validated = validateRscHeaders(response, "inflight prefetch");
256
+ if (validated instanceof Promise) return validated;
257
+
177
258
  return teeWithCompletion(
178
- response,
259
+ validated,
179
260
  () => {
180
- if (tx) browserDebugLog(tx, "stream complete");
261
+ if (tx) {
262
+ browserDebugLog(tx, "stream complete (from inflight prefetch)");
263
+ }
181
264
  resolveStreamComplete();
182
265
  },
183
266
  signal,
184
267
  );
185
268
  });
269
+ } else {
270
+ responsePromise = doFreshFetch();
186
271
  }
187
272
 
188
273
  try {
189
- // Deserialize RSC payload
190
274
  const payload = await deps.createFromFetch<RscPayload>(responsePromise);
275
+
191
276
  if (tx) {
192
277
  browserDebugLog(tx, "response received", {
193
278
  isPartial: payload.metadata?.isPartial,
@@ -28,9 +28,15 @@ const DEFAULT_ACTION_STATE: TrackedActionState = {
28
28
  // Maximum number of history entries to cache (URLs visited)
29
29
  const HISTORY_CACHE_SIZE = 20;
30
30
 
31
- // Cache entry: [url-key, segments, stale, handleData?]
31
+ // Cache entry: [url-key, segments, stale, handleData?, routerId?]
32
32
  // stale=true means the data may be outdated and should be revalidated on access
33
- type HistoryCacheEntry = [string, ResolvedSegment[], boolean, HandleData?];
33
+ type HistoryCacheEntry = [
34
+ string,
35
+ ResolvedSegment[],
36
+ boolean,
37
+ HandleData?,
38
+ string?,
39
+ ];
34
40
 
35
41
  /**
36
42
  * Shallow clone handleData to avoid reference sharing between cache entries.
@@ -258,6 +264,11 @@ export function createNavigationStore(
258
264
  // Used to maintain intercept context during action revalidation
259
265
  let interceptSourceUrl: string | null = null;
260
266
 
267
+ // Router identity - tracks which router is currently active.
268
+ // When this changes on a partial response, the client forces a full
269
+ // tree replacement instead of reconciling with stale segments.
270
+ let currentRouterId: string | undefined;
271
+
261
272
  // Action state tracking (for useAction hook)
262
273
  // Maps action function ID to its tracked state
263
274
  const actionStates = new Map<string, TrackedActionState>();
@@ -571,10 +582,17 @@ export function createNavigationStore(
571
582
  segments,
572
583
  false,
573
584
  clonedHandleData,
585
+ currentRouterId,
574
586
  ];
575
587
  } else {
576
588
  // Add new entry at the end (not stale)
577
- historyCache.push([historyKey, segments, false, clonedHandleData]);
589
+ historyCache.push([
590
+ historyKey,
591
+ segments,
592
+ false,
593
+ clonedHandleData,
594
+ currentRouterId,
595
+ ]);
578
596
  // Remove oldest entries if over limit
579
597
  while (historyCache.length > cacheSize) {
580
598
  historyCache.shift();
@@ -586,14 +604,22 @@ export function createNavigationStore(
586
604
  * Get cached segments for a history entry
587
605
  * Returns { segments, stale, handleData } or undefined if not cached
588
606
  */
589
- getCachedSegments(
590
- historyKey: string,
591
- ):
592
- | { segments: ResolvedSegment[]; stale: boolean; handleData?: HandleData }
607
+ getCachedSegments(historyKey: string):
608
+ | {
609
+ segments: ResolvedSegment[];
610
+ stale: boolean;
611
+ handleData?: HandleData;
612
+ routerId?: string;
613
+ }
593
614
  | undefined {
594
615
  const entry = historyCache.find(([key]) => key === historyKey);
595
616
  if (!entry) return undefined;
596
- return { segments: entry[1], stale: entry[2], handleData: entry[3] };
617
+ return {
618
+ segments: entry[1],
619
+ stale: entry[2],
620
+ handleData: entry[3],
621
+ routerId: entry[4],
622
+ };
597
623
  },
598
624
 
599
625
  /**
@@ -621,6 +647,7 @@ export function createNavigationStore(
621
647
  entry[1],
622
648
  entry[2],
623
649
  clonedHandleData,
650
+ entry[4], // preserve routerId
624
651
  ];
625
652
  }
626
653
  },
@@ -687,6 +714,14 @@ export function createNavigationStore(
687
714
  interceptSourceUrl = url;
688
715
  },
689
716
 
717
+ getRouterId(): string | undefined {
718
+ return currentRouterId;
719
+ },
720
+
721
+ setRouterId(id: string): void {
722
+ currentRouterId = id;
723
+ },
724
+
690
725
  // ========================================================================
691
726
  // UI Update Notifications
692
727
  // ========================================================================
@@ -7,7 +7,6 @@ import type {
7
7
  import { generateHistoryKey } from "./navigation-store.js";
8
8
  import {
9
9
  handleNavigationStart,
10
- handleNavigationEnd,
11
10
  ensureHistoryKey,
12
11
  } from "./scroll-restoration.js";
13
12
  import type { EventController, NavigationHandle } from "./event-controller.js";
@@ -81,11 +80,12 @@ export interface BoundTransaction {
81
80
  readonly currentUrl: string;
82
81
  /** Start streaming and get a token to end it when the stream completes */
83
82
  startStreaming(): StreamingToken;
83
+ /** Commit the navigation. Returns the effective scroll option for the caller to handle. */
84
84
  commit(
85
85
  segmentIds: string[],
86
86
  segments: ResolvedSegment[],
87
87
  overrides?: BoundCommitOverrides,
88
- ): void;
88
+ ): { scroll?: boolean };
89
89
  }
90
90
 
91
91
  /**
@@ -93,7 +93,7 @@ export interface BoundTransaction {
93
93
  * Uses the event controller handle for lifecycle management
94
94
  */
95
95
  interface NavigationTransaction extends Disposable {
96
- commit(options: CommitOptions): void;
96
+ commit(options: CommitOptions): { scroll?: boolean };
97
97
  with(
98
98
  options: Omit<CommitOptions, "segmentIds" | "segments">,
99
99
  ): BoundTransaction;
@@ -120,7 +120,7 @@ export function createNavigationTransaction(
120
120
  /**
121
121
  * Commit the navigation - updates store and URL atomically
122
122
  */
123
- function commit(opts: CommitOptions): void {
123
+ function commit(opts: CommitOptions): { scroll?: boolean } {
124
124
  committed = true;
125
125
 
126
126
  const {
@@ -150,7 +150,7 @@ export function createNavigationTransaction(
150
150
  // Without this, the entry lingers and weakens state-machine invariants.
151
151
  handle.complete(parsedUrl);
152
152
  debugLog("[Browser] Cache-only commit, historyKey:", historyKey);
153
- return;
153
+ return { scroll: false };
154
154
  }
155
155
 
156
156
  // Save current scroll position before navigating
@@ -172,7 +172,7 @@ export function createNavigationTransaction(
172
172
  debugLog("[Browser] Store updated (action)");
173
173
  // Complete navigation to clear loading state
174
174
  handle.complete(parsedUrl);
175
- return;
175
+ return { scroll: false };
176
176
  }
177
177
 
178
178
  // Build history state - include user state, intercept info, and server-set state
@@ -205,14 +205,16 @@ export function createNavigationTransaction(
205
205
  // Complete the navigation in event controller (sets idle state, updates location)
206
206
  handle.complete(parsedUrl);
207
207
 
208
- // Handle scroll after navigation
209
- handleNavigationEnd({ scroll });
208
+ // NOTE: Scroll is NOT handled here. The caller (partial-update.ts) handles
209
+ // scroll AFTER onUpdate() so React has the new content before we scroll.
210
210
 
211
211
  debugLog(
212
212
  "[Browser] Navigation committed, historyKey:",
213
213
  historyKey,
214
214
  intercept ? "(intercept)" : "",
215
215
  );
216
+
217
+ return { scroll };
216
218
  }
217
219
 
218
220
  return {
@@ -263,7 +265,7 @@ export function createNavigationTransaction(
263
265
  overrides?.state !== undefined ? overrides.state : opts.state;
264
266
  // Server-set location state: only from overrides (set by partial-update)
265
267
  const serverState = overrides?.serverState;
266
- commit({
268
+ return commit({
267
269
  ...opts,
268
270
  segmentIds,
269
271
  segments,