@rangojs/router 0.0.0-experimental.a769fbe7 → 0.0.0-experimental.a99e6916

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 (911) hide show
  1. package/README.md +76 -18
  2. package/dist/bin/rango.js +130 -47
  3. package/dist/vite/index.js +690 -367
  4. package/package.json +3 -3
  5. package/skills/links/SKILL.md +3 -1
  6. package/skills/middleware/SKILL.md +34 -3
  7. package/skills/migrate-nextjs/SKILL.md +560 -0
  8. package/skills/migrate-react-router/SKILL.md +764 -0
  9. package/skills/prerender/SKILL.md +110 -68
  10. package/skills/rango/SKILL.md +24 -22
  11. package/skills/router-setup/SKILL.md +35 -0
  12. package/src/__internal.ts +1 -1
  13. package/src/browser/app-version.ts +14 -0
  14. package/src/browser/navigation-bridge.ts +23 -4
  15. package/src/browser/navigation-client.ts +98 -70
  16. package/src/browser/navigation-store.ts +43 -8
  17. package/src/browser/partial-update.ts +32 -5
  18. package/src/browser/prefetch/cache.ts +16 -6
  19. package/src/browser/prefetch/fetch.ts +68 -6
  20. package/src/browser/react/Link.tsx +67 -8
  21. package/src/browser/react/NavigationProvider.tsx +8 -1
  22. package/src/browser/react/context.ts +7 -2
  23. package/src/browser/react/use-handle.ts +9 -58
  24. package/src/browser/react/use-router.ts +21 -8
  25. package/src/browser/rsc-router.tsx +26 -3
  26. package/src/browser/scroll-restoration.ts +10 -8
  27. package/src/browser/segment-reconciler.ts +26 -0
  28. package/src/browser/server-action-bridge.ts +8 -18
  29. package/src/browser/types.ts +20 -5
  30. package/src/build/generate-manifest.ts +6 -6
  31. package/src/build/generate-route-types.ts +3 -0
  32. package/src/build/route-types/include-resolution.ts +8 -1
  33. package/src/build/route-types/router-processing.ts +211 -72
  34. package/src/build/route-types/scan-filter.ts +8 -1
  35. package/src/client.tsx +2 -56
  36. package/src/deps/browser.ts +0 -1
  37. package/src/handle.ts +40 -0
  38. package/src/index.rsc.ts +3 -1
  39. package/src/index.ts +46 -6
  40. package/src/prerender/store.ts +5 -4
  41. package/src/prerender.ts +138 -77
  42. package/src/reverse.ts +22 -1
  43. package/src/route-definition/dsl-helpers.ts +146 -30
  44. package/src/route-definition/helpers-types.ts +35 -12
  45. package/src/route-definition/index.ts +3 -0
  46. package/src/route-definition/redirect.ts +9 -1
  47. package/src/route-definition/resolve-handler-use.ts +149 -0
  48. package/src/route-types.ts +11 -0
  49. package/src/router/content-negotiation.ts +100 -1
  50. package/src/router/handler-context.ts +48 -15
  51. package/src/router/intercept-resolution.ts +9 -4
  52. package/src/router/loader-resolution.ts +150 -21
  53. package/src/router/match-api.ts +124 -189
  54. package/src/router/match-middleware/cache-lookup.ts +28 -8
  55. package/src/router/match-middleware/segment-resolution.ts +53 -0
  56. package/src/router/match-result.ts +82 -4
  57. package/src/router/middleware-types.ts +0 -6
  58. package/src/router/middleware.ts +0 -3
  59. package/src/router/navigation-snapshot.ts +182 -0
  60. package/src/router/prerender-match.ts +110 -10
  61. package/src/router/preview-match.ts +30 -102
  62. package/src/router/request-classification.ts +310 -0
  63. package/src/router/route-snapshot.ts +245 -0
  64. package/src/router/router-interfaces.ts +36 -4
  65. package/src/router/router-options.ts +37 -11
  66. package/src/router/segment-resolution/fresh.ts +70 -5
  67. package/src/router/segment-resolution/revalidation.ts +87 -9
  68. package/src/router.ts +53 -5
  69. package/src/rsc/handler.ts +472 -398
  70. package/src/rsc/loader-fetch.ts +18 -3
  71. package/src/rsc/manifest-init.ts +5 -1
  72. package/src/rsc/progressive-enhancement.ts +12 -3
  73. package/src/rsc/rsc-rendering.ts +8 -2
  74. package/src/rsc/server-action.ts +8 -2
  75. package/src/rsc/ssr-setup.ts +2 -2
  76. package/src/rsc/types.ts +6 -4
  77. package/src/server/context.ts +39 -2
  78. package/src/server/handle-store.ts +19 -0
  79. package/src/server/loader-registry.ts +9 -8
  80. package/src/server/request-context.ts +132 -13
  81. package/src/ssr/index.tsx +3 -0
  82. package/src/static-handler.ts +18 -6
  83. package/src/types/cache-types.ts +4 -4
  84. package/src/types/handler-context.ts +17 -11
  85. package/src/types/loader-types.ts +32 -5
  86. package/src/types/route-entry.ts +1 -1
  87. package/src/types/segments.ts +1 -0
  88. package/src/urls/path-helper-types.ts +22 -4
  89. package/src/urls/path-helper.ts +47 -12
  90. package/src/urls/pattern-types.ts +12 -0
  91. package/src/urls/response-types.ts +16 -6
  92. package/src/use-loader.tsx +77 -5
  93. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  94. package/src/vite/discovery/discover-routers.ts +5 -1
  95. package/src/vite/discovery/prerender-collection.ts +128 -74
  96. package/src/vite/discovery/state.ts +13 -4
  97. package/src/vite/index.ts +4 -0
  98. package/src/vite/plugin-types.ts +60 -5
  99. package/src/vite/plugins/expose-id-utils.ts +12 -0
  100. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  101. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  102. package/src/vite/plugins/performance-tracks.ts +64 -207
  103. package/src/vite/plugins/refresh-cmd.ts +88 -26
  104. package/src/vite/rango.ts +18 -5
  105. package/src/vite/router-discovery.ts +178 -37
  106. package/src/vite/utils/prerender-utils.ts +18 -0
  107. package/src/vite/utils/shared-utils.ts +3 -2
  108. package/dist/__internal.d.ts +0 -83
  109. package/dist/__internal.d.ts.map +0 -1
  110. package/dist/__internal.js +0 -19
  111. package/dist/__internal.js.map +0 -1
  112. package/dist/__mocks__/version.d.ts +0 -7
  113. package/dist/__mocks__/version.d.ts.map +0 -1
  114. package/dist/__mocks__/version.js +0 -7
  115. package/dist/__mocks__/version.js.map +0 -1
  116. package/dist/__tests__/client-href.test.d.ts +0 -2
  117. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  118. package/dist/__tests__/client-href.test.js +0 -74
  119. package/dist/__tests__/client-href.test.js.map +0 -1
  120. package/dist/__tests__/component-utils.test.d.ts +0 -2
  121. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  122. package/dist/__tests__/component-utils.test.js +0 -51
  123. package/dist/__tests__/component-utils.test.js.map +0 -1
  124. package/dist/__tests__/event-controller.test.d.ts +0 -2
  125. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  126. package/dist/__tests__/event-controller.test.js +0 -538
  127. package/dist/__tests__/event-controller.test.js.map +0 -1
  128. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  129. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  130. package/dist/__tests__/helpers/route-tree.js +0 -374
  131. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  132. package/dist/__tests__/match-result.test.d.ts +0 -2
  133. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  134. package/dist/__tests__/match-result.test.js +0 -154
  135. package/dist/__tests__/match-result.test.js.map +0 -1
  136. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  137. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  138. package/dist/__tests__/navigation-store.test.js +0 -440
  139. package/dist/__tests__/navigation-store.test.js.map +0 -1
  140. package/dist/__tests__/partial-update.test.d.ts +0 -2
  141. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  142. package/dist/__tests__/partial-update.test.js +0 -1009
  143. package/dist/__tests__/partial-update.test.js.map +0 -1
  144. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  145. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  146. package/dist/__tests__/reverse-types.test.js +0 -656
  147. package/dist/__tests__/reverse-types.test.js.map +0 -1
  148. package/dist/__tests__/route-definition.test.d.ts +0 -2
  149. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  150. package/dist/__tests__/route-definition.test.js +0 -55
  151. package/dist/__tests__/route-definition.test.js.map +0 -1
  152. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  153. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  154. package/dist/__tests__/router-helpers.test.js +0 -377
  155. package/dist/__tests__/router-helpers.test.js.map +0 -1
  156. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  157. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  158. package/dist/__tests__/router-integration-2.test.js +0 -426
  159. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  160. package/dist/__tests__/router-integration.test.d.ts +0 -2
  161. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  162. package/dist/__tests__/router-integration.test.js +0 -1051
  163. package/dist/__tests__/router-integration.test.js.map +0 -1
  164. package/dist/__tests__/search-params.test.d.ts +0 -5
  165. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  166. package/dist/__tests__/search-params.test.js +0 -306
  167. package/dist/__tests__/search-params.test.js.map +0 -1
  168. package/dist/__tests__/segment-system.test.d.ts +0 -2
  169. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  170. package/dist/__tests__/segment-system.test.js +0 -627
  171. package/dist/__tests__/segment-system.test.js.map +0 -1
  172. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  173. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  174. package/dist/__tests__/static-handler-types.test.js +0 -63
  175. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  176. package/dist/__tests__/urls.test.d.ts +0 -2
  177. package/dist/__tests__/urls.test.d.ts.map +0 -1
  178. package/dist/__tests__/urls.test.js +0 -421
  179. package/dist/__tests__/urls.test.js.map +0 -1
  180. package/dist/__tests__/use-mount.test.d.ts +0 -2
  181. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  182. package/dist/__tests__/use-mount.test.js +0 -35
  183. package/dist/__tests__/use-mount.test.js.map +0 -1
  184. package/dist/bin/rango.d.ts +0 -2
  185. package/dist/bin/rango.d.ts.map +0 -1
  186. package/dist/bin/rango.js.map +0 -1
  187. package/dist/browser/event-controller.d.ts +0 -191
  188. package/dist/browser/event-controller.d.ts.map +0 -1
  189. package/dist/browser/event-controller.js +0 -559
  190. package/dist/browser/event-controller.js.map +0 -1
  191. package/dist/browser/index.d.ts +0 -2
  192. package/dist/browser/index.d.ts.map +0 -1
  193. package/dist/browser/index.js +0 -14
  194. package/dist/browser/index.js.map +0 -1
  195. package/dist/browser/link-interceptor.d.ts +0 -38
  196. package/dist/browser/link-interceptor.d.ts.map +0 -1
  197. package/dist/browser/link-interceptor.js +0 -99
  198. package/dist/browser/link-interceptor.js.map +0 -1
  199. package/dist/browser/logging.d.ts +0 -10
  200. package/dist/browser/logging.d.ts.map +0 -1
  201. package/dist/browser/logging.js +0 -29
  202. package/dist/browser/logging.js.map +0 -1
  203. package/dist/browser/lru-cache.d.ts +0 -17
  204. package/dist/browser/lru-cache.d.ts.map +0 -1
  205. package/dist/browser/lru-cache.js +0 -50
  206. package/dist/browser/lru-cache.js.map +0 -1
  207. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  208. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  209. package/dist/browser/merge-segment-loaders.js +0 -102
  210. package/dist/browser/merge-segment-loaders.js.map +0 -1
  211. package/dist/browser/navigation-bridge.d.ts +0 -102
  212. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  213. package/dist/browser/navigation-bridge.js +0 -708
  214. package/dist/browser/navigation-bridge.js.map +0 -1
  215. package/dist/browser/navigation-client.d.ts +0 -25
  216. package/dist/browser/navigation-client.d.ts.map +0 -1
  217. package/dist/browser/navigation-client.js +0 -157
  218. package/dist/browser/navigation-client.js.map +0 -1
  219. package/dist/browser/navigation-store.d.ts +0 -101
  220. package/dist/browser/navigation-store.d.ts.map +0 -1
  221. package/dist/browser/navigation-store.js +0 -625
  222. package/dist/browser/navigation-store.js.map +0 -1
  223. package/dist/browser/partial-update.d.ts +0 -75
  224. package/dist/browser/partial-update.d.ts.map +0 -1
  225. package/dist/browser/partial-update.js +0 -426
  226. package/dist/browser/partial-update.js.map +0 -1
  227. package/dist/browser/react/Link.d.ts +0 -86
  228. package/dist/browser/react/Link.d.ts.map +0 -1
  229. package/dist/browser/react/Link.js +0 -128
  230. package/dist/browser/react/Link.js.map +0 -1
  231. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  232. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  233. package/dist/browser/react/NavigationProvider.js +0 -216
  234. package/dist/browser/react/NavigationProvider.js.map +0 -1
  235. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  236. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  237. package/dist/browser/react/ScrollRestoration.js +0 -57
  238. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  239. package/dist/browser/react/context.d.ts +0 -46
  240. package/dist/browser/react/context.d.ts.map +0 -1
  241. package/dist/browser/react/context.js +0 -10
  242. package/dist/browser/react/context.js.map +0 -1
  243. package/dist/browser/react/index.d.ts +0 -11
  244. package/dist/browser/react/index.d.ts.map +0 -1
  245. package/dist/browser/react/index.js +0 -22
  246. package/dist/browser/react/index.js.map +0 -1
  247. package/dist/browser/react/location-state-shared.d.ts +0 -63
  248. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  249. package/dist/browser/react/location-state-shared.js +0 -81
  250. package/dist/browser/react/location-state-shared.js.map +0 -1
  251. package/dist/browser/react/location-state.d.ts +0 -23
  252. package/dist/browser/react/location-state.d.ts.map +0 -1
  253. package/dist/browser/react/location-state.js +0 -29
  254. package/dist/browser/react/location-state.js.map +0 -1
  255. package/dist/browser/react/mount-context.d.ts +0 -24
  256. package/dist/browser/react/mount-context.d.ts.map +0 -1
  257. package/dist/browser/react/mount-context.js +0 -24
  258. package/dist/browser/react/mount-context.js.map +0 -1
  259. package/dist/browser/react/use-action.d.ts +0 -64
  260. package/dist/browser/react/use-action.d.ts.map +0 -1
  261. package/dist/browser/react/use-action.js +0 -134
  262. package/dist/browser/react/use-action.js.map +0 -1
  263. package/dist/browser/react/use-client-cache.d.ts +0 -41
  264. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  265. package/dist/browser/react/use-client-cache.js +0 -39
  266. package/dist/browser/react/use-client-cache.js.map +0 -1
  267. package/dist/browser/react/use-handle.d.ts +0 -31
  268. package/dist/browser/react/use-handle.d.ts.map +0 -1
  269. package/dist/browser/react/use-handle.js +0 -144
  270. package/dist/browser/react/use-handle.js.map +0 -1
  271. package/dist/browser/react/use-href.d.ts +0 -33
  272. package/dist/browser/react/use-href.d.ts.map +0 -1
  273. package/dist/browser/react/use-href.js +0 -39
  274. package/dist/browser/react/use-href.js.map +0 -1
  275. package/dist/browser/react/use-link-status.d.ts +0 -37
  276. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  277. package/dist/browser/react/use-link-status.js +0 -99
  278. package/dist/browser/react/use-link-status.js.map +0 -1
  279. package/dist/browser/react/use-mount.d.ts +0 -25
  280. package/dist/browser/react/use-mount.d.ts.map +0 -1
  281. package/dist/browser/react/use-mount.js +0 -30
  282. package/dist/browser/react/use-mount.js.map +0 -1
  283. package/dist/browser/react/use-navigation.d.ts +0 -27
  284. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  285. package/dist/browser/react/use-navigation.js +0 -87
  286. package/dist/browser/react/use-navigation.js.map +0 -1
  287. package/dist/browser/react/use-segments.d.ts +0 -38
  288. package/dist/browser/react/use-segments.d.ts.map +0 -1
  289. package/dist/browser/react/use-segments.js +0 -130
  290. package/dist/browser/react/use-segments.js.map +0 -1
  291. package/dist/browser/request-controller.d.ts +0 -26
  292. package/dist/browser/request-controller.d.ts.map +0 -1
  293. package/dist/browser/request-controller.js +0 -147
  294. package/dist/browser/request-controller.js.map +0 -1
  295. package/dist/browser/rsc-router.d.ts +0 -129
  296. package/dist/browser/rsc-router.d.ts.map +0 -1
  297. package/dist/browser/rsc-router.js +0 -195
  298. package/dist/browser/rsc-router.js.map +0 -1
  299. package/dist/browser/scroll-restoration.d.ts +0 -93
  300. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  301. package/dist/browser/scroll-restoration.js +0 -321
  302. package/dist/browser/scroll-restoration.js.map +0 -1
  303. package/dist/browser/segment-structure-assert.d.ts +0 -17
  304. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  305. package/dist/browser/segment-structure-assert.js +0 -59
  306. package/dist/browser/segment-structure-assert.js.map +0 -1
  307. package/dist/browser/server-action-bridge.d.ts +0 -26
  308. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  309. package/dist/browser/server-action-bridge.js +0 -668
  310. package/dist/browser/server-action-bridge.js.map +0 -1
  311. package/dist/browser/shallow.d.ts +0 -12
  312. package/dist/browser/shallow.d.ts.map +0 -1
  313. package/dist/browser/shallow.js +0 -34
  314. package/dist/browser/shallow.js.map +0 -1
  315. package/dist/browser/types.d.ts +0 -369
  316. package/dist/browser/types.d.ts.map +0 -1
  317. package/dist/browser/types.js +0 -2
  318. package/dist/browser/types.js.map +0 -1
  319. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  320. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  321. package/dist/build/__tests__/generate-cli.test.js +0 -237
  322. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  323. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  324. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  325. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  326. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  327. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  328. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  329. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  330. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  331. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  332. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  333. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  334. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  335. package/dist/build/generate-manifest.d.ts +0 -81
  336. package/dist/build/generate-manifest.d.ts.map +0 -1
  337. package/dist/build/generate-manifest.js +0 -276
  338. package/dist/build/generate-manifest.js.map +0 -1
  339. package/dist/build/generate-route-types.d.ts +0 -115
  340. package/dist/build/generate-route-types.d.ts.map +0 -1
  341. package/dist/build/generate-route-types.js +0 -740
  342. package/dist/build/generate-route-types.js.map +0 -1
  343. package/dist/build/index.d.ts +0 -21
  344. package/dist/build/index.d.ts.map +0 -1
  345. package/dist/build/index.js +0 -21
  346. package/dist/build/index.js.map +0 -1
  347. package/dist/build/route-trie.d.ts +0 -71
  348. package/dist/build/route-trie.d.ts.map +0 -1
  349. package/dist/build/route-trie.js +0 -175
  350. package/dist/build/route-trie.js.map +0 -1
  351. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  352. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  353. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  354. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  355. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  356. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  357. package/dist/cache/__tests__/document-cache.test.js +0 -345
  358. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  359. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  360. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  361. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  362. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  363. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  364. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  365. package/dist/cache/__tests__/memory-store.test.js +0 -367
  366. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  367. package/dist/cache/cache-scope.d.ts +0 -102
  368. package/dist/cache/cache-scope.d.ts.map +0 -1
  369. package/dist/cache/cache-scope.js +0 -440
  370. package/dist/cache/cache-scope.js.map +0 -1
  371. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  372. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  373. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  374. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  375. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  376. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  377. package/dist/cache/cf/cf-cache-store.js +0 -242
  378. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  379. package/dist/cache/cf/index.d.ts +0 -14
  380. package/dist/cache/cf/index.d.ts.map +0 -1
  381. package/dist/cache/cf/index.js +0 -17
  382. package/dist/cache/cf/index.js.map +0 -1
  383. package/dist/cache/document-cache.d.ts +0 -64
  384. package/dist/cache/document-cache.d.ts.map +0 -1
  385. package/dist/cache/document-cache.js +0 -228
  386. package/dist/cache/document-cache.js.map +0 -1
  387. package/dist/cache/index.d.ts +0 -19
  388. package/dist/cache/index.d.ts.map +0 -1
  389. package/dist/cache/index.js +0 -21
  390. package/dist/cache/index.js.map +0 -1
  391. package/dist/cache/memory-segment-store.d.ts +0 -110
  392. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  393. package/dist/cache/memory-segment-store.js +0 -117
  394. package/dist/cache/memory-segment-store.js.map +0 -1
  395. package/dist/cache/memory-store.d.ts +0 -41
  396. package/dist/cache/memory-store.d.ts.map +0 -1
  397. package/dist/cache/memory-store.js +0 -191
  398. package/dist/cache/memory-store.js.map +0 -1
  399. package/dist/cache/types.d.ts +0 -317
  400. package/dist/cache/types.d.ts.map +0 -1
  401. package/dist/cache/types.js +0 -12
  402. package/dist/cache/types.js.map +0 -1
  403. package/dist/client.d.ts +0 -248
  404. package/dist/client.d.ts.map +0 -1
  405. package/dist/client.js +0 -367
  406. package/dist/client.js.map +0 -1
  407. package/dist/client.rsc.d.ts +0 -26
  408. package/dist/client.rsc.d.ts.map +0 -1
  409. package/dist/client.rsc.js +0 -46
  410. package/dist/client.rsc.js.map +0 -1
  411. package/dist/component-utils.d.ts +0 -36
  412. package/dist/component-utils.d.ts.map +0 -1
  413. package/dist/component-utils.js +0 -61
  414. package/dist/component-utils.js.map +0 -1
  415. package/dist/components/DefaultDocument.d.ts +0 -13
  416. package/dist/components/DefaultDocument.d.ts.map +0 -1
  417. package/dist/components/DefaultDocument.js +0 -15
  418. package/dist/components/DefaultDocument.js.map +0 -1
  419. package/dist/debug.d.ts +0 -58
  420. package/dist/debug.d.ts.map +0 -1
  421. package/dist/debug.js +0 -157
  422. package/dist/debug.js.map +0 -1
  423. package/dist/default-error-boundary.d.ts +0 -11
  424. package/dist/default-error-boundary.d.ts.map +0 -1
  425. package/dist/default-error-boundary.js +0 -45
  426. package/dist/default-error-boundary.js.map +0 -1
  427. package/dist/deps/browser.d.ts +0 -2
  428. package/dist/deps/browser.d.ts.map +0 -1
  429. package/dist/deps/browser.js +0 -3
  430. package/dist/deps/browser.js.map +0 -1
  431. package/dist/deps/html-stream-client.d.ts +0 -2
  432. package/dist/deps/html-stream-client.d.ts.map +0 -1
  433. package/dist/deps/html-stream-client.js +0 -3
  434. package/dist/deps/html-stream-client.js.map +0 -1
  435. package/dist/deps/html-stream-server.d.ts +0 -2
  436. package/dist/deps/html-stream-server.d.ts.map +0 -1
  437. package/dist/deps/html-stream-server.js +0 -3
  438. package/dist/deps/html-stream-server.js.map +0 -1
  439. package/dist/deps/rsc.d.ts +0 -2
  440. package/dist/deps/rsc.d.ts.map +0 -1
  441. package/dist/deps/rsc.js +0 -4
  442. package/dist/deps/rsc.js.map +0 -1
  443. package/dist/deps/ssr.d.ts +0 -2
  444. package/dist/deps/ssr.d.ts.map +0 -1
  445. package/dist/deps/ssr.js +0 -3
  446. package/dist/deps/ssr.js.map +0 -1
  447. package/dist/errors.d.ts +0 -174
  448. package/dist/errors.d.ts.map +0 -1
  449. package/dist/errors.js +0 -241
  450. package/dist/errors.js.map +0 -1
  451. package/dist/handle.d.ts +0 -78
  452. package/dist/handle.d.ts.map +0 -1
  453. package/dist/handle.js +0 -82
  454. package/dist/handle.js.map +0 -1
  455. package/dist/handles/MetaTags.d.ts +0 -14
  456. package/dist/handles/MetaTags.d.ts.map +0 -1
  457. package/dist/handles/MetaTags.js +0 -136
  458. package/dist/handles/MetaTags.js.map +0 -1
  459. package/dist/handles/index.d.ts +0 -6
  460. package/dist/handles/index.d.ts.map +0 -1
  461. package/dist/handles/index.js +0 -6
  462. package/dist/handles/index.js.map +0 -1
  463. package/dist/handles/meta.d.ts +0 -39
  464. package/dist/handles/meta.d.ts.map +0 -1
  465. package/dist/handles/meta.js +0 -202
  466. package/dist/handles/meta.js.map +0 -1
  467. package/dist/host/__tests__/errors.test.d.ts +0 -2
  468. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  469. package/dist/host/__tests__/errors.test.js +0 -76
  470. package/dist/host/__tests__/errors.test.js.map +0 -1
  471. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  472. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  473. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  474. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  475. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  476. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  477. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  478. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  479. package/dist/host/__tests__/router.test.d.ts +0 -2
  480. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  481. package/dist/host/__tests__/router.test.js +0 -241
  482. package/dist/host/__tests__/router.test.js.map +0 -1
  483. package/dist/host/__tests__/testing.test.d.ts +0 -2
  484. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  485. package/dist/host/__tests__/testing.test.js +0 -64
  486. package/dist/host/__tests__/testing.test.js.map +0 -1
  487. package/dist/host/__tests__/utils.test.d.ts +0 -2
  488. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  489. package/dist/host/__tests__/utils.test.js +0 -29
  490. package/dist/host/__tests__/utils.test.js.map +0 -1
  491. package/dist/host/cookie-handler.d.ts +0 -34
  492. package/dist/host/cookie-handler.d.ts.map +0 -1
  493. package/dist/host/cookie-handler.js +0 -124
  494. package/dist/host/cookie-handler.js.map +0 -1
  495. package/dist/host/errors.d.ts +0 -56
  496. package/dist/host/errors.d.ts.map +0 -1
  497. package/dist/host/errors.js +0 -79
  498. package/dist/host/errors.js.map +0 -1
  499. package/dist/host/index.d.ts +0 -29
  500. package/dist/host/index.d.ts.map +0 -1
  501. package/dist/host/index.js +0 -32
  502. package/dist/host/index.js.map +0 -1
  503. package/dist/host/pattern-matcher.d.ts +0 -36
  504. package/dist/host/pattern-matcher.d.ts.map +0 -1
  505. package/dist/host/pattern-matcher.js +0 -172
  506. package/dist/host/pattern-matcher.js.map +0 -1
  507. package/dist/host/router.d.ts +0 -26
  508. package/dist/host/router.d.ts.map +0 -1
  509. package/dist/host/router.js +0 -218
  510. package/dist/host/router.js.map +0 -1
  511. package/dist/host/testing.d.ts +0 -36
  512. package/dist/host/testing.d.ts.map +0 -1
  513. package/dist/host/testing.js +0 -55
  514. package/dist/host/testing.js.map +0 -1
  515. package/dist/host/types.d.ts +0 -115
  516. package/dist/host/types.d.ts.map +0 -1
  517. package/dist/host/types.js +0 -7
  518. package/dist/host/types.js.map +0 -1
  519. package/dist/host/utils.d.ts +0 -21
  520. package/dist/host/utils.d.ts.map +0 -1
  521. package/dist/host/utils.js +0 -23
  522. package/dist/host/utils.js.map +0 -1
  523. package/dist/href-client.d.ts +0 -131
  524. package/dist/href-client.d.ts.map +0 -1
  525. package/dist/href-client.js +0 -64
  526. package/dist/href-client.js.map +0 -1
  527. package/dist/href-context.d.ts +0 -29
  528. package/dist/href-context.d.ts.map +0 -1
  529. package/dist/href-context.js +0 -21
  530. package/dist/href-context.js.map +0 -1
  531. package/dist/index.d.ts +0 -73
  532. package/dist/index.d.ts.map +0 -1
  533. package/dist/index.js +0 -91
  534. package/dist/index.js.map +0 -1
  535. package/dist/index.rsc.d.ts +0 -32
  536. package/dist/index.rsc.d.ts.map +0 -1
  537. package/dist/index.rsc.js +0 -40
  538. package/dist/index.rsc.js.map +0 -1
  539. package/dist/internal-debug.d.ts +0 -2
  540. package/dist/internal-debug.d.ts.map +0 -1
  541. package/dist/internal-debug.js +0 -5
  542. package/dist/internal-debug.js.map +0 -1
  543. package/dist/loader.d.ts +0 -14
  544. package/dist/loader.d.ts.map +0 -1
  545. package/dist/loader.js +0 -20
  546. package/dist/loader.js.map +0 -1
  547. package/dist/loader.rsc.d.ts +0 -19
  548. package/dist/loader.rsc.d.ts.map +0 -1
  549. package/dist/loader.rsc.js +0 -99
  550. package/dist/loader.rsc.js.map +0 -1
  551. package/dist/network-error-thrower.d.ts +0 -17
  552. package/dist/network-error-thrower.d.ts.map +0 -1
  553. package/dist/network-error-thrower.js +0 -14
  554. package/dist/network-error-thrower.js.map +0 -1
  555. package/dist/outlet-context.d.ts +0 -13
  556. package/dist/outlet-context.d.ts.map +0 -1
  557. package/dist/outlet-context.js +0 -3
  558. package/dist/outlet-context.js.map +0 -1
  559. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  560. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  561. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  562. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  563. package/dist/prerender/param-hash.d.ts +0 -16
  564. package/dist/prerender/param-hash.d.ts.map +0 -1
  565. package/dist/prerender/param-hash.js +0 -36
  566. package/dist/prerender/param-hash.js.map +0 -1
  567. package/dist/prerender/store.d.ts +0 -38
  568. package/dist/prerender/store.d.ts.map +0 -1
  569. package/dist/prerender/store.js +0 -61
  570. package/dist/prerender/store.js.map +0 -1
  571. package/dist/prerender.d.ts +0 -66
  572. package/dist/prerender.d.ts.map +0 -1
  573. package/dist/prerender.js +0 -57
  574. package/dist/prerender.js.map +0 -1
  575. package/dist/reverse.d.ts +0 -196
  576. package/dist/reverse.d.ts.map +0 -1
  577. package/dist/reverse.js +0 -78
  578. package/dist/reverse.js.map +0 -1
  579. package/dist/root-error-boundary.d.ts +0 -33
  580. package/dist/root-error-boundary.d.ts.map +0 -1
  581. package/dist/root-error-boundary.js +0 -165
  582. package/dist/root-error-boundary.js.map +0 -1
  583. package/dist/route-content-wrapper.d.ts +0 -46
  584. package/dist/route-content-wrapper.d.ts.map +0 -1
  585. package/dist/route-content-wrapper.js +0 -77
  586. package/dist/route-content-wrapper.js.map +0 -1
  587. package/dist/route-definition.d.ts +0 -421
  588. package/dist/route-definition.d.ts.map +0 -1
  589. package/dist/route-definition.js +0 -868
  590. package/dist/route-definition.js.map +0 -1
  591. package/dist/route-map-builder.d.ts +0 -155
  592. package/dist/route-map-builder.d.ts.map +0 -1
  593. package/dist/route-map-builder.js +0 -237
  594. package/dist/route-map-builder.js.map +0 -1
  595. package/dist/route-types.d.ts +0 -165
  596. package/dist/route-types.d.ts.map +0 -1
  597. package/dist/route-types.js +0 -7
  598. package/dist/route-types.js.map +0 -1
  599. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  600. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  601. package/dist/router/__tests__/handler-context.test.js +0 -65
  602. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  603. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  604. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  605. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  606. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  607. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  608. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  609. package/dist/router/__tests__/match-context.test.js +0 -92
  610. package/dist/router/__tests__/match-context.test.js.map +0 -1
  611. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  612. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  613. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  614. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  615. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  616. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  617. package/dist/router/__tests__/match-result.test.js +0 -457
  618. package/dist/router/__tests__/match-result.test.js.map +0 -1
  619. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  620. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  621. package/dist/router/__tests__/on-error.test.js +0 -678
  622. package/dist/router/__tests__/on-error.test.js.map +0 -1
  623. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  624. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  625. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  626. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  627. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  628. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  629. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  630. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  631. package/dist/router/error-handling.d.ts +0 -77
  632. package/dist/router/error-handling.d.ts.map +0 -1
  633. package/dist/router/error-handling.js +0 -202
  634. package/dist/router/error-handling.js.map +0 -1
  635. package/dist/router/handler-context.d.ts +0 -20
  636. package/dist/router/handler-context.d.ts.map +0 -1
  637. package/dist/router/handler-context.js +0 -198
  638. package/dist/router/handler-context.js.map +0 -1
  639. package/dist/router/intercept-resolution.d.ts +0 -66
  640. package/dist/router/intercept-resolution.d.ts.map +0 -1
  641. package/dist/router/intercept-resolution.js +0 -246
  642. package/dist/router/intercept-resolution.js.map +0 -1
  643. package/dist/router/loader-resolution.d.ts +0 -64
  644. package/dist/router/loader-resolution.d.ts.map +0 -1
  645. package/dist/router/loader-resolution.js +0 -284
  646. package/dist/router/loader-resolution.js.map +0 -1
  647. package/dist/router/logging.d.ts +0 -15
  648. package/dist/router/logging.d.ts.map +0 -1
  649. package/dist/router/logging.js +0 -99
  650. package/dist/router/logging.js.map +0 -1
  651. package/dist/router/manifest.d.ts +0 -22
  652. package/dist/router/manifest.d.ts.map +0 -1
  653. package/dist/router/manifest.js +0 -181
  654. package/dist/router/manifest.js.map +0 -1
  655. package/dist/router/match-api.d.ts +0 -35
  656. package/dist/router/match-api.d.ts.map +0 -1
  657. package/dist/router/match-api.js +0 -406
  658. package/dist/router/match-api.js.map +0 -1
  659. package/dist/router/match-context.d.ts +0 -206
  660. package/dist/router/match-context.d.ts.map +0 -1
  661. package/dist/router/match-context.js +0 -17
  662. package/dist/router/match-context.js.map +0 -1
  663. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  664. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  665. package/dist/router/match-middleware/background-revalidation.js +0 -75
  666. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  667. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  668. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  669. package/dist/router/match-middleware/cache-lookup.js +0 -257
  670. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  671. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  672. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  673. package/dist/router/match-middleware/cache-store.js +0 -108
  674. package/dist/router/match-middleware/cache-store.js.map +0 -1
  675. package/dist/router/match-middleware/index.d.ts +0 -81
  676. package/dist/router/match-middleware/index.d.ts.map +0 -1
  677. package/dist/router/match-middleware/index.js +0 -80
  678. package/dist/router/match-middleware/index.js.map +0 -1
  679. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  680. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  681. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  682. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  683. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  684. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  685. package/dist/router/match-middleware/segment-resolution.js +0 -53
  686. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  687. package/dist/router/match-pipelines.d.ts +0 -147
  688. package/dist/router/match-pipelines.d.ts.map +0 -1
  689. package/dist/router/match-pipelines.js +0 -82
  690. package/dist/router/match-pipelines.js.map +0 -1
  691. package/dist/router/match-result.d.ts +0 -126
  692. package/dist/router/match-result.d.ts.map +0 -1
  693. package/dist/router/match-result.js +0 -93
  694. package/dist/router/match-result.js.map +0 -1
  695. package/dist/router/metrics.d.ts +0 -20
  696. package/dist/router/metrics.d.ts.map +0 -1
  697. package/dist/router/metrics.js +0 -47
  698. package/dist/router/metrics.js.map +0 -1
  699. package/dist/router/middleware.d.ts +0 -249
  700. package/dist/router/middleware.d.ts.map +0 -1
  701. package/dist/router/middleware.js +0 -434
  702. package/dist/router/middleware.js.map +0 -1
  703. package/dist/router/middleware.test.d.ts +0 -2
  704. package/dist/router/middleware.test.d.ts.map +0 -1
  705. package/dist/router/middleware.test.js +0 -816
  706. package/dist/router/middleware.test.js.map +0 -1
  707. package/dist/router/pattern-matching.d.ts +0 -149
  708. package/dist/router/pattern-matching.d.ts.map +0 -1
  709. package/dist/router/pattern-matching.js +0 -349
  710. package/dist/router/pattern-matching.js.map +0 -1
  711. package/dist/router/revalidation.d.ts +0 -44
  712. package/dist/router/revalidation.d.ts.map +0 -1
  713. package/dist/router/revalidation.js +0 -147
  714. package/dist/router/revalidation.js.map +0 -1
  715. package/dist/router/router-context.d.ts +0 -135
  716. package/dist/router/router-context.d.ts.map +0 -1
  717. package/dist/router/router-context.js +0 -36
  718. package/dist/router/router-context.js.map +0 -1
  719. package/dist/router/segment-resolution.d.ts +0 -127
  720. package/dist/router/segment-resolution.d.ts.map +0 -1
  721. package/dist/router/segment-resolution.js +0 -919
  722. package/dist/router/segment-resolution.js.map +0 -1
  723. package/dist/router/trie-matching.d.ts +0 -40
  724. package/dist/router/trie-matching.d.ts.map +0 -1
  725. package/dist/router/trie-matching.js +0 -127
  726. package/dist/router/trie-matching.js.map +0 -1
  727. package/dist/router/types.d.ts +0 -136
  728. package/dist/router/types.d.ts.map +0 -1
  729. package/dist/router/types.js +0 -7
  730. package/dist/router/types.js.map +0 -1
  731. package/dist/router.d.ts +0 -753
  732. package/dist/router.d.ts.map +0 -1
  733. package/dist/router.gen.d.ts +0 -6
  734. package/dist/router.gen.d.ts.map +0 -1
  735. package/dist/router.gen.js +0 -6
  736. package/dist/router.gen.js.map +0 -1
  737. package/dist/router.js +0 -1304
  738. package/dist/router.js.map +0 -1
  739. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  740. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  741. package/dist/rsc/__tests__/helpers.test.js +0 -140
  742. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  743. package/dist/rsc/handler.d.ts +0 -45
  744. package/dist/rsc/handler.d.ts.map +0 -1
  745. package/dist/rsc/handler.js +0 -1172
  746. package/dist/rsc/handler.js.map +0 -1
  747. package/dist/rsc/helpers.d.ts +0 -16
  748. package/dist/rsc/helpers.d.ts.map +0 -1
  749. package/dist/rsc/helpers.js +0 -55
  750. package/dist/rsc/helpers.js.map +0 -1
  751. package/dist/rsc/index.d.ts +0 -22
  752. package/dist/rsc/index.d.ts.map +0 -1
  753. package/dist/rsc/index.js +0 -23
  754. package/dist/rsc/index.js.map +0 -1
  755. package/dist/rsc/nonce.d.ts +0 -9
  756. package/dist/rsc/nonce.d.ts.map +0 -1
  757. package/dist/rsc/nonce.js +0 -18
  758. package/dist/rsc/nonce.js.map +0 -1
  759. package/dist/rsc/types.d.ts +0 -206
  760. package/dist/rsc/types.d.ts.map +0 -1
  761. package/dist/rsc/types.js +0 -8
  762. package/dist/rsc/types.js.map +0 -1
  763. package/dist/search-params.d.ts +0 -103
  764. package/dist/search-params.d.ts.map +0 -1
  765. package/dist/search-params.js +0 -74
  766. package/dist/search-params.js.map +0 -1
  767. package/dist/segment-system.d.ts +0 -75
  768. package/dist/segment-system.d.ts.map +0 -1
  769. package/dist/segment-system.js +0 -336
  770. package/dist/segment-system.js.map +0 -1
  771. package/dist/server/context.d.ts +0 -245
  772. package/dist/server/context.d.ts.map +0 -1
  773. package/dist/server/context.js +0 -197
  774. package/dist/server/context.js.map +0 -1
  775. package/dist/server/fetchable-loader-store.d.ts +0 -18
  776. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  777. package/dist/server/fetchable-loader-store.js +0 -18
  778. package/dist/server/fetchable-loader-store.js.map +0 -1
  779. package/dist/server/handle-store.d.ts +0 -85
  780. package/dist/server/handle-store.d.ts.map +0 -1
  781. package/dist/server/handle-store.js +0 -142
  782. package/dist/server/handle-store.js.map +0 -1
  783. package/dist/server/loader-registry.d.ts +0 -55
  784. package/dist/server/loader-registry.d.ts.map +0 -1
  785. package/dist/server/loader-registry.js +0 -132
  786. package/dist/server/loader-registry.js.map +0 -1
  787. package/dist/server/request-context.d.ts +0 -226
  788. package/dist/server/request-context.d.ts.map +0 -1
  789. package/dist/server/request-context.js +0 -290
  790. package/dist/server/request-context.js.map +0 -1
  791. package/dist/server/root-layout.d.ts +0 -4
  792. package/dist/server/root-layout.d.ts.map +0 -1
  793. package/dist/server/root-layout.js +0 -5
  794. package/dist/server/root-layout.js.map +0 -1
  795. package/dist/server.d.ts +0 -15
  796. package/dist/server.d.ts.map +0 -1
  797. package/dist/server.js +0 -20
  798. package/dist/server.js.map +0 -1
  799. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  800. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  801. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  802. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  803. package/dist/ssr/index.d.ts +0 -98
  804. package/dist/ssr/index.d.ts.map +0 -1
  805. package/dist/ssr/index.js +0 -158
  806. package/dist/ssr/index.js.map +0 -1
  807. package/dist/static-handler.d.ts +0 -50
  808. package/dist/static-handler.d.ts.map +0 -1
  809. package/dist/static-handler.gen.d.ts +0 -5
  810. package/dist/static-handler.gen.d.ts.map +0 -1
  811. package/dist/static-handler.gen.js +0 -5
  812. package/dist/static-handler.gen.js.map +0 -1
  813. package/dist/static-handler.js +0 -29
  814. package/dist/static-handler.js.map +0 -1
  815. package/dist/theme/ThemeProvider.d.ts +0 -20
  816. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  817. package/dist/theme/ThemeProvider.js +0 -240
  818. package/dist/theme/ThemeProvider.js.map +0 -1
  819. package/dist/theme/ThemeScript.d.ts +0 -48
  820. package/dist/theme/ThemeScript.d.ts.map +0 -1
  821. package/dist/theme/ThemeScript.js +0 -13
  822. package/dist/theme/ThemeScript.js.map +0 -1
  823. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  824. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  825. package/dist/theme/__tests__/theme.test.js +0 -103
  826. package/dist/theme/__tests__/theme.test.js.map +0 -1
  827. package/dist/theme/constants.d.ts +0 -29
  828. package/dist/theme/constants.d.ts.map +0 -1
  829. package/dist/theme/constants.js +0 -48
  830. package/dist/theme/constants.js.map +0 -1
  831. package/dist/theme/index.d.ts +0 -31
  832. package/dist/theme/index.d.ts.map +0 -1
  833. package/dist/theme/index.js +0 -36
  834. package/dist/theme/index.js.map +0 -1
  835. package/dist/theme/theme-context.d.ts +0 -40
  836. package/dist/theme/theme-context.d.ts.map +0 -1
  837. package/dist/theme/theme-context.js +0 -60
  838. package/dist/theme/theme-context.js.map +0 -1
  839. package/dist/theme/theme-script.d.ts +0 -27
  840. package/dist/theme/theme-script.d.ts.map +0 -1
  841. package/dist/theme/theme-script.js +0 -147
  842. package/dist/theme/theme-script.js.map +0 -1
  843. package/dist/theme/types.d.ts +0 -163
  844. package/dist/theme/types.d.ts.map +0 -1
  845. package/dist/theme/types.js +0 -11
  846. package/dist/theme/types.js.map +0 -1
  847. package/dist/theme/use-theme.d.ts +0 -12
  848. package/dist/theme/use-theme.d.ts.map +0 -1
  849. package/dist/theme/use-theme.js +0 -40
  850. package/dist/theme/use-theme.js.map +0 -1
  851. package/dist/types.d.ts +0 -1479
  852. package/dist/types.d.ts.map +0 -1
  853. package/dist/types.js +0 -10
  854. package/dist/types.js.map +0 -1
  855. package/dist/urls.d.ts +0 -441
  856. package/dist/urls.d.ts.map +0 -1
  857. package/dist/urls.gen.d.ts +0 -8
  858. package/dist/urls.gen.d.ts.map +0 -1
  859. package/dist/urls.gen.js +0 -8
  860. package/dist/urls.gen.js.map +0 -1
  861. package/dist/urls.js +0 -443
  862. package/dist/urls.js.map +0 -1
  863. package/dist/use-loader.d.ts +0 -127
  864. package/dist/use-loader.d.ts.map +0 -1
  865. package/dist/use-loader.js +0 -237
  866. package/dist/use-loader.js.map +0 -1
  867. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  868. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  869. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  870. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  871. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  872. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  873. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  874. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  875. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  876. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  877. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  878. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  879. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  880. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  881. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  882. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  883. package/dist/vite/ast-handler-extract.d.ts +0 -49
  884. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  885. package/dist/vite/ast-handler-extract.js +0 -249
  886. package/dist/vite/ast-handler-extract.js.map +0 -1
  887. package/dist/vite/expose-action-id.d.ts +0 -19
  888. package/dist/vite/expose-action-id.d.ts.map +0 -1
  889. package/dist/vite/expose-action-id.js +0 -250
  890. package/dist/vite/expose-action-id.js.map +0 -1
  891. package/dist/vite/expose-id-utils.d.ts +0 -69
  892. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  893. package/dist/vite/expose-id-utils.js +0 -289
  894. package/dist/vite/expose-id-utils.js.map +0 -1
  895. package/dist/vite/expose-internal-ids.d.ts +0 -22
  896. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  897. package/dist/vite/expose-internal-ids.js +0 -886
  898. package/dist/vite/expose-internal-ids.js.map +0 -1
  899. package/dist/vite/index.d.ts +0 -149
  900. package/dist/vite/index.d.ts.map +0 -1
  901. package/dist/vite/index.js.map +0 -1
  902. package/dist/vite/index.named-routes.gen.ts +0 -103
  903. package/dist/vite/package-resolution.d.ts +0 -43
  904. package/dist/vite/package-resolution.d.ts.map +0 -1
  905. package/dist/vite/package-resolution.js +0 -112
  906. package/dist/vite/package-resolution.js.map +0 -1
  907. package/dist/vite/virtual-entries.d.ts +0 -25
  908. package/dist/vite/virtual-entries.d.ts.map +0 -1
  909. package/dist/vite/virtual-entries.js +0 -110
  910. package/dist/vite/virtual-entries.js.map +0 -1
  911. package/src/browser/debug-channel.ts +0 -93
@@ -5,6 +5,7 @@ import React, {
5
5
  useCallback,
6
6
  useContext,
7
7
  useEffect,
8
+ useMemo,
8
9
  useRef,
9
10
  type ForwardRefExoticComponent,
10
11
  type RefAttributes,
@@ -32,6 +33,7 @@ export type LinkState =
32
33
  | StateOrGetter<Record<string, unknown>>;
33
34
 
34
35
  import { prefetchDirect, prefetchQueued } from "../prefetch/fetch.js";
36
+ import { getAppVersion } from "../app-version.js";
35
37
  import {
36
38
  observeForPrefetch,
37
39
  unobserveForPrefetch,
@@ -95,6 +97,26 @@ export interface LinkProps extends Omit<
95
97
  * @default "none"
96
98
  */
97
99
  prefetch?: PrefetchStrategy;
100
+ /**
101
+ * Custom prefetch cache key for source-agnostic cache reuse.
102
+ * When set, prefetch responses are cached independently of the current
103
+ * page URL, so navigating to the same target from different source pages
104
+ * reuses the cached prefetch.
105
+ *
106
+ * - String: static group name (e.g., `"pages"`)
107
+ * - Function: receives current URL (`window.location.href`), returns a
108
+ * normalized source key
109
+ *
110
+ * @example
111
+ * ```tsx
112
+ * // Static group — all "pages" links share one cache entry per target
113
+ * <Link to="/page/3" prefetch="hover" prefetchKey="pages" />
114
+ *
115
+ * // Normalize — strip trailing page number from source URL
116
+ * <Link to="/page/3" prefetch="hover" prefetchKey={(from) => from.replace(/\/\d+$/, '')} />
117
+ * ```
118
+ */
119
+ prefetchKey?: string | ((from: string) => string);
98
120
  /**
99
121
  * State to pass to history.pushState/replaceState.
100
122
  * Accessible via useLocationState() hook.
@@ -182,6 +204,7 @@ export const Link: ForwardRefExoticComponent<
182
204
  reloadDocument = false,
183
205
  revalidate,
184
206
  prefetch = "none",
207
+ prefetchKey,
185
208
  state,
186
209
  children,
187
210
  onClick,
@@ -192,6 +215,16 @@ export const Link: ForwardRefExoticComponent<
192
215
  const ctx = useContext(NavigationStoreContext);
193
216
  const isExternal = isExternalUrl(to);
194
217
 
218
+ // Auto-prefix with basename for app-local paths.
219
+ // Skip if external, already prefixed, or not a root-relative path.
220
+ const resolvedTo = useMemo(() => {
221
+ if (isExternal) return to;
222
+ const bn = ctx?.basename;
223
+ if (!bn || !to.startsWith("/") || to.startsWith(bn + "/") || to === bn)
224
+ return to;
225
+ return to === "/" ? bn : bn + to;
226
+ }, [to, isExternal, ctx?.basename]);
227
+
195
228
  // Resolve adaptive: viewport on touch devices, hover on pointer devices
196
229
  const resolvedStrategy =
197
230
  prefetch === "adaptive" ? (isTouchDevice ? "viewport" : "hover") : prefetch;
@@ -273,9 +306,23 @@ export const Link: ForwardRefExoticComponent<
273
306
  resolvedState = currentState;
274
307
  }
275
308
 
276
- ctx.navigate(to, { replace, scroll, state: resolvedState, revalidate });
309
+ ctx.navigate(resolvedTo, {
310
+ replace,
311
+ scroll,
312
+ state: resolvedState,
313
+ revalidate,
314
+ });
277
315
  },
278
- [to, isExternal, reloadDocument, replace, scroll, revalidate, ctx, onClick],
316
+ [
317
+ resolvedTo,
318
+ isExternal,
319
+ reloadDocument,
320
+ replace,
321
+ scroll,
322
+ revalidate,
323
+ ctx,
324
+ onClick,
325
+ ],
279
326
  );
280
327
 
281
328
  const handleMouseEnter = useCallback(() => {
@@ -289,9 +336,15 @@ export const Link: ForwardRefExoticComponent<
289
336
  // prefetch — prefetchDirect bypasses the queue, and hasPrefetch
290
337
  // deduplicates if the viewport prefetch already completed.
291
338
  const segmentState = ctx.store.getSegmentState();
292
- prefetchDirect(to, segmentState.currentSegmentIds, ctx.version);
339
+ prefetchDirect(
340
+ resolvedTo,
341
+ segmentState.currentSegmentIds,
342
+ getAppVersion(),
343
+ ctx.store.getRouterId?.(),
344
+ prefetchKey,
345
+ );
293
346
  }
294
- }, [resolvedStrategy, to, isExternal, ctx]);
347
+ }, [resolvedStrategy, resolvedTo, isExternal, ctx, prefetchKey]);
295
348
 
296
349
  // Viewport/render prefetch: waits for idle before starting,
297
350
  // uses concurrency-limited queue to avoid flooding.
@@ -308,7 +361,13 @@ export const Link: ForwardRefExoticComponent<
308
361
  const triggerPrefetch = () => {
309
362
  if (cancelled) return;
310
363
  const segmentState = ctx.store.getSegmentState();
311
- prefetchQueued(to, segmentState.currentSegmentIds, ctx.version);
364
+ prefetchQueued(
365
+ resolvedTo,
366
+ segmentState.currentSegmentIds,
367
+ getAppVersion(),
368
+ ctx.store.getRouterId?.(),
369
+ prefetchKey,
370
+ );
312
371
  };
313
372
 
314
373
  // Schedule prefetch only when the app is idle (no navigation/streaming).
@@ -347,12 +406,12 @@ export const Link: ForwardRefExoticComponent<
347
406
  unobserveForPrefetch(observedElement);
348
407
  }
349
408
  };
350
- }, [resolvedStrategy, to, isExternal, ctx]);
409
+ }, [resolvedStrategy, resolvedTo, isExternal, ctx, prefetchKey]);
351
410
 
352
411
  return (
353
412
  <a
354
413
  ref={setRef}
355
- href={to}
414
+ href={resolvedTo}
356
415
  onClick={handleClick}
357
416
  onMouseEnter={handleMouseEnter}
358
417
  data-link-component
@@ -362,7 +421,7 @@ export const Link: ForwardRefExoticComponent<
362
421
  data-revalidate={revalidate === false ? "false" : undefined}
363
422
  {...props}
364
423
  >
365
- <LinkContext.Provider value={to}>{children}</LinkContext.Provider>
424
+ <LinkContext.Provider value={resolvedTo}>{children}</LinkContext.Provider>
366
425
  </a>
367
426
  );
368
427
  });
@@ -134,9 +134,14 @@ export interface NavigationProviderProps {
134
134
 
135
135
  /**
136
136
  * App version from server payload (stable, immutable).
137
- * Forwarded to prefetch requests for version mismatch detection.
137
+ * Forwarded to context for cache key building.
138
138
  */
139
139
  version?: string;
140
+
141
+ /**
142
+ * URL prefix for all routes (from createRouter({ basename })).
143
+ */
144
+ basename?: string;
140
145
  }
141
146
 
142
147
  /**
@@ -169,6 +174,7 @@ export function NavigationProvider({
169
174
  initialTheme,
170
175
  warmupEnabled,
171
176
  version,
177
+ basename,
172
178
  }: NavigationProviderProps): ReactNode {
173
179
  // Track current payload for rendering (this triggers re-renders)
174
180
  const [payload, setPayload] = useState(initialPayload);
@@ -198,6 +204,7 @@ export function NavigationProvider({
198
204
  navigate,
199
205
  refresh,
200
206
  version,
207
+ basename,
201
208
  }),
202
209
  [],
203
210
  );
@@ -43,10 +43,15 @@ export interface NavigationStoreContextValue {
43
43
  refresh: () => Promise<void>;
44
44
 
45
45
  /**
46
- * App version from server payload (stable, immutable).
47
- * Used in prefetch requests for version mismatch detection.
46
+ * App version from the initial server payload.
48
47
  */
49
48
  version: string | undefined;
49
+
50
+ /**
51
+ * URL prefix for all routes (from createRouter({ basename })).
52
+ * Used by Link and useRouter() to auto-prefix app-local paths.
53
+ */
54
+ basename: string | undefined;
50
55
  }
51
56
 
52
57
  /**
@@ -9,64 +9,11 @@ import {
9
9
  startTransition,
10
10
  } from "react";
11
11
  import type { Handle } from "../../handle.js";
12
- import { getCollectFn } from "../../handle.js";
12
+ import { collectHandleData } from "../../handle.js";
13
13
  import type { HandleData } from "../types.js";
14
14
  import { NavigationStoreContext } from "./context.js";
15
15
  import { shallowEqual } from "./shallow-equal.js";
16
16
 
17
- /**
18
- * Resolve the collect function for a handle.
19
- * Handle objects are plain { __brand, $$id } - collect is stored in the registry
20
- * (populated when createHandle runs on the client).
21
- */
22
- function resolveCollect<T, A>(handle: Handle<T, A>): (segments: T[][]) => A {
23
- // Look up collect from the registry (populated when the handle module is imported).
24
- const registered = getCollectFn(handle.$$id);
25
- if (registered) {
26
- return registered as (segments: T[][]) => A;
27
- }
28
-
29
- // Fall back to default flat collect with a dev warning.
30
- if (process.env.NODE_ENV !== "production") {
31
- console.warn(
32
- `[rsc-router] Handle "${handle.$$id}" was passed as a prop but its collect ` +
33
- `function could not be resolved. Falling back to flat array. ` +
34
- `Import the handle module in a client component to register its collect function.`,
35
- );
36
- }
37
- return ((segments: unknown[][]) => segments.flat()) as unknown as (
38
- segments: T[][],
39
- ) => A;
40
- }
41
-
42
- /**
43
- * Collect handle data from segments and transform to final value.
44
- */
45
- function collectHandle<T, A>(
46
- handle: Handle<T, A>,
47
- data: HandleData,
48
- segmentOrder: string[],
49
- ): A {
50
- const collect = resolveCollect(handle);
51
- const segmentData = data[handle.$$id];
52
-
53
- if (!segmentData) {
54
- return collect([]);
55
- }
56
-
57
- // Build array of segment arrays in parent -> child order
58
- const segmentArrays: T[][] = [];
59
- for (const segmentId of segmentOrder) {
60
- const entries = segmentData[segmentId];
61
- if (entries && entries.length > 0) {
62
- segmentArrays.push(entries as T[]);
63
- }
64
- }
65
-
66
- // Call collect once with all segment data
67
- return collect(segmentArrays);
68
- }
69
-
70
17
  /**
71
18
  * Hook to access collected handle data.
72
19
  *
@@ -99,13 +46,13 @@ export function useHandle<T, A, S>(
99
46
  // Initial state from context event controller, or empty fallback without provider.
100
47
  const [value, setValue] = useState<A | S>(() => {
101
48
  if (!ctx) {
102
- const collected = collectHandle(handle, {}, []);
49
+ const collected = collectHandleData(handle, {}, []);
103
50
  return selector ? selector(collected) : collected;
104
51
  }
105
52
 
106
53
  // On client, use event controller state
107
54
  const state = ctx.eventController.getHandleState();
108
- const collected = collectHandle(handle, state.data, state.segmentOrder);
55
+ const collected = collectHandleData(handle, state.data, state.segmentOrder);
109
56
  return selector ? selector(collected) : collected;
110
57
  });
111
58
  const [optimisticValue, setOptimisticValue] = useOptimistic(value);
@@ -125,7 +72,7 @@ export function useHandle<T, A, S>(
125
72
  // Sync current state for the (possibly new) handle so that switching
126
73
  // handles on an idle page doesn't leave stale data from the old handle.
127
74
  const currentHandleState = ctx.eventController.getHandleState();
128
- const currentCollected = collectHandle(
75
+ const currentCollected = collectHandleData(
129
76
  handle,
130
77
  currentHandleState.data,
131
78
  currentHandleState.segmentOrder,
@@ -142,7 +89,11 @@ export function useHandle<T, A, S>(
142
89
  const state = ctx.eventController.getHandleState();
143
90
  const isAction =
144
91
  ctx.eventController.getState().inflightActions.length > 0;
145
- const collected = collectHandle(handle, state.data, state.segmentOrder);
92
+ const collected = collectHandleData(
93
+ handle,
94
+ state.data,
95
+ state.segmentOrder,
96
+ );
146
97
  const nextValue = selectorRef.current
147
98
  ? selectorRef.current(collected)
148
99
  : collected;
@@ -3,6 +3,7 @@
3
3
  import { useContext, useMemo } from "react";
4
4
  import { NavigationStoreContext } from "./context.js";
5
5
  import { prefetchDirect } from "../prefetch/fetch.js";
6
+ import { getAppVersion } from "../app-version.js";
6
7
  import type { RouterInstance, RouterNavigateOptions } from "../types.js";
7
8
 
8
9
  /**
@@ -29,14 +30,22 @@ export function useRouter(): RouterInstance {
29
30
  }
30
31
 
31
32
  // Stable reference: ctx is itself stable (NavigationProvider memoizes with [])
32
- return useMemo<RouterInstance>(
33
- () => ({
33
+ return useMemo<RouterInstance>(() => {
34
+ /** Prefix a root-relative path with basename if not already prefixed. */
35
+ function withBasename(url: string): string {
36
+ const bn = ctx!.basename;
37
+ if (!bn || !url.startsWith("/") || url.startsWith(bn + "/") || url === bn)
38
+ return url;
39
+ return url === "/" ? bn : bn + url;
40
+ }
41
+
42
+ return {
34
43
  push(url: string, options?: RouterNavigateOptions): Promise<void> {
35
- return ctx.navigate(url, { ...options, replace: false });
44
+ return ctx.navigate(withBasename(url), { ...options, replace: false });
36
45
  },
37
46
 
38
47
  replace(url: string, options?: RouterNavigateOptions): Promise<void> {
39
- return ctx.navigate(url, { ...options, replace: true });
48
+ return ctx.navigate(withBasename(url), { ...options, replace: true });
40
49
  },
41
50
 
42
51
  refresh(): Promise<void> {
@@ -46,7 +55,12 @@ export function useRouter(): RouterInstance {
46
55
  prefetch(url: string): void {
47
56
  const segmentState = ctx.store?.getSegmentState();
48
57
  if (segmentState) {
49
- prefetchDirect(url, segmentState.currentSegmentIds, ctx.version);
58
+ prefetchDirect(
59
+ withBasename(url),
60
+ segmentState.currentSegmentIds,
61
+ getAppVersion(),
62
+ ctx.store?.getRouterId?.(),
63
+ );
50
64
  }
51
65
  },
52
66
 
@@ -57,7 +71,6 @@ export function useRouter(): RouterInstance {
57
71
  forward(): void {
58
72
  window.history.forward();
59
73
  },
60
- }),
61
- [],
62
- );
74
+ };
75
+ }, []);
63
76
  }
@@ -23,6 +23,7 @@ import type { EventController } from "./event-controller.js";
23
23
  import type { ResolvedThemeConfig, Theme } from "../theme/types.js";
24
24
  import { initRangoState } from "./rango-state.js";
25
25
  import { initPrefetchCache } from "./prefetch/cache.js";
26
+ import { setAppVersion } from "./app-version.js";
26
27
  import {
27
28
  isInterceptSegment,
28
29
  splitInterceptSegments,
@@ -139,7 +140,6 @@ export async function initBrowserApp(
139
140
  initialTheme,
140
141
  } = options;
141
142
 
142
- // Load initial payload from SSR-injected __FLIGHT_DATA__
143
143
  const initialPayload =
144
144
  await deps.createFromReadableStream<RscPayload>(rscStream);
145
145
 
@@ -164,6 +164,12 @@ export async function initBrowserApp(
164
164
  ...(storeOptions?.cacheSize && { cacheSize: storeOptions.cacheSize }),
165
165
  });
166
166
 
167
+ // Seed router identity from the initial SSR payload so the first
168
+ // cross-app SPA navigation can detect the app switch.
169
+ if (initialPayload.metadata?.routerId) {
170
+ store.setRouterId?.(initialPayload.metadata.routerId);
171
+ }
172
+
167
173
  // Create event controller for reactive state management
168
174
  const eventController = createEventController({
169
175
  initialLocation: new URL(window.location.href),
@@ -205,6 +211,7 @@ export async function initBrowserApp(
205
211
  // Initialize the localStorage state key for cache invalidation.
206
212
  // Uses the build version so a new deploy automatically busts all cached prefetches.
207
213
  initRangoState(version ?? "0");
214
+ setAppVersion(version);
208
215
 
209
216
  // Initialize the in-memory prefetch cache TTL from server config.
210
217
  // A value of 0 disables the cache; undefined falls back to the module default.
@@ -231,7 +238,6 @@ export async function initBrowserApp(
231
238
  deps,
232
239
  onUpdate: (update) => store.emitUpdate(update),
233
240
  renderSegments,
234
- version,
235
241
  onNavigate: (url, options) => {
236
242
  if (!navigateFn) {
237
243
  window.location.href = url;
@@ -249,7 +255,7 @@ export async function initBrowserApp(
249
255
  client,
250
256
  onUpdate: (update) => store.emitUpdate(update),
251
257
  renderSegments,
252
- version,
258
+ version: version,
253
259
  });
254
260
 
255
261
  // Connect action redirect → navigation bridge (now that both are initialized)
@@ -316,6 +322,7 @@ export async function initBrowserApp(
316
322
  segmentIds: [],
317
323
  previousUrl: store.getSegmentState().currentUrl,
318
324
  interceptSourceUrl: interceptSourceUrl || undefined,
325
+ routerId: store.getRouterId?.(),
319
326
  hmr: true,
320
327
  signal: abort.signal,
321
328
  });
@@ -329,6 +336,21 @@ export async function initBrowserApp(
329
336
  throw new Error("HMR refetch returned invalid payload");
330
337
  }
331
338
 
339
+ // Update version BEFORE rebuilding state so that
340
+ // clearHistoryCache() runs first, then the fresh segment
341
+ // cache entry we create below survives.
342
+ const newVersion = payload.metadata.version;
343
+ if (newVersion && newVersion !== version) {
344
+ console.log(
345
+ "[RSCRouter] HMR: version changed",
346
+ version,
347
+ "→",
348
+ newVersion,
349
+ "clearing caches",
350
+ );
351
+ navigationBridge.updateVersion(newVersion);
352
+ }
353
+
332
354
  if (payload.metadata?.isPartial) {
333
355
  const segments = payload.metadata.segments || [];
334
356
  const matched = payload.metadata.matched || [];
@@ -478,6 +500,7 @@ export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
478
500
  initialTheme={initialTheme}
479
501
  warmupEnabled={warmupEnabled}
480
502
  version={version}
503
+ basename={initialPayload.metadata?.basename}
481
504
  />
482
505
  );
483
506
  }
@@ -356,19 +356,18 @@ export function handleNavigationEnd(options: {
356
356
  scroll?: boolean;
357
357
  isStreaming?: () => boolean;
358
358
  }): void {
359
- if (!initialized) {
360
- return;
361
- }
362
-
363
359
  const { restore = false, scroll = true, isStreaming } = options;
364
360
 
365
- // Don't scroll if explicitly disabled
366
- if (scroll === false) {
361
+ // Don't scroll if explicitly disabled or not in a browser
362
+ if (scroll === false || typeof window === "undefined") {
367
363
  return;
368
364
  }
369
365
 
370
- // For back/forward (restore), try to restore saved position
371
- if (restore) {
366
+ // Save/restore requires initialization (sessionStorage, history state).
367
+ // But basic scroll-to-top and hash scrolling work without it — this
368
+ // matters during cross-app navigation where ScrollRestoration unmounts
369
+ // and remounts, creating a brief window where initialized is false.
370
+ if (restore && initialized) {
372
371
  if (restoreScrollPosition({ retryIfStreaming: true, isStreaming })) {
373
372
  return;
374
373
  }
@@ -378,6 +377,9 @@ export function handleNavigationEnd(options: {
378
377
  // Defer hash and scroll-to-top to after React paints the new content,
379
378
  // so the user doesn't see the current page jump before the new route appears.
380
379
  deferToNextPaint(() => {
380
+ // Re-check: the deferred callback may fire after environment teardown
381
+ if (typeof window === "undefined") return;
382
+
381
383
  // Try hash scrolling first
382
384
  if (scrollToHash()) {
383
385
  return;
@@ -6,6 +6,7 @@ import {
6
6
  } from "./merge-segment-loaders.js";
7
7
  import { assertSegmentStructure } from "./segment-structure-assert.js";
8
8
  import { splitInterceptSegments } from "./intercept-utils.js";
9
+ import { debugLog } from "./logging.js";
9
10
 
10
11
  /**
11
12
  * Determines the merging behavior for segment reconciliation.
@@ -85,14 +86,29 @@ export function reconcileSegments(input: ReconcileInput): ReconcileResult {
85
86
  const cachedSegments = new Map<string, ResolvedSegment>();
86
87
  input.cachedSegments.forEach((s) => cachedSegments.set(s.id, s));
87
88
 
89
+ const diffSet = new Set(diff);
90
+ debugLog(
91
+ `[reconcile] actor=${actor}, matched=${matched.length}, diff=${diff.length}`,
92
+ );
93
+ debugLog(
94
+ `[reconcile] server segments: ${[...serverSegments.keys()].join(", ")}`,
95
+ );
96
+ debugLog(
97
+ `[reconcile] cached segments: ${[...cachedSegments.keys()].join(", ")}`,
98
+ );
99
+
88
100
  const segments = matched
89
101
  .map((segId: string) => {
90
102
  const fromServer = serverSegments.get(segId);
91
103
  const fromCache = cachedSegments.get(segId);
92
104
 
93
105
  if (fromServer) {
106
+ const inDiff = diffSet.has(segId);
94
107
  // Merge partial loader data when server returns fewer loaders than cached
95
108
  if (shouldMergeLoaders && needsLoaderMerge(fromServer, fromCache)) {
109
+ debugLog(
110
+ `[reconcile] ${segId}: MERGE loaders (server partial, ${inDiff ? "in diff" : "not in diff"})`,
111
+ );
96
112
  return mergeSegmentLoaders(fromServer, fromCache);
97
113
  }
98
114
 
@@ -143,8 +159,14 @@ export function reconcileSegments(input: ReconcileInput): ReconcileResult {
143
159
  // above fails to preserve a value it should have.
144
160
  assertSegmentStructure(fromCache, merged, context);
145
161
 
162
+ debugLog(
163
+ `[reconcile] ${segId}: SERVER+CACHE merge (${inDiff ? "in diff" : "not in diff"}, type=${fromServer.type}, component=${fromServer.component === null ? "null→cached" : "server"})`,
164
+ );
146
165
  return merged;
147
166
  }
167
+ debugLog(
168
+ `[reconcile] ${segId}: SERVER only (${inDiff ? "in diff" : "not in diff"}, type=${fromServer.type}, no cache entry)`,
169
+ );
148
170
  return fromServer;
149
171
  }
150
172
 
@@ -158,6 +180,10 @@ export function reconcileSegments(input: ReconcileInput): ReconcileResult {
158
180
  return fromCache;
159
181
  }
160
182
 
183
+ debugLog(
184
+ `[reconcile] ${segId}: CACHE only (not from server, type=${fromCache.type}, component=${fromCache.component != null ? "yes" : "null"})`,
185
+ );
186
+
161
187
  // For non-action actors: cached segments the server decided not to re-render.
162
188
  // - Preserve loading=false (suppressed boundary) to maintain tree structure
163
189
  // - Preserve parallel segment loading so renderSegments can reconstruct
@@ -4,8 +4,6 @@ import type {
4
4
  RscPayload,
5
5
  } from "./types.js";
6
6
  import { createPartialUpdater } from "./partial-update.js";
7
- import { createClientDebugChannel, DEBUG_ID_HEADER } from "./debug-channel.js";
8
- import { findSourceMapURL } from "../deps/browser.js";
9
7
  import { createNavigationTransaction } from "./navigation-transaction.js";
10
8
  import {
11
9
  reconcileSegments,
@@ -31,6 +29,7 @@ import {
31
29
  } from "./response-adapter.js";
32
30
  import { mergeLocationState } from "./history-state.js";
33
31
  import { classifyActionOutcome } from "./action-coordinator.js";
32
+ import { getAppVersion } from "./app-version.js";
34
33
 
35
34
  // Polyfill Symbol.dispose/asyncDispose for Safari and older browsers
36
35
  if (typeof Symbol.dispose === "undefined") {
@@ -45,8 +44,6 @@ if (typeof Symbol.asyncDispose === "undefined") {
45
44
  */
46
45
  export interface ServerActionBridgeConfigWithController extends ServerActionBridgeConfig {
47
46
  eventController: EventController;
48
- /** RSC version from initial payload metadata */
49
- version?: string;
50
47
  /** Callback to trigger SPA navigation (for action redirects) */
51
48
  onNavigate?: (
52
49
  url: string,
@@ -77,7 +74,6 @@ export function createServerActionBridge(
77
74
  deps,
78
75
  onUpdate,
79
76
  renderSegments,
80
- version,
81
77
  onNavigate,
82
78
  } = config;
83
79
 
@@ -88,7 +84,7 @@ export function createServerActionBridge(
88
84
  client,
89
85
  onUpdate,
90
86
  renderSegments,
91
- version,
87
+ getVersion: getAppVersion,
92
88
  });
93
89
 
94
90
  /**
@@ -167,9 +163,15 @@ export function createServerActionBridge(
167
163
  segmentState.currentSegmentIds.join(","),
168
164
  );
169
165
  // Add version param for version mismatch detection
166
+ const version = getAppVersion();
170
167
  if (version) {
171
168
  url.searchParams.set("_rsc_v", version);
172
169
  }
170
+ // Add router ID for app switch detection
171
+ const rid = store.getRouterId?.();
172
+ if (rid) {
173
+ url.searchParams.set("_rsc_rid", rid);
174
+ }
173
175
 
174
176
  // Encode arguments
175
177
  const encodedBody = await deps.encodeReply(args, { temporaryReferences });
@@ -201,14 +203,6 @@ export function createServerActionBridge(
201
203
  const onHandleAbort = () => fetchAbort.abort();
202
204
  handle.signal.addEventListener("abort", onHandleAbort, { once: true });
203
205
 
204
- // Dev-only: create debug channel for React Performance Tracks
205
- const debugId = (import.meta as any).hot
206
- ? crypto.randomUUID()
207
- : undefined;
208
- const debugChannel = debugId
209
- ? createClientDebugChannel(debugId)
210
- : undefined;
211
-
212
206
  // Send action request with stream tracking
213
207
  const responsePromise = fetch(url, {
214
208
  method: "POST",
@@ -216,11 +210,9 @@ export function createServerActionBridge(
216
210
  "rsc-action": id,
217
211
  "X-RSC-Router-Client-Path": segmentState.currentUrl,
218
212
  ...(tx && { "X-RSC-Router-Request-Id": tx.requestId }),
219
- // Send intercept source URL so server can maintain intercept context
220
213
  ...(interceptSourceUrl && {
221
214
  "X-RSC-Router-Intercept-Source": interceptSourceUrl,
222
215
  }),
223
- ...(debugId && { [DEBUG_ID_HEADER]: debugId }),
224
216
  },
225
217
  body: encodedBody,
226
218
  signal: fetchAbort.signal,
@@ -283,7 +275,6 @@ export function createServerActionBridge(
283
275
  try {
284
276
  payload = await deps.createFromFetch<RscPayload>(responsePromise, {
285
277
  temporaryReferences,
286
- ...(debugChannel && { debugChannel, findSourceMapURL }),
287
278
  });
288
279
  } catch (error) {
289
280
  // Clean up streaming token on error (may be null if fetch failed before .then() ran)
@@ -321,7 +312,6 @@ export function createServerActionBridge(
321
312
  matchedCount: payload.metadata?.matched?.length ?? 0,
322
313
  diffCount: payload.metadata?.diff?.length ?? 0,
323
314
  });
324
-
325
315
  // Guard: if the action was aborted while streaming (e.g., user navigated
326
316
  // away or abortAllActions fired), bail out before any reconcile/render/cache
327
317
  // writes to avoid overwriting the current UI with stale action results.