@rangojs/router 0.0.0-experimental.23 → 0.0.0-experimental.24535dcb

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 (1250) hide show
  1. package/AGENTS.md +11 -3
  2. package/README.md +303 -740
  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 +730 -184
  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/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/{src/handles/index.ts → dist/handles/index.js} +1 -1
  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/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  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 +4373 -1328
  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 +96 -24
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +329 -0
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +251 -24
  816. package/skills/caching/SKILL.md +375 -17
  817. package/skills/catalog.json +271 -0
  818. package/skills/comparison/SKILL.md +50 -0
  819. package/skills/comparison/agents/openai.yaml +4 -0
  820. package/skills/comparison/references/framework-comparison.md +837 -0
  821. package/skills/composability/SKILL.md +110 -4
  822. package/skills/css/SKILL.md +76 -0
  823. package/skills/debug-manifest/SKILL.md +5 -3
  824. package/skills/defer-hydration/SKILL.md +235 -0
  825. package/skills/document-cache/SKILL.md +87 -56
  826. package/skills/fonts/SKILL.md +1 -1
  827. package/skills/handler-use/SKILL.md +364 -0
  828. package/skills/hooks/SKILL.md +73 -690
  829. package/skills/hooks/data.md +273 -0
  830. package/skills/hooks/handle-and-actions.md +103 -0
  831. package/skills/hooks/navigation.md +110 -0
  832. package/skills/hooks/outlets.md +41 -0
  833. package/skills/hooks/state.md +228 -0
  834. package/skills/hooks/urls.md +135 -0
  835. package/skills/host-router/SKILL.md +129 -27
  836. package/skills/i18n/SKILL.md +276 -0
  837. package/skills/intercept/SKILL.md +94 -18
  838. package/skills/layout/SKILL.md +62 -19
  839. package/skills/links/SKILL.md +249 -17
  840. package/skills/loader/SKILL.md +319 -31
  841. package/skills/middleware/SKILL.md +59 -16
  842. package/skills/migrate-nextjs/SKILL.md +745 -0
  843. package/skills/migrate-react-router/SKILL.md +153 -0
  844. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  845. package/skills/migrate-react-router/component-migration.md +196 -0
  846. package/skills/migrate-react-router/data-and-actions.md +225 -0
  847. package/skills/migrate-react-router/route-mapping.md +271 -0
  848. package/skills/mime-routes/SKILL.md +29 -2
  849. package/skills/observability/SKILL.md +202 -0
  850. package/skills/parallel/SKILL.md +225 -10
  851. package/skills/ppr/SKILL.md +616 -0
  852. package/skills/prerender/SKILL.md +178 -124
  853. package/skills/rango/SKILL.md +318 -24
  854. package/skills/react-compiler/SKILL.md +168 -0
  855. package/skills/response-routes/SKILL.md +138 -49
  856. package/skills/route/SKILL.md +175 -13
  857. package/skills/router-setup/SKILL.md +137 -12
  858. package/skills/scripts/SKILL.md +179 -0
  859. package/skills/server-actions/SKILL.md +776 -0
  860. package/skills/shell-manifest/SKILL.md +185 -0
  861. package/skills/streams-and-websockets/SKILL.md +283 -0
  862. package/skills/tailwind/SKILL.md +28 -4
  863. package/skills/testing/SKILL.md +130 -0
  864. package/skills/testing/bindings.md +103 -0
  865. package/skills/testing/cache-prerender.md +127 -0
  866. package/skills/testing/client-components.md +124 -0
  867. package/skills/testing/e2e-parity.md +125 -0
  868. package/skills/testing/flight.md +91 -0
  869. package/skills/testing/handles.md +131 -0
  870. package/skills/testing/loader.md +128 -0
  871. package/skills/testing/middleware.md +99 -0
  872. package/skills/testing/render-handler.md +122 -0
  873. package/skills/testing/response-routes.md +95 -0
  874. package/skills/testing/reverse-and-types.md +85 -0
  875. package/skills/testing/server-actions.md +107 -0
  876. package/skills/testing/server-tree.md +128 -0
  877. package/skills/testing/setup.md +123 -0
  878. package/skills/theme/SKILL.md +1 -1
  879. package/skills/typesafety/SKILL.md +45 -614
  880. package/skills/typesafety/env-and-bindings.md +254 -0
  881. package/skills/typesafety/generated-files-and-cli.md +335 -0
  882. package/skills/typesafety/params-and-search.md +153 -0
  883. package/skills/typesafety/route-types.md +209 -0
  884. package/skills/use-cache/SKILL.md +74 -15
  885. package/skills/vercel/SKILL.md +128 -0
  886. package/skills/view-transitions/SKILL.md +337 -0
  887. package/src/__augment-tests__/augment.ts +81 -0
  888. package/src/__augment-tests__/augmented.check.ts +116 -0
  889. package/src/__internal.ts +67 -40
  890. package/src/browser/action-coordinator.ts +53 -36
  891. package/src/browser/action-fence.ts +47 -0
  892. package/src/browser/app-shell.ts +39 -0
  893. package/src/browser/app-version.ts +14 -0
  894. package/src/browser/connection-warmup.ts +134 -0
  895. package/src/browser/cookie-name.ts +140 -0
  896. package/src/browser/event-controller.ts +257 -158
  897. package/src/browser/history-state.ts +21 -0
  898. package/src/browser/index.ts +3 -3
  899. package/src/browser/invalidate-client-cache.ts +52 -0
  900. package/src/browser/link-interceptor.ts +4 -0
  901. package/src/browser/logging.ts +28 -0
  902. package/src/browser/merge-segment-loaders.ts +6 -4
  903. package/src/browser/navigation-bridge.ts +212 -34
  904. package/src/browser/navigation-client.ts +233 -58
  905. package/src/browser/navigation-store-handle.ts +38 -0
  906. package/src/browser/navigation-store.ts +203 -80
  907. package/src/browser/navigation-transaction.ts +18 -66
  908. package/src/browser/network-error-handler.ts +34 -7
  909. package/src/browser/partial-update.ts +242 -126
  910. package/src/browser/prefetch/cache.ts +344 -30
  911. package/src/browser/prefetch/fetch.ts +373 -48
  912. package/src/browser/prefetch/policy.ts +6 -0
  913. package/src/browser/prefetch/queue.ts +144 -23
  914. package/src/browser/prefetch/resource-ready.ts +77 -0
  915. package/src/browser/rango-state.ts +158 -76
  916. package/src/browser/react/Link.tsx +135 -18
  917. package/src/browser/react/NavigationProvider.tsx +240 -122
  918. package/src/browser/react/ScrollRestoration.tsx +10 -6
  919. package/src/browser/react/context.ts +7 -2
  920. package/src/browser/react/filter-segment-order.ts +66 -7
  921. package/src/browser/react/index.ts +0 -48
  922. package/src/browser/react/location-state-shared.ts +178 -8
  923. package/src/browser/react/location-state.ts +39 -14
  924. package/src/browser/react/use-action.ts +6 -15
  925. package/src/browser/react/use-handle.ts +23 -69
  926. package/src/browser/react/use-href.tsx +8 -1
  927. package/src/browser/react/use-link-status.ts +33 -8
  928. package/src/browser/react/use-navigation.ts +32 -7
  929. package/src/browser/react/use-params.ts +20 -10
  930. package/src/browser/react/use-reverse.ts +106 -0
  931. package/src/browser/react/use-router.ts +46 -11
  932. package/src/browser/react/use-search-params.ts +0 -5
  933. package/src/browser/react/use-segments.ts +11 -21
  934. package/src/browser/response-adapter.ts +99 -8
  935. package/src/browser/rsc-router.tsx +276 -76
  936. package/src/browser/scroll-restoration.ts +61 -47
  937. package/src/browser/segment-reconciler.ts +44 -7
  938. package/src/browser/segment-structure-assert.ts +2 -2
  939. package/src/browser/server-action-bridge.ts +244 -71
  940. package/src/browser/types.ts +160 -12
  941. package/src/browser/validate-redirect-origin.ts +43 -16
  942. package/src/build/collect-fallback-refs.ts +107 -0
  943. package/src/build/generate-manifest.ts +207 -158
  944. package/src/build/generate-route-types.ts +6 -1
  945. package/src/build/index.ts +11 -3
  946. package/src/build/prefix-tree-utils.ts +123 -0
  947. package/src/build/route-trie.ts +215 -42
  948. package/src/build/route-types/ast-route-extraction.ts +15 -8
  949. package/src/build/route-types/codegen.ts +16 -5
  950. package/src/build/route-types/include-resolution.ts +464 -63
  951. package/src/build/route-types/param-extraction.ts +6 -3
  952. package/src/build/route-types/per-module-writer.ts +22 -6
  953. package/src/build/route-types/router-processing.ts +336 -110
  954. package/src/build/route-types/scan-filter.ts +9 -2
  955. package/src/build/route-types/source-scan.ts +216 -0
  956. package/src/build/runtime-discovery.ts +13 -21
  957. package/src/cache/cache-error.ts +104 -0
  958. package/src/cache/cache-key-utils.ts +58 -13
  959. package/src/cache/cache-policy.ts +108 -34
  960. package/src/cache/cache-runtime.ts +436 -69
  961. package/src/cache/cache-scope.ts +235 -103
  962. package/src/cache/cache-tag.ts +149 -0
  963. package/src/cache/cf/cf-base64.ts +33 -0
  964. package/src/cache/cf/cf-cache-constants.ts +127 -0
  965. package/src/cache/cf/cf-cache-store.ts +2442 -170
  966. package/src/cache/cf/cf-cache-types.ts +349 -0
  967. package/src/cache/cf/cf-kv-utils.ts +46 -0
  968. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  969. package/src/cache/cf/index.ts +11 -17
  970. package/src/cache/document-cache.ts +144 -49
  971. package/src/cache/handle-snapshot.ts +70 -0
  972. package/src/cache/index.ts +24 -20
  973. package/src/cache/memory-segment-store.ts +243 -37
  974. package/src/cache/profile-registry.ts +46 -31
  975. package/src/cache/read-through-swr.ts +56 -12
  976. package/src/cache/segment-codec.ts +13 -21
  977. package/src/cache/shell-snapshot.ts +417 -0
  978. package/src/cache/tag-invalidation.ts +230 -0
  979. package/src/cache/taint.ts +55 -0
  980. package/src/cache/types.ts +180 -99
  981. package/src/cache/vercel/index.ts +11 -0
  982. package/src/cache/vercel/vercel-cache-store.ts +1127 -0
  983. package/src/client.rsc.tsx +42 -21
  984. package/src/client.tsx +117 -336
  985. package/src/cloudflare/index.ts +11 -0
  986. package/src/cloudflare/tracing.ts +108 -0
  987. package/src/component-utils.ts +19 -0
  988. package/src/components/DefaultDocument.tsx +8 -2
  989. package/src/context-var.ts +84 -2
  990. package/src/debug.ts +2 -2
  991. package/src/decode-loader-results.ts +52 -0
  992. package/src/defer.ts +185 -0
  993. package/src/deps/ssr.ts +0 -1
  994. package/src/encode-kv.ts +49 -0
  995. package/src/errors.ts +30 -4
  996. package/src/escape-script.ts +52 -0
  997. package/src/handle.ts +104 -34
  998. package/src/handles/MetaTags.tsx +24 -53
  999. package/src/handles/Scripts.tsx +183 -0
  1000. package/src/handles/breadcrumbs.ts +93 -0
  1001. package/src/handles/deferred-resolution.ts +127 -0
  1002. package/src/handles/is-thenable.ts +18 -0
  1003. package/src/handles/meta.ts +14 -40
  1004. package/src/handles/script.ts +244 -0
  1005. package/src/host/cookie-handler.ts +9 -60
  1006. package/src/host/errors.ts +13 -22
  1007. package/src/host/index.ts +9 -2
  1008. package/src/host/pattern-matcher.ts +23 -52
  1009. package/src/host/router.ts +107 -99
  1010. package/src/host/testing.ts +40 -27
  1011. package/src/host/types.ts +37 -4
  1012. package/src/host/utils.ts +1 -1
  1013. package/src/href-client.ts +137 -22
  1014. package/src/index.rsc.ts +84 -29
  1015. package/src/index.ts +134 -43
  1016. package/src/internal-debug.ts +11 -10
  1017. package/src/loader-store.ts +500 -0
  1018. package/src/loader.rsc.ts +20 -13
  1019. package/src/loader.ts +12 -11
  1020. package/src/missing-id-error.ts +68 -0
  1021. package/src/outlet-context.ts +1 -1
  1022. package/src/outlet-provider.tsx +1 -5
  1023. package/src/prerender/param-hash.ts +16 -16
  1024. package/src/prerender/store.ts +37 -41
  1025. package/src/prerender.ts +215 -86
  1026. package/src/redirect-origin.ts +114 -0
  1027. package/src/regex-escape.ts +8 -0
  1028. package/src/render-error-thrower.tsx +20 -0
  1029. package/src/response-utils.ts +62 -0
  1030. package/src/reverse.ts +65 -15
  1031. package/src/root-error-boundary.tsx +1 -19
  1032. package/src/route-content-wrapper.tsx +19 -77
  1033. package/src/route-definition/dsl-helpers.ts +485 -303
  1034. package/src/route-definition/helper-factories.ts +28 -140
  1035. package/src/route-definition/helpers-types.ts +153 -77
  1036. package/src/route-definition/index.ts +4 -2
  1037. package/src/route-definition/redirect.ts +53 -12
  1038. package/src/route-definition/resolve-handler-use.ts +160 -0
  1039. package/src/route-definition/use-item-types.ts +29 -0
  1040. package/src/route-map-builder.ts +48 -21
  1041. package/src/route-types.ts +37 -46
  1042. package/src/router/basename.ts +14 -0
  1043. package/src/router/content-negotiation.ts +164 -17
  1044. package/src/router/error-handling.ts +45 -18
  1045. package/src/router/find-match.ts +130 -29
  1046. package/src/router/handler-context.ts +110 -39
  1047. package/src/router/instrument.ts +355 -0
  1048. package/src/router/intercept-resolution.ts +50 -24
  1049. package/src/router/lazy-includes.ts +89 -63
  1050. package/src/router/loader-resolution.ts +286 -56
  1051. package/src/router/logging.ts +5 -8
  1052. package/src/router/manifest.ts +105 -56
  1053. package/src/router/match-api.ts +179 -219
  1054. package/src/router/match-context.ts +0 -22
  1055. package/src/router/match-handlers.ts +211 -165
  1056. package/src/router/match-middleware/background-revalidation.ts +66 -22
  1057. package/src/router/match-middleware/cache-lookup.ts +214 -263
  1058. package/src/router/match-middleware/cache-store.ts +105 -50
  1059. package/src/router/match-middleware/intercept-resolution.ts +8 -28
  1060. package/src/router/match-middleware/segment-resolution.ts +52 -18
  1061. package/src/router/match-pipelines.ts +1 -42
  1062. package/src/router/match-result.ts +127 -52
  1063. package/src/router/metrics.ts +158 -47
  1064. package/src/router/middleware-types.ts +22 -120
  1065. package/src/router/middleware.ts +398 -231
  1066. package/src/router/navigation-snapshot.ts +133 -0
  1067. package/src/router/params-util.ts +23 -0
  1068. package/src/router/parse-pattern.ts +115 -0
  1069. package/src/router/pattern-matching.ts +183 -137
  1070. package/src/router/prefetch-cache-ttl.ts +51 -0
  1071. package/src/router/prefetch-limits.ts +37 -0
  1072. package/src/router/prerender-match.ts +207 -58
  1073. package/src/router/preview-match.ts +35 -103
  1074. package/src/router/request-classification.ts +291 -0
  1075. package/src/router/revalidation.ts +144 -74
  1076. package/src/router/route-snapshot.ts +256 -0
  1077. package/src/router/router-context.ts +11 -29
  1078. package/src/router/router-interfaces.ts +160 -36
  1079. package/src/router/router-options.ts +214 -22
  1080. package/src/router/router-registry.ts +2 -5
  1081. package/src/router/segment-resolution/fresh.ts +301 -78
  1082. package/src/router/segment-resolution/helpers.ts +116 -31
  1083. package/src/router/segment-resolution/loader-cache.ts +140 -39
  1084. package/src/router/segment-resolution/loader-mask.ts +67 -0
  1085. package/src/router/segment-resolution/loader-snapshot.ts +251 -0
  1086. package/src/router/segment-resolution/revalidation.ts +478 -388
  1087. package/src/router/segment-resolution/static-store.ts +19 -5
  1088. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1089. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1090. package/src/router/segment-resolution.ts +5 -1
  1091. package/src/router/segment-wrappers.ts +8 -5
  1092. package/src/router/state-cookie-name.ts +33 -0
  1093. package/src/router/substitute-pattern-params.ts +75 -0
  1094. package/src/router/telemetry-otel.ts +160 -200
  1095. package/src/router/telemetry.ts +105 -20
  1096. package/src/router/timeout.ts +0 -20
  1097. package/src/router/tracing.ts +215 -0
  1098. package/src/router/trie-matching.ts +188 -58
  1099. package/src/router/types.ts +10 -63
  1100. package/src/router/url-params.ts +57 -0
  1101. package/src/router.ts +222 -67
  1102. package/src/rsc/full-payload.ts +70 -0
  1103. package/src/rsc/handler-context.ts +3 -2
  1104. package/src/rsc/handler.ts +726 -457
  1105. package/src/rsc/helpers.ts +168 -46
  1106. package/src/rsc/index.ts +2 -5
  1107. package/src/rsc/json-route-result.ts +38 -0
  1108. package/src/rsc/loader-fetch.ts +127 -31
  1109. package/src/rsc/manifest-init.ts +33 -42
  1110. package/src/rsc/nonce.ts +10 -1
  1111. package/src/rsc/origin-guard.ts +39 -25
  1112. package/src/rsc/progressive-enhancement.ts +159 -23
  1113. package/src/rsc/redirect-guard.ts +100 -0
  1114. package/src/rsc/response-cache-serve.ts +238 -0
  1115. package/src/rsc/response-error.ts +79 -12
  1116. package/src/rsc/response-route-handler.ts +99 -189
  1117. package/src/rsc/rsc-rendering.ts +479 -104
  1118. package/src/rsc/runtime-warnings.ts +23 -10
  1119. package/src/rsc/server-action.ts +293 -115
  1120. package/src/rsc/shell-capture.ts +1158 -0
  1121. package/src/rsc/shell-serve.ts +150 -0
  1122. package/src/rsc/ssr-setup.ts +144 -0
  1123. package/src/rsc/transition-gate.ts +89 -0
  1124. package/src/rsc/types.ts +64 -6
  1125. package/src/runtime-env.ts +18 -0
  1126. package/src/search-params.ts +49 -41
  1127. package/src/segment-content-promise.ts +67 -0
  1128. package/src/segment-loader-promise.ts +167 -0
  1129. package/src/segment-system.tsx +418 -131
  1130. package/src/serialize.ts +243 -0
  1131. package/src/server/context.ts +367 -61
  1132. package/src/server/cookie-parse.ts +32 -0
  1133. package/src/server/cookie-store.ts +152 -5
  1134. package/src/server/handle-store.ts +40 -38
  1135. package/src/server/loader-registry.ts +38 -46
  1136. package/src/server/request-context.ts +576 -176
  1137. package/src/ssr/index.tsx +467 -174
  1138. package/src/ssr/inject-rsc-eager.ts +167 -0
  1139. package/src/ssr/ssr-root.tsx +228 -0
  1140. package/src/static-handler.ts +27 -18
  1141. package/src/testing/cache-status.ts +162 -0
  1142. package/src/testing/collect-handle.ts +46 -0
  1143. package/src/testing/dispatch.ts +813 -0
  1144. package/src/testing/dom.entry.ts +22 -0
  1145. package/src/testing/e2e/fixture.ts +188 -0
  1146. package/src/testing/e2e/index.ts +128 -0
  1147. package/src/testing/e2e/matchers.ts +35 -0
  1148. package/src/testing/e2e/page-helpers.ts +272 -0
  1149. package/src/testing/e2e/parity.ts +387 -0
  1150. package/src/testing/e2e/server.ts +195 -0
  1151. package/src/testing/flight-matchers.ts +97 -0
  1152. package/src/testing/flight-normalize.ts +11 -0
  1153. package/src/testing/flight-runtime.d.ts +57 -0
  1154. package/src/testing/flight-tree.ts +682 -0
  1155. package/src/testing/flight.entry.ts +52 -0
  1156. package/src/testing/flight.ts +257 -0
  1157. package/src/testing/generated-routes.ts +199 -0
  1158. package/src/testing/index.ts +105 -0
  1159. package/src/testing/internal/context.ts +371 -0
  1160. package/src/testing/internal/flight-client-globals.ts +30 -0
  1161. package/src/testing/internal/seed-vars.ts +54 -0
  1162. package/src/testing/render-handler.ts +357 -0
  1163. package/src/testing/render-route.tsx +584 -0
  1164. package/src/testing/run-loader.ts +385 -0
  1165. package/src/testing/run-middleware.ts +205 -0
  1166. package/src/testing/run-transition-when.ts +164 -0
  1167. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1168. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1169. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1170. package/src/testing/vitest-stubs/version.ts +5 -0
  1171. package/src/testing/vitest.ts +305 -0
  1172. package/src/theme/ThemeProvider.tsx +56 -84
  1173. package/src/theme/ThemeScript.tsx +7 -9
  1174. package/src/theme/constants.ts +52 -13
  1175. package/src/theme/index.ts +0 -7
  1176. package/src/theme/theme-context.ts +1 -5
  1177. package/src/theme/theme-script.ts +22 -21
  1178. package/src/theme/use-theme.ts +0 -3
  1179. package/src/types/boundaries.ts +0 -35
  1180. package/src/types/cache-types.ts +17 -8
  1181. package/src/types/error-types.ts +30 -90
  1182. package/src/types/global-namespace.ts +54 -41
  1183. package/src/types/handler-context.ts +237 -89
  1184. package/src/types/index.ts +3 -10
  1185. package/src/types/loader-types.ts +44 -15
  1186. package/src/types/request-scope.ts +112 -0
  1187. package/src/types/route-config.ts +23 -46
  1188. package/src/types/route-entry.ts +19 -7
  1189. package/src/types/segments.ts +137 -19
  1190. package/src/urls/include-helper.ts +40 -75
  1191. package/src/urls/include-provider.ts +71 -0
  1192. package/src/urls/index.ts +2 -11
  1193. package/src/urls/path-helper-types.ts +102 -23
  1194. package/src/urls/path-helper.ts +62 -111
  1195. package/src/urls/pattern-types.ts +84 -19
  1196. package/src/urls/response-types.ts +25 -22
  1197. package/src/urls/type-extraction.ts +98 -154
  1198. package/src/urls/urls-function.ts +1 -19
  1199. package/src/use-loader.tsx +346 -89
  1200. package/src/vercel/index.ts +11 -0
  1201. package/src/vercel/tracing.ts +88 -0
  1202. package/src/vite/debug.ts +185 -0
  1203. package/src/vite/discovery/bundle-postprocess.ts +36 -38
  1204. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1205. package/src/vite/discovery/discover-routers.ts +130 -85
  1206. package/src/vite/discovery/discovery-errors.ts +255 -0
  1207. package/src/vite/discovery/gate-state.ts +171 -0
  1208. package/src/vite/discovery/prerender-collection.ts +214 -132
  1209. package/src/vite/discovery/route-types-writer.ts +40 -84
  1210. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1211. package/src/vite/discovery/state.ts +57 -6
  1212. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1213. package/src/vite/index.ts +19 -3
  1214. package/src/vite/inject-client-debug.ts +88 -0
  1215. package/src/vite/plugin-types.ts +234 -62
  1216. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1217. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1218. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1219. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1220. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1221. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1222. package/src/vite/plugins/expose-action-id.ts +49 -98
  1223. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1224. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1225. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1226. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1227. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1228. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1229. package/src/vite/plugins/performance-tracks.ts +89 -0
  1230. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1231. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1232. package/src/vite/plugins/vercel-output.ts +384 -0
  1233. package/src/vite/plugins/version-injector.ts +40 -29
  1234. package/src/vite/plugins/version-plugin.ts +46 -37
  1235. package/src/vite/plugins/virtual-entries.ts +138 -27
  1236. package/src/vite/rango.ts +353 -303
  1237. package/src/vite/router-discovery.ts +1090 -166
  1238. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1239. package/src/vite/utils/banner.ts +4 -4
  1240. package/src/vite/utils/bundle-analysis.ts +10 -15
  1241. package/src/vite/utils/client-chunks.ts +184 -0
  1242. package/src/vite/utils/directive-prologue.ts +40 -0
  1243. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1244. package/src/vite/utils/manifest-utils.ts +4 -59
  1245. package/src/vite/utils/package-resolution.ts +20 -52
  1246. package/src/vite/utils/prerender-utils.ts +98 -38
  1247. package/src/vite/utils/shared-utils.ts +144 -44
  1248. package/src/browser/action-response-classifier.ts +0 -99
  1249. package/src/browser/shallow.ts +0 -40
  1250. package/src/router/middleware-cookies.ts +0 -55
@@ -61,6 +61,27 @@ export function buildHistoryState(
61
61
  return Object.keys(result).length > 0 ? result : null;
62
62
  }
63
63
 
64
+ /**
65
+ * Stamp an `idx` on the next history entry's state and call push/replaceState.
66
+ * Push increments the current idx; replace keeps it. Initial entry idx is 0.
67
+ * Used by useRouter().back() to detect "first entry in this session" without
68
+ * relying on the Navigation API.
69
+ */
70
+ export function pushHistoryWithIdx(
71
+ state: Record<string, unknown> | null,
72
+ url: string,
73
+ replace: boolean,
74
+ ): void {
75
+ const oldIdx = (window.history.state as { idx?: number } | null)?.idx ?? 0;
76
+ const newIdx = replace ? oldIdx : oldIdx + 1;
77
+ const finalState = { ...(state ?? {}), idx: newIdx };
78
+ if (replace) {
79
+ window.history.replaceState(finalState, "", url);
80
+ } else {
81
+ window.history.pushState(finalState, "", url);
82
+ }
83
+ }
84
+
64
85
  /**
65
86
  * Merge server-set location state into the current history entry.
66
87
  * Replaces the current history state and dispatches notification event
@@ -1,9 +1,9 @@
1
1
  // ============================================================================
2
- // Browser Module - Browser entry point for RSC Router
2
+ // Browser Module - Browser entry point for Rango
3
3
  // ============================================================================
4
4
  //
5
5
  // Usage:
6
- // import { initBrowserApp, RSCRouter } from "rsc-router/browser";
6
+ // import { initBrowserApp, Rango } from "rsc-router/browser";
7
7
  //
8
8
  // For React components (Link, useNavigation, etc.):
9
9
  // import { Link, useNavigation, useAction, href } from "rsc-router/client";
@@ -13,6 +13,6 @@
13
13
  // Browser app initialization
14
14
  export {
15
15
  initBrowserApp,
16
- RSCRouter,
16
+ Rango,
17
17
  type InitBrowserAppOptions,
18
18
  } from "./rsc-router.js";
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Client seat of `invalidateClientCache()` (the `default` export condition).
3
+ *
4
+ * Makes the current client behave as if a server action had just completed:
5
+ * the history cache is marked stale (SWR), the prefetch map is flushed, the
6
+ * state rotates, and sibling tabs are broadcast to — the same
7
+ * `markCacheAsStaleAndBroadcast()` path the server-action bridge uses. This is
8
+ * the gentler mark-stale (not hard-clear) behavior, so Back renders the cached
9
+ * entry instantly and revalidates.
10
+ */
11
+
12
+ import { getRegisteredStore } from "./navigation-store-handle.js";
13
+ import { clearPrefetchCache } from "./prefetch/cache.js";
14
+
15
+ export function invalidateClientCache(): void {
16
+ if (typeof document === "undefined") {
17
+ // SSR pass of a client component also resolves the default condition. A
18
+ // render-time call must not take down the page; no-op with a dev warning.
19
+ if (process.env.NODE_ENV !== "production") {
20
+ console.warn(
21
+ "[rango] invalidateClientCache() was called during a server render; " +
22
+ "it is a no-op outside the browser.",
23
+ );
24
+ }
25
+ return;
26
+ }
27
+
28
+ const store = getRegisteredStore();
29
+ if (store) {
30
+ store.markCacheAsStaleAndBroadcast();
31
+ return;
32
+ }
33
+
34
+ // Pre-boot: no store registered yet. clearPrefetchCache() (which rotates the
35
+ // state) is complete at this point — there is no history cache to mark and no
36
+ // sibling state worth broadcasting.
37
+ clearPrefetchCache();
38
+ }
39
+
40
+ /**
41
+ * Client no-op for `keepClientCache()`. It is a server action directive (the
42
+ * `react-server` condition sets a response header the action bridge reads);
43
+ * there is nothing to suppress from the client side.
44
+ */
45
+ export function keepClientCache(): void {
46
+ if (process.env.NODE_ENV !== "production") {
47
+ console.warn(
48
+ "[rango] keepClientCache() has no effect on the client; it is a server " +
49
+ "action directive. Call it from inside a server action.",
50
+ );
51
+ }
52
+ }
@@ -117,6 +117,7 @@ export function setupLinkInterception(
117
117
  // Read navigation options from data attributes (set by Link component)
118
118
  const scrollAttr = link.getAttribute("data-scroll");
119
119
  const replaceAttr = link.getAttribute("data-replace");
120
+ const revalidateAttr = link.getAttribute("data-revalidate");
120
121
 
121
122
  const navigateOptions: NavigateOptions = {};
122
123
  if (scrollAttr === "false") {
@@ -125,6 +126,9 @@ export function setupLinkInterception(
125
126
  if (replaceAttr === "true") {
126
127
  navigateOptions.replace = true;
127
128
  }
129
+ if (revalidateAttr === "false") {
130
+ navigateOptions.revalidate = false;
131
+ }
128
132
 
129
133
  onNavigate(href, navigateOptions);
130
134
  };
@@ -1,5 +1,15 @@
1
1
  import { INTERNAL_RANGO_DEBUG } from "../internal-debug.js";
2
2
 
3
+ /**
4
+ * Module-level debug flag for guarding call sites whose debug arguments do
5
+ * non-trivial work (joins, maps, spreads, object literals). Because the Vite
6
+ * transform folds INTERNAL_RANGO_DEBUG to a literal, an `if (IS_BROWSER_DEBUG)`
7
+ * guard is minifier-DCE-able — the whole block drops from the production bundle.
8
+ * Prefer this over isBrowserDebugEnabled() at hot call sites: a const guard folds
9
+ * where a function call may not.
10
+ */
11
+ export const IS_BROWSER_DEBUG: boolean = INTERNAL_RANGO_DEBUG;
12
+
3
13
  interface BrowserLogContext {
4
14
  requestId: string;
5
15
  txId: string;
@@ -53,3 +63,21 @@ export function debugLog(msg: string, ...args: unknown[]): void {
53
63
  console.log(msg, ...args);
54
64
  }
55
65
  }
66
+
67
+ /**
68
+ * Boot-sequence debug log: one line per initial-document step (flight decode,
69
+ * handle stream, bridge wiring, initial tree build, hydration commit), each
70
+ * stamped with performance.now() so the gap BEFORE hydrateRoot is visible.
71
+ * The initial document path was otherwise silent — FE debug only started
72
+ * talking at the first soft navigation, so a boot stall (e.g. an await that
73
+ * holds initBrowserApp, and with it hydrateRoot) was invisible.
74
+ */
75
+ export function bootLog(step: string, details?: Record<string, unknown>): void {
76
+ if (!INTERNAL_RANGO_DEBUG) return;
77
+ const prefix = `[Browser][boot] ${step} @ ${Math.round(performance.now())}ms`;
78
+ if (details) {
79
+ console.log(prefix, details);
80
+ return;
81
+ }
82
+ console.log(prefix);
83
+ }
@@ -1,5 +1,5 @@
1
1
  import type { ResolvedSegment } from "./types.js";
2
- import { debugLog } from "./logging.js";
2
+ import { debugLog, IS_BROWSER_DEBUG } from "./logging.js";
3
3
 
4
4
  /**
5
5
  * Merge partial loader data from server with cached loader data.
@@ -19,9 +19,11 @@ export function mergeSegmentLoaders(
19
19
  const serverLoaderIds = fromServer.loaderIds || [];
20
20
  const cachedLoaderIds = fromCache.loaderIds || [];
21
21
 
22
- debugLog(
23
- `[Browser] Merging partial loaders: server has ${serverLoaderIds.join(", ")}, cache has ${cachedLoaderIds.join(", ")}`,
24
- );
22
+ if (IS_BROWSER_DEBUG) {
23
+ debugLog(
24
+ `[Browser] Merging partial loaders: server has ${serverLoaderIds.join(", ")}, cache has ${cachedLoaderIds.join(", ")}`,
25
+ );
26
+ }
25
27
 
26
28
  return {
27
29
  ...fromCache,
@@ -4,12 +4,21 @@ import type {
4
4
  NavigateOptionsInternal,
5
5
  ResolvedSegment,
6
6
  } from "./types.js";
7
+ import { setAppVersion } from "./app-version.js";
8
+ import { isActionFenceActive } from "./action-fence.js";
9
+ import { getRangoState } from "./rango-state.js";
7
10
  import * as React from "react";
8
11
  import { startTransition } from "react";
9
12
  import {
10
13
  createNavigationTransaction,
11
14
  resolveNavigationState,
12
15
  } from "./navigation-transaction.js";
16
+ import { buildHistoryState, pushHistoryWithIdx } from "./history-state.js";
17
+ import {
18
+ handleNavigationStart,
19
+ handleNavigationEnd,
20
+ ensureHistoryKey,
21
+ } from "./scroll-restoration.js";
13
22
 
14
23
  // addTransitionType is only available in React experimental
15
24
  const addTransitionType: ((type: string) => void) | undefined =
@@ -18,12 +27,12 @@ const addTransitionType: ((type: string) => void) | undefined =
18
27
  import { setupLinkInterception } from "./link-interceptor.js";
19
28
  import { createPartialUpdater } from "./partial-update.js";
20
29
  import { generateHistoryKey } from "./navigation-store.js";
21
- import { handleNavigationEnd } from "./scroll-restoration.js";
22
30
  import type { EventController } from "./event-controller.js";
23
31
  import { isInterceptOnlyCache } from "./intercept-utils.js";
24
32
  import {
25
33
  toNetworkError,
26
34
  emitNetworkError,
35
+ emitNavigationError,
27
36
  isBackgroundSuppressible,
28
37
  } from "./network-error-handler.js";
29
38
  import { debugLog } from "./logging.js";
@@ -35,11 +44,6 @@ if (typeof Symbol.dispose === "undefined") {
35
44
  (Symbol as any).dispose = Symbol("Symbol.dispose");
36
45
  }
37
46
 
38
- /** Get IDs of non-loader segments (layouts, routes, parallels). */
39
- function getNonLoaderSegmentIds(segments: ResolvedSegment[]): string[] {
40
- return segments.filter((s) => s.type !== "loader").map((s) => s.id);
41
- }
42
-
43
47
  export { createNavigationTransaction };
44
48
 
45
49
  /**
@@ -47,7 +51,7 @@ export { createNavigationTransaction };
47
51
  */
48
52
  export interface NavigationBridgeConfigWithController extends NavigationBridgeConfig {
49
53
  eventController: EventController;
50
- /** RSC version from initial payload metadata */
54
+ /** RSC version from initial payload metadata. */
51
55
  version?: string;
52
56
  }
53
57
 
@@ -67,8 +71,8 @@ export interface NavigationBridgeConfigWithController extends NavigationBridgeCo
67
71
  export function createNavigationBridge(
68
72
  config: NavigationBridgeConfigWithController,
69
73
  ): NavigationBridge {
70
- const { store, client, eventController, onUpdate, renderSegments, version } =
71
- config;
74
+ const { store, client, eventController, onUpdate, renderSegments } = config;
75
+ let version = config.version;
72
76
 
73
77
  // Create shared partial updater
74
78
  const fetchPartialUpdate = createPartialUpdater({
@@ -76,7 +80,7 @@ export function createNavigationBridge(
76
80
  client,
77
81
  onUpdate,
78
82
  renderSegments,
79
- version,
83
+ getVersion: () => version,
80
84
  });
81
85
 
82
86
  return {
@@ -114,6 +118,81 @@ export function createNavigationBridge(
114
118
  return;
115
119
  }
116
120
 
121
+ // Shallow navigation: skip RSC fetch when revalidate is false
122
+ // and the pathname hasn't changed (search param / hash only change).
123
+ if (
124
+ options?.revalidate === false &&
125
+ targetUrl.pathname === new URL(window.location.href).pathname
126
+ ) {
127
+ // Preserve intercept context from the current history entry so that
128
+ // popstate uses the correct cache key (:intercept suffix) and restores
129
+ // the right full-page vs modal semantics.
130
+ const currentHistoryState = window.history.state;
131
+ const isIntercept = currentHistoryState?.intercept === true;
132
+ const interceptSourceUrl = isIntercept
133
+ ? currentHistoryState?.sourceUrl
134
+ : undefined;
135
+
136
+ const historyKey = generateHistoryKey(url, { intercept: isIntercept });
137
+
138
+ // Copy current segments to the new history key so back/forward restores instantly
139
+ const currentKey = store.getHistoryKey();
140
+ const currentCache = store.getCachedSegments(currentKey);
141
+ if (currentCache?.segments) {
142
+ const currentHandleData = eventController.getHandleState().data;
143
+ store.cacheSegmentsForHistory(
144
+ historyKey,
145
+ currentCache.segments,
146
+ currentHandleData,
147
+ );
148
+ }
149
+
150
+ // Save current scroll position before changing URL
151
+ handleNavigationStart();
152
+
153
+ // Snapshot old state before pushState/replaceState overwrites it
154
+ const oldState = window.history.state;
155
+
156
+ // Update browser URL (carry intercept context into history state)
157
+ const historyState = buildHistoryState(
158
+ resolvedState,
159
+ {
160
+ intercept: isIntercept || undefined,
161
+ sourceUrl: interceptSourceUrl,
162
+ },
163
+ {},
164
+ );
165
+ pushHistoryWithIdx(historyState, url, options?.replace ?? false);
166
+
167
+ // Ensure new history entry has a scroll restoration key
168
+ ensureHistoryKey();
169
+
170
+ // Notify useLocationState() hooks when state changes
171
+ const hasOldState =
172
+ oldState &&
173
+ typeof oldState === "object" &&
174
+ ("state" in oldState ||
175
+ Object.keys(oldState).some((k) => k.startsWith("__rsc_ls_")));
176
+ const hasNewState =
177
+ historyState &&
178
+ ("state" in historyState ||
179
+ Object.keys(historyState).some((k) => k.startsWith("__rsc_ls_")));
180
+ if (hasOldState || hasNewState) {
181
+ window.dispatchEvent(new Event("__rsc_locationstate"));
182
+ }
183
+
184
+ // Update store history key so future navigations reference the right cache
185
+ store.setHistoryKey(historyKey);
186
+ store.setCurrentUrl(url);
187
+
188
+ // Notify hooks — location updates, state stays idle
189
+ eventController.setLocation(targetUrl);
190
+
191
+ // Handle post-navigation scroll
192
+ handleNavigationEnd({ scroll: options.scroll });
193
+ return;
194
+ }
195
+
117
196
  // Only abort pending requests when navigating to a different route
118
197
  // Same-route navigation (e.g., /todos -> /todos) should not cancel in-flight actions
119
198
  const currentPath = new URL(window.location.href).pathname;
@@ -137,17 +216,20 @@ export function createNavigationBridge(
137
216
  store.setInterceptSourceUrl(null);
138
217
  }
139
218
 
140
- // Before navigating away, update the source page's cache with the latest handleData.
141
- // This ensures the cache has correct handleData even if handles were streaming.
219
+ // Before navigating away, update the source page's cache with the latest
220
+ // handleData. This ensures the cache has correct handleData even if handles
221
+ // were streaming. Use updateCacheHandleData (not cacheSegmentsForHistory):
222
+ // the source page's segments are unchanged, so this is a handleData refresh,
223
+ // not a commit. Critically it PRESERVES the entry's stale flag — when the
224
+ // source page has a deferred Meta still pending, its entry was marked stale
225
+ // (invalidate-on-pending) so a popstate return revalidates; re-committing it
226
+ // here would reset stale to false and serve the carried (pre-resolution)
227
+ // title as fresh. It also leaves the nav-instance token intact.
142
228
  const sourceHistoryKey = store.getHistoryKey();
143
229
  const sourceCached = store.getCachedSegments(sourceHistoryKey);
144
230
  if (sourceCached?.segments && sourceCached.segments.length > 0) {
145
231
  const currentHandleData = eventController.getHandleState().data;
146
- store.cacheSegmentsForHistory(
147
- sourceHistoryKey,
148
- sourceCached.segments,
149
- currentHandleData,
150
- );
232
+ store.updateCacheHandleData(sourceHistoryKey, currentHandleData);
151
233
  }
152
234
 
153
235
  // Check if we have cached segments for target URL
@@ -181,18 +263,24 @@ export function createNavigationBridge(
181
263
  // 2. routes that CAN be intercepted - we don't know if this navigation will intercept
182
264
  // 3. when leaving intercept - we need fresh non-intercept segments from server
183
265
  // 4. redirect-with-state - force re-render so hooks read fresh state
266
+ // 5. stale cache - server action invalidated it, need fresh data with loading state
184
267
  const hasUsableCache =
185
268
  cachedSegments &&
186
269
  cachedSegments.length > 0 &&
187
270
  !isInterceptOnlyCache(cachedSegments) &&
188
271
  !hasInterceptCache &&
189
272
  !isLeavingIntercept &&
273
+ !cached?.stale &&
190
274
  !options?._skipCache;
191
275
 
276
+ // Forward navigations always await fetchPartialUpdate before rendering,
277
+ // so useNavigation should always report "loading". skipLoadingState is
278
+ // only used for popstate background revalidation (line ~526) where
279
+ // cached content renders instantly without a network wait.
192
280
  const tx = createNavigationTransaction(store, eventController, url, {
193
281
  ...options,
194
282
  state: resolvedState,
195
- skipLoadingState: hasUsableCache,
283
+ skipLoadingState: false,
196
284
  });
197
285
 
198
286
  // REVALIDATE: Fetch fresh data from server
@@ -200,7 +288,7 @@ export function createNavigationBridge(
200
288
  await fetchPartialUpdate(
201
289
  url,
202
290
  hasUsableCache
203
- ? getNonLoaderSegmentIds(cachedSegments!)
291
+ ? cachedSegments!.map((s) => s.id)
204
292
  : options?._skipCache
205
293
  ? [] // Action redirect: send no segments so server renders everything fresh
206
294
  : undefined,
@@ -241,8 +329,15 @@ export function createNavigationBridge(
241
329
  } as NavigateOptionsInternal);
242
330
  }
243
331
 
244
- if (error instanceof DOMException && error.name === "AbortError") {
245
- debugLog("[Browser] Navigation aborted by newer navigation");
332
+ // Aborted, or superseded by a newer navigation. A superseded nav may
333
+ // reject with a non-AbortError (e.g. a Flight decode that fails after its
334
+ // signal was aborted), so check the signal too -- otherwise we would
335
+ // render a boundary that clobbers the newer navigation's content.
336
+ if (
337
+ (error instanceof DOMException && error.name === "AbortError") ||
338
+ tx.handle.signal.aborted
339
+ ) {
340
+ debugLog("[Browser] Navigation aborted or superseded");
246
341
  return;
247
342
  }
248
343
 
@@ -259,7 +354,13 @@ export function createNavigationBridge(
259
354
  return;
260
355
  }
261
356
 
262
- throw error;
357
+ // A response we could not process (undecodable Flight body, or an
358
+ // unanticipated failure building the response). Surface the route's
359
+ // error boundary rather than let the rejection abort the navigation
360
+ // silently. Prefetched responses funnel here too: a failed warm-prefetch
361
+ // payload rejects on consumption and propagates to this catch.
362
+ console.error("[Browser] Unprocessable navigation response:", error);
363
+ emitNavigationError(onUpdate, error, url);
263
364
  } finally {
264
365
  tx[Symbol.dispose]();
265
366
  }
@@ -288,6 +389,14 @@ export function createNavigationBridge(
288
389
  tx.with({ url: window.location.href, replace: true, scroll: false }),
289
390
  );
290
391
  } catch (error) {
392
+ // Aborted or superseded: bail without rendering a boundary (see navigate()).
393
+ if (
394
+ (error instanceof DOMException && error.name === "AbortError") ||
395
+ tx.handle.signal.aborted
396
+ ) {
397
+ return;
398
+ }
399
+
291
400
  const networkError = toNetworkError(error, {
292
401
  url: window.location.href,
293
402
  operation: "revalidation",
@@ -300,7 +409,12 @@ export function createNavigationBridge(
300
409
  emitNetworkError(onUpdate, networkError, window.location.href);
301
410
  return;
302
411
  }
303
- throw error;
412
+
413
+ // refresh() shares the fetchPartialUpdate chokepoint with navigate()/
414
+ // popstate, so an unprocessable response must surface the error boundary
415
+ // here too rather than become an uncaught rejection.
416
+ console.error("[Browser] Unprocessable refresh response:", error);
417
+ emitNavigationError(onUpdate, error, window.location.href);
304
418
  } finally {
305
419
  tx[Symbol.dispose]();
306
420
  }
@@ -332,6 +446,15 @@ export function createNavigationBridge(
332
446
  eventController.abortAllActions();
333
447
  }
334
448
 
449
+ // Popstate that exits an intercept to a non-intercept destination. The
450
+ // fallback fetch path below needs `leave-intercept` mode so it filters
451
+ // the cached @modal segment from the request and forces a re-render —
452
+ // otherwise a cache-miss popstate whose server response has an empty
453
+ // diff hits the "no changes" branch in partial-update and the modal
454
+ // stays on screen.
455
+ const isLeavingIntercept =
456
+ !isIntercept && currentInterceptSource !== null;
457
+
335
458
  // Compute history key from URL (with intercept suffix if applicable)
336
459
  const historyKey = generateHistoryKey(url, { intercept: isIntercept });
337
460
 
@@ -355,11 +478,22 @@ export function createNavigationBridge(
355
478
  // Helper to check if streaming is in progress
356
479
  const isStreaming = () => eventController.getState().isStreaming;
357
480
 
481
+ // Surface any external rotation of the rango state cookie (a server
482
+ // Set-Cookie, a sibling tab, a cookie clear) BEFORE reading the stale bit.
483
+ // The divergence observer only runs inside getRangoState() — fetch-time —
484
+ // so a popstate-first interaction would otherwise serve a pre-mutation
485
+ // page as fresh and never fetch to trigger the observer. Reading here lets
486
+ // the observer mark the history cache stale so getCachedSegments sees it.
487
+ getRangoState();
488
+
358
489
  // Check if we can restore from history cache
359
490
  const cached = store.getCachedSegments(historyKey);
360
491
  const cachedSegments = cached?.segments;
361
492
  const cachedHandleData = cached?.handleData;
362
- const isStale = cached?.stale ?? false;
493
+ // While an action is in flight the fence persists no stale flag, so OR it
494
+ // in here: a popstate during the flight serves the cached entry AND
495
+ // revalidates (SWR) instead of serving it as fresh.
496
+ const isStale = (cached?.stale ?? false) || isActionFenceActive();
363
497
 
364
498
  if (cachedSegments && cachedSegments.length > 0) {
365
499
  // Update store to point to this history entry
@@ -368,6 +502,12 @@ export function createNavigationBridge(
368
502
  store.setCurrentUrl(url);
369
503
  store.setPath(new URL(url).pathname);
370
504
 
505
+ // Restore router identity from cache so subsequent navigations
506
+ // don't falsely detect an app switch.
507
+ if (cached?.routerId) {
508
+ store.setRouterId?.(cached.routerId);
509
+ }
510
+
371
511
  // Render from cache - force await to skip loading fallbacks
372
512
  try {
373
513
  const root = await renderSegments(cachedSegments, {
@@ -393,8 +533,16 @@ export function createNavigationBridge(
393
533
  cachedHandleData,
394
534
  params: cachedParams,
395
535
  },
536
+ scroll: { restore: true, isStreaming },
396
537
  };
397
- const hasTransition = cachedSegments.some((s) => s.transition);
538
+ // Intercept-driven popstate (entering OR leaving an intercept) only
539
+ // mutates the parallel slot; the main outlet shows the same content.
540
+ // Skip startViewTransition in those cases — same rationale as the
541
+ // intercept guard in partial-update.ts's hasTransition computation.
542
+ const hasTransition =
543
+ !isIntercept &&
544
+ !isLeavingIntercept &&
545
+ cachedSegments.some((s) => s.transition);
398
546
  if (hasTransition) {
399
547
  startTransition(() => {
400
548
  if (addTransitionType) {
@@ -406,14 +554,22 @@ export function createNavigationBridge(
406
554
  onUpdate(popstateUpdate);
407
555
  }
408
556
 
409
- // Restore scroll position for back/forward navigation
410
- handleNavigationEnd({ restore: true, isStreaming });
411
-
412
557
  // SWR: If stale, trigger background revalidation
413
558
  if (isStale) {
414
559
  debugLog("[Browser] Cache is stale, background revalidating...");
415
- // Background revalidation - don't await, just fire and forget
416
- const segmentIds = getNonLoaderSegmentIds(cachedSegments);
560
+ // Background revalidation - don't await, just fire and forget.
561
+ // When the entry's handles are incomplete (a deferred Meta was still
562
+ // pending when the user navigated away — see handlesPending), send NO
563
+ // segment IDs so the server returns a FULL re-render with the handle
564
+ // stream. A normal stale revalidation sends the cached IDs and the
565
+ // server returns a diff-only payload that omits unchanged segments'
566
+ // handles, so a deferred Meta would never re-stream and the title
567
+ // would stay the pre-resolution carry. handlesPending is set only for
568
+ // the deferred-Meta-aborted case, so action/cross-tab SWR keeps the
569
+ // cheap diff path.
570
+ const segmentIds = cached?.handlesPending
571
+ ? []
572
+ : cachedSegments.map((s) => s.id);
417
573
 
418
574
  const tx = createNavigationTransaction(
419
575
  store,
@@ -478,13 +634,22 @@ export function createNavigationBridge(
478
634
  intercept: isIntercept,
479
635
  interceptSourceUrl,
480
636
  }),
481
- isIntercept ? { type: "navigate", interceptSourceUrl } : undefined,
637
+ isIntercept
638
+ ? { type: "navigate", interceptSourceUrl }
639
+ : isLeavingIntercept
640
+ ? { type: "leave-intercept" }
641
+ : undefined,
482
642
  );
483
643
  // Restore scroll position after fetch completes
484
644
  handleNavigationEnd({ restore: true, isStreaming });
485
645
  } catch (error) {
486
- if (error instanceof DOMException && error.name === "AbortError") {
487
- debugLog("[Browser] Popstate navigation aborted");
646
+ // Aborted or superseded by a newer navigation: bail without clobbering
647
+ // content with a boundary (see navigate()).
648
+ if (
649
+ (error instanceof DOMException && error.name === "AbortError") ||
650
+ tx.handle.signal.aborted
651
+ ) {
652
+ debugLog("[Browser] Popstate navigation aborted or superseded");
488
653
  return;
489
654
  }
490
655
 
@@ -501,7 +666,10 @@ export function createNavigationBridge(
501
666
  return;
502
667
  }
503
668
 
504
- throw error;
669
+ // Unprocessable response on a back/forward navigation: surface the
670
+ // error boundary instead of an uncaught rejection (see navigate()).
671
+ console.error("[Browser] Unprocessable popstate response:", error);
672
+ emitNavigationError(onUpdate, error, url);
505
673
  } finally {
506
674
  tx[Symbol.dispose]();
507
675
  }
@@ -555,6 +723,16 @@ export function createNavigationBridge(
555
723
  window.removeEventListener("pageshow", handlePageShow);
556
724
  };
557
725
  },
726
+
727
+ getVersion(): string | undefined {
728
+ return version;
729
+ },
730
+
731
+ updateVersion(newVersion: string): void {
732
+ version = newVersion;
733
+ setAppVersion(newVersion);
734
+ store.clearHistoryCache();
735
+ },
558
736
  };
559
737
  }
560
738