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
@@ -1,8 +1,9 @@
1
+ import { compareFolderNames } from "../utils/compare.js";
1
2
  import { runWithFetchDedupe } from "../shims/fetch-cache.js";
2
3
  import { searchParamsToRecord } from "../utils/query.js";
3
- import { mergeMetadataEntries, mergeViewport, postProcessMetadata, resolveModuleMetadata as resolveModuleMetadata$1, resolveModuleViewport } from "../shims/metadata.js";
4
- import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
4
+ import { mergeMetadataEntries, mergeParentMetadataEntries, mergeViewport, postProcessMetadata, resolveModuleMetadata as resolveModuleMetadata$1, resolveModuleViewport } from "../shims/metadata.js";
5
5
  import { tagAppPageMetadataError } from "./app-page-execution.js";
6
+ import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
6
7
  import { createAppMetadataModuleRoute, traceGenerateMetadata } from "./app-metadata-tracing.js";
7
8
  //#region src/server/app-page-head.ts
8
9
  /**
@@ -25,7 +26,8 @@ async function resolveModuleMetadata(moduleRoute, ...args) {
25
26
  }
26
27
  }
27
28
  function resolveActiveParallelRouteHeadInputs(options) {
28
- return Object.entries(options.slots ?? {}).map(([slotKey, slot]) => {
29
+ const slotEntries = Object.entries(options.slots ?? {});
30
+ return slotEntries.map(([slotKey, slot]) => {
29
31
  const ownerTreePosition = options.layoutTreePositions?.[slot.layoutIndex ?? 0] ?? 0;
30
32
  const ownerRouteSegments = options.routeSegments.slice(0, ownerTreePosition);
31
33
  const ownerParams = resolveAppPageSegmentParams(options.routeSegments, ownerTreePosition, options.params);
@@ -64,7 +66,8 @@ function resolveActiveParallelRouteHeadInputs(options) {
64
66
  notFoundModuleRouteSegments: interceptNotFoundRouteSegments,
65
67
  notFoundParams: interceptNotFoundParams
66
68
  } : {},
67
- ownerTreePosition
69
+ ownerTreePosition,
70
+ slotKey
68
71
  };
69
72
  }
70
73
  const slotRouteSegments = slot.routeSegments ?? options.routeSegments;
@@ -83,14 +86,85 @@ function resolveActiveParallelRouteHeadInputs(options) {
83
86
  ...slot.routeSegments ? {} : { moduleRouteSegments },
84
87
  routeSegments: slotRouteSegments
85
88
  },
86
- ...slot.notFound ? {
89
+ ...slot.notFound && slot.page ? {
87
90
  notFoundModule: slot.notFound,
88
91
  notFoundModuleRouteSegments: [...ownerRouteSegments, ...moduleRouteSegments.slice(0, slot.notFoundTreePosition ?? 0)],
89
92
  notFoundParams
90
93
  } : {},
91
- ownerTreePosition
94
+ ownerTreePosition,
95
+ slotKey
92
96
  };
93
- }).sort((left, right) => right.ownerTreePosition - left.ownerTreePosition);
97
+ }).map((input, index) => {
98
+ const [slotKey, slot] = slotEntries[index];
99
+ return {
100
+ directoryDepth: slot.ownerTreePosition ?? input.ownerTreePosition,
101
+ input,
102
+ name: slot.name ?? slotKey
103
+ };
104
+ }).sort((left, right) => right.directoryDepth - left.directoryDepth || compareFolderNames(left.name, right.name)).map(({ input }) => input);
105
+ }
106
+ /**
107
+ * Whether a slot intercept keeps the source route's head. Next.js's client
108
+ * renders the head of the first leaf on a children-first walk of its router
109
+ * tree that skips `default` segments, and a slot intercept keeps the leaves
110
+ * before its slot from the source route. When one of them is a page, such as
111
+ * the source page in `children`, the source head stays; otherwise the walk
112
+ * reaches the intercept's leaf, headed by the intercepting render.
113
+ * `sourceParallelRoutes` are the source route's own slot branches, in the
114
+ * walk's order (resolveActiveParallelRouteHeadInputs).
115
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/router-reducer/reducers/find-head-in-cache.ts
116
+ */
117
+ function slotInterceptKeepsSourceHead(options) {
118
+ const { route } = options;
119
+ if (route.page != null && (route.childrenSlot?.state ?? "active") === "active") return true;
120
+ const interceptIndex = options.sourceParallelRoutes.findIndex((input) => input.slotKey === options.interceptSlotKey);
121
+ return options.sourceParallelRoutes.slice(0, interceptIndex === -1 ? void 0 : interceptIndex).some((input) => input.head.pageModule != null);
122
+ }
123
+ /**
124
+ * Like Promise.all, but awaits the already-started promises one at a time, so
125
+ * the first rejection in this order wins, not the first to settle. Next.js's
126
+ * accumulateMetadata and accumulateViewport await their loader-tree items this
127
+ * way, so an earlier segment's signal beats a later one's. Each promise is
128
+ * handled up front, so none rejects unhandled.
129
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolve-metadata.ts
130
+ */
131
+ async function allInOrder(promises) {
132
+ for (const promise of promises) promise.catch(() => null);
133
+ const results = [];
134
+ for (const promise of promises) results.push(await promise);
135
+ return results;
136
+ }
137
+ /**
138
+ * A segment's `parent` that records a rejection its resolver saw, through
139
+ * `await` or any other `then()`, so that an error the resolver took from
140
+ * `parent` can be told from its own, even when both are the same value.
141
+ */
142
+ var ObservedParent = class extends Promise {
143
+ static get [Symbol.species]() {
144
+ return Promise;
145
+ }
146
+ rejection = null;
147
+ /** Whether the resolver read it, and what to call when it first does. */
148
+ read = false;
149
+ onRead = null;
150
+ then(onFulfilled, onRejected) {
151
+ if (!this.read) {
152
+ this.read = true;
153
+ this.onRead?.();
154
+ }
155
+ return super.then(onFulfilled, (error) => {
156
+ this.rejection = { error };
157
+ if (onRejected) return onRejected(error);
158
+ throw error;
159
+ });
160
+ }
161
+ };
162
+ function observeParent(parent) {
163
+ const observed = new ObservedParent((resolveParent, rejectParent) => {
164
+ parent.then(resolveParent, rejectParent);
165
+ });
166
+ Promise.prototype.then.call(observed, void 0, () => null);
167
+ return observed;
94
168
  }
95
169
  function isPresent(value) {
96
170
  return value !== null && value !== void 0;
@@ -145,113 +219,201 @@ function createLayoutInputs(layoutModules, layoutTreePositions) {
145
219
  }
146
220
  return layoutInputs;
147
221
  }
148
- async function resolveLayoutMetadata(layoutInputs, params, routeSegments) {
149
- const layoutMetadataPromises = [];
150
- let accumulatedMetadata = Promise.resolve({});
151
- for (const layoutInput of layoutInputs) {
152
- const parentForLayout = accumulatedMetadata;
153
- const layoutParams = resolveAppPageSegmentParams(routeSegments, layoutInput.treePosition, params);
154
- const metadataPromise = resolveModuleMetadata(createAppMetadataModuleRoute(routeSegments.slice(0, layoutInput.treePosition), "layout"), layoutInput.module, layoutParams, void 0, parentForLayout);
155
- layoutMetadataPromises.push(metadataPromise);
156
- metadataPromise.catch(() => null);
157
- accumulatedMetadata = metadataPromise.then(async (metadataResult) => {
158
- if (metadataResult) return mergeMetadataEntries([{ metadata: await parentForLayout }, { metadata: metadataResult }]);
159
- return parentForLayout;
160
- });
161
- accumulatedMetadata.catch(() => null);
162
- }
163
- return Promise.all(layoutMetadataPromises);
164
- }
165
- function resolveLayoutViewport(layoutInputs, params, routeSegments) {
166
- const viewportPromises = [];
167
- let accumulatedViewport = Promise.resolve(mergeViewport([]));
168
- for (const layoutInput of layoutInputs) {
169
- const parentForLayout = accumulatedViewport;
170
- const layoutParams = resolveAppPageSegmentParams(routeSegments, layoutInput.treePosition, params);
171
- const viewportPromise = resolveModuleViewport(layoutInput.module, layoutParams, void 0, parentForLayout);
172
- viewportPromises.push(viewportPromise);
173
- viewportPromise.catch(() => null);
174
- accumulatedViewport = mergeResolvedViewport(parentForLayout, viewportPromise);
175
- accumulatedViewport.catch(() => null);
176
- }
222
+ /** The walk's accumulated metadata, with its resolved title as the shown string. */
223
+ function toShownMetadata(accumulated) {
224
+ const title = accumulated.title;
225
+ if (title === void 0 || typeof title === "string") return accumulated;
177
226
  return {
178
- resolvedViewport: accumulatedViewport,
179
- viewportResults: Promise.all(viewportPromises)
227
+ ...accumulated,
228
+ title: title.absolute || void 0
180
229
  };
181
230
  }
182
- function mergeResolvedViewport(parent, viewport) {
183
- return Promise.all([parent, viewport]).then(([resolvedParent, resolvedViewport]) => resolvedViewport ? mergeViewport([resolvedParent, resolvedViewport]) : resolvedParent);
184
- }
185
231
  function getParallelRouteModules(parallelRoute) {
186
232
  return [...parallelRoute.layoutModules ?? [], parallelRoute.layoutModule].filter(isPresent);
187
233
  }
188
234
  function parallelRouteHasDynamicMetadata(parallelRoute) {
189
235
  return getParallelRouteModules(parallelRoute).some(hasGenerateMetadata) || hasGenerateMetadata(parallelRoute.pageModule);
190
236
  }
191
- async function resolveParallelRouteMetadata(parallelRoute, fallbackParams, fallbackRouteSegments, pageSearchParams, parent, searchParamsObserver) {
237
+ function createRouteHeadBranch(layoutInputs, routeSegments, params, pageModule) {
238
+ const segments = layoutInputs.map((layoutInput) => ({
239
+ module: layoutInput.module,
240
+ moduleRoute: createAppMetadataModuleRoute(routeSegments.slice(0, layoutInput.treePosition), "layout"),
241
+ page: false,
242
+ params: resolveAppPageSegmentParams(routeSegments, layoutInput.treePosition, params)
243
+ }));
244
+ if (pageModule) segments.push({
245
+ module: pageModule,
246
+ moduleRoute: createAppMetadataModuleRoute(routeSegments, "page"),
247
+ page: true,
248
+ params
249
+ });
250
+ return {
251
+ routeSegments,
252
+ segments
253
+ };
254
+ }
255
+ function createParallelRouteHeadBranch(parallelRoute, fallbackParams, fallbackRouteSegments) {
192
256
  const params = parallelRoute.params ?? fallbackParams;
193
257
  const routeSegments = parallelRoute.routeSegments ?? fallbackRouteSegments;
194
258
  const moduleRoutePrefixSegments = parallelRoute.moduleRoutePrefixSegments ?? [];
195
259
  const moduleRouteSegments = parallelRoute.moduleRouteSegments ?? routeSegments;
196
- const metadataResults = [];
197
- const metadataSources = [];
198
- let accumulatedMetadata = parent;
199
- const layoutModules = getParallelRouteModules(parallelRoute);
200
260
  const layoutTreePositions = parallelRoute.layoutTreePositions ?? [];
201
261
  const layoutParams = parallelRoute.layoutParams ?? [];
202
- for (const [index, layoutModule] of layoutModules.entries()) {
203
- const currentLayoutParams = layoutParams[index] ?? resolveParallelLayoutParams(routeSegments, layoutTreePositions[index] ?? 0, params);
204
- const layoutMetadata = await resolveModuleMetadata(createAppMetadataModuleRoute([...moduleRoutePrefixSegments, ...moduleRouteSegments.slice(0, layoutTreePositions[index] ?? 0)], "layout"), layoutModule, currentLayoutParams, void 0, accumulatedMetadata);
205
- metadataResults.push(layoutMetadata);
206
- metadataSources.push({
207
- metadata: layoutMetadata,
208
- routeSegments
209
- });
210
- if (layoutMetadata) {
211
- accumulatedMetadata = accumulatedMetadata.then(async (parentMetadata) => mergeMetadataEntries([{ metadata: parentMetadata }, { metadata: layoutMetadata }]));
212
- accumulatedMetadata.catch(() => null);
213
- }
214
- }
215
- if (parallelRoute.pageModule) {
216
- const pageMetadata = await resolveModuleMetadata(createAppMetadataModuleRoute([...moduleRoutePrefixSegments, ...moduleRouteSegments], "page"), parallelRoute.pageModule, params, pageSearchParams, accumulatedMetadata, searchParamsObserver);
217
- metadataResults.push(pageMetadata);
218
- metadataSources.push({
219
- metadata: pageMetadata,
220
- routeSegments
221
- });
222
- }
262
+ const segments = getParallelRouteModules(parallelRoute).map((module, index) => ({
263
+ module,
264
+ moduleRoute: createAppMetadataModuleRoute([...moduleRoutePrefixSegments, ...moduleRouteSegments.slice(0, layoutTreePositions[index] ?? 0)], "layout"),
265
+ page: false,
266
+ params: layoutParams[index] ?? resolveParallelLayoutParams(routeSegments, layoutTreePositions[index] ?? 0, params)
267
+ }));
268
+ if (parallelRoute.pageModule) segments.push({
269
+ module: parallelRoute.pageModule,
270
+ moduleRoute: createAppMetadataModuleRoute([...moduleRoutePrefixSegments, ...moduleRouteSegments], "page"),
271
+ page: true,
272
+ params
273
+ });
223
274
  return {
224
- metadataResults,
225
- metadataSources
275
+ routeSegments,
276
+ segments
226
277
  };
227
278
  }
228
- function resolveParallelRouteViewport(parallelRoute, fallbackParams, fallbackRouteSegments, pageSearchParams, parent, searchParamsObserver) {
229
- const params = parallelRoute.params ?? fallbackParams;
230
- const routeSegments = parallelRoute.routeSegments ?? fallbackRouteSegments;
231
- const layoutModules = getParallelRouteModules(parallelRoute);
232
- const layoutTreePositions = parallelRoute.layoutTreePositions ?? [];
233
- const layoutParams = parallelRoute.layoutParams ?? [];
234
- const viewportPromises = [];
235
- let accumulatedViewport = parent;
236
- for (const [index, layoutModule] of layoutModules.entries()) {
237
- const parentForLayout = accumulatedViewport;
238
- const viewportPromise = resolveModuleViewport(layoutModule, layoutParams[index] ?? resolveParallelLayoutParams(routeSegments, layoutTreePositions[index] ?? 0, params), void 0, parentForLayout);
239
- viewportPromises.push(viewportPromise);
240
- viewportPromise.catch(() => null);
241
- accumulatedViewport = mergeResolvedViewport(parentForLayout, viewportPromise);
242
- accumulatedViewport.catch(() => null);
243
- }
244
- if (parallelRoute.pageModule) {
245
- const parentForPage = accumulatedViewport;
246
- const viewportPromise = resolveModuleViewport(parallelRoute.pageModule, params, pageSearchParams, parentForPage, searchParamsObserver);
247
- viewportPromises.push(viewportPromise);
248
- viewportPromise.catch(() => null);
249
- accumulatedViewport = mergeResolvedViewport(parentForPage, viewportPromise);
250
- accumulatedViewport.catch(() => null);
279
+ /** A hidden branch without the layouts it shares with its slot, which resolve once. */
280
+ function createHiddenHeadBranch(hidden, slot, fallbackParams, fallbackRouteSegments) {
281
+ const branch = createParallelRouteHeadBranch(hidden.route, fallbackParams, fallbackRouteSegments);
282
+ const sharedLayoutCount = slot ? Math.min(hidden.sharedLayoutCount, slot.segments.filter((segment) => !segment.page).length) : 0;
283
+ return {
284
+ parallelRouteIndex: slot ? hidden.parallelRouteIndex : -1,
285
+ routeSegments: branch.routeSegments,
286
+ segments: branch.segments.filter((segment, index) => segment.page || index >= sharedLayoutCount),
287
+ sharedLayoutCount
288
+ };
289
+ }
290
+ /**
291
+ * Start an item with everything resolved before it as `parent`, and merge its
292
+ * value into that once both settle. Like Next.js's getResult, the resolver
293
+ * starts now; like its accumulateMetadata and accumulateViewport, the merge
294
+ * waits for the items before it, and its failure is the item's own error.
295
+ *
296
+ * With `deferParentErrors`, `error` never waits on `parent`: what can only be
297
+ * known after it goes to `deferredError` instead.
298
+ */
299
+ function startAppPageHeadItem(kind, segment, parent, deferParentErrors = false) {
300
+ const observedParent = observeParent(parent);
301
+ const parentRead = new Promise((resolve) => {
302
+ observedParent.onRead = () => resolve(null);
303
+ });
304
+ const result = kind.resolve(segment, observedParent);
305
+ result.catch(() => null);
306
+ const resolved = parent.then((resolvedParent) => result.then((value) => value ? kind.merge(resolvedParent, value) : resolvedParent));
307
+ resolved.catch(() => null);
308
+ const mergeError = result.then((value) => value ? parent.then(() => resolved.then(() => null), () => null) : null, () => null);
309
+ const ownError = result.then(() => null, (error) => {
310
+ const rejection = observedParent.rejection;
311
+ if (rejection && Object.is(rejection.error, error)) return null;
312
+ throw error;
313
+ });
314
+ mergeError.catch(() => null);
315
+ ownError.catch(() => null);
316
+ if (!deferParentErrors) {
317
+ const error = ownError.then(() => mergeError);
318
+ error.catch(() => null);
319
+ return {
320
+ deferredError: null,
321
+ error,
322
+ resolved,
323
+ result
324
+ };
251
325
  }
326
+ const readFirst = result.then(() => observedParent.read, () => observedParent.read);
327
+ const error = Promise.race([parentRead, readFirst.then((read) => read ? null : ownError)]);
328
+ const deferredError = readFirst.then((read) => read ? ownError.then(() => mergeError) : mergeError);
329
+ error.catch(() => null);
330
+ deferredError.catch(() => null);
252
331
  return {
253
- resolvedViewport: accumulatedViewport,
254
- viewportResults: Promise.all(viewportPromises)
332
+ deferredError,
333
+ error,
334
+ resolved,
335
+ result
336
+ };
337
+ }
338
+ /**
339
+ * Start metadata or viewport for every item, then merge their values one at
340
+ * a time, in loader-tree order, as Next.js's prerenderMetadata and
341
+ * accumulateMetadata (and their viewport twins) do. Next.js walks the tree
342
+ * depth first, `children` before the named slots: the route's layouts and
343
+ * page, then each slot's. A hidden branch starts in its slot's place, after
344
+ * the layouts they share, from everything resolved there, and its values stay
345
+ * out of the shown head.
346
+ *
347
+ * The items of a hidden branch and of the slot at `outletIndex` are the
348
+ * slot's. Like Next.js, which throws only the first error, an error of theirs
349
+ * counts only once everything before their branch resolved: one before it
350
+ * belongs to that earlier item, and never also throws inside the slot.
351
+ *
352
+ * The route's errors never wait on the outlet branch, whose resolvers may
353
+ * never settle. A route item after it counts its resolver's error in place
354
+ * until the resolver reads `parent`; what is only known after `parent`, a
355
+ * failed merge or an error after reading it, is deferred until every route
356
+ * error in place is known.
357
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolve-metadata.ts
358
+ */
359
+ function walkAppPageHead(kind, route, slots, hiddenBranches, outletIndex) {
360
+ const errors = [];
361
+ const deferredErrors = [];
362
+ let resolved = Promise.resolve(kind.initial);
363
+ let slotBranchParent = null;
364
+ let afterOutlet = false;
365
+ const start = (segment, parent) => {
366
+ const item = startAppPageHeadItem(kind, segment, parent, !slotBranchParent && afterOutlet);
367
+ if (item.deferredError) deferredErrors.push(item.deferredError);
368
+ if (slotBranchParent) {
369
+ const error = slotBranchParent.then(() => item.error, () => null);
370
+ error.catch(() => null);
371
+ errors.push({
372
+ error,
373
+ owner: "slot"
374
+ });
375
+ } else errors.push({
376
+ error: item.error,
377
+ owner: "route"
378
+ });
379
+ return item;
380
+ };
381
+ const startShown = (segment) => {
382
+ const item = start(segment, resolved);
383
+ resolved = item.resolved;
384
+ return item.result;
385
+ };
386
+ const startHidden = (parallelRouteIndex, sharedLayoutCount) => {
387
+ for (const hidden of hiddenBranches) {
388
+ if (hidden.parallelRouteIndex !== parallelRouteIndex || hidden.sharedLayoutCount !== sharedLayoutCount) continue;
389
+ const shownBranchParent = slotBranchParent;
390
+ slotBranchParent = resolved;
391
+ let parent = resolved;
392
+ for (const segment of hidden.segments) parent = start(segment, parent).resolved;
393
+ slotBranchParent = shownBranchParent;
394
+ }
395
+ };
396
+ const routeResults = route.segments.map(startShown);
397
+ const slotResults = slots.map((slot, index) => {
398
+ slotBranchParent = index === outletIndex ? resolved : null;
399
+ let layoutCount = 0;
400
+ const results = slot.segments.map((segment) => {
401
+ startHidden(index, layoutCount);
402
+ if (!segment.page) layoutCount++;
403
+ return startShown(segment);
404
+ });
405
+ if (!slot.segments.at(-1)?.page) startHidden(index, layoutCount);
406
+ slotBranchParent = null;
407
+ if (index === outletIndex && results.length > 0) afterOutlet = true;
408
+ return results;
409
+ });
410
+ startHidden(-1, 0);
411
+ return {
412
+ deferredErrors,
413
+ errors,
414
+ resolved,
415
+ route: routeResults,
416
+ slots: slotResults
255
417
  };
256
418
  }
257
419
  /**
@@ -266,7 +428,7 @@ function resolveOrderedAppPageMetadata(options) {
266
428
  const metadataPromises = [];
267
429
  let accumulatedEntriesPromise = Promise.resolve([]);
268
430
  for (const source of options.sources) {
269
- const parentPromise = accumulatedEntriesPromise.then((entries) => entries.length > 0 ? mergeMetadataEntries(entries) : {});
431
+ const parentPromise = accumulatedEntriesPromise.then((entries) => entries.length > 0 ? mergeParentMetadataEntries(entries) : {});
270
432
  const metadataPromise = resolveModuleMetadata(source.moduleRoute, source.module, source.params, source.searchParams, parentPromise, source.searchParamsObserver);
271
433
  metadataPromises.push(metadataPromise);
272
434
  metadataPromise.catch(() => null);
@@ -288,8 +450,10 @@ async function resolveAppPageHead(options) {
288
450
  const prepared = prepareAppPageHead(options);
289
451
  const [metadata, viewport] = await Promise.all([prepared.metadata, prepared.viewport]);
290
452
  return {
291
- ...prepared,
453
+ hasDynamicMetadata: prepared.hasDynamicMetadata,
454
+ hasSearchParams: prepared.hasSearchParams,
292
455
  metadata,
456
+ pageSearchParams: prepared.pageSearchParams,
293
457
  viewport
294
458
  };
295
459
  }
@@ -298,7 +462,7 @@ async function resolveAppPageHead(options) {
298
462
  * from the modules alone, so callers can place the head before resolving it.
299
463
  */
300
464
  function hasAppPageDynamicMetadata(options) {
301
- return options.layoutModules.some(hasGenerateMetadata) || hasGenerateMetadata(options.pageModule) || (options.parallelRoutes ?? []).some(parallelRouteHasDynamicMetadata);
465
+ return options.layoutModules.some(hasGenerateMetadata) || hasGenerateMetadata(options.pageModule) || (options.parallelRoutes ?? []).some(parallelRouteHasDynamicMetadata) || (options.hiddenParallelRoutes ?? []).some((hidden) => parallelRouteHasDynamicMetadata(hidden.route));
302
466
  }
303
467
  /**
304
468
  * Start metadata and viewport resolution without coupling their completion.
@@ -316,73 +480,64 @@ function prepareAppPageHeadInner(options) {
316
480
  const layoutInputs = createLayoutInputs(options.layoutModules, layoutTreePositions);
317
481
  const layoutSourcePositions = layoutInputs.map((input) => input.treePosition);
318
482
  const { hasSearchParams, pageSearchParams } = collectAppPageSearchParams(options.searchParams);
319
- const layoutMetadataPromise = resolveLayoutMetadata(layoutInputs, options.params, routeSegments);
320
- const layoutViewport = resolveLayoutViewport(layoutInputs, options.params, routeSegments);
321
- const layoutViewportPromise = layoutViewport.viewportResults;
322
- const layoutMetadataResultsForParent = layoutMetadataPromise.then((metadataResults) => metadataResults.filter(isPresent));
323
- layoutMetadataResultsForParent.catch(() => null);
324
- const pageParentPromise = layoutMetadataResultsForParent.then((metadataResults) => metadataResults.length > 0 ? mergeMetadataEntries(metadataResults.map((metadata) => ({ metadata }))) : {});
325
- pageParentPromise.catch(() => null);
326
- const pageMetadataPromise = options.pageModule ? resolveModuleMetadata(createAppMetadataModuleRoute(routeSegments, "page"), options.pageModule, options.params, pageSearchParams, pageParentPromise, options.searchParamsObserver) : Promise.resolve(null);
327
483
  const parallelRoutes = options.parallelRoutes ?? [];
328
- const parallelRouteMetadataPromise = Promise.all(parallelRoutes.map((parallelRoute) => resolveParallelRouteMetadata(parallelRoute, options.params, routeSegments, pageSearchParams, pageParentPromise, options.searchParamsObserver)));
329
- const parallelRouteViewportPromises = [];
330
- let accumulatedViewport = layoutViewport.resolvedViewport;
331
- const pageParentViewport = accumulatedViewport;
332
- const pageViewportPromise = options.pageModule ? resolveModuleViewport(options.pageModule, options.params, pageSearchParams, pageParentViewport, options.searchParamsObserver) : Promise.resolve(null);
333
- if (options.pageModule) {
334
- accumulatedViewport = mergeResolvedViewport(pageParentViewport, pageViewportPromise);
335
- accumulatedViewport.catch(() => null);
336
- }
337
- for (const parallelRoute of parallelRoutes) {
338
- const parallelViewport = resolveParallelRouteViewport(parallelRoute, options.params, routeSegments, pageSearchParams, accumulatedViewport, options.searchParamsObserver);
339
- parallelRouteViewportPromises.push(parallelViewport.viewportResults);
340
- accumulatedViewport = parallelViewport.resolvedViewport;
341
- }
342
- const parallelRouteViewportPromise = Promise.all(parallelRouteViewportPromises);
484
+ const route = createRouteHeadBranch(layoutInputs, routeSegments, options.params, options.pageModule);
485
+ const slots = parallelRoutes.map((parallelRoute) => createParallelRouteHeadBranch(parallelRoute, options.params, routeSegments));
486
+ const hiddenBranches = (options.hiddenParallelRoutes ?? []).map((hidden) => createHiddenHeadBranch(hidden, slots[hidden.parallelRouteIndex], options.params, routeSegments));
487
+ const outletIndex = options.outletParallelRouteIndex != null && options.outletParallelRouteIndex in slots ? options.outletParallelRouteIndex : -1;
488
+ const segmentSearchParams = (segment) => segment.page ? pageSearchParams : void 0;
489
+ const segmentSearchParamsObserver = (segment) => segment.page ? options.searchParamsObserver : void 0;
490
+ const metadataWalk = walkAppPageHead({
491
+ initial: {},
492
+ merge: (resolved, metadata) => {
493
+ try {
494
+ return mergeParentMetadataEntries([{ metadata: resolved }, { metadata }]);
495
+ } catch (error) {
496
+ throw tagAppPageMetadataError(error);
497
+ }
498
+ },
499
+ resolve: (segment, parent) => resolveModuleMetadata(segment.moduleRoute, segment.module, segment.params, segmentSearchParams(segment), parent, segmentSearchParamsObserver(segment))
500
+ }, route, slots, hiddenBranches, outletIndex);
501
+ const viewportWalk = walkAppPageHead({
502
+ initial: mergeViewport([]),
503
+ merge: (resolved, viewport) => mergeViewport([resolved, viewport]),
504
+ resolve: (segment, parent) => resolveModuleViewport(segment.module, segment.params, segmentSearchParams(segment), parent, segmentSearchParamsObserver(segment))
505
+ }, route, slots, hiddenBranches, outletIndex);
343
506
  const hasDynamicMetadata = hasAppPageDynamicMetadata(options);
344
- const metadata = Promise.all([
345
- layoutMetadataPromise,
346
- pageMetadataPromise,
347
- parallelRouteMetadataPromise
348
- ]).then(async ([layoutMetadataResults, pageMetadata, parallelRouteMetadata]) => {
349
- const parallelMetadataResults = parallelRouteMetadata.flatMap((head) => head.metadataResults);
350
- const parallelMetadataSources = parallelRouteMetadata.flatMap((head) => head.metadataSources);
351
- const primaryPageHasTitle = pageMetadata != null && pageMetadata.title !== void 0;
352
- const metadataEntries = [
353
- ...layoutMetadataResults.filter(isPresent).map((entry) => ({ metadata: entry })),
354
- ...pageMetadata ? [{
355
- isPage: true,
356
- metadata: pageMetadata
357
- }] : [],
358
- ...parallelMetadataResults.filter(isPresent).map((entry) => ({
359
- contributesTitle: !primaryPageHasTitle,
360
- metadata: entry
361
- }))
362
- ];
363
- const resolvedMetadataBase = metadataEntries.length > 0 ? mergeMetadataEntries(metadataEntries) : null;
507
+ const metadata = metadataWalk.resolved.then(async (accumulated) => {
508
+ const [routeResults, slotResults] = await Promise.all([Promise.all(metadataWalk.route), Promise.all(metadataWalk.slots.map((results) => Promise.all(results)))]);
509
+ const layoutMetadataResults = routeResults.slice(0, layoutInputs.length);
510
+ const pageMetadata = options.pageModule ? routeResults[layoutInputs.length] ?? null : null;
511
+ const hasMetadata = [...routeResults, ...slotResults.flat()].some(isPresent);
364
512
  const metadataSources = createMetadataSources(layoutMetadataResults, routeSegments, layoutSourcePositions, pageMetadata, Boolean(options.pageModule));
365
- metadataSources.push(...parallelMetadataSources);
366
- return finalizeAppPageMetadata(resolvedMetadataBase, metadataSources, options);
513
+ metadataSources.push(...slotResults.flatMap((results, index) => results.map((entry) => ({
514
+ metadata: entry,
515
+ routeSegments: slots[index].routeSegments
516
+ }))));
517
+ return finalizeAppPageMetadata(hasMetadata ? toShownMetadata(accumulated) : null, metadataSources, options);
367
518
  });
368
- const viewport = Promise.all([
369
- layoutViewportPromise,
370
- pageViewportPromise,
371
- parallelRouteViewportPromise
372
- ]).then(([layoutViewportResults, pageViewport, parallelRouteViewports]) => mergeViewport([
373
- ...layoutViewportResults.filter(isPresent),
374
- ...pageViewport ? [pageViewport] : [],
375
- ...parallelRouteViewports.flat().filter(isPresent)
376
- ]));
519
+ const viewport = viewportWalk.resolved;
377
520
  metadata.catch(() => null);
378
521
  viewport.catch(() => null);
522
+ const metadataHeadError = metadataWalk.resolved.then(() => metadata.then(() => null), () => null);
523
+ const headErrorOwner = outletIndex === -1 ? "route" : "slot";
524
+ const errorsOf = (owner) => {
525
+ const walkErrors = (walk, headErrors) => allInOrder([...walk.errors.flatMap((item) => item.owner === owner ? [item.error] : []), ...headErrors]).then(() => owner === "route" ? allInOrder(walk.deferredErrors) : null);
526
+ return Promise.all([walkErrors(metadataWalk, headErrorOwner === owner ? [metadataHeadError] : []), walkErrors(viewportWalk, [])]).then(() => null);
527
+ };
528
+ const hiddenErrors = errorsOf("slot");
529
+ hiddenErrors.catch(() => null);
530
+ const routeErrors = errorsOf("route");
531
+ routeErrors.catch(() => null);
379
532
  return {
380
533
  hasDynamicMetadata,
381
534
  hasSearchParams,
535
+ hiddenErrors,
382
536
  metadata,
383
537
  pageSearchParams,
538
+ routeErrors,
384
539
  viewport
385
540
  };
386
541
  }
387
542
  //#endregion
388
- export { collectAppPageSearchParams, hasAppPageDynamicMetadata, prepareAppPageHead, resolveActiveParallelRouteHeadInputs, resolveAppPageHead, resolveOrderedAppPageMetadata };
543
+ export { collectAppPageSearchParams, hasAppPageDynamicMetadata, prepareAppPageHead, resolveActiveParallelRouteHeadInputs, resolveAppPageHead, resolveOrderedAppPageMetadata, slotInterceptKeepsSourceHead };
@@ -1,6 +1,6 @@
1
1
  import { MetadataFileRoute } from "./metadata-routes.js";
2
2
  import { AppPageParams } from "./app-page-boundary.js";
3
- import { Metadata, ResolvedViewport } from "../shims/metadata.js";
3
+ import { Metadata, ResolvedViewport, Viewport } from "../shims/metadata.js";
4
4
  import { ActiveParallelRouteHeadInput, AppPageHeadModule, ApplyAppPageFileBasedMetadata, OrderedAppPageMetadataSource } from "./app-page-head.js";
5
5
  //#region src/server/app-page-http-access-fallback-metadata.d.ts
6
6
  type HttpAccessFallbackMetadataPlanOptions<TModule extends AppPageHeadModule = AppPageHeadModule> = {
@@ -26,5 +26,51 @@ type ResolveHttpAccessFallbackMetadataOptions<TModule extends AppPageHeadModule
26
26
  };
27
27
  export declare function createHttpAccessFallbackMetadataPlan<TModule extends AppPageHeadModule>(options: HttpAccessFallbackMetadataPlanOptions<TModule>): OrderedAppPageMetadataSource<TModule>[];
28
28
  export declare function resolveHttpAccessFallbackMetadata<TModule extends AppPageHeadModule>(options: ResolveHttpAccessFallbackMetadataOptions<TModule>): Promise<Metadata | null>;
29
+ type RouteNotFoundHeadPlanRoute<TModule extends AppPageHeadModule> = {
30
+ layouts?: readonly (TModule | null | undefined)[];
31
+ layoutTreePositions?: readonly number[] | null;
32
+ notFound?: TModule | null;
33
+ notFounds?: readonly (TModule | null | undefined)[] | null;
34
+ notFoundTreePosition?: number | null;
35
+ routeSegments?: readonly string[] | null;
36
+ };
37
+ /**
38
+ * The not-found head a route's own head falls back to. Like Next.js's
39
+ * metadata tree, every HTTP access signal from generateMetadata() or
40
+ * generateViewport() resolves through the not-found convention, whichever
41
+ * signal the route's render threw.
42
+ */
43
+ export declare function createRouteNotFoundHeadPlanOptions<TModule extends AppPageHeadModule>(options: {
44
+ parallelBranches: readonly ActiveParallelRouteHeadInput<TModule>[];
45
+ params: AppPageParams;
46
+ primaryParallelBranch: ActiveParallelRouteHeadInput<TModule> | null;
47
+ rootNotFoundModule?: TModule | null;
48
+ route: RouteNotFoundHeadPlanRoute<TModule>;
49
+ }): HttpAccessFallbackMetadataPlanOptions<TModule>;
50
+ /**
51
+ * Settle each branch of a route's head on its own, as Next.js's MetadataTree
52
+ * and ViewportTree do: an HTTP access signal from generateMetadata() keeps the
53
+ * resolved viewport and resolves the metadata through the not-found
54
+ * convention, and the same holds the other way round. Any other error leaves
55
+ * that branch empty; the route's render reports it where it renders.
56
+ *
57
+ * A `dynamic = "error"` access error leaves its branch empty too, but
58
+ * `accessError` keeps it, whether the route's head or the not-found head it
59
+ * recovers through threw it: Next.js fails such a render even where its
60
+ * metadata trees drop the error, so a fallback without the route's outlet
61
+ * rethrows it.
62
+ */
63
+ export declare function recoverAppPageRouteHead<TModule extends AppPageHeadModule>(head: {
64
+ metadata: Promise<Metadata | null>;
65
+ viewport: Promise<ResolvedViewport>;
66
+ }, options: Omit<ResolveHttpAccessFallbackMetadataOptions<TModule>, keyof HttpAccessFallbackMetadataPlanOptions<TModule>> & {
67
+ resolvePlanOptions: () => HttpAccessFallbackMetadataPlanOptions<TModule>;
68
+ }): {
69
+ accessError: Promise<Error | null>;
70
+ metadata: Promise<Metadata | null>;
71
+ /** `null` when the branch failed: like Next.js's, the head then has no viewport tags. */
72
+ viewport: Promise<Viewport | null>;
73
+ };
29
74
  export declare function resolveHttpAccessFallbackViewport<TModule extends AppPageHeadModule>(options: HttpAccessFallbackMetadataPlanOptions<TModule>): Promise<ResolvedViewport>;
30
- //#endregion
75
+ //#endregion
76
+ export {};