@rangojs/router 0.0.0-experimental.19 → 0.0.0-experimental.20

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 (819) hide show
  1. package/dist/__internal.d.ts +83 -0
  2. package/dist/__internal.d.ts.map +1 -0
  3. package/dist/__internal.js +19 -0
  4. package/dist/__internal.js.map +1 -0
  5. package/dist/__mocks__/version.d.ts +7 -0
  6. package/dist/__mocks__/version.d.ts.map +1 -0
  7. package/dist/__mocks__/version.js +7 -0
  8. package/dist/__mocks__/version.js.map +1 -0
  9. package/dist/__tests__/client-href.test.d.ts +2 -0
  10. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  11. package/dist/__tests__/client-href.test.js +74 -0
  12. package/dist/__tests__/client-href.test.js.map +1 -0
  13. package/dist/__tests__/component-utils.test.d.ts +2 -0
  14. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  15. package/dist/__tests__/component-utils.test.js +51 -0
  16. package/dist/__tests__/component-utils.test.js.map +1 -0
  17. package/dist/__tests__/event-controller.test.d.ts +2 -0
  18. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  19. package/dist/__tests__/event-controller.test.js +538 -0
  20. package/dist/__tests__/event-controller.test.js.map +1 -0
  21. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  22. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.js +374 -0
  24. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  25. package/dist/__tests__/match-result.test.d.ts +2 -0
  26. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  27. package/dist/__tests__/match-result.test.js +154 -0
  28. package/dist/__tests__/match-result.test.js.map +1 -0
  29. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  30. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  31. package/dist/__tests__/navigation-store.test.js +440 -0
  32. package/dist/__tests__/navigation-store.test.js.map +1 -0
  33. package/dist/__tests__/partial-update.test.d.ts +2 -0
  34. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  35. package/dist/__tests__/partial-update.test.js +1009 -0
  36. package/dist/__tests__/partial-update.test.js.map +1 -0
  37. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  38. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  39. package/dist/__tests__/reverse-types.test.js +656 -0
  40. package/dist/__tests__/reverse-types.test.js.map +1 -0
  41. package/dist/__tests__/route-definition.test.d.ts +2 -0
  42. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  43. package/dist/__tests__/route-definition.test.js +55 -0
  44. package/dist/__tests__/route-definition.test.js.map +1 -0
  45. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  46. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  47. package/dist/__tests__/router-helpers.test.js +377 -0
  48. package/dist/__tests__/router-helpers.test.js.map +1 -0
  49. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  50. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.js +426 -0
  52. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  53. package/dist/__tests__/router-integration.test.d.ts +2 -0
  54. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  55. package/dist/__tests__/router-integration.test.js +1051 -0
  56. package/dist/__tests__/router-integration.test.js.map +1 -0
  57. package/dist/__tests__/search-params.test.d.ts +5 -0
  58. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  59. package/dist/__tests__/search-params.test.js +306 -0
  60. package/dist/__tests__/search-params.test.js.map +1 -0
  61. package/dist/__tests__/segment-system.test.d.ts +2 -0
  62. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  63. package/dist/__tests__/segment-system.test.js +627 -0
  64. package/dist/__tests__/segment-system.test.js.map +1 -0
  65. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  66. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.js +63 -0
  68. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  69. package/dist/__tests__/urls.test.d.ts +2 -0
  70. package/dist/__tests__/urls.test.d.ts.map +1 -0
  71. package/dist/__tests__/urls.test.js +421 -0
  72. package/dist/__tests__/urls.test.js.map +1 -0
  73. package/dist/__tests__/use-mount.test.d.ts +2 -0
  74. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  75. package/dist/__tests__/use-mount.test.js +35 -0
  76. package/dist/__tests__/use-mount.test.js.map +1 -0
  77. package/dist/bin/rango.d.ts +2 -0
  78. package/dist/bin/rango.d.ts.map +1 -0
  79. package/dist/bin/rango.js +109 -15
  80. package/dist/bin/rango.js.map +1 -0
  81. package/dist/browser/event-controller.d.ts +191 -0
  82. package/dist/browser/event-controller.d.ts.map +1 -0
  83. package/dist/browser/event-controller.js +559 -0
  84. package/dist/browser/event-controller.js.map +1 -0
  85. package/dist/browser/index.d.ts +2 -0
  86. package/dist/browser/index.d.ts.map +1 -0
  87. package/dist/browser/index.js +14 -0
  88. package/dist/browser/index.js.map +1 -0
  89. package/dist/browser/link-interceptor.d.ts +38 -0
  90. package/dist/browser/link-interceptor.d.ts.map +1 -0
  91. package/dist/browser/link-interceptor.js +99 -0
  92. package/dist/browser/link-interceptor.js.map +1 -0
  93. package/dist/browser/logging.d.ts +10 -0
  94. package/dist/browser/logging.d.ts.map +1 -0
  95. package/dist/browser/logging.js +29 -0
  96. package/dist/browser/logging.js.map +1 -0
  97. package/dist/browser/lru-cache.d.ts +17 -0
  98. package/dist/browser/lru-cache.d.ts.map +1 -0
  99. package/dist/browser/lru-cache.js +50 -0
  100. package/dist/browser/lru-cache.js.map +1 -0
  101. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  102. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  103. package/dist/browser/merge-segment-loaders.js +102 -0
  104. package/dist/browser/merge-segment-loaders.js.map +1 -0
  105. package/dist/browser/navigation-bridge.d.ts +102 -0
  106. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  107. package/dist/browser/navigation-bridge.js +708 -0
  108. package/dist/browser/navigation-bridge.js.map +1 -0
  109. package/dist/browser/navigation-client.d.ts +25 -0
  110. package/dist/browser/navigation-client.d.ts.map +1 -0
  111. package/dist/browser/navigation-client.js +157 -0
  112. package/dist/browser/navigation-client.js.map +1 -0
  113. package/dist/browser/navigation-store.d.ts +101 -0
  114. package/dist/browser/navigation-store.d.ts.map +1 -0
  115. package/dist/browser/navigation-store.js +625 -0
  116. package/dist/browser/navigation-store.js.map +1 -0
  117. package/dist/browser/partial-update.d.ts +75 -0
  118. package/dist/browser/partial-update.d.ts.map +1 -0
  119. package/dist/browser/partial-update.js +426 -0
  120. package/dist/browser/partial-update.js.map +1 -0
  121. package/dist/browser/react/Link.d.ts +86 -0
  122. package/dist/browser/react/Link.d.ts.map +1 -0
  123. package/dist/browser/react/Link.js +128 -0
  124. package/dist/browser/react/Link.js.map +1 -0
  125. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  126. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  127. package/dist/browser/react/NavigationProvider.js +216 -0
  128. package/dist/browser/react/NavigationProvider.js.map +1 -0
  129. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.js +57 -0
  132. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  133. package/dist/browser/react/context.d.ts +46 -0
  134. package/dist/browser/react/context.d.ts.map +1 -0
  135. package/dist/browser/react/context.js +10 -0
  136. package/dist/browser/react/context.js.map +1 -0
  137. package/dist/browser/react/index.d.ts +11 -0
  138. package/dist/browser/react/index.d.ts.map +1 -0
  139. package/dist/browser/react/index.js +22 -0
  140. package/dist/browser/react/index.js.map +1 -0
  141. package/dist/browser/react/location-state-shared.d.ts +63 -0
  142. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  143. package/dist/browser/react/location-state-shared.js +81 -0
  144. package/dist/browser/react/location-state-shared.js.map +1 -0
  145. package/dist/browser/react/location-state.d.ts +23 -0
  146. package/dist/browser/react/location-state.d.ts.map +1 -0
  147. package/dist/browser/react/location-state.js +29 -0
  148. package/dist/browser/react/location-state.js.map +1 -0
  149. package/dist/browser/react/mount-context.d.ts +24 -0
  150. package/dist/browser/react/mount-context.d.ts.map +1 -0
  151. package/dist/browser/react/mount-context.js +24 -0
  152. package/dist/browser/react/mount-context.js.map +1 -0
  153. package/dist/browser/react/use-action.d.ts +64 -0
  154. package/dist/browser/react/use-action.d.ts.map +1 -0
  155. package/dist/browser/react/use-action.js +134 -0
  156. package/dist/browser/react/use-action.js.map +1 -0
  157. package/dist/browser/react/use-client-cache.d.ts +41 -0
  158. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  159. package/dist/browser/react/use-client-cache.js +39 -0
  160. package/dist/browser/react/use-client-cache.js.map +1 -0
  161. package/dist/browser/react/use-handle.d.ts +31 -0
  162. package/dist/browser/react/use-handle.d.ts.map +1 -0
  163. package/dist/browser/react/use-handle.js +144 -0
  164. package/dist/browser/react/use-handle.js.map +1 -0
  165. package/dist/browser/react/use-href.d.ts +33 -0
  166. package/dist/browser/react/use-href.d.ts.map +1 -0
  167. package/dist/browser/react/use-href.js +39 -0
  168. package/dist/browser/react/use-href.js.map +1 -0
  169. package/dist/browser/react/use-link-status.d.ts +37 -0
  170. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  171. package/dist/browser/react/use-link-status.js +99 -0
  172. package/dist/browser/react/use-link-status.js.map +1 -0
  173. package/dist/browser/react/use-mount.d.ts +25 -0
  174. package/dist/browser/react/use-mount.d.ts.map +1 -0
  175. package/dist/browser/react/use-mount.js +30 -0
  176. package/dist/browser/react/use-mount.js.map +1 -0
  177. package/dist/browser/react/use-navigation.d.ts +27 -0
  178. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  179. package/dist/browser/react/use-navigation.js +87 -0
  180. package/dist/browser/react/use-navigation.js.map +1 -0
  181. package/dist/browser/react/use-segments.d.ts +38 -0
  182. package/dist/browser/react/use-segments.d.ts.map +1 -0
  183. package/dist/browser/react/use-segments.js +130 -0
  184. package/dist/browser/react/use-segments.js.map +1 -0
  185. package/dist/browser/request-controller.d.ts +26 -0
  186. package/dist/browser/request-controller.d.ts.map +1 -0
  187. package/dist/browser/request-controller.js +147 -0
  188. package/dist/browser/request-controller.js.map +1 -0
  189. package/dist/browser/rsc-router.d.ts +129 -0
  190. package/dist/browser/rsc-router.d.ts.map +1 -0
  191. package/dist/browser/rsc-router.js +195 -0
  192. package/dist/browser/rsc-router.js.map +1 -0
  193. package/dist/browser/scroll-restoration.d.ts +93 -0
  194. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  195. package/dist/browser/scroll-restoration.js +321 -0
  196. package/dist/browser/scroll-restoration.js.map +1 -0
  197. package/dist/browser/segment-structure-assert.d.ts +17 -0
  198. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  199. package/dist/browser/segment-structure-assert.js +59 -0
  200. package/dist/browser/segment-structure-assert.js.map +1 -0
  201. package/dist/browser/server-action-bridge.d.ts +26 -0
  202. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  203. package/dist/browser/server-action-bridge.js +668 -0
  204. package/dist/browser/server-action-bridge.js.map +1 -0
  205. package/dist/browser/shallow.d.ts +12 -0
  206. package/dist/browser/shallow.d.ts.map +1 -0
  207. package/dist/browser/shallow.js +34 -0
  208. package/dist/browser/shallow.js.map +1 -0
  209. package/dist/browser/types.d.ts +369 -0
  210. package/dist/browser/types.d.ts.map +1 -0
  211. package/dist/browser/types.js +2 -0
  212. package/dist/browser/types.js.map +1 -0
  213. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.js +237 -0
  216. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  217. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  220. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  221. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  224. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  225. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  229. package/dist/build/generate-manifest.d.ts +81 -0
  230. package/dist/build/generate-manifest.d.ts.map +1 -0
  231. package/dist/build/generate-manifest.js +276 -0
  232. package/dist/build/generate-manifest.js.map +1 -0
  233. package/dist/build/generate-route-types.d.ts +115 -0
  234. package/dist/build/generate-route-types.d.ts.map +1 -0
  235. package/dist/build/generate-route-types.js +740 -0
  236. package/dist/build/generate-route-types.js.map +1 -0
  237. package/dist/build/index.d.ts +21 -0
  238. package/dist/build/index.d.ts.map +1 -0
  239. package/dist/build/index.js +21 -0
  240. package/dist/build/index.js.map +1 -0
  241. package/dist/build/route-trie.d.ts +71 -0
  242. package/dist/build/route-trie.d.ts.map +1 -0
  243. package/dist/build/route-trie.js +175 -0
  244. package/dist/build/route-trie.js.map +1 -0
  245. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  248. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  249. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.js +345 -0
  252. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  253. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  257. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.js +367 -0
  260. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  261. package/dist/cache/cache-scope.d.ts +102 -0
  262. package/dist/cache/cache-scope.d.ts.map +1 -0
  263. package/dist/cache/cache-scope.js +440 -0
  264. package/dist/cache/cache-scope.js.map +1 -0
  265. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  269. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.js +242 -0
  272. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  273. package/dist/cache/cf/index.d.ts +14 -0
  274. package/dist/cache/cf/index.d.ts.map +1 -0
  275. package/dist/cache/cf/index.js +17 -0
  276. package/dist/cache/cf/index.js.map +1 -0
  277. package/dist/cache/document-cache.d.ts +64 -0
  278. package/dist/cache/document-cache.d.ts.map +1 -0
  279. package/dist/cache/document-cache.js +228 -0
  280. package/dist/cache/document-cache.js.map +1 -0
  281. package/dist/cache/index.d.ts +19 -0
  282. package/dist/cache/index.d.ts.map +1 -0
  283. package/dist/cache/index.js +21 -0
  284. package/dist/cache/index.js.map +1 -0
  285. package/dist/cache/memory-segment-store.d.ts +110 -0
  286. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  287. package/dist/cache/memory-segment-store.js +117 -0
  288. package/dist/cache/memory-segment-store.js.map +1 -0
  289. package/dist/cache/memory-store.d.ts +41 -0
  290. package/dist/cache/memory-store.d.ts.map +1 -0
  291. package/dist/cache/memory-store.js +191 -0
  292. package/dist/cache/memory-store.js.map +1 -0
  293. package/dist/cache/types.d.ts +317 -0
  294. package/dist/cache/types.d.ts.map +1 -0
  295. package/dist/cache/types.js +12 -0
  296. package/dist/cache/types.js.map +1 -0
  297. package/dist/client.d.ts +248 -0
  298. package/dist/client.d.ts.map +1 -0
  299. package/dist/client.js +367 -0
  300. package/dist/client.js.map +1 -0
  301. package/dist/client.rsc.d.ts +26 -0
  302. package/dist/client.rsc.d.ts.map +1 -0
  303. package/dist/client.rsc.js +46 -0
  304. package/dist/client.rsc.js.map +1 -0
  305. package/dist/component-utils.d.ts +36 -0
  306. package/dist/component-utils.d.ts.map +1 -0
  307. package/dist/component-utils.js +61 -0
  308. package/dist/component-utils.js.map +1 -0
  309. package/dist/components/DefaultDocument.d.ts +13 -0
  310. package/dist/components/DefaultDocument.d.ts.map +1 -0
  311. package/dist/components/DefaultDocument.js +15 -0
  312. package/dist/components/DefaultDocument.js.map +1 -0
  313. package/dist/debug.d.ts +58 -0
  314. package/dist/debug.d.ts.map +1 -0
  315. package/dist/debug.js +157 -0
  316. package/dist/debug.js.map +1 -0
  317. package/dist/default-error-boundary.d.ts +11 -0
  318. package/dist/default-error-boundary.d.ts.map +1 -0
  319. package/dist/default-error-boundary.js +45 -0
  320. package/dist/default-error-boundary.js.map +1 -0
  321. package/dist/deps/browser.d.ts +2 -0
  322. package/dist/deps/browser.d.ts.map +1 -0
  323. package/dist/deps/browser.js +3 -0
  324. package/dist/deps/browser.js.map +1 -0
  325. package/dist/deps/html-stream-client.d.ts +2 -0
  326. package/dist/deps/html-stream-client.d.ts.map +1 -0
  327. package/dist/deps/html-stream-client.js +3 -0
  328. package/dist/deps/html-stream-client.js.map +1 -0
  329. package/dist/deps/html-stream-server.d.ts +2 -0
  330. package/dist/deps/html-stream-server.d.ts.map +1 -0
  331. package/dist/deps/html-stream-server.js +3 -0
  332. package/dist/deps/html-stream-server.js.map +1 -0
  333. package/dist/deps/rsc.d.ts +2 -0
  334. package/dist/deps/rsc.d.ts.map +1 -0
  335. package/dist/deps/rsc.js +4 -0
  336. package/dist/deps/rsc.js.map +1 -0
  337. package/dist/deps/ssr.d.ts +2 -0
  338. package/dist/deps/ssr.d.ts.map +1 -0
  339. package/dist/deps/ssr.js +3 -0
  340. package/dist/deps/ssr.js.map +1 -0
  341. package/dist/errors.d.ts +174 -0
  342. package/dist/errors.d.ts.map +1 -0
  343. package/dist/errors.js +241 -0
  344. package/dist/errors.js.map +1 -0
  345. package/dist/handle.d.ts +78 -0
  346. package/dist/handle.d.ts.map +1 -0
  347. package/dist/handle.js +82 -0
  348. package/dist/handle.js.map +1 -0
  349. package/dist/handles/MetaTags.d.ts +14 -0
  350. package/dist/handles/MetaTags.d.ts.map +1 -0
  351. package/dist/handles/MetaTags.js +136 -0
  352. package/dist/handles/MetaTags.js.map +1 -0
  353. package/dist/handles/index.d.ts +6 -0
  354. package/dist/handles/index.d.ts.map +1 -0
  355. package/dist/handles/index.js +6 -0
  356. package/dist/handles/index.js.map +1 -0
  357. package/dist/handles/meta.d.ts +39 -0
  358. package/dist/handles/meta.d.ts.map +1 -0
  359. package/dist/handles/meta.js +202 -0
  360. package/dist/handles/meta.js.map +1 -0
  361. package/dist/host/__tests__/errors.test.d.ts +2 -0
  362. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  363. package/dist/host/__tests__/errors.test.js +76 -0
  364. package/dist/host/__tests__/errors.test.js.map +1 -0
  365. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  369. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  373. package/dist/host/__tests__/router.test.d.ts +2 -0
  374. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  375. package/dist/host/__tests__/router.test.js +241 -0
  376. package/dist/host/__tests__/router.test.js.map +1 -0
  377. package/dist/host/__tests__/testing.test.d.ts +2 -0
  378. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  379. package/dist/host/__tests__/testing.test.js +64 -0
  380. package/dist/host/__tests__/testing.test.js.map +1 -0
  381. package/dist/host/__tests__/utils.test.d.ts +2 -0
  382. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  383. package/dist/host/__tests__/utils.test.js +29 -0
  384. package/dist/host/__tests__/utils.test.js.map +1 -0
  385. package/dist/host/cookie-handler.d.ts +34 -0
  386. package/dist/host/cookie-handler.d.ts.map +1 -0
  387. package/dist/host/cookie-handler.js +124 -0
  388. package/dist/host/cookie-handler.js.map +1 -0
  389. package/dist/host/errors.d.ts +56 -0
  390. package/dist/host/errors.d.ts.map +1 -0
  391. package/dist/host/errors.js +79 -0
  392. package/dist/host/errors.js.map +1 -0
  393. package/dist/host/index.d.ts +29 -0
  394. package/dist/host/index.d.ts.map +1 -0
  395. package/dist/host/index.js +32 -0
  396. package/dist/host/index.js.map +1 -0
  397. package/dist/host/pattern-matcher.d.ts +36 -0
  398. package/dist/host/pattern-matcher.d.ts.map +1 -0
  399. package/dist/host/pattern-matcher.js +172 -0
  400. package/dist/host/pattern-matcher.js.map +1 -0
  401. package/dist/host/router.d.ts +26 -0
  402. package/dist/host/router.d.ts.map +1 -0
  403. package/dist/host/router.js +218 -0
  404. package/dist/host/router.js.map +1 -0
  405. package/dist/host/testing.d.ts +36 -0
  406. package/dist/host/testing.d.ts.map +1 -0
  407. package/dist/host/testing.js +55 -0
  408. package/dist/host/testing.js.map +1 -0
  409. package/dist/host/types.d.ts +115 -0
  410. package/dist/host/types.d.ts.map +1 -0
  411. package/dist/host/types.js +7 -0
  412. package/dist/host/types.js.map +1 -0
  413. package/dist/host/utils.d.ts +21 -0
  414. package/dist/host/utils.d.ts.map +1 -0
  415. package/dist/host/utils.js +23 -0
  416. package/dist/host/utils.js.map +1 -0
  417. package/dist/href-client.d.ts +131 -0
  418. package/dist/href-client.d.ts.map +1 -0
  419. package/dist/href-client.js +64 -0
  420. package/dist/href-client.js.map +1 -0
  421. package/dist/href-context.d.ts +29 -0
  422. package/dist/href-context.d.ts.map +1 -0
  423. package/dist/href-context.js +21 -0
  424. package/dist/href-context.js.map +1 -0
  425. package/dist/index.d.ts +73 -0
  426. package/dist/index.d.ts.map +1 -0
  427. package/dist/index.js +91 -0
  428. package/dist/index.js.map +1 -0
  429. package/dist/index.rsc.d.ts +32 -0
  430. package/dist/index.rsc.d.ts.map +1 -0
  431. package/dist/index.rsc.js +40 -0
  432. package/dist/index.rsc.js.map +1 -0
  433. package/dist/internal-debug.d.ts +2 -0
  434. package/dist/internal-debug.d.ts.map +1 -0
  435. package/dist/internal-debug.js +5 -0
  436. package/dist/internal-debug.js.map +1 -0
  437. package/dist/loader.d.ts +14 -0
  438. package/dist/loader.d.ts.map +1 -0
  439. package/dist/loader.js +20 -0
  440. package/dist/loader.js.map +1 -0
  441. package/dist/loader.rsc.d.ts +19 -0
  442. package/dist/loader.rsc.d.ts.map +1 -0
  443. package/dist/loader.rsc.js +99 -0
  444. package/dist/loader.rsc.js.map +1 -0
  445. package/dist/network-error-thrower.d.ts +17 -0
  446. package/dist/network-error-thrower.d.ts.map +1 -0
  447. package/dist/network-error-thrower.js +14 -0
  448. package/dist/network-error-thrower.js.map +1 -0
  449. package/dist/outlet-context.d.ts +13 -0
  450. package/dist/outlet-context.d.ts.map +1 -0
  451. package/dist/outlet-context.js +3 -0
  452. package/dist/outlet-context.js.map +1 -0
  453. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  456. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  457. package/dist/prerender/param-hash.d.ts +16 -0
  458. package/dist/prerender/param-hash.d.ts.map +1 -0
  459. package/dist/prerender/param-hash.js +36 -0
  460. package/dist/prerender/param-hash.js.map +1 -0
  461. package/dist/prerender/store.d.ts +38 -0
  462. package/dist/prerender/store.d.ts.map +1 -0
  463. package/dist/prerender/store.js +61 -0
  464. package/dist/prerender/store.js.map +1 -0
  465. package/dist/prerender.d.ts +66 -0
  466. package/dist/prerender.d.ts.map +1 -0
  467. package/dist/prerender.js +57 -0
  468. package/dist/prerender.js.map +1 -0
  469. package/dist/reverse.d.ts +196 -0
  470. package/dist/reverse.d.ts.map +1 -0
  471. package/dist/reverse.js +78 -0
  472. package/dist/reverse.js.map +1 -0
  473. package/dist/root-error-boundary.d.ts +33 -0
  474. package/dist/root-error-boundary.d.ts.map +1 -0
  475. package/dist/root-error-boundary.js +165 -0
  476. package/dist/root-error-boundary.js.map +1 -0
  477. package/dist/route-content-wrapper.d.ts +46 -0
  478. package/dist/route-content-wrapper.d.ts.map +1 -0
  479. package/dist/route-content-wrapper.js +77 -0
  480. package/dist/route-content-wrapper.js.map +1 -0
  481. package/dist/route-definition.d.ts +421 -0
  482. package/dist/route-definition.d.ts.map +1 -0
  483. package/dist/route-definition.js +868 -0
  484. package/dist/route-definition.js.map +1 -0
  485. package/dist/route-map-builder.d.ts +155 -0
  486. package/dist/route-map-builder.d.ts.map +1 -0
  487. package/dist/route-map-builder.js +237 -0
  488. package/dist/route-map-builder.js.map +1 -0
  489. package/dist/route-types.d.ts +165 -0
  490. package/dist/route-types.d.ts.map +1 -0
  491. package/dist/route-types.js +7 -0
  492. package/dist/route-types.js.map +1 -0
  493. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.js +65 -0
  496. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  497. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  501. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  502. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  503. package/dist/router/__tests__/match-context.test.js +92 -0
  504. package/dist/router/__tests__/match-context.test.js.map +1 -0
  505. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  508. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  509. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  510. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  511. package/dist/router/__tests__/match-result.test.js +457 -0
  512. package/dist/router/__tests__/match-result.test.js.map +1 -0
  513. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  514. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  515. package/dist/router/__tests__/on-error.test.js +678 -0
  516. package/dist/router/__tests__/on-error.test.js.map +1 -0
  517. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  520. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  521. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  525. package/dist/router/error-handling.d.ts +77 -0
  526. package/dist/router/error-handling.d.ts.map +1 -0
  527. package/dist/router/error-handling.js +202 -0
  528. package/dist/router/error-handling.js.map +1 -0
  529. package/dist/router/handler-context.d.ts +20 -0
  530. package/dist/router/handler-context.d.ts.map +1 -0
  531. package/dist/router/handler-context.js +198 -0
  532. package/dist/router/handler-context.js.map +1 -0
  533. package/dist/router/intercept-resolution.d.ts +66 -0
  534. package/dist/router/intercept-resolution.d.ts.map +1 -0
  535. package/dist/router/intercept-resolution.js +246 -0
  536. package/dist/router/intercept-resolution.js.map +1 -0
  537. package/dist/router/loader-resolution.d.ts +64 -0
  538. package/dist/router/loader-resolution.d.ts.map +1 -0
  539. package/dist/router/loader-resolution.js +284 -0
  540. package/dist/router/loader-resolution.js.map +1 -0
  541. package/dist/router/logging.d.ts +15 -0
  542. package/dist/router/logging.d.ts.map +1 -0
  543. package/dist/router/logging.js +99 -0
  544. package/dist/router/logging.js.map +1 -0
  545. package/dist/router/manifest.d.ts +22 -0
  546. package/dist/router/manifest.d.ts.map +1 -0
  547. package/dist/router/manifest.js +181 -0
  548. package/dist/router/manifest.js.map +1 -0
  549. package/dist/router/match-api.d.ts +35 -0
  550. package/dist/router/match-api.d.ts.map +1 -0
  551. package/dist/router/match-api.js +406 -0
  552. package/dist/router/match-api.js.map +1 -0
  553. package/dist/router/match-context.d.ts +206 -0
  554. package/dist/router/match-context.d.ts.map +1 -0
  555. package/dist/router/match-context.js +17 -0
  556. package/dist/router/match-context.js.map +1 -0
  557. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.js +75 -0
  560. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  561. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.js +257 -0
  564. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  565. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  566. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  567. package/dist/router/match-middleware/cache-store.js +108 -0
  568. package/dist/router/match-middleware/cache-store.js.map +1 -0
  569. package/dist/router/match-middleware/index.d.ts +81 -0
  570. package/dist/router/match-middleware/index.d.ts.map +1 -0
  571. package/dist/router/match-middleware/index.js +80 -0
  572. package/dist/router/match-middleware/index.js.map +1 -0
  573. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  576. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  577. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.js +53 -0
  580. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  581. package/dist/router/match-pipelines.d.ts +147 -0
  582. package/dist/router/match-pipelines.d.ts.map +1 -0
  583. package/dist/router/match-pipelines.js +82 -0
  584. package/dist/router/match-pipelines.js.map +1 -0
  585. package/dist/router/match-result.d.ts +126 -0
  586. package/dist/router/match-result.d.ts.map +1 -0
  587. package/dist/router/match-result.js +93 -0
  588. package/dist/router/match-result.js.map +1 -0
  589. package/dist/router/metrics.d.ts +20 -0
  590. package/dist/router/metrics.d.ts.map +1 -0
  591. package/dist/router/metrics.js +47 -0
  592. package/dist/router/metrics.js.map +1 -0
  593. package/dist/router/middleware.d.ts +249 -0
  594. package/dist/router/middleware.d.ts.map +1 -0
  595. package/dist/router/middleware.js +434 -0
  596. package/dist/router/middleware.js.map +1 -0
  597. package/dist/router/middleware.test.d.ts +2 -0
  598. package/dist/router/middleware.test.d.ts.map +1 -0
  599. package/dist/router/middleware.test.js +816 -0
  600. package/dist/router/middleware.test.js.map +1 -0
  601. package/dist/router/pattern-matching.d.ts +149 -0
  602. package/dist/router/pattern-matching.d.ts.map +1 -0
  603. package/dist/router/pattern-matching.js +349 -0
  604. package/dist/router/pattern-matching.js.map +1 -0
  605. package/dist/router/revalidation.d.ts +44 -0
  606. package/dist/router/revalidation.d.ts.map +1 -0
  607. package/dist/router/revalidation.js +147 -0
  608. package/dist/router/revalidation.js.map +1 -0
  609. package/dist/router/router-context.d.ts +135 -0
  610. package/dist/router/router-context.d.ts.map +1 -0
  611. package/dist/router/router-context.js +36 -0
  612. package/dist/router/router-context.js.map +1 -0
  613. package/dist/router/segment-resolution.d.ts +127 -0
  614. package/dist/router/segment-resolution.d.ts.map +1 -0
  615. package/dist/router/segment-resolution.js +919 -0
  616. package/dist/router/segment-resolution.js.map +1 -0
  617. package/dist/router/trie-matching.d.ts +40 -0
  618. package/dist/router/trie-matching.d.ts.map +1 -0
  619. package/dist/router/trie-matching.js +127 -0
  620. package/dist/router/trie-matching.js.map +1 -0
  621. package/dist/router/types.d.ts +136 -0
  622. package/dist/router/types.d.ts.map +1 -0
  623. package/dist/router/types.js +7 -0
  624. package/dist/router/types.js.map +1 -0
  625. package/dist/router.d.ts +753 -0
  626. package/dist/router.d.ts.map +1 -0
  627. package/dist/router.gen.d.ts +6 -0
  628. package/dist/router.gen.d.ts.map +1 -0
  629. package/dist/router.gen.js +6 -0
  630. package/dist/router.gen.js.map +1 -0
  631. package/dist/router.js +1304 -0
  632. package/dist/router.js.map +1 -0
  633. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.js +140 -0
  636. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  637. package/dist/rsc/handler.d.ts +45 -0
  638. package/dist/rsc/handler.d.ts.map +1 -0
  639. package/dist/rsc/handler.js +1172 -0
  640. package/dist/rsc/handler.js.map +1 -0
  641. package/dist/rsc/helpers.d.ts +16 -0
  642. package/dist/rsc/helpers.d.ts.map +1 -0
  643. package/dist/rsc/helpers.js +55 -0
  644. package/dist/rsc/helpers.js.map +1 -0
  645. package/dist/rsc/index.d.ts +22 -0
  646. package/dist/rsc/index.d.ts.map +1 -0
  647. package/dist/rsc/index.js +23 -0
  648. package/dist/rsc/index.js.map +1 -0
  649. package/dist/rsc/nonce.d.ts +9 -0
  650. package/dist/rsc/nonce.d.ts.map +1 -0
  651. package/dist/rsc/nonce.js +18 -0
  652. package/dist/rsc/nonce.js.map +1 -0
  653. package/dist/rsc/types.d.ts +206 -0
  654. package/dist/rsc/types.d.ts.map +1 -0
  655. package/dist/rsc/types.js +8 -0
  656. package/dist/rsc/types.js.map +1 -0
  657. package/dist/search-params.d.ts +103 -0
  658. package/dist/search-params.d.ts.map +1 -0
  659. package/dist/search-params.js +74 -0
  660. package/dist/search-params.js.map +1 -0
  661. package/dist/segment-system.d.ts +75 -0
  662. package/dist/segment-system.d.ts.map +1 -0
  663. package/dist/segment-system.js +336 -0
  664. package/dist/segment-system.js.map +1 -0
  665. package/dist/server/context.d.ts +245 -0
  666. package/dist/server/context.d.ts.map +1 -0
  667. package/dist/server/context.js +197 -0
  668. package/dist/server/context.js.map +1 -0
  669. package/dist/server/fetchable-loader-store.d.ts +18 -0
  670. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  671. package/dist/server/fetchable-loader-store.js +18 -0
  672. package/dist/server/fetchable-loader-store.js.map +1 -0
  673. package/dist/server/handle-store.d.ts +85 -0
  674. package/dist/server/handle-store.d.ts.map +1 -0
  675. package/dist/server/handle-store.js +142 -0
  676. package/dist/server/handle-store.js.map +1 -0
  677. package/dist/server/loader-registry.d.ts +55 -0
  678. package/dist/server/loader-registry.d.ts.map +1 -0
  679. package/dist/server/loader-registry.js +132 -0
  680. package/dist/server/loader-registry.js.map +1 -0
  681. package/dist/server/request-context.d.ts +226 -0
  682. package/dist/server/request-context.d.ts.map +1 -0
  683. package/dist/server/request-context.js +290 -0
  684. package/dist/server/request-context.js.map +1 -0
  685. package/dist/server/root-layout.d.ts +4 -0
  686. package/dist/server/root-layout.d.ts.map +1 -0
  687. package/dist/server/root-layout.js +5 -0
  688. package/dist/server/root-layout.js.map +1 -0
  689. package/dist/server.d.ts +15 -0
  690. package/dist/server.d.ts.map +1 -0
  691. package/dist/server.js +20 -0
  692. package/dist/server.js.map +1 -0
  693. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  697. package/dist/ssr/index.d.ts +98 -0
  698. package/dist/ssr/index.d.ts.map +1 -0
  699. package/dist/ssr/index.js +158 -0
  700. package/dist/ssr/index.js.map +1 -0
  701. package/dist/static-handler.d.ts +50 -0
  702. package/dist/static-handler.d.ts.map +1 -0
  703. package/dist/static-handler.gen.d.ts +5 -0
  704. package/dist/static-handler.gen.d.ts.map +1 -0
  705. package/dist/static-handler.gen.js +5 -0
  706. package/dist/static-handler.gen.js.map +1 -0
  707. package/dist/static-handler.js +29 -0
  708. package/dist/static-handler.js.map +1 -0
  709. package/dist/theme/ThemeProvider.d.ts +20 -0
  710. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  711. package/dist/theme/ThemeProvider.js +240 -0
  712. package/dist/theme/ThemeProvider.js.map +1 -0
  713. package/dist/theme/ThemeScript.d.ts +48 -0
  714. package/dist/theme/ThemeScript.d.ts.map +1 -0
  715. package/dist/theme/ThemeScript.js +13 -0
  716. package/dist/theme/ThemeScript.js.map +1 -0
  717. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  718. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  719. package/dist/theme/__tests__/theme.test.js +103 -0
  720. package/dist/theme/__tests__/theme.test.js.map +1 -0
  721. package/dist/theme/constants.d.ts +29 -0
  722. package/dist/theme/constants.d.ts.map +1 -0
  723. package/dist/theme/constants.js +48 -0
  724. package/dist/theme/constants.js.map +1 -0
  725. package/dist/theme/index.d.ts +31 -0
  726. package/dist/theme/index.d.ts.map +1 -0
  727. package/dist/theme/index.js +36 -0
  728. package/dist/theme/index.js.map +1 -0
  729. package/dist/theme/theme-context.d.ts +40 -0
  730. package/dist/theme/theme-context.d.ts.map +1 -0
  731. package/dist/theme/theme-context.js +60 -0
  732. package/dist/theme/theme-context.js.map +1 -0
  733. package/dist/theme/theme-script.d.ts +27 -0
  734. package/dist/theme/theme-script.d.ts.map +1 -0
  735. package/dist/theme/theme-script.js +147 -0
  736. package/dist/theme/theme-script.js.map +1 -0
  737. package/dist/theme/types.d.ts +163 -0
  738. package/dist/theme/types.d.ts.map +1 -0
  739. package/dist/theme/types.js +11 -0
  740. package/dist/theme/types.js.map +1 -0
  741. package/dist/theme/use-theme.d.ts +12 -0
  742. package/dist/theme/use-theme.d.ts.map +1 -0
  743. package/dist/theme/use-theme.js +40 -0
  744. package/dist/theme/use-theme.js.map +1 -0
  745. package/dist/types.d.ts +1479 -0
  746. package/dist/types.d.ts.map +1 -0
  747. package/dist/types.js +10 -0
  748. package/dist/types.js.map +1 -0
  749. package/dist/urls.d.ts +441 -0
  750. package/dist/urls.d.ts.map +1 -0
  751. package/dist/urls.gen.d.ts +8 -0
  752. package/dist/urls.gen.d.ts.map +1 -0
  753. package/dist/urls.gen.js +8 -0
  754. package/dist/urls.gen.js.map +1 -0
  755. package/dist/urls.js +443 -0
  756. package/dist/urls.js.map +1 -0
  757. package/dist/use-loader.d.ts +127 -0
  758. package/dist/use-loader.d.ts.map +1 -0
  759. package/dist/use-loader.js +237 -0
  760. package/dist/use-loader.js.map +1 -0
  761. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  765. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  769. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  773. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  777. package/dist/vite/ast-handler-extract.d.ts +49 -0
  778. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  779. package/dist/vite/ast-handler-extract.js +249 -0
  780. package/dist/vite/ast-handler-extract.js.map +1 -0
  781. package/dist/vite/expose-action-id.d.ts +19 -0
  782. package/dist/vite/expose-action-id.d.ts.map +1 -0
  783. package/dist/vite/expose-action-id.js +250 -0
  784. package/dist/vite/expose-action-id.js.map +1 -0
  785. package/dist/vite/expose-id-utils.d.ts +69 -0
  786. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  787. package/dist/vite/expose-id-utils.js +289 -0
  788. package/dist/vite/expose-id-utils.js.map +1 -0
  789. package/dist/vite/expose-internal-ids.d.ts +22 -0
  790. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  791. package/dist/vite/expose-internal-ids.js +886 -0
  792. package/dist/vite/expose-internal-ids.js.map +1 -0
  793. package/dist/vite/index.d.ts +149 -0
  794. package/dist/vite/index.d.ts.map +1 -0
  795. package/dist/vite/index.js +166 -46
  796. package/dist/vite/index.js.map +1 -0
  797. package/dist/vite/index.named-routes.gen.ts +103 -0
  798. package/dist/vite/package-resolution.d.ts +43 -0
  799. package/dist/vite/package-resolution.d.ts.map +1 -0
  800. package/dist/vite/package-resolution.js +112 -0
  801. package/dist/vite/package-resolution.js.map +1 -0
  802. package/dist/vite/virtual-entries.d.ts +25 -0
  803. package/dist/vite/virtual-entries.d.ts.map +1 -0
  804. package/dist/vite/virtual-entries.js +110 -0
  805. package/dist/vite/virtual-entries.js.map +1 -0
  806. package/package.json +15 -16
  807. package/src/bin/rango.ts +18 -0
  808. package/src/browser/navigation-bridge.ts +10 -4
  809. package/src/browser/rsc-router.tsx +2 -1
  810. package/src/browser/server-action-bridge.ts +448 -432
  811. package/src/build/generate-route-types.ts +2 -0
  812. package/src/build/route-types/router-processing.ts +125 -15
  813. package/src/index.rsc.ts +2 -1
  814. package/src/server/request-context.ts +8 -5
  815. package/src/vite/discovery/discover-routers.ts +16 -1
  816. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  817. package/src/vite/rango.ts +11 -0
  818. package/src/vite/router-discovery.ts +12 -0
  819. /package/{CLAUDE.md → AGENTS.md} +0 -0
@@ -99,27 +99,31 @@ export function createServerActionBridge(
99
99
  interceptSourceUrl?: string | null;
100
100
  }): Promise<void> {
101
101
  const src = opts?.interceptSourceUrl ?? null;
102
- using navTx = createNavigationTransaction(
102
+ const navTx = createNavigationTransaction(
103
103
  store,
104
104
  eventController,
105
105
  window.location.href,
106
106
  { replace: true, skipLoadingState: true },
107
107
  );
108
- await fetchPartialUpdate(
109
- window.location.href,
110
- opts?.segments ?? [],
111
- false,
112
- navTx.handle.signal,
113
- navTx.with({
114
- url: window.location.href,
115
- storeOnly: true,
116
- ...(src ? { intercept: true, interceptSourceUrl: src } : {}),
117
- }),
118
- {
119
- type: "action" as const,
120
- ...(src ? { interceptSourceUrl: src } : {}),
121
- },
122
- );
108
+ try {
109
+ await fetchPartialUpdate(
110
+ window.location.href,
111
+ opts?.segments ?? [],
112
+ false,
113
+ navTx.handle.signal,
114
+ navTx.with({
115
+ url: window.location.href,
116
+ storeOnly: true,
117
+ ...(src ? { intercept: true, interceptSourceUrl: src } : {}),
118
+ }),
119
+ {
120
+ type: "action" as const,
121
+ ...(src ? { interceptSourceUrl: src } : {}),
122
+ },
123
+ );
124
+ } finally {
125
+ navTx[Symbol.dispose]();
126
+ }
123
127
  }
124
128
 
125
129
  /**
@@ -137,440 +141,495 @@ export function createServerActionBridge(
137
141
  log("action start", { id, argsCount: args.length });
138
142
 
139
143
  // Start action in event controller - handles lifecycle tracking
140
- using handle = eventController.startAction(id, args);
144
+ const handle = eventController.startAction(id, args);
145
+ try {
146
+ const segmentState = store.getSegmentState();
147
+
148
+ // Mark cache as stale immediately when action starts
149
+ // This ensures SWR pattern kicks in if user navigates away during action
150
+ store.markCacheAsStaleAndBroadcast();
151
+
152
+ // Create temporary references for serialization
153
+ const temporaryReferences = deps.createTemporaryReferenceSet();
154
+
155
+ // Capture URL pathname at action start to detect navigation during action
156
+ // Must use window.location (not store.path) because intercepts change URL
157
+ // without changing store.path (e.g., /kanban -> /kanban/card/1)
158
+ const actionStartPathname = window.location.pathname;
159
+
160
+ // Build action request URL with current segments
161
+ const url = new URL(window.location.href);
162
+ url.searchParams.set("_rsc_action", id);
163
+ url.searchParams.set(
164
+ "_rsc_segments",
165
+ segmentState.currentSegmentIds.join(","),
166
+ );
167
+ // Add version param for version mismatch detection
168
+ if (version) {
169
+ url.searchParams.set("_rsc_v", version);
170
+ }
141
171
 
142
- const segmentState = store.getSegmentState();
172
+ // Encode arguments
173
+ const encodedBody = await deps.encodeReply(args, { temporaryReferences });
143
174
 
144
- // Mark cache as stale immediately when action starts
145
- // This ensures SWR pattern kicks in if user navigates away during action
146
- store.markCacheAsStaleAndBroadcast();
175
+ log("sending action request", {
176
+ url: url.href,
177
+ bodyType: typeof encodedBody,
178
+ isFormData: encodedBody instanceof FormData,
179
+ segmentCount: segmentState.currentSegmentIds.length,
180
+ });
181
+
182
+ // Track when the stream completes
183
+ let resolveStreamComplete: () => void;
184
+ const streamComplete = new Promise<void>((resolve) => {
185
+ resolveStreamComplete = resolve;
186
+ });
147
187
 
148
- // Create temporary references for serialization
149
- const temporaryReferences = deps.createTemporaryReferenceSet();
188
+ // Get intercept source URL if in intercept context
189
+ const interceptSourceUrl = store.getInterceptSourceUrl();
190
+
191
+ // Track streaming token - will be set when response arrives
192
+ let streamingToken: { end(): void } | null = null;
193
+
194
+ // Use a dedicated abort controller for the fetch so we can cancel network
195
+ // I/O without disrupting the Flight stream once the response has arrived.
196
+ // Aborting a response mid-stream causes React's Flight decoder to throw
197
+ // asynchronous unhandled errors (BodyStreamBuffer was aborted).
198
+ const fetchAbort = new AbortController();
199
+ const onHandleAbort = () => fetchAbort.abort();
200
+ handle.signal.addEventListener("abort", onHandleAbort, { once: true });
201
+
202
+ // Send action request with stream tracking
203
+ const responsePromise = fetch(url, {
204
+ method: "POST",
205
+ headers: {
206
+ "rsc-action": id,
207
+ "X-RSC-Router-Client-Path": segmentState.currentUrl,
208
+ ...(tx && { "X-RSC-Router-Request-Id": tx.requestId }),
209
+ // Send intercept source URL so server can maintain intercept context
210
+ ...(interceptSourceUrl && {
211
+ "X-RSC-Router-Intercept-Source": interceptSourceUrl,
212
+ }),
213
+ },
214
+ body: encodedBody,
215
+ signal: fetchAbort.signal,
216
+ }).then(async (response) => {
217
+ // Response arrived — disconnect fetch abort from handle abort so
218
+ // abortAllActions() doesn't disrupt the in-progress Flight stream.
219
+ handle.signal.removeEventListener("abort", onHandleAbort);
220
+
221
+ // Check for version mismatch - server wants us to reload
222
+ const reload = extractRscHeaderUrl(response, "X-RSC-Reload");
223
+ if (reload === "blocked") {
224
+ resolveStreamComplete();
225
+ return emptyResponse();
226
+ }
227
+ if (reload) {
228
+ log("version mismatch on action, reloading", {
229
+ reloadUrl: reload.url,
230
+ });
231
+ window.location.href = reload.url;
232
+ return new Promise<Response>(() => {});
233
+ }
150
234
 
151
- // Capture URL pathname at action start to detect navigation during action
152
- // Must use window.location (not store.path) because intercepts change URL
153
- // without changing store.path (e.g., /kanban -> /kanban/card/1)
154
- const actionStartPathname = window.location.pathname;
235
+ // Simple redirect from action (no state, no RSC payload).
236
+ // Short-circuits before createFromFetch no Flight deserialization needed.
237
+ // Check handle.signal.aborted to avoid redirecting from a stale action
238
+ // when the user has already navigated away.
239
+ const redirect = extractRscHeaderUrl(response, "X-RSC-Redirect");
240
+ if (redirect && redirect !== "blocked" && !handle.signal.aborted) {
241
+ log("action simple redirect", { url: redirect.url });
242
+ handle.complete(undefined);
243
+ if (onNavigate) {
244
+ await onNavigate(redirect.url, {
245
+ replace: true,
246
+ _skipCache: true,
247
+ });
248
+ } else {
249
+ window.location.href = redirect.url;
250
+ }
251
+ return new Promise<Response>(() => {});
252
+ }
253
+ if (redirect === "blocked") {
254
+ resolveStreamComplete();
255
+ return emptyResponse();
256
+ }
155
257
 
156
- // Build action request URL with current segments
157
- const url = new URL(window.location.href);
158
- url.searchParams.set("_rsc_action", id);
159
- url.searchParams.set(
160
- "_rsc_segments",
161
- segmentState.currentSegmentIds.join(","),
162
- );
163
- // Add version param for version mismatch detection
164
- if (version) {
165
- url.searchParams.set("_rsc_v", version);
166
- }
258
+ // Start streaming immediately when response arrives
259
+ if (!handle.signal.aborted) {
260
+ streamingToken = handle.startStreaming();
261
+ }
167
262
 
168
- // Encode arguments
169
- const encodedBody = await deps.encodeReply(args, { temporaryReferences });
170
-
171
- log("sending action request", {
172
- url: url.href,
173
- bodyType: typeof encodedBody,
174
- isFormData: encodedBody instanceof FormData,
175
- segmentCount: segmentState.currentSegmentIds.length,
176
- });
177
-
178
- // Track when the stream completes
179
- let resolveStreamComplete: () => void;
180
- const streamComplete = new Promise<void>((resolve) => {
181
- resolveStreamComplete = resolve;
182
- });
183
-
184
- // Get intercept source URL if in intercept context
185
- const interceptSourceUrl = store.getInterceptSourceUrl();
186
-
187
- // Track streaming token - will be set when response arrives
188
- let streamingToken: { end(): void } | null = null;
189
-
190
- // Use a dedicated abort controller for the fetch so we can cancel network
191
- // I/O without disrupting the Flight stream once the response has arrived.
192
- // Aborting a response mid-stream causes React's Flight decoder to throw
193
- // asynchronous unhandled errors (BodyStreamBuffer was aborted).
194
- const fetchAbort = new AbortController();
195
- const onHandleAbort = () => fetchAbort.abort();
196
- handle.signal.addEventListener("abort", onHandleAbort, { once: true });
197
-
198
- // Send action request with stream tracking
199
- const responsePromise = fetch(url, {
200
- method: "POST",
201
- headers: {
202
- "rsc-action": id,
203
- "X-RSC-Router-Client-Path": segmentState.currentUrl,
204
- ...(tx && { "X-RSC-Router-Request-Id": tx.requestId }),
205
- // Send intercept source URL so server can maintain intercept context
206
- ...(interceptSourceUrl && {
207
- "X-RSC-Router-Intercept-Source": interceptSourceUrl,
208
- }),
209
- },
210
- body: encodedBody,
211
- signal: fetchAbort.signal,
212
- }).then(async (response) => {
213
- // Response arrived — disconnect fetch abort from handle abort so
214
- // abortAllActions() doesn't disrupt the in-progress Flight stream.
215
- handle.signal.removeEventListener("abort", onHandleAbort);
216
-
217
- // Check for version mismatch - server wants us to reload
218
- const reload = extractRscHeaderUrl(response, "X-RSC-Reload");
219
- if (reload === "blocked") {
220
- resolveStreamComplete();
221
- return emptyResponse();
263
+ return teeWithCompletion(response, () => {
264
+ log("stream complete");
265
+ streamingToken?.end();
266
+ resolveStreamComplete();
267
+ });
268
+ });
269
+
270
+ // Deserialize response (MUST use same temporaryReferences)
271
+ let payload: RscPayload;
272
+ try {
273
+ payload = await deps.createFromFetch<RscPayload>(responsePromise, {
274
+ temporaryReferences,
275
+ });
276
+ } catch (error) {
277
+ // Clean up streaming token on error (may be null if fetch failed before .then() ran)
278
+ // The token is assigned in .then() callback which runs before this catch block,
279
+ // but TypeScript doesn't track cross-async assignments, so use type assertion
280
+ (streamingToken as { end(): void } | null)?.end();
281
+ // resolveStreamComplete is assigned in the Promise constructor so it's safe to call
282
+ resolveStreamComplete!();
283
+
284
+ // Silently swallow abort errors — the action was intentionally cancelled
285
+ // (e.g., user navigated away or abortAllActions was called).
286
+ // Return undefined instead of throwing to avoid surfacing as a page error.
287
+ // Check both DOMException AbortError and stream-level abort messages
288
+ // (BodyStreamBuffer was aborted) that propagate from the aborted fetch.
289
+ if (handle.signal.aborted) {
290
+ return undefined;
291
+ }
292
+
293
+ // Convert network-level errors to NetworkError for proper handling
294
+ const networkError = toNetworkError(error, {
295
+ url: url.toString(),
296
+ operation: "action",
297
+ });
298
+ if (networkError) {
299
+ handle.fail(networkError);
300
+ emitNetworkError(onUpdate, networkError, segmentState.currentUrl);
301
+ throw networkError;
302
+ }
303
+ throw error;
222
304
  }
223
- if (reload) {
224
- log("version mismatch on action, reloading", { reloadUrl: reload.url });
225
- window.location.href = reload.url;
226
- return new Promise<Response>(() => {});
305
+
306
+ log("action response received", {
307
+ isPartial: payload.metadata?.isPartial,
308
+ isError: payload.metadata?.isError,
309
+ matchedCount: payload.metadata?.matched?.length ?? 0,
310
+ diffCount: payload.metadata?.diff?.length ?? 0,
311
+ });
312
+
313
+ // Guard: if the action was aborted while streaming (e.g., user navigated
314
+ // away or abortAllActions fired), bail out before any reconcile/render/cache
315
+ // writes to avoid overwriting the current UI with stale action results.
316
+ if (handle.signal.aborted) {
317
+ log("action aborted after response, skipping reconciliation");
318
+ return undefined;
227
319
  }
228
320
 
229
- // Simple redirect from action (no state, no RSC payload).
230
- // Short-circuits before createFromFetch no Flight deserialization needed.
321
+ // Process response
322
+ const { metadata, returnValue } = payload;
323
+
324
+ // Handle action redirect: server converted the redirect to a Flight payload
325
+ // so we can perform SPA navigation instead of a full page reload.
231
326
  // Check handle.signal.aborted to avoid redirecting from a stale action
232
327
  // when the user has already navigated away.
233
- const redirect = extractRscHeaderUrl(response, "X-RSC-Redirect");
234
- if (redirect && redirect !== "blocked" && !handle.signal.aborted) {
235
- log("action simple redirect", { url: redirect.url });
236
- handle.complete(undefined);
328
+ if (metadata?.redirect && !handle.signal.aborted) {
329
+ const redirectUrl = validateRedirectOrigin(
330
+ metadata.redirect.url,
331
+ window.location.origin,
332
+ );
333
+ if (!redirectUrl) {
334
+ log("blocked action redirect payload", {
335
+ url: metadata.redirect.url,
336
+ });
337
+ handle.complete(returnValue?.data);
338
+ return returnValue?.data;
339
+ }
340
+ const redirectState = metadata.locationState;
341
+ log("action redirect", { url: redirectUrl });
342
+ handle.complete(returnValue?.data);
237
343
  if (onNavigate) {
238
- await onNavigate(redirect.url, {
344
+ await onNavigate(redirectUrl, {
345
+ state: redirectState,
239
346
  replace: true,
240
347
  _skipCache: true,
241
348
  });
242
349
  } else {
243
- window.location.href = redirect.url;
350
+ window.location.href = redirectUrl;
244
351
  }
245
- return new Promise<Response>(() => {});
246
- }
247
- if (redirect === "blocked") {
248
- resolveStreamComplete();
249
- return emptyResponse();
250
- }
251
-
252
- // Start streaming immediately when response arrives
253
- if (!handle.signal.aborted) {
254
- streamingToken = handle.startStreaming();
352
+ return returnValue?.data;
255
353
  }
256
354
 
257
- return teeWithCompletion(response, () => {
258
- log("stream complete");
259
- streamingToken?.end();
260
- resolveStreamComplete();
261
- });
262
- });
263
-
264
- // Deserialize response (MUST use same temporaryReferences)
265
- let payload: RscPayload;
266
- try {
267
- payload = await deps.createFromFetch<RscPayload>(responsePromise, {
268
- temporaryReferences,
269
- });
270
- } catch (error) {
271
- // Clean up streaming token on error (may be null if fetch failed before .then() ran)
272
- // The token is assigned in .then() callback which runs before this catch block,
273
- // but TypeScript doesn't track cross-async assignments, so use type assertion
274
- (streamingToken as { end(): void } | null)?.end();
275
- // resolveStreamComplete is assigned in the Promise constructor so it's safe to call
276
- resolveStreamComplete!();
277
-
278
- // Silently swallow abort errors — the action was intentionally cancelled
279
- // (e.g., user navigated away or abortAllActions was called).
280
- // Return undefined instead of throwing to avoid surfacing as a page error.
281
- // Check both DOMException AbortError and stream-level abort messages
282
- // (BodyStreamBuffer was aborted) that propagate from the aborted fetch.
355
+ // Bail out if the action was aborted after deserialization (e.g. user
356
+ // navigated away or abortAllActions was called while the Flight stream
357
+ // was being consumed). Without this check the code below would mutate
358
+ // the store / UI for a stale action.
283
359
  if (handle.signal.aborted) {
284
- return undefined;
285
- }
286
-
287
- // Convert network-level errors to NetworkError for proper handling
288
- const networkError = toNetworkError(error, {
289
- url: url.toString(),
290
- operation: "action",
291
- });
292
- if (networkError) {
293
- handle.fail(networkError);
294
- emitNetworkError(onUpdate, networkError, segmentState.currentUrl);
295
- throw networkError;
360
+ log("action aborted after deserialization, skipping mutations");
361
+ return returnValue?.data;
296
362
  }
297
- throw error;
298
- }
299
363
 
300
- log("action response received", {
301
- isPartial: payload.metadata?.isPartial,
302
- isError: payload.metadata?.isError,
303
- matchedCount: payload.metadata?.matched?.length ?? 0,
304
- diffCount: payload.metadata?.diff?.length ?? 0,
305
- });
306
-
307
- // Guard: if the action was aborted while streaming (e.g., user navigated
308
- // away or abortAllActions fired), bail out before any reconcile/render/cache
309
- // writes to avoid overwriting the current UI with stale action results.
310
- if (handle.signal.aborted) {
311
- log("action aborted after response, skipping reconciliation");
312
- return undefined;
313
- }
364
+ const { matched, diff, segments, isPartial, isError } = metadata || {};
314
365
 
315
- // Process response
316
- const { metadata, returnValue } = payload;
317
-
318
- // Handle action redirect: server converted the redirect to a Flight payload
319
- // so we can perform SPA navigation instead of a full page reload.
320
- // Check handle.signal.aborted to avoid redirecting from a stale action
321
- // when the user has already navigated away.
322
- if (metadata?.redirect && !handle.signal.aborted) {
323
- const redirectUrl = validateRedirectOrigin(
324
- metadata.redirect.url,
325
- window.location.origin,
326
- );
327
- if (!redirectUrl) {
328
- log("blocked action redirect payload", { url: metadata.redirect.url });
329
- handle.complete(returnValue?.data);
330
- return returnValue?.data;
331
- }
332
- const redirectState = metadata.locationState;
333
- log("action redirect", { url: redirectUrl });
334
- handle.complete(returnValue?.data);
335
- if (onNavigate) {
336
- await onNavigate(redirectUrl, {
337
- state: redirectState,
338
- replace: true,
339
- _skipCache: true,
340
- });
341
- } else {
342
- window.location.href = redirectUrl;
366
+ // Log action result
367
+ if (returnValue && !returnValue.ok) {
368
+ console.error(`[Browser] Action failed:`, returnValue.data);
343
369
  }
344
- return returnValue?.data;
345
- }
346
370
 
347
- // Bail out if the action was aborted after deserialization (e.g. user
348
- // navigated away or abortAllActions was called while the Flight stream
349
- // was being consumed). Without this check the code below would mutate
350
- // the store / UI for a stale action.
351
- if (handle.signal.aborted) {
352
- log("action aborted after deserialization, skipping mutations");
353
- return returnValue?.data;
354
- }
371
+ // Handle error responses with error boundary UI
372
+ if (isError && isPartial && segments && diff) {
373
+ log("processing error boundary response");
355
374
 
356
- const { matched, diff, segments, isPartial, isError } = metadata || {};
375
+ // Fail current handle BEFORE aborting all actions so the event controller
376
+ // records the error state (abortAllActions clears inflight entries)
377
+ if (returnValue && !returnValue.ok) {
378
+ handle.fail(returnValue.data);
379
+ }
357
380
 
358
- // Log action result
359
- if (returnValue && !returnValue.ok) {
360
- console.error(`[Browser] Action failed:`, returnValue.data);
361
- }
381
+ // Abort all other pending action requests - error takes precedence
382
+ // This prevents other actions from completing and overwriting the error UI
383
+ eventController.abortAllActions();
362
384
 
363
- // Handle error responses with error boundary UI
364
- if (isError && isPartial && segments && diff) {
365
- log("processing error boundary response");
385
+ // Clear concurrent action tracking - no consolidation needed when showing error
386
+ handle.clearConsolidation();
366
387
 
367
- // Fail current handle BEFORE aborting all actions so the event controller
368
- // records the error state (abortAllActions clears inflight entries)
369
- if (returnValue && !returnValue.ok) {
370
- handle.fail(returnValue.data);
371
- }
388
+ // Get current page's cached segments
389
+ const currentKey = store.getHistoryKey();
390
+ const cached = store.getCachedSegments(currentKey);
391
+ const cachedSegments = cached?.segments || [];
372
392
 
373
- // Abort all other pending action requests - error takes precedence
374
- // This prevents other actions from completing and overwriting the error UI
375
- eventController.abortAllActions();
393
+ // Reconcile error segments with cached tree
394
+ const errorResult = reconcileErrorSegments(cachedSegments, segments);
376
395
 
377
- // Clear concurrent action tracking - no consolidation needed when showing error
378
- handle.clearConsolidation();
396
+ // Render the full tree with error segment merged with parent layouts
397
+ const errorTree = await renderSegments(errorResult.mainSegments, {
398
+ isAction: true,
399
+ interceptSegments:
400
+ errorResult.interceptSegments.length > 0
401
+ ? errorResult.interceptSegments
402
+ : undefined,
403
+ });
379
404
 
380
- // Get current page's cached segments
381
- const currentKey = store.getHistoryKey();
382
- const cached = store.getCachedSegments(currentKey);
383
- const cachedSegments = cached?.segments || [];
405
+ // Re-check route stability after async renderSegments — user may have
406
+ // navigated away while the error tree was being prepared.
407
+ if (window.location.pathname !== actionStartPathname) {
408
+ log("user navigated during error render, skipping");
409
+ if (returnValue && !returnValue.ok) {
410
+ throw returnValue.data;
411
+ }
412
+ handle.complete(undefined);
413
+ return undefined;
414
+ }
415
+ const currentKeyNow = store.getHistoryKey();
416
+ if (currentKeyNow !== currentKey) {
417
+ log("history key changed during error render, skipping cache update");
418
+ if (returnValue && !returnValue.ok) {
419
+ throw returnValue.data;
420
+ }
421
+ handle.complete(undefined);
422
+ return undefined;
423
+ }
384
424
 
385
- // Reconcile error segments with cached tree
386
- const errorResult = reconcileErrorSegments(cachedSegments, segments);
425
+ // Update UI with error boundary
426
+ startTransition(() => {
427
+ onUpdate({ root: errorTree, metadata: metadata! });
428
+ });
387
429
 
388
- // Render the full tree with error segment merged with parent layouts
389
- const errorTree = await renderSegments(errorResult.mainSegments, {
390
- isAction: true,
391
- interceptSegments:
392
- errorResult.interceptSegments.length > 0
393
- ? errorResult.interceptSegments
394
- : undefined,
395
- });
430
+ // Update segment tracking to exclude error segment IDs
431
+ const errorSegmentIds = new Set(diff);
432
+ const segmentIdsAfterError = segmentState.currentSegmentIds.filter(
433
+ (id) => !errorSegmentIds.has(id),
434
+ );
396
435
 
397
- // Re-check route stability after async renderSegments — user may have
398
- // navigated away while the error tree was being prepared.
399
- if (window.location.pathname !== actionStartPathname) {
400
- log("user navigated during error render, skipping");
436
+ // Update store state
437
+ store.setSegmentIds(segmentIdsAfterError);
438
+ const currentHandleData = eventController.getHandleState().data;
439
+ store.cacheSegmentsForHistory(
440
+ currentKey,
441
+ errorResult.segments,
442
+ currentHandleData,
443
+ );
444
+
445
+ // Throw the error so the action promise rejects
401
446
  if (returnValue && !returnValue.ok) {
402
447
  throw returnValue.data;
403
448
  }
449
+
450
+ // No error in returnValue (shouldn't happen with isError: true)
404
451
  handle.complete(undefined);
405
452
  return undefined;
406
453
  }
407
- const currentKeyNow = store.getHistoryKey();
408
- if (currentKeyNow !== currentKey) {
409
- log("history key changed during error render, skipping cache update");
410
- if (returnValue && !returnValue.ok) {
411
- throw returnValue.data;
412
- }
413
- handle.complete(undefined);
414
- return undefined;
454
+
455
+ if (!isPartial) {
456
+ // Protocol invariant: action revalidation responses MUST be partial.
457
+ // The server always sends isPartial: true for successful revalidation
458
+ // and isPartial: true + isError: true for error boundary responses.
459
+ // A non-partial payload here indicates a server-side bug.
460
+ throw new Error(
461
+ `[Browser] Action response missing isPartial — the server must ` +
462
+ `always send partial payloads for action revalidation.`,
463
+ );
415
464
  }
416
465
 
417
- // Update UI with error boundary
418
- startTransition(() => {
419
- onUpdate({ root: errorTree, metadata: metadata! });
466
+ log("processing partial update", {
467
+ serverSegments: segments?.length ?? 0,
468
+ diff: diff?.join(", ") ?? "",
469
+ matched: matched?.join(", ") ?? "",
420
470
  });
421
471
 
422
- // Update segment tracking to exclude error segment IDs
423
- const errorSegmentIds = new Set(diff);
424
- const segmentIdsAfterError = segmentState.currentSegmentIds.filter(
425
- (id) => !errorSegmentIds.has(id),
426
- );
472
+ // Record revalidated segments for concurrent action tracking
473
+ if (diff) {
474
+ handle.recordRevalidatedSegments(diff);
475
+ }
427
476
 
428
- // Update store state
429
- store.setSegmentIds(segmentIdsAfterError);
430
- const currentHandleData = eventController.getHandleState().data;
431
- store.cacheSegmentsForHistory(
432
- currentKey,
433
- errorResult.segments,
434
- currentHandleData,
435
- );
477
+ // Get current page's cached segments for merging
478
+ const currentKey = store.getHistoryKey();
479
+ const cached = store.getCachedSegments(currentKey);
480
+ const cachedSegments = cached?.segments || [];
481
+
482
+ if (!matched) {
483
+ throw new Error("No matched segments in response");
484
+ }
485
+
486
+ // Reconcile server segments with cached segments (single source of truth)
487
+ const reconciled = reconcileSegments({
488
+ actor: "action",
489
+ matched,
490
+ diff: diff || [],
491
+ serverSegments: segments || [],
492
+ cachedSegments,
493
+ });
494
+ const fullSegments = reconciled.segments;
495
+
496
+ const returnData = returnValue?.data;
436
497
 
437
- // Throw the error so the action promise rejects
438
498
  if (returnValue && !returnValue.ok) {
499
+ handle.fail(returnValue.data);
439
500
  throw returnValue.data;
440
501
  }
441
502
 
442
- // No error in returnValue (shouldn't happen with isError: true)
443
- handle.complete(undefined);
444
- return undefined;
445
- }
446
-
447
- if (!isPartial) {
448
- // Protocol invariant: action revalidation responses MUST be partial.
449
- // The server always sends isPartial: true for successful revalidation
450
- // and isPartial: true + isError: true for error boundary responses.
451
- // A non-partial payload here indicates a server-side bug.
452
- throw new Error(
453
- `[Browser] Action response missing isPartial — the server must ` +
454
- `always send partial payloads for action revalidation.`,
455
- );
456
- }
503
+ // Classify the post-reconciliation scenario
504
+ const scenario = classifyActionOutcome({
505
+ handleId: handle.id,
506
+ inflightActions: eventController.getInflightActions(),
507
+ hadAnyConcurrentActions: eventController.hadAnyConcurrentActions(),
508
+ revalidatedSegments: handle.getRevalidatedSegments(),
509
+ actionStartPathname,
510
+ currentPathname: window.location.pathname,
511
+ actionStartLocationKey: locationKey,
512
+ currentLocationKey: window.history.state?.key,
513
+ reconciledSegmentCount: fullSegments.length,
514
+ matchedCount: matched.length,
515
+ currentInterceptSource: store.getInterceptSourceUrl(),
516
+ });
457
517
 
458
- log("processing partial update", {
459
- serverSegments: segments?.length ?? 0,
460
- diff: diff?.join(", ") ?? "",
461
- matched: matched?.join(", ") ?? "",
462
- });
518
+ switch (scenario.type) {
519
+ case "navigated-away": {
520
+ log("user navigated away during action", {
521
+ from: actionStartPathname,
522
+ to: window.location.pathname,
523
+ historyKeyChanged: scenario.historyKeyChanged,
524
+ });
525
+ // Clear concurrent action tracking - don't consolidate for old route's segments
526
+ handle.clearConsolidation();
527
+
528
+ if (scenario.historyKeyChanged) {
529
+ if (!scenario.onInterceptRoute) {
530
+ store.markCacheAsStaleAndBroadcast();
531
+ refetchRoute().catch((error) => {
532
+ if (isBackgroundSuppressible(error)) return;
533
+ console.error(
534
+ "[Browser] Background revalidation failed:",
535
+ error,
536
+ );
537
+ });
538
+ }
539
+ break;
540
+ }
463
541
 
464
- // Record revalidated segments for concurrent action tracking
465
- if (diff) {
466
- handle.recordRevalidatedSegments(diff);
467
- }
542
+ // Same history key but different pathname - safe to refetch current route
543
+ store.markCacheAsStaleAndBroadcast();
544
+ await refetchRoute({
545
+ interceptSourceUrl: store.getInterceptSourceUrl(),
546
+ });
547
+ break;
548
+ }
468
549
 
469
- // Get current page's cached segments for merging
470
- const currentKey = store.getHistoryKey();
471
- const cached = store.getCachedSegments(currentKey);
472
- const cachedSegments = cached?.segments || [];
550
+ case "hmr-missing": {
551
+ console.warn(
552
+ `[Browser] Missing segments after action (HMR detected), refetching...`,
553
+ );
554
+ await refetchRoute({ interceptSourceUrl });
555
+ store.broadcastCacheInvalidation();
556
+ break;
557
+ }
473
558
 
474
- if (!matched) {
475
- throw new Error("No matched segments in response");
476
- }
559
+ case "consolidation-needed": {
560
+ log("consolidation fetch needed", {
561
+ segmentIds: scenario.segmentIds,
562
+ });
563
+ // Calculate segments to send (exclude the ones we want fresh)
564
+ const currentSegmentIds = store.getSegmentState().currentSegmentIds;
565
+ const segmentsToSend = currentSegmentIds.filter(
566
+ (sid) => !scenario.segmentIds.includes(sid),
567
+ );
477
568
 
478
- // Reconcile server segments with cached segments (single source of truth)
479
- const reconciled = reconcileSegments({
480
- actor: "action",
481
- matched,
482
- diff: diff || [],
483
- serverSegments: segments || [],
484
- cachedSegments,
485
- });
486
- const fullSegments = reconciled.segments;
487
-
488
- const returnData = returnValue?.data;
489
-
490
- if (returnValue && !returnValue.ok) {
491
- handle.fail(returnValue.data);
492
- throw returnValue.data;
493
- }
569
+ // Clear consolidation tracking before fetch
570
+ handle.clearConsolidation();
494
571
 
495
- // Classify the post-reconciliation scenario
496
- const scenario = classifyActionOutcome({
497
- handleId: handle.id,
498
- inflightActions: eventController.getInflightActions(),
499
- hadAnyConcurrentActions: eventController.hadAnyConcurrentActions(),
500
- revalidatedSegments: handle.getRevalidatedSegments(),
501
- actionStartPathname,
502
- currentPathname: window.location.pathname,
503
- actionStartLocationKey: locationKey,
504
- currentLocationKey: window.history.state?.key,
505
- reconciledSegmentCount: fullSegments.length,
506
- matchedCount: matched.length,
507
- currentInterceptSource: store.getInterceptSourceUrl(),
508
- });
509
-
510
- switch (scenario.type) {
511
- case "navigated-away": {
512
- log("user navigated away during action", {
513
- from: actionStartPathname,
514
- to: window.location.pathname,
515
- historyKeyChanged: scenario.historyKeyChanged,
516
- });
517
- // Clear concurrent action tracking - don't consolidate for old route's segments
518
- handle.clearConsolidation();
572
+ await refetchRoute({
573
+ segments: segmentsToSend,
574
+ interceptSourceUrl,
575
+ });
576
+ store.broadcastCacheInvalidation();
577
+ break;
578
+ }
519
579
 
520
- if (scenario.historyKeyChanged) {
521
- if (!scenario.onInterceptRoute) {
522
- store.markCacheAsStaleAndBroadcast();
523
- refetchRoute().catch((error) => {
524
- if (isBackgroundSuppressible(error)) return;
525
- console.error("[Browser] Background revalidation failed:", error);
526
- });
580
+ case "concurrent-skip": {
581
+ log("skipping UI update, other actions fetching", {
582
+ otherCount: scenario.otherFetchingCount,
583
+ });
584
+ // Only update store if history key hasn't changed (user didn't navigate away)
585
+ const currentKeyNow = store.getHistoryKey();
586
+ if (currentKeyNow === currentKey) {
587
+ store.setSegmentIds(matched);
588
+ const currentHandleData = eventController.getHandleState().data;
589
+ store.cacheSegmentsForHistory(
590
+ currentKey,
591
+ fullSegments,
592
+ currentHandleData,
593
+ );
527
594
  }
528
595
  break;
529
596
  }
530
597
 
531
- // Same history key but different pathname - safe to refetch current route
532
- store.markCacheAsStaleAndBroadcast();
533
- await refetchRoute({
534
- interceptSourceUrl: store.getInterceptSourceUrl(),
535
- });
536
- break;
537
- }
598
+ case "normal": {
599
+ // Prepare new tree (await loader data resolution)
600
+ const newTree = await renderSegments(reconciled.mainSegments, {
601
+ isAction: true,
602
+ interceptSegments:
603
+ reconciled.interceptSegments.length > 0
604
+ ? reconciled.interceptSegments
605
+ : undefined,
606
+ });
538
607
 
539
- case "hmr-missing": {
540
- console.warn(
541
- `[Browser] Missing segments after action (HMR detected), refetching...`,
542
- );
543
- await refetchRoute({ interceptSourceUrl });
544
- store.broadcastCacheInvalidation();
545
- break;
546
- }
608
+ // Re-check if user navigated away (could happen during async renderSegments)
609
+ if (window.location.pathname !== actionStartPathname) {
610
+ log("user navigated during render, skipping");
611
+ break;
612
+ }
547
613
 
548
- case "consolidation-needed": {
549
- log("consolidation fetch needed", { segmentIds: scenario.segmentIds });
550
- // Calculate segments to send (exclude the ones we want fresh)
551
- const currentSegmentIds = store.getSegmentState().currentSegmentIds;
552
- const segmentsToSend = currentSegmentIds.filter(
553
- (sid) => !scenario.segmentIds.includes(sid),
554
- );
614
+ // Verify the store's current key still matches what we captured at action start
615
+ // If they differ, user navigated away and we should NOT cache under the old key
616
+ const currentKeyNow = store.getHistoryKey();
617
+ if (currentKeyNow !== currentKey) {
618
+ log("history key changed during action, skipping cache update");
619
+ break;
620
+ }
555
621
 
556
- // Clear consolidation tracking before fetch
557
- handle.clearConsolidation();
622
+ startTransition(() => {
623
+ onUpdate({ root: newTree, metadata: metadata! });
624
+ });
558
625
 
559
- await refetchRoute({
560
- segments: segmentsToSend,
561
- interceptSourceUrl,
562
- });
563
- store.broadcastCacheInvalidation();
564
- break;
565
- }
626
+ // Apply server-set location state to history.state (non-redirect flow)
627
+ const actionLocationState = metadata?.locationState;
628
+ if (actionLocationState) {
629
+ mergeLocationState(actionLocationState);
630
+ }
566
631
 
567
- case "concurrent-skip": {
568
- log("skipping UI update, other actions fetching", {
569
- otherCount: scenario.otherFetchingCount,
570
- });
571
- // Only update store if history key hasn't changed (user didn't navigate away)
572
- const currentKeyNow = store.getHistoryKey();
573
- if (currentKeyNow === currentKey) {
632
+ // Update store state
574
633
  store.setSegmentIds(matched);
575
634
  const currentHandleData = eventController.getHandleState().data;
576
635
  store.cacheSegmentsForHistory(
@@ -578,59 +637,16 @@ export function createServerActionBridge(
578
637
  fullSegments,
579
638
  currentHandleData,
580
639
  );
581
- }
582
- break;
583
- }
584
-
585
- case "normal": {
586
- // Prepare new tree (await loader data resolution)
587
- const newTree = await renderSegments(reconciled.mainSegments, {
588
- isAction: true,
589
- interceptSegments:
590
- reconciled.interceptSegments.length > 0
591
- ? reconciled.interceptSegments
592
- : undefined,
593
- });
594
-
595
- // Re-check if user navigated away (could happen during async renderSegments)
596
- if (window.location.pathname !== actionStartPathname) {
597
- log("user navigated during render, skipping");
598
- break;
599
- }
600
-
601
- // Verify the store's current key still matches what we captured at action start
602
- // If they differ, user navigated away and we should NOT cache under the old key
603
- const currentKeyNow = store.getHistoryKey();
604
- if (currentKeyNow !== currentKey) {
605
- log("history key changed during action, skipping cache update");
640
+ store.markCacheAsStaleAndBroadcast();
606
641
  break;
607
642
  }
608
-
609
- startTransition(() => {
610
- onUpdate({ root: newTree, metadata: metadata! });
611
- });
612
-
613
- // Apply server-set location state to history.state (non-redirect flow)
614
- const actionLocationState = metadata?.locationState;
615
- if (actionLocationState) {
616
- mergeLocationState(actionLocationState);
617
- }
618
-
619
- // Update store state
620
- store.setSegmentIds(matched);
621
- const currentHandleData = eventController.getHandleState().data;
622
- store.cacheSegmentsForHistory(
623
- currentKey,
624
- fullSegments,
625
- currentHandleData,
626
- );
627
- store.markCacheAsStaleAndBroadcast();
628
- break;
629
643
  }
630
- }
631
644
 
632
- handle.complete(returnData);
633
- return returnData;
645
+ handle.complete(returnData);
646
+ return returnData;
647
+ } finally {
648
+ handle[Symbol.dispose]();
649
+ }
634
650
  }
635
651
 
636
652
  return {