@rangojs/router 0.0.0-experimental.0b82333f → 0.0.0-experimental.0e02cd4e

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 (943) hide show
  1. package/README.md +76 -18
  2. package/dist/bin/rango.js +138 -50
  3. package/dist/vite/index.js +839 -429
  4. package/package.json +2 -2
  5. package/skills/cache-guide/SKILL.md +32 -0
  6. package/skills/caching/SKILL.md +45 -4
  7. package/skills/links/SKILL.md +3 -1
  8. package/skills/loader/SKILL.md +53 -43
  9. package/skills/middleware/SKILL.md +2 -0
  10. package/skills/parallel/SKILL.md +126 -0
  11. package/skills/prerender/SKILL.md +110 -68
  12. package/skills/route/SKILL.md +31 -0
  13. package/skills/router-setup/SKILL.md +87 -2
  14. package/skills/typesafety/SKILL.md +10 -0
  15. package/src/__internal.ts +1 -1
  16. package/src/browser/app-version.ts +14 -0
  17. package/src/browser/event-controller.ts +5 -0
  18. package/src/browser/navigation-bridge.ts +17 -6
  19. package/src/browser/navigation-client.ts +132 -61
  20. package/src/browser/navigation-store.ts +43 -8
  21. package/src/browser/navigation-transaction.ts +11 -9
  22. package/src/browser/partial-update.ts +76 -13
  23. package/src/browser/prefetch/cache.ts +78 -11
  24. package/src/browser/prefetch/fetch.ts +76 -27
  25. package/src/browser/prefetch/queue.ts +92 -20
  26. package/src/browser/prefetch/resource-ready.ts +77 -0
  27. package/src/browser/react/Link.tsx +67 -9
  28. package/src/browser/react/NavigationProvider.tsx +40 -4
  29. package/src/browser/react/context.ts +7 -2
  30. package/src/browser/react/use-handle.ts +9 -58
  31. package/src/browser/react/use-router.ts +21 -8
  32. package/src/browser/rsc-router.tsx +134 -59
  33. package/src/browser/scroll-restoration.ts +30 -15
  34. package/src/browser/segment-reconciler.ts +6 -1
  35. package/src/browser/server-action-bridge.ts +8 -6
  36. package/src/browser/types.ts +36 -5
  37. package/src/build/generate-manifest.ts +6 -6
  38. package/src/build/generate-route-types.ts +3 -0
  39. package/src/build/route-types/include-resolution.ts +8 -1
  40. package/src/build/route-types/router-processing.ts +223 -74
  41. package/src/build/route-types/scan-filter.ts +8 -1
  42. package/src/cache/cache-runtime.ts +15 -11
  43. package/src/cache/cache-scope.ts +48 -7
  44. package/src/cache/cf/cf-cache-store.ts +453 -11
  45. package/src/cache/cf/index.ts +5 -1
  46. package/src/cache/document-cache.ts +17 -7
  47. package/src/cache/index.ts +1 -0
  48. package/src/cache/taint.ts +55 -0
  49. package/src/client.tsx +2 -56
  50. package/src/context-var.ts +72 -2
  51. package/src/debug.ts +2 -2
  52. package/src/handle.ts +40 -0
  53. package/src/index.rsc.ts +3 -1
  54. package/src/index.ts +12 -0
  55. package/src/prerender/store.ts +5 -4
  56. package/src/prerender.ts +138 -77
  57. package/src/reverse.ts +22 -1
  58. package/src/route-definition/dsl-helpers.ts +73 -25
  59. package/src/route-definition/helpers-types.ts +10 -6
  60. package/src/route-definition/index.ts +3 -0
  61. package/src/route-definition/redirect.ts +11 -3
  62. package/src/route-definition/resolve-handler-use.ts +149 -0
  63. package/src/route-map-builder.ts +7 -1
  64. package/src/route-types.ts +11 -0
  65. package/src/router/content-negotiation.ts +100 -1
  66. package/src/router/find-match.ts +4 -2
  67. package/src/router/handler-context.ts +79 -23
  68. package/src/router/intercept-resolution.ts +11 -4
  69. package/src/router/lazy-includes.ts +4 -1
  70. package/src/router/loader-resolution.ts +156 -21
  71. package/src/router/logging.ts +5 -2
  72. package/src/router/manifest.ts +9 -3
  73. package/src/router/match-api.ts +124 -189
  74. package/src/router/match-middleware/background-revalidation.ts +30 -2
  75. package/src/router/match-middleware/cache-lookup.ts +92 -16
  76. package/src/router/match-middleware/cache-store.ts +53 -10
  77. package/src/router/match-middleware/intercept-resolution.ts +9 -7
  78. package/src/router/match-middleware/segment-resolution.ts +61 -5
  79. package/src/router/match-result.ts +104 -10
  80. package/src/router/metrics.ts +6 -1
  81. package/src/router/middleware-types.ts +6 -8
  82. package/src/router/middleware.ts +4 -6
  83. package/src/router/navigation-snapshot.ts +182 -0
  84. package/src/router/prerender-match.ts +110 -10
  85. package/src/router/preview-match.ts +30 -102
  86. package/src/router/request-classification.ts +310 -0
  87. package/src/router/route-snapshot.ts +245 -0
  88. package/src/router/router-context.ts +6 -1
  89. package/src/router/router-interfaces.ts +36 -4
  90. package/src/router/router-options.ts +37 -11
  91. package/src/router/segment-resolution/fresh.ts +198 -20
  92. package/src/router/segment-resolution/helpers.ts +29 -24
  93. package/src/router/segment-resolution/loader-cache.ts +1 -0
  94. package/src/router/segment-resolution/revalidation.ts +437 -297
  95. package/src/router/segment-wrappers.ts +2 -0
  96. package/src/router/types.ts +1 -0
  97. package/src/router.ts +59 -6
  98. package/src/rsc/handler.ts +472 -372
  99. package/src/rsc/loader-fetch.ts +23 -3
  100. package/src/rsc/manifest-init.ts +5 -1
  101. package/src/rsc/progressive-enhancement.ts +14 -2
  102. package/src/rsc/rsc-rendering.ts +10 -1
  103. package/src/rsc/server-action.ts +8 -0
  104. package/src/rsc/ssr-setup.ts +2 -2
  105. package/src/rsc/types.ts +9 -1
  106. package/src/segment-system.tsx +140 -4
  107. package/src/server/context.ts +140 -14
  108. package/src/server/handle-store.ts +19 -0
  109. package/src/server/loader-registry.ts +9 -8
  110. package/src/server/request-context.ts +185 -19
  111. package/src/ssr/index.tsx +4 -0
  112. package/src/static-handler.ts +18 -6
  113. package/src/types/cache-types.ts +4 -4
  114. package/src/types/handler-context.ts +137 -33
  115. package/src/types/loader-types.ts +36 -9
  116. package/src/types/route-entry.ts +8 -1
  117. package/src/types/segments.ts +3 -0
  118. package/src/urls/path-helper-types.ts +9 -2
  119. package/src/urls/path-helper.ts +48 -13
  120. package/src/urls/pattern-types.ts +12 -0
  121. package/src/urls/response-types.ts +16 -6
  122. package/src/use-loader.tsx +77 -5
  123. package/src/vite/discovery/bundle-postprocess.ts +30 -33
  124. package/src/vite/discovery/discover-routers.ts +5 -1
  125. package/src/vite/discovery/prerender-collection.ts +128 -74
  126. package/src/vite/discovery/state.ts +13 -6
  127. package/src/vite/index.ts +4 -0
  128. package/src/vite/plugin-types.ts +51 -79
  129. package/src/vite/plugins/expose-action-id.ts +1 -3
  130. package/src/vite/plugins/expose-id-utils.ts +12 -0
  131. package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
  132. package/src/vite/plugins/expose-internal-ids.ts +257 -40
  133. package/src/vite/plugins/performance-tracks.ts +88 -0
  134. package/src/vite/plugins/refresh-cmd.ts +88 -26
  135. package/src/vite/plugins/version-plugin.ts +13 -1
  136. package/src/vite/rango.ts +163 -211
  137. package/src/vite/router-discovery.ts +178 -45
  138. package/src/vite/utils/banner.ts +3 -3
  139. package/src/vite/utils/prerender-utils.ts +18 -0
  140. package/src/vite/utils/shared-utils.ts +3 -2
  141. package/dist/__internal.d.ts +0 -83
  142. package/dist/__internal.d.ts.map +0 -1
  143. package/dist/__internal.js +0 -19
  144. package/dist/__internal.js.map +0 -1
  145. package/dist/__mocks__/version.d.ts +0 -7
  146. package/dist/__mocks__/version.d.ts.map +0 -1
  147. package/dist/__mocks__/version.js +0 -7
  148. package/dist/__mocks__/version.js.map +0 -1
  149. package/dist/__tests__/client-href.test.d.ts +0 -2
  150. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  151. package/dist/__tests__/client-href.test.js +0 -74
  152. package/dist/__tests__/client-href.test.js.map +0 -1
  153. package/dist/__tests__/component-utils.test.d.ts +0 -2
  154. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  155. package/dist/__tests__/component-utils.test.js +0 -51
  156. package/dist/__tests__/component-utils.test.js.map +0 -1
  157. package/dist/__tests__/event-controller.test.d.ts +0 -2
  158. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  159. package/dist/__tests__/event-controller.test.js +0 -538
  160. package/dist/__tests__/event-controller.test.js.map +0 -1
  161. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  162. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  163. package/dist/__tests__/helpers/route-tree.js +0 -374
  164. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  165. package/dist/__tests__/match-result.test.d.ts +0 -2
  166. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  167. package/dist/__tests__/match-result.test.js +0 -154
  168. package/dist/__tests__/match-result.test.js.map +0 -1
  169. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  170. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  171. package/dist/__tests__/navigation-store.test.js +0 -440
  172. package/dist/__tests__/navigation-store.test.js.map +0 -1
  173. package/dist/__tests__/partial-update.test.d.ts +0 -2
  174. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  175. package/dist/__tests__/partial-update.test.js +0 -1009
  176. package/dist/__tests__/partial-update.test.js.map +0 -1
  177. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  178. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  179. package/dist/__tests__/reverse-types.test.js +0 -656
  180. package/dist/__tests__/reverse-types.test.js.map +0 -1
  181. package/dist/__tests__/route-definition.test.d.ts +0 -2
  182. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  183. package/dist/__tests__/route-definition.test.js +0 -55
  184. package/dist/__tests__/route-definition.test.js.map +0 -1
  185. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  186. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  187. package/dist/__tests__/router-helpers.test.js +0 -377
  188. package/dist/__tests__/router-helpers.test.js.map +0 -1
  189. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  190. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  191. package/dist/__tests__/router-integration-2.test.js +0 -426
  192. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  193. package/dist/__tests__/router-integration.test.d.ts +0 -2
  194. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  195. package/dist/__tests__/router-integration.test.js +0 -1051
  196. package/dist/__tests__/router-integration.test.js.map +0 -1
  197. package/dist/__tests__/search-params.test.d.ts +0 -5
  198. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  199. package/dist/__tests__/search-params.test.js +0 -306
  200. package/dist/__tests__/search-params.test.js.map +0 -1
  201. package/dist/__tests__/segment-system.test.d.ts +0 -2
  202. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  203. package/dist/__tests__/segment-system.test.js +0 -627
  204. package/dist/__tests__/segment-system.test.js.map +0 -1
  205. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  206. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  207. package/dist/__tests__/static-handler-types.test.js +0 -63
  208. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  209. package/dist/__tests__/urls.test.d.ts +0 -2
  210. package/dist/__tests__/urls.test.d.ts.map +0 -1
  211. package/dist/__tests__/urls.test.js +0 -421
  212. package/dist/__tests__/urls.test.js.map +0 -1
  213. package/dist/__tests__/use-mount.test.d.ts +0 -2
  214. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  215. package/dist/__tests__/use-mount.test.js +0 -35
  216. package/dist/__tests__/use-mount.test.js.map +0 -1
  217. package/dist/bin/rango.d.ts +0 -2
  218. package/dist/bin/rango.d.ts.map +0 -1
  219. package/dist/bin/rango.js.map +0 -1
  220. package/dist/browser/event-controller.d.ts +0 -191
  221. package/dist/browser/event-controller.d.ts.map +0 -1
  222. package/dist/browser/event-controller.js +0 -559
  223. package/dist/browser/event-controller.js.map +0 -1
  224. package/dist/browser/index.d.ts +0 -2
  225. package/dist/browser/index.d.ts.map +0 -1
  226. package/dist/browser/index.js +0 -14
  227. package/dist/browser/index.js.map +0 -1
  228. package/dist/browser/link-interceptor.d.ts +0 -38
  229. package/dist/browser/link-interceptor.d.ts.map +0 -1
  230. package/dist/browser/link-interceptor.js +0 -99
  231. package/dist/browser/link-interceptor.js.map +0 -1
  232. package/dist/browser/logging.d.ts +0 -10
  233. package/dist/browser/logging.d.ts.map +0 -1
  234. package/dist/browser/logging.js +0 -29
  235. package/dist/browser/logging.js.map +0 -1
  236. package/dist/browser/lru-cache.d.ts +0 -17
  237. package/dist/browser/lru-cache.d.ts.map +0 -1
  238. package/dist/browser/lru-cache.js +0 -50
  239. package/dist/browser/lru-cache.js.map +0 -1
  240. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  241. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  242. package/dist/browser/merge-segment-loaders.js +0 -102
  243. package/dist/browser/merge-segment-loaders.js.map +0 -1
  244. package/dist/browser/navigation-bridge.d.ts +0 -102
  245. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  246. package/dist/browser/navigation-bridge.js +0 -708
  247. package/dist/browser/navigation-bridge.js.map +0 -1
  248. package/dist/browser/navigation-client.d.ts +0 -25
  249. package/dist/browser/navigation-client.d.ts.map +0 -1
  250. package/dist/browser/navigation-client.js +0 -157
  251. package/dist/browser/navigation-client.js.map +0 -1
  252. package/dist/browser/navigation-store.d.ts +0 -101
  253. package/dist/browser/navigation-store.d.ts.map +0 -1
  254. package/dist/browser/navigation-store.js +0 -625
  255. package/dist/browser/navigation-store.js.map +0 -1
  256. package/dist/browser/partial-update.d.ts +0 -75
  257. package/dist/browser/partial-update.d.ts.map +0 -1
  258. package/dist/browser/partial-update.js +0 -426
  259. package/dist/browser/partial-update.js.map +0 -1
  260. package/dist/browser/react/Link.d.ts +0 -86
  261. package/dist/browser/react/Link.d.ts.map +0 -1
  262. package/dist/browser/react/Link.js +0 -128
  263. package/dist/browser/react/Link.js.map +0 -1
  264. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  265. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  266. package/dist/browser/react/NavigationProvider.js +0 -216
  267. package/dist/browser/react/NavigationProvider.js.map +0 -1
  268. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  269. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  270. package/dist/browser/react/ScrollRestoration.js +0 -57
  271. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  272. package/dist/browser/react/context.d.ts +0 -46
  273. package/dist/browser/react/context.d.ts.map +0 -1
  274. package/dist/browser/react/context.js +0 -10
  275. package/dist/browser/react/context.js.map +0 -1
  276. package/dist/browser/react/index.d.ts +0 -11
  277. package/dist/browser/react/index.d.ts.map +0 -1
  278. package/dist/browser/react/index.js +0 -22
  279. package/dist/browser/react/index.js.map +0 -1
  280. package/dist/browser/react/location-state-shared.d.ts +0 -63
  281. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  282. package/dist/browser/react/location-state-shared.js +0 -81
  283. package/dist/browser/react/location-state-shared.js.map +0 -1
  284. package/dist/browser/react/location-state.d.ts +0 -23
  285. package/dist/browser/react/location-state.d.ts.map +0 -1
  286. package/dist/browser/react/location-state.js +0 -29
  287. package/dist/browser/react/location-state.js.map +0 -1
  288. package/dist/browser/react/mount-context.d.ts +0 -24
  289. package/dist/browser/react/mount-context.d.ts.map +0 -1
  290. package/dist/browser/react/mount-context.js +0 -24
  291. package/dist/browser/react/mount-context.js.map +0 -1
  292. package/dist/browser/react/use-action.d.ts +0 -64
  293. package/dist/browser/react/use-action.d.ts.map +0 -1
  294. package/dist/browser/react/use-action.js +0 -134
  295. package/dist/browser/react/use-action.js.map +0 -1
  296. package/dist/browser/react/use-client-cache.d.ts +0 -41
  297. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  298. package/dist/browser/react/use-client-cache.js +0 -39
  299. package/dist/browser/react/use-client-cache.js.map +0 -1
  300. package/dist/browser/react/use-handle.d.ts +0 -31
  301. package/dist/browser/react/use-handle.d.ts.map +0 -1
  302. package/dist/browser/react/use-handle.js +0 -144
  303. package/dist/browser/react/use-handle.js.map +0 -1
  304. package/dist/browser/react/use-href.d.ts +0 -33
  305. package/dist/browser/react/use-href.d.ts.map +0 -1
  306. package/dist/browser/react/use-href.js +0 -39
  307. package/dist/browser/react/use-href.js.map +0 -1
  308. package/dist/browser/react/use-link-status.d.ts +0 -37
  309. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  310. package/dist/browser/react/use-link-status.js +0 -99
  311. package/dist/browser/react/use-link-status.js.map +0 -1
  312. package/dist/browser/react/use-mount.d.ts +0 -25
  313. package/dist/browser/react/use-mount.d.ts.map +0 -1
  314. package/dist/browser/react/use-mount.js +0 -30
  315. package/dist/browser/react/use-mount.js.map +0 -1
  316. package/dist/browser/react/use-navigation.d.ts +0 -27
  317. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  318. package/dist/browser/react/use-navigation.js +0 -87
  319. package/dist/browser/react/use-navigation.js.map +0 -1
  320. package/dist/browser/react/use-segments.d.ts +0 -38
  321. package/dist/browser/react/use-segments.d.ts.map +0 -1
  322. package/dist/browser/react/use-segments.js +0 -130
  323. package/dist/browser/react/use-segments.js.map +0 -1
  324. package/dist/browser/request-controller.d.ts +0 -26
  325. package/dist/browser/request-controller.d.ts.map +0 -1
  326. package/dist/browser/request-controller.js +0 -147
  327. package/dist/browser/request-controller.js.map +0 -1
  328. package/dist/browser/rsc-router.d.ts +0 -129
  329. package/dist/browser/rsc-router.d.ts.map +0 -1
  330. package/dist/browser/rsc-router.js +0 -195
  331. package/dist/browser/rsc-router.js.map +0 -1
  332. package/dist/browser/scroll-restoration.d.ts +0 -93
  333. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  334. package/dist/browser/scroll-restoration.js +0 -321
  335. package/dist/browser/scroll-restoration.js.map +0 -1
  336. package/dist/browser/segment-structure-assert.d.ts +0 -17
  337. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  338. package/dist/browser/segment-structure-assert.js +0 -59
  339. package/dist/browser/segment-structure-assert.js.map +0 -1
  340. package/dist/browser/server-action-bridge.d.ts +0 -26
  341. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  342. package/dist/browser/server-action-bridge.js +0 -668
  343. package/dist/browser/server-action-bridge.js.map +0 -1
  344. package/dist/browser/shallow.d.ts +0 -12
  345. package/dist/browser/shallow.d.ts.map +0 -1
  346. package/dist/browser/shallow.js +0 -34
  347. package/dist/browser/shallow.js.map +0 -1
  348. package/dist/browser/types.d.ts +0 -369
  349. package/dist/browser/types.d.ts.map +0 -1
  350. package/dist/browser/types.js +0 -2
  351. package/dist/browser/types.js.map +0 -1
  352. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  353. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  354. package/dist/build/__tests__/generate-cli.test.js +0 -237
  355. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  356. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  357. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  358. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  359. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  360. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  361. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  362. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  363. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  364. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  365. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  366. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  367. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  368. package/dist/build/generate-manifest.d.ts +0 -81
  369. package/dist/build/generate-manifest.d.ts.map +0 -1
  370. package/dist/build/generate-manifest.js +0 -276
  371. package/dist/build/generate-manifest.js.map +0 -1
  372. package/dist/build/generate-route-types.d.ts +0 -115
  373. package/dist/build/generate-route-types.d.ts.map +0 -1
  374. package/dist/build/generate-route-types.js +0 -740
  375. package/dist/build/generate-route-types.js.map +0 -1
  376. package/dist/build/index.d.ts +0 -21
  377. package/dist/build/index.d.ts.map +0 -1
  378. package/dist/build/index.js +0 -21
  379. package/dist/build/index.js.map +0 -1
  380. package/dist/build/route-trie.d.ts +0 -71
  381. package/dist/build/route-trie.d.ts.map +0 -1
  382. package/dist/build/route-trie.js +0 -175
  383. package/dist/build/route-trie.js.map +0 -1
  384. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  385. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  386. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  387. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  388. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  389. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  390. package/dist/cache/__tests__/document-cache.test.js +0 -345
  391. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  392. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  393. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  394. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  395. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  396. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  397. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  398. package/dist/cache/__tests__/memory-store.test.js +0 -367
  399. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  400. package/dist/cache/cache-scope.d.ts +0 -102
  401. package/dist/cache/cache-scope.d.ts.map +0 -1
  402. package/dist/cache/cache-scope.js +0 -440
  403. package/dist/cache/cache-scope.js.map +0 -1
  404. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  405. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  406. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  407. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  408. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  409. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  410. package/dist/cache/cf/cf-cache-store.js +0 -242
  411. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  412. package/dist/cache/cf/index.d.ts +0 -14
  413. package/dist/cache/cf/index.d.ts.map +0 -1
  414. package/dist/cache/cf/index.js +0 -17
  415. package/dist/cache/cf/index.js.map +0 -1
  416. package/dist/cache/document-cache.d.ts +0 -64
  417. package/dist/cache/document-cache.d.ts.map +0 -1
  418. package/dist/cache/document-cache.js +0 -228
  419. package/dist/cache/document-cache.js.map +0 -1
  420. package/dist/cache/index.d.ts +0 -19
  421. package/dist/cache/index.d.ts.map +0 -1
  422. package/dist/cache/index.js +0 -21
  423. package/dist/cache/index.js.map +0 -1
  424. package/dist/cache/memory-segment-store.d.ts +0 -110
  425. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  426. package/dist/cache/memory-segment-store.js +0 -117
  427. package/dist/cache/memory-segment-store.js.map +0 -1
  428. package/dist/cache/memory-store.d.ts +0 -41
  429. package/dist/cache/memory-store.d.ts.map +0 -1
  430. package/dist/cache/memory-store.js +0 -191
  431. package/dist/cache/memory-store.js.map +0 -1
  432. package/dist/cache/types.d.ts +0 -317
  433. package/dist/cache/types.d.ts.map +0 -1
  434. package/dist/cache/types.js +0 -12
  435. package/dist/cache/types.js.map +0 -1
  436. package/dist/client.d.ts +0 -248
  437. package/dist/client.d.ts.map +0 -1
  438. package/dist/client.js +0 -367
  439. package/dist/client.js.map +0 -1
  440. package/dist/client.rsc.d.ts +0 -26
  441. package/dist/client.rsc.d.ts.map +0 -1
  442. package/dist/client.rsc.js +0 -46
  443. package/dist/client.rsc.js.map +0 -1
  444. package/dist/component-utils.d.ts +0 -36
  445. package/dist/component-utils.d.ts.map +0 -1
  446. package/dist/component-utils.js +0 -61
  447. package/dist/component-utils.js.map +0 -1
  448. package/dist/components/DefaultDocument.d.ts +0 -13
  449. package/dist/components/DefaultDocument.d.ts.map +0 -1
  450. package/dist/components/DefaultDocument.js +0 -15
  451. package/dist/components/DefaultDocument.js.map +0 -1
  452. package/dist/debug.d.ts +0 -58
  453. package/dist/debug.d.ts.map +0 -1
  454. package/dist/debug.js +0 -157
  455. package/dist/debug.js.map +0 -1
  456. package/dist/default-error-boundary.d.ts +0 -11
  457. package/dist/default-error-boundary.d.ts.map +0 -1
  458. package/dist/default-error-boundary.js +0 -45
  459. package/dist/default-error-boundary.js.map +0 -1
  460. package/dist/deps/browser.d.ts +0 -2
  461. package/dist/deps/browser.d.ts.map +0 -1
  462. package/dist/deps/browser.js +0 -3
  463. package/dist/deps/browser.js.map +0 -1
  464. package/dist/deps/html-stream-client.d.ts +0 -2
  465. package/dist/deps/html-stream-client.d.ts.map +0 -1
  466. package/dist/deps/html-stream-client.js +0 -3
  467. package/dist/deps/html-stream-client.js.map +0 -1
  468. package/dist/deps/html-stream-server.d.ts +0 -2
  469. package/dist/deps/html-stream-server.d.ts.map +0 -1
  470. package/dist/deps/html-stream-server.js +0 -3
  471. package/dist/deps/html-stream-server.js.map +0 -1
  472. package/dist/deps/rsc.d.ts +0 -2
  473. package/dist/deps/rsc.d.ts.map +0 -1
  474. package/dist/deps/rsc.js +0 -4
  475. package/dist/deps/rsc.js.map +0 -1
  476. package/dist/deps/ssr.d.ts +0 -2
  477. package/dist/deps/ssr.d.ts.map +0 -1
  478. package/dist/deps/ssr.js +0 -3
  479. package/dist/deps/ssr.js.map +0 -1
  480. package/dist/errors.d.ts +0 -174
  481. package/dist/errors.d.ts.map +0 -1
  482. package/dist/errors.js +0 -241
  483. package/dist/errors.js.map +0 -1
  484. package/dist/handle.d.ts +0 -78
  485. package/dist/handle.d.ts.map +0 -1
  486. package/dist/handle.js +0 -82
  487. package/dist/handle.js.map +0 -1
  488. package/dist/handles/MetaTags.d.ts +0 -14
  489. package/dist/handles/MetaTags.d.ts.map +0 -1
  490. package/dist/handles/MetaTags.js +0 -136
  491. package/dist/handles/MetaTags.js.map +0 -1
  492. package/dist/handles/index.d.ts +0 -6
  493. package/dist/handles/index.d.ts.map +0 -1
  494. package/dist/handles/index.js +0 -6
  495. package/dist/handles/index.js.map +0 -1
  496. package/dist/handles/meta.d.ts +0 -39
  497. package/dist/handles/meta.d.ts.map +0 -1
  498. package/dist/handles/meta.js +0 -202
  499. package/dist/handles/meta.js.map +0 -1
  500. package/dist/host/__tests__/errors.test.d.ts +0 -2
  501. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  502. package/dist/host/__tests__/errors.test.js +0 -76
  503. package/dist/host/__tests__/errors.test.js.map +0 -1
  504. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  505. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  506. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  507. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  508. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  509. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  510. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  511. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  512. package/dist/host/__tests__/router.test.d.ts +0 -2
  513. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  514. package/dist/host/__tests__/router.test.js +0 -241
  515. package/dist/host/__tests__/router.test.js.map +0 -1
  516. package/dist/host/__tests__/testing.test.d.ts +0 -2
  517. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  518. package/dist/host/__tests__/testing.test.js +0 -64
  519. package/dist/host/__tests__/testing.test.js.map +0 -1
  520. package/dist/host/__tests__/utils.test.d.ts +0 -2
  521. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  522. package/dist/host/__tests__/utils.test.js +0 -29
  523. package/dist/host/__tests__/utils.test.js.map +0 -1
  524. package/dist/host/cookie-handler.d.ts +0 -34
  525. package/dist/host/cookie-handler.d.ts.map +0 -1
  526. package/dist/host/cookie-handler.js +0 -124
  527. package/dist/host/cookie-handler.js.map +0 -1
  528. package/dist/host/errors.d.ts +0 -56
  529. package/dist/host/errors.d.ts.map +0 -1
  530. package/dist/host/errors.js +0 -79
  531. package/dist/host/errors.js.map +0 -1
  532. package/dist/host/index.d.ts +0 -29
  533. package/dist/host/index.d.ts.map +0 -1
  534. package/dist/host/index.js +0 -32
  535. package/dist/host/index.js.map +0 -1
  536. package/dist/host/pattern-matcher.d.ts +0 -36
  537. package/dist/host/pattern-matcher.d.ts.map +0 -1
  538. package/dist/host/pattern-matcher.js +0 -172
  539. package/dist/host/pattern-matcher.js.map +0 -1
  540. package/dist/host/router.d.ts +0 -26
  541. package/dist/host/router.d.ts.map +0 -1
  542. package/dist/host/router.js +0 -218
  543. package/dist/host/router.js.map +0 -1
  544. package/dist/host/testing.d.ts +0 -36
  545. package/dist/host/testing.d.ts.map +0 -1
  546. package/dist/host/testing.js +0 -55
  547. package/dist/host/testing.js.map +0 -1
  548. package/dist/host/types.d.ts +0 -115
  549. package/dist/host/types.d.ts.map +0 -1
  550. package/dist/host/types.js +0 -7
  551. package/dist/host/types.js.map +0 -1
  552. package/dist/host/utils.d.ts +0 -21
  553. package/dist/host/utils.d.ts.map +0 -1
  554. package/dist/host/utils.js +0 -23
  555. package/dist/host/utils.js.map +0 -1
  556. package/dist/href-client.d.ts +0 -131
  557. package/dist/href-client.d.ts.map +0 -1
  558. package/dist/href-client.js +0 -64
  559. package/dist/href-client.js.map +0 -1
  560. package/dist/href-context.d.ts +0 -29
  561. package/dist/href-context.d.ts.map +0 -1
  562. package/dist/href-context.js +0 -21
  563. package/dist/href-context.js.map +0 -1
  564. package/dist/index.d.ts +0 -73
  565. package/dist/index.d.ts.map +0 -1
  566. package/dist/index.js +0 -91
  567. package/dist/index.js.map +0 -1
  568. package/dist/index.rsc.d.ts +0 -32
  569. package/dist/index.rsc.d.ts.map +0 -1
  570. package/dist/index.rsc.js +0 -40
  571. package/dist/index.rsc.js.map +0 -1
  572. package/dist/internal-debug.d.ts +0 -2
  573. package/dist/internal-debug.d.ts.map +0 -1
  574. package/dist/internal-debug.js +0 -5
  575. package/dist/internal-debug.js.map +0 -1
  576. package/dist/loader.d.ts +0 -14
  577. package/dist/loader.d.ts.map +0 -1
  578. package/dist/loader.js +0 -20
  579. package/dist/loader.js.map +0 -1
  580. package/dist/loader.rsc.d.ts +0 -19
  581. package/dist/loader.rsc.d.ts.map +0 -1
  582. package/dist/loader.rsc.js +0 -99
  583. package/dist/loader.rsc.js.map +0 -1
  584. package/dist/network-error-thrower.d.ts +0 -17
  585. package/dist/network-error-thrower.d.ts.map +0 -1
  586. package/dist/network-error-thrower.js +0 -14
  587. package/dist/network-error-thrower.js.map +0 -1
  588. package/dist/outlet-context.d.ts +0 -13
  589. package/dist/outlet-context.d.ts.map +0 -1
  590. package/dist/outlet-context.js +0 -3
  591. package/dist/outlet-context.js.map +0 -1
  592. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  593. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  594. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  595. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  596. package/dist/prerender/param-hash.d.ts +0 -16
  597. package/dist/prerender/param-hash.d.ts.map +0 -1
  598. package/dist/prerender/param-hash.js +0 -36
  599. package/dist/prerender/param-hash.js.map +0 -1
  600. package/dist/prerender/store.d.ts +0 -38
  601. package/dist/prerender/store.d.ts.map +0 -1
  602. package/dist/prerender/store.js +0 -61
  603. package/dist/prerender/store.js.map +0 -1
  604. package/dist/prerender.d.ts +0 -66
  605. package/dist/prerender.d.ts.map +0 -1
  606. package/dist/prerender.js +0 -57
  607. package/dist/prerender.js.map +0 -1
  608. package/dist/reverse.d.ts +0 -196
  609. package/dist/reverse.d.ts.map +0 -1
  610. package/dist/reverse.js +0 -78
  611. package/dist/reverse.js.map +0 -1
  612. package/dist/root-error-boundary.d.ts +0 -33
  613. package/dist/root-error-boundary.d.ts.map +0 -1
  614. package/dist/root-error-boundary.js +0 -165
  615. package/dist/root-error-boundary.js.map +0 -1
  616. package/dist/route-content-wrapper.d.ts +0 -46
  617. package/dist/route-content-wrapper.d.ts.map +0 -1
  618. package/dist/route-content-wrapper.js +0 -77
  619. package/dist/route-content-wrapper.js.map +0 -1
  620. package/dist/route-definition.d.ts +0 -421
  621. package/dist/route-definition.d.ts.map +0 -1
  622. package/dist/route-definition.js +0 -868
  623. package/dist/route-definition.js.map +0 -1
  624. package/dist/route-map-builder.d.ts +0 -155
  625. package/dist/route-map-builder.d.ts.map +0 -1
  626. package/dist/route-map-builder.js +0 -237
  627. package/dist/route-map-builder.js.map +0 -1
  628. package/dist/route-types.d.ts +0 -165
  629. package/dist/route-types.d.ts.map +0 -1
  630. package/dist/route-types.js +0 -7
  631. package/dist/route-types.js.map +0 -1
  632. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  633. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  634. package/dist/router/__tests__/handler-context.test.js +0 -65
  635. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  636. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  637. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  638. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  639. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  640. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  641. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  642. package/dist/router/__tests__/match-context.test.js +0 -92
  643. package/dist/router/__tests__/match-context.test.js.map +0 -1
  644. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  645. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  646. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  647. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  648. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  649. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  650. package/dist/router/__tests__/match-result.test.js +0 -457
  651. package/dist/router/__tests__/match-result.test.js.map +0 -1
  652. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  653. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  654. package/dist/router/__tests__/on-error.test.js +0 -678
  655. package/dist/router/__tests__/on-error.test.js.map +0 -1
  656. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  657. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  658. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  659. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  660. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  661. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  662. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  663. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  664. package/dist/router/error-handling.d.ts +0 -77
  665. package/dist/router/error-handling.d.ts.map +0 -1
  666. package/dist/router/error-handling.js +0 -202
  667. package/dist/router/error-handling.js.map +0 -1
  668. package/dist/router/handler-context.d.ts +0 -20
  669. package/dist/router/handler-context.d.ts.map +0 -1
  670. package/dist/router/handler-context.js +0 -198
  671. package/dist/router/handler-context.js.map +0 -1
  672. package/dist/router/intercept-resolution.d.ts +0 -66
  673. package/dist/router/intercept-resolution.d.ts.map +0 -1
  674. package/dist/router/intercept-resolution.js +0 -246
  675. package/dist/router/intercept-resolution.js.map +0 -1
  676. package/dist/router/loader-resolution.d.ts +0 -64
  677. package/dist/router/loader-resolution.d.ts.map +0 -1
  678. package/dist/router/loader-resolution.js +0 -284
  679. package/dist/router/loader-resolution.js.map +0 -1
  680. package/dist/router/logging.d.ts +0 -15
  681. package/dist/router/logging.d.ts.map +0 -1
  682. package/dist/router/logging.js +0 -99
  683. package/dist/router/logging.js.map +0 -1
  684. package/dist/router/manifest.d.ts +0 -22
  685. package/dist/router/manifest.d.ts.map +0 -1
  686. package/dist/router/manifest.js +0 -181
  687. package/dist/router/manifest.js.map +0 -1
  688. package/dist/router/match-api.d.ts +0 -35
  689. package/dist/router/match-api.d.ts.map +0 -1
  690. package/dist/router/match-api.js +0 -406
  691. package/dist/router/match-api.js.map +0 -1
  692. package/dist/router/match-context.d.ts +0 -206
  693. package/dist/router/match-context.d.ts.map +0 -1
  694. package/dist/router/match-context.js +0 -17
  695. package/dist/router/match-context.js.map +0 -1
  696. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  697. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  698. package/dist/router/match-middleware/background-revalidation.js +0 -75
  699. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  700. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  701. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  702. package/dist/router/match-middleware/cache-lookup.js +0 -257
  703. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  704. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  705. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  706. package/dist/router/match-middleware/cache-store.js +0 -108
  707. package/dist/router/match-middleware/cache-store.js.map +0 -1
  708. package/dist/router/match-middleware/index.d.ts +0 -81
  709. package/dist/router/match-middleware/index.d.ts.map +0 -1
  710. package/dist/router/match-middleware/index.js +0 -80
  711. package/dist/router/match-middleware/index.js.map +0 -1
  712. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  713. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  714. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  715. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  716. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  717. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  718. package/dist/router/match-middleware/segment-resolution.js +0 -53
  719. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  720. package/dist/router/match-pipelines.d.ts +0 -147
  721. package/dist/router/match-pipelines.d.ts.map +0 -1
  722. package/dist/router/match-pipelines.js +0 -82
  723. package/dist/router/match-pipelines.js.map +0 -1
  724. package/dist/router/match-result.d.ts +0 -126
  725. package/dist/router/match-result.d.ts.map +0 -1
  726. package/dist/router/match-result.js +0 -93
  727. package/dist/router/match-result.js.map +0 -1
  728. package/dist/router/metrics.d.ts +0 -20
  729. package/dist/router/metrics.d.ts.map +0 -1
  730. package/dist/router/metrics.js +0 -47
  731. package/dist/router/metrics.js.map +0 -1
  732. package/dist/router/middleware.d.ts +0 -249
  733. package/dist/router/middleware.d.ts.map +0 -1
  734. package/dist/router/middleware.js +0 -434
  735. package/dist/router/middleware.js.map +0 -1
  736. package/dist/router/middleware.test.d.ts +0 -2
  737. package/dist/router/middleware.test.d.ts.map +0 -1
  738. package/dist/router/middleware.test.js +0 -816
  739. package/dist/router/middleware.test.js.map +0 -1
  740. package/dist/router/pattern-matching.d.ts +0 -149
  741. package/dist/router/pattern-matching.d.ts.map +0 -1
  742. package/dist/router/pattern-matching.js +0 -349
  743. package/dist/router/pattern-matching.js.map +0 -1
  744. package/dist/router/revalidation.d.ts +0 -44
  745. package/dist/router/revalidation.d.ts.map +0 -1
  746. package/dist/router/revalidation.js +0 -147
  747. package/dist/router/revalidation.js.map +0 -1
  748. package/dist/router/router-context.d.ts +0 -135
  749. package/dist/router/router-context.d.ts.map +0 -1
  750. package/dist/router/router-context.js +0 -36
  751. package/dist/router/router-context.js.map +0 -1
  752. package/dist/router/segment-resolution.d.ts +0 -127
  753. package/dist/router/segment-resolution.d.ts.map +0 -1
  754. package/dist/router/segment-resolution.js +0 -919
  755. package/dist/router/segment-resolution.js.map +0 -1
  756. package/dist/router/trie-matching.d.ts +0 -40
  757. package/dist/router/trie-matching.d.ts.map +0 -1
  758. package/dist/router/trie-matching.js +0 -127
  759. package/dist/router/trie-matching.js.map +0 -1
  760. package/dist/router/types.d.ts +0 -136
  761. package/dist/router/types.d.ts.map +0 -1
  762. package/dist/router/types.js +0 -7
  763. package/dist/router/types.js.map +0 -1
  764. package/dist/router.d.ts +0 -753
  765. package/dist/router.d.ts.map +0 -1
  766. package/dist/router.gen.d.ts +0 -6
  767. package/dist/router.gen.d.ts.map +0 -1
  768. package/dist/router.gen.js +0 -6
  769. package/dist/router.gen.js.map +0 -1
  770. package/dist/router.js +0 -1304
  771. package/dist/router.js.map +0 -1
  772. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  773. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  774. package/dist/rsc/__tests__/helpers.test.js +0 -140
  775. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  776. package/dist/rsc/handler.d.ts +0 -45
  777. package/dist/rsc/handler.d.ts.map +0 -1
  778. package/dist/rsc/handler.js +0 -1172
  779. package/dist/rsc/handler.js.map +0 -1
  780. package/dist/rsc/helpers.d.ts +0 -16
  781. package/dist/rsc/helpers.d.ts.map +0 -1
  782. package/dist/rsc/helpers.js +0 -55
  783. package/dist/rsc/helpers.js.map +0 -1
  784. package/dist/rsc/index.d.ts +0 -22
  785. package/dist/rsc/index.d.ts.map +0 -1
  786. package/dist/rsc/index.js +0 -23
  787. package/dist/rsc/index.js.map +0 -1
  788. package/dist/rsc/nonce.d.ts +0 -9
  789. package/dist/rsc/nonce.d.ts.map +0 -1
  790. package/dist/rsc/nonce.js +0 -18
  791. package/dist/rsc/nonce.js.map +0 -1
  792. package/dist/rsc/types.d.ts +0 -206
  793. package/dist/rsc/types.d.ts.map +0 -1
  794. package/dist/rsc/types.js +0 -8
  795. package/dist/rsc/types.js.map +0 -1
  796. package/dist/search-params.d.ts +0 -103
  797. package/dist/search-params.d.ts.map +0 -1
  798. package/dist/search-params.js +0 -74
  799. package/dist/search-params.js.map +0 -1
  800. package/dist/segment-system.d.ts +0 -75
  801. package/dist/segment-system.d.ts.map +0 -1
  802. package/dist/segment-system.js +0 -336
  803. package/dist/segment-system.js.map +0 -1
  804. package/dist/server/context.d.ts +0 -245
  805. package/dist/server/context.d.ts.map +0 -1
  806. package/dist/server/context.js +0 -197
  807. package/dist/server/context.js.map +0 -1
  808. package/dist/server/fetchable-loader-store.d.ts +0 -18
  809. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  810. package/dist/server/fetchable-loader-store.js +0 -18
  811. package/dist/server/fetchable-loader-store.js.map +0 -1
  812. package/dist/server/handle-store.d.ts +0 -85
  813. package/dist/server/handle-store.d.ts.map +0 -1
  814. package/dist/server/handle-store.js +0 -142
  815. package/dist/server/handle-store.js.map +0 -1
  816. package/dist/server/loader-registry.d.ts +0 -55
  817. package/dist/server/loader-registry.d.ts.map +0 -1
  818. package/dist/server/loader-registry.js +0 -132
  819. package/dist/server/loader-registry.js.map +0 -1
  820. package/dist/server/request-context.d.ts +0 -226
  821. package/dist/server/request-context.d.ts.map +0 -1
  822. package/dist/server/request-context.js +0 -290
  823. package/dist/server/request-context.js.map +0 -1
  824. package/dist/server/root-layout.d.ts +0 -4
  825. package/dist/server/root-layout.d.ts.map +0 -1
  826. package/dist/server/root-layout.js +0 -5
  827. package/dist/server/root-layout.js.map +0 -1
  828. package/dist/server.d.ts +0 -15
  829. package/dist/server.d.ts.map +0 -1
  830. package/dist/server.js +0 -20
  831. package/dist/server.js.map +0 -1
  832. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  833. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  834. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  835. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  836. package/dist/ssr/index.d.ts +0 -98
  837. package/dist/ssr/index.d.ts.map +0 -1
  838. package/dist/ssr/index.js +0 -158
  839. package/dist/ssr/index.js.map +0 -1
  840. package/dist/static-handler.d.ts +0 -50
  841. package/dist/static-handler.d.ts.map +0 -1
  842. package/dist/static-handler.gen.d.ts +0 -5
  843. package/dist/static-handler.gen.d.ts.map +0 -1
  844. package/dist/static-handler.gen.js +0 -5
  845. package/dist/static-handler.gen.js.map +0 -1
  846. package/dist/static-handler.js +0 -29
  847. package/dist/static-handler.js.map +0 -1
  848. package/dist/theme/ThemeProvider.d.ts +0 -20
  849. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  850. package/dist/theme/ThemeProvider.js +0 -240
  851. package/dist/theme/ThemeProvider.js.map +0 -1
  852. package/dist/theme/ThemeScript.d.ts +0 -48
  853. package/dist/theme/ThemeScript.d.ts.map +0 -1
  854. package/dist/theme/ThemeScript.js +0 -13
  855. package/dist/theme/ThemeScript.js.map +0 -1
  856. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  857. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  858. package/dist/theme/__tests__/theme.test.js +0 -103
  859. package/dist/theme/__tests__/theme.test.js.map +0 -1
  860. package/dist/theme/constants.d.ts +0 -29
  861. package/dist/theme/constants.d.ts.map +0 -1
  862. package/dist/theme/constants.js +0 -48
  863. package/dist/theme/constants.js.map +0 -1
  864. package/dist/theme/index.d.ts +0 -31
  865. package/dist/theme/index.d.ts.map +0 -1
  866. package/dist/theme/index.js +0 -36
  867. package/dist/theme/index.js.map +0 -1
  868. package/dist/theme/theme-context.d.ts +0 -40
  869. package/dist/theme/theme-context.d.ts.map +0 -1
  870. package/dist/theme/theme-context.js +0 -60
  871. package/dist/theme/theme-context.js.map +0 -1
  872. package/dist/theme/theme-script.d.ts +0 -27
  873. package/dist/theme/theme-script.d.ts.map +0 -1
  874. package/dist/theme/theme-script.js +0 -147
  875. package/dist/theme/theme-script.js.map +0 -1
  876. package/dist/theme/types.d.ts +0 -163
  877. package/dist/theme/types.d.ts.map +0 -1
  878. package/dist/theme/types.js +0 -11
  879. package/dist/theme/types.js.map +0 -1
  880. package/dist/theme/use-theme.d.ts +0 -12
  881. package/dist/theme/use-theme.d.ts.map +0 -1
  882. package/dist/theme/use-theme.js +0 -40
  883. package/dist/theme/use-theme.js.map +0 -1
  884. package/dist/types.d.ts +0 -1479
  885. package/dist/types.d.ts.map +0 -1
  886. package/dist/types.js +0 -10
  887. package/dist/types.js.map +0 -1
  888. package/dist/urls.d.ts +0 -441
  889. package/dist/urls.d.ts.map +0 -1
  890. package/dist/urls.gen.d.ts +0 -8
  891. package/dist/urls.gen.d.ts.map +0 -1
  892. package/dist/urls.gen.js +0 -8
  893. package/dist/urls.gen.js.map +0 -1
  894. package/dist/urls.js +0 -443
  895. package/dist/urls.js.map +0 -1
  896. package/dist/use-loader.d.ts +0 -127
  897. package/dist/use-loader.d.ts.map +0 -1
  898. package/dist/use-loader.js +0 -237
  899. package/dist/use-loader.js.map +0 -1
  900. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  901. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  902. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  903. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  904. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  905. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  906. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  907. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  908. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  909. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  910. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  911. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  912. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  913. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  914. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  915. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  916. package/dist/vite/ast-handler-extract.d.ts +0 -49
  917. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  918. package/dist/vite/ast-handler-extract.js +0 -249
  919. package/dist/vite/ast-handler-extract.js.map +0 -1
  920. package/dist/vite/expose-action-id.d.ts +0 -19
  921. package/dist/vite/expose-action-id.d.ts.map +0 -1
  922. package/dist/vite/expose-action-id.js +0 -250
  923. package/dist/vite/expose-action-id.js.map +0 -1
  924. package/dist/vite/expose-id-utils.d.ts +0 -69
  925. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  926. package/dist/vite/expose-id-utils.js +0 -289
  927. package/dist/vite/expose-id-utils.js.map +0 -1
  928. package/dist/vite/expose-internal-ids.d.ts +0 -22
  929. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  930. package/dist/vite/expose-internal-ids.js +0 -886
  931. package/dist/vite/expose-internal-ids.js.map +0 -1
  932. package/dist/vite/index.d.ts +0 -149
  933. package/dist/vite/index.d.ts.map +0 -1
  934. package/dist/vite/index.js.map +0 -1
  935. package/dist/vite/index.named-routes.gen.ts +0 -103
  936. package/dist/vite/package-resolution.d.ts +0 -43
  937. package/dist/vite/package-resolution.d.ts.map +0 -1
  938. package/dist/vite/package-resolution.js +0 -112
  939. package/dist/vite/package-resolution.js.map +0 -1
  940. package/dist/vite/virtual-entries.d.ts +0 -25
  941. package/dist/vite/virtual-entries.d.ts.map +0 -1
  942. package/dist/vite/virtual-entries.js +0 -110
  943. package/dist/vite/virtual-entries.js.map +0 -1
@@ -10,14 +10,21 @@ declare global {
10
10
  /**
11
11
  * Cloudflare Edge Cache Store
12
12
  *
13
- * Production cache store using Cloudflare's Cache API.
14
- * Handles SWR atomically - get() checks staleness and marks REVALIDATING in one operation.
13
+ * Production cache store using Cloudflare's Cache API (L1) with optional
14
+ * KV persistence (L2).
15
+ *
16
+ * L1 (Cache API): Per-colo, fast, ephemeral. Handles SWR atomically.
17
+ * L2 (KV): Global, persistent, ~50ms reads. Auto-warms cold colos.
18
+ *
19
+ * Read flow: L1 hit → serve | L1 miss → L2 hit → serve + promote to L1 | both miss → render
20
+ * Write flow: L1 write + L2 write (both via waitUntil)
15
21
  *
16
22
  * Features:
17
23
  * - Extended TTL for SWR window (max-age = ttl + swr)
18
24
  * - Staleness via x-edge-cache-stale-at header
19
- * - Atomic REVALIDATING status for thundering herd prevention
25
+ * - Atomic REVALIDATING status for thundering herd prevention (L1 only)
20
26
  * - Non-blocking writes via waitUntil
27
+ * - KV L2 for cross-colo cache persistence
21
28
  */
22
29
 
23
30
  import type {
@@ -68,6 +75,67 @@ export interface ExecutionContext {
68
75
  passThroughOnException(): void;
69
76
  }
70
77
 
78
+ /**
79
+ * Minimal Cloudflare KV Namespace interface.
80
+ * Avoids hard dependency on @cloudflare/workers-types.
81
+ */
82
+ export interface KVNamespace {
83
+ get(key: string, options?: { type?: string }): Promise<any>;
84
+ put(
85
+ key: string,
86
+ value: string,
87
+ options?: { expirationTtl?: number },
88
+ ): Promise<void>;
89
+ delete(key: string): Promise<void>;
90
+ }
91
+
92
+ /**
93
+ * KV envelope for segment cache entries.
94
+ * @internal
95
+ */
96
+ interface KVSegmentEnvelope {
97
+ /** Cached segment data */
98
+ d: CachedEntryData;
99
+ /** When entry becomes stale (ms epoch) */
100
+ s: number;
101
+ /** When entry hard-expires (ms epoch) */
102
+ e: number;
103
+ }
104
+
105
+ /**
106
+ * KV envelope for function cache entries ("use cache").
107
+ * @internal
108
+ */
109
+ interface KVItemEnvelope {
110
+ /** RSC-serialized return value */
111
+ v: string;
112
+ /** Handle data */
113
+ h?: Record<string, Record<string, unknown[]>>;
114
+ /** When entry becomes stale (ms epoch) */
115
+ s: number;
116
+ /** When entry hard-expires (ms epoch) */
117
+ e: number;
118
+ }
119
+
120
+ /**
121
+ * KV envelope for document cache entries.
122
+ * @internal
123
+ */
124
+ interface KVResponseEnvelope {
125
+ /** Response body as base64-encoded string (safe for binary payloads) */
126
+ b: string;
127
+ /** HTTP status code */
128
+ st: number;
129
+ /** HTTP status text */
130
+ stx: string;
131
+ /** Serialized headers as key-value pairs */
132
+ hd: [string, string][];
133
+ /** When entry becomes stale (ms epoch) */
134
+ s: number;
135
+ /** When entry hard-expires (ms epoch) */
136
+ e: number;
137
+ }
138
+
71
139
  export interface CFCacheStoreOptions<TEnv = unknown> {
72
140
  /**
73
141
  * Cache namespace. If not provided, uses caches.default (recommended).
@@ -98,6 +166,20 @@ export interface CFCacheStoreOptions<TEnv = unknown> {
98
166
  */
99
167
  ctx: ExecutionContext;
100
168
 
169
+ /**
170
+ * Optional KV namespace for L2 cache persistence.
171
+ *
172
+ * When provided, KV acts as a global fallback behind the per-colo Cache API.
173
+ * On L1 miss, KV is checked and hits are promoted back to L1.
174
+ * On writes, data is persisted to both L1 and KV.
175
+ *
176
+ * @example
177
+ * ```typescript
178
+ * new CFCacheStore({ ctx: env.ctx, kv: env.CACHE_KV })
179
+ * ```
180
+ */
181
+ kv?: KVNamespace;
182
+
101
183
  /**
102
184
  * Cache version string override. When this changes, all cached entries are
103
185
  * effectively invalidated (new keys won't match old entries).
@@ -163,6 +245,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
163
245
  private readonly baseUrl: string;
164
246
  private readonly waitUntil?: (fn: () => Promise<void>) => void;
165
247
  private readonly version?: string;
248
+ private readonly kv?: KVNamespace;
166
249
 
167
250
  constructor(options: CFCacheStoreOptions<TEnv>) {
168
251
  if (!options.ctx) {
@@ -179,6 +262,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
179
262
  this.version = options.version ?? VERSION;
180
263
  this.keyGenerator = options.keyGenerator;
181
264
  this.waitUntil = (fn) => options.ctx.waitUntil(fn());
265
+ this.kv = options.kv;
182
266
  }
183
267
 
184
268
  /**
@@ -232,6 +316,10 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
232
316
  return caches.default;
233
317
  }
234
318
 
319
+ // ============================================================================
320
+ // Segment Cache Methods
321
+ // ============================================================================
322
+
235
323
  /**
236
324
  * Get cached entry data by key.
237
325
  *
@@ -240,7 +328,8 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
240
328
  * - If already REVALIDATING (and recent), returns shouldRevalidate: false
241
329
  * - If fresh, returns shouldRevalidate: false
242
330
  *
243
- * The atomic mark prevents thundering herd - only first request triggers revalidation.
331
+ * On L1 miss, falls back to KV (L2) if configured.
332
+ * KV hits are promoted to L1 in the background.
244
333
  */
245
334
  async get(key: string): Promise<CacheGetResult | null> {
246
335
  try {
@@ -249,7 +338,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
249
338
  const response = await cache.match(request);
250
339
 
251
340
  if (!response) {
252
- return null;
341
+ return this.kvGetSegment(key);
253
342
  }
254
343
 
255
344
  // Read status headers
@@ -292,6 +381,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
292
381
  /**
293
382
  * Store entry data with TTL and optional SWR window.
294
383
  * Uses waitUntil for non-blocking write when available.
384
+ * When KV is configured, also persists to L2.
295
385
  */
296
386
  async set(
297
387
  key: string,
@@ -308,7 +398,8 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
308
398
  const totalTtl = ttl + swrWindow;
309
399
  const staleAt = Date.now() + ttl * 1000;
310
400
 
311
- const response = new Response(JSON.stringify(data), {
401
+ const body = JSON.stringify(data);
402
+ const response = new Response(body, {
312
403
  headers: {
313
404
  "Content-Type": "application/json",
314
405
  "Cache-Control": `public, max-age=${totalTtl}`,
@@ -328,18 +419,35 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
328
419
  // Blocking fallback
329
420
  await putPromise;
330
421
  }
422
+
423
+ // L2: persist to KV
424
+ this.kvSetSegment(key, data, staleAt, totalTtl);
331
425
  } catch (error) {
332
426
  console.error("[CFCacheStore] set failed:", error);
333
427
  }
334
428
  }
335
429
 
336
430
  /**
337
- * Delete a cached entry
431
+ * Delete a cached entry from L1 and L2.
338
432
  */
339
433
  async delete(key: string): Promise<boolean> {
340
434
  try {
341
435
  const cache = await this.getCache();
342
- return await cache.delete(this.keyToRequest(key));
436
+ const result = await cache.delete(this.keyToRequest(key));
437
+
438
+ // L2: delete from KV
439
+ if (this.kv && this.waitUntil) {
440
+ const kvKey = this.toKVKey(key);
441
+ this.waitUntil(async () => {
442
+ try {
443
+ await this.kv!.delete(kvKey);
444
+ } catch {
445
+ // KV delete failures are non-critical
446
+ }
447
+ });
448
+ }
449
+
450
+ return result;
343
451
  } catch (error) {
344
452
  console.error("[CFCacheStore] delete failed:", error);
345
453
  return false;
@@ -353,6 +461,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
353
461
  /**
354
462
  * Get a cached Response by key (for document-level caching).
355
463
  * Returns the response and whether it should be revalidated (SWR).
464
+ * Falls back to KV (L2) on L1 miss.
356
465
  */
357
466
  async getResponse(
358
467
  key: string,
@@ -363,7 +472,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
363
472
  const response = await cache.match(request);
364
473
 
365
474
  if (!response || response.status !== 200) {
366
- return null;
475
+ return this.kvGetResponse(key);
367
476
  }
368
477
 
369
478
  // Check staleness
@@ -382,6 +491,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
382
491
 
383
492
  /**
384
493
  * Store a Response with TTL and optional SWR window (for document-level caching).
494
+ * When KV is configured, also persists to L2.
385
495
  */
386
496
  async putResponse(
387
497
  key: string,
@@ -398,12 +508,19 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
398
508
  const totalTtl = ttl + swrWindow;
399
509
  const staleAt = Date.now() + ttl * 1000;
400
510
 
511
+ // Clone body for potential KV write before consuming it for L1
512
+ const [l1Body, kvBody] = this.kv
513
+ ? response.body
514
+ ? response.body.tee()
515
+ : [null, null]
516
+ : [response.body, null];
517
+
401
518
  // Clone and add cache headers
402
519
  const headers = new Headers(response.headers);
403
520
  headers.set("Cache-Control", `public, max-age=${totalTtl}`);
404
521
  headers.set(CACHE_STALE_AT_HEADER, String(staleAt));
405
522
 
406
- const toCache = new Response(response.body, {
523
+ const toCache = new Response(l1Body, {
407
524
  status: response.status,
408
525
  statusText: response.statusText,
409
526
  headers,
@@ -420,6 +537,36 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
420
537
  // Blocking fallback
421
538
  await putPromise;
422
539
  }
540
+
541
+ // L2: persist to KV (KV requires expirationTtl >= 60s)
542
+ if (this.kv && this.waitUntil && totalTtl >= 60) {
543
+ const kvKey = this.toKVKey(`doc:${key}`);
544
+ const headersArray: [string, string][] = [];
545
+ response.headers.forEach((v, k) => headersArray.push([k, v]));
546
+ // Read body as ArrayBuffer and encode to base64 to preserve binary payloads
547
+ const bodyBuf = kvBody
548
+ ? await new Response(kvBody).arrayBuffer()
549
+ : new ArrayBuffer(0);
550
+ const bodyBase64 = bufferToBase64(bodyBuf);
551
+
552
+ this.waitUntil(async () => {
553
+ try {
554
+ const envelope: KVResponseEnvelope = {
555
+ b: bodyBase64,
556
+ st: response.status,
557
+ stx: response.statusText,
558
+ hd: headersArray,
559
+ s: staleAt,
560
+ e: staleAt + swrWindow * 1000,
561
+ };
562
+ await this.kv!.put(kvKey, JSON.stringify(envelope), {
563
+ expirationTtl: totalTtl,
564
+ });
565
+ } catch (error) {
566
+ console.error("[CFCacheStore] KV putResponse failed:", error);
567
+ }
568
+ });
569
+ }
423
570
  } catch (error) {
424
571
  console.error("[CFCacheStore] putResponse failed:", error);
425
572
  }
@@ -432,6 +579,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
432
579
  /**
433
580
  * Get a cached function result by key.
434
581
  * Follows the same SWR pattern as get() for segment caching.
582
+ * Falls back to KV (L2) on L1 miss.
435
583
  */
436
584
  async getItem(key: string): Promise<CacheItemResult | null> {
437
585
  try {
@@ -439,7 +587,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
439
587
  const request = this.keyToRequest(`fn:${key}`);
440
588
  const response = await cache.match(request);
441
589
 
442
- if (!response) return null;
590
+ if (!response) return this.kvGetItem(key);
443
591
 
444
592
  const staleAt = Number(
445
593
  response.headers.get(CACHE_STALE_AT_HEADER) ?? "0",
@@ -485,6 +633,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
485
633
 
486
634
  /**
487
635
  * Store a function result with TTL and optional SWR window.
636
+ * When KV is configured, also persists to L2.
488
637
  */
489
638
  async setItem(
490
639
  key: string,
@@ -519,11 +668,35 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
519
668
  } else {
520
669
  await putPromise;
521
670
  }
671
+
672
+ // L2: persist to KV (KV requires expirationTtl >= 60s)
673
+ if (this.kv && this.waitUntil && totalTtl >= 60) {
674
+ const kvKey = this.toKVKey(`fn:${key}`);
675
+ this.waitUntil(async () => {
676
+ try {
677
+ const envelope: KVItemEnvelope = {
678
+ v: value,
679
+ h: options?.handles,
680
+ s: staleAt,
681
+ e: staleAt + swrWindow * 1000,
682
+ };
683
+ await this.kv!.put(kvKey, JSON.stringify(envelope), {
684
+ expirationTtl: totalTtl,
685
+ });
686
+ } catch (error) {
687
+ console.error("[CFCacheStore] KV setItem failed:", error);
688
+ }
689
+ });
690
+ }
522
691
  } catch (error) {
523
692
  console.error("[CFCacheStore] setItem failed:", error);
524
693
  }
525
694
  }
526
695
 
696
+ // ============================================================================
697
+ // Key Helpers
698
+ // ============================================================================
699
+
527
700
  /**
528
701
  * Convert string key to Request object for CF Cache API.
529
702
  * Includes version in URL if specified (for cache invalidation on code changes).
@@ -537,4 +710,273 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
537
710
  method: "GET",
538
711
  });
539
712
  }
713
+
714
+ /**
715
+ * Convert string key to KV key string.
716
+ * Uses same version prefix as Cache API for consistent invalidation.
717
+ * @internal
718
+ */
719
+ private toKVKey(key: string): string {
720
+ const versionPath = this.version ? `v/${this.version}/` : "";
721
+ return `${versionPath}${key}`;
722
+ }
723
+
724
+ // ============================================================================
725
+ // KV L2 Helpers
726
+ // ============================================================================
727
+
728
+ /**
729
+ * KV fallback for segment cache reads.
730
+ * Returns null if KV is not configured, entry is missing, or expired.
731
+ * Promotes hits to L1 via waitUntil.
732
+ * @internal
733
+ */
734
+ private async kvGetSegment(key: string): Promise<CacheGetResult | null> {
735
+ if (!this.kv) return null;
736
+
737
+ try {
738
+ const kvKey = this.toKVKey(key);
739
+ const raw = await this.kv.get(kvKey, { type: "json" });
740
+ if (!raw) return null;
741
+
742
+ const envelope = raw as KVSegmentEnvelope;
743
+ const now = Date.now();
744
+
745
+ // Hard-expired — treat as miss
746
+ if (now > envelope.e) return null;
747
+
748
+ const shouldRevalidate = now > envelope.s;
749
+
750
+ // Promote to L1 in background
751
+ this.promoteSegmentToL1(key, envelope);
752
+
753
+ return { data: envelope.d, shouldRevalidate };
754
+ } catch (error) {
755
+ console.error("[CFCacheStore] KV get failed:", error);
756
+ return null;
757
+ }
758
+ }
759
+
760
+ /**
761
+ * Write segment data to KV.
762
+ * @internal
763
+ */
764
+ private kvSetSegment(
765
+ key: string,
766
+ data: CachedEntryData,
767
+ staleAt: number,
768
+ totalTtl: number,
769
+ ): void {
770
+ // KV requires expirationTtl >= 60s. Skip write for short-lived entries.
771
+ if (!this.kv || !this.waitUntil || totalTtl < 60) return;
772
+
773
+ const kvKey = this.toKVKey(key);
774
+ const swrWindow = totalTtl * 1000 - (staleAt - Date.now());
775
+ const expiresAt = staleAt + swrWindow;
776
+
777
+ this.waitUntil(async () => {
778
+ try {
779
+ const envelope: KVSegmentEnvelope = {
780
+ d: data,
781
+ s: staleAt,
782
+ e: expiresAt,
783
+ };
784
+ await this.kv!.put(kvKey, JSON.stringify(envelope), {
785
+ expirationTtl: totalTtl,
786
+ });
787
+ } catch (error) {
788
+ console.error("[CFCacheStore] KV set failed:", error);
789
+ }
790
+ });
791
+ }
792
+
793
+ /**
794
+ * Promote segment data from KV to L1 Cache API.
795
+ * @internal
796
+ */
797
+ private promoteSegmentToL1(key: string, envelope: KVSegmentEnvelope): void {
798
+ if (!this.waitUntil) return;
799
+
800
+ this.waitUntil(async () => {
801
+ try {
802
+ const now = Date.now();
803
+ const remainingTtl = Math.max(1, Math.floor((envelope.e - now) / 1000));
804
+ const cache = await this.getCache();
805
+ const request = this.keyToRequest(key);
806
+
807
+ const response = new Response(JSON.stringify(envelope.d), {
808
+ headers: {
809
+ "Content-Type": "application/json",
810
+ "Cache-Control": `public, max-age=${remainingTtl}`,
811
+ [CACHE_STALE_AT_HEADER]: String(envelope.s),
812
+ [CACHE_STATUS_HEADER]: "HIT",
813
+ },
814
+ });
815
+
816
+ await cache.put(request, response);
817
+ } catch (error) {
818
+ console.error("[CFCacheStore] L1 promote failed:", error);
819
+ }
820
+ });
821
+ }
822
+
823
+ /**
824
+ * KV fallback for function cache reads.
825
+ * @internal
826
+ */
827
+ private async kvGetItem(key: string): Promise<CacheItemResult | null> {
828
+ if (!this.kv) return null;
829
+
830
+ try {
831
+ const kvKey = this.toKVKey(`fn:${key}`);
832
+ const raw = await this.kv.get(kvKey, { type: "json" });
833
+ if (!raw) return null;
834
+
835
+ const envelope = raw as KVItemEnvelope;
836
+ const now = Date.now();
837
+
838
+ if (now > envelope.e) return null;
839
+
840
+ const shouldRevalidate = now > envelope.s;
841
+
842
+ // Promote to L1
843
+ this.promoteItemToL1(key, envelope);
844
+
845
+ return {
846
+ value: envelope.v,
847
+ handles: envelope.h,
848
+ shouldRevalidate,
849
+ };
850
+ } catch (error) {
851
+ console.error("[CFCacheStore] KV getItem failed:", error);
852
+ return null;
853
+ }
854
+ }
855
+
856
+ /**
857
+ * Promote function cache data from KV to L1.
858
+ * @internal
859
+ */
860
+ private promoteItemToL1(key: string, envelope: KVItemEnvelope): void {
861
+ if (!this.waitUntil) return;
862
+
863
+ this.waitUntil(async () => {
864
+ try {
865
+ const now = Date.now();
866
+ const remainingTtl = Math.max(1, Math.floor((envelope.e - now) / 1000));
867
+ const cache = await this.getCache();
868
+ const request = this.keyToRequest(`fn:${key}`);
869
+
870
+ const body = JSON.stringify({ value: envelope.v, handles: envelope.h });
871
+ const response = new Response(body, {
872
+ headers: {
873
+ "Content-Type": "application/json",
874
+ "Cache-Control": `public, max-age=${remainingTtl}`,
875
+ [CACHE_STALE_AT_HEADER]: String(envelope.s),
876
+ [CACHE_STATUS_HEADER]: "HIT",
877
+ },
878
+ });
879
+
880
+ await cache.put(request, response);
881
+ } catch (error) {
882
+ console.error("[CFCacheStore] L1 item promote failed:", error);
883
+ }
884
+ });
885
+ }
886
+
887
+ /**
888
+ * KV fallback for document cache reads.
889
+ * @internal
890
+ */
891
+ private async kvGetResponse(
892
+ key: string,
893
+ ): Promise<{ response: Response; shouldRevalidate: boolean } | null> {
894
+ if (!this.kv) return null;
895
+
896
+ try {
897
+ const kvKey = this.toKVKey(`doc:${key}`);
898
+ const raw = await this.kv.get(kvKey, { type: "json" });
899
+ if (!raw) return null;
900
+
901
+ const envelope = raw as KVResponseEnvelope;
902
+ const now = Date.now();
903
+
904
+ if (now > envelope.e) return null;
905
+
906
+ const shouldRevalidate = now > envelope.s;
907
+
908
+ // Reconstruct Response (decode base64 → binary)
909
+ const headers = new Headers(envelope.hd);
910
+ const bodyBuffer = base64ToBuffer(envelope.b);
911
+ const response = new Response(bodyBuffer, {
912
+ status: envelope.st,
913
+ statusText: envelope.stx,
914
+ headers,
915
+ });
916
+
917
+ // Promote to L1
918
+ this.promoteResponseToL1(key, envelope);
919
+
920
+ return { response, shouldRevalidate };
921
+ } catch (error) {
922
+ console.error("[CFCacheStore] KV getResponse failed:", error);
923
+ return null;
924
+ }
925
+ }
926
+
927
+ /**
928
+ * Promote document cache data from KV to L1.
929
+ * @internal
930
+ */
931
+ private promoteResponseToL1(key: string, envelope: KVResponseEnvelope): void {
932
+ if (!this.waitUntil) return;
933
+
934
+ this.waitUntil(async () => {
935
+ try {
936
+ const now = Date.now();
937
+ const remainingTtl = Math.max(1, Math.floor((envelope.e - now) / 1000));
938
+ const cache = await this.getCache();
939
+ const request = this.keyToRequest(`doc:${key}`);
940
+
941
+ const headers = new Headers(envelope.hd);
942
+ headers.set("Cache-Control", `public, max-age=${remainingTtl}`);
943
+ headers.set(CACHE_STALE_AT_HEADER, String(envelope.s));
944
+
945
+ const bodyBuffer = base64ToBuffer(envelope.b);
946
+ const response = new Response(bodyBuffer, {
947
+ status: envelope.st,
948
+ statusText: envelope.stx,
949
+ headers,
950
+ });
951
+
952
+ await cache.put(request, response);
953
+ } catch (error) {
954
+ console.error("[CFCacheStore] L1 response promote failed:", error);
955
+ }
956
+ });
957
+ }
958
+ }
959
+
960
+ // ============================================================================
961
+ // Base64 Helpers (binary-safe response body encoding for KV)
962
+ // ============================================================================
963
+
964
+ /** Encode ArrayBuffer to base64 string. */
965
+ function bufferToBase64(buffer: ArrayBuffer): string {
966
+ const bytes = new Uint8Array(buffer);
967
+ let binary = "";
968
+ for (let i = 0; i < bytes.length; i++) {
969
+ binary += String.fromCharCode(bytes[i]!);
970
+ }
971
+ return btoa(binary);
972
+ }
973
+
974
+ /** Decode base64 string to ArrayBuffer. */
975
+ function base64ToBuffer(base64: string): ArrayBuffer {
976
+ const binary = atob(base64);
977
+ const bytes = new Uint8Array(binary.length);
978
+ for (let i = 0; i < binary.length; i++) {
979
+ bytes[i] = binary.charCodeAt(i);
980
+ }
981
+ return bytes.buffer;
540
982
  }
@@ -10,7 +10,11 @@
10
10
  */
11
11
 
12
12
  // Public API
13
- export { CFCacheStore, type CFCacheStoreOptions } from "./cf-cache-store.js";
13
+ export {
14
+ CFCacheStore,
15
+ type CFCacheStoreOptions,
16
+ type KVNamespace,
17
+ } from "./cf-cache-store.js";
14
18
 
15
19
  // Header constants for debugging and inspection
16
20
  export {
@@ -13,6 +13,7 @@
13
13
 
14
14
  import type { MiddlewareFn, MiddlewareContext } from "../router/middleware.js";
15
15
  import { getRequestContext } from "../server/request-context.js";
16
+ import { mayNeedSSR } from "../rsc/ssr-setup.js";
16
17
  import { sortedSearchString } from "./cache-key-utils.js";
17
18
  import { runBackground } from "./background-task.js";
18
19
 
@@ -204,18 +205,24 @@ export function createDocumentCacheMiddleware<TEnv = any>(
204
205
  ): Promise<Response> {
205
206
  const url = ctx.url;
206
207
 
208
+ // Use the original request URL for _rsc* param detection and cache key
209
+ // differentiation. ctx.url is stripped of _rsc* params by the middleware
210
+ // pipeline (stripInternalParams), so _rsc_partial, _rsc_segments, etc.
211
+ // are not visible on ctx.url in production.
212
+ const rawUrl = new URL(ctx.request.url);
213
+
207
214
  // Only cache GET requests — mutations and other methods must not be cached
208
215
  if (ctx.request.method !== "GET") {
209
216
  return next();
210
217
  }
211
218
 
212
219
  // Skip RSC action requests (mutations shouldn't be cached)
213
- if (url.searchParams.has("_rsc_action")) {
220
+ if (rawUrl.searchParams.has("_rsc_action")) {
214
221
  return next();
215
222
  }
216
223
 
217
224
  // Skip loader requests (have their own caching)
218
- if (url.searchParams.has("_rsc_loader")) {
225
+ if (rawUrl.searchParams.has("_rsc_loader")) {
219
226
  return next();
220
227
  }
221
228
 
@@ -241,9 +248,12 @@ export function createDocumentCacheMiddleware<TEnv = any>(
241
248
  return next();
242
249
  }
243
250
 
244
- // Determine request type for cache key differentiation
245
- const isPartial = url.searchParams.has("_rsc_partial");
246
- const typeLabel = isPartial ? "RSC" : "HTML";
251
+ // Determine request type for cache key differentiation.
252
+ // Uses rawUrl for _rsc* param checks and mayNeedSSR for Accept-based
253
+ // detection. Full-document RSC fetches must not share the HTML cache slot.
254
+ const isPartial = rawUrl.searchParams.has("_rsc_partial");
255
+ const isRscRequest = !mayNeedSSR(ctx.request, rawUrl);
256
+ const typeLabel = isRscRequest ? "RSC" : "HTML";
247
257
 
248
258
  // Track whether next() has been called so the catch block knows
249
259
  // whether it is safe to fall through to the handler.
@@ -254,10 +264,10 @@ export function createDocumentCacheMiddleware<TEnv = any>(
254
264
  // gracefully to the origin handler instead of rejecting the request.
255
265
  // This is a deliberate fail-open-to-origin policy: the fallback is
256
266
  // "serve uncached from origin", not "use a different cache key".
257
- const clientSegments = url.searchParams.get("_rsc_segments") || "";
267
+ const clientSegments = rawUrl.searchParams.get("_rsc_segments") || "";
258
268
  const segmentHash =
259
269
  isPartial && clientSegments ? `:${hashSegmentIds(clientSegments)}` : "";
260
- const typeSuffix = isPartial ? ":rsc" : ":html";
270
+ const typeSuffix = isRscRequest ? ":rsc" : ":html";
261
271
 
262
272
  let searchSuffix = "";
263
273
  if (!keyGenerator) {