vinext 1.2.1 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/README.md +12 -9
  2. package/dist/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/build/action-owner-manifest.d.ts +3 -2
  4. package/dist/build/action-owner-manifest.js +18 -2
  5. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  6. package/dist/build/app-page-static-eligibility.js +80 -13
  7. package/dist/build/clean-output.d.ts +2 -1
  8. package/dist/build/client-build-config.d.ts +77 -6
  9. package/dist/build/client-build-config.js +176 -12
  10. package/dist/build/client-reference-async.d.ts +48 -0
  11. package/dist/build/client-reference-async.js +123 -0
  12. package/dist/build/client-reference-chunks.d.ts +32 -0
  13. package/dist/build/client-reference-chunks.js +111 -0
  14. package/dist/build/client-reference-groups.d.ts +171 -0
  15. package/dist/build/client-reference-groups.js +572 -0
  16. package/dist/build/css-url-assets.d.ts +2 -1
  17. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  18. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  19. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  20. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  21. package/dist/build/google-fonts/validate.d.ts +2 -1
  22. package/dist/build/inline-css.d.ts +2 -1
  23. package/dist/build/layout-classification.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +33 -1
  25. package/dist/build/module-dependency-cache.js +51 -1
  26. package/dist/build/next-client-runtime-manifests.d.ts +12 -2
  27. package/dist/build/next-client-runtime-manifests.js +19 -4
  28. package/dist/build/nitro-public-files.d.ts +24 -0
  29. package/dist/build/nitro-public-files.js +60 -0
  30. package/dist/build/pages-client-assets-module.js +1 -1
  31. package/dist/build/precompress.d.ts +2 -1
  32. package/dist/build/precompress.js +1 -1
  33. package/dist/build/prerender-paths.d.ts +2 -1
  34. package/dist/build/prerender-paths.js +5 -2
  35. package/dist/build/prerender-phase.d.ts +2 -1
  36. package/dist/build/prerender-server-pool.js +1 -1
  37. package/dist/build/prerender.d.ts +3 -2
  38. package/dist/build/prerender.js +5 -4
  39. package/dist/build/report.d.ts +2 -1
  40. package/dist/build/route-classification-injector.d.ts +2 -1
  41. package/dist/build/route-classification-manifest.d.ts +2 -1
  42. package/dist/build/run-prerender.d.ts +2 -1
  43. package/dist/build/server-actions-encryption-key.d.ts +24 -0
  44. package/dist/build/server-actions-encryption-key.js +101 -0
  45. package/dist/build/ssr-manifest.d.ts +3 -0
  46. package/dist/build/ssr-manifest.js +34 -2
  47. package/dist/build/standalone.d.ts +2 -1
  48. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  49. package/dist/cache.js +1 -2
  50. package/dist/check.d.ts +2 -1
  51. package/dist/check.js +4 -0
  52. package/dist/cli-args.d.ts +2 -1
  53. package/dist/cli.js +2 -0
  54. package/dist/client/client-redirect-matcher.js +2 -1
  55. package/dist/client/client-redirects.d.ts +4 -3
  56. package/dist/client/client-redirects.js +2 -1
  57. package/dist/client/client-rewrite-params.d.ts +9 -0
  58. package/dist/client/client-rewrite-params.js +20 -0
  59. package/dist/client/client-rewrites.d.ts +2 -1
  60. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  61. package/dist/client/dev-error-overlay.js +2 -1
  62. package/dist/client/index.js +1 -2
  63. package/dist/client/instrumentation-client-state.js +5 -5
  64. package/dist/client/navigation-runtime.d.ts +28 -3
  65. package/dist/client/navigation-runtime.js +42 -11
  66. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  67. package/dist/client/vinext-next-data.d.ts +25 -2
  68. package/dist/client/window-next.d.ts +2 -1
  69. package/dist/config/config-matchers.d.ts +27 -41
  70. package/dist/config/config-matchers.js +293 -270
  71. package/dist/config/config-source.d.ts +34 -0
  72. package/dist/config/config-source.js +141 -0
  73. package/dist/config/dotenv.d.ts +2 -1
  74. package/dist/config/header-params.d.ts +29 -0
  75. package/dist/config/header-params.js +106 -0
  76. package/dist/config/next-config.d.ts +20 -6
  77. package/dist/config/next-config.js +149 -11
  78. package/dist/config/tsconfig-paths.d.ts +2 -1
  79. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  80. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  81. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  82. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  83. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  84. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  105. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  106. package/dist/entries/app-browser-entry.d.ts +34 -6
  107. package/dist/entries/app-browser-entry.js +103 -40
  108. package/dist/entries/app-rsc-entry.d.ts +4 -1
  109. package/dist/entries/app-rsc-entry.js +131 -66
  110. package/dist/entries/app-rsc-manifest.d.ts +12 -1
  111. package/dist/entries/app-rsc-manifest.js +73 -1
  112. package/dist/entries/app-ssr-entry.d.ts +4 -1
  113. package/dist/entries/app-ssr-entry.js +9 -2
  114. package/dist/entries/pages-client-entry.d.ts +1 -0
  115. package/dist/entries/pages-client-entry.js +6 -6
  116. package/dist/entries/pages-entry-helpers.js +1 -2
  117. package/dist/entries/pages-server-entry.d.ts +2 -1
  118. package/dist/entries/pages-server-entry.js +18 -15
  119. package/dist/entries/runtime-entry-module.d.ts +1 -0
  120. package/dist/entries/runtime-entry-module.js +4 -1
  121. package/dist/image/image-adapters-virtual.d.ts +2 -1
  122. package/dist/index.d.ts +11 -0
  123. package/dist/index.js +340 -116
  124. package/dist/init.js +17 -0
  125. package/dist/plugins/client-compile-hints.d.ts +30 -0
  126. package/dist/plugins/client-compile-hints.js +88 -0
  127. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  128. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  129. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  130. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  131. package/dist/plugins/environment.d.ts +2 -1
  132. package/dist/plugins/fonts.js +9 -12
  133. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  134. package/dist/plugins/import-meta-url.d.ts +2 -1
  135. package/dist/plugins/og-assets.d.ts +2 -1
  136. package/dist/plugins/og-assets.js +2 -3
  137. package/dist/plugins/optimize-imports.d.ts +27 -3
  138. package/dist/plugins/optimize-imports.js +106 -20
  139. package/dist/plugins/pages-node-externals.d.ts +2 -1
  140. package/dist/plugins/remove-console.d.ts +2 -1
  141. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  142. package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
  143. package/dist/plugins/rsc-client-reference-loaders.js +447 -27
  144. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  145. package/dist/plugins/sass.d.ts +2 -1
  146. package/dist/plugins/strip-server-exports.d.ts +2 -1
  147. package/dist/plugins/styled-jsx.d.ts +2 -1
  148. package/dist/plugins/transform-result.d.ts +2 -1
  149. package/dist/plugins/typeof-window.d.ts +2 -1
  150. package/dist/plugins/use-cache-callable.d.ts +5 -0
  151. package/dist/plugins/use-cache-callable.js +30 -8
  152. package/dist/plugins/worker-image-imports.d.ts +1 -0
  153. package/dist/plugins/worker-image-imports.js +2 -2
  154. package/dist/plugins/worker-use-server.d.ts +2 -1
  155. package/dist/routing/app-route-graph.d.ts +41 -1
  156. package/dist/routing/app-route-graph.js +122 -50
  157. package/dist/routing/browser-route-manifest.d.ts +44 -0
  158. package/dist/routing/browser-route-manifest.js +195 -0
  159. package/dist/routing/hashed-route-patterns.d.ts +4 -0
  160. package/dist/routing/hashed-route-patterns.js +22 -0
  161. package/dist/routing/optimistic-route-trie.d.ts +28 -0
  162. package/dist/routing/optimistic-route-trie.js +102 -0
  163. package/dist/routing/route-matching.d.ts +2 -1
  164. package/dist/routing/route-pattern.d.ts +2 -1
  165. package/dist/routing/route-validation.d.ts +6 -1
  166. package/dist/routing/route-validation.js +26 -10
  167. package/dist/server/accept-encoding.d.ts +2 -1
  168. package/dist/server/app-action-forwarding.d.ts +10 -1
  169. package/dist/server/app-action-forwarding.js +15 -1
  170. package/dist/server/app-bfcache-identity.d.ts +2 -1
  171. package/dist/server/app-browser-action-result.d.ts +2 -1
  172. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
  173. package/dist/server/app-browser-entry.js +175 -64
  174. package/dist/server/app-browser-error.d.ts +5 -2
  175. package/dist/server/app-browser-error.js +7 -2
  176. package/dist/server/app-browser-history-controller.d.ts +2 -1
  177. package/dist/server/app-browser-hydration.d.ts +2 -1
  178. package/dist/server/app-browser-interception-context.d.ts +4 -3
  179. package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
  180. package/dist/server/app-browser-mpa-navigation.js +6 -5
  181. package/dist/server/app-browser-navigation-controller.d.ts +17 -6
  182. package/dist/server/app-browser-navigation-controller.js +103 -36
  183. package/dist/server/app-browser-popstate.d.ts +2 -1
  184. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  185. package/dist/server/app-browser-server-action-client.d.ts +2 -1
  186. package/dist/server/app-browser-state.d.ts +2 -2
  187. package/dist/server/app-browser-state.js +1 -1
  188. package/dist/server/app-browser-stream.d.ts +2 -1
  189. package/dist/server/app-browser-visible-commit.d.ts +6 -5
  190. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  191. package/dist/server/app-client-reference-manifest.js +46 -0
  192. package/dist/server/app-client-reference-preloader.d.ts +45 -2
  193. package/dist/server/app-client-reference-preloader.js +48 -10
  194. package/dist/server/app-elements-wire.d.ts +2 -1
  195. package/dist/server/app-elements.d.ts +2 -0
  196. package/dist/server/app-elements.js +3 -1
  197. package/dist/server/app-fallback-renderer.d.ts +9 -2
  198. package/dist/server/app-fallback-renderer.js +6 -2
  199. package/dist/server/app-history-state.d.ts +2 -1
  200. package/dist/server/app-inline-css-client.d.ts +2 -1
  201. package/dist/server/app-layout-param-observation.d.ts +2 -1
  202. package/dist/server/app-metadata-tracing.d.ts +2 -1
  203. package/dist/server/app-middleware.d.ts +6 -0
  204. package/dist/server/app-middleware.js +8 -10
  205. package/dist/server/app-optimistic-routing.d.ts +26 -11
  206. package/dist/server/app-optimistic-routing.js +38 -96
  207. package/dist/server/app-page-boundary-render.d.ts +20 -2
  208. package/dist/server/app-page-boundary-render.js +229 -39
  209. package/dist/server/app-page-boundary.d.ts +34 -5
  210. package/dist/server/app-page-boundary.js +40 -7
  211. package/dist/server/app-page-cache-finalizer.d.ts +2 -1
  212. package/dist/server/app-page-cache-finalizer.js +1 -1
  213. package/dist/server/app-page-cache-render.d.ts +10 -2
  214. package/dist/server/app-page-cache-render.js +15 -2
  215. package/dist/server/app-page-cache.js +2 -2
  216. package/dist/server/app-page-dispatch.d.ts +34 -1
  217. package/dist/server/app-page-dispatch.js +165 -34
  218. package/dist/server/app-page-element-builder.d.ts +17 -1
  219. package/dist/server/app-page-element-builder.js +187 -66
  220. package/dist/server/app-page-execution.d.ts +28 -1
  221. package/dist/server/app-page-execution.js +114 -5
  222. package/dist/server/app-page-head.d.ts +95 -3
  223. package/dist/server/app-page-head.js +307 -152
  224. package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
  225. package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
  226. package/dist/server/app-page-method.d.ts +2 -1
  227. package/dist/server/app-page-probe.d.ts +2 -1
  228. package/dist/server/app-page-render-identity.d.ts +2 -1
  229. package/dist/server/app-page-render.d.ts +7 -1
  230. package/dist/server/app-page-render.js +38 -11
  231. package/dist/server/app-page-request.d.ts +14 -1
  232. package/dist/server/app-page-request.js +1 -1
  233. package/dist/server/app-page-route-wiring.d.ts +52 -2
  234. package/dist/server/app-page-route-wiring.js +197 -47
  235. package/dist/server/app-page-rsc-render-status.d.ts +3 -1
  236. package/dist/server/app-page-rsc-render-status.js +1 -0
  237. package/dist/server/app-page-search-params-observation.d.ts +8 -6
  238. package/dist/server/app-page-search-params-observation.js +16 -11
  239. package/dist/server/app-page-segment-plan.d.ts +2 -1
  240. package/dist/server/app-page-stream.d.ts +38 -1
  241. package/dist/server/app-page-stream.js +24 -4
  242. package/dist/server/app-pages-bridge.d.ts +4 -2
  243. package/dist/server/app-pages-bridge.js +11 -7
  244. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  245. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  246. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  247. package/dist/server/app-prerender-static-params.d.ts +2 -1
  248. package/dist/server/app-prerender-static-params.js +3 -2
  249. package/dist/server/app-render-dependency.d.ts +11 -1
  250. package/dist/server/app-render-dependency.js +65 -6
  251. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  252. package/dist/server/app-request-stage-independent-entry.js +2 -2
  253. package/dist/server/app-response-stage-entry.d.ts +2 -1
  254. package/dist/server/app-response-stage-entry.js +3 -3
  255. package/dist/server/app-route-handler-cache.d.ts +2 -1
  256. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  257. package/dist/server/app-route-handler-dispatch.js +4 -2
  258. package/dist/server/app-route-handler-execution.d.ts +4 -1
  259. package/dist/server/app-route-handler-execution.js +9 -2
  260. package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
  261. package/dist/server/app-route-handler-middleware-context.js +3 -3
  262. package/dist/server/app-route-handler-response.d.ts +4 -2
  263. package/dist/server/app-route-handler-response.js +2 -2
  264. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  265. package/dist/server/app-route-handler-runtime.js +20 -3
  266. package/dist/server/app-route-module-loader.d.ts +18 -1
  267. package/dist/server/app-route-module-loader.js +15 -6
  268. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  269. package/dist/server/app-route-tree.d.ts +20 -0
  270. package/dist/server/app-route-tree.js +18 -0
  271. package/dist/server/app-router-entry.js +2 -2
  272. package/dist/server/app-rsc-combined-handler.js +8 -1
  273. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  274. package/dist/server/app-rsc-errors.d.ts +9 -1
  275. package/dist/server/app-rsc-errors.js +9 -2
  276. package/dist/server/app-rsc-handler.d.ts +6 -2
  277. package/dist/server/app-rsc-handler.js +152 -140
  278. package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
  279. package/dist/server/app-rsc-response-finalizer.js +4 -1
  280. package/dist/server/app-rsc-response-stage.js +3 -1
  281. package/dist/server/app-rsc-route-matching.d.ts +39 -1
  282. package/dist/server/app-rsc-route-matching.js +25 -1
  283. package/dist/server/app-segment-config.d.ts +2 -1
  284. package/dist/server/app-segment-config.js +1 -14
  285. package/dist/server/app-server-action-execution.d.ts +25 -7
  286. package/dist/server/app-server-action-execution.js +53 -59
  287. package/dist/server/app-ssr-entry.d.ts +12 -0
  288. package/dist/server/app-ssr-entry.js +104 -48
  289. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  290. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  291. package/dist/server/app-ssr-stream.d.ts +29 -10
  292. package/dist/server/app-ssr-stream.js +311 -67
  293. package/dist/server/app-static-generation.d.ts +2 -1
  294. package/dist/server/app-streamed-client-references.d.ts +39 -0
  295. package/dist/server/app-streamed-client-references.js +156 -0
  296. package/dist/server/app-visited-response-cache.d.ts +2 -1
  297. package/dist/server/app-worker-stages.d.ts +2 -1
  298. package/dist/server/artifact-compatibility.d.ts +2 -1
  299. package/dist/server/bfcache-identity.d.ts +2 -1
  300. package/dist/server/cache-headers.d.ts +2 -1
  301. package/dist/server/cacheability-request.d.ts +2 -1
  302. package/dist/server/client-reuse-manifest.d.ts +2 -1
  303. package/dist/server/config-headers.d.ts +2 -1
  304. package/dist/server/config-headers.js +12 -3
  305. package/dist/server/csp.d.ts +2 -1
  306. package/dist/server/default-global-not-found-module.d.ts +2 -1
  307. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  308. package/dist/server/default-http-access-fallback-modules.js +31 -0
  309. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  310. package/dist/server/defer-until-stream-consumed.js +154 -21
  311. package/dist/server/dev-lockfile.d.ts +32 -2
  312. package/dist/server/dev-lockfile.js +46 -2
  313. package/dist/server/dev-module-runner.d.ts +2 -1
  314. package/dist/server/dev-server.js +10 -3
  315. package/dist/server/fetch-handler.js +1 -2
  316. package/dist/server/file-based-metadata.d.ts +2 -1
  317. package/dist/server/framework-tracer.d.ts +2 -1
  318. package/dist/server/html.d.ts +1 -0
  319. package/dist/server/html.js +19 -1
  320. package/dist/server/http-conditional.d.ts +2 -1
  321. package/dist/server/http-error-responses.d.ts +2 -1
  322. package/dist/server/implicit-tags.d.ts +2 -1
  323. package/dist/server/isolate-shared-promise.d.ts +10 -0
  324. package/dist/server/isolate-shared-promise.js +33 -0
  325. package/dist/server/isr-cache.js +3 -2
  326. package/dist/server/metadata-route-build-data.d.ts +2 -1
  327. package/dist/server/metadata-route-build-data.js +1 -1
  328. package/dist/server/metadata-route-response.d.ts +2 -1
  329. package/dist/server/metadata-route-response.js +1 -1
  330. package/dist/server/metadata-routes.d.ts +2 -1
  331. package/dist/server/middleware-matcher-pattern.d.ts +0 -1
  332. package/dist/server/middleware-matcher-pattern.js +11 -140
  333. package/dist/server/middleware-matcher.js +5 -6
  334. package/dist/server/middleware-response-headers.d.ts +31 -0
  335. package/dist/server/middleware-response-headers.js +57 -1
  336. package/dist/server/middleware-runtime.d.ts +2 -1
  337. package/dist/server/middleware-runtime.js +26 -13
  338. package/dist/server/navigation-planner.d.ts +2 -2
  339. package/dist/server/navigation-trace.d.ts +2 -1
  340. package/dist/server/next-error-digest.d.ts +2 -1
  341. package/dist/server/nitro-public-files-plugin.d.ts +39 -0
  342. package/dist/server/nitro-public-files-plugin.js +106 -0
  343. package/dist/server/nitro-public-files.d.ts +22 -0
  344. package/dist/server/nitro-public-files.js +39 -0
  345. package/dist/server/opentelemetry-api.d.ts +2 -1
  346. package/dist/server/operation-token.d.ts +2 -1
  347. package/dist/server/pages-api-route.d.ts +2 -1
  348. package/dist/server/pages-asset-tags.d.ts +7 -1
  349. package/dist/server/pages-asset-tags.js +9 -2
  350. package/dist/server/pages-body-parser-config.d.ts +2 -1
  351. package/dist/server/pages-client-assets.d.ts +8 -1
  352. package/dist/server/pages-data-route.d.ts +2 -1
  353. package/dist/server/pages-document-asset-props.d.ts +2 -1
  354. package/dist/server/pages-document-initial-props.d.ts +2 -1
  355. package/dist/server/pages-execution-tracing.d.ts +2 -1
  356. package/dist/server/pages-execution-tracing.js +1 -1
  357. package/dist/server/pages-get-initial-props.d.ts +2 -1
  358. package/dist/server/pages-i18n.d.ts +18 -0
  359. package/dist/server/pages-i18n.js +18 -2
  360. package/dist/server/pages-node-compat.d.ts +5 -3
  361. package/dist/server/pages-node-compat.js +35 -16
  362. package/dist/server/pages-page-data.d.ts +7 -1
  363. package/dist/server/pages-page-data.js +35 -12
  364. package/dist/server/pages-page-handler.d.ts +3 -2
  365. package/dist/server/pages-page-handler.js +16 -7
  366. package/dist/server/pages-page-method.d.ts +2 -1
  367. package/dist/server/pages-page-response.d.ts +2 -1
  368. package/dist/server/pages-preview.d.ts +2 -1
  369. package/dist/server/pages-readiness.d.ts +2 -1
  370. package/dist/server/pages-request-pipeline.d.ts +8 -2
  371. package/dist/server/pages-request-pipeline.js +35 -40
  372. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  373. package/dist/server/pages-request-stage-entry.js +16 -6
  374. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  375. package/dist/server/pages-response-stage-entry.js +1 -1
  376. package/dist/server/pages-revalidate.js +1 -0
  377. package/dist/server/pages-route-data-kind.d.ts +2 -1
  378. package/dist/server/pages-router-entry.js +1 -1
  379. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  380. package/dist/server/prerender-route-params.d.ts +2 -1
  381. package/dist/server/prod-server.d.ts +2 -2
  382. package/dist/server/prod-server.js +80 -36
  383. package/dist/server/proxy-trust.d.ts +6 -0
  384. package/dist/server/proxy-trust.js +12 -6
  385. package/dist/server/request-log.d.ts +2 -1
  386. package/dist/server/request-pipeline.d.ts +5 -0
  387. package/dist/server/request-pipeline.js +12 -1
  388. package/dist/server/request-tracing.d.ts +2 -1
  389. package/dist/server/request-tracing.js +1 -1
  390. package/dist/server/response-start-tracing.js +7 -29
  391. package/dist/server/rsc-render-stream.d.ts +4 -0
  392. package/dist/server/rsc-render-stream.js +25 -0
  393. package/dist/server/seed-cache.d.ts +2 -1
  394. package/dist/server/seed-cache.js +1 -1
  395. package/dist/server/server-reference-loader.js +10 -1
  396. package/dist/server/static-file-cache.d.ts +2 -1
  397. package/dist/server/static-file-cache.js +16 -3
  398. package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
  399. package/dist/server/worker-revalidation-context.d.ts +2 -1
  400. package/dist/server/worker-stages.d.ts +2 -1
  401. package/dist/server/worker-utils.js +1 -1
  402. package/dist/shims/app.d.ts +2 -1
  403. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  404. package/dist/shims/cache-handler.d.ts +8 -3
  405. package/dist/shims/cache-handler.js +32 -11
  406. package/dist/shims/cache-request-state.d.ts +40 -3
  407. package/dist/shims/cache-request-state.js +70 -5
  408. package/dist/shims/cache-runtime.js +47 -19
  409. package/dist/shims/cache.d.ts +2 -2
  410. package/dist/shims/cache.js +17 -8
  411. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  412. package/dist/shims/caught-not-found-boundaries.js +48 -0
  413. package/dist/shims/cdn-purge-routes.d.ts +25 -0
  414. package/dist/shims/cdn-purge-routes.js +77 -0
  415. package/dist/shims/client-locale.js +2 -1
  416. package/dist/shims/client-page-root.d.ts +2 -1
  417. package/dist/shims/config.d.ts +2 -1
  418. package/dist/shims/default-forbidden.d.ts +4 -0
  419. package/dist/shims/default-forbidden.js +18 -0
  420. package/dist/shims/default-not-found.d.ts +0 -5
  421. package/dist/shims/default-not-found.js +5 -41
  422. package/dist/shims/default-unauthorized.d.ts +4 -0
  423. package/dist/shims/default-unauthorized.js +18 -0
  424. package/dist/shims/dynamic.js +17 -4
  425. package/dist/shims/error-boundary.d.ts +39 -3
  426. package/dist/shims/error-boundary.js +31 -16
  427. package/dist/shims/font-google.js +1 -2
  428. package/dist/shims/font-utils.d.ts +3 -2
  429. package/dist/shims/font-utils.js +5 -3
  430. package/dist/shims/form.js +9 -4
  431. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  432. package/dist/shims/http-access-error-fallback.js +47 -0
  433. package/dist/shims/image-props.d.ts +93 -0
  434. package/dist/shims/image-props.js +323 -0
  435. package/dist/shims/image.d.ts +4 -39
  436. package/dist/shims/image.js +4 -319
  437. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  438. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  439. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  440. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  441. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  442. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  443. package/dist/shims/internal/client-reference-loader.js +91 -0
  444. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  445. package/dist/shims/internal/cookies.js +1 -2
  446. package/dist/shims/internal/headers-state.d.ts +9 -0
  447. package/dist/shims/internal/headers-state.js +19 -2
  448. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
  449. package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
  450. package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
  451. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  452. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  453. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  454. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  455. package/dist/shims/link.js +198 -53
  456. package/dist/shims/metadata.d.ts +32 -11
  457. package/dist/shims/metadata.js +88 -26
  458. package/dist/shims/navigation-errors.d.ts +2 -1
  459. package/dist/shims/navigation.d.ts +23 -3
  460. package/dist/shims/navigation.js +91 -25
  461. package/dist/shims/og.js +35 -10
  462. package/dist/shims/pages-router-runtime.d.ts +2 -1
  463. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  464. package/dist/shims/request-context.d.ts +13 -0
  465. package/dist/shims/router.js +33 -43
  466. package/dist/shims/server.d.ts +31 -4
  467. package/dist/shims/server.js +58 -10
  468. package/dist/shims/thenable-params.d.ts +6 -1
  469. package/dist/shims/thenable-params.js +11 -2
  470. package/dist/shims/unified-request-context.d.ts +5 -0
  471. package/dist/shims/unified-request-context.js +5 -3
  472. package/dist/typegen.d.ts +2 -1
  473. package/dist/utils/asset-prefix.d.ts +7 -0
  474. package/dist/utils/asset-prefix.js +10 -1
  475. package/dist/utils/client-build-manifest.d.ts +4 -1
  476. package/dist/utils/client-build-manifest.js +20 -6
  477. package/dist/utils/client-entry-manifest.d.ts +13 -0
  478. package/dist/utils/client-entry-manifest.js +20 -1
  479. package/dist/utils/client-reference-chunks.d.ts +45 -0
  480. package/dist/utils/client-reference-chunks.js +30 -0
  481. package/dist/utils/client-runtime-metadata.d.ts +10 -1
  482. package/dist/utils/client-runtime-metadata.js +53 -9
  483. package/dist/utils/compare.d.ts +9 -0
  484. package/dist/utils/compare.js +15 -1
  485. package/dist/utils/lazy-chunks.d.ts +18 -0
  486. package/dist/utils/lazy-chunks.js +27 -1
  487. package/dist/utils/manifest-paths.d.ts +14 -0
  488. package/dist/utils/manifest-paths.js +22 -1
  489. package/dist/utils/middleware-request-headers.d.ts +2 -1
  490. package/dist/utils/path-to-regexp.d.ts +21 -0
  491. package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
  492. package/dist/utils/plugin-react-version.d.ts +15 -0
  493. package/dist/utils/plugin-react-version.js +64 -0
  494. package/dist/utils/project.d.ts +2 -1
  495. package/dist/utils/project.js +9 -1
  496. package/dist/utils/public-routes.d.ts +2 -0
  497. package/dist/utils/public-routes.js +18 -7
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/sorted-array.d.ts +2 -1
  500. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  501. package/package.json +5 -5
  502. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  503. package/dist/server/default-not-found-module.d.ts +0 -19
  504. package/dist/server/default-not-found-module.js +0 -18
  505. package/dist/server/middleware-path-to-regexp.d.ts +0 -13
  506. package/dist/server/rsc-stream-hints.d.ts +0 -21
  507. package/dist/server/rsc-stream-hints.js +0 -227
  508. package/dist/utils/regex-safety.d.ts +0 -17
  509. package/dist/utils/regex-safety.js +0 -789
@@ -1,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";
@@ -78,6 +78,7 @@ async function renderAppPageHtmlStream(options) {
78
78
  sideStream: options.sideStream,
79
79
  capturedRscDataRef: options.capturedRscDataRef,
80
80
  pprFallbackShellSignal: options.pprFallbackShellSignal,
81
+ preloadRoutePattern: options.preloadRoutePattern,
81
82
  waitForAllReady: options.waitForAllReady,
82
83
  isStaticGeneration: options.isStaticGeneration,
83
84
  isForceStatic: options.isForceStatic,
@@ -86,6 +87,7 @@ async function renderAppPageHtmlStream(options) {
86
87
  onSsrError: options.onSsrError,
87
88
  mirrorNextFlight: options.mirrorNextFlight,
88
89
  fallbackToErrorDocumentOnShellError: options.fallbackToErrorDocumentOnShellError ?? (options.waitForAllReady !== true && options.hasCustomGlobalError === false),
90
+ resolveCaughtNotFoundBoundaries: options.resolveCaughtNotFoundBoundaries,
89
91
  dynamicStaleTimeSeconds: options.dynamicStaleTimeSeconds,
90
92
  getInitialNavigationCacheMetadata: options.getInitialNavigationCacheMetadata
91
93
  };
@@ -93,6 +95,12 @@ async function renderAppPageHtmlStream(options) {
93
95
  }
94
96
  async function renderAppPageHtmlResponse(options) {
95
97
  const { htmlStream, linkHeader: reactLinkHeader } = await renderAppPageHtmlStream(options);
98
+ return buildAppPageHtmlDocumentResponse(htmlStream, {
99
+ ...options,
100
+ reactLinkHeader
101
+ });
102
+ }
103
+ function buildAppPageHtmlDocumentResponse(htmlStream, options) {
96
104
  const safeStream = deferUntilStreamConsumed(htmlStream, () => {
97
105
  options.clearRequestContext();
98
106
  });
@@ -102,7 +110,7 @@ async function renderAppPageHtmlResponse(options) {
102
110
  });
103
111
  applyEdgeRuntimeHeader(headers, options.isEdgeRuntime);
104
112
  mergeMiddlewareResponseHeaders(headers, options.middlewareHeaders ?? null);
105
- const frameworkLinkHeader = buildAppPageLinkHeader(reactLinkHeader, options.fontLinkHeader, options.reactMaxHeadersLength);
113
+ const frameworkLinkHeader = buildAppPageLinkHeader(options.reactLinkHeader, options.fontLinkHeader, options.reactMaxHeadersLength);
106
114
  if (frameworkLinkHeader) headers.append("Link", frameworkLinkHeader);
107
115
  const response = new Response(safeStream, {
108
116
  status: options.status,
@@ -113,8 +121,20 @@ async function renderAppPageHtmlResponse(options) {
113
121
  }
114
122
  async function renderAppPageHtmlStreamWithRecovery(options) {
115
123
  try {
116
- const { htmlStream, metadataReady, renderComplete, capturedRscData, linkHeader, shellErrorRecovered } = normalizeAppSsrRenderResult(await options.renderHtmlStream());
124
+ const { htmlStream, metadataReady, renderComplete, capturedRscData, linkHeader, shellErrorRecovered, caughtShellError } = normalizeAppSsrRenderResult(await options.renderHtmlStream());
117
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
+ };
118
138
  return {
119
139
  htmlStream,
120
140
  response: null,
@@ -184,4 +204,4 @@ function createAppPageRscErrorTracker(baseOnError) {
184
204
  };
185
205
  }
186
206
  //#endregion
187
- export { buildAppPageLinkHeader, createAppPageFontData, createAppPageRscErrorTracker, createAppPageSsrErrorHandler, deferUntilStreamConsumed, isAppSsrRenderResult, renderAppPageHtmlResponse, renderAppPageHtmlStream, renderAppPageHtmlStreamWithRecovery };
207
+ export { buildAppPageHtmlDocumentResponse, buildAppPageLinkHeader, createAppPageFontData, createAppPageRscErrorTracker, createAppPageSsrErrorHandler, deferUntilStreamConsumed, isAppSsrRenderResult, renderAppPageHtmlResponse, renderAppPageHtmlStream, renderAppPageHtmlStreamWithRecovery };
@@ -1,4 +1,5 @@
1
1
  import { AppMiddlewareContext } from "./app-middleware.js";
2
+ import { MiddlewareResponseMergeOptions } from "./middleware-response-headers.js";
2
3
  import { EdgeApiExecutionRuntime } from "./edge-api-runtime.js";
3
4
  //#region src/server/app-pages-bridge.d.ts
4
5
  export type PagesEntry = {
@@ -24,7 +25,7 @@ type AppRouteMatch = {
24
25
  type RenderPagesFallbackDependencies = {
25
26
  loadPagesEntry: () => Promise<PagesEntry> | PagesEntry;
26
27
  buildRequestHeaders: (requestHeaders: Headers, middlewareRequestHeaders: Headers) => Headers | null;
27
- applyRouteHandlerMiddlewareContext: (response: Response, middlewareContext: AppMiddlewareContext) => Response;
28
+ applyRouteHandlerMiddlewareContext: (response: Response, middlewareContext: AppMiddlewareContext, options?: MiddlewareResponseMergeOptions) => Response;
28
29
  /**
29
30
  * Returns the `__prerender_bypass` Set-Cookie header emitted by a
30
31
  * `draftMode().enable()`/`disable()` call inside middleware, if any. Reading
@@ -60,4 +61,5 @@ type RenderPagesFallbackOptions = {
60
61
  * Fallback handler to route App Router requests to the Pages Router when no App Router route matches.
61
62
  */
62
63
  export declare function renderPagesFallback(options: RenderPagesFallbackOptions, dependencies: RenderPagesFallbackDependencies): Promise<Response | null>;
63
- //#endregion
64
+ //#endregion
65
+ export {};
@@ -23,15 +23,18 @@ async function renderPagesFallback(options, dependencies) {
23
23
  if (isRscRequest && !allowRscDocumentFallback) return null;
24
24
  const pagesEntry = await loadPagesEntry();
25
25
  const pagesRequestHeaders = middlewareContext.requestHeaders ? buildRequestHeaders(request.headers, middlewareContext.requestHeaders) : null;
26
- let pagesRequest = request;
27
- if (pagesRequestHeaders) pagesRequest = cloneRequestWithHeaders(request, pagesRequestHeaders);
26
+ const matchRequest = pagesRequestHeaders ? new Request(request.url, {
27
+ headers: pagesRequestHeaders,
28
+ method: request.method
29
+ }) : request;
30
+ const claimPagesRequest = () => pagesRequestHeaders ? cloneRequestWithHeaders(request, pagesRequestHeaders) : request;
28
31
  const queryIndex = pathname.indexOf("?");
29
32
  const pagesPathname = queryIndex === -1 ? pathname : pathname.slice(0, queryIndex);
30
33
  const pagesUrl = pagesPathname + (queryIndex === -1 ? url.search || "" : pathname.slice(queryIndex));
31
34
  if (pagesPathname.startsWith("/api/") || pagesPathname === "/api") {
32
35
  if (typeof pagesEntry.handleApiRoute !== "function") return null;
33
36
  const hasApiMatcher = typeof pagesEntry.matchApiRoute === "function";
34
- const apiMatch = hasApiMatcher ? pagesEntry.matchApiRoute?.(pagesUrl, pagesRequest) ?? null : null;
37
+ const apiMatch = hasApiMatcher ? pagesEntry.matchApiRoute?.(pagesUrl, matchRequest) ?? null : null;
35
38
  if (hasApiMatcher && apiMatch === null) return null;
36
39
  if (apiMatch !== null && matchKind === "static" && apiMatch.route.isDynamic) return null;
37
40
  if (apiMatch !== null && matchKind === "dynamic" && !apiMatch.route.isDynamic) return null;
@@ -41,24 +44,25 @@ async function renderPagesFallback(options, dependencies) {
41
44
  if (apiMatch !== null) beginRouteCacheability("pages-api", apiMatch.route.pattern);
42
45
  const executionContext = getRequestExecutionContext();
43
46
  const apiArgs = [
44
- pagesRequest,
47
+ claimPagesRequest(),
45
48
  pagesUrl,
46
49
  executionContext ?? void 0,
47
- executionContext?.trustedRevalidateOrigin ?? new URL(pagesRequest.url).origin,
50
+ executionContext?.trustedRevalidateOrigin,
48
51
  executionContext?.hostRuntime ?? "node"
49
52
  ];
50
53
  const pagesApiResponse = await (initialResponseHeaders ? pagesEntry.handleApiRoute(...apiArgs, initialResponseHeaders) : pagesEntry.handleApiRoute(...apiArgs));
51
54
  const draftCookie = getDraftModeCookieHeader();
52
- return applyDraftModeCookie(applyRouteHandlerMiddlewareContext(pagesApiResponse, middlewareContext), draftCookie);
55
+ return applyDraftModeCookie(applyRouteHandlerMiddlewareContext(pagesApiResponse, middlewareContext, { appendResponseChallenges: false }), draftCookie);
53
56
  }
54
57
  if (typeof pagesEntry.renderPage !== "function") return null;
55
58
  const hasPageMatcher = typeof pagesEntry.matchPageRoute === "function";
56
- const pageMatch = hasPageMatcher ? pagesEntry.matchPageRoute?.(pagesUrl, pagesRequest) ?? null : null;
59
+ const pageMatch = hasPageMatcher ? pagesEntry.matchPageRoute?.(pagesUrl, matchRequest) ?? null : null;
57
60
  if (hasPageMatcher && pageMatch === null) return null;
58
61
  if (pageMatch !== null && matchKind === "static" && pageMatch.route.isDynamic) return null;
59
62
  if (pageMatch !== null && matchKind === "dynamic" && !pageMatch.route.isDynamic) return null;
60
63
  if (appRouteMatch !== null && (pageMatch === null || !pagesRouteHasPriorityOverAppRoute(pageMatch.route, appRouteMatch.route))) return null;
61
64
  if (pageMatch !== null) beginRouteCacheability("pages-page", pageMatch.route.pattern);
65
+ const pagesRequest = claimPagesRequest();
62
66
  const renderArgs = [
63
67
  pagesDataRequest ? cloneRequestWithUrl(pagesRequest, pagesDataRequest.url) : pagesRequest,
64
68
  pagesUrl,
@@ -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 {};
@@ -1,4 +1,5 @@
1
1
  import { isUnknownRecord } from "../utils/record.js";
2
+ import { shareIsolatePromise } from "./isolate-shared-promise.js";
2
3
  import { pickRootParams, runWithRootParamsScope } from "../shims/root-params.js";
3
4
  //#region src/server/app-prerender-static-params.ts
4
5
  /**
@@ -42,7 +43,7 @@ function createAppPrerenderStaticParamsResolver(sources, rootParamNames) {
42
43
  let resolvePromise = null;
43
44
  const resolveFns = () => {
44
45
  if (resolvedFns) return Promise.resolve(resolvedFns);
45
- if (!resolvePromise) resolvePromise = (async () => {
46
+ if (!resolvePromise) resolvePromise = shareIsolatePromise((async () => {
46
47
  resolvedFns = (await Promise.all(usableSources.map(async (source) => {
47
48
  if (isGenerateStaticParamsFunction(source)) return source;
48
49
  const mod = await source.load();
@@ -50,7 +51,7 @@ function createAppPrerenderStaticParamsResolver(sources, rootParamNames) {
50
51
  return isGenerateStaticParamsFunction(fn) ? fn : null;
51
52
  }))).filter((fn) => fn !== null);
52
53
  return resolvedFns;
53
- })();
54
+ })());
54
55
  return resolvePromise;
55
56
  };
56
57
  return async (input) => {
@@ -11,7 +11,17 @@ export type AppPageRenderDependency = AppRenderDependency & {
11
11
  /** Whether `component` is a "use client" export seen from the RSC environment. */
12
12
  export declare function isAppClientReference(component: unknown): boolean;
13
13
  export declare function isReactOwnedAppComponent(component: unknown): boolean;
14
- export declare function invokeAppComponent(component: ComponentType<Record<string, unknown>>, props: Readonly<Record<string, unknown>>): ReactNode | Promise<ReactNode>;
14
+ /**
15
+ * `mapError` replaces an error thrown by a CSS-wrapped export's inner
16
+ * component, which renders after this call returns. The caller maps the
17
+ * errors this call throws or rejects with.
18
+ */
19
+ export declare function invokeAppComponent(component: ComponentType<Record<string, unknown>>, props: Readonly<Record<string, unknown>>, mapError?: (error: unknown) => unknown): ReactNode | Promise<ReactNode>;
20
+ /**
21
+ * `invokeAppComponent()`, with every error the component throws or rejects
22
+ * with replaced by `mapError(error)`, including its CSS-wrapped inner one's.
23
+ */
24
+ export declare function invokeAppComponentMappingErrors(component: ComponentType<Record<string, unknown>>, props: Readonly<Record<string, unknown>>, mapError: (error: unknown) => unknown): ReactNode | Promise<ReactNode>;
15
25
  export declare function registerAppElementRenderDependencies(elements: Readonly<Record<string, unknown>>, dependenciesByElementId: ReadonlyMap<string, AppRenderDependency>): void;
16
26
  export declare function releaseAppElementRenderDependency(elements: Readonly<Record<string, unknown>>, elementId: string): void;
17
27
  export declare function createAppRenderDependency(): AppRenderDependency;
@@ -1,5 +1,5 @@
1
1
  import { isPromiseLike } from "../utils/promise.js";
2
- import { createElement, use } from "react";
2
+ import { Fragment, createElement, isValidElement, use } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/server/app-render-dependency.tsx
5
5
  const REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
@@ -15,13 +15,72 @@ function isReactOwnedAppComponent(component) {
15
15
  if (candidate?.$$typeof === REACT_MEMO || candidate?.$$typeof === REACT_LAZY || candidate?.$$typeof === REACT_FORWARD_REF) return false;
16
16
  return typeof candidate !== "function" || candidate.$$typeof === REACT_CLIENT_REFERENCE || candidate.prototype?.isReactComponent != null;
17
17
  }
18
- function invokeAppComponent(component, props) {
18
+ /**
19
+ * `mapError` replaces an error thrown by a CSS-wrapped export's inner
20
+ * component, which renders after this call returns. The caller maps the
21
+ * errors this call throws or rejects with.
22
+ */
23
+ function invokeAppComponent(component, props, mapError) {
19
24
  const candidate = component;
20
- if (candidate.$$typeof === REACT_MEMO && candidate.type) return invokeAppComponent(candidate.type, props);
21
- if (candidate.$$typeof === REACT_LAZY && candidate._init) return invokeAppComponent(candidate._init(candidate._payload), props);
25
+ if (candidate.$$typeof === REACT_MEMO && candidate.type) return invokeAppComponent(candidate.type, props, mapError);
26
+ if (candidate.$$typeof === REACT_LAZY && candidate._init) return invokeAppComponent(candidate._init(candidate._payload), props, mapError);
22
27
  if (candidate.$$typeof === REACT_FORWARD_REF && candidate.render) return candidate.render(props, void 0);
23
28
  if (isReactOwnedAppComponent(candidate)) return createElement(candidate, props);
24
- return candidate(props);
29
+ const result = candidate(props);
30
+ return isPromiseLike(result) ? result : invokeCssWrappedComponent(result, props, mapError);
31
+ }
32
+ /**
33
+ * `invokeAppComponent()`, with every error the component throws or rejects
34
+ * with replaced by `mapError(error)`, including its CSS-wrapped inner one's.
35
+ */
36
+ function invokeAppComponentMappingErrors(component, props, mapError) {
37
+ try {
38
+ const result = invokeAppComponent(component, props, mapError);
39
+ return isPromiseLike(result) ? Promise.resolve(result).catch((error) => {
40
+ throw mapError(error);
41
+ }) : result;
42
+ } catch (error) {
43
+ throw mapError(error);
44
+ }
45
+ }
46
+ /**
47
+ * Whether `elementProps` are what `createElement(type, props)` produces: the
48
+ * same values, plus any `type.defaultProps` for keys that are `undefined`.
49
+ * Defaulted values aren't read again, since a default can be a getter.
50
+ */
51
+ function isElementOfProps(elementProps, props, defaultProps) {
52
+ const keys = new Set(Object.keys(props));
53
+ const defaulted = /* @__PURE__ */ new Set();
54
+ for (const key in defaultProps) if (props[key] === void 0) {
55
+ keys.add(key);
56
+ defaulted.add(key);
57
+ }
58
+ return Object.keys(elementProps).length === keys.size && [...keys].every((key) => Object.hasOwn(elementProps, key) && (defaulted.has(key) || Object.is(elementProps[key], props[key])));
59
+ }
60
+ /**
61
+ * `@vitejs/plugin-rsc` wraps a server component export whose module imports
62
+ * CSS (`__vite_rsc_wrap_css__`). The wrapper returns
63
+ * `<><Css /><Component {...props} /></>`, so a component vinext invokes
64
+ * directly renders as an element with its props after all. React's dev build
65
+ * serializes an element's props as debug info and calls `then` on `params`
66
+ * and `searchParams`, which counts as reading them. Invoke the inner
67
+ * component from an element without props instead, as for an export without
68
+ * CSS.
69
+ */
70
+ function invokeCssWrappedComponent(result, props, mapError) {
71
+ if (!isValidElement(result) || result.type !== Fragment || result.key !== null) return result;
72
+ const children = result.props.children;
73
+ if (!Array.isArray(children) || children.length !== 2) return result;
74
+ const [css, inner] = children;
75
+ if (!isValidElement(inner) || typeof inner.type !== "function" || inner.key !== null) return result;
76
+ const component = inner.type;
77
+ if (!isElementOfProps(inner.props, props, component.defaultProps)) return result;
78
+ const componentProps = inner.props;
79
+ function CssWrappedComponent() {
80
+ return mapError ? invokeAppComponentMappingErrors(component, componentProps, mapError) : invokeAppComponent(component, componentProps);
81
+ }
82
+ CssWrappedComponent.displayName = component.displayName ?? component.name;
83
+ return createElement(Fragment, null, css, createElement(CssWrappedComponent));
25
84
  }
26
85
  const appElementRenderDependencies = /* @__PURE__ */ new WeakMap();
27
86
  function registerAppElementRenderDependencies(elements, dependenciesByElementId) {
@@ -92,4 +151,4 @@ function renderAppComponentWithDependencyBarrier(component, props, dependency) {
92
151
  return createElement(AppComponentDependencyBarrier);
93
152
  }
94
153
  //#endregion
95
- export { createAppPageRenderDependency, createAppRenderDependency, invokeAppComponent, isAppClientReference, isAppRenderSuspension, isReactOwnedAppComponent, registerAppElementRenderDependencies, releaseAppElementRenderDependency, renderAfterAppDependencies, renderAppComponentWithDependencyBarrier };
154
+ export { createAppPageRenderDependency, createAppRenderDependency, invokeAppComponent, invokeAppComponentMappingErrors, isAppClientReference, isAppRenderSuspension, isReactOwnedAppComponent, registerAppElementRenderDependencies, releaseAppElementRenderDependency, renderAfterAppDependencies, renderAppComponentWithDependencyBarrier };
@@ -5,4 +5,5 @@ import { DispatchAppWorkerResponseStage } from "./app-worker-stages.js";
5
5
  export type AppRequestStageEnv = Record<string, unknown>;
6
6
  type AppRequestStageContext = ExecutionContextLike & VinextRequestStageContext;
7
7
  export declare function handleRequestStage(request: Request, env: AppRequestStageEnv | undefined, ctx: AppRequestStageContext | undefined, dispatchResponseStage: DispatchAppWorkerResponseStage): Promise<Response>;
8
- //#endregion
8
+ //#endregion
9
+ export {};
@@ -26,7 +26,7 @@ const rejectResponseStage = () => Promise.resolve(new Response(null, { status: 4
26
26
  function handleRequestStage(request, env, ctx, dispatchResponseStage) {
27
27
  const originalRequest = request;
28
28
  const handleStage = async () => {
29
- await __ensureInstrumentation();
29
+ await __ensureInstrumentation(ctx);
30
30
  const url = new URL(request.url);
31
31
  return traceFrameworkRequest({
32
32
  callback: () => handleRequest(request, env, ctx, dispatchResponseStage, ctx?.assets).then((response) => applyCdnResponseIdentityHeaders(response, originalRequest)),
@@ -56,7 +56,7 @@ async function handleRequest(request, env, platformCtx, dispatchResponseStage, a
56
56
  if (validationResponse) return validationResponse;
57
57
  didValidateCdnRequest = true;
58
58
  if (readinessResponse.status !== 204) return readinessResponse;
59
- await __ensureHybridPagesApplication();
59
+ await __ensureHybridPagesApplication(ctx);
60
60
  }
61
61
  let probeMode = null;
62
62
  let probeRoute = null;
@@ -6,4 +6,5 @@ type AppResponseStageEnv = Record<string, unknown>;
6
6
  /** Invoke one transformed public cache function without rendering its owning route. */
7
7
  export declare function invokeCacheFunction(invocation: VinextCacheFunctionInvocation, env: AppResponseStageEnv | undefined, platformCtx: ExecutionContextLike | undefined, dispatchRequestStage: VinextRequestStageTransport): Promise<void>;
8
8
  export declare function handleResponseStage(request: Request, env: AppResponseStageEnv | undefined, platformCtx: ExecutionContextLike | undefined, props: AppWorkerResponseStageProps, dispatchRequestStage: VinextRequestStageTransport, options?: VinextResponseStageDispatchOptions): Promise<Response>;
9
- //#endregion
9
+ //#endregion
10
+ export {};
@@ -19,7 +19,7 @@ import { registerConfiguredCacheAdapters } from "virtual:vinext-cache-adapters";
19
19
  /** Cacheable App response stage. This is the only multi-stage App entry that imports user routes. */
20
20
  /** Invoke one transformed public cache function without rendering its owning route. */
21
21
  async function invokeCacheFunction(invocation, env, platformCtx, dispatchRequestStage) {
22
- await __ensureInstrumentation();
22
+ await __ensureInstrumentation(platformCtx);
23
23
  const [{ loadServerAction }, { invokeCacheFunction: invokeRegisteredCacheFunction }] = await Promise.all([import("@vitejs/plugin-rsc/core/rsc"), import("../shims/cache-callable-runtime.js")]);
24
24
  registerConfiguredCacheAdapters(env);
25
25
  ensureFetchPatch();
@@ -37,8 +37,8 @@ async function handleResponseStage(request, env, platformCtx, props, dispatchReq
37
37
  if (props.requestOrigin !== new URL(request.url).origin) return new Response("Invalid vinext App response stage", { status: 400 });
38
38
  const currentBuildId = process.env.__VINEXT_BUILD_ID ?? null;
39
39
  if (props.buildId !== currentBuildId) return new Response("Incompatible vinext App response stage", { status: 409 });
40
- await __ensureInstrumentation();
41
- if (props.kind === "app-full-request" && props.prerenderDiscovery) await __ensureHybridPagesApplication();
40
+ await __ensureInstrumentation(platformCtx);
41
+ if (props.kind === "app-full-request" && props.prerenderDiscovery) await __ensureHybridPagesApplication(platformCtx);
42
42
  registerConfiguredImageOptimizer(env);
43
43
  let ctx = createWorkerRevalidationContext(platformCtx, (internalRequest) => dispatchRequestStage(internalRequest), "node");
44
44
  if (props.kind === "app-full-request" && props.prerenderDiscovery) ctx = {
@@ -45,4 +45,5 @@ type ReadAppRouteHandlerCacheOptions = {
45
45
  } | null) => void;
46
46
  };
47
47
  export declare function readAppRouteHandlerCacheResponse(options: ReadAppRouteHandlerCacheOptions): Promise<Response | null>;
48
- //#endregion
48
+ //#endregion
49
+ export {};
@@ -46,4 +46,5 @@ type DispatchAppRouteHandlerOptions = {
46
46
  searchParams: URLSearchParams;
47
47
  };
48
48
  export declare function dispatchAppRouteHandler(options: DispatchAppRouteHandlerOptions): Promise<Response>;
49
- //#endregion
49
+ //#endregion
50
+ export {};
@@ -1,4 +1,4 @@
1
- import { closeAfterResponse, createRequestContext, runWithRequestContext } from "../shims/unified-request-context.js";
1
+ import { closeAfterResponse, createRequestContext, getRequestContext, runWithRequestContext } from "../shims/unified-request-context.js";
2
2
  import "../utils/protocol-headers.js";
3
3
  import { getRequestExecutionContext } from "../shims/request-context.js";
4
4
  import { runInWorkStoreScope } from "../shims/internal/work-store-scope.js";
@@ -14,9 +14,9 @@ import { resolveAppRouteHandlerFetchCacheMode } from "./app-segment-config.js";
14
14
  import { setNavigationContext } from "../shims/navigation-context-state.js";
15
15
  import { makeThenableParams } from "../shims/thenable-params.js";
16
16
  import { traceResponseStart } from "./response-start-tracing.js";
17
- import { buildPageCacheTags } from "./implicit-tags.js";
18
17
  import { applyRouteHandlerMiddlewareContext, finalizeRouteHandlerResponse } from "./app-route-handler-response.js";
19
18
  import "../shims/navigation.js";
19
+ import { buildPageCacheTags } from "./implicit-tags.js";
20
20
  import { isKnownDynamicAppRoute, isValidHTTPMethod } from "./app-route-handler-runtime.js";
21
21
  import { getAppRouteHandlerRevalidateSeconds, hasAppRouteHandlerDefaultExport, hasNonStaticAppRouteHandlerMethods, resolveAppRouteHandlerMethod, shouldReadAppRouteHandlerCache } from "./app-route-handler-policy.js";
22
22
  import { createStaticGenerationHeadersContext } from "./app-static-generation.js";
@@ -40,6 +40,7 @@ async function runInRouteHandlerRevalidationContext(options, renderFn) {
40
40
  const requestContext = createRequestContext({
41
41
  headersContext,
42
42
  executionContext: getRequestExecutionContext(),
43
+ phase: "route-handler",
43
44
  unstableCacheRevalidation: "foreground"
44
45
  });
45
46
  const revalidation = runWithRequestContext(requestContext, () => runInWorkStoreScope(async () => {
@@ -203,6 +204,7 @@ async function dispatchAppRouteHandlerImpl(options) {
203
204
  return reportRequestError(error, request, context);
204
205
  },
205
206
  request: options.request,
207
+ requestSignal: getRequestContext().requestSignal ?? void 0,
206
208
  expireSeconds: options.expireSeconds,
207
209
  revalidateSeconds,
208
210
  revalidateReason,
@@ -56,6 +56,8 @@ type RunAppRouteHandlerOptions = {
56
56
  */
57
57
  params: AppRouteParams | null;
58
58
  request: Request;
59
+ /** Host signal for the client connection; only the foreground request has one. */
60
+ requestSignal?: AbortSignal;
59
61
  routePattern?: string;
60
62
  setHeadersAccessPhase?: (phase: HeadersAccessPhase) => HeadersAccessPhase;
61
63
  };
@@ -102,4 +104,5 @@ type ExecuteAppRouteHandlerOptions = {
102
104
  export declare function runAppRouteHandler(options: RunAppRouteHandlerOptions): Promise<RunAppRouteHandlerResult>;
103
105
  export declare function executeAppRouteHandler(options: ExecuteAppRouteHandlerOptions): Promise<Response>;
104
106
  export declare function traceAppRouteHandlerExecution<T>(routePattern: string, callback: (span: FrameworkSpan) => T): T;
105
- //#endregion
107
+ //#endregion
108
+ export {};
@@ -118,6 +118,7 @@ async function runAppRouteHandler(options) {
118
118
  options.markDynamicUsage();
119
119
  },
120
120
  requestMode: options.dynamicConfig === "force-static" || options.dynamicConfig === "error" ? options.dynamicConfig : "auto",
121
+ signal: options.requestSignal,
121
122
  staticGenerationErrorMessage(expression) {
122
123
  return getAppRouteStaticGenerationErrorMessage(options.routePattern, expression);
123
124
  }
@@ -210,10 +211,16 @@ async function executeAppRouteHandlerImpl(options) {
210
211
  revalidateSeconds: options.revalidateSeconds,
211
212
  requiresCompletedResponseAdmission: isRouteCacheabilityEvaluation()
212
213
  })) {
213
- const completed = await completeAppRouteHandlerResponse(response);
214
+ const completed = await completeAppRouteHandlerResponse(response).catch(async (error) => {
215
+ await _drainPendingRevalidations().catch(() => {});
216
+ throw error;
217
+ });
214
218
  response = completed.response;
215
219
  cleanupDeferredToBody = !completed.completed;
216
- if (completed.completed) markRouteCacheabilityResponseBodyComplete();
220
+ if (completed.completed) {
221
+ markRouteCacheabilityResponseBodyComplete();
222
+ await _drainPendingRevalidations();
223
+ }
217
224
  const dynamicUsedDuringCompletion = options.consumeDynamicUsage();
218
225
  dynamicUsedInHandler = handlerResult.didAccessDynamicRequest() || dynamicUsedDuringCompletion || dynamicUsedInHandler;
219
226
  }
@@ -1,8 +1,9 @@
1
+ import { MiddlewareResponseMergeOptions } from "./middleware-response-headers.js";
1
2
  //#region src/server/app-route-handler-middleware-context.d.ts
2
3
  export type RouteHandlerMiddlewareContext = {
3
4
  headers: Headers | null;
4
5
  status: number | null;
5
6
  };
6
7
  /** Apply request-stage middleware response metadata to a route-handler response. */
7
- export declare function applyRouteHandlerMiddlewareContext(response: Response, middlewareContext: RouteHandlerMiddlewareContext): Response;
8
+ export declare function applyRouteHandlerMiddlewareContext(response: Response, middlewareContext: RouteHandlerMiddlewareContext, options?: MiddlewareResponseMergeOptions): Response;
8
9
  //#endregion
@@ -1,10 +1,10 @@
1
- import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
1
+ import { mergeMiddlewareResponseHeadersOntoResponse } from "./middleware-response-headers.js";
2
2
  //#region src/server/app-route-handler-middleware-context.ts
3
3
  /** Apply request-stage middleware response metadata to a route-handler response. */
4
- function applyRouteHandlerMiddlewareContext(response, middlewareContext) {
4
+ function applyRouteHandlerMiddlewareContext(response, middlewareContext, options = {}) {
5
5
  if (!middlewareContext.headers && middlewareContext.status == null) return response;
6
6
  const responseHeaders = new Headers(response.headers);
7
- mergeMiddlewareResponseHeaders(responseHeaders, middlewareContext.headers);
7
+ mergeMiddlewareResponseHeadersOntoResponse(responseHeaders, middlewareContext.headers, options);
8
8
  return new Response(response.body, {
9
9
  status: middlewareContext.status ?? response.status,
10
10
  statusText: response.statusText,
@@ -1,3 +1,4 @@
1
+ import { MiddlewareResponseMergeOptions } from "./middleware-response-headers.js";
1
2
  import { CacheControlMetadata, CachedRouteValue } from "../shims/cache-handler.js";
2
3
  //#region src/server/app-route-handler-response.d.ts
3
4
  export type RouteHandlerMiddlewareContext = {
@@ -16,7 +17,7 @@ type FinalizeRouteHandlerResponseOptions = {
16
17
  draftCookie?: string | null;
17
18
  isHead: boolean;
18
19
  };
19
- export declare function applyRouteHandlerMiddlewareContext(response: Response, middlewareContext: RouteHandlerMiddlewareContext, options?: {
20
+ export declare function applyRouteHandlerMiddlewareContext(response: Response, middlewareContext: RouteHandlerMiddlewareContext, options?: MiddlewareResponseMergeOptions & {
20
21
  appendResponseLink?: boolean;
21
22
  }): Response;
22
23
  export declare function assertSupportedAppRouteHandlerResponse(response: Response): void;
@@ -25,4 +26,5 @@ export declare function applyRouteHandlerRevalidateHeader(response: Response, re
25
26
  export declare function markRouteHandlerCacheMiss(response: Response): void;
26
27
  export declare function buildAppRouteCacheValue(response: Response, browserCacheControl?: string): Promise<CachedRouteValue>;
27
28
  export declare function finalizeRouteHandlerResponse(response: Response, options: FinalizeRouteHandlerResponseOptions): Response;
28
- //#endregion
29
+ //#endregion
30
+ export {};
@@ -5,7 +5,7 @@ import { markRouteCacheabilityExplicitResponsePolicy, recordRouteCacheability }
5
5
  import { applyCdnResponseHeaders } from "./cache-control.js";
6
6
  import { buildAppRouteMissIsrCacheControl, decideIsr } from "./isr-decision.js";
7
7
  import { setCacheStateHeaders } from "./cache-headers.js";
8
- import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
8
+ import { mergeMiddlewareResponseHeadersOntoResponse } from "./middleware-response-headers.js";
9
9
  import { markEdgeRouteHandlerLinkHeaders } from "./app-response-header-provenance.js";
10
10
  import { getSetCookieName } from "./cookie-utils.js";
11
11
  //#region src/server/app-route-handler-response.ts
@@ -22,7 +22,7 @@ function applyRouteHandlerMiddlewareContext(response, middlewareContext, options
22
22
  return response;
23
23
  }
24
24
  const responseHeaders = new Headers(response.headers);
25
- mergeMiddlewareResponseHeaders(responseHeaders, middlewareContext.headers);
25
+ mergeMiddlewareResponseHeadersOntoResponse(responseHeaders, middlewareContext.headers, options);
26
26
  if (responseLink && middlewareContext.headers?.get("link")) responseHeaders.append("link", responseLink);
27
27
  const result = new Response(response.body, {
28
28
  status: middlewareContext.status ?? response.status,
@@ -30,6 +30,8 @@ type TrackedAppRouteRequestOptions = {
30
30
  middlewareHeaders?: Headers | null;
31
31
  onDynamicAccess?: (access: AppRouteDynamicRequestAccess) => void;
32
32
  requestMode?: AppRouteRequestMode;
33
+ /** Host signal for the client connection (UnifiedRequestContext.requestSignal). */
34
+ signal?: AbortSignal;
33
35
  staticGenerationErrorMessage?: (expression?: string) => string;
34
36
  };
35
37
  type TrackedAppRouteRequest = {
@@ -37,4 +39,5 @@ type TrackedAppRouteRequest = {
37
39
  didAccessDynamicRequest(): boolean;
38
40
  };
39
41
  export declare function createTrackedAppRouteRequest(request: Request, options?: TrackedAppRouteRequestOptions): TrackedAppRouteRequest;
40
- //#endregion
42
+ //#endregion
43
+ export {};
@@ -72,7 +72,20 @@ function buildNextConfig(options) {
72
72
  skipTrailingSlashRedirect: options.skipTrailingSlashRedirect
73
73
  };
74
74
  }
75
- function createForceStaticNextRequest(input, nextConfig) {
75
+ /**
76
+ * Undici's Request follows its input's signal through a WeakRef, and so does
77
+ * every clone between the host signal and the handler's request. A handler
78
+ * that only listens on `request.signal` (e.g. to stop a stream) would miss the
79
+ * abort once GC collects any of them, so the request follows the host signal
80
+ * directly and stays reachable for as long as that signal is.
81
+ */
82
+ const requestsByHostSignal = /* @__PURE__ */ new WeakMap();
83
+ function retainWhileSignalLives(signal, request) {
84
+ const requests = requestsByHostSignal.get(signal);
85
+ if (requests) requests.push(request);
86
+ else requestsByHostSignal.set(signal, [request]);
87
+ }
88
+ function createForceStaticNextRequest(input, nextConfig, signal) {
76
89
  const read = (key) => {
77
90
  const descriptor = BUILT_IN_REQUEST_PROPERTY_MAP.get(key)?.descriptor;
78
91
  if (descriptor?.get) return descriptor.get.call(input);
@@ -89,7 +102,7 @@ function createForceStaticNextRequest(input, nextConfig) {
89
102
  redirect: read("redirect"),
90
103
  referrer: read("referrer"),
91
104
  referrerPolicy: read("referrerPolicy"),
92
- signal: read("signal"),
105
+ signal: signal ?? read("signal"),
93
106
  nextConfig: nextConfig ?? void 0
94
107
  });
95
108
  }
@@ -215,7 +228,11 @@ function createTrackedAppRouteRequest(request, options = {}) {
215
228
  const sourceCfDescriptor = Reflect.getOwnPropertyDescriptor(requestWithOverrides, "cf");
216
229
  const sourceCfAccessor = sourceCfDescriptor?.get;
217
230
  const sourceCfMetadata = sourceCfAccessor ? void 0 : Reflect.get(requestWithOverrides, "cf", requestWithOverrides);
218
- const nextRequest = requestMode === "force-static" ? createForceStaticNextRequest(requestWithOverrides, nextConfig) : requestWithOverrides instanceof NextRequest && sourceCfDescriptor?.configurable !== false ? requestWithOverrides : new NextRequest(requestWithOverrides, { nextConfig: nextConfig ?? void 0 });
231
+ const nextRequest = requestMode === "force-static" ? createForceStaticNextRequest(requestWithOverrides, nextConfig, options.signal) : requestWithOverrides instanceof NextRequest && sourceCfDescriptor?.configurable !== false && !options.signal ? requestWithOverrides : new NextRequest(requestWithOverrides, {
232
+ nextConfig: nextConfig ?? void 0,
233
+ signal: options.signal
234
+ });
235
+ if (options.signal) retainWhileSignalLives(options.signal, nextRequest);
219
236
  const rawCfMetadata = sourceCfAccessor ? void 0 : sourceCfMetadata === void 0 ? Reflect.get(nextRequest, "cf", nextRequest) : sourceCfMetadata;
220
237
  const hasCfMetadata = sourceCfAccessor !== void 0 || rawCfMetadata !== void 0;
221
238
  const originalCfDescriptor = sourceCfDescriptor ?? Reflect.getOwnPropertyDescriptor(nextRequest, "cf");