@rangojs/router 0.0.0-experimental.7 → 0.0.0-experimental.73ab3466

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 (1106) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +884 -4
  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 +1606 -0
  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/dist/browser/react/use-client-cache.js +39 -0
  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/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  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/dist/network-error-thrower.d.ts +17 -0
  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/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +4639 -931
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +69 -59
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +294 -0
  811. package/skills/caching/SKILL.md +93 -23
  812. package/skills/composability/SKILL.md +172 -0
  813. package/skills/debug-manifest/SKILL.md +12 -8
  814. package/skills/document-cache/SKILL.md +18 -16
  815. package/skills/fonts/SKILL.md +167 -0
  816. package/skills/hooks/SKILL.md +334 -72
  817. package/skills/host-router/SKILL.md +218 -0
  818. package/skills/intercept/SKILL.md +131 -8
  819. package/skills/layout/SKILL.md +100 -3
  820. package/skills/links/SKILL.md +89 -30
  821. package/skills/loader/SKILL.md +404 -44
  822. package/skills/middleware/SKILL.md +171 -34
  823. package/skills/mime-routes/SKILL.md +128 -0
  824. package/skills/parallel/SKILL.md +204 -1
  825. package/skills/prerender/SKILL.md +643 -0
  826. package/skills/rango/SKILL.md +85 -16
  827. package/skills/response-routes/SKILL.md +411 -0
  828. package/skills/route/SKILL.md +257 -14
  829. package/skills/router-setup/SKILL.md +175 -32
  830. package/skills/tailwind/SKILL.md +129 -0
  831. package/skills/theme/SKILL.md +9 -8
  832. package/skills/typesafety/SKILL.md +328 -89
  833. package/skills/use-cache/SKILL.md +324 -0
  834. package/src/__internal.ts +102 -4
  835. package/src/bin/rango.ts +321 -0
  836. package/src/browser/action-coordinator.ts +97 -0
  837. package/src/browser/action-response-classifier.ts +99 -0
  838. package/src/browser/debug-channel.ts +93 -0
  839. package/src/browser/event-controller.ts +92 -64
  840. package/src/browser/history-state.ts +80 -0
  841. package/src/browser/intercept-utils.ts +52 -0
  842. package/src/browser/link-interceptor.ts +24 -4
  843. package/src/browser/logging.ts +55 -0
  844. package/src/browser/merge-segment-loaders.ts +20 -12
  845. package/src/browser/navigation-bridge.ts +282 -557
  846. package/src/browser/navigation-client.ts +182 -72
  847. package/src/browser/navigation-store.ts +33 -50
  848. package/src/browser/navigation-transaction.ts +297 -0
  849. package/src/browser/network-error-handler.ts +61 -0
  850. package/src/browser/partial-update.ts +303 -310
  851. package/src/browser/prefetch/cache.ts +206 -0
  852. package/src/browser/prefetch/fetch.ts +144 -0
  853. package/src/browser/prefetch/observer.ts +65 -0
  854. package/src/browser/prefetch/policy.ts +48 -0
  855. package/src/browser/prefetch/queue.ts +160 -0
  856. package/src/browser/prefetch/resource-ready.ts +77 -0
  857. package/src/browser/rango-state.ts +112 -0
  858. package/src/browser/react/Link.tsx +193 -73
  859. package/src/browser/react/NavigationProvider.tsx +80 -11
  860. package/src/browser/react/context.ts +6 -0
  861. package/src/browser/react/filter-segment-order.ts +11 -0
  862. package/src/browser/react/index.ts +12 -12
  863. package/src/browser/react/location-state-shared.ts +95 -53
  864. package/src/browser/react/location-state.ts +60 -15
  865. package/src/browser/react/mount-context.ts +6 -1
  866. package/src/browser/react/nonce-context.ts +23 -0
  867. package/src/browser/react/shallow-equal.ts +27 -0
  868. package/src/browser/react/use-action.ts +29 -51
  869. package/src/browser/react/use-client-cache.ts +5 -3
  870. package/src/browser/react/use-handle.ts +32 -79
  871. package/src/browser/react/use-href.tsx +2 -2
  872. package/src/browser/react/use-link-status.ts +6 -5
  873. package/src/browser/react/use-navigation.ts +22 -63
  874. package/src/browser/react/use-params.ts +65 -0
  875. package/src/browser/react/use-pathname.ts +47 -0
  876. package/src/browser/react/use-router.ts +63 -0
  877. package/src/browser/react/use-search-params.ts +56 -0
  878. package/src/browser/react/use-segments.ts +80 -97
  879. package/src/browser/response-adapter.ts +73 -0
  880. package/src/browser/rsc-router.tsx +188 -55
  881. package/src/browser/scroll-restoration.ts +117 -44
  882. package/src/browser/segment-reconciler.ts +221 -0
  883. package/src/browser/segment-structure-assert.ts +16 -0
  884. package/src/browser/server-action-bridge.ts +516 -599
  885. package/src/browser/shallow.ts +6 -1
  886. package/src/browser/types.ts +125 -47
  887. package/src/browser/validate-redirect-origin.ts +29 -0
  888. package/src/build/generate-manifest.ts +235 -24
  889. package/src/build/generate-route-types.ts +36 -0
  890. package/src/build/index.ts +13 -0
  891. package/src/build/route-trie.ts +265 -0
  892. package/src/build/route-types/ast-helpers.ts +25 -0
  893. package/src/build/route-types/ast-route-extraction.ts +98 -0
  894. package/src/build/route-types/codegen.ts +102 -0
  895. package/src/build/route-types/include-resolution.ts +411 -0
  896. package/src/build/route-types/param-extraction.ts +48 -0
  897. package/src/build/route-types/per-module-writer.ts +128 -0
  898. package/src/build/route-types/router-processing.ts +479 -0
  899. package/src/build/route-types/scan-filter.ts +78 -0
  900. package/src/build/runtime-discovery.ts +231 -0
  901. package/src/cache/background-task.ts +34 -0
  902. package/src/cache/cache-key-utils.ts +44 -0
  903. package/src/cache/cache-policy.ts +125 -0
  904. package/src/cache/cache-runtime.ts +342 -0
  905. package/src/cache/cache-scope.ts +167 -309
  906. package/src/cache/cf/cf-cache-store.ts +571 -17
  907. package/src/cache/cf/index.ts +13 -3
  908. package/src/cache/document-cache.ts +116 -77
  909. package/src/cache/handle-capture.ts +81 -0
  910. package/src/cache/handle-snapshot.ts +41 -0
  911. package/src/cache/index.ts +1 -15
  912. package/src/cache/memory-segment-store.ts +191 -13
  913. package/src/cache/profile-registry.ts +73 -0
  914. package/src/cache/read-through-swr.ts +134 -0
  915. package/src/cache/segment-codec.ts +256 -0
  916. package/src/cache/taint.ts +153 -0
  917. package/src/cache/types.ts +72 -122
  918. package/src/client.rsc.tsx +3 -1
  919. package/src/client.tsx +106 -126
  920. package/src/component-utils.ts +4 -4
  921. package/src/components/DefaultDocument.tsx +5 -1
  922. package/src/context-var.ts +156 -0
  923. package/src/debug.ts +19 -9
  924. package/src/deps/browser.ts +1 -0
  925. package/src/errors.ts +108 -2
  926. package/src/handle.ts +15 -29
  927. package/src/handles/MetaTags.tsx +73 -20
  928. package/src/handles/breadcrumbs.ts +66 -0
  929. package/src/handles/index.ts +1 -0
  930. package/src/handles/meta.ts +30 -13
  931. package/src/host/cookie-handler.ts +21 -15
  932. package/src/host/errors.ts +8 -8
  933. package/src/host/index.ts +4 -7
  934. package/src/host/pattern-matcher.ts +27 -27
  935. package/src/host/router.ts +61 -39
  936. package/src/host/testing.ts +8 -8
  937. package/src/host/types.ts +15 -7
  938. package/src/host/utils.ts +1 -1
  939. package/src/href-client.ts +119 -29
  940. package/src/index.rsc.ts +153 -19
  941. package/src/index.ts +211 -30
  942. package/src/internal-debug.ts +11 -0
  943. package/src/loader.rsc.ts +26 -157
  944. package/src/loader.ts +27 -10
  945. package/src/network-error-thrower.tsx +3 -1
  946. package/src/outlet-provider.tsx +45 -0
  947. package/src/prerender/param-hash.ts +37 -0
  948. package/src/prerender/store.ts +185 -0
  949. package/src/prerender.ts +463 -0
  950. package/src/reverse.ts +330 -0
  951. package/src/root-error-boundary.tsx +41 -29
  952. package/src/route-content-wrapper.tsx +7 -4
  953. package/src/route-definition/dsl-helpers.ts +959 -0
  954. package/src/route-definition/helper-factories.ts +200 -0
  955. package/src/route-definition/helpers-types.ts +431 -0
  956. package/src/route-definition/index.ts +52 -0
  957. package/src/route-definition/redirect.ts +93 -0
  958. package/src/route-definition.ts +1 -1428
  959. package/src/route-map-builder.ts +217 -123
  960. package/src/route-name.ts +53 -0
  961. package/src/route-types.ts +59 -8
  962. package/src/router/content-negotiation.ts +116 -0
  963. package/src/router/debug-manifest.ts +72 -0
  964. package/src/router/error-handling.ts +9 -9
  965. package/src/router/find-match.ts +160 -0
  966. package/src/router/handler-context.ts +400 -84
  967. package/src/router/intercept-resolution.ts +397 -0
  968. package/src/router/lazy-includes.ts +237 -0
  969. package/src/router/loader-resolution.ts +222 -123
  970. package/src/router/logging.ts +251 -0
  971. package/src/router/manifest.ts +154 -35
  972. package/src/router/match-api.ts +620 -0
  973. package/src/router/match-context.ts +5 -3
  974. package/src/router/match-handlers.ts +440 -0
  975. package/src/router/match-middleware/background-revalidation.ts +108 -93
  976. package/src/router/match-middleware/cache-lookup.ts +440 -10
  977. package/src/router/match-middleware/cache-store.ts +98 -26
  978. package/src/router/match-middleware/intercept-resolution.ts +57 -17
  979. package/src/router/match-middleware/segment-resolution.ts +27 -6
  980. package/src/router/match-pipelines.ts +10 -45
  981. package/src/router/match-result.ts +55 -33
  982. package/src/router/metrics.ts +240 -15
  983. package/src/router/middleware-cookies.ts +55 -0
  984. package/src/router/middleware-types.ts +226 -0
  985. package/src/router/middleware.ts +327 -369
  986. package/src/router/pattern-matching.ts +211 -43
  987. package/src/router/prerender-match.ts +402 -0
  988. package/src/router/preview-match.ts +170 -0
  989. package/src/router/revalidation.ts +137 -38
  990. package/src/router/router-context.ts +41 -21
  991. package/src/router/router-interfaces.ts +452 -0
  992. package/src/router/router-options.ts +592 -0
  993. package/src/router/router-registry.ts +24 -0
  994. package/src/router/segment-resolution/fresh.ts +683 -0
  995. package/src/router/segment-resolution/helpers.ts +268 -0
  996. package/src/router/segment-resolution/loader-cache.ts +199 -0
  997. package/src/router/segment-resolution/revalidation.ts +1301 -0
  998. package/src/router/segment-resolution/static-store.ts +67 -0
  999. package/src/router/segment-resolution.ts +21 -0
  1000. package/src/router/segment-wrappers.ts +291 -0
  1001. package/src/router/telemetry-otel.ts +299 -0
  1002. package/src/router/telemetry.ts +300 -0
  1003. package/src/router/timeout.ts +148 -0
  1004. package/src/router/trie-matching.ts +239 -0
  1005. package/src/router/types.ts +78 -3
  1006. package/src/router.ts +697 -4257
  1007. package/src/rsc/handler-context.ts +45 -0
  1008. package/src/rsc/handler.ts +790 -755
  1009. package/src/rsc/helpers.ts +140 -6
  1010. package/src/rsc/index.ts +0 -20
  1011. package/src/rsc/loader-fetch.ts +214 -0
  1012. package/src/rsc/manifest-init.ts +86 -0
  1013. package/src/rsc/nonce.ts +14 -0
  1014. package/src/rsc/origin-guard.ts +141 -0
  1015. package/src/rsc/progressive-enhancement.ts +382 -0
  1016. package/src/rsc/response-error.ts +37 -0
  1017. package/src/rsc/response-route-handler.ts +347 -0
  1018. package/src/rsc/rsc-rendering.ts +240 -0
  1019. package/src/rsc/runtime-warnings.ts +42 -0
  1020. package/src/rsc/server-action.ts +350 -0
  1021. package/src/rsc/ssr-setup.ts +128 -0
  1022. package/src/rsc/types.ts +44 -11
  1023. package/src/search-params.ts +230 -0
  1024. package/src/segment-system.tsx +165 -17
  1025. package/src/server/context.ts +278 -58
  1026. package/src/server/cookie-store.ts +190 -0
  1027. package/src/server/fetchable-loader-store.ts +37 -0
  1028. package/src/server/handle-store.ts +94 -15
  1029. package/src/server/loader-registry.ts +15 -56
  1030. package/src/server/request-context.ts +481 -74
  1031. package/src/server.ts +35 -130
  1032. package/src/ssr/index.tsx +101 -31
  1033. package/src/static-handler.ts +114 -0
  1034. package/src/theme/ThemeProvider.tsx +21 -15
  1035. package/src/theme/ThemeScript.tsx +5 -5
  1036. package/src/theme/constants.ts +5 -2
  1037. package/src/theme/index.ts +4 -14
  1038. package/src/theme/theme-context.ts +4 -30
  1039. package/src/theme/theme-script.ts +21 -18
  1040. package/src/types/boundaries.ts +158 -0
  1041. package/src/types/cache-types.ts +198 -0
  1042. package/src/types/error-types.ts +192 -0
  1043. package/src/types/global-namespace.ts +100 -0
  1044. package/src/types/handler-context.ts +785 -0
  1045. package/src/types/index.ts +88 -0
  1046. package/src/types/loader-types.ts +183 -0
  1047. package/src/types/route-config.ts +170 -0
  1048. package/src/types/route-entry.ts +109 -0
  1049. package/src/types/segments.ts +150 -0
  1050. package/src/types.ts +1 -1623
  1051. package/src/urls/include-helper.ts +197 -0
  1052. package/src/urls/index.ts +53 -0
  1053. package/src/urls/path-helper-types.ts +339 -0
  1054. package/src/urls/path-helper.ts +329 -0
  1055. package/src/urls/pattern-types.ts +95 -0
  1056. package/src/urls/response-types.ts +106 -0
  1057. package/src/urls/type-extraction.ts +372 -0
  1058. package/src/urls/urls-function.ts +98 -0
  1059. package/src/urls.ts +1 -802
  1060. package/src/use-loader.tsx +85 -77
  1061. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1062. package/src/vite/discovery/discover-routers.ts +344 -0
  1063. package/src/vite/discovery/prerender-collection.ts +385 -0
  1064. package/src/vite/discovery/route-types-writer.ts +258 -0
  1065. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1066. package/src/vite/discovery/state.ts +108 -0
  1067. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1068. package/src/vite/index.ts +11 -1129
  1069. package/src/vite/plugin-types.ts +48 -0
  1070. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1071. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1072. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1073. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
  1074. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1075. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1076. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1077. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1078. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1079. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1080. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1081. package/src/vite/plugins/performance-tracks.ts +240 -0
  1082. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1083. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1084. package/src/vite/plugins/version-injector.ts +83 -0
  1085. package/src/vite/plugins/version-plugin.ts +266 -0
  1086. package/src/vite/plugins/virtual-entries.ts +123 -0
  1087. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1088. package/src/vite/rango.ts +456 -0
  1089. package/src/vite/router-discovery.ts +777 -0
  1090. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1091. package/src/vite/utils/banner.ts +36 -0
  1092. package/src/vite/utils/bundle-analysis.ts +137 -0
  1093. package/src/vite/utils/manifest-utils.ts +70 -0
  1094. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  1095. package/src/vite/utils/prerender-utils.ts +189 -0
  1096. package/src/vite/utils/shared-utils.ts +169 -0
  1097. package/CLAUDE.md +0 -43
  1098. package/src/browser/lru-cache.ts +0 -69
  1099. package/src/browser/request-controller.ts +0 -164
  1100. package/src/cache/memory-store.ts +0 -253
  1101. package/src/href.ts +0 -255
  1102. package/src/server/route-manifest-cache.ts +0 -173
  1103. package/src/vite/expose-handle-id.ts +0 -209
  1104. package/src/vite/expose-loader-id.ts +0 -426
  1105. package/src/vite/expose-location-state-id.ts +0 -177
  1106. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -7,6 +7,7 @@
7
7
  import type { ReactNode } from "react";
8
8
  import { track } from "../server/context";
9
9
  import type { EntryData } from "../server/context";
10
+ import { contextGet } from "../context-var.js";
10
11
  import type {
11
12
  ResolvedSegment,
12
13
  HandlerContext,
@@ -21,8 +22,9 @@ import type {
21
22
  import type { LoaderRevalidationResult, ActionContext } from "./types";
22
23
  import { isHandle, type Handle } from "../handle.js";
23
24
  import type { HandleStore } from "../server/handle-store.js";
24
- import { getFetchableLoader } from "../loader.rsc.js";
25
- import { getRequestContext } from "../server/request-context.js";
25
+ import { getFetchableLoader } from "../server/fetchable-loader-store.js";
26
+ import { _getRequestContext } from "../server/request-context.js";
27
+ import { debugLog } from "./logging.js";
26
28
 
27
29
  /**
28
30
  * Internal callback signature for loader error notifications.
@@ -35,7 +37,7 @@ export type LoaderErrorCallback = (
35
37
  segmentId: string;
36
38
  loaderName: string;
37
39
  handledByBoundary: boolean;
38
- }
40
+ },
39
41
  ) => void;
40
42
 
41
43
  /**
@@ -54,14 +56,14 @@ export function wrapLoaderWithErrorHandling<T>(
54
56
  segmentId: string,
55
57
  pathname: string,
56
58
  findNearestErrorBoundary: (
57
- entry: EntryData | null
59
+ entry: EntryData | null,
58
60
  ) => ReactNode | ErrorBoundaryHandler | null,
59
61
  createErrorInfo: (
60
62
  error: unknown,
61
63
  segmentId: string,
62
- segmentType: ErrorInfo["segmentType"]
64
+ segmentType: ErrorInfo["segmentType"],
63
65
  ) => ErrorInfo,
64
- onError?: LoaderErrorCallback
66
+ onError?: LoaderErrorCallback,
65
67
  ): Promise<LoaderDataResult<T>> {
66
68
  // Extract loader name from segmentId (format: "M1L0D0.loaderName")
67
69
  const loaderName = segmentId.split(".").pop() || "unknown";
@@ -72,7 +74,7 @@ export function wrapLoaderWithErrorHandling<T>(
72
74
  __loaderResult: true,
73
75
  ok: true,
74
76
  data,
75
- })
77
+ }),
76
78
  )
77
79
  .catch((error): LoaderDataResult<T> => {
78
80
  // Find nearest error boundary
@@ -111,10 +113,10 @@ export function wrapLoaderWithErrorHandling<T>(
111
113
  renderedFallback = fallback;
112
114
  }
113
115
 
114
- console.log(
115
- `[Router] Loader error wrapped with boundary fallback in ${segmentId}:`,
116
- errorInfo.message
117
- );
116
+ debugLog("loader", "loader error wrapped with boundary fallback", {
117
+ segmentId,
118
+ message: errorInfo.message,
119
+ });
118
120
 
119
121
  return {
120
122
  __loaderResult: true,
@@ -126,61 +128,103 @@ export function wrapLoaderWithErrorHandling<T>(
126
128
  }
127
129
 
128
130
  /**
129
- * Set up the use() method on handler context to access loaders and handles.
130
- *
131
- * For loaders: Lazily runs loaders, memoizes results per request.
132
- * For handles: Returns a push function bound to the current segment.
131
+ * Detect cycles in the loader dependency graph using DFS from a given node.
132
+ * Returns the cycle path (array of loader IDs forming the cycle) if one exists,
133
+ * or null if no cycle is found.
133
134
  */
134
- export function setupLoaderAccess<TEnv>(
135
- ctx: HandlerContext<any, TEnv>,
136
- loaderPromises: Map<string, Promise<any>>
137
- ): void {
138
- // Get HandleStore from request context
139
- const getHandleStore = (): HandleStore | undefined => {
140
- return getRequestContext()?._handleStore;
141
- };
135
+ function detectLoaderCycle(
136
+ from: string,
137
+ to: string,
138
+ dependsOn: Map<string, Set<string>>,
139
+ ): string[] | null {
140
+ // If `to` can reach `from` via the dependency graph, adding the edge
141
+ // from -> to creates a cycle. We search from `to` looking for `from`.
142
+ const visited = new Set<string>();
143
+ const path: string[] = [from, to];
144
+
145
+ function dfs(current: string): string[] | null {
146
+ if (current === from) {
147
+ // Found a cycle: return the path leading back to `from`
148
+ return path;
149
+ }
150
+ if (visited.has(current)) return null;
151
+ visited.add(current);
142
152
 
143
- // The use() function handles both loaders and handles
144
- ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
145
- // Handle case: return a push function
146
- if (isHandle(item)) {
147
- const handle = item;
148
- const store = getHandleStore();
149
- const segmentId = (ctx as InternalHandlerContext)._currentSegmentId;
153
+ const deps = dependsOn.get(current);
154
+ if (!deps) return null;
150
155
 
151
- if (!segmentId) {
152
- throw new Error(
153
- `Handle "${handle.$$id}" used outside of handler context. ` +
154
- `Handles must be used within route/layout handlers.`
155
- );
156
- }
156
+ for (const dep of deps) {
157
+ path.push(dep);
158
+ const cycle = dfs(dep);
159
+ if (cycle) return cycle;
160
+ path.pop();
161
+ }
162
+ return null;
163
+ }
157
164
 
158
- // Return a push function bound to this handle and segment
159
- // Accepts: value, Promise, or async callback (executed immediately)
160
- // Promises are pushed directly - RSC will serialize and stream them
161
- return (dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
162
- if (!store) return;
165
+ return dfs(to);
166
+ }
163
167
 
164
- // If it's a function, call it immediately to get the promise
165
- const valueOrPromise = typeof dataOrFn === "function"
166
- ? (dataOrFn as () => Promise<unknown>)()
167
- : dataOrFn;
168
+ /**
169
+ * Creates a memoizing loader executor with cycle detection.
170
+ * Shared by setupLoaderAccess and setupLoaderAccessSilent; only the handle
171
+ * branch differs between the two, so only the loader logic is extracted here.
172
+ *
173
+ * Returns a useLoader(loader, callerLoaderId) function that:
174
+ * - Tracks dependency edges between loaders for cycle detection
175
+ * - Throws immediately (synchronously inside an async fn) on circular deps
176
+ * - Memoizes each loader's promise so it runs at most once per request
177
+ */
178
+ function createLoaderExecutor<TEnv>(
179
+ ctx: HandlerContext<any, TEnv>,
180
+ loaderPromises: Map<string, Promise<any>>,
181
+ ): (
182
+ loader: LoaderDefinition<any, any>,
183
+ callerLoaderId: string | null,
184
+ ) => Promise<any> {
185
+ // Capture RequestContext eagerly for cookie access (ALS protection on Cloudflare)
186
+ const reqCtxRef = _getRequestContext();
187
+
188
+ // Dependency graph: loaderId -> set of loader IDs it directly depends on.
189
+ const dependsOn = new Map<string, Set<string>>();
190
+
191
+ // Loaders whose promises have not yet settled.
192
+ // A dependency on a pending loader that closes a cycle means deadlock.
193
+ const pendingLoaders = new Set<string>();
194
+
195
+ function useLoader(
196
+ loader: LoaderDefinition<any, any>,
197
+ callerLoaderId: string | null,
198
+ ): Promise<any> {
199
+ // Record the dependency edge and check for cycles before running
200
+ if (callerLoaderId !== null) {
201
+ let deps = dependsOn.get(callerLoaderId);
202
+ if (!deps) {
203
+ deps = new Set();
204
+ dependsOn.set(callerLoaderId, deps);
205
+ }
168
206
 
169
- // Push directly - promises will be serialized by RSC and streamed
170
- store.push(handle.$$id, segmentId, valueOrPromise);
171
- };
172
- }
207
+ // Only relevant when the target is still pending (would deadlock)
208
+ if (pendingLoaders.has(loader.$$id)) {
209
+ const cycle = detectLoaderCycle(callerLoaderId, loader.$$id, dependsOn);
210
+ if (cycle) {
211
+ throw new Error(
212
+ `Circular loader dependency detected: ${cycle.join(" -> ")}. ` +
213
+ `Loaders cannot depend on each other in a cycle. ` +
214
+ `Refactor to break the circular dependency.`,
215
+ );
216
+ }
217
+ }
173
218
 
174
- // Loader case: existing behavior
175
- const loader = item as LoaderDefinition<any, any>;
219
+ deps.add(loader.$$id);
220
+ }
176
221
 
177
222
  // Return cached promise if already started
178
223
  if (loaderPromises.has(loader.$$id)) {
179
- return loaderPromises.get(loader.$$id);
224
+ return loaderPromises.get(loader.$$id)!;
180
225
  }
181
226
 
182
227
  // Get loader function - either from loader object or fetchable registry
183
- // Fetchable loaders store fn in registry (not on object) to avoid client bundling issues
184
228
  let loaderFn = loader.fn;
185
229
  if (!loaderFn) {
186
230
  const fetchable = getFetchableLoader(loader.$$id);
@@ -189,122 +233,177 @@ export function setupLoaderAccess<TEnv>(
189
233
  }
190
234
  }
191
235
 
192
- // Ensure loader has a function
193
236
  if (!loaderFn) {
194
237
  throw new Error(
195
- `Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`
238
+ `Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`,
196
239
  );
197
240
  }
198
241
 
199
- // Create loader context with recursive use() support
242
+ pendingLoaders.add(loader.$$id);
243
+
244
+ const currentLoaderId = loader.$$id;
245
+ // Loader functions are always fresh (never cached), so they get an
246
+ // unguarded get that bypasses non-cacheable read guards. This applies
247
+ // to ALL loaders — DSL and handler-called — because the loader
248
+ // function itself always re-executes. Also handles nested deps
249
+ // (loaderA → use(loaderB)) since all share this unguarded get.
200
250
  const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
201
251
  params: ctx.params,
252
+ routeParams: (ctx.params ?? {}) as Record<string, string>,
202
253
  request: ctx.request,
203
254
  searchParams: ctx.searchParams,
255
+ search: (ctx as any).search,
204
256
  pathname: ctx.pathname,
205
257
  url: ctx.url,
206
258
  env: ctx.env,
207
259
  var: ctx.var,
208
- get: ctx.get,
260
+ get: ((keyOrVar: any) => contextGet(ctx.var, keyOrVar)) as typeof ctx.get,
209
261
  use: <TDep, TDepParams = any>(
210
- dep: LoaderDefinition<TDep, TDepParams>
262
+ dep: LoaderDefinition<TDep, TDepParams>,
211
263
  ): Promise<TDep> => {
212
- // Recursive call - will start dep loader if not already started
213
- return ctx.use(dep);
264
+ return useLoader(dep, currentLoaderId);
214
265
  },
215
- // Default to GET for loaders called through route handlers
216
266
  method: "GET",
217
267
  body: undefined,
268
+ reverse: ctx.reverse as LoaderContext["reverse"],
218
269
  };
219
270
 
220
- // Start loader execution with tracking
221
- const doneLoader = track(`loader:${loader.$$id}`);
271
+ const doneLoader = track(`loader:${loader.$$id}`, 2);
222
272
  const promise = Promise.resolve(
223
- loaderFn(loaderCtx as LoaderContext<any, TEnv>)
273
+ loaderFn(loaderCtx as LoaderContext<any, TEnv>),
224
274
  ).finally(() => {
275
+ pendingLoaders.delete(loader.$$id);
225
276
  doneLoader();
226
277
  });
227
278
 
228
- // Memoize for subsequent calls
229
279
  loaderPromises.set(loader.$$id, promise);
230
-
231
280
  return promise;
232
- }) as typeof ctx.use;
281
+ }
282
+
283
+ return useLoader;
233
284
  }
234
285
 
235
286
  /**
236
- * Set up ctx.use() for proactive caching (silent mode).
237
- * Handles are silently ignored (no push to HandleStore).
238
- * Loaders work normally but with fresh memoization.
287
+ * Set up the use() method on handler context to access loaders and handles.
239
288
  *
240
- * This prevents duplicate handle data (breadcrumbs, meta) from being
241
- * pushed to the response stream during background proactive caching.
289
+ * For loaders: Lazily runs loaders, memoizes results per request.
290
+ * For handles: Returns a push function bound to the current segment.
291
+ *
292
+ * Includes cycle detection: tracks dependency edges between loaders and
293
+ * throws on circular dependencies to prevent deadlocks.
242
294
  */
243
- export function setupLoaderAccessSilent<TEnv>(
295
+ export function setupLoaderAccess<TEnv>(
244
296
  ctx: HandlerContext<any, TEnv>,
245
- loaderPromises: Map<string, Promise<any>>
297
+ loaderPromises: Map<string, Promise<any>>,
246
298
  ): void {
299
+ // Eagerly capture the HandleStore at setup time (before pipeline async ops).
300
+ // In workerd/Cloudflare, dynamic imports and fetch() in the match pipeline
301
+ // can disrupt AsyncLocalStorage, causing getRequestContext() to return
302
+ // undefined when handlers later call ctx.use(handle). Capturing early
303
+ // ensures the store reference survives ALS disruption.
304
+ const handleStoreRef = _getRequestContext()?._handleStore;
305
+
306
+ const useLoader = createLoaderExecutor(ctx, loaderPromises);
307
+
247
308
  ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
248
- // Handle case: return a no-op push function
249
309
  if (isHandle(item)) {
250
- // Silent mode - return a function that does nothing
251
- return (_dataOrFn: unknown) => {
252
- // Intentionally empty - don't push handle data during proactive caching
310
+ const handle = item;
311
+ const store = handleStoreRef;
312
+ const segmentId = (ctx as InternalHandlerContext<any, TEnv>)
313
+ ._currentSegmentId;
314
+
315
+ if (!segmentId) {
316
+ throw new Error(
317
+ `Handle "${handle.$$id}" used outside of handler context. ` +
318
+ `Handles must be used within route/layout handlers.`,
319
+ );
320
+ }
321
+
322
+ return (
323
+ dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
324
+ ) => {
325
+ if (!store) return;
326
+
327
+ const valueOrPromise =
328
+ typeof dataOrFn === "function"
329
+ ? (dataOrFn as () => Promise<unknown>)()
330
+ : dataOrFn;
331
+
332
+ store.push(handle.$$id, segmentId, valueOrPromise);
253
333
  };
254
334
  }
255
335
 
256
- // Loader case: same as setupLoaderAccess
257
- const loader = item as LoaderDefinition<any, any>;
336
+ return useLoader(item as LoaderDefinition<any, any>, null);
337
+ }) as typeof ctx.use;
338
+ }
339
+
340
+ /**
341
+ * Set up ctx.use() for pre-rendering (build-time).
342
+ * Handles push to HandleStore; loaders throw with a clear error.
343
+ */
344
+ export function setupBuildUse<TEnv>(ctx: HandlerContext<any, TEnv>): void {
345
+ // Eagerly capture the HandleStore (same ALS protection as setupLoaderAccess).
346
+ const handleStoreRef = _getRequestContext()?._handleStore;
258
347
 
259
- // Return cached promise if already started
260
- if (loaderPromises.has(loader.$$id)) {
261
- return loaderPromises.get(loader.$$id);
262
- }
348
+ ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
349
+ // Handle case: return a push function bound to the current segment
350
+ if (isHandle(item)) {
351
+ const handle = item;
352
+ const store = handleStoreRef;
353
+ const segmentId = (ctx as InternalHandlerContext<any, TEnv>)
354
+ ._currentSegmentId;
263
355
 
264
- // Get loader function
265
- let loaderFn = loader.fn;
266
- if (!loaderFn) {
267
- const fetchable = getFetchableLoader(loader.$$id);
268
- if (fetchable) {
269
- loaderFn = fetchable.fn;
356
+ if (!segmentId) {
357
+ throw new Error(
358
+ `Handle "${handle.$$id}" used outside of handler context. ` +
359
+ `Handles must be used within route/layout handlers.`,
360
+ );
270
361
  }
271
- }
272
362
 
273
- if (!loaderFn) {
274
- throw new Error(
275
- `Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`
276
- );
363
+ return (
364
+ dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
365
+ ) => {
366
+ if (!store) return;
367
+
368
+ const valueOrPromise =
369
+ typeof dataOrFn === "function"
370
+ ? (dataOrFn as () => Promise<unknown>)()
371
+ : dataOrFn;
372
+
373
+ store.push(handle.$$id, segmentId, valueOrPromise);
374
+ };
277
375
  }
278
376
 
279
- // Create loader context with recursive use() support
280
- const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
281
- params: ctx.params,
282
- request: ctx.request,
283
- searchParams: ctx.searchParams,
284
- pathname: ctx.pathname,
285
- url: ctx.url,
286
- env: ctx.env,
287
- var: ctx.var,
288
- get: ctx.get,
289
- use: <TDep, TDepParams = any>(
290
- dep: LoaderDefinition<TDep, TDepParams>
291
- ): Promise<TDep> => {
292
- return ctx.use(dep);
293
- },
294
- method: "GET",
295
- body: undefined,
296
- };
377
+ // Loader case: not available during pre-rendering
378
+ throw new Error(
379
+ "Loaders are not available during pre-rendering. " +
380
+ "Use them on parent layouts with cache() for request-time data, " +
381
+ "or use a passthrough prerender handler.",
382
+ );
383
+ }) as typeof ctx.use;
384
+ }
297
385
 
298
- // Start loader execution with tracking
299
- const doneLoader = track(`loader:${loader.$$id}`);
300
- const promise = Promise.resolve(
301
- loaderFn(loaderCtx as LoaderContext<any, TEnv>)
302
- ).finally(() => {
303
- doneLoader();
304
- });
386
+ /**
387
+ * Set up ctx.use() for proactive caching (silent mode).
388
+ * Handles are silently ignored (no push to HandleStore).
389
+ * Loaders work normally but with fresh memoization and cycle detection.
390
+ *
391
+ * This prevents duplicate handle data (breadcrumbs, meta) from being
392
+ * pushed to the response stream during background proactive caching.
393
+ */
394
+ export function setupLoaderAccessSilent<TEnv>(
395
+ ctx: HandlerContext<any, TEnv>,
396
+ loaderPromises: Map<string, Promise<any>>,
397
+ ): void {
398
+ const useLoader = createLoaderExecutor(ctx, loaderPromises);
305
399
 
306
- loaderPromises.set(loader.$$id, promise);
307
- return promise;
400
+ ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
401
+ if (isHandle(item)) {
402
+ // Silent mode - return a no-op so handle data is not pushed during caching
403
+ return (_dataOrFn: unknown) => {};
404
+ }
405
+
406
+ return useLoader(item as LoaderDefinition<any, any>, null);
308
407
  }) as typeof ctx.use;
309
408
  }
310
409
 
@@ -320,7 +419,7 @@ export function setupLoaderAccessSilent<TEnv>(
320
419
  export async function revalidate<T>(
321
420
  shouldRevalidate: () => Promise<boolean>,
322
421
  onRevalidate: () => Promise<T>,
323
- onSkip: () => T
422
+ onSkip: () => T,
324
423
  ): Promise<T> {
325
424
  const needsRevalidation = await shouldRevalidate();
326
425
  return needsRevalidation ? await onRevalidate() : onSkip();