@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
@@ -127,6 +127,86 @@ export async function replyToCacheKey(
127
127
  // the test-ergonomics warning fires once per fn rather than once per call.
128
128
  const warnedUncachedUnderTest = new Set<string>();
129
129
 
130
+ /**
131
+ * Fast-path cache-key builder for JSON-safe key args. Returns a deterministic
132
+ * string (object keys recursively sorted so insertion order can't change the
133
+ * key) when EVERY part is a primitive or a plain object/array of the same, and
134
+ * `undefined` otherwise so the caller falls back to the Flight reply encoder.
135
+ *
136
+ * Strings are always quoted via JSON.stringify, so they can never collide with
137
+ * the bareword encodings of null/true/false/undefined/numbers. Anything the
138
+ * reply encoder must handle instead — functions, symbols, bigint, non-finite
139
+ * numbers, Dates, Maps, class instances, promises, and React elements (whose
140
+ * `$$typeof` symbol value trips the symbol reject) — yields `undefined`.
141
+ */
142
+ function jsonSafeKeyPart(value: unknown): string | undefined {
143
+ if (value === null) return "null";
144
+ switch (typeof value) {
145
+ case "string":
146
+ return JSON.stringify(value);
147
+ case "boolean":
148
+ return value ? "true" : "false";
149
+ case "number":
150
+ return Number.isFinite(value) ? String(value) : undefined;
151
+ case "undefined":
152
+ return "undefined";
153
+ case "object": {
154
+ if (Array.isArray(value)) {
155
+ const parts: string[] = [];
156
+ for (const item of value) {
157
+ const encoded = jsonSafeKeyPart(item);
158
+ if (encoded === undefined) return undefined;
159
+ parts.push(encoded);
160
+ }
161
+ return `[${parts.join(",")}]`;
162
+ }
163
+ // Only plain objects (Object.prototype or null proto) are fast-path safe.
164
+ // Dates, Maps, class instances, promises, etc. carry a different prototype
165
+ // and fall back to the encoder.
166
+ const proto = Object.getPrototypeOf(value);
167
+ if (proto !== Object.prototype && proto !== null) return undefined;
168
+ const obj = value as Record<string, unknown>;
169
+ const parts: string[] = [];
170
+ for (const key of Object.keys(obj).sort()) {
171
+ const encoded = jsonSafeKeyPart(obj[key]);
172
+ if (encoded === undefined) return undefined;
173
+ parts.push(`${JSON.stringify(key)}:${encoded}`);
174
+ }
175
+ return `{${parts.join(",")}}`;
176
+ }
177
+ default:
178
+ // bigint, symbol, function
179
+ return undefined;
180
+ }
181
+ }
182
+
183
+ /**
184
+ * The serialized product of one "use cache" execution: exactly what the store
185
+ * write persists. Followers that dedup onto an in-flight execution (see
186
+ * inFlightExecutions) await this and serve it as a synthetic cache hit — each
187
+ * deserializing its OWN copy of `serialized` and replaying `handles`/`tags`
188
+ * against its OWN request. A deserialized result object is never shared.
189
+ */
190
+ interface CacheEnvelope {
191
+ /** RSC-serialized return value (never null — a null serialize rejects). */
192
+ serialized: string;
193
+ /** Merged profile/DSL + runtime cacheTag() tags. */
194
+ tags: string[];
195
+ /** RSC-encoded handle blob captured during execution, if any. */
196
+ handles?: string;
197
+ }
198
+
199
+ /**
200
+ * In-flight "use cache" executions keyed by cache key. When N concurrent calls
201
+ * miss on the same key, only the first (the leader) runs the function; the rest
202
+ * await its {@link CacheEnvelope} and serve it as a synthetic hit rather than
203
+ * re-running the function and re-writing the store. Isolate-scoped (module
204
+ * singleton), and cleared for a key as soon as the leader settles: a rejected
205
+ * leader (function threw, or the result was not serializable) propagates to
206
+ * current waiters, which then retry fresh.
207
+ */
208
+ const inFlightExecutions = new Map<string, Promise<CacheEnvelope>>();
209
+
130
210
  // ============================================================================
131
211
  // Core: registerCachedFunction
132
212
  // ============================================================================
@@ -253,12 +333,23 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
253
333
  let cacheKey: string;
254
334
  try {
255
335
  if (keyArgs.length > 0) {
256
- const tempRefs = createClientTemporaryReferenceSet();
257
- const encoded = await encodeReply(keyArgs as unknown[], {
258
- temporaryReferences: tempRefs,
259
- });
260
- const argsKey = await replyToCacheKey(encoded);
261
- cacheKey = `use-cache:${id}:${argsKey}`;
336
+ // Fast path: when every key arg is JSON-safe, build the key with a
337
+ // deterministic stable-stringify and skip encodeReply (the Flight reply
338
+ // encoder runs on EVERY call, including hits). The `:j:` namespace keeps
339
+ // these keys disjoint from the encoder path so the two can never collide
340
+ // for one fn id. Entries cached under the old encoder key for JSON-safe
341
+ // args cold-start once after this upgrade.
342
+ const fastKey = jsonSafeKeyPart(keyArgs);
343
+ if (fastKey !== undefined) {
344
+ cacheKey = `use-cache:${id}:j:${fastKey}`;
345
+ } else {
346
+ const tempRefs = createClientTemporaryReferenceSet();
347
+ const encoded = await encodeReply(keyArgs as unknown[], {
348
+ temporaryReferences: tempRefs,
349
+ });
350
+ const argsKey = await replyToCacheKey(encoded);
351
+ cacheKey = `use-cache:${id}:${argsKey}`;
352
+ }
262
353
  } else {
263
354
  cacheKey = `use-cache:${id}`;
264
355
  }
@@ -438,7 +529,65 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
438
529
  }
439
530
  }
440
531
 
441
- // Cache miss: execute, serialize, store
532
+ // Cache miss.
533
+ //
534
+ // In-flight dedup: if a concurrent call for this key is already executing,
535
+ // await its envelope and serve it as a synthetic hit rather than re-running
536
+ // the function. Each follower deserializes its OWN copy, replays handles
537
+ // against its OWN handle store (gated on ITS hasTaintedArgs), and records
538
+ // tags into its OWN request — no deserialized result is shared across
539
+ // requests. The store write stays exactly once (the leader's).
540
+ const existing = inFlightExecutions.get(cacheKey);
541
+ if (existing) {
542
+ let envelope: CacheEnvelope | undefined;
543
+ try {
544
+ envelope = await existing;
545
+ } catch {
546
+ // Leader rejected (function threw or its result was not serializable);
547
+ // its map entry is already cleared, so fall through to a fresh run.
548
+ envelope = undefined;
549
+ }
550
+ if (envelope) {
551
+ try {
552
+ return await serveCached({
553
+ value: envelope.serialized,
554
+ handles: envelope.handles,
555
+ tags: envelope.tags,
556
+ shouldRevalidate: false,
557
+ });
558
+ } catch (error) {
559
+ reportCacheError(
560
+ error,
561
+ "cache-corrupt",
562
+ `[use cache] "${id}" inflight-hit`,
563
+ );
564
+ // Fall through to a fresh execution below.
565
+ }
566
+ }
567
+ }
568
+
569
+ // This call becomes the leader. Register a deferred envelope so concurrent
570
+ // callers dedup onto it; it is resolved/rejected exactly once below (or on a
571
+ // function throw). clearSelf only deletes the map slot if it still holds
572
+ // THIS promise, so a fall-through retry (rare rejected-leader path) can't
573
+ // evict a newer leader's entry.
574
+ let resolveEnvelope!: (env: CacheEnvelope) => void;
575
+ let rejectEnvelope!: (err: unknown) => void;
576
+ const envelopePromise = new Promise<CacheEnvelope>((res, rej) => {
577
+ resolveEnvelope = res;
578
+ rejectEnvelope = rej;
579
+ });
580
+ // Followers attach their own catch; guard the map's own reference so a
581
+ // rejected envelope with no waiter is not an unhandled rejection.
582
+ envelopePromise.catch(() => {});
583
+ inFlightExecutions.set(cacheKey, envelopePromise);
584
+ const clearSelf = (): void => {
585
+ if (inFlightExecutions.get(cacheKey) === envelopePromise) {
586
+ inFlightExecutions.delete(cacheKey);
587
+ }
588
+ };
589
+
590
+ // execute, serialize, store
442
591
  const handleStore = hasTaintedArgs ? requestCtx?._handleStore : undefined;
443
592
  let capture: HandleCapture | undefined;
444
593
  let stopCapture: (() => void) | undefined;
@@ -471,6 +620,12 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
471
620
  try {
472
621
  scoped = runWithCacheTagScope(() => fn.apply(this, args));
473
622
  result = await scoped.result;
623
+ } catch (execError) {
624
+ // The function threw: drop the in-flight entry and reject any waiters so
625
+ // they retry fresh, then propagate to this caller.
626
+ clearSelf();
627
+ rejectEnvelope(execError);
628
+ throw execError;
474
629
  } finally {
475
630
  // Decrement ref count; symbol is deleted when it reaches zero
476
631
  for (const arg of taintedArgs) {
@@ -491,28 +646,53 @@ export function registerCachedFunction<T extends (...args: any[]) => any>(
491
646
  ];
492
647
  recordRequestTags(allTags, requestCtx);
493
648
 
494
- // Serialize and store — fully non-blocking when waitUntil is available.
495
- // The response does not need to wait for serialization or the store write.
496
- const cacheWrite = async () => {
649
+ // Serialize + encode handles ONCE, resolve the in-flight envelope so any
650
+ // concurrent followers can serve a synthetic hit, then persist to the store.
651
+ // Fully non-blocking when waitUntil is available — the leader's response
652
+ // waits on neither serialization nor the store write.
653
+ const finalizeAndWrite = async (): Promise<void> => {
654
+ let serialized: string | null;
655
+ let encodedHandles: string | undefined;
497
656
  try {
498
- const serialized = await serializeResult(result);
499
- if (serialized !== null) {
500
- const encodedHandles = capture?.data
501
- ? await encodeHandles(capture.data)
502
- : undefined;
503
- await store.setItem!(cacheKey, serialized, {
504
- handles: encodedHandles,
505
- ttl: profile.ttl,
506
- swr: profile.swr,
507
- tags: allTags.length > 0 ? allTags : undefined,
508
- });
509
- }
657
+ serialized = await serializeResult(result);
658
+ encodedHandles = capture?.data
659
+ ? await encodeHandles(capture.data)
660
+ : undefined;
661
+ } catch (buildError) {
662
+ // Serialize/handle-encode failed: no envelope for followers (they run
663
+ // fresh) and nothing to write.
664
+ clearSelf();
665
+ rejectEnvelope(buildError);
666
+ requestCtx?._reportBackgroundError?.(buildError, "cache-write");
667
+ return;
668
+ }
669
+ clearSelf();
670
+ if (serialized === null) {
671
+ // Non-serializable result: no store write (matches the prior silent
672
+ // skip); reject so any waiter falls through to a fresh execution.
673
+ rejectEnvelope(
674
+ new Error(
675
+ `[use cache] "${id}" result is not serializable; not cached`,
676
+ ),
677
+ );
678
+ return;
679
+ }
680
+ // Hand followers the envelope before the store write so a slow/failed
681
+ // write never stalls them.
682
+ resolveEnvelope({ serialized, tags: allTags, handles: encodedHandles });
683
+ try {
684
+ await store.setItem!(cacheKey, serialized, {
685
+ handles: encodedHandles,
686
+ ttl: profile.ttl,
687
+ swr: profile.swr,
688
+ tags: allTags.length > 0 ? allTags : undefined,
689
+ });
510
690
  } catch (writeError) {
511
691
  requestCtx?._reportBackgroundError?.(writeError, "cache-write");
512
692
  }
513
693
  };
514
694
 
515
- await runBackground(requestCtx, cacheWrite, true);
695
+ await runBackground(requestCtx, finalizeAndWrite, true);
516
696
 
517
697
  return result;
518
698
  };
@@ -127,20 +127,31 @@ function shouldCacheResponse(response: Response): CacheDirectives | null {
127
127
  // ============================================================================
128
128
 
129
129
  /**
130
- * Add cache status header to response for debugging
130
+ * Add the cache-status header (HIT/STALE/MISS) to a response.
131
+ *
132
+ * The response we get here is always a fresh instance — the store rebuilds a
133
+ * new Response per getResponse(), and the miss path wraps a fresh Response
134
+ * around the tee'd body — so mutating its headers in place is safe and avoids
135
+ * cloning every header + allocating a new Response on every cache hit. Only when
136
+ * the headers are immutable (a guarded Response rejects set() with a TypeError)
137
+ * do we fall back to rebuilding the Response with a mutable Headers.
131
138
  */
132
139
  function addCacheStatusHeader(
133
140
  response: Response,
134
141
  status: "HIT" | "STALE" | "MISS",
135
142
  ): Response {
136
- const headers = new Headers(response.headers);
137
- headers.set(CACHE_STATUS_HEADER, status);
138
-
139
- return new Response(response.body, {
140
- status: response.status,
141
- statusText: response.statusText,
142
- headers,
143
- });
143
+ try {
144
+ response.headers.set(CACHE_STATUS_HEADER, status);
145
+ return response;
146
+ } catch {
147
+ const headers = new Headers(response.headers);
148
+ headers.set(CACHE_STATUS_HEADER, status);
149
+ return new Response(response.body, {
150
+ status: response.status,
151
+ statusText: response.statusText,
152
+ headers,
153
+ });
154
+ }
144
155
  }
145
156
 
146
157
  /**
@@ -130,8 +130,25 @@ export interface MemorySegmentCacheStoreOptions<TEnv = unknown> {
130
130
  ctx: RequestContext<TEnv>,
131
131
  defaultKey: string,
132
132
  ) => string | Promise<string>;
133
+
134
+ /**
135
+ * Maximum number of entries kept per internal family (segment, response,
136
+ * item, shell). On insert, once a family reaches the cap its oldest entry is
137
+ * evicted FIFO (insertion order) and its tag-index entries are cleaned up, so
138
+ * a long-lived instance can't grow without bound. Lazy TTL expiry still runs
139
+ * independently. Defaults to DEFAULT_MAX_ENTRIES (1000).
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * const store = new MemorySegmentCacheStore({ maxEntries: 500 });
144
+ * ```
145
+ */
146
+ maxEntries?: number;
133
147
  }
134
148
 
149
+ /** Default per-family entry cap for MemorySegmentCacheStore (FIFO eviction). */
150
+ const DEFAULT_MAX_ENTRIES = 1000;
151
+
135
152
  /**
136
153
  * In-memory segment cache store.
137
154
  *
@@ -139,10 +156,16 @@ export interface MemorySegmentCacheStoreOptions<TEnv = unknown> {
139
156
  * For production with multiple instances, use a distributed store
140
157
  * like Cloudflare KV or Redis.
141
158
  *
159
+ * Each family is size-capped at `maxEntries` (default 1000) with FIFO eviction
160
+ * on insert, so a long-lived instance can't grow unbounded; TTL expiry stays
161
+ * lazy on top of that.
162
+ *
142
163
  * Tag-index cleanup is lazy, mirroring the data maps: a tagged entry that
143
164
  * expires but is never re-read or invalidated leaves its forward+reverse index
144
- * entries resident until the key is reused or invalidated. This is bounded by
145
- * the distinct-tag count and acceptable for a dev/single-instance store.
165
+ * entries resident until the key is reused, invalidated, or FIFO-evicted. This
166
+ * is bounded by the distinct-tag count and acceptable for a dev/single-instance
167
+ * store. FIFO eviction unregisters the evicted key's tags, so the tag maps do
168
+ * not outlive the capped data maps.
146
169
  *
147
170
  * @example
148
171
  * ```typescript
@@ -176,6 +199,8 @@ export class MemorySegmentCacheStore<
176
199
  ctx: RequestContext<TEnv>,
177
200
  defaultKey: string,
178
201
  ) => string | Promise<string>;
202
+ /** Per-family FIFO entry cap. */
203
+ readonly maxEntries: number;
179
204
 
180
205
  constructor(options?: MemorySegmentCacheStoreOptions<TEnv>) {
181
206
  if (options?.name != null) {
@@ -213,6 +238,28 @@ export class MemorySegmentCacheStore<
213
238
  }
214
239
  this.defaults = options?.defaults;
215
240
  this.keyGenerator = options?.keyGenerator;
241
+ this.maxEntries = options?.maxEntries ?? DEFAULT_MAX_ENTRIES;
242
+ }
243
+
244
+ /**
245
+ * FIFO cap enforcement, called before inserting `incomingKey` into `map`.
246
+ * When the key is new and the family is at capacity, the oldest entries are
247
+ * evicted in insertion order and their tag-index entries unregistered (so the
248
+ * tag maps don't outlive the capped data map). Overwriting an existing key
249
+ * grows nothing, so it is a no-op.
250
+ */
251
+ private evictIfNeeded<V>(
252
+ map: Map<string, V>,
253
+ incomingKey: string,
254
+ prefix: string,
255
+ ): void {
256
+ if (map.has(incomingKey)) return;
257
+ while (map.size >= this.maxEntries) {
258
+ const oldest = map.keys().next().value;
259
+ if (oldest === undefined) break;
260
+ map.delete(oldest);
261
+ this.unregisterTags(`${prefix}:${oldest}`);
262
+ }
216
263
  }
217
264
 
218
265
  async get(key: string): Promise<CacheGetResult | null> {
@@ -245,6 +292,7 @@ export class MemorySegmentCacheStore<
245
292
  };
246
293
  const prefixedKey = `seg:${key}`;
247
294
  this.unregisterTags(prefixedKey);
295
+ this.evictIfNeeded(this.cache, key, "seg");
248
296
  this.cache.set(key, entry);
249
297
  if (data.tags && data.tags.length > 0) {
250
298
  this.registerTags(data.tags, prefixedKey);
@@ -308,6 +356,7 @@ export class MemorySegmentCacheStore<
308
356
 
309
357
  const prefixedKey = `res:${key}`;
310
358
  this.unregisterTags(prefixedKey);
359
+ this.evictIfNeeded(this.responseCache, key, "res");
311
360
  this.responseCache.set(key, {
312
361
  body,
313
362
  status: response.status,
@@ -357,6 +406,7 @@ export class MemorySegmentCacheStore<
357
406
  const { staleAt, expiresAt } = computeExpiration(ttl, swrWindow);
358
407
  const prefixedKey = `item:${key}`;
359
408
  this.unregisterTags(prefixedKey);
409
+ this.evictIfNeeded(this.itemCache, key, "item");
360
410
  this.itemCache.set(key, {
361
411
  value,
362
412
  handles: options?.handles,
@@ -400,6 +450,7 @@ export class MemorySegmentCacheStore<
400
450
  const { staleAt, expiresAt } = computeExpiration(ttl, swrWindow);
401
451
  const prefixedKey = `shell:${key}`;
402
452
  this.unregisterTags(prefixedKey);
453
+ this.evictIfNeeded(this.shellCache, key, "shell");
403
454
  this.shellCache.set(key, { entry, expiresAt, staleAt, tags });
404
455
  if (tags && tags.length > 0) {
405
456
  this.registerTags(tags, prefixedKey);
@@ -25,16 +25,16 @@ export async function streamToString(
25
25
  ): Promise<string> {
26
26
  const reader = stream.getReader();
27
27
  const decoder = new TextDecoder();
28
- let result = "";
28
+ const chunks: string[] = [];
29
29
 
30
30
  while (true) {
31
31
  const { done, value } = await reader.read();
32
32
  if (done) break;
33
- result += decoder.decode(value, { stream: true });
33
+ chunks.push(decoder.decode(value, { stream: true }));
34
34
  }
35
35
 
36
- result += decoder.decode(); // flush
37
- return result;
36
+ chunks.push(decoder.decode()); // flush
37
+ return chunks.join("");
38
38
  }
39
39
 
40
40
  /**
@@ -33,6 +33,7 @@ import type {
33
33
  ShellSnapshotRecord,
34
34
  ShellSnapshotItemValue,
35
35
  ShellSnapshotResponseValue,
36
+ ShellSnapshotLoaderValue,
36
37
  } from "./types.js";
37
38
  import { bufferToBase64, base64ToBuffer } from "./cf/cf-base64.js";
38
39
  import { isPerClientSignalHeader } from "../browser/cookie-name.js";
@@ -244,6 +245,51 @@ export function getRecordingStore<TEnv>(
244
245
  return store instanceof RecordingShellStore ? store : undefined;
245
246
  }
246
247
 
248
+ /**
249
+ * Materialize the loader-family seed from a shell snapshot for a HIT's tail
250
+ * render: Flight-deserialize each recorded (promise-elided) bake-lane
251
+ * container into a segment-key -> container Map, which serveShellHit assigns
252
+ * to the tail context's `_shellLoaderSeed` for the resolveLoaderData overlay.
253
+ * Lives here so every snapshot family is decoded in this module (the
254
+ * item/segment/response families via {@link SeededShellStore}); the loader
255
+ * family is not a store read, so it seeds the context instead of a store.
256
+ *
257
+ * Deserializations run in parallel; a record that fails to decode is skipped
258
+ * (that loader drifts — the pre-snapshot behavior — instead of failing the
259
+ * HIT). Returns undefined when the snapshot carries no loader records, without
260
+ * touching the Flight codec (kept lazy for cold paths and non-RSC configs).
261
+ */
262
+ export async function buildShellLoaderSeed(
263
+ snapshot: ShellSnapshotRecord[],
264
+ ): Promise<Map<string, unknown> | undefined> {
265
+ const loaderRecords: ShellSnapshotRecord[] = [];
266
+ for (const rec of snapshot) {
267
+ if (rec.family === "loader") loaderRecords.push(rec);
268
+ }
269
+ if (loaderRecords.length === 0) return undefined;
270
+
271
+ const { deserializeResult } = await import("./segment-codec.js");
272
+ const entries = await Promise.all(
273
+ loaderRecords.map(async (rec): Promise<[string, unknown] | null> => {
274
+ try {
275
+ return [
276
+ rec.key,
277
+ await deserializeResult(
278
+ (rec.value as ShellSnapshotLoaderValue).value,
279
+ ),
280
+ ];
281
+ } catch {
282
+ return null;
283
+ }
284
+ }),
285
+ );
286
+ const seed = new Map<string, unknown>();
287
+ for (const entry of entries) {
288
+ if (entry) seed.set(entry[0], entry[1]);
289
+ }
290
+ return seed.size > 0 ? seed : undefined;
291
+ }
292
+
247
293
  /**
248
294
  * A read-through overlay the HIT tail render reads through. For a key present in
249
295
  * the snapshot it serves the recorded value AS FRESH (shouldRevalidate: false —
@@ -269,9 +315,12 @@ export class SeededShellStore<
269
315
  this.items.set(rec.key, rec.value as ShellSnapshotItemValue);
270
316
  } else if (rec.family === "segment") {
271
317
  this.segments.set(rec.key, rec.value as CachedEntryData);
272
- } else {
318
+ } else if (rec.family === "response") {
273
319
  this.responses.set(rec.key, rec.value as ShellSnapshotResponseValue);
274
320
  }
321
+ // "loader" family records are not store reads — serveShellHit seeds them
322
+ // onto the tail context (_shellLoaderSeed) for the resolveLoaderData
323
+ // overlay instead.
275
324
  }
276
325
  }
277
326
 
@@ -271,11 +271,27 @@ export interface ShellCacheEntry {
271
271
  }
272
272
 
273
273
  /**
274
- * The cache-store families a shell snapshot pins. Excludes the shell family
275
- * itself (getShell/putShell) — the snapshot rides INSIDE a shell entry, so
276
- * recording it would be self-referential.
274
+ * The families a shell snapshot pins. The item/segment/response families are
275
+ * cache-store reads/writes (recorded by RecordingShellStore); the loader family
276
+ * pins the settled CONTAINER of a bake-lane loader (a loader on an entry with
277
+ * no renderable loading(), executed during capture — see
278
+ * docs/design/loader-container-bake.md). Excludes the shell family itself
279
+ * (getShell/putShell) — the snapshot rides INSIDE a shell entry, so recording
280
+ * it would be self-referential.
277
281
  */
278
- export type ShellSnapshotFamily = "item" | "segment" | "response";
282
+ export type ShellSnapshotFamily = "item" | "segment" | "response" | "loader";
283
+
284
+ /**
285
+ * The stored form of a loader-family snapshot value: the bake-lane loader's
286
+ * settled container, Flight-serialized AFTER eliding every still-pending nested
287
+ * promise to a hole marker (the marker paths are holes, not shell material; on
288
+ * a HIT the overlay re-slots the fresh run's promises there). Flight (not JSON)
289
+ * so typed values (Date/Map) survive the round trip.
290
+ */
291
+ export interface ShellSnapshotLoaderValue {
292
+ /** RSC-serialized elided container (see loader-snapshot.ts). */
293
+ value: string;
294
+ }
279
295
 
280
296
  /** A serialized cached Response for the response family of a shell snapshot. */
281
297
  export interface ShellSnapshotResponseValue {
@@ -307,7 +323,11 @@ export interface ShellSnapshotItemValue {
307
323
  export interface ShellSnapshotRecord {
308
324
  family: ShellSnapshotFamily;
309
325
  key: string;
310
- value: ShellSnapshotItemValue | CachedEntryData | ShellSnapshotResponseValue;
326
+ value:
327
+ | ShellSnapshotItemValue
328
+ | CachedEntryData
329
+ | ShellSnapshotResponseValue
330
+ | ShellSnapshotLoaderValue;
311
331
  }
312
332
 
313
333
  /**