@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
@@ -1,12 +1,19 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { INTERNAL_RANGO_DEBUG } from "../internal-debug.js";
3
3
  import { sanitizeError } from "../errors";
4
- import type { ErrorInfo, ErrorPhase, MatchResult } from "../types";
5
4
  import type {
6
- EntryData,
7
- InterceptEntry,
8
- InterceptSelectorContext,
9
- } from "../server/context";
5
+ ErrorBoundaryHandler,
6
+ ErrorInfo,
7
+ ErrorPhase,
8
+ MatchResult,
9
+ NotFoundBoundaryHandler,
10
+ } from "../types";
11
+ import {
12
+ isPprEntry,
13
+ type EntryData,
14
+ type InterceptEntry,
15
+ type InterceptSelectorContext,
16
+ } from "../server/context.js";
10
17
  import type { MatchApiDeps } from "./types.js";
11
18
  import type { RouterContext } from "./router-context.js";
12
19
  import { runWithRouterContext } from "./router-context.js";
@@ -30,7 +37,6 @@ import {
30
37
  startRevalidationTrace,
31
38
  flushRevalidationTrace,
32
39
  } from "./logging.js";
33
- import type { ErrorBoundaryHandler, NotFoundBoundaryHandler } from "../types";
34
40
  import type { MiddlewareFn } from "./middleware.js";
35
41
  import {
36
42
  type TelemetrySink,
@@ -41,6 +47,7 @@ import {
41
47
  buildCacheSignalSegments,
42
48
  } from "./telemetry.js";
43
49
  import { _getRequestContext } from "../server/request-context.js";
50
+ import { evaluatePprTransitionWhen } from "./transition-when.js";
44
51
 
45
52
  /**
46
53
  * Per-call telemetry lifecycle emitter for match()/matchPartial(). Each method
@@ -227,6 +234,35 @@ export function createMatchHandlers<TEnv = any>(
227
234
  if (reqCtx) reqCtx._cacheSignal = segments;
228
235
  };
229
236
 
237
+ const evaluatePprTransitionWhenForMatch = (
238
+ ctx: MatchContext<TEnv>,
239
+ isPartial: boolean,
240
+ ): void => {
241
+ const reqCtx = _getRequestContext();
242
+ if (!reqCtx) return;
243
+ reqCtx._pprTransitionDecisions = undefined;
244
+ if (!isPprEntry(ctx.manifestEntry)) return;
245
+
246
+ evaluatePprTransitionWhen(
247
+ ctx.entries,
248
+ reqCtx,
249
+ {
250
+ params: ctx.matched.params,
251
+ routeName: ctx.interceptSelectorContext.toRouteName,
252
+ },
253
+ (error, segmentId) =>
254
+ callOnError(error, "rendering", {
255
+ request: ctx.request,
256
+ url: ctx.url,
257
+ env: ctx.env,
258
+ params: ctx.matched.params,
259
+ segmentId,
260
+ isPartial,
261
+ handledByBoundary: false,
262
+ }),
263
+ );
264
+ };
265
+
230
266
  async function createMatchContextForFull(
231
267
  request: Request,
232
268
  env: TEnv,
@@ -313,6 +349,7 @@ export function createMatchHandlers<TEnv = any>(
313
349
  }
314
350
 
315
351
  const ctx = result as MatchContext<TEnv>;
352
+ evaluatePprTransitionWhenForMatch(ctx, false);
316
353
 
317
354
  try {
318
355
  const state = createPipelineState();
@@ -424,6 +461,7 @@ export function createMatchHandlers<TEnv = any>(
424
461
  emitter.end(0, false);
425
462
  return null;
426
463
  }
464
+ evaluatePprTransitionWhenForMatch(ctx, true);
427
465
 
428
466
  if (isRouterDebugEnabled()) {
429
467
  startRevalidationTrace({
@@ -460,6 +460,8 @@ export function withCacheLookup<TEnv>(
460
460
  state.shouldRevalidate = cacheResult.shouldRevalidate;
461
461
  state.cachedSegments = cacheResult.segments;
462
462
  state.cachedMatchedIds = cacheResult.segments.map((s) => s.id);
463
+ const pprTransitionDecisions =
464
+ _getRequestContext()?._pprTransitionDecisions;
463
465
 
464
466
  const canCheckSegmentRevalidation =
465
467
  !ctx.isFullMatch &&
@@ -533,8 +535,13 @@ export function withCacheLookup<TEnv>(
533
535
  reason: "cached-no-rules",
534
536
  });
535
537
  }
536
- segment.component = null;
537
- segment.loading = undefined;
538
+ // A PPR transition decision must reach the client even when this cached
539
+ // segment otherwise needs no update. Keep its replayed component so the
540
+ // partial result retains the segment for gateTransitions().
541
+ if (!pprTransitionDecisions?.has(segment.id)) {
542
+ segment.component = null;
543
+ segment.loading = undefined;
544
+ }
538
545
  yield segment;
539
546
  continue;
540
547
  }
@@ -566,7 +573,7 @@ export function withCacheLookup<TEnv>(
566
573
  shouldRevalidate,
567
574
  });
568
575
 
569
- if (!shouldRevalidate) {
576
+ if (!shouldRevalidate && !pprTransitionDecisions?.has(segment.id)) {
570
577
  segment.component = null;
571
578
  segment.loading = undefined;
572
579
  }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Resolve the router-wide default Link prefetch strategy once, at router init.
3
+ * The resolved value ships to the client in payload metadata; the browser
4
+ * entry applies it via `setDefaultPrefetchStrategy` (browser/prefetch/
5
+ * default-strategy.ts) and every `<Link>` without an explicit `prefetch` prop
6
+ * falls back to it.
7
+ *
8
+ * The type lives HERE (not in browser/react/Link.tsx) because both seats need
9
+ * it: this server-side resolver and the client Link/default-strategy modules.
10
+ * Link.tsx re-exports it so the public `PrefetchStrategy` export path is
11
+ * unchanged.
12
+ *
13
+ * Policy note: automatic prefetch stays quiet in development, matching the
14
+ * production-only default used by Next.js. Explicit router and per-Link
15
+ * strategies still work in every mode. Invalid untyped inputs fall back to the
16
+ * current environment's default.
17
+ */
18
+
19
+ /**
20
+ * Prefetch strategy for the Link component
21
+ * - "hover": Prefetch on mouse enter (direct, no queue)
22
+ * - "viewport": Prefetch when link enters viewport (queued, waits for idle)
23
+ * - "render": Prefetch on component mount regardless of visibility (queued, waits for idle)
24
+ * - "adaptive": Hover on pointer devices, viewport on touch devices
25
+ * - "none": No prefetching
26
+ */
27
+ export type PrefetchStrategy =
28
+ | "hover"
29
+ | "viewport"
30
+ | "render"
31
+ | "adaptive"
32
+ | "none";
33
+
34
+ function defaultPrefetchForEnvironment(
35
+ nodeEnv: string | undefined,
36
+ ): PrefetchStrategy {
37
+ return nodeEnv === "production" ? "viewport" : "none";
38
+ }
39
+
40
+ export const DEFAULT_PREFETCH_STRATEGY: PrefetchStrategy =
41
+ defaultPrefetchForEnvironment(process.env.NODE_ENV);
42
+
43
+ const VALID_STRATEGIES: ReadonlySet<string> = new Set([
44
+ "hover",
45
+ "viewport",
46
+ "render",
47
+ "adaptive",
48
+ "none",
49
+ ] satisfies PrefetchStrategy[]);
50
+
51
+ export function resolveDefaultPrefetch(
52
+ raw: PrefetchStrategy | undefined,
53
+ nodeEnv: string | undefined = process.env.NODE_ENV,
54
+ ): PrefetchStrategy {
55
+ if (typeof raw === "string" && VALID_STRATEGIES.has(raw)) {
56
+ return raw;
57
+ }
58
+ return defaultPrefetchForEnvironment(nodeEnv);
59
+ }
@@ -318,6 +318,14 @@ export interface RangoInternal<
318
318
  */
319
319
  readonly prefetchConcurrency: number;
320
320
 
321
+ /**
322
+ * Router-wide default Link prefetch strategy for Links without an explicit
323
+ * `prefetch` prop. Shipped to the client in payload metadata. Derived from
324
+ * the `defaultPrefetch` option (default "none" in development and
325
+ * "viewport" in production).
326
+ */
327
+ readonly defaultPrefetch: import("./prefetch-default.js").PrefetchStrategy;
328
+
321
329
  /**
322
330
  * Resolved rango state cookie name (`{prefix}_{routerId}`), composed once at
323
331
  * router init and shipped to the client in payload metadata. The server-side
@@ -11,6 +11,7 @@ import type { ExecutionContext } from "../server/request-context.js";
11
11
  import type { UrlPatterns } from "../urls.js";
12
12
  import type { UrlBuilder } from "../urls/pattern-types.js";
13
13
  import type { NamedRouteEntry } from "./content-negotiation.js";
14
+ import type { PrefetchStrategy } from "./prefetch-default.js";
14
15
  import type { TelemetrySink } from "./telemetry.js";
15
16
  import type { RouterTracingConfig } from "./tracing.js";
16
17
  import type { RouterTimeouts, OnTimeoutCallback } from "./timeout.js";
@@ -532,6 +533,36 @@ export interface RangoOptions<TEnv = any> {
532
533
  */
533
534
  prefetchConcurrency?: number;
534
535
 
536
+ /**
537
+ * Default prefetch strategy for every `<Link>` that does not set its own
538
+ * `prefetch` prop. A per-Link `prefetch` prop always wins, in both
539
+ * directions (a Link can opt out of an aggressive default with
540
+ * `prefetch="none"`, or opt in under `defaultPrefetch: "none"`).
541
+ *
542
+ * - `"viewport"` (production default): prefetch when the link enters the viewport —
543
+ * idle-gated and queued (see `prefetchConcurrency`), so prefetches never
544
+ * compete with hydration or an active navigation.
545
+ * - `"hover"`: prefetch on mouse enter only. Much lighter on the server —
546
+ * only links the pointer approaches are fetched — at the cost of the
547
+ * ~100-300ms head start viewport prefetch gives.
548
+ * - `"adaptive"`: `"hover"` on pointer devices, `"viewport"` on touch
549
+ * devices (no hover to wait for).
550
+ * - `"render"`: prefetch on mount regardless of visibility.
551
+ * - `"none"`: manual mode — nothing prefetches unless a Link opts in.
552
+ *
553
+ * Automatic prefetch defaults to `"none"` in development and `"viewport"`
554
+ * in production. With the production default, every visible Link triggers an
555
+ * RSC render (loaders included) on the server. Routes served from cache/PPR
556
+ * absorb this cheaply; per-user dynamic routes pay full price per viewport
557
+ * entry. Set `"hover"`, `"adaptive"`, or `"none"` when that cost matters.
558
+ *
559
+ * To disable the prefetch subsystem entirely (including per-Link opt-ins
560
+ * and `useRouter().prefetch()`), set `prefetchCacheTTL: false` instead.
561
+ *
562
+ * @default "none" in development; "viewport" in production
563
+ */
564
+ defaultPrefetch?: PrefetchStrategy;
565
+
535
566
  /**
536
567
  * Prefix for the rango state cookie name. The resolved name is
537
568
  * `{prefix}_{routerId}`; the prefix is sanitized to cookie-name-safe
@@ -23,10 +23,9 @@ import { getRequestContext } from "../../server/request-context.js";
23
23
  * gate, which also avoids needless object allocation and payload growth.
24
24
  *
25
25
  * `when`: a server-only predicate. It is STRIPPED from the returned config (a
26
- * function cannot cross Flight or the segment cache) and recorded on the request
27
- * context keyed by `segmentId`, so rsc-rendering can evaluate it post-handler
28
- * outside any cache scope and drop this segment's transition when it returns
29
- * false. Used by both the fresh and revalidation resolution paths.
26
+ * function cannot cross Flight or the segment cache). PPR routes evaluate it
27
+ * from the manifest before the pipeline; other routes record it here for the
28
+ * existing post-handler gate. Used by both fresh and revalidation resolution.
30
29
  */
31
30
  export function applyViewTransitionDefault(
32
31
  transition: EntryData["transition"],
@@ -39,7 +38,12 @@ export function applyViewTransitionDefault(
39
38
  if (segmentId !== undefined) {
40
39
  try {
41
40
  const ctx = getRequestContext();
42
- (ctx._transitionWhen ??= []).push({ id: segmentId, when: result.when });
41
+ if (!ctx._pprTransitionDecisions?.has(segmentId)) {
42
+ (ctx._transitionWhen ??= []).push({
43
+ id: segmentId,
44
+ when: result.when,
45
+ });
46
+ }
43
47
  } catch {
44
48
  // No active request context (e.g. a unit test calling this util
45
49
  // directly). Skip collection; the strip below still applies so the
@@ -0,0 +1,76 @@
1
+ import { getParallelSlotEntries, type EntryData } from "../server/context.js";
2
+ import type { RequestContext } from "../server/request-context.js";
3
+ import type { TransitionWhenContext } from "../types/segments.js";
4
+
5
+ export type TransitionWhenErrorReporter = (
6
+ error: unknown,
7
+ segmentId: string,
8
+ ) => void;
9
+
10
+ export function createTransitionWhenContext<TEnv>(
11
+ ctx: RequestContext<TEnv>,
12
+ target?: {
13
+ params: Record<string, string>;
14
+ routeName?: string;
15
+ },
16
+ ): TransitionWhenContext<Record<string, string>, TEnv> {
17
+ return {
18
+ currentUrl: ctx._gateCurrentUrl,
19
+ currentParams: ctx._gateCurrentParams,
20
+ fromRouteName: ctx._prevRouteKey as TransitionWhenContext["fromRouteName"],
21
+ nextUrl: ctx.url,
22
+ nextParams: target?.params ?? ctx.params,
23
+ toRouteName: (target?.routeName ??
24
+ ctx.routeName) as TransitionWhenContext["toRouteName"],
25
+ actionId: ctx._gateActionId,
26
+ actionUrl: ctx._gateActionUrl,
27
+ actionResult: ctx._gateActionResult,
28
+ formData: ctx._gateFormData,
29
+ method: ctx.request.method,
30
+ get: ctx.get,
31
+ env: ctx.env,
32
+ };
33
+ }
34
+
35
+ /** Evaluate server-only transition gates before handlers on a PPR route. */
36
+ export function evaluatePprTransitionWhen<TEnv>(
37
+ entries: EntryData[],
38
+ ctx: RequestContext<TEnv>,
39
+ target: {
40
+ params: Record<string, string>;
41
+ routeName?: string;
42
+ },
43
+ reportError: TransitionWhenErrorReporter,
44
+ ): void {
45
+ const decisions = new Map<string, boolean>();
46
+ const whenContext = createTransitionWhenContext(ctx, target);
47
+ const visited = new Set<EntryData>();
48
+
49
+ const evaluate = (entry: EntryData, segmentId: string): void => {
50
+ const when = entry.transition?.when;
51
+ if (!when) return;
52
+ try {
53
+ decisions.set(segmentId, when(whenContext) !== false);
54
+ } catch (error) {
55
+ decisions.set(segmentId, false);
56
+ reportError(error, segmentId);
57
+ }
58
+ };
59
+
60
+ const visitEntryAndOrphanLayouts = (entry: EntryData): void => {
61
+ if (visited.has(entry)) return;
62
+ visited.add(entry);
63
+ evaluate(entry, entry.shortCode);
64
+
65
+ for (const orphan of entry.layout) visitEntryAndOrphanLayouts(orphan);
66
+ // Rendered parallel slots are leaves identified by their owning segment.
67
+ for (const { slot, entry: parallelEntry } of getParallelSlotEntries(
68
+ entry.parallel,
69
+ )) {
70
+ evaluate(parallelEntry, `${entry.shortCode}.${slot}`);
71
+ }
72
+ };
73
+
74
+ for (const entry of entries) visitEntryAndOrphanLayouts(entry);
75
+ ctx._pprTransitionDecisions = decisions.size > 0 ? decisions : undefined;
76
+ }
package/src/router.ts CHANGED
@@ -115,6 +115,7 @@ import {
115
115
  } from "./router/prerender-match.js";
116
116
  import { resolveStateCookieName } from "./router/state-cookie-name.js";
117
117
  import { resolvePrefetchCacheTTL } from "./router/prefetch-cache-ttl.js";
118
+ import { resolveDefaultPrefetch } from "./router/prefetch-default.js";
118
119
  import {
119
120
  resolvePrefetchCacheSize,
120
121
  resolvePrefetchConcurrency,
@@ -160,6 +161,7 @@ export function createRouter<TEnv = any>(
160
161
  prefetchCacheTTL: prefetchCacheTTLOption,
161
162
  prefetchCacheSize: prefetchCacheSizeOption,
162
163
  prefetchConcurrency: prefetchConcurrencyOption,
164
+ defaultPrefetch: defaultPrefetchOption,
163
165
  stateCookiePrefix: stateCookiePrefixOption,
164
166
  warmup: warmupOption,
165
167
  telemetry: telemetrySink,
@@ -268,6 +270,10 @@ export function createRouter<TEnv = any>(
268
270
  prefetchConcurrencyOption,
269
271
  );
270
272
 
273
+ // Resolve the router-wide default Link prefetch strategy ("none" in dev,
274
+ // "viewport" in production). Links without an explicit prop fall back to it.
275
+ const defaultPrefetch = resolveDefaultPrefetch(defaultPrefetchOption);
276
+
271
277
  // Resolve warmup enabled flag (default: true)
272
278
  const warmupEnabled = warmupOption !== false;
273
279
 
@@ -1009,6 +1015,7 @@ export function createRouter<TEnv = any>(
1009
1015
  prefetchCacheTTL,
1010
1016
  prefetchCacheSize,
1011
1017
  prefetchConcurrency,
1018
+ defaultPrefetch,
1012
1019
 
1013
1020
  // Expose the resolved rango state cookie name for the server-side writer
1014
1021
  // (invalidateClientCache) and for shipping to the client in metadata.
@@ -23,6 +23,18 @@
23
23
  * swallow, so one rejected capture can never wedge every later one.
24
24
  */
25
25
  let captureQueue: Promise<void> = Promise.resolve();
26
+ let admittedCaptures = 0;
27
+
28
+ /** Bound queued/running capture closures retained by one isolate. */
29
+ export const MAX_ADMITTED_CAPTURES: number = 32;
30
+
31
+ /** The caller may drop this best-effort capture and retry on a later request. */
32
+ export class CaptureQueueFullError extends Error {
33
+ constructor() {
34
+ super(`shell capture queue is full (${MAX_ADMITTED_CAPTURES})`);
35
+ this.name = "CaptureQueueFullError";
36
+ }
37
+ }
26
38
 
27
39
  /**
28
40
  * Upper bound on how long one queue link may hold the queue. A capture task
@@ -43,6 +55,10 @@ const QUEUE_LINK_CAP_MS = 60_000;
43
55
  export function enqueueSerializedCapture(
44
56
  task: () => Promise<void>,
45
57
  ): Promise<void> {
58
+ if (admittedCaptures >= MAX_ADMITTED_CAPTURES) {
59
+ return Promise.reject(new CaptureQueueFullError());
60
+ }
61
+ admittedCaptures++;
46
62
  const prior = captureQueue;
47
63
  let releaseQueue!: () => void;
48
64
  captureQueue = new Promise<void>((resolve) => {
@@ -51,9 +67,16 @@ export function enqueueSerializedCapture(
51
67
  return (async () => {
52
68
  await prior.catch(() => {});
53
69
  let capTimer: ReturnType<typeof setTimeout> | undefined;
70
+ const taskPromise = Promise.resolve()
71
+ .then(task)
72
+ .finally(() => {
73
+ // A timed-out link releases serialization, but its detached task still
74
+ // counts against admission until it actually settles.
75
+ admittedCaptures--;
76
+ });
54
77
  try {
55
78
  await Promise.race([
56
- task(),
79
+ taskPromise,
57
80
  new Promise<void>((resolve) => {
58
81
  capTimer = setTimeout(resolve, QUEUE_LINK_CAP_MS);
59
82
  (capTimer as { unref?: () => void }).unref?.();
@@ -53,6 +53,7 @@ export function buildFullPayload(
53
53
  prefetchCacheTTL: ctx.router.prefetchCacheTTL,
54
54
  prefetchCacheSize: ctx.router.prefetchCacheSize,
55
55
  prefetchConcurrency: ctx.router.prefetchConcurrency,
56
+ defaultPrefetch: ctx.router.defaultPrefetch,
56
57
  stateCookieName: ctx.router.resolvedStateCookieName,
57
58
  themeConfig: ctx.router.themeConfig,
58
59
  // Carry warmupEnabled on the initial full-render payload so the client
@@ -1219,6 +1219,7 @@ export function createRSCHandler<
1219
1219
  prefetchCacheTTL: router.prefetchCacheTTL,
1220
1220
  prefetchCacheSize: router.prefetchCacheSize,
1221
1221
  prefetchConcurrency: router.prefetchConcurrency,
1222
+ defaultPrefetch: router.defaultPrefetch,
1222
1223
  stateCookieName: router.resolvedStateCookieName,
1223
1224
  themeConfig: router.themeConfig,
1224
1225
  warmupEnabled: router.warmupEnabled,
@@ -277,10 +277,15 @@ export async function handleProgressiveEnhancement<TEnv>(
277
277
  // JS/PE parity: this is an action's revalidation render, so mark it BEFORE
278
278
  // matching — a stale `foregroundOnAction` cache entry must re-execute in the
279
279
  // foreground during the re-render, exactly as the JS path's
280
- // revalidateAfterAction does. The transition({ when }) gate fields below are
281
- // set post-match (the gate reads them after rendering); foregroundOnAction
282
- // reads _inActionRevalidation during the match, so it must be set here.
283
- getRequestContext()._inActionRevalidation = true;
280
+ // revalidateAfterAction does. PPR transition({ when }) runs during match,
281
+ // while foregroundOnAction reads _inActionRevalidation there too, so all
282
+ // action metadata must be available before matching.
283
+ const peReqCtx = getRequestContext();
284
+ peReqCtx._inActionRevalidation = true;
285
+ peReqCtx._gateActionId = directActionId ?? undefined;
286
+ peReqCtx._gateActionUrl = new URL(url);
287
+ peReqCtx._gateActionResult = actionResult;
288
+ peReqCtx._gateFormData = formData;
284
289
 
285
290
  const match = await ctx.router.match(renderRequest, { env });
286
291
 
@@ -291,16 +296,6 @@ export async function handleProgressiveEnhancement<TEnv>(
291
296
  });
292
297
  }
293
298
 
294
- // Expose the no-JS action to the transition({ when }) gate. currentUrl/Params
295
- // are absent on this full-render path (no navigation snapshot); useActionState
296
- // ids are block-scoped, so only a direct action id is available here.
297
- // actionUrl is the page the action was submitted from (this request's url).
298
- const peReqCtx = getRequestContext();
299
- peReqCtx._gateActionId = directActionId ?? undefined;
300
- peReqCtx._gateActionUrl = new URL(url);
301
- peReqCtx._gateActionResult = actionResult;
302
- peReqCtx._gateFormData = formData;
303
-
304
299
  const payload: RscPayload = {
305
300
  metadata: {
306
301
  pathname: url.pathname,