@rangojs/router 0.0.0-experimental.tapabs2 → 0.1.0

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 (1320) hide show
  1. package/dist/bin/rango.js +8 -40
  2. package/dist/types/__internal.d.ts +127 -0
  3. package/dist/types/bin/rango.d.ts +1 -0
  4. package/dist/types/browser/action-coordinator.d.ts +57 -0
  5. package/dist/types/browser/action-fence.d.ts +33 -0
  6. package/dist/types/browser/app-shell.d.ts +34 -0
  7. package/dist/types/browser/app-version.d.ts +6 -0
  8. package/dist/types/browser/connection-warmup.d.ts +31 -0
  9. package/dist/types/browser/cookie-name.d.ts +66 -0
  10. package/dist/types/browser/event-controller.d.ts +221 -0
  11. package/dist/types/browser/history-state.d.ts +26 -0
  12. package/dist/types/browser/index.d.ts +1 -0
  13. package/dist/types/browser/intercept-utils.d.ts +30 -0
  14. package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
  15. package/dist/types/browser/link-interceptor.d.ts +43 -0
  16. package/dist/types/browser/logging.d.ts +33 -0
  17. package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
  18. package/dist/types/browser/navigation-bridge.d.ts +27 -0
  19. package/dist/types/browser/navigation-client.d.ts +17 -0
  20. package/dist/types/browser/navigation-store-handle.d.ts +25 -0
  21. package/dist/types/browser/navigation-store.d.ts +95 -0
  22. package/dist/types/browser/navigation-transaction.d.ts +75 -0
  23. package/dist/types/browser/network-error-handler.d.ts +35 -0
  24. package/dist/types/browser/partial-update.d.ts +61 -0
  25. package/dist/types/browser/prefetch/cache.d.ts +183 -0
  26. package/dist/types/browser/prefetch/fetch.d.ts +52 -0
  27. package/dist/types/browser/prefetch/observer.d.ts +27 -0
  28. package/dist/types/browser/prefetch/policy.d.ts +13 -0
  29. package/dist/types/browser/prefetch/queue.d.ts +48 -0
  30. package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
  31. package/dist/types/browser/rango-state.d.ts +52 -0
  32. package/dist/types/browser/react/Link.d.ts +140 -0
  33. package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
  34. package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
  35. package/dist/types/browser/react/context.d.ts +54 -0
  36. package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
  37. package/dist/types/browser/react/index.d.ts +1 -0
  38. package/dist/types/browser/react/location-state-shared.d.ts +162 -0
  39. package/dist/types/browser/react/location-state.d.ts +29 -0
  40. package/dist/types/browser/react/mount-context.d.ts +23 -0
  41. package/dist/types/browser/react/nonce-context.d.ts +14 -0
  42. package/dist/types/browser/react/shallow-equal.d.ts +5 -0
  43. package/dist/types/browser/react/use-action.d.ts +61 -0
  44. package/dist/types/browser/react/use-handle.d.ts +21 -0
  45. package/dist/types/browser/react/use-href.d.ts +32 -0
  46. package/dist/types/browser/react/use-link-status.d.ts +36 -0
  47. package/dist/types/browser/react/use-mount.d.ts +24 -0
  48. package/dist/types/browser/react/use-navigation.d.ts +15 -0
  49. package/dist/types/browser/react/use-params.d.ts +21 -0
  50. package/dist/types/browser/react/use-pathname.d.ts +13 -0
  51. package/dist/types/browser/react/use-reverse.d.ts +40 -0
  52. package/dist/types/browser/react/use-router.d.ts +23 -0
  53. package/dist/types/browser/react/use-search-params.d.ts +19 -0
  54. package/dist/types/browser/react/use-segments.d.ts +29 -0
  55. package/dist/types/browser/response-adapter.d.ts +58 -0
  56. package/dist/types/browser/rsc-router.d.ts +141 -0
  57. package/dist/types/browser/scroll-restoration.d.ts +103 -0
  58. package/dist/types/browser/segment-reconciler.d.ts +74 -0
  59. package/dist/types/browser/segment-structure-assert.d.ts +16 -0
  60. package/dist/types/browser/server-action-bridge.d.ts +29 -0
  61. package/dist/types/browser/types.d.ts +530 -0
  62. package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
  63. package/dist/types/build/collect-fallback-refs.d.ts +5 -0
  64. package/dist/types/build/generate-manifest.d.ts +100 -0
  65. package/dist/types/build/generate-route-types.d.ts +8 -0
  66. package/dist/types/build/index.d.ts +21 -0
  67. package/dist/types/build/prefix-tree-utils.d.ts +56 -0
  68. package/dist/types/build/route-trie.d.ts +89 -0
  69. package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
  70. package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
  71. package/dist/types/build/route-types/codegen.d.ts +16 -0
  72. package/dist/types/build/route-types/include-resolution.d.ts +74 -0
  73. package/dist/types/build/route-types/param-extraction.d.ts +13 -0
  74. package/dist/types/build/route-types/per-module-writer.d.ts +18 -0
  75. package/dist/types/build/route-types/router-processing.d.ts +82 -0
  76. package/dist/types/build/route-types/scan-filter.d.ts +17 -0
  77. package/dist/types/build/route-types/source-scan.d.ts +13 -0
  78. package/dist/types/build/runtime-discovery.d.ts +24 -0
  79. package/dist/types/cache/background-task.d.ts +21 -0
  80. package/dist/types/cache/cache-error.d.ts +71 -0
  81. package/dist/types/cache/cache-key-utils.d.ts +35 -0
  82. package/dist/types/cache/cache-policy.d.ts +59 -0
  83. package/dist/types/cache/cache-runtime.d.ts +51 -0
  84. package/dist/types/cache/cache-scope.d.ts +134 -0
  85. package/dist/types/cache/cache-tag.d.ts +79 -0
  86. package/dist/types/cache/cf/cf-base64.d.ts +4 -0
  87. package/dist/types/cache/cf/cf-cache-constants.d.ts +105 -0
  88. package/dist/types/cache/cf/cf-cache-store.d.ts +588 -0
  89. package/dist/types/cache/cf/cf-cache-types.d.ts +363 -0
  90. package/dist/types/cache/cf/cf-kv-utils.d.ts +22 -0
  91. package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
  92. package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
  93. package/dist/types/cache/cf/index.d.ts +4 -0
  94. package/dist/types/cache/document-cache.d.ts +69 -0
  95. package/dist/types/cache/handle-capture.d.ts +23 -0
  96. package/dist/types/cache/handle-snapshot.d.ts +39 -0
  97. package/dist/types/cache/index.d.ts +7 -0
  98. package/dist/types/cache/memory-segment-store.d.ts +163 -0
  99. package/dist/types/cache/profile-registry.d.ts +40 -0
  100. package/dist/types/cache/read-through-swr.d.ts +60 -0
  101. package/dist/types/cache/segment-codec.d.ts +78 -0
  102. package/dist/types/cache/shell-snapshot.d.ts +173 -0
  103. package/dist/types/cache/tag-invalidation.d.ts +74 -0
  104. package/dist/types/cache/taint.d.ts +71 -0
  105. package/dist/types/cache/types.d.ts +418 -0
  106. package/dist/types/cache/vercel/index.d.ts +1 -0
  107. package/dist/types/cache/vercel/vercel-cache-store.d.ts +267 -0
  108. package/dist/types/client.d.ts +184 -0
  109. package/dist/types/client.rsc.d.ts +39 -0
  110. package/dist/types/cloudflare/index.d.ts +7 -0
  111. package/dist/types/cloudflare/tracing.d.ts +53 -0
  112. package/dist/types/component-utils.d.ts +46 -0
  113. package/dist/types/components/DefaultDocument.d.ts +13 -0
  114. package/dist/types/context-var.d.ts +84 -0
  115. package/dist/types/debug.d.ts +57 -0
  116. package/dist/types/decode-loader-results.d.ts +5 -0
  117. package/dist/types/default-error-boundary.d.ts +10 -0
  118. package/dist/types/defer.d.ts +89 -0
  119. package/dist/types/deps/browser.d.ts +1 -0
  120. package/dist/types/deps/html-stream-client.d.ts +1 -0
  121. package/dist/types/deps/html-stream-server.d.ts +1 -0
  122. package/dist/types/deps/rsc.d.ts +1 -0
  123. package/dist/types/deps/ssr.d.ts +1 -0
  124. package/dist/types/encode-kv.d.ts +35 -0
  125. package/dist/types/errors.d.ts +226 -0
  126. package/dist/types/escape-script.d.ts +44 -0
  127. package/dist/types/handle.d.ts +93 -0
  128. package/dist/types/handles/MetaTags.d.ts +17 -0
  129. package/dist/types/handles/Scripts.d.ts +38 -0
  130. package/dist/types/handles/breadcrumbs.d.ts +43 -0
  131. package/dist/types/handles/deferred-resolution.d.ts +53 -0
  132. package/dist/types/handles/is-thenable.d.ts +12 -0
  133. package/dist/types/handles/meta.d.ts +43 -0
  134. package/dist/types/handles/script.d.ts +139 -0
  135. package/dist/types/host/cookie-handler.d.ts +8 -0
  136. package/dist/types/host/errors.d.ts +40 -0
  137. package/dist/types/host/index.d.ts +33 -0
  138. package/dist/types/host/pattern-matcher.d.ts +30 -0
  139. package/dist/types/host/router.d.ts +12 -0
  140. package/dist/types/host/testing.d.ts +41 -0
  141. package/dist/types/host/types.d.ts +148 -0
  142. package/dist/types/host/utils.d.ts +20 -0
  143. package/dist/types/href-client.d.ts +214 -0
  144. package/dist/types/index.d.ts +112 -0
  145. package/dist/types/index.rsc.d.ts +51 -0
  146. package/dist/types/internal-debug.d.ts +1 -0
  147. package/dist/types/loader-store.d.ts +193 -0
  148. package/dist/types/loader.d.ts +18 -0
  149. package/dist/types/loader.rsc.d.ts +18 -0
  150. package/dist/types/missing-id-error.d.ts +1 -0
  151. package/dist/types/outlet-context.d.ts +12 -0
  152. package/dist/types/outlet-provider.d.ts +12 -0
  153. package/dist/types/prerender/build-shell-capture.d.ts +104 -0
  154. package/dist/types/prerender/param-hash.d.ts +6 -0
  155. package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
  156. package/dist/types/prerender/store.d.ts +62 -0
  157. package/dist/types/prerender.d.ts +292 -0
  158. package/dist/types/redirect-origin.d.ts +67 -0
  159. package/dist/types/regex-escape.d.ts +6 -0
  160. package/dist/types/render-error-thrower.d.ts +13 -0
  161. package/dist/types/response-utils.d.ts +35 -0
  162. package/dist/types/reverse.d.ts +206 -0
  163. package/dist/types/root-error-boundary.d.ts +32 -0
  164. package/dist/types/route-content-wrapper.d.ts +40 -0
  165. package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
  166. package/dist/types/route-definition/helper-factories.d.ts +22 -0
  167. package/dist/types/route-definition/helpers-types.d.ts +392 -0
  168. package/dist/types/route-definition/index.d.ts +7 -0
  169. package/dist/types/route-definition/redirect.d.ts +48 -0
  170. package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
  171. package/dist/types/route-definition/use-item-types.d.ts +1 -0
  172. package/dist/types/route-definition.d.ts +1 -0
  173. package/dist/types/route-map-builder.d.ts +127 -0
  174. package/dist/types/route-name.d.ts +27 -0
  175. package/dist/types/route-types.d.ts +172 -0
  176. package/dist/types/router/basename.d.ts +10 -0
  177. package/dist/types/router/content-negotiation.d.ts +91 -0
  178. package/dist/types/router/debug-manifest.d.ts +7 -0
  179. package/dist/types/router/error-handling.d.ts +76 -0
  180. package/dist/types/router/find-match.d.ts +19 -0
  181. package/dist/types/router/handler-context.d.ts +41 -0
  182. package/dist/types/router/instrument.d.ts +161 -0
  183. package/dist/types/router/intercept-resolution.d.ts +79 -0
  184. package/dist/types/router/lazy-includes.d.ts +26 -0
  185. package/dist/types/router/loader-resolution.d.ts +63 -0
  186. package/dist/types/router/logging.d.ts +41 -0
  187. package/dist/types/router/manifest.d.ts +8 -0
  188. package/dist/types/router/match-api.d.ts +19 -0
  189. package/dist/types/router/match-context.d.ts +184 -0
  190. package/dist/types/router/match-handlers.d.ts +49 -0
  191. package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
  192. package/dist/types/router/match-middleware/cache-lookup.d.ts +113 -0
  193. package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
  194. package/dist/types/router/match-middleware/index.d.ts +80 -0
  195. package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
  196. package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
  197. package/dist/types/router/match-pipelines.d.ts +103 -0
  198. package/dist/types/router/match-result.d.ts +114 -0
  199. package/dist/types/router/metrics.d.ts +6 -0
  200. package/dist/types/router/middleware-types.d.ts +74 -0
  201. package/dist/types/router/middleware.d.ts +116 -0
  202. package/dist/types/router/navigation-snapshot.d.ts +22 -0
  203. package/dist/types/router/params-util.d.ts +8 -0
  204. package/dist/types/router/parse-pattern.d.ts +38 -0
  205. package/dist/types/router/pattern-matching.d.ts +169 -0
  206. package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
  207. package/dist/types/router/prefetch-limits.d.ts +20 -0
  208. package/dist/types/router/prerender-match.d.ts +50 -0
  209. package/dist/types/router/preview-match.d.ts +22 -0
  210. package/dist/types/router/request-classification.d.ts +104 -0
  211. package/dist/types/router/revalidation.d.ts +57 -0
  212. package/dist/types/router/route-snapshot.d.ts +112 -0
  213. package/dist/types/router/router-context.d.ts +137 -0
  214. package/dist/types/router/router-interfaces.d.ts +432 -0
  215. package/dist/types/router/router-options.d.ts +738 -0
  216. package/dist/types/router/router-registry.d.ts +15 -0
  217. package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
  218. package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
  219. package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
  220. package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
  221. package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
  222. package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
  223. package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
  224. package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
  225. package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
  226. package/dist/types/router/segment-resolution/view-transition-default.d.ts +28 -0
  227. package/dist/types/router/segment-resolution.d.ts +3 -0
  228. package/dist/types/router/segment-wrappers.d.ts +53 -0
  229. package/dist/types/router/state-cookie-name.d.ts +1 -0
  230. package/dist/types/router/substitute-pattern-params.d.ts +23 -0
  231. package/dist/types/router/telemetry-otel.d.ts +113 -0
  232. package/dist/types/router/telemetry.d.ts +216 -0
  233. package/dist/types/router/timeout.d.ts +96 -0
  234. package/dist/types/router/tracing.d.ts +125 -0
  235. package/dist/types/router/trie-matching.d.ts +32 -0
  236. package/dist/types/router/types.d.ts +98 -0
  237. package/dist/types/router/url-params.d.ts +26 -0
  238. package/dist/types/router.d.ts +7 -0
  239. package/dist/types/rsc/capture-queue.d.ts +6 -0
  240. package/dist/types/rsc/full-payload.d.ts +22 -0
  241. package/dist/types/rsc/handler-context.d.ts +31 -0
  242. package/dist/types/rsc/handler.d.ts +9 -0
  243. package/dist/types/rsc/helpers.d.ts +124 -0
  244. package/dist/types/rsc/index.d.ts +17 -0
  245. package/dist/types/rsc/json-route-result.d.ts +20 -0
  246. package/dist/types/rsc/loader-fetch.d.ts +14 -0
  247. package/dist/types/rsc/manifest-init.d.ts +18 -0
  248. package/dist/types/rsc/nonce.d.ts +28 -0
  249. package/dist/types/rsc/origin-guard.d.ts +50 -0
  250. package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
  251. package/dist/types/rsc/redirect-guard.d.ts +37 -0
  252. package/dist/types/rsc/render-pipeline.d.ts +138 -0
  253. package/dist/types/rsc/response-cache-serve.d.ts +46 -0
  254. package/dist/types/rsc/response-error.d.ts +19 -0
  255. package/dist/types/rsc/response-route-handler.d.ts +29 -0
  256. package/dist/types/rsc/rsc-rendering.d.ts +23 -0
  257. package/dist/types/rsc/runtime-warnings.d.ts +22 -0
  258. package/dist/types/rsc/server-action.d.ts +68 -0
  259. package/dist/types/rsc/shell-build-manifest.d.ts +84 -0
  260. package/dist/types/rsc/shell-capture-constants.d.ts +27 -0
  261. package/dist/types/rsc/shell-capture.d.ts +374 -0
  262. package/dist/types/rsc/shell-serve.d.ts +174 -0
  263. package/dist/types/rsc/ssr-setup.d.ts +73 -0
  264. package/dist/types/rsc/transition-gate.d.ts +27 -0
  265. package/dist/types/rsc/types.d.ts +290 -0
  266. package/dist/types/runtime-env.d.ts +1 -0
  267. package/dist/types/search-params.d.ts +125 -0
  268. package/dist/types/segment-content-promise.d.ts +13 -0
  269. package/dist/types/segment-fragments.d.ts +56 -0
  270. package/dist/types/segment-loader-promise.d.ts +22 -0
  271. package/dist/types/segment-system.d.ts +84 -0
  272. package/dist/types/serialize.d.ts +164 -0
  273. package/dist/types/server/context.d.ts +494 -0
  274. package/dist/types/server/cookie-parse.d.ts +10 -0
  275. package/dist/types/server/cookie-store.d.ts +107 -0
  276. package/dist/types/server/fetchable-loader-store.d.ts +20 -0
  277. package/dist/types/server/handle-store.d.ts +100 -0
  278. package/dist/types/server/loader-registry.d.ts +32 -0
  279. package/dist/types/server/request-context.d.ts +618 -0
  280. package/dist/types/server/root-layout.d.ts +3 -0
  281. package/dist/types/server.d.ts +15 -0
  282. package/dist/types/ssr/index.d.ts +233 -0
  283. package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
  284. package/dist/types/ssr/preinit-client-references.d.ts +71 -0
  285. package/dist/types/ssr/ssr-root.d.ts +69 -0
  286. package/dist/types/static-handler.d.ts +57 -0
  287. package/dist/types/testing/cache-status.d.ts +63 -0
  288. package/dist/types/testing/collect-handle.d.ts +20 -0
  289. package/dist/types/testing/dispatch.d.ts +127 -0
  290. package/dist/types/testing/dom.entry.d.ts +15 -0
  291. package/dist/types/testing/e2e/fixture.d.ts +37 -0
  292. package/dist/types/testing/e2e/index.d.ts +31 -0
  293. package/dist/types/testing/e2e/matchers.d.ts +17 -0
  294. package/dist/types/testing/e2e/page-helpers.d.ts +62 -0
  295. package/dist/types/testing/e2e/parity.d.ts +111 -0
  296. package/dist/types/testing/e2e/server.d.ts +35 -0
  297. package/dist/types/testing/flight-matchers.d.ts +55 -0
  298. package/dist/types/testing/flight-normalize.d.ts +1 -0
  299. package/dist/types/testing/flight-tree.d.ts +192 -0
  300. package/dist/types/testing/flight.d.ts +115 -0
  301. package/dist/types/testing/flight.entry.d.ts +27 -0
  302. package/dist/types/testing/generated-routes.d.ts +66 -0
  303. package/dist/types/testing/index.d.ts +54 -0
  304. package/dist/types/testing/internal/context.d.ts +225 -0
  305. package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
  306. package/dist/types/testing/internal/seed-vars.d.ts +30 -0
  307. package/dist/types/testing/render-handler.d.ts +160 -0
  308. package/dist/types/testing/render-route.d.ts +246 -0
  309. package/dist/types/testing/run-loader.d.ts +186 -0
  310. package/dist/types/testing/run-middleware.d.ts +132 -0
  311. package/dist/types/testing/run-transition-when.d.ts +77 -0
  312. package/dist/types/testing/shell-status.d.ts +58 -0
  313. package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
  314. package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
  315. package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
  316. package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
  317. package/dist/types/testing/vitest.d.ts +205 -0
  318. package/dist/types/theme/ThemeProvider.d.ts +13 -0
  319. package/dist/types/theme/ThemeScript.d.ts +45 -0
  320. package/dist/types/theme/constants.d.ts +39 -0
  321. package/dist/types/theme/index.d.ts +29 -0
  322. package/dist/types/theme/theme-context.d.ts +21 -0
  323. package/dist/types/theme/theme-script.d.ts +26 -0
  324. package/dist/types/theme/types.d.ts +162 -0
  325. package/dist/types/theme/use-theme.d.ts +8 -0
  326. package/dist/types/types/boundaries.d.ts +93 -0
  327. package/dist/types/types/cache-types.d.ts +191 -0
  328. package/dist/types/types/error-types.d.ts +114 -0
  329. package/dist/types/types/global-namespace.d.ts +90 -0
  330. package/dist/types/types/handler-context.d.ts +658 -0
  331. package/dist/types/types/index.d.ts +11 -0
  332. package/dist/types/types/loader-types.d.ts +182 -0
  333. package/dist/types/types/request-scope.d.ts +93 -0
  334. package/dist/types/types/route-config.d.ts +105 -0
  335. package/dist/types/types/route-entry.d.ts +95 -0
  336. package/dist/types/types/segments.d.ts +234 -0
  337. package/dist/types/types.d.ts +1 -0
  338. package/dist/types/urls/include-helper.d.ts +17 -0
  339. package/dist/types/urls/include-provider.d.ts +27 -0
  340. package/dist/types/urls/index.d.ts +6 -0
  341. package/dist/types/urls/path-helper-types.d.ts +197 -0
  342. package/dist/types/urls/path-helper.d.ts +12 -0
  343. package/dist/types/urls/pattern-types.d.ts +166 -0
  344. package/dist/types/urls/response-types.d.ts +67 -0
  345. package/dist/types/urls/type-extraction.d.ts +157 -0
  346. package/dist/types/urls/urls-function.d.ts +24 -0
  347. package/dist/types/urls.d.ts +1 -0
  348. package/dist/types/use-loader.d.ts +150 -0
  349. package/dist/types/vercel/index.d.ts +10 -0
  350. package/dist/types/vercel/tracing.d.ts +70 -0
  351. package/dist/types/vite/debug.d.ts +80 -0
  352. package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
  353. package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
  354. package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
  355. package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
  356. package/dist/types/vite/discovery/gate-state.d.ts +79 -0
  357. package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
  358. package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
  359. package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
  360. package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
  361. package/dist/types/vite/discovery/state.d.ts +162 -0
  362. package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
  363. package/dist/types/vite/index.d.ts +11 -0
  364. package/dist/types/vite/inject-client-debug.d.ts +56 -0
  365. package/dist/types/vite/plugin-types.d.ts +298 -0
  366. package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
  367. package/dist/types/vite/plugins/client-ref-dedup.d.ts +40 -0
  368. package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
  369. package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
  370. package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
  371. package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
  372. package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
  373. package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
  374. package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
  375. package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
  376. package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
  377. package/dist/types/vite/plugins/expose-internal-ids.d.ts +6 -0
  378. package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
  379. package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
  380. package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
  381. package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
  382. package/dist/types/vite/plugins/version-injector.d.ts +21 -0
  383. package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
  384. package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
  385. package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
  386. package/dist/types/vite/rango.d.ts +29 -0
  387. package/dist/types/vite/router-discovery.d.ts +23 -0
  388. package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
  389. package/dist/types/vite/utils/banner.d.ts +2 -0
  390. package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
  391. package/dist/types/vite/utils/client-chunks.d.ts +55 -0
  392. package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
  393. package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
  394. package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
  395. package/dist/types/vite/utils/package-resolution.d.ts +6 -0
  396. package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
  397. package/dist/types/vite/utils/shared-utils.d.ts +55 -0
  398. package/dist/vite/index.js +1051 -361
  399. package/package.json +39 -33
  400. package/skills/catalog.json +6 -0
  401. package/skills/cloudflare/SKILL.md +149 -0
  402. package/skills/cloudflare/agents/openai.yaml +4 -0
  403. package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
  404. package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
  405. package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
  406. package/skills/composability/SKILL.md +14 -0
  407. package/skills/debug-manifest/SKILL.md +2 -10
  408. package/skills/links/SKILL.md +12 -0
  409. package/skills/middleware/SKILL.md +33 -0
  410. package/skills/migrate-nextjs/SKILL.md +65 -16
  411. package/skills/migrate-nextjs/backend-host-swap.md +120 -0
  412. package/skills/migrate-react-router/SKILL.md +6 -6
  413. package/skills/mime-routes/SKILL.md +25 -17
  414. package/skills/ppr/SKILL.md +100 -15
  415. package/skills/prerender/SKILL.md +44 -1
  416. package/skills/rango/SKILL.md +10 -10
  417. package/skills/response-routes/SKILL.md +41 -4
  418. package/skills/route/SKILL.md +6 -0
  419. package/skills/testing/SKILL.md +1 -0
  420. package/skills/testing/cache-prerender.md +43 -2
  421. package/skills/testing/response-routes.md +2 -2
  422. package/src/browser/event-controller.ts +16 -2
  423. package/src/browser/rsc-router.tsx +11 -0
  424. package/src/build/generate-manifest.ts +5 -36
  425. package/src/build/route-trie.ts +5 -50
  426. package/src/cache/cache-key-utils.ts +0 -1
  427. package/src/cache/cache-scope.ts +41 -3
  428. package/src/cache/cf/cf-cache-store.ts +465 -56
  429. package/src/cache/cf/cf-cache-types.ts +66 -0
  430. package/src/cache/cf/cf-tag-marker-memo.ts +5 -2
  431. package/src/cache/cf/cf-zone-purge.ts +101 -0
  432. package/src/cache/cf/index.ts +5 -0
  433. package/src/cache/handle-snapshot.ts +22 -1
  434. package/src/cache/index.ts +2 -0
  435. package/src/cache/memory-segment-store.ts +32 -0
  436. package/src/cache/segment-codec.ts +47 -0
  437. package/src/cache/shell-snapshot.ts +79 -14
  438. package/src/cache/types.ts +38 -0
  439. package/src/cache/vercel/vercel-cache-store.ts +71 -2
  440. package/src/deps/ssr.ts +4 -1
  441. package/src/index.rsc.ts +7 -0
  442. package/src/index.ts +1 -0
  443. package/src/prerender/build-shell-capture.ts +447 -0
  444. package/src/prerender/shell-manifest-key.ts +20 -0
  445. package/src/prerender/store.ts +10 -1
  446. package/src/prerender.ts +3 -3
  447. package/src/redirect-origin.ts +37 -8
  448. package/src/route-map-builder.ts +8 -8
  449. package/src/router/content-negotiation.ts +47 -5
  450. package/src/router/handler-context.ts +18 -10
  451. package/src/router/intercept-resolution.ts +30 -1
  452. package/src/router/loader-resolution.ts +16 -0
  453. package/src/router/match-api.ts +9 -2
  454. package/src/router/match-handlers.ts +13 -0
  455. package/src/router/match-middleware/cache-lookup.ts +12 -1
  456. package/src/router/metrics.ts +17 -2
  457. package/src/router/middleware-types.ts +17 -0
  458. package/src/router/middleware.ts +4 -0
  459. package/src/router/prerender-match.ts +28 -0
  460. package/src/router/router-interfaces.ts +7 -6
  461. package/src/router/router-options.ts +13 -8
  462. package/src/router/segment-resolution/fresh.ts +21 -2
  463. package/src/router/segment-resolution/helpers.ts +1 -1
  464. package/src/router/segment-resolution/loader-cache.ts +38 -7
  465. package/src/router/segment-resolution/mask-nested.ts +19 -3
  466. package/src/router/segment-resolution/revalidation.ts +9 -0
  467. package/src/router/telemetry-otel.ts +11 -0
  468. package/src/router/telemetry.ts +1 -0
  469. package/src/router/timeout.ts +41 -1
  470. package/src/router.ts +5 -4
  471. package/src/rsc/capture-queue.ts +67 -0
  472. package/src/rsc/handler.ts +151 -77
  473. package/src/rsc/helpers.ts +67 -4
  474. package/src/rsc/progressive-enhancement.ts +66 -54
  475. package/src/rsc/redirect-guard.ts +3 -1
  476. package/src/rsc/render-pipeline.ts +559 -0
  477. package/src/rsc/response-cache-serve.ts +39 -18
  478. package/src/rsc/response-route-handler.ts +9 -45
  479. package/src/rsc/rsc-rendering.ts +303 -103
  480. package/src/rsc/server-action.ts +50 -42
  481. package/src/rsc/shell-build-manifest.ts +316 -0
  482. package/src/rsc/shell-capture-constants.ts +27 -0
  483. package/src/rsc/shell-capture.ts +595 -69
  484. package/src/rsc/shell-serve.ts +133 -3
  485. package/src/rsc/ssr-setup.ts +102 -23
  486. package/src/segment-fragments.ts +124 -0
  487. package/src/server/context.ts +184 -8
  488. package/src/server/request-context.ts +297 -45
  489. package/src/ssr/index.tsx +167 -32
  490. package/src/ssr/preinit-client-references.ts +106 -0
  491. package/src/ssr/ssr-root.tsx +35 -2
  492. package/src/testing/dispatch.ts +132 -67
  493. package/src/testing/e2e/index.ts +8 -0
  494. package/src/testing/index.ts +9 -1
  495. package/src/testing/internal/context.ts +9 -0
  496. package/src/testing/render-handler.ts +15 -1
  497. package/src/testing/run-middleware.ts +14 -0
  498. package/src/testing/shell-status.ts +100 -0
  499. package/src/types/handler-context.ts +13 -2
  500. package/src/urls/path-helper-types.ts +1 -1
  501. package/src/urls/pattern-types.ts +29 -0
  502. package/src/vite/discovery/discover-routers.ts +71 -52
  503. package/src/vite/discovery/prerender-collection.ts +16 -0
  504. package/src/vite/discovery/shell-prerender-phase.ts +397 -0
  505. package/src/vite/discovery/state.ts +44 -0
  506. package/src/vite/discovery/virtual-module-codegen.ts +126 -20
  507. package/src/vite/index.ts +1 -0
  508. package/src/vite/plugin-types.ts +33 -0
  509. package/src/vite/plugins/version-plugin.ts +8 -0
  510. package/src/vite/plugins/virtual-entries.ts +37 -4
  511. package/src/vite/rango.ts +42 -2
  512. package/src/vite/router-discovery.ts +432 -21
  513. package/src/vite/utils/package-resolution.ts +1 -0
  514. package/src/vite/utils/prerender-utils.ts +25 -6
  515. package/src/vite/utils/shared-utils.ts +4 -2
  516. package/dist/__internal.d.ts +0 -83
  517. package/dist/__internal.d.ts.map +0 -1
  518. package/dist/__internal.js +0 -19
  519. package/dist/__internal.js.map +0 -1
  520. package/dist/__mocks__/version.d.ts +0 -7
  521. package/dist/__mocks__/version.d.ts.map +0 -1
  522. package/dist/__mocks__/version.js +0 -7
  523. package/dist/__mocks__/version.js.map +0 -1
  524. package/dist/__tests__/client-href.test.d.ts +0 -2
  525. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  526. package/dist/__tests__/client-href.test.js +0 -74
  527. package/dist/__tests__/client-href.test.js.map +0 -1
  528. package/dist/__tests__/component-utils.test.d.ts +0 -2
  529. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  530. package/dist/__tests__/component-utils.test.js +0 -51
  531. package/dist/__tests__/component-utils.test.js.map +0 -1
  532. package/dist/__tests__/event-controller.test.d.ts +0 -2
  533. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  534. package/dist/__tests__/event-controller.test.js +0 -538
  535. package/dist/__tests__/event-controller.test.js.map +0 -1
  536. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  537. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  538. package/dist/__tests__/helpers/route-tree.js +0 -374
  539. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  540. package/dist/__tests__/match-result.test.d.ts +0 -2
  541. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  542. package/dist/__tests__/match-result.test.js +0 -154
  543. package/dist/__tests__/match-result.test.js.map +0 -1
  544. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  545. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  546. package/dist/__tests__/navigation-store.test.js +0 -440
  547. package/dist/__tests__/navigation-store.test.js.map +0 -1
  548. package/dist/__tests__/partial-update.test.d.ts +0 -2
  549. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  550. package/dist/__tests__/partial-update.test.js +0 -1009
  551. package/dist/__tests__/partial-update.test.js.map +0 -1
  552. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  553. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  554. package/dist/__tests__/reverse-types.test.js +0 -656
  555. package/dist/__tests__/reverse-types.test.js.map +0 -1
  556. package/dist/__tests__/route-definition.test.d.ts +0 -2
  557. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  558. package/dist/__tests__/route-definition.test.js +0 -55
  559. package/dist/__tests__/route-definition.test.js.map +0 -1
  560. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  561. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  562. package/dist/__tests__/router-helpers.test.js +0 -377
  563. package/dist/__tests__/router-helpers.test.js.map +0 -1
  564. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  565. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  566. package/dist/__tests__/router-integration-2.test.js +0 -426
  567. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  568. package/dist/__tests__/router-integration.test.d.ts +0 -2
  569. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  570. package/dist/__tests__/router-integration.test.js +0 -1051
  571. package/dist/__tests__/router-integration.test.js.map +0 -1
  572. package/dist/__tests__/search-params.test.d.ts +0 -5
  573. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  574. package/dist/__tests__/search-params.test.js +0 -306
  575. package/dist/__tests__/search-params.test.js.map +0 -1
  576. package/dist/__tests__/segment-system.test.d.ts +0 -2
  577. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  578. package/dist/__tests__/segment-system.test.js +0 -627
  579. package/dist/__tests__/segment-system.test.js.map +0 -1
  580. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  581. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  582. package/dist/__tests__/static-handler-types.test.js +0 -63
  583. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  584. package/dist/__tests__/urls.test.d.ts +0 -2
  585. package/dist/__tests__/urls.test.d.ts.map +0 -1
  586. package/dist/__tests__/urls.test.js +0 -421
  587. package/dist/__tests__/urls.test.js.map +0 -1
  588. package/dist/__tests__/use-mount.test.d.ts +0 -2
  589. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  590. package/dist/__tests__/use-mount.test.js +0 -35
  591. package/dist/__tests__/use-mount.test.js.map +0 -1
  592. package/dist/bin/rango.d.ts +0 -2
  593. package/dist/bin/rango.d.ts.map +0 -1
  594. package/dist/bin/rango.js.map +0 -1
  595. package/dist/browser/event-controller.d.ts +0 -191
  596. package/dist/browser/event-controller.d.ts.map +0 -1
  597. package/dist/browser/event-controller.js +0 -559
  598. package/dist/browser/event-controller.js.map +0 -1
  599. package/dist/browser/index.d.ts +0 -2
  600. package/dist/browser/index.d.ts.map +0 -1
  601. package/dist/browser/index.js +0 -14
  602. package/dist/browser/index.js.map +0 -1
  603. package/dist/browser/link-interceptor.d.ts +0 -38
  604. package/dist/browser/link-interceptor.d.ts.map +0 -1
  605. package/dist/browser/link-interceptor.js +0 -99
  606. package/dist/browser/link-interceptor.js.map +0 -1
  607. package/dist/browser/logging.d.ts +0 -10
  608. package/dist/browser/logging.d.ts.map +0 -1
  609. package/dist/browser/logging.js +0 -29
  610. package/dist/browser/logging.js.map +0 -1
  611. package/dist/browser/lru-cache.d.ts +0 -17
  612. package/dist/browser/lru-cache.d.ts.map +0 -1
  613. package/dist/browser/lru-cache.js +0 -50
  614. package/dist/browser/lru-cache.js.map +0 -1
  615. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  616. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  617. package/dist/browser/merge-segment-loaders.js +0 -102
  618. package/dist/browser/merge-segment-loaders.js.map +0 -1
  619. package/dist/browser/navigation-bridge.d.ts +0 -102
  620. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  621. package/dist/browser/navigation-bridge.js +0 -708
  622. package/dist/browser/navigation-bridge.js.map +0 -1
  623. package/dist/browser/navigation-client.d.ts +0 -25
  624. package/dist/browser/navigation-client.d.ts.map +0 -1
  625. package/dist/browser/navigation-client.js +0 -157
  626. package/dist/browser/navigation-client.js.map +0 -1
  627. package/dist/browser/navigation-store.d.ts +0 -101
  628. package/dist/browser/navigation-store.d.ts.map +0 -1
  629. package/dist/browser/navigation-store.js +0 -625
  630. package/dist/browser/navigation-store.js.map +0 -1
  631. package/dist/browser/partial-update.d.ts +0 -75
  632. package/dist/browser/partial-update.d.ts.map +0 -1
  633. package/dist/browser/partial-update.js +0 -426
  634. package/dist/browser/partial-update.js.map +0 -1
  635. package/dist/browser/react/Link.d.ts +0 -86
  636. package/dist/browser/react/Link.d.ts.map +0 -1
  637. package/dist/browser/react/Link.js +0 -128
  638. package/dist/browser/react/Link.js.map +0 -1
  639. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  640. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  641. package/dist/browser/react/NavigationProvider.js +0 -216
  642. package/dist/browser/react/NavigationProvider.js.map +0 -1
  643. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  644. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  645. package/dist/browser/react/ScrollRestoration.js +0 -57
  646. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  647. package/dist/browser/react/context.d.ts +0 -46
  648. package/dist/browser/react/context.d.ts.map +0 -1
  649. package/dist/browser/react/context.js +0 -10
  650. package/dist/browser/react/context.js.map +0 -1
  651. package/dist/browser/react/index.d.ts +0 -11
  652. package/dist/browser/react/index.d.ts.map +0 -1
  653. package/dist/browser/react/index.js +0 -22
  654. package/dist/browser/react/index.js.map +0 -1
  655. package/dist/browser/react/location-state-shared.d.ts +0 -63
  656. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  657. package/dist/browser/react/location-state-shared.js +0 -81
  658. package/dist/browser/react/location-state-shared.js.map +0 -1
  659. package/dist/browser/react/location-state.d.ts +0 -23
  660. package/dist/browser/react/location-state.d.ts.map +0 -1
  661. package/dist/browser/react/location-state.js +0 -29
  662. package/dist/browser/react/location-state.js.map +0 -1
  663. package/dist/browser/react/mount-context.d.ts +0 -24
  664. package/dist/browser/react/mount-context.d.ts.map +0 -1
  665. package/dist/browser/react/mount-context.js +0 -24
  666. package/dist/browser/react/mount-context.js.map +0 -1
  667. package/dist/browser/react/use-action.d.ts +0 -64
  668. package/dist/browser/react/use-action.d.ts.map +0 -1
  669. package/dist/browser/react/use-action.js +0 -134
  670. package/dist/browser/react/use-action.js.map +0 -1
  671. package/dist/browser/react/use-client-cache.d.ts +0 -41
  672. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  673. package/dist/browser/react/use-client-cache.js +0 -39
  674. package/dist/browser/react/use-client-cache.js.map +0 -1
  675. package/dist/browser/react/use-handle.d.ts +0 -31
  676. package/dist/browser/react/use-handle.d.ts.map +0 -1
  677. package/dist/browser/react/use-handle.js +0 -144
  678. package/dist/browser/react/use-handle.js.map +0 -1
  679. package/dist/browser/react/use-href.d.ts +0 -33
  680. package/dist/browser/react/use-href.d.ts.map +0 -1
  681. package/dist/browser/react/use-href.js +0 -39
  682. package/dist/browser/react/use-href.js.map +0 -1
  683. package/dist/browser/react/use-link-status.d.ts +0 -37
  684. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  685. package/dist/browser/react/use-link-status.js +0 -99
  686. package/dist/browser/react/use-link-status.js.map +0 -1
  687. package/dist/browser/react/use-mount.d.ts +0 -25
  688. package/dist/browser/react/use-mount.d.ts.map +0 -1
  689. package/dist/browser/react/use-mount.js +0 -30
  690. package/dist/browser/react/use-mount.js.map +0 -1
  691. package/dist/browser/react/use-navigation.d.ts +0 -27
  692. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  693. package/dist/browser/react/use-navigation.js +0 -87
  694. package/dist/browser/react/use-navigation.js.map +0 -1
  695. package/dist/browser/react/use-segments.d.ts +0 -38
  696. package/dist/browser/react/use-segments.d.ts.map +0 -1
  697. package/dist/browser/react/use-segments.js +0 -130
  698. package/dist/browser/react/use-segments.js.map +0 -1
  699. package/dist/browser/request-controller.d.ts +0 -26
  700. package/dist/browser/request-controller.d.ts.map +0 -1
  701. package/dist/browser/request-controller.js +0 -147
  702. package/dist/browser/request-controller.js.map +0 -1
  703. package/dist/browser/rsc-router.d.ts +0 -129
  704. package/dist/browser/rsc-router.d.ts.map +0 -1
  705. package/dist/browser/rsc-router.js +0 -195
  706. package/dist/browser/rsc-router.js.map +0 -1
  707. package/dist/browser/scroll-restoration.d.ts +0 -93
  708. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  709. package/dist/browser/scroll-restoration.js +0 -321
  710. package/dist/browser/scroll-restoration.js.map +0 -1
  711. package/dist/browser/segment-structure-assert.d.ts +0 -17
  712. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  713. package/dist/browser/segment-structure-assert.js +0 -59
  714. package/dist/browser/segment-structure-assert.js.map +0 -1
  715. package/dist/browser/server-action-bridge.d.ts +0 -26
  716. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  717. package/dist/browser/server-action-bridge.js +0 -668
  718. package/dist/browser/server-action-bridge.js.map +0 -1
  719. package/dist/browser/shallow.d.ts +0 -12
  720. package/dist/browser/shallow.d.ts.map +0 -1
  721. package/dist/browser/shallow.js +0 -34
  722. package/dist/browser/shallow.js.map +0 -1
  723. package/dist/browser/types.d.ts +0 -369
  724. package/dist/browser/types.d.ts.map +0 -1
  725. package/dist/browser/types.js +0 -2
  726. package/dist/browser/types.js.map +0 -1
  727. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  728. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  729. package/dist/build/__tests__/generate-cli.test.js +0 -237
  730. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  731. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  732. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  733. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  734. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  735. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  736. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  737. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  738. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  739. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  740. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  741. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  742. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  743. package/dist/build/generate-manifest.d.ts +0 -81
  744. package/dist/build/generate-manifest.d.ts.map +0 -1
  745. package/dist/build/generate-manifest.js +0 -276
  746. package/dist/build/generate-manifest.js.map +0 -1
  747. package/dist/build/generate-route-types.d.ts +0 -115
  748. package/dist/build/generate-route-types.d.ts.map +0 -1
  749. package/dist/build/generate-route-types.js +0 -740
  750. package/dist/build/generate-route-types.js.map +0 -1
  751. package/dist/build/index.d.ts +0 -21
  752. package/dist/build/index.d.ts.map +0 -1
  753. package/dist/build/index.js +0 -21
  754. package/dist/build/index.js.map +0 -1
  755. package/dist/build/route-trie.d.ts +0 -71
  756. package/dist/build/route-trie.d.ts.map +0 -1
  757. package/dist/build/route-trie.js +0 -175
  758. package/dist/build/route-trie.js.map +0 -1
  759. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  760. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  761. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  762. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  763. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  764. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  765. package/dist/cache/__tests__/document-cache.test.js +0 -345
  766. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  767. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  768. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  769. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  770. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  771. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  772. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  773. package/dist/cache/__tests__/memory-store.test.js +0 -367
  774. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  775. package/dist/cache/cache-scope.d.ts +0 -102
  776. package/dist/cache/cache-scope.d.ts.map +0 -1
  777. package/dist/cache/cache-scope.js +0 -440
  778. package/dist/cache/cache-scope.js.map +0 -1
  779. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  780. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  781. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  782. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  783. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  784. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  785. package/dist/cache/cf/cf-cache-store.js +0 -242
  786. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  787. package/dist/cache/cf/index.d.ts +0 -14
  788. package/dist/cache/cf/index.d.ts.map +0 -1
  789. package/dist/cache/cf/index.js +0 -17
  790. package/dist/cache/cf/index.js.map +0 -1
  791. package/dist/cache/document-cache.d.ts +0 -64
  792. package/dist/cache/document-cache.d.ts.map +0 -1
  793. package/dist/cache/document-cache.js +0 -228
  794. package/dist/cache/document-cache.js.map +0 -1
  795. package/dist/cache/index.d.ts +0 -19
  796. package/dist/cache/index.d.ts.map +0 -1
  797. package/dist/cache/index.js +0 -21
  798. package/dist/cache/index.js.map +0 -1
  799. package/dist/cache/memory-segment-store.d.ts +0 -110
  800. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  801. package/dist/cache/memory-segment-store.js +0 -117
  802. package/dist/cache/memory-segment-store.js.map +0 -1
  803. package/dist/cache/memory-store.d.ts +0 -41
  804. package/dist/cache/memory-store.d.ts.map +0 -1
  805. package/dist/cache/memory-store.js +0 -191
  806. package/dist/cache/memory-store.js.map +0 -1
  807. package/dist/cache/types.d.ts +0 -317
  808. package/dist/cache/types.d.ts.map +0 -1
  809. package/dist/cache/types.js +0 -12
  810. package/dist/cache/types.js.map +0 -1
  811. package/dist/client.d.ts +0 -248
  812. package/dist/client.d.ts.map +0 -1
  813. package/dist/client.js +0 -367
  814. package/dist/client.js.map +0 -1
  815. package/dist/client.rsc.d.ts +0 -26
  816. package/dist/client.rsc.d.ts.map +0 -1
  817. package/dist/client.rsc.js +0 -46
  818. package/dist/client.rsc.js.map +0 -1
  819. package/dist/component-utils.d.ts +0 -36
  820. package/dist/component-utils.d.ts.map +0 -1
  821. package/dist/component-utils.js +0 -61
  822. package/dist/component-utils.js.map +0 -1
  823. package/dist/components/DefaultDocument.d.ts +0 -13
  824. package/dist/components/DefaultDocument.d.ts.map +0 -1
  825. package/dist/components/DefaultDocument.js +0 -15
  826. package/dist/components/DefaultDocument.js.map +0 -1
  827. package/dist/debug.d.ts +0 -58
  828. package/dist/debug.d.ts.map +0 -1
  829. package/dist/debug.js +0 -157
  830. package/dist/debug.js.map +0 -1
  831. package/dist/default-error-boundary.d.ts +0 -11
  832. package/dist/default-error-boundary.d.ts.map +0 -1
  833. package/dist/default-error-boundary.js +0 -45
  834. package/dist/default-error-boundary.js.map +0 -1
  835. package/dist/deps/browser.d.ts +0 -2
  836. package/dist/deps/browser.d.ts.map +0 -1
  837. package/dist/deps/browser.js +0 -3
  838. package/dist/deps/browser.js.map +0 -1
  839. package/dist/deps/html-stream-client.d.ts +0 -2
  840. package/dist/deps/html-stream-client.d.ts.map +0 -1
  841. package/dist/deps/html-stream-client.js +0 -3
  842. package/dist/deps/html-stream-client.js.map +0 -1
  843. package/dist/deps/html-stream-server.d.ts +0 -2
  844. package/dist/deps/html-stream-server.d.ts.map +0 -1
  845. package/dist/deps/html-stream-server.js +0 -3
  846. package/dist/deps/html-stream-server.js.map +0 -1
  847. package/dist/deps/rsc.d.ts +0 -2
  848. package/dist/deps/rsc.d.ts.map +0 -1
  849. package/dist/deps/rsc.js +0 -4
  850. package/dist/deps/rsc.js.map +0 -1
  851. package/dist/deps/ssr.d.ts +0 -2
  852. package/dist/deps/ssr.d.ts.map +0 -1
  853. package/dist/deps/ssr.js +0 -3
  854. package/dist/deps/ssr.js.map +0 -1
  855. package/dist/errors.d.ts +0 -174
  856. package/dist/errors.d.ts.map +0 -1
  857. package/dist/errors.js +0 -241
  858. package/dist/errors.js.map +0 -1
  859. package/dist/handle.d.ts +0 -78
  860. package/dist/handle.d.ts.map +0 -1
  861. package/dist/handle.js +0 -82
  862. package/dist/handle.js.map +0 -1
  863. package/dist/handles/MetaTags.d.ts +0 -14
  864. package/dist/handles/MetaTags.d.ts.map +0 -1
  865. package/dist/handles/MetaTags.js +0 -136
  866. package/dist/handles/MetaTags.js.map +0 -1
  867. package/dist/handles/index.d.ts +0 -6
  868. package/dist/handles/index.d.ts.map +0 -1
  869. package/dist/handles/index.js +0 -6
  870. package/dist/handles/index.js.map +0 -1
  871. package/dist/handles/meta.d.ts +0 -39
  872. package/dist/handles/meta.d.ts.map +0 -1
  873. package/dist/handles/meta.js +0 -202
  874. package/dist/handles/meta.js.map +0 -1
  875. package/dist/host/__tests__/errors.test.d.ts +0 -2
  876. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  877. package/dist/host/__tests__/errors.test.js +0 -76
  878. package/dist/host/__tests__/errors.test.js.map +0 -1
  879. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  880. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  881. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  882. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  883. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  884. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  885. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  886. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  887. package/dist/host/__tests__/router.test.d.ts +0 -2
  888. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  889. package/dist/host/__tests__/router.test.js +0 -241
  890. package/dist/host/__tests__/router.test.js.map +0 -1
  891. package/dist/host/__tests__/testing.test.d.ts +0 -2
  892. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  893. package/dist/host/__tests__/testing.test.js +0 -64
  894. package/dist/host/__tests__/testing.test.js.map +0 -1
  895. package/dist/host/__tests__/utils.test.d.ts +0 -2
  896. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  897. package/dist/host/__tests__/utils.test.js +0 -29
  898. package/dist/host/__tests__/utils.test.js.map +0 -1
  899. package/dist/host/cookie-handler.d.ts +0 -34
  900. package/dist/host/cookie-handler.d.ts.map +0 -1
  901. package/dist/host/cookie-handler.js +0 -124
  902. package/dist/host/cookie-handler.js.map +0 -1
  903. package/dist/host/errors.d.ts +0 -56
  904. package/dist/host/errors.d.ts.map +0 -1
  905. package/dist/host/errors.js +0 -79
  906. package/dist/host/errors.js.map +0 -1
  907. package/dist/host/index.d.ts +0 -29
  908. package/dist/host/index.d.ts.map +0 -1
  909. package/dist/host/index.js +0 -32
  910. package/dist/host/index.js.map +0 -1
  911. package/dist/host/pattern-matcher.d.ts +0 -36
  912. package/dist/host/pattern-matcher.d.ts.map +0 -1
  913. package/dist/host/pattern-matcher.js +0 -172
  914. package/dist/host/pattern-matcher.js.map +0 -1
  915. package/dist/host/router.d.ts +0 -26
  916. package/dist/host/router.d.ts.map +0 -1
  917. package/dist/host/router.js +0 -218
  918. package/dist/host/router.js.map +0 -1
  919. package/dist/host/testing.d.ts +0 -36
  920. package/dist/host/testing.d.ts.map +0 -1
  921. package/dist/host/testing.js +0 -55
  922. package/dist/host/testing.js.map +0 -1
  923. package/dist/host/types.d.ts +0 -115
  924. package/dist/host/types.d.ts.map +0 -1
  925. package/dist/host/types.js +0 -7
  926. package/dist/host/types.js.map +0 -1
  927. package/dist/host/utils.d.ts +0 -21
  928. package/dist/host/utils.d.ts.map +0 -1
  929. package/dist/host/utils.js +0 -23
  930. package/dist/host/utils.js.map +0 -1
  931. package/dist/href-client.d.ts +0 -131
  932. package/dist/href-client.d.ts.map +0 -1
  933. package/dist/href-client.js +0 -64
  934. package/dist/href-client.js.map +0 -1
  935. package/dist/href-context.d.ts +0 -29
  936. package/dist/href-context.d.ts.map +0 -1
  937. package/dist/href-context.js +0 -21
  938. package/dist/href-context.js.map +0 -1
  939. package/dist/index.d.ts +0 -73
  940. package/dist/index.d.ts.map +0 -1
  941. package/dist/index.js +0 -91
  942. package/dist/index.js.map +0 -1
  943. package/dist/index.rsc.d.ts +0 -32
  944. package/dist/index.rsc.d.ts.map +0 -1
  945. package/dist/index.rsc.js +0 -40
  946. package/dist/index.rsc.js.map +0 -1
  947. package/dist/internal-debug.d.ts +0 -2
  948. package/dist/internal-debug.d.ts.map +0 -1
  949. package/dist/internal-debug.js +0 -5
  950. package/dist/internal-debug.js.map +0 -1
  951. package/dist/loader.d.ts +0 -14
  952. package/dist/loader.d.ts.map +0 -1
  953. package/dist/loader.js +0 -20
  954. package/dist/loader.js.map +0 -1
  955. package/dist/loader.rsc.d.ts +0 -19
  956. package/dist/loader.rsc.d.ts.map +0 -1
  957. package/dist/loader.rsc.js +0 -99
  958. package/dist/loader.rsc.js.map +0 -1
  959. package/dist/network-error-thrower.d.ts +0 -17
  960. package/dist/network-error-thrower.d.ts.map +0 -1
  961. package/dist/network-error-thrower.js +0 -14
  962. package/dist/network-error-thrower.js.map +0 -1
  963. package/dist/outlet-context.d.ts +0 -13
  964. package/dist/outlet-context.d.ts.map +0 -1
  965. package/dist/outlet-context.js +0 -3
  966. package/dist/outlet-context.js.map +0 -1
  967. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  968. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  969. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  970. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  971. package/dist/prerender/param-hash.d.ts +0 -16
  972. package/dist/prerender/param-hash.d.ts.map +0 -1
  973. package/dist/prerender/param-hash.js +0 -36
  974. package/dist/prerender/param-hash.js.map +0 -1
  975. package/dist/prerender/store.d.ts +0 -38
  976. package/dist/prerender/store.d.ts.map +0 -1
  977. package/dist/prerender/store.js +0 -61
  978. package/dist/prerender/store.js.map +0 -1
  979. package/dist/prerender.d.ts +0 -66
  980. package/dist/prerender.d.ts.map +0 -1
  981. package/dist/prerender.js +0 -57
  982. package/dist/prerender.js.map +0 -1
  983. package/dist/reverse.d.ts +0 -196
  984. package/dist/reverse.d.ts.map +0 -1
  985. package/dist/reverse.js +0 -78
  986. package/dist/reverse.js.map +0 -1
  987. package/dist/root-error-boundary.d.ts +0 -33
  988. package/dist/root-error-boundary.d.ts.map +0 -1
  989. package/dist/root-error-boundary.js +0 -165
  990. package/dist/root-error-boundary.js.map +0 -1
  991. package/dist/route-content-wrapper.d.ts +0 -46
  992. package/dist/route-content-wrapper.d.ts.map +0 -1
  993. package/dist/route-content-wrapper.js +0 -77
  994. package/dist/route-content-wrapper.js.map +0 -1
  995. package/dist/route-definition.d.ts +0 -421
  996. package/dist/route-definition.d.ts.map +0 -1
  997. package/dist/route-definition.js +0 -868
  998. package/dist/route-definition.js.map +0 -1
  999. package/dist/route-map-builder.d.ts +0 -155
  1000. package/dist/route-map-builder.d.ts.map +0 -1
  1001. package/dist/route-map-builder.js +0 -237
  1002. package/dist/route-map-builder.js.map +0 -1
  1003. package/dist/route-types.d.ts +0 -165
  1004. package/dist/route-types.d.ts.map +0 -1
  1005. package/dist/route-types.js +0 -7
  1006. package/dist/route-types.js.map +0 -1
  1007. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  1008. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  1009. package/dist/router/__tests__/handler-context.test.js +0 -65
  1010. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  1011. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  1012. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  1013. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  1014. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  1015. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  1016. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  1017. package/dist/router/__tests__/match-context.test.js +0 -92
  1018. package/dist/router/__tests__/match-context.test.js.map +0 -1
  1019. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  1020. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  1021. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  1022. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  1023. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  1024. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  1025. package/dist/router/__tests__/match-result.test.js +0 -457
  1026. package/dist/router/__tests__/match-result.test.js.map +0 -1
  1027. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  1028. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  1029. package/dist/router/__tests__/on-error.test.js +0 -678
  1030. package/dist/router/__tests__/on-error.test.js.map +0 -1
  1031. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  1032. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  1033. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  1034. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  1035. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  1036. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  1037. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  1038. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  1039. package/dist/router/error-handling.d.ts +0 -77
  1040. package/dist/router/error-handling.d.ts.map +0 -1
  1041. package/dist/router/error-handling.js +0 -202
  1042. package/dist/router/error-handling.js.map +0 -1
  1043. package/dist/router/handler-context.d.ts +0 -20
  1044. package/dist/router/handler-context.d.ts.map +0 -1
  1045. package/dist/router/handler-context.js +0 -198
  1046. package/dist/router/handler-context.js.map +0 -1
  1047. package/dist/router/intercept-resolution.d.ts +0 -66
  1048. package/dist/router/intercept-resolution.d.ts.map +0 -1
  1049. package/dist/router/intercept-resolution.js +0 -246
  1050. package/dist/router/intercept-resolution.js.map +0 -1
  1051. package/dist/router/loader-resolution.d.ts +0 -64
  1052. package/dist/router/loader-resolution.d.ts.map +0 -1
  1053. package/dist/router/loader-resolution.js +0 -284
  1054. package/dist/router/loader-resolution.js.map +0 -1
  1055. package/dist/router/logging.d.ts +0 -15
  1056. package/dist/router/logging.d.ts.map +0 -1
  1057. package/dist/router/logging.js +0 -99
  1058. package/dist/router/logging.js.map +0 -1
  1059. package/dist/router/manifest.d.ts +0 -22
  1060. package/dist/router/manifest.d.ts.map +0 -1
  1061. package/dist/router/manifest.js +0 -181
  1062. package/dist/router/manifest.js.map +0 -1
  1063. package/dist/router/match-api.d.ts +0 -35
  1064. package/dist/router/match-api.d.ts.map +0 -1
  1065. package/dist/router/match-api.js +0 -406
  1066. package/dist/router/match-api.js.map +0 -1
  1067. package/dist/router/match-context.d.ts +0 -206
  1068. package/dist/router/match-context.d.ts.map +0 -1
  1069. package/dist/router/match-context.js +0 -17
  1070. package/dist/router/match-context.js.map +0 -1
  1071. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  1072. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  1073. package/dist/router/match-middleware/background-revalidation.js +0 -75
  1074. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  1075. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  1076. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  1077. package/dist/router/match-middleware/cache-lookup.js +0 -257
  1078. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  1079. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  1080. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  1081. package/dist/router/match-middleware/cache-store.js +0 -108
  1082. package/dist/router/match-middleware/cache-store.js.map +0 -1
  1083. package/dist/router/match-middleware/index.d.ts +0 -81
  1084. package/dist/router/match-middleware/index.d.ts.map +0 -1
  1085. package/dist/router/match-middleware/index.js +0 -80
  1086. package/dist/router/match-middleware/index.js.map +0 -1
  1087. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  1088. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  1089. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  1090. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  1091. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  1092. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  1093. package/dist/router/match-middleware/segment-resolution.js +0 -53
  1094. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  1095. package/dist/router/match-pipelines.d.ts +0 -147
  1096. package/dist/router/match-pipelines.d.ts.map +0 -1
  1097. package/dist/router/match-pipelines.js +0 -82
  1098. package/dist/router/match-pipelines.js.map +0 -1
  1099. package/dist/router/match-result.d.ts +0 -126
  1100. package/dist/router/match-result.d.ts.map +0 -1
  1101. package/dist/router/match-result.js +0 -93
  1102. package/dist/router/match-result.js.map +0 -1
  1103. package/dist/router/metrics.d.ts +0 -20
  1104. package/dist/router/metrics.d.ts.map +0 -1
  1105. package/dist/router/metrics.js +0 -47
  1106. package/dist/router/metrics.js.map +0 -1
  1107. package/dist/router/middleware.d.ts +0 -249
  1108. package/dist/router/middleware.d.ts.map +0 -1
  1109. package/dist/router/middleware.js +0 -434
  1110. package/dist/router/middleware.js.map +0 -1
  1111. package/dist/router/middleware.test.d.ts +0 -2
  1112. package/dist/router/middleware.test.d.ts.map +0 -1
  1113. package/dist/router/middleware.test.js +0 -816
  1114. package/dist/router/middleware.test.js.map +0 -1
  1115. package/dist/router/pattern-matching.d.ts +0 -149
  1116. package/dist/router/pattern-matching.d.ts.map +0 -1
  1117. package/dist/router/pattern-matching.js +0 -349
  1118. package/dist/router/pattern-matching.js.map +0 -1
  1119. package/dist/router/revalidation.d.ts +0 -44
  1120. package/dist/router/revalidation.d.ts.map +0 -1
  1121. package/dist/router/revalidation.js +0 -147
  1122. package/dist/router/revalidation.js.map +0 -1
  1123. package/dist/router/router-context.d.ts +0 -135
  1124. package/dist/router/router-context.d.ts.map +0 -1
  1125. package/dist/router/router-context.js +0 -36
  1126. package/dist/router/router-context.js.map +0 -1
  1127. package/dist/router/segment-resolution.d.ts +0 -127
  1128. package/dist/router/segment-resolution.d.ts.map +0 -1
  1129. package/dist/router/segment-resolution.js +0 -919
  1130. package/dist/router/segment-resolution.js.map +0 -1
  1131. package/dist/router/trie-matching.d.ts +0 -40
  1132. package/dist/router/trie-matching.d.ts.map +0 -1
  1133. package/dist/router/trie-matching.js +0 -127
  1134. package/dist/router/trie-matching.js.map +0 -1
  1135. package/dist/router/types.d.ts +0 -136
  1136. package/dist/router/types.d.ts.map +0 -1
  1137. package/dist/router/types.js +0 -7
  1138. package/dist/router/types.js.map +0 -1
  1139. package/dist/router.d.ts +0 -753
  1140. package/dist/router.d.ts.map +0 -1
  1141. package/dist/router.gen.d.ts +0 -6
  1142. package/dist/router.gen.d.ts.map +0 -1
  1143. package/dist/router.gen.js +0 -6
  1144. package/dist/router.gen.js.map +0 -1
  1145. package/dist/router.js +0 -1304
  1146. package/dist/router.js.map +0 -1
  1147. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  1148. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  1149. package/dist/rsc/__tests__/helpers.test.js +0 -140
  1150. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  1151. package/dist/rsc/handler.d.ts +0 -45
  1152. package/dist/rsc/handler.d.ts.map +0 -1
  1153. package/dist/rsc/handler.js +0 -1172
  1154. package/dist/rsc/handler.js.map +0 -1
  1155. package/dist/rsc/helpers.d.ts +0 -16
  1156. package/dist/rsc/helpers.d.ts.map +0 -1
  1157. package/dist/rsc/helpers.js +0 -55
  1158. package/dist/rsc/helpers.js.map +0 -1
  1159. package/dist/rsc/index.d.ts +0 -22
  1160. package/dist/rsc/index.d.ts.map +0 -1
  1161. package/dist/rsc/index.js +0 -23
  1162. package/dist/rsc/index.js.map +0 -1
  1163. package/dist/rsc/nonce.d.ts +0 -9
  1164. package/dist/rsc/nonce.d.ts.map +0 -1
  1165. package/dist/rsc/nonce.js +0 -18
  1166. package/dist/rsc/nonce.js.map +0 -1
  1167. package/dist/rsc/types.d.ts +0 -206
  1168. package/dist/rsc/types.d.ts.map +0 -1
  1169. package/dist/rsc/types.js +0 -8
  1170. package/dist/rsc/types.js.map +0 -1
  1171. package/dist/search-params.d.ts +0 -103
  1172. package/dist/search-params.d.ts.map +0 -1
  1173. package/dist/search-params.js +0 -74
  1174. package/dist/search-params.js.map +0 -1
  1175. package/dist/segment-system.d.ts +0 -75
  1176. package/dist/segment-system.d.ts.map +0 -1
  1177. package/dist/segment-system.js +0 -336
  1178. package/dist/segment-system.js.map +0 -1
  1179. package/dist/server/context.d.ts +0 -245
  1180. package/dist/server/context.d.ts.map +0 -1
  1181. package/dist/server/context.js +0 -197
  1182. package/dist/server/context.js.map +0 -1
  1183. package/dist/server/fetchable-loader-store.d.ts +0 -18
  1184. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  1185. package/dist/server/fetchable-loader-store.js +0 -18
  1186. package/dist/server/fetchable-loader-store.js.map +0 -1
  1187. package/dist/server/handle-store.d.ts +0 -85
  1188. package/dist/server/handle-store.d.ts.map +0 -1
  1189. package/dist/server/handle-store.js +0 -142
  1190. package/dist/server/handle-store.js.map +0 -1
  1191. package/dist/server/loader-registry.d.ts +0 -55
  1192. package/dist/server/loader-registry.d.ts.map +0 -1
  1193. package/dist/server/loader-registry.js +0 -132
  1194. package/dist/server/loader-registry.js.map +0 -1
  1195. package/dist/server/request-context.d.ts +0 -226
  1196. package/dist/server/request-context.d.ts.map +0 -1
  1197. package/dist/server/request-context.js +0 -290
  1198. package/dist/server/request-context.js.map +0 -1
  1199. package/dist/server/root-layout.d.ts +0 -4
  1200. package/dist/server/root-layout.d.ts.map +0 -1
  1201. package/dist/server/root-layout.js +0 -5
  1202. package/dist/server/root-layout.js.map +0 -1
  1203. package/dist/server.d.ts +0 -15
  1204. package/dist/server.d.ts.map +0 -1
  1205. package/dist/server.js +0 -20
  1206. package/dist/server.js.map +0 -1
  1207. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  1208. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  1209. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  1210. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  1211. package/dist/ssr/index.d.ts +0 -98
  1212. package/dist/ssr/index.d.ts.map +0 -1
  1213. package/dist/ssr/index.js +0 -158
  1214. package/dist/ssr/index.js.map +0 -1
  1215. package/dist/static-handler.d.ts +0 -50
  1216. package/dist/static-handler.d.ts.map +0 -1
  1217. package/dist/static-handler.gen.d.ts +0 -5
  1218. package/dist/static-handler.gen.d.ts.map +0 -1
  1219. package/dist/static-handler.gen.js +0 -5
  1220. package/dist/static-handler.gen.js.map +0 -1
  1221. package/dist/static-handler.js +0 -29
  1222. package/dist/static-handler.js.map +0 -1
  1223. package/dist/theme/ThemeProvider.d.ts +0 -20
  1224. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  1225. package/dist/theme/ThemeProvider.js +0 -240
  1226. package/dist/theme/ThemeProvider.js.map +0 -1
  1227. package/dist/theme/ThemeScript.d.ts +0 -48
  1228. package/dist/theme/ThemeScript.d.ts.map +0 -1
  1229. package/dist/theme/ThemeScript.js +0 -13
  1230. package/dist/theme/ThemeScript.js.map +0 -1
  1231. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  1232. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  1233. package/dist/theme/__tests__/theme.test.js +0 -103
  1234. package/dist/theme/__tests__/theme.test.js.map +0 -1
  1235. package/dist/theme/constants.d.ts +0 -29
  1236. package/dist/theme/constants.d.ts.map +0 -1
  1237. package/dist/theme/constants.js +0 -48
  1238. package/dist/theme/constants.js.map +0 -1
  1239. package/dist/theme/index.d.ts +0 -31
  1240. package/dist/theme/index.d.ts.map +0 -1
  1241. package/dist/theme/index.js +0 -36
  1242. package/dist/theme/index.js.map +0 -1
  1243. package/dist/theme/theme-context.d.ts +0 -40
  1244. package/dist/theme/theme-context.d.ts.map +0 -1
  1245. package/dist/theme/theme-context.js +0 -60
  1246. package/dist/theme/theme-context.js.map +0 -1
  1247. package/dist/theme/theme-script.d.ts +0 -27
  1248. package/dist/theme/theme-script.d.ts.map +0 -1
  1249. package/dist/theme/theme-script.js +0 -147
  1250. package/dist/theme/theme-script.js.map +0 -1
  1251. package/dist/theme/types.d.ts +0 -163
  1252. package/dist/theme/types.d.ts.map +0 -1
  1253. package/dist/theme/types.js +0 -11
  1254. package/dist/theme/types.js.map +0 -1
  1255. package/dist/theme/use-theme.d.ts +0 -12
  1256. package/dist/theme/use-theme.d.ts.map +0 -1
  1257. package/dist/theme/use-theme.js +0 -40
  1258. package/dist/theme/use-theme.js.map +0 -1
  1259. package/dist/types.d.ts +0 -1479
  1260. package/dist/types.d.ts.map +0 -1
  1261. package/dist/types.js +0 -10
  1262. package/dist/types.js.map +0 -1
  1263. package/dist/urls.d.ts +0 -441
  1264. package/dist/urls.d.ts.map +0 -1
  1265. package/dist/urls.gen.d.ts +0 -8
  1266. package/dist/urls.gen.d.ts.map +0 -1
  1267. package/dist/urls.gen.js +0 -8
  1268. package/dist/urls.gen.js.map +0 -1
  1269. package/dist/urls.js +0 -443
  1270. package/dist/urls.js.map +0 -1
  1271. package/dist/use-loader.d.ts +0 -127
  1272. package/dist/use-loader.d.ts.map +0 -1
  1273. package/dist/use-loader.js +0 -237
  1274. package/dist/use-loader.js.map +0 -1
  1275. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  1276. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  1277. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  1278. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  1279. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  1280. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  1281. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  1282. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  1283. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  1284. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  1285. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  1286. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  1287. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  1288. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  1289. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  1290. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  1291. package/dist/vite/ast-handler-extract.d.ts +0 -49
  1292. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  1293. package/dist/vite/ast-handler-extract.js +0 -249
  1294. package/dist/vite/ast-handler-extract.js.map +0 -1
  1295. package/dist/vite/expose-action-id.d.ts +0 -19
  1296. package/dist/vite/expose-action-id.d.ts.map +0 -1
  1297. package/dist/vite/expose-action-id.js +0 -250
  1298. package/dist/vite/expose-action-id.js.map +0 -1
  1299. package/dist/vite/expose-id-utils.d.ts +0 -69
  1300. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  1301. package/dist/vite/expose-id-utils.js +0 -289
  1302. package/dist/vite/expose-id-utils.js.map +0 -1
  1303. package/dist/vite/expose-internal-ids.d.ts +0 -22
  1304. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  1305. package/dist/vite/expose-internal-ids.js +0 -886
  1306. package/dist/vite/expose-internal-ids.js.map +0 -1
  1307. package/dist/vite/index.d.ts +0 -149
  1308. package/dist/vite/index.d.ts.map +0 -1
  1309. package/dist/vite/index.js.bak +0 -5448
  1310. package/dist/vite/index.js.map +0 -1
  1311. package/dist/vite/index.named-routes.gen.ts +0 -103
  1312. package/dist/vite/package-resolution.d.ts +0 -43
  1313. package/dist/vite/package-resolution.d.ts.map +0 -1
  1314. package/dist/vite/package-resolution.js +0 -112
  1315. package/dist/vite/package-resolution.js.map +0 -1
  1316. package/dist/vite/virtual-entries.d.ts +0 -25
  1317. package/dist/vite/virtual-entries.d.ts.map +0 -1
  1318. package/dist/vite/virtual-entries.js +0 -110
  1319. package/dist/vite/virtual-entries.js.map +0 -1
  1320. package/skills/migrate-react-router/cloudflare-workers.md +0 -129
@@ -65,6 +65,7 @@ import {
65
65
  getTagMarkerMemo,
66
66
  getTagMarkerInflight,
67
67
  } from "./cf-tag-marker-memo.js";
68
+ import { createCloudflareZonePurge } from "./cf-zone-purge.js";
68
69
 
69
70
  // ============================================================================
70
71
  // Constants
@@ -137,6 +138,13 @@ const warnedNoKvReadInvalidation = new Set<string>();
137
138
  */
138
139
  const warnedTagInvalidationTtlFloor = new Set<string>();
139
140
 
141
+ /**
142
+ * Stores (by namespace) already warned about the shell family being inert
143
+ * (getShell/putShell no-op without a KV namespace), so a ppr route hitting the
144
+ * silent fail-open warns once per isolate instead of on every request.
145
+ */
146
+ const warnedShellFamilyInert = new Set<string>();
147
+
140
148
  /**
141
149
  * Stores (by namespace) already warned that tag invalidation is writing KV
142
150
  * markers with no expiry (tagInvalidationTtl unset), so the unbounded-growth
@@ -147,6 +155,57 @@ const warnedTagInvalidationTtlFloor = new Set<string>();
147
155
  */
148
156
  const warnedNoTagInvalidationTtl = new Set<string>();
149
157
 
158
+ /**
159
+ * Stores (by namespace) already warned that an entry's tag set produced a
160
+ * Cache-Tag header over Cloudflare's aggregate limit, so the header was
161
+ * omitted (the entry stays cacheable and marker-invalidatable; it just cannot
162
+ * be evicted per-tag by a purge). Once per process, not per write.
163
+ */
164
+ const warnedCacheTagHeaderOverflow = new Set<string>();
165
+
166
+ /**
167
+ * Stores (by namespace) already warned that an over-limit tag set made an
168
+ * entry UNCACHEABLE in KV-less purge mode: with no Cache-Tag tokens a purge
169
+ * cannot evict it, and with no KV there is no marker fallback either, so
170
+ * caching it would serve stale until TTL while updateTag() reports success.
171
+ * Once per process, not per write.
172
+ */
173
+ const warnedCacheTagOverflowUncacheable = new Set<string>();
174
+
175
+ /**
176
+ * Max length of one emitted `rg:*` Cache-Tag token. Cloudflare caps a purge
177
+ * API tag value at 1,024 characters and the aggregate Cache-Tag header at
178
+ * 16 KB; an application tag is unbounded, so an over-long token is collapsed
179
+ * to a deterministic hash (see boundedTagToken) instead of being allowed to
180
+ * fail the whole L1 write. 256 keeps headers compact while leaving room for
181
+ * long-but-reasonable tag names under any namespace.
182
+ */
183
+ const CACHE_TAG_TOKEN_MAX = 256;
184
+
185
+ /**
186
+ * Cloudflare's documented aggregate Cache-Tag header limit (16 KB). A tagged
187
+ * entry whose tokens would exceed it gets NO Cache-Tag header (plus a
188
+ * once-per-namespace warning) rather than a failed cache write; the read path
189
+ * then falls back to the marker check for that entry (see isL1Invalidated).
190
+ */
191
+ const CACHE_TAG_HEADER_MAX_BYTES = 16 * 1024;
192
+
193
+ /**
194
+ * FNV-1a 64-bit hash of a tag value, hex-encoded. Used to bound over-long
195
+ * Cache-Tag tokens: deterministic (write-time token === purge-time token) and
196
+ * collision-safe in the failure direction — a collision over-purges (an extra
197
+ * eviction, healed by the next render), never serves stale.
198
+ * @internal
199
+ */
200
+ function fnv1a64(input: string): string {
201
+ let hash = 0xcbf29ce484222325n;
202
+ for (let i = 0; i < input.length; i++) {
203
+ hash ^= BigInt(input.charCodeAt(i));
204
+ hash = (hash * 0x100000001b3n) & 0xffffffffffffffffn;
205
+ }
206
+ return hash.toString(16).padStart(16, "0");
207
+ }
208
+
150
209
  // ============================================================================
151
210
  // Types
152
211
  // ============================================================================
@@ -227,6 +286,13 @@ interface KVShellEnvelope {
227
286
  i?: string;
228
287
  /** Capture data snapshot: recorded cache-store hits/writes for HIT parity */
229
288
  sn?: import("../types.js").ShellSnapshotRecord[];
289
+ /**
290
+ * ShellCacheEntry.handlerLiveHoles. Must round-trip: the serve side arms the
291
+ * handler-free fast path on `!entry.handlerLiveHoles`, so dropping the flag
292
+ * here silently fast-pathed handler-live entries after a KV round trip —
293
+ * their holes only a handler re-run can fill.
294
+ */
295
+ lh?: boolean;
230
296
  }
231
297
 
232
298
  /**
@@ -273,6 +339,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
273
339
  private readonly debug?: (event: CFCacheReadDebugEvent) => void;
274
340
  private readonly kv?: KVNamespace;
275
341
  private readonly onRevalidateTag?: (tags: string[]) => Promise<void>;
342
+ private readonly tagPurge?: (cacheTags: string[]) => Promise<void>;
276
343
  private readonly tagInvalidationTtl?: number;
277
344
  private readonly tagCacheTtl: number;
278
345
 
@@ -328,6 +395,16 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
328
395
  this.waitUntil = (fn) => options.ctx.waitUntil(fn());
329
396
  this.kv = options.kv;
330
397
  this.onRevalidateTag = options.onRevalidateTag;
398
+ // tagPurge accepts a ready purge function or a credentials object; the
399
+ // object form is normalized through the built-in zone purge client, which
400
+ // validates zoneId/apiToken eagerly so an unset env var fails at
401
+ // construction instead of on the first updateTag().
402
+ this.tagPurge =
403
+ typeof options.tagPurge === "function"
404
+ ? options.tagPurge
405
+ : options.tagPurge
406
+ ? createCloudflareZonePurge(options.tagPurge)
407
+ : undefined;
331
408
  // tagInvalidationTtl feeds KV's expirationTtl, which CF rejects below
332
409
  // KV_MIN_EXPIRATION_TTL (60s) -- a too-small finite value would make EVERY
333
410
  // marker write throw and break ALL invalidation. Floor it (and warn once);
@@ -350,8 +427,14 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
350
427
  // tag machinery (tagCacheTtl for L1 markers, or onRevalidateTag for CDN purge)
351
428
  // but omits kv gets only the purge fired - marker writes are skipped without
352
429
  // kv - yet every tagged read still serves stale data with no other signal.
353
- // Surface that misconfiguration.
354
- if (!this.kv && (this.tagCacheTtl > 0 || this.onRevalidateTag)) {
430
+ // Surface that misconfiguration. Exception: with tagPurge configured (purge
431
+ // mode) L1 eviction is the purge itself, so a KV-less store is a supported
432
+ // L1-only configuration, not a silent no-op.
433
+ if (
434
+ !this.kv &&
435
+ !this.tagPurge &&
436
+ (this.tagCacheTtl > 0 || this.onRevalidateTag)
437
+ ) {
355
438
  this.warnOncePerNamespace(
356
439
  warnedNoKvReadInvalidation,
357
440
  `[CFCacheStore] tagCacheTtl/onRevalidateTag is configured without a KV ` +
@@ -867,9 +950,10 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
867
950
  // when debug is on, so the hot path pays nothing. It is the serial read
868
951
  // that sits between matchMs and bodyReadMs for a tagged entry.
869
952
  const markerStart = this.debug ? Date.now() : 0;
870
- const invalidated = await this.isGloballyInvalidated(
953
+ const invalidated = await this.isL1Invalidated(
871
954
  tagInfo.tags,
872
955
  tagInfo.taggedAt,
956
+ response.headers,
873
957
  );
874
958
  const markerMs = this.debug ? Date.now() - markerStart : undefined;
875
959
  if (invalidated) {
@@ -1025,6 +1109,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1025
1109
  swr?: number,
1026
1110
  ): Promise<void> {
1027
1111
  if (this.isReservedSegmentKey(key, "cache-write")) return;
1112
+ if (this.skipUncacheableTagSet(data.tags)) return;
1028
1113
  try {
1029
1114
  const cache = await this.getCache();
1030
1115
  const request = this.keyToRequest(key);
@@ -1045,6 +1130,9 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1045
1130
  ? { ...data, taggedAt }
1046
1131
  : data;
1047
1132
 
1133
+ // Serialize the segment payload exactly once: L1 stores the JSON body
1134
+ // directly, and kvSetSegment embeds the same string as envelope.d so the
1135
+ // (potentially large) Flight/segment tree is not walked a second time.
1048
1136
  const body = JSON.stringify(dataToStore);
1049
1137
  const response = new Response(body, {
1050
1138
  headers: {
@@ -1081,8 +1169,8 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1081
1169
  await putPromise;
1082
1170
  }
1083
1171
 
1084
- // L2: persist to KV
1085
- this.kvSetSegment(key, dataToStore, staleAt, totalTtl, swrWindow);
1172
+ // L2: persist to KV (reuses `body` as envelope.d)
1173
+ this.kvSetSegment(key, body, staleAt, totalTtl, swrWindow);
1086
1174
  } catch (error) {
1087
1175
  reportCacheError(error, "cache-write", "[CFCacheStore] set");
1088
1176
  }
@@ -1156,7 +1244,13 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1156
1244
 
1157
1245
  // Tag invalidation check (treat invalidated entry as a miss).
1158
1246
  const tagInfo = this.readTagInfo(response.headers);
1159
- if (await this.isGloballyInvalidated(tagInfo.tags, tagInfo.taggedAt)) {
1247
+ if (
1248
+ await this.isL1Invalidated(
1249
+ tagInfo.tags,
1250
+ tagInfo.taggedAt,
1251
+ response.headers,
1252
+ )
1253
+ ) {
1160
1254
  return null;
1161
1255
  }
1162
1256
 
@@ -1232,6 +1326,11 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1232
1326
  headers.delete(CACHE_STATUS_HEADER);
1233
1327
  headers.delete(CACHE_TAGS_HEADER);
1234
1328
  headers.delete(CACHE_TAGGED_AT_HEADER);
1329
+ // Remove OUR namespaced tokens from Cache-Tag while preserving any the
1330
+ // document author set (setTagHeaders appended ours onto theirs). The
1331
+ // author's tags may be load-bearing for their own CDN purging; ours are
1332
+ // internal storage bookkeeping and must not leak to clients.
1333
+ this.stripInternalCacheTags(headers);
1235
1334
  // Internal stale-path bookkeeping (hard-expiry deadline + REVALIDATING
1236
1335
  // stamp). Carried on doc L1 entries for the herd guard; never serve them.
1237
1336
  headers.delete(CACHE_EXPIRES_AT_HEADER);
@@ -1257,6 +1356,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1257
1356
  swr?: number,
1258
1357
  tags?: string[],
1259
1358
  ): Promise<void> {
1359
+ if (this.skipUncacheableTagSet(tags)) return;
1260
1360
  try {
1261
1361
  const cache = await this.getCache();
1262
1362
  const request = this.keyToRequest(`doc:${key}`);
@@ -1424,9 +1524,10 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1424
1524
  // marker-resolution tail only under debug (see get()).
1425
1525
  const tagInfo = this.readTagInfo(response.headers);
1426
1526
  const markerStart = this.debug ? Date.now() : 0;
1427
- const invalidated = await this.isGloballyInvalidated(
1527
+ const invalidated = await this.isL1Invalidated(
1428
1528
  tagInfo.tags,
1429
1529
  tagInfo.taggedAt,
1530
+ response.headers,
1430
1531
  );
1431
1532
  const markerMs = this.debug ? Date.now() - markerStart : undefined;
1432
1533
  if (invalidated) {
@@ -1554,6 +1655,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1554
1655
  value: string,
1555
1656
  options?: CacheItemOptions,
1556
1657
  ): Promise<void> {
1658
+ if (this.skipUncacheableTagSet(options?.tags)) return;
1557
1659
  try {
1558
1660
  const cache = await this.getCache();
1559
1661
  const request = this.keyToRequest(`fn:${key}`);
@@ -1567,7 +1669,17 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1567
1669
  const taggedAt =
1568
1670
  Array.isArray(tags) && tags.length > 0 ? Date.now() : undefined;
1569
1671
 
1570
- const body = JSON.stringify({ value, handles: options?.handles });
1672
+ // Serialize value/handles once; L1 body and KV envelope.v/h share the
1673
+ // escaped strings so a large RSC payload is not re-escaped for L2.
1674
+ const valueJson = JSON.stringify(value);
1675
+ const handlesJson =
1676
+ options?.handles !== undefined
1677
+ ? JSON.stringify(options.handles)
1678
+ : undefined;
1679
+ const body =
1680
+ handlesJson !== undefined
1681
+ ? `{"value":${valueJson},"handles":${handlesJson}}`
1682
+ : `{"value":${valueJson}}`;
1571
1683
  const response = new Response(body, {
1572
1684
  headers: {
1573
1685
  "Content-Type": "application/json",
@@ -1594,24 +1706,24 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1594
1706
  await putPromise;
1595
1707
  }
1596
1708
 
1597
- // L2: persist to KV (KV requires expirationTtl >= 60s)
1709
+ // L2: persist to KV (KV requires expirationTtl >= 60s). Wire shape matches
1710
+ // JSON.stringify(KVItemEnvelope); field names differ from L1 so we assemble
1711
+ // from the pre-escaped value/handles pieces rather than re-stringifying.
1598
1712
  if (this.kv && this.waitUntil && totalTtl >= 60) {
1599
1713
  const kvKey = this.toKVKey(`fn:${key}`);
1714
+ const expiresAt = staleAt + swrWindow * 1000;
1715
+ let envelopeJson = `{"v":${valueJson}`;
1716
+ if (handlesJson !== undefined) envelopeJson += `,"h":${handlesJson}`;
1717
+ envelopeJson += `,"s":${staleAt},"e":${expiresAt}`;
1718
+ if (tags !== undefined) envelopeJson += `,"t":${JSON.stringify(tags)}`;
1719
+ if (taggedAt !== undefined) envelopeJson += `,"ta":${taggedAt}`;
1720
+ envelopeJson += `}`;
1600
1721
  this.waitUntil(() =>
1601
1722
  reportingAsync(
1602
- () => {
1603
- const envelope: KVItemEnvelope = {
1604
- v: value,
1605
- h: options?.handles,
1606
- s: staleAt,
1607
- e: staleAt + swrWindow * 1000,
1608
- t: tags,
1609
- ta: taggedAt,
1610
- };
1611
- return this.kv!.put(kvKey, JSON.stringify(envelope), {
1723
+ () =>
1724
+ this.kv!.put(kvKey, envelopeJson, {
1612
1725
  expirationTtl: totalTtl,
1613
- });
1614
- },
1726
+ }),
1615
1727
  "cache-write",
1616
1728
  "[CFCacheStore] kvSetItem",
1617
1729
  ),
@@ -1635,6 +1747,27 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1635
1747
  // still applies: shell entries carry tags/taggedAt and are checked against the
1636
1748
  // same KV markers isGloballyInvalidated() reads for every other tier.
1637
1749
 
1750
+ /**
1751
+ * Warn once per isolate that the shell family is inert: getShell/putShell
1752
+ * are ONLY called for routes that declared the `ppr` path option, so firing
1753
+ * here (not in the constructor) scopes the warning to apps that actually
1754
+ * use PPR — a KV-less CFCacheStore is a perfectly fine config otherwise.
1755
+ * Without it, the correctness-first fail-open (issue #651) is invisible:
1756
+ * every ppr route is a permanent MISS with zero diagnostics.
1757
+ * @internal
1758
+ */
1759
+ private warnShellFamilyInertOnce(): void {
1760
+ this.warnOncePerNamespace(
1761
+ warnedShellFamilyInert,
1762
+ `[CFCacheStore] a ppr route resolved to this store, but no KV namespace ` +
1763
+ `is configured, so the shell family (getShell/putShell) is a no-op: ` +
1764
+ `every ppr route stays a permanent shell MISS (the page still serves ` +
1765
+ `via a full render). Bind a KV namespace and pass it — ` +
1766
+ `new CFCacheStore({ ctx, kv: env.CACHE_KV }) — or use a shell-capable ` +
1767
+ `store via createRouter({ cache }).`,
1768
+ );
1769
+ }
1770
+
1638
1771
  /**
1639
1772
  * Get a cached PPR shell entry by key from KV (no L1). Applies the KV read
1640
1773
  * budget, corrupt-entry eviction, hard-expiry, and tag invalidation exactly
@@ -1645,7 +1778,10 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1645
1778
  async getShell(
1646
1779
  key: string,
1647
1780
  ): Promise<{ entry: ShellCacheEntry; shouldRevalidate?: boolean } | null> {
1648
- if (!this.kv) return null;
1781
+ if (!this.kv) {
1782
+ this.warnShellFamilyInertOnce();
1783
+ return null;
1784
+ }
1649
1785
  try {
1650
1786
  const kvKey = this.toKVKey(`shell:${key}`);
1651
1787
  const { value: envelope, timedOut } =
@@ -1678,6 +1814,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1678
1814
  buildVersion: envelope.bv,
1679
1815
  initialTheme: envelope.i,
1680
1816
  snapshot: envelope.sn,
1817
+ handlerLiveHoles: envelope.lh,
1681
1818
  createdAt: envelope.c,
1682
1819
  },
1683
1820
  shouldRevalidate,
@@ -1701,7 +1838,11 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1701
1838
  tags?: string[],
1702
1839
  ): Promise<void> {
1703
1840
  // KV-only tier: needs a KV namespace and waitUntil (writes are non-blocking).
1704
- if (!this.kv || !this.waitUntil) return;
1841
+ if (!this.kv) {
1842
+ this.warnShellFamilyInertOnce();
1843
+ return;
1844
+ }
1845
+ if (!this.waitUntil) return;
1705
1846
  try {
1706
1847
  const ttl = resolveTtl(ttlSeconds, this.defaults, DEFAULT_FUNCTION_TTL);
1707
1848
  const swrWindow = resolveSwrWindow(swrSeconds, this.defaults);
@@ -1745,6 +1886,7 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1745
1886
  ta: taggedAt,
1746
1887
  i: entry.initialTheme,
1747
1888
  sn: entry.snapshot,
1889
+ lh: entry.handlerLiveHoles,
1748
1890
  };
1749
1891
  return this.kv!.put(kvKey, JSON.stringify(envelope), {
1750
1892
  expirationTtl: totalTtl,
@@ -1938,13 +2080,19 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1938
2080
  * Header entries carrying an entry's tags (JSON-encoded, comma-safe) and the
1939
2081
  * timestamp they were attached. Returns an empty object when there are no
1940
2082
  * tags so untagged entries stay header-free and skip the invalidation check.
2083
+ *
2084
+ * Also stamps the namespaced `Cache-Tag` header (see entryCacheTags) so a
2085
+ * Cloudflare purge-by-tag can evict the entry — the mechanism purge mode
2086
+ * (tagPurge) relies on. Written unconditionally (not only in purge mode):
2087
+ * it costs a small header and makes existing entries purgeable the moment a
2088
+ * consumer turns purge mode on, with no re-render needed.
1941
2089
  */
1942
2090
  private tagHeaderEntries(
1943
2091
  tags: string[] | undefined,
1944
2092
  taggedAt: number | undefined,
1945
2093
  ): Record<string, string> {
1946
2094
  if (!Array.isArray(tags) || tags.length === 0 || !taggedAt) return {};
1947
- return {
2095
+ const entries: Record<string, string> = {
1948
2096
  // encodeURIComponent so the value is pure ASCII: HTTP header values are
1949
2097
  // ByteStrings, but JSON.stringify leaves codepoints > U+00FF (emoji/CJK)
1950
2098
  // verbatim, which makes new Response({ headers }) throw and the outer
@@ -1953,13 +2101,78 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1953
2101
  [CACHE_TAGS_HEADER]: encodeURIComponent(JSON.stringify(tags)),
1954
2102
  [CACHE_TAGGED_AT_HEADER]: String(taggedAt),
1955
2103
  };
2104
+ // Over Cloudflare's aggregate Cache-Tag limit the header is OMITTED — the
2105
+ // entry still caches and stays marker-invalidatable; it just cannot be
2106
+ // purge-evicted per tag (isL1Invalidated falls back to the marker check
2107
+ // for such entries, so purge mode stays correct). Emitting a header over
2108
+ // the limit would instead risk failing the whole L1 write. The KV-LESS
2109
+ // purge-mode combination never reaches here: there the marker fallback
2110
+ // has no KV to consult, so skipUncacheableTagSet rejects the write first.
2111
+ const cacheTag = this.entryCacheTagHeader(tags);
2112
+ if (cacheTag !== null) {
2113
+ entries["Cache-Tag"] = cacheTag;
2114
+ } else {
2115
+ this.warnOncePerNamespace(
2116
+ warnedCacheTagHeaderOverflow,
2117
+ `[CFCacheStore] an entry's ${tags.length} tags produce a Cache-Tag ` +
2118
+ `header over Cloudflare's ${CACHE_TAG_HEADER_MAX_BYTES}-byte ` +
2119
+ `limit; the header was omitted. The entry stays cacheable and ` +
2120
+ `marker-invalidatable, but a purge-by-tag cannot evict it (purge ` +
2121
+ `mode falls back to the marker check for it). Reduce the number ` +
2122
+ `of tags per entry.`,
2123
+ );
2124
+ }
2125
+ return entries;
2126
+ }
2127
+
2128
+ /**
2129
+ * Joined entry Cache-Tag header value for `tags`, or null when it would
2130
+ * exceed Cloudflare's aggregate header limit. Tokens are pure ASCII
2131
+ * (encodeURIComponent output), so .length is bytes.
2132
+ * @internal
2133
+ */
2134
+ private entryCacheTagHeader(tags: string[]): string | null {
2135
+ const joined = this.entryCacheTags(tags).join(",");
2136
+ return joined.length <= CACHE_TAG_HEADER_MAX_BYTES ? joined : null;
2137
+ }
2138
+
2139
+ /**
2140
+ * Write-path gate for the one configuration where an over-limit tag set has
2141
+ * NO invalidation path: purge mode WITHOUT KV. There the entry Cache-Tag
2142
+ * tokens are the only eviction mechanism, and a tag set whose header
2143
+ * overflows CACHE_TAG_HEADER_MAX_BYTES gets no tokens — a purge could never
2144
+ * evict the entry and there is no KV marker fallback, so it would serve
2145
+ * stale until TTL while updateTag() reports success. Returns true (and
2146
+ * warns once) so the caller SKIPS caching: the route simply renders fresh,
2147
+ * which is the fail-safe direction. With KV configured the omitted-header
2148
+ * entry falls back to the marker check (see tagHeaderEntries), and KV-less
2149
+ * MARKER mode keeps its documented no-read-side-invalidation semantics —
2150
+ * neither is gated.
2151
+ * @internal
2152
+ */
2153
+ private skipUncacheableTagSet(tags: string[] | undefined): boolean {
2154
+ if (!this.tagPurge || this.kv) return false;
2155
+ if (!Array.isArray(tags) || tags.length === 0) return false;
2156
+ if (this.entryCacheTagHeader(tags) !== null) return false;
2157
+ this.warnOncePerNamespace(
2158
+ warnedCacheTagOverflowUncacheable,
2159
+ `[CFCacheStore] an entry's ${tags.length} tags produce a Cache-Tag ` +
2160
+ `header over Cloudflare's ${CACHE_TAG_HEADER_MAX_BYTES}-byte limit. ` +
2161
+ `In purge mode without KV those tokens are the only invalidation ` +
2162
+ `path, so the entry was NOT cached (it renders fresh instead of ` +
2163
+ `becoming un-invalidatable). Reduce the number of tags per entry, ` +
2164
+ `or configure { kv } to get the marker fallback.`,
2165
+ );
2166
+ return true;
1956
2167
  }
1957
2168
 
1958
2169
  /**
1959
2170
  * Merge the internal tag headers onto an existing Headers instance. The
1960
2171
  * from-scratch paths spread tagHeaderEntries() into an object-literal init;
1961
2172
  * the document put/promote paths build a Headers first, so they .set() each
1962
- * entry instead.
2173
+ * entry instead — except `Cache-Tag`, which is APPENDED: a document author
2174
+ * may have set their own Cache-Tag, and clobbering it would break their CDN
2175
+ * purging. Append produces the comma-merged list CF expects.
1963
2176
  */
1964
2177
  private setTagHeaders(
1965
2178
  headers: Headers,
@@ -1969,7 +2182,8 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
1969
2182
  for (const [name, value] of Object.entries(
1970
2183
  this.tagHeaderEntries(tags, taggedAt),
1971
2184
  )) {
1972
- headers.set(name, value);
2185
+ if (name === "Cache-Tag") headers.append(name, value);
2186
+ else headers.set(name, value);
1973
2187
  }
1974
2188
  }
1975
2189
 
@@ -2037,6 +2251,46 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2037
2251
  }
2038
2252
  }
2039
2253
 
2254
+ /**
2255
+ * Tag-invalidation check for an L1 (Cache API) hit. In purge mode (tagPurge
2256
+ * configured), invalidateTags() evicts L1 entries via a Cloudflare
2257
+ * purge-by-tag call, so a hit that SURVIVED is trusted without a per-read
2258
+ * marker lookup — that skipped lookup is the entire point of purge mode.
2259
+ * Only the per-request memo is consulted (synchronous, no KV read) so a
2260
+ * request that ran updateTag() still masks its own entries during the purge
2261
+ * propagation window (read-your-own-writes).
2262
+ *
2263
+ * The trust is conditional on the entry actually CARRYING this store's
2264
+ * entry Cache-Tag tokens (`headers`): an entry a purge cannot reach — one
2265
+ * written before the tokens existed, or whose tag set overflowed the
2266
+ * Cache-Tag header limit — keeps the full marker check, or purge mode
2267
+ * would serve it stale until TTL with no eviction path.
2268
+ *
2269
+ * Without tagPurge this is the full marker cascade. KV-tier reads and
2270
+ * shells always use isGloballyInvalidated directly: purge cannot reach KV,
2271
+ * so the markers stay their invalidation mechanism.
2272
+ * @internal
2273
+ */
2274
+ private async isL1Invalidated(
2275
+ tags: string[] | undefined,
2276
+ taggedAt: number | undefined,
2277
+ headers: Headers,
2278
+ ): Promise<boolean> {
2279
+ if (!this.tagPurge) return this.isGloballyInvalidated(tags, taggedAt);
2280
+ if (!Array.isArray(tags) || tags.length === 0 || !taggedAt) return false;
2281
+ if (!this.hasEntryCacheTags(headers)) {
2282
+ return this.isGloballyInvalidated(tags, taggedAt);
2283
+ }
2284
+ const ctx = _getRequestContext();
2285
+ if (!ctx) return false;
2286
+ const memo = getTagMarkerMemo(ctx, this);
2287
+ for (const tag of tags) {
2288
+ const marker = memo.get(tag);
2289
+ if (marker != null && marker >= taggedAt) return true;
2290
+ }
2291
+ return false;
2292
+ }
2293
+
2040
2294
  /** Synthetic Cache API request for a tag's L1-cached invalidation marker. */
2041
2295
  private tagMarkerRequest(tag: string): Request {
2042
2296
  return this.keyToRequest(`${TAG_MARKER_CACHE_PREFIX}${tag}`);
@@ -2166,6 +2420,18 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2166
2420
  return resolved;
2167
2421
  }
2168
2422
 
2423
+ /**
2424
+ * Namespace token used inside every `rg:*` Cache-Tag. encodeURIComponent'd
2425
+ * like the tag values: a raw namespace containing a comma would split into
2426
+ * bogus tokens inside the comma-delimited Cache-Tag header — breaking both
2427
+ * stripInternalCacheTags (internal tokens would leak to clients) and the
2428
+ * purge match (the purged tag string never equals any stored token).
2429
+ * @internal
2430
+ */
2431
+ private nsToken(): string {
2432
+ return encodeURIComponent(this.namespace ?? "default");
2433
+ }
2434
+
2169
2435
  /**
2170
2436
  * Cloudflare Cache-Tags written on a tag's L1 marker entry, namespaced per
2171
2437
  * store so purges never collide with other Cache-Tags in the zone. Three
@@ -2173,19 +2439,99 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2173
2439
  * rg:{ns} - everything this store cached (deploy/nuclear reset)
2174
2440
  * rg:{ns}:lk - all tag-lookup markers
2175
2441
  * rg:{ns}:lk:{tag} - this tag's lookup (the normal updateTag purge target)
2176
- * The tag value is encodeURIComponent'd so commas/spaces can't corrupt the
2177
- * comma-delimited Cache-Tag header.
2442
+ * The namespace and tag value are encodeURIComponent'd so commas/spaces
2443
+ * can't corrupt the comma-delimited Cache-Tag header.
2178
2444
  * @internal
2179
2445
  */
2180
2446
  private lookupCacheTags(tag: string): string[] {
2181
- const ns = this.namespace ?? "default";
2447
+ const ns = this.nsToken();
2182
2448
  return [`rg:${ns}`, `rg:${ns}:lk`, this.lookupPurgeTag(tag)];
2183
2449
  }
2184
2450
 
2451
+ /**
2452
+ * Build one `{prefix}{tag}` Cache-Tag token, bounded to CACHE_TAG_TOKEN_MAX:
2453
+ * an over-long encoded tag collapses to `{prefix}h:{fnv1a64(tag)}` so a
2454
+ * legally-long application tag can never blow Cloudflare's per-tag purge
2455
+ * limit (1,024 chars) or bloat the header. Deterministic, so the write-time
2456
+ * token and the invalidate-time purge token always agree.
2457
+ * @internal
2458
+ */
2459
+ private boundedTagToken(prefix: string, tag: string): string {
2460
+ const token = `${prefix}${encodeURIComponent(tag)}`;
2461
+ if (token.length <= CACHE_TAG_TOKEN_MAX) return token;
2462
+ return `${prefix}h:${fnv1a64(tag)}`;
2463
+ }
2464
+
2185
2465
  /** The specific Cache-Tag a consumer purges to evict tag `tag`'s lookup. */
2186
2466
  private lookupPurgeTag(tag: string): string {
2187
- const ns = this.namespace ?? "default";
2188
- return `rg:${ns}:lk:${encodeURIComponent(tag)}`;
2467
+ return this.boundedTagToken(`rg:${this.nsToken()}:lk:`, tag);
2468
+ }
2469
+
2470
+ /**
2471
+ * Cloudflare Cache-Tags written on a tagged DATA entry (segment/item/doc),
2472
+ * mirroring the lookup-marker tiers but under `:e` (entry):
2473
+ * rg:{ns} - everything this store cached (deploy/nuclear reset)
2474
+ * rg:{ns}:e - all data entries
2475
+ * rg:{ns}:e:{t} - entries carrying tag `t` (the purge-mode invalidation
2476
+ * target; see CFCacheStoreOptions.tagPurge)
2477
+ * Namespace and tag value encodeURIComponent'd like the lookup tier.
2478
+ * @internal
2479
+ */
2480
+ private entryCacheTags(tags: string[]): string[] {
2481
+ const ns = this.nsToken();
2482
+ return [
2483
+ `rg:${ns}`,
2484
+ `rg:${ns}:e`,
2485
+ ...tags.map((tag) => this.entryPurgeTag(tag)),
2486
+ ];
2487
+ }
2488
+
2489
+ /** The specific Cache-Tag purged to evict entries carrying tag `tag`. */
2490
+ private entryPurgeTag(tag: string): string {
2491
+ return this.boundedTagToken(`rg:${this.nsToken()}:e:`, tag);
2492
+ }
2493
+
2494
+ /**
2495
+ * Whether an L1 entry's stored headers carry this store's entry Cache-Tag
2496
+ * tokens — i.e. whether a purge-by-tag can actually evict it. False for an
2497
+ * entry written before this feature existed, or one whose tag set exceeded
2498
+ * CACHE_TAG_HEADER_MAX_BYTES (header omitted). Purge mode only trusts
2499
+ * entries a purge can reach; the rest keep the marker check.
2500
+ * @internal
2501
+ */
2502
+ private hasEntryCacheTags(headers: Headers): boolean {
2503
+ const raw = headers.get("Cache-Tag");
2504
+ if (raw === null) return false;
2505
+ const tier = `rg:${this.nsToken()}:e`;
2506
+ return raw.split(",").some((token) => {
2507
+ const trimmed = token.trim();
2508
+ return trimmed === tier || trimmed.startsWith(`${tier}:`);
2509
+ });
2510
+ }
2511
+
2512
+ /**
2513
+ * Drop this store's namespaced tokens (`rg:{ns}` and `rg:{ns}:*`) from a
2514
+ * Cache-Tag header, keeping author-set tokens intact. Deletes the header
2515
+ * when nothing remains. Serve-path counterpart of setTagHeaders' append.
2516
+ * An author token that exactly equals a reserved `rg:{ns}` tier is stripped
2517
+ * too — `rg:` is this store's documented-reserved Cache-Tag prefix.
2518
+ * @internal
2519
+ */
2520
+ private stripInternalCacheTags(headers: Headers): void {
2521
+ const raw = headers.get("Cache-Tag");
2522
+ if (raw === null) return;
2523
+ const ns = this.nsToken();
2524
+ const kept = raw
2525
+ .split(",")
2526
+ .map((token) => token.trim())
2527
+ .filter(
2528
+ (token) =>
2529
+ token.length > 0 &&
2530
+ token !== `rg:${ns}` &&
2531
+ !token.startsWith(`rg:${ns}:`),
2532
+ );
2533
+ if (kept.length > 0) headers.set("Cache-Tag", kept.join(","));
2534
+ else headers.delete("Cache-Tag");
2189
2535
  }
2190
2536
 
2191
2537
  /**
@@ -2249,9 +2595,12 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2249
2595
  * writes the fresh marker straight into this colo's L1 (write-through, NOT
2250
2596
  * delete - a delete would let the next read re-read a not-yet-converged KV
2251
2597
  * value and re-arm the stale window), and memoizes it for same-request
2252
- * read-your-own-writes. Finally fires onRevalidateTag with the namespaced
2253
- * lookup Cache-Tags so a consumer purge evicts the cached lookups in other
2254
- * colos promptly (otherwise they converge within tagCacheTtl).
2598
+ * read-your-own-writes. In purge mode (tagPurge) it then AWAITS the
2599
+ * consumer's purge-by-tag call with the entry Cache-Tags the eviction the
2600
+ * per-read marker skip on L1 hits relies on. Finally fires onRevalidateTag
2601
+ * with the namespaced lookup Cache-Tags so a consumer purge evicts the
2602
+ * cached lookups in other colos promptly (otherwise they converge within
2603
+ * tagCacheTtl).
2255
2604
  *
2256
2605
  * Durable-write integrity: the in-memory write-through (memo + L1) for a tag
2257
2606
  * runs ONLY after that tag's KV marker write is confirmed. If any KV write
@@ -2260,16 +2609,31 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2260
2609
  * silently reporting success while other requests/colos serve stale data. The
2261
2610
  * eager purge still fires for the whole batch first (it is additive).
2262
2611
  */
2612
+ /**
2613
+ * Build-shell read-through gate (SegmentCacheStore.isTagsInvalidatedSince):
2614
+ * a baked shell entry is immutable in the build manifest, so eviction is
2615
+ * answered by the SAME KV tag markers updateTag() writes, compared against
2616
+ * the entry's build-time createdAt. Thin public wrapper over the private
2617
+ * envelope check (identical semantics: marker >= since, fail open).
2618
+ */
2619
+ async isTagsInvalidatedSince(
2620
+ tags: string[],
2621
+ sinceMs: number,
2622
+ ): Promise<boolean> {
2623
+ return this.isGloballyInvalidated(tags, sinceMs);
2624
+ }
2625
+
2263
2626
  async invalidateTags(tags: string[]): Promise<void> {
2264
2627
  if (tags.length === 0) return;
2265
2628
  const invalidatedAt = Date.now();
2266
2629
  const ctx = _getRequestContext();
2267
2630
  const memo = ctx ? getTagMarkerMemo(ctx, this) : undefined;
2268
2631
 
2269
- if (!this.kv && !this.onRevalidateTag) {
2632
+ if (!this.kv && !this.onRevalidateTag && !this.tagPurge) {
2270
2633
  console.warn(
2271
2634
  `[CFCacheStore] invalidateTags had no effect: configure a KV namespace ` +
2272
- `for distributed invalidation, or an onRevalidateTag hook.`,
2635
+ `for distributed invalidation, a tagPurge hook for purge-by-tag ` +
2636
+ `eviction, or an onRevalidateTag hook.`,
2273
2637
  );
2274
2638
  }
2275
2639
 
@@ -2324,16 +2688,20 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2324
2688
  // only when KV is configured. Markers are read exclusively through
2325
2689
  // isGloballyInvalidated(), which short-circuits to "not invalidated" when
2326
2690
  // !this.kv; writing memo/L1 markers without KV would be dead state no read
2327
- // path ever consults. The onRevalidateTag purge below still fires regardless
2328
- // (it is additive and external to the marker cascade). The memo write is
2329
- // synchronous (read-your-own-writes); the L1 Cache API writes are
2330
- // independent, so fan them out in parallel rather than awaiting each.
2331
- if (this.kv) {
2691
+ // path ever consults EXCEPT the memo in purge mode: isL1Invalidated()
2692
+ // consults it (and only it) on every L1 hit, so a KV-less purge-mode store
2693
+ // still writes the memo for same-request read-your-own-writes. The
2694
+ // onRevalidateTag purge below still fires regardless (it is additive and
2695
+ // external to the marker cascade). The memo write is synchronous
2696
+ // (read-your-own-writes); the L1 Cache API writes are independent, so fan
2697
+ // them out in parallel rather than awaiting each.
2698
+ const lookupMarkerCacheActive = Boolean(this.kv) && this.tagCacheTtl > 0;
2699
+ if (this.kv || this.tagPurge) {
2332
2700
  const l1Writes: Promise<void>[] = [];
2333
2701
  for (const tag of tags) {
2334
2702
  if (failedTags.has(tag)) continue;
2335
2703
  memo?.set(tag, invalidatedAt);
2336
- if (this.tagCacheTtl > 0) {
2704
+ if (lookupMarkerCacheActive) {
2337
2705
  l1Writes.push(
2338
2706
  this.putTagMarkerL1(tag, invalidatedAt, { critical: true }),
2339
2707
  );
@@ -2342,6 +2710,35 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2342
2710
  if (l1Writes.length > 0) await Promise.all(l1Writes);
2343
2711
  }
2344
2712
 
2713
+ // Purge mode: evict the tagged L1 entries across every colo via the
2714
+ // consumer's purge-by-tag call. AWAITED, and a failure is correctness-
2715
+ // bearing (unlike onRevalidateTag): with the per-read marker lookup skipped
2716
+ // on L1 hits, a dropped purge leaves L1 serving stale until TTL — so it
2717
+ // surfaces through updateTag() like a failed marker write. Fired for the
2718
+ // whole batch regardless of marker outcome (purging is additive and
2719
+ // idempotent; a retry re-runs both). Lookup Cache-Tags ride along when the
2720
+ // L1 marker cache is active (tagCacheTtl > 0 AND kv — without kv no lookup
2721
+ // entries are ever written) so a single purge call also converges other
2722
+ // colos' cached lookups (no separate onRevalidateTag needed).
2723
+ let purgeError: unknown;
2724
+ if (this.tagPurge) {
2725
+ const purgeTags = tags.flatMap((tag) =>
2726
+ lookupMarkerCacheActive
2727
+ ? [this.entryPurgeTag(tag), this.lookupPurgeTag(tag)]
2728
+ : [this.entryPurgeTag(tag)],
2729
+ );
2730
+ try {
2731
+ await this.tagPurge(purgeTags);
2732
+ } catch (error) {
2733
+ purgeError = error ?? new Error("tagPurge rejected");
2734
+ reportCacheError(
2735
+ purgeError,
2736
+ "cache-invalidate",
2737
+ "[CFCacheStore] tagPurge hook",
2738
+ );
2739
+ }
2740
+ }
2741
+
2345
2742
  // One batched eager purge of the lookup markers for the whole call. Fired
2346
2743
  // regardless of KV write outcome (it is additive and uses pure string ops).
2347
2744
  if (this.onRevalidateTag) {
@@ -2356,13 +2753,25 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2356
2753
  }
2357
2754
  }
2358
2755
 
2359
- if (failedTags.size > 0) {
2756
+ if (failedTags.size > 0 || purgeError) {
2757
+ const parts: string[] = [];
2758
+ if (failedTags.size > 0) {
2759
+ parts.push(
2760
+ `${failedTags.size}/${tags.length} tag marker write(s) failed: ` +
2761
+ `${[...failedTags].join(", ")}`,
2762
+ );
2763
+ }
2764
+ if (purgeError) {
2765
+ parts.push(
2766
+ `the tagPurge purge-by-tag call failed (tagged L1 entries stay ` +
2767
+ `stale until TTL)`,
2768
+ );
2769
+ }
2360
2770
  const err = new Error(
2361
- `[CFCacheStore] ${failedTags.size}/${tags.length} tag marker write(s) ` +
2362
- `failed: ${[...failedTags].join(", ")}. Those tags may still serve ` +
2771
+ `[CFCacheStore] ${parts.join("; ")}. Those tags may still serve ` +
2363
2772
  `stale data across requests/colos; retry the invalidation.`,
2364
2773
  );
2365
- (err as Error & { cause?: unknown }).cause = errors[0];
2774
+ (err as Error & { cause?: unknown }).cause = errors[0] ?? purgeError;
2366
2775
  throw err;
2367
2776
  }
2368
2777
  }
@@ -2455,11 +2864,14 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2455
2864
 
2456
2865
  /**
2457
2866
  * Write segment data to KV.
2867
+ *
2868
+ * `dataJson` is the already-serialized CachedEntryData body also stored in
2869
+ * L1 — embedded as envelope.d without a second JSON.stringify walk.
2458
2870
  * @internal
2459
2871
  */
2460
2872
  private kvSetSegment(
2461
2873
  key: string,
2462
- data: CachedEntryData,
2874
+ dataJson: string,
2463
2875
  staleAt: number,
2464
2876
  totalTtl: number,
2465
2877
  swrWindow: number,
@@ -2491,19 +2903,16 @@ export class CFCacheStore<TEnv = unknown> implements SegmentCacheStore<TEnv> {
2491
2903
  }
2492
2904
 
2493
2905
  const expiresAt = staleAt + swrWindow * 1000;
2906
+ // Same wire shape as JSON.stringify({ d, s, e }) — dataJson is already
2907
+ // valid JSON for CachedEntryData, so embedding it avoids re-walking the tree.
2908
+ const envelopeJson = `{"d":${dataJson},"s":${staleAt},"e":${expiresAt}}`;
2494
2909
 
2495
2910
  this.waitUntil(() =>
2496
2911
  reportingAsync(
2497
- () => {
2498
- const envelope: KVSegmentEnvelope = {
2499
- d: data,
2500
- s: staleAt,
2501
- e: expiresAt,
2502
- };
2503
- return this.kv!.put(kvKey, JSON.stringify(envelope), {
2912
+ () =>
2913
+ this.kv!.put(kvKey, envelopeJson, {
2504
2914
  expirationTtl: totalTtl,
2505
- });
2506
- },
2915
+ }),
2507
2916
  "cache-write",
2508
2917
  "[CFCacheStore] kvSetSegment",
2509
2918
  ),