@rangojs/router 0.0.0-experimental.fb6e2f40 → 0.0.0-experimental.fce7fbd1

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 (1060) hide show
  1. package/README.md +120 -25
  2. package/dist/__internal.d.ts +83 -0
  3. package/dist/__internal.d.ts.map +1 -0
  4. package/dist/__internal.js +19 -0
  5. package/dist/__internal.js.map +1 -0
  6. package/dist/__mocks__/version.d.ts +7 -0
  7. package/dist/__mocks__/version.d.ts.map +1 -0
  8. package/dist/__mocks__/version.js +7 -0
  9. package/dist/__mocks__/version.js.map +1 -0
  10. package/dist/__tests__/client-href.test.d.ts +2 -0
  11. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  12. package/dist/__tests__/client-href.test.js +74 -0
  13. package/dist/__tests__/client-href.test.js.map +1 -0
  14. package/dist/__tests__/component-utils.test.d.ts +2 -0
  15. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  16. package/dist/__tests__/component-utils.test.js +51 -0
  17. package/dist/__tests__/component-utils.test.js.map +1 -0
  18. package/dist/__tests__/event-controller.test.d.ts +2 -0
  19. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  20. package/dist/__tests__/event-controller.test.js +538 -0
  21. package/dist/__tests__/event-controller.test.js.map +1 -0
  22. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  24. package/dist/__tests__/helpers/route-tree.js +374 -0
  25. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  26. package/dist/__tests__/match-result.test.d.ts +2 -0
  27. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  28. package/dist/__tests__/match-result.test.js +154 -0
  29. package/dist/__tests__/match-result.test.js.map +1 -0
  30. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  31. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  32. package/dist/__tests__/navigation-store.test.js +440 -0
  33. package/dist/__tests__/navigation-store.test.js.map +1 -0
  34. package/dist/__tests__/partial-update.test.d.ts +2 -0
  35. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  36. package/dist/__tests__/partial-update.test.js +1009 -0
  37. package/dist/__tests__/partial-update.test.js.map +1 -0
  38. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  39. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  40. package/dist/__tests__/reverse-types.test.js +656 -0
  41. package/dist/__tests__/reverse-types.test.js.map +1 -0
  42. package/dist/__tests__/route-definition.test.d.ts +2 -0
  43. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  44. package/dist/__tests__/route-definition.test.js +55 -0
  45. package/dist/__tests__/route-definition.test.js.map +1 -0
  46. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  47. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  48. package/dist/__tests__/router-helpers.test.js +377 -0
  49. package/dist/__tests__/router-helpers.test.js.map +1 -0
  50. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  52. package/dist/__tests__/router-integration-2.test.js +426 -0
  53. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  54. package/dist/__tests__/router-integration.test.d.ts +2 -0
  55. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  56. package/dist/__tests__/router-integration.test.js +1051 -0
  57. package/dist/__tests__/router-integration.test.js.map +1 -0
  58. package/dist/__tests__/search-params.test.d.ts +5 -0
  59. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  60. package/dist/__tests__/search-params.test.js +306 -0
  61. package/dist/__tests__/search-params.test.js.map +1 -0
  62. package/dist/__tests__/segment-system.test.d.ts +2 -0
  63. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  64. package/dist/__tests__/segment-system.test.js +627 -0
  65. package/dist/__tests__/segment-system.test.js.map +1 -0
  66. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  68. package/dist/__tests__/static-handler-types.test.js +63 -0
  69. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  70. package/dist/__tests__/urls.test.d.ts +2 -0
  71. package/dist/__tests__/urls.test.d.ts.map +1 -0
  72. package/dist/__tests__/urls.test.js +421 -0
  73. package/dist/__tests__/urls.test.js.map +1 -0
  74. package/dist/__tests__/use-mount.test.d.ts +2 -0
  75. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  76. package/dist/__tests__/use-mount.test.js +35 -0
  77. package/dist/__tests__/use-mount.test.js.map +1 -0
  78. package/dist/bin/rango.d.ts +2 -0
  79. package/dist/bin/rango.d.ts.map +1 -0
  80. package/dist/bin/rango.js +147 -57
  81. package/dist/bin/rango.js.map +1 -0
  82. package/dist/browser/event-controller.d.ts +191 -0
  83. package/dist/browser/event-controller.d.ts.map +1 -0
  84. package/dist/browser/event-controller.js +559 -0
  85. package/dist/browser/event-controller.js.map +1 -0
  86. package/dist/browser/index.d.ts +2 -0
  87. package/dist/browser/index.d.ts.map +1 -0
  88. package/dist/browser/index.js +14 -0
  89. package/dist/browser/index.js.map +1 -0
  90. package/dist/browser/link-interceptor.d.ts +38 -0
  91. package/dist/browser/link-interceptor.d.ts.map +1 -0
  92. package/dist/browser/link-interceptor.js +99 -0
  93. package/dist/browser/link-interceptor.js.map +1 -0
  94. package/dist/browser/logging.d.ts +10 -0
  95. package/dist/browser/logging.d.ts.map +1 -0
  96. package/dist/browser/logging.js +29 -0
  97. package/dist/browser/logging.js.map +1 -0
  98. package/dist/browser/lru-cache.d.ts +17 -0
  99. package/dist/browser/lru-cache.d.ts.map +1 -0
  100. package/dist/browser/lru-cache.js +50 -0
  101. package/dist/browser/lru-cache.js.map +1 -0
  102. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  103. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  104. package/dist/browser/merge-segment-loaders.js +102 -0
  105. package/dist/browser/merge-segment-loaders.js.map +1 -0
  106. package/dist/browser/navigation-bridge.d.ts +102 -0
  107. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  108. package/dist/browser/navigation-bridge.js +708 -0
  109. package/dist/browser/navigation-bridge.js.map +1 -0
  110. package/dist/browser/navigation-client.d.ts +25 -0
  111. package/dist/browser/navigation-client.d.ts.map +1 -0
  112. package/dist/browser/navigation-client.js +157 -0
  113. package/dist/browser/navigation-client.js.map +1 -0
  114. package/dist/browser/navigation-store.d.ts +101 -0
  115. package/dist/browser/navigation-store.d.ts.map +1 -0
  116. package/dist/browser/navigation-store.js +625 -0
  117. package/dist/browser/navigation-store.js.map +1 -0
  118. package/dist/browser/partial-update.d.ts +75 -0
  119. package/dist/browser/partial-update.d.ts.map +1 -0
  120. package/dist/browser/partial-update.js +426 -0
  121. package/dist/browser/partial-update.js.map +1 -0
  122. package/dist/browser/react/Link.d.ts +86 -0
  123. package/dist/browser/react/Link.d.ts.map +1 -0
  124. package/dist/browser/react/Link.js +128 -0
  125. package/dist/browser/react/Link.js.map +1 -0
  126. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  127. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  128. package/dist/browser/react/NavigationProvider.js +216 -0
  129. package/dist/browser/react/NavigationProvider.js.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  132. package/dist/browser/react/ScrollRestoration.js +57 -0
  133. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  134. package/dist/browser/react/context.d.ts +46 -0
  135. package/dist/browser/react/context.d.ts.map +1 -0
  136. package/dist/browser/react/context.js +10 -0
  137. package/dist/browser/react/context.js.map +1 -0
  138. package/dist/browser/react/index.d.ts +11 -0
  139. package/dist/browser/react/index.d.ts.map +1 -0
  140. package/dist/browser/react/index.js +22 -0
  141. package/dist/browser/react/index.js.map +1 -0
  142. package/dist/browser/react/location-state-shared.d.ts +63 -0
  143. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  144. package/dist/browser/react/location-state-shared.js +81 -0
  145. package/dist/browser/react/location-state-shared.js.map +1 -0
  146. package/dist/browser/react/location-state.d.ts +23 -0
  147. package/dist/browser/react/location-state.d.ts.map +1 -0
  148. package/dist/browser/react/location-state.js +29 -0
  149. package/dist/browser/react/location-state.js.map +1 -0
  150. package/dist/browser/react/mount-context.d.ts +24 -0
  151. package/dist/browser/react/mount-context.d.ts.map +1 -0
  152. package/dist/browser/react/mount-context.js +24 -0
  153. package/dist/browser/react/mount-context.js.map +1 -0
  154. package/dist/browser/react/use-action.d.ts +64 -0
  155. package/dist/browser/react/use-action.d.ts.map +1 -0
  156. package/dist/browser/react/use-action.js +134 -0
  157. package/dist/browser/react/use-action.js.map +1 -0
  158. package/dist/browser/react/use-client-cache.d.ts +41 -0
  159. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  160. package/dist/browser/react/use-client-cache.js +39 -0
  161. package/dist/browser/react/use-client-cache.js.map +1 -0
  162. package/dist/browser/react/use-handle.d.ts +31 -0
  163. package/dist/browser/react/use-handle.d.ts.map +1 -0
  164. package/dist/browser/react/use-handle.js +144 -0
  165. package/dist/browser/react/use-handle.js.map +1 -0
  166. package/dist/browser/react/use-href.d.ts +33 -0
  167. package/dist/browser/react/use-href.d.ts.map +1 -0
  168. package/dist/browser/react/use-href.js +39 -0
  169. package/dist/browser/react/use-href.js.map +1 -0
  170. package/dist/browser/react/use-link-status.d.ts +37 -0
  171. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  172. package/dist/browser/react/use-link-status.js +99 -0
  173. package/dist/browser/react/use-link-status.js.map +1 -0
  174. package/dist/browser/react/use-mount.d.ts +25 -0
  175. package/dist/browser/react/use-mount.d.ts.map +1 -0
  176. package/dist/browser/react/use-mount.js +30 -0
  177. package/dist/browser/react/use-mount.js.map +1 -0
  178. package/dist/browser/react/use-navigation.d.ts +27 -0
  179. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  180. package/dist/browser/react/use-navigation.js +87 -0
  181. package/dist/browser/react/use-navigation.js.map +1 -0
  182. package/dist/browser/react/use-segments.d.ts +38 -0
  183. package/dist/browser/react/use-segments.d.ts.map +1 -0
  184. package/dist/browser/react/use-segments.js +130 -0
  185. package/dist/browser/react/use-segments.js.map +1 -0
  186. package/dist/browser/request-controller.d.ts +26 -0
  187. package/dist/browser/request-controller.d.ts.map +1 -0
  188. package/dist/browser/request-controller.js +147 -0
  189. package/dist/browser/request-controller.js.map +1 -0
  190. package/dist/browser/rsc-router.d.ts +129 -0
  191. package/dist/browser/rsc-router.d.ts.map +1 -0
  192. package/dist/browser/rsc-router.js +195 -0
  193. package/dist/browser/rsc-router.js.map +1 -0
  194. package/dist/browser/scroll-restoration.d.ts +93 -0
  195. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  196. package/dist/browser/scroll-restoration.js +321 -0
  197. package/dist/browser/scroll-restoration.js.map +1 -0
  198. package/dist/browser/segment-structure-assert.d.ts +17 -0
  199. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  200. package/dist/browser/segment-structure-assert.js +59 -0
  201. package/dist/browser/segment-structure-assert.js.map +1 -0
  202. package/dist/browser/server-action-bridge.d.ts +26 -0
  203. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  204. package/dist/browser/server-action-bridge.js +668 -0
  205. package/dist/browser/server-action-bridge.js.map +1 -0
  206. package/dist/browser/shallow.d.ts +12 -0
  207. package/dist/browser/shallow.d.ts.map +1 -0
  208. package/dist/browser/shallow.js +34 -0
  209. package/dist/browser/shallow.js.map +1 -0
  210. package/dist/browser/types.d.ts +369 -0
  211. package/dist/browser/types.d.ts.map +1 -0
  212. package/dist/browser/types.js +2 -0
  213. package/dist/browser/types.js.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  216. package/dist/build/__tests__/generate-cli.test.js +237 -0
  217. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  220. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  221. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  224. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  225. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  230. package/dist/build/generate-manifest.d.ts +81 -0
  231. package/dist/build/generate-manifest.d.ts.map +1 -0
  232. package/dist/build/generate-manifest.js +276 -0
  233. package/dist/build/generate-manifest.js.map +1 -0
  234. package/dist/build/generate-route-types.d.ts +115 -0
  235. package/dist/build/generate-route-types.d.ts.map +1 -0
  236. package/dist/build/generate-route-types.js +740 -0
  237. package/dist/build/generate-route-types.js.map +1 -0
  238. package/dist/build/index.d.ts +21 -0
  239. package/dist/build/index.d.ts.map +1 -0
  240. package/dist/build/index.js +21 -0
  241. package/dist/build/index.js.map +1 -0
  242. package/dist/build/route-trie.d.ts +71 -0
  243. package/dist/build/route-trie.d.ts.map +1 -0
  244. package/dist/build/route-trie.js +175 -0
  245. package/dist/build/route-trie.js.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  248. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  249. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  252. package/dist/cache/__tests__/document-cache.test.js +345 -0
  253. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  260. package/dist/cache/__tests__/memory-store.test.js +367 -0
  261. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  262. package/dist/cache/cache-scope.d.ts +102 -0
  263. package/dist/cache/cache-scope.d.ts.map +1 -0
  264. package/dist/cache/cache-scope.js +440 -0
  265. package/dist/cache/cache-scope.js.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  272. package/dist/cache/cf/cf-cache-store.js +242 -0
  273. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  274. package/dist/cache/cf/index.d.ts +14 -0
  275. package/dist/cache/cf/index.d.ts.map +1 -0
  276. package/dist/cache/cf/index.js +17 -0
  277. package/dist/cache/cf/index.js.map +1 -0
  278. package/dist/cache/document-cache.d.ts +64 -0
  279. package/dist/cache/document-cache.d.ts.map +1 -0
  280. package/dist/cache/document-cache.js +228 -0
  281. package/dist/cache/document-cache.js.map +1 -0
  282. package/dist/cache/index.d.ts +19 -0
  283. package/dist/cache/index.d.ts.map +1 -0
  284. package/dist/cache/index.js +21 -0
  285. package/dist/cache/index.js.map +1 -0
  286. package/dist/cache/memory-segment-store.d.ts +110 -0
  287. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  288. package/dist/cache/memory-segment-store.js +117 -0
  289. package/dist/cache/memory-segment-store.js.map +1 -0
  290. package/dist/cache/memory-store.d.ts +41 -0
  291. package/dist/cache/memory-store.d.ts.map +1 -0
  292. package/dist/cache/memory-store.js +191 -0
  293. package/dist/cache/memory-store.js.map +1 -0
  294. package/dist/cache/types.d.ts +317 -0
  295. package/dist/cache/types.d.ts.map +1 -0
  296. package/dist/cache/types.js +12 -0
  297. package/dist/cache/types.js.map +1 -0
  298. package/dist/client.d.ts +248 -0
  299. package/dist/client.d.ts.map +1 -0
  300. package/dist/client.js +367 -0
  301. package/dist/client.js.map +1 -0
  302. package/dist/client.rsc.d.ts +26 -0
  303. package/dist/client.rsc.d.ts.map +1 -0
  304. package/dist/client.rsc.js +46 -0
  305. package/dist/client.rsc.js.map +1 -0
  306. package/dist/component-utils.d.ts +36 -0
  307. package/dist/component-utils.d.ts.map +1 -0
  308. package/dist/component-utils.js +61 -0
  309. package/dist/component-utils.js.map +1 -0
  310. package/dist/components/DefaultDocument.d.ts +13 -0
  311. package/dist/components/DefaultDocument.d.ts.map +1 -0
  312. package/dist/components/DefaultDocument.js +15 -0
  313. package/dist/components/DefaultDocument.js.map +1 -0
  314. package/dist/debug.d.ts +58 -0
  315. package/dist/debug.d.ts.map +1 -0
  316. package/dist/debug.js +157 -0
  317. package/dist/debug.js.map +1 -0
  318. package/dist/default-error-boundary.d.ts +11 -0
  319. package/dist/default-error-boundary.d.ts.map +1 -0
  320. package/dist/default-error-boundary.js +45 -0
  321. package/dist/default-error-boundary.js.map +1 -0
  322. package/dist/deps/browser.d.ts +2 -0
  323. package/dist/deps/browser.d.ts.map +1 -0
  324. package/dist/deps/browser.js +3 -0
  325. package/dist/deps/browser.js.map +1 -0
  326. package/dist/deps/html-stream-client.d.ts +2 -0
  327. package/dist/deps/html-stream-client.d.ts.map +1 -0
  328. package/dist/deps/html-stream-client.js +3 -0
  329. package/dist/deps/html-stream-client.js.map +1 -0
  330. package/dist/deps/html-stream-server.d.ts +2 -0
  331. package/dist/deps/html-stream-server.d.ts.map +1 -0
  332. package/dist/deps/html-stream-server.js +3 -0
  333. package/dist/deps/html-stream-server.js.map +1 -0
  334. package/dist/deps/rsc.d.ts +2 -0
  335. package/dist/deps/rsc.d.ts.map +1 -0
  336. package/dist/deps/rsc.js +4 -0
  337. package/dist/deps/rsc.js.map +1 -0
  338. package/dist/deps/ssr.d.ts +2 -0
  339. package/dist/deps/ssr.d.ts.map +1 -0
  340. package/dist/deps/ssr.js +3 -0
  341. package/dist/deps/ssr.js.map +1 -0
  342. package/dist/errors.d.ts +174 -0
  343. package/dist/errors.d.ts.map +1 -0
  344. package/dist/errors.js +241 -0
  345. package/dist/errors.js.map +1 -0
  346. package/dist/handle.d.ts +78 -0
  347. package/dist/handle.d.ts.map +1 -0
  348. package/dist/handle.js +82 -0
  349. package/dist/handle.js.map +1 -0
  350. package/dist/handles/MetaTags.d.ts +14 -0
  351. package/dist/handles/MetaTags.d.ts.map +1 -0
  352. package/dist/handles/MetaTags.js +136 -0
  353. package/dist/handles/MetaTags.js.map +1 -0
  354. package/dist/handles/index.d.ts +6 -0
  355. package/dist/handles/index.d.ts.map +1 -0
  356. package/dist/handles/index.js +6 -0
  357. package/dist/handles/index.js.map +1 -0
  358. package/dist/handles/meta.d.ts +39 -0
  359. package/dist/handles/meta.d.ts.map +1 -0
  360. package/dist/handles/meta.js +202 -0
  361. package/dist/handles/meta.js.map +1 -0
  362. package/dist/host/__tests__/errors.test.d.ts +2 -0
  363. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  364. package/dist/host/__tests__/errors.test.js +76 -0
  365. package/dist/host/__tests__/errors.test.js.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  374. package/dist/host/__tests__/router.test.d.ts +2 -0
  375. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  376. package/dist/host/__tests__/router.test.js +241 -0
  377. package/dist/host/__tests__/router.test.js.map +1 -0
  378. package/dist/host/__tests__/testing.test.d.ts +2 -0
  379. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  380. package/dist/host/__tests__/testing.test.js +64 -0
  381. package/dist/host/__tests__/testing.test.js.map +1 -0
  382. package/dist/host/__tests__/utils.test.d.ts +2 -0
  383. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  384. package/dist/host/__tests__/utils.test.js +29 -0
  385. package/dist/host/__tests__/utils.test.js.map +1 -0
  386. package/dist/host/cookie-handler.d.ts +34 -0
  387. package/dist/host/cookie-handler.d.ts.map +1 -0
  388. package/dist/host/cookie-handler.js +124 -0
  389. package/dist/host/cookie-handler.js.map +1 -0
  390. package/dist/host/errors.d.ts +56 -0
  391. package/dist/host/errors.d.ts.map +1 -0
  392. package/dist/host/errors.js +79 -0
  393. package/dist/host/errors.js.map +1 -0
  394. package/dist/host/index.d.ts +29 -0
  395. package/dist/host/index.d.ts.map +1 -0
  396. package/dist/host/index.js +32 -0
  397. package/dist/host/index.js.map +1 -0
  398. package/dist/host/pattern-matcher.d.ts +36 -0
  399. package/dist/host/pattern-matcher.d.ts.map +1 -0
  400. package/dist/host/pattern-matcher.js +172 -0
  401. package/dist/host/pattern-matcher.js.map +1 -0
  402. package/dist/host/router.d.ts +26 -0
  403. package/dist/host/router.d.ts.map +1 -0
  404. package/dist/host/router.js +218 -0
  405. package/dist/host/router.js.map +1 -0
  406. package/dist/host/testing.d.ts +36 -0
  407. package/dist/host/testing.d.ts.map +1 -0
  408. package/dist/host/testing.js +55 -0
  409. package/dist/host/testing.js.map +1 -0
  410. package/dist/host/types.d.ts +115 -0
  411. package/dist/host/types.d.ts.map +1 -0
  412. package/dist/host/types.js +7 -0
  413. package/dist/host/types.js.map +1 -0
  414. package/dist/host/utils.d.ts +21 -0
  415. package/dist/host/utils.d.ts.map +1 -0
  416. package/dist/host/utils.js +23 -0
  417. package/dist/host/utils.js.map +1 -0
  418. package/dist/href-client.d.ts +131 -0
  419. package/dist/href-client.d.ts.map +1 -0
  420. package/dist/href-client.js +64 -0
  421. package/dist/href-client.js.map +1 -0
  422. package/dist/href-context.d.ts +29 -0
  423. package/dist/href-context.d.ts.map +1 -0
  424. package/dist/href-context.js +21 -0
  425. package/dist/href-context.js.map +1 -0
  426. package/dist/index.d.ts +73 -0
  427. package/dist/index.d.ts.map +1 -0
  428. package/dist/index.js +91 -0
  429. package/dist/index.js.map +1 -0
  430. package/dist/index.rsc.d.ts +32 -0
  431. package/dist/index.rsc.d.ts.map +1 -0
  432. package/dist/index.rsc.js +40 -0
  433. package/dist/index.rsc.js.map +1 -0
  434. package/dist/internal-debug.d.ts +2 -0
  435. package/dist/internal-debug.d.ts.map +1 -0
  436. package/dist/internal-debug.js +5 -0
  437. package/dist/internal-debug.js.map +1 -0
  438. package/dist/loader.d.ts +14 -0
  439. package/dist/loader.d.ts.map +1 -0
  440. package/dist/loader.js +20 -0
  441. package/dist/loader.js.map +1 -0
  442. package/dist/loader.rsc.d.ts +19 -0
  443. package/dist/loader.rsc.d.ts.map +1 -0
  444. package/dist/loader.rsc.js +99 -0
  445. package/dist/loader.rsc.js.map +1 -0
  446. package/dist/network-error-thrower.d.ts +17 -0
  447. package/dist/network-error-thrower.d.ts.map +1 -0
  448. package/dist/network-error-thrower.js +14 -0
  449. package/dist/network-error-thrower.js.map +1 -0
  450. package/dist/outlet-context.d.ts +13 -0
  451. package/dist/outlet-context.d.ts.map +1 -0
  452. package/dist/outlet-context.js +3 -0
  453. package/dist/outlet-context.js.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  456. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  457. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  458. package/dist/prerender/param-hash.d.ts +16 -0
  459. package/dist/prerender/param-hash.d.ts.map +1 -0
  460. package/dist/prerender/param-hash.js +36 -0
  461. package/dist/prerender/param-hash.js.map +1 -0
  462. package/dist/prerender/store.d.ts +38 -0
  463. package/dist/prerender/store.d.ts.map +1 -0
  464. package/dist/prerender/store.js +61 -0
  465. package/dist/prerender/store.js.map +1 -0
  466. package/dist/prerender.d.ts +66 -0
  467. package/dist/prerender.d.ts.map +1 -0
  468. package/dist/prerender.js +57 -0
  469. package/dist/prerender.js.map +1 -0
  470. package/dist/reverse.d.ts +196 -0
  471. package/dist/reverse.d.ts.map +1 -0
  472. package/dist/reverse.js +78 -0
  473. package/dist/reverse.js.map +1 -0
  474. package/dist/root-error-boundary.d.ts +33 -0
  475. package/dist/root-error-boundary.d.ts.map +1 -0
  476. package/dist/root-error-boundary.js +165 -0
  477. package/dist/root-error-boundary.js.map +1 -0
  478. package/dist/route-content-wrapper.d.ts +46 -0
  479. package/dist/route-content-wrapper.d.ts.map +1 -0
  480. package/dist/route-content-wrapper.js +77 -0
  481. package/dist/route-content-wrapper.js.map +1 -0
  482. package/dist/route-definition.d.ts +421 -0
  483. package/dist/route-definition.d.ts.map +1 -0
  484. package/dist/route-definition.js +868 -0
  485. package/dist/route-definition.js.map +1 -0
  486. package/dist/route-map-builder.d.ts +155 -0
  487. package/dist/route-map-builder.d.ts.map +1 -0
  488. package/dist/route-map-builder.js +237 -0
  489. package/dist/route-map-builder.js.map +1 -0
  490. package/dist/route-types.d.ts +165 -0
  491. package/dist/route-types.d.ts.map +1 -0
  492. package/dist/route-types.js +7 -0
  493. package/dist/route-types.js.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  496. package/dist/router/__tests__/handler-context.test.js +65 -0
  497. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  502. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  503. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  504. package/dist/router/__tests__/match-context.test.js +92 -0
  505. package/dist/router/__tests__/match-context.test.js.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  508. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  509. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  510. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  511. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  512. package/dist/router/__tests__/match-result.test.js +457 -0
  513. package/dist/router/__tests__/match-result.test.js.map +1 -0
  514. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  515. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  516. package/dist/router/__tests__/on-error.test.js +678 -0
  517. package/dist/router/__tests__/on-error.test.js.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  520. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  521. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  526. package/dist/router/error-handling.d.ts +77 -0
  527. package/dist/router/error-handling.d.ts.map +1 -0
  528. package/dist/router/error-handling.js +202 -0
  529. package/dist/router/error-handling.js.map +1 -0
  530. package/dist/router/handler-context.d.ts +20 -0
  531. package/dist/router/handler-context.d.ts.map +1 -0
  532. package/dist/router/handler-context.js +198 -0
  533. package/dist/router/handler-context.js.map +1 -0
  534. package/dist/router/intercept-resolution.d.ts +66 -0
  535. package/dist/router/intercept-resolution.d.ts.map +1 -0
  536. package/dist/router/intercept-resolution.js +246 -0
  537. package/dist/router/intercept-resolution.js.map +1 -0
  538. package/dist/router/loader-resolution.d.ts +64 -0
  539. package/dist/router/loader-resolution.d.ts.map +1 -0
  540. package/dist/router/loader-resolution.js +284 -0
  541. package/dist/router/loader-resolution.js.map +1 -0
  542. package/dist/router/logging.d.ts +15 -0
  543. package/dist/router/logging.d.ts.map +1 -0
  544. package/dist/router/logging.js +99 -0
  545. package/dist/router/logging.js.map +1 -0
  546. package/dist/router/manifest.d.ts +22 -0
  547. package/dist/router/manifest.d.ts.map +1 -0
  548. package/dist/router/manifest.js +181 -0
  549. package/dist/router/manifest.js.map +1 -0
  550. package/dist/router/match-api.d.ts +35 -0
  551. package/dist/router/match-api.d.ts.map +1 -0
  552. package/dist/router/match-api.js +406 -0
  553. package/dist/router/match-api.js.map +1 -0
  554. package/dist/router/match-context.d.ts +206 -0
  555. package/dist/router/match-context.d.ts.map +1 -0
  556. package/dist/router/match-context.js +17 -0
  557. package/dist/router/match-context.js.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  560. package/dist/router/match-middleware/background-revalidation.js +75 -0
  561. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  564. package/dist/router/match-middleware/cache-lookup.js +257 -0
  565. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  566. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  567. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  568. package/dist/router/match-middleware/cache-store.js +108 -0
  569. package/dist/router/match-middleware/cache-store.js.map +1 -0
  570. package/dist/router/match-middleware/index.d.ts +81 -0
  571. package/dist/router/match-middleware/index.d.ts.map +1 -0
  572. package/dist/router/match-middleware/index.js +80 -0
  573. package/dist/router/match-middleware/index.js.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  576. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  577. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  580. package/dist/router/match-middleware/segment-resolution.js +53 -0
  581. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  582. package/dist/router/match-pipelines.d.ts +147 -0
  583. package/dist/router/match-pipelines.d.ts.map +1 -0
  584. package/dist/router/match-pipelines.js +82 -0
  585. package/dist/router/match-pipelines.js.map +1 -0
  586. package/dist/router/match-result.d.ts +126 -0
  587. package/dist/router/match-result.d.ts.map +1 -0
  588. package/dist/router/match-result.js +93 -0
  589. package/dist/router/match-result.js.map +1 -0
  590. package/dist/router/metrics.d.ts +20 -0
  591. package/dist/router/metrics.d.ts.map +1 -0
  592. package/dist/router/metrics.js +47 -0
  593. package/dist/router/metrics.js.map +1 -0
  594. package/dist/router/middleware.d.ts +249 -0
  595. package/dist/router/middleware.d.ts.map +1 -0
  596. package/dist/router/middleware.js +434 -0
  597. package/dist/router/middleware.js.map +1 -0
  598. package/dist/router/middleware.test.d.ts +2 -0
  599. package/dist/router/middleware.test.d.ts.map +1 -0
  600. package/dist/router/middleware.test.js +816 -0
  601. package/dist/router/middleware.test.js.map +1 -0
  602. package/dist/router/pattern-matching.d.ts +149 -0
  603. package/dist/router/pattern-matching.d.ts.map +1 -0
  604. package/dist/router/pattern-matching.js +349 -0
  605. package/dist/router/pattern-matching.js.map +1 -0
  606. package/dist/router/revalidation.d.ts +44 -0
  607. package/dist/router/revalidation.d.ts.map +1 -0
  608. package/dist/router/revalidation.js +147 -0
  609. package/dist/router/revalidation.js.map +1 -0
  610. package/dist/router/router-context.d.ts +135 -0
  611. package/dist/router/router-context.d.ts.map +1 -0
  612. package/dist/router/router-context.js +36 -0
  613. package/dist/router/router-context.js.map +1 -0
  614. package/dist/router/segment-resolution.d.ts +127 -0
  615. package/dist/router/segment-resolution.d.ts.map +1 -0
  616. package/dist/router/segment-resolution.js +919 -0
  617. package/dist/router/segment-resolution.js.map +1 -0
  618. package/dist/router/trie-matching.d.ts +40 -0
  619. package/dist/router/trie-matching.d.ts.map +1 -0
  620. package/dist/router/trie-matching.js +127 -0
  621. package/dist/router/trie-matching.js.map +1 -0
  622. package/dist/router/types.d.ts +136 -0
  623. package/dist/router/types.d.ts.map +1 -0
  624. package/dist/router/types.js +7 -0
  625. package/dist/router/types.js.map +1 -0
  626. package/dist/router.d.ts +753 -0
  627. package/dist/router.d.ts.map +1 -0
  628. package/dist/router.gen.d.ts +6 -0
  629. package/dist/router.gen.d.ts.map +1 -0
  630. package/dist/router.gen.js +6 -0
  631. package/dist/router.gen.js.map +1 -0
  632. package/dist/router.js +1304 -0
  633. package/dist/router.js.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  636. package/dist/rsc/__tests__/helpers.test.js +140 -0
  637. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  638. package/dist/rsc/handler.d.ts +45 -0
  639. package/dist/rsc/handler.d.ts.map +1 -0
  640. package/dist/rsc/handler.js +1172 -0
  641. package/dist/rsc/handler.js.map +1 -0
  642. package/dist/rsc/helpers.d.ts +16 -0
  643. package/dist/rsc/helpers.d.ts.map +1 -0
  644. package/dist/rsc/helpers.js +55 -0
  645. package/dist/rsc/helpers.js.map +1 -0
  646. package/dist/rsc/index.d.ts +22 -0
  647. package/dist/rsc/index.d.ts.map +1 -0
  648. package/dist/rsc/index.js +23 -0
  649. package/dist/rsc/index.js.map +1 -0
  650. package/dist/rsc/nonce.d.ts +9 -0
  651. package/dist/rsc/nonce.d.ts.map +1 -0
  652. package/dist/rsc/nonce.js +18 -0
  653. package/dist/rsc/nonce.js.map +1 -0
  654. package/dist/rsc/types.d.ts +206 -0
  655. package/dist/rsc/types.d.ts.map +1 -0
  656. package/dist/rsc/types.js +8 -0
  657. package/dist/rsc/types.js.map +1 -0
  658. package/dist/search-params.d.ts +103 -0
  659. package/dist/search-params.d.ts.map +1 -0
  660. package/dist/search-params.js +74 -0
  661. package/dist/search-params.js.map +1 -0
  662. package/dist/segment-system.d.ts +75 -0
  663. package/dist/segment-system.d.ts.map +1 -0
  664. package/dist/segment-system.js +336 -0
  665. package/dist/segment-system.js.map +1 -0
  666. package/dist/server/context.d.ts +245 -0
  667. package/dist/server/context.d.ts.map +1 -0
  668. package/dist/server/context.js +197 -0
  669. package/dist/server/context.js.map +1 -0
  670. package/dist/server/fetchable-loader-store.d.ts +18 -0
  671. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  672. package/dist/server/fetchable-loader-store.js +18 -0
  673. package/dist/server/fetchable-loader-store.js.map +1 -0
  674. package/dist/server/handle-store.d.ts +85 -0
  675. package/dist/server/handle-store.d.ts.map +1 -0
  676. package/dist/server/handle-store.js +142 -0
  677. package/dist/server/handle-store.js.map +1 -0
  678. package/dist/server/loader-registry.d.ts +55 -0
  679. package/dist/server/loader-registry.d.ts.map +1 -0
  680. package/dist/server/loader-registry.js +132 -0
  681. package/dist/server/loader-registry.js.map +1 -0
  682. package/dist/server/request-context.d.ts +226 -0
  683. package/dist/server/request-context.d.ts.map +1 -0
  684. package/dist/server/request-context.js +290 -0
  685. package/dist/server/request-context.js.map +1 -0
  686. package/dist/server/root-layout.d.ts +4 -0
  687. package/dist/server/root-layout.d.ts.map +1 -0
  688. package/dist/server/root-layout.js +5 -0
  689. package/dist/server/root-layout.js.map +1 -0
  690. package/dist/server.d.ts +15 -0
  691. package/dist/server.d.ts.map +1 -0
  692. package/dist/server.js +20 -0
  693. package/dist/server.js.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  698. package/dist/ssr/index.d.ts +98 -0
  699. package/dist/ssr/index.d.ts.map +1 -0
  700. package/dist/ssr/index.js +158 -0
  701. package/dist/ssr/index.js.map +1 -0
  702. package/dist/static-handler.d.ts +50 -0
  703. package/dist/static-handler.d.ts.map +1 -0
  704. package/dist/static-handler.gen.d.ts +5 -0
  705. package/dist/static-handler.gen.d.ts.map +1 -0
  706. package/dist/static-handler.gen.js +5 -0
  707. package/dist/static-handler.gen.js.map +1 -0
  708. package/dist/static-handler.js +29 -0
  709. package/dist/static-handler.js.map +1 -0
  710. package/dist/testing/vitest.js +48 -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 +2309 -833
  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/dist/vite/package-resolution.js +112 -0
  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/dist/vite/virtual-entries.js +110 -0
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +57 -11
  811. package/skills/breadcrumbs/SKILL.md +3 -1
  812. package/skills/bundle-analysis/SKILL.md +159 -0
  813. package/skills/cache-guide/SKILL.md +220 -30
  814. package/skills/caching/SKILL.md +116 -8
  815. package/skills/composability/SKILL.md +27 -2
  816. package/skills/document-cache/SKILL.md +78 -55
  817. package/skills/handler-use/SKILL.md +364 -0
  818. package/skills/hooks/SKILL.md +229 -20
  819. package/skills/host-router/SKILL.md +45 -20
  820. package/skills/i18n/SKILL.md +276 -0
  821. package/skills/intercept/SKILL.md +46 -4
  822. package/skills/layout/SKILL.md +28 -7
  823. package/skills/links/SKILL.md +247 -17
  824. package/skills/loader/SKILL.md +219 -9
  825. package/skills/middleware/SKILL.md +47 -12
  826. package/skills/migrate-nextjs/SKILL.md +562 -0
  827. package/skills/migrate-react-router/SKILL.md +769 -0
  828. package/skills/mime-routes/SKILL.md +27 -0
  829. package/skills/observability/SKILL.md +137 -0
  830. package/skills/parallel/SKILL.md +71 -6
  831. package/skills/prerender/SKILL.md +14 -33
  832. package/skills/rango/SKILL.md +242 -22
  833. package/skills/react-compiler/SKILL.md +168 -0
  834. package/skills/response-routes/SKILL.md +66 -9
  835. package/skills/route/SKILL.md +57 -4
  836. package/skills/router-setup/SKILL.md +3 -3
  837. package/skills/server-actions/SKILL.md +751 -0
  838. package/skills/streams-and-websockets/SKILL.md +283 -0
  839. package/skills/testing/SKILL.md +599 -0
  840. package/skills/typesafety/SKILL.md +319 -27
  841. package/skills/use-cache/SKILL.md +34 -5
  842. package/skills/view-transitions/SKILL.md +294 -0
  843. package/src/__augment-tests__/augment.ts +81 -0
  844. package/src/__augment-tests__/augmented.check.ts +117 -0
  845. package/src/browser/action-coordinator.ts +53 -36
  846. package/src/browser/app-shell.ts +52 -0
  847. package/src/browser/event-controller.ts +86 -70
  848. package/src/browser/history-state.ts +21 -0
  849. package/src/browser/index.ts +3 -3
  850. package/src/browser/navigation-bridge.ts +86 -11
  851. package/src/browser/navigation-client.ts +76 -28
  852. package/src/browser/navigation-store.ts +32 -9
  853. package/src/browser/navigation-transaction.ts +10 -28
  854. package/src/browser/partial-update.ts +64 -26
  855. package/src/browser/prefetch/cache.ts +129 -21
  856. package/src/browser/prefetch/fetch.ts +148 -16
  857. package/src/browser/prefetch/queue.ts +36 -5
  858. package/src/browser/rango-state.ts +53 -13
  859. package/src/browser/react/Link.tsx +30 -2
  860. package/src/browser/react/NavigationProvider.tsx +72 -31
  861. package/src/browser/react/filter-segment-order.ts +51 -7
  862. package/src/browser/react/index.ts +3 -0
  863. package/src/browser/react/location-state-shared.ts +175 -4
  864. package/src/browser/react/location-state.ts +39 -13
  865. package/src/browser/react/use-handle.ts +17 -9
  866. package/src/browser/react/use-navigation.ts +22 -2
  867. package/src/browser/react/use-params.ts +20 -8
  868. package/src/browser/react/use-reverse.ts +106 -0
  869. package/src/browser/react/use-router.ts +22 -2
  870. package/src/browser/react/use-segments.ts +11 -8
  871. package/src/browser/response-adapter.ts +25 -0
  872. package/src/browser/rsc-router.tsx +64 -22
  873. package/src/browser/scroll-restoration.ts +22 -14
  874. package/src/browser/segment-reconciler.ts +36 -14
  875. package/src/browser/segment-structure-assert.ts +2 -2
  876. package/src/browser/server-action-bridge.ts +23 -30
  877. package/src/browser/types.ts +21 -0
  878. package/src/build/collect-fallback-refs.ts +107 -0
  879. package/src/build/generate-manifest.ts +60 -35
  880. package/src/build/generate-route-types.ts +2 -0
  881. package/src/build/index.ts +2 -0
  882. package/src/build/route-trie.ts +52 -25
  883. package/src/build/route-types/codegen.ts +4 -4
  884. package/src/build/route-types/include-resolution.ts +1 -1
  885. package/src/build/route-types/per-module-writer.ts +7 -4
  886. package/src/build/route-types/router-processing.ts +55 -14
  887. package/src/build/route-types/scan-filter.ts +1 -1
  888. package/src/build/route-types/source-scan.ts +118 -0
  889. package/src/build/runtime-discovery.ts +9 -20
  890. package/src/cache/cache-scope.ts +28 -42
  891. package/src/cache/cf/cf-cache-store.ts +54 -13
  892. package/src/client.rsc.tsx +3 -0
  893. package/src/client.tsx +92 -182
  894. package/src/context-var.ts +5 -5
  895. package/src/decode-loader-results.ts +36 -0
  896. package/src/errors.ts +30 -1
  897. package/src/handle.ts +26 -13
  898. package/src/host/index.ts +2 -2
  899. package/src/host/router.ts +129 -57
  900. package/src/host/types.ts +31 -2
  901. package/src/host/utils.ts +1 -1
  902. package/src/href-client.ts +140 -20
  903. package/src/index.rsc.ts +9 -4
  904. package/src/index.ts +57 -15
  905. package/src/loader-store.ts +500 -0
  906. package/src/loader.rsc.ts +2 -5
  907. package/src/loader.ts +3 -10
  908. package/src/missing-id-error.ts +68 -0
  909. package/src/outlet-context.ts +1 -1
  910. package/src/prerender.ts +4 -4
  911. package/src/response-utils.ts +37 -0
  912. package/src/reverse.ts +65 -36
  913. package/src/route-content-wrapper.tsx +6 -28
  914. package/src/route-definition/dsl-helpers.ts +384 -257
  915. package/src/route-definition/helper-factories.ts +29 -139
  916. package/src/route-definition/helpers-types.ts +100 -28
  917. package/src/route-definition/resolve-handler-use.ts +6 -0
  918. package/src/route-definition/use-item-types.ts +32 -0
  919. package/src/route-types.ts +26 -41
  920. package/src/router/basename.ts +14 -0
  921. package/src/router/content-negotiation.ts +15 -2
  922. package/src/router/error-handling.ts +1 -1
  923. package/src/router/handler-context.ts +21 -38
  924. package/src/router/intercept-resolution.ts +4 -18
  925. package/src/router/lazy-includes.ts +8 -8
  926. package/src/router/loader-resolution.ts +89 -49
  927. package/src/router/manifest.ts +22 -13
  928. package/src/router/match-api.ts +4 -3
  929. package/src/router/match-handlers.ts +63 -20
  930. package/src/router/match-middleware/cache-lookup.ts +54 -96
  931. package/src/router/match-middleware/cache-store.ts +3 -2
  932. package/src/router/match-middleware/segment-resolution.ts +1 -1
  933. package/src/router/match-result.ts +103 -4
  934. package/src/router/metrics.ts +1 -1
  935. package/src/router/middleware-types.ts +15 -26
  936. package/src/router/middleware.ts +99 -84
  937. package/src/router/pattern-matching.ts +101 -17
  938. package/src/router/prerender-match.ts +1 -1
  939. package/src/router/preview-match.ts +3 -1
  940. package/src/router/request-classification.ts +4 -28
  941. package/src/router/revalidation.ts +58 -2
  942. package/src/router/router-interfaces.ts +45 -28
  943. package/src/router/router-options.ts +40 -1
  944. package/src/router/router-registry.ts +2 -5
  945. package/src/router/segment-resolution/fresh.ts +32 -6
  946. package/src/router/segment-resolution/revalidation.ts +154 -107
  947. package/src/router/segment-resolution/view-transition-default.ts +36 -0
  948. package/src/router/substitute-pattern-params.ts +56 -0
  949. package/src/router/telemetry.ts +99 -0
  950. package/src/router/trie-matching.ts +18 -13
  951. package/src/router/types.ts +8 -0
  952. package/src/router/url-params.ts +49 -0
  953. package/src/router.ts +38 -23
  954. package/src/rsc/handler-context.ts +2 -2
  955. package/src/rsc/handler.ts +41 -74
  956. package/src/rsc/helpers.ts +91 -43
  957. package/src/rsc/index.ts +1 -1
  958. package/src/rsc/loader-fetch.ts +23 -3
  959. package/src/rsc/origin-guard.ts +28 -10
  960. package/src/rsc/progressive-enhancement.ts +14 -2
  961. package/src/rsc/response-route-handler.ts +46 -53
  962. package/src/rsc/rsc-rendering.ts +40 -52
  963. package/src/rsc/runtime-warnings.ts +9 -10
  964. package/src/rsc/server-action.ts +23 -37
  965. package/src/rsc/ssr-setup.ts +16 -0
  966. package/src/rsc/types.ts +9 -2
  967. package/src/search-params.ts +4 -4
  968. package/src/segment-content-promise.ts +67 -0
  969. package/src/segment-loader-promise.ts +122 -0
  970. package/src/segment-system.tsx +132 -116
  971. package/src/serialize.ts +243 -0
  972. package/src/server/context.ts +143 -53
  973. package/src/server/cookie-store.ts +28 -4
  974. package/src/server/handle-store.ts +19 -0
  975. package/src/server/request-context.ts +50 -44
  976. package/src/ssr/index.tsx +5 -1
  977. package/src/static-handler.ts +1 -1
  978. package/src/testing/cache-status.ts +166 -0
  979. package/src/testing/collect-handle.ts +63 -0
  980. package/src/testing/dispatch.ts +440 -0
  981. package/src/testing/dom.entry.ts +22 -0
  982. package/src/testing/e2e/fixture.ts +154 -0
  983. package/src/testing/e2e/index.ts +149 -0
  984. package/src/testing/e2e/matchers.ts +51 -0
  985. package/src/testing/e2e/page-helpers.ts +272 -0
  986. package/src/testing/e2e/parity.ts +306 -0
  987. package/src/testing/e2e/server.ts +183 -0
  988. package/src/testing/flight-matchers.ts +104 -0
  989. package/src/testing/flight-runtime.d.ts +21 -0
  990. package/src/testing/flight.entry.ts +22 -0
  991. package/src/testing/flight.ts +182 -0
  992. package/src/testing/generated-routes.ts +223 -0
  993. package/src/testing/index.ts +105 -0
  994. package/src/testing/internal/context.ts +193 -0
  995. package/src/testing/render-route.tsx +536 -0
  996. package/src/testing/run-loader.ts +296 -0
  997. package/src/testing/run-middleware.ts +170 -0
  998. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  999. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1000. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1001. package/src/testing/vitest-stubs/version.ts +5 -0
  1002. package/src/testing/vitest.ts +183 -0
  1003. package/src/types/global-namespace.ts +39 -26
  1004. package/src/types/handler-context.ts +68 -50
  1005. package/src/types/index.ts +1 -0
  1006. package/src/types/loader-types.ts +5 -6
  1007. package/src/types/request-scope.ts +126 -0
  1008. package/src/types/route-entry.ts +11 -0
  1009. package/src/types/segments.ts +36 -2
  1010. package/src/urls/include-helper.ts +34 -67
  1011. package/src/urls/index.ts +0 -3
  1012. package/src/urls/path-helper-types.ts +41 -7
  1013. package/src/urls/path-helper.ts +17 -52
  1014. package/src/urls/pattern-types.ts +36 -19
  1015. package/src/urls/response-types.ts +22 -29
  1016. package/src/urls/type-extraction.ts +26 -116
  1017. package/src/urls/urls-function.ts +1 -5
  1018. package/src/use-loader.tsx +416 -42
  1019. package/src/vite/debug.ts +185 -0
  1020. package/src/vite/discovery/bundle-postprocess.ts +6 -6
  1021. package/src/vite/discovery/discover-routers.ts +101 -51
  1022. package/src/vite/discovery/discovery-errors.ts +194 -0
  1023. package/src/vite/discovery/gate-state.ts +171 -0
  1024. package/src/vite/discovery/prerender-collection.ts +185 -103
  1025. package/src/vite/discovery/route-types-writer.ts +40 -84
  1026. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1027. package/src/vite/discovery/state.ts +33 -0
  1028. package/src/vite/discovery/virtual-module-codegen.ts +13 -23
  1029. package/src/vite/index.ts +2 -0
  1030. package/src/vite/plugin-types.ts +67 -0
  1031. package/src/vite/plugins/cjs-to-esm.ts +8 -7
  1032. package/src/vite/plugins/client-ref-dedup.ts +16 -0
  1033. package/src/vite/plugins/client-ref-hashing.ts +28 -5
  1034. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1035. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1036. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  1037. package/src/vite/plugins/expose-action-id.ts +54 -30
  1038. package/src/vite/plugins/expose-id-utils.ts +24 -8
  1039. package/src/vite/plugins/expose-ids/export-analysis.ts +100 -20
  1040. package/src/vite/plugins/expose-ids/handler-transform.ts +12 -35
  1041. package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
  1042. package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
  1043. package/src/vite/plugins/expose-internal-ids.ts +544 -317
  1044. package/src/vite/plugins/performance-tracks.ts +29 -25
  1045. package/src/vite/plugins/use-cache-transform.ts +65 -50
  1046. package/src/vite/plugins/version-injector.ts +39 -23
  1047. package/src/vite/plugins/version-plugin.ts +59 -2
  1048. package/src/vite/plugins/virtual-entries.ts +2 -2
  1049. package/src/vite/rango.ts +116 -29
  1050. package/src/vite/router-discovery.ts +774 -102
  1051. package/src/vite/utils/ast-handler-extract.ts +15 -15
  1052. package/src/vite/utils/banner.ts +1 -1
  1053. package/src/vite/utils/bundle-analysis.ts +4 -2
  1054. package/src/vite/utils/client-chunks.ts +190 -0
  1055. package/src/vite/utils/forward-user-plugins.ts +193 -0
  1056. package/src/vite/utils/manifest-utils.ts +21 -5
  1057. package/src/vite/utils/package-resolution.ts +41 -1
  1058. package/src/vite/utils/prerender-utils.ts +21 -6
  1059. package/src/vite/utils/shared-utils.ts +107 -26
  1060. package/src/browser/action-response-classifier.ts +0 -99
@@ -18,6 +18,8 @@ import { isInsideCacheScope } from "../server/context.js";
18
18
  import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
19
19
  import { isAutoGeneratedRouteName } from "../route-name.js";
20
20
  import { PRERENDER_PASSTHROUGH } from "../prerender.js";
21
+ import { substitutePatternParams } from "./substitute-pattern-params.js";
22
+ import { fireAndForgetWaitUntil } from "../types/request-scope.js";
21
23
 
22
24
  /**
23
25
  * Strip internal _rsc* query params from a URL.
@@ -158,48 +160,14 @@ export function createReverseFunction(
158
160
  );
159
161
  }
160
162
 
161
- let result = pattern;
162
-
163
163
  // Merge current request params as defaults, explicit params override
164
164
  const effectiveParams = currentParams
165
165
  ? { ...currentParams, ...hrefParams }
166
166
  : hrefParams;
167
167
 
168
- // Substitute params (strip constraint and optional syntax: :param(a|b)? -> value)
169
- // Optional params (:param?) are omitted when not provided
170
- if (effectiveParams) {
171
- let hadOmittedOptional = false;
172
- // First pass: optional params (trailing ?)
173
- result = result.replace(
174
- /:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?(\?)/g,
175
- (_, key) => {
176
- const value = effectiveParams[key];
177
- if (value === undefined) {
178
- hadOmittedOptional = true;
179
- return "";
180
- }
181
- return encodeURIComponent(value);
182
- },
183
- );
184
- // Second pass: required params (no trailing ?)
185
- result = result.replace(
186
- /:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?(?!\?)/g,
187
- (_, key) => {
188
- const value = effectiveParams[key];
189
- if (value === undefined) {
190
- throw new Error(`Missing param "${key}" for route "${name}"`);
191
- }
192
- return encodeURIComponent(value);
193
- },
194
- );
195
- // Clean up slashes only when an optional param was actually omitted,
196
- // so intentional trailing-slash patterns like "/blog/" are preserved.
197
- if (hadOmittedOptional) {
198
- const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
199
- result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
200
- if (hadTrailingSlash && !result.endsWith("/")) result += "/";
201
- }
202
- }
168
+ let result = effectiveParams
169
+ ? substitutePatternParams(pattern, effectiveParams, name)
170
+ : pattern;
203
171
 
204
172
  // Append search params as query string
205
173
  if (search) {
@@ -278,8 +246,12 @@ export function createHandlerContext<TEnv>(
278
246
  search: searchSchema ? resolvedSearchParams : {},
279
247
  pathname,
280
248
  url,
281
- originalUrl: new URL(request.url),
249
+ originalUrl: requestContext?.originalUrl ?? new URL(request.url),
282
250
  env: bindings,
251
+ waitUntil: requestContext
252
+ ? requestContext.waitUntil.bind(requestContext)
253
+ : fireAndForgetWaitUntil,
254
+ executionContext: requestContext?.executionContext,
283
255
  _variables: variables,
284
256
  get: ((keyOrVar: any) => {
285
257
  // Read-time guard: non-cacheable var inside cache() → throw.
@@ -384,6 +356,12 @@ export function createPrerenderContext<TEnv>(
384
356
  "Configure buildEnv in your rango() plugin options to enable build-time env access.",
385
357
  );
386
358
  },
359
+ // Build-time prerender has no live request. waitUntil is a true no-op
360
+ // (running fn() here would fire side effects during build, which is
361
+ // incorrect — these are meant to outlive the live response).
362
+ // executionContext is absent for the same reason.
363
+ waitUntil: () => {},
364
+ executionContext: undefined,
387
365
  _variables: variables,
388
366
  get: ((keyOrVar: any) => contextGet(variables, keyOrVar)) as any,
389
367
  set: ((keyOrVar: any, value: any) => {
@@ -473,6 +451,11 @@ export function createStaticContext<TEnv>(
473
451
  "Configure buildEnv in your rango() plugin options to enable build-time env access.",
474
452
  );
475
453
  },
454
+ // Static() handlers have no live request. waitUntil is a true no-op
455
+ // (running fn() here would fire side effects during build, which is
456
+ // incorrect). executionContext is absent for the same reason.
457
+ waitUntil: () => {},
458
+ executionContext: undefined,
476
459
  _variables: variables,
477
460
  get: ((keyOrVar: any) => contextGet(variables, keyOrVar)) as any,
478
461
  set: ((keyOrVar: any, value: any) => {
@@ -66,28 +66,14 @@ export function findInterceptForRoute(
66
66
  let current: EntryData | null = fromEntry;
67
67
 
68
68
  while (current) {
69
- if (current.intercept && current.intercept.length > 0) {
70
- for (const intercept of current.intercept) {
69
+ // current first, then its sibling layouts — same order as before.
70
+ for (const source of [current, ...current.layout]) {
71
+ for (const intercept of source.intercept) {
71
72
  if (
72
73
  intercept.routeName === targetRouteKey &&
73
74
  evaluateInterceptWhen(intercept, selectorContext, isAction)
74
75
  ) {
75
- return { intercept, entry: current };
76
- }
77
- }
78
- }
79
-
80
- if (current.layout && current.layout.length > 0) {
81
- for (const siblingLayout of current.layout) {
82
- if (siblingLayout.intercept && siblingLayout.intercept.length > 0) {
83
- for (const intercept of siblingLayout.intercept) {
84
- if (
85
- intercept.routeName === targetRouteKey &&
86
- evaluateInterceptWhen(intercept, selectorContext, isAction)
87
- ) {
88
- return { intercept, entry: siblingLayout };
89
- }
90
- }
76
+ return { intercept, entry: source };
91
77
  }
92
78
  }
93
79
  }
@@ -1,8 +1,8 @@
1
1
  import { registerRouteMap } from "../route-map-builder.js";
2
2
  import { extractStaticPrefix } from "./pattern-matching.js";
3
3
  import {
4
- EntryData,
5
- RSCRouterContext,
4
+ type EntryData,
5
+ RangoContext,
6
6
  runWithPrefixes,
7
7
  getIsolatedLazyParent,
8
8
  } from "../server/context";
@@ -125,14 +125,13 @@ export function evaluateLazyEntry<TEnv = any>(
125
125
  // Merge captured counters from include() to maintain consistent
126
126
  // shortCode indices with sibling entries from pattern extraction
127
127
  const lazyCounters: Record<string, number> = {};
128
- if (lazyContext && (lazyContext as any).counters) {
129
- const captured = (lazyContext as any).counters as Record<string, number>;
130
- for (const [key, value] of Object.entries(captured)) {
128
+ if (lazyContext?.counters) {
129
+ for (const [key, value] of Object.entries(lazyContext.counters)) {
131
130
  lazyCounters[key] = value;
132
131
  }
133
132
  }
134
133
 
135
- RSCRouterContext.run(
134
+ RangoContext.run(
136
135
  {
137
136
  manifest,
138
137
  patterns,
@@ -141,8 +140,9 @@ export function evaluateLazyEntry<TEnv = any>(
141
140
  namespace: "lazy",
142
141
  parent: getIsolatedLazyParent(lazyContext?.parent as EntryData | null),
143
142
  counters: lazyCounters,
144
- cacheProfiles: (lazyContext as any)?.cacheProfiles,
145
- rootScoped: (lazyContext as any)?.rootScoped,
143
+ cacheProfiles: lazyContext?.cacheProfiles,
144
+ rootScoped: lazyContext?.rootScoped,
145
+ includeScope: lazyContext?.includeScope,
146
146
  },
147
147
  () => {
148
148
  // Run the lazy patterns handler with the original context prefixes
@@ -21,10 +21,13 @@ import type {
21
21
  } from "../types";
22
22
  import type { LoaderRevalidationResult, ActionContext } from "./types";
23
23
  import { isHandle, collectHandleData, type Handle } from "../handle.js";
24
- import type { HandleStore, HandleData } from "../server/handle-store.js";
24
+ import { buildHandleSnapshot } from "../server/handle-store.js";
25
25
  import { getFetchableLoader } from "../server/fetchable-loader-store.js";
26
26
  import { _getRequestContext } from "../server/request-context.js";
27
- import { isInsideLoaderScope } from "../server/context.js";
27
+ import {
28
+ isInsideLoaderScope,
29
+ runInsideLoaderBodyScope,
30
+ } from "../server/context.js";
28
31
  import { debugLog } from "./logging.js";
29
32
 
30
33
  /**
@@ -266,7 +269,10 @@ function createLoaderExecutor<TEnv>(
266
269
  search: (ctx as any).search,
267
270
  pathname: ctx.pathname,
268
271
  url: ctx.url,
272
+ originalUrl: ctx.originalUrl,
269
273
  env: ctx.env,
274
+ waitUntil: ctx.waitUntil.bind(ctx),
275
+ executionContext: ctx.executionContext,
270
276
  get: ((keyOrVar: any) =>
271
277
  contextGet(variables, keyOrVar)) as typeof ctx.get,
272
278
  use: ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
@@ -284,10 +290,9 @@ function createLoaderExecutor<TEnv>(
284
290
  );
285
291
  }
286
292
  const segmentOrder = reqCtx._renderBarrierSegmentOrder ?? [];
287
- const snapshot = buildHandleSnapshot(
288
- reqCtx._handleStore,
289
- segmentOrder,
290
- );
293
+ const snapshot =
294
+ reqCtx._renderBarrierHandleSnapshot ??
295
+ buildHandleSnapshot(reqCtx._handleStore, segmentOrder);
291
296
  return collectHandleData(item, snapshot, segmentOrder);
292
297
  }
293
298
 
@@ -324,6 +329,17 @@ function createLoaderExecutor<TEnv>(
324
329
  );
325
330
  }
326
331
 
332
+ // Bidirectional deadlock check: if a handler already started
333
+ // awaiting this loader, calling rendered() would deadlock.
334
+ if (reqCtx._handlerLoaderDeps?.has(currentLoaderId)) {
335
+ throw new Error(
336
+ `Deadlock: loader "${currentLoaderId}" called ctx.rendered() but a handler ` +
337
+ `is already awaiting this loader via ctx.use(). The handler blocks ` +
338
+ `segment resolution, which blocks the barrier, which blocks this loader. ` +
339
+ `Move the data dependency to a loader-to-loader pattern instead.`,
340
+ );
341
+ }
342
+
327
343
  // Register this loader as waiting for the barrier so that
328
344
  // setupLoaderAccess can detect deadlocks when a handler
329
345
  // tries to await the same loader via ctx.use().
@@ -340,8 +356,19 @@ function createLoaderExecutor<TEnv>(
340
356
  };
341
357
 
342
358
  const doneLoader = track(`loader:${loader.$$id}`, 2);
359
+ // Run the loader body inside loader scope so request-scoped reads
360
+ // (cookies()/headers() and non-cacheable ctx.get) are exempt from the
361
+ // cache-purity guards: loaders always run fresh, so their reads never leak
362
+ // into a cached segment. DSL loaders are already wrapped by fresh.ts; this
363
+ // also covers handler-invoked loaders (ctx.use(Loader) from a handler),
364
+ // which otherwise execute in the caller's cache scope and would wrongly
365
+ // throw. rendered() gating uses the captured isDslLoader (above), so this
366
+ // does not grant rendered() to handler-invoked loaders. Uses a body-only
367
+ // scope, so isInsideLoaderScope() / barrier / deadlock gating is unchanged.
343
368
  const promise = Promise.resolve(
344
- loaderFn(loaderCtx as LoaderContext<any, TEnv>),
369
+ runInsideLoaderBodyScope(() =>
370
+ loaderFn(loaderCtx as LoaderContext<any, TEnv>),
371
+ ),
345
372
  ).finally(() => {
346
373
  pendingLoaders.delete(loader.$$id);
347
374
  doneLoader();
@@ -354,25 +381,6 @@ function createLoaderExecutor<TEnv>(
354
381
  return useLoader;
355
382
  }
356
383
 
357
- /**
358
- * Build a HandleData snapshot from the HandleStore using segment ordering.
359
- * Reads data directly from the store for each segment in order.
360
- */
361
- function buildHandleSnapshot(
362
- handleStore: HandleStore,
363
- segmentOrder: string[],
364
- ): HandleData {
365
- const data: HandleData = {};
366
- for (const segmentId of segmentOrder) {
367
- const segData = handleStore.getDataForSegment(segmentId);
368
- for (const handleName in segData) {
369
- if (!data[handleName]) data[handleName] = {};
370
- data[handleName][segmentId] = segData[handleName];
371
- }
372
- }
373
- return data;
374
- }
375
-
376
384
  /**
377
385
  * Set up the use() method on handler context to access loaders and handles.
378
386
  *
@@ -386,15 +394,22 @@ export function setupLoaderAccess<TEnv>(
386
394
  ctx: HandlerContext<any, TEnv>,
387
395
  loaderPromises: Map<string, Promise<any>>,
388
396
  ): void {
389
- // Eagerly capture the HandleStore at setup time (before pipeline async ops).
390
- // In workerd/Cloudflare, dynamic imports and fetch() in the match pipeline
391
- // can disrupt AsyncLocalStorage, causing getRequestContext() to return
392
- // undefined when handlers later call ctx.use(handle). Capturing early
393
- // ensures the store reference survives ALS disruption.
394
- const handleStoreRef = _getRequestContext()?._handleStore;
397
+ // Eagerly capture the request context and HandleStore at setup time
398
+ // (before pipeline async ops). In workerd/Cloudflare, dynamic imports and
399
+ // fetch() in the match pipeline can disrupt AsyncLocalStorage, causing
400
+ // getRequestContext() to return undefined when handlers later call
401
+ // ctx.use(handle). Capturing early ensures references survive ALS disruption.
402
+ const reqCtxRef = _getRequestContext();
403
+ const handleStoreRef = reqCtxRef?._handleStore;
395
404
 
396
405
  const useLoader = createLoaderExecutor(ctx, loaderPromises);
397
406
 
407
+ // Track whether we're inside a handle push callback. Loaders started
408
+ // from push callbacks (e.g. push(async () => ctx.use(Loader))) do NOT
409
+ // block segment resolution, so they must not be registered as handler
410
+ // dependencies for deadlock detection.
411
+ let insideHandlePush = false;
412
+
398
413
  ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
399
414
  if (isHandle(item)) {
400
415
  const handle = item;
@@ -414,28 +429,53 @@ export function setupLoaderAccess<TEnv>(
414
429
  ) => {
415
430
  if (!store) return;
416
431
 
417
- const valueOrPromise =
418
- typeof dataOrFn === "function"
419
- ? (dataOrFn as () => Promise<unknown>)()
420
- : dataOrFn;
432
+ if (typeof dataOrFn === "function") {
433
+ // Mark scope so ctx.use(loader) calls inside the callback
434
+ // are not registered as handler-to-loader deps.
435
+ insideHandlePush = true;
436
+ try {
437
+ const result = (dataOrFn as () => Promise<unknown>)();
438
+ store.push(handle.$$id, segmentId, result);
439
+ } finally {
440
+ insideHandlePush = false;
441
+ }
442
+ return;
443
+ }
421
444
 
422
- store.push(handle.$$id, segmentId, valueOrPromise);
445
+ store.push(handle.$$id, segmentId, dataOrFn);
423
446
  };
424
447
  }
425
448
 
426
- // Deadlock guard: if a HANDLER awaits a loader that called rendered(),
427
- // the handler blocks segment resolution which blocks the barrier.
428
- // Skip this check when inside a DSL loader scope (resolveLoaderData
429
- // also calls ctx.use() but that's DSL-to-DSL, not handler-to-loader).
449
+ // Deadlock guard and handler-to-loader dependency tracking.
450
+ // Skip when inside a DSL loader scope (resolveLoaderData also calls
451
+ // ctx.use() but that's DSL-to-DSL, not handler-to-loader) or when
452
+ // inside a handle push callback (push callbacks don't block segment
453
+ // resolution so they can't cause rendered() deadlocks).
430
454
  const loader = item as LoaderDefinition<any, any>;
431
- if (loaderPromises.has(loader.$$id) && !isInsideLoaderScope()) {
432
- const reqCtx = _getRequestContext();
433
- if (reqCtx?._renderBarrierWaiters?.has(loader.$$id)) {
434
- throw new Error(
435
- `Deadlock: handler is awaiting loader "${loader.$$id}" which called ctx.rendered(). ` +
436
- `The loader is waiting for segment resolution, but the handler blocks resolution. ` +
437
- `Move the data dependency to a loader-to-loader pattern instead.`,
438
- );
455
+ if (!isInsideLoaderScope() && !insideHandlePush) {
456
+ const reqCtx = reqCtxRef ?? _getRequestContext();
457
+ if (reqCtx) {
458
+ // Direction 1: handler awaits loader that already called rendered()
459
+ if (
460
+ loaderPromises.has(loader.$$id) &&
461
+ reqCtx._renderBarrierWaiters?.has(loader.$$id)
462
+ ) {
463
+ throw new Error(
464
+ `Deadlock: handler is awaiting loader "${loader.$$id}" which called ctx.rendered(). ` +
465
+ `The loader is waiting for segment resolution, but the handler blocks resolution. ` +
466
+ `Move the data dependency to a loader-to-loader pattern instead.`,
467
+ );
468
+ }
469
+ // Direction 2: track dep so rendered() can detect the deadlock
470
+ // if the loader calls it later. Skip when the barrier has already
471
+ // resolved — no deadlock is possible (rendered() resolves immediately).
472
+ // _renderBarrierSegmentOrder is undefined before resolution, string[]
473
+ // after. This also prevents false positives from handle push callbacks
474
+ // that resume after their first await (post-barrier-resolution).
475
+ if (reqCtx._renderBarrierSegmentOrder === undefined) {
476
+ if (!reqCtx._handlerLoaderDeps) reqCtx._handlerLoaderDeps = new Set();
477
+ reqCtx._handlerLoaderDeps.add(loader.$$id);
478
+ }
439
479
  }
440
480
  }
441
481
 
@@ -126,28 +126,37 @@ export async function loadManifest(
126
126
  // were created during pattern extraction. This prevents shortCode
127
127
  // collisions between lazy and non-lazy entries under the same parent
128
128
  // (e.g., ArticlesLayout and BlogLayout both under NavLayout).
129
- if (lazyContext && (lazyContext as any).counters) {
130
- const captured = (lazyContext as any).counters as Record<string, number>;
131
- for (const [key, value] of Object.entries(captured)) {
129
+ if (lazyContext?.counters) {
130
+ for (const [key, value] of Object.entries(lazyContext.counters)) {
132
131
  Store.counters[key] = Math.max(Store.counters[key] ?? 0, value);
133
132
  }
134
133
  }
135
134
 
136
135
  // Propagate cache profiles for DSL-time cache("profileName") resolution.
137
136
  // Non-lazy entries carry profiles directly; lazy entries carry them
138
- // in the captured lazyContext from include() time.
139
- const entryProfiles =
140
- entry.cacheProfiles ?? (lazyContext as any)?.cacheProfiles;
141
- if (entryProfiles) {
142
- Store.cacheProfiles = entryProfiles;
143
- }
137
+ // in the captured lazyContext from include() time. Always write
138
+ // (including clearing to undefined) so a prior lazy build's profile
139
+ // map cannot leak into a later non-lazy build on the same ALS-backed
140
+ // Store — which would otherwise let cache("name") resolve a profile
141
+ // from an unrelated entry.
142
+ Store.cacheProfiles = entry.cacheProfiles ?? lazyContext?.cacheProfiles;
144
143
 
145
144
  // Propagate rootScoped from lazyContext so that routes inside
146
145
  // nested { name: "sub" } under { name: "" } keep inherited root scope
147
- // when the manifest is rebuilt on each request.
148
- if (lazyContext && (lazyContext as any).rootScoped !== undefined) {
149
- Store.rootScoped = (lazyContext as any).rootScoped;
150
- }
146
+ // when the manifest is rebuilt on each request. Always write
147
+ // (including clearing to undefined, which makes getRootScoped()
148
+ // return its true default) so a prior lazy build's scope cannot leak
149
+ // into a later non-lazy build on the same ALS-backed Store — which
150
+ // would otherwise mis-register plain routes as non-root-scoped and
151
+ // break dot-local reverse resolution.
152
+ Store.rootScoped = lazyContext?.rootScoped;
153
+
154
+ // Propagate includeScope from lazyContext so that direct-descendant
155
+ // shortCodes of this include use the correct scoped counter namespace
156
+ // on every manifest rebuild. Always write (including clearing to
157
+ // undefined) so a prior lazy build's scope cannot leak into a later
158
+ // non-lazy build on the same ALS-backed Store.
159
+ Store.includeScope = lazyContext?.includeScope;
151
160
 
152
161
  const handlerExecStart = performance.now();
153
162
  const useItems = await getContext().runWithStore(
@@ -22,10 +22,10 @@ import { collectRouteMiddleware } from "./middleware.js";
22
22
  import { traverseBack } from "./pattern-matching.js";
23
23
  import { DefaultErrorFallback } from "../default-error-boundary.js";
24
24
  import {
25
- EntryData,
26
- LoaderEntry,
25
+ type EntryData,
26
+ type LoaderEntry,
27
27
  getContext,
28
- InterceptSelectorContext,
28
+ type InterceptSelectorContext,
29
29
  } from "../server/context";
30
30
  import type { ErrorBoundaryHandler, ErrorInfo, MatchResult } from "../types";
31
31
  import type { ReactNode } from "react";
@@ -550,6 +550,7 @@ export async function matchError<TEnv>(
550
550
  segments: [errorSegment],
551
551
  matched: matchedIds,
552
552
  diff: [errorSegment.id],
553
+ resolvedIds: [errorSegment.id],
553
554
  params: matched.params,
554
555
  };
555
556
  }
@@ -33,10 +33,13 @@ import type { ErrorBoundaryHandler, NotFoundBoundaryHandler } from "../types";
33
33
  import type { MiddlewareFn } from "./middleware.js";
34
34
  import {
35
35
  type TelemetrySink,
36
+ type CacheSegmentSignal,
36
37
  safeEmit,
37
38
  resolveSink,
38
39
  getRequestId,
40
+ buildCacheSignalSegments,
39
41
  } from "./telemetry.js";
42
+ import { _getRequestContext } from "../server/request-context.js";
40
43
 
41
44
  export interface MatchHandlerDeps<TEnv = any> {
42
45
  buildRouterContext: () => RouterContext<TEnv>;
@@ -51,6 +54,12 @@ export interface MatchHandlerDeps<TEnv = any> {
51
54
  isAction: boolean,
52
55
  ) => { intercept: InterceptEntry; entry: EntryData } | null;
53
56
  telemetry?: TelemetrySink;
57
+ /**
58
+ * DEVELOPMENT/TEST ONLY gate for the X-Rango-Cache debug header. When true,
59
+ * match/matchPartial stash a coarse route-level cache signal on the request
60
+ * context for the response-finalization path to emit. Default off.
61
+ */
62
+ cacheSignalEnabled?: boolean;
54
63
  }
55
64
 
56
65
  export interface MatchHandlers<TEnv = any> {
@@ -113,6 +122,25 @@ export function createMatchHandlers<TEnv = any>(
113
122
  } = deps;
114
123
  const hasTelemetry = !!deps.telemetry;
115
124
  const telemetry = resolveSink(deps.telemetry);
125
+ const cacheSignalEnabled = !!deps.cacheSignalEnabled;
126
+ // Compute the coarse cache signal when EITHER telemetry needs it (for the
127
+ // cache.decision event) OR the debug header gate is on. When neither is set,
128
+ // this is never called — zero extra work on the hot path.
129
+ const buildSignal = (
130
+ routeKey: string,
131
+ state: {
132
+ cacheHit: boolean;
133
+ cacheSource?: "runtime" | "prerender";
134
+ shouldRevalidate?: boolean;
135
+ },
136
+ ): CacheSegmentSignal[] => buildCacheSignalSegments(routeKey, state);
137
+ // Stash the signal on the request context for the response path to emit as
138
+ // the X-Rango-Cache header. Only when the debug gate is on.
139
+ const recordSignalIfEnabled = (segments: CacheSegmentSignal[]): void => {
140
+ if (!cacheSignalEnabled) return;
141
+ const reqCtx = _getRequestContext();
142
+ if (reqCtx) reqCtx._cacheSignal = segments;
143
+ };
116
144
 
117
145
  async function createMatchContextForFull(
118
146
  request: Request,
@@ -196,6 +224,7 @@ export function createMatchHandlers<TEnv = any>(
196
224
  segments: [],
197
225
  matched: [],
198
226
  diff: [],
227
+ resolvedIds: [],
199
228
  params: {},
200
229
  redirect: result.redirectUrl,
201
230
  };
@@ -207,17 +236,24 @@ export function createMatchHandlers<TEnv = any>(
207
236
  const state = createPipelineState();
208
237
  const pipeline = createMatchPartialPipeline(ctx, state);
209
238
  const matchResult = await collectMatchResult(pipeline, ctx, state);
239
+ if (hasTelemetry || cacheSignalEnabled) {
240
+ const signalSegments = buildSignal(ctx.routeKey, state);
241
+ recordSignalIfEnabled(signalSegments);
242
+ if (hasTelemetry) {
243
+ safeEmit(telemetry, {
244
+ type: "cache.decision",
245
+ timestamp: performance.now(),
246
+ requestId,
247
+ pathname,
248
+ routeKey: ctx.routeKey,
249
+ hit: state.cacheHit,
250
+ shouldRevalidate: !!state.shouldRevalidate,
251
+ source: state.cacheSource,
252
+ segments: signalSegments,
253
+ });
254
+ }
255
+ }
210
256
  if (hasTelemetry) {
211
- safeEmit(telemetry, {
212
- type: "cache.decision",
213
- timestamp: performance.now(),
214
- requestId,
215
- pathname,
216
- routeKey: ctx.routeKey,
217
- hit: state.cacheHit,
218
- shouldRevalidate: !!state.shouldRevalidate,
219
- source: state.cacheSource,
220
- });
221
257
  safeEmit(telemetry, {
222
258
  type: "request.end",
223
259
  timestamp: performance.now(),
@@ -362,17 +398,24 @@ export function createMatchHandlers<TEnv = any>(
362
398
  state,
363
399
  );
364
400
  flushRevalidationTrace();
401
+ if (hasTelemetry || cacheSignalEnabled) {
402
+ const signalSegments = buildSignal(ctx.routeKey, state);
403
+ recordSignalIfEnabled(signalSegments);
404
+ if (hasTelemetry) {
405
+ safeEmit(telemetry, {
406
+ type: "cache.decision",
407
+ timestamp: performance.now(),
408
+ requestId: partialRequestId,
409
+ pathname,
410
+ routeKey: ctx.routeKey,
411
+ hit: state.cacheHit,
412
+ shouldRevalidate: !!state.shouldRevalidate,
413
+ source: state.cacheSource,
414
+ segments: signalSegments,
415
+ });
416
+ }
417
+ }
365
418
  if (hasTelemetry) {
366
- safeEmit(telemetry, {
367
- type: "cache.decision",
368
- timestamp: performance.now(),
369
- requestId: partialRequestId,
370
- pathname,
371
- routeKey: ctx.routeKey,
372
- hit: state.cacheHit,
373
- shouldRevalidate: !!state.shouldRevalidate,
374
- source: state.cacheSource,
375
- });
376
419
  safeEmit(telemetry, {
377
420
  type: "request.end",
378
421
  timestamp: performance.now(),