@rangojs/router 0.0.0-experimental.tapabs3 → 0.1.1

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