@rangojs/router 0.0.0-experimental.141 → 0.0.0-experimental.142

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 (903) hide show
  1. package/AGENTS.md +6 -10
  2. package/README.md +17 -0
  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.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/theme/ThemeProvider.d.ts +20 -0
  711. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  712. package/dist/theme/ThemeProvider.js +240 -0
  713. package/dist/theme/ThemeProvider.js.map +1 -0
  714. package/dist/theme/ThemeScript.d.ts +48 -0
  715. package/dist/theme/ThemeScript.d.ts.map +1 -0
  716. package/dist/theme/ThemeScript.js +13 -0
  717. package/dist/theme/ThemeScript.js.map +1 -0
  718. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  719. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  720. package/dist/theme/__tests__/theme.test.js +103 -0
  721. package/dist/theme/__tests__/theme.test.js.map +1 -0
  722. package/dist/theme/constants.d.ts +29 -0
  723. package/dist/theme/constants.d.ts.map +1 -0
  724. package/dist/theme/constants.js +48 -0
  725. package/dist/theme/constants.js.map +1 -0
  726. package/dist/theme/index.d.ts +31 -0
  727. package/dist/theme/index.d.ts.map +1 -0
  728. package/dist/theme/index.js +36 -0
  729. package/dist/theme/index.js.map +1 -0
  730. package/dist/theme/theme-context.d.ts +40 -0
  731. package/dist/theme/theme-context.d.ts.map +1 -0
  732. package/dist/theme/theme-context.js +60 -0
  733. package/dist/theme/theme-context.js.map +1 -0
  734. package/dist/theme/theme-script.d.ts +27 -0
  735. package/dist/theme/theme-script.d.ts.map +1 -0
  736. package/dist/theme/theme-script.js +147 -0
  737. package/dist/theme/theme-script.js.map +1 -0
  738. package/dist/theme/types.d.ts +163 -0
  739. package/dist/theme/types.d.ts.map +1 -0
  740. package/dist/theme/types.js +11 -0
  741. package/dist/theme/types.js.map +1 -0
  742. package/dist/theme/use-theme.d.ts +12 -0
  743. package/dist/theme/use-theme.d.ts.map +1 -0
  744. package/dist/theme/use-theme.js +40 -0
  745. package/dist/theme/use-theme.js.map +1 -0
  746. package/dist/types.d.ts +1479 -0
  747. package/dist/types.d.ts.map +1 -0
  748. package/dist/types.js +10 -0
  749. package/dist/types.js.map +1 -0
  750. package/dist/urls.d.ts +441 -0
  751. package/dist/urls.d.ts.map +1 -0
  752. package/dist/urls.gen.d.ts +8 -0
  753. package/dist/urls.gen.d.ts.map +1 -0
  754. package/dist/urls.gen.js +8 -0
  755. package/dist/urls.gen.js.map +1 -0
  756. package/dist/urls.js +443 -0
  757. package/dist/urls.js.map +1 -0
  758. package/dist/use-loader.d.ts +127 -0
  759. package/dist/use-loader.d.ts.map +1 -0
  760. package/dist/use-loader.js +237 -0
  761. package/dist/use-loader.js.map +1 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  778. package/dist/vite/ast-handler-extract.d.ts +49 -0
  779. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  780. package/dist/vite/ast-handler-extract.js +249 -0
  781. package/dist/vite/ast-handler-extract.js.map +1 -0
  782. package/dist/vite/expose-action-id.d.ts +19 -0
  783. package/dist/vite/expose-action-id.d.ts.map +1 -0
  784. package/dist/vite/expose-action-id.js +250 -0
  785. package/dist/vite/expose-action-id.js.map +1 -0
  786. package/dist/vite/expose-id-utils.d.ts +69 -0
  787. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  788. package/dist/vite/expose-id-utils.js +289 -0
  789. package/dist/vite/expose-id-utils.js.map +1 -0
  790. package/dist/vite/expose-internal-ids.d.ts +22 -0
  791. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  792. package/dist/vite/expose-internal-ids.js +886 -0
  793. package/dist/vite/expose-internal-ids.js.map +1 -0
  794. package/dist/vite/index.d.ts +149 -0
  795. package/dist/vite/index.d.ts.map +1 -0
  796. package/dist/vite/index.js +82 -15
  797. package/dist/vite/index.js.bak +5448 -0
  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 +19 -18
  809. package/skills/api-client/SKILL.md +1 -1
  810. package/skills/breadcrumbs/SKILL.md +1 -1
  811. package/skills/cache-guide/SKILL.md +1 -1
  812. package/skills/caching/SKILL.md +17 -1
  813. package/skills/catalog.json +265 -0
  814. package/skills/comparison/references/framework-comparison.md +1 -1
  815. package/skills/composability/SKILL.md +1 -1
  816. package/skills/debug-manifest/SKILL.md +1 -1
  817. package/skills/document-cache/SKILL.md +9 -1
  818. package/skills/fonts/SKILL.md +1 -1
  819. package/skills/handler-use/SKILL.md +1 -1
  820. package/skills/hooks/SKILL.md +54 -892
  821. package/skills/hooks/data.md +273 -0
  822. package/skills/hooks/handle-and-actions.md +103 -0
  823. package/skills/hooks/navigation.md +110 -0
  824. package/skills/hooks/outlets.md +41 -0
  825. package/skills/hooks/state.md +228 -0
  826. package/skills/hooks/urls.md +135 -0
  827. package/skills/host-router/SKILL.md +1 -1
  828. package/skills/i18n/SKILL.md +1 -1
  829. package/skills/intercept/SKILL.md +8 -1
  830. package/skills/layout/SKILL.md +1 -1
  831. package/skills/links/SKILL.md +1 -1
  832. package/skills/loader/SKILL.md +8 -1
  833. package/skills/middleware/SKILL.md +1 -1
  834. package/skills/migrate-nextjs/SKILL.md +133 -1
  835. package/skills/migrate-react-router/SKILL.md +42 -816
  836. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  837. package/skills/migrate-react-router/component-migration.md +196 -0
  838. package/skills/migrate-react-router/data-and-actions.md +225 -0
  839. package/skills/migrate-react-router/route-mapping.md +271 -0
  840. package/skills/mime-routes/SKILL.md +1 -1
  841. package/skills/observability/SKILL.md +1 -1
  842. package/skills/parallel/SKILL.md +8 -1
  843. package/skills/ppr/SKILL.md +261 -28
  844. package/skills/prerender/SKILL.md +8 -1
  845. package/skills/rango/SKILL.md +12 -12
  846. package/skills/response-routes/SKILL.md +1 -1
  847. package/skills/route/SKILL.md +1 -1
  848. package/skills/router-setup/SKILL.md +1 -1
  849. package/skills/scripts/SKILL.md +1 -1
  850. package/skills/server-actions/SKILL.md +3 -2
  851. package/skills/shell-manifest/SKILL.md +1 -1
  852. package/skills/streams-and-websockets/SKILL.md +1 -1
  853. package/skills/tailwind/SKILL.md +1 -1
  854. package/skills/testing/SKILL.md +1 -1
  855. package/skills/theme/SKILL.md +1 -1
  856. package/skills/typesafety/SKILL.md +44 -919
  857. package/skills/typesafety/env-and-bindings.md +254 -0
  858. package/skills/typesafety/generated-files-and-cli.md +305 -0
  859. package/skills/typesafety/params-and-search.md +153 -0
  860. package/skills/typesafety/route-types.md +209 -0
  861. package/skills/use-cache/SKILL.md +7 -1
  862. package/skills/vercel/SKILL.md +1 -1
  863. package/skills/view-transitions/SKILL.md +1 -1
  864. package/src/browser/event-controller.ts +41 -10
  865. package/src/browser/logging.ts +10 -0
  866. package/src/browser/merge-segment-loaders.ts +6 -4
  867. package/src/browser/navigation-client.ts +5 -1
  868. package/src/browser/navigation-store.ts +46 -6
  869. package/src/browser/partial-update.ts +27 -15
  870. package/src/browser/prefetch/cache.ts +26 -4
  871. package/src/browser/prefetch/fetch.ts +27 -17
  872. package/src/browser/react/Link.tsx +13 -3
  873. package/src/browser/react/NavigationProvider.tsx +21 -19
  874. package/src/browser/scroll-restoration.ts +7 -5
  875. package/src/browser/segment-reconciler.ts +31 -21
  876. package/src/browser/types.ts +12 -0
  877. package/src/cache/cache-runtime.ts +203 -23
  878. package/src/cache/document-cache.ts +20 -9
  879. package/src/cache/memory-segment-store.ts +53 -2
  880. package/src/cache/segment-codec.ts +4 -4
  881. package/src/cache/shell-snapshot.ts +50 -1
  882. package/src/cache/types.ts +25 -5
  883. package/src/cache/vercel/vercel-cache-store.ts +131 -107
  884. package/src/router/manifest.ts +13 -5
  885. package/src/router/match-api.ts +70 -30
  886. package/src/router/match-handlers.ts +6 -2
  887. package/src/router/match-result.ts +35 -15
  888. package/src/router/middleware.ts +10 -3
  889. package/src/router/request-classification.ts +20 -7
  890. package/src/router/route-snapshot.ts +10 -0
  891. package/src/router/segment-resolution/fresh.ts +25 -4
  892. package/src/router/segment-resolution/loader-cache.ts +57 -8
  893. package/src/router/segment-resolution/loader-mask.ts +26 -3
  894. package/src/router/segment-resolution/loader-snapshot.ts +170 -0
  895. package/src/rsc/nonce.ts +10 -1
  896. package/src/rsc/rsc-rendering.ts +39 -8
  897. package/src/rsc/shell-capture.ts +196 -13
  898. package/src/rsc/shell-serve.ts +26 -0
  899. package/src/server/cookie-store.ts +6 -0
  900. package/src/server/request-context.ts +33 -0
  901. package/src/ssr/index.tsx +7 -0
  902. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  903. package/src/vite/router-discovery.ts +78 -15
@@ -156,7 +156,7 @@ interface VercelResponseEnvelope {
156
156
  s: number;
157
157
  /** expiresAt (ms since epoch). */
158
158
  e: number;
159
- /** Tags, preserved so a stale re-stamp keeps them. */
159
+ /** Tags, preserved so a background revalidation re-write keeps them. */
160
160
  t?: string[];
161
161
  }
162
162
 
@@ -174,7 +174,7 @@ interface VercelShellEnvelope {
174
174
  s: number;
175
175
  /** expiresAt (ms since epoch). */
176
176
  e: number;
177
- /** Tags, preserved so a stale re-stamp keeps them. */
177
+ /** Tags, preserved so a background revalidation re-write keeps them. */
178
178
  t?: string[];
179
179
  /** initialTheme the capture render was built with (resume theme fidelity). */
180
180
  i?: string;
@@ -226,9 +226,9 @@ export interface VercelCacheStoreOptions<TEnv = unknown> {
226
226
  cache: VercelRuntimeCache;
227
227
 
228
228
  /**
229
- * `waitUntil` from `@vercel/functions`. Used only to run the stale-read
230
- * re-stamp (herd dampening) off the response path - the router already
231
- * backgrounds the actual writes. When omitted, the re-stamp runs detached
229
+ * `waitUntil` from `@vercel/functions`. Used only to run the stale-read lock
230
+ * write (herd dampening) off the response path - the router already
231
+ * backgrounds the actual writes. When omitted, the lock write runs detached
232
232
  * (fire-and-forget) instead.
233
233
  */
234
234
  waitUntil?: (promise: Promise<unknown>) => void;
@@ -393,7 +393,7 @@ export class VercelCacheStore<
393
393
  this.emitDebug({ op: "get", key, outcome: "miss", readMs });
394
394
  return null;
395
395
  }
396
- const env = this.asSegmentEnvelope(raw);
396
+ const env = this.asSegmentEnvelope(this.decodeRaw(raw));
397
397
  if (!env) {
398
398
  reportCacheError(
399
399
  new Error("malformed segment envelope"),
@@ -420,35 +420,19 @@ export class VercelCacheStore<
420
420
  }
421
421
 
422
422
  const isStale = env.s > 0 && now > env.s;
423
- if (isStale) {
424
- this.markRevalidating(
425
- storeKey,
426
- env,
427
- env.d.tags,
428
- "[VercelCacheStore] get",
429
- );
430
- this.emitDebug({
431
- op: "get",
432
- key,
433
- outcome: "stale-revalidate",
434
- shouldRevalidate: true,
435
- staleAt: env.s,
436
- expiresAt: env.e,
437
- readMs,
438
- });
439
- return { data: env.d, shouldRevalidate: true };
440
- }
441
-
423
+ const shouldRevalidate = isStale
424
+ ? await this.claimRevalidation(storeKey, env.e, "[VercelCacheStore] get")
425
+ : false;
442
426
  this.emitDebug({
443
427
  op: "get",
444
428
  key,
445
- outcome: "fresh",
446
- shouldRevalidate: false,
429
+ outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
430
+ shouldRevalidate,
447
431
  staleAt: env.s,
448
432
  expiresAt: env.e,
449
433
  readMs,
450
434
  });
451
- return { data: env.d, shouldRevalidate: false };
435
+ return { data: env.d, shouldRevalidate };
452
436
  }
453
437
 
454
438
  async set(
@@ -462,8 +446,7 @@ export class VercelCacheStore<
462
446
  const { staleAt, expiresAt } = computeExpiration(ttl, swrWindow);
463
447
  // Embed the CLAMPED tags, like putResponse/setItem: the segment family
464
448
  // carries its tags inside `d`, and a raw list would resurface dropped
465
- // tags into recordRequestTags on every hit AND get re-clamped (with a
466
- // spurious cache-write report) by markRevalidating on every stale read.
449
+ // tags into recordRequestTags on every hit.
467
450
  const safeTags = this.clampTagsForWrite(
468
451
  data.tags,
469
452
  "[VercelCacheStore] set",
@@ -517,7 +500,7 @@ export class VercelCacheStore<
517
500
  this.emitDebug({ op: "getResponse", key, outcome: "miss", readMs });
518
501
  return null;
519
502
  }
520
- const env = this.asResponseEnvelope(raw);
503
+ const env = this.asResponseEnvelope(this.decodeRaw(raw));
521
504
  if (!env) {
522
505
  reportCacheError(
523
506
  new Error("malformed response envelope"),
@@ -543,11 +526,11 @@ export class VercelCacheStore<
543
526
  return null;
544
527
  }
545
528
 
546
- // Reconstruct the Response BEFORE marking revalidating. A corrupt body (e.g.
547
- // invalid base64 from base64ToBuffer, or bad header entries) would otherwise
548
- // throw out of getResponse — breaking the fail-open contract — and a stale
549
- // re-stamp would re-persist the bad value. Treat a reconstruction failure as
550
- // a corrupt entry: report, evict, and miss.
529
+ // Reconstruct the Response BEFORE claiming revalidation. A corrupt body
530
+ // (e.g. invalid base64 from base64ToBuffer, or bad header entries) would
531
+ // otherwise throw out of getResponse — breaking the fail-open contract — and
532
+ // a stale read would have written a lock for an entry it then evicts. Treat a
533
+ // reconstruction failure as a corrupt entry: report, evict, and miss.
551
534
  let response: Response;
552
535
  try {
553
536
  response = new Response(base64ToBuffer(env.b), {
@@ -566,24 +549,23 @@ export class VercelCacheStore<
566
549
  }
567
550
 
568
551
  const isStale = env.s > 0 && now > env.s;
569
- if (isStale) {
570
- this.markRevalidating(
571
- storeKey,
572
- env,
573
- env.t,
574
- "[VercelCacheStore] getResponse",
575
- );
576
- }
552
+ const shouldRevalidate = isStale
553
+ ? await this.claimRevalidation(
554
+ storeKey,
555
+ env.e,
556
+ "[VercelCacheStore] getResponse",
557
+ )
558
+ : false;
577
559
  this.emitDebug({
578
560
  op: "getResponse",
579
561
  key,
580
- outcome: isStale ? "stale-revalidate" : "fresh",
581
- shouldRevalidate: isStale,
562
+ outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
563
+ shouldRevalidate,
582
564
  staleAt: env.s,
583
565
  expiresAt: env.e,
584
566
  readMs,
585
567
  });
586
- return { response, shouldRevalidate: isStale };
568
+ return { response, shouldRevalidate };
587
569
  }
588
570
 
589
571
  async putResponse(
@@ -650,7 +632,7 @@ export class VercelCacheStore<
650
632
  this.emitDebug({ op: "getItem", key, outcome: "miss", readMs });
651
633
  return null;
652
634
  }
653
- const env = this.asItemEnvelope(raw);
635
+ const env = this.asItemEnvelope(this.decodeRaw(raw));
654
636
  if (!env) {
655
637
  reportCacheError(
656
638
  new Error("malformed item envelope"),
@@ -677,14 +659,18 @@ export class VercelCacheStore<
677
659
  }
678
660
 
679
661
  const isStale = env.s > 0 && now > env.s;
680
- if (isStale) {
681
- this.markRevalidating(storeKey, env, env.t, "[VercelCacheStore] getItem");
682
- }
662
+ const shouldRevalidate = isStale
663
+ ? await this.claimRevalidation(
664
+ storeKey,
665
+ env.e,
666
+ "[VercelCacheStore] getItem",
667
+ )
668
+ : false;
683
669
  this.emitDebug({
684
670
  op: "getItem",
685
671
  key,
686
- outcome: isStale ? "stale-revalidate" : "fresh",
687
- shouldRevalidate: isStale,
672
+ outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
673
+ shouldRevalidate,
688
674
  staleAt: env.s,
689
675
  expiresAt: env.e,
690
676
  readMs,
@@ -692,7 +678,7 @@ export class VercelCacheStore<
692
678
  return {
693
679
  value: env.v,
694
680
  handles: env.h,
695
- shouldRevalidate: isStale,
681
+ shouldRevalidate,
696
682
  tags: env.t,
697
683
  };
698
684
  }
@@ -752,7 +738,7 @@ export class VercelCacheStore<
752
738
  this.emitDebug({ op: "getShell", key, outcome: "miss", readMs });
753
739
  return null;
754
740
  }
755
- const env = this.asShellEnvelope(raw);
741
+ const env = this.asShellEnvelope(this.decodeRaw(raw));
756
742
  if (!env) {
757
743
  reportCacheError(
758
744
  new Error("malformed shell envelope"),
@@ -779,19 +765,18 @@ export class VercelCacheStore<
779
765
  }
780
766
 
781
767
  const isStale = env.s > 0 && now > env.s;
782
- if (isStale) {
783
- this.markRevalidating(
784
- storeKey,
785
- env,
786
- env.t,
787
- "[VercelCacheStore] getShell",
788
- );
789
- }
768
+ const shouldRevalidate = isStale
769
+ ? await this.claimRevalidation(
770
+ storeKey,
771
+ env.e,
772
+ "[VercelCacheStore] getShell",
773
+ )
774
+ : false;
790
775
  this.emitDebug({
791
776
  op: "getShell",
792
777
  key,
793
- outcome: isStale ? "stale-revalidate" : "fresh",
794
- shouldRevalidate: isStale,
778
+ outcome: shouldRevalidate ? "stale-revalidate" : "fresh",
779
+ shouldRevalidate,
795
780
  staleAt: env.s,
796
781
  expiresAt: env.e,
797
782
  readMs,
@@ -805,7 +790,7 @@ export class VercelCacheStore<
805
790
  snapshot: env.sn,
806
791
  createdAt: env.c,
807
792
  },
808
- shouldRevalidate: isStale,
793
+ shouldRevalidate,
809
794
  };
810
795
  }
811
796
 
@@ -901,68 +886,107 @@ export class VercelCacheStore<
901
886
  tags: string[] | undefined,
902
887
  label: string,
903
888
  ): Promise<void> {
904
- if (!this.withinSizeLimit(value, label)) return;
889
+ // Serialize the envelope exactly ONCE: the same string measures the entry
890
+ // against the size cap AND is what we hand the platform. The Vercel client
891
+ // JSON-serializes whatever value it is given, so passing the raw object here
892
+ // would walk and stringify the (potentially large) envelope a SECOND time.
893
+ // Entries written this way are JSON strings; the read path (decodeRaw)
894
+ // parses them back, and still accepts the legacy object shape written before
895
+ // this change.
896
+ let serialized: string | undefined;
897
+ try {
898
+ serialized = JSON.stringify(value);
899
+ } catch {
900
+ // Unserializable value: fall back to letting the platform serialize it
901
+ // (best-effort — matches the prior "cannot measure -> allow the write").
902
+ serialized = undefined;
903
+ }
904
+ if (serialized !== undefined && !this.withinSizeLimit(serialized, label)) {
905
+ return;
906
+ }
905
907
  const safeTags = this.clampTagsForWrite(tags, label);
906
908
  const options: { ttl: number; tags?: string[]; name?: string } = {
907
909
  ttl: Math.max(1, Math.ceil(totalTtlSeconds)),
908
910
  };
909
911
  if (safeTags.length > 0) options.tags = safeTags;
910
912
  if (this.name) options.name = this.name;
911
- await this.cache.set(storeKey, value, options);
913
+ await this.cache.set(storeKey, serialized ?? value, options);
912
914
  }
913
915
 
914
916
  /**
915
- * Stale-read herd dampening: push staleAt forward by REVALIDATION_LOCK_MS
916
- * (clamped to the hard expiry) and re-write the same envelope under the
917
- * remaining lifetime, so concurrent same-region readers see it as fresh while
918
- * one revalidates. Best-effort and non-blocking; never throws.
917
+ * Normalize a value read back from the cache. Entries written by this store
918
+ * are pre-serialized JSON strings (see write()); legacy entries (written
919
+ * before that change, or by a client that deserializes for us) come back as
920
+ * objects. Parse strings, pass objects through, and treat a non-JSON string
921
+ * as corrupt (returns undefined, so the caller reports + evicts).
922
+ */
923
+ private decodeRaw(raw: unknown): unknown {
924
+ if (typeof raw !== "string") return raw;
925
+ try {
926
+ return JSON.parse(raw);
927
+ } catch {
928
+ return undefined;
929
+ }
930
+ }
931
+
932
+ /**
933
+ * Stale-read herd dampening via a tiny companion lock key. On a stale read,
934
+ * check `{storeKey}:lock`; if absent, claim it (write a short-TTL marker) and
935
+ * return true so THIS reader triggers revalidation. If present, another
936
+ * same-region reader already claimed it, so return false and serve the stale
937
+ * entry as fresh without piling on. Best-effort and non-blocking; never throws.
938
+ *
939
+ * Only the STALE path pays the extra lock read; the fresh-hit path takes no
940
+ * lock round trip. Unlike the prior whole-envelope re-stamp, a stale read now
941
+ * writes only the tiny lock, never the (potentially large) payload.
919
942
  *
920
- * Two races are accepted here because `getCache` offers no compare-and-set: a
921
- * fast background revalidation that lands between this stale read and the
922
- * re-stamp write can be overwritten by the (staler) locked envelope, and an
923
- * `expireTag` that deletes the entry in the same window can be resurrected by
924
- * the re-stamp. Both self-heal within REVALIDATION_LOCK_MS (the re-stamped
925
- * copy is then re-read as stale and revalidated again, or re-deleted). The
926
- * window is narrow and the cost is at most one extra revalidation / one brief
927
- * stale serve; a read-compare would not close it atomically without CAS.
943
+ * Non-atomic (getCache has no compare-and-set): two readers can both find no
944
+ * lock and both revalidate. The window is REVALIDATION_LOCK_MS wide, after
945
+ * which the lock expires and the entry is re-claimed (or a fresh write has
946
+ * superseded it). A read-compare would not close the race without CAS.
928
947
  */
929
- private markRevalidating<E extends { s: number; e: number }>(
948
+ private async claimRevalidation(
930
949
  storeKey: string,
931
- env: E,
932
- tags: string[] | undefined,
950
+ expiresAt: number,
933
951
  label: string,
934
- ): void {
935
- const now = Date.now();
936
- const remainingSeconds = Math.ceil((env.e - now) / 1000);
937
- if (remainingSeconds <= 0) return;
938
- const locked: E = {
939
- ...env,
940
- s: Math.min(now + REVALIDATION_LOCK_MS, env.e),
941
- };
952
+ ): Promise<boolean> {
953
+ const lockKey = `${storeKey}:lock`;
954
+ let lock: unknown;
955
+ try {
956
+ lock = await this.cache.get(lockKey);
957
+ } catch {
958
+ // A lock-read failure must not break the read path: treat as unlocked.
959
+ lock = null;
960
+ }
961
+ if (lock != null) return false;
962
+
963
+ const remainingSeconds = Math.ceil((expiresAt - Date.now()) / 1000);
964
+ const lockTtl = Math.max(
965
+ 1,
966
+ Math.min(Math.ceil(REVALIDATION_LOCK_MS / 1000), remainingSeconds),
967
+ );
942
968
  const task = (): Promise<void> =>
943
- this.write(storeKey, locked, remainingSeconds, tags, label);
969
+ this.cache.set(lockKey, 1, { ttl: lockTtl });
944
970
  if (this.waitUntil) {
945
971
  this.waitUntil(reportingAsync(task, "cache-write", label));
946
972
  } else {
947
973
  void reportingAsync(task, "cache-write", label);
948
974
  }
975
+ return true;
949
976
  }
950
977
 
951
- private withinSizeLimit(value: unknown, label: string): boolean {
952
- try {
953
- const bytes = new TextEncoder().encode(JSON.stringify(value)).length;
954
- if (bytes >= this.maxItemBytes) {
955
- reportCacheError(
956
- new Error(
957
- `entry is ${bytes}B, at/above the ${this.maxItemBytes}B cap; not cached`,
958
- ),
959
- "cache-write",
960
- label,
961
- );
962
- return false;
963
- }
964
- } catch {
965
- // If the value cannot be measured, allow the write (best-effort).
978
+ /** Measure a pre-serialized entry against the per-item size cap (see write). */
979
+ private withinSizeLimit(serialized: string, label: string): boolean {
980
+ const bytes = new TextEncoder().encode(serialized).length;
981
+ if (bytes >= this.maxItemBytes) {
982
+ reportCacheError(
983
+ new Error(
984
+ `entry is ${bytes}B, at/above the ${this.maxItemBytes}B cap; not cached`,
985
+ ),
986
+ "cache-write",
987
+ label,
988
+ );
989
+ return false;
966
990
  }
967
991
  return true;
968
992
  }
@@ -82,10 +82,14 @@ export async function loadManifest(
82
82
  Store.mountIndex = mountIndex;
83
83
  Store.isSSR = isSSR;
84
84
  if (metricsStore) Store.metrics = metricsStore;
85
- // Restore cached manifest into Store
86
- for (const [k, v] of cached) {
87
- Store.manifest.set(k, v);
88
- }
85
+ // Alias the request-scoped Store to the cached Map instead of copying it
86
+ // entry-by-entry. At request time this Store is throwaway (no ambient
87
+ // RangoContext store spans classify->match->render, so getOrCreateStore
88
+ // returns a fresh detached store here), so nothing mutates it in place after
89
+ // loadManifest returns. The fresh path below REASSIGNS Store.manifest rather
90
+ // than clearing it in place, so a later fresh load sharing this Store cannot
91
+ // poison the cached Map.
92
+ Store.manifest = cached;
89
93
  pushMetric?.("manifest:cache-hit", cacheStart);
90
94
  return cached.get(routeKey)!;
91
95
  }
@@ -103,7 +107,11 @@ export async function loadManifest(
103
107
  pushMetric?.("manifest:store-setup", storeSetupStart);
104
108
 
105
109
  const clearStart = performance.now();
106
- Store.manifest.clear();
110
+ // Reassign rather than clear() in place: a prior cache-hit may have aliased
111
+ // Store.manifest to a shared module-cache Map (see cache-hit branch above),
112
+ // and clearing it in place would poison that cache. A fresh Map isolates this
113
+ // build; the cache still receives an independent copy at the end.
114
+ Store.manifest = new Map();
107
115
  pushMetric?.("manifest:clear", clearStart);
108
116
 
109
117
  try {
@@ -26,6 +26,7 @@ import type { MatchContext } from "./match-context.js";
26
26
  import type { MatchApiDeps, ActionContext } from "./types.js";
27
27
  import {
28
28
  getRequestContext,
29
+ _getRequestContext,
29
30
  setRequestContextPrevRouteKey,
30
31
  } from "../server/request-context.js";
31
32
  import { isAutoGeneratedRouteName } from "../route-name.js";
@@ -47,31 +48,67 @@ export async function createMatchContextForFull<TEnv>(
47
48
  deps: MatchApiDeps<TEnv>,
48
49
  findInterceptForRoute: MatchApiDeps<TEnv>["findInterceptForRoute"],
49
50
  ): Promise<MatchContext<TEnv> | { type: "redirect"; redirectUrl: string }> {
50
- const url = new URL(request.url);
51
- const pathname = url.pathname;
51
+ const reqCtx = _getRequestContext();
52
+ const cleanUrl = reqCtx?.url ?? stripInternalParams(new URL(request.url));
53
+ const pathname = cleanUrl.pathname;
52
54
 
53
55
  const metricsStore = deps.getMetricsStore();
54
56
 
55
- const result = await resolveRoute<TEnv>(pathname, {
56
- findMatch: (p) => deps.findMatch(p, metricsStore),
57
- metricsStore,
58
- isSSR: true,
59
- });
57
+ const isHmr = !!request.headers.get("X-RSC-HMR");
58
+ // HMR: clear the manifest cache so stale handler references are discarded.
59
+ if (isHmr) {
60
+ clearManifestCache();
61
+ }
62
+
63
+ // Reuse the snapshot classifyRequest already resolved when it is a full-render
64
+ // snapshot (isSSR:true) and HMR has not invalidated it — mirrors the partial
65
+ // path. A partial-mode snapshot (isSSR:false) carries the wrong loading()
66
+ // entries and lives in a different manifest partition, so it is NOT reusable.
67
+ const classified = reqCtx?._classifiedRoute;
68
+ const classifiedRoute =
69
+ !isHmr && classified?.isSSR === true ? classified : undefined;
70
+
71
+ // On the reuse path, findMatch + manifest-loading already ran during
72
+ // classifyRequest (which carries no metricsStore), so only the cheap
73
+ // entries/cacheScope materialization is timed here under a distinct label. On
74
+ // the fresh path, resolveRoute emits route-matching + manifest-loading as usual.
75
+ const routeMatchStart = metricsStore ? performance.now() : 0;
60
76
 
61
- if (!result) {
62
- throw new RouteNotFoundError(`No route matched for ${pathname}`, {
63
- cause: { pathname, method: request.method },
77
+ let snapshot: RouteSnapshot<TEnv>;
78
+ if (classifiedRoute && classifiedRoute.manifestEntry) {
79
+ snapshot = ensureFullRouteSnapshot(classifiedRoute);
80
+ if (metricsStore) {
81
+ metricsStore.metrics.push({
82
+ label: "route-matching:reuse",
83
+ duration: performance.now() - routeMatchStart,
84
+ startTime: routeMatchStart - metricsStore.requestStart,
85
+ });
86
+ }
87
+ } else {
88
+ const result = await resolveRoute<TEnv>(pathname, {
89
+ findMatch: (p) => deps.findMatch(p, metricsStore),
90
+ metricsStore,
91
+ isSSR: true,
64
92
  });
65
- }
66
93
 
67
- if (result.type === "redirect") {
68
- return {
69
- type: "redirect",
70
- redirectUrl: result.redirectTo + url.search,
71
- };
72
- }
94
+ if (!result) {
95
+ throw new RouteNotFoundError(`No route matched for ${pathname}`, {
96
+ cause: { pathname, method: request.method },
97
+ });
98
+ }
73
99
 
74
- const snapshot = result.snapshot;
100
+ if (result.type === "redirect") {
101
+ // Preserve the raw query string (including internal _rsc* params) on the
102
+ // redirect target, matching the pre-reuse behavior of `url.search`.
103
+ const rawSearch = (reqCtx?.originalUrl ?? new URL(request.url)).search;
104
+ return {
105
+ type: "redirect",
106
+ redirectUrl: result.redirectTo + rawSearch,
107
+ };
108
+ }
109
+
110
+ snapshot = result.snapshot;
111
+ }
75
112
 
76
113
  const { matched } = snapshot;
77
114
 
@@ -79,8 +116,6 @@ export async function createMatchContextForFull<TEnv>(
79
116
  matched.pt = true;
80
117
  }
81
118
 
82
- const cleanUrl = stripInternalParams(url);
83
-
84
119
  const handlerContext = createHandlerContext(
85
120
  matched.params,
86
121
  request,
@@ -164,8 +199,13 @@ export async function createMatchContextForPartial<TEnv>(
164
199
  findInterceptForRoute: MatchApiDeps<TEnv>["findInterceptForRoute"],
165
200
  actionContext?: ActionContext,
166
201
  ): Promise<MatchContext<TEnv> | null> {
167
- const url = new URL(request.url);
168
- const pathname = url.pathname;
202
+ const reqCtx = _getRequestContext();
203
+ // resolveNavigation needs the raw URL (reads internal _rsc_segments /
204
+ // _rsc_stale params that stripInternalParams removes); the clean URL feeds the
205
+ // handler context. Both come off the request context when present.
206
+ const rawUrl = reqCtx?.originalUrl ?? new URL(request.url);
207
+ const cleanUrl = reqCtx?.url ?? stripInternalParams(rawUrl);
208
+ const pathname = cleanUrl.pathname;
169
209
 
170
210
  const metricsStore = deps.getMetricsStore();
171
211
 
@@ -177,11 +217,13 @@ export async function createMatchContextForPartial<TEnv>(
177
217
  }
178
218
 
179
219
  // Reuse the classified snapshot when available and not invalidated by HMR.
180
- // classifyRequest already called resolveRoute(lite) with isSSR=false, which
181
- // matches the partial path. On HMR, discard to pick up manifest changes.
182
- const classifiedRoute = isHmr
183
- ? undefined
184
- : getRequestContext()?._classifiedRoute;
220
+ // classifyRequest resolves a partial request with isSSR=false, matching this
221
+ // path. Never reuse an isSSR:true (full-render) snapshot — its loading()
222
+ // entries and manifest partition are wrong here. On HMR, discard to pick up
223
+ // manifest changes.
224
+ const classified = reqCtx?._classifiedRoute;
225
+ const classifiedRoute =
226
+ !isHmr && classified?.isSSR !== true ? classified : undefined;
185
227
 
186
228
  // Time route matching. On the reuse path, only nav findMatch calls are new
187
229
  // (current-route findMatch and manifest-loading were already timed during
@@ -220,7 +262,7 @@ export async function createMatchContextForPartial<TEnv>(
220
262
  matched.pt = true;
221
263
  }
222
264
 
223
- const nav = await resolveNavigation(request, url, matched.routeKey, {
265
+ const nav = await resolveNavigation(request, rawUrl, matched.routeKey, {
224
266
  findMatch: deps.findMatch,
225
267
  });
226
268
  if (!nav) {
@@ -243,8 +285,6 @@ export async function createMatchContextForPartial<TEnv>(
243
285
  });
244
286
  }
245
287
 
246
- const cleanUrl = stripInternalParams(url);
247
-
248
288
  const handlerContext = createHandlerContext(
249
289
  matched.params,
250
290
  request,
@@ -162,7 +162,9 @@ export function createMatchHandlers<TEnv = any>(
162
162
  return runWithRouterContext(routerCtx, async () =>
163
163
  withRouterLogScope("match", async () => {
164
164
  const matchStart = performance.now();
165
- const pathname = new URL(request.url).pathname;
165
+ const pathname =
166
+ _getRequestContext()?.url?.pathname ??
167
+ new URL(request.url).pathname;
166
168
  if (hasTelemetry) {
167
169
  safeEmit(telemetry, {
168
170
  type: "request.start",
@@ -303,7 +305,9 @@ export function createMatchHandlers<TEnv = any>(
303
305
  return runWithRouterContext(routerCtx, async () =>
304
306
  withRouterLogScope("matchPartial", async () => {
305
307
  const matchStart = performance.now();
306
- const pathname = new URL(request.url).pathname;
308
+ const pathname =
309
+ _getRequestContext()?.url?.pathname ??
310
+ new URL(request.url).pathname;
307
311
  if (hasTelemetry) {
308
312
  safeEmit(telemetry, {
309
313
  type: "request.start",