@rangojs/router 0.1.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/README.md +2 -1
  2. package/dist/types/browser/prefetch/default-strategy.d.ts +22 -0
  3. package/dist/types/browser/prefetch/runtime.d.ts +0 -1
  4. package/dist/types/browser/react/Link.d.ts +8 -11
  5. package/dist/types/browser/types.d.ts +5 -0
  6. package/dist/types/cache/document-cache.d.ts +3 -1
  7. package/dist/types/cache/types.d.ts +10 -3
  8. package/dist/types/route-definition/helpers-types.d.ts +6 -6
  9. package/dist/types/router/match-handlers.d.ts +2 -3
  10. package/dist/types/router/prefetch-default.d.ts +28 -0
  11. package/dist/types/router/router-interfaces.d.ts +7 -0
  12. package/dist/types/router/router-options.d.ts +30 -0
  13. package/dist/types/router/segment-resolution/view-transition-default.d.ts +3 -4
  14. package/dist/types/router/transition-when.d.ts +13 -0
  15. package/dist/types/rsc/capture-queue.d.ts +6 -0
  16. package/dist/types/rsc/shell-capture.d.ts +15 -7
  17. package/dist/types/rsc/shell-serve.d.ts +6 -3
  18. package/dist/types/rsc/transition-gate.d.ts +10 -14
  19. package/dist/types/rsc/types.d.ts +2 -0
  20. package/dist/types/server/request-context.d.ts +5 -1
  21. package/dist/types/testing/e2e/index.d.ts +3 -3
  22. package/dist/types/testing/e2e/page-helpers.d.ts +24 -0
  23. package/dist/types/testing/index.d.ts +2 -2
  24. package/dist/types/testing/run-transition-when.d.ts +6 -5
  25. package/dist/types/testing/shell-status.d.ts +23 -3
  26. package/dist/types/types/segments.d.ts +27 -22
  27. package/dist/types/urls/path-helper-types.d.ts +4 -3
  28. package/dist/types.backup/__internal.d.ts +127 -0
  29. package/dist/types.backup/bin/rango.d.ts +1 -0
  30. package/dist/types.backup/browser/action-coordinator.d.ts +57 -0
  31. package/dist/types.backup/browser/action-fence.d.ts +33 -0
  32. package/dist/types.backup/browser/app-shell.d.ts +34 -0
  33. package/dist/types.backup/browser/app-version.d.ts +6 -0
  34. package/dist/types.backup/browser/connection-warmup.d.ts +31 -0
  35. package/dist/types.backup/browser/cookie-name.d.ts +66 -0
  36. package/dist/types.backup/browser/event-controller.d.ts +221 -0
  37. package/dist/types.backup/browser/history-state.d.ts +26 -0
  38. package/dist/types.backup/browser/index.d.ts +1 -0
  39. package/dist/types.backup/browser/intercept-utils.d.ts +30 -0
  40. package/dist/types.backup/browser/invalidate-client-cache.d.ts +17 -0
  41. package/dist/types.backup/browser/link-interceptor.d.ts +43 -0
  42. package/dist/types.backup/browser/logging.d.ts +33 -0
  43. package/dist/types.backup/browser/merge-segment-loaders.d.ts +38 -0
  44. package/dist/types.backup/browser/navigation-bridge.d.ts +27 -0
  45. package/dist/types.backup/browser/navigation-client.d.ts +17 -0
  46. package/dist/types.backup/browser/navigation-store-handle.d.ts +25 -0
  47. package/dist/types.backup/browser/navigation-store.d.ts +95 -0
  48. package/dist/types.backup/browser/navigation-transaction.d.ts +75 -0
  49. package/dist/types.backup/browser/network-error-handler.d.ts +35 -0
  50. package/dist/types.backup/browser/partial-update.d.ts +61 -0
  51. package/dist/types.backup/browser/prefetch/cache.d.ts +183 -0
  52. package/dist/types.backup/browser/prefetch/fetch.d.ts +52 -0
  53. package/dist/types.backup/browser/prefetch/observer.d.ts +27 -0
  54. package/dist/types.backup/browser/prefetch/policy.d.ts +13 -0
  55. package/dist/types.backup/browser/prefetch/queue.d.ts +48 -0
  56. package/dist/types.backup/browser/prefetch/resource-ready.d.ts +28 -0
  57. package/dist/types.backup/browser/rango-state.d.ts +52 -0
  58. package/dist/types.backup/browser/react/Link.d.ts +140 -0
  59. package/dist/types.backup/browser/react/NavigationProvider.d.ts +88 -0
  60. package/dist/types.backup/browser/react/ScrollRestoration.d.ts +78 -0
  61. package/dist/types.backup/browser/react/context.d.ts +54 -0
  62. package/dist/types.backup/browser/react/filter-segment-order.d.ts +35 -0
  63. package/dist/types.backup/browser/react/index.d.ts +1 -0
  64. package/dist/types.backup/browser/react/location-state-shared.d.ts +162 -0
  65. package/dist/types.backup/browser/react/location-state.d.ts +29 -0
  66. package/dist/types.backup/browser/react/mount-context.d.ts +23 -0
  67. package/dist/types.backup/browser/react/nonce-context.d.ts +14 -0
  68. package/dist/types.backup/browser/react/shallow-equal.d.ts +5 -0
  69. package/dist/types.backup/browser/react/use-action.d.ts +61 -0
  70. package/dist/types.backup/browser/react/use-handle.d.ts +21 -0
  71. package/dist/types.backup/browser/react/use-href.d.ts +32 -0
  72. package/dist/types.backup/browser/react/use-link-status.d.ts +36 -0
  73. package/dist/types.backup/browser/react/use-mount.d.ts +24 -0
  74. package/dist/types.backup/browser/react/use-navigation.d.ts +15 -0
  75. package/dist/types.backup/browser/react/use-params.d.ts +21 -0
  76. package/dist/types.backup/browser/react/use-pathname.d.ts +13 -0
  77. package/dist/types.backup/browser/react/use-reverse.d.ts +40 -0
  78. package/dist/types.backup/browser/react/use-router.d.ts +23 -0
  79. package/dist/types.backup/browser/react/use-search-params.d.ts +19 -0
  80. package/dist/types.backup/browser/react/use-segments.d.ts +29 -0
  81. package/dist/types.backup/browser/response-adapter.d.ts +58 -0
  82. package/dist/types.backup/browser/rsc-router.d.ts +141 -0
  83. package/dist/types.backup/browser/scroll-restoration.d.ts +103 -0
  84. package/dist/types.backup/browser/segment-reconciler.d.ts +74 -0
  85. package/dist/types.backup/browser/segment-structure-assert.d.ts +16 -0
  86. package/dist/types.backup/browser/server-action-bridge.d.ts +29 -0
  87. package/dist/types.backup/browser/types.d.ts +530 -0
  88. package/dist/types.backup/browser/validate-redirect-origin.d.ts +28 -0
  89. package/dist/types.backup/build/collect-fallback-refs.d.ts +5 -0
  90. package/dist/types.backup/build/generate-manifest.d.ts +100 -0
  91. package/dist/types.backup/build/generate-route-types.d.ts +8 -0
  92. package/dist/types.backup/build/index.d.ts +21 -0
  93. package/dist/types.backup/build/prefix-tree-utils.d.ts +56 -0
  94. package/dist/types.backup/build/route-trie.d.ts +89 -0
  95. package/dist/types.backup/build/route-types/ast-helpers.d.ts +3 -0
  96. package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +13 -0
  97. package/dist/types.backup/build/route-types/codegen.d.ts +16 -0
  98. package/dist/types.backup/build/route-types/include-resolution.d.ts +74 -0
  99. package/dist/types.backup/build/route-types/param-extraction.d.ts +13 -0
  100. package/dist/types.backup/build/route-types/per-module-writer.d.ts +18 -0
  101. package/dist/types.backup/build/route-types/router-processing.d.ts +82 -0
  102. package/dist/types.backup/build/route-types/scan-filter.d.ts +17 -0
  103. package/dist/types.backup/build/route-types/source-scan.d.ts +13 -0
  104. package/dist/types.backup/build/runtime-discovery.d.ts +24 -0
  105. package/dist/types.backup/cache/background-task.d.ts +21 -0
  106. package/dist/types.backup/cache/cache-error.d.ts +71 -0
  107. package/dist/types.backup/cache/cache-key-utils.d.ts +35 -0
  108. package/dist/types.backup/cache/cache-policy.d.ts +59 -0
  109. package/dist/types.backup/cache/cache-runtime.d.ts +51 -0
  110. package/dist/types.backup/cache/cache-scope.d.ts +134 -0
  111. package/dist/types.backup/cache/cache-tag.d.ts +79 -0
  112. package/dist/types.backup/cache/cf/cf-base64.d.ts +4 -0
  113. package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +105 -0
  114. package/dist/types.backup/cache/cf/cf-cache-store.d.ts +481 -0
  115. package/dist/types.backup/cache/cf/cf-cache-types.d.ts +300 -0
  116. package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +22 -0
  117. package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +15 -0
  118. package/dist/types.backup/cache/cf/index.d.ts +3 -0
  119. package/dist/types.backup/cache/document-cache.d.ts +69 -0
  120. package/dist/types.backup/cache/handle-capture.d.ts +23 -0
  121. package/dist/types.backup/cache/handle-snapshot.d.ts +39 -0
  122. package/dist/types.backup/cache/index.d.ts +7 -0
  123. package/dist/types.backup/cache/memory-segment-store.d.ts +163 -0
  124. package/dist/types.backup/cache/profile-registry.d.ts +40 -0
  125. package/dist/types.backup/cache/read-through-swr.d.ts +60 -0
  126. package/dist/types.backup/cache/segment-codec.d.ts +78 -0
  127. package/dist/types.backup/cache/shell-snapshot.d.ts +162 -0
  128. package/dist/types.backup/cache/tag-invalidation.d.ts +74 -0
  129. package/dist/types.backup/cache/taint.d.ts +71 -0
  130. package/dist/types.backup/cache/types.d.ts +407 -0
  131. package/dist/types.backup/cache/vercel/index.d.ts +1 -0
  132. package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +267 -0
  133. package/dist/types.backup/client.d.ts +184 -0
  134. package/dist/types.backup/client.rsc.d.ts +39 -0
  135. package/dist/types.backup/cloudflare/index.d.ts +7 -0
  136. package/dist/types.backup/cloudflare/tracing.d.ts +53 -0
  137. package/dist/types.backup/component-utils.d.ts +46 -0
  138. package/dist/types.backup/components/DefaultDocument.d.ts +13 -0
  139. package/dist/types.backup/context-var.d.ts +84 -0
  140. package/dist/types.backup/debug.d.ts +57 -0
  141. package/dist/types.backup/decode-loader-results.d.ts +5 -0
  142. package/dist/types.backup/default-error-boundary.d.ts +10 -0
  143. package/dist/types.backup/defer.d.ts +89 -0
  144. package/dist/types.backup/deps/browser.d.ts +1 -0
  145. package/dist/types.backup/deps/html-stream-client.d.ts +1 -0
  146. package/dist/types.backup/deps/html-stream-server.d.ts +1 -0
  147. package/dist/types.backup/deps/rsc.d.ts +1 -0
  148. package/dist/types.backup/deps/ssr.d.ts +1 -0
  149. package/dist/types.backup/encode-kv.d.ts +35 -0
  150. package/dist/types.backup/errors.d.ts +226 -0
  151. package/dist/types.backup/escape-script.d.ts +44 -0
  152. package/dist/types.backup/handle.d.ts +93 -0
  153. package/dist/types.backup/handles/MetaTags.d.ts +17 -0
  154. package/dist/types.backup/handles/Scripts.d.ts +38 -0
  155. package/dist/types.backup/handles/breadcrumbs.d.ts +43 -0
  156. package/dist/types.backup/handles/deferred-resolution.d.ts +53 -0
  157. package/dist/types.backup/handles/is-thenable.d.ts +12 -0
  158. package/dist/types.backup/handles/meta.d.ts +43 -0
  159. package/dist/types.backup/handles/script.d.ts +139 -0
  160. package/dist/types.backup/host/cookie-handler.d.ts +8 -0
  161. package/dist/types.backup/host/errors.d.ts +40 -0
  162. package/dist/types.backup/host/index.d.ts +33 -0
  163. package/dist/types.backup/host/pattern-matcher.d.ts +30 -0
  164. package/dist/types.backup/host/router.d.ts +12 -0
  165. package/dist/types.backup/host/testing.d.ts +41 -0
  166. package/dist/types.backup/host/types.d.ts +148 -0
  167. package/dist/types.backup/host/utils.d.ts +20 -0
  168. package/dist/types.backup/href-client.d.ts +214 -0
  169. package/dist/types.backup/index.d.ts +112 -0
  170. package/dist/types.backup/index.rsc.d.ts +51 -0
  171. package/dist/types.backup/internal-debug.d.ts +1 -0
  172. package/dist/types.backup/loader-store.d.ts +193 -0
  173. package/dist/types.backup/loader.d.ts +18 -0
  174. package/dist/types.backup/loader.rsc.d.ts +18 -0
  175. package/dist/types.backup/missing-id-error.d.ts +1 -0
  176. package/dist/types.backup/outlet-context.d.ts +12 -0
  177. package/dist/types.backup/outlet-provider.d.ts +12 -0
  178. package/dist/types.backup/prerender/build-shell-capture.d.ts +104 -0
  179. package/dist/types.backup/prerender/param-hash.d.ts +6 -0
  180. package/dist/types.backup/prerender/shell-manifest-key.d.ts +18 -0
  181. package/dist/types.backup/prerender/store.d.ts +62 -0
  182. package/dist/types.backup/prerender.d.ts +292 -0
  183. package/dist/types.backup/redirect-origin.d.ts +55 -0
  184. package/dist/types.backup/regex-escape.d.ts +6 -0
  185. package/dist/types.backup/render-error-thrower.d.ts +13 -0
  186. package/dist/types.backup/response-utils.d.ts +35 -0
  187. package/dist/types.backup/reverse.d.ts +206 -0
  188. package/dist/types.backup/root-error-boundary.d.ts +32 -0
  189. package/dist/types.backup/route-content-wrapper.d.ts +40 -0
  190. package/dist/types.backup/route-definition/dsl-helpers.d.ts +130 -0
  191. package/dist/types.backup/route-definition/helper-factories.d.ts +22 -0
  192. package/dist/types.backup/route-definition/helpers-types.d.ts +392 -0
  193. package/dist/types.backup/route-definition/index.d.ts +7 -0
  194. package/dist/types.backup/route-definition/redirect.d.ts +48 -0
  195. package/dist/types.backup/route-definition/resolve-handler-use.d.ts +19 -0
  196. package/dist/types.backup/route-definition/use-item-types.d.ts +1 -0
  197. package/dist/types.backup/route-definition.d.ts +1 -0
  198. package/dist/types.backup/route-map-builder.d.ts +127 -0
  199. package/dist/types.backup/route-name.d.ts +27 -0
  200. package/dist/types.backup/route-types.d.ts +172 -0
  201. package/dist/types.backup/router/basename.d.ts +10 -0
  202. package/dist/types.backup/router/content-negotiation.d.ts +91 -0
  203. package/dist/types.backup/router/debug-manifest.d.ts +7 -0
  204. package/dist/types.backup/router/error-handling.d.ts +76 -0
  205. package/dist/types.backup/router/find-match.d.ts +19 -0
  206. package/dist/types.backup/router/handler-context.d.ts +41 -0
  207. package/dist/types.backup/router/instrument.d.ts +161 -0
  208. package/dist/types.backup/router/intercept-resolution.d.ts +79 -0
  209. package/dist/types.backup/router/lazy-includes.d.ts +26 -0
  210. package/dist/types.backup/router/loader-resolution.d.ts +63 -0
  211. package/dist/types.backup/router/logging.d.ts +41 -0
  212. package/dist/types.backup/router/manifest.d.ts +8 -0
  213. package/dist/types.backup/router/match-api.d.ts +19 -0
  214. package/dist/types.backup/router/match-context.d.ts +184 -0
  215. package/dist/types.backup/router/match-handlers.d.ts +49 -0
  216. package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +113 -0
  217. package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +113 -0
  218. package/dist/types.backup/router/match-middleware/cache-store.d.ts +112 -0
  219. package/dist/types.backup/router/match-middleware/index.d.ts +80 -0
  220. package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +116 -0
  221. package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +94 -0
  222. package/dist/types.backup/router/match-pipelines.d.ts +103 -0
  223. package/dist/types.backup/router/match-result.d.ts +114 -0
  224. package/dist/types.backup/router/metrics.d.ts +6 -0
  225. package/dist/types.backup/router/middleware-types.d.ts +74 -0
  226. package/dist/types.backup/router/middleware.d.ts +116 -0
  227. package/dist/types.backup/router/navigation-snapshot.d.ts +22 -0
  228. package/dist/types.backup/router/params-util.d.ts +8 -0
  229. package/dist/types.backup/router/parse-pattern.d.ts +38 -0
  230. package/dist/types.backup/router/pattern-matching.d.ts +169 -0
  231. package/dist/types.backup/router/prefetch-cache-ttl.d.ts +27 -0
  232. package/dist/types.backup/router/prefetch-limits.d.ts +20 -0
  233. package/dist/types.backup/router/prerender-match.d.ts +50 -0
  234. package/dist/types.backup/router/preview-match.d.ts +22 -0
  235. package/dist/types.backup/router/request-classification.d.ts +104 -0
  236. package/dist/types.backup/router/revalidation.d.ts +57 -0
  237. package/dist/types.backup/router/route-snapshot.d.ts +112 -0
  238. package/dist/types.backup/router/router-context.d.ts +137 -0
  239. package/dist/types.backup/router/router-interfaces.d.ts +432 -0
  240. package/dist/types.backup/router/router-options.d.ts +738 -0
  241. package/dist/types.backup/router/router-registry.d.ts +15 -0
  242. package/dist/types.backup/router/segment-resolution/fresh.d.ts +55 -0
  243. package/dist/types.backup/router/segment-resolution/helpers.d.ts +93 -0
  244. package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +33 -0
  245. package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +44 -0
  246. package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +90 -0
  247. package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +53 -0
  248. package/dist/types.backup/router/segment-resolution/revalidation.d.ts +85 -0
  249. package/dist/types.backup/router/segment-resolution/static-store.d.ts +17 -0
  250. package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
  251. package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +28 -0
  252. package/dist/types.backup/router/segment-resolution.d.ts +3 -0
  253. package/dist/types.backup/router/segment-wrappers.d.ts +53 -0
  254. package/dist/types.backup/router/state-cookie-name.d.ts +1 -0
  255. package/dist/types.backup/router/substitute-pattern-params.d.ts +23 -0
  256. package/dist/types.backup/router/telemetry-otel.d.ts +113 -0
  257. package/dist/types.backup/router/telemetry.d.ts +215 -0
  258. package/dist/types.backup/router/timeout.d.ts +68 -0
  259. package/dist/types.backup/router/tracing.d.ts +125 -0
  260. package/dist/types.backup/router/trie-matching.d.ts +32 -0
  261. package/dist/types.backup/router/types.d.ts +98 -0
  262. package/dist/types.backup/router/url-params.d.ts +26 -0
  263. package/dist/types.backup/router.d.ts +7 -0
  264. package/dist/types.backup/rsc/capture-queue.d.ts +6 -0
  265. package/dist/types.backup/rsc/full-payload.d.ts +22 -0
  266. package/dist/types.backup/rsc/handler-context.d.ts +31 -0
  267. package/dist/types.backup/rsc/handler.d.ts +9 -0
  268. package/dist/types.backup/rsc/helpers.d.ts +213 -0
  269. package/dist/types.backup/rsc/index.d.ts +17 -0
  270. package/dist/types.backup/rsc/json-route-result.d.ts +20 -0
  271. package/dist/types.backup/rsc/loader-fetch.d.ts +14 -0
  272. package/dist/types.backup/rsc/manifest-init.d.ts +18 -0
  273. package/dist/types.backup/rsc/nonce.d.ts +28 -0
  274. package/dist/types.backup/rsc/origin-guard.d.ts +50 -0
  275. package/dist/types.backup/rsc/progressive-enhancement.d.ts +19 -0
  276. package/dist/types.backup/rsc/redirect-guard.d.ts +35 -0
  277. package/dist/types.backup/rsc/response-cache-serve.d.ts +46 -0
  278. package/dist/types.backup/rsc/response-error.d.ts +19 -0
  279. package/dist/types.backup/rsc/response-route-handler.d.ts +29 -0
  280. package/dist/types.backup/rsc/rsc-rendering.d.ts +23 -0
  281. package/dist/types.backup/rsc/runtime-warnings.d.ts +22 -0
  282. package/dist/types.backup/rsc/server-action.d.ts +68 -0
  283. package/dist/types.backup/rsc/shell-build-manifest.d.ts +84 -0
  284. package/dist/types.backup/rsc/shell-capture-constants.d.ts +27 -0
  285. package/dist/types.backup/rsc/shell-capture.d.ts +374 -0
  286. package/dist/types.backup/rsc/shell-serve.d.ts +136 -0
  287. package/dist/types.backup/rsc/ssr-setup.d.ts +48 -0
  288. package/dist/types.backup/rsc/transition-gate.d.ts +27 -0
  289. package/dist/types.backup/rsc/types.d.ts +290 -0
  290. package/dist/types.backup/runtime-env.d.ts +1 -0
  291. package/dist/types.backup/search-params.d.ts +125 -0
  292. package/dist/types.backup/segment-content-promise.d.ts +13 -0
  293. package/dist/types.backup/segment-fragments.d.ts +56 -0
  294. package/dist/types.backup/segment-loader-promise.d.ts +22 -0
  295. package/dist/types.backup/segment-system.d.ts +84 -0
  296. package/dist/types.backup/serialize.d.ts +164 -0
  297. package/dist/types.backup/server/context.d.ts +494 -0
  298. package/dist/types.backup/server/cookie-parse.d.ts +10 -0
  299. package/dist/types.backup/server/cookie-store.d.ts +107 -0
  300. package/dist/types.backup/server/fetchable-loader-store.d.ts +20 -0
  301. package/dist/types.backup/server/handle-store.d.ts +100 -0
  302. package/dist/types.backup/server/loader-registry.d.ts +32 -0
  303. package/dist/types.backup/server/request-context.d.ts +596 -0
  304. package/dist/types.backup/server/root-layout.d.ts +3 -0
  305. package/dist/types.backup/server.d.ts +15 -0
  306. package/dist/types.backup/ssr/index.d.ts +233 -0
  307. package/dist/types.backup/ssr/inject-rsc-eager.d.ts +3 -0
  308. package/dist/types.backup/ssr/preinit-client-references.d.ts +71 -0
  309. package/dist/types.backup/ssr/ssr-root.d.ts +69 -0
  310. package/dist/types.backup/static-handler.d.ts +57 -0
  311. package/dist/types.backup/testing/cache-status.d.ts +63 -0
  312. package/dist/types.backup/testing/collect-handle.d.ts +20 -0
  313. package/dist/types.backup/testing/dispatch.d.ts +123 -0
  314. package/dist/types.backup/testing/dom.entry.d.ts +15 -0
  315. package/dist/types.backup/testing/e2e/fixture.d.ts +37 -0
  316. package/dist/types.backup/testing/e2e/index.d.ts +30 -0
  317. package/dist/types.backup/testing/e2e/matchers.d.ts +17 -0
  318. package/dist/types.backup/testing/e2e/page-helpers.d.ts +62 -0
  319. package/dist/types.backup/testing/e2e/parity.d.ts +111 -0
  320. package/dist/types.backup/testing/e2e/server.d.ts +35 -0
  321. package/dist/types.backup/testing/flight-matchers.d.ts +55 -0
  322. package/dist/types.backup/testing/flight-normalize.d.ts +1 -0
  323. package/dist/types.backup/testing/flight-tree.d.ts +192 -0
  324. package/dist/types.backup/testing/flight.d.ts +115 -0
  325. package/dist/types.backup/testing/flight.entry.d.ts +27 -0
  326. package/dist/types.backup/testing/generated-routes.d.ts +66 -0
  327. package/dist/types.backup/testing/index.d.ts +52 -0
  328. package/dist/types.backup/testing/internal/context.d.ts +225 -0
  329. package/dist/types.backup/testing/internal/flight-client-globals.d.ts +1 -0
  330. package/dist/types.backup/testing/internal/seed-vars.d.ts +30 -0
  331. package/dist/types.backup/testing/render-handler.d.ts +160 -0
  332. package/dist/types.backup/testing/render-route.d.ts +246 -0
  333. package/dist/types.backup/testing/run-loader.d.ts +186 -0
  334. package/dist/types.backup/testing/run-middleware.d.ts +132 -0
  335. package/dist/types.backup/testing/run-transition-when.d.ts +77 -0
  336. package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
  337. package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
  338. package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
  339. package/dist/types.backup/testing/vitest-stubs/version.d.ts +1 -0
  340. package/dist/types.backup/testing/vitest.d.ts +205 -0
  341. package/dist/types.backup/theme/ThemeProvider.d.ts +13 -0
  342. package/dist/types.backup/theme/ThemeScript.d.ts +45 -0
  343. package/dist/types.backup/theme/constants.d.ts +39 -0
  344. package/dist/types.backup/theme/index.d.ts +29 -0
  345. package/dist/types.backup/theme/theme-context.d.ts +21 -0
  346. package/dist/types.backup/theme/theme-script.d.ts +26 -0
  347. package/dist/types.backup/theme/types.d.ts +162 -0
  348. package/dist/types.backup/theme/use-theme.d.ts +8 -0
  349. package/dist/types.backup/types/boundaries.d.ts +93 -0
  350. package/dist/types.backup/types/cache-types.d.ts +191 -0
  351. package/dist/types.backup/types/error-types.d.ts +114 -0
  352. package/dist/types.backup/types/global-namespace.d.ts +90 -0
  353. package/dist/types.backup/types/handler-context.d.ts +658 -0
  354. package/dist/types.backup/types/index.d.ts +11 -0
  355. package/dist/types.backup/types/loader-types.d.ts +182 -0
  356. package/dist/types.backup/types/request-scope.d.ts +93 -0
  357. package/dist/types.backup/types/route-config.d.ts +105 -0
  358. package/dist/types.backup/types/route-entry.d.ts +95 -0
  359. package/dist/types.backup/types/segments.d.ts +234 -0
  360. package/dist/types.backup/types.d.ts +1 -0
  361. package/dist/types.backup/urls/include-helper.d.ts +17 -0
  362. package/dist/types.backup/urls/include-provider.d.ts +27 -0
  363. package/dist/types.backup/urls/index.d.ts +6 -0
  364. package/dist/types.backup/urls/path-helper-types.d.ts +197 -0
  365. package/dist/types.backup/urls/path-helper.d.ts +12 -0
  366. package/dist/types.backup/urls/pattern-types.d.ts +166 -0
  367. package/dist/types.backup/urls/response-types.d.ts +67 -0
  368. package/dist/types.backup/urls/type-extraction.d.ts +157 -0
  369. package/dist/types.backup/urls/urls-function.d.ts +24 -0
  370. package/dist/types.backup/urls.d.ts +1 -0
  371. package/dist/types.backup/use-loader.d.ts +150 -0
  372. package/dist/types.backup/vercel/index.d.ts +10 -0
  373. package/dist/types.backup/vercel/tracing.d.ts +70 -0
  374. package/dist/types.backup/vite/debug.d.ts +80 -0
  375. package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +12 -0
  376. package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +65 -0
  377. package/dist/types.backup/vite/discovery/discover-routers.d.ts +17 -0
  378. package/dist/types.backup/vite/discovery/discovery-errors.d.ts +113 -0
  379. package/dist/types.backup/vite/discovery/gate-state.d.ts +79 -0
  380. package/dist/types.backup/vite/discovery/prerender-collection.d.ts +24 -0
  381. package/dist/types.backup/vite/discovery/route-types-writer.d.ts +32 -0
  382. package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +22 -0
  383. package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +40 -0
  384. package/dist/types.backup/vite/discovery/state.d.ts +162 -0
  385. package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +15 -0
  386. package/dist/types.backup/vite/index.d.ts +11 -0
  387. package/dist/types.backup/vite/inject-client-debug.d.ts +56 -0
  388. package/dist/types.backup/vite/plugin-types.d.ts +298 -0
  389. package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +6 -0
  390. package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +40 -0
  391. package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +35 -0
  392. package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
  393. package/dist/types.backup/vite/plugins/expose-action-id.d.ts +18 -0
  394. package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +37 -0
  395. package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
  396. package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
  397. package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
  398. package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +13 -0
  399. package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +29 -0
  400. package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +6 -0
  401. package/dist/types.backup/vite/plugins/performance-tracks.d.ts +25 -0
  402. package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +20 -0
  403. package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +20 -0
  404. package/dist/types.backup/vite/plugins/vercel-output.d.ts +85 -0
  405. package/dist/types.backup/vite/plugins/version-injector.d.ts +21 -0
  406. package/dist/types.backup/vite/plugins/version-plugin.d.ts +19 -0
  407. package/dist/types.backup/vite/plugins/virtual-entries.d.ts +36 -0
  408. package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +7 -0
  409. package/dist/types.backup/vite/rango.d.ts +29 -0
  410. package/dist/types.backup/vite/router-discovery.d.ts +23 -0
  411. package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +64 -0
  412. package/dist/types.backup/vite/utils/banner.d.ts +2 -0
  413. package/dist/types.backup/vite/utils/bundle-analysis.d.ts +28 -0
  414. package/dist/types.backup/vite/utils/client-chunks.d.ts +55 -0
  415. package/dist/types.backup/vite/utils/directive-prologue.d.ts +16 -0
  416. package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +37 -0
  417. package/dist/types.backup/vite/utils/manifest-utils.d.ts +7 -0
  418. package/dist/types.backup/vite/utils/package-resolution.d.ts +6 -0
  419. package/dist/types.backup/vite/utils/prerender-utils.d.ts +32 -0
  420. package/dist/types.backup/vite/utils/shared-utils.d.ts +55 -0
  421. package/dist/vite/index.js +5 -2
  422. package/package.json +20 -21
  423. package/skills/cache-guide/SKILL.md +6 -3
  424. package/skills/catalog.json +7 -1
  425. package/skills/comparison/references/framework-comparison.md +2 -1
  426. package/skills/deployment-caching/SKILL.md +176 -0
  427. package/skills/document-cache/SKILL.md +30 -3
  428. package/skills/ppr/SKILL.md +81 -34
  429. package/skills/prerender/SKILL.md +15 -8
  430. package/skills/rango/SKILL.md +20 -17
  431. package/skills/router-setup/SKILL.md +4 -0
  432. package/skills/testing/SKILL.md +1 -1
  433. package/skills/testing/cache-prerender.md +5 -1
  434. package/skills/vercel/SKILL.md +22 -1
  435. package/skills/view-transitions/SKILL.md +12 -8
  436. package/src/browser/prefetch/default-strategy.ts +34 -0
  437. package/src/browser/prefetch/loader.ts +6 -12
  438. package/src/browser/prefetch/runtime.ts +0 -1
  439. package/src/browser/react/Link.tsx +22 -21
  440. package/src/browser/rsc-router.tsx +8 -0
  441. package/src/browser/types.ts +5 -0
  442. package/src/cache/cache-scope.ts +6 -1
  443. package/src/cache/cf/cf-cache-store.ts +4 -0
  444. package/src/cache/document-cache.ts +4 -2
  445. package/src/cache/types.ts +10 -3
  446. package/src/cache/vercel/vercel-cache-store.ts +6 -1
  447. package/src/route-definition/helpers-types.ts +6 -6
  448. package/src/router/match-handlers.ts +44 -6
  449. package/src/router/match-middleware/cache-lookup.ts +10 -3
  450. package/src/router/prefetch-default.ts +59 -0
  451. package/src/router/router-interfaces.ts +8 -0
  452. package/src/router/router-options.ts +31 -0
  453. package/src/router/segment-resolution/view-transition-default.ts +9 -5
  454. package/src/router/transition-when.ts +76 -0
  455. package/src/router.ts +7 -0
  456. package/src/rsc/capture-queue.ts +24 -1
  457. package/src/rsc/full-payload.ts +1 -0
  458. package/src/rsc/handler.ts +1 -0
  459. package/src/rsc/progressive-enhancement.ts +9 -14
  460. package/src/rsc/rsc-rendering.ts +261 -48
  461. package/src/rsc/shell-capture.ts +94 -50
  462. package/src/rsc/shell-serve.ts +9 -4
  463. package/src/rsc/transition-gate.ts +37 -40
  464. package/src/rsc/types.ts +2 -0
  465. package/src/server/request-context.ts +6 -0
  466. package/src/testing/e2e/index.ts +11 -0
  467. package/src/testing/e2e/page-helpers.ts +47 -0
  468. package/src/testing/e2e/parity.ts +13 -0
  469. package/src/testing/index.ts +9 -1
  470. package/src/testing/run-transition-when.ts +42 -9
  471. package/src/testing/shell-status.ts +92 -3
  472. package/src/types/segments.ts +27 -22
  473. package/src/urls/path-helper-types.ts +4 -3
@@ -40,6 +40,7 @@ import {
40
40
  type ShellCaptureDescriptor,
41
41
  } from "./shell-capture.js";
42
42
  import {
43
+ PPR_REPLAY_STATUS_HEADER,
43
44
  SHELL_STATUS_HEADER,
44
45
  resolvePprConfig,
45
46
  buildShellKey,
@@ -67,7 +68,84 @@ import {
67
68
  import { nonce as nonceToken } from "./nonce.js";
68
69
  import { reportCacheError } from "../cache/cache-error.js";
69
70
  import { INTERNAL_RANGO_DEBUG } from "../internal-debug.js";
70
- import type { ShellCacheEntry, ShellSnapshotRecord } from "../cache/types.js";
71
+ import type {
72
+ SegmentCacheStore,
73
+ ShellCacheEntry,
74
+ ShellSnapshotRecord,
75
+ } from "../cache/types.js";
76
+
77
+ type PprReplayBypassReason =
78
+ | "method"
79
+ | "dynamic"
80
+ | "nonce"
81
+ | "store-unavailable"
82
+ | "passive-read-unsupported"
83
+ | "read-error"
84
+ | "no-entry"
85
+ | "invalid-version"
86
+ | "corrupt-entry"
87
+ | "handler-live-holes"
88
+ | "transition-when"
89
+ | "no-segment-snapshot"
90
+ | "snapshot-miss"
91
+ | "stale-build-entry";
92
+
93
+ type PprReplayStatus =
94
+ | { outcome: "HIT"; freshness: "fresh" | "stale" }
95
+ | { outcome: "BYPASS"; reason: PprReplayBypassReason };
96
+
97
+ type ShellReplayDecision =
98
+ | { snapshot: ShellSnapshotRecord[] }
99
+ | { reason: PprReplayBypassReason };
100
+
101
+ function serializePprReplayStatus(status: PprReplayStatus): string {
102
+ return status.outcome === "HIT"
103
+ ? `HIT; freshness=${status.freshness}`
104
+ : `BYPASS; reason=${status.reason}`;
105
+ }
106
+
107
+ function describePprReplayStatus(status: PprReplayStatus): string {
108
+ return status.outcome === "HIT"
109
+ ? status.freshness
110
+ : `bypass:${status.reason}`;
111
+ }
112
+
113
+ function buildNavigationShellKey(url: URL): string {
114
+ return `${buildShellKey(url)}:navigation`;
115
+ }
116
+
117
+ function createShellCaptureDescriptor(
118
+ ctx: HandlerContext<any>,
119
+ key: string,
120
+ pprConfig: ResolvedPprConfig,
121
+ store: SegmentCacheStore<any>,
122
+ navigationOnly?: true,
123
+ ): ShellCaptureDescriptor {
124
+ return {
125
+ key,
126
+ buildVersion: ctx.version,
127
+ ttl: pprConfig.ttl,
128
+ swr: pprConfig.swr,
129
+ tags: pprConfig.tags,
130
+ captureTimeout: pprConfig.captureTimeout,
131
+ store,
132
+ debug: INTERNAL_RANGO_DEBUG,
133
+ maxSnapshotBytes: pprConfig.maxSnapshotBytes,
134
+ debugSink: resolveShellCaptureDebugSink(ctx.router.debugShellCapture),
135
+ navigationOnly,
136
+ };
137
+ }
138
+
139
+ function shouldHealReplayMiss(
140
+ reason: PprReplayBypassReason | undefined,
141
+ ): boolean {
142
+ return (
143
+ reason === undefined ||
144
+ reason === "invalid-version" ||
145
+ reason === "corrupt-entry" ||
146
+ reason === "stale-build-entry"
147
+ );
148
+ }
71
149
 
72
150
  function resolveDevShellLookup(
73
151
  reqCtx: RequestContext<any>,
@@ -86,17 +164,15 @@ function resolveDevShellLookup(
86
164
  }
87
165
 
88
166
  function replayableShellSnapshot(
89
- entry: ShellCacheEntry | undefined,
167
+ entry: ShellCacheEntry,
90
168
  buildVersion: string,
91
- ): ShellSnapshotRecord[] | undefined {
92
- if (
93
- !entry ||
94
- !isValidShellHit(entry, buildVersion) ||
95
- entry.handlerLiveHoles ||
96
- entry.transitionWhen
97
- ) {
98
- return undefined;
169
+ ): ShellReplayDecision {
170
+ if (!isValidShellHit(entry, buildVersion)) {
171
+ return { reason: "invalid-version" };
99
172
  }
173
+ if (!hasIntactShellPayload(entry)) return { reason: "corrupt-entry" };
174
+ if (entry.handlerLiveHoles) return { reason: "handler-live-holes" };
175
+ if (entry.transitionWhen) return { reason: "transition-when" };
100
176
  const snapshot = entry.snapshot;
101
177
  const hasSegments = snapshot?.some((record) => {
102
178
  if (
@@ -111,7 +187,9 @@ function replayableShellSnapshot(
111
187
  const segments = (record.value as { segments?: unknown }).segments;
112
188
  return Array.isArray(segments) && segments.length > 0;
113
189
  });
114
- return hasSegments ? snapshot : undefined;
190
+ return hasSegments && snapshot
191
+ ? { snapshot }
192
+ : { reason: "no-segment-snapshot" };
115
193
  }
116
194
 
117
195
  export function handleRscRendering<TEnv>(
@@ -156,6 +234,8 @@ async function handleRscRenderingInner<TEnv>(
156
234
 
157
235
  let payload: RscPayload;
158
236
  let hasInterceptSlots = false;
237
+ let pprReplayStatus: PprReplayStatus | undefined;
238
+ let partialCaptureNeeded = false;
159
239
 
160
240
  // --- Axis 2: integrated PPR shell serve (docs/design/ppr-shell-resume.md) ---
161
241
  //
@@ -242,23 +322,12 @@ async function handleRscRenderingInner<TEnv>(
242
322
  ssrModule.resumeShellHTML &&
243
323
  ssrModule.captureShellHTML
244
324
  ) {
245
- const descriptor: ShellCaptureDescriptor = {
325
+ const descriptor = createShellCaptureDescriptor(
326
+ ctx,
246
327
  key,
247
- buildVersion: ctx.version,
248
- ttl: pprConfig.ttl,
249
- swr: pprConfig.swr,
250
- tags: pprConfig.tags,
251
- captureTimeout: pprConfig.captureTimeout,
328
+ pprConfig,
252
329
  store,
253
- debug: INTERNAL_RANGO_DEBUG,
254
- maxSnapshotBytes: pprConfig.maxSnapshotBytes,
255
- // The resolver owns the whole policy: option wins, the
256
- // INTERNAL_RANGO_DEBUG env flag lights the events up when no
257
- // option is set, an explicit `false` stays off.
258
- debugSink: resolveShellCaptureDebugSink(
259
- ctx.router.debugShellCapture,
260
- ),
261
- };
330
+ );
262
331
  // One serve funnel for BOTH entry sources (runtime store hit below,
263
332
  // build-manifest hit further down): schedule the background
264
333
  // recapture when asked, then commit the composed response.
@@ -309,7 +378,11 @@ async function handleRscRenderingInner<TEnv>(
309
378
  cached ? "hit" : "miss",
310
379
  );
311
380
  }
312
- if (cached && isValidShellHit(cached.entry, ctx.version)) {
381
+ if (
382
+ cached &&
383
+ !cached.entry.navigationOnly &&
384
+ isValidShellHit(cached.entry, ctx.version)
385
+ ) {
313
386
  if (!hasIntactShellPayload(cached.entry)) {
314
387
  // Corrupt stored payload (undecodable prelude / unparseable
315
388
  // postponed): a store-layer fault worth a diagnostic, unlike the
@@ -359,7 +432,7 @@ async function handleRscRenderingInner<TEnv>(
359
432
 
360
433
  if (isPartial) {
361
434
  // Partial render (navigation)
362
- const result = await matchPartialWithPprReplay(
435
+ const replay = await matchPartialWithPprReplay(
363
436
  ctx,
364
437
  request,
365
438
  env,
@@ -367,6 +440,10 @@ async function handleRscRenderingInner<TEnv>(
367
440
  reqCtx,
368
441
  nonce,
369
442
  );
443
+ const result = replay.result;
444
+ pprReplayStatus = replay.status;
445
+ partialCaptureNeeded =
446
+ "captureNeeded" in replay && replay.captureNeeded === true;
370
447
 
371
448
  if (!result) {
372
449
  // Fall back to full render
@@ -378,10 +455,17 @@ async function handleRscRenderingInner<TEnv>(
378
455
  // perform SPA navigation. A raw 308 would be auto-followed by
379
456
  // fetch, hitting the target without _rsc_partial. Resolve the
380
457
  // target server-side (same open-redirect policy as 3xx).
381
- return createSimpleRedirectResponse(match.redirect, {
458
+ const redirectResponse = createSimpleRedirectResponse(match.redirect, {
382
459
  requestOrigin: url.origin,
383
460
  basename: ctx.router.basename,
384
461
  });
462
+ if (pprReplayStatus) {
463
+ redirectResponse.headers.set(
464
+ PPR_REPLAY_STATUS_HEADER,
465
+ serializePprReplayStatus(pprReplayStatus),
466
+ );
467
+ }
468
+ return redirectResponse;
385
469
  }
386
470
 
387
471
  payload = buildFullPayload(match, ctx, url, reqCtx, handleStore);
@@ -415,6 +499,7 @@ async function handleRscRenderingInner<TEnv>(
415
499
  prefetchCacheTTL: ctx.router.prefetchCacheTTL,
416
500
  prefetchCacheSize: ctx.router.prefetchCacheSize,
417
501
  prefetchConcurrency: ctx.router.prefetchConcurrency,
502
+ defaultPrefetch: ctx.router.defaultPrefetch,
418
503
  stateCookieName: ctx.router.resolvedStateCookieName,
419
504
  },
420
505
  };
@@ -484,6 +569,10 @@ async function handleRscRenderingInner<TEnv>(
484
569
  // are deliberately NOT stamped. See browser/response-adapter.ts.
485
570
  "X-RSC-Router-Id": ctx.router.id,
486
571
  };
572
+ if (pprReplayStatus) {
573
+ rscHeaders[PPR_REPLAY_STATUS_HEADER] =
574
+ serializePprReplayStatus(pprReplayStatus);
575
+ }
487
576
  // Tell the client's prefetch cache to scope this response to its source
488
577
  // URL (instead of the default source-agnostic wildcard). Intercept
489
578
  // responses depend on the source page matching an intercept rule, so
@@ -556,6 +645,40 @@ async function handleRscRenderingInner<TEnv>(
556
645
  response.headers.set(SHELL_STATUS_HEADER, "MISS");
557
646
  }
558
647
 
648
+ if (
649
+ isPartial &&
650
+ partialCaptureNeeded &&
651
+ !reqCtx._dynamic &&
652
+ response.status === 200
653
+ ) {
654
+ const pprConfig = resolvePprConfig(reqCtx._classifiedRoute?.manifestEntry)!;
655
+ const store = reqCtx._cacheStore!;
656
+ scheduleShellCapture(
657
+ ctx,
658
+ request,
659
+ env,
660
+ url,
661
+ reqCtx,
662
+ async (captureRequest, captureUrl) => {
663
+ const [ssrModule, streamMode] = await getSSRSetup(
664
+ ctx,
665
+ captureRequest,
666
+ env,
667
+ captureUrl,
668
+ undefined,
669
+ );
670
+ return streamMode === "allReady" ? null : ssrModule;
671
+ },
672
+ createShellCaptureDescriptor(
673
+ ctx,
674
+ buildNavigationShellKey(url),
675
+ pprConfig,
676
+ store,
677
+ true,
678
+ ),
679
+ );
680
+ }
681
+
559
682
  return response;
560
683
  }
561
684
 
@@ -575,57 +698,147 @@ async function matchPartialWithPprReplay<TEnv>(
575
698
  reqCtx: RequestContext<any>,
576
699
  nonce: string | undefined,
577
700
  ) {
578
- const runMatch = () => ctx.router.matchPartial(request, { env });
701
+ const replayStart = reqCtx._metricsStore ? performance.now() : 0;
702
+ const recordReplayStatus = (status: PprReplayStatus): void => {
703
+ if (!reqCtx._metricsStore) return;
704
+ appendMetric(
705
+ reqCtx._metricsStore,
706
+ "ppr:navigation-replay",
707
+ replayStart,
708
+ performance.now() - replayStart,
709
+ undefined,
710
+ describePprReplayStatus(status),
711
+ );
712
+ };
713
+ const runMatch = async (status?: PprReplayStatus) => {
714
+ const result = await ctx.router.matchPartial(request, { env });
715
+ if (status) recordReplayStatus(status);
716
+ return { result, status };
717
+ };
579
718
  const pprConfig = resolvePprConfig(reqCtx._classifiedRoute?.manifestEntry);
580
719
  const activeNonce = nonce ?? contextGet(reqCtx._variables, nonceToken);
581
720
  const store = reqCtx._cacheStore;
582
721
 
583
- if (
584
- request.method !== "GET" ||
585
- !pprConfig ||
586
- reqCtx._dynamic ||
587
- activeNonce !== undefined ||
588
- !hasShellFamily(store) ||
589
- store.supportsPassiveShellReads !== true
590
- ) {
591
- return runMatch();
722
+ if (!pprConfig) return runMatch();
723
+ if (request.method !== "GET") {
724
+ return runMatch({ outcome: "BYPASS", reason: "method" });
725
+ }
726
+ if (reqCtx._dynamic) {
727
+ return runMatch({ outcome: "BYPASS", reason: "dynamic" });
728
+ }
729
+ if (activeNonce !== undefined) {
730
+ return runMatch({ outcome: "BYPASS", reason: "nonce" });
731
+ }
732
+ if (!hasShellFamily(store)) {
733
+ return runMatch({ outcome: "BYPASS", reason: "store-unavailable" });
734
+ }
735
+ if (store.supportsPassiveShellReads !== true) {
736
+ return runMatch({
737
+ outcome: "BYPASS",
738
+ reason: "passive-read-unsupported",
739
+ });
592
740
  }
593
741
 
594
742
  const key = buildShellKey(url);
743
+ const navigationKey = buildNavigationShellKey(url);
595
744
  let cached: Awaited<ReturnType<typeof store.getShell>> = null;
596
745
  try {
597
746
  cached = await store.getShell(key, { claimRevalidation: false });
598
747
  } catch (error) {
599
748
  reportCacheError(error, "cache-read", "[NavigationPPR] getShell");
600
- return runMatch();
749
+ return runMatch({ outcome: "BYPASS", reason: "read-error" });
601
750
  }
602
751
 
603
- let snapshot = cached?.shouldRevalidate
604
- ? undefined
605
- : replayableShellSnapshot(cached?.entry, ctx.version);
752
+ let bypassReason: PprReplayBypassReason | undefined;
753
+ let snapshot: ShellSnapshotRecord[] | undefined;
754
+ let freshness: "fresh" | "stale" = "fresh";
755
+ if (cached) {
756
+ const decision = replayableShellSnapshot(cached.entry, ctx.version);
757
+ if ("snapshot" in decision) {
758
+ snapshot = decision.snapshot;
759
+ freshness = cached.shouldRevalidate ? "stale" : "fresh";
760
+ } else {
761
+ bypassReason = decision.reason;
762
+ }
763
+ }
764
+
765
+ if (
766
+ !snapshot &&
767
+ bypassReason !== "handler-live-holes" &&
768
+ bypassReason !== "transition-when"
769
+ ) {
770
+ let navigationCached: Awaited<ReturnType<typeof store.getShell>> = null;
771
+ try {
772
+ navigationCached = await store.getShell(navigationKey, {
773
+ claimRevalidation: false,
774
+ });
775
+ } catch (error) {
776
+ reportCacheError(error, "cache-read", "[NavigationPPR] getShell");
777
+ return runMatch({ outcome: "BYPASS", reason: "read-error" });
778
+ }
779
+ if (navigationCached) {
780
+ const decision = replayableShellSnapshot(
781
+ navigationCached.entry,
782
+ ctx.version,
783
+ );
784
+ if ("snapshot" in decision) {
785
+ snapshot = decision.snapshot;
786
+ freshness = navigationCached.shouldRevalidate ? "stale" : "fresh";
787
+ } else {
788
+ bypassReason = decision.reason;
789
+ }
790
+ }
791
+ }
606
792
 
607
793
  if (!snapshot) {
608
794
  // Production build manifests are local module data. In dev, resolving a
609
795
  // missing build shell would foreground-fetch /__rsc_shell and block an
610
796
  // otherwise ordinary navigation on capture, so replay remains runtime-only.
611
797
  const buildHit = await lookupBuildShell(url, ctx.version, store);
612
- if (!buildHit?.stale) {
613
- snapshot = replayableShellSnapshot(buildHit?.entry, ctx.version);
798
+ if (buildHit?.stale) {
799
+ bypassReason ??= "stale-build-entry";
800
+ } else if (buildHit) {
801
+ const buildDecision = replayableShellSnapshot(
802
+ buildHit.entry,
803
+ ctx.version,
804
+ );
805
+ if ("snapshot" in buildDecision) {
806
+ snapshot = buildDecision.snapshot;
807
+ } else {
808
+ bypassReason ??= buildDecision.reason;
809
+ }
614
810
  }
615
811
  }
616
812
 
617
- if (!snapshot) return runMatch();
813
+ if (!snapshot) {
814
+ const match = await runMatch({
815
+ outcome: "BYPASS",
816
+ reason: bypassReason ?? "no-entry",
817
+ });
818
+ return { ...match, captureNeeded: shouldHealReplayMiss(bypassReason) };
819
+ }
618
820
 
619
821
  const previousImplicitCache = reqCtx._shellImplicitCache;
822
+ let segmentReplayHit = false;
620
823
  reqCtx._shellImplicitCache = {
621
824
  ttl: pprConfig.ttl,
622
825
  swr: pprConfig.swr,
623
- store: new SeededShellStore(store, snapshot, { segmentsOnly: true }),
826
+ store: new SeededShellStore(store, snapshot, {
827
+ segmentsOnly: true,
828
+ }),
624
829
  keyPrefix: "doc",
830
+ onHit: () => {
831
+ segmentReplayHit = true;
832
+ },
625
833
  };
626
834
 
627
835
  try {
628
- return await runMatch();
836
+ const result = await ctx.router.matchPartial(request, { env });
837
+ const status: PprReplayStatus = segmentReplayHit
838
+ ? { outcome: "HIT", freshness }
839
+ : { outcome: "BYPASS", reason: "snapshot-miss" };
840
+ recordReplayStatus(status);
841
+ return { result, status };
629
842
  } finally {
630
843
  reqCtx._shellImplicitCache = previousImplicitCache;
631
844
  }