@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
@@ -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)
@@ -263,71 +269,139 @@ export async function initBrowserApp(
263
269
  // Build initial tree with rootLayout
264
270
  const initialTree = renderSegments(initialPayload.metadata!.segments);
265
271
 
266
- // Setup HMR
272
+ // Setup HMR with debounce — burst saves (format-on-save, rapid edits)
273
+ // fire many rsc:update events in quick succession. Without debouncing,
274
+ // each event triggers a fetchPartial() which on slow routes can pile up
275
+ // and overwhelm the worker (cross-request promise issues, 500s).
267
276
  if (import.meta.hot) {
268
- import.meta.hot.on("rsc:update", async () => {
269
- console.log("[RSCRouter] HMR: Server update, refetching RSC");
270
-
271
- const handle = eventController.startNavigation(window.location.href, {
272
- replace: true,
273
- });
274
- const streamingToken = handle.startStreaming();
275
-
276
- const interceptSourceUrl = store.getInterceptSourceUrl();
277
-
278
- try {
279
- const { payload, streamComplete } = await client.fetchPartial({
280
- targetUrl: window.location.href,
281
- segmentIds: [],
282
- previousUrl: store.getSegmentState().currentUrl,
283
- interceptSourceUrl: interceptSourceUrl || undefined,
284
- hmr: true,
277
+ let hmrTimer: ReturnType<typeof setTimeout> | null = null;
278
+ let hmrAbort: AbortController | null = null;
279
+
280
+ import.meta.hot.on("rsc:update", () => {
281
+ // Cancel any pending debounce timer
282
+ if (hmrTimer !== null) {
283
+ clearTimeout(hmrTimer);
284
+ }
285
+
286
+ // Abort any in-flight HMR fetch so it doesn't race with the next one
287
+ if (hmrAbort) {
288
+ hmrAbort.abort();
289
+ hmrAbort = null;
290
+ }
291
+
292
+ // Debounce: wait 200ms of quiet before fetching
293
+ hmrTimer = setTimeout(async () => {
294
+ hmrTimer = null;
295
+
296
+ // Don't interrupt an active user navigation — startNavigation()
297
+ // would abort it and refetch the old URL (window.location.href
298
+ // hasn't updated yet). The user's navigation will pick up the
299
+ // new server code when it completes. isNavigating covers the
300
+ // full lifecycle (fetching + streaming, before commit) without
301
+ // blocking on server actions.
302
+ if (eventController.getState().isNavigating) {
303
+ console.log("[RSCRouter] HMR: Skipping — navigation in progress");
304
+ return;
305
+ }
306
+
307
+ console.log("[RSCRouter] HMR: Server update, refetching RSC");
308
+
309
+ const abort = new AbortController();
310
+ hmrAbort = abort;
311
+
312
+ const handle = eventController.startNavigation(window.location.href, {
313
+ replace: true,
285
314
  });
315
+ const streamingToken = handle.startStreaming();
316
+
317
+ const interceptSourceUrl = store.getInterceptSourceUrl();
318
+
319
+ try {
320
+ const { payload, streamComplete } = await client.fetchPartial({
321
+ targetUrl: window.location.href,
322
+ segmentIds: [],
323
+ previousUrl: store.getSegmentState().currentUrl,
324
+ interceptSourceUrl: interceptSourceUrl || undefined,
325
+ routerId: store.getRouterId?.(),
326
+ hmr: true,
327
+ signal: abort.signal,
328
+ });
286
329
 
287
- if (payload.metadata?.isPartial) {
288
- const segments = payload.metadata.segments || [];
289
- const matched = payload.metadata.matched || [];
330
+ if (abort.signal.aborted) return;
290
331
 
291
- // Derive intercept state from the returned payload, not the
292
- // pre-fetch store snapshot. If the HMR edit removed intercept
293
- // behavior, the response won't contain intercept segments.
294
- const responseIsIntercept = segments.some(isInterceptSegment);
332
+ // If the server returned a non-RSC response (404, 500 without
333
+ // error boundary), the payload won't have valid metadata.
334
+ // Reload to recover rather than leaving the page stale.
335
+ if (!payload.metadata) {
336
+ throw new Error("HMR refetch returned invalid payload");
337
+ }
295
338
 
296
- // Sync store intercept state with what the server returned
297
- if (!responseIsIntercept && interceptSourceUrl) {
298
- store.setInterceptSourceUrl(null);
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);
299
352
  }
300
353
 
301
- store.setSegmentIds(matched);
302
- store.setCurrentUrl(window.location.href);
354
+ if (payload.metadata?.isPartial) {
355
+ const segments = payload.metadata.segments || [];
356
+ const matched = payload.metadata.matched || [];
357
+
358
+ // Derive intercept state from the returned payload, not the
359
+ // pre-fetch store snapshot. If the HMR edit removed intercept
360
+ // behavior, the response won't contain intercept segments.
361
+ const responseIsIntercept = segments.some(isInterceptSegment);
362
+
363
+ // Sync store intercept state with what the server returned
364
+ if (!responseIsIntercept && interceptSourceUrl) {
365
+ store.setInterceptSourceUrl(null);
366
+ }
367
+
368
+ store.setSegmentIds(matched);
369
+ store.setCurrentUrl(window.location.href);
370
+
371
+ const historyKey = generateHistoryKey(window.location.href, {
372
+ intercept: responseIsIntercept,
373
+ });
374
+ store.setHistoryKey(historyKey);
375
+ const currentHandleData = eventController.getHandleState().data;
376
+ store.cacheSegmentsForHistory(
377
+ historyKey,
378
+ segments,
379
+ currentHandleData,
380
+ );
381
+
382
+ const { main, intercept } = splitInterceptSegments(segments);
383
+ store.emitUpdate({
384
+ root: renderSegments(main, {
385
+ interceptSegments: intercept.length > 0 ? intercept : undefined,
386
+ }),
387
+ metadata: payload.metadata,
388
+ });
389
+ }
303
390
 
304
- const historyKey = generateHistoryKey(window.location.href, {
305
- intercept: responseIsIntercept,
306
- });
307
- store.setHistoryKey(historyKey);
308
- const currentHandleData = eventController.getHandleState().data;
309
- store.cacheSegmentsForHistory(
310
- historyKey,
311
- segments,
312
- currentHandleData,
313
- );
314
-
315
- const { main, intercept } = splitInterceptSegments(segments);
316
- store.emitUpdate({
317
- root: renderSegments(main, {
318
- interceptSegments: intercept.length > 0 ? intercept : undefined,
319
- }),
320
- metadata: payload.metadata,
321
- });
391
+ await streamComplete;
392
+ handle.complete(new URL(window.location.href));
393
+ console.log("[RSCRouter] HMR: RSC stream complete");
394
+ } catch (err) {
395
+ if (abort.signal.aborted) return;
396
+ console.warn("[RSCRouter] HMR: Refetch failed, reloading page", err);
397
+ window.location.reload();
398
+ return;
399
+ } finally {
400
+ if (hmrAbort === abort) hmrAbort = null;
401
+ streamingToken.end();
402
+ handle[Symbol.dispose]();
322
403
  }
323
-
324
- await streamComplete;
325
- handle.complete(new URL(window.location.href));
326
- console.log("[RSCRouter] HMR: RSC stream complete");
327
- } finally {
328
- streamingToken.end();
329
- handle[Symbol.dispose]();
330
- }
404
+ }, 200);
331
405
  });
332
406
  }
333
407
 
@@ -426,6 +500,7 @@ export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
426
500
  initialTheme={initialTheme}
427
501
  warmupEnabled={warmupEnabled}
428
502
  version={version}
503
+ basename={initialPayload.metadata?.basename}
429
504
  />
430
505
  );
431
506
  }
@@ -10,6 +10,15 @@
10
10
 
11
11
  import { debugLog } from "./logging.js";
12
12
 
13
+ /**
14
+ * Defers a callback to the next animation frame.
15
+ * Falls back to setTimeout(0) in environments without requestAnimationFrame.
16
+ */
17
+ const deferToNextPaint: (fn: () => void) => void =
18
+ typeof requestAnimationFrame === "function"
19
+ ? requestAnimationFrame
20
+ : (fn) => setTimeout(fn, 0);
21
+
13
22
  const SCROLL_STORAGE_KEY = "rsc-router-scroll-positions";
14
23
 
15
24
  /**
@@ -288,11 +297,7 @@ export function restoreScrollPosition(options?: {
288
297
  // Not streaming — scroll after React commits and browser paints.
289
298
  // startTransition defers the DOM commit, so scrolling synchronously
290
299
  // would be overwritten when React replaces the content.
291
- const defer =
292
- typeof requestAnimationFrame === "function"
293
- ? requestAnimationFrame
294
- : (fn: () => void) => setTimeout(fn, 0);
295
- defer(() => {
300
+ deferToNextPaint(() => {
296
301
  window.scrollTo(0, savedY);
297
302
  debugLog("[Scroll] Restored position:", savedY, "for key:", key);
298
303
  });
@@ -351,19 +356,18 @@ export function handleNavigationEnd(options: {
351
356
  scroll?: boolean;
352
357
  isStreaming?: () => boolean;
353
358
  }): void {
354
- if (!initialized) {
355
- return;
356
- }
357
-
358
359
  const { restore = false, scroll = true, isStreaming } = options;
359
360
 
360
- // Don't scroll if explicitly disabled
361
- if (scroll === false) {
361
+ // Don't scroll if explicitly disabled or not in a browser
362
+ if (scroll === false || typeof window === "undefined") {
362
363
  return;
363
364
  }
364
365
 
365
- // For back/forward (restore), try to restore saved position
366
- 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) {
367
371
  if (restoreScrollPosition({ retryIfStreaming: true, isStreaming })) {
368
372
  return;
369
373
  }
@@ -372,11 +376,10 @@ export function handleNavigationEnd(options: {
372
376
 
373
377
  // Defer hash and scroll-to-top to after React paints the new content,
374
378
  // so the user doesn't see the current page jump before the new route appears.
375
- const defer =
376
- typeof requestAnimationFrame === "function"
377
- ? requestAnimationFrame
378
- : (fn: () => void) => setTimeout(fn, 0);
379
- defer(() => {
379
+ deferToNextPaint(() => {
380
+ // Re-check: the deferred callback may fire after environment teardown
381
+ if (typeof window === "undefined") return;
382
+
380
383
  // Try hash scrolling first
381
384
  if (scrollToHash()) {
382
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,10 +180,19 @@ 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
- // - Clear truthy loading (active skeleton) to prevent suspense on cached content
189
+ // - Preserve parallel segment loading so renderSegments can reconstruct
190
+ // parallel-owned loader markers from the cached slot metadata
191
+ // - Clear other truthy loading values to prevent suspense on cached content
164
192
  if (actor !== "action") {
193
+ if (fromCache.type === "parallel" && fromCache.loading !== undefined) {
194
+ return fromCache;
195
+ }
165
196
  if (fromCache.loading !== undefined && fromCache.loading !== false) {
166
197
  return { ...fromCache, loading: undefined };
167
198
  }
@@ -29,6 +29,7 @@ import {
29
29
  } from "./response-adapter.js";
30
30
  import { mergeLocationState } from "./history-state.js";
31
31
  import { classifyActionOutcome } from "./action-coordinator.js";
32
+ import { getAppVersion } from "./app-version.js";
32
33
 
33
34
  // Polyfill Symbol.dispose/asyncDispose for Safari and older browsers
34
35
  if (typeof Symbol.dispose === "undefined") {
@@ -43,8 +44,6 @@ if (typeof Symbol.asyncDispose === "undefined") {
43
44
  */
44
45
  export interface ServerActionBridgeConfigWithController extends ServerActionBridgeConfig {
45
46
  eventController: EventController;
46
- /** RSC version from initial payload metadata */
47
- version?: string;
48
47
  /** Callback to trigger SPA navigation (for action redirects) */
49
48
  onNavigate?: (
50
49
  url: string,
@@ -75,7 +74,6 @@ export function createServerActionBridge(
75
74
  deps,
76
75
  onUpdate,
77
76
  renderSegments,
78
- version,
79
77
  onNavigate,
80
78
  } = config;
81
79
 
@@ -86,7 +84,7 @@ export function createServerActionBridge(
86
84
  client,
87
85
  onUpdate,
88
86
  renderSegments,
89
- version,
87
+ getVersion: getAppVersion,
90
88
  });
91
89
 
92
90
  /**
@@ -165,9 +163,15 @@ export function createServerActionBridge(
165
163
  segmentState.currentSegmentIds.join(","),
166
164
  );
167
165
  // Add version param for version mismatch detection
166
+ const version = getAppVersion();
168
167
  if (version) {
169
168
  url.searchParams.set("_rsc_v", version);
170
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
+ }
171
175
 
172
176
  // Encode arguments
173
177
  const encodedBody = await deps.encodeReply(args, { temporaryReferences });
@@ -206,7 +210,6 @@ export function createServerActionBridge(
206
210
  "rsc-action": id,
207
211
  "X-RSC-Router-Client-Path": segmentState.currentUrl,
208
212
  ...(tx && { "X-RSC-Router-Request-Id": tx.requestId }),
209
- // Send intercept source URL so server can maintain intercept context
210
213
  ...(interceptSourceUrl && {
211
214
  "X-RSC-Router-Intercept-Source": interceptSourceUrl,
212
215
  }),
@@ -309,7 +312,6 @@ export function createServerActionBridge(
309
312
  matchedCount: payload.metadata?.matched?.length ?? 0,
310
313
  diffCount: payload.metadata?.diff?.length ?? 0,
311
314
  });
312
-
313
315
  // Guard: if the action was aborted while streaming (e.g., user navigated
314
316
  // away or abortAllActions fired), bail out before any reconcile/render/cache
315
317
  // writes to avoid overwriting the current UI with stale action results.
@@ -32,6 +32,9 @@ export type HandleData = Record<string, Record<string, unknown[]>>;
32
32
  export interface RscMetadata {
33
33
  pathname: string;
34
34
  segments: ResolvedSegment[];
35
+ /** Router instance ID. When this changes between navigations, the client
36
+ * forces a full tree replacement (app switch via host router). */
37
+ routerId?: string;
35
38
  isPartial?: boolean;
36
39
  isError?: boolean;
37
40
  matched?: string[];
@@ -70,6 +73,8 @@ export interface RscMetadata {
70
73
  * Included when theme is enabled in router config.
71
74
  */
72
75
  initialTheme?: Theme;
76
+ /** URL prefix for all routes (from createRouter({ basename })). */
77
+ basename?: string;
73
78
  /** Whether connection warmup is enabled */
74
79
  warmupEnabled?: boolean;
75
80
  /** Server-side redirect with optional state (for partial requests) */
@@ -215,6 +220,15 @@ export interface SegmentState {
215
220
  export interface NavigationUpdate {
216
221
  root: ReactNode | Promise<ReactNode>;
217
222
  metadata: RscMetadata;
223
+ /** Scroll behavior to apply after React commits this update */
224
+ scroll?: {
225
+ /** For back/forward: restore saved position */
226
+ restore?: boolean;
227
+ /** Set to false to disable scrolling entirely */
228
+ enabled?: boolean;
229
+ /** Function to check if streaming is in progress */
230
+ isStreaming?: () => boolean;
231
+ };
218
232
  }
219
233
 
220
234
  /**
@@ -332,7 +346,13 @@ export type ReadonlyURLSearchParams = Omit<
332
346
  export interface RscBrowserDependencies {
333
347
  createFromFetch: <T>(
334
348
  response: Promise<Response>,
335
- options?: { temporaryReferences?: any },
349
+ options?: {
350
+ temporaryReferences?: any;
351
+ findSourceMapURL?: (
352
+ filename: string,
353
+ environmentName: string,
354
+ ) => string | null;
355
+ },
336
356
  ) => Promise<T>;
337
357
  createFromReadableStream: <T>(stream: ReadableStream) => Promise<T>;
338
358
  encodeReply: (
@@ -394,10 +414,13 @@ export interface NavigationStore {
394
414
  segments: ResolvedSegment[],
395
415
  handleData?: HandleData,
396
416
  ): void;
397
- getCachedSegments(
398
- historyKey: string,
399
- ):
400
- | { segments: ResolvedSegment[]; stale: boolean; handleData?: HandleData }
417
+ getCachedSegments(historyKey: string):
418
+ | {
419
+ segments: ResolvedSegment[];
420
+ stale: boolean;
421
+ handleData?: HandleData;
422
+ routerId?: string;
423
+ }
401
424
  | undefined;
402
425
  hasHistoryCache(historyKey: string): boolean;
403
426
  updateCacheHandleData(historyKey: string, handleData: HandleData): void;
@@ -413,6 +436,10 @@ export interface NavigationStore {
413
436
  getInterceptSourceUrl(): string | null;
414
437
  setInterceptSourceUrl(url: string | null): void;
415
438
 
439
+ // Router identity tracking (for cross-app navigation detection)
440
+ getRouterId?(): string | undefined;
441
+ setRouterId?(id: string): void;
442
+
416
443
  // UI update notifications
417
444
  onUpdate(callback: UpdateSubscriber): () => void;
418
445
  emitUpdate(update: NavigationUpdate): void;
@@ -443,6 +470,8 @@ export interface FetchPartialOptions {
443
470
  interceptSourceUrl?: string;
444
471
  /** RSC version for cache invalidation detection */
445
472
  version?: string;
473
+ /** Current router ID — server detects app switch and returns full response */
474
+ routerId?: string;
446
475
  /** If true, this is an HMR refetch - server should invalidate manifest cache */
447
476
  hmr?: boolean;
448
477
  }
@@ -511,6 +540,8 @@ export interface NavigationBridge {
511
540
  refresh(): Promise<void>;
512
541
  handlePopstate(): Promise<void>;
513
542
  registerLinkInterception(): () => void;
543
+ /** Update the RSC version (e.g. after HMR). Clears prefetch cache. */
544
+ updateVersion(newVersion: string): void;
514
545
  }
515
546
 
516
547
  /**
@@ -45,7 +45,7 @@ export interface GeneratedManifest {
45
45
  routeTrailingSlash?: Record<string, string>;
46
46
  /** Route names using Prerender (for dev-mode Node.js delegation) */
47
47
  prerenderRoutes?: string[];
48
- /** Route names with passthrough: true (handler kept in bundle for live fallback) */
48
+ /** Route names wrapped with Passthrough() (live handler for runtime fallback) */
49
49
  passthroughRoutes?: string[];
50
50
  /** Route name → response type for non-RSC routes */
51
51
  responseTypeRoutes?: Record<string, string>;
@@ -150,10 +150,7 @@ function buildPrefixTreeNode(
150
150
  if (prerenderDefs && entry.prerenderDef) {
151
151
  prerenderDefs[name] = entry.prerenderDef;
152
152
  }
153
- if (
154
- passthroughRoutes &&
155
- entry.prerenderDef?.options?.passthrough === true
156
- ) {
153
+ if (passthroughRoutes && entry.isPassthrough === true) {
157
154
  passthroughRoutes.push(name);
158
155
  }
159
156
  }
@@ -285,6 +282,7 @@ export function generateManifest<TEnv>(
285
282
  export function generateManifestFull<TEnv>(
286
283
  urlpatterns: UrlPatterns<TEnv, any>,
287
284
  mountIndex: number = 0,
285
+ options?: { urlPrefix?: string },
288
286
  ): FullManifest {
289
287
  const routeManifest: Record<string, string> = {};
290
288
  const routeAncestry: Record<string, string[]> = {};
@@ -310,6 +308,8 @@ export function generateManifestFull<TEnv>(
310
308
  counters: {},
311
309
  mountIndex,
312
310
  trackedIncludes, // Enable include tracking
311
+ // basename sets the initial URL prefix for all path() registrations
312
+ ...(options?.urlPrefix ? { urlPrefix: options.urlPrefix } : {}),
313
313
  },
314
314
  () => {
315
315
  const helpers = createRouteHelpers();
@@ -347,7 +347,7 @@ export function generateManifestFull<TEnv>(
347
347
  if (entry.prerenderDef) {
348
348
  prerenderDefs[name] = entry.prerenderDef;
349
349
  }
350
- if (entry.prerenderDef?.options?.passthrough === true) {
350
+ if (entry.isPassthrough === true) {
351
351
  passthroughRoutes.push(name);
352
352
  }
353
353
  }
@@ -25,6 +25,9 @@ export {
25
25
  } from "./route-types/include-resolution.js";
26
26
  export {
27
27
  extractUrlsVariableFromRouter,
28
+ extractUrlsFromRouter,
29
+ extractBasenameFromRouter,
30
+ type UrlsExtractionResult,
28
31
  buildCombinedRouteMapForRouterFile,
29
32
  detectUnresolvableIncludes,
30
33
  detectUnresolvableIncludesForUrlsFile,
@@ -357,12 +357,17 @@ function buildRouteMapFromBlock(
357
357
  /**
358
358
  * Build route map and search schemas together.
359
359
  * Internal helper used by the include resolution path.
360
+ *
361
+ * @param inlineBlock - Optional pre-extracted code block (e.g. from an inline
362
+ * builder function). When provided, variableName is ignored and the block
363
+ * is parsed directly for path()/include() calls.
360
364
  */
361
365
  export function buildCombinedRouteMapWithSearch(
362
366
  filePath: string,
363
367
  variableName?: string,
364
368
  visited?: Set<string>,
365
369
  diagnosticsOut?: UnresolvableInclude[],
370
+ inlineBlock?: string,
366
371
  ): {
367
372
  routes: Record<string, string>;
368
373
  searchSchemas: Record<string, Record<string, string>>;
@@ -384,7 +389,9 @@ export function buildCombinedRouteMapWithSearch(
384
389
  }
385
390
 
386
391
  let block: string;
387
- if (variableName) {
392
+ if (inlineBlock) {
393
+ block = inlineBlock;
394
+ } else if (variableName) {
388
395
  const extracted = extractUrlsBlockForVariable(source, variableName);
389
396
  if (!extracted) return { routes: {}, searchSchemas: {} };
390
397
  block = extracted;