vinext 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/README.md +5 -2
  2. package/THIRD_PARTY_LICENSES.md +47 -0
  3. package/dist/_virtual/_rolldown/runtime.js +4 -3
  4. package/dist/build/action-owner-manifest.d.ts +3 -2
  5. package/dist/build/action-owner-manifest.js +18 -2
  6. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  7. package/dist/build/app-page-static-eligibility.js +80 -13
  8. package/dist/build/clean-output.d.ts +2 -1
  9. package/dist/build/client-build-config.d.ts +13 -3
  10. package/dist/build/client-build-config.js +46 -9
  11. package/dist/build/client-reference-async.d.ts +48 -0
  12. package/dist/build/client-reference-async.js +123 -0
  13. package/dist/build/client-reference-chunks.d.ts +32 -0
  14. package/dist/build/client-reference-chunks.js +111 -0
  15. package/dist/build/client-reference-groups.d.ts +9 -1
  16. package/dist/build/client-reference-groups.js +40 -2
  17. package/dist/build/css-url-assets.d.ts +2 -1
  18. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  19. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  20. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  21. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  22. package/dist/build/google-fonts/validate.d.ts +2 -1
  23. package/dist/build/inline-css.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +2 -1
  25. package/dist/build/next-client-runtime-manifests.d.ts +2 -1
  26. package/dist/build/precompress.d.ts +2 -1
  27. package/dist/build/precompress.js +1 -1
  28. package/dist/build/prerender-paths.d.ts +2 -1
  29. package/dist/build/prerender-phase.d.ts +2 -1
  30. package/dist/build/prerender-server-pool.js +1 -1
  31. package/dist/build/prerender.d.ts +3 -2
  32. package/dist/build/prerender.js +6 -5
  33. package/dist/build/report.d.ts +2 -15
  34. package/dist/build/report.js +1 -51
  35. package/dist/build/run-prerender.d.ts +2 -1
  36. package/dist/build/server-actions-encryption-key.d.ts +2 -1
  37. package/dist/build/ssr-manifest.js +25 -2
  38. package/dist/build/standalone.d.ts +2 -1
  39. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  40. package/dist/cache.js +1 -2
  41. package/dist/check.d.ts +2 -1
  42. package/dist/check.js +5 -1
  43. package/dist/cli-args.d.ts +2 -1
  44. package/dist/cli.js +5 -0
  45. package/dist/client/client-redirect-matcher.js +2 -1
  46. package/dist/client/client-redirects.d.ts +4 -3
  47. package/dist/client/client-redirects.js +2 -1
  48. package/dist/client/client-rewrites.d.ts +2 -1
  49. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  50. package/dist/client/dev-error-overlay.js +1 -1
  51. package/dist/client/index.js +1 -2
  52. package/dist/client/instrumentation-client-state.js +5 -5
  53. package/dist/client/navigation-runtime.d.ts +16 -2
  54. package/dist/client/navigation-runtime.js +2 -2
  55. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  56. package/dist/client/vinext-next-data.d.ts +25 -1
  57. package/dist/client/window-next.d.ts +2 -1
  58. package/dist/config/config-matchers.d.ts +12 -1
  59. package/dist/config/config-matchers.js +111 -16
  60. package/dist/config/dotenv.d.ts +2 -1
  61. package/dist/config/next-config.d.ts +32 -1
  62. package/dist/config/next-config.js +93 -5
  63. package/dist/config/tsconfig-paths.d.ts +2 -1
  64. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
  65. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
  66. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
  67. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
  68. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
  69. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
  70. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
  71. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
  72. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
  73. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
  74. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
  75. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
  76. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
  77. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
  78. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
  79. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
  80. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
  81. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
  82. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
  83. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
  84. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  105. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  106. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  107. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  108. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  109. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  110. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  111. package/dist/deps/.pnpm/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -0
  112. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  113. package/dist/entries/app-browser-entry.d.ts +20 -5
  114. package/dist/entries/app-browser-entry.js +79 -6
  115. package/dist/entries/app-rsc-entry.d.ts +2 -1
  116. package/dist/entries/app-rsc-entry.js +59 -60
  117. package/dist/entries/app-rsc-manifest.d.ts +2 -1
  118. package/dist/entries/app-rsc-manifest.js +56 -4
  119. package/dist/entries/app-ssr-entry.js +1 -0
  120. package/dist/entries/pages-entry-helpers.js +1 -2
  121. package/dist/entries/pages-server-entry.d.ts +2 -1
  122. package/dist/entries/pages-server-entry.js +34 -9
  123. package/dist/entries/runtime-entry-module.d.ts +1 -0
  124. package/dist/entries/runtime-entry-module.js +4 -1
  125. package/dist/image/image-adapters-virtual.d.ts +2 -1
  126. package/dist/index.js +184 -103
  127. package/dist/init-cloudflare.d.ts +1 -3
  128. package/dist/init-cloudflare.js +10 -48
  129. package/dist/init-platform.d.ts +2 -0
  130. package/dist/init-platform.js +4 -0
  131. package/dist/plugins/client-compile-hints.d.ts +30 -0
  132. package/dist/plugins/client-compile-hints.js +88 -0
  133. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  134. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  135. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  136. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  137. package/dist/plugins/environment.d.ts +2 -1
  138. package/dist/plugins/extensionless-dynamic-import.js +6 -2
  139. package/dist/plugins/fonts.js +9 -12
  140. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  141. package/dist/plugins/import-meta-url.d.ts +2 -1
  142. package/dist/plugins/next-intl-catalog.d.ts +12 -0
  143. package/dist/plugins/next-intl-catalog.js +85 -0
  144. package/dist/plugins/og-assets.d.ts +2 -1
  145. package/dist/plugins/og-assets.js +2 -3
  146. package/dist/plugins/optimize-imports.d.ts +2 -1
  147. package/dist/plugins/pages-node-externals.d.ts +3 -1
  148. package/dist/plugins/pages-node-externals.js +1 -1
  149. package/dist/plugins/remove-console.d.ts +2 -1
  150. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  151. package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
  152. package/dist/plugins/rsc-client-reference-loaders.js +170 -68
  153. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  154. package/dist/plugins/sass.d.ts +2 -1
  155. package/dist/plugins/strip-server-exports.d.ts +2 -1
  156. package/dist/plugins/styled-jsx.d.ts +2 -1
  157. package/dist/plugins/transform-result.d.ts +2 -1
  158. package/dist/plugins/typeof-window.d.ts +2 -1
  159. package/dist/plugins/use-cache-callable.d.ts +1 -1
  160. package/dist/plugins/use-cache-callable.js +136 -94
  161. package/dist/plugins/worker-image-imports.js +1 -1
  162. package/dist/plugins/worker-use-server.d.ts +2 -1
  163. package/dist/routing/app-route-graph.d.ts +46 -0
  164. package/dist/routing/app-route-graph.js +131 -51
  165. package/dist/routing/browser-route-manifest.d.ts +2 -1
  166. package/dist/routing/optimistic-route-trie.d.ts +2 -1
  167. package/dist/routing/route-matching.d.ts +2 -1
  168. package/dist/routing/route-pattern.d.ts +2 -1
  169. package/dist/server/accept-encoding.d.ts +2 -1
  170. package/dist/server/api-handler.js +19 -4
  171. package/dist/server/app-action-forwarding.d.ts +2 -1
  172. package/dist/server/app-bfcache-identity.d.ts +2 -1
  173. package/dist/server/app-bfcache-identity.js +1 -1
  174. package/dist/server/app-browser-action-result.d.ts +2 -1
  175. package/dist/server/app-browser-entry.js +106 -66
  176. package/dist/server/app-browser-error.d.ts +2 -1
  177. package/dist/server/app-browser-history-controller.d.ts +7 -5
  178. package/dist/server/app-browser-history-controller.js +93 -15
  179. package/dist/server/app-browser-hydration.d.ts +2 -1
  180. package/dist/server/app-browser-interception-context.d.ts +2 -1
  181. package/dist/server/app-browser-navigation-controller.d.ts +2 -2
  182. package/dist/server/app-browser-navigation-controller.js +16 -12
  183. package/dist/server/app-browser-popstate.d.ts +2 -1
  184. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  185. package/dist/server/app-browser-rsc-redirect.js +4 -4
  186. package/dist/server/app-browser-server-action-client.d.ts +4 -1
  187. package/dist/server/app-browser-server-action-client.js +4 -3
  188. package/dist/server/app-browser-state.d.ts +2 -4
  189. package/dist/server/app-browser-state.js +9 -4
  190. package/dist/server/app-browser-stream.d.ts +2 -1
  191. package/dist/server/app-browser-supplemental-refresh.js +16 -1
  192. package/dist/server/app-browser-visible-commit.d.ts +3 -2
  193. package/dist/server/app-browser-visible-commit.js +2 -12
  194. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  195. package/dist/server/app-client-reference-manifest.js +46 -0
  196. package/dist/server/app-client-reference-preloader.d.ts +25 -5
  197. package/dist/server/app-client-reference-preloader.js +22 -7
  198. package/dist/server/app-elements-wire.d.ts +8 -39
  199. package/dist/server/app-elements-wire.js +4 -41
  200. package/dist/server/app-elements.d.ts +4 -2
  201. package/dist/server/app-elements.js +4 -2
  202. package/dist/server/app-fallback-renderer.d.ts +9 -2
  203. package/dist/server/app-fallback-renderer.js +4 -1
  204. package/dist/server/app-history-state.d.ts +4 -3
  205. package/dist/server/app-history-state.js +5 -2
  206. package/dist/server/app-inline-css-client.d.ts +2 -1
  207. package/dist/server/app-metadata-tracing.d.ts +2 -1
  208. package/dist/server/app-mounted-layouts.d.ts +21 -0
  209. package/dist/server/app-mounted-layouts.js +67 -0
  210. package/dist/server/app-optimistic-routing.d.ts +37 -2
  211. package/dist/server/app-optimistic-routing.js +75 -2
  212. package/dist/server/app-page-boundary-render.d.ts +20 -2
  213. package/dist/server/app-page-boundary-render.js +224 -40
  214. package/dist/server/app-page-boundary.d.ts +34 -5
  215. package/dist/server/app-page-boundary.js +41 -8
  216. package/dist/server/app-page-cache-finalizer.d.ts +14 -2
  217. package/dist/server/app-page-cache-finalizer.js +71 -30
  218. package/dist/server/app-page-cache-render.d.ts +10 -2
  219. package/dist/server/app-page-cache-render.js +14 -2
  220. package/dist/server/app-page-cache.d.ts +13 -1
  221. package/dist/server/app-page-cache.js +33 -11
  222. package/dist/server/app-page-dispatch.d.ts +39 -11
  223. package/dist/server/app-page-dispatch.js +236 -177
  224. package/dist/server/app-page-element-builder.d.ts +19 -3
  225. package/dist/server/app-page-element-builder.js +193 -71
  226. package/dist/server/app-page-execution.d.ts +43 -51
  227. package/dist/server/app-page-execution.js +205 -92
  228. package/dist/server/app-page-head.d.ts +108 -3
  229. package/dist/server/app-page-head.js +337 -154
  230. package/dist/server/app-page-http-access-fallback-metadata.d.ts +49 -2
  231. package/dist/server/app-page-http-access-fallback-metadata.js +77 -2
  232. package/dist/server/app-page-layout-gate.d.ts +35 -0
  233. package/dist/server/app-page-layout-gate.js +50 -0
  234. package/dist/server/app-page-method.d.ts +2 -1
  235. package/dist/server/app-page-params.d.ts +0 -1
  236. package/dist/server/app-page-params.js +1 -14
  237. package/dist/server/app-page-probe.d.ts +5 -22
  238. package/dist/server/app-page-probe.js +4 -37
  239. package/dist/server/app-page-render-identity.d.ts +2 -1
  240. package/dist/server/app-page-render.d.ts +9 -13
  241. package/dist/server/app-page-render.js +108 -214
  242. package/dist/server/app-page-request.d.ts +15 -4
  243. package/dist/server/app-page-request.js +2 -2
  244. package/dist/server/app-page-response.js +3 -3
  245. package/dist/server/app-page-route-wiring.d.ts +65 -8
  246. package/dist/server/app-page-route-wiring.js +259 -103
  247. package/dist/server/app-page-rsc-render-status.d.ts +29 -2
  248. package/dist/server/app-page-rsc-render-status.js +121 -13
  249. package/dist/server/app-page-search-params-observation.d.ts +7 -2
  250. package/dist/server/app-page-search-params-observation.js +8 -1
  251. package/dist/server/app-page-segment-plan.d.ts +2 -1
  252. package/dist/server/app-page-stream.d.ts +33 -1
  253. package/dist/server/app-page-stream.js +25 -6
  254. package/dist/server/app-pages-bridge.d.ts +6 -1
  255. package/dist/server/app-pages-bridge.js +7 -3
  256. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  257. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  258. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  259. package/dist/server/app-prerender-static-params.d.ts +2 -1
  260. package/dist/server/app-render-dependency.d.ts +21 -4
  261. package/dist/server/app-render-dependency.js +100 -33
  262. package/dist/server/app-request-stage-dispatch.js +1 -1
  263. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  264. package/dist/server/app-response-stage-entry.d.ts +2 -1
  265. package/dist/server/app-route-handler-cache.d.ts +2 -1
  266. package/dist/server/app-route-handler-cache.js +2 -2
  267. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  268. package/dist/server/app-route-handler-dispatch.js +15 -10
  269. package/dist/server/app-route-handler-execution.d.ts +2 -1
  270. package/dist/server/app-route-handler-execution.js +8 -3
  271. package/dist/server/app-route-handler-policy.d.ts +1 -1
  272. package/dist/server/app-route-handler-policy.js +3 -3
  273. package/dist/server/app-route-handler-response.d.ts +2 -1
  274. package/dist/server/app-route-handler-response.js +1 -1
  275. package/dist/server/app-route-handler-runtime.d.ts +2 -1
  276. package/dist/server/app-route-handler-runtime.js +17 -4
  277. package/dist/server/app-route-module-loader.d.ts +18 -1
  278. package/dist/server/app-route-module-loader.js +8 -0
  279. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  280. package/dist/server/app-rsc-cache-busting.d.ts +2 -2
  281. package/dist/server/app-rsc-cache-busting.js +4 -4
  282. package/dist/server/app-rsc-error-handler.d.ts +4 -2
  283. package/dist/server/app-rsc-error-handler.js +9 -1
  284. package/dist/server/app-rsc-errors.d.ts +10 -1
  285. package/dist/server/app-rsc-errors.js +8 -1
  286. package/dist/server/app-rsc-handler.d.ts +7 -6
  287. package/dist/server/app-rsc-handler.js +36 -34
  288. package/dist/server/app-rsc-request-normalization.d.ts +0 -4
  289. package/dist/server/app-rsc-request-normalization.js +1 -4
  290. package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
  291. package/dist/server/app-rsc-response-finalizer.js +2 -2
  292. package/dist/server/app-rsc-response-stage.js +5 -3
  293. package/dist/server/app-rsc-route-matching.d.ts +38 -1
  294. package/dist/server/app-rsc-route-matching.js +24 -0
  295. package/dist/server/app-segment-config.d.ts +2 -1
  296. package/dist/server/app-segment-config.js +1 -14
  297. package/dist/server/app-server-action-execution.d.ts +5 -2
  298. package/dist/server/app-server-action-execution.js +10 -7
  299. package/dist/server/app-ssr-entry.d.ts +8 -0
  300. package/dist/server/app-ssr-entry.js +98 -50
  301. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  302. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  303. package/dist/server/app-ssr-stream.d.ts +22 -10
  304. package/dist/server/app-ssr-stream.js +300 -68
  305. package/dist/server/app-static-generation.d.ts +2 -1
  306. package/dist/server/app-streamed-client-references.d.ts +39 -0
  307. package/dist/server/app-streamed-client-references.js +156 -0
  308. package/dist/server/app-visited-response-cache.d.ts +38 -2
  309. package/dist/server/app-visited-response-cache.js +46 -5
  310. package/dist/server/app-worker-stages.d.ts +27 -4
  311. package/dist/server/app-worker-stages.js +45 -6
  312. package/dist/server/artifact-compatibility.d.ts +2 -2
  313. package/dist/server/artifact-compatibility.js +1 -10
  314. package/dist/server/bfcache-identity.d.ts +2 -1
  315. package/dist/server/cache-headers.d.ts +2 -1
  316. package/dist/server/cache-proof.d.ts +1 -115
  317. package/dist/server/cache-proof.js +1 -544
  318. package/dist/server/cacheability-request.d.ts +2 -1
  319. package/dist/server/cacheability-request.js +13 -8
  320. package/dist/server/config-headers.d.ts +2 -1
  321. package/dist/server/csp.d.ts +2 -1
  322. package/dist/server/default-global-not-found-module.d.ts +2 -1
  323. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  324. package/dist/server/default-http-access-fallback-modules.js +31 -0
  325. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  326. package/dist/server/defer-until-stream-consumed.js +154 -21
  327. package/dist/server/dev-lockfile.d.ts +32 -2
  328. package/dist/server/dev-lockfile.js +46 -2
  329. package/dist/server/dev-module-runner.d.ts +2 -1
  330. package/dist/server/dev-server.js +14 -6
  331. package/dist/server/fetch-handler.js +1 -2
  332. package/dist/server/file-based-metadata.d.ts +2 -1
  333. package/dist/server/framework-tracer.d.ts +2 -1
  334. package/dist/server/headers.d.ts +6 -3
  335. package/dist/server/headers.js +9 -5
  336. package/dist/server/html.d.ts +1 -0
  337. package/dist/server/html.js +19 -1
  338. package/dist/server/http-conditional.d.ts +2 -1
  339. package/dist/server/http-error-responses.d.ts +2 -1
  340. package/dist/server/implicit-tags.d.ts +2 -1
  341. package/dist/server/isr-cache.d.ts +8 -2
  342. package/dist/server/isr-cache.js +26 -1
  343. package/dist/server/metadata-route-build-data.d.ts +2 -1
  344. package/dist/server/metadata-route-build-data.js +1 -1
  345. package/dist/server/metadata-route-response.d.ts +2 -1
  346. package/dist/server/metadata-route-response.js +32 -15
  347. package/dist/server/metadata-routes.d.ts +2 -1
  348. package/dist/server/middleware-runtime.d.ts +2 -1
  349. package/dist/server/multi-stage.d.ts +52 -11
  350. package/dist/server/multi-stage.js +13 -1
  351. package/dist/server/navigation-planner.js +1 -1
  352. package/dist/server/navigation-trace.d.ts +2 -1
  353. package/dist/server/next-error-digest.d.ts +2 -1
  354. package/dist/server/nitro-public-files-plugin.d.ts +2 -1
  355. package/dist/server/nitro-public-files.d.ts +2 -1
  356. package/dist/server/opentelemetry-api.d.ts +2 -1
  357. package/dist/server/operation-token.d.ts +2 -1
  358. package/dist/server/pages-api-route.d.ts +2 -1
  359. package/dist/server/pages-api-route.js +28 -19
  360. package/dist/server/pages-asset-tags.d.ts +2 -1
  361. package/dist/server/pages-body-parser-config.d.ts +2 -1
  362. package/dist/server/pages-client-assets.d.ts +4 -0
  363. package/dist/server/pages-data-route.d.ts +2 -1
  364. package/dist/server/pages-document-asset-props.d.ts +2 -1
  365. package/dist/server/pages-document-initial-props.d.ts +2 -1
  366. package/dist/server/pages-execution-tracing.d.ts +2 -1
  367. package/dist/server/pages-execution-tracing.js +1 -1
  368. package/dist/server/pages-get-initial-props.d.ts +2 -1
  369. package/dist/server/pages-media-type.d.ts +21 -1
  370. package/dist/server/pages-media-type.js +69 -5
  371. package/dist/server/pages-node-compat.js +52 -27
  372. package/dist/server/pages-page-data.d.ts +7 -1
  373. package/dist/server/pages-page-data.js +35 -12
  374. package/dist/server/pages-page-handler.d.ts +3 -2
  375. package/dist/server/pages-page-handler.js +27 -27
  376. package/dist/server/pages-page-method.d.ts +2 -1
  377. package/dist/server/pages-page-response.d.ts +2 -1
  378. package/dist/server/pages-preview.d.ts +2 -1
  379. package/dist/server/pages-readiness.d.ts +2 -1
  380. package/dist/server/pages-request-pipeline.d.ts +10 -1
  381. package/dist/server/pages-request-pipeline.js +6 -7
  382. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  383. package/dist/server/pages-request-stage-entry.js +14 -12
  384. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  385. package/dist/server/pages-response-stage-entry.js +9 -3
  386. package/dist/server/pages-route-data-kind.d.ts +2 -1
  387. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  388. package/dist/server/prerender-route-params.d.ts +2 -1
  389. package/dist/server/prod-server.js +14 -4
  390. package/dist/server/request-log.d.ts +2 -1
  391. package/dist/server/request-pipeline.d.ts +6 -0
  392. package/dist/server/request-pipeline.js +21 -1
  393. package/dist/server/request-tracing.d.ts +2 -1
  394. package/dist/server/request-tracing.js +1 -1
  395. package/dist/server/response-start-tracing.js +7 -29
  396. package/dist/server/rsc-render-stream.d.ts +4 -0
  397. package/dist/server/rsc-render-stream.js +25 -0
  398. package/dist/server/seed-cache.d.ts +2 -1
  399. package/dist/server/seed-cache.js +1 -1
  400. package/dist/server/shared-cache-identity.d.ts +23 -0
  401. package/dist/server/shared-cache-identity.js +36 -0
  402. package/dist/server/static-file-cache.d.ts +2 -1
  403. package/dist/server/static-file-cache.js +1 -0
  404. package/dist/server/worker-revalidation-context.d.ts +2 -1
  405. package/dist/server/worker-stages.d.ts +18 -4
  406. package/dist/server/worker-stages.js +23 -4
  407. package/dist/shims/app.d.ts +2 -1
  408. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  409. package/dist/shims/cache-handler.d.ts +8 -3
  410. package/dist/shims/cache-handler.js +31 -11
  411. package/dist/shims/cache-request-state.d.ts +17 -20
  412. package/dist/shims/cache-request-state.js +16 -21
  413. package/dist/shims/cache-runtime.js +27 -11
  414. package/dist/shims/cache.d.ts +8 -7
  415. package/dist/shims/cache.js +17 -19
  416. package/dist/shims/cacheability-classification.d.ts +2 -0
  417. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  418. package/dist/shims/caught-not-found-boundaries.js +48 -0
  419. package/dist/shims/cdn-cache.d.ts +22 -5
  420. package/dist/shims/cdn-purge-routes.d.ts +2 -1
  421. package/dist/shims/client-locale.js +2 -1
  422. package/dist/shims/client-page-root.d.ts +2 -1
  423. package/dist/shims/client-page-root.js +2 -2
  424. package/dist/shims/config.d.ts +2 -1
  425. package/dist/shims/default-forbidden.d.ts +4 -0
  426. package/dist/shims/default-forbidden.js +18 -0
  427. package/dist/shims/default-not-found.d.ts +0 -5
  428. package/dist/shims/default-not-found.js +5 -41
  429. package/dist/shims/default-unauthorized.d.ts +4 -0
  430. package/dist/shims/default-unauthorized.js +18 -0
  431. package/dist/shims/dynamic.js +9 -6
  432. package/dist/shims/error-boundary.d.ts +39 -3
  433. package/dist/shims/error-boundary.js +33 -18
  434. package/dist/shims/fetch-cache-state.d.ts +5 -1
  435. package/dist/shims/fetch-cache-state.js +1 -3
  436. package/dist/shims/fetch-cache.d.ts +2 -1
  437. package/dist/shims/fetch-cache.js +34 -24
  438. package/dist/shims/font-google.js +1 -2
  439. package/dist/shims/font-utils.d.ts +3 -2
  440. package/dist/shims/font-utils.js +5 -3
  441. package/dist/shims/form.js +3 -3
  442. package/dist/shims/headers.d.ts +8 -23
  443. package/dist/shims/headers.js +17 -67
  444. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  445. package/dist/shims/http-access-error-fallback.js +47 -0
  446. package/dist/shims/image.d.ts +1 -22
  447. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  448. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  449. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  450. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  451. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  452. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  453. package/dist/shims/internal/client-reference-loader.js +91 -0
  454. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  455. package/dist/shims/internal/cookies.js +1 -2
  456. package/dist/shims/internal/headers-state.d.ts +2 -0
  457. package/dist/shims/internal/headers-state.js +6 -1
  458. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
  459. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  460. package/dist/shims/internal/navigation-untracked.js +1 -1
  461. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  462. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  463. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  464. package/dist/shims/link.js +197 -52
  465. package/dist/shims/metadata.d.ts +52 -29
  466. package/dist/shims/metadata.js +142 -42
  467. package/dist/shims/navigation-errors.d.ts +2 -1
  468. package/dist/shims/navigation-server.js +1 -1
  469. package/dist/shims/navigation.d.ts +95 -8
  470. package/dist/shims/navigation.js +255 -47
  471. package/dist/shims/navigation.react-server.js +2 -2
  472. package/dist/shims/pages-router-runtime.d.ts +2 -1
  473. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  474. package/dist/shims/request-state-types.d.ts +2 -2
  475. package/dist/shims/router.js +14 -3
  476. package/dist/shims/slot.d.ts +12 -0
  477. package/dist/shims/slot.js +37 -9
  478. package/dist/shims/unified-request-context.d.ts +1 -1
  479. package/dist/shims/unified-request-context.js +5 -6
  480. package/dist/typegen.d.ts +2 -1
  481. package/dist/utils/cache-control-metadata.d.ts +5 -0
  482. package/dist/utils/cache-control-metadata.js +9 -1
  483. package/dist/utils/client-build-manifest.d.ts +4 -1
  484. package/dist/utils/client-build-manifest.js +9 -2
  485. package/dist/utils/client-entry-manifest.d.ts +13 -0
  486. package/dist/utils/client-entry-manifest.js +20 -1
  487. package/dist/utils/client-reference-chunks.d.ts +45 -0
  488. package/dist/utils/client-reference-chunks.js +30 -0
  489. package/dist/utils/client-runtime-metadata.d.ts +9 -1
  490. package/dist/utils/client-runtime-metadata.js +40 -9
  491. package/dist/utils/compare.d.ts +9 -0
  492. package/dist/utils/compare.js +15 -1
  493. package/dist/utils/lazy-chunks.d.ts +14 -0
  494. package/dist/utils/lazy-chunks.js +27 -1
  495. package/dist/utils/middleware-request-headers.d.ts +2 -1
  496. package/dist/utils/project.d.ts +4 -3
  497. package/dist/utils/project.js +12 -17
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/regex.d.ts +5 -0
  500. package/dist/utils/regex.js +11 -1
  501. package/dist/utils/text-stream.d.ts +10 -5
  502. package/dist/utils/text-stream.js +6 -6
  503. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  504. package/package.json +6 -5
  505. package/dist/build/layout-classification-types.d.ts +0 -60
  506. package/dist/build/layout-classification-types.js +0 -1
  507. package/dist/build/layout-classification.d.ts +0 -61
  508. package/dist/build/layout-classification.js +0 -98
  509. package/dist/build/route-classification-injector.d.ts +0 -32
  510. package/dist/build/route-classification-injector.js +0 -59
  511. package/dist/build/route-classification-manifest.d.ts +0 -53
  512. package/dist/build/route-classification-manifest.js +0 -143
  513. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  514. package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -10
  515. package/dist/server/app-browser-client-reuse-manifest.js +0 -101
  516. package/dist/server/app-layout-param-observation.d.ts +0 -41
  517. package/dist/server/app-layout-param-observation.js +0 -168
  518. package/dist/server/client-reuse-manifest.d.ts +0 -102
  519. package/dist/server/client-reuse-manifest.js +0 -209
  520. package/dist/server/default-not-found-module.d.ts +0 -19
  521. package/dist/server/default-not-found-module.js +0 -18
  522. package/dist/server/rsc-stream-hints.d.ts +0 -21
  523. package/dist/server/rsc-stream-hints.js +0 -227
  524. package/dist/server/skip-cache-proof.d.ts +0 -60
  525. package/dist/server/skip-cache-proof.js +0 -168
  526. package/dist/server/static-layout-client-reuse-proof.d.ts +0 -13
  527. package/dist/server/static-layout-client-reuse-proof.js +0 -33
  528. package/dist/utils/sorted-array.d.ts +0 -7
  529. package/dist/utils/sorted-array.js +0 -20
@@ -3,8 +3,7 @@ import { AppElements } from "./app-elements-wire.js";
3
3
  import "./app-elements.js";
4
4
  import { AppRscRenderMode } from "./app-rsc-render-mode.js";
5
5
  import { AppPageParams } from "./app-page-boundary.js";
6
- import { ApplyAppPageFileBasedMetadata } from "./app-page-head.js";
7
- import { AppLayoutParamAccessTracker } from "./app-layout-param-observation.js";
6
+ import { AppPagePreparedRouteHead, ApplyAppPageFileBasedMetadata } from "./app-page-head.js";
8
7
  import { AppPageSemanticSegment } from "./app-page-segment-state.js";
9
8
  import { AppPageErrorModule, AppPageModule, AppPageRouteWiringRoute } from "./app-page-route-wiring.js";
10
9
  //#region src/server/app-page-element-builder.d.ts
@@ -31,6 +30,14 @@ export type AppPageInterceptOptions<TModule extends AppPageModule = AppPageModul
31
30
  interceptNotFoundBranchSegments?: readonly string[] | null;
32
31
  interceptNotFound?: TModule | null;
33
32
  interceptNotFoundTreePosition?: number | null;
33
+ interceptForbiddens?: readonly (TModule | null | undefined)[] | null;
34
+ interceptForbiddenTreePositions?: readonly number[] | null;
35
+ interceptUnauthorizeds?: readonly (TModule | null | undefined)[] | null;
36
+ interceptUnauthorizedTreePositions?: readonly number[] | null;
37
+ interceptErrors?: readonly (AppPageErrorModule | null | undefined)[] | null;
38
+ interceptErrorTreePositions?: readonly number[] | null;
39
+ interceptNotFounds?: readonly (TModule | null | undefined)[] | null;
40
+ interceptNotFoundTreePositions?: readonly number[] | null;
34
41
  interceptPage?: TModule | null;
35
42
  interceptParams?: AppPageParams | null;
36
43
  interceptSlotId?: string | null;
@@ -57,6 +64,10 @@ export type AppPagePageRequest<TModule extends AppPageModule = AppPageModule> =
57
64
  observePageSearchParamsAccess?: boolean;
58
65
  /** The route is `dynamic = "force-static"`, so pages read an empty query. */
59
66
  isForceStatic?: boolean;
67
+ /** The render can never be stored (see buildAppPageElements). */
68
+ isUncacheableRender?: boolean;
69
+ /** Layouts the navigating client holds (see buildAppPageElements). */
70
+ mountedLayouts?: ReadonlySet<string> | null;
60
71
  /** Observe page metadata `searchParams` access for cache-safety classification. */
61
72
  observeMetadataSearchParamsAccess?: boolean;
62
73
  /** Whether generated metadata may stream into the response body. */
@@ -70,6 +81,12 @@ export type AppPagePageRequest<TModule extends AppPageModule = AppPageModule> =
70
81
  placeStreamedMetadataInHead?: boolean;
71
82
  /** Whether streamed render errors must be sanitized for client transport. */
72
83
  isProduction?: boolean;
84
+ /**
85
+ * Receives the route's head once this render starts resolving it, so a
86
+ * special-error fallback after the render can reuse it rather than calling
87
+ * generateMetadata() again.
88
+ */
89
+ onHeadPrepared?: (head: AppPagePreparedRouteHead) => void;
73
90
  };
74
91
  export type BuildPageElementsOptions<TModule extends AppPageModule = AppPageModule, TErrorModule extends AppPageErrorModule = AppPageErrorModule> = {
75
92
  applyFileBasedMetadata?: ApplyAppPageFileBasedMetadata;
@@ -88,7 +105,6 @@ export type BuildPageElementsOptions<TModule extends AppPageModule = AppPageModu
88
105
  rootUnauthorizedModule?: TModule | null;
89
106
  /** File-based metadata routes (favicon, manifest, sitemap, etc.). */
90
107
  metadataRoutes: readonly MetadataFileRoute[];
91
- layoutParamAccess?: AppLayoutParamAccessTracker;
92
108
  /**
93
109
  * Configured next.config `basePath`. Threaded through `resolveAppPageHead`
94
110
  * so file-based metadata route URLs emitted in <head> are prefixed.
@@ -1,28 +1,75 @@
1
1
  import { isPromiseLike } from "../utils/promise.js";
2
2
  import { APP_RSC_RENDER_MODE_NAVIGATION } from "./app-rsc-render-mode.js";
3
3
  import { matchRoutePattern } from "../routing/route-pattern.js";
4
- import { createAppPageRenderDependency, invokeAppComponent, isAppClientReference, isAppRenderSuspension, isReactOwnedAppComponent, renderAfterAppDependencies } from "./app-render-dependency.js";
5
4
  import { AppElementsWire } from "./app-elements-wire.js";
6
5
  import "./app-elements.js";
6
+ import { APP_PAGE_SEGMENT_KEY, isAppPageRouteGroupSegment, resolveAppPagePatternStateKey, resolveAppPageRouteStateKey } from "./app-page-segment-state.js";
7
+ import { ErrorBoundary, ForbiddenBoundary, NotFoundBoundary, UnauthorizedBoundary } from "../shims/error-boundary.js";
7
8
  import { withUseCacheLayoutMarker, withUseCachePageMarker } from "../shims/internal/app-page-props-cache-key.js";
8
9
  import { makeThenableParams } from "../shims/thenable-params.js";
9
- import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
10
- import { resolveAppPageSpecialError } from "./app-page-execution.js";
11
- import { APP_PAGE_SEGMENT_KEY, isAppPageRouteGroupSegment, resolveAppPagePatternStateKey, resolveAppPageRouteStateKey } from "./app-page-segment-state.js";
10
+ import { tagAppPagePageError, tagAppPageSlotError } from "./app-page-execution.js";
11
+ import { createAppPageMetadataSearchParamsObserver, makeObservedAppPageSearchParamsThenable } from "./app-page-search-params-observation.js";
12
+ import { resolveAppPageBranchParams } from "./app-page-params.js";
13
+ import { collectAppPageSearchParams, hasAppPageDynamicMetadata, prepareAppPageHead, resolveActiveParallelRouteHeadInputs, resolveInterceptLayoutsBesidePage, slotInterceptKeepsSourceHead } from "./app-page-head.js";
14
+ import { createRouteNotFoundHeadPlanOptions, recoverAppPageRouteHead } from "./app-page-http-access-fallback-metadata.js";
15
+ import { ClientPageRoot } from "../shims/client-page-root.js";
16
+ import "./app-rsc-route-matching.js";
17
+ import { createAppPageRenderDependency, invokeAppComponent, isAppClientReference, isAppRenderSuspension, isReactOwnedAppComponent, renderAfterAppDependencies } from "./app-render-dependency.js";
12
18
  import { sanitizeErrorForClient } from "./app-rsc-errors.js";
13
19
  import { resolveAppPageModuleTraceSegment, traceCreateComponentTree, traceGetLayoutOrPageModule } from "./app-page-tracing.js";
14
20
  import { buildAppPageElements, createAppPageSourcePage, createAppPageTreePath, resolveAppPageLoadingModuleAtOrAbove } from "./app-page-route-wiring.js";
15
- import { collectAppPageSearchParams, hasAppPageDynamicMetadata, prepareAppPageHead, resolveActiveParallelRouteHeadInputs } from "./app-page-head.js";
16
- import { resolveHttpAccessFallbackMetadata, resolveHttpAccessFallbackViewport } from "./app-page-http-access-fallback-metadata.js";
17
- import { ClientPageRoot } from "../shims/client-page-root.js";
18
- import "./app-rsc-route-matching.js";
19
- import { resolveAppPageParentHttpAccessBoundary } from "./app-page-boundary.js";
20
21
  import { DEFAULT_GLOBAL_ERROR_MODULE } from "./default-global-error-module.js";
21
22
  import { createAppPageRenderIdentity } from "./app-page-render-identity.js";
22
- import { createAppPageSearchParamsObserver, makeObservedAppPageSearchParamsThenable } from "./app-page-search-params-observation.js";
23
23
  import { shouldServeStreamingMetadata } from "./streaming-metadata.js";
24
- import { Suspense, cache, createElement } from "react";
24
+ import { Fragment, Suspense, cache, createElement } from "react";
25
25
  //#region src/server/app-page-element-builder.ts
26
+ /**
27
+ * A sibling intercepting page that renders beside its intercepting layouts,
28
+ * as Next.js renders each segment. The source route's layouts wait for the
29
+ * page, so `Starter` invokes it ahead of the layouts, even when one of them
30
+ * never renders its children, and `Outlet` renders its result where the
31
+ * innermost layout renders its children.
32
+ */
33
+ function createSiblingInterceptPageSlot(invokePage, releaseRenderDependency) {
34
+ let outcome = null;
35
+ function Starter() {
36
+ try {
37
+ const result = invokePage();
38
+ if (isPromiseLike(result)) Promise.resolve(result).catch(() => {});
39
+ outcome = { result };
40
+ } catch (error) {
41
+ if (!isAppRenderSuspension(error)) outcome = { error };
42
+ else {
43
+ Promise.resolve().then(releaseRenderDependency);
44
+ outcome = { suspended: true };
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ function readOutcome(current) {
50
+ if ("error" in current) throw current.error;
51
+ return "result" in current ? current.result : invokePage();
52
+ }
53
+ function Outlet() {
54
+ return outcome ? readOutcome(outcome) : invokePage();
55
+ }
56
+ return {
57
+ Outlet,
58
+ Starter
59
+ };
60
+ }
61
+ /** How many leading layouts two branches of one slot have in common. */
62
+ function countSharedLeadingLayouts(visibleLayouts, hiddenLayouts) {
63
+ const visible = visibleLayouts ?? [];
64
+ const hidden = hiddenLayouts ?? [];
65
+ let count = 0;
66
+ while (count < visible.length && count < hidden.length && visible[count] === hidden[count]) count++;
67
+ return count;
68
+ }
69
+ async function AppPageInterceptMetadataOutlet(props) {
70
+ return props.resolveHead().interceptOutlet;
71
+ }
72
+ AppPageInterceptMetadataOutlet.displayName = "Vinext.InterceptMetadataOutlet";
26
73
  function resolveInterceptLayoutParams(branchSegments, layoutSegments, params) {
27
74
  return resolveAppPageBranchParams(branchSegments, layoutSegments.length, params, layoutSegments);
28
75
  }
@@ -60,7 +107,7 @@ function traceAppPageInterceptLayoutModules(modules, branchSegments, layoutSegme
60
107
  async function buildPageElements(options) {
61
108
  const { route, params, routePath, displayPathname = routePath, pageRequest, globalErrorModule, rootNotFoundModule, rootForbiddenModule, rootUnauthorizedModule, metadataRoutes } = options;
62
109
  const slotParamOverrides = resolveSlotParamOverrides(route, routePath);
63
- const { opts, searchParams, isRscRequest, mountedSlotsHeader, renderMode = APP_RSC_RENDER_MODE_NAVIGATION, observeMetadataSearchParamsAccess = false, observePageSearchParamsAccess = false, isForceStatic = false, serveStreamingMetadata, placeStreamedMetadataInHead = false, isProduction = process.env.NODE_ENV === "production" } = pageRequest;
110
+ const { opts, searchParams, isRscRequest, mountedSlotsHeader, renderMode = APP_RSC_RENDER_MODE_NAVIGATION, observeMetadataSearchParamsAccess = false, observePageSearchParamsAccess = false, isForceStatic = false, isUncacheableRender = false, mountedLayouts = null, serveStreamingMetadata, placeStreamedMetadataInHead = false, isProduction = process.env.NODE_ENV === "production", onHeadPrepared } = pageRequest;
64
111
  const pageModule = route.page;
65
112
  const isSiblingIntercept = opts?.interceptSlotKey === "__vinext_page_intercept" && !!opts?.interceptPage;
66
113
  const effectivePageModule = isSiblingIntercept ? opts.interceptPage : pageModule;
@@ -127,6 +174,7 @@ async function buildPageElements(options) {
127
174
  head: {
128
175
  layoutModules: opts?.interceptLayouts ?? [],
129
176
  layoutParams: (opts?.interceptLayoutSegments ?? []).map((segments) => resolveInterceptLayoutParams(opts?.interceptBranchSegments ?? segments, segments, effectiveParams)),
177
+ layoutsBesidePage: resolveInterceptLayoutsBesidePage(opts?.interceptLayoutSegments, opts?.interceptBranchSegments),
130
178
  pageModule: effectivePageModule ?? null,
131
179
  params: effectiveParams,
132
180
  routeSegments: opts?.interceptSourcePageSegments ?? route.routeSegments ?? []
@@ -138,14 +186,39 @@ async function buildPageElements(options) {
138
186
  } : {},
139
187
  ownerTreePosition: route.routeSegments?.length ?? 0
140
188
  } : null;
141
- const parallelRoutes = [...primaryParallelRouteHeadInput ? [primaryParallelRouteHeadInput.head] : [], ...activeParallelRouteHeadInputs.map((input) => input.head)];
142
- const metadataSearchParamsObserver = observeMetadataSearchParamsAccess ? createAppPageSearchParamsObserver() : void 0;
189
+ const interceptSlotKey = opts?.interceptPage != null && !isSiblingIntercept ? opts?.interceptSlotKey ?? null : null;
190
+ const sourceParallelRouteInputs = interceptSlotKey ? resolveActiveParallelRouteHeadInputs({
191
+ layoutTreePositions: route.layoutTreePositions,
192
+ params,
193
+ routeSegments: route.routeSegments ?? [],
194
+ slotParams: slotParamOverrides,
195
+ slots: route.slots ?? null
196
+ }) : null;
197
+ const keepsSourceHead = interceptSlotKey !== null && sourceParallelRouteInputs !== null && slotInterceptKeepsSourceHead({
198
+ interceptSlotKey,
199
+ route,
200
+ sourceParallelRoutes: sourceParallelRouteInputs
201
+ });
202
+ const headParallelRouteInputs = keepsSourceHead && sourceParallelRouteInputs ? sourceParallelRouteInputs : activeParallelRouteHeadInputs;
203
+ const parallelRoutes = [...primaryParallelRouteHeadInput ? [primaryParallelRouteHeadInput.head] : [], ...headParallelRouteInputs.map((input) => input.head)];
204
+ const interceptHeadInput = keepsSourceHead && interceptSlotKey ? activeParallelRouteHeadInputs.find((input) => input.slotKey === interceptSlotKey) : void 0;
205
+ const interceptSlotIndex = interceptHeadInput ? headParallelRouteInputs.findIndex((input) => input.slotKey === interceptSlotKey) : -1;
206
+ const hiddenParallelRoutes = interceptHeadInput ? [{
207
+ parallelRouteIndex: interceptSlotIndex === -1 ? -1 : interceptSlotIndex + (primaryParallelRouteHeadInput ? 1 : 0),
208
+ route: interceptHeadInput.head,
209
+ sharedLayoutCount: interceptSlotIndex === -1 ? 0 : countSharedLeadingLayouts(headParallelRouteInputs[interceptSlotIndex].head.layoutModules, interceptHeadInput.head.layoutModules)
210
+ }] : null;
211
+ const outletSlotIndex = interceptSlotKey !== null && !keepsSourceHead ? headParallelRouteInputs.findIndex((input) => input.slotKey === interceptSlotKey) : -1;
212
+ const outletParallelRouteIndex = outletSlotIndex === -1 ? null : outletSlotIndex + (primaryParallelRouteHeadInput ? 1 : 0);
213
+ const metadataSearchParamsObserver = createAppPageMetadataSearchParamsObserver(observeMetadataSearchParamsAccess);
143
214
  const headOptions = {
144
215
  applyFileBasedMetadata: options.applyFileBasedMetadata,
145
216
  basePath: options.basePath ?? "",
217
+ hiddenParallelRoutes,
146
218
  layoutModules: route.layouts,
147
219
  layoutTreePositions: route.layoutTreePositions,
148
220
  metadataRoutes,
221
+ outletParallelRouteIndex,
149
222
  pageModule: isSiblingIntercept ? null : effectivePageModule ?? null,
150
223
  parallelRoutes,
151
224
  params: effectiveParams,
@@ -158,54 +231,38 @@ async function buildPageElements(options) {
158
231
  const { pageSearchParams } = collectAppPageSearchParams(searchParams);
159
232
  const streamGeneratedHead = serveStreamingMetadata ?? shouldServeStreamingMetadata(pageRequest.request.headers.get("user-agent") ?? "", options.htmlLimitedBots);
160
233
  const metadataPlacement = hasDynamicMetadata && streamGeneratedHead && !placeStreamedMetadataInHead ? "body" : "head";
161
- const resolveNotFoundFallbackPlanOptions = () => {
162
- const routeBoundaryModule = route.notFound;
163
- const parentBoundary = resolveAppPageParentHttpAccessBoundary({
164
- layoutIndex: route.layouts.length,
165
- rootForbiddenModule,
166
- rootNotFoundModule,
167
- rootUnauthorizedModule,
168
- routeForbiddenModules: route.forbiddens,
169
- routeNotFoundModules: route.notFounds,
170
- routeUnauthorizedModules: route.unauthorizeds,
171
- statusCode: 404
172
- });
173
- const boundaryModule = routeBoundaryModule ?? parentBoundary.module;
174
- const boundaryTreePosition = routeBoundaryModule ? route.notFoundTreePosition : parentBoundary.layoutIndex === null ? null : route.layoutTreePositions?.[parentBoundary.layoutIndex];
175
- return {
176
- boundaryModule,
177
- boundaryParams: boundaryModule && boundaryTreePosition != null ? resolveAppPageSegmentParams(route.routeSegments ?? [], boundaryTreePosition, effectiveParams) : {},
178
- boundaryRouteSegments: (route.routeSegments ?? []).slice(0, boundaryTreePosition ?? 0),
179
- errorConvention: "not-found",
180
- layoutModules: route.layouts,
181
- layoutTreePositions: route.layoutTreePositions,
182
- parallelBranches: activeParallelRouteHeadInputs,
183
- params: effectiveParams,
184
- primaryParallelBranch: primaryParallelRouteHeadInput,
185
- routeSegments: route.routeSegments ?? null
186
- };
187
- };
188
- const resolveMetadataErrorTags = async (error) => {
189
- if (resolveAppPageSpecialError(error)?.kind !== "http-access-fallback") return null;
190
- return resolveHttpAccessFallbackMetadata({
234
+ const toClientError = (error) => isProduction ? sanitizeErrorForClient(error, "production") : error;
235
+ const resolveHead = cache(() => {
236
+ const preparedHead = prepareAppPageHead(headOptions);
237
+ const recoveredHead = recoverAppPageRouteHead(preparedHead, {
191
238
  applyFileBasedMetadata: options.applyFileBasedMetadata,
192
239
  basePath: options.basePath ?? "",
193
- ...resolveNotFoundFallbackPlanOptions(),
194
240
  metadataRoutes,
241
+ resolvePlanOptions: () => createRouteNotFoundHeadPlanOptions({
242
+ parallelBranches: headParallelRouteInputs,
243
+ params: effectiveParams,
244
+ primaryParallelBranch: primaryParallelRouteHeadInput,
245
+ rootNotFoundModule,
246
+ route
247
+ }),
195
248
  routePath: route.pattern
196
- }).catch(() => null);
197
- };
198
- const toClientError = (error) => isProduction ? sanitizeErrorForClient(error, "production") : error;
199
- const resolveHead = cache(() => {
200
- const preparedHead = prepareAppPageHead(headOptions);
201
- const outlet = Promise.all([preparedHead.metadata, preparedHead.viewport]).then(() => null, (error) => {
249
+ });
250
+ onHeadPrepared?.({
251
+ ...recoveredHead,
252
+ metadataPlacement
253
+ });
254
+ const outlet = preparedHead.routeErrors.then(null, (error) => {
202
255
  throw toClientError(error);
203
256
  });
204
257
  outlet.catch(() => null);
258
+ const interceptOutlet = preparedHead.hiddenErrors.then(null, (error) => {
259
+ throw toClientError(error);
260
+ });
261
+ interceptOutlet.catch(() => null);
205
262
  return {
206
- metadata: preparedHead.metadata.catch(resolveMetadataErrorTags),
207
- outlet,
208
- viewport: preparedHead.viewport.catch((error) => resolveAppPageSpecialError(error)?.kind === "http-access-fallback" ? resolveHttpAccessFallbackViewport(resolveNotFoundFallbackPlanOptions()).catch(() => ({})) : {})
263
+ ...recoveredHead,
264
+ interceptOutlet,
265
+ outlet
209
266
  };
210
267
  });
211
268
  const pageProps = { params: makeThenableParams(effectiveParams) };
@@ -217,7 +274,7 @@ async function buildPageElements(options) {
217
274
  }, pageTreePosition) !== null;
218
275
  const hasEmptyClientPageSearchParams = isForceStatic || isProduction && process.env.__NEXT_CONFIG_OUTPUT === "export";
219
276
  const pageRenderDependency = EffectivePageComponent && !isReactOwnedAppComponent(EffectivePageComponent) ? createAppPageRenderDependency() : null;
220
- const createPageElement = (PageComponent, props, renderDependency) => {
277
+ const createPageElement = (PageComponent, props, renderDependency, tagError) => {
221
278
  if (searchParams && isAppClientReference(PageComponent)) {
222
279
  const { searchParams: _slotSearchParams, ...pageProps } = props;
223
280
  return createElement(ClientPageRoot, {
@@ -231,14 +288,19 @@ async function buildPageElements(options) {
231
288
  if (searchParams) invocationProps.searchParams = observePageSearchParamsAccess ? makeObservedAppPageSearchParamsThenable(pageSearchParams) : makeThenableParams(pageSearchParams);
232
289
  return createElement(PageComponent, withUseCachePageMarker(PageComponent, invocationProps));
233
290
  }
291
+ return createElement(createPageInvoker(PageComponent, props, renderDependency, tagError));
292
+ };
293
+ const createPageInvoker = (PageComponent, props, renderDependency, tagError) => {
234
294
  const PageInvoker = () => {
235
295
  const invocationProps = { ...props };
236
296
  if (searchParams) invocationProps.searchParams = observePageSearchParamsAccess ? makeObservedAppPageSearchParamsThenable(pageSearchParams) : makeThenableParams(pageSearchParams);
237
297
  try {
238
- const result = invokeAppComponent(PageComponent, withUseCachePageMarker(PageComponent, invocationProps));
298
+ const result = invokeAppComponent(PageComponent, withUseCachePageMarker(PageComponent, invocationProps), tagError);
239
299
  if (isPromiseLike(result)) {
240
300
  if (renderDependency) Promise.resolve().then(() => renderDependency.release());
241
- return Promise.resolve(result).then((resolvedResult) => renderDependency ? renderAfterAppDependencies(resolvedResult, renderDependency.resultDependencies) : resolvedResult);
301
+ return Promise.resolve(result).then((resolvedResult) => renderDependency ? renderAfterAppDependencies(resolvedResult, renderDependency.resultDependencies) : resolvedResult, tagError === void 0 ? void 0 : (error) => {
302
+ throw tagError(error);
303
+ });
242
304
  }
243
305
  renderDependency?.release();
244
306
  return renderDependency ? renderAfterAppDependencies(result, renderDependency.resultDependencies) : result;
@@ -248,17 +310,21 @@ async function buildPageElements(options) {
248
310
  throw error;
249
311
  }
250
312
  renderDependency?.release();
251
- throw error;
313
+ throw tagError === void 0 ? error : tagError(error);
252
314
  }
253
315
  };
254
- return createElement(PageInvoker);
316
+ return PageInvoker;
255
317
  };
256
318
  const pageSearchParamsThenable = searchParams ? makeThenableParams(pageSearchParams) : void 0;
257
319
  const mountedSlotIds = mountedSlotsHeader ? new Set(mountedSlotsHeader.split(" ")) : null;
258
- const slotOverrides = buildSlotOverrides(route, params, routePath, opts);
259
- const createSiblingInterceptElement = () => {
260
- let element = isSiblingIntercept && EffectivePageComponent ? createPageElement(EffectivePageComponent, pageProps, pageRenderDependency) : null;
261
- if (!isSiblingIntercept || element === null) return element;
320
+ const slotOverrides = buildSlotOverrides(route, params, routePath, opts, hiddenParallelRoutes || outletParallelRouteIndex !== null ? (() => {
321
+ const outlet = createElement(AppPageInterceptMetadataOutlet, { resolveHead });
322
+ return streamGeneratedHead ? createElement(Suspense, { fallback: null }, outlet) : outlet;
323
+ })() : null);
324
+ const createSiblingInterceptElement = (metadataOutlet) => {
325
+ if (!isSiblingIntercept || !EffectivePageComponent) return null;
326
+ const pageSlot = pageRenderDependency && opts?.interceptLayouts?.some((layoutModule) => layoutModule?.default) ? createSiblingInterceptPageSlot(createPageInvoker(EffectivePageComponent, pageProps, pageRenderDependency), pageRenderDependency.release) : null;
327
+ let element = createElement(Fragment, null, pageSlot ? createElement(pageSlot.Outlet) : createPageElement(EffectivePageComponent, pageProps, pageRenderDependency), metadataOutlet);
262
328
  const layoutIndexesByTreePosition = /* @__PURE__ */ new Map();
263
329
  for (const [index, layoutModule] of (opts?.interceptLayouts ?? []).entries()) {
264
330
  if (!layoutModule) continue;
@@ -273,12 +339,56 @@ async function buildPageElements(options) {
273
339
  const treePosition = opts?.interceptLoadingTreePositions?.[index];
274
340
  if (treePosition !== void 0) loadingIndexesByTreePosition.set(treePosition, index);
275
341
  }
276
- const treePositions = Array.from(/* @__PURE__ */ new Set([...layoutIndexesByTreePosition.keys(), ...loadingIndexesByTreePosition.keys()])).sort((left, right) => left - right);
342
+ const notFoundsByTreePosition = /* @__PURE__ */ new Map();
343
+ for (const [index, notFoundModule] of (opts?.interceptNotFounds ?? []).entries()) {
344
+ const treePosition = opts?.interceptNotFoundTreePositions?.[index];
345
+ if (notFoundModule?.default && treePosition !== void 0) notFoundsByTreePosition.set(treePosition, notFoundModule.default);
346
+ }
347
+ const accessBoundaries = [...(opts?.interceptForbiddens ?? []).map((module, index) => [
348
+ module,
349
+ opts?.interceptForbiddenTreePositions?.[index],
350
+ ForbiddenBoundary
351
+ ]), ...(opts?.interceptUnauthorizeds ?? []).map((module, index) => [
352
+ module,
353
+ opts?.interceptUnauthorizedTreePositions?.[index],
354
+ UnauthorizedBoundary
355
+ ])];
356
+ const accessBoundaryTreePositions = accessBoundaries.flatMap(([module, treePosition]) => module?.default && treePosition != null ? [treePosition] : []);
357
+ const errorsByTreePosition = /* @__PURE__ */ new Map();
358
+ for (const [index, errorModule] of (opts?.interceptErrors ?? []).entries()) {
359
+ const treePosition = opts?.interceptErrorTreePositions?.[index];
360
+ if (errorModule?.default && treePosition !== void 0) errorsByTreePosition.set(treePosition, errorModule.default);
361
+ }
362
+ const treePositions = Array.from(/* @__PURE__ */ new Set([
363
+ ...layoutIndexesByTreePosition.keys(),
364
+ ...loadingIndexesByTreePosition.keys(),
365
+ ...accessBoundaryTreePositions,
366
+ ...notFoundsByTreePosition.keys(),
367
+ ...errorsByTreePosition.keys()
368
+ ])).sort((left, right) => left - right);
277
369
  for (let index = treePositions.length - 1; index >= 0; index--) {
278
370
  const treePosition = treePositions[index];
279
371
  const loadingIndex = loadingIndexesByTreePosition.get(treePosition);
280
372
  const LoadingComponent = loadingIndex === void 0 ? null : opts?.interceptLoadings?.[loadingIndex]?.default;
281
373
  if (LoadingComponent) element = createElement(Suspense, { fallback: createElement(LoadingComponent) }, element);
374
+ const NotFoundComponent = notFoundsByTreePosition.get(treePosition);
375
+ if (NotFoundComponent) element = createElement(NotFoundBoundary, {
376
+ fallback: createElement(NotFoundComponent),
377
+ children: element
378
+ });
379
+ for (const [module, boundaryTreePosition, AccessBoundary] of accessBoundaries) {
380
+ const FallbackComponent = module?.default;
381
+ if (!FallbackComponent || boundaryTreePosition !== treePosition) continue;
382
+ element = createElement(AccessBoundary, {
383
+ fallback: createElement(FallbackComponent),
384
+ children: element
385
+ });
386
+ }
387
+ const ErrorComponent = errorsByTreePosition.get(treePosition);
388
+ if (ErrorComponent) element = createElement(ErrorBoundary, {
389
+ fallback: ErrorComponent,
390
+ children: element
391
+ });
282
392
  const layoutIndexes = layoutIndexesByTreePosition.get(treePosition) ?? [];
283
393
  for (let layoutOffset = layoutIndexes.length - 1; layoutOffset >= 0; layoutOffset--) {
284
394
  const layoutIndex = layoutIndexes[layoutOffset];
@@ -291,18 +401,21 @@ async function buildPageElements(options) {
291
401
  element = createElement(LayoutComponent, withUseCacheLayoutMarker(LayoutComponent, { params: makeThenableParams(interceptLayoutParams) }), element);
292
402
  }
293
403
  }
294
- return element;
404
+ return pageSlot ? createElement(Fragment, null, createElement(pageSlot.Starter), element) : element;
295
405
  };
296
406
  return traceCreateComponentTree(() => {
297
407
  if (effectivePageModule) traceGetLayoutOrPageModule(APP_PAGE_SEGMENT_KEY, () => effectivePageModule);
298
- const siblingInterceptElement = createSiblingInterceptElement();
299
408
  return buildAppPageElements({
300
- element: isSiblingIntercept ? siblingInterceptElement : EffectivePageComponent ? createPageElement(EffectivePageComponent, pageProps, pageRenderDependency) : null,
301
- createPageElement,
409
+ element: !isSiblingIntercept && EffectivePageComponent ? createPageElement(EffectivePageComponent, pageProps, pageRenderDependency, tagAppPagePageError) : null,
410
+ renderElementWithMetadataOutlet: isSiblingIntercept && EffectivePageComponent ? createSiblingInterceptElement : null,
411
+ createPageElement(component, props, slotLayoutIndex, slotNotFoundBoundary) {
412
+ return createPageElement(component, props, null, slotLayoutIndex === void 0 ? void 0 : (error) => tagAppPageSlotError(error, slotLayoutIndex, slotNotFoundBoundary));
413
+ },
302
414
  globalErrorModule: globalErrorModule ?? DEFAULT_GLOBAL_ERROR_MODULE,
303
415
  isRscRequest,
416
+ isUncacheableRender,
304
417
  interceptionId: opts?.interceptionId ?? null,
305
- layoutParamAccess: options.layoutParamAccess,
418
+ mountedLayouts,
306
419
  mountedSlotIds,
307
420
  makeThenableParams,
308
421
  matchedParams: params,
@@ -342,18 +455,27 @@ async function buildPageElements(options) {
342
455
  * RSC suffix removed). Re-parsing `request.url` here would re-introduce the
343
456
  * basePath and silently break the match for any app that configures one.
344
457
  */
345
- function buildSlotOverrides(route, routeParams, routePath, opts) {
458
+ function buildSlotOverrides(route, routeParams, routePath, opts, interceptMetadataOutlet) {
346
459
  const overrides = {};
347
460
  if (opts && opts.interceptSlotKey && opts.interceptPage && opts.interceptSlotKey !== "__vinext_page_intercept") overrides[opts.interceptSlotKey] = {
348
461
  branchSegments: opts.interceptBranchSegments ?? null,
349
462
  identitySegments: resolveInterceptedSlotIdentitySegments(opts.interceptSourcePageSegments, opts.interceptSlotKey),
463
+ forbiddenModules: opts.interceptForbiddens ?? null,
464
+ forbiddenTreePositions: opts.interceptForbiddenTreePositions ?? null,
350
465
  layoutModules: opts.interceptLayouts || null,
351
466
  layoutSegments: opts.interceptLayoutSegments ?? null,
352
467
  loadingModules: opts.interceptLoadings || null,
353
468
  loadingTreePositions: opts.interceptLoadingTreePositions ?? null,
469
+ metadataOutlet: interceptMetadataOutlet ?? null,
470
+ notFoundModules: opts.interceptNotFounds ?? null,
471
+ notFoundTreePositions: opts.interceptNotFoundTreePositions ?? null,
354
472
  pageModule: opts.interceptPage,
355
473
  params: opts.interceptParams || routeParams,
356
- routeSegments: resolveInterceptedSlotSegments(opts.interceptSourcePageSegments, opts.interceptSlotKey)
474
+ routeSegments: resolveInterceptedSlotSegments(opts.interceptSourcePageSegments, opts.interceptSlotKey),
475
+ unauthorizedModules: opts.interceptUnauthorizeds ?? null,
476
+ unauthorizedTreePositions: opts.interceptUnauthorizedTreePositions ?? null,
477
+ errorModules: opts.interceptErrors ?? null,
478
+ errorTreePositions: opts.interceptErrorTreePositions ?? null
357
479
  };
358
480
  const slotParamOverrides = resolveSlotParamOverrides(route, routePath);
359
481
  for (const [slotKey, params] of Object.entries(slotParamOverrides ?? {})) {
@@ -1,8 +1,13 @@
1
- import { ClassificationReason } from "../build/layout-classification-types.js";
2
- import { LayoutFlags } from "./app-elements-wire.js";
3
- import "./app-elements.js";
4
1
  //#region src/server/app-page-execution.d.ts
5
2
  export declare function tagAppPageMetadataError<T>(error: T): T;
3
+ export declare function tagAppPageSlotError<T>(error: T, layoutIndex: number, notFoundBoundary?: string): T;
4
+ export declare function tagAppPagePageError<T>(error: T): T;
5
+ export declare function tagAppPageLayoutError<T>(error: T, layoutIndex: number): T;
6
+ /**
7
+ * The id of the not-found boundary that catches the route page's notFound():
8
+ * the page-level boundary, or the segment one it passes the signal up to.
9
+ */
10
+ export declare const APP_PAGE_NOT_FOUND_BOUNDARY_ID = "page";
6
11
  export type AppPageSpecialError = {
7
12
  kind: "redirect";
8
13
  location: string;
@@ -13,6 +18,19 @@ export type AppPageSpecialError = {
13
18
  kind: "http-access-fallback";
14
19
  statusCode: number;
15
20
  fromMetadata?: boolean;
21
+ /** Set when a parallel slot threw it: the layout rendering the outermost such slot. */
22
+ slotLayoutIndex?: number;
23
+ /**
24
+ * Set when a route layout's own component threw it, above any slot that
25
+ * did: the outermost such layout, whose boundary above catches it.
26
+ */
27
+ layoutIndex?: number;
28
+ /**
29
+ * Set when the render threw a copy nothing tagged: a server component
30
+ * that a layout, the page or a template renders. The document's
31
+ * fallback then finds out whether a layout's subtree threw it.
32
+ */
33
+ unattributed?: boolean;
16
34
  };
17
35
  export type AppPageFontPreload = {
18
36
  href: string;
@@ -79,50 +97,6 @@ type BuildAppPageSpecialErrorResponseOptions = {
79
97
  serveStreamingMetadata?: boolean;
80
98
  specialError: AppPageSpecialError;
81
99
  };
82
- type ProbeAppPageLayoutsResult = {
83
- response: Response | null;
84
- layoutFlags: LayoutFlags;
85
- };
86
- export type LayoutClassificationOptions = {
87
- /** Build-time classifications from segment config or module graph, keyed by layout index. */
88
- buildTimeClassifications?: ReadonlyMap<number, "static" | "dynamic"> | null;
89
- /**
90
- * Per-layout classification reasons keyed by layout index. Requires
91
- * `VINEXT_DEBUG_CLASSIFICATION` at BOTH lifecycle points: at build time so
92
- * the plugin patches the `__VINEXT_CLASS_REASONS` dispatch stub, and at
93
- * runtime so the route object actually calls it. Setting the flag only at
94
- * runtime leaves the stub returning `null`, and every build-time classified
95
- * layout will fall through to `{ layer: "no-classifier" }` in the debug
96
- * channel. The hot path never reads this and the wire payload is unchanged.
97
- */
98
- buildTimeReasons?: ReadonlyMap<number, ClassificationReason> | null;
99
- /**
100
- * Emits one log line per layout with the classification reason, keyed by
101
- * layout ID. Set by the generator when `VINEXT_DEBUG_CLASSIFICATION` is
102
- * active. When undefined, the probe loop skips debug emission entirely.
103
- */
104
- debugClassification?: (layoutId: string, reason: ClassificationReason) => void;
105
- /** Maps layout index to its layout ID (e.g. "layout:/blog"). */
106
- getLayoutId: (layoutIndex: number) => string;
107
- /**
108
- * Returns whether the completed per-layout observation makes static reuse
109
- * unsafe even if the older dynamic scope did not report dynamic usage.
110
- */
111
- isLayoutObservationDynamic?: (layoutId: string) => boolean;
112
- /** Runs a function with isolated dynamic usage tracking per layout. */
113
- runWithIsolatedDynamicScope: <T>(fn: () => T | Promise<T>) => Promise<{
114
- result: T;
115
- dynamicDetected: boolean;
116
- }>;
117
- };
118
- type ProbeAppPageLayoutsOptions = {
119
- layoutCount: number;
120
- onLayoutError: (error: unknown, layoutIndex: number) => Promise<Response | null>;
121
- probeLayoutAt: (layoutIndex: number) => unknown;
122
- runWithSuppressedHookWarning<T>(probe: () => Promise<T>): Promise<T>;
123
- /** When provided, enables per-layout static/dynamic classification. */
124
- classification?: LayoutClassificationOptions | null;
125
- };
126
100
  export declare function resolveAppPageSpecialError(error: unknown): AppPageSpecialError | null;
127
101
  /**
128
102
  * Resolve the special error that rejected an SSR shell. An error from the RSC
@@ -130,9 +104,29 @@ export declare function resolveAppPageSpecialError(error: unknown): AppPageSpeci
130
104
  * generateMetadata() threw it comes from the errors the RSC render threw with
131
105
  * that digest. When the page threw one too, the page's decides. An error a
132
106
  * client component threw during SSR is the page's, since generateMetadata()
133
- * runs only in the RSC render.
107
+ * runs only in the RSC render. A notFound() / forbidden() / unauthorized()
108
+ * a parallel slot's page threw is caught above the layout rendering it,
109
+ * unless the slot's own not-found catches its notFound() and every other copy
110
+ * is the page's or another slot's. One a route layout threw is caught above
111
+ * that layout, and the outermost such layout wins. A copy nothing tagged,
112
+ * such as a template's or one from a component a layout or the page renders,
113
+ * marks the error unattributed.
134
114
  */
135
115
  export declare function resolveAppPageShellSpecialError(error: unknown, renderedSpecialErrors: readonly unknown[]): AppPageSpecialError | null;
116
+ /**
117
+ * The parallel slot not-found boundaries that catch the `notFound()` that
118
+ * rejected an SSR shell, or null when any copy the RSC render threw isn't
119
+ * caught inside its slot. On the client, each slot's own not-found boundary
120
+ * catches its signal while the rest of the route renders, as in Next.js,
121
+ * which sends an empty error shell and renders them in the browser. A copy
122
+ * no slot threw is caught by the page's boundary beside them when the page
123
+ * threw it, including from a component the page renders, which nothing tags.
124
+ * One a layout or a template threw renders outside the caught boundaries, so
125
+ * the document's render from the same payload throws it again and takes the
126
+ * fallback, which keeps it above the slot's layout (see
127
+ * `resolveAppPageShellSpecialError`). Without a slot's, that fallback renders.
128
+ */
129
+ export declare function resolveAppPageCaughtNotFoundBoundaries(error: unknown, renderedSpecialErrors: readonly unknown[]): readonly string[] | null;
136
130
  /**
137
131
  * The response headers stored with a page's special-error entries: a
138
132
  * redirect's own `location`, not the response's, which middleware may have
@@ -140,11 +134,9 @@ export declare function resolveAppPageShellSpecialError(error: unknown, rendered
140
134
  */
141
135
  export declare function resolveAppPageSpecialErrorStoredHeaders(specialError: AppPageSpecialError, basePath: string | undefined): Record<string, string> | undefined;
142
136
  export declare function buildAppPageSpecialErrorResponse(options: BuildAppPageSpecialErrorResponseOptions): Promise<Response>;
143
- /** See `LayoutFlags` type docblock in app-elements.ts for lifecycle. */
144
- export declare function probeAppPageLayouts(options: ProbeAppPageLayoutsOptions): Promise<ProbeAppPageLayoutsResult>;
145
137
  export declare function readAppPageBinaryStream(stream: ReadableStream<Uint8Array>): Promise<ArrayBuffer>;
146
138
  export declare function bufferAppPageBinaryStream(stream: ReadableStream<Uint8Array>): Promise<ReadableStream<Uint8Array>>;
147
139
  export declare function teeAppPageRscStreamForCapture(stream: ReadableStream<Uint8Array>, shouldCapture: boolean): AppPageRscStreamCapture;
148
140
  export declare function buildAppPageFontLinkHeader(preloads: readonly AppPageFontPreload[] | null | undefined): string;
149
141
  //#endregion
150
- export type { LayoutFlags };
142
+ export {};