@rangojs/router 0.0.0-experimental.7dc955ec → 0.0.0-experimental.7f5e6b80

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 (1246) hide show
  1. package/AGENTS.md +8 -4
  2. package/README.md +303 -741
  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 +724 -183
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{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 +4267 -1213
  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 +86 -15
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +85 -6
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +228 -33
  816. package/skills/caching/SKILL.md +336 -19
  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 -691
  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 +302 -54
  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 +99 -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 +141 -9
  857. package/skills/router-setup/SKILL.md +131 -11
  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 -626
  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 +1 -66
  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 +252 -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/logging.ts +28 -0
  901. package/src/browser/merge-segment-loaders.ts +6 -4
  902. package/src/browser/navigation-bridge.ts +131 -30
  903. package/src/browser/navigation-client.ts +204 -87
  904. package/src/browser/navigation-store-handle.ts +38 -0
  905. package/src/browser/navigation-store.ts +203 -80
  906. package/src/browser/navigation-transaction.ts +9 -59
  907. package/src/browser/network-error-handler.ts +34 -7
  908. package/src/browser/partial-update.ts +198 -125
  909. package/src/browser/prefetch/cache.ts +246 -71
  910. package/src/browser/prefetch/fetch.ts +358 -40
  911. package/src/browser/prefetch/queue.ts +113 -32
  912. package/src/browser/prefetch/resource-ready.ts +77 -0
  913. package/src/browser/rango-state.ts +158 -76
  914. package/src/browser/react/Link.tsx +112 -15
  915. package/src/browser/react/NavigationProvider.tsx +213 -122
  916. package/src/browser/react/ScrollRestoration.tsx +10 -6
  917. package/src/browser/react/context.ts +7 -2
  918. package/src/browser/react/filter-segment-order.ts +66 -7
  919. package/src/browser/react/index.ts +0 -48
  920. package/src/browser/react/location-state-shared.ts +178 -8
  921. package/src/browser/react/location-state.ts +39 -14
  922. package/src/browser/react/use-action.ts +6 -15
  923. package/src/browser/react/use-handle.ts +23 -69
  924. package/src/browser/react/use-href.tsx +8 -1
  925. package/src/browser/react/use-link-status.ts +33 -8
  926. package/src/browser/react/use-navigation.ts +32 -7
  927. package/src/browser/react/use-params.ts +20 -10
  928. package/src/browser/react/use-reverse.ts +106 -0
  929. package/src/browser/react/use-router.ts +46 -11
  930. package/src/browser/react/use-search-params.ts +0 -5
  931. package/src/browser/react/use-segments.ts +11 -21
  932. package/src/browser/response-adapter.ts +99 -8
  933. package/src/browser/rsc-router.tsx +168 -28
  934. package/src/browser/scroll-restoration.ts +44 -27
  935. package/src/browser/segment-reconciler.ts +44 -12
  936. package/src/browser/segment-structure-assert.ts +2 -2
  937. package/src/browser/server-action-bridge.ts +244 -71
  938. package/src/browser/types.ts +127 -12
  939. package/src/browser/validate-redirect-origin.ts +43 -16
  940. package/src/build/collect-fallback-refs.ts +107 -0
  941. package/src/build/generate-manifest.ts +207 -158
  942. package/src/build/generate-route-types.ts +6 -1
  943. package/src/build/index.ts +11 -3
  944. package/src/build/prefix-tree-utils.ts +123 -0
  945. package/src/build/route-trie.ts +198 -41
  946. package/src/build/route-types/ast-route-extraction.ts +15 -8
  947. package/src/build/route-types/codegen.ts +16 -5
  948. package/src/build/route-types/include-resolution.ts +464 -63
  949. package/src/build/route-types/param-extraction.ts +6 -3
  950. package/src/build/route-types/per-module-writer.ts +22 -6
  951. package/src/build/route-types/router-processing.ts +333 -117
  952. package/src/build/route-types/scan-filter.ts +9 -2
  953. package/src/build/route-types/source-scan.ts +216 -0
  954. package/src/build/runtime-discovery.ts +13 -21
  955. package/src/cache/cache-error.ts +104 -0
  956. package/src/cache/cache-key-utils.ts +58 -13
  957. package/src/cache/cache-policy.ts +108 -34
  958. package/src/cache/cache-runtime.ts +421 -58
  959. package/src/cache/cache-scope.ts +187 -96
  960. package/src/cache/cache-tag.ts +149 -0
  961. package/src/cache/cf/cf-base64.ts +33 -0
  962. package/src/cache/cf/cf-cache-constants.ts +127 -0
  963. package/src/cache/cf/cf-cache-store.ts +2202 -372
  964. package/src/cache/cf/cf-cache-types.ts +349 -0
  965. package/src/cache/cf/cf-kv-utils.ts +46 -0
  966. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  967. package/src/cache/cf/index.ts +6 -16
  968. package/src/cache/document-cache.ts +126 -41
  969. package/src/cache/handle-snapshot.ts +70 -0
  970. package/src/cache/index.ts +23 -20
  971. package/src/cache/memory-segment-store.ts +243 -37
  972. package/src/cache/profile-registry.ts +46 -31
  973. package/src/cache/read-through-swr.ts +56 -12
  974. package/src/cache/segment-codec.ts +13 -21
  975. package/src/cache/shell-snapshot.ts +417 -0
  976. package/src/cache/tag-invalidation.ts +230 -0
  977. package/src/cache/types.ts +180 -99
  978. package/src/cache/vercel/index.ts +11 -0
  979. package/src/cache/vercel/vercel-cache-store.ts +1127 -0
  980. package/src/client.rsc.tsx +41 -21
  981. package/src/client.tsx +116 -290
  982. package/src/cloudflare/index.ts +11 -0
  983. package/src/cloudflare/tracing.ts +108 -0
  984. package/src/component-utils.ts +19 -0
  985. package/src/components/DefaultDocument.tsx +8 -2
  986. package/src/context-var.ts +18 -6
  987. package/src/decode-loader-results.ts +52 -0
  988. package/src/defer.ts +185 -0
  989. package/src/deps/ssr.ts +0 -1
  990. package/src/encode-kv.ts +49 -0
  991. package/src/errors.ts +30 -4
  992. package/src/escape-script.ts +52 -0
  993. package/src/handle.ts +104 -34
  994. package/src/handles/MetaTags.tsx +24 -53
  995. package/src/handles/Scripts.tsx +183 -0
  996. package/src/handles/breadcrumbs.ts +35 -8
  997. package/src/handles/deferred-resolution.ts +127 -0
  998. package/src/handles/is-thenable.ts +18 -0
  999. package/src/handles/meta.ts +14 -40
  1000. package/src/handles/script.ts +244 -0
  1001. package/src/host/cookie-handler.ts +9 -60
  1002. package/src/host/errors.ts +13 -22
  1003. package/src/host/index.ts +9 -2
  1004. package/src/host/pattern-matcher.ts +23 -52
  1005. package/src/host/router.ts +107 -99
  1006. package/src/host/testing.ts +40 -27
  1007. package/src/host/types.ts +37 -4
  1008. package/src/host/utils.ts +1 -1
  1009. package/src/href-client.ts +137 -22
  1010. package/src/index.rsc.ts +100 -13
  1011. package/src/index.ts +143 -19
  1012. package/src/internal-debug.ts +11 -10
  1013. package/src/loader-store.ts +500 -0
  1014. package/src/loader.rsc.ts +20 -13
  1015. package/src/loader.ts +12 -11
  1016. package/src/missing-id-error.ts +68 -0
  1017. package/src/outlet-context.ts +1 -1
  1018. package/src/outlet-provider.tsx +1 -5
  1019. package/src/prerender/param-hash.ts +16 -16
  1020. package/src/prerender/store.ts +37 -41
  1021. package/src/prerender.ts +215 -86
  1022. package/src/redirect-origin.ts +114 -0
  1023. package/src/regex-escape.ts +8 -0
  1024. package/src/render-error-thrower.tsx +20 -0
  1025. package/src/response-utils.ts +62 -0
  1026. package/src/reverse.ts +65 -15
  1027. package/src/root-error-boundary.tsx +1 -19
  1028. package/src/route-content-wrapper.tsx +19 -77
  1029. package/src/route-definition/dsl-helpers.ts +461 -304
  1030. package/src/route-definition/helper-factories.ts +28 -140
  1031. package/src/route-definition/helpers-types.ts +153 -77
  1032. package/src/route-definition/index.ts +4 -2
  1033. package/src/route-definition/redirect.ts +51 -10
  1034. package/src/route-definition/resolve-handler-use.ts +160 -0
  1035. package/src/route-definition/use-item-types.ts +29 -0
  1036. package/src/route-map-builder.ts +41 -20
  1037. package/src/route-types.ts +37 -46
  1038. package/src/router/basename.ts +14 -0
  1039. package/src/router/content-negotiation.ts +164 -17
  1040. package/src/router/error-handling.ts +45 -18
  1041. package/src/router/find-match.ts +129 -30
  1042. package/src/router/handler-context.ts +52 -31
  1043. package/src/router/instrument.ts +355 -0
  1044. package/src/router/intercept-resolution.ts +48 -24
  1045. package/src/router/lazy-includes.ts +85 -62
  1046. package/src/router/loader-resolution.ts +286 -56
  1047. package/src/router/logging.ts +0 -6
  1048. package/src/router/manifest.ts +96 -53
  1049. package/src/router/match-api.ts +178 -218
  1050. package/src/router/match-context.ts +0 -22
  1051. package/src/router/match-handlers.ts +211 -165
  1052. package/src/router/match-middleware/background-revalidation.ts +40 -24
  1053. package/src/router/match-middleware/cache-lookup.ts +170 -276
  1054. package/src/router/match-middleware/cache-store.ts +64 -52
  1055. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1056. package/src/router/match-middleware/segment-resolution.ts +45 -14
  1057. package/src/router/match-pipelines.ts +1 -42
  1058. package/src/router/match-result.ts +113 -45
  1059. package/src/router/metrics.ts +0 -34
  1060. package/src/router/middleware-types.ts +7 -140
  1061. package/src/router/middleware.ts +298 -175
  1062. package/src/router/navigation-snapshot.ts +133 -0
  1063. package/src/router/params-util.ts +23 -0
  1064. package/src/router/parse-pattern.ts +115 -0
  1065. package/src/router/pattern-matching.ts +181 -150
  1066. package/src/router/prefetch-cache-ttl.ts +51 -0
  1067. package/src/router/prefetch-limits.ts +37 -0
  1068. package/src/router/prerender-match.ts +203 -58
  1069. package/src/router/preview-match.ts +35 -103
  1070. package/src/router/request-classification.ts +291 -0
  1071. package/src/router/revalidation.ts +123 -73
  1072. package/src/router/route-snapshot.ts +256 -0
  1073. package/src/router/router-context.ts +6 -29
  1074. package/src/router/router-interfaces.ts +146 -35
  1075. package/src/router/router-options.ts +202 -15
  1076. package/src/router/router-registry.ts +2 -5
  1077. package/src/router/segment-resolution/fresh.ts +196 -97
  1078. package/src/router/segment-resolution/helpers.ts +115 -30
  1079. package/src/router/segment-resolution/loader-cache.ts +139 -39
  1080. package/src/router/segment-resolution/loader-mask.ts +67 -0
  1081. package/src/router/segment-resolution/loader-snapshot.ts +251 -0
  1082. package/src/router/segment-resolution/revalidation.ts +351 -330
  1083. package/src/router/segment-resolution/static-store.ts +19 -5
  1084. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1085. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1086. package/src/router/segment-resolution.ts +5 -1
  1087. package/src/router/segment-wrappers.ts +6 -5
  1088. package/src/router/state-cookie-name.ts +33 -0
  1089. package/src/router/substitute-pattern-params.ts +75 -0
  1090. package/src/router/telemetry-otel.ts +160 -200
  1091. package/src/router/telemetry.ts +105 -20
  1092. package/src/router/timeout.ts +0 -20
  1093. package/src/router/tracing.ts +215 -0
  1094. package/src/router/trie-matching.ts +171 -59
  1095. package/src/router/types.ts +10 -63
  1096. package/src/router/url-params.ts +57 -0
  1097. package/src/router.ts +205 -70
  1098. package/src/rsc/full-payload.ts +70 -0
  1099. package/src/rsc/handler-context.ts +3 -2
  1100. package/src/rsc/handler.ts +682 -508
  1101. package/src/rsc/helpers.ts +168 -46
  1102. package/src/rsc/index.ts +2 -5
  1103. package/src/rsc/json-route-result.ts +38 -0
  1104. package/src/rsc/loader-fetch.ts +127 -31
  1105. package/src/rsc/manifest-init.ts +33 -42
  1106. package/src/rsc/nonce.ts +10 -1
  1107. package/src/rsc/origin-guard.ts +39 -25
  1108. package/src/rsc/progressive-enhancement.ts +138 -15
  1109. package/src/rsc/redirect-guard.ts +100 -0
  1110. package/src/rsc/response-cache-serve.ts +238 -0
  1111. package/src/rsc/response-error.ts +79 -12
  1112. package/src/rsc/response-route-handler.ts +99 -189
  1113. package/src/rsc/rsc-rendering.ts +461 -73
  1114. package/src/rsc/runtime-warnings.ts +23 -10
  1115. package/src/rsc/server-action.ts +287 -113
  1116. package/src/rsc/shell-capture.ts +1158 -0
  1117. package/src/rsc/shell-serve.ts +150 -0
  1118. package/src/rsc/ssr-setup.ts +18 -2
  1119. package/src/rsc/transition-gate.ts +89 -0
  1120. package/src/rsc/types.ts +62 -6
  1121. package/src/runtime-env.ts +18 -0
  1122. package/src/search-params.ts +35 -30
  1123. package/src/segment-content-promise.ts +67 -0
  1124. package/src/segment-loader-promise.ts +167 -0
  1125. package/src/segment-system.tsx +355 -204
  1126. package/src/serialize.ts +243 -0
  1127. package/src/server/context.ts +269 -52
  1128. package/src/server/cookie-parse.ts +32 -0
  1129. package/src/server/cookie-store.ts +152 -5
  1130. package/src/server/handle-store.ts +40 -38
  1131. package/src/server/loader-registry.ts +38 -46
  1132. package/src/server/request-context.ts +510 -166
  1133. package/src/ssr/index.tsx +467 -175
  1134. package/src/ssr/inject-rsc-eager.ts +167 -0
  1135. package/src/ssr/ssr-root.tsx +228 -0
  1136. package/src/static-handler.ts +27 -18
  1137. package/src/testing/cache-status.ts +162 -0
  1138. package/src/testing/collect-handle.ts +46 -0
  1139. package/src/testing/dispatch.ts +813 -0
  1140. package/src/testing/dom.entry.ts +22 -0
  1141. package/src/testing/e2e/fixture.ts +188 -0
  1142. package/src/testing/e2e/index.ts +128 -0
  1143. package/src/testing/e2e/matchers.ts +35 -0
  1144. package/src/testing/e2e/page-helpers.ts +272 -0
  1145. package/src/testing/e2e/parity.ts +387 -0
  1146. package/src/testing/e2e/server.ts +195 -0
  1147. package/src/testing/flight-matchers.ts +97 -0
  1148. package/src/testing/flight-normalize.ts +11 -0
  1149. package/src/testing/flight-runtime.d.ts +57 -0
  1150. package/src/testing/flight-tree.ts +682 -0
  1151. package/src/testing/flight.entry.ts +52 -0
  1152. package/src/testing/flight.ts +257 -0
  1153. package/src/testing/generated-routes.ts +199 -0
  1154. package/src/testing/index.ts +105 -0
  1155. package/src/testing/internal/context.ts +371 -0
  1156. package/src/testing/internal/flight-client-globals.ts +30 -0
  1157. package/src/testing/internal/seed-vars.ts +54 -0
  1158. package/src/testing/render-handler.ts +357 -0
  1159. package/src/testing/render-route.tsx +584 -0
  1160. package/src/testing/run-loader.ts +385 -0
  1161. package/src/testing/run-middleware.ts +205 -0
  1162. package/src/testing/run-transition-when.ts +164 -0
  1163. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1164. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1165. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1166. package/src/testing/vitest-stubs/version.ts +5 -0
  1167. package/src/testing/vitest.ts +305 -0
  1168. package/src/theme/ThemeProvider.tsx +56 -84
  1169. package/src/theme/ThemeScript.tsx +7 -9
  1170. package/src/theme/constants.ts +52 -13
  1171. package/src/theme/index.ts +0 -7
  1172. package/src/theme/theme-context.ts +1 -5
  1173. package/src/theme/theme-script.ts +22 -21
  1174. package/src/theme/use-theme.ts +0 -3
  1175. package/src/types/boundaries.ts +0 -35
  1176. package/src/types/cache-types.ts +17 -8
  1177. package/src/types/error-types.ts +30 -90
  1178. package/src/types/global-namespace.ts +54 -41
  1179. package/src/types/handler-context.ts +138 -80
  1180. package/src/types/index.ts +3 -10
  1181. package/src/types/loader-types.ts +44 -15
  1182. package/src/types/request-scope.ts +112 -0
  1183. package/src/types/route-config.ts +20 -52
  1184. package/src/types/route-entry.ts +12 -7
  1185. package/src/types/segments.ts +136 -15
  1186. package/src/urls/include-helper.ts +40 -75
  1187. package/src/urls/include-provider.ts +71 -0
  1188. package/src/urls/index.ts +2 -11
  1189. package/src/urls/path-helper-types.ts +102 -23
  1190. package/src/urls/path-helper.ts +62 -111
  1191. package/src/urls/pattern-types.ts +84 -19
  1192. package/src/urls/response-types.ts +25 -22
  1193. package/src/urls/type-extraction.ts +98 -154
  1194. package/src/urls/urls-function.ts +1 -19
  1195. package/src/use-loader.tsx +346 -89
  1196. package/src/vercel/index.ts +11 -0
  1197. package/src/vercel/tracing.ts +88 -0
  1198. package/src/vite/debug.ts +185 -0
  1199. package/src/vite/discovery/bundle-postprocess.ts +36 -38
  1200. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1201. package/src/vite/discovery/discover-routers.ts +130 -85
  1202. package/src/vite/discovery/discovery-errors.ts +255 -0
  1203. package/src/vite/discovery/gate-state.ts +171 -0
  1204. package/src/vite/discovery/prerender-collection.ts +214 -132
  1205. package/src/vite/discovery/route-types-writer.ts +40 -84
  1206. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1207. package/src/vite/discovery/state.ts +57 -4
  1208. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1209. package/src/vite/index.ts +8 -0
  1210. package/src/vite/inject-client-debug.ts +88 -0
  1211. package/src/vite/plugin-types.ts +261 -6
  1212. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1213. package/src/vite/plugins/client-ref-dedup.ts +16 -11
  1214. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1215. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1216. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1217. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1218. package/src/vite/plugins/expose-action-id.ts +48 -95
  1219. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1220. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1221. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1222. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1223. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1224. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1225. package/src/vite/plugins/performance-tracks.ts +89 -0
  1226. package/src/vite/plugins/refresh-cmd.ts +89 -27
  1227. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1228. package/src/vite/plugins/vercel-output.ts +384 -0
  1229. package/src/vite/plugins/version-injector.ts +40 -29
  1230. package/src/vite/plugins/version-plugin.ts +37 -40
  1231. package/src/vite/plugins/virtual-entries.ts +138 -27
  1232. package/src/vite/rango.ts +247 -132
  1233. package/src/vite/router-discovery.ts +1091 -159
  1234. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1235. package/src/vite/utils/banner.ts +1 -1
  1236. package/src/vite/utils/bundle-analysis.ts +10 -15
  1237. package/src/vite/utils/client-chunks.ts +184 -0
  1238. package/src/vite/utils/directive-prologue.ts +40 -0
  1239. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1240. package/src/vite/utils/manifest-utils.ts +4 -59
  1241. package/src/vite/utils/package-resolution.ts +20 -52
  1242. package/src/vite/utils/prerender-utils.ts +98 -38
  1243. package/src/vite/utils/shared-utils.ts +144 -44
  1244. package/src/browser/action-response-classifier.ts +0 -99
  1245. package/src/browser/shallow.ts +0 -40
  1246. package/src/router/middleware-cookies.ts +0 -55
@@ -25,15 +25,18 @@ function parsePathname(pathname: string): string[] {
25
25
  }
26
26
 
27
27
  /**
28
- * Build segments state from event controller
28
+ * Build segments state from event controller. `segmentIds` is the
29
+ * route-only list (parallels and loaders stripped) — distinct from the
30
+ * controller's `segmentOrder` which drives handle collection and includes
31
+ * parallel slot ids.
29
32
  */
30
33
  function buildSegmentsState(
31
34
  location: URL,
32
- segmentOrder: string[],
35
+ routeSegmentIds: string[],
33
36
  ): SegmentsState {
34
37
  return {
35
38
  path: parsePathname(location.pathname),
36
- segmentIds: segmentOrder,
39
+ segmentIds: routeSegmentIds,
37
40
  location,
38
41
  };
39
42
  }
@@ -74,7 +77,7 @@ export function useSegments<T>(
74
77
  const handleState = ctx.eventController.getHandleState();
75
78
  const segmentsState = buildSegmentsState(
76
79
  location as URL,
77
- handleState.segmentOrder,
80
+ handleState.routeSegmentIds,
78
81
  );
79
82
  return selector ? selector(segmentsState) : segmentsState;
80
83
  });
@@ -83,47 +86,36 @@ export function useSegments<T>(
83
86
  const selectorRef = useRef(selector);
84
87
  selectorRef.current = selector;
85
88
 
86
- // Track selector identity to detect when the selector function changes.
87
- // Only then do we eagerly recompute during render to avoid staleness.
88
- // Without this guard, no-selector mode causes infinite re-renders because
89
- // buildSegmentsState creates fresh arrays that fail Object.is checks.
90
89
  const prevSelectorIdentity = useRef(selector);
91
90
 
92
- // Cache SegmentsState to stabilize nested references (path, segmentIds
93
- // arrays) so selectors returning composite values don't cause spurious
94
- // render-time setState calls.
95
91
  const segmentsCache = useRef<{
96
92
  location: URL;
97
- segmentOrder: string[];
93
+ routeSegmentIds: string[];
98
94
  state: SegmentsState;
99
95
  } | null>(null);
100
96
 
101
- // Recompute selected value from current store state and apply selector.
102
- // Shared by the render-time eager check and the subscription callback.
103
97
  function recompute(
104
98
  sel: ((state: SegmentsState) => T) | undefined,
105
99
  ): T | SegmentsState {
106
100
  const location = ctx!.eventController.getLocation();
107
101
  const handleState = ctx!.eventController.getHandleState();
108
102
 
109
- // Reuse cached state when inputs haven't changed by reference,
110
- // keeping array/object references stable for composite selectors.
111
103
  const cache = segmentsCache.current;
112
104
  let segmentsState: SegmentsState;
113
105
  if (
114
106
  cache &&
115
107
  cache.location === location &&
116
- cache.segmentOrder === handleState.segmentOrder
108
+ cache.routeSegmentIds === handleState.routeSegmentIds
117
109
  ) {
118
110
  segmentsState = cache.state;
119
111
  } else {
120
112
  segmentsState = buildSegmentsState(
121
113
  location as URL,
122
- handleState.segmentOrder,
114
+ handleState.routeSegmentIds,
123
115
  );
124
116
  segmentsCache.current = {
125
117
  location: location as URL,
126
- segmentOrder: handleState.segmentOrder,
118
+ routeSegmentIds: handleState.routeSegmentIds,
127
119
  state: segmentsState,
128
120
  };
129
121
  }
@@ -162,8 +154,6 @@ export function useSegments<T>(
162
154
  unsubscribeNav();
163
155
  unsubscribeHandles();
164
156
  };
165
- // Stable subscription: selector changes are handled via selectorRef,
166
- // state comparison uses prevState ref. No re-subscribe needed.
167
157
  // eslint-disable-next-line react-hooks/exhaustive-deps
168
158
  }, []);
169
159
 
@@ -2,6 +2,16 @@ import { validateRedirectOrigin } from "./validate-redirect-origin.js";
2
2
 
3
3
  type HeaderResult = { url: string } | "blocked" | null;
4
4
 
5
+ /**
6
+ * Null-body statuses: the Fetch spec forbids pairing these with a body, so
7
+ * `new Response(body, { status })` throws ("Response with null body status
8
+ * cannot have body"). fetch() can still surface one WITH a body straight from
9
+ * the network layer (never the JS constructor): a 304 stale-while-revalidate
10
+ * prefetch revalidated to Not Modified (body from cache), or a 204 soft
11
+ * redirect. teeWithCompletion must not re-run those through `new Response`.
12
+ */
13
+ const NULL_BODY_STATUS = new Set([101, 204, 205, 304]);
14
+
5
15
  /**
6
16
  * Extract and validate an RSC response header URL (X-RSC-Reload, X-RSC-Redirect).
7
17
  * Returns { url } if valid, "blocked" if present but invalid origin, null if absent.
@@ -24,21 +34,92 @@ export function emptyResponse(): Response {
24
34
  return new Response(null, { status: 200 });
25
35
  }
26
36
 
37
+ /**
38
+ * Whether an RSC content response carries a server-stamped router identity
39
+ * (`X-RSC-Router-Id`) that DIFFERS from the id this client expects (its own
40
+ * routerId, also sent as `_rsc_rid`). Pre-decode integrity check: lets a caller
41
+ * refuse a foreign app's payload before `createFromFetch` imports its chunks.
42
+ *
43
+ * True ONLY when both the header and the expected id are present and differ. An
44
+ * absent header (control-only reload/redirect responses are not stamped) or an
45
+ * absent expected id (e.g. before the client is seeded) is a pass-through —
46
+ * never a false reject.
47
+ */
48
+ export function isForeignRouterId(
49
+ response: Response,
50
+ expectedId: string | undefined,
51
+ ): boolean {
52
+ const got = response.headers.get("X-RSC-Router-Id");
53
+ if (!got || !expectedId) return false;
54
+ return got !== expectedId;
55
+ }
56
+
57
+ /**
58
+ * Handle the X-RSC-Reload control header (server requests a full page reload on
59
+ * a version mismatch). Returns a short-circuit response when the header is
60
+ * present -- emptyResponse() if the URL was blocked by origin validation, or a
61
+ * never-resolving promise while the page reloads -- and null when absent, so
62
+ * the caller continues processing (e.g. the X-RSC-Redirect check). Scoped to
63
+ * X-RSC-Reload only; redirect handling differs between callers.
64
+ */
65
+ export function handleReloadHeader(
66
+ response: Response,
67
+ opts: { onBlocked: () => void; onReload: (url: string) => void },
68
+ ): Response | Promise<Response> | null {
69
+ const reload = extractRscHeaderUrl(response, "X-RSC-Reload");
70
+ if (reload === "blocked") {
71
+ opts.onBlocked();
72
+ return emptyResponse();
73
+ }
74
+ if (reload) {
75
+ opts.onReload(reload.url);
76
+ window.location.href = reload.url;
77
+ return new Promise<Response>(() => {});
78
+ }
79
+ return null;
80
+ }
81
+
27
82
  /**
28
83
  * Tee a response body for RSC parsing and stream completion tracking.
29
84
  * Returns a new Response with one branch; the other is consumed to detect
30
85
  * end-of-stream, calling onComplete when done.
31
86
  *
32
- * If the response has no body, onComplete fires synchronously.
87
+ * `onComplete` receives `endedCleanly`: true only on a normal EOF drain, false
88
+ * on a read error or an abort (the signal cancelled the reader). Callers that
89
+ * gate a "fully complete" fast path (e.g. prefetch's `entry.complete`) must
90
+ * treat a non-clean end as incomplete — a broken stream is not complete data.
91
+ *
92
+ * If the response has no body, onComplete fires synchronously with `true`
93
+ * (an empty body is a clean, complete stream).
33
94
  * If signal is provided, an abort cancels the tracking reader.
95
+ *
96
+ * `silent` suppresses the stream-error log. Prefetch passes it: a speculative,
97
+ * low-priority prefetch that is aborted or never consumed can error its stream
98
+ * benignly, which is not worth surfacing. The fresh-navigation path keeps the
99
+ * log (default), where a stream error reflects a real failed navigation.
34
100
  */
35
101
  export function teeWithCompletion(
36
102
  response: Response,
37
- onComplete: () => void,
103
+ onComplete: (endedCleanly: boolean) => void,
38
104
  signal?: AbortSignal,
105
+ silent = false,
39
106
  ): Response {
40
- if (!response.body) {
41
- onComplete();
107
+ // Once-guard: a mid-stream read error runs both the finally block and the
108
+ // rejection's .catch, so onComplete must be settled exactly once across all
109
+ // paths (no-body early return, finally, catch).
110
+ let settled = false;
111
+ const settle = (endedCleanly: boolean) => {
112
+ if (!settled) {
113
+ settled = true;
114
+ onComplete(endedCleanly);
115
+ }
116
+ };
117
+
118
+ // Empty body, or a null-body status fetch() paired with a body: either way the
119
+ // body can't be re-attached via `new Response` below. Settle and pass the
120
+ // original response through; its body (when present) stays readable downstream.
121
+ if (!response.body || NULL_BODY_STATUS.has(response.status)) {
122
+ settle(true);
42
123
  return response;
43
124
  }
44
125
 
@@ -48,21 +129,31 @@ export function teeWithCompletion(
48
129
  const reader = trackingStream.getReader();
49
130
  const onAbort = signal ? reader.cancel.bind(reader) : undefined;
50
131
  if (onAbort) signal!.addEventListener("abort", onAbort, { once: true });
132
+ // Only a loop that reaches `done` is a clean EOF. A read error rejects out
133
+ // of the try and still runs the finally, so the finally must NOT assume
134
+ // clean — it gates on this flag (false on error) AND on signal.aborted
135
+ // (an abort cancels the reader so read() resolves { done: true } and the
136
+ // loop breaks here normally, NOT in the .catch — re-check the signal to
137
+ // catch that case).
138
+ let cleanEof = false;
51
139
  try {
52
140
  while (true) {
53
141
  const { done } = await reader.read();
54
- if (done) break;
142
+ if (done) {
143
+ cleanEof = true;
144
+ break;
145
+ }
55
146
  }
56
147
  } finally {
57
148
  if (onAbort) signal!.removeEventListener("abort", onAbort);
58
149
  reader.releaseLock();
59
- onComplete();
150
+ settle(cleanEof && !signal?.aborted);
60
151
  }
61
152
  })().catch((error) => {
62
- if (!signal?.aborted) {
153
+ if (!silent && !signal?.aborted) {
63
154
  console.error("[Browser] Error reading tracking stream:", error);
64
155
  }
65
- onComplete();
156
+ settle(false);
66
157
  });
67
158
 
68
159
  return new Response(rscStream, {
@@ -8,6 +8,7 @@ import {
8
8
  generateHistoryKey,
9
9
  } from "./navigation-store.js";
10
10
  import { createEventController } from "./event-controller.js";
11
+ import { validateRedirectOrigin } from "./validate-redirect-origin.js";
11
12
  import { createNavigationClient } from "./navigation-client.js";
12
13
  import { createServerActionBridge } from "./server-action-bridge.js";
13
14
  import { createNavigationBridge } from "./navigation-bridge.js";
@@ -22,11 +23,17 @@ import type {
22
23
  import type { EventController } from "./event-controller.js";
23
24
  import type { ResolvedThemeConfig, Theme } from "../theme/types.js";
24
25
  import { initRangoState } from "./rango-state.js";
26
+ import { registerNavigationStore } from "./navigation-store-handle.js";
25
27
  import { initPrefetchCache } from "./prefetch/cache.js";
28
+ import { setPrefetchConcurrency } from "./prefetch/queue.js";
29
+ import { setPrefetchDecoder } from "./prefetch/fetch.js";
30
+ import { setAppVersion } from "./app-version.js";
26
31
  import {
27
32
  isInterceptSegment,
28
33
  splitInterceptSegments,
29
34
  } from "./intercept-utils.js";
35
+ import { createAppShellRef } from "./app-shell.js";
36
+ import { bootLog, IS_BROWSER_DEBUG } from "./logging.js";
30
37
 
31
38
  // Vite HMR types are provided by vite/client
32
39
 
@@ -111,15 +118,26 @@ export interface BrowserAppContext {
111
118
  initialTheme?: Theme;
112
119
  /** Whether connection warmup is enabled */
113
120
  warmupEnabled?: boolean;
121
+ /** Whether the hydrated tree should be wrapped in React.StrictMode */
122
+ strictMode?: boolean;
114
123
  /** App version for prefetch version mismatch detection */
115
124
  version?: string;
125
+ /**
126
+ * App-shell ref, read through on each render so renderSegments and the
127
+ * NavigationProvider see rootLayout/basename/version without closing over a
128
+ * stale snapshot. Set once from the initial payload and not swapped within a
129
+ * session: a cross-app navigation is a full document load (X-RSC-Reload), so
130
+ * the target app establishes its own shell on load. Theme, warmup, and
131
+ * prefetch TTL are document-lifetime too (see AppShell).
132
+ */
133
+ appShellRef?: import("./app-shell.js").AppShellRef;
116
134
  }
117
135
 
118
136
  // Module-level state for the initialized app
119
137
  let browserAppContext: BrowserAppContext | null = null;
120
138
 
121
139
  /**
122
- * Initialize the browser app. Must be called before rendering RSCRouter.
140
+ * Initialize the browser app. Must be called before rendering Rango.
123
141
  *
124
142
  * This function:
125
143
  * - Loads the initial RSC payload from the stream
@@ -139,7 +157,8 @@ export async function initBrowserApp(
139
157
  initialTheme,
140
158
  } = options;
141
159
 
142
- // Load initial payload from SSR-injected __FLIGHT_DATA__
160
+ bootLog("initBrowserApp start");
161
+ bootLog("flight decode: awaiting initial payload from document stream");
143
162
  const initialPayload =
144
163
  await deps.createFromReadableStream<RscPayload>(rscStream);
145
164
 
@@ -153,6 +172,14 @@ export async function initBrowserApp(
153
172
  // Get initial segments and compute history key from current URL
154
173
  const initialSegments = (initialPayload.metadata?.segments ??
155
174
  []) as ResolvedSegment[];
175
+ if (IS_BROWSER_DEBUG) {
176
+ bootLog("initial payload decoded", {
177
+ version: initialPayload.metadata?.version,
178
+ routerId: initialPayload.metadata?.routerId,
179
+ segments: initialSegments.map((s) => s.id),
180
+ matched: initialPayload.metadata?.matched,
181
+ });
182
+ }
156
183
  const initialHistoryKey = generateHistoryKey(window.location.href);
157
184
 
158
185
  // Create navigation store with history-based caching
@@ -164,6 +191,18 @@ export async function initBrowserApp(
164
191
  ...(storeOptions?.cacheSize && { cacheSize: storeOptions.cacheSize }),
165
192
  });
166
193
 
194
+ // Register the active store on the module-level handle and wire the
195
+ // jar-divergence observer before any getRangoState() read can detect a
196
+ // cross-tab/server rotation. There is no global store singleton, so this
197
+ // handle is the live reference.
198
+ registerNavigationStore(store);
199
+
200
+ // Seed router identity from the initial SSR payload so the first
201
+ // cross-app SPA navigation can detect the app switch.
202
+ if (initialPayload.metadata?.routerId) {
203
+ store.setRouterId?.(initialPayload.metadata.routerId);
204
+ }
205
+
167
206
  // Create event controller for reactive state management
168
207
  const eventController = createEventController({
169
208
  initialLocation: new URL(window.location.href),
@@ -179,11 +218,24 @@ export async function initBrowserApp(
179
218
  // This ensures useHandle returns correct data during hydration to avoid mismatch
180
219
  // The handles property is an async generator that yields on each push
181
220
  if (initialPayload.metadata?.handles) {
221
+ // This for-await consumes the handle generator to completion BEFORE
222
+ // hydrateRoot is called — on a streaming/PPR document the generator only
223
+ // ends when its stream side does, so the per-push logs below are the
224
+ // primary probe for "the document render is holding hydration".
225
+ bootLog("handles: consuming payload handle stream (pre-hydration await)");
182
226
  const handlesGenerator = initialPayload.metadata.handles;
183
227
  let lastHandleData: Record<string, Record<string, unknown[]>> = {};
228
+ let handlePushes = 0;
184
229
  for await (const handleData of handlesGenerator) {
185
230
  lastHandleData = handleData;
231
+ if (IS_BROWSER_DEBUG) {
232
+ handlePushes += 1;
233
+ bootLog(`handles: push #${handlePushes}`, {
234
+ segments: Object.keys(handleData),
235
+ });
236
+ }
186
237
  }
238
+ bootLog("handles: stream complete", { pushes: handlePushes });
187
239
  // Initialize event controller with initial handle state before hydration.
188
240
  eventController.setHandleData(
189
241
  lastHandleData,
@@ -193,31 +245,62 @@ export async function initBrowserApp(
193
245
  // Update the initial cache entry with the processed handleData
194
246
  // The cache entry was created by createNavigationStore but without handleData
195
247
  store.updateCacheHandleData(initialHistoryKey, lastHandleData);
248
+ } else {
249
+ bootLog("handles: none in payload");
196
250
  }
197
251
 
198
252
  // Create composable utilities
199
253
  const client = createNavigationClient(deps);
200
254
 
201
- // Extract rootLayout and version from metadata for browser-side re-renders
202
- const rootLayout = initialPayload.metadata?.rootLayout;
255
+ // Capture the per-router app-shell. rootLayout, basename, and version live
256
+ // here and are read through the ref at call time rather than closed over.
257
+ // It is set once from the initial payload and not swapped within a session:
258
+ // a cross-app navigation is a full document load (X-RSC-Reload), so the
259
+ // target app establishes its own shell on load.
203
260
  const version = initialPayload.metadata?.version;
261
+ const appShellRef = createAppShellRef({
262
+ routerId: initialPayload.metadata?.routerId,
263
+ rootLayout: initialPayload.metadata?.rootLayout,
264
+ basename: initialPayload.metadata?.basename,
265
+ version,
266
+ });
204
267
 
205
- // Initialize the localStorage state key for cache invalidation.
206
- // Uses the build version so a new deploy automatically busts all cached prefetches.
207
- initRangoState(version ?? "0");
268
+ // Initialize the rango state cookie for cache invalidation. The build version
269
+ // busts cached prefetches on deploy; the server-resolved cookie name
270
+ // namespaces the cookie so sibling apps on the same origin don't collide
271
+ // (falls back to the bare default prefix if metadata lacks the name).
272
+ initRangoState(version ?? "0", initialPayload.metadata?.stateCookieName);
273
+ setAppVersion(version);
208
274
 
209
- // Initialize the in-memory prefetch cache TTL from server config.
210
- // A value of 0 disables the cache; undefined falls back to the module default.
275
+ // Initialize the in-memory prefetch cache (TTL + max size) and the prefetch
276
+ // queue concurrency from server config. A TTL of 0 disables the cache;
277
+ // undefined values fall back to the module defaults.
211
278
  const prefetchCacheTTL = initialPayload.metadata?.prefetchCacheTTL;
212
- if (prefetchCacheTTL !== undefined) {
213
- initPrefetchCache(prefetchCacheTTL);
279
+ const prefetchCacheSize = initialPayload.metadata?.prefetchCacheSize;
280
+ if (prefetchCacheTTL !== undefined || prefetchCacheSize !== undefined) {
281
+ initPrefetchCache(prefetchCacheTTL, prefetchCacheSize);
282
+ }
283
+ const prefetchConcurrency = initialPayload.metadata?.prefetchConcurrency;
284
+ if (prefetchConcurrency !== undefined) {
285
+ setPrefetchConcurrency(prefetchConcurrency);
214
286
  }
215
287
 
216
- // Create a bound renderSegments that includes rootLayout
288
+ // Wire the RSC decoder so prefetches decode eagerly and warm the route's
289
+ // client chunks (same createFromFetch the navigation client uses).
290
+ setPrefetchDecoder((response) => deps.createFromFetch<RscPayload>(response));
291
+
292
+ // Create a bound renderSegments that reads rootLayout through the shell ref.
293
+ // The shell is set once at init and not swapped within a session (a cross-app
294
+ // navigation is a full document load), so this always renders this app's
295
+ // Document; reading through the ref just avoids closing over a stale value.
217
296
  const renderSegments = (
218
297
  segments: ResolvedSegment[],
219
298
  options?: RenderSegmentsOptions,
220
- ) => baseRenderSegments(segments, { ...options, rootLayout });
299
+ ) =>
300
+ baseRenderSegments(segments, {
301
+ ...options,
302
+ rootLayout: appShellRef.get().rootLayout,
303
+ });
221
304
 
222
305
  // Lazy reference for navigation bridge — the action bridge is created first
223
306
  // but may need to trigger SPA navigation for action redirects.
@@ -231,10 +314,15 @@ export async function initBrowserApp(
231
314
  deps,
232
315
  onUpdate: (update) => store.emitUpdate(update),
233
316
  renderSegments,
234
- version,
235
317
  onNavigate: (url, options) => {
236
318
  if (!navigateFn) {
237
- window.location.href = url;
319
+ // Navigation bridge not wired yet: hard-navigate, but re-validate
320
+ // same-origin defensively so this init-window fallback cannot become an
321
+ // open redirect (the normal path validates inside the navigation bridge).
322
+ const safe = validateRedirectOrigin(url, window.location.origin);
323
+ if (safe) {
324
+ window.location.href = safe;
325
+ }
238
326
  return Promise.resolve();
239
327
  }
240
328
  return navigateFn(url, options);
@@ -249,7 +337,7 @@ export async function initBrowserApp(
249
337
  client,
250
338
  onUpdate: (update) => store.emitUpdate(update),
251
339
  renderSegments,
252
- version,
340
+ version: version,
253
341
  });
254
342
 
255
343
  // Connect action redirect → navigation bridge (now that both are initialized)
@@ -259,9 +347,17 @@ export async function initBrowserApp(
259
347
  if (linkInterception) {
260
348
  navigationBridge.registerLinkInterception();
261
349
  }
350
+ bootLog("bridges registered (action + navigation)");
262
351
 
263
352
  // Build initial tree with rootLayout
353
+ bootLog("building initial segment tree (renderSegments)");
264
354
  const initialTree = renderSegments(initialPayload.metadata!.segments);
355
+ if (IS_BROWSER_DEBUG && initialTree instanceof Promise) {
356
+ initialTree.then(
357
+ () => bootLog("initial segment tree settled"),
358
+ (err: unknown) => bootLog("initial segment tree rejected", { err }),
359
+ );
360
+ }
265
361
 
266
362
  // Setup HMR with debounce — burst saves (format-on-save, rapid edits)
267
363
  // fire many rsc:update events in quick succession. Without debouncing,
@@ -294,11 +390,11 @@ export async function initBrowserApp(
294
390
  // full lifecycle (fetching + streaming, before commit) without
295
391
  // blocking on server actions.
296
392
  if (eventController.getState().isNavigating) {
297
- console.log("[RSCRouter] HMR: Skipping — navigation in progress");
393
+ console.log("[Rango] HMR: Skipping — navigation in progress");
298
394
  return;
299
395
  }
300
396
 
301
- console.log("[RSCRouter] HMR: Server update, refetching RSC");
397
+ console.log("[Rango] HMR: Server update, refetching RSC");
302
398
 
303
399
  const abort = new AbortController();
304
400
  hmrAbort = abort;
@@ -316,6 +412,7 @@ export async function initBrowserApp(
316
412
  segmentIds: [],
317
413
  previousUrl: store.getSegmentState().currentUrl,
318
414
  interceptSourceUrl: interceptSourceUrl || undefined,
415
+ routerId: store.getRouterId?.(),
319
416
  hmr: true,
320
417
  signal: abort.signal,
321
418
  });
@@ -329,6 +426,35 @@ export async function initBrowserApp(
329
426
  throw new Error("HMR refetch returned invalid payload");
330
427
  }
331
428
 
429
+ // Update version BEFORE rebuilding state so that
430
+ // clearHistoryCache() runs first, then the fresh segment
431
+ // cache entry we create below survives.
432
+ //
433
+ // Compare against the bridge's live version, not the init-time
434
+ // `version` const: after the first HMR bump the const is stale, so a
435
+ // later update with an unchanged version would otherwise re-clear the
436
+ // cache and re-broadcast across tabs/apps. The live read fires only
437
+ // on a genuine version change.
438
+ const newVersion = payload.metadata.version;
439
+ const currentVersion = navigationBridge.getVersion();
440
+ if (newVersion && newVersion !== currentVersion) {
441
+ console.log(
442
+ "[Rango] HMR: version changed",
443
+ currentVersion,
444
+ "→",
445
+ newVersion,
446
+ "clearing caches",
447
+ );
448
+ navigationBridge.updateVersion(newVersion);
449
+ }
450
+
451
+ // Apply only partial segment updates. A non-partial payload during
452
+ // HMR is transient: the worker route table is still rebuilding after
453
+ // the edit, so the URL momentarily resolves to not-found/catch-all.
454
+ // Skip it -- the debounced follow-up refetch returns the settled
455
+ // route's partial payload and renders it below. We never reload here:
456
+ // a paramless document GET would run the SSR path and surface the
457
+ // not-found page during that same transient.
332
458
  if (payload.metadata?.isPartial) {
333
459
  const segments = payload.metadata.segments || [];
334
460
  const matched = payload.metadata.matched || [];
@@ -368,10 +494,10 @@ export async function initBrowserApp(
368
494
 
369
495
  await streamComplete;
370
496
  handle.complete(new URL(window.location.href));
371
- console.log("[RSCRouter] HMR: RSC stream complete");
497
+ console.log("[Rango] HMR: RSC stream complete");
372
498
  } catch (err) {
373
499
  if (abort.signal.aborted) return;
374
- console.warn("[RSCRouter] HMR: Refetch failed, reloading page", err);
500
+ console.warn("[Rango] HMR: Refetch failed, reloading page", err);
375
501
  window.location.reload();
376
502
  return;
377
503
  } finally {
@@ -383,7 +509,7 @@ export async function initBrowserApp(
383
509
  });
384
510
  }
385
511
 
386
- // Store context for RSCRouter component
512
+ // Store context for Rango component
387
513
  const context: BrowserAppContext = {
388
514
  store,
389
515
  eventController,
@@ -393,20 +519,27 @@ export async function initBrowserApp(
393
519
  themeConfig: effectiveThemeConfig,
394
520
  initialTheme: effectiveInitialTheme,
395
521
  warmupEnabled: initialPayload.metadata?.warmupEnabled ?? true,
522
+ strictMode: initialPayload.metadata?.strictMode ?? true,
396
523
  version,
524
+ appShellRef,
397
525
  };
398
526
  browserAppContext = context;
399
527
 
528
+ bootLog("initBrowserApp complete -- handing off to hydrateRoot");
400
529
  return context;
401
530
  }
402
531
 
532
+ // Once-flag so the hydration-commit boot log fires a single time (StrictMode
533
+ // re-runs the root effect; the second flush is not a second hydration).
534
+ let hydrationCommitLogged = false;
535
+
403
536
  /**
404
537
  * Get the browser app context. Throws if initBrowserApp hasn't been called.
405
538
  */
406
539
  export function getBrowserAppContext(): BrowserAppContext {
407
540
  if (!browserAppContext) {
408
541
  throw new Error(
409
- "RSCRouter: initBrowserApp() must be called before rendering RSCRouter",
542
+ "Rango: initBrowserApp() must be called before rendering Rango",
410
543
  );
411
544
  }
412
545
  return browserAppContext;
@@ -420,18 +553,18 @@ export function resetBrowserAppContext(): void {
420
553
  }
421
554
 
422
555
  /**
423
- * Props for the RSCRouter component
556
+ * Props for the Rango component
424
557
  */
425
- export interface RSCRouterProps {}
558
+ export interface RangoProps {}
426
559
 
427
560
  /**
428
- * RSCRouter component - renders the RSC router with all internal wiring.
561
+ * Rango component - renders the RSC router with all internal wiring.
429
562
  *
430
563
  * Must be called after initBrowserApp() has completed.
431
564
  *
432
565
  * @example
433
566
  * ```tsx
434
- * import { initBrowserApp, RSCRouter } from "rsc-router/browser";
567
+ * import { initBrowserApp, Rango } from "rsc-router/browser";
435
568
  * import { rscStream } from "rsc-html-stream/client";
436
569
  * import * as rscBrowser from "@vitejs/plugin-rsc/browser";
437
570
  *
@@ -441,14 +574,14 @@ export interface RSCRouterProps {}
441
574
  * hydrateRoot(
442
575
  * document,
443
576
  * <React.StrictMode>
444
- * <RSCRouter />
577
+ * <Rango />
445
578
  * </React.StrictMode>
446
579
  * );
447
580
  * }
448
581
  * main();
449
582
  * ```
450
583
  */
451
- export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
584
+ export function Rango(_props: RangoProps): React.ReactElement {
452
585
  const {
453
586
  store,
454
587
  eventController,
@@ -459,6 +592,7 @@ export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
459
592
  initialTheme,
460
593
  warmupEnabled,
461
594
  version,
595
+ appShellRef,
462
596
  } = getBrowserAppContext();
463
597
 
464
598
  // Signal that the React tree has hydrated. useEffect only fires after
@@ -466,6 +600,10 @@ export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
466
600
  // that does not depend on React internals like __reactFiber.
467
601
  React.useEffect(() => {
468
602
  document.documentElement.dataset.hydrated = "";
603
+ if (IS_BROWSER_DEBUG && !hydrationCommitLogged) {
604
+ hydrationCommitLogged = true;
605
+ bootLog("hydration commit (root effect flushed)");
606
+ }
469
607
  }, []);
470
608
 
471
609
  return (
@@ -478,6 +616,8 @@ export function RSCRouter(_props: RSCRouterProps): React.ReactElement {
478
616
  initialTheme={initialTheme}
479
617
  warmupEnabled={warmupEnabled}
480
618
  version={version}
619
+ basename={initialPayload.metadata?.basename}
620
+ appShellRef={appShellRef}
481
621
  />
482
622
  );
483
623
  }