@rangojs/router 0.0.0-experimental.9c87b9aa → 0.0.0-experimental.9eb4192e

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 (956) hide show
  1. package/README.md +126 -38
  2. package/dist/bin/rango.js +130 -47
  3. package/dist/vite/index.js +1537 -505
  4. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  5. package/package.json +7 -5
  6. package/skills/breadcrumbs/SKILL.md +3 -1
  7. package/skills/handler-use/SKILL.md +362 -0
  8. package/skills/hooks/SKILL.md +28 -20
  9. package/skills/intercept/SKILL.md +20 -0
  10. package/skills/layout/SKILL.md +22 -0
  11. package/skills/links/SKILL.md +91 -17
  12. package/skills/loader/SKILL.md +36 -3
  13. package/skills/middleware/SKILL.md +34 -3
  14. package/skills/migrate-nextjs/SKILL.md +560 -0
  15. package/skills/migrate-react-router/SKILL.md +765 -0
  16. package/skills/parallel/SKILL.md +59 -0
  17. package/skills/prerender/SKILL.md +110 -68
  18. package/skills/rango/SKILL.md +24 -22
  19. package/skills/response-routes/SKILL.md +8 -0
  20. package/skills/route/SKILL.md +24 -0
  21. package/skills/router-setup/SKILL.md +87 -2
  22. package/skills/streams-and-websockets/SKILL.md +283 -0
  23. package/skills/typesafety/SKILL.md +3 -1
  24. package/src/__internal.ts +1 -1
  25. package/src/browser/app-shell.ts +52 -0
  26. package/src/browser/app-version.ts +14 -0
  27. package/src/browser/navigation-bridge.ts +87 -6
  28. package/src/browser/navigation-client.ts +128 -53
  29. package/src/browser/navigation-store.ts +68 -9
  30. package/src/browser/partial-update.ts +60 -7
  31. package/src/browser/prefetch/cache.ts +129 -21
  32. package/src/browser/prefetch/fetch.ts +156 -18
  33. package/src/browser/prefetch/queue.ts +36 -5
  34. package/src/browser/rango-state.ts +53 -13
  35. package/src/browser/react/Link.tsx +72 -8
  36. package/src/browser/react/NavigationProvider.tsx +61 -13
  37. package/src/browser/react/context.ts +7 -2
  38. package/src/browser/react/use-handle.ts +9 -58
  39. package/src/browser/react/use-navigation.ts +22 -2
  40. package/src/browser/react/use-params.ts +11 -1
  41. package/src/browser/react/use-router.ts +29 -9
  42. package/src/browser/rsc-router.tsx +60 -9
  43. package/src/browser/scroll-restoration.ts +10 -8
  44. package/src/browser/segment-reconciler.ts +36 -14
  45. package/src/browser/server-action-bridge.ts +8 -6
  46. package/src/browser/types.ts +40 -5
  47. package/src/build/generate-manifest.ts +6 -6
  48. package/src/build/generate-route-types.ts +3 -0
  49. package/src/build/route-trie.ts +50 -24
  50. package/src/build/route-types/include-resolution.ts +8 -1
  51. package/src/build/route-types/router-processing.ts +211 -72
  52. package/src/build/route-types/scan-filter.ts +8 -1
  53. package/src/cache/cf/cf-cache-store.ts +5 -7
  54. package/src/client.tsx +84 -230
  55. package/src/handle.ts +40 -0
  56. package/src/index.rsc.ts +6 -1
  57. package/src/index.ts +49 -6
  58. package/src/outlet-context.ts +1 -1
  59. package/src/prerender/store.ts +5 -4
  60. package/src/prerender.ts +138 -77
  61. package/src/response-utils.ts +28 -0
  62. package/src/reverse.ts +27 -2
  63. package/src/route-definition/dsl-helpers.ts +210 -35
  64. package/src/route-definition/helpers-types.ts +61 -14
  65. package/src/route-definition/index.ts +3 -0
  66. package/src/route-definition/redirect.ts +9 -1
  67. package/src/route-definition/resolve-handler-use.ts +155 -0
  68. package/src/route-types.ts +18 -0
  69. package/src/router/content-negotiation.ts +100 -1
  70. package/src/router/handler-context.ts +70 -17
  71. package/src/router/intercept-resolution.ts +9 -4
  72. package/src/router/lazy-includes.ts +6 -6
  73. package/src/router/loader-resolution.ts +153 -21
  74. package/src/router/manifest.ts +22 -13
  75. package/src/router/match-api.ts +127 -192
  76. package/src/router/match-middleware/cache-lookup.ts +28 -8
  77. package/src/router/match-middleware/segment-resolution.ts +53 -0
  78. package/src/router/match-result.ts +82 -4
  79. package/src/router/middleware-types.ts +2 -28
  80. package/src/router/middleware.ts +32 -7
  81. package/src/router/navigation-snapshot.ts +182 -0
  82. package/src/router/pattern-matching.ts +60 -9
  83. package/src/router/prerender-match.ts +110 -10
  84. package/src/router/preview-match.ts +30 -102
  85. package/src/router/request-classification.ts +310 -0
  86. package/src/router/route-snapshot.ts +245 -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 +70 -5
  90. package/src/router/segment-resolution/helpers.ts +29 -24
  91. package/src/router/segment-resolution/revalidation.ts +87 -9
  92. package/src/router/trie-matching.ts +10 -4
  93. package/src/router/types.ts +1 -0
  94. package/src/router/url-params.ts +49 -0
  95. package/src/router.ts +55 -7
  96. package/src/rsc/handler.ts +478 -374
  97. package/src/rsc/helpers.ts +69 -41
  98. package/src/rsc/loader-fetch.ts +23 -3
  99. package/src/rsc/manifest-init.ts +5 -1
  100. package/src/rsc/progressive-enhancement.ts +16 -2
  101. package/src/rsc/response-route-handler.ts +14 -1
  102. package/src/rsc/rsc-rendering.ts +17 -1
  103. package/src/rsc/server-action.ts +10 -0
  104. package/src/rsc/ssr-setup.ts +2 -2
  105. package/src/rsc/types.ts +9 -1
  106. package/src/segment-content-promise.ts +67 -0
  107. package/src/segment-loader-promise.ts +122 -0
  108. package/src/segment-system.tsx +11 -61
  109. package/src/server/context.ts +65 -5
  110. package/src/server/handle-store.ts +19 -0
  111. package/src/server/loader-registry.ts +9 -8
  112. package/src/server/request-context.ts +143 -49
  113. package/src/ssr/index.tsx +3 -0
  114. package/src/static-handler.ts +18 -6
  115. package/src/types/cache-types.ts +4 -4
  116. package/src/types/handler-context.ts +20 -46
  117. package/src/types/loader-types.ts +37 -11
  118. package/src/types/request-scope.ts +126 -0
  119. package/src/types/route-entry.ts +12 -1
  120. package/src/types/segments.ts +1 -1
  121. package/src/urls/include-helper.ts +24 -14
  122. package/src/urls/path-helper-types.ts +39 -6
  123. package/src/urls/path-helper.ts +47 -12
  124. package/src/urls/pattern-types.ts +12 -0
  125. package/src/urls/response-types.ts +18 -16
  126. package/src/use-loader.tsx +77 -5
  127. package/src/vite/debug.ts +140 -0
  128. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  129. package/src/vite/discovery/discover-routers.ts +36 -4
  130. package/src/vite/discovery/prerender-collection.ts +175 -74
  131. package/src/vite/discovery/state.ts +13 -4
  132. package/src/vite/index.ts +4 -0
  133. package/src/vite/plugin-types.ts +60 -5
  134. package/src/vite/plugins/cjs-to-esm.ts +11 -0
  135. package/src/vite/plugins/client-ref-dedup.ts +21 -0
  136. package/src/vite/plugins/client-ref-hashing.ts +16 -4
  137. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  138. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  139. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  140. package/src/vite/plugins/expose-action-id.ts +52 -28
  141. package/src/vite/plugins/expose-id-utils.ts +12 -0
  142. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  143. package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
  144. package/src/vite/plugins/expose-internal-ids.ts +563 -316
  145. package/src/vite/plugins/performance-tracks.ts +96 -0
  146. package/src/vite/plugins/refresh-cmd.ts +88 -26
  147. package/src/vite/plugins/use-cache-transform.ts +57 -43
  148. package/src/vite/rango.ts +63 -11
  149. package/src/vite/router-discovery.ts +389 -59
  150. package/src/vite/utils/banner.ts +1 -1
  151. package/src/vite/utils/package-resolution.ts +41 -1
  152. package/src/vite/utils/prerender-utils.ts +37 -5
  153. package/src/vite/utils/shared-utils.ts +3 -2
  154. package/dist/__internal.d.ts +0 -83
  155. package/dist/__internal.d.ts.map +0 -1
  156. package/dist/__internal.js +0 -19
  157. package/dist/__internal.js.map +0 -1
  158. package/dist/__mocks__/version.d.ts +0 -7
  159. package/dist/__mocks__/version.d.ts.map +0 -1
  160. package/dist/__mocks__/version.js +0 -7
  161. package/dist/__mocks__/version.js.map +0 -1
  162. package/dist/__tests__/client-href.test.d.ts +0 -2
  163. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  164. package/dist/__tests__/client-href.test.js +0 -74
  165. package/dist/__tests__/client-href.test.js.map +0 -1
  166. package/dist/__tests__/component-utils.test.d.ts +0 -2
  167. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  168. package/dist/__tests__/component-utils.test.js +0 -51
  169. package/dist/__tests__/component-utils.test.js.map +0 -1
  170. package/dist/__tests__/event-controller.test.d.ts +0 -2
  171. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  172. package/dist/__tests__/event-controller.test.js +0 -538
  173. package/dist/__tests__/event-controller.test.js.map +0 -1
  174. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  175. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  176. package/dist/__tests__/helpers/route-tree.js +0 -374
  177. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  178. package/dist/__tests__/match-result.test.d.ts +0 -2
  179. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  180. package/dist/__tests__/match-result.test.js +0 -154
  181. package/dist/__tests__/match-result.test.js.map +0 -1
  182. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  183. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  184. package/dist/__tests__/navigation-store.test.js +0 -440
  185. package/dist/__tests__/navigation-store.test.js.map +0 -1
  186. package/dist/__tests__/partial-update.test.d.ts +0 -2
  187. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  188. package/dist/__tests__/partial-update.test.js +0 -1009
  189. package/dist/__tests__/partial-update.test.js.map +0 -1
  190. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  191. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  192. package/dist/__tests__/reverse-types.test.js +0 -656
  193. package/dist/__tests__/reverse-types.test.js.map +0 -1
  194. package/dist/__tests__/route-definition.test.d.ts +0 -2
  195. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  196. package/dist/__tests__/route-definition.test.js +0 -55
  197. package/dist/__tests__/route-definition.test.js.map +0 -1
  198. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  199. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  200. package/dist/__tests__/router-helpers.test.js +0 -377
  201. package/dist/__tests__/router-helpers.test.js.map +0 -1
  202. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  203. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  204. package/dist/__tests__/router-integration-2.test.js +0 -426
  205. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  206. package/dist/__tests__/router-integration.test.d.ts +0 -2
  207. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  208. package/dist/__tests__/router-integration.test.js +0 -1051
  209. package/dist/__tests__/router-integration.test.js.map +0 -1
  210. package/dist/__tests__/search-params.test.d.ts +0 -5
  211. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  212. package/dist/__tests__/search-params.test.js +0 -306
  213. package/dist/__tests__/search-params.test.js.map +0 -1
  214. package/dist/__tests__/segment-system.test.d.ts +0 -2
  215. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  216. package/dist/__tests__/segment-system.test.js +0 -627
  217. package/dist/__tests__/segment-system.test.js.map +0 -1
  218. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  219. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  220. package/dist/__tests__/static-handler-types.test.js +0 -63
  221. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  222. package/dist/__tests__/urls.test.d.ts +0 -2
  223. package/dist/__tests__/urls.test.d.ts.map +0 -1
  224. package/dist/__tests__/urls.test.js +0 -421
  225. package/dist/__tests__/urls.test.js.map +0 -1
  226. package/dist/__tests__/use-mount.test.d.ts +0 -2
  227. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  228. package/dist/__tests__/use-mount.test.js +0 -35
  229. package/dist/__tests__/use-mount.test.js.map +0 -1
  230. package/dist/bin/rango.d.ts +0 -2
  231. package/dist/bin/rango.d.ts.map +0 -1
  232. package/dist/bin/rango.js.map +0 -1
  233. package/dist/browser/event-controller.d.ts +0 -191
  234. package/dist/browser/event-controller.d.ts.map +0 -1
  235. package/dist/browser/event-controller.js +0 -559
  236. package/dist/browser/event-controller.js.map +0 -1
  237. package/dist/browser/index.d.ts +0 -2
  238. package/dist/browser/index.d.ts.map +0 -1
  239. package/dist/browser/index.js +0 -14
  240. package/dist/browser/index.js.map +0 -1
  241. package/dist/browser/link-interceptor.d.ts +0 -38
  242. package/dist/browser/link-interceptor.d.ts.map +0 -1
  243. package/dist/browser/link-interceptor.js +0 -99
  244. package/dist/browser/link-interceptor.js.map +0 -1
  245. package/dist/browser/logging.d.ts +0 -10
  246. package/dist/browser/logging.d.ts.map +0 -1
  247. package/dist/browser/logging.js +0 -29
  248. package/dist/browser/logging.js.map +0 -1
  249. package/dist/browser/lru-cache.d.ts +0 -17
  250. package/dist/browser/lru-cache.d.ts.map +0 -1
  251. package/dist/browser/lru-cache.js +0 -50
  252. package/dist/browser/lru-cache.js.map +0 -1
  253. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  254. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  255. package/dist/browser/merge-segment-loaders.js +0 -102
  256. package/dist/browser/merge-segment-loaders.js.map +0 -1
  257. package/dist/browser/navigation-bridge.d.ts +0 -102
  258. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  259. package/dist/browser/navigation-bridge.js +0 -708
  260. package/dist/browser/navigation-bridge.js.map +0 -1
  261. package/dist/browser/navigation-client.d.ts +0 -25
  262. package/dist/browser/navigation-client.d.ts.map +0 -1
  263. package/dist/browser/navigation-client.js +0 -157
  264. package/dist/browser/navigation-client.js.map +0 -1
  265. package/dist/browser/navigation-store.d.ts +0 -101
  266. package/dist/browser/navigation-store.d.ts.map +0 -1
  267. package/dist/browser/navigation-store.js +0 -625
  268. package/dist/browser/navigation-store.js.map +0 -1
  269. package/dist/browser/partial-update.d.ts +0 -75
  270. package/dist/browser/partial-update.d.ts.map +0 -1
  271. package/dist/browser/partial-update.js +0 -426
  272. package/dist/browser/partial-update.js.map +0 -1
  273. package/dist/browser/react/Link.d.ts +0 -86
  274. package/dist/browser/react/Link.d.ts.map +0 -1
  275. package/dist/browser/react/Link.js +0 -128
  276. package/dist/browser/react/Link.js.map +0 -1
  277. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  278. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  279. package/dist/browser/react/NavigationProvider.js +0 -216
  280. package/dist/browser/react/NavigationProvider.js.map +0 -1
  281. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  282. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  283. package/dist/browser/react/ScrollRestoration.js +0 -57
  284. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  285. package/dist/browser/react/context.d.ts +0 -46
  286. package/dist/browser/react/context.d.ts.map +0 -1
  287. package/dist/browser/react/context.js +0 -10
  288. package/dist/browser/react/context.js.map +0 -1
  289. package/dist/browser/react/index.d.ts +0 -11
  290. package/dist/browser/react/index.d.ts.map +0 -1
  291. package/dist/browser/react/index.js +0 -22
  292. package/dist/browser/react/index.js.map +0 -1
  293. package/dist/browser/react/location-state-shared.d.ts +0 -63
  294. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  295. package/dist/browser/react/location-state-shared.js +0 -81
  296. package/dist/browser/react/location-state-shared.js.map +0 -1
  297. package/dist/browser/react/location-state.d.ts +0 -23
  298. package/dist/browser/react/location-state.d.ts.map +0 -1
  299. package/dist/browser/react/location-state.js +0 -29
  300. package/dist/browser/react/location-state.js.map +0 -1
  301. package/dist/browser/react/mount-context.d.ts +0 -24
  302. package/dist/browser/react/mount-context.d.ts.map +0 -1
  303. package/dist/browser/react/mount-context.js +0 -24
  304. package/dist/browser/react/mount-context.js.map +0 -1
  305. package/dist/browser/react/use-action.d.ts +0 -64
  306. package/dist/browser/react/use-action.d.ts.map +0 -1
  307. package/dist/browser/react/use-action.js +0 -134
  308. package/dist/browser/react/use-action.js.map +0 -1
  309. package/dist/browser/react/use-client-cache.d.ts +0 -41
  310. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  311. package/dist/browser/react/use-client-cache.js +0 -39
  312. package/dist/browser/react/use-client-cache.js.map +0 -1
  313. package/dist/browser/react/use-handle.d.ts +0 -31
  314. package/dist/browser/react/use-handle.d.ts.map +0 -1
  315. package/dist/browser/react/use-handle.js +0 -144
  316. package/dist/browser/react/use-handle.js.map +0 -1
  317. package/dist/browser/react/use-href.d.ts +0 -33
  318. package/dist/browser/react/use-href.d.ts.map +0 -1
  319. package/dist/browser/react/use-href.js +0 -39
  320. package/dist/browser/react/use-href.js.map +0 -1
  321. package/dist/browser/react/use-link-status.d.ts +0 -37
  322. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  323. package/dist/browser/react/use-link-status.js +0 -99
  324. package/dist/browser/react/use-link-status.js.map +0 -1
  325. package/dist/browser/react/use-mount.d.ts +0 -25
  326. package/dist/browser/react/use-mount.d.ts.map +0 -1
  327. package/dist/browser/react/use-mount.js +0 -30
  328. package/dist/browser/react/use-mount.js.map +0 -1
  329. package/dist/browser/react/use-navigation.d.ts +0 -27
  330. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  331. package/dist/browser/react/use-navigation.js +0 -87
  332. package/dist/browser/react/use-navigation.js.map +0 -1
  333. package/dist/browser/react/use-segments.d.ts +0 -38
  334. package/dist/browser/react/use-segments.d.ts.map +0 -1
  335. package/dist/browser/react/use-segments.js +0 -130
  336. package/dist/browser/react/use-segments.js.map +0 -1
  337. package/dist/browser/request-controller.d.ts +0 -26
  338. package/dist/browser/request-controller.d.ts.map +0 -1
  339. package/dist/browser/request-controller.js +0 -147
  340. package/dist/browser/request-controller.js.map +0 -1
  341. package/dist/browser/rsc-router.d.ts +0 -129
  342. package/dist/browser/rsc-router.d.ts.map +0 -1
  343. package/dist/browser/rsc-router.js +0 -195
  344. package/dist/browser/rsc-router.js.map +0 -1
  345. package/dist/browser/scroll-restoration.d.ts +0 -93
  346. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  347. package/dist/browser/scroll-restoration.js +0 -321
  348. package/dist/browser/scroll-restoration.js.map +0 -1
  349. package/dist/browser/segment-structure-assert.d.ts +0 -17
  350. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  351. package/dist/browser/segment-structure-assert.js +0 -59
  352. package/dist/browser/segment-structure-assert.js.map +0 -1
  353. package/dist/browser/server-action-bridge.d.ts +0 -26
  354. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  355. package/dist/browser/server-action-bridge.js +0 -668
  356. package/dist/browser/server-action-bridge.js.map +0 -1
  357. package/dist/browser/shallow.d.ts +0 -12
  358. package/dist/browser/shallow.d.ts.map +0 -1
  359. package/dist/browser/shallow.js +0 -34
  360. package/dist/browser/shallow.js.map +0 -1
  361. package/dist/browser/types.d.ts +0 -369
  362. package/dist/browser/types.d.ts.map +0 -1
  363. package/dist/browser/types.js +0 -2
  364. package/dist/browser/types.js.map +0 -1
  365. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  366. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  367. package/dist/build/__tests__/generate-cli.test.js +0 -237
  368. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  369. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  370. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  371. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  372. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  373. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  374. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  375. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  376. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  377. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  378. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  379. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  380. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  381. package/dist/build/generate-manifest.d.ts +0 -81
  382. package/dist/build/generate-manifest.d.ts.map +0 -1
  383. package/dist/build/generate-manifest.js +0 -276
  384. package/dist/build/generate-manifest.js.map +0 -1
  385. package/dist/build/generate-route-types.d.ts +0 -115
  386. package/dist/build/generate-route-types.d.ts.map +0 -1
  387. package/dist/build/generate-route-types.js +0 -740
  388. package/dist/build/generate-route-types.js.map +0 -1
  389. package/dist/build/index.d.ts +0 -21
  390. package/dist/build/index.d.ts.map +0 -1
  391. package/dist/build/index.js +0 -21
  392. package/dist/build/index.js.map +0 -1
  393. package/dist/build/route-trie.d.ts +0 -71
  394. package/dist/build/route-trie.d.ts.map +0 -1
  395. package/dist/build/route-trie.js +0 -175
  396. package/dist/build/route-trie.js.map +0 -1
  397. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  398. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  399. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  400. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  401. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  402. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  403. package/dist/cache/__tests__/document-cache.test.js +0 -345
  404. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  405. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  406. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  407. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  408. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  409. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  410. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  411. package/dist/cache/__tests__/memory-store.test.js +0 -367
  412. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  413. package/dist/cache/cache-scope.d.ts +0 -102
  414. package/dist/cache/cache-scope.d.ts.map +0 -1
  415. package/dist/cache/cache-scope.js +0 -440
  416. package/dist/cache/cache-scope.js.map +0 -1
  417. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  418. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  419. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  420. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  421. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  422. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  423. package/dist/cache/cf/cf-cache-store.js +0 -242
  424. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  425. package/dist/cache/cf/index.d.ts +0 -14
  426. package/dist/cache/cf/index.d.ts.map +0 -1
  427. package/dist/cache/cf/index.js +0 -17
  428. package/dist/cache/cf/index.js.map +0 -1
  429. package/dist/cache/document-cache.d.ts +0 -64
  430. package/dist/cache/document-cache.d.ts.map +0 -1
  431. package/dist/cache/document-cache.js +0 -228
  432. package/dist/cache/document-cache.js.map +0 -1
  433. package/dist/cache/index.d.ts +0 -19
  434. package/dist/cache/index.d.ts.map +0 -1
  435. package/dist/cache/index.js +0 -21
  436. package/dist/cache/index.js.map +0 -1
  437. package/dist/cache/memory-segment-store.d.ts +0 -110
  438. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  439. package/dist/cache/memory-segment-store.js +0 -117
  440. package/dist/cache/memory-segment-store.js.map +0 -1
  441. package/dist/cache/memory-store.d.ts +0 -41
  442. package/dist/cache/memory-store.d.ts.map +0 -1
  443. package/dist/cache/memory-store.js +0 -191
  444. package/dist/cache/memory-store.js.map +0 -1
  445. package/dist/cache/types.d.ts +0 -317
  446. package/dist/cache/types.d.ts.map +0 -1
  447. package/dist/cache/types.js +0 -12
  448. package/dist/cache/types.js.map +0 -1
  449. package/dist/client.d.ts +0 -248
  450. package/dist/client.d.ts.map +0 -1
  451. package/dist/client.js +0 -367
  452. package/dist/client.js.map +0 -1
  453. package/dist/client.rsc.d.ts +0 -26
  454. package/dist/client.rsc.d.ts.map +0 -1
  455. package/dist/client.rsc.js +0 -46
  456. package/dist/client.rsc.js.map +0 -1
  457. package/dist/component-utils.d.ts +0 -36
  458. package/dist/component-utils.d.ts.map +0 -1
  459. package/dist/component-utils.js +0 -61
  460. package/dist/component-utils.js.map +0 -1
  461. package/dist/components/DefaultDocument.d.ts +0 -13
  462. package/dist/components/DefaultDocument.d.ts.map +0 -1
  463. package/dist/components/DefaultDocument.js +0 -15
  464. package/dist/components/DefaultDocument.js.map +0 -1
  465. package/dist/debug.d.ts +0 -58
  466. package/dist/debug.d.ts.map +0 -1
  467. package/dist/debug.js +0 -157
  468. package/dist/debug.js.map +0 -1
  469. package/dist/default-error-boundary.d.ts +0 -11
  470. package/dist/default-error-boundary.d.ts.map +0 -1
  471. package/dist/default-error-boundary.js +0 -45
  472. package/dist/default-error-boundary.js.map +0 -1
  473. package/dist/deps/browser.d.ts +0 -2
  474. package/dist/deps/browser.d.ts.map +0 -1
  475. package/dist/deps/browser.js +0 -3
  476. package/dist/deps/browser.js.map +0 -1
  477. package/dist/deps/html-stream-client.d.ts +0 -2
  478. package/dist/deps/html-stream-client.d.ts.map +0 -1
  479. package/dist/deps/html-stream-client.js +0 -3
  480. package/dist/deps/html-stream-client.js.map +0 -1
  481. package/dist/deps/html-stream-server.d.ts +0 -2
  482. package/dist/deps/html-stream-server.d.ts.map +0 -1
  483. package/dist/deps/html-stream-server.js +0 -3
  484. package/dist/deps/html-stream-server.js.map +0 -1
  485. package/dist/deps/rsc.d.ts +0 -2
  486. package/dist/deps/rsc.d.ts.map +0 -1
  487. package/dist/deps/rsc.js +0 -4
  488. package/dist/deps/rsc.js.map +0 -1
  489. package/dist/deps/ssr.d.ts +0 -2
  490. package/dist/deps/ssr.d.ts.map +0 -1
  491. package/dist/deps/ssr.js +0 -3
  492. package/dist/deps/ssr.js.map +0 -1
  493. package/dist/errors.d.ts +0 -174
  494. package/dist/errors.d.ts.map +0 -1
  495. package/dist/errors.js +0 -241
  496. package/dist/errors.js.map +0 -1
  497. package/dist/handle.d.ts +0 -78
  498. package/dist/handle.d.ts.map +0 -1
  499. package/dist/handle.js +0 -82
  500. package/dist/handle.js.map +0 -1
  501. package/dist/handles/MetaTags.d.ts +0 -14
  502. package/dist/handles/MetaTags.d.ts.map +0 -1
  503. package/dist/handles/MetaTags.js +0 -136
  504. package/dist/handles/MetaTags.js.map +0 -1
  505. package/dist/handles/index.d.ts +0 -6
  506. package/dist/handles/index.d.ts.map +0 -1
  507. package/dist/handles/index.js +0 -6
  508. package/dist/handles/index.js.map +0 -1
  509. package/dist/handles/meta.d.ts +0 -39
  510. package/dist/handles/meta.d.ts.map +0 -1
  511. package/dist/handles/meta.js +0 -202
  512. package/dist/handles/meta.js.map +0 -1
  513. package/dist/host/__tests__/errors.test.d.ts +0 -2
  514. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  515. package/dist/host/__tests__/errors.test.js +0 -76
  516. package/dist/host/__tests__/errors.test.js.map +0 -1
  517. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  518. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  519. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  520. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  521. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  522. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  523. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  524. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  525. package/dist/host/__tests__/router.test.d.ts +0 -2
  526. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  527. package/dist/host/__tests__/router.test.js +0 -241
  528. package/dist/host/__tests__/router.test.js.map +0 -1
  529. package/dist/host/__tests__/testing.test.d.ts +0 -2
  530. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  531. package/dist/host/__tests__/testing.test.js +0 -64
  532. package/dist/host/__tests__/testing.test.js.map +0 -1
  533. package/dist/host/__tests__/utils.test.d.ts +0 -2
  534. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  535. package/dist/host/__tests__/utils.test.js +0 -29
  536. package/dist/host/__tests__/utils.test.js.map +0 -1
  537. package/dist/host/cookie-handler.d.ts +0 -34
  538. package/dist/host/cookie-handler.d.ts.map +0 -1
  539. package/dist/host/cookie-handler.js +0 -124
  540. package/dist/host/cookie-handler.js.map +0 -1
  541. package/dist/host/errors.d.ts +0 -56
  542. package/dist/host/errors.d.ts.map +0 -1
  543. package/dist/host/errors.js +0 -79
  544. package/dist/host/errors.js.map +0 -1
  545. package/dist/host/index.d.ts +0 -29
  546. package/dist/host/index.d.ts.map +0 -1
  547. package/dist/host/index.js +0 -32
  548. package/dist/host/index.js.map +0 -1
  549. package/dist/host/pattern-matcher.d.ts +0 -36
  550. package/dist/host/pattern-matcher.d.ts.map +0 -1
  551. package/dist/host/pattern-matcher.js +0 -172
  552. package/dist/host/pattern-matcher.js.map +0 -1
  553. package/dist/host/router.d.ts +0 -26
  554. package/dist/host/router.d.ts.map +0 -1
  555. package/dist/host/router.js +0 -218
  556. package/dist/host/router.js.map +0 -1
  557. package/dist/host/testing.d.ts +0 -36
  558. package/dist/host/testing.d.ts.map +0 -1
  559. package/dist/host/testing.js +0 -55
  560. package/dist/host/testing.js.map +0 -1
  561. package/dist/host/types.d.ts +0 -115
  562. package/dist/host/types.d.ts.map +0 -1
  563. package/dist/host/types.js +0 -7
  564. package/dist/host/types.js.map +0 -1
  565. package/dist/host/utils.d.ts +0 -21
  566. package/dist/host/utils.d.ts.map +0 -1
  567. package/dist/host/utils.js +0 -23
  568. package/dist/host/utils.js.map +0 -1
  569. package/dist/href-client.d.ts +0 -131
  570. package/dist/href-client.d.ts.map +0 -1
  571. package/dist/href-client.js +0 -64
  572. package/dist/href-client.js.map +0 -1
  573. package/dist/href-context.d.ts +0 -29
  574. package/dist/href-context.d.ts.map +0 -1
  575. package/dist/href-context.js +0 -21
  576. package/dist/href-context.js.map +0 -1
  577. package/dist/index.d.ts +0 -73
  578. package/dist/index.d.ts.map +0 -1
  579. package/dist/index.js +0 -91
  580. package/dist/index.js.map +0 -1
  581. package/dist/index.rsc.d.ts +0 -32
  582. package/dist/index.rsc.d.ts.map +0 -1
  583. package/dist/index.rsc.js +0 -40
  584. package/dist/index.rsc.js.map +0 -1
  585. package/dist/internal-debug.d.ts +0 -2
  586. package/dist/internal-debug.d.ts.map +0 -1
  587. package/dist/internal-debug.js +0 -5
  588. package/dist/internal-debug.js.map +0 -1
  589. package/dist/loader.d.ts +0 -14
  590. package/dist/loader.d.ts.map +0 -1
  591. package/dist/loader.js +0 -20
  592. package/dist/loader.js.map +0 -1
  593. package/dist/loader.rsc.d.ts +0 -19
  594. package/dist/loader.rsc.d.ts.map +0 -1
  595. package/dist/loader.rsc.js +0 -99
  596. package/dist/loader.rsc.js.map +0 -1
  597. package/dist/network-error-thrower.d.ts +0 -17
  598. package/dist/network-error-thrower.d.ts.map +0 -1
  599. package/dist/network-error-thrower.js +0 -14
  600. package/dist/network-error-thrower.js.map +0 -1
  601. package/dist/outlet-context.d.ts +0 -13
  602. package/dist/outlet-context.d.ts.map +0 -1
  603. package/dist/outlet-context.js +0 -3
  604. package/dist/outlet-context.js.map +0 -1
  605. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  606. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  607. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  608. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  609. package/dist/prerender/param-hash.d.ts +0 -16
  610. package/dist/prerender/param-hash.d.ts.map +0 -1
  611. package/dist/prerender/param-hash.js +0 -36
  612. package/dist/prerender/param-hash.js.map +0 -1
  613. package/dist/prerender/store.d.ts +0 -38
  614. package/dist/prerender/store.d.ts.map +0 -1
  615. package/dist/prerender/store.js +0 -61
  616. package/dist/prerender/store.js.map +0 -1
  617. package/dist/prerender.d.ts +0 -66
  618. package/dist/prerender.d.ts.map +0 -1
  619. package/dist/prerender.js +0 -57
  620. package/dist/prerender.js.map +0 -1
  621. package/dist/reverse.d.ts +0 -196
  622. package/dist/reverse.d.ts.map +0 -1
  623. package/dist/reverse.js +0 -78
  624. package/dist/reverse.js.map +0 -1
  625. package/dist/root-error-boundary.d.ts +0 -33
  626. package/dist/root-error-boundary.d.ts.map +0 -1
  627. package/dist/root-error-boundary.js +0 -165
  628. package/dist/root-error-boundary.js.map +0 -1
  629. package/dist/route-content-wrapper.d.ts +0 -46
  630. package/dist/route-content-wrapper.d.ts.map +0 -1
  631. package/dist/route-content-wrapper.js +0 -77
  632. package/dist/route-content-wrapper.js.map +0 -1
  633. package/dist/route-definition.d.ts +0 -421
  634. package/dist/route-definition.d.ts.map +0 -1
  635. package/dist/route-definition.js +0 -868
  636. package/dist/route-definition.js.map +0 -1
  637. package/dist/route-map-builder.d.ts +0 -155
  638. package/dist/route-map-builder.d.ts.map +0 -1
  639. package/dist/route-map-builder.js +0 -237
  640. package/dist/route-map-builder.js.map +0 -1
  641. package/dist/route-types.d.ts +0 -165
  642. package/dist/route-types.d.ts.map +0 -1
  643. package/dist/route-types.js +0 -7
  644. package/dist/route-types.js.map +0 -1
  645. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  646. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  647. package/dist/router/__tests__/handler-context.test.js +0 -65
  648. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  649. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  650. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  651. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  652. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  653. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  654. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  655. package/dist/router/__tests__/match-context.test.js +0 -92
  656. package/dist/router/__tests__/match-context.test.js.map +0 -1
  657. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  658. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  659. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  660. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  661. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  662. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  663. package/dist/router/__tests__/match-result.test.js +0 -457
  664. package/dist/router/__tests__/match-result.test.js.map +0 -1
  665. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  666. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  667. package/dist/router/__tests__/on-error.test.js +0 -678
  668. package/dist/router/__tests__/on-error.test.js.map +0 -1
  669. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  670. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  671. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  672. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  673. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  674. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  675. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  676. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  677. package/dist/router/error-handling.d.ts +0 -77
  678. package/dist/router/error-handling.d.ts.map +0 -1
  679. package/dist/router/error-handling.js +0 -202
  680. package/dist/router/error-handling.js.map +0 -1
  681. package/dist/router/handler-context.d.ts +0 -20
  682. package/dist/router/handler-context.d.ts.map +0 -1
  683. package/dist/router/handler-context.js +0 -198
  684. package/dist/router/handler-context.js.map +0 -1
  685. package/dist/router/intercept-resolution.d.ts +0 -66
  686. package/dist/router/intercept-resolution.d.ts.map +0 -1
  687. package/dist/router/intercept-resolution.js +0 -246
  688. package/dist/router/intercept-resolution.js.map +0 -1
  689. package/dist/router/loader-resolution.d.ts +0 -64
  690. package/dist/router/loader-resolution.d.ts.map +0 -1
  691. package/dist/router/loader-resolution.js +0 -284
  692. package/dist/router/loader-resolution.js.map +0 -1
  693. package/dist/router/logging.d.ts +0 -15
  694. package/dist/router/logging.d.ts.map +0 -1
  695. package/dist/router/logging.js +0 -99
  696. package/dist/router/logging.js.map +0 -1
  697. package/dist/router/manifest.d.ts +0 -22
  698. package/dist/router/manifest.d.ts.map +0 -1
  699. package/dist/router/manifest.js +0 -181
  700. package/dist/router/manifest.js.map +0 -1
  701. package/dist/router/match-api.d.ts +0 -35
  702. package/dist/router/match-api.d.ts.map +0 -1
  703. package/dist/router/match-api.js +0 -406
  704. package/dist/router/match-api.js.map +0 -1
  705. package/dist/router/match-context.d.ts +0 -206
  706. package/dist/router/match-context.d.ts.map +0 -1
  707. package/dist/router/match-context.js +0 -17
  708. package/dist/router/match-context.js.map +0 -1
  709. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  710. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  711. package/dist/router/match-middleware/background-revalidation.js +0 -75
  712. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  713. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  714. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  715. package/dist/router/match-middleware/cache-lookup.js +0 -257
  716. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  717. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  718. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  719. package/dist/router/match-middleware/cache-store.js +0 -108
  720. package/dist/router/match-middleware/cache-store.js.map +0 -1
  721. package/dist/router/match-middleware/index.d.ts +0 -81
  722. package/dist/router/match-middleware/index.d.ts.map +0 -1
  723. package/dist/router/match-middleware/index.js +0 -80
  724. package/dist/router/match-middleware/index.js.map +0 -1
  725. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  726. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  727. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  728. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  729. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  730. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  731. package/dist/router/match-middleware/segment-resolution.js +0 -53
  732. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  733. package/dist/router/match-pipelines.d.ts +0 -147
  734. package/dist/router/match-pipelines.d.ts.map +0 -1
  735. package/dist/router/match-pipelines.js +0 -82
  736. package/dist/router/match-pipelines.js.map +0 -1
  737. package/dist/router/match-result.d.ts +0 -126
  738. package/dist/router/match-result.d.ts.map +0 -1
  739. package/dist/router/match-result.js +0 -93
  740. package/dist/router/match-result.js.map +0 -1
  741. package/dist/router/metrics.d.ts +0 -20
  742. package/dist/router/metrics.d.ts.map +0 -1
  743. package/dist/router/metrics.js +0 -47
  744. package/dist/router/metrics.js.map +0 -1
  745. package/dist/router/middleware.d.ts +0 -249
  746. package/dist/router/middleware.d.ts.map +0 -1
  747. package/dist/router/middleware.js +0 -434
  748. package/dist/router/middleware.js.map +0 -1
  749. package/dist/router/middleware.test.d.ts +0 -2
  750. package/dist/router/middleware.test.d.ts.map +0 -1
  751. package/dist/router/middleware.test.js +0 -816
  752. package/dist/router/middleware.test.js.map +0 -1
  753. package/dist/router/pattern-matching.d.ts +0 -149
  754. package/dist/router/pattern-matching.d.ts.map +0 -1
  755. package/dist/router/pattern-matching.js +0 -349
  756. package/dist/router/pattern-matching.js.map +0 -1
  757. package/dist/router/revalidation.d.ts +0 -44
  758. package/dist/router/revalidation.d.ts.map +0 -1
  759. package/dist/router/revalidation.js +0 -147
  760. package/dist/router/revalidation.js.map +0 -1
  761. package/dist/router/router-context.d.ts +0 -135
  762. package/dist/router/router-context.d.ts.map +0 -1
  763. package/dist/router/router-context.js +0 -36
  764. package/dist/router/router-context.js.map +0 -1
  765. package/dist/router/segment-resolution.d.ts +0 -127
  766. package/dist/router/segment-resolution.d.ts.map +0 -1
  767. package/dist/router/segment-resolution.js +0 -919
  768. package/dist/router/segment-resolution.js.map +0 -1
  769. package/dist/router/trie-matching.d.ts +0 -40
  770. package/dist/router/trie-matching.d.ts.map +0 -1
  771. package/dist/router/trie-matching.js +0 -127
  772. package/dist/router/trie-matching.js.map +0 -1
  773. package/dist/router/types.d.ts +0 -136
  774. package/dist/router/types.d.ts.map +0 -1
  775. package/dist/router/types.js +0 -7
  776. package/dist/router/types.js.map +0 -1
  777. package/dist/router.d.ts +0 -753
  778. package/dist/router.d.ts.map +0 -1
  779. package/dist/router.gen.d.ts +0 -6
  780. package/dist/router.gen.d.ts.map +0 -1
  781. package/dist/router.gen.js +0 -6
  782. package/dist/router.gen.js.map +0 -1
  783. package/dist/router.js +0 -1304
  784. package/dist/router.js.map +0 -1
  785. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  786. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  787. package/dist/rsc/__tests__/helpers.test.js +0 -140
  788. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  789. package/dist/rsc/handler.d.ts +0 -45
  790. package/dist/rsc/handler.d.ts.map +0 -1
  791. package/dist/rsc/handler.js +0 -1172
  792. package/dist/rsc/handler.js.map +0 -1
  793. package/dist/rsc/helpers.d.ts +0 -16
  794. package/dist/rsc/helpers.d.ts.map +0 -1
  795. package/dist/rsc/helpers.js +0 -55
  796. package/dist/rsc/helpers.js.map +0 -1
  797. package/dist/rsc/index.d.ts +0 -22
  798. package/dist/rsc/index.d.ts.map +0 -1
  799. package/dist/rsc/index.js +0 -23
  800. package/dist/rsc/index.js.map +0 -1
  801. package/dist/rsc/nonce.d.ts +0 -9
  802. package/dist/rsc/nonce.d.ts.map +0 -1
  803. package/dist/rsc/nonce.js +0 -18
  804. package/dist/rsc/nonce.js.map +0 -1
  805. package/dist/rsc/types.d.ts +0 -206
  806. package/dist/rsc/types.d.ts.map +0 -1
  807. package/dist/rsc/types.js +0 -8
  808. package/dist/rsc/types.js.map +0 -1
  809. package/dist/search-params.d.ts +0 -103
  810. package/dist/search-params.d.ts.map +0 -1
  811. package/dist/search-params.js +0 -74
  812. package/dist/search-params.js.map +0 -1
  813. package/dist/segment-system.d.ts +0 -75
  814. package/dist/segment-system.d.ts.map +0 -1
  815. package/dist/segment-system.js +0 -336
  816. package/dist/segment-system.js.map +0 -1
  817. package/dist/server/context.d.ts +0 -245
  818. package/dist/server/context.d.ts.map +0 -1
  819. package/dist/server/context.js +0 -197
  820. package/dist/server/context.js.map +0 -1
  821. package/dist/server/fetchable-loader-store.d.ts +0 -18
  822. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  823. package/dist/server/fetchable-loader-store.js +0 -18
  824. package/dist/server/fetchable-loader-store.js.map +0 -1
  825. package/dist/server/handle-store.d.ts +0 -85
  826. package/dist/server/handle-store.d.ts.map +0 -1
  827. package/dist/server/handle-store.js +0 -142
  828. package/dist/server/handle-store.js.map +0 -1
  829. package/dist/server/loader-registry.d.ts +0 -55
  830. package/dist/server/loader-registry.d.ts.map +0 -1
  831. package/dist/server/loader-registry.js +0 -132
  832. package/dist/server/loader-registry.js.map +0 -1
  833. package/dist/server/request-context.d.ts +0 -226
  834. package/dist/server/request-context.d.ts.map +0 -1
  835. package/dist/server/request-context.js +0 -290
  836. package/dist/server/request-context.js.map +0 -1
  837. package/dist/server/root-layout.d.ts +0 -4
  838. package/dist/server/root-layout.d.ts.map +0 -1
  839. package/dist/server/root-layout.js +0 -5
  840. package/dist/server/root-layout.js.map +0 -1
  841. package/dist/server.d.ts +0 -15
  842. package/dist/server.d.ts.map +0 -1
  843. package/dist/server.js +0 -20
  844. package/dist/server.js.map +0 -1
  845. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  846. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  847. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  848. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  849. package/dist/ssr/index.d.ts +0 -98
  850. package/dist/ssr/index.d.ts.map +0 -1
  851. package/dist/ssr/index.js +0 -158
  852. package/dist/ssr/index.js.map +0 -1
  853. package/dist/static-handler.d.ts +0 -50
  854. package/dist/static-handler.d.ts.map +0 -1
  855. package/dist/static-handler.gen.d.ts +0 -5
  856. package/dist/static-handler.gen.d.ts.map +0 -1
  857. package/dist/static-handler.gen.js +0 -5
  858. package/dist/static-handler.gen.js.map +0 -1
  859. package/dist/static-handler.js +0 -29
  860. package/dist/static-handler.js.map +0 -1
  861. package/dist/theme/ThemeProvider.d.ts +0 -20
  862. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  863. package/dist/theme/ThemeProvider.js +0 -240
  864. package/dist/theme/ThemeProvider.js.map +0 -1
  865. package/dist/theme/ThemeScript.d.ts +0 -48
  866. package/dist/theme/ThemeScript.d.ts.map +0 -1
  867. package/dist/theme/ThemeScript.js +0 -13
  868. package/dist/theme/ThemeScript.js.map +0 -1
  869. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  870. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  871. package/dist/theme/__tests__/theme.test.js +0 -103
  872. package/dist/theme/__tests__/theme.test.js.map +0 -1
  873. package/dist/theme/constants.d.ts +0 -29
  874. package/dist/theme/constants.d.ts.map +0 -1
  875. package/dist/theme/constants.js +0 -48
  876. package/dist/theme/constants.js.map +0 -1
  877. package/dist/theme/index.d.ts +0 -31
  878. package/dist/theme/index.d.ts.map +0 -1
  879. package/dist/theme/index.js +0 -36
  880. package/dist/theme/index.js.map +0 -1
  881. package/dist/theme/theme-context.d.ts +0 -40
  882. package/dist/theme/theme-context.d.ts.map +0 -1
  883. package/dist/theme/theme-context.js +0 -60
  884. package/dist/theme/theme-context.js.map +0 -1
  885. package/dist/theme/theme-script.d.ts +0 -27
  886. package/dist/theme/theme-script.d.ts.map +0 -1
  887. package/dist/theme/theme-script.js +0 -147
  888. package/dist/theme/theme-script.js.map +0 -1
  889. package/dist/theme/types.d.ts +0 -163
  890. package/dist/theme/types.d.ts.map +0 -1
  891. package/dist/theme/types.js +0 -11
  892. package/dist/theme/types.js.map +0 -1
  893. package/dist/theme/use-theme.d.ts +0 -12
  894. package/dist/theme/use-theme.d.ts.map +0 -1
  895. package/dist/theme/use-theme.js +0 -40
  896. package/dist/theme/use-theme.js.map +0 -1
  897. package/dist/types.d.ts +0 -1479
  898. package/dist/types.d.ts.map +0 -1
  899. package/dist/types.js +0 -10
  900. package/dist/types.js.map +0 -1
  901. package/dist/urls.d.ts +0 -441
  902. package/dist/urls.d.ts.map +0 -1
  903. package/dist/urls.gen.d.ts +0 -8
  904. package/dist/urls.gen.d.ts.map +0 -1
  905. package/dist/urls.gen.js +0 -8
  906. package/dist/urls.gen.js.map +0 -1
  907. package/dist/urls.js +0 -443
  908. package/dist/urls.js.map +0 -1
  909. package/dist/use-loader.d.ts +0 -127
  910. package/dist/use-loader.d.ts.map +0 -1
  911. package/dist/use-loader.js +0 -237
  912. package/dist/use-loader.js.map +0 -1
  913. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  914. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  915. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  916. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  917. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  918. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  919. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  920. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  921. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  922. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  923. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  924. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  925. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  926. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  927. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  928. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  929. package/dist/vite/ast-handler-extract.d.ts +0 -49
  930. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  931. package/dist/vite/ast-handler-extract.js +0 -249
  932. package/dist/vite/ast-handler-extract.js.map +0 -1
  933. package/dist/vite/expose-action-id.d.ts +0 -19
  934. package/dist/vite/expose-action-id.d.ts.map +0 -1
  935. package/dist/vite/expose-action-id.js +0 -250
  936. package/dist/vite/expose-action-id.js.map +0 -1
  937. package/dist/vite/expose-id-utils.d.ts +0 -69
  938. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  939. package/dist/vite/expose-id-utils.js +0 -289
  940. package/dist/vite/expose-id-utils.js.map +0 -1
  941. package/dist/vite/expose-internal-ids.d.ts +0 -22
  942. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  943. package/dist/vite/expose-internal-ids.js +0 -886
  944. package/dist/vite/expose-internal-ids.js.map +0 -1
  945. package/dist/vite/index.d.ts +0 -149
  946. package/dist/vite/index.d.ts.map +0 -1
  947. package/dist/vite/index.js.map +0 -1
  948. package/dist/vite/index.named-routes.gen.ts +0 -103
  949. package/dist/vite/package-resolution.d.ts +0 -43
  950. package/dist/vite/package-resolution.d.ts.map +0 -1
  951. package/dist/vite/package-resolution.js +0 -112
  952. package/dist/vite/package-resolution.js.map +0 -1
  953. package/dist/vite/virtual-entries.d.ts +0 -25
  954. package/dist/vite/virtual-entries.d.ts.map +0 -1
  955. package/dist/vite/virtual-entries.js +0 -110
  956. package/dist/vite/virtual-entries.js.map +0 -1
@@ -23,10 +23,12 @@ 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,
29
30
  } from "./intercept-utils.js";
31
+ import { createAppShellRef } from "./app-shell.js";
30
32
 
31
33
  // Vite HMR types are provided by vite/client
32
34
 
@@ -113,6 +115,13 @@ export interface BrowserAppContext {
113
115
  warmupEnabled?: boolean;
114
116
  /** App version for prefetch version mismatch detection */
115
117
  version?: string;
118
+ /**
119
+ * Live app-shell ref. Cross-app navigations replace its contents so the
120
+ * NavigationProvider and renderSegments pick up the target app's
121
+ * rootLayout, basename, and version without consumer rerenders. Theme,
122
+ * warmup, and prefetch TTL are document-lifetime (see AppShell).
123
+ */
124
+ appShellRef?: import("./app-shell.js").AppShellRef;
116
125
  }
117
126
 
118
127
  // Module-level state for the initialized app
@@ -139,7 +148,6 @@ export async function initBrowserApp(
139
148
  initialTheme,
140
149
  } = options;
141
150
 
142
- // Load initial payload from SSR-injected __FLIGHT_DATA__
143
151
  const initialPayload =
144
152
  await deps.createFromReadableStream<RscPayload>(rscStream);
145
153
 
@@ -164,6 +172,12 @@ export async function initBrowserApp(
164
172
  ...(storeOptions?.cacheSize && { cacheSize: storeOptions.cacheSize }),
165
173
  });
166
174
 
175
+ // Seed router identity from the initial SSR payload so the first
176
+ // cross-app SPA navigation can detect the app switch.
177
+ if (initialPayload.metadata?.routerId) {
178
+ store.setRouterId?.(initialPayload.metadata.routerId);
179
+ }
180
+
167
181
  // Create event controller for reactive state management
168
182
  const eventController = createEventController({
169
183
  initialLocation: new URL(window.location.href),
@@ -198,13 +212,24 @@ export async function initBrowserApp(
198
212
  // Create composable utilities
199
213
  const client = createNavigationClient(deps);
200
214
 
201
- // Extract rootLayout and version from metadata for browser-side re-renders
202
- const rootLayout = initialPayload.metadata?.rootLayout;
215
+ // Capture the per-router app-shell so cross-app navigations can replace
216
+ // it atomically. rootLayout, basename, and version live here and are
217
+ // read through the ref at call time rather than closed over. Theme,
218
+ // warmup, and prefetch TTL are deliberately excluded — they are
219
+ // document-lifetime and stay stable across smooth cross-app transitions.
203
220
  const version = initialPayload.metadata?.version;
221
+ const appShellRef = createAppShellRef({
222
+ routerId: initialPayload.metadata?.routerId,
223
+ rootLayout: initialPayload.metadata?.rootLayout,
224
+ basename: initialPayload.metadata?.basename,
225
+ version,
226
+ });
204
227
 
205
228
  // Initialize the localStorage state key for cache invalidation.
206
- // Uses the build version so a new deploy automatically busts all cached prefetches.
207
- initRangoState(version ?? "0");
229
+ // The build version busts cached prefetches on deploy; the routerId
230
+ // namespaces the key so sibling apps on the same origin don't collide.
231
+ initRangoState(version ?? "0", initialPayload.metadata?.routerId);
232
+ setAppVersion(version);
208
233
 
209
234
  // Initialize the in-memory prefetch cache TTL from server config.
210
235
  // A value of 0 disables the cache; undefined falls back to the module default.
@@ -213,11 +238,17 @@ export async function initBrowserApp(
213
238
  initPrefetchCache(prefetchCacheTTL);
214
239
  }
215
240
 
216
- // Create a bound renderSegments that includes rootLayout
241
+ // Create a bound renderSegments that reads rootLayout through the shell
242
+ // ref. On app switch the ref is updated before the tree re-renders, so
243
+ // the new app's Document (rootLayout) replaces the previous one.
217
244
  const renderSegments = (
218
245
  segments: ResolvedSegment[],
219
246
  options?: RenderSegmentsOptions,
220
- ) => baseRenderSegments(segments, { ...options, rootLayout });
247
+ ) =>
248
+ baseRenderSegments(segments, {
249
+ ...options,
250
+ rootLayout: appShellRef.get().rootLayout,
251
+ });
221
252
 
222
253
  // Lazy reference for navigation bridge — the action bridge is created first
223
254
  // but may need to trigger SPA navigation for action redirects.
@@ -231,7 +262,6 @@ export async function initBrowserApp(
231
262
  deps,
232
263
  onUpdate: (update) => store.emitUpdate(update),
233
264
  renderSegments,
234
- version,
235
265
  onNavigate: (url, options) => {
236
266
  if (!navigateFn) {
237
267
  window.location.href = url;
@@ -249,7 +279,8 @@ export async function initBrowserApp(
249
279
  client,
250
280
  onUpdate: (update) => store.emitUpdate(update),
251
281
  renderSegments,
252
- version,
282
+ version: version,
283
+ appShellRef,
253
284
  });
254
285
 
255
286
  // Connect action redirect → navigation bridge (now that both are initialized)
@@ -316,6 +347,7 @@ export async function initBrowserApp(
316
347
  segmentIds: [],
317
348
  previousUrl: store.getSegmentState().currentUrl,
318
349
  interceptSourceUrl: interceptSourceUrl || undefined,
350
+ routerId: store.getRouterId?.(),
319
351
  hmr: true,
320
352
  signal: abort.signal,
321
353
  });
@@ -329,6 +361,21 @@ export async function initBrowserApp(
329
361
  throw new Error("HMR refetch returned invalid payload");
330
362
  }
331
363
 
364
+ // Update version BEFORE rebuilding state so that
365
+ // clearHistoryCache() runs first, then the fresh segment
366
+ // cache entry we create below survives.
367
+ const newVersion = payload.metadata.version;
368
+ if (newVersion && newVersion !== version) {
369
+ console.log(
370
+ "[RSCRouter] HMR: version changed",
371
+ version,
372
+ "→",
373
+ newVersion,
374
+ "clearing caches",
375
+ );
376
+ navigationBridge.updateVersion(newVersion);
377
+ }
378
+
332
379
  if (payload.metadata?.isPartial) {
333
380
  const segments = payload.metadata.segments || [];
334
381
  const matched = payload.metadata.matched || [];
@@ -394,6 +441,7 @@ export async function initBrowserApp(
394
441
  initialTheme: effectiveInitialTheme,
395
442
  warmupEnabled: initialPayload.metadata?.warmupEnabled ?? true,
396
443
  version,
444
+ appShellRef,
397
445
  };
398
446
  browserAppContext = context;
399
447
 
@@ -459,6 +507,7 @@ export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
459
507
  initialTheme,
460
508
  warmupEnabled,
461
509
  version,
510
+ appShellRef,
462
511
  } = getBrowserAppContext();
463
512
 
464
513
  // Signal that the React tree has hydrated. useEffect only fires after
@@ -478,6 +527,8 @@ export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
478
527
  initialTheme={initialTheme}
479
528
  warmupEnabled={warmupEnabled}
480
529
  version={version}
530
+ basename={initialPayload.metadata?.basename}
531
+ appShellRef={appShellRef}
481
532
  />
482
533
  );
483
534
  }
@@ -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,20 +180,20 @@ export function reconcileSegments(input: ReconcileInput): ReconcileResult {
158
180
  return fromCache;
159
181
  }
160
182
 
161
- // For non-action actors: cached segments the server decided not to re-render.
162
- // - Preserve loading=false (suppressed boundary) to maintain tree structure
163
- // - Preserve parallel segment loading so renderSegments can reconstruct
164
- // parallel-owned loader markers from the cached slot metadata
165
- // - Clear other truthy loading values to prevent suspense on cached content
166
- if (actor !== "action") {
167
- if (fromCache.type === "parallel" && fromCache.loading !== undefined) {
168
- return fromCache;
169
- }
170
- if (fromCache.loading !== undefined && fromCache.loading !== false) {
171
- return { ...fromCache, loading: undefined };
172
- }
173
- }
174
-
183
+ debugLog(
184
+ `[reconcile] ${segId}: CACHE only (not from server, type=${fromCache.type}, component=${fromCache.component != null ? "yes" : "null"})`,
185
+ );
186
+
187
+ // Return the cached segment as-is, regardless of actor. We used to clear
188
+ // truthy `loading` here to prevent a stale Suspense fallback from
189
+ // committing against cached content, but that swapped the render tree
190
+ // from the LoaderBoundary branch to the plain OutletProvider branch
191
+ // inside renderSegments, causing React to unmount the entire chain
192
+ // (LoaderBoundary > Suspense > LoaderResolver > RouteContentWrapper >
193
+ // Suspender) every time the user opened an intercept or navigated back
194
+ // to a cached page. The flicker is now prevented by renderSegments'
195
+ // promise memoization keeping React's use() in "known fulfilled" state,
196
+ // so preserving `loading` keeps the element tree stable.
175
197
  return fromCache;
176
198
  })
177
199
  .filter(Boolean) as ResolvedSegment[];
@@ -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) */
@@ -341,7 +346,13 @@ export type ReadonlyURLSearchParams = Omit<
341
346
  export interface RscBrowserDependencies {
342
347
  createFromFetch: <T>(
343
348
  response: Promise<Response>,
344
- options?: { temporaryReferences?: any },
349
+ options?: {
350
+ temporaryReferences?: any;
351
+ findSourceMapURL?: (
352
+ filename: string,
353
+ environmentName: string,
354
+ ) => string | null;
355
+ },
345
356
  ) => Promise<T>;
346
357
  createFromReadableStream: <T>(stream: ReadableStream) => Promise<T>;
347
358
  encodeReply: (
@@ -403,16 +414,25 @@ export interface NavigationStore {
403
414
  segments: ResolvedSegment[],
404
415
  handleData?: HandleData,
405
416
  ): void;
406
- getCachedSegments(
407
- historyKey: string,
408
- ):
409
- | { segments: ResolvedSegment[]; stale: boolean; handleData?: HandleData }
417
+ getCachedSegments(historyKey: string):
418
+ | {
419
+ segments: ResolvedSegment[];
420
+ stale: boolean;
421
+ handleData?: HandleData;
422
+ routerId?: string;
423
+ }
410
424
  | undefined;
411
425
  hasHistoryCache(historyKey: string): boolean;
412
426
  updateCacheHandleData(historyKey: string, handleData: HandleData): void;
413
427
  markCacheAsStale(): void;
414
428
  markCacheAsStaleAndBroadcast(): void;
415
429
  clearHistoryCache(): void;
430
+ /**
431
+ * Clear this tab's nav + prefetch caches without broadcasting or rotating
432
+ * shared state. Intended for app-switch transitions that affect only this
433
+ * tab's session.
434
+ */
435
+ clearHistoryCacheLocal(): void;
416
436
  broadcastCacheInvalidation(): void;
417
437
 
418
438
  // Cross-tab refresh callback (set by navigation bridge)
@@ -422,6 +442,10 @@ export interface NavigationStore {
422
442
  getInterceptSourceUrl(): string | null;
423
443
  setInterceptSourceUrl(url: string | null): void;
424
444
 
445
+ // Router identity tracking (for cross-app navigation detection)
446
+ getRouterId?(): string | undefined;
447
+ setRouterId?(id: string): void;
448
+
425
449
  // UI update notifications
426
450
  onUpdate(callback: UpdateSubscriber): () => void;
427
451
  emitUpdate(update: NavigationUpdate): void;
@@ -452,6 +476,8 @@ export interface FetchPartialOptions {
452
476
  interceptSourceUrl?: string;
453
477
  /** RSC version for cache invalidation detection */
454
478
  version?: string;
479
+ /** Current router ID — server detects app switch and returns full response */
480
+ routerId?: string;
455
481
  /** If true, this is an HMR refetch - server should invalidate manifest cache */
456
482
  hmr?: boolean;
457
483
  }
@@ -520,6 +546,15 @@ export interface NavigationBridge {
520
546
  refresh(): Promise<void>;
521
547
  handlePopstate(): Promise<void>;
522
548
  registerLinkInterception(): () => void;
549
+ /** Update the RSC version (e.g. after HMR). Clears prefetch cache. */
550
+ updateVersion(newVersion: string): void;
551
+ /**
552
+ * Replace the active app-shell snapshot (rootLayout, basename, version)
553
+ * atomically. Used on cross-app navigations when the response's routerId
554
+ * indicates the user entered a different app. Theme, warmup, and prefetch
555
+ * TTL are document-lifetime and not part of the shell.
556
+ */
557
+ updateAppShell(next: import("./app-shell.js").AppShell): void;
523
558
  }
524
559
 
525
560
  /**
@@ -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,
@@ -98,8 +98,14 @@ export function buildRouteTrie(
98
98
  }
99
99
 
100
100
  /**
101
- * Insert a route into the trie, handling optional params by forking
102
- * the insertion path (one terminal without the param, one with).
101
+ * Insert a route into the trie. Optional params expand into two branches at
102
+ * registration time (skip-first, then present), so each terminal lives at the
103
+ * correct depth for its number of bound params and carries a branch-local
104
+ * `pa` listing only those names. The trie's single-slot `node.p` is reused
105
+ * across branches because matching ignores `node.p.n` — the leaf's `pa` is
106
+ * the source of truth for naming. Skip-first ordering lets `mergeLeaf`'s
107
+ * last-wins rule produce greedy-leftmost semantics for free at any shared
108
+ * terminal depth.
103
109
  */
104
110
  function insertRoute(
105
111
  node: TrieNode,
@@ -107,14 +113,13 @@ function insertRoute(
107
113
  index: number,
108
114
  leaf: Omit<TrieLeaf, "op" | "cv" | "pa">,
109
115
  ): void {
110
- // Collect param names, optional param names, and constraints across all segments
111
- const paramNames: string[] = [];
116
+ // op (full optional list) and cv (full constraint map) are route-level and
117
+ // identical on every terminal, so compute them once on the shared base.
112
118
  const optionalParams: string[] = [];
113
119
  const constraints: Record<string, string[]> = {};
114
120
 
115
121
  for (const seg of segments) {
116
122
  if (seg.type === "param") {
117
- paramNames.push(seg.value);
118
123
  if (seg.optional) {
119
124
  optionalParams.push(seg.value);
120
125
  }
@@ -124,21 +129,15 @@ function insertRoute(
124
129
  }
125
130
  }
126
131
 
127
- const fullLeaf: TrieLeaf = {
132
+ const leafBase: Omit<TrieLeaf, "pa"> = {
128
133
  ...leaf,
129
- ...(paramNames.length > 0 ? { pa: paramNames } : {}),
130
134
  ...(optionalParams.length > 0 ? { op: optionalParams } : {}),
131
135
  ...(Object.keys(constraints).length > 0 ? { cv: constraints } : {}),
132
136
  };
133
137
 
134
- insertSegments(node, segments, index, fullLeaf);
138
+ insertSegments(node, segments, index, leafBase, []);
135
139
  }
136
140
 
137
- /**
138
- * Recursively insert segments into the trie.
139
- * For optional params, we add a terminal at the current node (param absent)
140
- * AND continue inserting into the param child (param present).
141
- */
142
141
  /**
143
142
  * Extract ancestry map from a built trie by visiting all leaf nodes.
144
143
  * Returns { routeName: ancestryShortCodes[] } for every route in the trie.
@@ -218,15 +217,25 @@ function mergeLeaf(node: TrieNode, leaf: TrieLeaf): void {
218
217
  node.r = mergeLeaves(node.r, leaf);
219
218
  }
220
219
 
220
+ function buildLeaf(
221
+ leafBase: Omit<TrieLeaf, "pa">,
222
+ paramNames: string[],
223
+ ): TrieLeaf {
224
+ return paramNames.length > 0
225
+ ? { ...leafBase, pa: [...paramNames] }
226
+ : { ...leafBase };
227
+ }
228
+
221
229
  function insertSegments(
222
230
  node: TrieNode,
223
231
  segments: ParsedSegment[],
224
232
  index: number,
225
- leaf: TrieLeaf,
233
+ leafBase: Omit<TrieLeaf, "pa">,
234
+ paramNames: string[],
226
235
  ): void {
227
- // Base case: all segments consumed, add terminal
236
+ // Base case: all segments consumed, add terminal with branch-local pa
228
237
  if (index >= segments.length) {
229
- mergeLeaf(node, leaf);
238
+ mergeLeaf(node, buildLeaf(leafBase, paramNames));
230
239
  return;
231
240
  }
232
241
 
@@ -235,12 +244,19 @@ function insertSegments(
235
244
  if (segment.type === "static") {
236
245
  if (!node.s) node.s = {};
237
246
  if (!node.s[segment.value]) node.s[segment.value] = {};
238
- insertSegments(node.s[segment.value], segments, index + 1, leaf);
247
+ insertSegments(
248
+ node.s[segment.value],
249
+ segments,
250
+ index + 1,
251
+ leafBase,
252
+ paramNames,
253
+ );
239
254
  } else if (segment.type === "param") {
240
255
  if (segment.optional) {
241
- // Optional param: add terminal at current node (param absent)
242
- mergeLeaf(node, leaf);
243
- // AND continue with param child (param present)
256
+ // SKIP first: continue at the same node without binding this name.
257
+ // Skip-first ordering means the present-branch's TAKE overwrites any
258
+ // shared terminal later, giving greedy-leftmost semantics.
259
+ insertSegments(node, segments, index + 1, leafBase, paramNames);
244
260
  }
245
261
  if (segment.suffix) {
246
262
  // Suffix param: keyed by suffix string (e.g., ".html")
@@ -248,16 +264,26 @@ function insertSegments(
248
264
  if (!node.xp[segment.suffix]) {
249
265
  node.xp[segment.suffix] = { n: segment.value, c: {} };
250
266
  }
251
- insertSegments(node.xp[segment.suffix].c, segments, index + 1, leaf);
267
+ insertSegments(node.xp[segment.suffix].c, segments, index + 1, leafBase, [
268
+ ...paramNames,
269
+ segment.value,
270
+ ]);
252
271
  } else {
253
272
  if (!node.p) {
254
273
  node.p = { n: segment.value, c: {} };
255
274
  }
256
- insertSegments(node.p.c, segments, index + 1, leaf);
275
+ insertSegments(node.p.c, segments, index + 1, leafBase, [
276
+ ...paramNames,
277
+ segment.value,
278
+ ]);
257
279
  }
258
280
  } else if (segment.type === "wildcard") {
259
- // Wildcard consumes all remaining segments
260
- const wildLeaf = { ...leaf, pn: "*" };
281
+ // Wildcard consumes all remaining segments. Carry any params bound before
282
+ // the wildcard in pa so they zip correctly against paramValues at match.
283
+ const wildLeaf: TrieLeaf & { pn: string } = {
284
+ ...buildLeaf(leafBase, paramNames),
285
+ pn: "*",
286
+ };
261
287
  const existing = node.w ? ({ ...node.w } as TrieLeaf) : undefined;
262
288
  const merged = mergeLeaves(existing, wildLeaf);
263
289
  node.w = merged as TrieLeaf & { pn: string };