@rangojs/router 0.0.0-experimental.18 → 0.0.0-experimental.1878aa49

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 (1030) hide show
  1. package/{CLAUDE.md → AGENTS.md} +4 -0
  2. package/README.md +91 -19
  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 +348 -80
  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 +883 -444
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/dist/vite/virtual-entries.js +110 -0
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +17 -16
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +32 -0
  811. package/skills/caching/SKILL.md +49 -8
  812. package/skills/document-cache/SKILL.md +2 -2
  813. package/skills/hooks/SKILL.md +34 -32
  814. package/skills/host-router/SKILL.md +218 -0
  815. package/skills/intercept/SKILL.md +79 -0
  816. package/skills/layout/SKILL.md +62 -2
  817. package/skills/links/SKILL.md +3 -1
  818. package/skills/loader/SKILL.md +166 -23
  819. package/skills/middleware/SKILL.md +83 -0
  820. package/skills/parallel/SKILL.md +183 -2
  821. package/skills/prerender/SKILL.md +189 -19
  822. package/skills/rango/SKILL.md +0 -1
  823. package/skills/route/SKILL.md +76 -5
  824. package/skills/router-setup/SKILL.md +172 -5
  825. package/skills/typesafety/SKILL.md +35 -23
  826. package/src/__internal.ts +93 -1
  827. package/src/bin/rango.ts +56 -19
  828. package/src/browser/action-coordinator.ts +97 -0
  829. package/src/browser/app-version.ts +14 -0
  830. package/src/browser/event-controller.ts +30 -27
  831. package/src/browser/history-state.ts +80 -0
  832. package/src/browser/intercept-utils.ts +1 -1
  833. package/src/browser/link-interceptor.ts +4 -3
  834. package/src/browser/merge-segment-loaders.ts +9 -2
  835. package/src/browser/navigation-bridge.ts +160 -31
  836. package/src/browser/navigation-client.ts +141 -88
  837. package/src/browser/navigation-store.ts +44 -39
  838. package/src/browser/navigation-transaction.ts +55 -214
  839. package/src/browser/partial-update.ts +181 -164
  840. package/src/browser/prefetch/cache.ts +206 -0
  841. package/src/browser/prefetch/fetch.ts +150 -0
  842. package/src/browser/prefetch/policy.ts +48 -0
  843. package/src/browser/prefetch/queue.ts +160 -0
  844. package/src/browser/prefetch/resource-ready.ts +77 -0
  845. package/src/browser/react/Link.tsx +97 -36
  846. package/src/browser/react/NavigationProvider.tsx +49 -5
  847. package/src/browser/react/context.ts +7 -2
  848. package/src/browser/react/index.ts +2 -6
  849. package/src/browser/react/location-state-shared.ts +1 -1
  850. package/src/browser/react/location-state.ts +2 -0
  851. package/src/browser/react/nonce-context.ts +23 -0
  852. package/src/browser/react/use-action.ts +9 -1
  853. package/src/browser/react/use-handle.ts +3 -25
  854. package/src/browser/react/use-params.ts +2 -4
  855. package/src/browser/react/use-pathname.ts +2 -3
  856. package/src/browser/react/use-router.ts +22 -9
  857. package/src/browser/react/use-search-params.ts +2 -1
  858. package/src/browser/react/use-segments.ts +7 -60
  859. package/src/browser/response-adapter.ts +73 -0
  860. package/src/browser/rsc-router.tsx +154 -64
  861. package/src/browser/scroll-restoration.ts +37 -37
  862. package/src/browser/segment-reconciler.ts +6 -1
  863. package/src/browser/server-action-bridge.ts +463 -426
  864. package/src/browser/types.ts +61 -36
  865. package/src/browser/validate-redirect-origin.ts +29 -0
  866. package/src/build/generate-manifest.ts +8 -0
  867. package/src/build/generate-route-types.ts +7 -0
  868. package/src/build/route-trie.ts +19 -3
  869. package/src/build/route-types/codegen.ts +13 -4
  870. package/src/build/route-types/include-resolution.ts +21 -1
  871. package/src/build/route-types/per-module-writer.ts +15 -3
  872. package/src/build/route-types/router-processing.ts +391 -90
  873. package/src/build/runtime-discovery.ts +13 -1
  874. package/src/cache/background-task.ts +34 -0
  875. package/src/cache/cache-key-utils.ts +44 -0
  876. package/src/cache/cache-policy.ts +125 -0
  877. package/src/cache/cache-runtime.ts +136 -96
  878. package/src/cache/cache-scope.ts +119 -80
  879. package/src/cache/cf/cf-cache-store.ts +462 -15
  880. package/src/cache/cf/index.ts +5 -1
  881. package/src/cache/document-cache.ts +88 -53
  882. package/src/cache/handle-capture.ts +81 -0
  883. package/src/cache/index.ts +1 -0
  884. package/src/cache/memory-segment-store.ts +18 -7
  885. package/src/cache/profile-registry.ts +43 -8
  886. package/src/cache/read-through-swr.ts +134 -0
  887. package/src/cache/segment-codec.ts +101 -112
  888. package/src/cache/taint.ts +81 -0
  889. package/src/client.rsc.tsx +2 -1
  890. package/src/client.tsx +54 -76
  891. package/src/context-var.ts +72 -2
  892. package/src/debug.ts +2 -2
  893. package/src/errors.ts +6 -1
  894. package/src/handle.ts +1 -1
  895. package/src/handles/MetaTags.tsx +5 -2
  896. package/src/handles/breadcrumbs.ts +66 -0
  897. package/src/handles/index.ts +1 -0
  898. package/src/host/cookie-handler.ts +8 -3
  899. package/src/host/index.ts +0 -3
  900. package/src/host/router.ts +14 -1
  901. package/src/href-client.ts +3 -1
  902. package/src/index.rsc.ts +24 -23
  903. package/src/index.ts +45 -52
  904. package/src/loader.rsc.ts +12 -4
  905. package/src/loader.ts +8 -0
  906. package/src/prerender/store.ts +60 -18
  907. package/src/prerender.ts +76 -18
  908. package/src/reverse.ts +11 -7
  909. package/src/root-error-boundary.tsx +30 -26
  910. package/src/route-definition/dsl-helpers.ts +41 -13
  911. package/src/route-definition/helpers-types.ts +6 -5
  912. package/src/route-definition/index.ts +0 -3
  913. package/src/route-definition/redirect.ts +24 -4
  914. package/src/route-map-builder.ts +45 -3
  915. package/src/route-name.ts +53 -0
  916. package/src/route-types.ts +7 -0
  917. package/src/router/content-negotiation.ts +1 -1
  918. package/src/router/debug-manifest.ts +16 -3
  919. package/src/router/find-match.ts +4 -2
  920. package/src/router/handler-context.ts +159 -34
  921. package/src/router/intercept-resolution.ts +17 -8
  922. package/src/router/lazy-includes.ts +8 -1
  923. package/src/router/loader-resolution.ts +11 -3
  924. package/src/router/logging.ts +104 -4
  925. package/src/router/manifest.ts +45 -7
  926. package/src/router/match-api.ts +62 -8
  927. package/src/router/match-context.ts +3 -0
  928. package/src/router/match-handlers.ts +185 -11
  929. package/src/router/match-middleware/background-revalidation.ts +94 -86
  930. package/src/router/match-middleware/cache-lookup.ts +138 -13
  931. package/src/router/match-middleware/cache-store.ts +55 -10
  932. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  933. package/src/router/match-middleware/segment-resolution.ts +8 -5
  934. package/src/router/match-pipelines.ts +8 -43
  935. package/src/router/match-result.ts +22 -15
  936. package/src/router/metrics.ts +238 -13
  937. package/src/router/middleware-types.ts +60 -12
  938. package/src/router/middleware.ts +214 -42
  939. package/src/router/pattern-matching.ts +61 -10
  940. package/src/router/prerender-match.ts +40 -8
  941. package/src/router/preview-match.ts +7 -1
  942. package/src/router/revalidation.ts +87 -8
  943. package/src/router/router-context.ts +20 -0
  944. package/src/router/router-interfaces.ts +73 -5
  945. package/src/router/router-options.ts +250 -19
  946. package/src/router/segment-resolution/fresh.ts +277 -45
  947. package/src/router/segment-resolution/helpers.ts +49 -25
  948. package/src/router/segment-resolution/loader-cache.ts +38 -146
  949. package/src/router/segment-resolution/revalidation.ts +619 -275
  950. package/src/router/segment-wrappers.ts +5 -0
  951. package/src/router/telemetry-otel.ts +299 -0
  952. package/src/router/telemetry.ts +300 -0
  953. package/src/router/timeout.ts +148 -0
  954. package/src/router/trie-matching.ts +20 -2
  955. package/src/router/types.ts +8 -1
  956. package/src/router.ts +230 -25
  957. package/src/rsc/handler-context.ts +11 -0
  958. package/src/rsc/handler.ts +492 -96
  959. package/src/rsc/helpers.ts +25 -16
  960. package/src/rsc/index.ts +0 -20
  961. package/src/rsc/loader-fetch.ts +84 -42
  962. package/src/rsc/manifest-init.ts +5 -1
  963. package/src/rsc/origin-guard.ts +141 -0
  964. package/src/rsc/progressive-enhancement.ts +249 -19
  965. package/src/rsc/response-route-handler.ts +37 -26
  966. package/src/rsc/rsc-rendering.ts +40 -41
  967. package/src/rsc/runtime-warnings.ts +42 -0
  968. package/src/rsc/server-action.ts +150 -68
  969. package/src/rsc/ssr-setup.ts +128 -0
  970. package/src/rsc/types.ts +18 -1
  971. package/src/search-params.ts +38 -23
  972. package/src/segment-system.tsx +140 -4
  973. package/src/server/context.ts +187 -20
  974. package/src/server/fetchable-loader-store.ts +11 -6
  975. package/src/server/handle-store.ts +66 -9
  976. package/src/server/loader-registry.ts +20 -54
  977. package/src/server/request-context.ts +188 -41
  978. package/src/server.ts +6 -0
  979. package/src/ssr/index.tsx +66 -26
  980. package/src/static-handler.ts +7 -0
  981. package/src/theme/ThemeProvider.tsx +6 -1
  982. package/src/theme/index.ts +4 -18
  983. package/src/theme/theme-context.ts +1 -28
  984. package/src/theme/theme-script.ts +2 -1
  985. package/src/types/cache-types.ts +9 -4
  986. package/src/types/error-types.ts +3 -0
  987. package/src/types/global-namespace.ts +9 -0
  988. package/src/types/handler-context.ts +167 -55
  989. package/src/types/loader-types.ts +11 -5
  990. package/src/types/route-config.ts +17 -8
  991. package/src/types/route-entry.ts +35 -0
  992. package/src/types/segments.ts +2 -5
  993. package/src/urls/include-helper.ts +49 -8
  994. package/src/urls/index.ts +1 -0
  995. package/src/urls/path-helper-types.ts +30 -12
  996. package/src/urls/path-helper.ts +18 -3
  997. package/src/urls/pattern-types.ts +33 -1
  998. package/src/urls/response-types.ts +27 -2
  999. package/src/urls/type-extraction.ts +23 -15
  1000. package/src/use-loader.tsx +12 -4
  1001. package/src/vite/discovery/bundle-postprocess.ts +32 -52
  1002. package/src/vite/discovery/discover-routers.ts +53 -23
  1003. package/src/vite/discovery/prerender-collection.ts +58 -41
  1004. package/src/vite/discovery/route-types-writer.ts +7 -7
  1005. package/src/vite/discovery/state.ts +4 -9
  1006. package/src/vite/discovery/virtual-module-codegen.ts +5 -2
  1007. package/src/vite/index.ts +4 -3
  1008. package/src/vite/plugin-types.ts +0 -83
  1009. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1010. package/src/vite/plugins/client-ref-hashing.ts +3 -3
  1011. package/src/vite/plugins/expose-action-id.ts +1 -3
  1012. package/src/vite/plugins/performance-tracks.ts +88 -0
  1013. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1014. package/src/vite/plugins/use-cache-transform.ts +91 -3
  1015. package/src/vite/plugins/version-plugin.ts +13 -1
  1016. package/src/vite/rango.ts +172 -210
  1017. package/src/vite/router-discovery.ts +115 -44
  1018. package/src/vite/utils/banner.ts +3 -3
  1019. package/src/vite/utils/prerender-utils.ts +81 -0
  1020. package/src/vite/utils/shared-utils.ts +6 -3
  1021. package/skills/testing/SKILL.md +0 -226
  1022. package/src/browser/prefetch-cache.ts +0 -48
  1023. package/src/browser/prefetch-fetch.ts +0 -109
  1024. package/src/browser/prefetch-queue.ts +0 -81
  1025. package/src/browser/request-controller.ts +0 -164
  1026. package/src/route-definition/route-function.ts +0 -119
  1027. package/src/router.gen.ts +0 -6
  1028. package/src/static-handler.gen.ts +0 -5
  1029. package/src/urls.gen.ts +0 -8
  1030. /package/src/browser/{prefetch-observer.ts → prefetch/observer.ts} +0 -0
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Shared Cache Key Utilities
3
+ *
4
+ * Deterministic normalization of search params and route params
5
+ * for cache key generation. Used by cache-runtime, cache-scope,
6
+ * document-cache, and loader-cache.
7
+ */
8
+
9
+ /**
10
+ * Build a sorted, deterministic query string from URLSearchParams,
11
+ * excluding internal _rsc* and __* params.
12
+ *
13
+ * Returns empty string when no user-facing params exist.
14
+ */
15
+ export function sortedSearchString(searchParams: URLSearchParams): string {
16
+ const pairs: [string, string][] = [];
17
+ for (const [k, v] of searchParams) {
18
+ if (!k.startsWith("_rsc") && !k.startsWith("__")) {
19
+ pairs.push([k, v]);
20
+ }
21
+ }
22
+ if (pairs.length === 0) return "";
23
+ pairs.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
24
+ return pairs
25
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
26
+ .join("&");
27
+ }
28
+
29
+ /**
30
+ * Build a sorted, deterministic string from route params.
31
+ *
32
+ * Returns empty string when params is empty or undefined.
33
+ */
34
+ export function sortedRouteParams(
35
+ params: Record<string, string> | undefined,
36
+ ): string {
37
+ if (!params) return "";
38
+ const entries = Object.entries(params);
39
+ if (entries.length === 0) return "";
40
+ return entries
41
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
42
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
43
+ .join("&");
44
+ }
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Shared Cache Policy Utilities
3
+ *
4
+ * Resolution cascades for TTL, SWR, cache key, and cache store.
5
+ * Consolidates the multi-tier resolution pattern:
6
+ * explicit option → store defaults → fallback constant
7
+ */
8
+
9
+ import type { CacheDefaults, SegmentCacheStore } from "./types.js";
10
+ import { _getRequestContext } from "../server/request-context.js";
11
+ import type { RequestContext } from "../server/request-context.js";
12
+
13
+ /**
14
+ * Default TTL for route-level cache() DSL and loader cache.
15
+ * Applied when neither the cache options nor the store defaults specify a TTL.
16
+ */
17
+ export const DEFAULT_ROUTE_TTL = 60;
18
+
19
+ /**
20
+ * Default TTL for function-level "use cache" (setItem).
21
+ * Applied when neither the item options nor the store defaults specify a TTL.
22
+ */
23
+ export const DEFAULT_FUNCTION_TTL = 900;
24
+
25
+ /**
26
+ * Resolve effective TTL from the 3-tier cascade:
27
+ * explicit → store defaults → fallback.
28
+ */
29
+ export function resolveTtl(
30
+ explicit: number | undefined,
31
+ defaults: CacheDefaults | undefined,
32
+ fallback: number,
33
+ ): number {
34
+ if (explicit !== undefined) return explicit;
35
+ if (defaults?.ttl !== undefined) return defaults.ttl;
36
+ return fallback;
37
+ }
38
+
39
+ /**
40
+ * Resolve effective SWR window from the 2-tier cascade:
41
+ * explicit → store defaults.
42
+ * Returns 0 when unset (no SWR window).
43
+ */
44
+ export function resolveSwrWindow(
45
+ explicit: number | undefined,
46
+ defaults: CacheDefaults | undefined,
47
+ ): number {
48
+ if (explicit !== undefined) return explicit;
49
+ if (defaults?.swr !== undefined) return defaults.swr;
50
+ return 0;
51
+ }
52
+
53
+ /**
54
+ * Compute staleAt and expiresAt timestamps from TTL and SWR window.
55
+ *
56
+ * - staleAt: when the entry becomes stale (TTL boundary)
57
+ * - expiresAt: when the entry should be evicted (TTL + SWR)
58
+ *
59
+ * When swrWindow is 0, staleAt === expiresAt (no SWR).
60
+ */
61
+ export function computeExpiration(
62
+ ttlSeconds: number,
63
+ swrSeconds: number = 0,
64
+ ): { staleAt: number; expiresAt: number } {
65
+ const now = Date.now();
66
+ const staleAt = now + ttlSeconds * 1000;
67
+ const expiresAt = staleAt + swrSeconds * 1000;
68
+ return { staleAt, expiresAt };
69
+ }
70
+
71
+ // ============================================================================
72
+ // Cache Key Resolution
73
+ // ============================================================================
74
+
75
+ /**
76
+ * Resolve cache key using the 3-tier priority:
77
+ * 1. keyFn (full override from route/loader cache options)
78
+ * 2. store.keyGenerator (modifies default key)
79
+ * 3. defaultKey (used when neither keyFn nor keyGenerator is provided)
80
+ *
81
+ * Errors from keyFn and store.keyGenerator propagate to the caller.
82
+ * Cache identity is correctness-critical: if explicit key logic throws,
83
+ * silently remapping to a different key could cause cache collisions or
84
+ * serve stale/wrong data. Callers must handle the error or let it surface.
85
+ *
86
+ * Uses _getRequestContext (non-throwing) so that calls outside ALS
87
+ * (e.g. build-time) gracefully fall back to defaultKey.
88
+ */
89
+ export async function resolveCacheKey(
90
+ keyFn: ((ctx: RequestContext) => string | Promise<string>) | undefined,
91
+ store: SegmentCacheStore | null,
92
+ defaultKey: string,
93
+ _label: string,
94
+ ): Promise<string> {
95
+ const requestCtx = _getRequestContext();
96
+
97
+ // Priority 1: Route/loader-level key function (full override)
98
+ if (keyFn && requestCtx) {
99
+ return await keyFn(requestCtx);
100
+ }
101
+
102
+ // Priority 2: Store-level keyGenerator (modifies default key)
103
+ if (store?.keyGenerator && requestCtx) {
104
+ return await store.keyGenerator(requestCtx, defaultKey);
105
+ }
106
+
107
+ // Priority 3: Default key (no custom key logic provided)
108
+ return defaultKey;
109
+ }
110
+
111
+ // ============================================================================
112
+ // Cache Store Resolution
113
+ // ============================================================================
114
+
115
+ /**
116
+ * Resolve cache store from the 2-tier priority:
117
+ * 1. Explicit store from cache options
118
+ * 2. App-level store from request context
119
+ */
120
+ export function resolveCacheStore(
121
+ explicitStore: SegmentCacheStore | undefined,
122
+ ): SegmentCacheStore | null {
123
+ if (explicitStore) return explicitStore;
124
+ return _getRequestContext()?._cacheStore ?? null;
125
+ }
@@ -17,7 +17,6 @@
17
17
  /// <reference types="@vitejs/plugin-rsc/types" />
18
18
 
19
19
  import {
20
- createTemporaryReferenceSet,
21
20
  encodeReply,
22
21
  createClientTemporaryReferenceSet,
23
22
  } from "@vitejs/plugin-rsc/rsc";
@@ -26,19 +25,17 @@ import {
26
25
  isTainted,
27
26
  CACHED_FN_SYMBOL,
28
27
  isCachedFunction,
29
- INSIDE_CACHE_EXEC,
28
+ stampCacheExec,
29
+ unstampCacheExec,
30
30
  } from "./taint.js";
31
31
 
32
32
  export { isCachedFunction };
33
- import { getCacheProfile } from "./profile-registry.js";
34
33
  import { serializeResult, deserializeResult } from "./segment-codec.js";
35
- import type { SegmentHandleData } from "./types.js";
36
- import type { HandleStore } from "../server/handle-store.js";
34
+ import { createHandleStore } from "../server/handle-store.js";
37
35
  import { restoreHandles } from "./handle-snapshot.js";
38
-
39
- // ============================================================================
40
- // Cache Key Generation
41
- // ============================================================================
36
+ import { startHandleCapture, type HandleCapture } from "./handle-capture.js";
37
+ import { sortedSearchString } from "./cache-key-utils.js";
38
+ import { runBackground } from "./background-task.js";
42
39
 
43
40
  /**
44
41
  * Convert encodeReply result to a stable string key.
@@ -51,47 +48,6 @@ async function replyToCacheKey(encoded: string | FormData): Promise<string> {
51
48
  return text;
52
49
  }
53
50
 
54
- // ============================================================================
55
- // Handle Capture
56
- // ============================================================================
57
-
58
- interface HandleCapture {
59
- data: Record<string, SegmentHandleData>;
60
- }
61
-
62
- function startHandleCapture(handleStore: HandleStore): HandleCapture {
63
- const capture: HandleCapture = { data: {} };
64
- const originalPush = handleStore.push.bind(handleStore);
65
-
66
- // Intercept push() calls to record them
67
- handleStore.push = (
68
- handleName: string,
69
- segmentId: string,
70
- value: unknown,
71
- ) => {
72
- if (!capture.data[segmentId]) {
73
- capture.data[segmentId] = {};
74
- }
75
- if (!capture.data[segmentId][handleName]) {
76
- capture.data[segmentId][handleName] = [];
77
- }
78
- capture.data[segmentId][handleName].push(value);
79
- // Still call the original so the data flows through normally
80
- originalPush(handleName, segmentId, value);
81
- };
82
-
83
- return capture;
84
- }
85
-
86
- function stopHandleCapture(
87
- handleStore: HandleStore,
88
- _capture: HandleCapture,
89
- ): void {
90
- // Restore original push by deleting the override
91
- // (the original is on the prototype/closure, our override is an own property)
92
- delete (handleStore as any).push;
93
- }
94
-
95
51
  // ============================================================================
96
52
  // Core: registerCachedFunction
97
53
  // ============================================================================
@@ -112,17 +68,30 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
112
68
  const wrapped = async function (this: any, ...args: any[]): Promise<any> {
113
69
  const requestCtx = getRequestContext();
114
70
  const store = requestCtx?._cacheStore;
115
- const profile = getCacheProfile(profileName || "default");
71
+ const resolvedProfileName = profileName || "default";
116
72
 
117
- // Bypass: no store, no getItem support, or no profile configured
118
- if (!store?.getItem || !profile) {
73
+ // Bypass: no store or no getItem support
74
+ if (!store?.getItem) {
119
75
  return fn.apply(this, args);
120
76
  }
121
77
 
78
+ // Resolve profile strictly from request-scoped config (set by the
79
+ // active router via createRequestContext). No global fallback —
80
+ // global profile state is only for DSL-time cache("profileName").
81
+ const profile = requestCtx?._cacheProfiles?.[resolvedProfileName];
82
+
83
+ if (!profile) {
84
+ throw new Error(
85
+ `[use cache] "${id}" uses unknown cache profile "${resolvedProfileName}". ` +
86
+ `Define it in createRouter({ cacheProfiles: { "${resolvedProfileName}": { ttl: ... } } }).`,
87
+ );
88
+ }
89
+
122
90
  // Separate tainted args (ctx, env, req) from key-generating args.
123
- // For tainted objects that carry route context (params, pathname),
124
- // extract those serializable values into the key so different routes
125
- // and param combinations produce distinct cache entries.
91
+ // For tainted objects that carry route context (params, pathname,
92
+ // searchParams), extract serializable values into the key so
93
+ // different routes, param combinations, and query variants produce
94
+ // distinct cache entries.
126
95
  const keyArgs: unknown[] = [];
127
96
  let hasTaintedArgs = false;
128
97
  for (const arg of args) {
@@ -130,10 +99,28 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
130
99
  hasTaintedArgs = true;
131
100
  const ctx = arg as any;
132
101
  if (ctx.params && typeof ctx.params === "object") {
102
+ // Include host to prevent cross-host cache collisions (same
103
+ // pattern as route-level cache-scope.ts key generation).
104
+ if (ctx.url?.host) {
105
+ keyArgs.push(ctx.url.host);
106
+ }
107
+ // Include route name to prevent collisions when the same cached
108
+ // function is reused across routes with identical pathname/params
109
+ // but different local reverse() scope.
110
+ if (ctx._routeName) {
111
+ keyArgs.push(ctx._routeName);
112
+ }
133
113
  keyArgs.push(ctx.pathname, ctx.params);
134
114
  if (ctx._responseType) {
135
115
  keyArgs.push(ctx._responseType);
136
116
  }
117
+ // Include user-facing search params (exclude internal _rsc*/__ params)
118
+ if (ctx.searchParams instanceof URLSearchParams) {
119
+ const normalized = sortedSearchString(ctx.searchParams);
120
+ if (normalized) {
121
+ keyArgs.push(normalized);
122
+ }
123
+ }
137
124
  }
138
125
  } else {
139
126
  keyArgs.push(arg);
@@ -202,24 +189,79 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
202
189
  restoreHandles(cached.handles, handleStore);
203
190
  }
204
191
  }
205
- // Background revalidation
206
- if (requestCtx?.waitUntil) {
207
- requestCtx.waitUntil(async () => {
208
- try {
209
- const freshResult = await fn.apply(this, args);
210
- const serialized = await serializeResult(freshResult);
211
- if (serialized !== null) {
212
- await store.setItem!(cacheKey, serialized, {
213
- ttl: profile.ttl,
214
- swr: profile.swr,
215
- tags: profile.tags,
216
- });
217
- }
218
- } catch {
219
- // Background revalidation failed silently
192
+ // Background revalidation — must capture handles if tainted args present.
193
+ // Use an isolated handle store so background pushes don't pollute the
194
+ // live response or throw LateHandlePushError on the completed store.
195
+ // Same isolation pattern as route-level background-revalidation.ts.
196
+ runBackground(requestCtx, async () => {
197
+ // Reuse closure-captured requestCtx instead of calling
198
+ // getRequestContext() ALS context may be gone inside waitUntil.
199
+ let originalHandleStore:
200
+ | ReturnType<typeof createHandleStore>
201
+ | undefined;
202
+ if (hasTaintedArgs && requestCtx) {
203
+ originalHandleStore = requestCtx._handleStore;
204
+ requestCtx._handleStore = createHandleStore();
205
+ }
206
+ const bgHandleStore = hasTaintedArgs
207
+ ? requestCtx?._handleStore
208
+ : undefined;
209
+ let bgCapture: HandleCapture | undefined;
210
+ let bgStopCapture: (() => void) | undefined;
211
+ if (bgHandleStore) {
212
+ const c = startHandleCapture(bgHandleStore);
213
+ bgCapture = c.capture;
214
+ bgStopCapture = c.stop;
215
+ }
216
+
217
+ // Stamp tainted ARGS only — not requestCtx. The args stamp guards
218
+ // direct ctx method calls (ctx.set, ctx.header, ctx.onResponse, etc.)
219
+ // which is sufficient for correctness.
220
+ //
221
+ // We intentionally skip stamping requestCtx here because:
222
+ // 1. runBackground starts the async task synchronously (before the
223
+ // first await), so stampCacheExec would pollute the shared
224
+ // requestCtx while the foreground pipeline is still running.
225
+ // This causes assertNotInsideCacheExec to fire when cache-store
226
+ // later calls requestCtx.onResponse().
227
+ // 2. requestCtx methods are closure-bound to the original ctx, so
228
+ // neither Object.create() nor a proxy can isolate the stamp.
229
+ // 3. The foreground miss path already stamps requestCtx and catches
230
+ // cookies()/headers() misuse on first execution. The background
231
+ // re-runs the same function with the same request.
232
+ const bgTaintedArgs: unknown[] = [];
233
+ for (const arg of args) {
234
+ if (isTainted(arg)) {
235
+ stampCacheExec(arg as object);
236
+ bgTaintedArgs.push(arg);
220
237
  }
221
- });
222
- }
238
+ }
239
+
240
+ try {
241
+ const freshResult = await fn.apply(this, args);
242
+ bgStopCapture?.();
243
+ const serialized = await serializeResult(freshResult);
244
+ if (serialized !== null) {
245
+ await store.setItem!(cacheKey, serialized, {
246
+ handles: bgCapture?.data,
247
+ ttl: profile.ttl,
248
+ swr: profile.swr,
249
+ tags: profile.tags,
250
+ });
251
+ }
252
+ } catch (bgError) {
253
+ bgStopCapture?.();
254
+ requestCtx?._reportBackgroundError?.(bgError, "stale-revalidation");
255
+ } finally {
256
+ for (const arg of bgTaintedArgs) {
257
+ unstampCacheExec(arg as object);
258
+ }
259
+ // Restore original handle store
260
+ if (originalHandleStore && requestCtx) {
261
+ requestCtx._handleStore = originalHandleStore;
262
+ }
263
+ }
264
+ });
223
265
  return result;
224
266
  } catch {
225
267
  // Deserialization of stale value failed, fall through
@@ -229,41 +271,44 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
229
271
  // Cache miss: execute, serialize, store
230
272
  const handleStore = hasTaintedArgs ? requestCtx?._handleStore : undefined;
231
273
  let capture: HandleCapture | undefined;
274
+ let stopCapture: (() => void) | undefined;
232
275
  if (handleStore && hasTaintedArgs) {
233
- capture = startHandleCapture(handleStore);
276
+ const c = startHandleCapture(handleStore);
277
+ capture = c.capture;
278
+ stopCapture = c.stop;
234
279
  }
235
280
 
236
281
  // Stamp tainted args so ctx.set(), ctx.header(), etc. throw if called
237
282
  // inside the cached function body (those side effects are lost on hit).
238
- // Also stamp the ALS RequestContext so cookies()/headers() guards fire
239
- // (they read from getRequestContext(), which is a different object from
240
- // the HandlerContext/ResponseHandlerContext passed as args).
283
+ // Uses ref-counted stamp/unstamp so overlapping executions
284
+ // sharing the same ctx don't clear each other's guards.
241
285
  const taintedArgs: unknown[] = [];
242
286
  for (const arg of args) {
243
287
  if (isTainted(arg)) {
244
- (arg as any)[INSIDE_CACHE_EXEC] = true;
288
+ stampCacheExec(arg as object);
245
289
  taintedArgs.push(arg);
246
290
  }
247
291
  }
248
- if (hasTaintedArgs && requestCtx) {
249
- (requestCtx as any)[INSIDE_CACHE_EXEC] = true;
292
+ // Always stamp the ALS RequestContext so cookies()/headers() guards fire
293
+ // even when the cached function receives no tainted args. The guard in
294
+ // cookie-store.ts checks RequestContext, not function args.
295
+ if (requestCtx) {
296
+ stampCacheExec(requestCtx as object);
250
297
  }
251
298
 
252
299
  let result: any;
253
300
  try {
254
301
  result = await fn.apply(this, args);
255
302
  } finally {
256
- // Always remove the flag, even if the function throws
303
+ // Decrement ref count; symbol is deleted when it reaches zero
257
304
  for (const arg of taintedArgs) {
258
- delete (arg as any)[INSIDE_CACHE_EXEC];
305
+ unstampCacheExec(arg as object);
259
306
  }
260
- if (hasTaintedArgs && requestCtx) {
261
- delete (requestCtx as any)[INSIDE_CACHE_EXEC];
307
+ if (requestCtx) {
308
+ unstampCacheExec(requestCtx as object);
262
309
  }
263
- }
264
-
265
- if (capture && handleStore) {
266
- stopHandleCapture(handleStore, capture);
310
+ // Remove this capture token (order-independent, safe for concurrent use)
311
+ stopCapture?.();
267
312
  }
268
313
 
269
314
  // Serialize and store — fully non-blocking when waitUntil is available.
@@ -279,17 +324,12 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
279
324
  tags: profile.tags,
280
325
  });
281
326
  }
282
- } catch {
283
- // Serialization or store write failed silently
327
+ } catch (writeError) {
328
+ requestCtx?._reportBackgroundError?.(writeError, "cache-write");
284
329
  }
285
330
  };
286
331
 
287
- if (requestCtx?.waitUntil) {
288
- requestCtx.waitUntil(cacheWrite);
289
- } else {
290
- // No waitUntil (e.g. Node.js dev server): run inline as best-effort
291
- await cacheWrite();
292
- }
332
+ await runBackground(requestCtx, cacheWrite, true);
293
333
 
294
334
  return result;
295
335
  };