vinext 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -1
  2. package/dist/build/action-owner-manifest.d.ts +3 -2
  3. package/dist/build/action-owner-manifest.js +18 -2
  4. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  5. package/dist/build/app-page-static-eligibility.js +80 -13
  6. package/dist/build/clean-output.d.ts +2 -1
  7. package/dist/build/client-build-config.d.ts +13 -3
  8. package/dist/build/client-build-config.js +46 -9
  9. package/dist/build/client-reference-async.d.ts +48 -0
  10. package/dist/build/client-reference-async.js +123 -0
  11. package/dist/build/client-reference-chunks.d.ts +32 -0
  12. package/dist/build/client-reference-chunks.js +111 -0
  13. package/dist/build/client-reference-groups.d.ts +9 -1
  14. package/dist/build/client-reference-groups.js +40 -2
  15. package/dist/build/css-url-assets.d.ts +2 -1
  16. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  17. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  18. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  19. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  20. package/dist/build/google-fonts/validate.d.ts +2 -1
  21. package/dist/build/inline-css.d.ts +2 -1
  22. package/dist/build/layout-classification.d.ts +2 -1
  23. package/dist/build/module-dependency-cache.d.ts +2 -1
  24. package/dist/build/next-client-runtime-manifests.d.ts +2 -1
  25. package/dist/build/precompress.d.ts +2 -1
  26. package/dist/build/precompress.js +1 -1
  27. package/dist/build/prerender-paths.d.ts +2 -1
  28. package/dist/build/prerender-phase.d.ts +2 -1
  29. package/dist/build/prerender-server-pool.js +1 -1
  30. package/dist/build/prerender.d.ts +3 -2
  31. package/dist/build/prerender.js +5 -4
  32. package/dist/build/report.d.ts +2 -1
  33. package/dist/build/route-classification-injector.d.ts +2 -1
  34. package/dist/build/route-classification-manifest.d.ts +2 -1
  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 +4 -0
  43. package/dist/cli-args.d.ts +2 -1
  44. package/dist/cli.js +2 -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/index.js +1 -2
  51. package/dist/client/instrumentation-client-state.js +5 -5
  52. package/dist/client/navigation-runtime.d.ts +3 -1
  53. package/dist/client/navigation-runtime.js +1 -1
  54. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  55. package/dist/client/vinext-next-data.d.ts +25 -1
  56. package/dist/client/window-next.d.ts +2 -1
  57. package/dist/config/config-matchers.d.ts +12 -1
  58. package/dist/config/config-matchers.js +111 -16
  59. package/dist/config/dotenv.d.ts +2 -1
  60. package/dist/config/next-config.d.ts +13 -1
  61. package/dist/config/next-config.js +29 -4
  62. package/dist/config/tsconfig-paths.d.ts +2 -1
  63. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  64. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  65. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  66. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  67. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  68. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  69. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  70. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  71. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  72. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  73. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  74. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  75. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  76. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  77. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  78. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  79. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  80. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  81. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  82. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  83. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  84. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  89. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  90. package/dist/entries/app-browser-entry.d.ts +20 -5
  91. package/dist/entries/app-browser-entry.js +79 -6
  92. package/dist/entries/app-rsc-entry.d.ts +2 -1
  93. package/dist/entries/app-rsc-entry.js +42 -12
  94. package/dist/entries/app-rsc-manifest.d.ts +2 -1
  95. package/dist/entries/app-rsc-manifest.js +53 -0
  96. package/dist/entries/pages-entry-helpers.js +1 -2
  97. package/dist/entries/pages-server-entry.d.ts +2 -1
  98. package/dist/entries/pages-server-entry.js +1 -1
  99. package/dist/entries/runtime-entry-module.d.ts +1 -0
  100. package/dist/entries/runtime-entry-module.js +4 -1
  101. package/dist/image/image-adapters-virtual.d.ts +2 -1
  102. package/dist/index.js +102 -34
  103. package/dist/plugins/client-compile-hints.d.ts +30 -0
  104. package/dist/plugins/client-compile-hints.js +88 -0
  105. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  106. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  107. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  108. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  109. package/dist/plugins/environment.d.ts +2 -1
  110. package/dist/plugins/fonts.js +9 -12
  111. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  112. package/dist/plugins/import-meta-url.d.ts +2 -1
  113. package/dist/plugins/og-assets.d.ts +2 -1
  114. package/dist/plugins/og-assets.js +2 -3
  115. package/dist/plugins/optimize-imports.d.ts +2 -1
  116. package/dist/plugins/pages-node-externals.d.ts +2 -1
  117. package/dist/plugins/remove-console.d.ts +2 -1
  118. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  119. package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
  120. package/dist/plugins/rsc-client-reference-loaders.js +170 -68
  121. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  122. package/dist/plugins/sass.d.ts +2 -1
  123. package/dist/plugins/strip-server-exports.d.ts +2 -1
  124. package/dist/plugins/styled-jsx.d.ts +2 -1
  125. package/dist/plugins/transform-result.d.ts +2 -1
  126. package/dist/plugins/typeof-window.d.ts +2 -1
  127. package/dist/plugins/worker-image-imports.js +1 -1
  128. package/dist/plugins/worker-use-server.d.ts +2 -1
  129. package/dist/routing/app-route-graph.d.ts +40 -0
  130. package/dist/routing/app-route-graph.js +122 -50
  131. package/dist/routing/browser-route-manifest.d.ts +2 -1
  132. package/dist/routing/optimistic-route-trie.d.ts +2 -1
  133. package/dist/routing/route-matching.d.ts +2 -1
  134. package/dist/routing/route-pattern.d.ts +2 -1
  135. package/dist/server/accept-encoding.d.ts +2 -1
  136. package/dist/server/app-action-forwarding.d.ts +2 -1
  137. package/dist/server/app-bfcache-identity.d.ts +2 -1
  138. package/dist/server/app-browser-action-result.d.ts +2 -1
  139. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
  140. package/dist/server/app-browser-entry.js +30 -6
  141. package/dist/server/app-browser-error.d.ts +2 -1
  142. package/dist/server/app-browser-history-controller.d.ts +2 -1
  143. package/dist/server/app-browser-hydration.d.ts +2 -1
  144. package/dist/server/app-browser-interception-context.d.ts +2 -1
  145. package/dist/server/app-browser-navigation-controller.js +15 -10
  146. package/dist/server/app-browser-popstate.d.ts +2 -1
  147. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  148. package/dist/server/app-browser-server-action-client.d.ts +2 -1
  149. package/dist/server/app-browser-state.js +1 -1
  150. package/dist/server/app-browser-stream.d.ts +2 -1
  151. package/dist/server/app-browser-visible-commit.d.ts +2 -1
  152. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  153. package/dist/server/app-client-reference-manifest.js +46 -0
  154. package/dist/server/app-client-reference-preloader.d.ts +25 -5
  155. package/dist/server/app-client-reference-preloader.js +22 -7
  156. package/dist/server/app-elements-wire.d.ts +2 -1
  157. package/dist/server/app-elements.d.ts +2 -0
  158. package/dist/server/app-elements.js +3 -1
  159. package/dist/server/app-fallback-renderer.d.ts +9 -2
  160. package/dist/server/app-fallback-renderer.js +4 -1
  161. package/dist/server/app-history-state.d.ts +2 -1
  162. package/dist/server/app-inline-css-client.d.ts +2 -1
  163. package/dist/server/app-layout-param-observation.d.ts +2 -1
  164. package/dist/server/app-metadata-tracing.d.ts +2 -1
  165. package/dist/server/app-optimistic-routing.d.ts +18 -1
  166. package/dist/server/app-optimistic-routing.js +34 -1
  167. package/dist/server/app-page-boundary-render.d.ts +20 -2
  168. package/dist/server/app-page-boundary-render.js +221 -38
  169. package/dist/server/app-page-boundary.d.ts +34 -5
  170. package/dist/server/app-page-boundary.js +40 -7
  171. package/dist/server/app-page-cache-finalizer.d.ts +2 -1
  172. package/dist/server/app-page-cache-finalizer.js +1 -1
  173. package/dist/server/app-page-cache-render.d.ts +10 -2
  174. package/dist/server/app-page-cache-render.js +14 -2
  175. package/dist/server/app-page-cache.js +2 -2
  176. package/dist/server/app-page-dispatch.d.ts +34 -1
  177. package/dist/server/app-page-dispatch.js +163 -34
  178. package/dist/server/app-page-element-builder.d.ts +17 -1
  179. package/dist/server/app-page-element-builder.js +187 -66
  180. package/dist/server/app-page-execution.d.ts +28 -1
  181. package/dist/server/app-page-execution.js +114 -5
  182. package/dist/server/app-page-head.d.ts +95 -3
  183. package/dist/server/app-page-head.js +307 -152
  184. package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
  185. package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
  186. package/dist/server/app-page-method.d.ts +2 -1
  187. package/dist/server/app-page-probe.d.ts +2 -1
  188. package/dist/server/app-page-render-identity.d.ts +2 -1
  189. package/dist/server/app-page-render.d.ts +7 -1
  190. package/dist/server/app-page-render.js +35 -10
  191. package/dist/server/app-page-request.d.ts +14 -1
  192. package/dist/server/app-page-request.js +1 -1
  193. package/dist/server/app-page-route-wiring.d.ts +52 -2
  194. package/dist/server/app-page-route-wiring.js +197 -47
  195. package/dist/server/app-page-rsc-render-status.d.ts +2 -1
  196. package/dist/server/app-page-search-params-observation.d.ts +7 -2
  197. package/dist/server/app-page-search-params-observation.js +8 -1
  198. package/dist/server/app-page-segment-plan.d.ts +2 -1
  199. package/dist/server/app-page-stream.d.ts +31 -1
  200. package/dist/server/app-page-stream.js +23 -4
  201. package/dist/server/app-pages-bridge.d.ts +2 -1
  202. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  203. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  204. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  205. package/dist/server/app-prerender-static-params.d.ts +2 -1
  206. package/dist/server/app-render-dependency.d.ts +11 -1
  207. package/dist/server/app-render-dependency.js +26 -7
  208. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  209. package/dist/server/app-response-stage-entry.d.ts +2 -1
  210. package/dist/server/app-route-handler-cache.d.ts +2 -1
  211. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  212. package/dist/server/app-route-handler-dispatch.js +1 -1
  213. package/dist/server/app-route-handler-execution.d.ts +2 -1
  214. package/dist/server/app-route-handler-response.d.ts +2 -1
  215. package/dist/server/app-route-handler-runtime.d.ts +2 -1
  216. package/dist/server/app-route-module-loader.d.ts +18 -1
  217. package/dist/server/app-route-module-loader.js +8 -0
  218. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  219. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  220. package/dist/server/app-rsc-errors.d.ts +2 -1
  221. package/dist/server/app-rsc-handler.d.ts +2 -1
  222. package/dist/server/app-rsc-handler.js +6 -10
  223. package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
  224. package/dist/server/app-rsc-route-matching.d.ts +38 -1
  225. package/dist/server/app-rsc-route-matching.js +24 -0
  226. package/dist/server/app-segment-config.d.ts +2 -1
  227. package/dist/server/app-segment-config.js +1 -14
  228. package/dist/server/app-server-action-execution.d.ts +2 -1
  229. package/dist/server/app-server-action-execution.js +3 -3
  230. package/dist/server/app-ssr-entry.d.ts +6 -0
  231. package/dist/server/app-ssr-entry.js +91 -44
  232. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  233. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  234. package/dist/server/app-ssr-stream.d.ts +22 -10
  235. package/dist/server/app-ssr-stream.js +299 -67
  236. package/dist/server/app-static-generation.d.ts +2 -1
  237. package/dist/server/app-streamed-client-references.d.ts +39 -0
  238. package/dist/server/app-streamed-client-references.js +156 -0
  239. package/dist/server/app-visited-response-cache.d.ts +2 -1
  240. package/dist/server/app-worker-stages.d.ts +2 -1
  241. package/dist/server/artifact-compatibility.d.ts +2 -1
  242. package/dist/server/bfcache-identity.d.ts +2 -1
  243. package/dist/server/cache-headers.d.ts +2 -1
  244. package/dist/server/cacheability-request.d.ts +2 -1
  245. package/dist/server/client-reuse-manifest.d.ts +2 -1
  246. package/dist/server/config-headers.d.ts +2 -1
  247. package/dist/server/csp.d.ts +2 -1
  248. package/dist/server/default-global-not-found-module.d.ts +2 -1
  249. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  250. package/dist/server/default-http-access-fallback-modules.js +31 -0
  251. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  252. package/dist/server/defer-until-stream-consumed.js +154 -21
  253. package/dist/server/dev-lockfile.d.ts +32 -2
  254. package/dist/server/dev-lockfile.js +46 -2
  255. package/dist/server/dev-module-runner.d.ts +2 -1
  256. package/dist/server/dev-server.js +10 -3
  257. package/dist/server/fetch-handler.js +1 -2
  258. package/dist/server/file-based-metadata.d.ts +2 -1
  259. package/dist/server/framework-tracer.d.ts +2 -1
  260. package/dist/server/html.d.ts +1 -0
  261. package/dist/server/html.js +19 -1
  262. package/dist/server/http-conditional.d.ts +2 -1
  263. package/dist/server/http-error-responses.d.ts +2 -1
  264. package/dist/server/implicit-tags.d.ts +2 -1
  265. package/dist/server/metadata-route-build-data.d.ts +2 -1
  266. package/dist/server/metadata-route-build-data.js +1 -1
  267. package/dist/server/metadata-route-response.d.ts +2 -1
  268. package/dist/server/metadata-route-response.js +1 -1
  269. package/dist/server/metadata-routes.d.ts +2 -1
  270. package/dist/server/middleware-runtime.d.ts +2 -1
  271. package/dist/server/navigation-trace.d.ts +2 -1
  272. package/dist/server/next-error-digest.d.ts +2 -1
  273. package/dist/server/nitro-public-files-plugin.d.ts +2 -1
  274. package/dist/server/nitro-public-files.d.ts +2 -1
  275. package/dist/server/opentelemetry-api.d.ts +2 -1
  276. package/dist/server/operation-token.d.ts +2 -1
  277. package/dist/server/pages-api-route.d.ts +2 -1
  278. package/dist/server/pages-asset-tags.d.ts +2 -1
  279. package/dist/server/pages-body-parser-config.d.ts +2 -1
  280. package/dist/server/pages-client-assets.d.ts +4 -0
  281. package/dist/server/pages-data-route.d.ts +2 -1
  282. package/dist/server/pages-document-asset-props.d.ts +2 -1
  283. package/dist/server/pages-document-initial-props.d.ts +2 -1
  284. package/dist/server/pages-execution-tracing.d.ts +2 -1
  285. package/dist/server/pages-execution-tracing.js +1 -1
  286. package/dist/server/pages-get-initial-props.d.ts +2 -1
  287. package/dist/server/pages-page-data.d.ts +7 -1
  288. package/dist/server/pages-page-data.js +35 -12
  289. package/dist/server/pages-page-handler.d.ts +3 -2
  290. package/dist/server/pages-page-handler.js +16 -7
  291. package/dist/server/pages-page-method.d.ts +2 -1
  292. package/dist/server/pages-page-response.d.ts +2 -1
  293. package/dist/server/pages-preview.d.ts +2 -1
  294. package/dist/server/pages-readiness.d.ts +2 -1
  295. package/dist/server/pages-request-pipeline.d.ts +2 -1
  296. package/dist/server/pages-request-pipeline.js +4 -5
  297. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  298. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  299. package/dist/server/pages-route-data-kind.d.ts +2 -1
  300. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  301. package/dist/server/prerender-route-params.d.ts +2 -1
  302. package/dist/server/prod-server.js +9 -3
  303. package/dist/server/request-log.d.ts +2 -1
  304. package/dist/server/request-tracing.d.ts +2 -1
  305. package/dist/server/request-tracing.js +1 -1
  306. package/dist/server/response-start-tracing.js +7 -29
  307. package/dist/server/rsc-render-stream.d.ts +4 -0
  308. package/dist/server/rsc-render-stream.js +25 -0
  309. package/dist/server/seed-cache.d.ts +2 -1
  310. package/dist/server/seed-cache.js +1 -1
  311. package/dist/server/static-file-cache.d.ts +2 -1
  312. package/dist/server/static-file-cache.js +1 -0
  313. package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
  314. package/dist/server/worker-revalidation-context.d.ts +2 -1
  315. package/dist/server/worker-stages.d.ts +2 -1
  316. package/dist/shims/app.d.ts +2 -1
  317. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  318. package/dist/shims/cache-handler.d.ts +8 -3
  319. package/dist/shims/cache-handler.js +29 -9
  320. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  321. package/dist/shims/caught-not-found-boundaries.js +48 -0
  322. package/dist/shims/cdn-purge-routes.d.ts +2 -1
  323. package/dist/shims/client-locale.js +2 -1
  324. package/dist/shims/client-page-root.d.ts +2 -1
  325. package/dist/shims/config.d.ts +2 -1
  326. package/dist/shims/default-forbidden.d.ts +4 -0
  327. package/dist/shims/default-forbidden.js +18 -0
  328. package/dist/shims/default-not-found.d.ts +0 -5
  329. package/dist/shims/default-not-found.js +5 -41
  330. package/dist/shims/default-unauthorized.d.ts +4 -0
  331. package/dist/shims/default-unauthorized.js +18 -0
  332. package/dist/shims/error-boundary.d.ts +39 -3
  333. package/dist/shims/error-boundary.js +31 -16
  334. package/dist/shims/font-google.js +1 -2
  335. package/dist/shims/font-utils.d.ts +3 -2
  336. package/dist/shims/font-utils.js +5 -3
  337. package/dist/shims/form.js +1 -1
  338. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  339. package/dist/shims/http-access-error-fallback.js +47 -0
  340. package/dist/shims/image.d.ts +1 -22
  341. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  342. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  343. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  344. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  345. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  346. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  347. package/dist/shims/internal/client-reference-loader.js +91 -0
  348. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  349. package/dist/shims/internal/cookies.js +1 -2
  350. package/dist/shims/internal/headers-state.d.ts +2 -0
  351. package/dist/shims/internal/headers-state.js +6 -1
  352. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
  353. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  354. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  355. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  356. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  357. package/dist/shims/link.js +195 -52
  358. package/dist/shims/metadata.d.ts +32 -11
  359. package/dist/shims/metadata.js +88 -26
  360. package/dist/shims/navigation-errors.d.ts +2 -1
  361. package/dist/shims/navigation.d.ts +22 -2
  362. package/dist/shims/navigation.js +74 -20
  363. package/dist/shims/pages-router-runtime.d.ts +2 -1
  364. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  365. package/dist/shims/router.js +14 -3
  366. package/dist/shims/unified-request-context.js +3 -3
  367. package/dist/typegen.d.ts +2 -1
  368. package/dist/utils/client-build-manifest.d.ts +4 -1
  369. package/dist/utils/client-build-manifest.js +9 -2
  370. package/dist/utils/client-entry-manifest.d.ts +13 -0
  371. package/dist/utils/client-entry-manifest.js +20 -1
  372. package/dist/utils/client-reference-chunks.d.ts +45 -0
  373. package/dist/utils/client-reference-chunks.js +30 -0
  374. package/dist/utils/client-runtime-metadata.d.ts +9 -1
  375. package/dist/utils/client-runtime-metadata.js +40 -9
  376. package/dist/utils/compare.d.ts +9 -0
  377. package/dist/utils/compare.js +15 -1
  378. package/dist/utils/lazy-chunks.d.ts +14 -0
  379. package/dist/utils/lazy-chunks.js +27 -1
  380. package/dist/utils/middleware-request-headers.d.ts +2 -1
  381. package/dist/utils/project.d.ts +2 -1
  382. package/dist/utils/project.js +9 -1
  383. package/dist/utils/query.d.ts +2 -1
  384. package/dist/utils/sorted-array.d.ts +2 -1
  385. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  386. package/package.json +5 -5
  387. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  388. package/dist/server/default-not-found-module.d.ts +0 -19
  389. package/dist/server/default-not-found-module.js +0 -18
  390. package/dist/server/rsc-stream-hints.d.ts +0 -21
  391. package/dist/server/rsc-stream-hints.js +0 -227
@@ -11,14 +11,14 @@ import { formatUrlObject, formatUrlObjectWithValidation } from "./internal/forma
11
11
  import { normalizeRouterHref, resolvePagesRouterHref } from "./internal/normalize-router-href.js";
12
12
  import { getCurrentRoutePathnameForWarning } from "./internal/route-pattern-for-warning.js";
13
13
  import { getCurrentBrowserLocale } from "./client-locale.js";
14
- import { getNavigationRuntime, hasAppNavigationRuntime, loadNavigationRuntimeRouteManifest, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
14
+ import { NAVIGATION_RUNTIME_KEY, getNavigationRuntime, isNavigationRuntimeFunctions, loadNavigationRuntimeRouteManifest, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
15
15
  import { navigatePagesRouterLinkWithFallback, resolvePagesRouterQueryOnlyHref } from "../client/pages-router-link-navigation.js";
16
- import { scheduleAppPrefetchFetch } from "./internal/app-prefetch-fetch-queue.js";
16
+ import { cancelQueuedAppPrefetchFetch, getAppPrefetchFetchClaimSequence, isAppPrefetchFetchClaimed, scheduleAppPrefetchFetch } from "./internal/app-prefetch-fetch-queue.js";
17
17
  import { getI18nContext } from "./i18n-context.js";
18
18
  import { canLinkIntentPrefetch, canLinkPrefetch, getLinkPrefetchHref } from "./link-prefetch.js";
19
19
  import { canAutoPrefetchFullAppRoute, resolveAutoAppRoutePrefetch, resolveFullAppRoutePrefetch } from "./internal/app-route-prefetch-policy.js";
20
20
  import { clearLinkForCurrentNavigation, notifyLinkNavigationStart, setLinkForCurrentNavigation } from "./internal/link-status-registry.js";
21
- import React, { createContext, forwardRef, useCallback, useContext, useEffect, useRef, useState } from "react";
21
+ import React, { createContext, forwardRef, useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from "react";
22
22
  import { jsx } from "react/jsx-runtime";
23
23
  //#region src/shims/link.tsx
24
24
  /**
@@ -29,6 +29,7 @@ import { jsx } from "react/jsx-runtime";
29
29
  * page swap via the router's navigation system.
30
30
  */
31
31
  const HAS_PAGES_ROUTER = process.env.__VINEXT_HAS_PAGES_ROUTER !== "false";
32
+ const isServer = typeof window === "undefined";
32
33
  const HAS_CLIENT_REWRITES = process.env.__VINEXT_HAS_CLIENT_REWRITES !== "false";
33
34
  let loadedNavigationModule = null;
34
35
  let navigationModulePromise = null;
@@ -46,6 +47,20 @@ function loadHybridClientRouteOwnerModule() {
46
47
  return module;
47
48
  });
48
49
  }
50
+ let appRscCacheBustingModulePromise = null;
51
+ let appPrefetchModulesPromise = null;
52
+ function loadAppRscCacheBustingModule() {
53
+ return appRscCacheBustingModulePromise ??= import("../server/app-rsc-cache-busting.js");
54
+ }
55
+ function loadAppPrefetchModules() {
56
+ return appPrefetchModulesPromise ??= Promise.all([
57
+ import("../server/app-elements.js"),
58
+ loadAppRscCacheBustingModule(),
59
+ import("./internal/app-prefetch-rsc-request.js"),
60
+ import("../server/app-rsc-render-mode.js"),
61
+ import("../server/headers.js")
62
+ ]);
63
+ }
49
64
  const LinkStatusContext = createContext({ pending: false });
50
65
  /**
51
66
  * useLinkStatus returns the pending state of the enclosing <Link>.
@@ -70,11 +85,11 @@ function resolveHref(href, validate = false) {
70
85
  if (typeof href === "string") return href;
71
86
  return validate ? formatUrlObjectWithValidation(href) : formatUrlObject(href);
72
87
  }
73
- function resolvePagesLinkValue(value, pagesRouter, routePathnameForWarning) {
88
+ function resolvePagesLinkValue(value, pagesRouter) {
74
89
  const formatted = resolveHref(value, pagesRouter !== null);
75
90
  if (pagesRouter === null) return formatted;
76
91
  if (typeof pagesRouter.pathname === "string" && typeof pagesRouter.asPath === "string" && !formatted.startsWith("?") && !formatted.startsWith("#")) return resolvePagesRouterHref(formatted, pagesRouter, __basePath);
77
- return normalizeRouterHref(formatted, routePathnameForWarning);
92
+ return normalizeRouterHref(formatted, getCurrentRoutePathnameForWarning());
78
93
  }
79
94
  function resolvePagesQueryOnlyHref(href) {
80
95
  if (!HAS_PAGES_ROUTER) return href;
@@ -101,8 +116,35 @@ function resolveLinkPrefetchMode(prefetchProp, isDangerous) {
101
116
  if (prefetchProp === true) return "full";
102
117
  return "auto";
103
118
  }
119
+ let validatedNavigationRuntime = null;
120
+ let validatedNavigationRuntimeBootstrap = null;
121
+ let validatedNavigationRuntimeFunctions = null;
122
+ /**
123
+ * `hasAppNavigationRuntime()` for Link, which asks on every render and every
124
+ * prefetch. Full validation walks the whole navigation runtime, including every
125
+ * inline RSC chunk still held by the bootstrap, so skip it while window still
126
+ * holds the runtime that last passed it with the same bootstrap and function
127
+ * table objects. Registering either replaces that object, and a replaced
128
+ * runtime, bootstrap or table falls through to full validation. A table edited
129
+ * in place keeps its identity, so the function table is still checked on every
130
+ * call (it is cheap); chunks streamed into the held bootstrap are not
131
+ * revalidated.
132
+ */
133
+ function hasLinkAppNavigationRuntime() {
134
+ if (typeof window === "undefined") return false;
135
+ const runtime = validatedNavigationRuntime;
136
+ if (runtime !== null && Reflect.get(window, NAVIGATION_RUNTIME_KEY) === runtime && runtime.bootstrap === validatedNavigationRuntimeBootstrap && runtime.functions === validatedNavigationRuntimeFunctions) {
137
+ const functions = runtime.functions;
138
+ return isNavigationRuntimeFunctions(functions) && typeof functions.navigate === "function";
139
+ }
140
+ const validated = getNavigationRuntime();
141
+ validatedNavigationRuntime = validated;
142
+ validatedNavigationRuntimeBootstrap = validated?.bootstrap ?? null;
143
+ validatedNavigationRuntimeFunctions = validated?.functions ?? null;
144
+ return typeof validated?.functions.navigate === "function";
145
+ }
104
146
  function getLinkPrefetchRouterMode() {
105
- return hasAppNavigationRuntime() ? "app" : "pages";
147
+ return hasLinkAppNavigationRuntime() ? "app" : "pages";
106
148
  }
107
149
  /**
108
150
  * Prefetch a URL for faster navigation.
@@ -115,8 +157,11 @@ function getLinkPrefetchRouterMode() {
115
157
  * App Router and high-priority prefetches start immediately. Low-priority
116
158
  * Pages Router fallback prefetches use `requestIdleCallback` (or `setTimeout`
117
159
  * fallback) to avoid blocking the main thread during initial page load.
160
+ *
161
+ * `owner` is the visible Link behind a viewport prefetch; see
162
+ * `OwnedLinkPrefetch`.
118
163
  */
119
- function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
164
+ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale, owner) {
120
165
  if (typeof window === "undefined") return;
121
166
  const navigationEpoch = linkPrefetchNavigationEpoch;
122
167
  const prefetchHref = getLinkPrefetchHref({
@@ -137,21 +182,17 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
137
182
  if (mode === "auto" && priority === "low" && target.origin === window.location.origin && target.pathname === window.location.pathname && target.search !== window.location.search && target.hash !== "") return;
138
183
  const runPrefetch = () => {
139
184
  (async () => {
140
- if (hasAppNavigationRuntime()) {
185
+ if (hasLinkAppNavigationRuntime()) {
141
186
  if (isBotUserAgent(window.navigator?.userAgent ?? "")) return;
142
- const [navigation, { AppElementsWire }, rscCacheBusting, { resolveAppPrefetchRscRequest }, { APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL, APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL }, headersModule, hybridRouteOwner, routeManifestLoaded] = await Promise.all([
187
+ const [navigation, [{ AppElementsWire }, rscCacheBusting, { resolveAppPrefetchRscRequest }, { APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL, APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL }, headersModule], hybridRouteOwner, routeManifestLoaded] = await Promise.all([
143
188
  loadNavigationModule(),
144
- import("../server/app-elements.js"),
145
- import("../server/app-rsc-cache-busting.js"),
146
- import("./internal/app-prefetch-rsc-request.js"),
147
- import("../server/app-rsc-render-mode.js"),
148
- import("../server/headers.js"),
189
+ loadAppPrefetchModules(),
149
190
  HAS_PAGES_ROUTER || HAS_CLIENT_REWRITES ? loadHybridClientRouteOwnerModule() : null,
150
191
  loadNavigationRuntimeRouteManifest()
151
192
  ]);
152
193
  if (routeManifestLoaded === false) return;
153
194
  if (navigationEpoch !== linkPrefetchNavigationEpoch) return;
154
- const { getPrefetchInterceptionContext, getPrefetchCache, getPrefetchedUrls, getMountedSlotsHeader, createAppPrefetchRequestHeaders, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, hasFreshLearningOnlyPrefetchCacheEntry, hasSearchAgnosticPrefetchShellForRoute, hasPrefetchCacheEntryForNavigation, prefetchRscResponse, prepareNavigationPrefetchSnapshot, DYNAMIC_NAVIGATION_CACHE_TTL, PREFETCH_CACHE_TTL } = navigation;
195
+ const { getPrefetchInterceptionContext, getPrefetchCache, getPrefetchedUrls, getMountedSlotsHeader, createAppPrefetchRequestHeaders, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, hasFreshLearningOnlyPrefetchCacheEntry, hasSearchAgnosticPrefetchShellForRoute, hasPrefetchCacheEntryForNavigation, prefetchRscResponse, prepareNavigationPrefetchSnapshot, promotePrefetchCacheEntryForNavigation, DYNAMIC_NAVIGATION_CACHE_TTL, PREFETCH_CACHE_TTL } = navigation;
155
196
  const { createRscRequestUrl } = rscCacheBusting;
156
197
  const { NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, VINEXT_MOUNTED_SLOTS_HEADER } = headersModule;
157
198
  const hybridOwner = HAS_PAGES_ROUTER ? hybridRouteOwner.resolveHybridClientRouteOwner(prefetchHref, __basePath) : null;
@@ -160,16 +201,16 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
160
201
  const prefetchPolicyHref = rewrittenPrefetchHref ?? prefetchHref;
161
202
  const interceptionContext = getPrefetchInterceptionContext(fullHref);
162
203
  const mountedSlotsHeader = getMountedSlotsHeader();
163
- const autoPrefetch = mode === "auto" ? resolveAutoAppRoutePrefetch(prefetchPolicyHref) : resolveFullAppRoutePrefetch();
204
+ const autoPrefetch = mode === "auto" ? resolveAutoAppRoutePrefetch(prefetchPolicyHref, interceptionContext) : resolveFullAppRoutePrefetch();
164
205
  if (!autoPrefetch.shouldPrefetch) return;
165
206
  const isOptimisticRouteShellPrefetch = !autoPrefetch.cacheForNavigation;
166
207
  const hasSearchParams = new URL(fullHref, window.location.href).search !== "";
167
208
  const isAutomaticSearchParamShell = mode === "auto" && isOptimisticRouteShellPrefetch && hasSearchParams;
168
- const hasSearchAgnosticShell = isAutomaticSearchParamShell && hasSearchAgnosticPrefetchShellForRoute(await createRscRequestUrl(fullHref, new Headers()), interceptionContext, mountedSlotsHeader);
209
+ const hasSearchAgnosticShell = isAutomaticSearchParamShell && (autoPrefetch.rendersDynamically === true || hasSearchAgnosticPrefetchShellForRoute(await createRscRequestUrl(fullHref, new Headers()), interceptionContext, mountedSlotsHeader));
169
210
  const headers = createAppPrefetchRequestHeaders({
170
211
  interceptionContext,
171
212
  fetchPriority: priority,
172
- prefetchKind: mode === "full" ? "full" : "auto",
213
+ prefetchKind: mode === "full" || mode === "full-after-shell" ? "full" : "auto",
173
214
  renderMode: isOptimisticRouteShellPrefetch ? hasSearchAgnosticShell ? APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL : isAutomaticSearchParamShell ? APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL : APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL : void 0
174
215
  });
175
216
  if (mountedSlotsHeader) headers.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
@@ -190,9 +231,13 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
190
231
  if (navigationEpoch !== linkPrefetchNavigationEpoch) return;
191
232
  const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
192
233
  const prefetched = getPrefetchedUrls();
193
- if (autoPrefetch.cacheForNavigation) discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext);
194
- if (!autoPrefetch.cacheForNavigation && hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) return;
195
- const fetchFullRscPayload = () => scheduleAppPrefetchFetch((signal) => fetch(rscUrl, {
234
+ if (autoPrefetch.dynamicStaleTime !== "full-prefetch" && hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) {
235
+ joinOwnedLinkPrefetch(getPrefetchCache().get(cacheKey)?.fetchPromise, owner);
236
+ return;
237
+ }
238
+ if (autoPrefetch.cacheForNavigation) discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext, mountedSlotsHeader);
239
+ const owned = createOwnedLinkPrefetch(owner);
240
+ const fetchFullRscPayload = () => scheduleOwnedLinkPrefetch(owned, (signal) => fetch(rscUrl, {
196
241
  headers,
197
242
  credentials: "include",
198
243
  priority,
@@ -208,25 +253,30 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
208
253
  shellHeaders.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
209
254
  shellHeaders.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
210
255
  if (mountedSlotsHeader) shellHeaders.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
256
+ const ownerLeaveCount = owner?.leaveCount;
211
257
  const shellRscUrl = await createRscRequestUrl(fullHref, shellHeaders);
258
+ if (owner && owner.leaveCount !== ownerLeaveCount) return;
212
259
  const shellCacheKey = AppElementsWire.encodeCacheKey(shellRscUrl, interceptionContext);
213
260
  const shellCache = getPrefetchCache();
214
261
  let shellEntry = shellCache.get(shellCacheKey);
215
262
  if (shellEntry === void 0) {
216
263
  getPrefetchedUrls().add(shellCacheKey);
217
- prefetchRscResponse(shellRscUrl, scheduleAppPrefetchFetch((signal) => fetch(shellRscUrl, {
264
+ const shellOwned = createOwnedLinkPrefetch(owner);
265
+ const shellFetchPromise = scheduleOwnedLinkPrefetch(shellOwned, (signal) => fetch(shellRscUrl, {
218
266
  headers: shellHeaders,
219
267
  credentials: "include",
220
268
  priority,
221
269
  signal,
222
270
  purpose: "prefetch"
223
- }), priority), interceptionContext, mountedSlotsHeader, void 0, {
271
+ }), priority);
272
+ trackOwnedLinkPrefetch(shellOwned, shellFetchPromise);
273
+ prefetchRscResponse(shellRscUrl, shellFetchPromise, interceptionContext, mountedSlotsHeader, void 0, {
224
274
  cacheForNavigation: false,
225
275
  optimisticRouteShell: true,
226
276
  prefetchKind: "loading-shell"
227
277
  });
228
278
  shellEntry = shellCache.get(shellCacheKey);
229
- }
279
+ } else joinOwnedLinkPrefetch(shellEntry.fetchPromise, owner);
230
280
  await shellEntry?.pending?.catch(() => {});
231
281
  };
232
282
  const fetchAliasCacheHitProbe = async () => {
@@ -238,7 +288,9 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
238
288
  probeHeaders.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
239
289
  probeHeaders.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
240
290
  if (mountedSlotsHeader) probeHeaders.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
291
+ const ownerLeaveCount = owner?.leaveCount;
241
292
  const probeRscUrl = await createRscRequestUrl(fullHref, probeHeaders);
293
+ if (owner && owner.leaveCount !== ownerLeaveCount) throw new DOMException("Prefetch is no longer wanted", "AbortError");
242
294
  return fetch(probeRscUrl, {
243
295
  method: "HEAD",
244
296
  headers: probeHeaders,
@@ -247,8 +299,15 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
247
299
  purpose: "prefetch"
248
300
  });
249
301
  };
250
- const hasExactNavigationCacheEntry = autoPrefetch.cacheForNavigation && hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader);
251
- if (hasExactNavigationCacheEntry || autoPrefetch.cacheForNavigation && hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, { additionalRscUrls })) {
302
+ const onReuse = (entry, matchedCacheKey) => {
303
+ joinOwnedLinkPrefetch(entry.fetchPromise, owner);
304
+ if (autoPrefetch.dynamicStaleTime === "full-prefetch") promotePrefetchCacheEntryForNavigation(matchedCacheKey, entry);
305
+ };
306
+ const hasExactNavigationCacheEntry = autoPrefetch.cacheForNavigation && hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, { onReuse });
307
+ if (hasExactNavigationCacheEntry || autoPrefetch.cacheForNavigation && hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, {
308
+ additionalRscUrls,
309
+ onReuse
310
+ })) {
252
311
  if (!hasExactNavigationCacheEntry && !prefetched.has(cacheKey) && additionalRscUrls.length > 0 && autoPrefetch.prefetchShellFirst && mountedSlotsHeader === null) {
253
312
  prefetched.add(cacheKey);
254
313
  fetchAliasCacheHitProbe().then((response) => response.arrayBuffer()).catch(() => {});
@@ -266,7 +325,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
266
325
  }
267
326
  return fetchRouteTreeGatedPrefetch({
268
327
  fetchFullRscPayload,
269
- fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) => scheduleAppPrefetchFetch((signal) => fetch(routeTreeRscUrl, {
328
+ fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) => scheduleOwnedLinkPrefetch(owned, (signal) => fetch(routeTreeRscUrl, {
270
329
  headers: routeTreeHeaders,
271
330
  credentials: "include",
272
331
  priority,
@@ -279,6 +338,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
279
338
  mountedSlotsHeader
280
339
  });
281
340
  })() : fetchFullRscPayload();
341
+ trackOwnedLinkPrefetch(owned, fetchPromise);
282
342
  if (!__prefetchInlining && mode === "full" && autoPrefetch.cacheForNavigation && autoPrefetch.prefetchShellFirst && mountedSlotsHeader === null && !gateViaExplicitSearchShell) fetchLoadingShellForReuse();
283
343
  prefetchRscResponse(rscUrl, fetchPromise, interceptionContext, mountedSlotsHeader, void 0, {
284
344
  cacheForNavigation: autoPrefetch.cacheForNavigation,
@@ -310,7 +370,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
310
370
  console.error("[vinext] RSC prefetch setup error:", error);
311
371
  });
312
372
  };
313
- if (priority === "high" || hasAppNavigationRuntime()) {
373
+ if (priority === "high" || hasLinkAppNavigationRuntime()) {
314
374
  runPrefetch();
315
375
  return;
316
376
  }
@@ -318,18 +378,24 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
318
378
  }
319
379
  async function promotePrefetchEntriesForNavigation(href) {
320
380
  if (typeof window === "undefined") return;
321
- if (!hasAppNavigationRuntime()) return;
322
- const [{ getPrefetchCache }, { parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix }] = await Promise.all([loadNavigationModule(), import("../server/app-rsc-cache-busting.js")]);
381
+ if (!hasLinkAppNavigationRuntime()) return;
382
+ const [{ getMountedSlotsHeader, getPrefetchCache, getPrefetchInterceptionContext, promotePrefetchCacheEntryForNavigation }, { parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix }] = await Promise.all([loadNavigationModule(), loadAppRscCacheBustingModule()]);
323
383
  let target;
384
+ const fullHref = toCanonicalBrowserNavigationHref(href, window.location.href, __basePath, __trailingSlash);
324
385
  try {
325
- target = new URL(toCanonicalBrowserNavigationHref(href, window.location.href, __basePath, __trailingSlash), window.location.href);
386
+ target = new URL(fullHref, window.location.href);
326
387
  } catch {
327
388
  return;
328
389
  }
390
+ const interceptionContext = getPrefetchInterceptionContext(fullHref);
391
+ const mountedSlotsHeader = getMountedSlotsHeader();
329
392
  for (const [cacheKey, entry] of getPrefetchCache()) {
330
393
  if (entry.optimisticRouteShell === true) continue;
331
394
  if (entry.prefetchKind === "route-tree") continue;
332
- const [rscUrl] = cacheKey.split("\0", 1);
395
+ if ((entry.mountedSlotsHeader ?? null) !== mountedSlotsHeader) continue;
396
+ const separatorIndex = cacheKey.indexOf("\0");
397
+ const rscUrl = separatorIndex === -1 ? cacheKey : cacheKey.slice(0, separatorIndex);
398
+ if ((separatorIndex === -1 ? null : cacheKey.slice(separatorIndex + 1)) !== interceptionContext) continue;
333
399
  let cached;
334
400
  try {
335
401
  cached = parseRscRequestPath(rscUrl);
@@ -337,7 +403,7 @@ async function promotePrefetchEntriesForNavigation(href) {
337
403
  continue;
338
404
  }
339
405
  stripRscCacheBustingSearchParam(cached);
340
- if (stripRscSuffix(cached.pathname) === target.pathname && cached.search === target.search) entry.cacheForNavigation = true;
406
+ if (stripRscSuffix(cached.pathname) === target.pathname && cached.search === target.search) promotePrefetchCacheEntryForNavigation(cacheKey, entry);
341
407
  }
342
408
  }
343
409
  /**
@@ -349,6 +415,66 @@ const observedLinkPrefetches = /* @__PURE__ */ new WeakMap();
349
415
  const visibleLinkPrefetches = /* @__PURE__ */ new Set();
350
416
  const visibleAppPrefetchQueue = [];
351
417
  let visibleAppPrefetchDrainScheduled = false;
418
+ const ownedLinkPrefetches = /* @__PURE__ */ new WeakMap();
419
+ function createOwnedLinkPrefetch(owner) {
420
+ if (owner === void 0) return void 0;
421
+ return {
422
+ owners: /* @__PURE__ */ new Set([owner]),
423
+ requests: []
424
+ };
425
+ }
426
+ function hasVisibleOwner(owned) {
427
+ for (const owner of owned.owners) if (owner.isVisible) return true;
428
+ return false;
429
+ }
430
+ function isOwnedLinkPrefetchWanted(owned) {
431
+ if (owned.droppedAt !== void 0) return isAppPrefetchFetchClaimed(owned.claimable, owned.droppedAt);
432
+ return isAppPrefetchFetchClaimed(owned.claimable) || hasVisibleOwner(owned);
433
+ }
434
+ function scheduleOwnedLinkPrefetch(owned, fetcher, priority) {
435
+ if (owned && !isOwnedLinkPrefetchWanted(owned)) return Promise.reject(new DOMException("Prefetch is no longer wanted", "AbortError"));
436
+ const request = scheduleAppPrefetchFetch(fetcher, priority, owned && (() => isOwnedLinkPrefetchWanted(owned)));
437
+ owned?.requests.push(request);
438
+ return request;
439
+ }
440
+ /**
441
+ * Registers the promise cached for `owned`, which reusing Links join. Owners
442
+ * are registered here, not in `createOwnedLinkPrefetch`, since a cache hit
443
+ * returns before sending anything.
444
+ */
445
+ function trackOwnedLinkPrefetch(owned, fetchPromise) {
446
+ if (owned === void 0) return;
447
+ for (const owner of owned.owners) owner.ownedPrefetches.add(owned);
448
+ owned.claimable = fetchPromise;
449
+ ownedLinkPrefetches.set(fetchPromise, owned);
450
+ const settle = (failed) => {
451
+ ownedLinkPrefetches.delete(fetchPromise);
452
+ for (const owner of owned.owners) {
453
+ owner.ownedPrefetches.delete(owned);
454
+ if (failed && owned.droppedAt !== void 0 && owner.isVisible) scheduleVisibleAppPrefetch(owner);
455
+ }
456
+ owned.owners.clear();
457
+ };
458
+ fetchPromise.then(() => settle(false), () => settle(true));
459
+ }
460
+ function joinOwnedLinkPrefetch(fetchPromise, owner) {
461
+ const owned = fetchPromise && ownedLinkPrefetches.get(fetchPromise);
462
+ if (!owned || owner === void 0) return;
463
+ owned.owners.add(owner);
464
+ owner.ownedPrefetches.add(owned);
465
+ }
466
+ /** Called when a Link leaves the viewport or unmounts. */
467
+ function releaseOwnedLinkPrefetches(instance) {
468
+ instance.leaveCount += 1;
469
+ for (const owned of instance.ownedPrefetches) {
470
+ owned.owners.delete(instance);
471
+ if (owned.droppedAt !== void 0 || hasVisibleOwner(owned)) continue;
472
+ owned.droppedAt = getAppPrefetchFetchClaimSequence();
473
+ if (isAppPrefetchFetchClaimed(owned.claimable)) continue;
474
+ for (const request of owned.requests) cancelQueuedAppPrefetchFetch(request);
475
+ }
476
+ instance.ownedPrefetches.clear();
477
+ }
352
478
  function drainVisibleAppPrefetchQueue() {
353
479
  visibleAppPrefetchDrainScheduled = false;
354
480
  while (true) {
@@ -356,7 +482,7 @@ function drainVisibleAppPrefetchQueue() {
356
482
  if (!instance) return;
357
483
  instance.queuedViewportPrefetch = false;
358
484
  if (!instance.isVisible || instance.routerMode !== "app") continue;
359
- prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref);
485
+ prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref, void 0, instance);
360
486
  }
361
487
  }
362
488
  function scheduleVisibleAppPrefetch(instance) {
@@ -375,11 +501,17 @@ function setVisibleLinkPrefetch(instance, isVisible) {
375
501
  if (instance.routerMode === "app") scheduleVisibleAppPrefetch(instance);
376
502
  else prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref, instance.locale);
377
503
  instance.viewportPrefetched = true;
378
- } else visibleLinkPrefetches.delete(instance);
504
+ } else {
505
+ visibleLinkPrefetches.delete(instance);
506
+ releaseOwnedLinkPrefetches(instance);
507
+ }
379
508
  }
509
+ let visibleLinkPingRuntime = null;
380
510
  function registerVisibleLinkPing() {
381
511
  if (typeof window === "undefined") return;
382
- registerNavigationRuntimeFunctions({ pingVisibleLinks: pingVisibleLinkPrefetches });
512
+ const functions = visibleLinkPingRuntime?.functions;
513
+ if (visibleLinkPingRuntime !== null && Reflect.get(window, NAVIGATION_RUNTIME_KEY) === visibleLinkPingRuntime && typeof functions === "object" && functions !== null && Reflect.get(functions, "pingVisibleLinks") === pingVisibleLinkPrefetches) return;
514
+ visibleLinkPingRuntime = registerNavigationRuntimeFunctions({ pingVisibleLinks: pingVisibleLinkPrefetches });
383
515
  }
384
516
  function pingVisibleLinkPrefetches() {
385
517
  for (const instance of visibleLinkPrefetches) if (instance.isVisible && instance.routerMode === "app") scheduleVisibleAppPrefetch(instance);
@@ -401,11 +533,14 @@ function getDefaultLocale() {
401
533
  return getI18nContext()?.defaultLocale;
402
534
  }
403
535
  function getCurrentLocale() {
404
- if (typeof window !== "undefined") return getCurrentBrowserLocale({
405
- basePath: __basePath,
406
- domainLocales: getDomainLocales(),
407
- hostname: getCurrentHostname()
408
- });
536
+ if (typeof window !== "undefined") {
537
+ const domainLocales = getDomainLocales();
538
+ return getCurrentBrowserLocale({
539
+ basePath: __basePath,
540
+ domainLocales,
541
+ hostname: domainLocales?.length ? getCurrentHostname() : void 0
542
+ });
543
+ }
409
544
  return getI18nContext()?.locale;
410
545
  }
411
546
  function getDomainLocales() {
@@ -459,19 +594,17 @@ function resolveConcreteRouteHref(href, as) {
459
594
  if (typeof as !== "string") return null;
460
595
  return interpolateDynamicRouteHref(href, as)?.href || null;
461
596
  }
462
- const Link = forwardRef(function Link({ href, as, replace = false, prefetch: prefetchProp, scroll = true, shallow = false, children: childrenProp, onClick, onMouseEnter, onTouchStart, onNavigate, unstable_dynamicOnHover = false, legacyBehavior = false, passHref = false, transitionTypes: _transitionTypes, ...rest }, forwardedRef) {
597
+ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: prefetchProp, scroll = true, shallow = false, children: childrenProp, onClick, onMouseEnter, onTouchStart, onNavigate, unstable_dynamicOnHover = false, legacyBehavior = false, passHref = false, transitionTypes: _transitionTypes, locale, ...anchorProps }, forwardedRef) {
463
598
  const pagesRouter = useContext(RouterContext);
464
- const routePathnameForWarning = getCurrentRoutePathnameForWarning();
465
- const hrefStr = resolvePagesLinkValue(href, pagesRouter, routePathnameForWarning);
466
- const asHref = as === void 0 ? void 0 : resolvePagesLinkValue(as, pagesRouter, routePathnameForWarning);
467
- const { locale, ...restWithoutLocale } = rest;
599
+ const hrefStr = resolvePagesLinkValue(href, pagesRouter);
600
+ const asHref = as === void 0 ? void 0 : resolvePagesLinkValue(as, pagesRouter);
468
601
  let children = childrenProp;
469
602
  if (legacyBehavior && (typeof childrenProp === "string" || typeof childrenProp === "number")) children = React.createElement("a", null, childrenProp);
470
603
  const hrefForImplicitInterpolation = isAbsoluteOrProtocolRelativeUrl(hrefStr) ? hrefStr.startsWith("//") ? null : toSameOriginAppPath(hrefStr, __basePath) : hrefStr;
471
604
  const implicitDynamicRouteHref = HAS_PAGES_ROUTER && pagesRouter !== null && asHref === void 0 && hrefForImplicitInterpolation !== null ? resolveDynamicRouteHref(hrefForImplicitInterpolation) : null;
472
605
  const pagesAsHref = asHref ?? implicitDynamicRouteHref?.as;
473
606
  const unresolvedHref = pagesAsHref ?? hrefStr;
474
- const resolvedHref = unresolvedHref.startsWith("#") && !getNavigationRuntime()?.functions.navigate ? resolvePagesQueryOnlyHref(unresolvedHref) : unresolvedHref;
607
+ const resolvedHref = unresolvedHref.startsWith("#") && !hasLinkAppNavigationRuntime() ? resolvePagesQueryOnlyHref(unresolvedHref) : unresolvedHref;
475
608
  const concreteRouteHref = HAS_PAGES_ROUTER ? resolveConcreteRouteHref(hrefForImplicitInterpolation ?? hrefStr, pagesAsHref) : null;
476
609
  const routeHrefRaw = hrefStr;
477
610
  const prefetchRouteHrefRaw = concreteRouteHref ?? routeHrefRaw;
@@ -483,6 +616,14 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
483
616
  const normalizedHref = normalizePathTrailingSlash(localizedHref, __trailingSlash);
484
617
  const normalizedRouteHref = hasPagesHrefAsPair ? normalizePathTrailingSlash(applyLocaleToHref(isRouteDangerous ? "/" : prefetchRouteHrefRaw, locale), __trailingSlash) : normalizedHref;
485
618
  const fullHref = normalizePathTrailingSlash(withBasePath(normalizedHref, __basePath), __trailingSlash);
619
+ if (isServer && !legacyBehavior && !isDangerous) return /* @__PURE__ */ jsx(LinkStatusContext.Provider, {
620
+ value: { pending: false },
621
+ children: /* @__PURE__ */ jsx("a", {
622
+ href: fullHref,
623
+ ...anchorProps,
624
+ children
625
+ })
626
+ });
486
627
  const [pending, setPending] = useState(false);
487
628
  const mountedRef = useRef(true);
488
629
  const pendingPagesIntentPrefetchRef = useRef(null);
@@ -514,15 +655,15 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
514
655
  if (typeof forwardedRef === "function") forwardedRef(node);
515
656
  else if (forwardedRef) forwardedRef.current = node;
516
657
  }, [forwardedRef]);
517
- useEffect(() => {
658
+ useLayoutEffect(() => {
518
659
  if (!shouldViewportPrefetch || typeof window === "undefined") return;
519
660
  const node = internalRef.current;
520
661
  if (!node) return;
521
- const hrefToPrefetch = getLinkPrefetchHref({
662
+ const hrefToPrefetch = isAbsoluteOrProtocolRelativeUrl(normalizedHref) ? getLinkPrefetchHref({
522
663
  href: normalizedHref,
523
664
  basePath: __basePath,
524
665
  currentOrigin: window.location.origin
525
- });
666
+ }) : normalizedHref;
526
667
  if (hrefToPrefetch == null) return;
527
668
  const observer = getSharedObserver();
528
669
  if (!observer) return;
@@ -532,6 +673,8 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
532
673
  isVisible: false,
533
674
  locale,
534
675
  mode: prefetchMode,
676
+ ownedPrefetches: /* @__PURE__ */ new Set(),
677
+ leaveCount: 0,
535
678
  pagesRouteHref: normalizedRouteHref === normalizedHref ? void 0 : getLinkPrefetchHref({
536
679
  href: normalizedRouteHref,
537
680
  basePath: __basePath,
@@ -548,6 +691,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
548
691
  observedLinkPrefetches.delete(node);
549
692
  visibleLinkPrefetches.delete(instance);
550
693
  instance.isVisible = false;
694
+ releaseOwnedLinkPrefetches(instance);
551
695
  };
552
696
  }, [
553
697
  shouldViewportPrefetch,
@@ -623,7 +767,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
623
767
  navigateHref = localPath;
624
768
  }
625
769
  e.preventDefault();
626
- const hasAppNavigationRuntime = Boolean(getNavigationRuntime()?.functions.navigate);
770
+ const hasAppNavigationRuntime = hasLinkAppNavigationRuntime();
627
771
  const pagesNavigateHref = HAS_PAGES_ROUTER && resolvedHref.startsWith("?") ? resolvePagesLinkNavigationHref(resolvedHref, locale) : navigateHref;
628
772
  const pagesAsForLink = hasPagesHrefAsPair ? pagesNavigateHref : void 0;
629
773
  const pagesHrefForLink = pagesAsForLink === void 0 ? pagesNavigateHref : routeHrefRaw;
@@ -681,7 +825,6 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
681
825
  } else if (replace) window.location.replace(absoluteFullHref);
682
826
  else window.location.assign(absoluteFullHref);
683
827
  };
684
- const anchorProps = restWithoutLocale;
685
828
  const linkStatusValue = React.useMemo(() => ({ pending }), [pending]);
686
829
  if (isDangerous) {
687
830
  if (process.env.NODE_ENV !== "production") console.warn(`<Link> blocked dangerous href: ${resolvedHref}`);
@@ -24,7 +24,7 @@ export declare function ViewportHead({ viewport }: {
24
24
  export type Metadata = {
25
25
  title?: string | {
26
26
  default?: string;
27
- template?: string;
27
+ template?: string | null;
28
28
  absolute?: string;
29
29
  };
30
30
  description?: string;
@@ -57,15 +57,13 @@ export type Metadata = {
57
57
  url?: string | URL;
58
58
  siteName?: string;
59
59
  images?: string | URL | SocialImageDescriptor | Array<string | URL | SocialImageDescriptor>;
60
- videos?: Array<{
61
- url: string | URL;
62
- width?: number;
63
- height?: number;
64
- }>;
65
- audio?: Array<{
66
- url: string | URL;
67
- }>;
60
+ videos?: OGVideo | OGVideo[];
61
+ audio?: OGAudio | OGAudio[];
62
+ emails?: string | string[];
63
+ phoneNumbers?: string | string[];
64
+ faxNumbers?: string | string[];
68
65
  locale?: string;
66
+ alternateLocale?: string | string[];
69
67
  type?: string;
70
68
  publishedTime?: string;
71
69
  modifiedTime?: string;
@@ -169,6 +167,20 @@ type TwitterAppDescriptor = {
169
167
  };
170
168
  name?: string;
171
169
  };
170
+ type OGVideoDescriptor = {
171
+ url: string | URL;
172
+ secureUrl?: string | URL;
173
+ type?: string;
174
+ width?: string | number;
175
+ height?: string | number;
176
+ };
177
+ type OGVideo = string | URL | OGVideoDescriptor;
178
+ type OGAudioDescriptor = {
179
+ url: string | URL;
180
+ secureUrl?: string | URL;
181
+ type?: string;
182
+ };
183
+ type OGAudio = string | URL | OGAudioDescriptor;
172
184
  type SocialImageDescriptor = {
173
185
  url: string | URL;
174
186
  alt?: string;
@@ -194,7 +206,6 @@ type IconsMap = {
194
206
  };
195
207
  type IconsMetadata = IconInput | IconInput[] | IconsMap;
196
208
  export type MetadataMergeEntry = {
197
- contributesTitle?: boolean;
198
209
  isPage?: boolean;
199
210
  metadata: Metadata;
200
211
  };
@@ -236,6 +247,15 @@ export declare function postProcessMetadata(merged: Metadata): Metadata;
236
247
  * tags are the exception: Next.js merges those across segments.
237
248
  */
238
249
  export declare function mergeMetadataEntries(entries: readonly MetadataMergeEntry[]): Metadata;
250
+ /**
251
+ * Merge metadata into the `parent` a later segment's resolver receives. Like
252
+ * {@link mergeMetadataEntries}, except the title stays resolved as Next.js's
253
+ * `{ absolute, template }`, so `(await parent).title?.absolute` reads the
254
+ * title so far. `template` is the one the next title gets, so merging this
255
+ * parent with later entries resolves their titles as the full merge does.
256
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolvers/resolve-title.ts
257
+ */
258
+ export declare function mergeParentMetadataEntries(entries: readonly MetadataMergeEntry[]): Metadata;
239
259
  /**
240
260
  * Resolve metadata from a module. Handles both static `metadata` export
241
261
  * and async `generateMetadata()` function.
@@ -258,4 +278,5 @@ export declare function renderMetadataToHtml(metadata: Metadata, pathname?: stri
258
278
  streamedIconKey?: string;
259
279
  }): string;
260
280
  export declare function MetadataHead({ metadata, pathname, trailingSlash, streamedIconKey }: MetadataHeadProps): React.JSX.Element;
261
- //#endregion
281
+ //#endregion
282
+ export {};