vinext 1.3.0 → 1.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 (529) hide show
  1. package/README.md +5 -2
  2. package/THIRD_PARTY_LICENSES.md +47 -0
  3. package/dist/_virtual/_rolldown/runtime.js +4 -3
  4. package/dist/build/action-owner-manifest.d.ts +3 -2
  5. package/dist/build/action-owner-manifest.js +18 -2
  6. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  7. package/dist/build/app-page-static-eligibility.js +80 -13
  8. package/dist/build/clean-output.d.ts +2 -1
  9. package/dist/build/client-build-config.d.ts +13 -3
  10. package/dist/build/client-build-config.js +46 -9
  11. package/dist/build/client-reference-async.d.ts +48 -0
  12. package/dist/build/client-reference-async.js +123 -0
  13. package/dist/build/client-reference-chunks.d.ts +32 -0
  14. package/dist/build/client-reference-chunks.js +111 -0
  15. package/dist/build/client-reference-groups.d.ts +9 -1
  16. package/dist/build/client-reference-groups.js +40 -2
  17. package/dist/build/css-url-assets.d.ts +2 -1
  18. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  19. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  20. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  21. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  22. package/dist/build/google-fonts/validate.d.ts +2 -1
  23. package/dist/build/inline-css.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +2 -1
  25. package/dist/build/next-client-runtime-manifests.d.ts +2 -1
  26. package/dist/build/precompress.d.ts +2 -1
  27. package/dist/build/precompress.js +1 -1
  28. package/dist/build/prerender-paths.d.ts +2 -1
  29. package/dist/build/prerender-phase.d.ts +2 -1
  30. package/dist/build/prerender-server-pool.js +1 -1
  31. package/dist/build/prerender.d.ts +3 -2
  32. package/dist/build/prerender.js +6 -5
  33. package/dist/build/report.d.ts +2 -15
  34. package/dist/build/report.js +1 -51
  35. package/dist/build/run-prerender.d.ts +2 -1
  36. package/dist/build/server-actions-encryption-key.d.ts +2 -1
  37. package/dist/build/ssr-manifest.js +25 -2
  38. package/dist/build/standalone.d.ts +2 -1
  39. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  40. package/dist/cache.js +1 -2
  41. package/dist/check.d.ts +2 -1
  42. package/dist/check.js +5 -1
  43. package/dist/cli-args.d.ts +2 -1
  44. package/dist/cli.js +5 -0
  45. package/dist/client/client-redirect-matcher.js +2 -1
  46. package/dist/client/client-redirects.d.ts +4 -3
  47. package/dist/client/client-redirects.js +2 -1
  48. package/dist/client/client-rewrites.d.ts +2 -1
  49. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  50. package/dist/client/dev-error-overlay.js +1 -1
  51. package/dist/client/index.js +1 -2
  52. package/dist/client/instrumentation-client-state.js +5 -5
  53. package/dist/client/navigation-runtime.d.ts +16 -2
  54. package/dist/client/navigation-runtime.js +2 -2
  55. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  56. package/dist/client/vinext-next-data.d.ts +25 -1
  57. package/dist/client/window-next.d.ts +2 -1
  58. package/dist/config/config-matchers.d.ts +12 -1
  59. package/dist/config/config-matchers.js +111 -16
  60. package/dist/config/dotenv.d.ts +2 -1
  61. package/dist/config/next-config.d.ts +32 -1
  62. package/dist/config/next-config.js +93 -5
  63. package/dist/config/tsconfig-paths.d.ts +2 -1
  64. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
  65. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
  66. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
  67. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
  68. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
  69. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
  70. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
  71. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
  72. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
  73. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
  74. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
  75. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
  76. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
  77. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
  78. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
  79. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
  80. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
  81. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
  82. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
  83. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
  84. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  105. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  106. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  107. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  108. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  109. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  110. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  111. package/dist/deps/.pnpm/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -0
  112. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  113. package/dist/entries/app-browser-entry.d.ts +20 -5
  114. package/dist/entries/app-browser-entry.js +79 -6
  115. package/dist/entries/app-rsc-entry.d.ts +2 -1
  116. package/dist/entries/app-rsc-entry.js +59 -60
  117. package/dist/entries/app-rsc-manifest.d.ts +2 -1
  118. package/dist/entries/app-rsc-manifest.js +56 -4
  119. package/dist/entries/app-ssr-entry.js +1 -0
  120. package/dist/entries/pages-entry-helpers.js +1 -2
  121. package/dist/entries/pages-server-entry.d.ts +2 -1
  122. package/dist/entries/pages-server-entry.js +34 -9
  123. package/dist/entries/runtime-entry-module.d.ts +1 -0
  124. package/dist/entries/runtime-entry-module.js +4 -1
  125. package/dist/image/image-adapters-virtual.d.ts +2 -1
  126. package/dist/index.js +184 -103
  127. package/dist/init-cloudflare.d.ts +1 -3
  128. package/dist/init-cloudflare.js +10 -48
  129. package/dist/init-platform.d.ts +2 -0
  130. package/dist/init-platform.js +4 -0
  131. package/dist/plugins/client-compile-hints.d.ts +30 -0
  132. package/dist/plugins/client-compile-hints.js +88 -0
  133. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  134. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  135. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  136. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  137. package/dist/plugins/environment.d.ts +2 -1
  138. package/dist/plugins/extensionless-dynamic-import.js +6 -2
  139. package/dist/plugins/fonts.js +9 -12
  140. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  141. package/dist/plugins/import-meta-url.d.ts +2 -1
  142. package/dist/plugins/next-intl-catalog.d.ts +12 -0
  143. package/dist/plugins/next-intl-catalog.js +85 -0
  144. package/dist/plugins/og-assets.d.ts +2 -1
  145. package/dist/plugins/og-assets.js +2 -3
  146. package/dist/plugins/optimize-imports.d.ts +2 -1
  147. package/dist/plugins/pages-node-externals.d.ts +3 -1
  148. package/dist/plugins/pages-node-externals.js +1 -1
  149. package/dist/plugins/remove-console.d.ts +2 -1
  150. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  151. package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
  152. package/dist/plugins/rsc-client-reference-loaders.js +170 -68
  153. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  154. package/dist/plugins/sass.d.ts +2 -1
  155. package/dist/plugins/strip-server-exports.d.ts +2 -1
  156. package/dist/plugins/styled-jsx.d.ts +2 -1
  157. package/dist/plugins/transform-result.d.ts +2 -1
  158. package/dist/plugins/typeof-window.d.ts +2 -1
  159. package/dist/plugins/use-cache-callable.d.ts +1 -1
  160. package/dist/plugins/use-cache-callable.js +136 -94
  161. package/dist/plugins/worker-image-imports.js +1 -1
  162. package/dist/plugins/worker-use-server.d.ts +2 -1
  163. package/dist/routing/app-route-graph.d.ts +46 -0
  164. package/dist/routing/app-route-graph.js +131 -51
  165. package/dist/routing/browser-route-manifest.d.ts +2 -1
  166. package/dist/routing/optimistic-route-trie.d.ts +2 -1
  167. package/dist/routing/route-matching.d.ts +2 -1
  168. package/dist/routing/route-pattern.d.ts +2 -1
  169. package/dist/server/accept-encoding.d.ts +2 -1
  170. package/dist/server/api-handler.js +19 -4
  171. package/dist/server/app-action-forwarding.d.ts +2 -1
  172. package/dist/server/app-bfcache-identity.d.ts +2 -1
  173. package/dist/server/app-bfcache-identity.js +1 -1
  174. package/dist/server/app-browser-action-result.d.ts +2 -1
  175. package/dist/server/app-browser-entry.js +106 -66
  176. package/dist/server/app-browser-error.d.ts +2 -1
  177. package/dist/server/app-browser-history-controller.d.ts +7 -5
  178. package/dist/server/app-browser-history-controller.js +93 -15
  179. package/dist/server/app-browser-hydration.d.ts +2 -1
  180. package/dist/server/app-browser-interception-context.d.ts +2 -1
  181. package/dist/server/app-browser-navigation-controller.d.ts +2 -2
  182. package/dist/server/app-browser-navigation-controller.js +16 -12
  183. package/dist/server/app-browser-popstate.d.ts +2 -1
  184. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  185. package/dist/server/app-browser-rsc-redirect.js +4 -4
  186. package/dist/server/app-browser-server-action-client.d.ts +4 -1
  187. package/dist/server/app-browser-server-action-client.js +4 -3
  188. package/dist/server/app-browser-state.d.ts +2 -4
  189. package/dist/server/app-browser-state.js +9 -4
  190. package/dist/server/app-browser-stream.d.ts +2 -1
  191. package/dist/server/app-browser-supplemental-refresh.js +16 -1
  192. package/dist/server/app-browser-visible-commit.d.ts +3 -2
  193. package/dist/server/app-browser-visible-commit.js +2 -12
  194. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  195. package/dist/server/app-client-reference-manifest.js +46 -0
  196. package/dist/server/app-client-reference-preloader.d.ts +25 -5
  197. package/dist/server/app-client-reference-preloader.js +22 -7
  198. package/dist/server/app-elements-wire.d.ts +8 -39
  199. package/dist/server/app-elements-wire.js +4 -41
  200. package/dist/server/app-elements.d.ts +4 -2
  201. package/dist/server/app-elements.js +4 -2
  202. package/dist/server/app-fallback-renderer.d.ts +9 -2
  203. package/dist/server/app-fallback-renderer.js +4 -1
  204. package/dist/server/app-history-state.d.ts +4 -3
  205. package/dist/server/app-history-state.js +5 -2
  206. package/dist/server/app-inline-css-client.d.ts +2 -1
  207. package/dist/server/app-metadata-tracing.d.ts +2 -1
  208. package/dist/server/app-mounted-layouts.d.ts +21 -0
  209. package/dist/server/app-mounted-layouts.js +67 -0
  210. package/dist/server/app-optimistic-routing.d.ts +37 -2
  211. package/dist/server/app-optimistic-routing.js +75 -2
  212. package/dist/server/app-page-boundary-render.d.ts +20 -2
  213. package/dist/server/app-page-boundary-render.js +224 -40
  214. package/dist/server/app-page-boundary.d.ts +34 -5
  215. package/dist/server/app-page-boundary.js +41 -8
  216. package/dist/server/app-page-cache-finalizer.d.ts +14 -2
  217. package/dist/server/app-page-cache-finalizer.js +71 -30
  218. package/dist/server/app-page-cache-render.d.ts +10 -2
  219. package/dist/server/app-page-cache-render.js +14 -2
  220. package/dist/server/app-page-cache.d.ts +13 -1
  221. package/dist/server/app-page-cache.js +33 -11
  222. package/dist/server/app-page-dispatch.d.ts +39 -11
  223. package/dist/server/app-page-dispatch.js +236 -177
  224. package/dist/server/app-page-element-builder.d.ts +19 -3
  225. package/dist/server/app-page-element-builder.js +193 -71
  226. package/dist/server/app-page-execution.d.ts +43 -51
  227. package/dist/server/app-page-execution.js +205 -92
  228. package/dist/server/app-page-head.d.ts +108 -3
  229. package/dist/server/app-page-head.js +337 -154
  230. package/dist/server/app-page-http-access-fallback-metadata.d.ts +49 -2
  231. package/dist/server/app-page-http-access-fallback-metadata.js +77 -2
  232. package/dist/server/app-page-layout-gate.d.ts +35 -0
  233. package/dist/server/app-page-layout-gate.js +50 -0
  234. package/dist/server/app-page-method.d.ts +2 -1
  235. package/dist/server/app-page-params.d.ts +0 -1
  236. package/dist/server/app-page-params.js +1 -14
  237. package/dist/server/app-page-probe.d.ts +5 -22
  238. package/dist/server/app-page-probe.js +4 -37
  239. package/dist/server/app-page-render-identity.d.ts +2 -1
  240. package/dist/server/app-page-render.d.ts +9 -13
  241. package/dist/server/app-page-render.js +108 -214
  242. package/dist/server/app-page-request.d.ts +15 -4
  243. package/dist/server/app-page-request.js +2 -2
  244. package/dist/server/app-page-response.js +3 -3
  245. package/dist/server/app-page-route-wiring.d.ts +65 -8
  246. package/dist/server/app-page-route-wiring.js +259 -103
  247. package/dist/server/app-page-rsc-render-status.d.ts +29 -2
  248. package/dist/server/app-page-rsc-render-status.js +121 -13
  249. package/dist/server/app-page-search-params-observation.d.ts +7 -2
  250. package/dist/server/app-page-search-params-observation.js +8 -1
  251. package/dist/server/app-page-segment-plan.d.ts +2 -1
  252. package/dist/server/app-page-stream.d.ts +33 -1
  253. package/dist/server/app-page-stream.js +25 -6
  254. package/dist/server/app-pages-bridge.d.ts +6 -1
  255. package/dist/server/app-pages-bridge.js +7 -3
  256. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  257. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  258. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  259. package/dist/server/app-prerender-static-params.d.ts +2 -1
  260. package/dist/server/app-render-dependency.d.ts +21 -4
  261. package/dist/server/app-render-dependency.js +100 -33
  262. package/dist/server/app-request-stage-dispatch.js +1 -1
  263. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  264. package/dist/server/app-response-stage-entry.d.ts +2 -1
  265. package/dist/server/app-route-handler-cache.d.ts +2 -1
  266. package/dist/server/app-route-handler-cache.js +2 -2
  267. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  268. package/dist/server/app-route-handler-dispatch.js +15 -10
  269. package/dist/server/app-route-handler-execution.d.ts +2 -1
  270. package/dist/server/app-route-handler-execution.js +8 -3
  271. package/dist/server/app-route-handler-policy.d.ts +1 -1
  272. package/dist/server/app-route-handler-policy.js +3 -3
  273. package/dist/server/app-route-handler-response.d.ts +2 -1
  274. package/dist/server/app-route-handler-response.js +1 -1
  275. package/dist/server/app-route-handler-runtime.d.ts +2 -1
  276. package/dist/server/app-route-handler-runtime.js +17 -4
  277. package/dist/server/app-route-module-loader.d.ts +18 -1
  278. package/dist/server/app-route-module-loader.js +8 -0
  279. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  280. package/dist/server/app-rsc-cache-busting.d.ts +2 -2
  281. package/dist/server/app-rsc-cache-busting.js +4 -4
  282. package/dist/server/app-rsc-error-handler.d.ts +4 -2
  283. package/dist/server/app-rsc-error-handler.js +9 -1
  284. package/dist/server/app-rsc-errors.d.ts +10 -1
  285. package/dist/server/app-rsc-errors.js +8 -1
  286. package/dist/server/app-rsc-handler.d.ts +7 -6
  287. package/dist/server/app-rsc-handler.js +36 -34
  288. package/dist/server/app-rsc-request-normalization.d.ts +0 -4
  289. package/dist/server/app-rsc-request-normalization.js +1 -4
  290. package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
  291. package/dist/server/app-rsc-response-finalizer.js +2 -2
  292. package/dist/server/app-rsc-response-stage.js +5 -3
  293. package/dist/server/app-rsc-route-matching.d.ts +38 -1
  294. package/dist/server/app-rsc-route-matching.js +24 -0
  295. package/dist/server/app-segment-config.d.ts +2 -1
  296. package/dist/server/app-segment-config.js +1 -14
  297. package/dist/server/app-server-action-execution.d.ts +5 -2
  298. package/dist/server/app-server-action-execution.js +10 -7
  299. package/dist/server/app-ssr-entry.d.ts +8 -0
  300. package/dist/server/app-ssr-entry.js +98 -50
  301. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  302. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  303. package/dist/server/app-ssr-stream.d.ts +22 -10
  304. package/dist/server/app-ssr-stream.js +300 -68
  305. package/dist/server/app-static-generation.d.ts +2 -1
  306. package/dist/server/app-streamed-client-references.d.ts +39 -0
  307. package/dist/server/app-streamed-client-references.js +156 -0
  308. package/dist/server/app-visited-response-cache.d.ts +38 -2
  309. package/dist/server/app-visited-response-cache.js +46 -5
  310. package/dist/server/app-worker-stages.d.ts +27 -4
  311. package/dist/server/app-worker-stages.js +45 -6
  312. package/dist/server/artifact-compatibility.d.ts +2 -2
  313. package/dist/server/artifact-compatibility.js +1 -10
  314. package/dist/server/bfcache-identity.d.ts +2 -1
  315. package/dist/server/cache-headers.d.ts +2 -1
  316. package/dist/server/cache-proof.d.ts +1 -115
  317. package/dist/server/cache-proof.js +1 -544
  318. package/dist/server/cacheability-request.d.ts +2 -1
  319. package/dist/server/cacheability-request.js +13 -8
  320. package/dist/server/config-headers.d.ts +2 -1
  321. package/dist/server/csp.d.ts +2 -1
  322. package/dist/server/default-global-not-found-module.d.ts +2 -1
  323. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  324. package/dist/server/default-http-access-fallback-modules.js +31 -0
  325. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  326. package/dist/server/defer-until-stream-consumed.js +154 -21
  327. package/dist/server/dev-lockfile.d.ts +32 -2
  328. package/dist/server/dev-lockfile.js +46 -2
  329. package/dist/server/dev-module-runner.d.ts +2 -1
  330. package/dist/server/dev-server.js +14 -6
  331. package/dist/server/fetch-handler.js +1 -2
  332. package/dist/server/file-based-metadata.d.ts +2 -1
  333. package/dist/server/framework-tracer.d.ts +2 -1
  334. package/dist/server/headers.d.ts +6 -3
  335. package/dist/server/headers.js +9 -5
  336. package/dist/server/html.d.ts +1 -0
  337. package/dist/server/html.js +19 -1
  338. package/dist/server/http-conditional.d.ts +2 -1
  339. package/dist/server/http-error-responses.d.ts +2 -1
  340. package/dist/server/implicit-tags.d.ts +2 -1
  341. package/dist/server/isr-cache.d.ts +8 -2
  342. package/dist/server/isr-cache.js +26 -1
  343. package/dist/server/metadata-route-build-data.d.ts +2 -1
  344. package/dist/server/metadata-route-build-data.js +1 -1
  345. package/dist/server/metadata-route-response.d.ts +2 -1
  346. package/dist/server/metadata-route-response.js +32 -15
  347. package/dist/server/metadata-routes.d.ts +2 -1
  348. package/dist/server/middleware-runtime.d.ts +2 -1
  349. package/dist/server/multi-stage.d.ts +52 -11
  350. package/dist/server/multi-stage.js +13 -1
  351. package/dist/server/navigation-planner.js +1 -1
  352. package/dist/server/navigation-trace.d.ts +2 -1
  353. package/dist/server/next-error-digest.d.ts +2 -1
  354. package/dist/server/nitro-public-files-plugin.d.ts +2 -1
  355. package/dist/server/nitro-public-files.d.ts +2 -1
  356. package/dist/server/opentelemetry-api.d.ts +2 -1
  357. package/dist/server/operation-token.d.ts +2 -1
  358. package/dist/server/pages-api-route.d.ts +2 -1
  359. package/dist/server/pages-api-route.js +28 -19
  360. package/dist/server/pages-asset-tags.d.ts +2 -1
  361. package/dist/server/pages-body-parser-config.d.ts +2 -1
  362. package/dist/server/pages-client-assets.d.ts +4 -0
  363. package/dist/server/pages-data-route.d.ts +2 -1
  364. package/dist/server/pages-document-asset-props.d.ts +2 -1
  365. package/dist/server/pages-document-initial-props.d.ts +2 -1
  366. package/dist/server/pages-execution-tracing.d.ts +2 -1
  367. package/dist/server/pages-execution-tracing.js +1 -1
  368. package/dist/server/pages-get-initial-props.d.ts +2 -1
  369. package/dist/server/pages-media-type.d.ts +21 -1
  370. package/dist/server/pages-media-type.js +69 -5
  371. package/dist/server/pages-node-compat.js +52 -27
  372. package/dist/server/pages-page-data.d.ts +7 -1
  373. package/dist/server/pages-page-data.js +35 -12
  374. package/dist/server/pages-page-handler.d.ts +3 -2
  375. package/dist/server/pages-page-handler.js +27 -27
  376. package/dist/server/pages-page-method.d.ts +2 -1
  377. package/dist/server/pages-page-response.d.ts +2 -1
  378. package/dist/server/pages-preview.d.ts +2 -1
  379. package/dist/server/pages-readiness.d.ts +2 -1
  380. package/dist/server/pages-request-pipeline.d.ts +10 -1
  381. package/dist/server/pages-request-pipeline.js +6 -7
  382. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  383. package/dist/server/pages-request-stage-entry.js +14 -12
  384. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  385. package/dist/server/pages-response-stage-entry.js +9 -3
  386. package/dist/server/pages-route-data-kind.d.ts +2 -1
  387. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  388. package/dist/server/prerender-route-params.d.ts +2 -1
  389. package/dist/server/prod-server.js +14 -4
  390. package/dist/server/request-log.d.ts +2 -1
  391. package/dist/server/request-pipeline.d.ts +6 -0
  392. package/dist/server/request-pipeline.js +21 -1
  393. package/dist/server/request-tracing.d.ts +2 -1
  394. package/dist/server/request-tracing.js +1 -1
  395. package/dist/server/response-start-tracing.js +7 -29
  396. package/dist/server/rsc-render-stream.d.ts +4 -0
  397. package/dist/server/rsc-render-stream.js +25 -0
  398. package/dist/server/seed-cache.d.ts +2 -1
  399. package/dist/server/seed-cache.js +1 -1
  400. package/dist/server/shared-cache-identity.d.ts +23 -0
  401. package/dist/server/shared-cache-identity.js +36 -0
  402. package/dist/server/static-file-cache.d.ts +2 -1
  403. package/dist/server/static-file-cache.js +1 -0
  404. package/dist/server/worker-revalidation-context.d.ts +2 -1
  405. package/dist/server/worker-stages.d.ts +18 -4
  406. package/dist/server/worker-stages.js +23 -4
  407. package/dist/shims/app.d.ts +2 -1
  408. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  409. package/dist/shims/cache-handler.d.ts +8 -3
  410. package/dist/shims/cache-handler.js +31 -11
  411. package/dist/shims/cache-request-state.d.ts +17 -20
  412. package/dist/shims/cache-request-state.js +16 -21
  413. package/dist/shims/cache-runtime.js +27 -11
  414. package/dist/shims/cache.d.ts +8 -7
  415. package/dist/shims/cache.js +17 -19
  416. package/dist/shims/cacheability-classification.d.ts +2 -0
  417. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  418. package/dist/shims/caught-not-found-boundaries.js +48 -0
  419. package/dist/shims/cdn-cache.d.ts +22 -5
  420. package/dist/shims/cdn-purge-routes.d.ts +2 -1
  421. package/dist/shims/client-locale.js +2 -1
  422. package/dist/shims/client-page-root.d.ts +2 -1
  423. package/dist/shims/client-page-root.js +2 -2
  424. package/dist/shims/config.d.ts +2 -1
  425. package/dist/shims/default-forbidden.d.ts +4 -0
  426. package/dist/shims/default-forbidden.js +18 -0
  427. package/dist/shims/default-not-found.d.ts +0 -5
  428. package/dist/shims/default-not-found.js +5 -41
  429. package/dist/shims/default-unauthorized.d.ts +4 -0
  430. package/dist/shims/default-unauthorized.js +18 -0
  431. package/dist/shims/dynamic.js +9 -6
  432. package/dist/shims/error-boundary.d.ts +39 -3
  433. package/dist/shims/error-boundary.js +33 -18
  434. package/dist/shims/fetch-cache-state.d.ts +5 -1
  435. package/dist/shims/fetch-cache-state.js +1 -3
  436. package/dist/shims/fetch-cache.d.ts +2 -1
  437. package/dist/shims/fetch-cache.js +34 -24
  438. package/dist/shims/font-google.js +1 -2
  439. package/dist/shims/font-utils.d.ts +3 -2
  440. package/dist/shims/font-utils.js +5 -3
  441. package/dist/shims/form.js +3 -3
  442. package/dist/shims/headers.d.ts +8 -23
  443. package/dist/shims/headers.js +17 -67
  444. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  445. package/dist/shims/http-access-error-fallback.js +47 -0
  446. package/dist/shims/image.d.ts +1 -22
  447. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  448. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  449. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  450. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  451. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  452. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  453. package/dist/shims/internal/client-reference-loader.js +91 -0
  454. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  455. package/dist/shims/internal/cookies.js +1 -2
  456. package/dist/shims/internal/headers-state.d.ts +2 -0
  457. package/dist/shims/internal/headers-state.js +6 -1
  458. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
  459. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  460. package/dist/shims/internal/navigation-untracked.js +1 -1
  461. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  462. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  463. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  464. package/dist/shims/link.js +197 -52
  465. package/dist/shims/metadata.d.ts +52 -29
  466. package/dist/shims/metadata.js +142 -42
  467. package/dist/shims/navigation-errors.d.ts +2 -1
  468. package/dist/shims/navigation-server.js +1 -1
  469. package/dist/shims/navigation.d.ts +95 -8
  470. package/dist/shims/navigation.js +255 -47
  471. package/dist/shims/navigation.react-server.js +2 -2
  472. package/dist/shims/pages-router-runtime.d.ts +2 -1
  473. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  474. package/dist/shims/request-state-types.d.ts +2 -2
  475. package/dist/shims/router.js +14 -3
  476. package/dist/shims/slot.d.ts +12 -0
  477. package/dist/shims/slot.js +37 -9
  478. package/dist/shims/unified-request-context.d.ts +1 -1
  479. package/dist/shims/unified-request-context.js +5 -6
  480. package/dist/typegen.d.ts +2 -1
  481. package/dist/utils/cache-control-metadata.d.ts +5 -0
  482. package/dist/utils/cache-control-metadata.js +9 -1
  483. package/dist/utils/client-build-manifest.d.ts +4 -1
  484. package/dist/utils/client-build-manifest.js +9 -2
  485. package/dist/utils/client-entry-manifest.d.ts +13 -0
  486. package/dist/utils/client-entry-manifest.js +20 -1
  487. package/dist/utils/client-reference-chunks.d.ts +45 -0
  488. package/dist/utils/client-reference-chunks.js +30 -0
  489. package/dist/utils/client-runtime-metadata.d.ts +9 -1
  490. package/dist/utils/client-runtime-metadata.js +40 -9
  491. package/dist/utils/compare.d.ts +9 -0
  492. package/dist/utils/compare.js +15 -1
  493. package/dist/utils/lazy-chunks.d.ts +14 -0
  494. package/dist/utils/lazy-chunks.js +27 -1
  495. package/dist/utils/middleware-request-headers.d.ts +2 -1
  496. package/dist/utils/project.d.ts +4 -3
  497. package/dist/utils/project.js +12 -17
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/regex.d.ts +5 -0
  500. package/dist/utils/regex.js +11 -1
  501. package/dist/utils/text-stream.d.ts +10 -5
  502. package/dist/utils/text-stream.js +6 -6
  503. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  504. package/package.json +6 -5
  505. package/dist/build/layout-classification-types.d.ts +0 -60
  506. package/dist/build/layout-classification-types.js +0 -1
  507. package/dist/build/layout-classification.d.ts +0 -61
  508. package/dist/build/layout-classification.js +0 -98
  509. package/dist/build/route-classification-injector.d.ts +0 -32
  510. package/dist/build/route-classification-injector.js +0 -59
  511. package/dist/build/route-classification-manifest.d.ts +0 -53
  512. package/dist/build/route-classification-manifest.js +0 -143
  513. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  514. package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -10
  515. package/dist/server/app-browser-client-reuse-manifest.js +0 -101
  516. package/dist/server/app-layout-param-observation.d.ts +0 -41
  517. package/dist/server/app-layout-param-observation.js +0 -168
  518. package/dist/server/client-reuse-manifest.d.ts +0 -102
  519. package/dist/server/client-reuse-manifest.js +0 -209
  520. package/dist/server/default-not-found-module.d.ts +0 -19
  521. package/dist/server/default-not-found-module.js +0 -18
  522. package/dist/server/rsc-stream-hints.d.ts +0 -21
  523. package/dist/server/rsc-stream-hints.js +0 -227
  524. package/dist/server/skip-cache-proof.d.ts +0 -60
  525. package/dist/server/skip-cache-proof.js +0 -168
  526. package/dist/server/static-layout-client-reuse-proof.d.ts +0 -13
  527. package/dist/server/static-layout-client-reuse-proof.js +0 -33
  528. package/dist/utils/sorted-array.d.ts +0 -7
  529. package/dist/utils/sorted-array.js +0 -20
@@ -11,24 +11,24 @@ import { resolveDirectHybridClientRouteOwner } from "./internal/hybrid-client-ro
11
11
  import { isHashOnlyBrowserUrlChange, toCanonicalBrowserNavigationHref, toSameOriginAppPath, withBasePath } from "./url-utils.js";
12
12
  import { disableSmoothScrollDuringRouteTransition } from "./disable-smooth-scroll.js";
13
13
  import { retryScrollTo, scrollToHashTarget } from "./hash-scroll.js";
14
- import { AppElementsWire } from "../server/app-elements-wire.js";
15
- import "../server/app-elements.js";
16
- import { GLOBAL_ACCESSORS_KEY, ServerInsertedHTMLContext, _registerStateAccessors, clearClientHydrationContext, clearServerInsertedHTML, flushServerInsertedHTML, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getLayoutSegmentContext, getNavigationContext, registerServerInsertedHTMLCallback, renderServerInsertedHTML, setNavigationContext } from "./navigation-context-state.js";
17
- import { BailoutToCSRError, DynamicServerError, HTTP_ERROR_FALLBACK_ERROR_CODE, RedirectType, decodeRedirectError, forbidden, getAccessFallbackHTTPStatus, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, notFound, permanentRedirect, redirect, unauthorized, unstable_rethrow } from "./navigation-errors.js";
18
- import { clearAppNavigationFailureTarget, stageAppNavigationFailureTarget } from "../client/app-nav-failure-handler.js";
19
- import { beginAppRouterScrollIntent, clearAppRouterScrollIntent, consumeAppRouterScrollIntent, getPendingAppRouterScrollIntent, isLatestAppRouterScrollIntent } from "./app-router-scroll-state.js";
20
14
  import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix } from "../server/app-rsc-cache-busting.js";
15
+ import { clearAppNavigationFailureTarget, stageAppNavigationFailureTarget } from "../client/app-nav-failure-handler.js";
21
16
  import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
22
17
  import { getNavigationRuntime, hasAppNavigationRuntime, loadNavigationRuntimeRouteManifest } from "../client/navigation-runtime.js";
23
18
  import { UnrecognizedActionError, unstable_isUnrecognizedActionError } from "./unrecognized-action-error.js";
19
+ import { AppElementsWire } from "../server/app-elements-wire.js";
20
+ import "../server/app-elements.js";
24
21
  import { PUBLIC_INITIAL_BFCACHE_ID } from "../server/app-bfcache-id.js";
25
22
  import { resolveManifestNavigationInterceptionContext } from "../server/app-browser-interception-context.js";
26
- import { createExternalHistoryStatePreservingMetadata, createHashOnlyHistoryStatePreservingNavigationMetadata, isAppOwnedHistoryState } from "../server/app-history-state.js";
23
+ import { createExternalHistoryStatePreservingMetadata, createHashOnlyHistoryStatePreservingNavigationMetadata, isAppOwnedHistoryState, readHistoryStateTraversalIndex } from "../server/app-history-state.js";
27
24
  import { hasPendingAppRouterPageRedirect } from "../server/app-browser-mpa-navigation.js";
28
25
  import { extractRscCompletionMetadata } from "../server/rsc-completion-metadata.js";
29
26
  import { navigationPlanner } from "../server/navigation-planner.js";
30
27
  import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
28
+ import { BailoutToCSRError, DynamicServerError, HTTP_ERROR_FALLBACK_ERROR_CODE, RedirectType, decodeRedirectError, forbidden, getAccessFallbackHTTPStatus, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, notFound, permanentRedirect, redirect, unauthorized, unstable_rethrow } from "./navigation-errors.js";
31
29
  import { getPagesNavigationContext } from "./internal/pages-router-accessor.js";
30
+ import { beginAppRouterScrollIntent, clearAppRouterScrollIntent, consumeAppRouterScrollIntent, getPendingAppRouterScrollIntent, isLatestAppRouterScrollIntent } from "./app-router-scroll-state.js";
31
+ import { GLOBAL_ACCESSORS_KEY, ServerInsertedHTMLContext, _registerStateAccessors, clearClientHydrationContext, clearServerInsertedHTML, flushServerInsertedHTML, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getLayoutSegmentContext, getNavigationContext, registerServerInsertedHTMLCallback, renderServerInsertedHTML, setNavigationContext } from "./navigation-context-state.js";
32
32
  import { cancelAppPrefetchFetch, promoteAppPrefetchFetch, releaseAppPrefetchFetchSlot, scheduleAppPrefetchFetch } from "./internal/app-prefetch-fetch-queue.js";
33
33
  import * as React$1 from "react";
34
34
  //#region src/shims/navigation.ts
@@ -70,9 +70,9 @@ function useChildSegments(parallelRoutesKey = "children") {
70
70
  return [];
71
71
  }
72
72
  }
73
- const _READONLY_SEARCH_PARAMS = Symbol("vinext.navigation.readonlySearchParams");
74
- const _READONLY_SEARCH_PARAMS_SOURCE = Symbol("vinext.navigation.readonlySearchParamsSource");
75
- const _READONLY_SEARCH_PARAMS_SOURCE_KEY = Symbol("vinext.navigation.readonlySearchParamsSourceKey");
73
+ const _READONLY_SEARCH_PARAMS = Symbol.for("vinext.navigation.readonlySearchParams");
74
+ const _READONLY_SEARCH_PARAMS_SOURCE = Symbol.for("vinext.navigation.readonlySearchParamsSource");
75
+ const _READONLY_SEARCH_PARAMS_SOURCE_KEY = Symbol.for("vinext.navigation.readonlySearchParamsSourceKey");
76
76
  const PAGES_NAVIGATION_NOTIFY_KEY = Symbol.for("vinext.navigation.pagesNavigationNotify");
77
77
  const isServer = typeof window === "undefined";
78
78
  /** basePath from next.config.js, injected by the plugin at build time */
@@ -296,9 +296,11 @@ function findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mounte
296
296
  function hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext = null, mountedSlotsHeader = null, options = {}) {
297
297
  const match = findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, options.additionalRscUrls);
298
298
  if (match === null) return false;
299
+ if (match.entry.pending !== void 0 && options.reusePending === false) return false;
299
300
  if (match.entry.pending !== void 0 || resolvePrefetchCacheEntryExpiresAt(match.entry) > Date.now()) {
300
301
  touchPrefetchCacheEntry(getPrefetchCache(), match.cacheKey, match.entry);
301
302
  attachPrefetchInvalidationToEntry(match.cacheKey, match.entry, options.onInvalidate);
303
+ options.onReuse?.(match.entry, match.cacheKey);
302
304
  return true;
303
305
  }
304
306
  deletePrefetchCacheEntry(getPrefetchCache(), getPrefetchedUrls(), match.cacheKey, match.entry, options.notifyInvalidation ?? true);
@@ -465,9 +467,13 @@ const retainedPrefetchInvalidations = /* @__PURE__ */ new Set();
465
467
  function retainPrefetchInvalidationAfterConsume(entry) {
466
468
  const callbacks = entry.onInvalidateCallbacks;
467
469
  if (callbacks === void 0 || callbacks.size === 0) return;
468
- const delay = Math.max(0, resolvePrefetchCacheEntryExpiresAt(entry) - Date.now());
470
+ retainPrefetchInvalidation(callbacks, resolvePrefetchCacheEntryExpiresAt(entry));
471
+ }
472
+ function retainPrefetchInvalidation(callbacks, expiresAt, forVisitedResponse = false) {
473
+ const delay = Math.max(0, expiresAt - Date.now());
469
474
  const retained = {
470
475
  callbacks,
476
+ ...forVisitedResponse ? { forVisitedResponse: true } : {},
471
477
  timer: setTimeout(() => fireRetainedPrefetchInvalidation(retained), delay)
472
478
  };
473
479
  retainedPrefetchInvalidations.add(retained);
@@ -494,7 +500,7 @@ function deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, notify) {
494
500
  entry.onInvalidateCallbacks = void 0;
495
501
  }
496
502
  }
497
- function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = null) {
503
+ function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = null, mountedSlotsHeader = null) {
498
504
  const cache = getPrefetchCache();
499
505
  const prefetched = getPrefetchedUrls();
500
506
  const normalizedTarget = normalizeRscCacheLookupUrl(rscUrl);
@@ -505,6 +511,7 @@ function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = nul
505
511
  const source = parsePrefetchCacheKey(cacheKey);
506
512
  if (source.interceptionContext !== interceptionContext) continue;
507
513
  if (normalizeRscCacheLookupUrl(source.rscUrl) !== normalizedTarget) continue;
514
+ if (!isPrefetchCacheEntryCompatibleWithMountedSlots(entry, mountedSlotsHeader)) continue;
508
515
  superseded.push([cacheKey, entry]);
509
516
  }
510
517
  for (const [cacheKey, entry] of superseded) {
@@ -513,6 +520,25 @@ function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = nul
513
520
  }
514
521
  return superseded.length > 0;
515
522
  }
523
+ /**
524
+ * Make a prefetch reusable by a navigation, as an `unstable_dynamicOnHover`
525
+ * hover does. A pending one that would be kept as learning-only becomes a full
526
+ * prefetch and takes the full-prefetch lifetime. One already kept as
527
+ * learning-only because its page rendered dynamically is left for the full
528
+ * prefetch to replace: Next.js refetches it with `FetchStrategy.Full`, so the
529
+ * page reflects the cookies and headers at hover time.
530
+ */
531
+ function promotePrefetchCacheEntryForNavigation(cacheKey, entry) {
532
+ if (entry.dynamicStaleTime !== "learning-only") {
533
+ entry.cacheForNavigation = true;
534
+ return;
535
+ }
536
+ if (entry.cacheForNavigation === false) return;
537
+ entry.dynamicStaleTime = "full-prefetch";
538
+ if (entry.snapshot === void 0) return;
539
+ entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, entry.fallbackTtlMs ?? PREFETCH_CACHE_TTL, "full-prefetch");
540
+ schedulePrefetchInvalidation(cacheKey, entry);
541
+ }
516
542
  function invalidatePrefetchCacheEntry(cacheKey) {
517
543
  const cache = getPrefetchCache();
518
544
  const entry = cache.get(cacheKey);
@@ -548,14 +574,37 @@ function attachPrefetchInvalidationCallback(cacheKey, onInvalidate) {
548
574
  if (!entry) return;
549
575
  attachPrefetchInvalidationToEntry(cacheKey, entry, onInvalidate);
550
576
  }
551
- function invalidatePrefetchCache() {
577
+ function invalidatePrefetchCache(options = {}) {
552
578
  cancelPendingPrefetchSetups(null);
553
579
  const cache = getPrefetchCache();
554
580
  const prefetched = getPrefetchedUrls();
555
581
  for (const [cacheKey, entry] of cache) deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, true);
556
582
  prefetched.clear();
557
583
  for (const retained of retainedPrefetchInvalidations) fireRetainedPrefetchInvalidation(retained);
558
- if (!isServer) getNavigationRuntime()?.functions.pingVisibleLinks?.();
584
+ if (!isServer && options.pingVisibleLinks !== false) getNavigationRuntime()?.functions.pingVisibleLinks?.();
585
+ }
586
+ /**
587
+ * Evict the prefetch entries that may hold dynamic data, for a Server Action
588
+ * that called `refresh()`. Like Next.js's dynamic-only revalidation, which
589
+ * evicts its BFCache but keeps its prefetch cache, this keeps route trees,
590
+ * static prefetches and full prefetches. It drops navigation responses, and
591
+ * automatic prefetches whose page rendered dynamically or hasn't finished
592
+ * rendering, including those only kept to learn a route: Next.js's automatic
593
+ * prefetches never hold dynamic data.
594
+ */
595
+ function invalidateDynamicPrefetchCache() {
596
+ const cache = getPrefetchCache();
597
+ const prefetched = getPrefetchedUrls();
598
+ const evicted = [];
599
+ for (const [cacheKey, entry] of cache) if (!(entry.prefetchKind === "route-tree" || entry.prefetchKind !== void 0 && (entry.dynamicStaleTime === "full-prefetch" || entry.snapshot !== void 0 && !isStaleTimeSeconds(entry.snapshot.dynamicStaleTimeSeconds)))) evicted.push([cacheKey, entry]);
600
+ for (const [cacheKey, entry] of evicted) deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, true);
601
+ }
602
+ /**
603
+ * Notify the prefetches that stood in for a visited response (see
604
+ * `hasNavigationFreshVisitedResponse`), as the visited responses are cleared.
605
+ */
606
+ function invalidateVisitedResponsePrefetches() {
607
+ for (const retained of retainedPrefetchInvalidations) if (retained.forVisitedResponse === true) fireRetainedPrefetchInvalidation(retained);
559
608
  }
560
609
  /**
561
610
  * Prevent completed navigation responses from becoming authoritative again
@@ -571,7 +620,7 @@ function disableNavigationResponsePrefetchCacheReuse() {
571
620
  }
572
621
  if (didDemote && !isServer) getNavigationRuntime()?.functions.pingVisibleLinks?.();
573
622
  }
574
- function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = null, mountedSlotsHeader = null, fallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, reuseAfterHistoryRestore = false) {
623
+ function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = null, mountedSlotsHeader = null, fallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, reuseAfterHistoryRestore = false, expiresAt = resolveCachedRscResponseExpiresAt(Date.now(), snapshot, fallbackTtlMs)) {
575
624
  const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
576
625
  const cache = getPrefetchCache();
577
626
  const existing = cache.get(cacheKey);
@@ -580,7 +629,7 @@ function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = nu
580
629
  const entry = {
581
630
  cacheForNavigation: true,
582
631
  cacheKeys: /* @__PURE__ */ new Set([cacheKey]),
583
- expiresAt: resolveCachedRscResponseExpiresAt(timestamp, snapshot, fallbackTtlMs),
632
+ expiresAt,
584
633
  mountedSlotsHeader,
585
634
  outcome: "cache-seeded",
586
635
  reuseAfterHistoryRestore,
@@ -594,6 +643,35 @@ function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = nu
594
643
  schedulePrefetchInvalidation(cacheKey, entry);
595
644
  evictPrefetchCacheIfNeeded();
596
645
  }
646
+ /**
647
+ * Fulfill a full prefetch from the visited response of an earlier navigation,
648
+ * as Next.js does from its BFCache, instead of issuing a request. The data is
649
+ * fresh for the static stale time from the navigation, not the dynamic one
650
+ * (`attemptToFulfillDynamicSegmentFromBFCache`).
651
+ */
652
+ function seedFullPrefetchFromVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls = [], onInvalidate) {
653
+ const visited = getNavigationRuntime()?.functions.readVisitedResponseForFullPrefetch?.([rscUrl, ...additionalRscUrls], interceptionContext, mountedSlotsHeader);
654
+ if (!visited) return false;
655
+ const expiresAt = visited.navigatedAt + Math.max(PREFETCH_CACHE_TTL, MIN_PREFETCH_STALE_TIME_MS);
656
+ if (expiresAt <= Date.now()) return false;
657
+ seedPrefetchResponseSnapshot(rscUrl, visited.response, interceptionContext, mountedSlotsHeader, void 0, true, expiresAt);
658
+ const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
659
+ if (getPrefetchCache().get(cacheKey)?.snapshot !== visited.response) return false;
660
+ attachPrefetchInvalidationCallback(cacheKey, onInvalidate);
661
+ return true;
662
+ }
663
+ /**
664
+ * Whether a navigation to the URL would reuse the response of an earlier one,
665
+ * so a prefetch has nothing to fetch. Like Next.js, whose navigation keeps the
666
+ * route and its segments for `staleTimes.dynamic`. `onInvalidate` fires when
667
+ * that reuse ends.
668
+ */
669
+ function hasNavigationFreshVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls = [], onInvalidate) {
670
+ const freshUntil = getNavigationRuntime()?.functions.readVisitedResponseForFullPrefetch?.([rscUrl, ...additionalRscUrls], interceptionContext, mountedSlotsHeader)?.navigationFreshUntil;
671
+ if (freshUntil === void 0 || freshUntil === null) return false;
672
+ if (onInvalidate !== void 0) retainPrefetchInvalidation(/* @__PURE__ */ new Set([onInvalidate]), freshUntil, true);
673
+ return true;
674
+ }
597
675
  function deletePrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = null) {
598
676
  const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
599
677
  const cache = getPrefetchCache();
@@ -672,6 +750,7 @@ function createCachedRscResponseSnapshot(response, buffer, responseUrl = null) {
672
750
  ...dynamicStaleTimeSeconds !== void 0 ? { dynamicStaleTimeSeconds } : {},
673
751
  mountedSlotsHeader: response.headers.get(VINEXT_MOUNTED_SLOTS_HEADER),
674
752
  paramsHeader: response.headers.get(VINEXT_PARAMS_HEADER),
753
+ receivedAt: Date.now(),
675
754
  ...redirectHeader === null ? {} : { redirectHeader },
676
755
  ...redirectTypeHeader === null ? {} : { redirectTypeHeader },
677
756
  renderedPathAndSearch: parseRenderedPathAndSearchHeader(response.headers.get(VINEXT_RENDERED_PATH_AND_SEARCH_HEADER)),
@@ -837,6 +916,10 @@ function prefetchRscResponse(rscUrl, fetchPromise, interceptionContext = null, m
837
916
  searchAgnosticShell: behavior.searchAgnosticShell === true,
838
917
  timestamp: now
839
918
  };
919
+ if (behavior.dynamicStaleTime === "learning-only" && behavior.searchAgnosticShell !== true) {
920
+ entry.dynamicStaleTime = "learning-only";
921
+ entry.fallbackTtlMs = behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL;
922
+ } else if (behavior.dynamicStaleTime === "full-prefetch") entry.dynamicStaleTime = "full-prefetch";
840
923
  addPrefetchInvalidationCallback(entry, options?.onInvalidate);
841
924
  entry.fetchPromise = fetchPromise;
842
925
  entry.pending = fetchPromise.then(async (response) => {
@@ -847,8 +930,13 @@ function prefetchRscResponse(rscUrl, fetchPromise, interceptionContext = null, m
847
930
  entry.snapshot = snapshot;
848
931
  entry.size = snapshot.buffer.byteLength;
849
932
  adjustPrefetchCacheByteSize(cache, entry.size - previousSize);
850
- entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL, behavior.searchAgnosticShell === true ? "ignore" : behavior.dynamicStaleTime ?? (behavior.optimisticRouteShell === true ? "ignore" : "verbatim"));
851
- if (behavior.prepareSnapshot && snapshot.redirectHeader === void 0) try {
933
+ const fallbackTtlMs = behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL;
934
+ const dynamicStaleTime = behavior.searchAgnosticShell === true ? "ignore" : entry.dynamicStaleTime ?? behavior.dynamicStaleTime ?? (behavior.optimisticRouteShell === true ? "ignore" : "verbatim");
935
+ if (dynamicStaleTime === "learning-only" && isStaleTimeSeconds(snapshot.dynamicStaleTimeSeconds)) {
936
+ entry.cacheForNavigation = false;
937
+ entry.expiresAt = entry.timestamp + Math.max(fallbackTtlMs, MIN_PREFETCH_STALE_TIME_MS);
938
+ } else entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, fallbackTtlMs, dynamicStaleTime === "learning-only" ? "verbatim" : dynamicStaleTime);
939
+ if (behavior.prepareSnapshot && entry.cacheForNavigation && snapshot.redirectHeader === void 0) try {
852
940
  const preparedElements = await behavior.prepareSnapshot(snapshot);
853
941
  if (cache.get(cacheKey) !== entry) return;
854
942
  entry.preparedElements = preparedElements;
@@ -952,8 +1040,12 @@ async function consumePrefetchResponseForNavigation(rscUrl, interceptionContext
952
1040
  if (options?.shouldConsume?.() === false) return null;
953
1041
  const allowExpiredInFlightHandoff = entry.pending !== void 0;
954
1042
  if (entry.pending !== void 0) {
955
- promoteAppPrefetchFetch(entry.fetchPromise);
956
- await entry.pending.catch(() => {});
1043
+ const releaseClaim = promoteAppPrefetchFetch(entry.fetchPromise, options?.shouldConsume);
1044
+ try {
1045
+ await entry.pending.catch(() => {});
1046
+ } finally {
1047
+ releaseClaim();
1048
+ }
957
1049
  if (cache.get(cacheKey) !== entry) return null;
958
1050
  if (options?.shouldConsume?.() === false) return null;
959
1051
  }
@@ -987,6 +1079,8 @@ function getClientNavigationState() {
987
1079
  originalPushState: window.history.pushState.bind(window.history),
988
1080
  originalReplaceState: window.history.replaceState.bind(window.history),
989
1081
  patchInstalled: false,
1082
+ routerHistoryWriteDepth: 0,
1083
+ routerHistoryWrite: null,
990
1084
  hasPendingNavigationUpdate: false,
991
1085
  suppressUrlNotifyCount: 0,
992
1086
  navigationSnapshotActiveCount: 0
@@ -1040,14 +1134,31 @@ let _cachedEmptyClientSearchParams = null;
1040
1134
  * be visible until the next commit.
1041
1135
  */
1042
1136
  function getSearchParamsSnapshot() {
1043
- if (getNavigationContext()) return getServerSearchParamsSnapshot();
1137
+ const hasAppContext = getNavigationContext() !== null;
1044
1138
  const pagesCtx = getPagesNavigationContext();
1045
- if (pagesCtx) return getReadonlyPagesSearchParams(pagesCtx.searchParams);
1046
- const cached = getClientNavigationState()?.cachedReadonlySearchParams;
1047
- if (cached) return cached;
1139
+ if (!hasAppContext && pagesCtx) return getReadonlyPagesSearchParams(pagesCtx.searchParams);
1140
+ const state = getClientNavigationState();
1141
+ if (state) {
1142
+ if (hasAppContext) adoptHydrationSearchParams(state);
1143
+ return state.cachedReadonlySearchParams;
1144
+ }
1048
1145
  if (_cachedEmptyClientSearchParams === null) _cachedEmptyClientSearchParams = new ReadonlyURLSearchParams();
1049
1146
  return _cachedEmptyClientSearchParams;
1050
1147
  }
1148
+ let _comparedHydrationSearchParams = null;
1149
+ /**
1150
+ * Keep the hydrated search params object when the browser URL has the same
1151
+ * query. React compares the two snapshots by identity once hydrated, so a new
1152
+ * object would re-render every useSearchParams() caller and re-run effects
1153
+ * keyed on it, where Next.js keeps one object from the first render.
1154
+ */
1155
+ function adoptHydrationSearchParams(state) {
1156
+ const hydrated = getServerSearchParamsSnapshot();
1157
+ if (hydrated === state.cachedReadonlySearchParams) return;
1158
+ if (hydrated === _comparedHydrationSearchParams) return;
1159
+ _comparedHydrationSearchParams = hydrated;
1160
+ if (hydrated.toString() === state.cachedReadonlySearchParams.toString()) state.cachedReadonlySearchParams = hydrated;
1161
+ }
1051
1162
  function syncCommittedUrlStateFromLocation() {
1052
1163
  const state = getClientNavigationState();
1053
1164
  if (!state) return false;
@@ -1313,16 +1424,80 @@ function commitClientNavigationState(navId, options) {
1313
1424
  if (urlChanged || paramsChanged) clearClientHydrationContext();
1314
1425
  if (shouldNotify) notifyNavigationListeners();
1315
1426
  }
1316
- function pushHistoryStateWithoutNotify(data, unused, url) {
1317
- withSuppressedUrlNotifications(() => {
1318
- getClientNavigationState()?.originalPushState.call(window.history, data, unused, url);
1319
- });
1427
+ /** Whether a history entry's state is the data written to it, cloned by the browser. */
1428
+ function isSameHistoryStateData(historyState, data) {
1429
+ try {
1430
+ return JSON.stringify(historyState) === JSON.stringify(data);
1431
+ } catch {
1432
+ return false;
1433
+ }
1320
1434
  }
1321
- function replaceHistoryStateWithoutNotify(data, unused, url) {
1435
+ /** Writes the in-progress router write if this call is it, consuming its marker. */
1436
+ function forwardRouterHistoryWrite(state, method, data, unused, url) {
1437
+ const write = state.routerHistoryWrite;
1438
+ if (write?.method !== method) return false;
1439
+ if (write.threw) {
1440
+ if (url == null || new URL(url, window.location.href).href !== write.href) return false;
1441
+ if (write.data !== data && !(isAppOwnedHistoryState(data) && readHistoryStateTraversalIndex(data) === readHistoryStateTraversalIndex(write.data))) return false;
1442
+ } else if (write.data !== data || write.url !== url) return false;
1443
+ if (write.landed) return true;
1444
+ state.routerHistoryWrite = null;
1445
+ const landing = write.land?.(data);
1446
+ const original = method === "pushState" ? state.originalPushState : state.originalReplaceState;
1447
+ const writtenData = landing ? landing.data : data;
1448
+ const historyStateBeforeWrite = window.history.state;
1449
+ try {
1450
+ original.call(window.history, writtenData, unused, url);
1451
+ } catch (error) {
1452
+ const landed = window.history.state !== historyStateBeforeWrite && window.location.href === write.href && isSameHistoryStateData(window.history.state, writtenData);
1453
+ if (landed) landing?.commit();
1454
+ state.routerHistoryWrite = {
1455
+ ...write,
1456
+ threw: true,
1457
+ landed
1458
+ };
1459
+ throw error;
1460
+ }
1461
+ landing?.commit();
1462
+ if (write.threw) state.routerHistoryWrite = {
1463
+ ...write,
1464
+ landed: true
1465
+ };
1466
+ return true;
1467
+ }
1468
+ function writeRouterHistoryState(method, data, unused, url, land) {
1322
1469
  withSuppressedUrlNotifications(() => {
1323
- getClientNavigationState()?.originalReplaceState.call(window.history, data, unused, url);
1470
+ const state = getClientNavigationState();
1471
+ if (!state) return;
1472
+ if (url == null) {
1473
+ (method === "pushState" ? state.originalPushState : state.originalReplaceState).call(window.history, data, unused, url);
1474
+ return;
1475
+ }
1476
+ const previousWrite = state.routerHistoryWrite;
1477
+ state.routerHistoryWriteDepth += 1;
1478
+ state.routerHistoryWrite = {
1479
+ method,
1480
+ data,
1481
+ url,
1482
+ href: new URL(url, window.location.href).href,
1483
+ land,
1484
+ threw: false,
1485
+ landed: false
1486
+ };
1487
+ try {
1488
+ window.history[method](data, unused, url);
1489
+ } finally {
1490
+ state.routerHistoryWriteDepth -= 1;
1491
+ state.routerHistoryWrite = previousWrite;
1492
+ }
1324
1493
  });
1325
1494
  }
1495
+ function pushHistoryStateWithoutNotify(data, unused, url, land) {
1496
+ writeRouterHistoryState("pushState", data, unused, url, land);
1497
+ }
1498
+ function replaceHistoryStateWithoutNotify(data, unused, url, land) {
1499
+ writeRouterHistoryState("replaceState", data, unused, url, land);
1500
+ }
1326
1501
  /**
1327
1502
  * Save the current scroll position into the current history state.
1328
1503
  * Called before every navigation to enable scroll restoration on back/forward.
@@ -1538,6 +1713,32 @@ function hasScheduledAppRouterNavigation() {
1538
1713
  function releaseScheduledAppRouterNavigationAfterCurrentTask(release) {
1539
1714
  queueMicrotask(release);
1540
1715
  }
1716
+ let inFlightAppRouterNavigationCount = 0;
1717
+ let visibleLinkPingAwaitsNavigations = false;
1718
+ /**
1719
+ * Called by the App Router browser entry for each RSC navigation it runs.
1720
+ * Returns a release callback for the navigation's settlement.
1721
+ */
1722
+ function trackAppRouterNavigationInFlight() {
1723
+ inFlightAppRouterNavigationCount += 1;
1724
+ let released = false;
1725
+ return () => {
1726
+ if (released) return;
1727
+ released = true;
1728
+ inFlightAppRouterNavigationCount = Math.max(0, inFlightAppRouterNavigationCount - 1);
1729
+ if (inFlightAppRouterNavigationCount === 0 && visibleLinkPingAwaitsNavigations) {
1730
+ visibleLinkPingAwaitsNavigations = false;
1731
+ getNavigationRuntime()?.functions.pingVisibleLinks?.();
1732
+ }
1733
+ };
1734
+ }
1735
+ function pingVisibleLinksOnceNavigationsSettle() {
1736
+ if (inFlightAppRouterNavigationCount > 0) {
1737
+ visibleLinkPingAwaitsNavigations = true;
1738
+ return;
1739
+ }
1740
+ getNavigationRuntime()?.functions.pingVisibleLinks?.();
1741
+ }
1541
1742
  /**
1542
1743
  * App Router public router instance. Mirrors Next.js's
1543
1744
  * `publicAppRouterInstance` from
@@ -1589,15 +1790,16 @@ const _appRouter = {
1589
1790
  },
1590
1791
  refresh() {
1591
1792
  if (isServer) return;
1592
- getNavigationRuntime()?.functions.clearNavigationCaches?.();
1593
- if (hasScheduledAppRouterNavigation()) return;
1793
+ getNavigationRuntime()?.functions.clearNavigationCaches?.({ pingVisibleLinks: false });
1594
1794
  const rscNavigate = getNavigationRuntime()?.functions.navigate;
1595
- if (rscNavigate) {
1596
- const navigate = () => {
1597
- rscNavigate(window.location.href, 0, "refresh", void 0, void 0, true);
1598
- };
1599
- React$1.startTransition(navigate);
1795
+ if (hasScheduledAppRouterNavigation() || !rscNavigate) {
1796
+ getNavigationRuntime()?.functions.pingVisibleLinks?.();
1797
+ return;
1600
1798
  }
1799
+ const navigate = () => {
1800
+ rscNavigate(window.location.href, 0, "refresh", void 0, void 0, true).finally(pingVisibleLinksOnceNavigationsSettle);
1801
+ };
1802
+ React$1.startTransition(navigate);
1601
1803
  },
1602
1804
  prefetch(href, options) {
1603
1805
  assertSafeNavigationUrl(href);
@@ -1635,7 +1837,7 @@ const _appRouter = {
1635
1837
  const kind = options?.kind === "full" ? "full" : "auto";
1636
1838
  const [{ resolveAutoAppRoutePrefetch, resolveFullAppRoutePrefetch }, { resolveAppPrefetchRscRequest }] = await Promise.all([import("./internal/app-route-prefetch-policy.js"), import("./internal/app-prefetch-rsc-request.js")]);
1637
1839
  if (setup.cancelled) return;
1638
- const policy = kind === "full" ? resolveFullAppRoutePrefetch() : resolveAutoAppRoutePrefetch(rewrittenPrefetchHref ?? fullHref);
1840
+ const policy = kind === "full" ? resolveFullAppRoutePrefetch() : resolveAutoAppRoutePrefetch(rewrittenPrefetchHref ?? fullHref, interceptionContext);
1639
1841
  const reusable = policy.shouldPrefetch && policy.cacheForNavigation;
1640
1842
  const requiresRouteTreePrefetch = policy.requiresRouteTreePrefetch === true;
1641
1843
  if (reusable && kind === "full") headers.delete(NEXT_ROUTER_PREFETCH_HEADER);
@@ -1647,7 +1849,7 @@ const _appRouter = {
1647
1849
  if (!reusable && kind === "auto") {
1648
1850
  headers.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
1649
1851
  headers.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
1650
- headers.set(VINEXT_RSC_RENDER_MODE_HEADER, hasSearchParams ? APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL : APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL);
1852
+ headers.set(VINEXT_RSC_RENDER_MODE_HEADER, hasSearchParams && policy.rendersDynamically !== true ? APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL : APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL);
1651
1853
  }
1652
1854
  const { additionalRscUrls, rscUrl } = await resolveAppPrefetchRscRequest({
1653
1855
  fullHref,
@@ -1657,16 +1859,20 @@ const _appRouter = {
1657
1859
  if (setup.cancelled) return;
1658
1860
  const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
1659
1861
  const prefetched = getPrefetchedUrls();
1862
+ if (policy.dynamicStaleTime !== "full-prefetch" && hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) {
1863
+ attachPrefetchInvalidationCallback(cacheKey, options?.onInvalidate);
1864
+ return;
1865
+ }
1660
1866
  if (reusable) {
1661
- discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext);
1867
+ discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext, mountedSlotsHeader);
1662
1868
  if (hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, {
1663
1869
  additionalRscUrls,
1664
- onInvalidate: options?.onInvalidate
1870
+ onInvalidate: options?.onInvalidate,
1871
+ onReuse: policy.dynamicStaleTime === "full-prefetch" ? (entry, matchedCacheKey) => promotePrefetchCacheEntryForNavigation(matchedCacheKey, entry) : void 0
1665
1872
  })) return;
1666
- } else if (hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) {
1667
- attachPrefetchInvalidationCallback(cacheKey, options?.onInvalidate);
1668
- return;
1873
+ if (policy.dynamicStaleTime === "full-prefetch" && seedFullPrefetchFromVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls, options?.onInvalidate)) return;
1669
1874
  }
1875
+ if (policy.dynamicStaleTime !== "full-prefetch" && hasNavigationFreshVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls, options?.onInvalidate)) return;
1670
1876
  prefetched.add(cacheKey);
1671
1877
  const fetchFullRscPayload = () => scheduleAppPrefetchFetch((signal) => fetch(rscUrl, {
1672
1878
  headers,
@@ -1824,7 +2030,8 @@ if (!isServer) {
1824
2030
  }
1825
2031
  });
1826
2032
  window.history.pushState = function patchedPushState(data, unused, url) {
1827
- getNavigationRuntime()?.functions.flushCommittingNavigationUrl?.();
2033
+ if (forwardRouterHistoryWrite(state, "pushState", data, unused, url)) return;
2034
+ if (state.routerHistoryWriteDepth === 0) getNavigationRuntime()?.functions.flushCommittingNavigationUrl?.();
1828
2035
  if (isAppOwnedHistoryState(data)) {
1829
2036
  const previousHistoryState = window.history.state;
1830
2037
  state.originalPushState.call(window.history, data, unused, url);
@@ -1841,7 +2048,8 @@ if (!isServer) {
1841
2048
  }
1842
2049
  };
1843
2050
  window.history.replaceState = function patchedReplaceState(data, unused, url) {
1844
- getNavigationRuntime()?.functions.flushCommittingNavigationUrl?.();
2051
+ if (forwardRouterHistoryWrite(state, "replaceState", data, unused, url)) return;
2052
+ if (state.routerHistoryWriteDepth === 0) getNavigationRuntime()?.functions.flushCommittingNavigationUrl?.();
1845
2053
  if (isAppOwnedHistoryState(data)) {
1846
2054
  const previousHistoryState = window.history.state;
1847
2055
  state.originalReplaceState.call(window.history, data, unused, url);
@@ -1860,4 +2068,4 @@ if (!isServer) {
1860
2068
  }
1861
2069
  }
1862
2070
  //#endregion
1863
- export { BailoutToCSRError, DYNAMIC_NAVIGATION_CACHE_TTL, DynamicServerError, GLOBAL_ACCESSORS_KEY, HTTP_ERROR_FALLBACK_ERROR_CODE, MAX_PREFETCH_CACHE_SIZE, PREFETCH_CACHE_TTL, ReadonlyURLSearchParams, RedirectType, ServerInsertedHTMLContext, UnrecognizedActionError, __basePath, _registerStateAccessors, activateNavigationSnapshot, appRouterInstance, applyAppRouterScrollFallback, clearPendingPathname, clearServerInsertedHTML, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createAppPrefetchRequestHeaders, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, createSnapshotPathAndSearch, decodeRedirectError, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, flushServerInsertedHTML, forbidden, getAccessFallbackHTTPStatus, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getClientNavigationRenderContext, getClientNavigationState, getClientParams, getCurrentInterceptionContext, getCurrentNextUrl, getFreshPrefetchCacheEntry, getLayoutSegmentContext, getMountedSlotsHeader, getNavigationContext, getPrefetchCache, getPrefetchInterceptionContext, getPrefetchedUrls, hasFreshLearningOnlyPrefetchCacheEntry, hasPrefetchCacheEntryForNavigation, hasSearchAgnosticPrefetchShellForRoute, invalidatePrefetchCache, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, navigateClientSide, notFound, parseRenderedPathAndSearchHeader, peekPrefetchResponseForNavigation, permanentRedirect, prefetchRscResponse, preloadHybridClientRouteOwner, prepareNavigationPrefetchSnapshot, pushHistoryStateWithoutNotify, redirect, renderServerInsertedHTML, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, resolveCachedRscResponseExpiresAt, resolveCachedRscResponseTtlMs, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedPrefetchResponseSnapshot, setClientParams, setMountedSlotsHeader, setNavigationContext, setPendingPathname, snapshotRscResponse, storePrefetchResponse, unauthorized, unstable_isUnrecognizedActionError, unstable_rethrow, useClientNavigationRenderSnapshot, useParams, usePathname, useRouter, useSearchParams, useSelectedLayoutSegment, useSelectedLayoutSegments, useServerInsertedHTML };
2071
+ export { BailoutToCSRError, DYNAMIC_NAVIGATION_CACHE_TTL, DynamicServerError, GLOBAL_ACCESSORS_KEY, HTTP_ERROR_FALLBACK_ERROR_CODE, MAX_PREFETCH_CACHE_SIZE, PREFETCH_CACHE_TTL, ReadonlyURLSearchParams, RedirectType, ServerInsertedHTMLContext, UnrecognizedActionError, __basePath, _registerStateAccessors, activateNavigationSnapshot, appRouterInstance, applyAppRouterScrollFallback, clearPendingPathname, clearServerInsertedHTML, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createAppPrefetchRequestHeaders, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, createSnapshotPathAndSearch, decodeRedirectError, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, flushServerInsertedHTML, forbidden, getAccessFallbackHTTPStatus, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getClientNavigationRenderContext, getClientNavigationState, getClientParams, getCurrentInterceptionContext, getCurrentNextUrl, getFreshPrefetchCacheEntry, getLayoutSegmentContext, getMountedSlotsHeader, getNavigationContext, getPrefetchCache, getPrefetchInterceptionContext, getPrefetchedUrls, hasFreshLearningOnlyPrefetchCacheEntry, hasNavigationFreshVisitedResponse, hasPrefetchCacheEntryForNavigation, hasSearchAgnosticPrefetchShellForRoute, invalidateDynamicPrefetchCache, invalidatePrefetchCache, invalidateVisitedResponsePrefetches, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, navigateClientSide, notFound, parseRenderedPathAndSearchHeader, peekPrefetchResponseForNavigation, permanentRedirect, prefetchRscResponse, preloadHybridClientRouteOwner, prepareNavigationPrefetchSnapshot, promotePrefetchCacheEntryForNavigation, pushHistoryStateWithoutNotify, redirect, renderServerInsertedHTML, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, resolveCachedRscResponseExpiresAt, resolveCachedRscResponseTtlMs, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedFullPrefetchFromVisitedResponse, seedPrefetchResponseSnapshot, setClientParams, setMountedSlotsHeader, setNavigationContext, setPendingPathname, snapshotRscResponse, storePrefetchResponse, trackAppRouterNavigationInFlight, unauthorized, unstable_isUnrecognizedActionError, unstable_rethrow, useClientNavigationRenderSnapshot, useParams, usePathname, useRouter, useSearchParams, useSelectedLayoutSegment, useSelectedLayoutSegments, useServerInsertedHTML };
@@ -1,7 +1,7 @@
1
- import { GLOBAL_ACCESSORS_KEY, ServerInsertedHTMLContext, _registerStateAccessors, clearServerInsertedHTML, flushServerInsertedHTML, getLayoutSegmentContext, getNavigationContext, renderServerInsertedHTML, setNavigationContext } from "./navigation-context-state.js";
1
+ import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
2
2
  import { BailoutToCSRError, DynamicServerError, HTTP_ERROR_FALLBACK_ERROR_CODE, RedirectType, forbidden, getAccessFallbackHTTPStatus, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, notFound, permanentRedirect, redirect, unauthorized, unstable_rethrow } from "./navigation-errors.js";
3
+ import { GLOBAL_ACCESSORS_KEY, ServerInsertedHTMLContext, _registerStateAccessors, clearServerInsertedHTML, flushServerInsertedHTML, getLayoutSegmentContext, getNavigationContext, renderServerInsertedHTML, setNavigationContext } from "./navigation-context-state.js";
3
4
  import "./navigation-server.js";
4
- import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
5
5
  import { throwClientHookError } from "./client-hook-error.js";
6
6
  //#region src/shims/navigation.react-server.ts
7
7
  function usePathname() {
@@ -8,4 +8,5 @@ export declare function setPagesRouterPopStateHandler(handler: PagesRouterPopSta
8
8
  */
9
9
  export declare function setStampInitialHistoryState(fn: () => void): void;
10
10
  export declare function installPagesRouterRuntime(): void;
11
- //#endregion
11
+ //#endregion
12
+ export {};
@@ -29,4 +29,5 @@ export declare function waitForPprFallbackShellCacheReady(state: PprFallbackShel
29
29
  export declare function preparePprFallbackShellFinalRender(state: PprFallbackShellState): void;
30
30
  export declare function beginPprFallbackShellFinalRender(state: PprFallbackShellState): void;
31
31
  export declare function isPprFallbackShellAbortError(error: unknown): boolean;
32
- //#endregion
32
+ //#endregion
33
+ export {};
@@ -1,12 +1,12 @@
1
- import { ExecutionContextLike } from "./request-context.js";
2
1
  import { NavigationContext } from "./navigation-context-state.js";
3
2
  import "./navigation.js";
4
- import { CacheLifeConfig, CacheState } from "./cache-request-state.js";
3
+ import { ExecutionContextLike } from "./request-context.js";
5
4
  import { RootParamsState } from "./root-params.js";
6
5
  import { FetchCacheState } from "./fetch-cache-state.js";
7
6
  import "./fetch-cache.js";
8
7
  import { HeadersAccessPhase, VinextHeadersShimState } from "./internal/headers-state.js";
9
8
  import { HeadersContext } from "./headers.js";
9
+ import { CacheLifeConfig, CacheState } from "./cache-request-state.js";
10
10
  import { RouterState, SSRContext } from "./router-state.js";
11
11
  import { PrivateCacheState } from "./cache-runtime.js";
12
12
  import { HeadState } from "./head-state.js";
@@ -1006,15 +1006,26 @@ function getClientConfigRouteContext(href) {
1006
1006
  search: parsed.search
1007
1007
  };
1008
1008
  }
1009
+ /**
1010
+ * matchRedirect has already applied basePath to a config destination, so a
1011
+ * local one that resolves outside it (`/../outside`, or a `basePath: false`
1012
+ * rule) is another app's URL. resolveLocalRedirectUrl would treat it as an app
1013
+ * path and re-add basePath, so it is followed as a document navigation instead,
1014
+ * landing where the server's redirect does.
1015
+ */
1016
+ function configRedirectLeavesBasePath(location) {
1017
+ if (!__basePath || !location.startsWith("/") || location.startsWith("//")) return false;
1018
+ return !hasBasePath(new URL(location, "http://vinext.local").pathname, __basePath);
1019
+ }
1009
1020
  async function resolveClientConfigRedirect(href) {
1010
1021
  const redirects = window.__VINEXT_CLIENT_REDIRECTS__;
1011
1022
  if (!redirects || redirects.length === 0) return null;
1012
1023
  const routeContext = getClientConfigRouteContext(href);
1013
1024
  if (!routeContext) return null;
1014
- const [{ matchClientRedirect }, { preserveRedirectDestinationQuery }] = await Promise.all([import("../client/client-redirect-matcher.js"), import("../config/config-matchers.js")]);
1025
+ const [{ matchClientRedirect }, { encodeRedirectLocation, preserveRedirectDestinationQuery }] = await Promise.all([import("../client/client-redirect-matcher.js"), import("../config/config-matchers.js")]);
1015
1026
  const redirect = matchClientRedirect(routeContext.pathname, redirects, routeContext.context, routeContext.basePathState);
1016
1027
  if (!redirect) return null;
1017
- return preserveRedirectDestinationQuery(__basePath && routeContext.basePathState.hadBasePath && !isExternalUrl(redirect.destination) && !hasBasePath(redirect.destination, __basePath) ? __basePath + redirect.destination : redirect.destination, routeContext.search, redirect.destinationQuery);
1028
+ return encodeRedirectLocation(preserveRedirectDestinationQuery(redirect.destination, routeContext.search, redirect.destinationQuery));
1018
1029
  }
1019
1030
  async function applyClientConfigRewrite(href, rewrite) {
1020
1031
  const routeContext = getClientConfigRouteContext(href);
@@ -1569,7 +1580,7 @@ async function navigateClient(url, fetchUrl = url, options = {}, routeUrl = url)
1569
1580
  const routeMasked = options.routeMasked ?? routeUrl !== url;
1570
1581
  const configRedirect = hasClientRedirectRules() && clientConfigRedirectCouldMatch(browserUrl) ? await resolveClientConfigRedirect(browserUrl) : null;
1571
1582
  if (configRedirect) {
1572
- const redirectedUrl = resolveLocalRedirectUrl(configRedirect);
1583
+ const redirectedUrl = configRedirectLeavesBasePath(configRedirect) ? null : resolveLocalRedirectUrl(configRedirect);
1573
1584
  if (!redirectedUrl) scheduleHardNavigationAndThrow(configRedirect, "Navigation redirected externally");
1574
1585
  throw new InternalNavigationRedirect(redirectedUrl);
1575
1586
  }
@@ -59,6 +59,18 @@ export declare function BfcacheSegmentBoundary({ children, id, stateKey }: {
59
59
  id: string;
60
60
  stateKey: string;
61
61
  }): React$1.JSX.Element;
62
+ /**
63
+ * Retains a layout's children across navigations that change which segment
64
+ * they render. Each child keeps its own wrappers, so a page and a nested layout
65
+ * give the layout's children different element shapes, and a retention list
66
+ * inside the child would remount with them. Next.js keeps this Activity list in
67
+ * the parent's layout router, above the child's boundaries, so a page left for a
68
+ * sibling with its own layout keeps its state when navigating back.
69
+ */
70
+ export declare function BfcacheChildrenBoundary({ children, id }: {
71
+ children: React$1.ReactNode;
72
+ id: string;
73
+ }): React$1.JSX.Element;
62
74
  export declare function getNonCacheComponentsSegmentKey(id: string, activeStateKey: string): string | undefined;
63
75
  export declare function resolveBfcacheSegmentStateKey(id: string, identityMap: Readonly<Record<string, string>>, bfcacheIdMap: Readonly<Record<string, string>> | null): string | undefined;
64
76
  export declare function mergeElements(prev: AppElements, next: AppElements, options?: MergeElementsOptions | boolean): AppElements;