@rangojs/router 0.0.0-experimental.11 → 0.0.0-experimental.111

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 (1141) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +1037 -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 +1635 -158
  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 +6148 -2425
  798. package/dist/vite/index.js.bak +5448 -0
  799. package/dist/vite/index.js.map +1 -0
  800. package/dist/vite/index.named-routes.gen.ts +103 -0
  801. package/dist/vite/package-resolution.d.ts +43 -0
  802. package/dist/vite/package-resolution.d.ts.map +1 -0
  803. package/{src/vite/package-resolution.ts → dist/vite/package-resolution.js} +53 -66
  804. package/dist/vite/package-resolution.js.map +1 -0
  805. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  806. package/dist/vite/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +62 -54
  811. package/skills/breadcrumbs/SKILL.md +252 -0
  812. package/skills/bundle-analysis/SKILL.md +159 -0
  813. package/skills/cache-guide/SKILL.md +473 -0
  814. package/skills/caching/SKILL.md +94 -24
  815. package/skills/composability/SKILL.md +197 -0
  816. package/skills/debug-manifest/SKILL.md +12 -8
  817. package/skills/document-cache/SKILL.md +18 -16
  818. package/skills/fonts/SKILL.md +6 -4
  819. package/skills/handler-use/SKILL.md +364 -0
  820. package/skills/hooks/SKILL.md +524 -71
  821. package/skills/host-router/SKILL.md +243 -0
  822. package/skills/i18n/SKILL.md +276 -0
  823. package/skills/intercept/SKILL.md +173 -8
  824. package/skills/layout/SKILL.md +123 -5
  825. package/skills/links/SKILL.md +316 -25
  826. package/skills/loader/SKILL.md +620 -50
  827. package/skills/middleware/SKILL.md +211 -37
  828. package/skills/migrate-nextjs/SKILL.md +562 -0
  829. package/skills/migrate-react-router/SKILL.md +769 -0
  830. package/skills/mime-routes/SKILL.md +42 -11
  831. package/skills/observability/SKILL.md +137 -0
  832. package/skills/parallel/SKILL.md +271 -3
  833. package/skills/prerender/SKILL.md +448 -63
  834. package/skills/rango/SKILL.md +293 -21
  835. package/skills/response-routes/SKILL.md +210 -100
  836. package/skills/route/SKILL.md +310 -14
  837. package/skills/router-setup/SKILL.md +211 -33
  838. package/skills/server-actions/SKILL.md +751 -0
  839. package/skills/streams-and-websockets/SKILL.md +283 -0
  840. package/skills/theme/SKILL.md +9 -8
  841. package/skills/typesafety/SKILL.md +622 -91
  842. package/skills/use-cache/SKILL.md +324 -0
  843. package/skills/view-transitions/SKILL.md +212 -0
  844. package/src/__augment-tests__/augment.ts +81 -0
  845. package/src/__augment-tests__/augmented.check.ts +117 -0
  846. package/src/__internal.ts +102 -4
  847. package/src/bin/rango.ts +312 -15
  848. package/src/browser/action-coordinator.ts +97 -0
  849. package/src/browser/action-response-classifier.ts +99 -0
  850. package/src/browser/app-shell.ts +52 -0
  851. package/src/browser/app-version.ts +14 -0
  852. package/src/browser/event-controller.ts +136 -68
  853. package/src/browser/history-state.ts +101 -0
  854. package/src/browser/index.ts +3 -3
  855. package/src/browser/intercept-utils.ts +52 -0
  856. package/src/browser/link-interceptor.ts +24 -4
  857. package/src/browser/logging.ts +55 -0
  858. package/src/browser/merge-segment-loaders.ts +20 -12
  859. package/src/browser/navigation-bridge.ts +370 -561
  860. package/src/browser/navigation-client.ts +228 -70
  861. package/src/browser/navigation-store.ts +97 -55
  862. package/src/browser/navigation-transaction.ts +293 -0
  863. package/src/browser/network-error-handler.ts +61 -0
  864. package/src/browser/partial-update.ts +376 -315
  865. package/src/browser/prefetch/cache.ts +314 -0
  866. package/src/browser/prefetch/fetch.ts +282 -0
  867. package/src/browser/prefetch/observer.ts +65 -0
  868. package/src/browser/prefetch/policy.ts +48 -0
  869. package/src/browser/prefetch/queue.ts +191 -0
  870. package/src/browser/prefetch/resource-ready.ts +77 -0
  871. package/src/browser/rango-state.ts +152 -0
  872. package/src/browser/react/Link.tsx +255 -71
  873. package/src/browser/react/NavigationProvider.tsx +152 -24
  874. package/src/browser/react/context.ts +11 -0
  875. package/src/browser/react/filter-segment-order.ts +55 -0
  876. package/src/browser/react/index.ts +15 -12
  877. package/src/browser/react/location-state-shared.ts +176 -53
  878. package/src/browser/react/location-state.ts +90 -19
  879. package/src/browser/react/mount-context.ts +6 -1
  880. package/src/browser/react/nonce-context.ts +23 -0
  881. package/src/browser/react/shallow-equal.ts +27 -0
  882. package/src/browser/react/use-action.ts +29 -51
  883. package/src/browser/react/use-client-cache.ts +5 -3
  884. package/src/browser/react/use-handle.ts +41 -123
  885. package/src/browser/react/use-link-status.ts +6 -5
  886. package/src/browser/react/use-navigation.ts +44 -65
  887. package/src/browser/react/use-params.ts +78 -0
  888. package/src/browser/react/use-pathname.ts +47 -0
  889. package/src/browser/react/use-reverse.ts +99 -0
  890. package/src/browser/react/use-router.ts +96 -0
  891. package/src/browser/react/use-search-params.ts +56 -0
  892. package/src/browser/react/use-segments.ts +85 -99
  893. package/src/browser/response-adapter.ts +73 -0
  894. package/src/browser/rsc-router.tsx +254 -72
  895. package/src/browser/scroll-restoration.ts +132 -49
  896. package/src/browser/segment-reconciler.ts +243 -0
  897. package/src/browser/segment-structure-assert.ts +17 -1
  898. package/src/browser/server-action-bridge.ts +510 -603
  899. package/src/browser/shallow.ts +6 -1
  900. package/src/browser/types.ts +158 -48
  901. package/src/browser/validate-redirect-origin.ts +29 -0
  902. package/src/build/generate-manifest.ts +87 -26
  903. package/src/build/generate-route-types.ts +39 -828
  904. package/src/build/index.ts +2 -5
  905. package/src/build/route-trie.ts +84 -31
  906. package/src/build/route-types/ast-helpers.ts +25 -0
  907. package/src/build/route-types/ast-route-extraction.ts +98 -0
  908. package/src/build/route-types/codegen.ts +102 -0
  909. package/src/build/route-types/include-resolution.ts +418 -0
  910. package/src/build/route-types/param-extraction.ts +48 -0
  911. package/src/build/route-types/per-module-writer.ts +128 -0
  912. package/src/build/route-types/router-processing.ts +618 -0
  913. package/src/build/route-types/scan-filter.ts +85 -0
  914. package/src/build/runtime-discovery.ts +231 -0
  915. package/src/cache/background-task.ts +34 -0
  916. package/src/cache/cache-key-utils.ts +44 -0
  917. package/src/cache/cache-policy.ts +125 -0
  918. package/src/cache/cache-runtime.ts +342 -0
  919. package/src/cache/cache-scope.ts +167 -307
  920. package/src/cache/cf/cf-cache-store.ts +573 -21
  921. package/src/cache/cf/index.ts +13 -3
  922. package/src/cache/document-cache.ts +116 -77
  923. package/src/cache/handle-capture.ts +81 -0
  924. package/src/cache/handle-snapshot.ts +41 -0
  925. package/src/cache/index.ts +1 -15
  926. package/src/cache/memory-segment-store.ts +191 -13
  927. package/src/cache/profile-registry.ts +73 -0
  928. package/src/cache/read-through-swr.ts +134 -0
  929. package/src/cache/segment-codec.ts +256 -0
  930. package/src/cache/taint.ts +153 -0
  931. package/src/cache/types.ts +72 -122
  932. package/src/client.rsc.tsx +6 -1
  933. package/src/client.tsx +117 -303
  934. package/src/component-utils.ts +4 -4
  935. package/src/components/DefaultDocument.tsx +5 -1
  936. package/src/context-var.ts +156 -0
  937. package/src/debug.ts +19 -9
  938. package/src/errors.ts +96 -8
  939. package/src/handle.ts +56 -11
  940. package/src/handles/MetaTags.tsx +73 -20
  941. package/src/handles/breadcrumbs.ts +66 -0
  942. package/src/handles/index.ts +1 -0
  943. package/src/handles/meta.ts +30 -13
  944. package/src/host/cookie-handler.ts +21 -15
  945. package/src/host/errors.ts +8 -8
  946. package/src/host/index.ts +6 -9
  947. package/src/host/pattern-matcher.ts +27 -27
  948. package/src/host/router.ts +176 -82
  949. package/src/host/testing.ts +8 -8
  950. package/src/host/types.ts +46 -9
  951. package/src/host/utils.ts +2 -2
  952. package/src/href-client.ts +196 -56
  953. package/src/index.rsc.ts +141 -22
  954. package/src/index.ts +215 -53
  955. package/src/internal-debug.ts +11 -0
  956. package/src/loader-store.ts +463 -0
  957. package/src/loader.rsc.ts +25 -143
  958. package/src/loader.ts +27 -10
  959. package/src/network-error-thrower.tsx +3 -1
  960. package/src/outlet-context.ts +1 -1
  961. package/src/outlet-provider.tsx +45 -0
  962. package/src/prerender/param-hash.ts +4 -2
  963. package/src/prerender/store.ts +122 -17
  964. package/src/prerender.ts +397 -29
  965. package/src/response-utils.ts +28 -0
  966. package/src/reverse.ts +231 -121
  967. package/src/root-error-boundary.tsx +41 -29
  968. package/src/route-content-wrapper.tsx +7 -4
  969. package/src/route-definition/dsl-helpers.ts +1106 -0
  970. package/src/route-definition/helper-factories.ts +90 -0
  971. package/src/route-definition/helpers-types.ts +485 -0
  972. package/src/route-definition/index.ts +55 -0
  973. package/src/route-definition/redirect.ts +101 -0
  974. package/src/route-definition/resolve-handler-use.ts +155 -0
  975. package/src/route-definition/use-item-types.ts +32 -0
  976. package/src/route-definition.ts +1 -1431
  977. package/src/route-map-builder.ts +162 -123
  978. package/src/route-name.ts +53 -0
  979. package/src/route-types.ts +77 -44
  980. package/src/router/content-negotiation.ts +215 -0
  981. package/src/router/debug-manifest.ts +72 -0
  982. package/src/router/error-handling.ts +10 -10
  983. package/src/router/find-match.ts +160 -0
  984. package/src/router/handler-context.ts +376 -109
  985. package/src/router/intercept-resolution.ts +35 -20
  986. package/src/router/lazy-includes.ts +237 -0
  987. package/src/router/loader-resolution.ts +330 -145
  988. package/src/router/logging.ts +251 -0
  989. package/src/router/manifest.ts +70 -22
  990. package/src/router/match-api.ts +196 -261
  991. package/src/router/match-context.ts +4 -2
  992. package/src/router/match-handlers.ts +441 -0
  993. package/src/router/match-middleware/background-revalidation.ts +108 -93
  994. package/src/router/match-middleware/cache-lookup.ts +414 -91
  995. package/src/router/match-middleware/cache-store.ts +91 -29
  996. package/src/router/match-middleware/intercept-resolution.ts +48 -21
  997. package/src/router/match-middleware/segment-resolution.ts +73 -9
  998. package/src/router/match-pipelines.ts +10 -45
  999. package/src/router/match-result.ts +154 -35
  1000. package/src/router/metrics.ts +241 -16
  1001. package/src/router/middleware-cookies.ts +55 -0
  1002. package/src/router/middleware-types.ts +209 -0
  1003. package/src/router/middleware.ts +373 -371
  1004. package/src/router/navigation-snapshot.ts +182 -0
  1005. package/src/router/pattern-matching.ts +291 -54
  1006. package/src/router/prerender-match.ts +502 -0
  1007. package/src/router/preview-match.ts +98 -0
  1008. package/src/router/request-classification.ts +310 -0
  1009. package/src/router/revalidation.ts +195 -40
  1010. package/src/router/route-snapshot.ts +245 -0
  1011. package/src/router/router-context.ts +41 -21
  1012. package/src/router/router-interfaces.ts +490 -0
  1013. package/src/router/router-options.ts +618 -0
  1014. package/src/router/router-registry.ts +21 -0
  1015. package/src/router/segment-resolution/fresh.ts +756 -0
  1016. package/src/router/segment-resolution/helpers.ts +268 -0
  1017. package/src/router/segment-resolution/loader-cache.ts +199 -0
  1018. package/src/router/segment-resolution/revalidation.ts +1407 -0
  1019. package/src/router/segment-resolution/static-store.ts +67 -0
  1020. package/src/router/segment-resolution.ts +21 -1336
  1021. package/src/router/segment-wrappers.ts +291 -0
  1022. package/src/router/substitute-pattern-params.ts +56 -0
  1023. package/src/router/telemetry-otel.ts +299 -0
  1024. package/src/router/telemetry.ts +300 -0
  1025. package/src/router/timeout.ts +148 -0
  1026. package/src/router/trie-matching.ts +111 -39
  1027. package/src/router/types.ts +17 -9
  1028. package/src/router/url-params.ts +49 -0
  1029. package/src/router.ts +707 -2291
  1030. package/src/rsc/handler-context.ts +45 -0
  1031. package/src/rsc/handler.ts +864 -1117
  1032. package/src/rsc/helpers.ts +181 -19
  1033. package/src/rsc/index.ts +1 -21
  1034. package/src/rsc/loader-fetch.ts +229 -0
  1035. package/src/rsc/manifest-init.ts +90 -0
  1036. package/src/rsc/nonce.ts +14 -0
  1037. package/src/rsc/origin-guard.ts +141 -0
  1038. package/src/rsc/progressive-enhancement.ts +395 -0
  1039. package/src/rsc/response-error.ts +37 -0
  1040. package/src/rsc/response-route-handler.ts +360 -0
  1041. package/src/rsc/rsc-rendering.ts +256 -0
  1042. package/src/rsc/runtime-warnings.ts +42 -0
  1043. package/src/rsc/server-action.ts +360 -0
  1044. package/src/rsc/ssr-setup.ts +128 -0
  1045. package/src/rsc/types.ts +52 -11
  1046. package/src/search-params.ts +230 -0
  1047. package/src/segment-content-promise.ts +67 -0
  1048. package/src/segment-loader-promise.ts +122 -0
  1049. package/src/segment-system.tsx +187 -38
  1050. package/src/serialize.ts +243 -0
  1051. package/src/server/context.ts +403 -88
  1052. package/src/server/cookie-store.ts +190 -0
  1053. package/src/server/fetchable-loader-store.ts +37 -0
  1054. package/src/server/handle-store.ts +113 -15
  1055. package/src/server/loader-registry.ts +24 -64
  1056. package/src/server/request-context.ts +603 -109
  1057. package/src/server.ts +35 -155
  1058. package/src/ssr/index.tsx +107 -30
  1059. package/src/static-handler.ts +126 -0
  1060. package/src/theme/ThemeProvider.tsx +21 -15
  1061. package/src/theme/ThemeScript.tsx +5 -5
  1062. package/src/theme/constants.ts +5 -2
  1063. package/src/theme/index.ts +4 -14
  1064. package/src/theme/theme-context.ts +4 -30
  1065. package/src/theme/theme-script.ts +21 -18
  1066. package/src/types/boundaries.ts +158 -0
  1067. package/src/types/cache-types.ts +198 -0
  1068. package/src/types/error-types.ts +192 -0
  1069. package/src/types/global-namespace.ts +113 -0
  1070. package/src/types/handler-context.ts +806 -0
  1071. package/src/types/index.ts +89 -0
  1072. package/src/types/loader-types.ts +209 -0
  1073. package/src/types/request-scope.ts +126 -0
  1074. package/src/types/route-config.ts +170 -0
  1075. package/src/types/route-entry.ts +120 -0
  1076. package/src/types/segments.ts +167 -0
  1077. package/src/types.ts +1 -1763
  1078. package/src/urls/include-helper.ts +164 -0
  1079. package/src/urls/index.ts +50 -0
  1080. package/src/urls/path-helper-types.ts +372 -0
  1081. package/src/urls/path-helper.ts +329 -0
  1082. package/src/urls/pattern-types.ts +124 -0
  1083. package/src/urls/response-types.ts +109 -0
  1084. package/src/urls/type-extraction.ts +282 -0
  1085. package/src/urls/urls-function.ts +94 -0
  1086. package/src/urls.ts +1 -1288
  1087. package/src/use-loader.tsx +511 -107
  1088. package/src/vite/debug.ts +184 -0
  1089. package/src/vite/discovery/bundle-postprocess.ts +181 -0
  1090. package/src/vite/discovery/discover-routers.ts +374 -0
  1091. package/src/vite/discovery/discovery-errors.ts +194 -0
  1092. package/src/vite/discovery/gate-state.ts +171 -0
  1093. package/src/vite/discovery/prerender-collection.ts +480 -0
  1094. package/src/vite/discovery/route-types-writer.ts +258 -0
  1095. package/src/vite/discovery/self-gen-tracking.ts +73 -0
  1096. package/src/vite/discovery/state.ts +143 -0
  1097. package/src/vite/discovery/virtual-module-codegen.ts +193 -0
  1098. package/src/vite/index.ts +15 -2012
  1099. package/src/vite/plugin-types.ts +103 -0
  1100. package/src/vite/plugins/cjs-to-esm.ts +98 -0
  1101. package/src/vite/plugins/client-ref-dedup.ts +131 -0
  1102. package/src/vite/plugins/client-ref-hashing.ts +117 -0
  1103. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1104. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1105. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  1106. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +109 -66
  1107. package/src/vite/plugins/expose-id-utils.ts +303 -0
  1108. package/src/vite/plugins/expose-ids/export-analysis.ts +320 -0
  1109. package/src/vite/plugins/expose-ids/handler-transform.ts +209 -0
  1110. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1111. package/src/vite/plugins/expose-ids/router-transform.ts +127 -0
  1112. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1113. package/src/vite/plugins/expose-internal-ids.ts +816 -0
  1114. package/src/vite/plugins/performance-tracks.ts +92 -0
  1115. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1116. package/src/vite/plugins/use-cache-transform.ts +336 -0
  1117. package/src/vite/plugins/version-injector.ts +109 -0
  1118. package/src/vite/plugins/version-plugin.ts +323 -0
  1119. package/src/vite/plugins/virtual-entries.ts +123 -0
  1120. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1121. package/src/vite/rango.ts +509 -0
  1122. package/src/vite/router-discovery.ts +1511 -0
  1123. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1124. package/src/vite/utils/banner.ts +36 -0
  1125. package/src/vite/utils/bundle-analysis.ts +139 -0
  1126. package/src/vite/utils/forward-user-plugins.ts +193 -0
  1127. package/src/vite/utils/manifest-utils.ts +86 -0
  1128. package/src/vite/utils/package-resolution.ts +161 -0
  1129. package/src/vite/utils/prerender-utils.ts +222 -0
  1130. package/src/vite/utils/shared-utils.ts +174 -0
  1131. package/CLAUDE.md +0 -43
  1132. package/src/browser/lru-cache.ts +0 -69
  1133. package/src/browser/request-controller.ts +0 -164
  1134. package/src/cache/memory-store.ts +0 -253
  1135. package/src/router.gen.ts +0 -6
  1136. package/src/urls.gen.ts +0 -8
  1137. package/src/vite/expose-handle-id.ts +0 -209
  1138. package/src/vite/expose-loader-id.ts +0 -426
  1139. package/src/vite/expose-location-state-id.ts +0 -177
  1140. package/src/vite/expose-prerender-handler-id.ts +0 -429
  1141. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -1,7 +1,17 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
2
  import type { ReactNode } from "react";
3
- import type { PartialCacheOptions, ErrorBoundaryHandler, Handler, LoaderDefinition, MiddlewareFn, NotFoundBoundaryHandler, ShouldRevalidateFn } from "../types";
4
- import { invariant } from "../errors";
3
+ import type {
4
+ PartialCacheOptions,
5
+ ErrorBoundaryHandler,
6
+ Handler,
7
+ LoaderDefinition,
8
+ MiddlewareFn,
9
+ NotFoundBoundaryHandler,
10
+ ShouldRevalidateFn,
11
+ TransitionConfig,
12
+ } from "../types";
13
+ import { invariant, DslContextError } from "../errors";
14
+ import type { DefaultRouteName } from "../types/global-namespace.js";
5
15
 
6
16
  // ============================================================================
7
17
  // Performance Metrics Types
@@ -13,9 +23,10 @@ import { invariant } from "../errors";
13
23
  * @internal This type is an implementation detail and may change without notice.
14
24
  */
15
25
  export interface PerformanceMetric {
16
- label: string; // e.g., "route-matching", "loader:UserLoader"
17
- duration: number; // milliseconds
18
- startTime: number; // relative to request start
26
+ label: string; // e.g., "route-matching", "loader:UserLoader"
27
+ duration: number; // milliseconds
28
+ startTime: number; // relative to request start
29
+ depth?: number; // nesting level for hierarchical display (0 = top-level)
19
30
  }
20
31
 
21
32
  /**
@@ -29,7 +40,7 @@ export interface MetricsStore {
29
40
  metrics: PerformanceMetric[];
30
41
  }
31
42
  // ============================================================================
32
- // RSC Router Context
43
+ // Rango Context
33
44
  // ============================================================================
34
45
 
35
46
  /**
@@ -60,6 +71,10 @@ export type EntryPropCommon = {
60
71
  };
61
72
 
62
73
  /**
74
+ * Attachments resolved by walking the parent chain, not owned by the entry:
75
+ * middleware composes downward; revalidate and the error/notFound boundaries are
76
+ * resolved by nearest-ancestor lookup. Inherited, not a single execution chain.
77
+ *
63
78
  * @internal This type is an implementation detail and may change without notice.
64
79
  */
65
80
  export type EntryPropDatas = {
@@ -69,6 +84,16 @@ export type EntryPropDatas = {
69
84
  notFoundBoundary: (ReactNode | NotFoundBoundaryHandler)[];
70
85
  };
71
86
 
87
+ /**
88
+ * Render-time presentation fields shared by every entry variant.
89
+ *
90
+ * @internal This type is an implementation detail and may change without notice.
91
+ */
92
+ export type EntryPropRender = {
93
+ loading?: ReactNode | false;
94
+ transition?: TransitionConfig;
95
+ };
96
+
72
97
  /**
73
98
  * Loader entry stored in EntryData
74
99
  * Contains the loader definition and its revalidation rules
@@ -105,12 +130,14 @@ export type InterceptSegmentsState = {
105
130
  * @internal This type is an implementation detail and may change without notice.
106
131
  */
107
132
  export type InterceptSelectorContext<TEnv = any> = {
108
- from: URL; // Source URL (where user is coming from)
109
- to: URL; // Destination URL (where user is navigating to)
110
- params: Record<string, string>; // Matched route params
111
- request: Request; // The HTTP request object
112
- env: TEnv; // Platform bindings (Cloudflare env, etc.)
113
- segments: InterceptSegmentsState; // Client's current segments (where navigating FROM)
133
+ from: URL; // Source URL (where user is coming from)
134
+ to: URL; // Destination URL (where user is navigating to)
135
+ params: Record<string, string>; // Matched route params
136
+ request: Request; // The HTTP request object
137
+ env: TEnv; // Platform bindings (Cloudflare env, etc.)
138
+ segments: InterceptSegmentsState; // Client's current segments (where navigating FROM)
139
+ fromRouteName?: DefaultRouteName; // Named route being navigated away from (undefined for unnamed routes)
140
+ toRouteName?: DefaultRouteName; // Named route being navigated to (undefined for unnamed routes)
114
141
  };
115
142
 
116
143
  /**
@@ -119,7 +146,9 @@ export type InterceptSelectorContext<TEnv = any> = {
119
146
  *
120
147
  * @internal This type is an implementation detail and may change without notice.
121
148
  */
122
- export type InterceptWhenFn<TEnv = any> = (ctx: InterceptSelectorContext<TEnv>) => boolean;
149
+ export type InterceptWhenFn<TEnv = any> = (
150
+ ctx: InterceptSelectorContext<TEnv>,
151
+ ) => boolean;
123
152
 
124
153
  /**
125
154
  * Intercept entry stored in EntryData
@@ -128,8 +157,8 @@ export type InterceptWhenFn<TEnv = any> = (ctx: InterceptSelectorContext<TEnv>)
128
157
  * @internal This type is an implementation detail and may change without notice.
129
158
  */
130
159
  export type InterceptEntry = {
131
- slotName: `@${string}`; // e.g., "@modal"
132
- routeName: string; // e.g., "card"
160
+ slotName: `@${string}`; // e.g., "@modal"
161
+ routeName: string; // e.g., "card"
133
162
  handler: ReactNode | Handler<any, any, any>;
134
163
  middleware: MiddlewareFn<any, any>[];
135
164
  revalidate: ShouldRevalidateFn<any, any>[];
@@ -137,14 +166,34 @@ export type InterceptEntry = {
137
166
  notFoundBoundary: (ReactNode | NotFoundBoundaryHandler)[];
138
167
  loader: LoaderEntry[];
139
168
  loading?: ReactNode | false;
140
- layout?: ReactNode | Handler<any, any, any>; // Wrapper layout with <Outlet /> for content
141
- when: InterceptWhenFn[]; // Selector conditions - all must return true to intercept
169
+ transition?: TransitionConfig;
170
+ layout?: ReactNode | Handler<any, any, any>; // Wrapper layout with <Outlet /> for content
171
+ when: InterceptWhenFn[]; // Selector conditions - all must return true to intercept
142
172
  };
143
173
 
174
+ export interface ParallelEntryData
175
+ extends EntryPropCommon, EntryPropDatas, EntryPropSegments, EntryPropRender {
176
+ type: "parallel";
177
+ handler: Record<`@${string}`, Handler<any, any, any> | ReactNode>;
178
+ /** Set when any parallel slot is a Static definition */
179
+ isStaticPrerender?: true;
180
+ /** Per-slot static handler $$ids for build-time store lookup */
181
+ staticHandlerIds?: Record<string, string>;
182
+ }
183
+
184
+ export type ParallelEntries = Partial<Record<`@${string}`, ParallelEntryData>>;
185
+
186
+ /**
187
+ * This entry's own structural children plus its owned loaders. `loader` lives
188
+ * here (not in EntryPropDatas) because loaders are owned by the entry, not
189
+ * inherited from ancestors.
190
+ *
191
+ * @internal This type is an implementation detail and may change without notice.
192
+ */
144
193
  export type EntryPropSegments = {
145
194
  loader: LoaderEntry[];
146
195
  layout: EntryData[];
147
- parallel: EntryData[]; // type: "parallel" entries with their own loaders/revalidate/loading
196
+ parallel: ParallelEntries; // slot -> parallel entry (same entry may back multiple slots)
148
197
  intercept: InterceptEntry[]; // intercept definitions for soft navigation
149
198
  };
150
199
 
@@ -152,40 +201,49 @@ export type EntryData =
152
201
  | ({
153
202
  type: "route";
154
203
  handler: Handler<any, any, any>;
155
- loading?: ReactNode | false;
156
204
  /** URL pattern for this route (used by path() in urls()) */
157
205
  pattern?: string;
158
- /** Set when handler is a createPrerenderHandler definition */
206
+ /** Set when handler is a Prerender definition */
159
207
  isPrerender?: true;
160
208
  /** Original PrerenderHandlerDefinition (for build-time getParams access) */
161
- prerenderDef?: { getParams?: () => Promise<any[]> | any[]; options?: { passthrough?: boolean } };
209
+ prerenderDef?: {
210
+ getParams?: (ctx: any) => Promise<any[]> | any[];
211
+ options?: { concurrency?: number };
212
+ };
213
+ /** Set when route is wrapped with Passthrough() — has a separate live handler */
214
+ isPassthrough?: true;
215
+ /** Live handler for runtime fallback (only set on Passthrough routes) */
216
+ liveHandler?: Handler<any, any, any>;
217
+ /** Set when handler is a Static definition (build-time only) */
218
+ isStaticPrerender?: true;
219
+ /** Static handler $$id for build-time store lookup */
220
+ staticHandlerId?: string;
162
221
  /** Response type for non-RSC routes (json, text, image, any) */
163
222
  responseType?: string;
164
223
  } & EntryPropCommon &
165
224
  EntryPropDatas &
166
- EntryPropSegments)
225
+ EntryPropSegments &
226
+ EntryPropRender)
167
227
  | ({
168
228
  type: "layout";
169
229
  handler: ReactNode | Handler<any, any, any>;
170
- loading?: ReactNode | false;
171
- } & EntryPropCommon &
172
- EntryPropDatas &
173
- EntryPropSegments)
174
- | ({
175
- type: "parallel";
176
- handler: Record<`@${string}`, Handler<any, any, any> | ReactNode>;
177
- loading?: ReactNode | false;
230
+ /** Set when handler is a Static definition (build-time only) */
231
+ isStaticPrerender?: true;
232
+ /** Static handler $$id for build-time store lookup */
233
+ staticHandlerId?: string;
178
234
  } & EntryPropCommon &
179
235
  EntryPropDatas &
180
- EntryPropSegments)
236
+ EntryPropSegments &
237
+ EntryPropRender)
238
+ | ParallelEntryData
181
239
  | ({
182
240
  type: "cache";
183
241
  /** Cache entries create cache boundaries and render like layouts (with Outlet) */
184
242
  handler: ReactNode | Handler<any, any, any>;
185
- loading?: ReactNode | false;
186
243
  } & EntryPropCommon &
187
244
  EntryPropDatas &
188
- EntryPropSegments);
245
+ EntryPropSegments &
246
+ EntryPropRender);
189
247
 
190
248
  /**
191
249
  * Tracked include info for build-time manifest generation
@@ -217,17 +275,71 @@ interface HelperContext {
217
275
  patternsByPrefix?: Map<string, Map<string, string>>;
218
276
  /** Trailing slash config per route name */
219
277
  trailingSlash?: Map<string, "never" | "always" | "ignore">;
278
+ /** Search param schemas per route name */
279
+ searchSchemas?: Map<string, Record<string, string>>;
220
280
  /** URL prefix from include() - applied to all path() patterns */
221
281
  urlPrefix?: string;
222
282
  /** Name prefix from include() - applied to all named routes */
223
283
  namePrefix?: string;
284
+ /** True when this scope is at root level (no named include boundary above).
285
+ * Routes at root scope allow dot-local reverse to fall back to bare names. */
286
+ rootScoped?: boolean;
224
287
  /** Run helper for cleaner middleware code */
225
288
  run?: <T>(fn: () => T | Promise<T>) => T | Promise<T>;
226
289
  /** Tracked includes for build-time manifest generation */
227
290
  trackedIncludes?: TrackedInclude[];
291
+ /** Cache profiles for DSL-time cache("profileName") resolution */
292
+ cacheProfiles?: Record<
293
+ string,
294
+ import("../cache/profile-registry.js").CacheProfile
295
+ >;
296
+ /** True when resolving handlers inside a cache() DSL boundary.
297
+ * Read by ctx.get() to guard non-cacheable variable reads. */
298
+ insideCacheScope?: boolean;
299
+ /**
300
+ * Include scope string applied to direct-descendant shortCodes.
301
+ *
302
+ * Each `include(...)` call allocates a sibling-positional token like `I0`,
303
+ * `I1` from its parent's include counter and stores the composed scope
304
+ * (`${parentScope}I${idx}`) in its lazyContext. When the include's handler
305
+ * evaluates lazily, the store's `includeScope` is set from that context so
306
+ * every direct-descendant shortCode is generated as
307
+ * `${parent.shortCode}${includeScope}${prefix}${index}` — preventing
308
+ * collisions with siblings declared outside the include.
309
+ *
310
+ * The scope is NOT propagated through `store.run(...)`, so layouts /
311
+ * parallels / caches inside the include absorb the scope into their own
312
+ * shortCodes and their children start fresh.
313
+ */
314
+ includeScope?: string;
315
+ }
316
+ // Use a global symbol key so the AsyncLocalStorage instance survives HMR
317
+ // module re-evaluation. Without this, Vite's RSC module runner may create
318
+ // a new instance when context.ts is re-evaluated, while other modules still
319
+ // hold references to the old instance — causing getStore() to return
320
+ // undefined even inside a run() callback.
321
+ const RSC_CONTEXT_KEY = Symbol.for("rangojs-router:rsc-context");
322
+ export const RangoContext: AsyncLocalStorage<HelperContext> = ((
323
+ globalThis as any
324
+ )[RSC_CONTEXT_KEY] ??= new AsyncLocalStorage<HelperContext>());
325
+
326
+ /** shortCode prefix letter per entry type (e.g. "L0", "R2", "M1C0"). */
327
+ const SHORT_CODE_PREFIX: Record<
328
+ "layout" | "parallel" | "route" | "loader" | "cache",
329
+ string
330
+ > = {
331
+ layout: "L",
332
+ parallel: "P",
333
+ route: "R",
334
+ loader: "D",
335
+ cache: "C",
336
+ };
337
+
338
+ /** Post-increment a named per-store counter, returning the prior value. */
339
+ function bumpCounter(store: HelperContext, key: string): number {
340
+ store.counters[key] ??= 0;
341
+ return store.counters[key]++;
228
342
  }
229
- export const RSCRouterContext: AsyncLocalStorage<HelperContext> =
230
- new AsyncLocalStorage<HelperContext>();
231
343
 
232
344
  export const getContext = (): {
233
345
  context: AsyncLocalStorage<HelperContext>;
@@ -235,29 +347,29 @@ export const getContext = (): {
235
347
  getParent: () => EntryData | null;
236
348
  getOrCreateStore: (forRoute?: string) => HelperContext;
237
349
  getNextIndex: (
238
- type: (string & {}) | "layout" | "parallel" | "middleware" | "revalidate"
350
+ type: (string & {}) | "layout" | "parallel" | "middleware" | "revalidate",
239
351
  ) => string;
240
352
  getShortCode: (
241
- type: "layout" | "parallel" | "route" | "loader" | "cache"
353
+ type: "layout" | "parallel" | "route" | "loader" | "cache",
242
354
  ) => string;
243
355
  run: <T>(
244
356
  namespace: string,
245
357
  parent: EntryData | null,
246
- callback: (...args: any[]) => T
358
+ callback: (...args: any[]) => T,
247
359
  ) => T;
248
360
  runWithStore: <T>(
249
361
  store: HelperContext,
250
362
  namespace: string,
251
363
  parent: EntryData | null,
252
- callback: (...args: any[]) => T
364
+ callback: (...args: any[]) => T,
253
365
  ) => T;
254
366
  } => {
255
- const context = RSCRouterContext;
367
+ const context = RangoContext;
256
368
 
257
369
  return {
258
370
  context,
259
371
  getOrCreateStore: (forRoute?: string): HelperContext => {
260
- let store = RSCRouterContext.getStore();
372
+ let store = RangoContext.getStore();
261
373
  if (!store) {
262
374
  store = {
263
375
  manifest: new Map<string, EntryData>(),
@@ -268,6 +380,7 @@ export const getContext = (): {
268
380
  patterns: new Map<string, string>(),
269
381
  patternsByPrefix: new Map<string, Map<string, string>>(),
270
382
  trailingSlash: new Map<string, "never" | "always" | "ignore">(),
383
+ searchSchemas: new Map<string, Record<string, string>>(),
271
384
  } satisfies HelperContext;
272
385
  }
273
386
  return store;
@@ -276,7 +389,7 @@ export const getContext = (): {
276
389
  const store = context.getStore();
277
390
  if (!store) {
278
391
  throw new Error(
279
- "RSC Router context store is not available. Make sure to run within RSC Router context."
392
+ "Rango context store is not available. Make sure to run within Rango context.",
280
393
  );
281
394
  }
282
395
  return store;
@@ -290,44 +403,46 @@ export const getContext = (): {
290
403
  return store.parent;
291
404
  },
292
405
  getNextIndex: (
293
- type: (string & {}) | "layout" | "parallel" | "middleware" | "revalidate"
406
+ type: (string & {}) | "layout" | "parallel" | "middleware" | "revalidate",
294
407
  ) => {
295
408
  const store = context.getStore();
296
- invariant(store, "No context RSCRouterContext available");
297
- store.counters[type] ??= 0;
298
- const index = store.counters[type];
299
- store.counters[type] = index + 1;
300
- return `$${type}.${index}`;
409
+ invariant(store, "No context RangoContext available");
410
+ return `$${type}.${bumpCounter(store, type)}`;
301
411
  },
302
- getShortCode: (type: "layout" | "parallel" | "route" | "loader" | "cache") => {
412
+ getShortCode: (
413
+ type: "layout" | "parallel" | "route" | "loader" | "cache",
414
+ ) => {
303
415
  const store = context.getStore();
304
- invariant(store, "No context RSCRouterContext available");
416
+ invariant(store, "No context RangoContext available");
305
417
 
306
418
  const parent = store.parent;
307
- const prefix = type === "layout" ? "L" : type === "parallel" ? "P" : type === "loader" ? "D" : type === "cache" ? "C" : "R";
308
- const mountPrefix = store.mountIndex !== undefined ? `M${store.mountIndex}` : "";
419
+ const prefix = SHORT_CODE_PREFIX[type];
420
+ const mountPrefix =
421
+ store.mountIndex !== undefined ? `M${store.mountIndex}` : "";
422
+
423
+ const includeScope = store.includeScope ?? "";
309
424
 
310
425
  if (!parent) {
311
426
  // Root entry: prefix with mount index and use mount-scoped counter
312
- const counterKey = mountPrefix ? `${mountPrefix}_root_${type}` : `root_${type}`;
313
- store.counters[counterKey] ??= 0;
314
- const index = store.counters[counterKey];
315
- store.counters[counterKey] = index + 1;
316
- return `${mountPrefix}${prefix}${index}`;
427
+ const counterKey = mountPrefix
428
+ ? `${mountPrefix}_root_${type}`
429
+ : `root_${type}`;
430
+ return `${mountPrefix}${prefix}${bumpCounter(store, counterKey)}`;
317
431
  } else {
318
- // Child entry: use parent-scoped counter (parent already has M prefix)
319
- const counterKey = `${parent.shortCode}_${type}`;
320
- store.counters[counterKey] ??= 0;
321
- const index = store.counters[counterKey];
322
- store.counters[counterKey] = index + 1;
323
- return `${parent.shortCode}${prefix}${index}`;
432
+ // Child entry: use parent-scoped counter with includeScope appended.
433
+ // When we're evaluating a lazy include's direct children, includeScope
434
+ // is a per-include token like "I0" / "I1I0" that partitions the
435
+ // parent's counter namespace so routes inside one include cannot
436
+ // collide with siblings declared outside it.
437
+ const counterKey = `${parent.shortCode}${includeScope}_${type}`;
438
+ return `${parent.shortCode}${includeScope}${prefix}${bumpCounter(store, counterKey)}`;
324
439
  }
325
440
  },
326
441
  runWithStore: <T>(
327
442
  store: HelperContext,
328
443
  namespace: string,
329
444
  parent: EntryData | null,
330
- callback: (...args: any[]) => T
445
+ callback: (...args: any[]) => T,
331
446
  ): T => {
332
447
  return context.run(
333
448
  {
@@ -341,24 +456,33 @@ export const getContext = (): {
341
456
  isSSR: store.isSSR,
342
457
  patterns: store.patterns,
343
458
  trailingSlash: store.trailingSlash,
459
+ searchSchemas: store.searchSchemas,
344
460
  urlPrefix: store.urlPrefix,
345
461
  namePrefix: store.namePrefix,
462
+ rootScoped: store.rootScoped,
346
463
  trackedIncludes: store.trackedIncludes,
464
+ cacheProfiles: store.cacheProfiles,
465
+ includeScope: store.includeScope,
347
466
  },
348
- callback
467
+ callback,
349
468
  );
350
469
  },
351
470
  run: <T>(
352
471
  namespace: string,
353
472
  parent: EntryData | null,
354
- callback: (...args: any[]) => T
473
+ callback: (...args: any[]) => T,
355
474
  ) => {
356
475
  const store = context.getStore();
357
476
  // Preserve parent counters to ensure globally unique shortCodes
358
477
  const counters = store?.counters || {};
359
478
  const manifest = store ? store.manifest : new Map<string, EntryData>();
360
479
  const patterns = store?.patterns || new Map<string, string>();
361
- const trailingSlash = store?.trailingSlash || new Map<string, "never" | "always" | "ignore">();
480
+ const patternsByPrefix = store?.patternsByPrefix;
481
+ const trailingSlash =
482
+ store?.trailingSlash ||
483
+ new Map<string, "never" | "always" | "ignore">();
484
+ const searchSchemas =
485
+ store?.searchSchemas || new Map<string, Record<string, string>>();
362
486
  return context.run(
363
487
  {
364
488
  manifest,
@@ -370,17 +494,46 @@ export const getContext = (): {
370
494
  metrics: store?.metrics,
371
495
  isSSR: store?.isSSR,
372
496
  patterns,
497
+ patternsByPrefix,
373
498
  trailingSlash,
499
+ searchSchemas,
374
500
  urlPrefix: store?.urlPrefix,
375
501
  namePrefix: store?.namePrefix,
502
+ rootScoped: store?.rootScoped,
376
503
  trackedIncludes: store?.trackedIncludes,
504
+ cacheProfiles: store?.cacheProfiles,
377
505
  },
378
- callback
506
+ callback,
379
507
  );
380
508
  },
381
509
  };
382
510
  };
383
511
 
512
+ /**
513
+ * Acquire the active DSL build context, throwing `message` if a helper was
514
+ * called outside a urls()/map() builder. Returns the store API and the live
515
+ * HelperContext so callers avoid a second getContext() lookup.
516
+ */
517
+ export function requireDslContext(message: string): {
518
+ store: ReturnType<typeof getContext>;
519
+ ctx: HelperContext;
520
+ } {
521
+ const store = getContext();
522
+ const ctx = store.context.getStore();
523
+ if (!ctx) {
524
+ // The only reason the store is absent here is that a route-definition helper
525
+ // ran with no active RangoContext — i.e. outside a urls()/map() builder.
526
+ // Record that as the cause so the throw is self-explanatory, not a bare
527
+ // "must be called inside urls()" with no indication of the mechanism.
528
+ throw new DslContextError(message, {
529
+ cause:
530
+ "RangoContext store is undefined: a route-definition helper was called " +
531
+ "outside an active urls()/map() builder.",
532
+ });
533
+ }
534
+ return { store, ctx };
535
+ }
536
+
384
537
  /**
385
538
  * Run a callback with specific URL and name prefixes
386
539
  * Used by include() to apply prefixes to nested patterns
@@ -388,30 +541,61 @@ export const getContext = (): {
388
541
  export function runWithPrefixes<T>(
389
542
  urlPrefix: string,
390
543
  namePrefix: string | undefined,
391
- callback: () => T
544
+ callback: () => T,
392
545
  ): T {
393
- const store = RSCRouterContext.getStore();
546
+ const store = RangoContext.getStore();
394
547
  if (!store) {
395
548
  throw new Error("runWithPrefixes must be called within router context");
396
549
  }
397
550
 
398
- // Combine prefixes if there are existing ones
399
- const combinedUrlPrefix = store.urlPrefix
400
- ? `${store.urlPrefix}${urlPrefix}`
401
- : urlPrefix;
402
- const combinedNamePrefix = namePrefix
403
- ? store.namePrefix
404
- ? `${store.namePrefix}.${namePrefix}`
405
- : namePrefix
406
- : store.namePrefix;
407
-
408
- return RSCRouterContext.run(
551
+ // Combine prefixes if there are existing ones, avoiding double slashes
552
+ let combinedUrlPrefix: string;
553
+ if (store.urlPrefix) {
554
+ if (store.urlPrefix.endsWith("/") && urlPrefix.startsWith("/")) {
555
+ combinedUrlPrefix = store.urlPrefix + urlPrefix.slice(1);
556
+ } else {
557
+ combinedUrlPrefix = store.urlPrefix + urlPrefix;
558
+ }
559
+ } else {
560
+ combinedUrlPrefix = urlPrefix;
561
+ }
562
+ const combinedNamePrefix =
563
+ namePrefix !== undefined
564
+ ? namePrefix === ""
565
+ ? store.namePrefix
566
+ : store.namePrefix
567
+ ? `${store.namePrefix}.${namePrefix}`
568
+ : namePrefix
569
+ : store.namePrefix;
570
+
571
+ // Track root scope for dot-local reverse resolution.
572
+ //
573
+ // The flag answers: "can this route reach bare names at root scope?"
574
+ // It propagates through the include chain:
575
+ //
576
+ // { name: "" } — transparent: inherit parent, default true
577
+ // { name: "foo" } — inherit parent if already set, else create boundary (false)
578
+ // no name — inherit parent unchanged
579
+ //
580
+ // This means { name: "" } + nested { name: "sub" } keeps rootScoped=true
581
+ // (the outer transparent include establishes root access, and the inner
582
+ // named include inherits it). But a direct { name: "sub" } at root gets
583
+ // rootScoped=false (no prior root-access grant, so it creates a boundary).
584
+ const combinedRootScoped =
585
+ namePrefix === ""
586
+ ? (store.rootScoped ?? true)
587
+ : namePrefix !== undefined
588
+ ? (store.rootScoped ?? false)
589
+ : store.rootScoped;
590
+
591
+ return RangoContext.run(
409
592
  {
410
593
  ...store,
411
594
  urlPrefix: combinedUrlPrefix,
412
595
  namePrefix: combinedNamePrefix,
596
+ rootScoped: combinedRootScoped,
413
597
  },
414
- callback
598
+ callback,
415
599
  );
416
600
  }
417
601
 
@@ -419,7 +603,7 @@ export function runWithPrefixes<T>(
419
603
  * Get current URL prefix from context
420
604
  */
421
605
  export function getUrlPrefix(): string {
422
- const store = RSCRouterContext.getStore();
606
+ const store = RangoContext.getStore();
423
607
  return store?.urlPrefix || "";
424
608
  }
425
609
 
@@ -427,13 +611,96 @@ export function getUrlPrefix(): string {
427
611
  * Get current name prefix from context
428
612
  */
429
613
  export function getNamePrefix(): string | undefined {
430
- const store = RSCRouterContext.getStore();
614
+ const store = RangoContext.getStore();
431
615
  return store?.namePrefix;
432
616
  }
433
617
 
618
+ /**
619
+ * Get whether the current scope is at root level (no named include boundary above).
620
+ * Returns true at root or inside { name: "" } includes, false inside named includes.
621
+ */
622
+ export function getRootScoped(): boolean {
623
+ const store = RangoContext.getStore();
624
+ return store?.rootScoped ?? true;
625
+ }
626
+
434
627
  // Export HelperContext type for use in other modules
435
628
  export type { HelperContext };
436
629
 
630
+ /**
631
+ * Return an isolated copy of a lazy include's captured parent entry.
632
+ *
633
+ * DSL helpers (loader(), middleware(), etc.) mutate ctx.parent in place.
634
+ * Multiple include() scopes capture the *same* syntheticMapRoot as their
635
+ * parent, so without isolation one include's loaders/middleware leak into
636
+ * every other route that shares that root.
637
+ *
638
+ * The clone is shallow: only the mutable arrays are copied so each
639
+ * include pushes to its own list. The rest of the entry (id, shortCode,
640
+ * parent pointer, handler) stays shared, which is correct and cheap.
641
+ */
642
+ export function getIsolatedLazyParent(
643
+ captured: EntryData | null | undefined,
644
+ ): EntryData | null {
645
+ if (!captured) return null;
646
+ return {
647
+ ...captured,
648
+ loader: [...captured.loader],
649
+ middleware: [...captured.middleware],
650
+ revalidate: [...captured.revalidate],
651
+ errorBoundary: [...captured.errorBoundary],
652
+ notFoundBoundary: [...captured.notFoundBoundary],
653
+ layout: [...captured.layout],
654
+ parallel: { ...captured.parallel },
655
+ intercept: [...captured.intercept],
656
+ };
657
+ }
658
+
659
+ export function getParallelEntries(
660
+ parallels: ParallelEntries | EntryData[] | undefined,
661
+ ): ParallelEntryData[] {
662
+ if (!parallels) return [];
663
+ if (Array.isArray(parallels)) {
664
+ return parallels.filter(
665
+ (entry): entry is ParallelEntryData => entry.type === "parallel",
666
+ );
667
+ }
668
+ return Object.values(parallels).filter(
669
+ (entry): entry is ParallelEntryData => !!entry,
670
+ );
671
+ }
672
+
673
+ export function getParallelSlotEntries(
674
+ parallels: ParallelEntries | EntryData[] | undefined,
675
+ ): Array<{ slot: `@${string}`; entry: ParallelEntryData }> {
676
+ if (!parallels) return [];
677
+
678
+ if (Array.isArray(parallels)) {
679
+ return getParallelEntries(parallels).flatMap((entry) =>
680
+ (Object.keys(entry.handler) as `@${string}`[]).map((slot) => ({
681
+ slot,
682
+ entry,
683
+ })),
684
+ );
685
+ }
686
+
687
+ return Object.entries(parallels)
688
+ .filter(([, entry]) => !!entry)
689
+ .map(([slot, entry]) => ({
690
+ slot: slot as `@${string}`,
691
+ entry: entry!,
692
+ }));
693
+ }
694
+
695
+ export function getParallelSlotCount(
696
+ parallels: ParallelEntries | EntryData[] | undefined,
697
+ ): number {
698
+ if (!parallels) return 0;
699
+ return Array.isArray(parallels)
700
+ ? parallels.filter((entry) => entry?.type === "parallel").length
701
+ : Object.keys(parallels).length;
702
+ }
703
+
437
704
  // ============================================================================
438
705
  // Performance Metrics Helpers
439
706
  // ============================================================================
@@ -449,8 +716,8 @@ export type { HelperContext };
449
716
  * done(); // Records duration
450
717
  * ```
451
718
  */
452
- export function track(label: string): () => void {
453
- const store = RSCRouterContext.getStore();
719
+ export function track(label: string, depth?: number): () => void {
720
+ const store = RangoContext.getStore();
454
721
 
455
722
  // No-op if context unavailable or metrics not enabled
456
723
  if (!store?.metrics?.enabled) {
@@ -460,7 +727,55 @@ export function track(label: string): () => void {
460
727
  const startTime = performance.now() - store.metrics.requestStart;
461
728
 
462
729
  return () => {
463
- const duration = performance.now() - store.metrics!.requestStart - startTime;
464
- store.metrics!.metrics.push({ label, duration, startTime });
730
+ const duration =
731
+ performance.now() - store.metrics!.requestStart - startTime;
732
+ store.metrics!.metrics.push({
733
+ label,
734
+ duration,
735
+ startTime,
736
+ ...(depth != null ? { depth } : {}),
737
+ });
465
738
  };
466
739
  }
740
+
741
+ /**
742
+ * Separate ALS for tracking loader execution scope.
743
+ * Uses a dedicated ALS (not RangoContext) to avoid issues with
744
+ * nested RangoContext.run() calls in Vite's module runner.
745
+ */
746
+ const LOADER_SCOPE_KEY = Symbol.for("rangojs-router:loader-scope");
747
+ const loaderScopeALS: AsyncLocalStorage<{ active: true }> = ((
748
+ globalThis as any
749
+ )[LOADER_SCOPE_KEY] ??= new AsyncLocalStorage<{ active: true }>());
750
+
751
+ /**
752
+ * Check if the current execution is inside a cache() DSL boundary.
753
+ * Returns false inside loader execution — loaders are always fresh
754
+ * (never cached), so non-cacheable reads are safe.
755
+ */
756
+ export function isInsideCacheScope(): boolean {
757
+ if (RangoContext.getStore()?.insideCacheScope !== true) return false;
758
+ // Loaders are always fresh — even inside a cache() boundary, the loader
759
+ // function re-executes on every request. Skip the guard when running
760
+ // inside a loader.
761
+ if (loaderScopeALS.getStore()?.active) return false;
762
+ return true;
763
+ }
764
+
765
+ /**
766
+ * Check if the current execution is inside a DSL loader scope
767
+ * (wrapped by runInsideLoaderScope). Used by rendered() barrier
768
+ * to distinguish DSL loaders from handler-invoked loaders.
769
+ */
770
+ export function isInsideLoaderScope(): boolean {
771
+ return loaderScopeALS.getStore()?.active === true;
772
+ }
773
+
774
+ /**
775
+ * Run `fn` inside a loader scope. While active, cache-scope guards
776
+ * are bypassed because loaders are always fresh (never cached) and
777
+ * their side effects (setCookie, header, etc.) are safe.
778
+ */
779
+ export function runInsideLoaderScope<T>(fn: () => T): T {
780
+ return loaderScopeALS.run({ active: true }, fn);
781
+ }