@rangojs/router 0.0.0-experimental.19 → 0.0.0-experimental.190fb30d

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 (1254) hide show
  1. package/AGENTS.md +13 -0
  2. package/README.md +304 -708
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +822 -182
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/{src/handles/index.ts → dist/handles/index.js} +1 -1
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +4644 -1433
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/index.named-routes.gen.ts +103 -0
  802. package/dist/vite/package-resolution.d.ts +43 -0
  803. package/dist/vite/package-resolution.d.ts.map +1 -0
  804. package/dist/vite/package-resolution.js +112 -0
  805. package/dist/vite/package-resolution.js.map +1 -0
  806. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  807. package/dist/vite/virtual-entries.d.ts +25 -0
  808. package/dist/vite/virtual-entries.d.ts.map +1 -0
  809. package/dist/vite/virtual-entries.js +110 -0
  810. package/dist/vite/virtual-entries.js.map +1 -0
  811. package/package.json +87 -16
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +329 -0
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +251 -24
  816. package/skills/caching/SKILL.md +379 -21
  817. package/skills/catalog.json +271 -0
  818. package/skills/comparison/SKILL.md +50 -0
  819. package/skills/comparison/agents/openai.yaml +4 -0
  820. package/skills/comparison/references/framework-comparison.md +837 -0
  821. package/skills/composability/SKILL.md +110 -4
  822. package/skills/css/SKILL.md +76 -0
  823. package/skills/debug-manifest/SKILL.md +5 -3
  824. package/skills/defer-hydration/SKILL.md +235 -0
  825. package/skills/document-cache/SKILL.md +87 -56
  826. package/skills/fonts/SKILL.md +1 -1
  827. package/skills/handler-use/SKILL.md +364 -0
  828. package/skills/hooks/SKILL.md +76 -692
  829. package/skills/hooks/data.md +273 -0
  830. package/skills/hooks/handle-and-actions.md +103 -0
  831. package/skills/hooks/navigation.md +110 -0
  832. package/skills/hooks/outlets.md +41 -0
  833. package/skills/hooks/state.md +228 -0
  834. package/skills/hooks/urls.md +135 -0
  835. package/skills/host-router/SKILL.md +320 -0
  836. package/skills/i18n/SKILL.md +276 -0
  837. package/skills/intercept/SKILL.md +94 -18
  838. package/skills/layout/SKILL.md +62 -19
  839. package/skills/links/SKILL.md +249 -17
  840. package/skills/loader/SKILL.md +320 -32
  841. package/skills/middleware/SKILL.md +59 -16
  842. package/skills/migrate-nextjs/SKILL.md +745 -0
  843. package/skills/migrate-react-router/SKILL.md +153 -0
  844. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  845. package/skills/migrate-react-router/component-migration.md +196 -0
  846. package/skills/migrate-react-router/data-and-actions.md +225 -0
  847. package/skills/migrate-react-router/route-mapping.md +271 -0
  848. package/skills/mime-routes/SKILL.md +29 -2
  849. package/skills/observability/SKILL.md +202 -0
  850. package/skills/parallel/SKILL.md +225 -10
  851. package/skills/ppr/SKILL.md +618 -0
  852. package/skills/prerender/SKILL.md +180 -126
  853. package/skills/rango/SKILL.md +318 -25
  854. package/skills/react-compiler/SKILL.md +168 -0
  855. package/skills/response-routes/SKILL.md +138 -49
  856. package/skills/route/SKILL.md +175 -13
  857. package/skills/router-setup/SKILL.md +139 -14
  858. package/skills/scripts/SKILL.md +179 -0
  859. package/skills/server-actions/SKILL.md +776 -0
  860. package/skills/shell-manifest/SKILL.md +185 -0
  861. package/skills/streams-and-websockets/SKILL.md +283 -0
  862. package/skills/tailwind/SKILL.md +28 -4
  863. package/skills/testing/SKILL.md +126 -222
  864. package/skills/testing/bindings.md +103 -0
  865. package/skills/testing/cache-prerender.md +127 -0
  866. package/skills/testing/client-components.md +124 -0
  867. package/skills/testing/e2e-parity.md +125 -0
  868. package/skills/testing/flight.md +91 -0
  869. package/skills/testing/handles.md +131 -0
  870. package/skills/testing/loader.md +128 -0
  871. package/skills/testing/middleware.md +99 -0
  872. package/skills/testing/render-handler.md +122 -0
  873. package/skills/testing/response-routes.md +95 -0
  874. package/skills/testing/reverse-and-types.md +85 -0
  875. package/skills/testing/server-actions.md +107 -0
  876. package/skills/testing/server-tree.md +128 -0
  877. package/skills/testing/setup.md +123 -0
  878. package/skills/theme/SKILL.md +1 -1
  879. package/skills/typesafety/SKILL.md +45 -614
  880. package/skills/typesafety/env-and-bindings.md +254 -0
  881. package/skills/typesafety/generated-files-and-cli.md +335 -0
  882. package/skills/typesafety/params-and-search.md +153 -0
  883. package/skills/typesafety/route-types.md +209 -0
  884. package/skills/use-cache/SKILL.md +74 -15
  885. package/skills/vercel/SKILL.md +128 -0
  886. package/skills/view-transitions/SKILL.md +337 -0
  887. package/src/__augment-tests__/augment.ts +81 -0
  888. package/src/__augment-tests__/augmented.check.ts +116 -0
  889. package/src/__internal.ts +67 -40
  890. package/src/bin/rango.ts +18 -0
  891. package/src/browser/action-coordinator.ts +53 -36
  892. package/src/browser/action-fence.ts +47 -0
  893. package/src/browser/app-shell.ts +39 -0
  894. package/src/browser/app-version.ts +14 -0
  895. package/src/browser/connection-warmup.ts +134 -0
  896. package/src/browser/cookie-name.ts +140 -0
  897. package/src/browser/event-controller.ts +257 -158
  898. package/src/browser/history-state.ts +21 -0
  899. package/src/browser/index.ts +3 -3
  900. package/src/browser/invalidate-client-cache.ts +52 -0
  901. package/src/browser/link-interceptor.ts +4 -0
  902. package/src/browser/logging.ts +28 -0
  903. package/src/browser/merge-segment-loaders.ts +6 -4
  904. package/src/browser/navigation-bridge.ts +222 -38
  905. package/src/browser/navigation-client.ts +233 -58
  906. package/src/browser/navigation-store-handle.ts +38 -0
  907. package/src/browser/navigation-store.ts +203 -80
  908. package/src/browser/navigation-transaction.ts +18 -66
  909. package/src/browser/network-error-handler.ts +34 -7
  910. package/src/browser/partial-update.ts +242 -126
  911. package/src/browser/prefetch/cache.ts +344 -30
  912. package/src/browser/prefetch/fetch.ts +373 -48
  913. package/src/browser/prefetch/policy.ts +6 -0
  914. package/src/browser/prefetch/queue.ts +144 -23
  915. package/src/browser/prefetch/resource-ready.ts +77 -0
  916. package/src/browser/rango-state.ts +158 -76
  917. package/src/browser/react/Link.tsx +135 -18
  918. package/src/browser/react/NavigationProvider.tsx +240 -122
  919. package/src/browser/react/ScrollRestoration.tsx +10 -6
  920. package/src/browser/react/context.ts +7 -2
  921. package/src/browser/react/filter-segment-order.ts +66 -7
  922. package/src/browser/react/index.ts +0 -48
  923. package/src/browser/react/location-state-shared.ts +178 -8
  924. package/src/browser/react/location-state.ts +39 -14
  925. package/src/browser/react/use-action.ts +6 -15
  926. package/src/browser/react/use-handle.ts +23 -69
  927. package/src/browser/react/use-href.tsx +8 -1
  928. package/src/browser/react/use-link-status.ts +33 -8
  929. package/src/browser/react/use-navigation.ts +32 -7
  930. package/src/browser/react/use-params.ts +20 -10
  931. package/src/browser/react/use-reverse.ts +106 -0
  932. package/src/browser/react/use-router.ts +46 -11
  933. package/src/browser/react/use-search-params.ts +0 -5
  934. package/src/browser/react/use-segments.ts +11 -21
  935. package/src/browser/response-adapter.ts +99 -8
  936. package/src/browser/rsc-router.tsx +276 -75
  937. package/src/browser/scroll-restoration.ts +61 -47
  938. package/src/browser/segment-reconciler.ts +44 -7
  939. package/src/browser/segment-structure-assert.ts +2 -2
  940. package/src/browser/server-action-bridge.ts +631 -442
  941. package/src/browser/types.ts +160 -12
  942. package/src/browser/validate-redirect-origin.ts +43 -16
  943. package/src/build/collect-fallback-refs.ts +107 -0
  944. package/src/build/generate-manifest.ts +207 -158
  945. package/src/build/generate-route-types.ts +8 -1
  946. package/src/build/index.ts +11 -3
  947. package/src/build/prefix-tree-utils.ts +123 -0
  948. package/src/build/route-trie.ts +215 -42
  949. package/src/build/route-types/ast-route-extraction.ts +15 -8
  950. package/src/build/route-types/codegen.ts +16 -5
  951. package/src/build/route-types/include-resolution.ts +464 -63
  952. package/src/build/route-types/param-extraction.ts +6 -3
  953. package/src/build/route-types/per-module-writer.ts +22 -6
  954. package/src/build/route-types/router-processing.ts +442 -106
  955. package/src/build/route-types/scan-filter.ts +9 -2
  956. package/src/build/route-types/source-scan.ts +216 -0
  957. package/src/build/runtime-discovery.ts +13 -21
  958. package/src/cache/cache-error.ts +104 -0
  959. package/src/cache/cache-key-utils.ts +58 -13
  960. package/src/cache/cache-policy.ts +108 -34
  961. package/src/cache/cache-runtime.ts +454 -97
  962. package/src/cache/cache-scope.ts +235 -103
  963. package/src/cache/cache-tag.ts +149 -0
  964. package/src/cache/cf/cf-base64.ts +33 -0
  965. package/src/cache/cf/cf-cache-constants.ts +127 -0
  966. package/src/cache/cf/cf-cache-store.ts +2446 -170
  967. package/src/cache/cf/cf-cache-types.ts +349 -0
  968. package/src/cache/cf/cf-kv-utils.ts +46 -0
  969. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  970. package/src/cache/cf/index.ts +11 -17
  971. package/src/cache/document-cache.ts +144 -49
  972. package/src/cache/handle-snapshot.ts +70 -0
  973. package/src/cache/index.ts +24 -20
  974. package/src/cache/memory-segment-store.ts +243 -37
  975. package/src/cache/profile-registry.ts +46 -31
  976. package/src/cache/read-through-swr.ts +56 -12
  977. package/src/cache/segment-codec.ts +13 -21
  978. package/src/cache/shell-snapshot.ts +417 -0
  979. package/src/cache/tag-invalidation.ts +230 -0
  980. package/src/cache/taint.ts +55 -0
  981. package/src/cache/types.ts +194 -99
  982. package/src/cache/vercel/index.ts +11 -0
  983. package/src/cache/vercel/vercel-cache-store.ts +1132 -0
  984. package/src/client.rsc.tsx +42 -21
  985. package/src/client.tsx +117 -336
  986. package/src/cloudflare/index.ts +11 -0
  987. package/src/cloudflare/tracing.ts +108 -0
  988. package/src/component-utils.ts +19 -0
  989. package/src/components/DefaultDocument.tsx +8 -2
  990. package/src/context-var.ts +84 -2
  991. package/src/debug.ts +2 -2
  992. package/src/decode-loader-results.ts +52 -0
  993. package/src/defer.ts +185 -0
  994. package/src/deps/ssr.ts +0 -1
  995. package/src/encode-kv.ts +49 -0
  996. package/src/errors.ts +30 -4
  997. package/src/escape-script.ts +52 -0
  998. package/src/handle.ts +104 -34
  999. package/src/handles/MetaTags.tsx +24 -53
  1000. package/src/handles/Scripts.tsx +183 -0
  1001. package/src/handles/breadcrumbs.ts +93 -0
  1002. package/src/handles/deferred-resolution.ts +127 -0
  1003. package/src/handles/is-thenable.ts +18 -0
  1004. package/src/handles/meta.ts +14 -40
  1005. package/src/handles/script.ts +244 -0
  1006. package/src/host/cookie-handler.ts +9 -60
  1007. package/src/host/errors.ts +13 -22
  1008. package/src/host/index.ts +9 -5
  1009. package/src/host/pattern-matcher.ts +23 -52
  1010. package/src/host/router.ts +107 -99
  1011. package/src/host/testing.ts +40 -27
  1012. package/src/host/types.ts +37 -4
  1013. package/src/host/utils.ts +1 -1
  1014. package/src/href-client.ts +137 -22
  1015. package/src/index.rsc.ts +86 -30
  1016. package/src/index.ts +158 -68
  1017. package/src/internal-debug.ts +11 -10
  1018. package/src/loader-store.ts +500 -0
  1019. package/src/loader.rsc.ts +20 -13
  1020. package/src/loader.ts +12 -11
  1021. package/src/missing-id-error.ts +68 -0
  1022. package/src/outlet-context.ts +1 -1
  1023. package/src/outlet-provider.tsx +1 -5
  1024. package/src/prerender/param-hash.ts +16 -16
  1025. package/src/prerender/store.ts +63 -26
  1026. package/src/prerender.ts +215 -86
  1027. package/src/redirect-origin.ts +114 -0
  1028. package/src/regex-escape.ts +8 -0
  1029. package/src/render-error-thrower.tsx +20 -0
  1030. package/src/response-utils.ts +62 -0
  1031. package/src/reverse.ts +65 -15
  1032. package/src/root-error-boundary.tsx +1 -19
  1033. package/src/route-content-wrapper.tsx +19 -77
  1034. package/src/route-definition/dsl-helpers.ts +485 -303
  1035. package/src/route-definition/helper-factories.ts +28 -140
  1036. package/src/route-definition/helpers-types.ts +153 -77
  1037. package/src/route-definition/index.ts +4 -5
  1038. package/src/route-definition/redirect.ts +53 -12
  1039. package/src/route-definition/resolve-handler-use.ts +160 -0
  1040. package/src/route-definition/use-item-types.ts +29 -0
  1041. package/src/route-map-builder.ts +48 -21
  1042. package/src/route-types.ts +37 -46
  1043. package/src/router/basename.ts +14 -0
  1044. package/src/router/content-negotiation.ts +164 -17
  1045. package/src/router/error-handling.ts +45 -18
  1046. package/src/router/find-match.ts +130 -29
  1047. package/src/router/handler-context.ts +110 -39
  1048. package/src/router/instrument.ts +355 -0
  1049. package/src/router/intercept-resolution.ts +50 -24
  1050. package/src/router/lazy-includes.ts +89 -63
  1051. package/src/router/loader-resolution.ts +286 -56
  1052. package/src/router/logging.ts +5 -8
  1053. package/src/router/manifest.ts +105 -56
  1054. package/src/router/match-api.ts +179 -219
  1055. package/src/router/match-context.ts +0 -22
  1056. package/src/router/match-handlers.ts +211 -165
  1057. package/src/router/match-middleware/background-revalidation.ts +66 -22
  1058. package/src/router/match-middleware/cache-lookup.ts +214 -263
  1059. package/src/router/match-middleware/cache-store.ts +105 -50
  1060. package/src/router/match-middleware/intercept-resolution.ts +8 -28
  1061. package/src/router/match-middleware/segment-resolution.ts +52 -18
  1062. package/src/router/match-pipelines.ts +1 -42
  1063. package/src/router/match-result.ts +127 -52
  1064. package/src/router/metrics.ts +217 -26
  1065. package/src/router/middleware-types.ts +24 -110
  1066. package/src/router/middleware.ts +412 -199
  1067. package/src/router/navigation-snapshot.ts +133 -0
  1068. package/src/router/params-util.ts +23 -0
  1069. package/src/router/parse-pattern.ts +115 -0
  1070. package/src/router/pattern-matching.ts +183 -137
  1071. package/src/router/prefetch-cache-ttl.ts +51 -0
  1072. package/src/router/prefetch-limits.ts +37 -0
  1073. package/src/router/prerender-match.ts +207 -58
  1074. package/src/router/preview-match.ts +35 -103
  1075. package/src/router/request-classification.ts +291 -0
  1076. package/src/router/revalidation.ts +144 -74
  1077. package/src/router/route-snapshot.ts +256 -0
  1078. package/src/router/router-context.ts +11 -29
  1079. package/src/router/router-interfaces.ts +160 -36
  1080. package/src/router/router-options.ts +215 -23
  1081. package/src/router/router-registry.ts +2 -5
  1082. package/src/router/segment-resolution/fresh.ts +318 -77
  1083. package/src/router/segment-resolution/helpers.ts +116 -31
  1084. package/src/router/segment-resolution/loader-cache.ts +156 -39
  1085. package/src/router/segment-resolution/loader-mask.ts +67 -0
  1086. package/src/router/segment-resolution/loader-snapshot.ts +308 -0
  1087. package/src/router/segment-resolution/revalidation.ts +496 -391
  1088. package/src/router/segment-resolution/static-store.ts +19 -5
  1089. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1090. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1091. package/src/router/segment-resolution.ts +5 -1
  1092. package/src/router/segment-wrappers.ts +8 -5
  1093. package/src/router/state-cookie-name.ts +33 -0
  1094. package/src/router/substitute-pattern-params.ts +75 -0
  1095. package/src/router/telemetry-otel.ts +160 -200
  1096. package/src/router/telemetry.ts +105 -20
  1097. package/src/router/timeout.ts +0 -20
  1098. package/src/router/tracing.ts +215 -0
  1099. package/src/router/trie-matching.ts +188 -58
  1100. package/src/router/types.ts +10 -63
  1101. package/src/router/url-params.ts +57 -0
  1102. package/src/router.ts +224 -65
  1103. package/src/rsc/full-payload.ts +70 -0
  1104. package/src/rsc/handler-context.ts +3 -2
  1105. package/src/rsc/handler.ts +726 -457
  1106. package/src/rsc/helpers.ts +168 -46
  1107. package/src/rsc/index.ts +2 -25
  1108. package/src/rsc/json-route-result.ts +38 -0
  1109. package/src/rsc/loader-fetch.ts +127 -31
  1110. package/src/rsc/manifest-init.ts +33 -42
  1111. package/src/rsc/nonce.ts +10 -1
  1112. package/src/rsc/origin-guard.ts +39 -25
  1113. package/src/rsc/progressive-enhancement.ts +159 -23
  1114. package/src/rsc/redirect-guard.ts +100 -0
  1115. package/src/rsc/response-cache-serve.ts +238 -0
  1116. package/src/rsc/response-error.ts +79 -12
  1117. package/src/rsc/response-route-handler.ts +99 -189
  1118. package/src/rsc/rsc-rendering.ts +516 -104
  1119. package/src/rsc/runtime-warnings.ts +23 -10
  1120. package/src/rsc/server-action.ts +293 -115
  1121. package/src/rsc/shell-capture.ts +1166 -0
  1122. package/src/rsc/shell-serve.ts +181 -0
  1123. package/src/rsc/ssr-setup.ts +144 -0
  1124. package/src/rsc/transition-gate.ts +89 -0
  1125. package/src/rsc/types.ts +64 -6
  1126. package/src/runtime-env.ts +18 -0
  1127. package/src/search-params.ts +49 -41
  1128. package/src/segment-content-promise.ts +67 -0
  1129. package/src/segment-loader-promise.ts +167 -0
  1130. package/src/segment-system.tsx +418 -131
  1131. package/src/serialize.ts +243 -0
  1132. package/src/server/context.ts +375 -63
  1133. package/src/server/cookie-parse.ts +32 -0
  1134. package/src/server/cookie-store.ts +152 -5
  1135. package/src/server/handle-store.ts +40 -38
  1136. package/src/server/loader-registry.ts +38 -46
  1137. package/src/server/request-context.ts +585 -178
  1138. package/src/server.ts +6 -0
  1139. package/src/ssr/index.tsx +467 -174
  1140. package/src/ssr/inject-rsc-eager.ts +167 -0
  1141. package/src/ssr/ssr-root.tsx +228 -0
  1142. package/src/static-handler.ts +27 -18
  1143. package/src/testing/cache-status.ts +162 -0
  1144. package/src/testing/collect-handle.ts +46 -0
  1145. package/src/testing/dispatch.ts +813 -0
  1146. package/src/testing/dom.entry.ts +22 -0
  1147. package/src/testing/e2e/fixture.ts +188 -0
  1148. package/src/testing/e2e/index.ts +128 -0
  1149. package/src/testing/e2e/matchers.ts +35 -0
  1150. package/src/testing/e2e/page-helpers.ts +272 -0
  1151. package/src/testing/e2e/parity.ts +387 -0
  1152. package/src/testing/e2e/server.ts +195 -0
  1153. package/src/testing/flight-matchers.ts +97 -0
  1154. package/src/testing/flight-normalize.ts +11 -0
  1155. package/src/testing/flight-runtime.d.ts +57 -0
  1156. package/src/testing/flight-tree.ts +682 -0
  1157. package/src/testing/flight.entry.ts +52 -0
  1158. package/src/testing/flight.ts +257 -0
  1159. package/src/testing/generated-routes.ts +199 -0
  1160. package/src/testing/index.ts +105 -0
  1161. package/src/testing/internal/context.ts +371 -0
  1162. package/src/testing/internal/flight-client-globals.ts +30 -0
  1163. package/src/testing/internal/seed-vars.ts +54 -0
  1164. package/src/testing/render-handler.ts +357 -0
  1165. package/src/testing/render-route.tsx +584 -0
  1166. package/src/testing/run-loader.ts +385 -0
  1167. package/src/testing/run-middleware.ts +205 -0
  1168. package/src/testing/run-transition-when.ts +164 -0
  1169. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1170. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1171. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1172. package/src/testing/vitest-stubs/version.ts +5 -0
  1173. package/src/testing/vitest.ts +305 -0
  1174. package/src/theme/ThemeProvider.tsx +56 -84
  1175. package/src/theme/ThemeScript.tsx +7 -9
  1176. package/src/theme/constants.ts +52 -13
  1177. package/src/theme/index.ts +3 -19
  1178. package/src/theme/theme-context.ts +1 -5
  1179. package/src/theme/theme-script.ts +22 -21
  1180. package/src/theme/use-theme.ts +0 -3
  1181. package/src/types/boundaries.ts +0 -35
  1182. package/src/types/cache-types.ts +17 -8
  1183. package/src/types/error-types.ts +30 -90
  1184. package/src/types/global-namespace.ts +54 -41
  1185. package/src/types/handler-context.ts +237 -89
  1186. package/src/types/index.ts +3 -10
  1187. package/src/types/loader-types.ts +44 -15
  1188. package/src/types/request-scope.ts +112 -0
  1189. package/src/types/route-config.ts +23 -46
  1190. package/src/types/route-entry.ts +19 -7
  1191. package/src/types/segments.ts +137 -19
  1192. package/src/urls/include-helper.ts +40 -75
  1193. package/src/urls/include-provider.ts +71 -0
  1194. package/src/urls/index.ts +2 -11
  1195. package/src/urls/path-helper-types.ts +102 -23
  1196. package/src/urls/path-helper.ts +62 -111
  1197. package/src/urls/pattern-types.ts +84 -19
  1198. package/src/urls/response-types.ts +25 -22
  1199. package/src/urls/type-extraction.ts +98 -154
  1200. package/src/urls/urls-function.ts +1 -19
  1201. package/src/use-loader.tsx +346 -89
  1202. package/src/vercel/index.ts +11 -0
  1203. package/src/vercel/tracing.ts +88 -0
  1204. package/src/vite/debug.ts +185 -0
  1205. package/src/vite/discovery/bundle-postprocess.ts +64 -91
  1206. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1207. package/src/vite/discovery/discover-routers.ts +147 -88
  1208. package/src/vite/discovery/discovery-errors.ts +255 -0
  1209. package/src/vite/discovery/gate-state.ts +171 -0
  1210. package/src/vite/discovery/prerender-collection.ts +247 -145
  1211. package/src/vite/discovery/route-types-writer.ts +40 -84
  1212. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1213. package/src/vite/discovery/state.ts +61 -13
  1214. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1215. package/src/vite/index.ts +19 -3
  1216. package/src/vite/inject-client-debug.ts +88 -0
  1217. package/src/vite/plugin-types.ts +234 -62
  1218. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1219. package/src/vite/plugins/client-ref-dedup.ts +120 -0
  1220. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1221. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1222. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1223. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1224. package/src/vite/plugins/expose-action-id.ts +49 -98
  1225. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1226. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1227. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1228. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1229. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1230. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1231. package/src/vite/plugins/performance-tracks.ts +89 -0
  1232. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1233. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1234. package/src/vite/plugins/vercel-output.ts +384 -0
  1235. package/src/vite/plugins/version-injector.ts +40 -29
  1236. package/src/vite/plugins/version-plugin.ts +46 -37
  1237. package/src/vite/plugins/virtual-entries.ts +138 -27
  1238. package/src/vite/rango.ts +356 -295
  1239. package/src/vite/router-discovery.ts +1106 -166
  1240. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1241. package/src/vite/utils/banner.ts +4 -4
  1242. package/src/vite/utils/bundle-analysis.ts +10 -15
  1243. package/src/vite/utils/client-chunks.ts +184 -0
  1244. package/src/vite/utils/directive-prologue.ts +40 -0
  1245. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1246. package/src/vite/utils/manifest-utils.ts +4 -59
  1247. package/src/vite/utils/package-resolution.ts +20 -52
  1248. package/src/vite/utils/prerender-utils.ts +158 -38
  1249. package/src/vite/utils/shared-utils.ts +144 -44
  1250. package/CLAUDE.md +0 -5
  1251. package/src/browser/action-response-classifier.ts +0 -99
  1252. package/src/browser/shallow.ts +0 -40
  1253. package/src/route-definition/route-function.ts +0 -119
  1254. package/src/router/middleware-cookies.ts +0 -55
@@ -10,7 +10,12 @@ import type { ReactNode } from "react";
10
10
  import { invariant } from "../../errors";
11
11
  import { revalidate } from "../loader-resolution.js";
12
12
  import { evaluateRevalidation } from "../revalidation.js";
13
- import type { EntryData } from "../../server/context";
13
+ import {
14
+ getParallelEntries,
15
+ getParallelSlotEntries,
16
+ type EntryData,
17
+ type ParallelEntryData,
18
+ } from "../../server/context";
14
19
  import type {
15
20
  HandlerContext,
16
21
  InternalHandlerContext,
@@ -30,53 +35,41 @@ import {
30
35
  import { resolveLoaderData } from "./loader-cache.js";
31
36
  import {
32
37
  handleHandlerResult,
38
+ warnOnStreamedResponse,
33
39
  tryStaticHandler,
34
40
  tryStaticSlot,
35
41
  resolveLayoutComponent,
36
42
  resolveWithErrorBoundary,
43
+ buildLoaderErrorContext,
37
44
  } from "./helpers.js";
45
+ import { applyViewTransitionDefault } from "./view-transition-default.js";
38
46
  import { getRouterContext } from "../router-context.js";
39
- import { resolveSink, safeEmit } from "../telemetry.js";
40
-
41
- // ---------------------------------------------------------------------------
42
- // Telemetry helpers
43
- // ---------------------------------------------------------------------------
47
+ import { observeEvent, observeHandler } from "../instrument.js";
48
+ import { observeStreamedHandler } from "./streamed-handler-telemetry.js";
49
+ import {
50
+ track,
51
+ RangoContext,
52
+ runInsideLoaderScope,
53
+ } from "../../server/context.js";
44
54
 
45
55
  /**
46
- * Attach a fire-and-forget rejection observer to a streamed handler promise.
47
- * Silently no-ops when called outside RouterContext (e.g. in unit tests).
56
+ * Trace a parallel slot that's being force-rendered on a full refetch (client
57
+ * has no cached state). User revalidate fns are bypassed in this case — see
58
+ * the call sites for the load-bearing rationale.
48
59
  */
49
- function observeStreamedHandler(
50
- promise: Promise<ReactNode>,
51
- segmentId: string,
52
- segmentType: string,
53
- pathname?: string,
54
- routeKey?: string,
55
- params?: Record<string, string>,
60
+ function traceFullRefetchedParallelSlot(
61
+ parallelId: string,
62
+ belongsToRoute: boolean,
56
63
  ): void {
57
- let routerCtx;
58
- try {
59
- routerCtx = getRouterContext();
60
- } catch {
61
- return;
62
- }
63
- if (!routerCtx?.telemetry) return;
64
- const sink = resolveSink(routerCtx.telemetry);
65
- const reqId = routerCtx.requestId;
66
- promise.catch((err: unknown) => {
67
- const errorObj = err instanceof Error ? err : new Error(String(err));
68
- safeEmit(sink, {
69
- type: "handler.error",
70
- timestamp: performance.now(),
71
- requestId: reqId,
72
- segmentId,
73
- segmentType,
74
- error: errorObj,
75
- handledByBoundary: true,
76
- pathname,
77
- routeKey,
78
- params,
79
- });
64
+ if (!isTraceActive()) return;
65
+ pushRevalidationTraceEntry({
66
+ segmentId: parallelId,
67
+ segmentType: "parallel",
68
+ belongsToRoute,
69
+ source: "parallel",
70
+ defaultShouldRevalidate: true,
71
+ finalShouldRevalidate: true,
72
+ reason: "full-refetch",
80
73
  });
81
74
  }
82
75
 
@@ -95,23 +88,14 @@ function emitRevalidationDecision(
95
88
  routeKey: string,
96
89
  shouldRevalidate: boolean,
97
90
  ): void {
98
- let routerCtx;
99
- try {
100
- routerCtx = getRouterContext();
101
- } catch {
102
- return;
103
- }
104
- if (routerCtx?.telemetry) {
105
- safeEmit(resolveSink(routerCtx.telemetry), {
106
- type: "revalidation.decision",
107
- timestamp: performance.now(),
108
- requestId: routerCtx.requestId,
109
- segmentId,
110
- pathname,
111
- routeKey,
112
- shouldRevalidate,
113
- });
114
- }
91
+ observeEvent({
92
+ type: "revalidation.decision",
93
+ timestamp: performance.now(),
94
+ segmentId,
95
+ pathname,
96
+ routeKey,
97
+ shouldRevalidate,
98
+ });
115
99
  }
116
100
 
117
101
  // ---------------------------------------------------------------------------
@@ -216,6 +200,10 @@ export async function resolveLoadersWithRevalidation<TEnv>(
216
200
  ),
217
201
  );
218
202
 
203
+ // Partial (revalidation) render path: a throwing DSL loader must still fire
204
+ // onError/loader.error. isPartial flags the reporting phase accordingly.
205
+ const errorContext = { ...buildLoaderErrorContext(ctx), isPartial: true };
206
+
219
207
  const loadersToRun = revalidationChecks.filter((c) => c.shouldRun);
220
208
  const segments: ResolvedSegment[] = loadersToRun.map(
221
209
  ({ loaderEntry, loader, segmentId, index }) => ({
@@ -227,10 +215,13 @@ export async function resolveLoadersWithRevalidation<TEnv>(
227
215
  params: ctx.params,
228
216
  loaderId: loader.$$id,
229
217
  loaderData: deps.wrapLoaderPromise(
230
- resolveLoaderData(loaderEntry, ctx, ctx.pathname),
218
+ runInsideLoaderScope(() =>
219
+ resolveLoaderData(loaderEntry, ctx, ctx.pathname),
220
+ ),
231
221
  entry,
232
222
  segmentId,
233
223
  ctx.pathname,
224
+ errorContext,
234
225
  ),
235
226
  belongsToRoute,
236
227
  }),
@@ -257,26 +248,95 @@ export async function resolveLoadersOnlyWithRevalidation<TEnv>(
257
248
  ): Promise<{ segments: ResolvedSegment[]; matchedIds: string[] }> {
258
249
  const allLoaderSegments: ResolvedSegment[] = [];
259
250
  const allMatchedIds: string[] = [];
251
+ const seenIds = new Set<string>();
252
+
253
+ async function collectEntryLoaders(
254
+ entry: EntryData,
255
+ belongsToRoute: boolean,
256
+ shortCodeOverride?: string,
257
+ ): Promise<void> {
258
+ // Skip if all loaders from this entry have already been resolved
259
+ // via a parent (e.g., cache boundary wrapping a layout with shared loaders).
260
+ const loaderEntries = entry.loader ?? [];
261
+ const sc = shortCodeOverride ?? entry.shortCode;
262
+ const allAlreadySeen =
263
+ loaderEntries.length > 0 &&
264
+ loaderEntries.every((le, i) =>
265
+ seenIds.has(`${sc}D${i}.${le.loader.$$id}`),
266
+ );
267
+ if (!allAlreadySeen) {
268
+ const { segments, matchedIds } = await resolveLoadersWithRevalidation(
269
+ entry,
270
+ context,
271
+ belongsToRoute,
272
+ clientSegmentIds,
273
+ prevParams,
274
+ request,
275
+ prevUrl,
276
+ nextUrl,
277
+ routeKey,
278
+ deps,
279
+ actionContext,
280
+ shortCodeOverride,
281
+ stale,
282
+ );
283
+ for (const seg of segments) {
284
+ if (!seenIds.has(seg.id)) {
285
+ seenIds.add(seg.id);
286
+ allLoaderSegments.push(seg);
287
+ }
288
+ }
289
+ allMatchedIds.push(...matchedIds);
290
+ }
291
+
292
+ const seenParallelEntryIds = new Set<string>();
293
+ for (const parallelEntry of getParallelEntries(entry.parallel)) {
294
+ if (seenParallelEntryIds.has(parallelEntry.id)) continue;
295
+ seenParallelEntryIds.add(parallelEntry.id);
296
+ await collectEntryLoaders(parallelEntry, belongsToRoute, entry.shortCode);
297
+ }
298
+
299
+ const childBelongsToRoute = belongsToRoute || entry.type === "route";
300
+ for (const layoutEntry of entry.layout) {
301
+ await collectEntryLoaders(layoutEntry, childBelongsToRoute);
302
+ // Inherit route loaders for orphan layouts with parallels.
303
+ // Resolve directly — do NOT re-enter collectEntryLoaders with the
304
+ // route entry, as that would re-iterate route.layout and loop.
305
+ if (
306
+ entry.type === "route" &&
307
+ entry.loader &&
308
+ entry.loader.length > 0 &&
309
+ Object.keys(layoutEntry.parallel).length > 0
310
+ ) {
311
+ const inherited = await resolveLoadersWithRevalidation(
312
+ entry,
313
+ context,
314
+ childBelongsToRoute,
315
+ clientSegmentIds,
316
+ prevParams,
317
+ request,
318
+ prevUrl,
319
+ nextUrl,
320
+ routeKey,
321
+ deps,
322
+ actionContext,
323
+ layoutEntry.shortCode,
324
+ stale,
325
+ );
326
+ for (const seg of inherited.segments) {
327
+ if (!seenIds.has(seg.id)) {
328
+ seenIds.add(seg.id);
329
+ seg._inherited = true;
330
+ allLoaderSegments.push(seg);
331
+ }
332
+ }
333
+ allMatchedIds.push(...inherited.matchedIds);
334
+ }
335
+ }
336
+ }
260
337
 
261
338
  for (const entry of entries) {
262
- const belongsToRoute = entry.type === "route";
263
- const { segments, matchedIds } = await resolveLoadersWithRevalidation(
264
- entry,
265
- context,
266
- belongsToRoute,
267
- clientSegmentIds,
268
- prevParams,
269
- request,
270
- prevUrl,
271
- nextUrl,
272
- routeKey,
273
- deps,
274
- actionContext,
275
- undefined, // shortCodeOverride
276
- stale,
277
- );
278
- allLoaderSegments.push(...segments);
279
- allMatchedIds.push(...matchedIds);
339
+ await collectEntryLoaders(entry, entry.type === "route");
280
340
  }
281
341
 
282
342
  return { segments: allLoaderSegments, matchedIds: allMatchedIds };
@@ -300,22 +360,20 @@ export function buildEntryRevalidateMap(
300
360
  map.set(entry.shortCode, { entry, revalidate: entry.revalidate });
301
361
 
302
362
  if (entry.type !== "parallel") {
303
- for (const parallelEntry of entry.parallel) {
304
- if (parallelEntry.type === "parallel") {
305
- const slots = Object.keys(parallelEntry.handler) as `@${string}`[];
306
- for (const slot of slots) {
307
- const parallelId = `${parallelEntry.shortCode}.${slot}`;
308
- map.set(parallelId, {
309
- entry: parallelEntry,
310
- revalidate: parallelEntry.revalidate,
311
- });
312
- }
313
- }
363
+ for (const { slot, entry: parallelEntry } of getParallelSlotEntries(
364
+ entry.parallel,
365
+ )) {
366
+ const parallelParentShortCode = parentShortCode ?? entry.shortCode;
367
+ const parallelId = `${parallelParentShortCode}.${slot}`;
368
+ map.set(parallelId, {
369
+ entry: parallelEntry,
370
+ revalidate: parallelEntry.revalidate,
371
+ });
314
372
  }
315
373
  }
316
374
 
317
375
  for (const layoutEntry of entry.layout) {
318
- processEntry(layoutEntry);
376
+ processEntry(layoutEntry, entry.shortCode);
319
377
  }
320
378
  }
321
379
 
@@ -326,6 +384,97 @@ export function buildEntryRevalidateMap(
326
384
  return map;
327
385
  }
328
386
 
387
+ /**
388
+ * Resolve the component for a single parallel slot on the revalidation path.
389
+ * Pure component resolution shared verbatim by
390
+ * resolveParallelSegmentsWithRevalidation and the orphan-inlined loop in
391
+ * resolveOrphanLayoutWithRevalidation: try the static slot cache, else run the
392
+ * slot handler (pinning _currentSegmentId to the slot id so handle pushes land
393
+ * in the slot's own bucket, and wrapping a streamed handler). Returns the
394
+ * resolved component and whether the handler actually ran. Does NOT touch the
395
+ * revalidate-default policy (the caller decides shouldResolve, including the
396
+ * orphan-vs-main defaultOverride divergence) or loader-resolution ordering.
397
+ */
398
+ async function resolveParallelSlotComponent<TEnv>(args: {
399
+ shouldResolve: boolean;
400
+ parallelEntry: ParallelEntryData;
401
+ slot: string;
402
+ parallelId: string;
403
+ handler:
404
+ | ((ctx: HandlerContext<any, TEnv>) => ReactNode | Promise<ReactNode>)
405
+ | ReactNode
406
+ | undefined;
407
+ context: HandlerContext<any, TEnv>;
408
+ deps: SegmentResolutionDeps<TEnv>;
409
+ routeKey: string;
410
+ params: Record<string, string>;
411
+ }): Promise<{ component: ReactNode | undefined; handlerRan: boolean }> {
412
+ const {
413
+ shouldResolve,
414
+ parallelEntry,
415
+ slot,
416
+ parallelId,
417
+ handler,
418
+ context,
419
+ deps,
420
+ routeKey,
421
+ params,
422
+ } = args;
423
+
424
+ let component: ReactNode | undefined;
425
+ let handlerRan = false;
426
+ if (shouldResolve) {
427
+ component = await tryStaticSlot(parallelEntry, slot, parallelId);
428
+ // tryStaticSlot returning a value means the static cache supplied the
429
+ // component — handler did NOT run. handlerRan stays false.
430
+ }
431
+ if (component === undefined) {
432
+ const hasLoadingFallback =
433
+ parallelEntry.loading !== undefined && parallelEntry.loading !== false;
434
+ if (!shouldResolve) {
435
+ component = null;
436
+ } else if (handler === undefined) {
437
+ // Handler evicted (production static slot) but static lookup missed.
438
+ // Nothing to render — use null so the client keeps its cached version.
439
+ component = null;
440
+ } else {
441
+ // Slot-keyed pushes — slot owns its own bucket, parent layout owns its
442
+ // own. On slot-only revalidations the partial merge updates only the
443
+ // slot's bucket; the parent's bucket stays intact.
444
+ (context as InternalHandlerContext<any, TEnv>)._currentSegmentId =
445
+ parallelId;
446
+ handlerRan = true;
447
+ if (hasLoadingFallback) {
448
+ const result =
449
+ typeof handler === "function" ? handler(context) : handler;
450
+ if (result instanceof Promise) {
451
+ warnOnStreamedResponse(result, parallelId);
452
+ const tracked = deps.trackHandler(result, {
453
+ segmentId: parallelId,
454
+ segmentType: "parallel",
455
+ });
456
+ observeStreamedHandler(
457
+ tracked,
458
+ parallelId,
459
+ "parallel",
460
+ context.pathname,
461
+ routeKey,
462
+ params,
463
+ );
464
+ component = tracked as ReactNode;
465
+ } else {
466
+ component = result as ReactNode;
467
+ }
468
+ } else {
469
+ component =
470
+ typeof handler === "function" ? await handler(context) : handler;
471
+ }
472
+ }
473
+ }
474
+
475
+ return { component, handlerRan };
476
+ }
477
+
329
478
  /**
330
479
  * Resolve parallel segments with revalidation.
331
480
  */
@@ -343,11 +492,35 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
343
492
  deps: SegmentResolutionDeps<TEnv>,
344
493
  actionContext?: ActionContext,
345
494
  stale?: boolean,
495
+ options?: {
496
+ /**
497
+ * Seed for an unknown parent-chain slot (slot not in clientSegmentIds) when
498
+ * there are no deciding revalidate fns. "type-derived" (default, main path):
499
+ * `belongsToRoute || isNewParent`. "force-render" (orphan path): always
500
+ * `true` — orphan parallels always belong to the route and must render
501
+ * unless the user opts out via revalidate(); the #482 blank-parent-chain-
502
+ * slot guard.
503
+ */
504
+ parentChainDefault?: "type-derived" | "force-render";
505
+ /**
506
+ * When a slot's loaders are resolved relative to the slot segment push.
507
+ * "after" (default, main path) pushes the slot segment first; "before"
508
+ * (orphan path) resolves loaders first. This only changes the
509
+ * segments/matchedIds emission ORDER (the client reconciler is insensitive
510
+ * to it: loader sub-ids are filtered out and slots are re-grouped by parent).
511
+ */
512
+ loaderOrder?: "after" | "before";
513
+ },
346
514
  ): Promise<SegmentRevalidationResult> {
347
515
  const segments: ResolvedSegment[] = [];
348
516
  const matchedIds: string[] = [];
517
+ const parentChainDefault = options?.parentChainDefault ?? "type-derived";
518
+ const loaderOrder = options?.loaderOrder ?? "after";
349
519
 
350
- for (const parallelEntry of entry.parallel) {
520
+ const resolvedParallelEntries = new Set<string>();
521
+ for (const { slot, entry: parallelEntry } of getParallelSlotEntries(
522
+ entry.parallel,
523
+ )) {
351
524
  invariant(
352
525
  parallelEntry.type === "parallel",
353
526
  `Expected parallel entry, got: ${parallelEntry.type}`,
@@ -358,141 +531,78 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
358
531
  | ((ctx: HandlerContext<any, TEnv>) => ReactNode | Promise<ReactNode>)
359
532
  | ReactNode
360
533
  >;
534
+ // In production, static handler bodies are evicted and the slot value
535
+ // may be undefined. The static store holds the pre-rendered component.
536
+ // We defer the handler check until after tryStaticSlot.
537
+ const handler = slots[slot];
361
538
 
362
- for (const [slot, handler] of Object.entries(slots)) {
363
- const parallelId = `${entry.shortCode}.${slot}`;
364
-
365
- const isFullRefetch = clientSegmentIds.size === 0;
366
- // When the parent layout is new (not in client's segment set),
367
- // all its parallel children must be resolved and tracked.
368
- // Without this, navigating to a new layout with parallels
369
- // (e.g., BlogLayout with @sidebar) from a different route
370
- // would silently drop those parallel segments.
371
- const isNewParent = !clientSegmentIds.has(entry.shortCode);
372
- if (
373
- isFullRefetch ||
374
- clientSegmentIds.has(parallelId) ||
375
- belongsToRoute ||
376
- isNewParent
377
- ) {
378
- matchedIds.push(parallelId);
379
- }
380
-
381
- const shouldResolve = await (async () => {
382
- if (isFullRefetch) {
383
- if (isTraceActive()) {
384
- pushRevalidationTraceEntry({
385
- segmentId: parallelId,
386
- segmentType: "parallel",
387
- belongsToRoute,
388
- source: "parallel",
389
- defaultShouldRevalidate: true,
390
- finalShouldRevalidate: true,
391
- reason: "full-refetch",
392
- });
393
- }
394
- return true;
395
- }
396
- if (!clientSegmentIds.has(parallelId)) {
397
- const result = belongsToRoute || isNewParent;
398
- if (isTraceActive()) {
399
- pushRevalidationTraceEntry({
400
- segmentId: parallelId,
401
- segmentType: "parallel",
402
- belongsToRoute,
403
- source: "parallel",
404
- defaultShouldRevalidate: result,
405
- finalShouldRevalidate: result,
406
- reason: result ? "new-segment" : "skip-parent-chain",
407
- });
408
- }
409
- return result;
410
- }
539
+ const parallelId = `${entry.shortCode}.${slot}`;
411
540
 
412
- const dummySegment: ResolvedSegment = {
413
- id: parallelId,
414
- namespace: parallelEntry.id,
415
- type: "parallel",
416
- index: 0,
417
- component: null as any,
418
- params,
419
- slot,
420
- belongsToRoute,
421
- parallelName: `${parallelEntry.id}.${slot}`,
422
- ...(parallelEntry.mountPath
423
- ? { mountPath: parallelEntry.mountPath }
424
- : {}),
425
- };
541
+ const isFullRefetch = clientSegmentIds.size === 0;
542
+ const isNewParent = !clientSegmentIds.has(entry.shortCode);
426
543
 
427
- return await evaluateRevalidation({
428
- segment: dummySegment,
429
- prevParams,
430
- getPrevSegment: null,
431
- request,
432
- prevUrl,
433
- nextUrl,
434
- revalidations: parallelEntry.revalidate.map((fn, i) => ({
435
- name: `revalidate${i}`,
436
- fn,
437
- })),
438
- routeKey,
439
- context,
440
- actionContext,
441
- stale,
442
- traceSource: "parallel",
443
- });
444
- })();
445
- emitRevalidationDecision(
446
- parallelId,
447
- context.pathname,
544
+ // A slot's loaders (never cached) are deduped per parallel entry and
545
+ // emitted either before or after the slot segment per loaderOrder.
546
+ const resolveSlotLoaders = async () => {
547
+ if (resolvedParallelEntries.has(parallelEntry.id)) return;
548
+ const loaderResult = await resolveLoadersWithRevalidation(
549
+ parallelEntry,
550
+ context,
551
+ belongsToRoute,
552
+ clientSegmentIds,
553
+ prevParams,
554
+ request,
555
+ prevUrl,
556
+ nextUrl,
448
557
  routeKey,
449
- shouldResolve,
558
+ deps,
559
+ actionContext,
560
+ entry.shortCode,
561
+ stale,
450
562
  );
563
+ segments.push(...loaderResult.segments);
564
+ matchedIds.push(...loaderResult.matchedIds);
565
+ resolvedParallelEntries.add(parallelEntry.id);
566
+ };
451
567
 
452
- let component: ReactNode | undefined;
453
- if (shouldResolve) {
454
- component = await tryStaticSlot(parallelEntry, slot, parallelId);
455
- }
456
- if (component === undefined) {
457
- const hasLoadingFallback =
458
- parallelEntry.loading !== undefined &&
459
- parallelEntry.loading !== false;
460
- if (!shouldResolve) {
461
- component = null;
462
- } else if (hasLoadingFallback) {
463
- const result =
464
- typeof handler === "function" ? handler(context) : handler;
465
- if (result instanceof Promise) {
466
- const tracked = deps.trackHandler(result, {
467
- segmentId: parallelId,
468
- segmentType: "parallel",
469
- });
470
- observeStreamedHandler(
471
- tracked,
472
- parallelId,
473
- "parallel",
474
- context.pathname,
475
- routeKey,
476
- params,
477
- );
478
- component = tracked as ReactNode;
479
- } else {
480
- component = result as ReactNode;
481
- }
482
- } else {
483
- component =
484
- typeof handler === "function" ? await handler(context) : handler;
485
- }
568
+ if (loaderOrder === "before") {
569
+ await resolveSlotLoaders();
570
+ }
571
+ // Always announce the slot in matchedIds — it's unconditionally appended
572
+ // to `segments` below, and a segment present in segments but missing from
573
+ // matched lets the client prune it (then it's missing from clientSegmentIds
574
+ // on the next request, perpetuating the staleness).
575
+ matchedIds.push(parallelId);
576
+
577
+ let shouldResolve: boolean;
578
+ if (isFullRefetch) {
579
+ // Client has nothing cached — slot MUST render. User revalidate fns are
580
+ // bypassed here because returning false would leave the segment blank
581
+ // with no client-side fallback.
582
+ traceFullRefetchedParallelSlot(parallelId, belongsToRoute);
583
+ shouldResolve = true;
584
+ } else {
585
+ // For non-empty client sets, consult user revalidate fns. When the slot
586
+ // is unknown to the client, override the type-derived default so the
587
+ // soft chain seeds with the right "new segment" / "parent-chain" value.
588
+ let defaultOverride: { value: boolean; reason: string } | undefined;
589
+ if (!clientSegmentIds.has(parallelId)) {
590
+ const value =
591
+ parentChainDefault === "force-render"
592
+ ? true
593
+ : belongsToRoute || isNewParent;
594
+ defaultOverride = {
595
+ value,
596
+ reason: value ? "new-segment" : "skip-parent-chain",
597
+ };
486
598
  }
487
599
 
488
- segments.push({
600
+ const dummySegment: ResolvedSegment = {
489
601
  id: parallelId,
490
602
  namespace: parallelEntry.id,
491
603
  type: "parallel",
492
604
  index: 0,
493
- component,
494
- loading: parallelEntry.loading === false ? null : parallelEntry.loading,
495
- transition: parallelEntry.transition,
605
+ component: null as any,
496
606
  params,
497
607
  slot,
498
608
  belongsToRoute,
@@ -500,27 +610,70 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
500
610
  ...(parallelEntry.mountPath
501
611
  ? { mountPath: parallelEntry.mountPath }
502
612
  : {}),
503
- });
504
- }
613
+ };
505
614
 
506
- if (!parallelEntry.loading) {
507
- const loaderResult = await resolveLoadersWithRevalidation(
508
- parallelEntry,
509
- context,
510
- belongsToRoute,
511
- clientSegmentIds,
615
+ shouldResolve = await evaluateRevalidation({
616
+ segment: dummySegment,
512
617
  prevParams,
618
+ getPrevSegment: null,
513
619
  request,
514
620
  prevUrl,
515
621
  nextUrl,
622
+ revalidations: parallelEntry.revalidate.map((fn, i) => ({
623
+ name: `revalidate${i}`,
624
+ fn,
625
+ })),
516
626
  routeKey,
517
- deps,
627
+ context,
518
628
  actionContext,
519
- entry.shortCode,
520
629
  stale,
521
- );
522
- segments.push(...loaderResult.segments);
523
- matchedIds.push(...loaderResult.matchedIds);
630
+ traceSource: "parallel",
631
+ defaultOverride,
632
+ });
633
+ }
634
+ emitRevalidationDecision(
635
+ parallelId,
636
+ context.pathname,
637
+ routeKey,
638
+ shouldResolve,
639
+ );
640
+
641
+ const { component, handlerRan } = await resolveParallelSlotComponent({
642
+ shouldResolve,
643
+ parallelEntry,
644
+ slot,
645
+ parallelId,
646
+ handler,
647
+ context,
648
+ deps,
649
+ routeKey,
650
+ params,
651
+ });
652
+
653
+ segments.push({
654
+ id: parallelId,
655
+ namespace: parallelEntry.id,
656
+ type: "parallel",
657
+ index: 0,
658
+ component,
659
+ loading: parallelEntry.loading === false ? null : parallelEntry.loading,
660
+ transition: applyViewTransitionDefault(
661
+ parallelEntry.transition,
662
+ deps.viewTransitionDefault,
663
+ parallelId,
664
+ ),
665
+ params,
666
+ slot,
667
+ _handlerRan: handlerRan,
668
+ belongsToRoute,
669
+ parallelName: `${parallelEntry.id}.${slot}`,
670
+ ...(parallelEntry.mountPath
671
+ ? { mountPath: parallelEntry.mountPath }
672
+ : {}),
673
+ });
674
+
675
+ if (loaderOrder === "after") {
676
+ await resolveSlotLoaders();
524
677
  }
525
678
  }
526
679
 
@@ -547,6 +700,7 @@ export async function resolveEntryHandlerWithRevalidation<TEnv>(
547
700
  ): Promise<{ segment: ResolvedSegment; matchedId: string }> {
548
701
  const matchedId = entry.shortCode;
549
702
 
703
+ let handlerRan = false;
550
704
  const component = await revalidate(
551
705
  async () => {
552
706
  const hasSegment = clientSegmentIds.has(entry.shortCode);
@@ -607,6 +761,8 @@ export async function resolveEntryHandlerWithRevalidation<TEnv>(
607
761
  context,
608
762
  actionContext,
609
763
  stale,
764
+ traceSource:
765
+ entry.type === "route" ? "route-handler" : "layout-handler",
610
766
  });
611
767
  emitRevalidationDecision(
612
768
  entry.shortCode,
@@ -621,20 +777,42 @@ export async function resolveEntryHandlerWithRevalidation<TEnv>(
621
777
  return shouldRevalidate;
622
778
  },
623
779
  async () => {
780
+ handlerRan = true;
781
+ const doneHandler = track(`handler:${entry.id}`, 2);
624
782
  (context as InternalHandlerContext<any, TEnv>)._currentSegmentId =
625
783
  entry.shortCode;
626
784
  if (entry.type === "layout" || entry.type === "cache") {
627
- return resolveLayoutComponent(entry, context);
785
+ const layoutComponent = await resolveLayoutComponent(entry, context);
786
+ doneHandler();
787
+ return layoutComponent;
628
788
  }
629
789
  const staticComponent = await tryStaticHandler(entry, entry.shortCode);
630
- if (staticComponent !== undefined) return staticComponent;
790
+ if (staticComponent !== undefined) {
791
+ doneHandler();
792
+ return staticComponent;
793
+ }
631
794
  const routeEntry = entry as Extract<EntryData, { type: "route" }>;
795
+ // For Passthrough routes at runtime, use the live handler instead of
796
+ // the build handler. At build time (context.build === true), always
797
+ // use the build handler from routeEntry.handler.
798
+ const handler =
799
+ !context.build && routeEntry.liveHandler
800
+ ? routeEntry.liveHandler
801
+ : routeEntry.handler;
632
802
  if (!routeEntry.loading) {
633
- return handleHandlerResult(await routeEntry.handler(context));
803
+ const result = handleHandlerResult(
804
+ await observeHandler(entry.id, handler, context),
805
+ );
806
+ doneHandler();
807
+ return result;
634
808
  }
635
809
  if (!actionContext) {
636
- const result = handleHandlerResult(routeEntry.handler(context));
810
+ const result = handleHandlerResult(
811
+ observeHandler(entry.id, handler, context),
812
+ );
637
813
  if (result instanceof Promise) {
814
+ warnOnStreamedResponse(result, routeEntry.id);
815
+ result.finally(doneHandler).catch(() => {});
638
816
  const tracked = deps.trackHandler(result, {
639
817
  segmentId: entry.shortCode,
640
818
  segmentType: entry.type,
@@ -649,24 +827,29 @@ export async function resolveEntryHandlerWithRevalidation<TEnv>(
649
827
  );
650
828
  return { content: tracked };
651
829
  }
830
+ doneHandler();
652
831
  return { content: result };
653
832
  }
654
833
  debugLog("segment.action", "resolving action route with awaited value", {
655
834
  entryId: entry.id,
656
835
  });
836
+ const actionResult = handleHandlerResult(
837
+ await observeHandler(entry.id, handler, context),
838
+ );
839
+ doneHandler();
657
840
  return {
658
- content: Promise.resolve(
659
- handleHandlerResult(await routeEntry.handler(context)),
660
- ),
841
+ content: Promise.resolve(actionResult),
661
842
  };
662
843
  },
663
844
  () => null,
664
845
  );
665
846
 
847
+ // Normalize void handlers (undefined) to null so the reconciler's
848
+ // component === null checks work consistently for both void and explicit null.
666
849
  const resolvedComponent =
667
850
  component && typeof component === "object" && "content" in component
668
- ? (component as { content: ReactNode }).content
669
- : component;
851
+ ? ((component as { content: ReactNode }).content ?? null)
852
+ : (component ?? null);
670
853
 
671
854
  const segment: ResolvedSegment = {
672
855
  id: entry.shortCode,
@@ -676,13 +859,18 @@ export async function resolveEntryHandlerWithRevalidation<TEnv>(
676
859
  index: 0,
677
860
  component: resolvedComponent,
678
861
  loading: entry.loading === false ? null : entry.loading,
679
- transition: entry.transition,
862
+ transition: applyViewTransitionDefault(
863
+ entry.transition,
864
+ deps.viewTransitionDefault,
865
+ entry.shortCode,
866
+ ),
680
867
  params,
681
868
  belongsToRoute,
682
869
  ...(entry.type === "layout" || entry.type === "cache"
683
870
  ? { layoutName: entry.id }
684
871
  : {}),
685
872
  ...(entry.mountPath ? { mountPath: entry.mountPath } : {}),
873
+ _handlerRan: handlerRan,
686
874
  };
687
875
 
688
876
  return { segment, matchedId };
@@ -701,7 +889,6 @@ export async function resolveSegmentWithRevalidation<TEnv>(
701
889
  request: Request,
702
890
  prevUrl: URL,
703
891
  nextUrl: URL,
704
- loaderPromises: Map<string, Promise<any>>,
705
892
  deps: SegmentResolutionDeps<TEnv>,
706
893
  actionContext?: ActionContext,
707
894
  stale?: boolean,
@@ -763,11 +950,11 @@ export async function resolveSegmentWithRevalidation<TEnv>(
763
950
  prevUrl,
764
951
  nextUrl,
765
952
  routeKey,
766
- loaderPromises,
767
953
  true,
768
954
  deps,
769
955
  actionContext,
770
956
  stale,
957
+ entry,
771
958
  );
772
959
  segments.push(...orphanResult.segments);
773
960
  matchedIds.push(...orphanResult.matchedIds);
@@ -847,7 +1034,6 @@ export async function resolveSegmentWithRevalidation<TEnv>(
847
1034
  prevUrl,
848
1035
  nextUrl,
849
1036
  routeKey,
850
- loaderPromises,
851
1037
  false,
852
1038
  deps,
853
1039
  actionContext,
@@ -874,11 +1060,12 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
874
1060
  prevUrl: URL,
875
1061
  nextUrl: URL,
876
1062
  routeKey: string,
877
- loaderPromises: Map<string, Promise<any>>,
878
1063
  belongsToRoute: boolean,
879
1064
  deps: SegmentResolutionDeps<TEnv>,
880
1065
  actionContext?: ActionContext,
881
1066
  stale?: boolean,
1067
+ /** Parent route entry — its loaders are inherited so parallel slots can access them. */
1068
+ parentRouteEntry?: EntryData,
882
1069
  ): Promise<SegmentRevalidationResult> {
883
1070
  invariant(
884
1071
  orphan.type === "layout" || orphan.type === "cache",
@@ -906,6 +1093,37 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
906
1093
  segments.push(...loaderResult.segments);
907
1094
  matchedIds.push(...loaderResult.matchedIds);
908
1095
 
1096
+ // Inherit parent route's loaders so parallel slots inside this layout
1097
+ // can access them via useLoader(). See resolveOrphanLayout in fresh.ts.
1098
+ if (
1099
+ parentRouteEntry &&
1100
+ parentRouteEntry.loader &&
1101
+ parentRouteEntry.loader.length > 0 &&
1102
+ Object.keys(orphan.parallel).length > 0
1103
+ ) {
1104
+ const inheritedResult = await resolveLoadersWithRevalidation(
1105
+ parentRouteEntry,
1106
+ context,
1107
+ belongsToRoute,
1108
+ clientSegmentIds,
1109
+ prevParams,
1110
+ request,
1111
+ prevUrl,
1112
+ nextUrl,
1113
+ routeKey,
1114
+ deps,
1115
+ actionContext,
1116
+ orphan.shortCode,
1117
+ stale,
1118
+ );
1119
+ // Tag as inherited so buildMatchResult can deduplicate when safe
1120
+ for (const s of inheritedResult.segments) {
1121
+ s._inherited = true;
1122
+ }
1123
+ segments.push(...inheritedResult.segments);
1124
+ matchedIds.push(...inheritedResult.matchedIds);
1125
+ }
1126
+
909
1127
  // Handler-first: resolve orphan layout handler before its parallels
910
1128
  // so ctx.set() values are visible to parallel children.
911
1129
  matchedIds.push(orphan.shortCode);
@@ -978,157 +1196,41 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
978
1196
  belongsToRoute,
979
1197
  layoutName: orphan.id,
980
1198
  loading: orphan.loading === false ? null : orphan.loading,
981
- transition: orphan.transition,
1199
+ transition: applyViewTransitionDefault(
1200
+ orphan.transition,
1201
+ deps.viewTransitionDefault,
1202
+ orphan.shortCode,
1203
+ ),
982
1204
  ...(orphan.mountPath ? { mountPath: orphan.mountPath } : {}),
983
1205
  });
984
1206
 
985
- for (const parallelEntry of orphan.parallel) {
986
- invariant(
987
- parallelEntry.type === "parallel",
988
- `Expected parallel entry, got: ${parallelEntry.type}`,
989
- );
990
-
991
- const loaderResult = await resolveLoadersWithRevalidation(
992
- parallelEntry,
993
- context,
994
- belongsToRoute,
995
- clientSegmentIds,
996
- prevParams,
997
- request,
998
- prevUrl,
999
- nextUrl,
1000
- routeKey,
1001
- deps,
1002
- actionContext,
1003
- undefined,
1004
- stale,
1005
- );
1006
- segments.push(...loaderResult.segments);
1007
- matchedIds.push(...loaderResult.matchedIds);
1008
-
1009
- const slots = parallelEntry.handler as Record<
1010
- `@${string}`,
1011
- | ((ctx: HandlerContext<any, TEnv>) => ReactNode | Promise<ReactNode>)
1012
- | ReactNode
1013
- >;
1014
-
1015
- for (const [slot, handler] of Object.entries(slots)) {
1016
- // Use orphan.shortCode (the parent layout) to match the SSR path
1017
- // (resolveParallelEntry receives parentShortCode = orphan.shortCode).
1018
- // Using parallelEntry.shortCode would generate IDs the client doesn't know about.
1019
- const parallelId = `${orphan.shortCode}.${slot}`;
1020
- matchedIds.push(parallelId);
1021
-
1022
- const shouldResolve = await (async () => {
1023
- if (!clientSegmentIds.has(parallelId)) {
1024
- if (isTraceActive()) {
1025
- pushRevalidationTraceEntry({
1026
- segmentId: parallelId,
1027
- segmentType: "parallel",
1028
- belongsToRoute,
1029
- source: "parallel",
1030
- defaultShouldRevalidate: true,
1031
- finalShouldRevalidate: true,
1032
- reason: "new-segment",
1033
- });
1034
- }
1035
- return true;
1036
- }
1037
-
1038
- const dummySegment: ResolvedSegment = {
1039
- id: parallelId,
1040
- namespace: parallelEntry.id,
1041
- type: "parallel",
1042
- index: 0,
1043
- component: null as any,
1044
- params,
1045
- slot,
1046
- belongsToRoute,
1047
- parallelName: `${parallelEntry.id}.${slot}`,
1048
- ...(parallelEntry.mountPath
1049
- ? { mountPath: parallelEntry.mountPath }
1050
- : {}),
1051
- };
1052
-
1053
- return await evaluateRevalidation({
1054
- segment: dummySegment,
1055
- prevParams,
1056
- getPrevSegment: null,
1057
- request,
1058
- prevUrl,
1059
- nextUrl,
1060
- revalidations: parallelEntry.revalidate.map((fn, i) => ({
1061
- name: `revalidate${i}`,
1062
- fn,
1063
- })),
1064
- routeKey,
1065
- context,
1066
- actionContext,
1067
- stale,
1068
- traceSource: "parallel",
1069
- });
1070
- })();
1071
- emitRevalidationDecision(
1072
- parallelId,
1073
- context.pathname,
1074
- routeKey,
1075
- shouldResolve,
1076
- );
1077
-
1078
- let component: ReactNode | undefined;
1079
- if (shouldResolve) {
1080
- component = await tryStaticSlot(parallelEntry, slot, parallelId);
1081
- }
1082
- if (component === undefined) {
1083
- const hasLoadingFallback =
1084
- parallelEntry.loading !== undefined &&
1085
- parallelEntry.loading !== false;
1086
- if (!shouldResolve) {
1087
- component = null;
1088
- } else if (hasLoadingFallback) {
1089
- const result =
1090
- typeof handler === "function" ? handler(context) : handler;
1091
- if (result instanceof Promise) {
1092
- const tracked = deps.trackHandler(result, {
1093
- segmentId: parallelId,
1094
- segmentType: "parallel",
1095
- });
1096
- observeStreamedHandler(
1097
- tracked,
1098
- parallelId,
1099
- "parallel",
1100
- context.pathname,
1101
- routeKey,
1102
- params,
1103
- );
1104
- component = tracked as ReactNode;
1105
- } else {
1106
- component = result as ReactNode;
1107
- }
1108
- } else {
1109
- component =
1110
- typeof handler === "function" ? await handler(context) : handler;
1111
- }
1112
- }
1113
-
1114
- segments.push({
1115
- id: parallelId,
1116
- namespace: parallelEntry.id,
1117
- type: "parallel",
1118
- index: 0,
1119
- component,
1120
- loading: parallelEntry.loading === false ? null : parallelEntry.loading,
1121
- transition: parallelEntry.transition,
1122
- params,
1123
- slot,
1124
- belongsToRoute,
1125
- parallelName: `${parallelEntry.id}.${slot}`,
1126
- ...(parallelEntry.mountPath
1127
- ? { mountPath: parallelEntry.mountPath }
1128
- : {}),
1129
- });
1130
- }
1131
- }
1207
+ // Resolve the orphan layout's parallel slots through the shared main-path
1208
+ // helper. The orphan policy is carried by explicit args, byte-for-byte:
1209
+ // - parentChainDefault "force-render": an unknown parent-chain slot seeds
1210
+ // `true` (orphan parallels always belong to the route — the #482 guard),
1211
+ // where the main path would seed `belongsToRoute || isNewParent`.
1212
+ // - loaderOrder "before": a slot's loaders are emitted before the slot
1213
+ // segment, matching the prior inlined order.
1214
+ // `entry.shortCode` inside the helper is `orphan.shortCode` (orphan is passed
1215
+ // as `entry`), so the parallel ids + loader shortCodeOverride are unchanged.
1216
+ const parallelResult = await resolveParallelSegmentsWithRevalidation(
1217
+ orphan,
1218
+ params,
1219
+ context,
1220
+ belongsToRoute,
1221
+ clientSegmentIds,
1222
+ prevParams,
1223
+ request,
1224
+ prevUrl,
1225
+ nextUrl,
1226
+ routeKey,
1227
+ deps,
1228
+ actionContext,
1229
+ stale,
1230
+ { parentChainDefault: "force-render", loaderOrder: "before" },
1231
+ );
1232
+ segments.push(...parallelResult.segments);
1233
+ matchedIds.push(...parallelResult.matchedIds);
1132
1234
 
1133
1235
  return { segments, matchedIds };
1134
1236
  }
@@ -1146,12 +1248,12 @@ export async function resolveAllSegmentsWithRevalidation<TEnv>(
1146
1248
  request: Request,
1147
1249
  prevUrl: URL,
1148
1250
  nextUrl: URL,
1149
- loaderPromises: Map<string, Promise<any>>,
1150
1251
  actionContext: ActionContext | undefined,
1151
1252
  interceptResult: { intercept: any; entry: EntryData } | null,
1152
1253
  localRouteName: string,
1153
1254
  pathname: string,
1154
1255
  deps: SegmentResolutionDeps<TEnv>,
1256
+ stale?: boolean,
1155
1257
  ): Promise<{ segments: ResolvedSegment[]; matchedIds: string[] }> {
1156
1258
  const allSegments: ResolvedSegment[] = [];
1157
1259
  const matchedIds: string[] = [];
@@ -1178,6 +1280,11 @@ export async function resolveAllSegmentsWithRevalidation<TEnv>(
1178
1280
  }
1179
1281
 
1180
1282
  const nonParallelEntry = entry as Exclude<EntryData, { type: "parallel" }>;
1283
+ if (entry.type === "cache") {
1284
+ const store = RangoContext.getStore();
1285
+ if (store) store.insideCacheScope = true;
1286
+ }
1287
+ const doneEntry = track(`segment:${entry.id}`, 1);
1181
1288
  const resolved = await resolveWithErrorBoundary(
1182
1289
  nonParallelEntry,
1183
1290
  params,
@@ -1192,18 +1299,16 @@ export async function resolveAllSegmentsWithRevalidation<TEnv>(
1192
1299
  request,
1193
1300
  prevUrl,
1194
1301
  nextUrl,
1195
- loaderPromises,
1196
1302
  deps,
1197
1303
  actionContext,
1198
- false,
1304
+ stale,
1199
1305
  ),
1200
1306
  (seg) => ({ segments: [seg], matchedIds: [seg.id] }),
1201
1307
  deps,
1202
- telemetry
1203
- ? { request, url: context.url, routeKey, isPartial: true, telemetry }
1204
- : undefined,
1308
+ { request, url: context.url, routeKey, isPartial: true, telemetry },
1205
1309
  pathname,
1206
1310
  );
1311
+ doneEntry();
1207
1312
 
1208
1313
  // Deduplicate segments and matchedIds by ID, matching resolveAllSegments.
1209
1314
  // include() scopes can produce entries that resolve the same shared