vinext 1.2.1 → 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 (509) hide show
  1. package/README.md +12 -9
  2. package/dist/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/build/action-owner-manifest.d.ts +3 -2
  4. package/dist/build/action-owner-manifest.js +18 -2
  5. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  6. package/dist/build/app-page-static-eligibility.js +80 -13
  7. package/dist/build/clean-output.d.ts +2 -1
  8. package/dist/build/client-build-config.d.ts +77 -6
  9. package/dist/build/client-build-config.js +176 -12
  10. package/dist/build/client-reference-async.d.ts +48 -0
  11. package/dist/build/client-reference-async.js +123 -0
  12. package/dist/build/client-reference-chunks.d.ts +32 -0
  13. package/dist/build/client-reference-chunks.js +111 -0
  14. package/dist/build/client-reference-groups.d.ts +171 -0
  15. package/dist/build/client-reference-groups.js +572 -0
  16. package/dist/build/css-url-assets.d.ts +2 -1
  17. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  18. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  19. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  20. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  21. package/dist/build/google-fonts/validate.d.ts +2 -1
  22. package/dist/build/inline-css.d.ts +2 -1
  23. package/dist/build/layout-classification.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +33 -1
  25. package/dist/build/module-dependency-cache.js +51 -1
  26. package/dist/build/next-client-runtime-manifests.d.ts +12 -2
  27. package/dist/build/next-client-runtime-manifests.js +19 -4
  28. package/dist/build/nitro-public-files.d.ts +24 -0
  29. package/dist/build/nitro-public-files.js +60 -0
  30. package/dist/build/pages-client-assets-module.js +1 -1
  31. package/dist/build/precompress.d.ts +2 -1
  32. package/dist/build/precompress.js +1 -1
  33. package/dist/build/prerender-paths.d.ts +2 -1
  34. package/dist/build/prerender-paths.js +5 -2
  35. package/dist/build/prerender-phase.d.ts +2 -1
  36. package/dist/build/prerender-server-pool.js +1 -1
  37. package/dist/build/prerender.d.ts +3 -2
  38. package/dist/build/prerender.js +5 -4
  39. package/dist/build/report.d.ts +2 -1
  40. package/dist/build/route-classification-injector.d.ts +2 -1
  41. package/dist/build/route-classification-manifest.d.ts +2 -1
  42. package/dist/build/run-prerender.d.ts +2 -1
  43. package/dist/build/server-actions-encryption-key.d.ts +24 -0
  44. package/dist/build/server-actions-encryption-key.js +101 -0
  45. package/dist/build/ssr-manifest.d.ts +3 -0
  46. package/dist/build/ssr-manifest.js +34 -2
  47. package/dist/build/standalone.d.ts +2 -1
  48. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  49. package/dist/cache.js +1 -2
  50. package/dist/check.d.ts +2 -1
  51. package/dist/check.js +4 -0
  52. package/dist/cli-args.d.ts +2 -1
  53. package/dist/cli.js +2 -0
  54. package/dist/client/client-redirect-matcher.js +2 -1
  55. package/dist/client/client-redirects.d.ts +4 -3
  56. package/dist/client/client-redirects.js +2 -1
  57. package/dist/client/client-rewrite-params.d.ts +9 -0
  58. package/dist/client/client-rewrite-params.js +20 -0
  59. package/dist/client/client-rewrites.d.ts +2 -1
  60. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  61. package/dist/client/dev-error-overlay.js +2 -1
  62. package/dist/client/index.js +1 -2
  63. package/dist/client/instrumentation-client-state.js +5 -5
  64. package/dist/client/navigation-runtime.d.ts +28 -3
  65. package/dist/client/navigation-runtime.js +42 -11
  66. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  67. package/dist/client/vinext-next-data.d.ts +25 -2
  68. package/dist/client/window-next.d.ts +2 -1
  69. package/dist/config/config-matchers.d.ts +27 -41
  70. package/dist/config/config-matchers.js +293 -270
  71. package/dist/config/config-source.d.ts +34 -0
  72. package/dist/config/config-source.js +141 -0
  73. package/dist/config/dotenv.d.ts +2 -1
  74. package/dist/config/header-params.d.ts +29 -0
  75. package/dist/config/header-params.js +106 -0
  76. package/dist/config/next-config.d.ts +20 -6
  77. package/dist/config/next-config.js +149 -11
  78. package/dist/config/tsconfig-paths.d.ts +2 -1
  79. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  80. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  81. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  82. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  83. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  84. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  105. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  106. package/dist/entries/app-browser-entry.d.ts +34 -6
  107. package/dist/entries/app-browser-entry.js +103 -40
  108. package/dist/entries/app-rsc-entry.d.ts +4 -1
  109. package/dist/entries/app-rsc-entry.js +131 -66
  110. package/dist/entries/app-rsc-manifest.d.ts +12 -1
  111. package/dist/entries/app-rsc-manifest.js +73 -1
  112. package/dist/entries/app-ssr-entry.d.ts +4 -1
  113. package/dist/entries/app-ssr-entry.js +9 -2
  114. package/dist/entries/pages-client-entry.d.ts +1 -0
  115. package/dist/entries/pages-client-entry.js +6 -6
  116. package/dist/entries/pages-entry-helpers.js +1 -2
  117. package/dist/entries/pages-server-entry.d.ts +2 -1
  118. package/dist/entries/pages-server-entry.js +18 -15
  119. package/dist/entries/runtime-entry-module.d.ts +1 -0
  120. package/dist/entries/runtime-entry-module.js +4 -1
  121. package/dist/image/image-adapters-virtual.d.ts +2 -1
  122. package/dist/index.d.ts +11 -0
  123. package/dist/index.js +340 -116
  124. package/dist/init.js +17 -0
  125. package/dist/plugins/client-compile-hints.d.ts +30 -0
  126. package/dist/plugins/client-compile-hints.js +88 -0
  127. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  128. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  129. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  130. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  131. package/dist/plugins/environment.d.ts +2 -1
  132. package/dist/plugins/fonts.js +9 -12
  133. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  134. package/dist/plugins/import-meta-url.d.ts +2 -1
  135. package/dist/plugins/og-assets.d.ts +2 -1
  136. package/dist/plugins/og-assets.js +2 -3
  137. package/dist/plugins/optimize-imports.d.ts +27 -3
  138. package/dist/plugins/optimize-imports.js +106 -20
  139. package/dist/plugins/pages-node-externals.d.ts +2 -1
  140. package/dist/plugins/remove-console.d.ts +2 -1
  141. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  142. package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
  143. package/dist/plugins/rsc-client-reference-loaders.js +447 -27
  144. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  145. package/dist/plugins/sass.d.ts +2 -1
  146. package/dist/plugins/strip-server-exports.d.ts +2 -1
  147. package/dist/plugins/styled-jsx.d.ts +2 -1
  148. package/dist/plugins/transform-result.d.ts +2 -1
  149. package/dist/plugins/typeof-window.d.ts +2 -1
  150. package/dist/plugins/use-cache-callable.d.ts +5 -0
  151. package/dist/plugins/use-cache-callable.js +30 -8
  152. package/dist/plugins/worker-image-imports.d.ts +1 -0
  153. package/dist/plugins/worker-image-imports.js +2 -2
  154. package/dist/plugins/worker-use-server.d.ts +2 -1
  155. package/dist/routing/app-route-graph.d.ts +41 -1
  156. package/dist/routing/app-route-graph.js +122 -50
  157. package/dist/routing/browser-route-manifest.d.ts +44 -0
  158. package/dist/routing/browser-route-manifest.js +195 -0
  159. package/dist/routing/hashed-route-patterns.d.ts +4 -0
  160. package/dist/routing/hashed-route-patterns.js +22 -0
  161. package/dist/routing/optimistic-route-trie.d.ts +28 -0
  162. package/dist/routing/optimistic-route-trie.js +102 -0
  163. package/dist/routing/route-matching.d.ts +2 -1
  164. package/dist/routing/route-pattern.d.ts +2 -1
  165. package/dist/routing/route-validation.d.ts +6 -1
  166. package/dist/routing/route-validation.js +26 -10
  167. package/dist/server/accept-encoding.d.ts +2 -1
  168. package/dist/server/app-action-forwarding.d.ts +10 -1
  169. package/dist/server/app-action-forwarding.js +15 -1
  170. package/dist/server/app-bfcache-identity.d.ts +2 -1
  171. package/dist/server/app-browser-action-result.d.ts +2 -1
  172. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
  173. package/dist/server/app-browser-entry.js +175 -64
  174. package/dist/server/app-browser-error.d.ts +5 -2
  175. package/dist/server/app-browser-error.js +7 -2
  176. package/dist/server/app-browser-history-controller.d.ts +2 -1
  177. package/dist/server/app-browser-hydration.d.ts +2 -1
  178. package/dist/server/app-browser-interception-context.d.ts +4 -3
  179. package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
  180. package/dist/server/app-browser-mpa-navigation.js +6 -5
  181. package/dist/server/app-browser-navigation-controller.d.ts +17 -6
  182. package/dist/server/app-browser-navigation-controller.js +103 -36
  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-server-action-client.d.ts +2 -1
  186. package/dist/server/app-browser-state.d.ts +2 -2
  187. package/dist/server/app-browser-state.js +1 -1
  188. package/dist/server/app-browser-stream.d.ts +2 -1
  189. package/dist/server/app-browser-visible-commit.d.ts +6 -5
  190. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  191. package/dist/server/app-client-reference-manifest.js +46 -0
  192. package/dist/server/app-client-reference-preloader.d.ts +45 -2
  193. package/dist/server/app-client-reference-preloader.js +48 -10
  194. package/dist/server/app-elements-wire.d.ts +2 -1
  195. package/dist/server/app-elements.d.ts +2 -0
  196. package/dist/server/app-elements.js +3 -1
  197. package/dist/server/app-fallback-renderer.d.ts +9 -2
  198. package/dist/server/app-fallback-renderer.js +6 -2
  199. package/dist/server/app-history-state.d.ts +2 -1
  200. package/dist/server/app-inline-css-client.d.ts +2 -1
  201. package/dist/server/app-layout-param-observation.d.ts +2 -1
  202. package/dist/server/app-metadata-tracing.d.ts +2 -1
  203. package/dist/server/app-middleware.d.ts +6 -0
  204. package/dist/server/app-middleware.js +8 -10
  205. package/dist/server/app-optimistic-routing.d.ts +26 -11
  206. package/dist/server/app-optimistic-routing.js +38 -96
  207. package/dist/server/app-page-boundary-render.d.ts +20 -2
  208. package/dist/server/app-page-boundary-render.js +229 -39
  209. package/dist/server/app-page-boundary.d.ts +34 -5
  210. package/dist/server/app-page-boundary.js +40 -7
  211. package/dist/server/app-page-cache-finalizer.d.ts +2 -1
  212. package/dist/server/app-page-cache-finalizer.js +1 -1
  213. package/dist/server/app-page-cache-render.d.ts +10 -2
  214. package/dist/server/app-page-cache-render.js +15 -2
  215. package/dist/server/app-page-cache.js +2 -2
  216. package/dist/server/app-page-dispatch.d.ts +34 -1
  217. package/dist/server/app-page-dispatch.js +165 -34
  218. package/dist/server/app-page-element-builder.d.ts +17 -1
  219. package/dist/server/app-page-element-builder.js +187 -66
  220. package/dist/server/app-page-execution.d.ts +28 -1
  221. package/dist/server/app-page-execution.js +114 -5
  222. package/dist/server/app-page-head.d.ts +95 -3
  223. package/dist/server/app-page-head.js +307 -152
  224. package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
  225. package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
  226. package/dist/server/app-page-method.d.ts +2 -1
  227. package/dist/server/app-page-probe.d.ts +2 -1
  228. package/dist/server/app-page-render-identity.d.ts +2 -1
  229. package/dist/server/app-page-render.d.ts +7 -1
  230. package/dist/server/app-page-render.js +38 -11
  231. package/dist/server/app-page-request.d.ts +14 -1
  232. package/dist/server/app-page-request.js +1 -1
  233. package/dist/server/app-page-route-wiring.d.ts +52 -2
  234. package/dist/server/app-page-route-wiring.js +197 -47
  235. package/dist/server/app-page-rsc-render-status.d.ts +3 -1
  236. package/dist/server/app-page-rsc-render-status.js +1 -0
  237. package/dist/server/app-page-search-params-observation.d.ts +8 -6
  238. package/dist/server/app-page-search-params-observation.js +16 -11
  239. package/dist/server/app-page-segment-plan.d.ts +2 -1
  240. package/dist/server/app-page-stream.d.ts +38 -1
  241. package/dist/server/app-page-stream.js +24 -4
  242. package/dist/server/app-pages-bridge.d.ts +4 -2
  243. package/dist/server/app-pages-bridge.js +11 -7
  244. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  245. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  246. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  247. package/dist/server/app-prerender-static-params.d.ts +2 -1
  248. package/dist/server/app-prerender-static-params.js +3 -2
  249. package/dist/server/app-render-dependency.d.ts +11 -1
  250. package/dist/server/app-render-dependency.js +65 -6
  251. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  252. package/dist/server/app-request-stage-independent-entry.js +2 -2
  253. package/dist/server/app-response-stage-entry.d.ts +2 -1
  254. package/dist/server/app-response-stage-entry.js +3 -3
  255. package/dist/server/app-route-handler-cache.d.ts +2 -1
  256. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  257. package/dist/server/app-route-handler-dispatch.js +4 -2
  258. package/dist/server/app-route-handler-execution.d.ts +4 -1
  259. package/dist/server/app-route-handler-execution.js +9 -2
  260. package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
  261. package/dist/server/app-route-handler-middleware-context.js +3 -3
  262. package/dist/server/app-route-handler-response.d.ts +4 -2
  263. package/dist/server/app-route-handler-response.js +2 -2
  264. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  265. package/dist/server/app-route-handler-runtime.js +20 -3
  266. package/dist/server/app-route-module-loader.d.ts +18 -1
  267. package/dist/server/app-route-module-loader.js +15 -6
  268. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  269. package/dist/server/app-route-tree.d.ts +20 -0
  270. package/dist/server/app-route-tree.js +18 -0
  271. package/dist/server/app-router-entry.js +2 -2
  272. package/dist/server/app-rsc-combined-handler.js +8 -1
  273. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  274. package/dist/server/app-rsc-errors.d.ts +9 -1
  275. package/dist/server/app-rsc-errors.js +9 -2
  276. package/dist/server/app-rsc-handler.d.ts +6 -2
  277. package/dist/server/app-rsc-handler.js +152 -140
  278. package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
  279. package/dist/server/app-rsc-response-finalizer.js +4 -1
  280. package/dist/server/app-rsc-response-stage.js +3 -1
  281. package/dist/server/app-rsc-route-matching.d.ts +39 -1
  282. package/dist/server/app-rsc-route-matching.js +25 -1
  283. package/dist/server/app-segment-config.d.ts +2 -1
  284. package/dist/server/app-segment-config.js +1 -14
  285. package/dist/server/app-server-action-execution.d.ts +25 -7
  286. package/dist/server/app-server-action-execution.js +53 -59
  287. package/dist/server/app-ssr-entry.d.ts +12 -0
  288. package/dist/server/app-ssr-entry.js +104 -48
  289. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  290. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  291. package/dist/server/app-ssr-stream.d.ts +29 -10
  292. package/dist/server/app-ssr-stream.js +311 -67
  293. package/dist/server/app-static-generation.d.ts +2 -1
  294. package/dist/server/app-streamed-client-references.d.ts +39 -0
  295. package/dist/server/app-streamed-client-references.js +156 -0
  296. package/dist/server/app-visited-response-cache.d.ts +2 -1
  297. package/dist/server/app-worker-stages.d.ts +2 -1
  298. package/dist/server/artifact-compatibility.d.ts +2 -1
  299. package/dist/server/bfcache-identity.d.ts +2 -1
  300. package/dist/server/cache-headers.d.ts +2 -1
  301. package/dist/server/cacheability-request.d.ts +2 -1
  302. package/dist/server/client-reuse-manifest.d.ts +2 -1
  303. package/dist/server/config-headers.d.ts +2 -1
  304. package/dist/server/config-headers.js +12 -3
  305. package/dist/server/csp.d.ts +2 -1
  306. package/dist/server/default-global-not-found-module.d.ts +2 -1
  307. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  308. package/dist/server/default-http-access-fallback-modules.js +31 -0
  309. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  310. package/dist/server/defer-until-stream-consumed.js +154 -21
  311. package/dist/server/dev-lockfile.d.ts +32 -2
  312. package/dist/server/dev-lockfile.js +46 -2
  313. package/dist/server/dev-module-runner.d.ts +2 -1
  314. package/dist/server/dev-server.js +10 -3
  315. package/dist/server/fetch-handler.js +1 -2
  316. package/dist/server/file-based-metadata.d.ts +2 -1
  317. package/dist/server/framework-tracer.d.ts +2 -1
  318. package/dist/server/html.d.ts +1 -0
  319. package/dist/server/html.js +19 -1
  320. package/dist/server/http-conditional.d.ts +2 -1
  321. package/dist/server/http-error-responses.d.ts +2 -1
  322. package/dist/server/implicit-tags.d.ts +2 -1
  323. package/dist/server/isolate-shared-promise.d.ts +10 -0
  324. package/dist/server/isolate-shared-promise.js +33 -0
  325. package/dist/server/isr-cache.js +3 -2
  326. package/dist/server/metadata-route-build-data.d.ts +2 -1
  327. package/dist/server/metadata-route-build-data.js +1 -1
  328. package/dist/server/metadata-route-response.d.ts +2 -1
  329. package/dist/server/metadata-route-response.js +1 -1
  330. package/dist/server/metadata-routes.d.ts +2 -1
  331. package/dist/server/middleware-matcher-pattern.d.ts +0 -1
  332. package/dist/server/middleware-matcher-pattern.js +11 -140
  333. package/dist/server/middleware-matcher.js +5 -6
  334. package/dist/server/middleware-response-headers.d.ts +31 -0
  335. package/dist/server/middleware-response-headers.js +57 -1
  336. package/dist/server/middleware-runtime.d.ts +2 -1
  337. package/dist/server/middleware-runtime.js +26 -13
  338. package/dist/server/navigation-planner.d.ts +2 -2
  339. package/dist/server/navigation-trace.d.ts +2 -1
  340. package/dist/server/next-error-digest.d.ts +2 -1
  341. package/dist/server/nitro-public-files-plugin.d.ts +39 -0
  342. package/dist/server/nitro-public-files-plugin.js +106 -0
  343. package/dist/server/nitro-public-files.d.ts +22 -0
  344. package/dist/server/nitro-public-files.js +39 -0
  345. package/dist/server/opentelemetry-api.d.ts +2 -1
  346. package/dist/server/operation-token.d.ts +2 -1
  347. package/dist/server/pages-api-route.d.ts +2 -1
  348. package/dist/server/pages-asset-tags.d.ts +7 -1
  349. package/dist/server/pages-asset-tags.js +9 -2
  350. package/dist/server/pages-body-parser-config.d.ts +2 -1
  351. package/dist/server/pages-client-assets.d.ts +8 -1
  352. package/dist/server/pages-data-route.d.ts +2 -1
  353. package/dist/server/pages-document-asset-props.d.ts +2 -1
  354. package/dist/server/pages-document-initial-props.d.ts +2 -1
  355. package/dist/server/pages-execution-tracing.d.ts +2 -1
  356. package/dist/server/pages-execution-tracing.js +1 -1
  357. package/dist/server/pages-get-initial-props.d.ts +2 -1
  358. package/dist/server/pages-i18n.d.ts +18 -0
  359. package/dist/server/pages-i18n.js +18 -2
  360. package/dist/server/pages-node-compat.d.ts +5 -3
  361. package/dist/server/pages-node-compat.js +35 -16
  362. package/dist/server/pages-page-data.d.ts +7 -1
  363. package/dist/server/pages-page-data.js +35 -12
  364. package/dist/server/pages-page-handler.d.ts +3 -2
  365. package/dist/server/pages-page-handler.js +16 -7
  366. package/dist/server/pages-page-method.d.ts +2 -1
  367. package/dist/server/pages-page-response.d.ts +2 -1
  368. package/dist/server/pages-preview.d.ts +2 -1
  369. package/dist/server/pages-readiness.d.ts +2 -1
  370. package/dist/server/pages-request-pipeline.d.ts +8 -2
  371. package/dist/server/pages-request-pipeline.js +35 -40
  372. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  373. package/dist/server/pages-request-stage-entry.js +16 -6
  374. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  375. package/dist/server/pages-response-stage-entry.js +1 -1
  376. package/dist/server/pages-revalidate.js +1 -0
  377. package/dist/server/pages-route-data-kind.d.ts +2 -1
  378. package/dist/server/pages-router-entry.js +1 -1
  379. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  380. package/dist/server/prerender-route-params.d.ts +2 -1
  381. package/dist/server/prod-server.d.ts +2 -2
  382. package/dist/server/prod-server.js +80 -36
  383. package/dist/server/proxy-trust.d.ts +6 -0
  384. package/dist/server/proxy-trust.js +12 -6
  385. package/dist/server/request-log.d.ts +2 -1
  386. package/dist/server/request-pipeline.d.ts +5 -0
  387. package/dist/server/request-pipeline.js +12 -1
  388. package/dist/server/request-tracing.d.ts +2 -1
  389. package/dist/server/request-tracing.js +1 -1
  390. package/dist/server/response-start-tracing.js +7 -29
  391. package/dist/server/rsc-render-stream.d.ts +4 -0
  392. package/dist/server/rsc-render-stream.js +25 -0
  393. package/dist/server/seed-cache.d.ts +2 -1
  394. package/dist/server/seed-cache.js +1 -1
  395. package/dist/server/server-reference-loader.js +10 -1
  396. package/dist/server/static-file-cache.d.ts +2 -1
  397. package/dist/server/static-file-cache.js +16 -3
  398. package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
  399. package/dist/server/worker-revalidation-context.d.ts +2 -1
  400. package/dist/server/worker-stages.d.ts +2 -1
  401. package/dist/server/worker-utils.js +1 -1
  402. package/dist/shims/app.d.ts +2 -1
  403. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  404. package/dist/shims/cache-handler.d.ts +8 -3
  405. package/dist/shims/cache-handler.js +32 -11
  406. package/dist/shims/cache-request-state.d.ts +40 -3
  407. package/dist/shims/cache-request-state.js +70 -5
  408. package/dist/shims/cache-runtime.js +47 -19
  409. package/dist/shims/cache.d.ts +2 -2
  410. package/dist/shims/cache.js +17 -8
  411. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  412. package/dist/shims/caught-not-found-boundaries.js +48 -0
  413. package/dist/shims/cdn-purge-routes.d.ts +25 -0
  414. package/dist/shims/cdn-purge-routes.js +77 -0
  415. package/dist/shims/client-locale.js +2 -1
  416. package/dist/shims/client-page-root.d.ts +2 -1
  417. package/dist/shims/config.d.ts +2 -1
  418. package/dist/shims/default-forbidden.d.ts +4 -0
  419. package/dist/shims/default-forbidden.js +18 -0
  420. package/dist/shims/default-not-found.d.ts +0 -5
  421. package/dist/shims/default-not-found.js +5 -41
  422. package/dist/shims/default-unauthorized.d.ts +4 -0
  423. package/dist/shims/default-unauthorized.js +18 -0
  424. package/dist/shims/dynamic.js +17 -4
  425. package/dist/shims/error-boundary.d.ts +39 -3
  426. package/dist/shims/error-boundary.js +31 -16
  427. package/dist/shims/font-google.js +1 -2
  428. package/dist/shims/font-utils.d.ts +3 -2
  429. package/dist/shims/font-utils.js +5 -3
  430. package/dist/shims/form.js +9 -4
  431. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  432. package/dist/shims/http-access-error-fallback.js +47 -0
  433. package/dist/shims/image-props.d.ts +93 -0
  434. package/dist/shims/image-props.js +323 -0
  435. package/dist/shims/image.d.ts +4 -39
  436. package/dist/shims/image.js +4 -319
  437. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  438. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  439. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  440. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  441. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  442. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  443. package/dist/shims/internal/client-reference-loader.js +91 -0
  444. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  445. package/dist/shims/internal/cookies.js +1 -2
  446. package/dist/shims/internal/headers-state.d.ts +9 -0
  447. package/dist/shims/internal/headers-state.js +19 -2
  448. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
  449. package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
  450. package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
  451. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  452. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  453. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  454. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  455. package/dist/shims/link.js +198 -53
  456. package/dist/shims/metadata.d.ts +32 -11
  457. package/dist/shims/metadata.js +88 -26
  458. package/dist/shims/navigation-errors.d.ts +2 -1
  459. package/dist/shims/navigation.d.ts +23 -3
  460. package/dist/shims/navigation.js +91 -25
  461. package/dist/shims/og.js +35 -10
  462. package/dist/shims/pages-router-runtime.d.ts +2 -1
  463. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  464. package/dist/shims/request-context.d.ts +13 -0
  465. package/dist/shims/router.js +33 -43
  466. package/dist/shims/server.d.ts +31 -4
  467. package/dist/shims/server.js +58 -10
  468. package/dist/shims/thenable-params.d.ts +6 -1
  469. package/dist/shims/thenable-params.js +11 -2
  470. package/dist/shims/unified-request-context.d.ts +5 -0
  471. package/dist/shims/unified-request-context.js +5 -3
  472. package/dist/typegen.d.ts +2 -1
  473. package/dist/utils/asset-prefix.d.ts +7 -0
  474. package/dist/utils/asset-prefix.js +10 -1
  475. package/dist/utils/client-build-manifest.d.ts +4 -1
  476. package/dist/utils/client-build-manifest.js +20 -6
  477. package/dist/utils/client-entry-manifest.d.ts +13 -0
  478. package/dist/utils/client-entry-manifest.js +20 -1
  479. package/dist/utils/client-reference-chunks.d.ts +45 -0
  480. package/dist/utils/client-reference-chunks.js +30 -0
  481. package/dist/utils/client-runtime-metadata.d.ts +10 -1
  482. package/dist/utils/client-runtime-metadata.js +53 -9
  483. package/dist/utils/compare.d.ts +9 -0
  484. package/dist/utils/compare.js +15 -1
  485. package/dist/utils/lazy-chunks.d.ts +18 -0
  486. package/dist/utils/lazy-chunks.js +27 -1
  487. package/dist/utils/manifest-paths.d.ts +14 -0
  488. package/dist/utils/manifest-paths.js +22 -1
  489. package/dist/utils/middleware-request-headers.d.ts +2 -1
  490. package/dist/utils/path-to-regexp.d.ts +21 -0
  491. package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
  492. package/dist/utils/plugin-react-version.d.ts +15 -0
  493. package/dist/utils/plugin-react-version.js +64 -0
  494. package/dist/utils/project.d.ts +2 -1
  495. package/dist/utils/project.js +9 -1
  496. package/dist/utils/public-routes.d.ts +2 -0
  497. package/dist/utils/public-routes.js +18 -7
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/sorted-array.d.ts +2 -1
  500. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  501. package/package.json +5 -5
  502. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  503. package/dist/server/default-not-found-module.d.ts +0 -19
  504. package/dist/server/default-not-found-module.js +0 -18
  505. package/dist/server/middleware-path-to-regexp.d.ts +0 -13
  506. package/dist/server/rsc-stream-hints.d.ts +0 -21
  507. package/dist/server/rsc-stream-hints.js +0 -227
  508. package/dist/utils/regex-safety.d.ts +0 -17
  509. package/dist/utils/regex-safety.js +0 -789
@@ -23,12 +23,23 @@ async function resolveModuleViewport(mod, params = {}, searchParams, parent = Pr
23
23
  params: asyncParams,
24
24
  searchParams: makeThenableParams(searchParams, searchParamsObserver)
25
25
  });
26
- return await mod.generateViewport(props, parent);
26
+ return await callSegmentResolver(mod.generateViewport, props, parent);
27
27
  }
28
28
  if (mod.viewport && typeof mod.viewport === "object") return mod.viewport;
29
29
  return null;
30
30
  }
31
31
  /**
32
+ * Call a segment's generateMetadata() or generateViewport() with `parent`, as
33
+ * Next.js's getResult does for both.
34
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolve-metadata.ts (getResult)
35
+ */
36
+ function callSegmentResolver(resolver, props, parent) {
37
+ if (!(Reflect.get(resolver, USE_CACHE_FUNCTION_SYMBOL) === true)) return resolver(props, parent);
38
+ const acceptsSecondArgument = Reflect.get(resolver, USE_CACHE_ACCEPTS_SECOND_ARGUMENT_SYMBOL);
39
+ if (!(typeof acceptsSecondArgument === "boolean" ? acceptsSecondArgument : resolver.length >= 2)) return resolver(props);
40
+ return parent.then(() => resolver(props, parent));
41
+ }
42
+ /**
32
43
  * Merge viewport configs from multiple sources (layouts + page).
33
44
  * Later entries override earlier ones.
34
45
  */
@@ -232,13 +243,26 @@ function postProcessMetadata(merged) {
232
243
  * tags are the exception: Next.js merges those across segments.
233
244
  */
234
245
  function mergeMetadataEntries(entries) {
246
+ return mergeEntries(entries, false);
247
+ }
248
+ /**
249
+ * Merge metadata into the `parent` a later segment's resolver receives. Like
250
+ * {@link mergeMetadataEntries}, except the title stays resolved as Next.js's
251
+ * `{ absolute, template }`, so `(await parent).title?.absolute` reads the
252
+ * title so far. `template` is the one the next title gets, so merging this
253
+ * parent with later entries resolves their titles as the full merge does.
254
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolvers/resolve-title.ts
255
+ */
256
+ function mergeParentMetadataEntries(entries) {
257
+ return mergeEntries(entries, true);
258
+ }
259
+ function mergeEntries(entries, resolvedTitle) {
235
260
  if (entries.length === 0) return {};
236
261
  const merged = {};
237
262
  let parentTemplate;
238
263
  for (const entry of entries) {
239
264
  const meta = entry.metadata;
240
265
  const isPage = Boolean(entry.isPage);
241
- const contributesTitle = entry.contributesTitle !== false;
242
266
  for (const key of Object.keys(meta)) {
243
267
  if (key === "title") continue;
244
268
  const incoming = meta[key];
@@ -249,9 +273,13 @@ function mergeMetadataEntries(entries) {
249
273
  };
250
274
  else merged[key] = incoming;
251
275
  }
252
- if (contributesTitle && meta.title !== void 0) merged.title = resolveTitle(meta.title, parentTemplate);
253
- if (contributesTitle && !isPage && meta.title && typeof meta.title === "object" && meta.title.template) parentTemplate = meta.title.template;
276
+ if (meta.title !== void 0) merged.title = resolveTitle(meta.title, parentTemplate);
277
+ if (!isPage && meta.title && typeof meta.title === "object" && meta.title.template) parentTemplate = meta.title.template;
254
278
  }
279
+ if (resolvedTitle && Object.hasOwn(merged, "title")) merged.title = {
280
+ absolute: resolveStringTitle(merged.title) ?? "",
281
+ template: parentTemplate ?? null
282
+ };
255
283
  return merged;
256
284
  }
257
285
  /**
@@ -268,13 +296,10 @@ async function resolveModuleMetadata(mod, params = {}, searchParams, parent = Pr
268
296
  if (typeof mod.generateMetadata === "function") {
269
297
  const generateMetadata = mod.generateMetadata;
270
298
  const asyncParams = makeThenableParams(params);
271
- const props = searchParams === void 0 ? withUseCacheLayoutMarker(generateMetadata, { params: asyncParams }) : withUseCachePageMarker(generateMetadata, {
299
+ return await callSegmentResolver(generateMetadata, searchParams === void 0 ? withUseCacheLayoutMarker(generateMetadata, { params: asyncParams }) : withUseCachePageMarker(generateMetadata, {
272
300
  params: asyncParams,
273
301
  searchParams: makeThenableParams(searchParams, searchParamsObserver)
274
- });
275
- const isUseCacheFunction = Reflect.get(generateMetadata, USE_CACHE_FUNCTION_SYMBOL) === true;
276
- const acceptsSecondArgument = Reflect.get(generateMetadata, USE_CACHE_ACCEPTS_SECOND_ARGUMENT_SYMBOL);
277
- return await (!isUseCacheFunction || (typeof acceptsSecondArgument === "boolean" ? acceptsSecondArgument : generateMetadata.length >= 2) ? generateMetadata(props, parent) : generateMetadata(props));
302
+ }), parent);
278
303
  }
279
304
  if (mod.metadata && typeof mod.metadata === "object") return mod.metadata;
280
305
  return null;
@@ -607,24 +632,61 @@ function MetadataHead({ metadata, pathname = "/", trailingSlash, streamedIconKey
607
632
  }
608
633
  }
609
634
  }
610
- if (og.videos) for (const video of og.videos) {
611
- elements.push(/* @__PURE__ */ jsx("meta", {
612
- property: "og:video",
613
- content: resolveUrl(video.url)
614
- }, key++));
615
- if (video.width) elements.push(/* @__PURE__ */ jsx("meta", {
616
- property: "og:video:width",
617
- content: String(video.width)
618
- }, key++));
619
- if (video.height) elements.push(/* @__PURE__ */ jsx("meta", {
620
- property: "og:video:height",
621
- content: String(video.height)
635
+ if (og.videos) {
636
+ const videos = normalizeUrlDescriptorEntries(og.videos, (url) => ({ url }));
637
+ for (const video of videos) {
638
+ if (video.url) elements.push(/* @__PURE__ */ jsx("meta", {
639
+ property: "og:video",
640
+ content: stringifyUrl(video.url)
641
+ }, key++));
642
+ if (video.secureUrl) elements.push(/* @__PURE__ */ jsx("meta", {
643
+ property: "og:video:secure_url",
644
+ content: stringifyUrl(video.secureUrl)
645
+ }, key++));
646
+ if (video.type) elements.push(/* @__PURE__ */ jsx("meta", {
647
+ property: "og:video:type",
648
+ content: video.type
649
+ }, key++));
650
+ if (video.width) elements.push(/* @__PURE__ */ jsx("meta", {
651
+ property: "og:video:width",
652
+ content: String(video.width)
653
+ }, key++));
654
+ if (video.height) elements.push(/* @__PURE__ */ jsx("meta", {
655
+ property: "og:video:height",
656
+ content: String(video.height)
657
+ }, key++));
658
+ }
659
+ }
660
+ if (og.audio) {
661
+ const audios = normalizeUrlDescriptorEntries(og.audio, (url) => ({ url }));
662
+ for (const audio of audios) {
663
+ if (audio.url) elements.push(/* @__PURE__ */ jsx("meta", {
664
+ property: "og:audio",
665
+ content: stringifyUrl(audio.url)
666
+ }, key++));
667
+ if (audio.secureUrl) elements.push(/* @__PURE__ */ jsx("meta", {
668
+ property: "og:audio:secure_url",
669
+ content: stringifyUrl(audio.secureUrl)
670
+ }, key++));
671
+ if (audio.type) elements.push(/* @__PURE__ */ jsx("meta", {
672
+ property: "og:audio:type",
673
+ content: audio.type
674
+ }, key++));
675
+ }
676
+ }
677
+ const ogListTags = [
678
+ ["og:email", og.emails],
679
+ ["og:phone_number", og.phoneNumbers],
680
+ ["og:fax_number", og.faxNumbers],
681
+ ["og:locale:alternate", og.alternateLocale]
682
+ ];
683
+ for (const [property, value] of ogListTags) {
684
+ if (!value) continue;
685
+ for (const content of Array.isArray(value) ? value : [value]) elements.push(/* @__PURE__ */ jsx("meta", {
686
+ property,
687
+ content
622
688
  }, key++));
623
689
  }
624
- if (og.audio) for (const audio of og.audio) elements.push(/* @__PURE__ */ jsx("meta", {
625
- property: "og:audio",
626
- content: resolveUrl(audio.url)
627
- }, key++));
628
690
  }
629
691
  if (metadata.twitter) {
630
692
  const tw = metadata.twitter;
@@ -867,4 +929,4 @@ function MetadataHead({ metadata, pathname = "/", trailingSlash, streamedIconKey
867
929
  return /* @__PURE__ */ jsx(Fragment$1, { children: elements });
868
930
  }
869
931
  //#endregion
870
- export { DEFAULT_VIEWPORT, MetadataHead, ViewportHead, mergeMetadata, mergeMetadataEntries, mergeViewport, postProcessMetadata, renderMetadataToHtml, resolveModuleMetadata, resolveModuleViewport };
932
+ export { DEFAULT_VIEWPORT, MetadataHead, ViewportHead, mergeMetadata, mergeMetadataEntries, mergeParentMetadataEntries, mergeViewport, postProcessMetadata, renderMetadataToHtml, resolveModuleMetadata, resolveModuleViewport };
@@ -58,4 +58,5 @@ export declare function isDynamicServerError(error: unknown): error is DynamicSe
58
58
  * them. This covers the categories vinext can currently produce.
59
59
  */
60
60
  export declare function unstable_rethrow(error: unknown): void;
61
- //#endregion
61
+ //#endregion
62
+ export {};
@@ -3,6 +3,7 @@ import { NavigationRuntimeVisibleCommitMode } from "../client/navigation-runtime
3
3
  import { AppElements } from "../server/app-elements-wire.js";
4
4
  import "../server/app-elements.js";
5
5
  import { AppRouterInstance, NavigateOptions, PrefetchOptions as PrefetchOptions$1 } from "./internal/app-router-context.js";
6
+ import { AppRoutePrefetchPolicy } from "./internal/app-route-prefetch-policy.js";
6
7
  import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
7
8
  import { AppRscRenderMode } from "../server/app-rsc-render-mode.js";
8
9
  import { GLOBAL_ACCESSORS_KEY, NavigationContext, NavigationStateAccessors, SegmentMap, ServerInsertedHTMLContext, _registerStateAccessors, clearServerInsertedHTML, flushServerInsertedHTML, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getLayoutSegmentContext, getNavigationContext, renderServerInsertedHTML, setNavigationContext } from "./navigation-context-state.js";
@@ -67,7 +68,13 @@ export type PrefetchOptions = {
67
68
  export type PrefetchCacheKind = "loading-shell" | "navigation" | "route-tree";
68
69
  export type PrefetchCacheEntry = {
69
70
  cacheForNavigation?: boolean;
71
+ /**
72
+ * Set while a full prefetch would be kept as learning-only if its page
73
+ * renders dynamically. A hover upgrade turns it into a full prefetch.
74
+ */
75
+ dynamicStaleTime?: "learning-only" | "full-prefetch";
70
76
  expiresAt?: number;
77
+ fallbackTtlMs?: number;
71
78
  invalidationTimer?: ReturnType<typeof setTimeout>;
72
79
  mountedSlotsHeader?: string | null;
73
80
  onInvalidateCallbacks?: Set<() => void>;
@@ -86,7 +93,7 @@ export type PrefetchCacheEntry = {
86
93
  timestamp: number;
87
94
  };
88
95
  export declare function getCurrentInterceptionContext(): string | null;
89
- export declare function getPrefetchInterceptionContext(targetHref: string): string | null;
96
+ export declare function getPrefetchInterceptionContext(targetHref: string, currentPathname?: string): string | null;
90
97
  export declare function getCurrentNextUrl(): string;
91
98
  export declare function createAppPrefetchRequestHeaders(options: {
92
99
  fetchPriority: "auto" | "high" | "low";
@@ -116,6 +123,10 @@ export declare function hasPrefetchCacheEntryForNavigation(rscUrl: string, inter
116
123
  additionalRscUrls?: readonly string[];
117
124
  notifyInvalidation?: boolean;
118
125
  onInvalidate?: () => void;
126
+ /** Called with the matched entry, and the key it was found under, when it is reused. */
127
+ onReuse?: (entry: PrefetchCacheEntry, cacheKey: string) => void;
128
+ /** Whether an in-flight entry counts as reusable. Defaults to true. */
129
+ reusePending?: boolean;
119
130
  }): boolean;
120
131
  /**
121
132
  * Return whether the exact learning-only Link prefetch is still usable.
@@ -124,7 +135,16 @@ export declare function hasPrefetchCacheEntryForNavigation(rscUrl: string, inter
124
135
  */
125
136
  export declare function hasFreshLearningOnlyPrefetchCacheEntry(rscUrl: string, interceptionContext?: string | null): boolean;
126
137
  export declare function hasSearchAgnosticPrefetchShellForRoute(rscUrl: string, interceptionContext?: string | null, mountedSlotsHeader?: string | null): boolean;
127
- export declare function discardLearningOnlyPrefetchCacheEntry(rscUrl: string, interceptionContext?: string | null): boolean;
138
+ export declare function discardLearningOnlyPrefetchCacheEntry(rscUrl: string, interceptionContext?: string | null, mountedSlotsHeader?: string | null): boolean;
139
+ /**
140
+ * Make a prefetch reusable by a navigation, as an `unstable_dynamicOnHover`
141
+ * hover does. A pending one that would be kept as learning-only becomes a full
142
+ * prefetch and takes the full-prefetch lifetime. One already kept as
143
+ * learning-only because its page rendered dynamically is left for the full
144
+ * prefetch to replace: Next.js refetches it with `FetchStrategy.Full`, so the
145
+ * page reflects the cookies and headers at hover time.
146
+ */
147
+ export declare function promotePrefetchCacheEntryForNavigation(cacheKey: string, entry: PrefetchCacheEntry): void;
128
148
  export declare function invalidatePrefetchCache(): void;
129
149
  /**
130
150
  * Prevent completed navigation responses from becoming authoritative again
@@ -206,7 +226,7 @@ export declare function fetchRouteTreeGatedPrefetch(options: {
206
226
  */
207
227
  export declare function prefetchRscResponse(rscUrl: string, fetchPromise: Promise<Response>, interceptionContext?: string | null, mountedSlotsHeader?: string | null, options?: PrefetchOptions, behavior?: {
208
228
  cacheForNavigation?: boolean;
209
- dynamicStaleTime?: "verbatim" | "full-prefetch" | "ignore";
229
+ dynamicStaleTime?: AppRoutePrefetchPolicy["dynamicStaleTime"];
210
230
  fallbackTtlMs?: number;
211
231
  optimisticRouteShell?: boolean;
212
232
  prefetchKind?: PrefetchCacheKind;
@@ -1,7 +1,7 @@
1
1
  import { isBotUserAgent } from "../utils/html-limited-bots.js";
2
2
  import { isExternalUrl } from "../utils/external-url.js";
3
3
  import { stripBasePath } from "../utils/base-path.js";
4
- import { NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_RSC_RENDER_MODE_HEADER } from "../server/app-rsc-vary.js";
4
+ import { NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_RSC_RENDER_MODE_HEADER } from "../server/app-rsc-vary.js";
5
5
  import { NEXT_ROUTER_STALE_TIME_HEADER, VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_PARAMS_HEADER, VINEXT_RENDERED_PATH_AND_SEARCH_HEADER, VINEXT_RSC_COMPLETION_METADATA_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_REDIRECT_TYPE_HEADER, VINEXT_STALE_TIME_PENDING_HEADER } from "../server/headers.js";
6
6
  import { assertSafeNavigationUrl } from "./url-safety.js";
7
7
  import { APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL, APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL } from "../server/app-rsc-render-mode.js";
@@ -19,7 +19,7 @@ import { clearAppNavigationFailureTarget, stageAppNavigationFailureTarget } from
19
19
  import { beginAppRouterScrollIntent, clearAppRouterScrollIntent, consumeAppRouterScrollIntent, getPendingAppRouterScrollIntent, isLatestAppRouterScrollIntent } from "./app-router-scroll-state.js";
20
20
  import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix } from "../server/app-rsc-cache-busting.js";
21
21
  import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
22
- import { getNavigationRuntime, hasAppNavigationRuntime } from "../client/navigation-runtime.js";
22
+ import { getNavigationRuntime, hasAppNavigationRuntime, loadNavigationRuntimeRouteManifest } from "../client/navigation-runtime.js";
23
23
  import { UnrecognizedActionError, unstable_isUnrecognizedActionError } from "./unrecognized-action-error.js";
24
24
  import { PUBLIC_INITIAL_BFCACHE_ID } from "../server/app-bfcache-id.js";
25
25
  import { resolveManifestNavigationInterceptionContext } from "../server/app-browser-interception-context.js";
@@ -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 */
@@ -117,7 +117,7 @@ function getCurrentInterceptionContext() {
117
117
  if (isServer) return null;
118
118
  return stripBasePath(window.location.pathname, __basePath);
119
119
  }
120
- function getPrefetchInterceptionContext(targetHref) {
120
+ function getPrefetchInterceptionContext(targetHref, currentPathname) {
121
121
  if (isServer) return null;
122
122
  let targetUrl;
123
123
  try {
@@ -127,7 +127,7 @@ function getPrefetchInterceptionContext(targetHref) {
127
127
  }
128
128
  return resolveManifestNavigationInterceptionContext({
129
129
  basePath: __basePath,
130
- currentPathname: window.location.pathname,
130
+ currentPathname: currentPathname ?? window.location.pathname,
131
131
  routeManifest: getNavigationRuntime()?.bootstrap.routeManifest ?? null,
132
132
  targetPathname: targetUrl.pathname
133
133
  });
@@ -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);
@@ -494,7 +496,7 @@ function deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, notify) {
494
496
  entry.onInvalidateCallbacks = void 0;
495
497
  }
496
498
  }
497
- function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = null) {
499
+ function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = null, mountedSlotsHeader = null) {
498
500
  const cache = getPrefetchCache();
499
501
  const prefetched = getPrefetchedUrls();
500
502
  const normalizedTarget = normalizeRscCacheLookupUrl(rscUrl);
@@ -505,6 +507,7 @@ function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = nul
505
507
  const source = parsePrefetchCacheKey(cacheKey);
506
508
  if (source.interceptionContext !== interceptionContext) continue;
507
509
  if (normalizeRscCacheLookupUrl(source.rscUrl) !== normalizedTarget) continue;
510
+ if (!isPrefetchCacheEntryCompatibleWithMountedSlots(entry, mountedSlotsHeader)) continue;
508
511
  superseded.push([cacheKey, entry]);
509
512
  }
510
513
  for (const [cacheKey, entry] of superseded) {
@@ -513,6 +516,25 @@ function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = nul
513
516
  }
514
517
  return superseded.length > 0;
515
518
  }
519
+ /**
520
+ * Make a prefetch reusable by a navigation, as an `unstable_dynamicOnHover`
521
+ * hover does. A pending one that would be kept as learning-only becomes a full
522
+ * prefetch and takes the full-prefetch lifetime. One already kept as
523
+ * learning-only because its page rendered dynamically is left for the full
524
+ * prefetch to replace: Next.js refetches it with `FetchStrategy.Full`, so the
525
+ * page reflects the cookies and headers at hover time.
526
+ */
527
+ function promotePrefetchCacheEntryForNavigation(cacheKey, entry) {
528
+ if (entry.dynamicStaleTime !== "learning-only") {
529
+ entry.cacheForNavigation = true;
530
+ return;
531
+ }
532
+ if (entry.cacheForNavigation === false) return;
533
+ entry.dynamicStaleTime = "full-prefetch";
534
+ if (entry.snapshot === void 0) return;
535
+ entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, entry.fallbackTtlMs ?? PREFETCH_CACHE_TTL, "full-prefetch");
536
+ schedulePrefetchInvalidation(cacheKey, entry);
537
+ }
516
538
  function invalidatePrefetchCacheEntry(cacheKey) {
517
539
  const cache = getPrefetchCache();
518
540
  const entry = cache.get(cacheKey);
@@ -837,6 +859,10 @@ function prefetchRscResponse(rscUrl, fetchPromise, interceptionContext = null, m
837
859
  searchAgnosticShell: behavior.searchAgnosticShell === true,
838
860
  timestamp: now
839
861
  };
862
+ if (behavior.dynamicStaleTime === "learning-only" && behavior.searchAgnosticShell !== true) {
863
+ entry.dynamicStaleTime = "learning-only";
864
+ entry.fallbackTtlMs = behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL;
865
+ }
840
866
  addPrefetchInvalidationCallback(entry, options?.onInvalidate);
841
867
  entry.fetchPromise = fetchPromise;
842
868
  entry.pending = fetchPromise.then(async (response) => {
@@ -847,8 +873,13 @@ function prefetchRscResponse(rscUrl, fetchPromise, interceptionContext = null, m
847
873
  entry.snapshot = snapshot;
848
874
  entry.size = snapshot.buffer.byteLength;
849
875
  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 {
876
+ const fallbackTtlMs = behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL;
877
+ const dynamicStaleTime = behavior.searchAgnosticShell === true ? "ignore" : entry.dynamicStaleTime ?? behavior.dynamicStaleTime ?? (behavior.optimisticRouteShell === true ? "ignore" : "verbatim");
878
+ if (dynamicStaleTime === "learning-only" && isStaleTimeSeconds(snapshot.dynamicStaleTimeSeconds)) {
879
+ entry.cacheForNavigation = false;
880
+ entry.expiresAt = entry.timestamp + Math.max(fallbackTtlMs, MIN_PREFETCH_STALE_TIME_MS);
881
+ } else entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, fallbackTtlMs, dynamicStaleTime === "learning-only" ? "verbatim" : dynamicStaleTime);
882
+ if (behavior.prepareSnapshot && entry.cacheForNavigation && snapshot.redirectHeader === void 0) try {
852
883
  const preparedElements = await behavior.prepareSnapshot(snapshot);
853
884
  if (cache.get(cacheKey) !== entry) return;
854
885
  entry.preparedElements = preparedElements;
@@ -952,8 +983,12 @@ async function consumePrefetchResponseForNavigation(rscUrl, interceptionContext
952
983
  if (options?.shouldConsume?.() === false) return null;
953
984
  const allowExpiredInFlightHandoff = entry.pending !== void 0;
954
985
  if (entry.pending !== void 0) {
955
- promoteAppPrefetchFetch(entry.fetchPromise);
956
- await entry.pending.catch(() => {});
986
+ const releaseClaim = promoteAppPrefetchFetch(entry.fetchPromise, options?.shouldConsume);
987
+ try {
988
+ await entry.pending.catch(() => {});
989
+ } finally {
990
+ releaseClaim();
991
+ }
957
992
  if (cache.get(cacheKey) !== entry) return null;
958
993
  if (options?.shouldConsume?.() === false) return null;
959
994
  }
@@ -1040,14 +1075,31 @@ let _cachedEmptyClientSearchParams = null;
1040
1075
  * be visible until the next commit.
1041
1076
  */
1042
1077
  function getSearchParamsSnapshot() {
1043
- if (getNavigationContext()) return getServerSearchParamsSnapshot();
1078
+ const hasAppContext = getNavigationContext() !== null;
1044
1079
  const pagesCtx = getPagesNavigationContext();
1045
- if (pagesCtx) return getReadonlyPagesSearchParams(pagesCtx.searchParams);
1046
- const cached = getClientNavigationState()?.cachedReadonlySearchParams;
1047
- if (cached) return cached;
1080
+ if (!hasAppContext && pagesCtx) return getReadonlyPagesSearchParams(pagesCtx.searchParams);
1081
+ const state = getClientNavigationState();
1082
+ if (state) {
1083
+ if (hasAppContext) adoptHydrationSearchParams(state);
1084
+ return state.cachedReadonlySearchParams;
1085
+ }
1048
1086
  if (_cachedEmptyClientSearchParams === null) _cachedEmptyClientSearchParams = new ReadonlyURLSearchParams();
1049
1087
  return _cachedEmptyClientSearchParams;
1050
1088
  }
1089
+ let _comparedHydrationSearchParams = null;
1090
+ /**
1091
+ * Keep the hydrated search params object when the browser URL has the same
1092
+ * query. React compares the two snapshots by identity once hydrated, so a new
1093
+ * object would re-render every useSearchParams() caller and re-run effects
1094
+ * keyed on it, where Next.js keeps one object from the first render.
1095
+ */
1096
+ function adoptHydrationSearchParams(state) {
1097
+ const hydrated = getServerSearchParamsSnapshot();
1098
+ if (hydrated === state.cachedReadonlySearchParams) return;
1099
+ if (hydrated === _comparedHydrationSearchParams) return;
1100
+ _comparedHydrationSearchParams = hydrated;
1101
+ if (hydrated.toString() === state.cachedReadonlySearchParams.toString()) state.cachedReadonlySearchParams = hydrated;
1102
+ }
1051
1103
  function syncCommittedUrlStateFromLocation() {
1052
1104
  const state = getClientNavigationState();
1053
1105
  if (!state) return false;
@@ -1465,6 +1517,11 @@ async function navigateClientSide(href, mode, scroll, programmaticTransition = f
1465
1517
  const fullHref = toCanonicalBrowserNavigationHref(normalizedHref, window.location.href, __basePath, __trailingSlash);
1466
1518
  notifyAppRouterTransitionStart(fullHref, mode);
1467
1519
  if (mode === "push") saveScrollPosition();
1520
+ const mpaNavigate = getNavigationRuntime()?.functions.navigateExternal;
1521
+ if (mpaNavigate) {
1522
+ await mpaNavigate(fullHref, mode);
1523
+ return;
1524
+ }
1468
1525
  hardNavigateTo(fullHref, mode);
1469
1526
  await new Promise(() => {});
1470
1527
  return;
@@ -1607,7 +1664,8 @@ const _appRouter = {
1607
1664
  if (prefetchHref == null) return;
1608
1665
  const fullHref = toAppPrefetchDestination(prefetchHref);
1609
1666
  if (fullHref === null) return;
1610
- const interceptionContext = getPrefetchInterceptionContext(fullHref);
1667
+ const currentPathname = window.location.pathname;
1668
+ let interceptionContext = getPrefetchInterceptionContext(fullHref, currentPathname);
1611
1669
  const mountedSlotsHeader = getMountedSlotsHeader();
1612
1670
  const headers = createAppPrefetchRequestHeaders({
1613
1671
  fetchPriority: "low",
@@ -1616,6 +1674,12 @@ const _appRouter = {
1616
1674
  });
1617
1675
  const setup = beginPrefetchSetup(fullHref);
1618
1676
  (async () => {
1677
+ const routeManifestLoad = loadNavigationRuntimeRouteManifest();
1678
+ if (routeManifestLoad !== null) {
1679
+ if (!await routeManifestLoad || setup.cancelled) return;
1680
+ interceptionContext = getPrefetchInterceptionContext(fullHref, currentPathname);
1681
+ if (interceptionContext !== null) headers.set(VINEXT_INTERCEPTION_CONTEXT_HEADER, interceptionContext);
1682
+ }
1619
1683
  if (HAS_CLIENT_REWRITES) await preloadHybridClientRouteOwner();
1620
1684
  const hybridOwner = resolveHybridClientRouteOwner(fullHref);
1621
1685
  if (hybridOwner === "pages" || hybridOwner === "document") return;
@@ -1623,7 +1687,7 @@ const _appRouter = {
1623
1687
  const kind = options?.kind === "full" ? "full" : "auto";
1624
1688
  const [{ resolveAutoAppRoutePrefetch, resolveFullAppRoutePrefetch }, { resolveAppPrefetchRscRequest }] = await Promise.all([import("./internal/app-route-prefetch-policy.js"), import("./internal/app-prefetch-rsc-request.js")]);
1625
1689
  if (setup.cancelled) return;
1626
- const policy = kind === "full" ? resolveFullAppRoutePrefetch() : resolveAutoAppRoutePrefetch(rewrittenPrefetchHref ?? fullHref);
1690
+ const policy = kind === "full" ? resolveFullAppRoutePrefetch() : resolveAutoAppRoutePrefetch(rewrittenPrefetchHref ?? fullHref, interceptionContext);
1627
1691
  const reusable = policy.shouldPrefetch && policy.cacheForNavigation;
1628
1692
  const requiresRouteTreePrefetch = policy.requiresRouteTreePrefetch === true;
1629
1693
  if (reusable && kind === "full") headers.delete(NEXT_ROUTER_PREFETCH_HEADER);
@@ -1635,7 +1699,7 @@ const _appRouter = {
1635
1699
  if (!reusable && kind === "auto") {
1636
1700
  headers.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
1637
1701
  headers.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
1638
- headers.set(VINEXT_RSC_RENDER_MODE_HEADER, hasSearchParams ? APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL : APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL);
1702
+ 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);
1639
1703
  }
1640
1704
  const { additionalRscUrls, rscUrl } = await resolveAppPrefetchRscRequest({
1641
1705
  fullHref,
@@ -1645,15 +1709,17 @@ const _appRouter = {
1645
1709
  if (setup.cancelled) return;
1646
1710
  const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
1647
1711
  const prefetched = getPrefetchedUrls();
1712
+ if (policy.dynamicStaleTime !== "full-prefetch" && hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) {
1713
+ attachPrefetchInvalidationCallback(cacheKey, options?.onInvalidate);
1714
+ return;
1715
+ }
1648
1716
  if (reusable) {
1649
- discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext);
1717
+ discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext, mountedSlotsHeader);
1650
1718
  if (hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, {
1651
1719
  additionalRscUrls,
1652
- onInvalidate: options?.onInvalidate
1720
+ onInvalidate: options?.onInvalidate,
1721
+ onReuse: policy.dynamicStaleTime === "full-prefetch" ? (entry, matchedCacheKey) => promotePrefetchCacheEntryForNavigation(matchedCacheKey, entry) : void 0
1653
1722
  })) return;
1654
- } else if (hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) {
1655
- attachPrefetchInvalidationCallback(cacheKey, options?.onInvalidate);
1656
- return;
1657
1723
  }
1658
1724
  prefetched.add(cacheKey);
1659
1725
  const fetchFullRscPayload = () => scheduleAppPrefetchFetch((signal) => fetch(rscUrl, {
@@ -1848,4 +1914,4 @@ if (!isServer) {
1848
1914
  }
1849
1915
  }
1850
1916
  //#endregion
1851
- 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 };
1917
+ 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, promotePrefetchCacheEntryForNavigation, 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 };
package/dist/shims/og.js CHANGED
@@ -1,4 +1,6 @@
1
+ import { shareIsolatePromise } from "../server/isolate-shared-promise.js";
1
2
  //#region src/shims/og.tsx
3
+ let vercelOg;
2
4
  const CACHE_HEADERS = {
3
5
  noCache: "no-cache, no-store",
4
6
  revalidate: "public, max-age=0, must-revalidate"
@@ -13,21 +15,43 @@ const CACHE_HEADERS = {
13
15
  var ImageResponse = class extends Response {
14
16
  static displayName = "ImageResponse";
15
17
  constructor(element, options) {
18
+ let startRendering;
19
+ const constructed = new Promise((resolve) => {
20
+ startRendering = resolve;
21
+ });
16
22
  const readable = new ReadableStream({ async start(controller) {
17
- const { ImageResponse: VercelImageResponse } = await import("@vercel/og");
18
- const imageResponse = new VercelImageResponse(element, options);
19
- if (!imageResponse.body) {
20
- controller.close();
21
- return;
23
+ await constructed;
24
+ if (options === null) throw new TypeError("Cannot read properties of null (reading 'headers')");
25
+ let settleInitialization;
26
+ if (!vercelOg) {
27
+ const loading = import("@vercel/og");
28
+ vercelOg = loading;
29
+ loading.catch(() => {
30
+ if (vercelOg === loading) vercelOg = void 0;
31
+ });
32
+ shareIsolatePromise(new Promise((resolve) => {
33
+ settleInitialization = resolve;
34
+ }));
22
35
  }
23
- const reader = imageResponse.body.getReader();
24
- while (true) {
25
- const { done, value } = await reader.read();
26
- if (done) {
36
+ try {
37
+ const { ImageResponse: VercelImageResponse } = await vercelOg;
38
+ const imageResponse = new VercelImageResponse(element, options);
39
+ if (!imageResponse.body) {
27
40
  controller.close();
28
41
  return;
29
42
  }
30
- controller.enqueue(value);
43
+ const reader = imageResponse.body.getReader();
44
+ while (true) {
45
+ const { done, value } = await reader.read();
46
+ settleInitialization?.();
47
+ if (done) {
48
+ controller.close();
49
+ return;
50
+ }
51
+ controller.enqueue(value);
52
+ }
53
+ } finally {
54
+ settleInitialization?.();
31
55
  }
32
56
  } });
33
57
  const headers = new Headers({
@@ -42,6 +66,7 @@ var ImageResponse = class extends Response {
42
66
  status: options?.status,
43
67
  statusText: options?.statusText
44
68
  });
69
+ startRendering();
45
70
  }
46
71
  };
47
72
  //#endregion
@@ -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 {};
@@ -38,6 +38,19 @@ export type ExecutionContextLike = {
38
38
  cache?: unknown;
39
39
  /** Server-owned origin for credential-bearing Pages revalidation loopbacks. */
40
40
  trustedRevalidateOrigin?: string;
41
+ /**
42
+ * Node production server signal that aborts when the client disconnects
43
+ * before the response finishes. Its Request only follows this signal, so the
44
+ * App RSC handler takes it from here (UnifiedRequestContext.requestSignal).
45
+ */
46
+ requestSignal?: AbortSignal;
47
+ /**
48
+ * Server-owned origin middleware runs against. Set by the Node production
49
+ * server, whose request URL comes from the client's Host header. Without it
50
+ * middleware uses the request URL's origin, which Workers can trust because
51
+ * the platform routes by hostname.
52
+ */
53
+ middlewareOrigin?: string;
41
54
  /** Worker-owned in-process dispatcher for authenticated Pages revalidation. */
42
55
  dispatchPagesRevalidate?: (request: Request) => Promise<Response>;
43
56
  /** Marks a request currently executing through the internal revalidation dispatcher. */