@rangojs/router 0.0.0-experimental.dc0369d7 → 0.0.0-experimental.dcbea258

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 (861) 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/theme/ThemeProvider.d.ts +20 -0
  709. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  710. package/dist/theme/ThemeProvider.js +240 -0
  711. package/dist/theme/ThemeProvider.js.map +1 -0
  712. package/dist/theme/ThemeScript.d.ts +48 -0
  713. package/dist/theme/ThemeScript.d.ts.map +1 -0
  714. package/dist/theme/ThemeScript.js +13 -0
  715. package/dist/theme/ThemeScript.js.map +1 -0
  716. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  717. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  718. package/dist/theme/__tests__/theme.test.js +103 -0
  719. package/dist/theme/__tests__/theme.test.js.map +1 -0
  720. package/dist/theme/constants.d.ts +29 -0
  721. package/dist/theme/constants.d.ts.map +1 -0
  722. package/dist/theme/constants.js +48 -0
  723. package/dist/theme/constants.js.map +1 -0
  724. package/dist/theme/index.d.ts +31 -0
  725. package/dist/theme/index.d.ts.map +1 -0
  726. package/dist/theme/index.js +36 -0
  727. package/dist/theme/index.js.map +1 -0
  728. package/dist/theme/theme-context.d.ts +40 -0
  729. package/dist/theme/theme-context.d.ts.map +1 -0
  730. package/dist/theme/theme-context.js +60 -0
  731. package/dist/theme/theme-context.js.map +1 -0
  732. package/dist/theme/theme-script.d.ts +27 -0
  733. package/dist/theme/theme-script.d.ts.map +1 -0
  734. package/dist/theme/theme-script.js +147 -0
  735. package/dist/theme/theme-script.js.map +1 -0
  736. package/dist/theme/types.d.ts +163 -0
  737. package/dist/theme/types.d.ts.map +1 -0
  738. package/dist/theme/types.js +11 -0
  739. package/dist/theme/types.js.map +1 -0
  740. package/dist/theme/use-theme.d.ts +12 -0
  741. package/dist/theme/use-theme.d.ts.map +1 -0
  742. package/dist/theme/use-theme.js +40 -0
  743. package/dist/theme/use-theme.js.map +1 -0
  744. package/dist/types.d.ts +1479 -0
  745. package/dist/types.d.ts.map +1 -0
  746. package/dist/types.js +10 -0
  747. package/dist/types.js.map +1 -0
  748. package/dist/urls.d.ts +441 -0
  749. package/dist/urls.d.ts.map +1 -0
  750. package/dist/urls.gen.d.ts +8 -0
  751. package/dist/urls.gen.d.ts.map +1 -0
  752. package/dist/urls.gen.js +8 -0
  753. package/dist/urls.gen.js.map +1 -0
  754. package/dist/urls.js +443 -0
  755. package/dist/urls.js.map +1 -0
  756. package/dist/use-loader.d.ts +127 -0
  757. package/dist/use-loader.d.ts.map +1 -0
  758. package/dist/use-loader.js +237 -0
  759. package/dist/use-loader.js.map +1 -0
  760. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  761. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  764. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  765. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  775. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  776. package/dist/vite/ast-handler-extract.d.ts +49 -0
  777. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  778. package/dist/vite/ast-handler-extract.js +249 -0
  779. package/dist/vite/ast-handler-extract.js.map +1 -0
  780. package/dist/vite/expose-action-id.d.ts +19 -0
  781. package/dist/vite/expose-action-id.d.ts.map +1 -0
  782. package/dist/vite/expose-action-id.js +250 -0
  783. package/dist/vite/expose-action-id.js.map +1 -0
  784. package/dist/vite/expose-id-utils.d.ts +69 -0
  785. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  786. package/dist/vite/expose-id-utils.js +289 -0
  787. package/dist/vite/expose-id-utils.js.map +1 -0
  788. package/dist/vite/expose-internal-ids.d.ts +22 -0
  789. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  790. package/dist/vite/expose-internal-ids.js +886 -0
  791. package/dist/vite/expose-internal-ids.js.map +1 -0
  792. package/dist/vite/index.d.ts +149 -0
  793. package/dist/vite/index.d.ts.map +1 -0
  794. package/dist/vite/index.js +307 -128
  795. package/dist/vite/index.js.bak +5448 -0
  796. package/dist/vite/index.js.map +1 -0
  797. package/dist/vite/index.named-routes.gen.ts +103 -0
  798. package/dist/vite/package-resolution.d.ts +43 -0
  799. package/dist/vite/package-resolution.d.ts.map +1 -0
  800. package/dist/vite/package-resolution.js +112 -0
  801. package/dist/vite/package-resolution.js.map +1 -0
  802. package/dist/vite/virtual-entries.d.ts +25 -0
  803. package/dist/vite/virtual-entries.d.ts.map +1 -0
  804. package/dist/vite/virtual-entries.js +110 -0
  805. package/dist/vite/virtual-entries.js.map +1 -0
  806. package/package.json +3 -3
  807. package/skills/handler-use/SKILL.md +362 -0
  808. package/skills/intercept/SKILL.md +20 -0
  809. package/skills/layout/SKILL.md +22 -0
  810. package/skills/middleware/SKILL.md +32 -3
  811. package/skills/migrate-nextjs/SKILL.md +560 -0
  812. package/skills/migrate-react-router/SKILL.md +764 -0
  813. package/skills/parallel/SKILL.md +59 -0
  814. package/skills/rango/SKILL.md +24 -22
  815. package/skills/route/SKILL.md +24 -0
  816. package/src/browser/navigation-bridge.ts +21 -2
  817. package/src/browser/navigation-client.ts +34 -6
  818. package/src/browser/partial-update.ts +14 -2
  819. package/src/browser/prefetch/cache.ts +16 -6
  820. package/src/browser/prefetch/fetch.ts +60 -4
  821. package/src/browser/react/Link.tsx +25 -2
  822. package/src/browser/segment-reconciler.ts +36 -14
  823. package/src/build/route-trie.ts +50 -24
  824. package/src/client.tsx +82 -174
  825. package/src/index.ts +41 -9
  826. package/src/reverse.ts +4 -1
  827. package/src/route-definition/dsl-helpers.ts +159 -20
  828. package/src/route-definition/helpers-types.ts +57 -13
  829. package/src/route-types.ts +7 -0
  830. package/src/router/handler-context.ts +4 -1
  831. package/src/router/lazy-includes.ts +5 -5
  832. package/src/router/loader-resolution.ts +70 -47
  833. package/src/router/manifest.ts +12 -7
  834. package/src/router/match-middleware/cache-lookup.ts +10 -5
  835. package/src/router/match-middleware/segment-resolution.ts +1 -1
  836. package/src/router/match-result.ts +82 -4
  837. package/src/router/segment-resolution/fresh.ts +17 -2
  838. package/src/router/segment-resolution/revalidation.ts +28 -3
  839. package/src/rsc/handler.ts +13 -5
  840. package/src/rsc/loader-fetch.ts +23 -3
  841. package/src/rsc/progressive-enhancement.ts +10 -2
  842. package/src/rsc/rsc-rendering.ts +5 -1
  843. package/src/rsc/server-action.ts +6 -0
  844. package/src/rsc/types.ts +1 -0
  845. package/src/segment-content-promise.ts +67 -0
  846. package/src/segment-loader-promise.ts +122 -0
  847. package/src/segment-system.tsx +11 -61
  848. package/src/server/context.ts +26 -3
  849. package/src/server/handle-store.ts +19 -0
  850. package/src/server/request-context.ts +38 -9
  851. package/src/types/route-entry.ts +11 -0
  852. package/src/types/segments.ts +1 -1
  853. package/src/urls/include-helper.ts +24 -14
  854. package/src/urls/path-helper-types.ts +30 -4
  855. package/src/use-loader.tsx +4 -1
  856. package/src/vite/discovery/prerender-collection.ts +124 -83
  857. package/src/vite/plugins/expose-id-utils.ts +12 -0
  858. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  859. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  860. package/src/vite/router-discovery.ts +25 -3
  861. package/src/vite/utils/prerender-utils.ts +20 -6
@@ -125,6 +125,69 @@ export async function collectSegments(
125
125
  return segments;
126
126
  }
127
127
 
128
+ /**
129
+ * Deduplicate inherited loader segments by loaderId.
130
+ *
131
+ * When a route has loaders and a child layout has parallel slots, the same
132
+ * loader is resolved twice: once for the route and once inherited into the
133
+ * layout (tagged with `_inherited`). The inherited copy is only needed when
134
+ * the route uses `loading()` — in that case, the loader data is inside a
135
+ * LoaderBoundary/Suspense that parallel slots can't reach through. Without
136
+ * loading(), useLoader() traverses parent contexts and finds the data.
137
+ */
138
+ function deduplicateLoaderSegments(
139
+ segments: ResolvedSegment[],
140
+ logPrefix: string,
141
+ ): ResolvedSegment[] {
142
+ // First pass: collect loaderIds of original (non-inherited) segments
143
+ // and whether their parent entry uses loading()
144
+ const originalLoaders = new Set<string>();
145
+ const loadersWithLoading = new Set<string>();
146
+ for (const s of segments) {
147
+ if (s.type === "loader" && s.loaderId && !s._inherited) {
148
+ originalLoaders.add(s.loaderId);
149
+ // If the segment has a sibling with loading, the parent uses loading()
150
+ // We detect this by checking if any non-loader segment in the same
151
+ // namespace has loading defined
152
+ }
153
+ }
154
+ // Check if any layout/route segment has loading — if a loader's namespace
155
+ // matches a segment with loading, the inherited copy is needed
156
+ for (const s of segments) {
157
+ if (s.type !== "loader" && s.loading !== undefined && s.loading !== false) {
158
+ // Find loaders in this namespace
159
+ for (const l of segments) {
160
+ if (l.type === "loader" && l.namespace === s.namespace && l.loaderId) {
161
+ loadersWithLoading.add(l.loaderId);
162
+ }
163
+ }
164
+ }
165
+ }
166
+
167
+ const result: ResolvedSegment[] = [];
168
+ let dedupCount = 0;
169
+
170
+ for (const s of segments) {
171
+ if (
172
+ s.type === "loader" &&
173
+ s.loaderId &&
174
+ s._inherited &&
175
+ originalLoaders.has(s.loaderId) &&
176
+ !loadersWithLoading.has(s.loaderId)
177
+ ) {
178
+ dedupCount++;
179
+ continue;
180
+ }
181
+ result.push(s);
182
+ }
183
+
184
+ if (dedupCount > 0) {
185
+ debugLog(logPrefix, `deduped ${dedupCount} inherited loader segment(s)`);
186
+ }
187
+
188
+ return result;
189
+ }
190
+
128
191
  /**
129
192
  * Build the final MatchResult from collected segments and context
130
193
  */
@@ -181,6 +244,11 @@ export function buildMatchResult<TEnv>(
181
244
  );
182
245
  }
183
246
 
247
+ const dedupedSegments = deduplicateLoaderSegments(
248
+ segmentsToRender,
249
+ logPrefix,
250
+ );
251
+
184
252
  debugLog(logPrefix, "all segments", {
185
253
  segments: allSegments.map((s) => ({
186
254
  id: s.id,
@@ -189,13 +257,23 @@ export function buildMatchResult<TEnv>(
189
257
  })),
190
258
  });
191
259
  debugLog(logPrefix, "segments to render", {
192
- segmentIds: segmentsToRender.map((s) => s.id),
260
+ segmentIds: dedupedSegments.map((s) => s.id),
193
261
  });
194
262
 
263
+ // Remove deduped loader IDs from matched so the client doesn't treat
264
+ // them as missing segments and trigger a fallback refetch.
265
+ const removedIds = new Set(
266
+ segmentsToRender
267
+ .filter((s) => !dedupedSegments.includes(s))
268
+ .map((s) => s.id),
269
+ );
270
+ const matchedIds =
271
+ removedIds.size > 0 ? allIds.filter((id) => !removedIds.has(id)) : allIds;
272
+
195
273
  return {
196
- segments: segmentsToRender,
197
- matched: allIds,
198
- diff: segmentsToRender.map((s) => s.id),
274
+ segments: dedupedSegments,
275
+ matched: matchedIds,
276
+ diff: dedupedSegments.map((s) => s.id),
199
277
  params: ctx.matched.params,
200
278
  routeName: ctx.routeKey,
201
279
  slots: Object.keys(state.slots).length > 0 ? state.slots : undefined,
@@ -419,6 +419,10 @@ export async function resolveOrphanLayout<TEnv>(
419
419
  deps,
420
420
  orphan.shortCode,
421
421
  );
422
+ // Tag as inherited so buildMatchResult can deduplicate when safe
423
+ for (const s of inheritedLoaders) {
424
+ s._inherited = true;
425
+ }
422
426
  segments.push(...inheritedLoaders);
423
427
  }
424
428
  }
@@ -709,18 +713,29 @@ export async function resolveLoadersOnly<TEnv>(
709
713
  const childBelongsToRoute = belongsToRoute || entry.type === "route";
710
714
  for (const layoutEntry of entry.layout) {
711
715
  await collectEntryLoaders(layoutEntry, childBelongsToRoute);
712
- // Inherit route loaders for orphan layouts with parallels
716
+ // Inherit route loaders for orphan layouts with parallels.
717
+ // Resolve directly — do NOT re-enter collectEntryLoaders with the
718
+ // route entry, as that would re-iterate route.layout and loop.
713
719
  if (
714
720
  entry.type === "route" &&
715
721
  entry.loader &&
716
722
  entry.loader.length > 0 &&
717
723
  Object.keys(layoutEntry.parallel).length > 0
718
724
  ) {
719
- await collectEntryLoaders(
725
+ const inherited = await resolveLoaders(
720
726
  entry,
727
+ context,
721
728
  childBelongsToRoute,
729
+ deps,
722
730
  layoutEntry.shortCode,
723
731
  );
732
+ for (const seg of inherited) {
733
+ if (!seenIds.has(seg.id)) {
734
+ seenIds.add(seg.id);
735
+ seg._inherited = true;
736
+ loaderSegments.push(seg);
737
+ }
738
+ }
724
739
  }
725
740
  }
726
741
  }
@@ -319,18 +319,38 @@ export async function resolveLoadersOnlyWithRevalidation<TEnv>(
319
319
  const childBelongsToRoute = belongsToRoute || entry.type === "route";
320
320
  for (const layoutEntry of entry.layout) {
321
321
  await collectEntryLoaders(layoutEntry, childBelongsToRoute);
322
- // Inherit route loaders for orphan layouts with parallels
322
+ // Inherit route loaders for orphan layouts with parallels.
323
+ // Resolve directly — do NOT re-enter collectEntryLoaders with the
324
+ // route entry, as that would re-iterate route.layout and loop.
323
325
  if (
324
326
  entry.type === "route" &&
325
327
  entry.loader &&
326
328
  entry.loader.length > 0 &&
327
329
  Object.keys(layoutEntry.parallel).length > 0
328
330
  ) {
329
- await collectEntryLoaders(
331
+ const inherited = await resolveLoadersWithRevalidation(
330
332
  entry,
333
+ context,
331
334
  childBelongsToRoute,
335
+ clientSegmentIds,
336
+ prevParams,
337
+ request,
338
+ prevUrl,
339
+ nextUrl,
340
+ routeKey,
341
+ deps,
342
+ actionContext,
332
343
  layoutEntry.shortCode,
344
+ stale,
333
345
  );
346
+ for (const seg of inherited.segments) {
347
+ if (!seenIds.has(seg.id)) {
348
+ seenIds.add(seg.id);
349
+ seg._inherited = true;
350
+ allLoaderSegments.push(seg);
351
+ }
352
+ }
353
+ allMatchedIds.push(...inherited.matchedIds);
334
354
  }
335
355
  }
336
356
  }
@@ -1017,6 +1037,10 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
1017
1037
  orphan.shortCode,
1018
1038
  stale,
1019
1039
  );
1040
+ // Tag as inherited so buildMatchResult can deduplicate when safe
1041
+ for (const s of inheritedResult.segments) {
1042
+ s._inherited = true;
1043
+ }
1020
1044
  segments.push(...inheritedResult.segments);
1021
1045
  matchedIds.push(...inheritedResult.matchedIds);
1022
1046
  }
@@ -1107,6 +1131,7 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
1107
1131
  );
1108
1132
 
1109
1133
  if (!resolvedParallelEntries.has(parallelEntry.id)) {
1134
+ // shortCodeOverride must match the parent layout, not the parallel entry.
1110
1135
  const loaderResult = await resolveLoadersWithRevalidation(
1111
1136
  parallelEntry,
1112
1137
  context,
@@ -1119,7 +1144,7 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
1119
1144
  routeKey,
1120
1145
  deps,
1121
1146
  actionContext,
1122
- undefined,
1147
+ orphan.shortCode,
1123
1148
  stale,
1124
1149
  );
1125
1150
  segments.push(...loaderResult.segments);
@@ -15,6 +15,7 @@ import {
15
15
  setRequestContextParams,
16
16
  requireRequestContext,
17
17
  getRequestContext,
18
+ _getRequestContext,
18
19
  createRequestContext,
19
20
  } from "../server/request-context.js";
20
21
  import * as rscDeps from "@vitejs/plugin-rsc/rsc";
@@ -166,10 +167,13 @@ export function createRSCHandler<
166
167
  phase: ErrorPhase,
167
168
  context: Parameters<typeof invokeOnError<TEnv>>[3],
168
169
  ): void {
169
- if (error != null && typeof error === "object") {
170
- const reportedErrors = requireRequestContext()._reportedErrors;
171
- if (reportedErrors.has(error)) return;
172
- reportedErrors.add(error);
170
+ // Guard: abort signal handlers fire asynchronously outside the ALS
171
+ // request scope, so the context may be gone. Skip dedup in that
172
+ // case — the error is from a cancelled stream, not a real failure.
173
+ const reqCtx = _getRequestContext();
174
+ if (error != null && typeof error === "object" && reqCtx) {
175
+ if (reqCtx._reportedErrors.has(error)) return;
176
+ reqCtx._reportedErrors.add(error);
173
177
  }
174
178
  invokeOnError(router.onError, error, phase, context, "RSC");
175
179
  }
@@ -1090,7 +1094,11 @@ export function createRSCHandler<
1090
1094
  },
1091
1095
  };
1092
1096
 
1093
- const rscStream = renderToReadableStream(payload);
1097
+ const rscStream = renderToReadableStream(payload, {
1098
+ onError: (error: unknown) => {
1099
+ callOnError(error, "rendering", { request, url, env });
1100
+ },
1101
+ });
1094
1102
 
1095
1103
  const isRscRequest =
1096
1104
  isPartial ||
@@ -168,8 +168,19 @@ export async function handleLoaderFetch<TEnv>(
168
168
  loaderResult: unknown;
169
169
  }
170
170
  const loaderPayload: LoaderPayload = { loaderResult: result };
171
- const rscStream =
172
- ctx.renderToReadableStream<LoaderPayload>(loaderPayload);
171
+ const rscStream = ctx.renderToReadableStream<LoaderPayload>(
172
+ loaderPayload,
173
+ {
174
+ onError: (error: unknown) => {
175
+ ctx.callOnError(error, "rendering", {
176
+ request,
177
+ url,
178
+ env,
179
+ loaderName: loaderId,
180
+ });
181
+ },
182
+ },
183
+ );
173
184
 
174
185
  return createResponseWithMergedHeaders(rscStream, {
175
186
  headers: { "content-type": "text/x-component;charset=utf-8" },
@@ -199,7 +210,16 @@ export async function handleLoaderFetch<TEnv>(
199
210
  name: err.name,
200
211
  },
201
212
  };
202
- const rscStream = ctx.renderToReadableStream(errorPayload);
213
+ const rscStream = ctx.renderToReadableStream(errorPayload, {
214
+ onError: (error: unknown) => {
215
+ ctx.callOnError(error, "rendering", {
216
+ request,
217
+ url,
218
+ env,
219
+ loaderName: loaderId,
220
+ });
221
+ },
222
+ });
203
223
 
204
224
  return createResponseWithMergedHeaders(rscStream, {
205
225
  status: 500,
@@ -259,7 +259,11 @@ export async function handleProgressiveEnhancement<TEnv>(
259
259
  formState: actionResult,
260
260
  };
261
261
 
262
- const rscStream = ctx.renderToReadableStream<RscPayload>(payload);
262
+ const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
263
+ onError: (error: unknown) => {
264
+ ctx.callOnError(error, "rendering", { request, url, env });
265
+ },
266
+ });
263
267
  // metricsStore=undefined is safe: the handler already stashed the early
264
268
  // SSR setup promise on request variables, so getSSRSetup returns it
265
269
  // without falling back to a fresh startSSRSetup.
@@ -360,7 +364,11 @@ async function renderPeErrorBoundary<TEnv>(
360
364
  },
361
365
  };
362
366
 
363
- const rscStream = ctx.renderToReadableStream<RscPayload>(payload);
367
+ const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
368
+ onError: (error: unknown) => {
369
+ ctx.callOnError(error, "rendering", { request, url, env });
370
+ },
371
+ });
364
372
  // metricsStore=undefined is safe: the handler already stashed the early
365
373
  // SSR setup promise on request variables, so getSSRSetup returns it
366
374
  // without falling back to a fresh startSSRSetup.
@@ -173,7 +173,11 @@ export async function handleRscRendering<TEnv>(
173
173
 
174
174
  // Serialize to RSC stream
175
175
  const rscSerializeStart = performance.now();
176
- const rscStream = ctx.renderToReadableStream<RscPayload>(payload);
176
+ const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
177
+ onError: (error: unknown) => {
178
+ ctx.callOnError(error, "rendering", { request, url, env });
179
+ },
180
+ });
177
181
  const rscSerializeDur = performance.now() - rscSerializeStart;
178
182
  // This measures synchronous stream creation, not end-to-end stream consumption.
179
183
  appendMetric(
@@ -226,6 +226,9 @@ export async function executeServerAction<TEnv>(
226
226
 
227
227
  const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
228
228
  temporaryReferences,
229
+ onError: (error: unknown) => {
230
+ ctx.callOnError(error, "rendering", { request, url, env });
231
+ },
229
232
  });
230
233
 
231
234
  return createResponseWithMergedHeaders(rscStream, {
@@ -332,6 +335,9 @@ export async function revalidateAfterAction<TEnv>(
332
335
  const renderStart = performance.now();
333
336
  const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
334
337
  temporaryReferences,
338
+ onError: (error: unknown) => {
339
+ ctx.callOnError(error, "rendering", { request, url, env });
340
+ },
335
341
  });
336
342
  const rscSerializeDur = performance.now() - renderStart;
337
343
  // This measures synchronous stream creation, not end-to-end stream consumption.
package/src/rsc/types.ts CHANGED
@@ -70,6 +70,7 @@ export interface RSCDependencies {
70
70
  payload: T,
71
71
  options?: {
72
72
  temporaryReferences?: unknown;
73
+ onError?: (error: unknown) => string | void;
73
74
  },
74
75
  ) => ReadableStream<Uint8Array>;
75
76
 
@@ -0,0 +1,67 @@
1
+ import type { ReactNode } from "react";
2
+
3
+ /**
4
+ * Stable Promise wrappers keyed on the component itself. Objects (React
5
+ * elements, functions, lazy payloads) land in a WeakMap so entries GC when
6
+ * the underlying component is released; primitives (string, number, boolean,
7
+ * null) land in a Map so memoization still applies to text-/null-backed
8
+ * segments like those in partial-update flows. Keeping this cache outside
9
+ * the segment eliminates preservation fields on ResolvedSegment — it survives
10
+ * reconciliation naturally because the component ref is what's stable.
11
+ *
12
+ * Browser-only. On the server each SSR render needs a fresh pending promise
13
+ * so Suspense can emit the loading fallback HTML before content streams. A
14
+ * shared already-resolved promise has `.status === "fulfilled"` attached by
15
+ * React on its first observation — subsequent `use()` calls return
16
+ * synchronously without suspending, so the Suspense fallback never makes it
17
+ * into the initial HTML. Route-definition components share refs across
18
+ * requests, so a global cache would leak tracked state between renders.
19
+ */
20
+ const IS_BROWSER = typeof window !== "undefined";
21
+ const objectContentCache = IS_BROWSER
22
+ ? new WeakMap<object, Promise<ReactNode>>()
23
+ : null;
24
+ const primitiveContentCache = IS_BROWSER
25
+ ? new Map<unknown, Promise<ReactNode>>()
26
+ : null;
27
+
28
+ /**
29
+ * Return a stable Promise wrapping `component`, memoized on the component ref.
30
+ *
31
+ * A fresh `Promise.resolve(component)` each render would suspend for one
32
+ * microtask and briefly commit the loading fallback inside Suspender — the
33
+ * intercept / parallel-slot flicker this indirection prevents. Reusing the
34
+ * same Promise ref keeps React's `use()` in "known fulfilled" state after
35
+ * the first observation.
36
+ *
37
+ * @internal
38
+ */
39
+ export function getMemoizedContentPromise(
40
+ component: ReactNode,
41
+ ): Promise<ReactNode> {
42
+ if (component instanceof Promise) {
43
+ return component as Promise<ReactNode>;
44
+ }
45
+
46
+ if (!objectContentCache || !primitiveContentCache) {
47
+ return Promise.resolve(component);
48
+ }
49
+
50
+ if (component !== null && typeof component === "object") {
51
+ const cached = objectContentCache.get(component);
52
+ if (cached) {
53
+ return cached;
54
+ }
55
+ const promise = Promise.resolve(component);
56
+ objectContentCache.set(component, promise);
57
+ return promise;
58
+ }
59
+
60
+ const cached = primitiveContentCache.get(component);
61
+ if (cached) {
62
+ return cached;
63
+ }
64
+ const promise = Promise.resolve(component);
65
+ primitiveContentCache.set(component, promise);
66
+ return promise;
67
+ }
@@ -0,0 +1,122 @@
1
+ import type { ResolvedSegment } from "./types.js";
2
+
3
+ /**
4
+ * Cache of aggregate Promise.all results keyed on the first loader's
5
+ * `loaderData` reference. Each entry holds the source refs it was built from
6
+ * plus the resulting Promise/array; lookup scans entries for the matching
7
+ * source array (typically a single entry, since distinct loader groups rarely
8
+ * share a first source). Object first-refs live in a WeakMap (auto-GC);
9
+ * primitive first-refs (strings/numbers/booleans/null) live in a Map so
10
+ * loaders that resolve to primitive data are memoized too — bounded in
11
+ * practice by the application's loader set.
12
+ *
13
+ * Keying externally means reconciliation's fresh segment objects no longer
14
+ * drop memoization — the cache survives as long as the underlying loader
15
+ * segments do, and GC collects entries when those loaders are released
16
+ * (object keys only).
17
+ *
18
+ * Browser-only. On the server each SSR render needs a fresh Promise so
19
+ * Suspense can actually suspend and emit the loading fallback HTML before
20
+ * content streams. A shared already-resolved promise has `.status` attached
21
+ * by React on first `use()`; subsequent observations return synchronously
22
+ * and skip the fallback. The zero-loader case is especially prone because
23
+ * every empty-loader site would otherwise share one promise across requests.
24
+ */
25
+ const IS_BROWSER = typeof window !== "undefined";
26
+
27
+ interface LoaderCacheEntry {
28
+ sources: any[];
29
+ promise: Promise<any[]> | any[];
30
+ }
31
+
32
+ const objectLoaderCache = IS_BROWSER
33
+ ? new WeakMap<object, LoaderCacheEntry[]>()
34
+ : null;
35
+ const primitiveLoaderCache = IS_BROWSER
36
+ ? new Map<unknown, LoaderCacheEntry[]>()
37
+ : null;
38
+
39
+ // In the browser, a single shared empty aggregate is safe (and desirable) —
40
+ // reusing the same resolved promise keeps React's `use()` in a known-fulfilled
41
+ // state across renders. On the server it would leak `.status = "fulfilled"`
42
+ // across requests and skip the Suspense fallback, so we rebuild on each call.
43
+ const SHARED_EMPTY_LOADER_PROMISE: Promise<any[]> | null = IS_BROWSER
44
+ ? Promise.resolve([])
45
+ : null;
46
+
47
+ function hasSameReferences(a: any[], b: any[]): boolean {
48
+ if (a.length !== b.length) {
49
+ return false;
50
+ }
51
+ for (let i = 0; i < a.length; i++) {
52
+ if (a[i] !== b[i]) {
53
+ return false;
54
+ }
55
+ }
56
+ return true;
57
+ }
58
+
59
+ function buildLoaderPromise(loaders: ResolvedSegment[]): Promise<any[]> {
60
+ if (loaders.length === 0) {
61
+ return Promise.resolve([]);
62
+ }
63
+ return Promise.all(
64
+ loaders.map((loader) =>
65
+ loader.loaderData instanceof Promise
66
+ ? loader.loaderData
67
+ : Promise.resolve(loader.loaderData),
68
+ ),
69
+ );
70
+ }
71
+
72
+ function isObjectLike(value: unknown): value is object {
73
+ return (
74
+ value !== null && (typeof value === "object" || typeof value === "function")
75
+ );
76
+ }
77
+
78
+ /**
79
+ * Memoize an aggregate Promise.all for a set of loader segments. Reusing the
80
+ * same aggregate across renders — invalidated only when any underlying
81
+ * loader.loaderData ref changes — keeps React's `use()` in "known fulfilled"
82
+ * state and prevents a fresh Promise.all from suspending (and briefly
83
+ * committing the Suspense fallback) on every partial update that doesn't
84
+ * actually change loader data.
85
+ *
86
+ * @internal
87
+ */
88
+ export function getMemoizedLoaderPromise(
89
+ loaders: ResolvedSegment[],
90
+ ): Promise<any[]> | any[] {
91
+ if (loaders.length === 0) {
92
+ return SHARED_EMPTY_LOADER_PROMISE ?? buildLoaderPromise(loaders);
93
+ }
94
+ if (!objectLoaderCache || !primitiveLoaderCache) {
95
+ return buildLoaderPromise(loaders);
96
+ }
97
+
98
+ const sources = loaders.map((loader) => loader.loaderData);
99
+ const first = sources[0];
100
+ const entries = isObjectLike(first)
101
+ ? objectLoaderCache.get(first)
102
+ : primitiveLoaderCache.get(first);
103
+
104
+ if (entries) {
105
+ for (const entry of entries) {
106
+ if (hasSameReferences(entry.sources, sources)) {
107
+ return entry.promise;
108
+ }
109
+ }
110
+ }
111
+
112
+ const promise = buildLoaderPromise(loaders);
113
+ const newEntry: LoaderCacheEntry = { sources, promise };
114
+ if (entries) {
115
+ entries.push(newEntry);
116
+ } else if (isObjectLike(first)) {
117
+ objectLoaderCache.set(first, [newEntry]);
118
+ } else {
119
+ primitiveLoaderCache.set(first, [newEntry]);
120
+ }
121
+ return promise;
122
+ }
@@ -2,11 +2,7 @@ import * as React from "react";
2
2
  import { createElement, type ReactNode, type ComponentType } from "react";
3
3
  import { OutletProvider } from "./client.js";
4
4
  import { MountContextProvider } from "./browser/react/mount-context.js";
5
- import type {
6
- ResolvedSegment,
7
- LoaderDataResult,
8
- RootLayoutProps,
9
- } from "./types.js";
5
+ import type { ResolvedSegment, RootLayoutProps } from "./types.js";
10
6
  import { isLoaderDataResult } from "./types.js";
11
7
  import { invariant } from "./errors.js";
12
8
  import {
@@ -14,6 +10,8 @@ import {
14
10
  LoaderBoundary,
15
11
  } from "./route-content-wrapper.js";
16
12
  import { RootErrorBoundary } from "./root-error-boundary.js";
13
+ import { getMemoizedContentPromise } from "./segment-content-promise.js";
14
+ import { getMemoizedLoaderPromise } from "./segment-loader-promise.js";
17
15
 
18
16
  // ViewTransition is only available in React experimental.
19
17
  // Access via namespace import to avoid compile-time errors on stable React.
@@ -61,20 +59,6 @@ function restoreParallelLoaderMarkers(
61
59
  return nextSegments ?? segments;
62
60
  }
63
61
 
64
- function hasSameReferences(a: unknown[] | undefined, b: unknown[]): boolean {
65
- if (!a || a.length !== b.length) {
66
- return false;
67
- }
68
-
69
- for (let i = 0; i < a.length; i++) {
70
- if (a[i] !== b[i]) {
71
- return false;
72
- }
73
- }
74
-
75
- return true;
76
- }
77
-
78
62
  /**
79
63
  * Resolve loader data from raw results, unwrapping LoaderDataResult wrappers
80
64
  */
@@ -278,10 +262,7 @@ export async function renderSegments(
278
262
  loading !== null && loading !== undefined && loading !== false
279
263
  ? createElement(RouteContentWrapper, {
280
264
  key: `suspense-loading-${id}`,
281
- content:
282
- resolvedComponent instanceof Promise
283
- ? resolvedComponent
284
- : Promise.resolve(resolvedComponent),
265
+ content: getMemoizedContentPromise(resolvedComponent),
285
266
  fallback: loading,
286
267
  segmentId: id,
287
268
  })
@@ -305,16 +286,7 @@ export async function renderSegments(
305
286
 
306
287
  // Prepare loader data if there are loaders
307
288
  const loaderIds = loaderEntries.map((loader) => loader.loaderId!);
308
- const loaderDataPromise =
309
- loaderEntries.length > 0
310
- ? Promise.all(
311
- loaderEntries.map((loader) =>
312
- loader.loaderData instanceof Promise
313
- ? loader.loaderData
314
- : Promise.resolve(loader.loaderData),
315
- ),
316
- )
317
- : Promise.resolve([]);
289
+ const loaderDataPromise = getMemoizedLoaderPromise(loaderEntries);
318
290
 
319
291
  // Use LoaderBoundary when loading is defined to maintain consistent tree structure
320
292
  // This ensures cached segments (which may not have loader segments) have the same
@@ -396,34 +368,12 @@ export async function renderSegments(
396
368
  continue;
397
369
  }
398
370
 
399
- const parallelLoaderIds = ownedLoaders.map((l) => l.loaderId!);
400
- const parallelLoaderSources = ownedLoaders.map((l) => l.loaderData);
401
- p.loaderIds = parallelLoaderIds;
402
-
403
- const shouldReuseParallelPromise =
404
- p.loaderDataPromise !== undefined &&
405
- hasSameReferences(p.parallelLoaderSources, parallelLoaderSources);
406
-
407
- const parallelLoaderDataPromise = shouldReuseParallelPromise
408
- ? p.loaderDataPromise
409
- : forceAwait || isAction
410
- ? await Promise.all(
411
- ownedLoaders.map((l) =>
412
- l.loaderData instanceof Promise
413
- ? l.loaderData
414
- : Promise.resolve(l.loaderData),
415
- ),
416
- )
417
- : Promise.all(
418
- ownedLoaders.map((l) =>
419
- l.loaderData instanceof Promise
420
- ? l.loaderData
421
- : Promise.resolve(l.loaderData),
422
- ),
423
- );
424
-
425
- p.loaderDataPromise = parallelLoaderDataPromise;
426
- p.parallelLoaderSources = parallelLoaderSources;
371
+ p.loaderIds = ownedLoaders.map((l) => l.loaderId!);
372
+ const aggregated = getMemoizedLoaderPromise(ownedLoaders);
373
+ p.loaderDataPromise =
374
+ (forceAwait || isAction) && aggregated instanceof Promise
375
+ ? await aggregated
376
+ : aggregated;
427
377
  }
428
378
  }
429
379