vinext 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -1
  2. package/dist/build/action-owner-manifest.d.ts +3 -2
  3. package/dist/build/action-owner-manifest.js +18 -2
  4. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  5. package/dist/build/app-page-static-eligibility.js +80 -13
  6. package/dist/build/clean-output.d.ts +2 -1
  7. package/dist/build/client-build-config.d.ts +13 -3
  8. package/dist/build/client-build-config.js +46 -9
  9. package/dist/build/client-reference-async.d.ts +48 -0
  10. package/dist/build/client-reference-async.js +123 -0
  11. package/dist/build/client-reference-chunks.d.ts +32 -0
  12. package/dist/build/client-reference-chunks.js +111 -0
  13. package/dist/build/client-reference-groups.d.ts +9 -1
  14. package/dist/build/client-reference-groups.js +40 -2
  15. package/dist/build/css-url-assets.d.ts +2 -1
  16. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  17. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  18. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  19. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  20. package/dist/build/google-fonts/validate.d.ts +2 -1
  21. package/dist/build/inline-css.d.ts +2 -1
  22. package/dist/build/layout-classification.d.ts +2 -1
  23. package/dist/build/module-dependency-cache.d.ts +2 -1
  24. package/dist/build/next-client-runtime-manifests.d.ts +2 -1
  25. package/dist/build/precompress.d.ts +2 -1
  26. package/dist/build/precompress.js +1 -1
  27. package/dist/build/prerender-paths.d.ts +2 -1
  28. package/dist/build/prerender-phase.d.ts +2 -1
  29. package/dist/build/prerender-server-pool.js +1 -1
  30. package/dist/build/prerender.d.ts +3 -2
  31. package/dist/build/prerender.js +5 -4
  32. package/dist/build/report.d.ts +2 -1
  33. package/dist/build/route-classification-injector.d.ts +2 -1
  34. package/dist/build/route-classification-manifest.d.ts +2 -1
  35. package/dist/build/run-prerender.d.ts +2 -1
  36. package/dist/build/server-actions-encryption-key.d.ts +2 -1
  37. package/dist/build/ssr-manifest.js +25 -2
  38. package/dist/build/standalone.d.ts +2 -1
  39. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  40. package/dist/cache.js +1 -2
  41. package/dist/check.d.ts +2 -1
  42. package/dist/check.js +4 -0
  43. package/dist/cli-args.d.ts +2 -1
  44. package/dist/cli.js +2 -0
  45. package/dist/client/client-redirect-matcher.js +2 -1
  46. package/dist/client/client-redirects.d.ts +4 -3
  47. package/dist/client/client-redirects.js +2 -1
  48. package/dist/client/client-rewrites.d.ts +2 -1
  49. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  50. package/dist/client/index.js +1 -2
  51. package/dist/client/instrumentation-client-state.js +5 -5
  52. package/dist/client/navigation-runtime.d.ts +3 -1
  53. package/dist/client/navigation-runtime.js +1 -1
  54. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  55. package/dist/client/vinext-next-data.d.ts +25 -1
  56. package/dist/client/window-next.d.ts +2 -1
  57. package/dist/config/config-matchers.d.ts +12 -1
  58. package/dist/config/config-matchers.js +111 -16
  59. package/dist/config/dotenv.d.ts +2 -1
  60. package/dist/config/next-config.d.ts +13 -1
  61. package/dist/config/next-config.js +29 -4
  62. package/dist/config/tsconfig-paths.d.ts +2 -1
  63. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  64. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  65. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  66. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  67. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  68. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  69. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  70. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  71. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  72. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  73. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  74. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  75. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  76. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  77. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  78. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  79. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  80. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  81. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  82. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  83. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  84. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  89. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  90. package/dist/entries/app-browser-entry.d.ts +20 -5
  91. package/dist/entries/app-browser-entry.js +79 -6
  92. package/dist/entries/app-rsc-entry.d.ts +2 -1
  93. package/dist/entries/app-rsc-entry.js +42 -12
  94. package/dist/entries/app-rsc-manifest.d.ts +2 -1
  95. package/dist/entries/app-rsc-manifest.js +53 -0
  96. package/dist/entries/pages-entry-helpers.js +1 -2
  97. package/dist/entries/pages-server-entry.d.ts +2 -1
  98. package/dist/entries/pages-server-entry.js +1 -1
  99. package/dist/entries/runtime-entry-module.d.ts +1 -0
  100. package/dist/entries/runtime-entry-module.js +4 -1
  101. package/dist/image/image-adapters-virtual.d.ts +2 -1
  102. package/dist/index.js +102 -34
  103. package/dist/plugins/client-compile-hints.d.ts +30 -0
  104. package/dist/plugins/client-compile-hints.js +88 -0
  105. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  106. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  107. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  108. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  109. package/dist/plugins/environment.d.ts +2 -1
  110. package/dist/plugins/fonts.js +9 -12
  111. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  112. package/dist/plugins/import-meta-url.d.ts +2 -1
  113. package/dist/plugins/og-assets.d.ts +2 -1
  114. package/dist/plugins/og-assets.js +2 -3
  115. package/dist/plugins/optimize-imports.d.ts +2 -1
  116. package/dist/plugins/pages-node-externals.d.ts +2 -1
  117. package/dist/plugins/remove-console.d.ts +2 -1
  118. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  119. package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
  120. package/dist/plugins/rsc-client-reference-loaders.js +170 -68
  121. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  122. package/dist/plugins/sass.d.ts +2 -1
  123. package/dist/plugins/strip-server-exports.d.ts +2 -1
  124. package/dist/plugins/styled-jsx.d.ts +2 -1
  125. package/dist/plugins/transform-result.d.ts +2 -1
  126. package/dist/plugins/typeof-window.d.ts +2 -1
  127. package/dist/plugins/worker-image-imports.js +1 -1
  128. package/dist/plugins/worker-use-server.d.ts +2 -1
  129. package/dist/routing/app-route-graph.d.ts +40 -0
  130. package/dist/routing/app-route-graph.js +122 -50
  131. package/dist/routing/browser-route-manifest.d.ts +2 -1
  132. package/dist/routing/optimistic-route-trie.d.ts +2 -1
  133. package/dist/routing/route-matching.d.ts +2 -1
  134. package/dist/routing/route-pattern.d.ts +2 -1
  135. package/dist/server/accept-encoding.d.ts +2 -1
  136. package/dist/server/app-action-forwarding.d.ts +2 -1
  137. package/dist/server/app-bfcache-identity.d.ts +2 -1
  138. package/dist/server/app-browser-action-result.d.ts +2 -1
  139. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
  140. package/dist/server/app-browser-entry.js +30 -6
  141. package/dist/server/app-browser-error.d.ts +2 -1
  142. package/dist/server/app-browser-history-controller.d.ts +2 -1
  143. package/dist/server/app-browser-hydration.d.ts +2 -1
  144. package/dist/server/app-browser-interception-context.d.ts +2 -1
  145. package/dist/server/app-browser-navigation-controller.js +15 -10
  146. package/dist/server/app-browser-popstate.d.ts +2 -1
  147. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  148. package/dist/server/app-browser-server-action-client.d.ts +2 -1
  149. package/dist/server/app-browser-state.js +1 -1
  150. package/dist/server/app-browser-stream.d.ts +2 -1
  151. package/dist/server/app-browser-visible-commit.d.ts +2 -1
  152. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  153. package/dist/server/app-client-reference-manifest.js +46 -0
  154. package/dist/server/app-client-reference-preloader.d.ts +25 -5
  155. package/dist/server/app-client-reference-preloader.js +22 -7
  156. package/dist/server/app-elements-wire.d.ts +2 -1
  157. package/dist/server/app-elements.d.ts +2 -0
  158. package/dist/server/app-elements.js +3 -1
  159. package/dist/server/app-fallback-renderer.d.ts +9 -2
  160. package/dist/server/app-fallback-renderer.js +4 -1
  161. package/dist/server/app-history-state.d.ts +2 -1
  162. package/dist/server/app-inline-css-client.d.ts +2 -1
  163. package/dist/server/app-layout-param-observation.d.ts +2 -1
  164. package/dist/server/app-metadata-tracing.d.ts +2 -1
  165. package/dist/server/app-optimistic-routing.d.ts +18 -1
  166. package/dist/server/app-optimistic-routing.js +34 -1
  167. package/dist/server/app-page-boundary-render.d.ts +20 -2
  168. package/dist/server/app-page-boundary-render.js +221 -38
  169. package/dist/server/app-page-boundary.d.ts +34 -5
  170. package/dist/server/app-page-boundary.js +40 -7
  171. package/dist/server/app-page-cache-finalizer.d.ts +2 -1
  172. package/dist/server/app-page-cache-finalizer.js +1 -1
  173. package/dist/server/app-page-cache-render.d.ts +10 -2
  174. package/dist/server/app-page-cache-render.js +14 -2
  175. package/dist/server/app-page-cache.js +2 -2
  176. package/dist/server/app-page-dispatch.d.ts +34 -1
  177. package/dist/server/app-page-dispatch.js +163 -34
  178. package/dist/server/app-page-element-builder.d.ts +17 -1
  179. package/dist/server/app-page-element-builder.js +187 -66
  180. package/dist/server/app-page-execution.d.ts +28 -1
  181. package/dist/server/app-page-execution.js +114 -5
  182. package/dist/server/app-page-head.d.ts +95 -3
  183. package/dist/server/app-page-head.js +307 -152
  184. package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
  185. package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
  186. package/dist/server/app-page-method.d.ts +2 -1
  187. package/dist/server/app-page-probe.d.ts +2 -1
  188. package/dist/server/app-page-render-identity.d.ts +2 -1
  189. package/dist/server/app-page-render.d.ts +7 -1
  190. package/dist/server/app-page-render.js +35 -10
  191. package/dist/server/app-page-request.d.ts +14 -1
  192. package/dist/server/app-page-request.js +1 -1
  193. package/dist/server/app-page-route-wiring.d.ts +52 -2
  194. package/dist/server/app-page-route-wiring.js +197 -47
  195. package/dist/server/app-page-rsc-render-status.d.ts +2 -1
  196. package/dist/server/app-page-search-params-observation.d.ts +7 -2
  197. package/dist/server/app-page-search-params-observation.js +8 -1
  198. package/dist/server/app-page-segment-plan.d.ts +2 -1
  199. package/dist/server/app-page-stream.d.ts +31 -1
  200. package/dist/server/app-page-stream.js +23 -4
  201. package/dist/server/app-pages-bridge.d.ts +2 -1
  202. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  203. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  204. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  205. package/dist/server/app-prerender-static-params.d.ts +2 -1
  206. package/dist/server/app-render-dependency.d.ts +11 -1
  207. package/dist/server/app-render-dependency.js +26 -7
  208. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  209. package/dist/server/app-response-stage-entry.d.ts +2 -1
  210. package/dist/server/app-route-handler-cache.d.ts +2 -1
  211. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  212. package/dist/server/app-route-handler-dispatch.js +1 -1
  213. package/dist/server/app-route-handler-execution.d.ts +2 -1
  214. package/dist/server/app-route-handler-response.d.ts +2 -1
  215. package/dist/server/app-route-handler-runtime.d.ts +2 -1
  216. package/dist/server/app-route-module-loader.d.ts +18 -1
  217. package/dist/server/app-route-module-loader.js +8 -0
  218. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  219. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  220. package/dist/server/app-rsc-errors.d.ts +2 -1
  221. package/dist/server/app-rsc-handler.d.ts +2 -1
  222. package/dist/server/app-rsc-handler.js +6 -10
  223. package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
  224. package/dist/server/app-rsc-route-matching.d.ts +38 -1
  225. package/dist/server/app-rsc-route-matching.js +24 -0
  226. package/dist/server/app-segment-config.d.ts +2 -1
  227. package/dist/server/app-segment-config.js +1 -14
  228. package/dist/server/app-server-action-execution.d.ts +2 -1
  229. package/dist/server/app-server-action-execution.js +3 -3
  230. package/dist/server/app-ssr-entry.d.ts +6 -0
  231. package/dist/server/app-ssr-entry.js +91 -44
  232. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  233. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  234. package/dist/server/app-ssr-stream.d.ts +22 -10
  235. package/dist/server/app-ssr-stream.js +299 -67
  236. package/dist/server/app-static-generation.d.ts +2 -1
  237. package/dist/server/app-streamed-client-references.d.ts +39 -0
  238. package/dist/server/app-streamed-client-references.js +156 -0
  239. package/dist/server/app-visited-response-cache.d.ts +2 -1
  240. package/dist/server/app-worker-stages.d.ts +2 -1
  241. package/dist/server/artifact-compatibility.d.ts +2 -1
  242. package/dist/server/bfcache-identity.d.ts +2 -1
  243. package/dist/server/cache-headers.d.ts +2 -1
  244. package/dist/server/cacheability-request.d.ts +2 -1
  245. package/dist/server/client-reuse-manifest.d.ts +2 -1
  246. package/dist/server/config-headers.d.ts +2 -1
  247. package/dist/server/csp.d.ts +2 -1
  248. package/dist/server/default-global-not-found-module.d.ts +2 -1
  249. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  250. package/dist/server/default-http-access-fallback-modules.js +31 -0
  251. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  252. package/dist/server/defer-until-stream-consumed.js +154 -21
  253. package/dist/server/dev-lockfile.d.ts +32 -2
  254. package/dist/server/dev-lockfile.js +46 -2
  255. package/dist/server/dev-module-runner.d.ts +2 -1
  256. package/dist/server/dev-server.js +10 -3
  257. package/dist/server/fetch-handler.js +1 -2
  258. package/dist/server/file-based-metadata.d.ts +2 -1
  259. package/dist/server/framework-tracer.d.ts +2 -1
  260. package/dist/server/html.d.ts +1 -0
  261. package/dist/server/html.js +19 -1
  262. package/dist/server/http-conditional.d.ts +2 -1
  263. package/dist/server/http-error-responses.d.ts +2 -1
  264. package/dist/server/implicit-tags.d.ts +2 -1
  265. package/dist/server/metadata-route-build-data.d.ts +2 -1
  266. package/dist/server/metadata-route-build-data.js +1 -1
  267. package/dist/server/metadata-route-response.d.ts +2 -1
  268. package/dist/server/metadata-route-response.js +1 -1
  269. package/dist/server/metadata-routes.d.ts +2 -1
  270. package/dist/server/middleware-runtime.d.ts +2 -1
  271. package/dist/server/navigation-trace.d.ts +2 -1
  272. package/dist/server/next-error-digest.d.ts +2 -1
  273. package/dist/server/nitro-public-files-plugin.d.ts +2 -1
  274. package/dist/server/nitro-public-files.d.ts +2 -1
  275. package/dist/server/opentelemetry-api.d.ts +2 -1
  276. package/dist/server/operation-token.d.ts +2 -1
  277. package/dist/server/pages-api-route.d.ts +2 -1
  278. package/dist/server/pages-asset-tags.d.ts +2 -1
  279. package/dist/server/pages-body-parser-config.d.ts +2 -1
  280. package/dist/server/pages-client-assets.d.ts +4 -0
  281. package/dist/server/pages-data-route.d.ts +2 -1
  282. package/dist/server/pages-document-asset-props.d.ts +2 -1
  283. package/dist/server/pages-document-initial-props.d.ts +2 -1
  284. package/dist/server/pages-execution-tracing.d.ts +2 -1
  285. package/dist/server/pages-execution-tracing.js +1 -1
  286. package/dist/server/pages-get-initial-props.d.ts +2 -1
  287. package/dist/server/pages-page-data.d.ts +7 -1
  288. package/dist/server/pages-page-data.js +35 -12
  289. package/dist/server/pages-page-handler.d.ts +3 -2
  290. package/dist/server/pages-page-handler.js +16 -7
  291. package/dist/server/pages-page-method.d.ts +2 -1
  292. package/dist/server/pages-page-response.d.ts +2 -1
  293. package/dist/server/pages-preview.d.ts +2 -1
  294. package/dist/server/pages-readiness.d.ts +2 -1
  295. package/dist/server/pages-request-pipeline.d.ts +2 -1
  296. package/dist/server/pages-request-pipeline.js +4 -5
  297. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  298. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  299. package/dist/server/pages-route-data-kind.d.ts +2 -1
  300. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  301. package/dist/server/prerender-route-params.d.ts +2 -1
  302. package/dist/server/prod-server.js +9 -3
  303. package/dist/server/request-log.d.ts +2 -1
  304. package/dist/server/request-tracing.d.ts +2 -1
  305. package/dist/server/request-tracing.js +1 -1
  306. package/dist/server/response-start-tracing.js +7 -29
  307. package/dist/server/rsc-render-stream.d.ts +4 -0
  308. package/dist/server/rsc-render-stream.js +25 -0
  309. package/dist/server/seed-cache.d.ts +2 -1
  310. package/dist/server/seed-cache.js +1 -1
  311. package/dist/server/static-file-cache.d.ts +2 -1
  312. package/dist/server/static-file-cache.js +1 -0
  313. package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
  314. package/dist/server/worker-revalidation-context.d.ts +2 -1
  315. package/dist/server/worker-stages.d.ts +2 -1
  316. package/dist/shims/app.d.ts +2 -1
  317. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  318. package/dist/shims/cache-handler.d.ts +8 -3
  319. package/dist/shims/cache-handler.js +29 -9
  320. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  321. package/dist/shims/caught-not-found-boundaries.js +48 -0
  322. package/dist/shims/cdn-purge-routes.d.ts +2 -1
  323. package/dist/shims/client-locale.js +2 -1
  324. package/dist/shims/client-page-root.d.ts +2 -1
  325. package/dist/shims/config.d.ts +2 -1
  326. package/dist/shims/default-forbidden.d.ts +4 -0
  327. package/dist/shims/default-forbidden.js +18 -0
  328. package/dist/shims/default-not-found.d.ts +0 -5
  329. package/dist/shims/default-not-found.js +5 -41
  330. package/dist/shims/default-unauthorized.d.ts +4 -0
  331. package/dist/shims/default-unauthorized.js +18 -0
  332. package/dist/shims/error-boundary.d.ts +39 -3
  333. package/dist/shims/error-boundary.js +31 -16
  334. package/dist/shims/font-google.js +1 -2
  335. package/dist/shims/font-utils.d.ts +3 -2
  336. package/dist/shims/font-utils.js +5 -3
  337. package/dist/shims/form.js +1 -1
  338. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  339. package/dist/shims/http-access-error-fallback.js +47 -0
  340. package/dist/shims/image.d.ts +1 -22
  341. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  342. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  343. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  344. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  345. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  346. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  347. package/dist/shims/internal/client-reference-loader.js +91 -0
  348. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  349. package/dist/shims/internal/cookies.js +1 -2
  350. package/dist/shims/internal/headers-state.d.ts +2 -0
  351. package/dist/shims/internal/headers-state.js +6 -1
  352. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
  353. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  354. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  355. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  356. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  357. package/dist/shims/link.js +195 -52
  358. package/dist/shims/metadata.d.ts +32 -11
  359. package/dist/shims/metadata.js +88 -26
  360. package/dist/shims/navigation-errors.d.ts +2 -1
  361. package/dist/shims/navigation.d.ts +22 -2
  362. package/dist/shims/navigation.js +74 -20
  363. package/dist/shims/pages-router-runtime.d.ts +2 -1
  364. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  365. package/dist/shims/router.js +14 -3
  366. package/dist/shims/unified-request-context.js +3 -3
  367. package/dist/typegen.d.ts +2 -1
  368. package/dist/utils/client-build-manifest.d.ts +4 -1
  369. package/dist/utils/client-build-manifest.js +9 -2
  370. package/dist/utils/client-entry-manifest.d.ts +13 -0
  371. package/dist/utils/client-entry-manifest.js +20 -1
  372. package/dist/utils/client-reference-chunks.d.ts +45 -0
  373. package/dist/utils/client-reference-chunks.js +30 -0
  374. package/dist/utils/client-runtime-metadata.d.ts +9 -1
  375. package/dist/utils/client-runtime-metadata.js +40 -9
  376. package/dist/utils/compare.d.ts +9 -0
  377. package/dist/utils/compare.js +15 -1
  378. package/dist/utils/lazy-chunks.d.ts +14 -0
  379. package/dist/utils/lazy-chunks.js +27 -1
  380. package/dist/utils/middleware-request-headers.d.ts +2 -1
  381. package/dist/utils/project.d.ts +2 -1
  382. package/dist/utils/project.js +9 -1
  383. package/dist/utils/query.d.ts +2 -1
  384. package/dist/utils/sorted-array.d.ts +2 -1
  385. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  386. package/package.json +5 -5
  387. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  388. package/dist/server/default-not-found-module.d.ts +0 -19
  389. package/dist/server/default-not-found-module.js +0 -18
  390. package/dist/server/rsc-stream-hints.d.ts +0 -21
  391. package/dist/server/rsc-stream-hints.js +0 -227
@@ -1,21 +1,24 @@
1
1
  import { APP_RSC_RENDER_MODE_PREFETCH_EMPTY, APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL } from "./app-rsc-render-mode.js";
2
2
  import { fnv1a64 } from "../utils/hash.js";
3
3
  import { createInlineScriptTag, escapeHtmlAttr } from "./html.js";
4
- import { createAppRenderDependency, registerAppElementRenderDependencies, renderAfterAppDependencies, renderAppComponentWithDependencyBarrier } from "./app-render-dependency.js";
4
+ import { createAppRenderDependency, invokeAppComponentMappingErrors, isReactOwnedAppComponent, registerAppElementRenderDependencies, renderAfterAppDependencies, renderAppComponentWithDependencyBarrier } from "./app-render-dependency.js";
5
5
  import { APP_LAYOUT_IDS_KEY, APP_ROOT_LAYOUT_KEY, APP_STATIC_SIBLINGS_KEY, AppElementsWire, normalizeAppElementsSlotBindings } from "./app-elements-wire.js";
6
- import { APP_PREFETCH_LOADING_SHELL_MARKER_KEY } from "./app-elements.js";
6
+ import { APP_PREFETCH_LOADING_SHELL_MARKER_KEY, APP_STREAMING_METADATA_BODY_ID_PREFIX } from "./app-elements.js";
7
7
  import DefaultGlobalError from "../shims/default-global-error.js";
8
- import { ErrorBoundary, ForbiddenBoundary, GlobalErrorBoundary, NotFoundBoundary, RedirectBoundary, UnauthorizedBoundary } from "../shims/error-boundary.js";
8
+ import { ErrorBoundary, ForbiddenBoundary, GlobalErrorBoundary, HttpAccessFallbackPassthrough, NotFoundBoundary, RedirectBoundary, UnauthorizedBoundary } from "../shims/error-boundary.js";
9
9
  import { AppRouterScrollTarget } from "../shims/app-router-scroll.js";
10
+ import DefaultForbidden from "../shims/default-forbidden.js";
10
11
  import DefaultNotFound from "../shims/default-not-found.js";
12
+ import DefaultUnauthorized from "../shims/default-unauthorized.js";
11
13
  import { LayoutSegmentProvider } from "../shims/layout-segment-context.js";
12
14
  import { withUseCacheLayoutMarker } from "../shims/internal/app-page-props-cache-key.js";
13
15
  import { MetadataHead, ViewportHead, renderMetadataToHtml } from "../shims/metadata.js";
14
16
  import { BfcacheSegmentBoundary, Children as Children$1, ParallelSlot, Slot } from "../shims/slot.js";
15
17
  import { StreamedIconsInsertion } from "../shims/streamed-icons.js";
18
+ import { APP_PAGE_NOT_FOUND_BOUNDARY_ID, tagAppPageSlotError } from "./app-page-execution.js";
16
19
  import { resolveAppPageBranchParams, resolveAppPageSegmentParamScopeKeys, resolveAppPageSegmentParams } from "./app-page-params.js";
17
20
  import { probeReactServerSubtree } from "./app-page-probe.js";
18
- import { APP_PAGE_SEGMENT_KEY, resolveAppPageChildSegments, resolveAppPageSegmentStateKey, resolveAppPageTemplateStateKey } from "./app-page-segment-state.js";
21
+ import { APP_PAGE_SEGMENT_KEY, isAppPageRouteGroupSegment, resolveAppPageChildSegments, resolveAppPageSegmentStateKey, resolveAppPageTemplateStateKey } from "./app-page-segment-state.js";
19
22
  import { createAppPageSegmentPlan } from "./app-page-segment-plan.js";
20
23
  import { resolveAppPageModuleTraceSegment, traceGetLayoutOrPageModule } from "./app-page-tracing.js";
21
24
  import { Fragment, Suspense } from "react";
@@ -25,9 +28,22 @@ const APP_PAGE_SLOT_SEGMENT_KEY = "(__SLOT__)";
25
28
  const APP_PAGE_LAYOUT_PROBE_CHILD = /* @__PURE__ */ jsx(Fragment, {});
26
29
  const DEFAULT_GLOBAL_ERROR_COMPONENT = DefaultGlobalError;
27
30
  const DEFAULT_NOT_FOUND_COMPONENT = DefaultNotFound;
31
+ const DEFAULT_FORBIDDEN_COMPONENT = DefaultForbidden;
32
+ const DEFAULT_UNAUTHORIZED_COMPONENT = DefaultUnauthorized;
28
33
  function resolveSlotLayoutParams(routeSegments, treePosition, params) {
29
34
  return resolveAppPageBranchParams(routeSegments, treePosition, params);
30
35
  }
36
+ /**
37
+ * A parallel slot's layout, whose notFound(), forbidden() and unauthorized()
38
+ * are caught above the layout that renders the slot, as its page's are. Next.js
39
+ * attaches the slot's own boundaries inside that layout, so they never catch it.
40
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/server/app-render/create-component-tree.tsx
41
+ */
42
+ function createSlotLayoutElement(LayoutComponent, props, slotLayoutIndex, notFoundBoundary) {
43
+ if (slotLayoutIndex === void 0 || isReactOwnedAppComponent(LayoutComponent)) return /* @__PURE__ */ jsx(LayoutComponent, { ...props });
44
+ const SlotLayoutInvoker = () => invokeAppComponentMappingErrors(LayoutComponent, props, (error) => tagAppPageSlotError(error, slotLayoutIndex, notFoundBoundary));
45
+ return /* @__PURE__ */ jsx(SlotLayoutInvoker, {});
46
+ }
31
47
  function getDefaultExport(module) {
32
48
  return module?.default ?? null;
33
49
  }
@@ -266,7 +282,7 @@ async function AppPageHead(props) {
266
282
  metadata,
267
283
  pathname: props.pathname,
268
284
  trailingSlash: props.trailingSlash
269
- }) : null, /* @__PURE__ */ jsx(ViewportHead, { viewport })] });
285
+ }) : null, viewport ? /* @__PURE__ */ jsx(ViewportHead, { viewport }) : null] });
270
286
  }
271
287
  AppPageHead.displayName = "Vinext.Head";
272
288
  function hasStreamedIcons(metadata) {
@@ -360,8 +376,56 @@ function buildAppPageElements(options) {
360
376
  for (const templateEntry of templateEntries) templateEntriesByTreePosition.set(templateEntry.treePosition, templateEntry);
361
377
  for (const loadingEntry of loadingEntries) loadingEntriesByTreePosition.set(loadingEntry.treePosition, loadingEntry);
362
378
  for (const errorEntry of errorEntries) errorEntriesByTreePosition.set(errorEntry.treePosition, errorEntry);
379
+ const isOutermostEntryBelowLoading = (loadingTreePosition, treePosition, kind) => {
380
+ const enclosesEntry = (entryTreePosition, sameSegmentEncloses) => entryTreePosition > loadingTreePosition && (entryTreePosition < treePosition || sameSegmentEncloses && entryTreePosition === treePosition);
381
+ return !layoutEntries.some((entry) => getDefaultExport(entry.layoutModule) && enclosesEntry(entry.treePosition, kind !== "layout")) && !templateEntries.some((entry) => getDefaultExport(entry.templateModule) && enclosesEntry(entry.treePosition, kind === "page"));
382
+ };
363
383
  const layoutIndicesByTreePosition = /* @__PURE__ */ new Map();
364
384
  for (let index = 0; index < layoutEntries.length; index++) layoutIndicesByTreePosition.set(layoutEntries[index].treePosition, index);
385
+ const resolveAccessBoundaries = (segmentModules, segmentTreePositions, getLayoutModule, builtInComponent) => {
386
+ const files = /* @__PURE__ */ new Map();
387
+ if (segmentTreePositions) for (const [index, treePosition] of segmentTreePositions.entries()) {
388
+ const module = segmentModules?.[index];
389
+ if (module && getDefaultExport(module)) files.set(treePosition, module);
390
+ }
391
+ else for (const entry of layoutEntries) {
392
+ const module = getLayoutModule(entry);
393
+ if (module && getDefaultExport(module)) files.set(entry.treePosition, module);
394
+ }
395
+ const boundaries = /* @__PURE__ */ new Map();
396
+ for (const [treePosition, module] of files) {
397
+ const component = getDefaultExport(module);
398
+ if (component) boundaries.set(treePosition, {
399
+ component,
400
+ module
401
+ });
402
+ }
403
+ const rootTreePosition = layoutEntriesByTreePosition.has(0) ? 0 : layoutEntries[0]?.treePosition ?? null;
404
+ let rootModuleTreePosition = files.has(0) ? 0 : null;
405
+ for (const treePosition of files.keys()) if (rootTreePosition !== null && treePosition <= rootTreePosition && (rootModuleTreePosition === null || treePosition > rootModuleTreePosition)) rootModuleTreePosition = treePosition;
406
+ const rootModule = rootModuleTreePosition === null ? void 0 : files.get(rootModuleTreePosition);
407
+ const rootComponent = getDefaultExport(rootModule) ?? builtInComponent;
408
+ if (rootComponent) {
409
+ const rootBoundary = {
410
+ component: rootComponent,
411
+ module: rootModule ?? null
412
+ };
413
+ if (rootTreePosition !== null && !files.has(rootTreePosition)) boundaries.set(rootTreePosition, rootBoundary);
414
+ const firstSegment = routeSegments[0];
415
+ if (firstSegment !== void 0 && isAppPageRouteGroupSegment(firstSegment) && !files.has(1)) boundaries.set(1, rootBoundary);
416
+ }
417
+ for (const treePosition of boundaries.keys()) {
418
+ const hasLayout = layoutEntriesByTreePosition.has(treePosition);
419
+ if (rootTreePosition !== null && treePosition < rootTreePosition || !hasLayout && (treePosition === 0 || treePosition >= routeSegments.length)) boundaries.delete(treePosition);
420
+ }
421
+ return boundaries;
422
+ };
423
+ const rootNotFoundModule = options.route.segmentNotFoundTreePositions ? null : options.rootNotFoundModule;
424
+ const rootForbiddenModule = options.route.segmentForbiddenTreePositions ? null : options.rootForbiddenModule;
425
+ const rootUnauthorizedModule = options.route.segmentUnauthorizedTreePositions ? null : options.rootUnauthorizedModule;
426
+ const notFoundBoundaries = resolveAccessBoundaries(options.route.segmentNotFounds, options.route.segmentNotFoundTreePositions, (entry) => entry.notFoundModule, rootNotFoundModule ? null : DEFAULT_NOT_FOUND_COMPONENT);
427
+ const forbiddenBoundaries = resolveAccessBoundaries(options.route.segmentForbiddens, options.route.segmentForbiddenTreePositions, (entry) => entry.forbiddenModule, rootForbiddenModule ? null : DEFAULT_FORBIDDEN_COMPONENT);
428
+ const unauthorizedBoundaries = resolveAccessBoundaries(options.route.segmentUnauthorizeds, options.route.segmentUnauthorizedTreePositions, (entry) => entry.unauthorizedModule, rootUnauthorizedModule ? null : DEFAULT_UNAUTHORIZED_COMPONENT);
365
429
  const layoutDependenciesByIndex = /* @__PURE__ */ new Map();
366
430
  const renderDependenciesByElementId = /* @__PURE__ */ new Map();
367
431
  const layoutDependenciesBefore = [];
@@ -379,7 +443,10 @@ function buildAppPageElements(options) {
379
443
  ...layoutEntries.map((entry) => entry.treePosition),
380
444
  ...templateEntries.map((entry) => entry.treePosition),
381
445
  ...loadingEntries.map((entry) => entry.treePosition),
382
- ...errorEntries.map((entry) => entry.treePosition)
446
+ ...errorEntries.map((entry) => entry.treePosition),
447
+ ...notFoundBoundaries.keys(),
448
+ ...forbiddenBoundaries.keys(),
449
+ ...unauthorizedBoundaries.keys()
383
450
  ])).sort((left, right) => left - right);
384
451
  const resolveSlotOverride = (slotKey, slotName) => {
385
452
  const overrideByKey = options.slotOverrides?.[slotKey];
@@ -398,7 +465,7 @@ function buildAppPageElements(options) {
398
465
  }) : [];
399
466
  const prefetchLoadingComponent = getDefaultExport(prefetchLoadingEntry?.loadingModule);
400
467
  const shouldRenderPrefetchLoadingShell = isPrefetchLoadingShell && (prefetchLoadingComponent !== null || prefetchSlotLoadingEntries.length > 0);
401
- const streamingMetadataBodyId = options.resolveHead && metadataPlacement === "body" && (!isPrefetchLoadingShell || shouldRenderPrefetchLoadingShell) ? `__vinext_streaming_metadata_body:${routeId}` : null;
468
+ const streamingMetadataBodyId = options.resolveHead && metadataPlacement === "body" && (!isPrefetchLoadingShell || shouldRenderPrefetchLoadingShell) ? `${APP_STREAMING_METADATA_BODY_ID_PREFIX}${routeId}` : null;
402
469
  const prefetchCutoffTreePosition = isPrefetchLoadingShell ? prefetchLoadingEntry?.treePosition ?? prefetchSlotLoadingEntries.reduce((deepest, entry) => Math.max(deepest, entry.ownerTreePosition), 0) : null;
403
470
  const includesPrefetchTreePosition = (treePosition) => prefetchCutoffTreePosition === null || treePosition <= prefetchCutoffTreePosition;
404
471
  const segmentPlan = createAppPageSegmentPlan({
@@ -440,6 +507,12 @@ function buildAppPageElements(options) {
440
507
  [pageElementId]: null,
441
508
  [routeId]: null
442
509
  };
510
+ if (isPrefetchLoadingShell && !shouldRenderPrefetchLoadingShell && options.isUncacheableRender === true) return {
511
+ ...metadataEntries,
512
+ ...options.route.staticSiblings && options.route.staticSiblings.length > 0 ? { [APP_STATIC_SIBLINGS_KEY]: options.route.staticSiblings } : {},
513
+ [pageElementId]: null,
514
+ [routeId]: null
515
+ };
443
516
  const elements = {};
444
517
  for (const slotPlan of segmentPlan.slots) for (const segment of slotPlan.nestedBfcacheSegments) elements[segment.id] = null;
445
518
  if (options.route.staticSiblings && options.route.staticSiblings.length > 0) elements[APP_STATIC_SIBLINGS_KEY] = options.route.staticSiblings;
@@ -476,11 +549,15 @@ function buildAppPageElements(options) {
476
549
  const routeLoadingComponent = getDefaultExport(options.route.loading);
477
550
  if (shouldRenderPrefetchLoadingShell) elements[APP_PREFETCH_LOADING_SHELL_MARKER_KEY] = "LoadingBoundary";
478
551
  const pageLoadingModule = resolveAppPageLoadingModuleAtOrAbove(options.route, routeSegments.length);
479
- const PageLoadingComponent = pageRenderDependency ? getDefaultExport(pageLoadingModule) : null;
552
+ const pageLoadingEntry = loadingEntries.find((entry) => entry.loadingModule === pageLoadingModule);
553
+ const PageLoadingComponent = pageRenderDependency && (!pageLoadingEntry || isOutermostEntryBelowLoading(pageLoadingEntry.treePosition, routeSegments.length, "page")) ? getDefaultExport(pageLoadingModule) : null;
554
+ const streamingMetadataOutlet = createAppPageStreamingMetadataOutlet(streamingMetadataOutletId, options.streamingMetadataOutletSuspended);
555
+ const renderElementWithMetadataOutlet = options.renderElementWithMetadataOutlet;
556
+ const pageContent = renderElementWithMetadataOutlet ? renderElementWithMetadataOutlet(streamingMetadataOutlet) : options.element;
480
557
  const pageElement = PageLoadingComponent ? /* @__PURE__ */ jsx(Suspense, {
481
558
  fallback: /* @__PURE__ */ jsx(PageLoadingComponent, {}),
482
- children: options.element
483
- }, routeResetKey) : options.element;
559
+ children: pageContent
560
+ }, routeResetKey) : pageContent;
484
561
  elements[pageElementId] = isPrefetchLoadingShell ? null : pageRenderDependency ? pageElement : renderAfterAppDependencies(pageElement, pageDependencies);
485
562
  for (const templateEntry of templateEntries) {
486
563
  if (isPrefetchLoadingShell && !includesPrefetchTreePosition(templateEntry.treePosition)) continue;
@@ -491,7 +568,7 @@ function buildAppPageElements(options) {
491
568
  let templateElement = templateDependency ? renderAppComponentWithDependencyBarrier(TemplateComponent, { children: /* @__PURE__ */ jsx(Children$1, {}) }, templateDependency) : /* @__PURE__ */ jsx(TemplateComponent, { children: /* @__PURE__ */ jsx(Children$1, {}) });
492
569
  const ancestorLoadingEntry = findNearestAncestorLoadingEntry(templateEntry.treePosition);
493
570
  const ancestorLoadingComponent = getDefaultExport(ancestorLoadingEntry?.loadingModule);
494
- if (ancestorLoadingComponent && ancestorLoadingEntry) {
571
+ if (ancestorLoadingComponent && ancestorLoadingEntry && isOutermostEntryBelowLoading(ancestorLoadingEntry.treePosition, templateEntry.treePosition, "template")) {
495
572
  const AncestorLoadingComponent = ancestorLoadingComponent;
496
573
  const loadingResetKey = resolveRouteSegmentResetKey(ancestorLoadingEntry.treePosition);
497
574
  templateElement = /* @__PURE__ */ jsx(Suspense, {
@@ -532,7 +609,7 @@ function buildAppPageElements(options) {
532
609
  });
533
610
  const ancestorLoadingEntry = findNearestAncestorLoadingEntry(layoutEntry.treePosition);
534
611
  const ancestorLoadingComponent = getDefaultExport(ancestorLoadingEntry?.loadingModule);
535
- if (ancestorLoadingComponent && ancestorLoadingEntry) {
612
+ if (ancestorLoadingComponent && ancestorLoadingEntry && isOutermostEntryBelowLoading(ancestorLoadingEntry.treePosition, layoutEntry.treePosition, "layout")) {
536
613
  const AncestorLoadingComponent = ancestorLoadingComponent;
537
614
  const loadingResetKey = resolveRouteSegmentResetKey(ancestorLoadingEntry.treePosition);
538
615
  layoutElement = /* @__PURE__ */ jsx(Suspense, {
@@ -561,6 +638,45 @@ function buildAppPageElements(options) {
561
638
  elements[slotId] = AppElementsWire.unmatchedSlotValue;
562
639
  continue;
563
640
  }
641
+ const branchNotFounds = /* @__PURE__ */ new Map();
642
+ const slotNotFoundModules = !overrideOrPageComponent ? void 0 : hasSlotTreeOverride ? slotOverride?.notFoundModules : slot.notFounds;
643
+ const slotNotFoundTreePositions = hasSlotTreeOverride ? slotOverride?.notFoundTreePositions : slot.notFoundTreePositions;
644
+ for (const [index, notFoundModule] of (slotNotFoundModules ?? []).entries()) {
645
+ const component = getDefaultExport(notFoundModule);
646
+ const treePosition = slotNotFoundTreePositions?.[index];
647
+ if (component && treePosition !== void 0) branchNotFounds.set(treePosition, component);
648
+ }
649
+ const branchAccessBoundaries = /* @__PURE__ */ new Map();
650
+ if (overrideOrPageComponent && hasSlotTreeOverride) for (const [modules, treePositions, Boundary] of [[
651
+ slotOverride?.forbiddenModules,
652
+ slotOverride?.forbiddenTreePositions,
653
+ ForbiddenBoundary
654
+ ], [
655
+ slotOverride?.unauthorizedModules,
656
+ slotOverride?.unauthorizedTreePositions,
657
+ UnauthorizedBoundary
658
+ ]]) for (const [index, module] of (modules ?? []).entries()) {
659
+ const component = getDefaultExport(module);
660
+ const treePosition = treePositions?.[index];
661
+ if (!component || treePosition === void 0) continue;
662
+ const entries = branchAccessBoundaries.get(treePosition) ?? [];
663
+ entries.push({
664
+ component,
665
+ Boundary
666
+ });
667
+ branchAccessBoundaries.set(treePosition, entries);
668
+ }
669
+ const branchErrors = /* @__PURE__ */ new Map();
670
+ if (overrideOrPageComponent && hasSlotTreeOverride) for (const [index, errorModule] of (slotOverride?.errorModules ?? []).entries()) {
671
+ const component = getErrorBoundaryExport(errorModule);
672
+ const treePosition = slotOverride?.errorTreePositions?.[index];
673
+ if (component && treePosition !== void 0) branchErrors.set(treePosition, component);
674
+ }
675
+ const resolveSlotNotFoundBoundary = (treePosition) => {
676
+ let caughtAt;
677
+ for (const position of branchNotFounds.keys()) if (position < treePosition && (caughtAt === void 0 || position > caughtAt)) caughtAt = position;
678
+ return caughtAt === void 0 ? void 0 : `${slotId}:${caughtAt}`;
679
+ };
564
680
  let slotElement;
565
681
  if (prefetchSlotLoadingEntry) {
566
682
  const PrefetchSlotLoadingComponent = getDefaultExport(prefetchSlotLoadingEntry.loadingModule);
@@ -569,10 +685,10 @@ function buildAppPageElements(options) {
569
685
  const slotProps = { params: options.makeThenableParams(slotParams) };
570
686
  if (options.searchParams !== void 0) slotProps.searchParams = options.searchParams;
571
687
  if (slotOverride?.props) Object.assign(slotProps, slotOverride.props);
572
- slotElement = options.createPageElement ? options.createPageElement(slotComponent, slotProps) : (() => {
688
+ slotElement = options.createPageElement ? options.createPageElement(slotComponent, slotProps, targetIndex >= 0 ? targetIndex : void 0, resolveSlotNotFoundBoundary(Number.POSITIVE_INFINITY)) : (() => {
573
689
  return /* @__PURE__ */ jsx(slotComponent, { ...slotProps });
574
690
  })();
575
- if (overrideOrPageComponent) slotElement = /* @__PURE__ */ jsx(Fragment, { children: slotElement }, slotResetKey);
691
+ if (overrideOrPageComponent) slotElement = /* @__PURE__ */ jsxs(Fragment, { children: [slotElement, slotOverride?.metadataOutlet] }, slotResetKey);
576
692
  slotElement = /* @__PURE__ */ jsx(RedirectBoundary, {
577
693
  resetKey: slotResetKey,
578
694
  children: slotElement
@@ -628,6 +744,9 @@ function buildAppPageElements(options) {
628
744
  ...branchLayouts.keys(),
629
745
  ...branchLoadings.keys(),
630
746
  ...slotErrorComponent ? [0] : [],
747
+ ...branchNotFounds.keys(),
748
+ ...branchAccessBoundaries.keys(),
749
+ ...branchErrors.keys(),
631
750
  ...nestedBfcacheSegments.flatMap((segment) => segment.treePosition === null ? [] : [segment.treePosition])
632
751
  ])).filter((treePosition) => !prefetchSlotLoadingEntry || !isOwnedAtRoutePrefetchCutoff && treePosition <= prefetchSlotLoadingEntry.treePosition).sort((left, right) => left - right);
633
752
  for (let index = branchTreePositions.length - 1; index >= 0; index--) {
@@ -647,19 +766,31 @@ function buildAppPageElements(options) {
647
766
  children: slotElement
648
767
  }, loadingResetKey || slotResetKey);
649
768
  }
650
- if (treePosition === 0 && slotErrorComponent) slotElement = /* @__PURE__ */ jsx(ErrorBoundary, {
651
- resetKey: slotResetKey,
652
- fallback: slotErrorComponent,
769
+ const SlotNotFoundComponent = branchNotFounds.get(treePosition);
770
+ if (SlotNotFoundComponent) slotElement = /* @__PURE__ */ jsx(NotFoundBoundary, {
771
+ resetKey: resolveAppPageTemplateStateKey(branchSegments, treePosition, slotParams),
772
+ fallback: /* @__PURE__ */ jsx(SlotNotFoundComponent, {}),
773
+ caughtId: `${slotId}:${treePosition}`,
774
+ children: slotElement
775
+ });
776
+ for (const { component: AccessComponent, Boundary } of branchAccessBoundaries.get(treePosition) ?? []) slotElement = /* @__PURE__ */ jsx(Boundary, {
777
+ resetKey: resolveAppPageTemplateStateKey(branchSegments, treePosition, slotParams),
778
+ fallback: /* @__PURE__ */ jsx(AccessComponent, {}),
779
+ children: slotElement
780
+ });
781
+ const SegmentErrorComponent = branchErrors.get(treePosition) ?? (treePosition === 0 ? slotErrorComponent : null);
782
+ if (SegmentErrorComponent) slotElement = /* @__PURE__ */ jsx(ErrorBoundary, {
783
+ resetKey: treePosition === 0 ? slotResetKey : resolveAppPageSegmentStateKey(branchSegments, treePosition, slotParams) || slotResetKey,
784
+ fallback: SegmentErrorComponent,
653
785
  children: slotElement
654
786
  });
655
787
  const layoutEntriesAtPosition = branchLayouts.get(treePosition) ?? [];
656
788
  for (let layoutIndex = layoutEntriesAtPosition.length - 1; layoutIndex >= 0; layoutIndex--) {
657
789
  const layoutEntry = layoutEntriesAtPosition[layoutIndex];
658
- const LayoutComponent = layoutEntry.component;
659
- slotElement = /* @__PURE__ */ jsx(LayoutComponent, {
660
- ...withUseCacheLayoutMarker(LayoutComponent, { params: options.makeThenableParams(layoutEntry.params) }),
790
+ slotElement = createSlotLayoutElement(layoutEntry.component, withUseCacheLayoutMarker(layoutEntry.component, {
791
+ params: options.makeThenableParams(layoutEntry.params),
661
792
  children: slotElement
662
- });
793
+ }), targetIndex >= 0 ? targetIndex : void 0, prefetchSlotLoadingEntry ? void 0 : resolveSlotNotFoundBoundary(treePosition));
663
794
  }
664
795
  }
665
796
  const unalignedBfcacheSegment = nestedBfcacheSegments.find((segment) => segment.treePosition === null);
@@ -670,7 +801,8 @@ function buildAppPageElements(options) {
670
801
  });
671
802
  const ownerLoadingEntry = isPrefetchLoadingShell ? void 0 : findNearestLoadingEntryAtOrAbove(ownerTreePosition);
672
803
  const ownerLoadingComponent = getDefaultExport(ownerLoadingEntry?.loadingModule);
673
- if (ownerLoadingComponent && ownerLoadingEntry) {
804
+ const slotLayoutTreePosition = layoutEntries[targetIndex]?.treePosition;
805
+ if (ownerLoadingComponent && ownerLoadingEntry && (slotLayoutTreePosition === void 0 || isOutermostEntryBelowLoading(ownerLoadingEntry.treePosition, slotLayoutTreePosition, "slot"))) {
674
806
  const OwnerLoadingComponent = ownerLoadingComponent;
675
807
  const ownerResetKey = resolveRouteSegmentResetKey(ownerLoadingEntry.treePosition);
676
808
  slotElement = /* @__PURE__ */ jsx(Suspense, {
@@ -684,7 +816,7 @@ function buildAppPageElements(options) {
684
816
  providerId: pageElementId,
685
817
  segmentMap: { children: [APP_PAGE_SEGMENT_KEY] },
686
818
  children: /* @__PURE__ */ jsx(Slot, { id: pageElementId })
687
- }), createAppPageStreamingMetadataOutlet(streamingMetadataOutletId, options.streamingMetadataOutletSuspended)] });
819
+ }), renderElementWithMetadataOutlet ? null : streamingMetadataOutlet] });
688
820
  if (isPrefetchLoadingShell) {
689
821
  if (prefetchLoadingComponent === null) routeChildren = null;
690
822
  else routeChildren = /* @__PURE__ */ jsx(prefetchLoadingComponent, {});
@@ -700,24 +832,41 @@ function buildAppPageElements(options) {
700
832
  routeChildren = /* @__PURE__ */ jsx(AppRouterScrollTarget, { children: routeChildren });
701
833
  }
702
834
  const lastLayoutErrorModule = errorEntries.length > 0 ? errorEntries[errorEntries.length - 1].errorModule : null;
703
- const configuredNotFoundComponent = getDefaultExport(options.route.notFound) ?? getDefaultExport(options.rootNotFoundModule);
704
- const defaultNotFoundOwnerLayoutId = configuredNotFoundComponent === null ? layoutEntries[0]?.id ?? null : null;
705
- const notFoundComponent = configuredNotFoundComponent ?? (defaultNotFoundOwnerLayoutId === null ? DEFAULT_NOT_FOUND_COMPONENT : null);
835
+ const resolveAccessBoundaryOwner = (boundaries, pageModule) => {
836
+ let deepest = null;
837
+ for (const treePosition of boundaries.keys()) if (treePosition < routeSegments.length && (deepest === null || treePosition > deepest)) deepest = treePosition;
838
+ return deepest !== null && boundaries.get(deepest)?.module === pageModule ? deepest : null;
839
+ };
840
+ const resolvePageAccessModule = (routeModule, rootModule) => (getDefaultExport(routeModule) ? routeModule : null) ?? (getDefaultExport(rootModule) ? rootModule : null) ?? null;
841
+ const notFoundPageModule = resolvePageAccessModule(options.route.notFound, rootNotFoundModule);
842
+ const forbiddenPageModule = resolvePageAccessModule(options.route.forbidden, rootForbiddenModule);
843
+ const unauthorizedPageModule = resolvePageAccessModule(options.route.unauthorized, rootUnauthorizedModule);
844
+ const notFoundOwnerTreePosition = resolveAccessBoundaryOwner(notFoundBoundaries, notFoundPageModule);
845
+ const forbiddenOwnerTreePosition = resolveAccessBoundaryOwner(forbiddenBoundaries, forbiddenPageModule);
846
+ const unauthorizedOwnerTreePosition = resolveAccessBoundaryOwner(unauthorizedBoundaries, unauthorizedPageModule);
847
+ const notFoundComponent = getDefaultExport(notFoundPageModule) ?? (layoutEntries.length === 0 ? DEFAULT_NOT_FOUND_COMPONENT : null);
848
+ const identifiesPageNotFoundCatcher = !renderElementWithMetadataOutlet;
849
+ const isPageNotFoundCaughtAtPage = identifiesPageNotFoundCatcher && notFoundComponent !== null && notFoundOwnerTreePosition === null;
850
+ let pageNotFoundCatcherTreePosition = null;
851
+ if (identifiesPageNotFoundCatcher && !isPageNotFoundCaughtAtPage) {
852
+ for (const treePosition of notFoundBoundaries.keys()) if (pageNotFoundCatcherTreePosition === null || treePosition > pageNotFoundCatcherTreePosition) pageNotFoundCatcherTreePosition = treePosition;
853
+ }
706
854
  if (notFoundComponent) routeChildren = /* @__PURE__ */ jsx(NotFoundBoundary, {
707
855
  resetKey: routeResetKey,
708
- fallback: /* @__PURE__ */ jsx(notFoundComponent, {}),
856
+ caughtId: isPageNotFoundCaughtAtPage ? APP_PAGE_NOT_FOUND_BOUNDARY_ID : void 0,
857
+ fallback: notFoundOwnerTreePosition === null ? /* @__PURE__ */ jsx(notFoundComponent, {}) : /* @__PURE__ */ jsx(HttpAccessFallbackPassthrough, { status: 404 }),
709
858
  children: routeChildren
710
859
  });
711
- const forbiddenComponent = getDefaultExport(options.route.forbidden) ?? getDefaultExport(options.rootForbiddenModule);
860
+ const forbiddenComponent = getDefaultExport(forbiddenPageModule);
712
861
  if (forbiddenComponent) routeChildren = /* @__PURE__ */ jsx(ForbiddenBoundary, {
713
862
  resetKey: routeResetKey,
714
- fallback: /* @__PURE__ */ jsx(forbiddenComponent, {}),
863
+ fallback: forbiddenOwnerTreePosition === null ? /* @__PURE__ */ jsx(forbiddenComponent, {}) : /* @__PURE__ */ jsx(HttpAccessFallbackPassthrough, { status: 403 }),
715
864
  children: routeChildren
716
865
  });
717
- const unauthorizedComponent = getDefaultExport(options.route.unauthorized) ?? getDefaultExport(options.rootUnauthorizedModule);
866
+ const unauthorizedComponent = getDefaultExport(unauthorizedPageModule);
718
867
  if (unauthorizedComponent) routeChildren = /* @__PURE__ */ jsx(UnauthorizedBoundary, {
719
868
  resetKey: routeResetKey,
720
- fallback: /* @__PURE__ */ jsx(unauthorizedComponent, {}),
869
+ fallback: unauthorizedOwnerTreePosition === null ? /* @__PURE__ */ jsx(unauthorizedComponent, {}) : /* @__PURE__ */ jsx(HttpAccessFallbackPassthrough, { status: 401 }),
721
870
  children: routeChildren
722
871
  });
723
872
  const pageErrorComponent = getErrorBoundaryExport(options.route.error);
@@ -742,23 +891,24 @@ function buildAppPageElements(options) {
742
891
  children: segmentChildren
743
892
  }, segmentResetKey || routeResetKey);
744
893
  }
745
- if (layoutEntry) {
746
- const layoutNotFoundComponent = getDefaultExport(layoutEntry.notFoundModule) ?? (layoutEntry.id === defaultNotFoundOwnerLayoutId ? DEFAULT_NOT_FOUND_COMPONENT : null);
747
- if (layoutNotFoundComponent) segmentChildren = /* @__PURE__ */ jsx(NotFoundBoundary, {
748
- resetKey: segmentResetKey,
749
- fallback: /* @__PURE__ */ jsx(layoutNotFoundComponent, {}),
750
- children: segmentChildren
751
- });
752
- const layoutForbiddenComponent = getDefaultExport(layoutEntry.forbiddenModule);
753
- if (layoutForbiddenComponent) segmentChildren = /* @__PURE__ */ jsx(ForbiddenBoundary, {
754
- resetKey: segmentResetKey,
755
- fallback: /* @__PURE__ */ jsx(layoutForbiddenComponent, {}),
894
+ const accessBoundaries = [
895
+ [notFoundBoundaries, NotFoundBoundary],
896
+ [forbiddenBoundaries, ForbiddenBoundary],
897
+ [unauthorizedBoundaries, UnauthorizedBoundary]
898
+ ];
899
+ const accessResetKey = resolveAppPageTemplateStateKey(routeSegments, treePosition, options.matchedParams);
900
+ for (const [boundaries, AccessBoundary] of accessBoundaries) {
901
+ const boundary = boundaries.get(treePosition);
902
+ if (!boundary) continue;
903
+ const BoundaryComponent = boundary.component;
904
+ segmentChildren = AccessBoundary === NotFoundBoundary && treePosition === pageNotFoundCatcherTreePosition ? /* @__PURE__ */ jsx(NotFoundBoundary, {
905
+ resetKey: accessResetKey,
906
+ fallback: /* @__PURE__ */ jsx(BoundaryComponent, {}),
907
+ caughtId: APP_PAGE_NOT_FOUND_BOUNDARY_ID,
756
908
  children: segmentChildren
757
- });
758
- const layoutUnauthorizedComponent = getDefaultExport(layoutEntry.unauthorizedModule);
759
- if (layoutUnauthorizedComponent) segmentChildren = /* @__PURE__ */ jsx(UnauthorizedBoundary, {
760
- resetKey: segmentResetKey,
761
- fallback: /* @__PURE__ */ jsx(layoutUnauthorizedComponent, {}),
909
+ }) : /* @__PURE__ */ jsx(AccessBoundary, {
910
+ resetKey: accessResetKey,
911
+ fallback: /* @__PURE__ */ jsx(BoundaryComponent, {}),
762
912
  children: segmentChildren
763
913
  });
764
914
  }
@@ -46,4 +46,5 @@ export declare function createAppPageRscRenderStatusResolver(options: CreateAppP
46
46
  * payload carries a redirect, so a redirect is a 200 with its `location`.
47
47
  */
48
48
  export declare function resolveAppPageRscResponseStatus(status: number): number;
49
- //#endregion
49
+ //#endregion
50
+ export {};
@@ -5,7 +5,11 @@ type ClientPageSsrSearchParamsOptions = {
5
5
  isForceStatic?: boolean;
6
6
  isPprFallbackShell?: boolean;
7
7
  };
8
- export declare function createAppPageSearchParamsObserver(): ThenableParamsObserver;
8
+ /**
9
+ * The observer a route's head hands generateMetadata() and generateViewport()
10
+ * for `searchParams`, or none when a read doesn't count (`force-static`).
11
+ */
12
+ export declare function createAppPageMetadataSearchParamsObserver(observe: boolean): ThenableParamsObserver | undefined;
9
13
  export declare function makeObservedAppPageSearchParamsThenable(pageSearchParams: AppPageSearchParams): ThenableParams<AppPageSearchParams>;
10
14
  /**
11
15
  * The `searchParams` a client page receives during SSR (see
@@ -26,4 +30,5 @@ export declare function makeClientPageSsrSearchParamsThenable(searchParams: URLS
26
30
  * The cache lives in this render's navigation context and is dropped with it.
27
31
  */
28
32
  export declare function createClientPageSsrSearchParamsSource(searchParams: URLSearchParams, options: ClientPageSsrSearchParamsOptions): (pageProps: object) => ThenableParams<AppPageSearchParams>;
29
- //#endregion
33
+ //#endregion
34
+ export {};
@@ -16,6 +16,13 @@ function createAppPageSearchParamsObserver() {
16
16
  observeThenRead: throwIfStaticGenerationAccessError
17
17
  };
18
18
  }
19
+ /**
20
+ * The observer a route's head hands generateMetadata() and generateViewport()
21
+ * for `searchParams`, or none when a read doesn't count (`force-static`).
22
+ */
23
+ function createAppPageMetadataSearchParamsObserver(observe) {
24
+ return observe ? createAppPageSearchParamsObserver() : void 0;
25
+ }
19
26
  function makeObservedAppPageSearchParamsThenable(pageSearchParams) {
20
27
  return makeThenableParams(pageSearchParams, createAppPageSearchParamsObserver());
21
28
  }
@@ -55,4 +62,4 @@ function makeClientPageSsrSearchParamsThenableFromRecord(pageSearchParams, optio
55
62
  return options.isForceStatic !== true && options.isPprFallbackShell !== true ? makeObservedAppPageSearchParamsThenable(pageSearchParams) : makeThenableParams(pageSearchParams);
56
63
  }
57
64
  //#endregion
58
- export { createAppPageSearchParamsObserver, createClientPageSsrSearchParamsSource, makeClientPageSsrSearchParamsThenable, makeObservedAppPageSearchParamsThenable };
65
+ export { createAppPageMetadataSearchParamsObserver, createClientPageSsrSearchParamsSource, makeClientPageSsrSearchParamsThenable, makeObservedAppPageSearchParamsThenable };
@@ -52,4 +52,5 @@ export declare function createAppPageSegmentPlan<TModule extends AppPageModule,
52
52
  slotBindings: readonly AppElementsSlotBinding[];
53
53
  templateEntries: readonly AppPageTemplateEntry<TModule>[];
54
54
  }): AppPageSegmentPlan<TModule>;
55
- //#endregion
55
+ //#endregion
56
+ export {};
@@ -22,6 +22,12 @@ export type AppSsrRenderResult = {
22
22
  renderComplete?: Promise<void>;
23
23
  capturedRscData: Promise<ArrayBuffer> | null;
24
24
  shellErrorRecovered?: boolean;
25
+ /**
26
+ * The special error that rejected the shell, when parallel slot not-found
27
+ * boundaries caught it in a second render of the same payload. The document
28
+ * is that error's, with its status.
29
+ */
30
+ caughtShellError?: unknown;
25
31
  /**
26
32
  * Preload `Link` header value emitted by React during SSR (via `onHeaders`),
27
33
  * already capped to `reactMaxHeadersLength`. Empty/undefined when React
@@ -92,6 +98,8 @@ export type AppPageSsrHandler = {
92
98
  * default `__next_error__` error-document shell (with the original
93
99
  * flight payload and bootstrap) instead of rejecting. See handleSsr. */
94
100
  fallbackToErrorDocumentOnShellError?: boolean;
101
+ /** The parallel slot not-found boundaries that catch a shell error. See handleSsr. */
102
+ resolveCaughtNotFoundBoundaries?: (error: unknown) => readonly string[] | null;
95
103
  dynamicStaleTimeSeconds?: number;
96
104
  getInitialNavigationCacheMetadata?: () => InitialNavigationCacheMetadata;
97
105
  }) => Promise<ReadableStream<Uint8Array> | AppSsrRenderResult>;
@@ -145,6 +153,8 @@ type RenderAppPageHtmlStreamOptions = {
145
153
  isCacheCandidate?: boolean;
146
154
  /** Override the default shell-error recovery decision passed to handleSsr. */
147
155
  fallbackToErrorDocumentOnShellError?: boolean;
156
+ /** The parallel slot not-found boundaries that catch a shell error. See handleSsr. */
157
+ resolveCaughtNotFoundBoundaries?: (error: unknown) => readonly string[] | null;
148
158
  /** Dev-only: original server error to surface in the browser overlay. */
149
159
  initialDevServerError?: unknown;
150
160
  /** Report an SSR/Fizz render failure through instrumentation. */
@@ -178,9 +188,20 @@ type RenderAppPageHtmlStreamWithRecoveryOptions<TSpecialError> = {
178
188
  onShellRendered?: () => void;
179
189
  renderErrorBoundaryResponse: (error: unknown) => Promise<Response | null>;
180
190
  renderHtmlStream: () => Promise<ReadableStream<Uint8Array> | AppSsrRenderResult>;
181
- renderSpecialErrorResponse: (specialError: TSpecialError) => Promise<Response>;
191
+ /**
192
+ * The document of a special error that rejected the shell. With
193
+ * `caughtDocument`, parallel slot boundaries caught it in the page's own
194
+ * document, which that response sends.
195
+ */
196
+ renderSpecialErrorResponse: (specialError: TSpecialError, caughtDocument?: AppPageCaughtShellErrorDocument) => Promise<Response>;
182
197
  resolveSpecialError: (error: unknown) => TSpecialError | null;
183
198
  };
199
+ /** The page's document, rendered with the slot boundaries that caught its shell error. */
200
+ type AppPageCaughtShellErrorDocument = {
201
+ htmlStream: ReadableStream<Uint8Array>;
202
+ /** React-emitted preload `Link` header (already capped). */
203
+ linkHeader?: string;
204
+ };
184
205
  type AppPageRscErrorTracker = {
185
206
  getCapturedError: () => unknown;
186
207
  /**
@@ -202,6 +223,15 @@ export declare function createAppPageSsrErrorHandler(baseOnError: (error: unknow
202
223
  export declare function createAppPageFontData(options: CreateAppPageFontDataOptions): AppPageFontData;
203
224
  export declare function renderAppPageHtmlStream(options: RenderAppPageHtmlStreamOptions): Promise<AppSsrRenderResult>;
204
225
  export declare function renderAppPageHtmlResponse(options: RenderAppPageHtmlResponseOptions): Promise<Response>;
226
+ export declare function buildAppPageHtmlDocumentResponse(htmlStream: ReadableStream<Uint8Array>, options: {
227
+ clearRequestContext: () => void;
228
+ fontLinkHeader?: string;
229
+ isEdgeRuntime?: boolean;
230
+ middlewareHeaders?: Headers | null;
231
+ reactLinkHeader?: string;
232
+ reactMaxHeadersLength?: number;
233
+ status: number;
234
+ }): Response;
205
235
  export declare function renderAppPageHtmlStreamWithRecovery<TSpecialError>(options: RenderAppPageHtmlStreamWithRecoveryOptions<TSpecialError>): Promise<AppPageHtmlStreamRecoveryResult>;
206
236
  export declare function createAppPageRscErrorTracker(baseOnError: (error: unknown, requestInfo: unknown, errorContext: unknown) => unknown): AppPageRscErrorTracker;
207
237
  //#endregion
@@ -1,6 +1,6 @@
1
+ import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
1
2
  import { VINEXT_RSC_VARY_HEADER } from "./app-rsc-vary.js";
2
3
  import { isNavigationSignalError } from "../utils/navigation-signal.js";
3
- import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
4
4
  import "./app-rsc-cache-busting.js";
5
5
  import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
6
6
  import { markFrameworkLinkHeaders } from "./app-response-header-provenance.js";
@@ -87,6 +87,7 @@ async function renderAppPageHtmlStream(options) {
87
87
  onSsrError: options.onSsrError,
88
88
  mirrorNextFlight: options.mirrorNextFlight,
89
89
  fallbackToErrorDocumentOnShellError: options.fallbackToErrorDocumentOnShellError ?? (options.waitForAllReady !== true && options.hasCustomGlobalError === false),
90
+ resolveCaughtNotFoundBoundaries: options.resolveCaughtNotFoundBoundaries,
90
91
  dynamicStaleTimeSeconds: options.dynamicStaleTimeSeconds,
91
92
  getInitialNavigationCacheMetadata: options.getInitialNavigationCacheMetadata
92
93
  };
@@ -94,6 +95,12 @@ async function renderAppPageHtmlStream(options) {
94
95
  }
95
96
  async function renderAppPageHtmlResponse(options) {
96
97
  const { htmlStream, linkHeader: reactLinkHeader } = await renderAppPageHtmlStream(options);
98
+ return buildAppPageHtmlDocumentResponse(htmlStream, {
99
+ ...options,
100
+ reactLinkHeader
101
+ });
102
+ }
103
+ function buildAppPageHtmlDocumentResponse(htmlStream, options) {
97
104
  const safeStream = deferUntilStreamConsumed(htmlStream, () => {
98
105
  options.clearRequestContext();
99
106
  });
@@ -103,7 +110,7 @@ async function renderAppPageHtmlResponse(options) {
103
110
  });
104
111
  applyEdgeRuntimeHeader(headers, options.isEdgeRuntime);
105
112
  mergeMiddlewareResponseHeaders(headers, options.middlewareHeaders ?? null);
106
- const frameworkLinkHeader = buildAppPageLinkHeader(reactLinkHeader, options.fontLinkHeader, options.reactMaxHeadersLength);
113
+ const frameworkLinkHeader = buildAppPageLinkHeader(options.reactLinkHeader, options.fontLinkHeader, options.reactMaxHeadersLength);
107
114
  if (frameworkLinkHeader) headers.append("Link", frameworkLinkHeader);
108
115
  const response = new Response(safeStream, {
109
116
  status: options.status,
@@ -114,8 +121,20 @@ async function renderAppPageHtmlResponse(options) {
114
121
  }
115
122
  async function renderAppPageHtmlStreamWithRecovery(options) {
116
123
  try {
117
- const { htmlStream, metadataReady, renderComplete, capturedRscData, linkHeader, shellErrorRecovered } = normalizeAppSsrRenderResult(await options.renderHtmlStream());
124
+ const { htmlStream, metadataReady, renderComplete, capturedRscData, linkHeader, shellErrorRecovered, caughtShellError } = normalizeAppSsrRenderResult(await options.renderHtmlStream());
118
125
  options.onShellRendered?.();
126
+ const caughtSpecialError = caughtShellError === void 0 ? null : options.resolveSpecialError(caughtShellError);
127
+ if (caughtSpecialError) return {
128
+ htmlStream: null,
129
+ response: await options.renderSpecialErrorResponse(caughtSpecialError, {
130
+ htmlStream,
131
+ linkHeader
132
+ }),
133
+ metadataReady: resolvedMetadataReady,
134
+ renderComplete: renderComplete ?? resolvedMetadataReady,
135
+ capturedRscData: null,
136
+ shellErrorRecovered: false
137
+ };
119
138
  return {
120
139
  htmlStream,
121
140
  response: null,
@@ -185,4 +204,4 @@ function createAppPageRscErrorTracker(baseOnError) {
185
204
  };
186
205
  }
187
206
  //#endregion
188
- export { buildAppPageLinkHeader, createAppPageFontData, createAppPageRscErrorTracker, createAppPageSsrErrorHandler, deferUntilStreamConsumed, isAppSsrRenderResult, renderAppPageHtmlResponse, renderAppPageHtmlStream, renderAppPageHtmlStreamWithRecovery };
207
+ export { buildAppPageHtmlDocumentResponse, buildAppPageLinkHeader, createAppPageFontData, createAppPageRscErrorTracker, createAppPageSsrErrorHandler, deferUntilStreamConsumed, isAppSsrRenderResult, renderAppPageHtmlResponse, renderAppPageHtmlStream, renderAppPageHtmlStreamWithRecovery };
@@ -61,4 +61,5 @@ type RenderPagesFallbackOptions = {
61
61
  * Fallback handler to route App Router requests to the Pages Router when no App Router route matches.
62
62
  */
63
63
  export declare function renderPagesFallback(options: RenderPagesFallbackOptions, dependencies: RenderPagesFallbackDependencies): Promise<Response | null>;
64
- //#endregion
64
+ //#endregion
65
+ export {};
@@ -13,4 +13,5 @@ export type WarmPprFallbackShellCachesOptions = {
13
13
  state: PprFallbackShellState;
14
14
  };
15
15
  export declare function warmPprFallbackShellCaches(options: WarmPprFallbackShellCachesOptions): Promise<void>;
16
- //#endregion
16
+ //#endregion
17
+ export {};
@@ -29,4 +29,5 @@ export declare function rewriteAppPprFallbackShellHtmlNavigation(options: {
29
29
  pathname: string;
30
30
  searchParams: URLSearchParams;
31
31
  }): string;
32
- //#endregion
32
+ //#endregion
33
+ export {};
@@ -15,4 +15,5 @@ type HandleAppPrerenderEndpointOptions = {
15
15
  staticParamsMap: AppPrerenderStaticParamsMap;
16
16
  };
17
17
  export declare function handleAppPrerenderEndpoint(request: Request, options: HandleAppPrerenderEndpointOptions): Promise<Response | null>;
18
- //#endregion
18
+ //#endregion
19
+ export {};
@@ -34,4 +34,5 @@ type CallAppPrerenderStaticParamsOptions = {
34
34
  rootParamNamesByPattern: Record<string, readonly string[] | undefined>;
35
35
  };
36
36
  export declare function callAppPrerenderStaticParams(options: CallAppPrerenderStaticParamsOptions): Promise<unknown>;
37
- //#endregion
37
+ //#endregion
38
+ export {};