@rangojs/router 0.0.0-experimental.116 → 0.0.0-experimental.118

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 (852) hide show
  1. package/dist/__internal.d.ts +83 -0
  2. package/dist/__internal.d.ts.map +1 -0
  3. package/dist/__internal.js +19 -0
  4. package/dist/__internal.js.map +1 -0
  5. package/dist/__mocks__/version.d.ts +7 -0
  6. package/dist/__mocks__/version.d.ts.map +1 -0
  7. package/dist/__mocks__/version.js +7 -0
  8. package/dist/__mocks__/version.js.map +1 -0
  9. package/dist/__tests__/client-href.test.d.ts +2 -0
  10. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  11. package/dist/__tests__/client-href.test.js +74 -0
  12. package/dist/__tests__/client-href.test.js.map +1 -0
  13. package/dist/__tests__/component-utils.test.d.ts +2 -0
  14. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  15. package/dist/__tests__/component-utils.test.js +51 -0
  16. package/dist/__tests__/component-utils.test.js.map +1 -0
  17. package/dist/__tests__/event-controller.test.d.ts +2 -0
  18. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  19. package/dist/__tests__/event-controller.test.js +538 -0
  20. package/dist/__tests__/event-controller.test.js.map +1 -0
  21. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  22. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.js +374 -0
  24. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  25. package/dist/__tests__/match-result.test.d.ts +2 -0
  26. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  27. package/dist/__tests__/match-result.test.js +154 -0
  28. package/dist/__tests__/match-result.test.js.map +1 -0
  29. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  30. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  31. package/dist/__tests__/navigation-store.test.js +440 -0
  32. package/dist/__tests__/navigation-store.test.js.map +1 -0
  33. package/dist/__tests__/partial-update.test.d.ts +2 -0
  34. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  35. package/dist/__tests__/partial-update.test.js +1009 -0
  36. package/dist/__tests__/partial-update.test.js.map +1 -0
  37. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  38. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  39. package/dist/__tests__/reverse-types.test.js +656 -0
  40. package/dist/__tests__/reverse-types.test.js.map +1 -0
  41. package/dist/__tests__/route-definition.test.d.ts +2 -0
  42. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  43. package/dist/__tests__/route-definition.test.js +55 -0
  44. package/dist/__tests__/route-definition.test.js.map +1 -0
  45. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  46. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  47. package/dist/__tests__/router-helpers.test.js +377 -0
  48. package/dist/__tests__/router-helpers.test.js.map +1 -0
  49. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  50. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.js +426 -0
  52. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  53. package/dist/__tests__/router-integration.test.d.ts +2 -0
  54. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  55. package/dist/__tests__/router-integration.test.js +1051 -0
  56. package/dist/__tests__/router-integration.test.js.map +1 -0
  57. package/dist/__tests__/search-params.test.d.ts +5 -0
  58. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  59. package/dist/__tests__/search-params.test.js +306 -0
  60. package/dist/__tests__/search-params.test.js.map +1 -0
  61. package/dist/__tests__/segment-system.test.d.ts +2 -0
  62. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  63. package/dist/__tests__/segment-system.test.js +627 -0
  64. package/dist/__tests__/segment-system.test.js.map +1 -0
  65. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  66. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.js +63 -0
  68. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  69. package/dist/__tests__/urls.test.d.ts +2 -0
  70. package/dist/__tests__/urls.test.d.ts.map +1 -0
  71. package/dist/__tests__/urls.test.js +421 -0
  72. package/dist/__tests__/urls.test.js.map +1 -0
  73. package/dist/__tests__/use-mount.test.d.ts +2 -0
  74. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  75. package/dist/__tests__/use-mount.test.js +35 -0
  76. package/dist/__tests__/use-mount.test.js.map +1 -0
  77. package/dist/bin/rango.d.ts +2 -0
  78. package/dist/bin/rango.d.ts.map +1 -0
  79. package/dist/bin/rango.js.map +1 -0
  80. package/dist/browser/event-controller.d.ts +191 -0
  81. package/dist/browser/event-controller.d.ts.map +1 -0
  82. package/dist/browser/event-controller.js +559 -0
  83. package/dist/browser/event-controller.js.map +1 -0
  84. package/dist/browser/index.d.ts +2 -0
  85. package/dist/browser/index.d.ts.map +1 -0
  86. package/dist/browser/index.js +14 -0
  87. package/dist/browser/index.js.map +1 -0
  88. package/dist/browser/link-interceptor.d.ts +38 -0
  89. package/dist/browser/link-interceptor.d.ts.map +1 -0
  90. package/dist/browser/link-interceptor.js +99 -0
  91. package/dist/browser/link-interceptor.js.map +1 -0
  92. package/dist/browser/logging.d.ts +10 -0
  93. package/dist/browser/logging.d.ts.map +1 -0
  94. package/dist/browser/logging.js +29 -0
  95. package/dist/browser/logging.js.map +1 -0
  96. package/dist/browser/lru-cache.d.ts +17 -0
  97. package/dist/browser/lru-cache.d.ts.map +1 -0
  98. package/dist/browser/lru-cache.js +50 -0
  99. package/dist/browser/lru-cache.js.map +1 -0
  100. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  101. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  102. package/dist/browser/merge-segment-loaders.js +102 -0
  103. package/dist/browser/merge-segment-loaders.js.map +1 -0
  104. package/dist/browser/navigation-bridge.d.ts +102 -0
  105. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  106. package/dist/browser/navigation-bridge.js +708 -0
  107. package/dist/browser/navigation-bridge.js.map +1 -0
  108. package/dist/browser/navigation-client.d.ts +25 -0
  109. package/dist/browser/navigation-client.d.ts.map +1 -0
  110. package/dist/browser/navigation-client.js +157 -0
  111. package/dist/browser/navigation-client.js.map +1 -0
  112. package/dist/browser/navigation-store.d.ts +101 -0
  113. package/dist/browser/navigation-store.d.ts.map +1 -0
  114. package/dist/browser/navigation-store.js +625 -0
  115. package/dist/browser/navigation-store.js.map +1 -0
  116. package/dist/browser/partial-update.d.ts +75 -0
  117. package/dist/browser/partial-update.d.ts.map +1 -0
  118. package/dist/browser/partial-update.js +426 -0
  119. package/dist/browser/partial-update.js.map +1 -0
  120. package/dist/browser/react/Link.d.ts +86 -0
  121. package/dist/browser/react/Link.d.ts.map +1 -0
  122. package/dist/browser/react/Link.js +128 -0
  123. package/dist/browser/react/Link.js.map +1 -0
  124. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  125. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  126. package/dist/browser/react/NavigationProvider.js +216 -0
  127. package/dist/browser/react/NavigationProvider.js.map +1 -0
  128. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  129. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.js +57 -0
  131. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  132. package/dist/browser/react/context.d.ts +46 -0
  133. package/dist/browser/react/context.d.ts.map +1 -0
  134. package/dist/browser/react/context.js +10 -0
  135. package/dist/browser/react/context.js.map +1 -0
  136. package/dist/browser/react/index.d.ts +11 -0
  137. package/dist/browser/react/index.d.ts.map +1 -0
  138. package/dist/browser/react/index.js +22 -0
  139. package/dist/browser/react/index.js.map +1 -0
  140. package/dist/browser/react/location-state-shared.d.ts +63 -0
  141. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  142. package/dist/browser/react/location-state-shared.js +81 -0
  143. package/dist/browser/react/location-state-shared.js.map +1 -0
  144. package/dist/browser/react/location-state.d.ts +23 -0
  145. package/dist/browser/react/location-state.d.ts.map +1 -0
  146. package/dist/browser/react/location-state.js +29 -0
  147. package/dist/browser/react/location-state.js.map +1 -0
  148. package/dist/browser/react/mount-context.d.ts +24 -0
  149. package/dist/browser/react/mount-context.d.ts.map +1 -0
  150. package/dist/browser/react/mount-context.js +24 -0
  151. package/dist/browser/react/mount-context.js.map +1 -0
  152. package/dist/browser/react/use-action.d.ts +64 -0
  153. package/dist/browser/react/use-action.d.ts.map +1 -0
  154. package/dist/browser/react/use-action.js +134 -0
  155. package/dist/browser/react/use-action.js.map +1 -0
  156. package/dist/browser/react/use-client-cache.d.ts +41 -0
  157. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  158. package/dist/browser/react/use-client-cache.js +39 -0
  159. package/dist/browser/react/use-client-cache.js.map +1 -0
  160. package/dist/browser/react/use-handle.d.ts +31 -0
  161. package/dist/browser/react/use-handle.d.ts.map +1 -0
  162. package/dist/browser/react/use-handle.js +144 -0
  163. package/dist/browser/react/use-handle.js.map +1 -0
  164. package/dist/browser/react/use-href.d.ts +33 -0
  165. package/dist/browser/react/use-href.d.ts.map +1 -0
  166. package/dist/browser/react/use-href.js +39 -0
  167. package/dist/browser/react/use-href.js.map +1 -0
  168. package/dist/browser/react/use-link-status.d.ts +37 -0
  169. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  170. package/dist/browser/react/use-link-status.js +99 -0
  171. package/dist/browser/react/use-link-status.js.map +1 -0
  172. package/dist/browser/react/use-mount.d.ts +25 -0
  173. package/dist/browser/react/use-mount.d.ts.map +1 -0
  174. package/dist/browser/react/use-mount.js +30 -0
  175. package/dist/browser/react/use-mount.js.map +1 -0
  176. package/dist/browser/react/use-navigation.d.ts +27 -0
  177. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  178. package/dist/browser/react/use-navigation.js +87 -0
  179. package/dist/browser/react/use-navigation.js.map +1 -0
  180. package/dist/browser/react/use-segments.d.ts +38 -0
  181. package/dist/browser/react/use-segments.d.ts.map +1 -0
  182. package/dist/browser/react/use-segments.js +130 -0
  183. package/dist/browser/react/use-segments.js.map +1 -0
  184. package/dist/browser/request-controller.d.ts +26 -0
  185. package/dist/browser/request-controller.d.ts.map +1 -0
  186. package/dist/browser/request-controller.js +147 -0
  187. package/dist/browser/request-controller.js.map +1 -0
  188. package/dist/browser/rsc-router.d.ts +129 -0
  189. package/dist/browser/rsc-router.d.ts.map +1 -0
  190. package/dist/browser/rsc-router.js +195 -0
  191. package/dist/browser/rsc-router.js.map +1 -0
  192. package/dist/browser/scroll-restoration.d.ts +93 -0
  193. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  194. package/dist/browser/scroll-restoration.js +321 -0
  195. package/dist/browser/scroll-restoration.js.map +1 -0
  196. package/dist/browser/segment-structure-assert.d.ts +17 -0
  197. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  198. package/dist/browser/segment-structure-assert.js +59 -0
  199. package/dist/browser/segment-structure-assert.js.map +1 -0
  200. package/dist/browser/server-action-bridge.d.ts +26 -0
  201. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  202. package/dist/browser/server-action-bridge.js +668 -0
  203. package/dist/browser/server-action-bridge.js.map +1 -0
  204. package/dist/browser/shallow.d.ts +12 -0
  205. package/dist/browser/shallow.d.ts.map +1 -0
  206. package/dist/browser/shallow.js +34 -0
  207. package/dist/browser/shallow.js.map +1 -0
  208. package/dist/browser/types.d.ts +369 -0
  209. package/dist/browser/types.d.ts.map +1 -0
  210. package/dist/browser/types.js +2 -0
  211. package/dist/browser/types.js.map +1 -0
  212. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  213. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.js +237 -0
  215. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  216. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  217. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  219. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  220. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  221. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  223. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  224. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  225. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  227. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  228. package/dist/build/generate-manifest.d.ts +81 -0
  229. package/dist/build/generate-manifest.d.ts.map +1 -0
  230. package/dist/build/generate-manifest.js +276 -0
  231. package/dist/build/generate-manifest.js.map +1 -0
  232. package/dist/build/generate-route-types.d.ts +115 -0
  233. package/dist/build/generate-route-types.d.ts.map +1 -0
  234. package/dist/build/generate-route-types.js +740 -0
  235. package/dist/build/generate-route-types.js.map +1 -0
  236. package/dist/build/index.d.ts +21 -0
  237. package/dist/build/index.d.ts.map +1 -0
  238. package/dist/build/index.js +21 -0
  239. package/dist/build/index.js.map +1 -0
  240. package/dist/build/route-trie.d.ts +71 -0
  241. package/dist/build/route-trie.d.ts.map +1 -0
  242. package/dist/build/route-trie.js +175 -0
  243. package/dist/build/route-trie.js.map +1 -0
  244. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  245. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  247. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  248. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  249. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.js +345 -0
  251. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  252. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  253. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  256. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  257. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.js +367 -0
  259. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  260. package/dist/cache/cache-scope.d.ts +102 -0
  261. package/dist/cache/cache-scope.d.ts.map +1 -0
  262. package/dist/cache/cache-scope.js +440 -0
  263. package/dist/cache/cache-scope.js.map +1 -0
  264. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  265. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  268. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  269. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.js +242 -0
  271. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  272. package/dist/cache/cf/index.d.ts +14 -0
  273. package/dist/cache/cf/index.d.ts.map +1 -0
  274. package/dist/cache/cf/index.js +17 -0
  275. package/dist/cache/cf/index.js.map +1 -0
  276. package/dist/cache/document-cache.d.ts +64 -0
  277. package/dist/cache/document-cache.d.ts.map +1 -0
  278. package/dist/cache/document-cache.js +228 -0
  279. package/dist/cache/document-cache.js.map +1 -0
  280. package/dist/cache/index.d.ts +19 -0
  281. package/dist/cache/index.d.ts.map +1 -0
  282. package/dist/cache/index.js +21 -0
  283. package/dist/cache/index.js.map +1 -0
  284. package/dist/cache/memory-segment-store.d.ts +110 -0
  285. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  286. package/dist/cache/memory-segment-store.js +117 -0
  287. package/dist/cache/memory-segment-store.js.map +1 -0
  288. package/dist/cache/memory-store.d.ts +41 -0
  289. package/dist/cache/memory-store.d.ts.map +1 -0
  290. package/dist/cache/memory-store.js +191 -0
  291. package/dist/cache/memory-store.js.map +1 -0
  292. package/dist/cache/types.d.ts +317 -0
  293. package/dist/cache/types.d.ts.map +1 -0
  294. package/dist/cache/types.js +12 -0
  295. package/dist/cache/types.js.map +1 -0
  296. package/dist/client.d.ts +248 -0
  297. package/dist/client.d.ts.map +1 -0
  298. package/dist/client.js +367 -0
  299. package/dist/client.js.map +1 -0
  300. package/dist/client.rsc.d.ts +26 -0
  301. package/dist/client.rsc.d.ts.map +1 -0
  302. package/dist/client.rsc.js +46 -0
  303. package/dist/client.rsc.js.map +1 -0
  304. package/dist/component-utils.d.ts +36 -0
  305. package/dist/component-utils.d.ts.map +1 -0
  306. package/dist/component-utils.js +61 -0
  307. package/dist/component-utils.js.map +1 -0
  308. package/dist/components/DefaultDocument.d.ts +13 -0
  309. package/dist/components/DefaultDocument.d.ts.map +1 -0
  310. package/dist/components/DefaultDocument.js +15 -0
  311. package/dist/components/DefaultDocument.js.map +1 -0
  312. package/dist/debug.d.ts +58 -0
  313. package/dist/debug.d.ts.map +1 -0
  314. package/dist/debug.js +157 -0
  315. package/dist/debug.js.map +1 -0
  316. package/dist/default-error-boundary.d.ts +11 -0
  317. package/dist/default-error-boundary.d.ts.map +1 -0
  318. package/dist/default-error-boundary.js +45 -0
  319. package/dist/default-error-boundary.js.map +1 -0
  320. package/dist/deps/browser.d.ts +2 -0
  321. package/dist/deps/browser.d.ts.map +1 -0
  322. package/dist/deps/browser.js +3 -0
  323. package/dist/deps/browser.js.map +1 -0
  324. package/dist/deps/html-stream-client.d.ts +2 -0
  325. package/dist/deps/html-stream-client.d.ts.map +1 -0
  326. package/dist/deps/html-stream-client.js +3 -0
  327. package/dist/deps/html-stream-client.js.map +1 -0
  328. package/dist/deps/html-stream-server.d.ts +2 -0
  329. package/dist/deps/html-stream-server.d.ts.map +1 -0
  330. package/dist/deps/html-stream-server.js +3 -0
  331. package/dist/deps/html-stream-server.js.map +1 -0
  332. package/dist/deps/rsc.d.ts +2 -0
  333. package/dist/deps/rsc.d.ts.map +1 -0
  334. package/dist/deps/rsc.js +4 -0
  335. package/dist/deps/rsc.js.map +1 -0
  336. package/dist/deps/ssr.d.ts +2 -0
  337. package/dist/deps/ssr.d.ts.map +1 -0
  338. package/dist/deps/ssr.js +3 -0
  339. package/dist/deps/ssr.js.map +1 -0
  340. package/dist/errors.d.ts +174 -0
  341. package/dist/errors.d.ts.map +1 -0
  342. package/dist/errors.js +241 -0
  343. package/dist/errors.js.map +1 -0
  344. package/dist/handle.d.ts +78 -0
  345. package/dist/handle.d.ts.map +1 -0
  346. package/dist/handle.js +82 -0
  347. package/dist/handle.js.map +1 -0
  348. package/dist/handles/MetaTags.d.ts +14 -0
  349. package/dist/handles/MetaTags.d.ts.map +1 -0
  350. package/dist/handles/MetaTags.js +136 -0
  351. package/dist/handles/MetaTags.js.map +1 -0
  352. package/dist/handles/index.d.ts +6 -0
  353. package/dist/handles/index.d.ts.map +1 -0
  354. package/dist/handles/index.js +6 -0
  355. package/dist/handles/index.js.map +1 -0
  356. package/dist/handles/meta.d.ts +39 -0
  357. package/dist/handles/meta.d.ts.map +1 -0
  358. package/dist/handles/meta.js +202 -0
  359. package/dist/handles/meta.js.map +1 -0
  360. package/dist/host/__tests__/errors.test.d.ts +2 -0
  361. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  362. package/dist/host/__tests__/errors.test.js +76 -0
  363. package/dist/host/__tests__/errors.test.js.map +1 -0
  364. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  365. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  368. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  369. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  371. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  372. package/dist/host/__tests__/router.test.d.ts +2 -0
  373. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  374. package/dist/host/__tests__/router.test.js +241 -0
  375. package/dist/host/__tests__/router.test.js.map +1 -0
  376. package/dist/host/__tests__/testing.test.d.ts +2 -0
  377. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  378. package/dist/host/__tests__/testing.test.js +64 -0
  379. package/dist/host/__tests__/testing.test.js.map +1 -0
  380. package/dist/host/__tests__/utils.test.d.ts +2 -0
  381. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  382. package/dist/host/__tests__/utils.test.js +29 -0
  383. package/dist/host/__tests__/utils.test.js.map +1 -0
  384. package/dist/host/cookie-handler.d.ts +34 -0
  385. package/dist/host/cookie-handler.d.ts.map +1 -0
  386. package/dist/host/cookie-handler.js +124 -0
  387. package/dist/host/cookie-handler.js.map +1 -0
  388. package/dist/host/errors.d.ts +56 -0
  389. package/dist/host/errors.d.ts.map +1 -0
  390. package/dist/host/errors.js +79 -0
  391. package/dist/host/errors.js.map +1 -0
  392. package/dist/host/index.d.ts +29 -0
  393. package/dist/host/index.d.ts.map +1 -0
  394. package/dist/host/index.js +32 -0
  395. package/dist/host/index.js.map +1 -0
  396. package/dist/host/pattern-matcher.d.ts +36 -0
  397. package/dist/host/pattern-matcher.d.ts.map +1 -0
  398. package/dist/host/pattern-matcher.js +172 -0
  399. package/dist/host/pattern-matcher.js.map +1 -0
  400. package/dist/host/router.d.ts +26 -0
  401. package/dist/host/router.d.ts.map +1 -0
  402. package/dist/host/router.js +218 -0
  403. package/dist/host/router.js.map +1 -0
  404. package/dist/host/testing.d.ts +36 -0
  405. package/dist/host/testing.d.ts.map +1 -0
  406. package/dist/host/testing.js +55 -0
  407. package/dist/host/testing.js.map +1 -0
  408. package/dist/host/types.d.ts +115 -0
  409. package/dist/host/types.d.ts.map +1 -0
  410. package/dist/host/types.js +7 -0
  411. package/dist/host/types.js.map +1 -0
  412. package/dist/host/utils.d.ts +21 -0
  413. package/dist/host/utils.d.ts.map +1 -0
  414. package/dist/host/utils.js +23 -0
  415. package/dist/host/utils.js.map +1 -0
  416. package/dist/href-client.d.ts +131 -0
  417. package/dist/href-client.d.ts.map +1 -0
  418. package/dist/href-client.js +64 -0
  419. package/dist/href-client.js.map +1 -0
  420. package/dist/href-context.d.ts +29 -0
  421. package/dist/href-context.d.ts.map +1 -0
  422. package/dist/href-context.js +21 -0
  423. package/dist/href-context.js.map +1 -0
  424. package/dist/index.d.ts +73 -0
  425. package/dist/index.d.ts.map +1 -0
  426. package/dist/index.js +91 -0
  427. package/dist/index.js.map +1 -0
  428. package/dist/index.rsc.d.ts +32 -0
  429. package/dist/index.rsc.d.ts.map +1 -0
  430. package/dist/index.rsc.js +40 -0
  431. package/dist/index.rsc.js.map +1 -0
  432. package/dist/internal-debug.d.ts +2 -0
  433. package/dist/internal-debug.d.ts.map +1 -0
  434. package/dist/internal-debug.js +5 -0
  435. package/dist/internal-debug.js.map +1 -0
  436. package/dist/loader.d.ts +14 -0
  437. package/dist/loader.d.ts.map +1 -0
  438. package/dist/loader.js +20 -0
  439. package/dist/loader.js.map +1 -0
  440. package/dist/loader.rsc.d.ts +19 -0
  441. package/dist/loader.rsc.d.ts.map +1 -0
  442. package/dist/loader.rsc.js +99 -0
  443. package/dist/loader.rsc.js.map +1 -0
  444. package/dist/network-error-thrower.d.ts +17 -0
  445. package/dist/network-error-thrower.d.ts.map +1 -0
  446. package/dist/network-error-thrower.js +14 -0
  447. package/dist/network-error-thrower.js.map +1 -0
  448. package/dist/outlet-context.d.ts +13 -0
  449. package/dist/outlet-context.d.ts.map +1 -0
  450. package/dist/outlet-context.js +3 -0
  451. package/dist/outlet-context.js.map +1 -0
  452. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  453. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  455. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  456. package/dist/prerender/param-hash.d.ts +16 -0
  457. package/dist/prerender/param-hash.d.ts.map +1 -0
  458. package/dist/prerender/param-hash.js +36 -0
  459. package/dist/prerender/param-hash.js.map +1 -0
  460. package/dist/prerender/store.d.ts +38 -0
  461. package/dist/prerender/store.d.ts.map +1 -0
  462. package/dist/prerender/store.js +61 -0
  463. package/dist/prerender/store.js.map +1 -0
  464. package/dist/prerender.d.ts +66 -0
  465. package/dist/prerender.d.ts.map +1 -0
  466. package/dist/prerender.js +57 -0
  467. package/dist/prerender.js.map +1 -0
  468. package/dist/reverse.d.ts +196 -0
  469. package/dist/reverse.d.ts.map +1 -0
  470. package/dist/reverse.js +78 -0
  471. package/dist/reverse.js.map +1 -0
  472. package/dist/root-error-boundary.d.ts +33 -0
  473. package/dist/root-error-boundary.d.ts.map +1 -0
  474. package/dist/root-error-boundary.js +165 -0
  475. package/dist/root-error-boundary.js.map +1 -0
  476. package/dist/route-content-wrapper.d.ts +46 -0
  477. package/dist/route-content-wrapper.d.ts.map +1 -0
  478. package/dist/route-content-wrapper.js +77 -0
  479. package/dist/route-content-wrapper.js.map +1 -0
  480. package/dist/route-definition.d.ts +421 -0
  481. package/dist/route-definition.d.ts.map +1 -0
  482. package/dist/route-definition.js +868 -0
  483. package/dist/route-definition.js.map +1 -0
  484. package/dist/route-map-builder.d.ts +155 -0
  485. package/dist/route-map-builder.d.ts.map +1 -0
  486. package/dist/route-map-builder.js +237 -0
  487. package/dist/route-map-builder.js.map +1 -0
  488. package/dist/route-types.d.ts +165 -0
  489. package/dist/route-types.d.ts.map +1 -0
  490. package/dist/route-types.js +7 -0
  491. package/dist/route-types.js.map +1 -0
  492. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  493. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.js +65 -0
  495. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  496. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  497. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  500. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  501. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  502. package/dist/router/__tests__/match-context.test.js +92 -0
  503. package/dist/router/__tests__/match-context.test.js.map +1 -0
  504. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  505. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  507. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  508. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  509. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  510. package/dist/router/__tests__/match-result.test.js +457 -0
  511. package/dist/router/__tests__/match-result.test.js.map +1 -0
  512. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  513. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  514. package/dist/router/__tests__/on-error.test.js +678 -0
  515. package/dist/router/__tests__/on-error.test.js.map +1 -0
  516. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  517. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  519. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  520. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  521. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  524. package/dist/router/error-handling.d.ts +77 -0
  525. package/dist/router/error-handling.d.ts.map +1 -0
  526. package/dist/router/error-handling.js +202 -0
  527. package/dist/router/error-handling.js.map +1 -0
  528. package/dist/router/handler-context.d.ts +20 -0
  529. package/dist/router/handler-context.d.ts.map +1 -0
  530. package/dist/router/handler-context.js +198 -0
  531. package/dist/router/handler-context.js.map +1 -0
  532. package/dist/router/intercept-resolution.d.ts +66 -0
  533. package/dist/router/intercept-resolution.d.ts.map +1 -0
  534. package/dist/router/intercept-resolution.js +246 -0
  535. package/dist/router/intercept-resolution.js.map +1 -0
  536. package/dist/router/loader-resolution.d.ts +64 -0
  537. package/dist/router/loader-resolution.d.ts.map +1 -0
  538. package/dist/router/loader-resolution.js +284 -0
  539. package/dist/router/loader-resolution.js.map +1 -0
  540. package/dist/router/logging.d.ts +15 -0
  541. package/dist/router/logging.d.ts.map +1 -0
  542. package/dist/router/logging.js +99 -0
  543. package/dist/router/logging.js.map +1 -0
  544. package/dist/router/manifest.d.ts +22 -0
  545. package/dist/router/manifest.d.ts.map +1 -0
  546. package/dist/router/manifest.js +181 -0
  547. package/dist/router/manifest.js.map +1 -0
  548. package/dist/router/match-api.d.ts +35 -0
  549. package/dist/router/match-api.d.ts.map +1 -0
  550. package/dist/router/match-api.js +406 -0
  551. package/dist/router/match-api.js.map +1 -0
  552. package/dist/router/match-context.d.ts +206 -0
  553. package/dist/router/match-context.d.ts.map +1 -0
  554. package/dist/router/match-context.js +17 -0
  555. package/dist/router/match-context.js.map +1 -0
  556. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  557. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.js +75 -0
  559. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  560. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  561. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.js +257 -0
  563. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  564. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  565. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  566. package/dist/router/match-middleware/cache-store.js +108 -0
  567. package/dist/router/match-middleware/cache-store.js.map +1 -0
  568. package/dist/router/match-middleware/index.d.ts +81 -0
  569. package/dist/router/match-middleware/index.d.ts.map +1 -0
  570. package/dist/router/match-middleware/index.js +80 -0
  571. package/dist/router/match-middleware/index.js.map +1 -0
  572. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  573. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  575. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  576. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  577. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.js +53 -0
  579. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  580. package/dist/router/match-pipelines.d.ts +147 -0
  581. package/dist/router/match-pipelines.d.ts.map +1 -0
  582. package/dist/router/match-pipelines.js +82 -0
  583. package/dist/router/match-pipelines.js.map +1 -0
  584. package/dist/router/match-result.d.ts +126 -0
  585. package/dist/router/match-result.d.ts.map +1 -0
  586. package/dist/router/match-result.js +93 -0
  587. package/dist/router/match-result.js.map +1 -0
  588. package/dist/router/metrics.d.ts +20 -0
  589. package/dist/router/metrics.d.ts.map +1 -0
  590. package/dist/router/metrics.js +47 -0
  591. package/dist/router/metrics.js.map +1 -0
  592. package/dist/router/middleware.d.ts +249 -0
  593. package/dist/router/middleware.d.ts.map +1 -0
  594. package/dist/router/middleware.js +434 -0
  595. package/dist/router/middleware.js.map +1 -0
  596. package/dist/router/middleware.test.d.ts +2 -0
  597. package/dist/router/middleware.test.d.ts.map +1 -0
  598. package/dist/router/middleware.test.js +816 -0
  599. package/dist/router/middleware.test.js.map +1 -0
  600. package/dist/router/pattern-matching.d.ts +149 -0
  601. package/dist/router/pattern-matching.d.ts.map +1 -0
  602. package/dist/router/pattern-matching.js +349 -0
  603. package/dist/router/pattern-matching.js.map +1 -0
  604. package/dist/router/revalidation.d.ts +44 -0
  605. package/dist/router/revalidation.d.ts.map +1 -0
  606. package/dist/router/revalidation.js +147 -0
  607. package/dist/router/revalidation.js.map +1 -0
  608. package/dist/router/router-context.d.ts +135 -0
  609. package/dist/router/router-context.d.ts.map +1 -0
  610. package/dist/router/router-context.js +36 -0
  611. package/dist/router/router-context.js.map +1 -0
  612. package/dist/router/segment-resolution.d.ts +127 -0
  613. package/dist/router/segment-resolution.d.ts.map +1 -0
  614. package/dist/router/segment-resolution.js +919 -0
  615. package/dist/router/segment-resolution.js.map +1 -0
  616. package/dist/router/trie-matching.d.ts +40 -0
  617. package/dist/router/trie-matching.d.ts.map +1 -0
  618. package/dist/router/trie-matching.js +127 -0
  619. package/dist/router/trie-matching.js.map +1 -0
  620. package/dist/router/types.d.ts +136 -0
  621. package/dist/router/types.d.ts.map +1 -0
  622. package/dist/router/types.js +7 -0
  623. package/dist/router/types.js.map +1 -0
  624. package/dist/router.d.ts +753 -0
  625. package/dist/router.d.ts.map +1 -0
  626. package/dist/router.gen.d.ts +6 -0
  627. package/dist/router.gen.d.ts.map +1 -0
  628. package/dist/router.gen.js +6 -0
  629. package/dist/router.gen.js.map +1 -0
  630. package/dist/router.js +1304 -0
  631. package/dist/router.js.map +1 -0
  632. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  633. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.js +140 -0
  635. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  636. package/dist/rsc/handler.d.ts +45 -0
  637. package/dist/rsc/handler.d.ts.map +1 -0
  638. package/dist/rsc/handler.js +1172 -0
  639. package/dist/rsc/handler.js.map +1 -0
  640. package/dist/rsc/helpers.d.ts +16 -0
  641. package/dist/rsc/helpers.d.ts.map +1 -0
  642. package/dist/rsc/helpers.js +55 -0
  643. package/dist/rsc/helpers.js.map +1 -0
  644. package/dist/rsc/index.d.ts +22 -0
  645. package/dist/rsc/index.d.ts.map +1 -0
  646. package/dist/rsc/index.js +23 -0
  647. package/dist/rsc/index.js.map +1 -0
  648. package/dist/rsc/nonce.d.ts +9 -0
  649. package/dist/rsc/nonce.d.ts.map +1 -0
  650. package/dist/rsc/nonce.js +18 -0
  651. package/dist/rsc/nonce.js.map +1 -0
  652. package/dist/rsc/types.d.ts +206 -0
  653. package/dist/rsc/types.d.ts.map +1 -0
  654. package/dist/rsc/types.js +8 -0
  655. package/dist/rsc/types.js.map +1 -0
  656. package/dist/search-params.d.ts +103 -0
  657. package/dist/search-params.d.ts.map +1 -0
  658. package/dist/search-params.js +74 -0
  659. package/dist/search-params.js.map +1 -0
  660. package/dist/segment-system.d.ts +75 -0
  661. package/dist/segment-system.d.ts.map +1 -0
  662. package/dist/segment-system.js +336 -0
  663. package/dist/segment-system.js.map +1 -0
  664. package/dist/server/context.d.ts +245 -0
  665. package/dist/server/context.d.ts.map +1 -0
  666. package/dist/server/context.js +197 -0
  667. package/dist/server/context.js.map +1 -0
  668. package/dist/server/fetchable-loader-store.d.ts +18 -0
  669. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  670. package/dist/server/fetchable-loader-store.js +18 -0
  671. package/dist/server/fetchable-loader-store.js.map +1 -0
  672. package/dist/server/handle-store.d.ts +85 -0
  673. package/dist/server/handle-store.d.ts.map +1 -0
  674. package/dist/server/handle-store.js +142 -0
  675. package/dist/server/handle-store.js.map +1 -0
  676. package/dist/server/loader-registry.d.ts +55 -0
  677. package/dist/server/loader-registry.d.ts.map +1 -0
  678. package/dist/server/loader-registry.js +132 -0
  679. package/dist/server/loader-registry.js.map +1 -0
  680. package/dist/server/request-context.d.ts +226 -0
  681. package/dist/server/request-context.d.ts.map +1 -0
  682. package/dist/server/request-context.js +290 -0
  683. package/dist/server/request-context.js.map +1 -0
  684. package/dist/server/root-layout.d.ts +4 -0
  685. package/dist/server/root-layout.d.ts.map +1 -0
  686. package/dist/server/root-layout.js +5 -0
  687. package/dist/server/root-layout.js.map +1 -0
  688. package/dist/server.d.ts +15 -0
  689. package/dist/server.d.ts.map +1 -0
  690. package/dist/server.js +20 -0
  691. package/dist/server.js.map +1 -0
  692. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  693. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  696. package/dist/ssr/index.d.ts +98 -0
  697. package/dist/ssr/index.d.ts.map +1 -0
  698. package/dist/ssr/index.js +158 -0
  699. package/dist/ssr/index.js.map +1 -0
  700. package/dist/static-handler.d.ts +50 -0
  701. package/dist/static-handler.d.ts.map +1 -0
  702. package/dist/static-handler.gen.d.ts +5 -0
  703. package/dist/static-handler.gen.d.ts.map +1 -0
  704. package/dist/static-handler.gen.js +5 -0
  705. package/dist/static-handler.gen.js.map +1 -0
  706. package/dist/static-handler.js +29 -0
  707. package/dist/static-handler.js.map +1 -0
  708. package/dist/testing/vitest.js +82 -0
  709. package/dist/theme/ThemeProvider.d.ts +20 -0
  710. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  711. package/dist/theme/ThemeProvider.js +240 -0
  712. package/dist/theme/ThemeProvider.js.map +1 -0
  713. package/dist/theme/ThemeScript.d.ts +48 -0
  714. package/dist/theme/ThemeScript.d.ts.map +1 -0
  715. package/dist/theme/ThemeScript.js +13 -0
  716. package/dist/theme/ThemeScript.js.map +1 -0
  717. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  718. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  719. package/dist/theme/__tests__/theme.test.js +103 -0
  720. package/dist/theme/__tests__/theme.test.js.map +1 -0
  721. package/dist/theme/constants.d.ts +29 -0
  722. package/dist/theme/constants.d.ts.map +1 -0
  723. package/dist/theme/constants.js +48 -0
  724. package/dist/theme/constants.js.map +1 -0
  725. package/dist/theme/index.d.ts +31 -0
  726. package/dist/theme/index.d.ts.map +1 -0
  727. package/dist/theme/index.js +36 -0
  728. package/dist/theme/index.js.map +1 -0
  729. package/dist/theme/theme-context.d.ts +40 -0
  730. package/dist/theme/theme-context.d.ts.map +1 -0
  731. package/dist/theme/theme-context.js +60 -0
  732. package/dist/theme/theme-context.js.map +1 -0
  733. package/dist/theme/theme-script.d.ts +27 -0
  734. package/dist/theme/theme-script.d.ts.map +1 -0
  735. package/dist/theme/theme-script.js +147 -0
  736. package/dist/theme/theme-script.js.map +1 -0
  737. package/dist/theme/types.d.ts +163 -0
  738. package/dist/theme/types.d.ts.map +1 -0
  739. package/dist/theme/types.js +11 -0
  740. package/dist/theme/types.js.map +1 -0
  741. package/dist/theme/use-theme.d.ts +12 -0
  742. package/dist/theme/use-theme.d.ts.map +1 -0
  743. package/dist/theme/use-theme.js +40 -0
  744. package/dist/theme/use-theme.js.map +1 -0
  745. package/dist/types.d.ts +1479 -0
  746. package/dist/types.d.ts.map +1 -0
  747. package/dist/types.js +10 -0
  748. package/dist/types.js.map +1 -0
  749. package/dist/urls.d.ts +441 -0
  750. package/dist/urls.d.ts.map +1 -0
  751. package/dist/urls.gen.d.ts +8 -0
  752. package/dist/urls.gen.d.ts.map +1 -0
  753. package/dist/urls.gen.js +8 -0
  754. package/dist/urls.gen.js.map +1 -0
  755. package/dist/urls.js +443 -0
  756. package/dist/urls.js.map +1 -0
  757. package/dist/use-loader.d.ts +127 -0
  758. package/dist/use-loader.d.ts.map +1 -0
  759. package/dist/use-loader.js +237 -0
  760. package/dist/use-loader.js.map +1 -0
  761. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  765. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  769. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  773. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  777. package/dist/vite/ast-handler-extract.d.ts +49 -0
  778. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  779. package/dist/vite/ast-handler-extract.js +249 -0
  780. package/dist/vite/ast-handler-extract.js.map +1 -0
  781. package/dist/vite/expose-action-id.d.ts +19 -0
  782. package/dist/vite/expose-action-id.d.ts.map +1 -0
  783. package/dist/vite/expose-action-id.js +250 -0
  784. package/dist/vite/expose-action-id.js.map +1 -0
  785. package/dist/vite/expose-id-utils.d.ts +69 -0
  786. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  787. package/dist/vite/expose-id-utils.js +289 -0
  788. package/dist/vite/expose-id-utils.js.map +1 -0
  789. package/dist/vite/expose-internal-ids.d.ts +22 -0
  790. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  791. package/dist/vite/expose-internal-ids.js +886 -0
  792. package/dist/vite/expose-internal-ids.js.map +1 -0
  793. package/dist/vite/index.d.ts +149 -0
  794. package/dist/vite/index.d.ts.map +1 -0
  795. package/dist/vite/index.js +8 -10
  796. package/dist/vite/index.js.bak +5448 -0
  797. package/dist/vite/index.js.map +1 -0
  798. package/dist/vite/index.named-routes.gen.ts +103 -0
  799. package/dist/vite/package-resolution.d.ts +43 -0
  800. package/dist/vite/package-resolution.d.ts.map +1 -0
  801. package/dist/vite/package-resolution.js +112 -0
  802. package/dist/vite/package-resolution.js.map +1 -0
  803. package/dist/vite/virtual-entries.d.ts +25 -0
  804. package/dist/vite/virtual-entries.d.ts.map +1 -0
  805. package/dist/vite/virtual-entries.js +110 -0
  806. package/dist/vite/virtual-entries.js.map +1 -0
  807. package/package.json +18 -17
  808. package/skills/css/SKILL.md +76 -0
  809. package/skills/host-router/SKILL.md +21 -0
  810. package/skills/loader/SKILL.md +17 -17
  811. package/skills/rango/SKILL.md +1 -0
  812. package/skills/tailwind/SKILL.md +27 -3
  813. package/src/browser/app-shell.ts +14 -27
  814. package/src/browser/navigation-bridge.ts +2 -51
  815. package/src/browser/navigation-client.ts +70 -68
  816. package/src/browser/navigation-store.ts +1 -25
  817. package/src/browser/partial-update.ts +19 -32
  818. package/src/browser/prefetch/cache.ts +97 -48
  819. package/src/browser/prefetch/fetch.ts +101 -33
  820. package/src/browser/rango-state.ts +6 -22
  821. package/src/browser/react/NavigationProvider.tsx +12 -9
  822. package/src/browser/react/use-router.ts +4 -3
  823. package/src/browser/response-adapter.ts +27 -1
  824. package/src/browser/rsc-router.tsx +20 -13
  825. package/src/browser/server-action-bridge.ts +21 -0
  826. package/src/browser/types.ts +4 -15
  827. package/src/cache/cache-runtime.ts +17 -5
  828. package/src/cache/cache-scope.ts +23 -7
  829. package/src/cache/cf/cf-cache-store.ts +4 -4
  830. package/src/cache/handle-snapshot.ts +103 -0
  831. package/src/cache/memory-segment-store.ts +3 -2
  832. package/src/cache/types.ts +10 -6
  833. package/src/prerender/store.ts +9 -7
  834. package/src/router/lazy-includes.ts +1 -1
  835. package/src/router/loader-resolution.ts +63 -34
  836. package/src/router/manifest.ts +1 -1
  837. package/src/router/match-middleware/cache-lookup.ts +13 -4
  838. package/src/router/prerender-match.ts +39 -14
  839. package/src/router/request-classification.ts +36 -9
  840. package/src/router/router-interfaces.ts +6 -7
  841. package/src/router/segment-resolution/static-store.ts +19 -5
  842. package/src/rsc/handler.ts +30 -8
  843. package/src/rsc/origin-guard.ts +2 -0
  844. package/src/rsc/response-route-handler.ts +20 -1
  845. package/src/rsc/rsc-rendering.ts +10 -0
  846. package/src/rsc/server-action.ts +16 -2
  847. package/src/server/context.ts +32 -0
  848. package/src/server/request-context.ts +47 -9
  849. package/src/types/loader-types.ts +6 -3
  850. package/src/urls/path-helper-types.ts +6 -0
  851. package/src/vite/discovery/prerender-collection.ts +5 -5
  852. package/src/vite/router-discovery.ts +3 -4
@@ -27,6 +27,8 @@ import { _getRequestContext } from "../server/request-context.js";
27
27
  import {
28
28
  isInsideLoaderScope,
29
29
  runInsideLoaderBodyScope,
30
+ isInsidePushCallbackScope,
31
+ runInsidePushCallbackScope,
30
32
  } from "../server/context.js";
31
33
  import { debugLog } from "./logging.js";
32
34
 
@@ -290,6 +292,12 @@ function createLoaderExecutor<TEnv>(
290
292
  );
291
293
  }
292
294
  const segmentOrder = reqCtx._renderBarrierSegmentOrder ?? [];
295
+ // The complete snapshot is cached at barrier resolution for
296
+ // non-streaming trees, and by rendered() after handleStore.settled for
297
+ // streaming trees (where the eager snapshot would have been incomplete
298
+ // because loading() handlers were still in flight). Either way it is
299
+ // present by the time a loader reads a handle; the fresh build is only
300
+ // a defensive fallback.
293
301
  const snapshot =
294
302
  reqCtx._renderBarrierHandleSnapshot ??
295
303
  buildHandleSnapshot(reqCtx._handleStore, segmentOrder);
@@ -311,15 +319,7 @@ function createLoaderExecutor<TEnv>(
311
319
  );
312
320
  }
313
321
 
314
- // Guard: reject streaming trees
315
322
  const reqCtx = reqCtxRef ?? _getRequestContext();
316
- if (reqCtx?._treeHasStreaming) {
317
- throw new Error(
318
- `ctx.rendered() is not supported when the matched route tree uses loading(). ` +
319
- `Streaming handlers may not have settled when rendered() resolves. ` +
320
- `Remove loading() from the route tree or restructure to avoid rendered().`,
321
- );
322
- }
323
323
 
324
324
  if (renderedPromise) return renderedPromise;
325
325
 
@@ -330,7 +330,10 @@ function createLoaderExecutor<TEnv>(
330
330
  }
331
331
 
332
332
  // Bidirectional deadlock check: if a handler already started
333
- // awaiting this loader, calling rendered() would deadlock.
333
+ // awaiting this loader, calling rendered() would deadlock. This is the
334
+ // real cycle guard (it holds for both streaming and non-streaming): the
335
+ // handler blocks segment resolution, which blocks the barrier, which
336
+ // blocks this loader.
334
337
  if (reqCtx._handlerLoaderDeps?.has(currentLoaderId)) {
335
338
  throw new Error(
336
339
  `Deadlock: loader "${currentLoaderId}" called ctx.rendered() but a handler ` +
@@ -348,7 +351,29 @@ function createLoaderExecutor<TEnv>(
348
351
  }
349
352
  reqCtx._renderBarrierWaiters.add(currentLoaderId);
350
353
 
351
- renderedPromise = reqCtx._renderBarrier.then(() => {
354
+ // Streaming trees (loading()): the barrier resolves once the segment
355
+ // tree is resolved, but loading() handlers stream behind Suspense and
356
+ // their handle pushes are still in flight then. Their async execution
357
+ // IS tracked in the handle store (trackHandler -> store.track), so after
358
+ // the barrier we seal (no further handlers register once the tree is
359
+ // resolved) and wait for settled — every tracked handler, streaming
360
+ // included, has finished pushing. The loader's own segment streams in
361
+ // after, so this does not block the shell; the deadlock guard above
362
+ // keeps a handler from depending on this loader.
363
+ const streaming = reqCtx._treeHasStreaming === true;
364
+ renderedPromise = reqCtx._renderBarrier.then(async () => {
365
+ if (streaming) {
366
+ reqCtx._handleStore.seal();
367
+ await reqCtx._handleStore.settled;
368
+ // The eager snapshot was intentionally left unbuilt for streaming
369
+ // (it would have been incomplete). Build the complete one once, now
370
+ // that the store has settled, so every ctx.use(handle) reads the
371
+ // cached snapshot instead of rebuilding it per call.
372
+ reqCtx._renderBarrierHandleSnapshot ??= buildHandleSnapshot(
373
+ reqCtx._handleStore,
374
+ reqCtx._renderBarrierSegmentOrder ?? [],
375
+ );
376
+ }
352
377
  renderedResolved = true;
353
378
  });
354
379
  return renderedPromise;
@@ -404,12 +429,6 @@ export function setupLoaderAccess<TEnv>(
404
429
 
405
430
  const useLoader = createLoaderExecutor(ctx, loaderPromises);
406
431
 
407
- // Track whether we're inside a handle push callback. Loaders started
408
- // from push callbacks (e.g. push(async () => ctx.use(Loader))) do NOT
409
- // block segment resolution, so they must not be registered as handler
410
- // dependencies for deadlock detection.
411
- let insideHandlePush = false;
412
-
413
432
  ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
414
433
  if (isHandle(item)) {
415
434
  const handle = item;
@@ -430,15 +449,17 @@ export function setupLoaderAccess<TEnv>(
430
449
  if (!store) return;
431
450
 
432
451
  if (typeof dataOrFn === "function") {
433
- // Mark scope so ctx.use(loader) calls inside the callback
434
- // are not registered as handler-to-loader deps.
435
- insideHandlePush = true;
436
- try {
437
- const result = (dataOrFn as () => Promise<unknown>)();
438
- store.push(handle.$$id, segmentId, result);
439
- } finally {
440
- insideHandlePush = false;
441
- }
452
+ // Run the callback inside the push-callback scope so ctx.use(loader)
453
+ // calls it makes including after its own awaits, for an async
454
+ // callback — are not registered as handler-to-loader deps and do not
455
+ // trip the deadlock guard. A pushed promise value is not tracked by
456
+ // handleStore.settled and does not block segment resolution, so it
457
+ // cannot form a rendered() deadlock. The ALS scope (not a plain
458
+ // boolean) is what survives the callback's awaits.
459
+ const result = runInsidePushCallbackScope(() =>
460
+ (dataOrFn as () => Promise<unknown>)(),
461
+ );
462
+ store.push(handle.$$id, segmentId, result);
442
463
  return;
443
464
  }
444
465
 
@@ -450,9 +471,12 @@ export function setupLoaderAccess<TEnv>(
450
471
  // Skip when inside a DSL loader scope (resolveLoaderData also calls
451
472
  // ctx.use() but that's DSL-to-DSL, not handler-to-loader) or when
452
473
  // inside a handle push callback (push callbacks don't block segment
453
- // resolution so they can't cause rendered() deadlocks).
474
+ // resolution so they can't cause rendered() deadlocks). The push-callback
475
+ // check is an ALS scope so it also exempts an ASYNC callback's continuation
476
+ // after its first await — relevant on streaming trees, where the guard
477
+ // state now stays live until handleStore.settled.
454
478
  const loader = item as LoaderDefinition<any, any>;
455
- if (!isInsideLoaderScope() && !insideHandlePush) {
479
+ if (!isInsideLoaderScope() && !isInsidePushCallbackScope()) {
456
480
  const reqCtx = reqCtxRef ?? _getRequestContext();
457
481
  if (reqCtx) {
458
482
  // Direction 1: handler awaits loader that already called rendered()
@@ -466,13 +490,18 @@ export function setupLoaderAccess<TEnv>(
466
490
  `Move the data dependency to a loader-to-loader pattern instead.`,
467
491
  );
468
492
  }
469
- // Direction 2: track dep so rendered() can detect the deadlock
470
- // if the loader calls it later. Skip when the barrier has already
471
- // resolved no deadlock is possible (rendered() resolves immediately).
472
- // _renderBarrierSegmentOrder is undefined before resolution, string[]
473
- // after. This also prevents false positives from handle push callbacks
474
- // that resume after their first await (post-barrier-resolution).
475
- if (reqCtx._renderBarrierSegmentOrder === undefined) {
493
+ // Direction 2: track dep so rendered() can detect the deadlock if the
494
+ // loader calls it later. Skip once the guard window is CLOSED — for a
495
+ // non-streaming tree that is when the barrier resolves (rendered()
496
+ // resolves immediately), and for a streaming tree it is when
497
+ // handleStore.settled completes (rendered() keeps waiting until then, so
498
+ // a loading() handler resuming after the barrier can still form a
499
+ // cycle). Using the explicit guard-closed flag rather than
500
+ // _renderBarrierSegmentOrder keeps tracking live across the streaming
501
+ // settle wait. (Handle push callbacks are already excluded above via
502
+ // isInsidePushCallbackScope(), so they cannot produce false positives
503
+ // here.)
504
+ if (!reqCtx._renderBarrierGuardClosed) {
476
505
  if (!reqCtx._handlerLoaderDeps) reqCtx._handlerLoaderDeps = new Set();
477
506
  reqCtx._handlerLoaderDeps.add(loader.$$id);
478
507
  }
@@ -32,7 +32,7 @@ import { VERSION } from "@rangojs/router:version";
32
32
  // own pruned manifest, so alternating sibling requests would thrash (re-run the
33
33
  // handler every time). Running the include handler once per isolate instead of once
34
34
  // per route is possible but needs an unpruned manifest cache with prune-on-read — see
35
- // LP1 in docs/internal/matching-stability-review.md. VERSION comes from the
35
+ // LP1 in docs/internal/matching-and-lazy-discovery.md. VERSION comes from the
36
36
  // @rangojs/router:version virtual module which Vite invalidates on RSC module HMR.
37
37
  // When VERSION changes, this module re-evaluates and the cache is recreated empty.
38
38
  const manifestModuleCache = new Map<string, Map<string, EntryData>>();
@@ -114,6 +114,9 @@ let _deserializeSegments:
114
114
  let _restoreHandles:
115
115
  | typeof import("../../cache/handle-snapshot.js").restoreHandles
116
116
  | undefined;
117
+ let _decodeHandles:
118
+ | typeof import("../../cache/handle-snapshot.js").decodeHandles
119
+ | undefined;
117
120
  let _hashParams:
118
121
  | typeof import("../../prerender/param-hash.js").hashParams
119
122
  | undefined;
@@ -148,6 +151,7 @@ async function ensurePrerenderDeps() {
148
151
  ]);
149
152
  _deserializeSegments = codec.deserializeSegments;
150
153
  _restoreHandles = snapshot.restoreHandles;
154
+ _decodeHandles = snapshot.decodeHandles;
151
155
  _hashParams = paramHash.hashParams;
152
156
  _lazyGetRequestContext = reqCtx.getRequestContext;
153
157
  if (prerenderStoreInstance === undefined) {
@@ -174,6 +178,7 @@ async function* yieldFromStore<TEnv>(
174
178
  if (
175
179
  !_deserializeSegments ||
176
180
  !_restoreHandles ||
181
+ !_decodeHandles ||
177
182
  !_hashParams ||
178
183
  !_lazyGetRequestContext
179
184
  ) {
@@ -182,11 +187,15 @@ async function* yieldFromStore<TEnv>(
182
187
 
183
188
  const segments = await _deserializeSegments(entry.segments);
184
189
 
185
- // Replay handle data (same as runtime cache hit path).
186
- // Prefer the eagerly-captured handleStoreRef to avoid ALS disruption in workerd.
190
+ // Replay handle data (same as runtime cache hit path). entry.handles is a
191
+ // Flight-encoded string ("" when none) decode before restore so
192
+ // Promise/ReactNode handle values are revived, not the corrupted JSON form.
187
193
  const handleStore = handleStoreRef ?? _lazyGetRequestContext()?._handleStore;
188
- if (handleStore) {
189
- _restoreHandles(entry.handles, handleStore);
194
+ if (handleStore && entry.handles) {
195
+ const handlesRecord = await _decodeHandles(entry.handles);
196
+ if (handlesRecord) {
197
+ _restoreHandles(handlesRecord, handleStore);
198
+ }
190
199
  }
191
200
 
192
201
  state.cacheHit = true;
@@ -59,11 +59,16 @@ export async function matchForPrerender<TEnv = any>(
59
59
  devMode?: boolean,
60
60
  ): Promise<{
61
61
  segments: SerializedSegmentData[];
62
- handles: Record<string, SegmentHandleData>;
62
+ /** RSC-encoded handle map ("" when none) — see handle-snapshot.ts. Encoded in
63
+ * the producer (where the Flight codec resolves) so the node-side build/dev
64
+ * sinks can persist it without touching the codec. */
65
+ handles: string;
63
66
  routeName: string;
64
67
  params: Record<string, string>;
65
68
  interceptSegments?: SerializedSegmentData[];
66
- interceptHandles?: Record<string, SegmentHandleData>;
69
+ /** RSC-encoded MERGED (main + intercept) handle map for the intercept artifact;
70
+ * the sinks store it as-is (no longer merge raw records). */
71
+ interceptHandles?: string;
67
72
  passthrough?: true;
68
73
  } | null> {
69
74
  // 1. Find the matching route entry
@@ -142,7 +147,7 @@ export async function matchForPrerender<TEnv = any>(
142
147
  if (!isKnown) {
143
148
  return {
144
149
  segments: [],
145
- handles: {},
150
+ handles: "",
146
151
  routeName: matched.routeKey,
147
152
  params: matchedParams,
148
153
  passthrough: true as const,
@@ -162,7 +167,7 @@ export async function matchForPrerender<TEnv = any>(
162
167
  if (err?.name === "Skip") {
163
168
  return {
164
169
  segments: [],
165
- handles: {},
170
+ handles: "",
166
171
  routeName: matched.routeKey,
167
172
  params: matchedParams,
168
173
  passthrough: true as const,
@@ -261,7 +266,7 @@ export async function matchForPrerender<TEnv = any>(
261
266
  if (isPrerenderPassthrough(seg.component)) {
262
267
  return {
263
268
  segments: [],
264
- handles: {},
269
+ handles: "",
265
270
  routeName: matched.routeKey,
266
271
  params: matchedParams,
267
272
  passthrough: true as const,
@@ -278,16 +283,22 @@ export async function matchForPrerender<TEnv = any>(
278
283
 
279
284
  // 12. Serialize segments using the cache serializer
280
285
  const { serializeSegments } = await import("../cache/segment-codec.js");
286
+ const { encodeHandles } = await import("../cache/handle-snapshot.js");
281
287
  const serializedSegments = await serializeSegments(nonLoaderSegments);
282
288
 
283
- // 13. Collect handle data per segment (skip segments with no handle data)
284
- const handles: Record<string, SegmentHandleData> = {};
289
+ // 13. Collect handle data per segment (skip segments with no handle data).
290
+ // Encoded through the Flight codec (not stored raw) so Promise/ReactNode
291
+ // handle values survive the JSON-serialized build artifact / dev wire —
292
+ // the same fix the runtime cache uses. Encode happens here, in the RSC
293
+ // environment where the codec resolves; the node-side sinks only persist.
294
+ const handlesRecord: Record<string, SegmentHandleData> = {};
285
295
  for (const seg of nonLoaderSegments) {
286
296
  const segHandles = handleStore.getDataForSegment(seg.id);
287
297
  if (Object.keys(segHandles).length > 0) {
288
- handles[seg.id] = segHandles;
298
+ handlesRecord[seg.id] = segHandles;
289
299
  }
290
300
  }
301
+ const handles = await encodeHandles(handlesRecord);
291
302
 
292
303
  // Use the trie-level route key (e.g., "docs", "docs.article")
293
304
  const routeName = matched.routeKey;
@@ -297,7 +308,7 @@ export async function matchForPrerender<TEnv = any>(
297
308
  // evaluation -- we pre-render all intercepts unconditionally and let
298
309
  // runtime matching decide which to serve.
299
310
  let interceptSegments: SerializedSegmentData[] | undefined;
300
- let interceptHandles: Record<string, SegmentHandleData> | undefined;
311
+ let interceptHandles: string | undefined;
301
312
 
302
313
  const foundIntercepts: {
303
314
  intercept: InterceptEntry;
@@ -379,13 +390,20 @@ export async function matchForPrerender<TEnv = any>(
379
390
  interceptSegments = await serializeSegments(
380
391
  interceptResolvedSegments,
381
392
  );
382
- interceptHandles = {};
393
+ const interceptHandlesRecord: Record<string, SegmentHandleData> = {};
383
394
  for (const seg of interceptResolvedSegments) {
384
395
  const segHandles = handleStore.getDataForSegment(seg.id);
385
396
  if (Object.keys(segHandles).length > 0) {
386
- interceptHandles[seg.id] = segHandles;
397
+ interceptHandlesRecord[seg.id] = segHandles;
387
398
  }
388
399
  }
400
+ // The intercept artifact serves main + intercept segments together, so
401
+ // encode the MERGED handle map here (the sinks no longer merge raw
402
+ // records — they store this pre-encoded string as-is).
403
+ interceptHandles = await encodeHandles({
404
+ ...handlesRecord,
405
+ ...interceptHandlesRecord,
406
+ });
389
407
  }
390
408
  }
391
409
 
@@ -414,7 +432,7 @@ export async function renderStaticSegment<TEnv = any>(
414
432
  routeName?: string,
415
433
  buildEnv?: TEnv,
416
434
  devMode?: boolean,
417
- ): Promise<{ encoded: string; handles: Record<string, unknown[]> } | null> {
435
+ ): Promise<{ encoded: string; handles: string } | null> {
418
436
  const syntheticUrl = new URL("http://prerender/");
419
437
  const syntheticRequest = new Request(syntheticUrl);
420
438
 
@@ -492,10 +510,17 @@ export async function renderStaticSegment<TEnv = any>(
492
510
  };
493
511
 
494
512
  const { serializeSegments } = await import("../cache/segment-codec.js");
513
+ const { encodeHandleValue } = await import("../cache/handle-snapshot.js");
495
514
  const [serialized] = await serializeSegments([segment]);
496
515
 
497
- // Collect handle data pushed during rendering
498
- const handles = handleStore.getDataForSegment(handlerId);
516
+ // Collect handle data pushed during rendering and Flight-encode it (so
517
+ // Promise/ReactNode handle values survive the JSON build artifact). "" when
518
+ // nothing was pushed.
519
+ const segHandles = handleStore.getDataForSegment(handlerId);
520
+ const handles =
521
+ Object.keys(segHandles).length > 0
522
+ ? await encodeHandleValue(segHandles)
523
+ : "";
499
524
 
500
525
  return { encoded: serialized.encoded, handles };
501
526
  });
@@ -40,6 +40,12 @@ interface VersionMismatchPlan<TEnv = any> {
40
40
  reloadUrl: string;
41
41
  }
42
42
 
43
+ interface AppSwitchReloadPlan {
44
+ mode: "app-switch";
45
+ /** Clean target URL (internal _rsc_* params stripped) to navigate to. */
46
+ reloadUrl: string;
47
+ }
48
+
43
49
  interface ResponseRoutePlan<TEnv = any> {
44
50
  mode: "response";
45
51
  route: RouteSnapshot<TEnv>;
@@ -86,6 +92,7 @@ interface PartialRenderPlan<TEnv = any> {
86
92
  export type RequestPlan<TEnv = any> =
87
93
  | RedirectPlan<TEnv>
88
94
  | VersionMismatchPlan<TEnv>
95
+ | AppSwitchReloadPlan
89
96
  | ResponseRoutePlan<TEnv>
90
97
  | LoaderFetchPlan<TEnv>
91
98
  | PeRenderPlan<TEnv>
@@ -94,12 +101,13 @@ export type RequestPlan<TEnv = any> =
94
101
  | PartialRenderPlan<TEnv>;
95
102
 
96
103
  /**
97
- * Plans that have passed the terminal-check gate (version-mismatch handled)
98
- * and are ready for execution. Always have a `route` field.
104
+ * Plans that have passed the terminal-check gate (version-mismatch and
105
+ * app-switch reloads handled) and are ready for execution. Always have a
106
+ * `route` field.
99
107
  */
100
108
  export type ExecutableRequestPlan<TEnv = any> = Exclude<
101
109
  RequestPlan<TEnv>,
102
- VersionMismatchPlan<TEnv>
110
+ VersionMismatchPlan<TEnv> | AppSwitchReloadPlan
103
111
  >;
104
112
 
105
113
  /**
@@ -179,6 +187,30 @@ export async function classifyRequest<TEnv = any>(
179
187
  };
180
188
  }
181
189
 
190
+ // App switch — also runs BEFORE route resolution (like version-mismatch
191
+ // above), and for the same reason: a cross-app SPA navigation must reload
192
+ // even when the target route does NOT exist in the target app. If we resolved
193
+ // first, a missing route would throw RouteNotFoundError and the 404 would
194
+ // render in-place under the SOURCE app's document — violating the invariant
195
+ // that crossing a host-router app boundary is always a full document load.
196
+ // A mismatched routerId (_rsc_rid) means the navigation crossed an app
197
+ // boundary; force a real document navigation. A soft swap can't faithfully
198
+ // re-establish the target app's document (stylesheets shared across apps are
199
+ // dropped by React 19's by-href dedup; theme/warmup/prefetch-TTL are
200
+ // document-lifetime — see browser/app-shell.ts). Only SPA (`_rsc_partial`)
201
+ // requests need this; a direct full load already IS the document navigation.
202
+ const clientRouterId = url.searchParams.get("_rsc_rid");
203
+ if (
204
+ clientRouterId &&
205
+ clientRouterId !== deps.routerId &&
206
+ url.searchParams.has("_rsc_partial")
207
+ ) {
208
+ return {
209
+ mode: "app-switch",
210
+ reloadUrl: stripInternalParams(url).toString(),
211
+ };
212
+ }
213
+
182
214
  // No metricsStore — classification is a lightweight gating step.
183
215
  // Route-matching and manifest-loading metrics belong in the match path
184
216
  // (createMatchContextForFull/Partial) which runs the authoritative resolution.
@@ -252,12 +284,7 @@ export async function classifyRequest<TEnv = any>(
252
284
  return { mode: "pe-render", route: snapshot };
253
285
  }
254
286
 
255
- // App switch: client's routerId doesn't match this router
256
- const clientRouterId = url.searchParams.get("_rsc_rid");
257
- const isAppSwitch = !!(clientRouterId && clientRouterId !== deps.routerId);
258
- const isPartial = url.searchParams.has("_rsc_partial") && !isAppSwitch;
259
-
260
- if (isPartial) {
287
+ if (url.searchParams.has("_rsc_partial")) {
261
288
  return { mode: "partial-render", route: snapshot, negotiated };
262
289
  }
263
290
 
@@ -7,10 +7,7 @@ import type { EntryData } from "../server/context";
7
7
  import type { ErrorInfo, MatchResult } from "../types";
8
8
  import type { NonceProvider } from "../rsc/types.js";
9
9
  import type { ExecutionContext } from "../server/request-context.js";
10
- import type {
11
- SerializedSegmentData,
12
- SegmentHandleData,
13
- } from "../cache/types.js";
10
+ import type { SerializedSegmentData } from "../cache/types.js";
14
11
  import type { MiddlewareEntry, MiddlewareFn } from "./middleware.js";
15
12
  import { RSC_ROUTER_BRAND } from "./router-registry.js";
16
13
  import type { RangoOptions, RootLayoutProps } from "./router-options.js";
@@ -395,11 +392,13 @@ export interface RangoInternal<
395
392
  devMode?: boolean,
396
393
  ): Promise<{
397
394
  segments: SerializedSegmentData[];
398
- handles: Record<string, SegmentHandleData>;
395
+ /** RSC-encoded handle map ("" when none) — see handle-snapshot.ts. */
396
+ handles: string;
399
397
  routeName: string;
400
398
  params: Record<string, string>;
401
399
  interceptSegments?: SerializedSegmentData[];
402
- interceptHandles?: Record<string, SegmentHandleData>;
400
+ /** RSC-encoded MERGED (main + intercept) handle map for the intercept artifact. */
401
+ interceptHandles?: string;
403
402
  passthrough?: true;
404
403
  } | null>;
405
404
 
@@ -413,7 +412,7 @@ export interface RangoInternal<
413
412
  routeName?: string,
414
413
  buildEnv?: any,
415
414
  devMode?: boolean,
416
- ): Promise<{ encoded: string; handles: Record<string, unknown[]> } | null>;
415
+ ): Promise<{ encoded: string; handles: string } | null>;
417
416
 
418
417
  /**
419
418
  * Preview match - returns route middleware without segment resolution.
@@ -8,6 +8,7 @@
8
8
  import type { ReactNode } from "react";
9
9
  import { _getRequestContext } from "../../server/request-context.js";
10
10
  import type { StaticStore } from "../../prerender/store.js";
11
+ import type { SegmentHandleData } from "../../cache/types.js";
11
12
 
12
13
  // Lazy-initialized static store for production Static handler interception.
13
14
  // Remains undefined until first check; null means checked but no manifest.
@@ -19,6 +20,9 @@ let _staticStore: StaticStore | null | undefined =
19
20
  ? undefined
20
21
  : null;
21
22
  let _deserializeComponent: ((encoded: string) => Promise<unknown>) | undefined;
23
+ let _decodeHandleValue:
24
+ | typeof import("../../cache/handle-snapshot.js").decodeHandleValue
25
+ | undefined;
22
26
 
23
27
  async function ensureStaticDeps(): Promise<void> {
24
28
  if (_staticStore === undefined) {
@@ -29,6 +33,9 @@ async function ensureStaticDeps(): Promise<void> {
29
33
  const { deserializeComponent } =
30
34
  await import("../../cache/segment-codec.js");
31
35
  _deserializeComponent = deserializeComponent;
36
+ const { decodeHandleValue } =
37
+ await import("../../cache/handle-snapshot.js");
38
+ _decodeHandleValue = decodeHandleValue;
32
39
  }
33
40
  }
34
41
 
@@ -53,13 +60,20 @@ export async function tryStaticLookup(
53
60
  const entry = await _staticStore.get(handlerId);
54
61
  if (!entry) return undefined;
55
62
 
56
- // Replay handle data captured during build-time rendering.
57
- // The data was keyed by handlerId at build time; replay under segmentId
58
- // so it matches the segment order used by useHandle on the client.
59
- if (entry.handles && Object.keys(entry.handles).length > 0) {
63
+ // Replay handle data captured during build-time rendering. entry.handles is a
64
+ // Flight-encoded string ("" when none) decode before replay so
65
+ // Promise/ReactNode handle values are revived. The data was keyed by handlerId
66
+ // at build time; replay under segmentId so it matches the segment order used
67
+ // by useHandle on the client.
68
+ if (entry.handles && _decodeHandleValue) {
60
69
  const handleStore = _getRequestContext()?._handleStore;
61
70
  if (handleStore) {
62
- handleStore.replaySegmentData(segmentId, entry.handles);
71
+ const segHandles = await _decodeHandleValue<SegmentHandleData>(
72
+ entry.handles,
73
+ );
74
+ if (segHandles) {
75
+ handleStore.replaySegmentData(segmentId, segHandles);
76
+ }
63
77
  }
64
78
  }
65
79
 
@@ -128,6 +128,22 @@ import {
128
128
  * });
129
129
  * ```
130
130
  */
131
+
132
+ /**
133
+ * Response that tells the client to do a full document navigation. Shared by
134
+ * the terminal reload plans (version-mismatch and app-switch): an empty 200
135
+ * carrying X-RSC-Reload, which the client turns into window.location.href.
136
+ */
137
+ function createReloadResponse(reloadUrl: string) {
138
+ return createResponseWithMergedHeaders(null, {
139
+ status: 200,
140
+ headers: {
141
+ "X-RSC-Reload": reloadUrl,
142
+ "content-type": "text/x-component;charset=utf-8",
143
+ },
144
+ });
145
+ }
146
+
131
147
  export function createRSCHandler<
132
148
  TEnv = unknown,
133
149
  TRoutes extends Record<string, string> = Record<string, string>,
@@ -642,13 +658,14 @@ export function createRSCHandler<
642
658
  console.log(
643
659
  `[RSC] Version mismatch: client=${url.searchParams.get("_rsc_v")}, server=${version}. Forcing reload.`,
644
660
  );
645
- return createResponseWithMergedHeaders(null, {
646
- status: 200,
647
- headers: {
648
- "X-RSC-Reload": plan.reloadUrl,
649
- "content-type": "text/x-component;charset=utf-8",
650
- },
651
- });
661
+ return createReloadResponse(plan.reloadUrl);
662
+ }
663
+
664
+ if (plan.mode === "app-switch") {
665
+ // Cross-app SPA navigation crossed a host-router app boundary. Force a
666
+ // real document navigation so the target app's document is re-established
667
+ // (stylesheets, theme, warmup, prefetch-TTL). See request-classification.
668
+ return createReloadResponse(plan.reloadUrl);
652
669
  }
653
670
 
654
671
  // ---- 3. Origin guard (gate for action/loader/PE modes) ----
@@ -1068,7 +1085,12 @@ export function createRSCHandler<
1068
1085
  if (isRscRequest(request, url, isPartial)) {
1069
1086
  return createResponseWithMergedHeaders(rscStream, {
1070
1087
  status: 404,
1071
- headers: { "content-type": "text/x-component;charset=utf-8" },
1088
+ headers: {
1089
+ "content-type": "text/x-component;charset=utf-8",
1090
+ // Router identity for the client's pre-decode integrity check; a
1091
+ // same-app 404 matches and applies in place. See response-adapter.
1092
+ "X-RSC-Router-Id": router.id,
1093
+ },
1072
1094
  });
1073
1095
  }
1074
1096
 
@@ -30,6 +30,8 @@ export const ORIGIN_CHECK_PHASE_BY_MODE: Record<
30
30
  response: null,
31
31
  redirect: null,
32
32
  "version-mismatch": null,
33
+ // Terminal: handled before the origin guard (emits X-RSC-Reload, no execution).
34
+ "app-switch": null,
33
35
  };
34
36
 
35
37
  /**
@@ -131,7 +131,26 @@ export async function handleResponseRoute<TEnv>(
131
131
 
132
132
  // Handled before the MIME lookup (json is also a RESPONSE_TYPE_MIME key).
133
133
  if (preview.responseType === "json") {
134
- return createResponseWithMergedHeaders(JSON.stringify(result), {
134
+ // Runtime guard: the json() return type rejects nested Promises at
135
+ // compile time, but an `as`-cast or untyped (JS) handler can still slip
136
+ // one through. JSON.stringify would silently emit {} for it (the
137
+ // forgotten-await footgun — the RSC pipeline awaits nested promises, this
138
+ // path does not). Throw a clear error instead of shipping empty data.
139
+ const body = JSON.stringify(result, (_key, value) => {
140
+ if (
141
+ value != null &&
142
+ typeof (value as { then?: unknown }).then === "function"
143
+ ) {
144
+ throw new RouterError(
145
+ "RESPONSE_NOT_SERIALIZABLE",
146
+ "A json() response route returned a Promise (likely a forgotten " +
147
+ "await). Await async values before returning so they serialize, " +
148
+ "instead of emitting an empty {}.",
149
+ );
150
+ }
151
+ return value;
152
+ });
153
+ return createResponseWithMergedHeaders(body, {
135
154
  status: 200,
136
155
  headers: { "content-type": "application/json;charset=utf-8" },
137
156
  });
@@ -83,6 +83,11 @@ export async function handleRscRendering<TEnv>(
83
83
  payload = {
84
84
  metadata: {
85
85
  pathname: url.pathname,
86
+ // routerId is serialized on every payload (including within-session
87
+ // ones) so the frontend can read the current app/router identity. It
88
+ // always equals the current app's id: a cross-app navigation is
89
+ // intercepted server-side (X-RSC-Reload) and never delivers a
90
+ // different-router payload to the client.
86
91
  routerId: ctx.router.id,
87
92
  segments: result.segments,
88
93
  matched: result.matched,
@@ -180,6 +185,11 @@ export async function handleRscRendering<TEnv>(
180
185
  const rscHeaders: Record<string, string> = {
181
186
  "content-type": "text/x-component;charset=utf-8",
182
187
  vary: "accept, X-Rango-State, X-RSC-Router-Client-Path",
188
+ // Router identity, so the client can verify pre-decode (before importing
189
+ // chunks) that this content payload belongs to its app and refuse a
190
+ // foreign one (cache/proxy/bug). Control-only reload/redirect responses
191
+ // are deliberately NOT stamped. See browser/response-adapter.ts.
192
+ "X-RSC-Router-Id": ctx.router.id,
183
193
  };
184
194
  // Tell the client's prefetch cache to scope this response to its source
185
195
  // URL (instead of the default source-agnostic wildcard). Intercept