@rangojs/router 0.0.0-experimental.dfdb0387 → 0.0.0-experimental.e9c0b2f2

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 (1199) hide show
  1. package/AGENTS.md +8 -0
  2. package/README.md +184 -31
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +339 -106
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +3247 -1128
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/index.named-routes.gen.ts +103 -0
  802. package/dist/vite/package-resolution.d.ts +43 -0
  803. package/dist/vite/package-resolution.d.ts.map +1 -0
  804. package/dist/vite/package-resolution.js +112 -0
  805. package/dist/vite/package-resolution.js.map +1 -0
  806. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  807. package/dist/vite/virtual-entries.d.ts +25 -0
  808. package/dist/vite/virtual-entries.d.ts.map +1 -0
  809. package/dist/vite/virtual-entries.js +110 -0
  810. package/dist/vite/virtual-entries.js.map +1 -0
  811. package/package.json +81 -12
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +64 -2
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +224 -32
  816. package/skills/caching/SKILL.md +279 -17
  817. package/skills/composability/SKILL.md +27 -2
  818. package/skills/css/SKILL.md +76 -0
  819. package/skills/debug-manifest/SKILL.md +4 -2
  820. package/skills/document-cache/SKILL.md +78 -55
  821. package/skills/handler-use/SKILL.md +364 -0
  822. package/skills/hooks/SKILL.md +250 -30
  823. package/skills/host-router/SKILL.md +125 -23
  824. package/skills/i18n/SKILL.md +276 -0
  825. package/skills/intercept/SKILL.md +50 -6
  826. package/skills/layout/SKILL.md +35 -9
  827. package/skills/links/SKILL.md +247 -17
  828. package/skills/loader/SKILL.md +225 -9
  829. package/skills/middleware/SKILL.md +50 -13
  830. package/skills/migrate-nextjs/SKILL.md +584 -0
  831. package/skills/migrate-react-router/SKILL.md +771 -0
  832. package/skills/mime-routes/SKILL.md +28 -1
  833. package/skills/observability/SKILL.md +194 -0
  834. package/skills/parallel/SKILL.md +77 -7
  835. package/skills/prerender/SKILL.md +45 -43
  836. package/skills/rango/SKILL.md +257 -22
  837. package/skills/react-compiler/SKILL.md +168 -0
  838. package/skills/response-routes/SKILL.md +123 -48
  839. package/skills/route/SKILL.md +70 -5
  840. package/skills/router-setup/SKILL.md +30 -6
  841. package/skills/scripts/SKILL.md +179 -0
  842. package/skills/server-actions/SKILL.md +775 -0
  843. package/skills/streams-and-websockets/SKILL.md +283 -0
  844. package/skills/tailwind/SKILL.md +27 -3
  845. package/skills/testing/SKILL.md +129 -0
  846. package/skills/testing/bindings.md +103 -0
  847. package/skills/testing/cache-prerender.md +127 -0
  848. package/skills/testing/client-components.md +124 -0
  849. package/skills/testing/e2e-parity.md +125 -0
  850. package/skills/testing/flight.md +91 -0
  851. package/skills/testing/handles.md +129 -0
  852. package/skills/testing/loader.md +128 -0
  853. package/skills/testing/middleware.md +99 -0
  854. package/skills/testing/render-handler.md +121 -0
  855. package/skills/testing/response-routes.md +95 -0
  856. package/skills/testing/reverse-and-types.md +84 -0
  857. package/skills/testing/server-actions.md +107 -0
  858. package/skills/testing/server-tree.md +128 -0
  859. package/skills/testing/setup.md +123 -0
  860. package/skills/typesafety/SKILL.md +322 -29
  861. package/skills/use-cache/SKILL.md +46 -14
  862. package/skills/vercel/SKILL.md +128 -0
  863. package/skills/view-transitions/SKILL.md +294 -0
  864. package/src/__augment-tests__/augment.ts +81 -0
  865. package/src/__augment-tests__/augmented.check.ts +116 -0
  866. package/src/__internal.ts +0 -65
  867. package/src/browser/action-coordinator.ts +53 -36
  868. package/src/browser/action-fence.ts +47 -0
  869. package/src/browser/app-shell.ts +39 -0
  870. package/src/browser/connection-warmup.ts +134 -0
  871. package/src/browser/cookie-name.ts +140 -0
  872. package/src/browser/event-controller.ts +192 -150
  873. package/src/browser/history-state.ts +21 -0
  874. package/src/browser/index.ts +3 -3
  875. package/src/browser/invalidate-client-cache.ts +52 -0
  876. package/src/browser/navigation-bridge.ts +50 -11
  877. package/src/browser/navigation-client.ts +113 -78
  878. package/src/browser/navigation-store-handle.ts +38 -0
  879. package/src/browser/navigation-store.ts +33 -59
  880. package/src/browser/navigation-transaction.ts +9 -59
  881. package/src/browser/partial-update.ts +109 -122
  882. package/src/browser/prefetch/cache.ts +193 -68
  883. package/src/browser/prefetch/fetch.ts +293 -59
  884. package/src/browser/prefetch/queue.ts +42 -8
  885. package/src/browser/rango-state.ts +158 -76
  886. package/src/browser/react/Link.tsx +48 -20
  887. package/src/browser/react/NavigationProvider.tsx +95 -117
  888. package/src/browser/react/ScrollRestoration.tsx +10 -6
  889. package/src/browser/react/filter-segment-order.ts +66 -7
  890. package/src/browser/react/index.ts +0 -48
  891. package/src/browser/react/location-state-shared.ts +178 -8
  892. package/src/browser/react/location-state.ts +39 -14
  893. package/src/browser/react/use-action.ts +6 -15
  894. package/src/browser/react/use-handle.ts +17 -14
  895. package/src/browser/react/use-href.tsx +8 -1
  896. package/src/browser/react/use-link-status.ts +33 -8
  897. package/src/browser/react/use-navigation.ts +32 -7
  898. package/src/browser/react/use-params.ts +20 -10
  899. package/src/browser/react/use-reverse.ts +106 -0
  900. package/src/browser/react/use-router.ts +25 -3
  901. package/src/browser/react/use-search-params.ts +0 -5
  902. package/src/browser/react/use-segments.ts +11 -21
  903. package/src/browser/response-adapter.ts +66 -4
  904. package/src/browser/rsc-router.tsx +91 -24
  905. package/src/browser/scroll-restoration.ts +30 -17
  906. package/src/browser/segment-reconciler.ts +10 -14
  907. package/src/browser/segment-structure-assert.ts +2 -2
  908. package/src/browser/server-action-bridge.ts +214 -55
  909. package/src/browser/types.ts +48 -8
  910. package/src/browser/validate-redirect-origin.ts +43 -16
  911. package/src/build/collect-fallback-refs.ts +107 -0
  912. package/src/build/generate-manifest.ts +60 -35
  913. package/src/build/generate-route-types.ts +3 -1
  914. package/src/build/index.ts +8 -2
  915. package/src/build/prefix-tree-utils.ts +123 -0
  916. package/src/build/route-trie.ts +165 -36
  917. package/src/build/route-types/ast-route-extraction.ts +15 -8
  918. package/src/build/route-types/codegen.ts +16 -5
  919. package/src/build/route-types/include-resolution.ts +117 -23
  920. package/src/build/route-types/param-extraction.ts +6 -3
  921. package/src/build/route-types/per-module-writer.ts +22 -6
  922. package/src/build/route-types/router-processing.ts +128 -51
  923. package/src/build/route-types/scan-filter.ts +1 -1
  924. package/src/build/route-types/source-scan.ts +216 -0
  925. package/src/build/runtime-discovery.ts +9 -20
  926. package/src/cache/cache-error.ts +104 -0
  927. package/src/cache/cache-key-utils.ts +29 -13
  928. package/src/cache/cache-policy.ts +108 -34
  929. package/src/cache/cache-runtime.ts +199 -37
  930. package/src/cache/cache-scope.ts +188 -82
  931. package/src/cache/cache-tag.ts +103 -0
  932. package/src/cache/cf/cf-base64.ts +33 -0
  933. package/src/cache/cf/cf-cache-constants.ts +127 -0
  934. package/src/cache/cf/cf-cache-store.ts +1989 -378
  935. package/src/cache/cf/cf-cache-types.ts +349 -0
  936. package/src/cache/cf/cf-kv-utils.ts +46 -0
  937. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  938. package/src/cache/cf/index.ts +6 -16
  939. package/src/cache/document-cache.ts +72 -20
  940. package/src/cache/handle-snapshot.ts +70 -0
  941. package/src/cache/index.ts +22 -20
  942. package/src/cache/memory-segment-store.ts +136 -37
  943. package/src/cache/profile-registry.ts +31 -31
  944. package/src/cache/read-through-swr.ts +41 -11
  945. package/src/cache/segment-codec.ts +9 -17
  946. package/src/cache/tag-invalidation.ts +230 -0
  947. package/src/cache/types.ts +37 -100
  948. package/src/cache/vercel/index.ts +11 -0
  949. package/src/cache/vercel/vercel-cache-store.ts +855 -0
  950. package/src/client.rsc.tsx +44 -21
  951. package/src/client.tsx +118 -235
  952. package/src/cloudflare/index.ts +11 -0
  953. package/src/cloudflare/tracing.ts +109 -0
  954. package/src/component-utils.ts +19 -0
  955. package/src/components/DefaultDocument.tsx +8 -2
  956. package/src/context-var.ts +18 -6
  957. package/src/decode-loader-results.ts +52 -0
  958. package/src/defer.ts +196 -0
  959. package/src/deps/ssr.ts +0 -1
  960. package/src/encode-kv.ts +49 -0
  961. package/src/errors.ts +30 -4
  962. package/src/escape-script.ts +52 -0
  963. package/src/handle.ts +31 -23
  964. package/src/handles/MetaTags.tsx +56 -19
  965. package/src/handles/Scripts.tsx +183 -0
  966. package/src/handles/breadcrumbs.ts +37 -8
  967. package/src/handles/is-thenable.ts +19 -0
  968. package/src/handles/meta.ts +51 -40
  969. package/src/handles/script.ts +244 -0
  970. package/src/host/cookie-handler.ts +9 -60
  971. package/src/host/errors.ts +0 -24
  972. package/src/host/index.ts +8 -2
  973. package/src/host/pattern-matcher.ts +23 -52
  974. package/src/host/router.ts +107 -99
  975. package/src/host/testing.ts +40 -27
  976. package/src/host/types.ts +37 -4
  977. package/src/host/utils.ts +1 -1
  978. package/src/href-client.ts +137 -22
  979. package/src/index.rsc.ts +90 -11
  980. package/src/index.ts +125 -19
  981. package/src/internal-debug.ts +2 -4
  982. package/src/loader-store.ts +500 -0
  983. package/src/loader.rsc.ts +20 -13
  984. package/src/loader.ts +12 -11
  985. package/src/missing-id-error.ts +68 -0
  986. package/src/network-error-thrower.tsx +1 -6
  987. package/src/outlet-context.ts +1 -1
  988. package/src/outlet-provider.tsx +1 -5
  989. package/src/prerender/param-hash.ts +16 -16
  990. package/src/prerender/store.ts +32 -37
  991. package/src/prerender.ts +61 -6
  992. package/src/redirect-origin.ts +100 -0
  993. package/src/regex-escape.ts +8 -0
  994. package/src/response-utils.ts +62 -0
  995. package/src/reverse.ts +65 -36
  996. package/src/root-error-boundary.tsx +1 -19
  997. package/src/route-content-wrapper.tsx +7 -72
  998. package/src/route-definition/dsl-helpers.ts +418 -273
  999. package/src/route-definition/helper-factories.ts +29 -139
  1000. package/src/route-definition/helpers-types.ts +103 -31
  1001. package/src/route-definition/redirect.ts +44 -11
  1002. package/src/route-definition/resolve-handler-use.ts +12 -0
  1003. package/src/route-definition/use-item-types.ts +32 -0
  1004. package/src/route-map-builder.ts +0 -16
  1005. package/src/route-types.ts +26 -41
  1006. package/src/router/basename.ts +14 -0
  1007. package/src/router/content-negotiation.ts +73 -25
  1008. package/src/router/error-handling.ts +45 -18
  1009. package/src/router/find-match.ts +44 -23
  1010. package/src/router/handler-context.ts +27 -39
  1011. package/src/router/instrument.ts +350 -0
  1012. package/src/router/intercept-resolution.ts +39 -20
  1013. package/src/router/lazy-includes.ts +15 -52
  1014. package/src/router/loader-resolution.ts +155 -72
  1015. package/src/router/logging.ts +0 -6
  1016. package/src/router/manifest.ts +40 -42
  1017. package/src/router/match-api.ts +4 -23
  1018. package/src/router/match-context.ts +0 -22
  1019. package/src/router/match-handlers.ts +58 -58
  1020. package/src/router/match-middleware/background-revalidation.ts +6 -7
  1021. package/src/router/match-middleware/cache-lookup.ts +161 -286
  1022. package/src/router/match-middleware/cache-store.ts +31 -34
  1023. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1024. package/src/router/match-middleware/segment-resolution.ts +0 -22
  1025. package/src/router/match-pipelines.ts +1 -42
  1026. package/src/router/match-result.ts +44 -74
  1027. package/src/router/metrics.ts +0 -34
  1028. package/src/router/middleware-types.ts +7 -134
  1029. package/src/router/middleware.ts +266 -166
  1030. package/src/router/navigation-snapshot.ts +0 -51
  1031. package/src/router/params-util.ts +23 -0
  1032. package/src/router/pattern-matching.ts +132 -90
  1033. package/src/router/prefetch-cache-ttl.ts +51 -0
  1034. package/src/router/prerender-match.ts +104 -65
  1035. package/src/router/preview-match.ts +3 -1
  1036. package/src/router/request-classification.ts +28 -62
  1037. package/src/router/revalidation.ts +123 -73
  1038. package/src/router/route-snapshot.ts +0 -1
  1039. package/src/router/router-context.ts +3 -28
  1040. package/src/router/router-interfaces.ts +83 -35
  1041. package/src/router/router-options.ts +136 -5
  1042. package/src/router/router-registry.ts +2 -5
  1043. package/src/router/segment-resolution/fresh.ts +93 -84
  1044. package/src/router/segment-resolution/helpers.ts +86 -6
  1045. package/src/router/segment-resolution/loader-cache.ts +62 -37
  1046. package/src/router/segment-resolution/revalidation.ts +269 -320
  1047. package/src/router/segment-resolution/static-store.ts +19 -5
  1048. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1049. package/src/router/segment-resolution/view-transition-default.ts +36 -0
  1050. package/src/router/segment-resolution.ts +5 -1
  1051. package/src/router/segment-wrappers.ts +6 -5
  1052. package/src/router/state-cookie-name.ts +33 -0
  1053. package/src/router/substitute-pattern-params.ts +56 -0
  1054. package/src/router/telemetry-otel.ts +161 -199
  1055. package/src/router/telemetry.ts +96 -19
  1056. package/src/router/timeout.ts +0 -20
  1057. package/src/router/tracing.ts +206 -0
  1058. package/src/router/trie-matching.ts +163 -59
  1059. package/src/router/types.ts +9 -63
  1060. package/src/router/url-params.ts +44 -0
  1061. package/src/router.ts +110 -55
  1062. package/src/rsc/handler-context.ts +3 -2
  1063. package/src/rsc/handler.ts +266 -219
  1064. package/src/rsc/helpers.ts +168 -46
  1065. package/src/rsc/index.ts +2 -5
  1066. package/src/rsc/json-route-result.ts +38 -0
  1067. package/src/rsc/loader-fetch.ts +114 -38
  1068. package/src/rsc/manifest-init.ts +28 -41
  1069. package/src/rsc/origin-guard.ts +39 -25
  1070. package/src/rsc/progressive-enhancement.ts +63 -9
  1071. package/src/rsc/redirect-guard.ts +99 -0
  1072. package/src/rsc/response-cache-serve.ts +238 -0
  1073. package/src/rsc/response-error.ts +79 -12
  1074. package/src/rsc/response-route-handler.ts +99 -189
  1075. package/src/rsc/rsc-rendering.ts +99 -75
  1076. package/src/rsc/runtime-warnings.ts +23 -10
  1077. package/src/rsc/server-action.ts +258 -115
  1078. package/src/rsc/ssr-setup.ts +16 -0
  1079. package/src/rsc/types.ts +23 -5
  1080. package/src/runtime-env.ts +18 -0
  1081. package/src/search-params.ts +35 -30
  1082. package/src/segment-content-promise.ts +67 -0
  1083. package/src/segment-loader-promise.ts +149 -0
  1084. package/src/segment-system.tsx +218 -202
  1085. package/src/serialize.ts +243 -0
  1086. package/src/server/context.ts +175 -53
  1087. package/src/server/cookie-parse.ts +32 -0
  1088. package/src/server/cookie-store.ts +80 -5
  1089. package/src/server/handle-store.ts +21 -38
  1090. package/src/server/loader-registry.ts +21 -42
  1091. package/src/server/request-context.ts +235 -175
  1092. package/src/ssr/index.tsx +21 -16
  1093. package/src/static-handler.ts +10 -13
  1094. package/src/testing/cache-status.ts +162 -0
  1095. package/src/testing/collect-handle.ts +40 -0
  1096. package/src/testing/dispatch.ts +701 -0
  1097. package/src/testing/dom.entry.ts +22 -0
  1098. package/src/testing/e2e/fixture.ts +188 -0
  1099. package/src/testing/e2e/index.ts +128 -0
  1100. package/src/testing/e2e/matchers.ts +35 -0
  1101. package/src/testing/e2e/page-helpers.ts +272 -0
  1102. package/src/testing/e2e/parity.ts +387 -0
  1103. package/src/testing/e2e/server.ts +195 -0
  1104. package/src/testing/flight-matchers.ts +97 -0
  1105. package/src/testing/flight-normalize.ts +11 -0
  1106. package/src/testing/flight-runtime.d.ts +57 -0
  1107. package/src/testing/flight-tree.ts +682 -0
  1108. package/src/testing/flight.entry.ts +52 -0
  1109. package/src/testing/flight.ts +257 -0
  1110. package/src/testing/generated-routes.ts +183 -0
  1111. package/src/testing/index.ts +99 -0
  1112. package/src/testing/internal/context.ts +371 -0
  1113. package/src/testing/internal/flight-client-globals.ts +30 -0
  1114. package/src/testing/internal/seed-vars.ts +54 -0
  1115. package/src/testing/render-handler.ts +343 -0
  1116. package/src/testing/render-route.tsx +581 -0
  1117. package/src/testing/run-loader.ts +385 -0
  1118. package/src/testing/run-middleware.ts +205 -0
  1119. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1120. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1121. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1122. package/src/testing/vitest-stubs/version.ts +5 -0
  1123. package/src/testing/vitest.ts +305 -0
  1124. package/src/theme/ThemeProvider.tsx +20 -58
  1125. package/src/theme/ThemeScript.tsx +7 -9
  1126. package/src/theme/constants.ts +52 -13
  1127. package/src/theme/index.ts +0 -7
  1128. package/src/theme/theme-context.ts +1 -5
  1129. package/src/theme/theme-script.ts +22 -21
  1130. package/src/theme/use-theme.ts +0 -3
  1131. package/src/types/boundaries.ts +0 -35
  1132. package/src/types/cache-types.ts +13 -4
  1133. package/src/types/error-types.ts +30 -90
  1134. package/src/types/global-namespace.ts +54 -41
  1135. package/src/types/handler-context.ts +109 -61
  1136. package/src/types/index.ts +1 -10
  1137. package/src/types/loader-types.ts +11 -9
  1138. package/src/types/request-scope.ts +112 -0
  1139. package/src/types/route-config.ts +6 -50
  1140. package/src/types/route-entry.ts +11 -6
  1141. package/src/types/segments.ts +35 -15
  1142. package/src/urls/include-helper.ts +33 -70
  1143. package/src/urls/index.ts +1 -11
  1144. package/src/urls/path-helper-types.ts +49 -9
  1145. package/src/urls/path-helper.ts +17 -106
  1146. package/src/urls/pattern-types.ts +36 -19
  1147. package/src/urls/response-types.ts +22 -29
  1148. package/src/urls/type-extraction.ts +58 -139
  1149. package/src/urls/urls-function.ts +1 -18
  1150. package/src/use-loader.tsx +292 -107
  1151. package/src/vercel/index.ts +11 -0
  1152. package/src/vercel/tracing.ts +88 -0
  1153. package/src/vite/debug.ts +185 -0
  1154. package/src/vite/discovery/bundle-postprocess.ts +8 -7
  1155. package/src/vite/discovery/discover-routers.ts +126 -85
  1156. package/src/vite/discovery/discovery-errors.ts +194 -0
  1157. package/src/vite/discovery/gate-state.ts +171 -0
  1158. package/src/vite/discovery/prerender-collection.ts +96 -68
  1159. package/src/vite/discovery/route-types-writer.ts +40 -84
  1160. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1161. package/src/vite/discovery/state.ts +45 -1
  1162. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1163. package/src/vite/index.ts +4 -0
  1164. package/src/vite/plugin-types.ts +210 -10
  1165. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1166. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1167. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1168. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1169. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1170. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1171. package/src/vite/plugins/expose-action-id.ts +48 -95
  1172. package/src/vite/plugins/expose-id-utils.ts +88 -55
  1173. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1174. package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
  1175. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1176. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1177. package/src/vite/plugins/expose-internal-ids.ts +505 -486
  1178. package/src/vite/plugins/performance-tracks.ts +26 -25
  1179. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1180. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1181. package/src/vite/plugins/vercel-output.ts +295 -0
  1182. package/src/vite/plugins/version-injector.ts +21 -25
  1183. package/src/vite/plugins/version-plugin.ts +37 -40
  1184. package/src/vite/plugins/virtual-entries.ts +71 -18
  1185. package/src/vite/rango.ts +225 -137
  1186. package/src/vite/router-discovery.ts +769 -106
  1187. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1188. package/src/vite/utils/banner.ts +1 -1
  1189. package/src/vite/utils/bundle-analysis.ts +10 -15
  1190. package/src/vite/utils/client-chunks.ts +184 -0
  1191. package/src/vite/utils/directive-prologue.ts +40 -0
  1192. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1193. package/src/vite/utils/manifest-utils.ts +4 -59
  1194. package/src/vite/utils/package-resolution.ts +20 -52
  1195. package/src/vite/utils/prerender-utils.ts +67 -38
  1196. package/src/vite/utils/shared-utils.ts +95 -43
  1197. package/src/browser/action-response-classifier.ts +0 -99
  1198. package/src/browser/shallow.ts +0 -40
  1199. package/src/router/middleware-cookies.ts +0 -55
@@ -191,10 +191,15 @@ export function saveCurrentScrollPosition(): void {
191
191
 
192
192
  /**
193
193
  * Persist scroll positions to sessionStorage.
194
- * If the write fails due to quota exceeded, progressively evict the oldest
195
- * entries and retry until it succeeds or the store is empty.
194
+ * If the write fails (typically QuotaExceededError), evict the oldest ~1/4 of
195
+ * entries ONCE and retry the write a single time; if that still fails, remove
196
+ * our storage key entirely so we don't block other sessionStorage consumers.
197
+ * This is a single evict-then-retry-then-clear ladder, not a loop.
198
+ *
199
+ * Exported so that single eviction/retry/clear ladder is unit-testable directly.
200
+ * The browser drives it from the `pagehide` handler.
196
201
  */
197
- function persistToSessionStorage(): void {
202
+ export function persistToSessionStorage(): void {
198
203
  try {
199
204
  sessionStorage.setItem(
200
205
  SCROLL_STORAGE_KEY,
@@ -332,6 +337,8 @@ export function scrollToHash(): boolean {
332
337
  * Scroll to top of page
333
338
  */
334
339
  export function scrollToTop(): void {
340
+ if (typeof window === "undefined") return;
341
+ if (typeof window.scrollTo !== "function") return;
335
342
  window.scrollTo(0, 0);
336
343
  }
337
344
 
@@ -374,20 +381,26 @@ export function handleNavigationEnd(options: {
374
381
  // Fall through to hash or top if no saved position
375
382
  }
376
383
 
377
- // Defer hash and scroll-to-top to after React paints the new content,
378
- // so the user doesn't see the current page jump before the new route appears.
379
- deferToNextPaint(() => {
380
- // Re-check: the deferred callback may fire after environment teardown
381
- if (typeof window === "undefined") return;
382
-
383
- // Try hash scrolling first
384
- if (scrollToHash()) {
385
- return;
386
- }
387
-
388
- // Default: scroll to top
389
- scrollToTop();
390
- });
384
+ // scrollToHash / scrollToTop run synchronously here.
385
+ // handleNavigationEnd is invoked from NavigationProvider's
386
+ // useLayoutEffect (post-commit, pre-paint), so a sync scrollTo is
387
+ // captured by the upcoming paint AND by startViewTransition's snapshot.
388
+ // Deferring via rAF here pushed the call past the snapshot capture,
389
+ // making forward navigations wrapped in a layout/route view transition
390
+ // skip scroll-to-top the live DOM scrolled but the captured snapshot
391
+ // was at the previous scroll position, so the user-facing page stayed
392
+ // visually clamped at the source page's scrollY (often the new tree's
393
+ // max scroll for tall→short navs). Y=0 / a hash element are robust
394
+ // against unmeasured layout, so sync scroll is correct here even
395
+ // before the new tree's scrollHeight settles.
396
+ //
397
+ // (The restore branch above keeps deferToNextPaint because savedY
398
+ // depends on the new tree's max scroll; sync scrollTo against an
399
+ // unmeasured DOM would clamp savedY to whatever the old/zero max was.)
400
+ if (scrollToHash()) {
401
+ return;
402
+ }
403
+ scrollToTop();
391
404
  }
392
405
 
393
406
  /**
@@ -184,20 +184,16 @@ export function reconcileSegments(input: ReconcileInput): ReconcileResult {
184
184
  `[reconcile] ${segId}: CACHE only (not from server, type=${fromCache.type}, component=${fromCache.component != null ? "yes" : "null"})`,
185
185
  );
186
186
 
187
- // For non-action actors: cached segments the server decided not to re-render.
188
- // - Preserve loading=false (suppressed boundary) to maintain tree structure
189
- // - Preserve parallel segment loading so renderSegments can reconstruct
190
- // parallel-owned loader markers from the cached slot metadata
191
- // - Clear other truthy loading values to prevent suspense on cached content
192
- if (actor !== "action") {
193
- if (fromCache.type === "parallel" && fromCache.loading !== undefined) {
194
- return fromCache;
195
- }
196
- if (fromCache.loading !== undefined && fromCache.loading !== false) {
197
- return { ...fromCache, loading: undefined };
198
- }
199
- }
200
-
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.
201
197
  return fromCache;
202
198
  })
203
199
  .filter(Boolean) as ResolvedSegment[];
@@ -48,7 +48,7 @@ export function assertSegmentStructure(
48
48
 
49
49
  if (cachedCategory !== incomingCategory) {
50
50
  console.warn(
51
- `[RSC Router] Tree structure mismatch detected in ${context} ` +
51
+ `[Rango] Tree structure mismatch detected in ${context} ` +
52
52
  `for segment "${cached.id}": loading category changed from ` +
53
53
  `"${cachedCategory}" (${describeLoading(cached.loading)}) to ` +
54
54
  `"${incomingCategory}" (${describeLoading(incoming.loading)}). ` +
@@ -64,7 +64,7 @@ export function assertSegmentStructure(
64
64
  const incomingHasMount = !!incoming.mountPath;
65
65
  if (cachedHasMount !== incomingHasMount) {
66
66
  console.warn(
67
- `[RSC Router] MountContextProvider mismatch detected in ${context} ` +
67
+ `[Rango] MountContextProvider mismatch detected in ${context} ` +
68
68
  `for segment "${cached.id}": mountPath changed from ` +
69
69
  `${cachedHasMount ? `"${cached.mountPath}"` : "undefined"} to ` +
70
70
  `${incomingHasMount ? `"${incoming.mountPath}"` : "undefined"}. ` +
@@ -4,13 +4,15 @@ import type {
4
4
  RscPayload,
5
5
  } from "./types.js";
6
6
  import { createPartialUpdater } from "./partial-update.js";
7
+ import { enterActionFence, exitActionFence } from "./action-fence.js";
8
+ import { KEEP_CACHE_HEADER } from "./cookie-name.js";
7
9
  import { createNavigationTransaction } from "./navigation-transaction.js";
8
10
  import {
9
11
  reconcileSegments,
10
12
  reconcileErrorSegments,
11
13
  } from "./segment-reconciler.js";
12
14
  import { startTransition } from "react";
13
- import type { EventController } from "./event-controller.js";
15
+ import type { EventController, ActionHandle } from "./event-controller.js";
14
16
  import {
15
17
  toNetworkError,
16
18
  emitNetworkError,
@@ -21,11 +23,16 @@ import {
21
23
  isBrowserDebugEnabled,
22
24
  startBrowserTransaction,
23
25
  } from "./logging.js";
24
- import { validateRedirectOrigin } from "./validate-redirect-origin.js";
26
+ import {
27
+ validateRedirectOrigin,
28
+ validateExternalRedirect,
29
+ } from "./validate-redirect-origin.js";
25
30
  import {
26
31
  extractRscHeaderUrl,
27
32
  emptyResponse,
33
+ handleReloadHeader,
28
34
  teeWithCompletion,
35
+ isForeignRouterId,
29
36
  } from "./response-adapter.js";
30
37
  import { mergeLocationState } from "./history-state.js";
31
38
  import { classifyActionOutcome } from "./action-coordinator.js";
@@ -51,6 +58,27 @@ export interface ServerActionBridgeConfigWithController extends ServerActionBrid
51
58
  ) => Promise<void>;
52
59
  }
53
60
 
61
+ /**
62
+ * Merge an action's location-state payload into history.state, restricted to
63
+ * the keys this action is entitled to write. claimLocationState enforces
64
+ * last-initiated-wins for same-key concurrent writes (a later-initiated sibling
65
+ * keeps its value even if this action's response settles afterward); distinct
66
+ * keys from every concurrent action survive. Arbitration is scoped to the
67
+ * action's cohort (captured at startAction), so a newer action on another entry
68
+ * cannot suppress this one. No-op when nothing was set or all keys were already
69
+ * claimed by a later-initiated sibling in the cohort.
70
+ */
71
+ function applyActionLocationState(
72
+ handle: ActionHandle,
73
+ locationState: Record<string, unknown> | undefined,
74
+ ): void {
75
+ if (!locationState) return;
76
+ const winning = handle.claimLocationState(locationState);
77
+ if (Object.keys(winning).length > 0) {
78
+ mergeLocationState(winning);
79
+ }
80
+ }
81
+
54
82
  /**
55
83
  * Create a server action bridge for handling RSC server actions
56
84
  *
@@ -77,6 +105,26 @@ export function createServerActionBridge(
77
105
  onNavigate,
78
106
  } = config;
79
107
 
108
+ // SPA-navigate when onNavigate is set, else hard-reload. state is omitted (not
109
+ // passed as undefined) to match the header path's prior call shape.
110
+ // Callers pass an already same-origin-validated url; the hard-reload fallback
111
+ // re-validates defensively so this leaf cannot become an open redirect if a
112
+ // future caller forgets (the SPA path validates inside the navigation bridge).
113
+ async function dispatchRedirect(url: string, state?: unknown): Promise<void> {
114
+ if (onNavigate) {
115
+ await onNavigate(url, {
116
+ ...(state !== undefined ? { state } : {}),
117
+ replace: true,
118
+ _skipCache: true,
119
+ });
120
+ } else {
121
+ const safe = validateRedirectOrigin(url, window.location.origin);
122
+ if (safe) {
123
+ window.location.href = safe;
124
+ }
125
+ }
126
+ }
127
+
80
128
  let isRegistered = false;
81
129
 
82
130
  const fetchPartialUpdate = createPartialUpdater({
@@ -138,14 +186,57 @@ export function createServerActionBridge(
138
186
  const locationKey = window.history.state?.key;
139
187
  log("action start", { id, argsCount: args.length });
140
188
 
141
- // Start action in event controller - handles lifecycle tracking
142
- const handle = eventController.startAction(id, args);
189
+ // Start action in event controller - handles lifecycle tracking. The
190
+ // current history key is the action's cohort: location-state arbitration is
191
+ // scoped to it so a later action on a different entry cannot suppress this
192
+ // one (and vice versa).
193
+ const handle = eventController.startAction(id, args, locationKey);
194
+ // Whether the action's response carried the keepClientCache() directive.
195
+ // Set when the response arrives; gates the deferred invalidation below.
196
+ let keepCache = false;
197
+ // Whether a Response actually settled from the network (the server saw the
198
+ // request). Set true as the first statement in the fetch .then() below.
199
+ // Gates the automatic invalidation: a pre-dispatch failure (encodeReply
200
+ // throw or a fetch rejection — server unreachable/DNS/connection refused)
201
+ // leaves this false, so finalizeAction() must NOT invalidate or broadcast —
202
+ // nothing reached the server, so nothing could have mutated. A failed Flight
203
+ // DECODE after the response arrived keeps it true (the mutation may have
204
+ // committed, so invalidating the now-possibly-stale client cache is correct).
205
+ let responseReceived = false;
206
+ // Single deferred invalidation + fence release, run exactly ONCE however the
207
+ // action terminates (normal, redirect, error, abort, intercept, concurrent).
208
+ // This replaces main's eager clear at action start: every directive-free
209
+ // action invalidates once; keepClientCache() suppresses only the automatic
210
+ // invalidation, so a concurrent directive-free action still invalidates via
211
+ // its own latch. Latched so the finally AND the early SPA-redirect returns
212
+ // (whose Flight stream never settles) can both call it safely.
213
+ let actionFinalized = false;
214
+ // skipInvalidation: the version-mismatch reload terminal released nothing
215
+ // server-side, so it releases the fence without invalidating.
216
+ const finalizeAction = (skipInvalidation = false): void => {
217
+ if (actionFinalized) return;
218
+ actionFinalized = true;
219
+ // finally so a throw in invalidation cannot leak the fence (latch is set).
220
+ try {
221
+ // responseReceived gates the automatic invalidation: a pre-dispatch
222
+ // failure (serialize throw / fetch reject) never reached the server, so
223
+ // marking the cache stale + broadcasting cross-tab would be spurious.
224
+ if (responseReceived && !keepCache && !skipInvalidation) {
225
+ store.markCacheAsStaleAndBroadcast();
226
+ }
227
+ } finally {
228
+ exitActionFence();
229
+ }
230
+ };
143
231
  try {
144
232
  const segmentState = store.getSegmentState();
145
233
 
146
- // Mark cache as stale immediately when action starts
147
- // This ensures SWR pattern kicks in if user navigates away during action
148
- store.markCacheAsStaleAndBroadcast();
234
+ // Raise the action fence (replaces the old eager clear). Nothing is wiped,
235
+ // rotated, or broadcast yet: navigations during the flight fetch fresh
236
+ // (no-store) and popstate is treated as SWR, but the decision to
237
+ // invalidate is deferred to the response so a no-op action (keepClientCache)
238
+ // can leave the caches and the jar untouched.
239
+ enterActionFence();
149
240
 
150
241
  // Create temporary references for serialization
151
242
  const temporaryReferences = deps.createTemporaryReferenceSet();
@@ -217,23 +308,34 @@ export function createServerActionBridge(
217
308
  body: encodedBody,
218
309
  signal: fetchAbort.signal,
219
310
  }).then(async (response) => {
311
+ // A settled fetch promise means the request reached the server and a
312
+ // Response came back (true for 2xx, 4xx, AND 5xx — fetch only rejects
313
+ // on network-layer failure, never on HTTP status). Record it as the
314
+ // first statement so every downstream terminal can invalidate; a
315
+ // pre-dispatch failure never gets here and stays gated out.
316
+ responseReceived = true;
220
317
  // Response arrived — disconnect fetch abort from handle abort so
221
318
  // abortAllActions() doesn't disrupt the in-progress Flight stream.
222
319
  handle.signal.removeEventListener("abort", onHandleAbort);
223
320
 
321
+ // Did the action call keepClientCache()? If so the deferred invalidation
322
+ // below is suppressed for THIS action (a concurrent directive-free
323
+ // action still invalidates via its own response).
324
+ keepCache = response.headers.get(KEEP_CACHE_HEADER) === "1";
325
+
224
326
  // Check for version mismatch - server wants us to reload
225
- const reload = extractRscHeaderUrl(response, "X-RSC-Reload");
226
- if (reload === "blocked") {
227
- resolveStreamComplete();
228
- return emptyResponse();
229
- }
230
- if (reload) {
231
- log("version mismatch on action, reloading", {
232
- reloadUrl: reload.url,
233
- });
234
- window.location.href = reload.url;
235
- return new Promise<Response>(() => {});
236
- }
327
+ const reloadResult = handleReloadHeader(response, {
328
+ onBlocked: resolveStreamComplete,
329
+ onReload: (url) => {
330
+ log("version mismatch on action, reloading", { reloadUrl: url });
331
+ // Never-settling terminal (navigates away), so the finally never
332
+ // runs: release the fence here. skipInvalidation — the mismatch
333
+ // short-circuits the action server-side, so nothing mutated and a
334
+ // broadcast would only risk hard-reloading a sibling mid-task.
335
+ finalizeAction(true);
336
+ },
337
+ });
338
+ if (reloadResult) return reloadResult;
237
339
 
238
340
  // Simple redirect from action (no state, no RSC payload).
239
341
  // Short-circuits before createFromFetch — no Flight deserialization needed.
@@ -243,14 +345,11 @@ export function createServerActionBridge(
243
345
  if (redirect && redirect !== "blocked" && !handle.signal.aborted) {
244
346
  log("action simple redirect", { url: redirect.url });
245
347
  handle.complete(undefined);
246
- if (onNavigate) {
247
- await onNavigate(redirect.url, {
248
- replace: true,
249
- _skipCache: true,
250
- });
251
- } else {
252
- window.location.href = redirect.url;
253
- }
348
+ // This path returns a never-settling promise, so the finally never
349
+ // runs: invalidate + release the fence here (the mutation committed
350
+ // and we're navigating away). Latched, so the finally is a no-op.
351
+ finalizeAction();
352
+ await dispatchRedirect(redirect.url);
254
353
  return new Promise<Response>(() => {});
255
354
  }
256
355
  if (redirect === "blocked") {
@@ -258,6 +357,29 @@ export function createServerActionBridge(
258
357
  return emptyResponse();
259
358
  }
260
359
 
360
+ // Integrity check (pre-decode): a foreign app's action response must
361
+ // not be decoded + applied here. This is the one decode-and-apply path
362
+ // the post-decode partial-update guard does NOT cover (the action
363
+ // bridge has its own createFromFetch -> onUpdate). Ordered after the
364
+ // reload/redirect handlers, which steer control responses first.
365
+ // Reloads via window.location.reload() rather than navigating to a
366
+ // target (as the navigation-client guard does): an action has no
367
+ // navigation target, so reloading the current URL re-syncs the
368
+ // document against the server-applied action effect.
369
+ if (
370
+ !handle.signal.aborted &&
371
+ isForeignRouterId(response, store.getRouterId?.())
372
+ ) {
373
+ log("action router id mismatch, reloading to re-sync");
374
+ handle.complete(undefined);
375
+ resolveStreamComplete();
376
+ // Never-settling return: release the fence before the reload (the
377
+ // reload resets module state anyway, but stay balanced). Latched.
378
+ finalizeAction();
379
+ window.location.reload();
380
+ return new Promise<Response>(() => {});
381
+ }
382
+
261
383
  // Start streaming immediately when response arrives
262
384
  if (!handle.signal.aborted) {
263
385
  streamingToken = handle.startStreaming();
@@ -328,6 +450,27 @@ export function createServerActionBridge(
328
450
  // Check handle.signal.aborted to avoid redirecting from a stale action
329
451
  // when the user has already navigated away.
330
452
  if (metadata?.redirect && !handle.signal.aborted) {
453
+ // Explicit off-host redirect (redirect(url, { external: true })):
454
+ // hard-navigate, but still scheme-validate (http/https only). external
455
+ // waives the same-origin check, NOT scheme safety, so a forged payload
456
+ // carrying a javascript:/data: URL cannot script via location.assign.
457
+ if (metadata.redirect.external) {
458
+ const externalUrl = validateExternalRedirect(
459
+ metadata.redirect.url,
460
+ window.location.origin,
461
+ );
462
+ if (!externalUrl) {
463
+ log("blocked external action redirect payload", {
464
+ url: metadata.redirect.url,
465
+ });
466
+ handle.complete(returnValue?.data);
467
+ return returnValue?.data;
468
+ }
469
+ log("external action redirect", { url: externalUrl });
470
+ handle.complete(returnValue?.data);
471
+ window.location.assign(externalUrl);
472
+ return returnValue?.data;
473
+ }
331
474
  const redirectUrl = validateRedirectOrigin(
332
475
  metadata.redirect.url,
333
476
  window.location.origin,
@@ -339,18 +482,9 @@ export function createServerActionBridge(
339
482
  handle.complete(returnValue?.data);
340
483
  return returnValue?.data;
341
484
  }
342
- const redirectState = metadata.locationState;
343
485
  log("action redirect", { url: redirectUrl });
344
486
  handle.complete(returnValue?.data);
345
- if (onNavigate) {
346
- await onNavigate(redirectUrl, {
347
- state: redirectState,
348
- replace: true,
349
- _skipCache: true,
350
- });
351
- } else {
352
- window.location.href = redirectUrl;
353
- }
487
+ await dispatchRedirect(redirectUrl, metadata.locationState);
354
488
  return returnValue?.data;
355
489
  }
356
490
 
@@ -517,6 +651,20 @@ export function createServerActionBridge(
517
651
  currentInterceptSource: store.getInterceptSourceUrl(),
518
652
  });
519
653
 
654
+ // Apply server-set location state exhaustively here, as a successful-
655
+ // response effect — the terminal switch below decides rendering/refetch,
656
+ // not whether this metadata survives (every refetch path is storeOnly and
657
+ // never writes history.state). Gated on NOT navigated-away: the classifier
658
+ // treats either a pathname OR history-key change as diversion, so this
659
+ // both honors the "diverted state is dropped" contract AND prevents a
660
+ // cross-entry write (mergeLocationState writes the CURRENT entry, which a
661
+ // navigated-away action no longer owns). Done before the switch (and
662
+ // before the normal branch's async renderSegments) so a slow render racing
663
+ // a navigation cannot drop it.
664
+ if (scenario.type !== "navigated-away") {
665
+ applyActionLocationState(handle, metadata?.locationState);
666
+ }
667
+
520
668
  switch (scenario.type) {
521
669
  case "navigated-away": {
522
670
  log("user navigated away during action", {
@@ -528,8 +676,9 @@ export function createServerActionBridge(
528
676
  handle.clearConsolidation();
529
677
 
530
678
  if (scenario.historyKeyChanged) {
531
- if (!scenario.onInterceptRoute) {
532
- store.markCacheAsStaleAndBroadcast();
679
+ // Invalidation is deferred to finalizeAction(); here we only trigger
680
+ // the revalidation refetch of the new route (suppressed on keep).
681
+ if (!scenario.onInterceptRoute && !keepCache) {
533
682
  refetchRoute().catch((error) => {
534
683
  if (isBackgroundSuppressible(error)) return;
535
684
  console.error(
@@ -541,11 +690,14 @@ export function createServerActionBridge(
541
690
  break;
542
691
  }
543
692
 
544
- // Same history key but different pathname - safe to refetch current route
545
- store.markCacheAsStaleAndBroadcast();
546
- await refetchRoute({
547
- interceptSourceUrl: store.getInterceptSourceUrl(),
548
- });
693
+ // Same history key but different pathname - safe to refetch current
694
+ // route. Invalidation is deferred to finalizeAction(); here we only
695
+ // trigger the revalidation refetch (suppressed on keep).
696
+ if (!keepCache) {
697
+ await refetchRoute({
698
+ interceptSourceUrl: store.getInterceptSourceUrl(),
699
+ });
700
+ }
549
701
  break;
550
702
  }
551
703
 
@@ -553,8 +705,11 @@ export function createServerActionBridge(
553
705
  console.warn(
554
706
  `[Browser] Missing segments after action (HMR detected), refetching...`,
555
707
  );
708
+ // Repair (not revalidation), so ungated on keepCache: a keep action
709
+ // resolving last must discharge a directive-free sibling's repair.
710
+ // See the keep row in docs/design/rango-state-cookie.md (the all-keep
711
+ // edge, and the benign re-mark-stale-after-refetch end-state delta).
556
712
  await refetchRoute({ interceptSourceUrl });
557
- store.broadcastCacheInvalidation();
558
713
  break;
559
714
  }
560
715
 
@@ -562,7 +717,8 @@ export function createServerActionBridge(
562
717
  log("consolidation fetch needed", {
563
718
  segmentIds: scenario.segmentIds,
564
719
  });
565
- // Calculate segments to send (exclude the ones we want fresh)
720
+ // Location state already applied above (pre-switch). Calculate
721
+ // segments to send (exclude the ones we want fresh).
566
722
  const currentSegmentIds = store.getSegmentState().currentSegmentIds;
567
723
  const segmentsToSend = currentSegmentIds.filter(
568
724
  (sid) => !scenario.segmentIds.includes(sid),
@@ -571,11 +727,11 @@ export function createServerActionBridge(
571
727
  // Clear consolidation tracking before fetch
572
728
  handle.clearConsolidation();
573
729
 
730
+ // Ungated on keepCache, same as hmr-missing above (see the keep row).
574
731
  await refetchRoute({
575
732
  segments: segmentsToSend,
576
733
  interceptSourceUrl,
577
734
  });
578
- store.broadcastCacheInvalidation();
579
735
  break;
580
736
  }
581
737
 
@@ -586,6 +742,8 @@ export function createServerActionBridge(
586
742
  // Only update store if history key hasn't changed (user didn't navigate away)
587
743
  const currentKeyNow = store.getHistoryKey();
588
744
  if (currentKeyNow === currentKey) {
745
+ // Location state already applied above (pre-switch); this action's
746
+ // UI render is skipped because a later sibling consolidates.
589
747
  store.setSegmentIds(matched);
590
748
  const currentHandleData = eventController.getHandleState().data;
591
749
  store.cacheSegmentsForHistory(
@@ -625,13 +783,7 @@ export function createServerActionBridge(
625
783
  onUpdate({ root: newTree, metadata: metadata! });
626
784
  });
627
785
 
628
- // Apply server-set location state to history.state (non-redirect flow)
629
- const actionLocationState = metadata?.locationState;
630
- if (actionLocationState) {
631
- mergeLocationState(actionLocationState);
632
- }
633
-
634
- // Update store state
786
+ // Location state already applied above (pre-switch). Update store.
635
787
  store.setSegmentIds(matched);
636
788
  const currentHandleData = eventController.getHandleState().data;
637
789
  store.cacheSegmentsForHistory(
@@ -639,7 +791,9 @@ export function createServerActionBridge(
639
791
  fullSegments,
640
792
  currentHandleData,
641
793
  );
642
- store.markCacheAsStaleAndBroadcast();
794
+ // Invalidation deferred to finalizeAction() (runs after this caches
795
+ // the fresh segments), suppressed when the action called
796
+ // keepClientCache().
643
797
  break;
644
798
  }
645
799
  }
@@ -647,6 +801,11 @@ export function createServerActionBridge(
647
801
  handle.complete(returnData);
648
802
  return returnData;
649
803
  } finally {
804
+ // The single deferred invalidation + fence release for this action. Runs
805
+ // for every terminal that settles (normal, navigated-away, error, abort,
806
+ // intercept, concurrent); the SPA-redirect paths above already ran it.
807
+ // Latched, so it fires exactly once.
808
+ finalizeAction();
650
809
  handle[Symbol.dispose]();
651
810
  }
652
811
  }
@@ -14,7 +14,6 @@ import type { RenderSegmentsOptions } from "../segment-system.js";
14
14
  export interface RscPayload<TMetadata = RscMetadata> {
15
15
  metadata?: TMetadata;
16
16
  returnValue?: ActionResult;
17
- formState?: unknown;
18
17
  }
19
18
 
20
19
  /**
@@ -32,13 +31,21 @@ export type HandleData = Record<string, Record<string, unknown[]>>;
32
31
  export interface RscMetadata {
33
32
  pathname: string;
34
33
  segments: ResolvedSegment[];
35
- /** Router instance ID. When this changes between navigations, the client
36
- * forces a full tree replacement (app switch via host router). */
34
+ /** Router instance ID the current app's identity. A mismatch with the
35
+ * client's id (sent as _rsc_rid) is detected server-side and answered with
36
+ * X-RSC-Reload (full document load), so the client never swaps apps
37
+ * in-session; within a session this always equals the current app. */
37
38
  routerId?: string;
38
39
  isPartial?: boolean;
39
40
  isError?: boolean;
40
41
  matched?: string[];
41
42
  diff?: string[];
43
+ /**
44
+ * All segment ids re-resolved on the server, including null-component
45
+ * ones excluded from `segments`/`diff`. Drives client-side handle-bucket
46
+ * cleanup. Superset of `diff`. See MatchResult.resolvedIds.
47
+ */
48
+ resolvedIds?: string[];
42
49
  /** Merged route params from the matched route */
43
50
  params?: Record<string, string>;
44
51
  /**
@@ -63,6 +70,12 @@ export interface RscMetadata {
63
70
  * Sent on initial render so the browser can configure its cache duration.
64
71
  */
65
72
  prefetchCacheTTL?: number;
73
+ /**
74
+ * Server-resolved rango state cookie name (`{prefix}_{routerId}`). The client
75
+ * reads it verbatim and binds the rango state cookie to it; composition
76
+ * happens only server-side.
77
+ */
78
+ stateCookieName?: string;
66
79
  /**
67
80
  * Theme configuration from router.
68
81
  * Included when theme is enabled in router config.
@@ -77,8 +90,18 @@ export interface RscMetadata {
77
90
  basename?: string;
78
91
  /** Whether connection warmup is enabled */
79
92
  warmupEnabled?: boolean;
80
- /** Server-side redirect with optional state (for partial requests) */
81
- redirect?: { url: string };
93
+ /**
94
+ * Whether the client should hydrate inside React.StrictMode. Carried on the
95
+ * initial full-render payload only; the browser entry reads it once at
96
+ * hydration. Defaults to true on the client when omitted.
97
+ */
98
+ strictMode?: boolean;
99
+ /**
100
+ * Server-side redirect with optional state (for partial requests).
101
+ * `external: true` (from redirect(url, { external: true })) tells the client
102
+ * to hard-navigate to an off-host target instead of validating same-origin.
103
+ */
104
+ redirect?: { url: string; external?: boolean };
82
105
  /** Server-set location state to include in history.pushState */
83
106
  locationState?: Record<string, unknown>;
84
107
  }
@@ -179,6 +202,15 @@ export interface TrackedActionState {
179
202
  result: unknown | null;
180
203
  }
181
204
 
205
+ /**
206
+ * The value returned by {@link useAction} when called without a selector.
207
+ *
208
+ * This is the stable, public name for the action-state shape; consumers can
209
+ * name it in their own signatures (e.g. a wrapper hook). It aliases the
210
+ * internal {@link TrackedActionState}.
211
+ */
212
+ export type ActionState = TrackedActionState;
213
+
182
214
  /**
183
215
  * Listener for action state changes
184
216
  *
@@ -316,8 +348,14 @@ export interface RouterInstance {
316
348
  replace(url: string, options?: RouterNavigateOptions): Promise<void>;
317
349
  /** Refresh the current route (re-fetch server data, preserve client state) */
318
350
  refresh(): Promise<void>;
319
- /** Prefetch a URL for faster client-side transition */
320
- prefetch(url: string): void;
351
+ /**
352
+ * Prefetch a URL for faster client-side transition.
353
+ *
354
+ * Pass `{ key: ":source" }` to source-scope the prefetch cache entry (parity
355
+ * with `<Link prefetchKey=":source">`) when the target's response can differ
356
+ * by source page.
357
+ */
358
+ prefetch(url: string, options?: { key?: ":source" }): void;
321
359
  /** Go back in browser history */
322
360
  back(): void;
323
361
  /** Go forward in browser history */
@@ -425,9 +463,9 @@ export interface NavigationStore {
425
463
  hasHistoryCache(historyKey: string): boolean;
426
464
  updateCacheHandleData(historyKey: string, handleData: HandleData): void;
427
465
  markCacheAsStale(): void;
466
+ markHistoryCacheStale(): void;
428
467
  markCacheAsStaleAndBroadcast(): void;
429
468
  clearHistoryCache(): void;
430
- broadcastCacheInvalidation(): void;
431
469
 
432
470
  // Cross-tab refresh callback (set by navigation bridge)
433
471
  setCrossTabRefreshCallback(callback: () => void): void;
@@ -540,6 +578,8 @@ export interface NavigationBridge {
540
578
  refresh(): Promise<void>;
541
579
  handlePopstate(): Promise<void>;
542
580
  registerLinkInterception(): () => void;
581
+ /** Current RSC version (live, reflects the latest updateVersion). */
582
+ getVersion(): string | undefined;
543
583
  /** Update the RSC version (e.g. after HMR). Clears prefetch cache. */
544
584
  updateVersion(newVersion: string): void;
545
585
  }