vinext 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/README.md +5 -2
  2. package/THIRD_PARTY_LICENSES.md +47 -0
  3. package/dist/_virtual/_rolldown/runtime.js +4 -3
  4. package/dist/build/action-owner-manifest.d.ts +3 -2
  5. package/dist/build/action-owner-manifest.js +18 -2
  6. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  7. package/dist/build/app-page-static-eligibility.js +80 -13
  8. package/dist/build/clean-output.d.ts +2 -1
  9. package/dist/build/client-build-config.d.ts +13 -3
  10. package/dist/build/client-build-config.js +46 -9
  11. package/dist/build/client-reference-async.d.ts +48 -0
  12. package/dist/build/client-reference-async.js +123 -0
  13. package/dist/build/client-reference-chunks.d.ts +32 -0
  14. package/dist/build/client-reference-chunks.js +111 -0
  15. package/dist/build/client-reference-groups.d.ts +9 -1
  16. package/dist/build/client-reference-groups.js +40 -2
  17. package/dist/build/css-url-assets.d.ts +2 -1
  18. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  19. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  20. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  21. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  22. package/dist/build/google-fonts/validate.d.ts +2 -1
  23. package/dist/build/inline-css.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +2 -1
  25. package/dist/build/next-client-runtime-manifests.d.ts +2 -1
  26. package/dist/build/precompress.d.ts +2 -1
  27. package/dist/build/precompress.js +1 -1
  28. package/dist/build/prerender-paths.d.ts +2 -1
  29. package/dist/build/prerender-phase.d.ts +2 -1
  30. package/dist/build/prerender-server-pool.js +1 -1
  31. package/dist/build/prerender.d.ts +3 -2
  32. package/dist/build/prerender.js +6 -5
  33. package/dist/build/report.d.ts +2 -15
  34. package/dist/build/report.js +1 -51
  35. package/dist/build/run-prerender.d.ts +2 -1
  36. package/dist/build/server-actions-encryption-key.d.ts +2 -1
  37. package/dist/build/ssr-manifest.js +25 -2
  38. package/dist/build/standalone.d.ts +2 -1
  39. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  40. package/dist/cache.js +1 -2
  41. package/dist/check.d.ts +2 -1
  42. package/dist/check.js +5 -1
  43. package/dist/cli-args.d.ts +2 -1
  44. package/dist/cli.js +5 -0
  45. package/dist/client/client-redirect-matcher.js +2 -1
  46. package/dist/client/client-redirects.d.ts +4 -3
  47. package/dist/client/client-redirects.js +2 -1
  48. package/dist/client/client-rewrites.d.ts +2 -1
  49. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  50. package/dist/client/dev-error-overlay.js +1 -1
  51. package/dist/client/index.js +1 -2
  52. package/dist/client/instrumentation-client-state.js +5 -5
  53. package/dist/client/navigation-runtime.d.ts +16 -2
  54. package/dist/client/navigation-runtime.js +2 -2
  55. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  56. package/dist/client/vinext-next-data.d.ts +25 -1
  57. package/dist/client/window-next.d.ts +2 -1
  58. package/dist/config/config-matchers.d.ts +12 -1
  59. package/dist/config/config-matchers.js +111 -16
  60. package/dist/config/dotenv.d.ts +2 -1
  61. package/dist/config/next-config.d.ts +32 -1
  62. package/dist/config/next-config.js +93 -5
  63. package/dist/config/tsconfig-paths.d.ts +2 -1
  64. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
  65. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
  66. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
  67. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
  68. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
  69. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
  70. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
  71. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
  72. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
  73. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
  74. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
  75. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
  76. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
  77. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
  78. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
  79. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
  80. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
  81. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
  82. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
  83. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
  84. package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  105. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  106. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  107. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  108. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  109. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  110. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  111. package/dist/deps/.pnpm/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -0
  112. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  113. package/dist/entries/app-browser-entry.d.ts +20 -5
  114. package/dist/entries/app-browser-entry.js +79 -6
  115. package/dist/entries/app-rsc-entry.d.ts +2 -1
  116. package/dist/entries/app-rsc-entry.js +59 -60
  117. package/dist/entries/app-rsc-manifest.d.ts +2 -1
  118. package/dist/entries/app-rsc-manifest.js +56 -4
  119. package/dist/entries/app-ssr-entry.js +1 -0
  120. package/dist/entries/pages-entry-helpers.js +1 -2
  121. package/dist/entries/pages-server-entry.d.ts +2 -1
  122. package/dist/entries/pages-server-entry.js +34 -9
  123. package/dist/entries/runtime-entry-module.d.ts +1 -0
  124. package/dist/entries/runtime-entry-module.js +4 -1
  125. package/dist/image/image-adapters-virtual.d.ts +2 -1
  126. package/dist/index.js +184 -103
  127. package/dist/init-cloudflare.d.ts +1 -3
  128. package/dist/init-cloudflare.js +10 -48
  129. package/dist/init-platform.d.ts +2 -0
  130. package/dist/init-platform.js +4 -0
  131. package/dist/plugins/client-compile-hints.d.ts +30 -0
  132. package/dist/plugins/client-compile-hints.js +88 -0
  133. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  134. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  135. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  136. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  137. package/dist/plugins/environment.d.ts +2 -1
  138. package/dist/plugins/extensionless-dynamic-import.js +6 -2
  139. package/dist/plugins/fonts.js +9 -12
  140. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  141. package/dist/plugins/import-meta-url.d.ts +2 -1
  142. package/dist/plugins/next-intl-catalog.d.ts +12 -0
  143. package/dist/plugins/next-intl-catalog.js +85 -0
  144. package/dist/plugins/og-assets.d.ts +2 -1
  145. package/dist/plugins/og-assets.js +2 -3
  146. package/dist/plugins/optimize-imports.d.ts +2 -1
  147. package/dist/plugins/pages-node-externals.d.ts +3 -1
  148. package/dist/plugins/pages-node-externals.js +1 -1
  149. package/dist/plugins/remove-console.d.ts +2 -1
  150. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  151. package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
  152. package/dist/plugins/rsc-client-reference-loaders.js +170 -68
  153. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  154. package/dist/plugins/sass.d.ts +2 -1
  155. package/dist/plugins/strip-server-exports.d.ts +2 -1
  156. package/dist/plugins/styled-jsx.d.ts +2 -1
  157. package/dist/plugins/transform-result.d.ts +2 -1
  158. package/dist/plugins/typeof-window.d.ts +2 -1
  159. package/dist/plugins/use-cache-callable.d.ts +1 -1
  160. package/dist/plugins/use-cache-callable.js +136 -94
  161. package/dist/plugins/worker-image-imports.js +1 -1
  162. package/dist/plugins/worker-use-server.d.ts +2 -1
  163. package/dist/routing/app-route-graph.d.ts +46 -0
  164. package/dist/routing/app-route-graph.js +131 -51
  165. package/dist/routing/browser-route-manifest.d.ts +2 -1
  166. package/dist/routing/optimistic-route-trie.d.ts +2 -1
  167. package/dist/routing/route-matching.d.ts +2 -1
  168. package/dist/routing/route-pattern.d.ts +2 -1
  169. package/dist/server/accept-encoding.d.ts +2 -1
  170. package/dist/server/api-handler.js +19 -4
  171. package/dist/server/app-action-forwarding.d.ts +2 -1
  172. package/dist/server/app-bfcache-identity.d.ts +2 -1
  173. package/dist/server/app-bfcache-identity.js +1 -1
  174. package/dist/server/app-browser-action-result.d.ts +2 -1
  175. package/dist/server/app-browser-entry.js +106 -66
  176. package/dist/server/app-browser-error.d.ts +2 -1
  177. package/dist/server/app-browser-history-controller.d.ts +7 -5
  178. package/dist/server/app-browser-history-controller.js +93 -15
  179. package/dist/server/app-browser-hydration.d.ts +2 -1
  180. package/dist/server/app-browser-interception-context.d.ts +2 -1
  181. package/dist/server/app-browser-navigation-controller.d.ts +2 -2
  182. package/dist/server/app-browser-navigation-controller.js +16 -12
  183. package/dist/server/app-browser-popstate.d.ts +2 -1
  184. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  185. package/dist/server/app-browser-rsc-redirect.js +4 -4
  186. package/dist/server/app-browser-server-action-client.d.ts +4 -1
  187. package/dist/server/app-browser-server-action-client.js +4 -3
  188. package/dist/server/app-browser-state.d.ts +2 -4
  189. package/dist/server/app-browser-state.js +9 -4
  190. package/dist/server/app-browser-stream.d.ts +2 -1
  191. package/dist/server/app-browser-supplemental-refresh.js +16 -1
  192. package/dist/server/app-browser-visible-commit.d.ts +3 -2
  193. package/dist/server/app-browser-visible-commit.js +2 -12
  194. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  195. package/dist/server/app-client-reference-manifest.js +46 -0
  196. package/dist/server/app-client-reference-preloader.d.ts +25 -5
  197. package/dist/server/app-client-reference-preloader.js +22 -7
  198. package/dist/server/app-elements-wire.d.ts +8 -39
  199. package/dist/server/app-elements-wire.js +4 -41
  200. package/dist/server/app-elements.d.ts +4 -2
  201. package/dist/server/app-elements.js +4 -2
  202. package/dist/server/app-fallback-renderer.d.ts +9 -2
  203. package/dist/server/app-fallback-renderer.js +4 -1
  204. package/dist/server/app-history-state.d.ts +4 -3
  205. package/dist/server/app-history-state.js +5 -2
  206. package/dist/server/app-inline-css-client.d.ts +2 -1
  207. package/dist/server/app-metadata-tracing.d.ts +2 -1
  208. package/dist/server/app-mounted-layouts.d.ts +21 -0
  209. package/dist/server/app-mounted-layouts.js +67 -0
  210. package/dist/server/app-optimistic-routing.d.ts +37 -2
  211. package/dist/server/app-optimistic-routing.js +75 -2
  212. package/dist/server/app-page-boundary-render.d.ts +20 -2
  213. package/dist/server/app-page-boundary-render.js +224 -40
  214. package/dist/server/app-page-boundary.d.ts +34 -5
  215. package/dist/server/app-page-boundary.js +41 -8
  216. package/dist/server/app-page-cache-finalizer.d.ts +14 -2
  217. package/dist/server/app-page-cache-finalizer.js +71 -30
  218. package/dist/server/app-page-cache-render.d.ts +10 -2
  219. package/dist/server/app-page-cache-render.js +14 -2
  220. package/dist/server/app-page-cache.d.ts +13 -1
  221. package/dist/server/app-page-cache.js +33 -11
  222. package/dist/server/app-page-dispatch.d.ts +39 -11
  223. package/dist/server/app-page-dispatch.js +236 -177
  224. package/dist/server/app-page-element-builder.d.ts +19 -3
  225. package/dist/server/app-page-element-builder.js +193 -71
  226. package/dist/server/app-page-execution.d.ts +43 -51
  227. package/dist/server/app-page-execution.js +205 -92
  228. package/dist/server/app-page-head.d.ts +108 -3
  229. package/dist/server/app-page-head.js +337 -154
  230. package/dist/server/app-page-http-access-fallback-metadata.d.ts +49 -2
  231. package/dist/server/app-page-http-access-fallback-metadata.js +77 -2
  232. package/dist/server/app-page-layout-gate.d.ts +35 -0
  233. package/dist/server/app-page-layout-gate.js +50 -0
  234. package/dist/server/app-page-method.d.ts +2 -1
  235. package/dist/server/app-page-params.d.ts +0 -1
  236. package/dist/server/app-page-params.js +1 -14
  237. package/dist/server/app-page-probe.d.ts +5 -22
  238. package/dist/server/app-page-probe.js +4 -37
  239. package/dist/server/app-page-render-identity.d.ts +2 -1
  240. package/dist/server/app-page-render.d.ts +9 -13
  241. package/dist/server/app-page-render.js +108 -214
  242. package/dist/server/app-page-request.d.ts +15 -4
  243. package/dist/server/app-page-request.js +2 -2
  244. package/dist/server/app-page-response.js +3 -3
  245. package/dist/server/app-page-route-wiring.d.ts +65 -8
  246. package/dist/server/app-page-route-wiring.js +259 -103
  247. package/dist/server/app-page-rsc-render-status.d.ts +29 -2
  248. package/dist/server/app-page-rsc-render-status.js +121 -13
  249. package/dist/server/app-page-search-params-observation.d.ts +7 -2
  250. package/dist/server/app-page-search-params-observation.js +8 -1
  251. package/dist/server/app-page-segment-plan.d.ts +2 -1
  252. package/dist/server/app-page-stream.d.ts +33 -1
  253. package/dist/server/app-page-stream.js +25 -6
  254. package/dist/server/app-pages-bridge.d.ts +6 -1
  255. package/dist/server/app-pages-bridge.js +7 -3
  256. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  257. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  258. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  259. package/dist/server/app-prerender-static-params.d.ts +2 -1
  260. package/dist/server/app-render-dependency.d.ts +21 -4
  261. package/dist/server/app-render-dependency.js +100 -33
  262. package/dist/server/app-request-stage-dispatch.js +1 -1
  263. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  264. package/dist/server/app-response-stage-entry.d.ts +2 -1
  265. package/dist/server/app-route-handler-cache.d.ts +2 -1
  266. package/dist/server/app-route-handler-cache.js +2 -2
  267. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  268. package/dist/server/app-route-handler-dispatch.js +15 -10
  269. package/dist/server/app-route-handler-execution.d.ts +2 -1
  270. package/dist/server/app-route-handler-execution.js +8 -3
  271. package/dist/server/app-route-handler-policy.d.ts +1 -1
  272. package/dist/server/app-route-handler-policy.js +3 -3
  273. package/dist/server/app-route-handler-response.d.ts +2 -1
  274. package/dist/server/app-route-handler-response.js +1 -1
  275. package/dist/server/app-route-handler-runtime.d.ts +2 -1
  276. package/dist/server/app-route-handler-runtime.js +17 -4
  277. package/dist/server/app-route-module-loader.d.ts +18 -1
  278. package/dist/server/app-route-module-loader.js +8 -0
  279. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  280. package/dist/server/app-rsc-cache-busting.d.ts +2 -2
  281. package/dist/server/app-rsc-cache-busting.js +4 -4
  282. package/dist/server/app-rsc-error-handler.d.ts +4 -2
  283. package/dist/server/app-rsc-error-handler.js +9 -1
  284. package/dist/server/app-rsc-errors.d.ts +10 -1
  285. package/dist/server/app-rsc-errors.js +8 -1
  286. package/dist/server/app-rsc-handler.d.ts +7 -6
  287. package/dist/server/app-rsc-handler.js +36 -34
  288. package/dist/server/app-rsc-request-normalization.d.ts +0 -4
  289. package/dist/server/app-rsc-request-normalization.js +1 -4
  290. package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
  291. package/dist/server/app-rsc-response-finalizer.js +2 -2
  292. package/dist/server/app-rsc-response-stage.js +5 -3
  293. package/dist/server/app-rsc-route-matching.d.ts +38 -1
  294. package/dist/server/app-rsc-route-matching.js +24 -0
  295. package/dist/server/app-segment-config.d.ts +2 -1
  296. package/dist/server/app-segment-config.js +1 -14
  297. package/dist/server/app-server-action-execution.d.ts +5 -2
  298. package/dist/server/app-server-action-execution.js +10 -7
  299. package/dist/server/app-ssr-entry.d.ts +8 -0
  300. package/dist/server/app-ssr-entry.js +98 -50
  301. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  302. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  303. package/dist/server/app-ssr-stream.d.ts +22 -10
  304. package/dist/server/app-ssr-stream.js +300 -68
  305. package/dist/server/app-static-generation.d.ts +2 -1
  306. package/dist/server/app-streamed-client-references.d.ts +39 -0
  307. package/dist/server/app-streamed-client-references.js +156 -0
  308. package/dist/server/app-visited-response-cache.d.ts +38 -2
  309. package/dist/server/app-visited-response-cache.js +46 -5
  310. package/dist/server/app-worker-stages.d.ts +27 -4
  311. package/dist/server/app-worker-stages.js +45 -6
  312. package/dist/server/artifact-compatibility.d.ts +2 -2
  313. package/dist/server/artifact-compatibility.js +1 -10
  314. package/dist/server/bfcache-identity.d.ts +2 -1
  315. package/dist/server/cache-headers.d.ts +2 -1
  316. package/dist/server/cache-proof.d.ts +1 -115
  317. package/dist/server/cache-proof.js +1 -544
  318. package/dist/server/cacheability-request.d.ts +2 -1
  319. package/dist/server/cacheability-request.js +13 -8
  320. package/dist/server/config-headers.d.ts +2 -1
  321. package/dist/server/csp.d.ts +2 -1
  322. package/dist/server/default-global-not-found-module.d.ts +2 -1
  323. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  324. package/dist/server/default-http-access-fallback-modules.js +31 -0
  325. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  326. package/dist/server/defer-until-stream-consumed.js +154 -21
  327. package/dist/server/dev-lockfile.d.ts +32 -2
  328. package/dist/server/dev-lockfile.js +46 -2
  329. package/dist/server/dev-module-runner.d.ts +2 -1
  330. package/dist/server/dev-server.js +14 -6
  331. package/dist/server/fetch-handler.js +1 -2
  332. package/dist/server/file-based-metadata.d.ts +2 -1
  333. package/dist/server/framework-tracer.d.ts +2 -1
  334. package/dist/server/headers.d.ts +6 -3
  335. package/dist/server/headers.js +9 -5
  336. package/dist/server/html.d.ts +1 -0
  337. package/dist/server/html.js +19 -1
  338. package/dist/server/http-conditional.d.ts +2 -1
  339. package/dist/server/http-error-responses.d.ts +2 -1
  340. package/dist/server/implicit-tags.d.ts +2 -1
  341. package/dist/server/isr-cache.d.ts +8 -2
  342. package/dist/server/isr-cache.js +26 -1
  343. package/dist/server/metadata-route-build-data.d.ts +2 -1
  344. package/dist/server/metadata-route-build-data.js +1 -1
  345. package/dist/server/metadata-route-response.d.ts +2 -1
  346. package/dist/server/metadata-route-response.js +32 -15
  347. package/dist/server/metadata-routes.d.ts +2 -1
  348. package/dist/server/middleware-runtime.d.ts +2 -1
  349. package/dist/server/multi-stage.d.ts +52 -11
  350. package/dist/server/multi-stage.js +13 -1
  351. package/dist/server/navigation-planner.js +1 -1
  352. package/dist/server/navigation-trace.d.ts +2 -1
  353. package/dist/server/next-error-digest.d.ts +2 -1
  354. package/dist/server/nitro-public-files-plugin.d.ts +2 -1
  355. package/dist/server/nitro-public-files.d.ts +2 -1
  356. package/dist/server/opentelemetry-api.d.ts +2 -1
  357. package/dist/server/operation-token.d.ts +2 -1
  358. package/dist/server/pages-api-route.d.ts +2 -1
  359. package/dist/server/pages-api-route.js +28 -19
  360. package/dist/server/pages-asset-tags.d.ts +2 -1
  361. package/dist/server/pages-body-parser-config.d.ts +2 -1
  362. package/dist/server/pages-client-assets.d.ts +4 -0
  363. package/dist/server/pages-data-route.d.ts +2 -1
  364. package/dist/server/pages-document-asset-props.d.ts +2 -1
  365. package/dist/server/pages-document-initial-props.d.ts +2 -1
  366. package/dist/server/pages-execution-tracing.d.ts +2 -1
  367. package/dist/server/pages-execution-tracing.js +1 -1
  368. package/dist/server/pages-get-initial-props.d.ts +2 -1
  369. package/dist/server/pages-media-type.d.ts +21 -1
  370. package/dist/server/pages-media-type.js +69 -5
  371. package/dist/server/pages-node-compat.js +52 -27
  372. package/dist/server/pages-page-data.d.ts +7 -1
  373. package/dist/server/pages-page-data.js +35 -12
  374. package/dist/server/pages-page-handler.d.ts +3 -2
  375. package/dist/server/pages-page-handler.js +27 -27
  376. package/dist/server/pages-page-method.d.ts +2 -1
  377. package/dist/server/pages-page-response.d.ts +2 -1
  378. package/dist/server/pages-preview.d.ts +2 -1
  379. package/dist/server/pages-readiness.d.ts +2 -1
  380. package/dist/server/pages-request-pipeline.d.ts +10 -1
  381. package/dist/server/pages-request-pipeline.js +6 -7
  382. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  383. package/dist/server/pages-request-stage-entry.js +14 -12
  384. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  385. package/dist/server/pages-response-stage-entry.js +9 -3
  386. package/dist/server/pages-route-data-kind.d.ts +2 -1
  387. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  388. package/dist/server/prerender-route-params.d.ts +2 -1
  389. package/dist/server/prod-server.js +14 -4
  390. package/dist/server/request-log.d.ts +2 -1
  391. package/dist/server/request-pipeline.d.ts +6 -0
  392. package/dist/server/request-pipeline.js +21 -1
  393. package/dist/server/request-tracing.d.ts +2 -1
  394. package/dist/server/request-tracing.js +1 -1
  395. package/dist/server/response-start-tracing.js +7 -29
  396. package/dist/server/rsc-render-stream.d.ts +4 -0
  397. package/dist/server/rsc-render-stream.js +25 -0
  398. package/dist/server/seed-cache.d.ts +2 -1
  399. package/dist/server/seed-cache.js +1 -1
  400. package/dist/server/shared-cache-identity.d.ts +23 -0
  401. package/dist/server/shared-cache-identity.js +36 -0
  402. package/dist/server/static-file-cache.d.ts +2 -1
  403. package/dist/server/static-file-cache.js +1 -0
  404. package/dist/server/worker-revalidation-context.d.ts +2 -1
  405. package/dist/server/worker-stages.d.ts +18 -4
  406. package/dist/server/worker-stages.js +23 -4
  407. package/dist/shims/app.d.ts +2 -1
  408. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  409. package/dist/shims/cache-handler.d.ts +8 -3
  410. package/dist/shims/cache-handler.js +31 -11
  411. package/dist/shims/cache-request-state.d.ts +17 -20
  412. package/dist/shims/cache-request-state.js +16 -21
  413. package/dist/shims/cache-runtime.js +27 -11
  414. package/dist/shims/cache.d.ts +8 -7
  415. package/dist/shims/cache.js +17 -19
  416. package/dist/shims/cacheability-classification.d.ts +2 -0
  417. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  418. package/dist/shims/caught-not-found-boundaries.js +48 -0
  419. package/dist/shims/cdn-cache.d.ts +22 -5
  420. package/dist/shims/cdn-purge-routes.d.ts +2 -1
  421. package/dist/shims/client-locale.js +2 -1
  422. package/dist/shims/client-page-root.d.ts +2 -1
  423. package/dist/shims/client-page-root.js +2 -2
  424. package/dist/shims/config.d.ts +2 -1
  425. package/dist/shims/default-forbidden.d.ts +4 -0
  426. package/dist/shims/default-forbidden.js +18 -0
  427. package/dist/shims/default-not-found.d.ts +0 -5
  428. package/dist/shims/default-not-found.js +5 -41
  429. package/dist/shims/default-unauthorized.d.ts +4 -0
  430. package/dist/shims/default-unauthorized.js +18 -0
  431. package/dist/shims/dynamic.js +9 -6
  432. package/dist/shims/error-boundary.d.ts +39 -3
  433. package/dist/shims/error-boundary.js +33 -18
  434. package/dist/shims/fetch-cache-state.d.ts +5 -1
  435. package/dist/shims/fetch-cache-state.js +1 -3
  436. package/dist/shims/fetch-cache.d.ts +2 -1
  437. package/dist/shims/fetch-cache.js +34 -24
  438. package/dist/shims/font-google.js +1 -2
  439. package/dist/shims/font-utils.d.ts +3 -2
  440. package/dist/shims/font-utils.js +5 -3
  441. package/dist/shims/form.js +3 -3
  442. package/dist/shims/headers.d.ts +8 -23
  443. package/dist/shims/headers.js +17 -67
  444. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  445. package/dist/shims/http-access-error-fallback.js +47 -0
  446. package/dist/shims/image.d.ts +1 -22
  447. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  448. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  449. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  450. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  451. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  452. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  453. package/dist/shims/internal/client-reference-loader.js +91 -0
  454. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  455. package/dist/shims/internal/cookies.js +1 -2
  456. package/dist/shims/internal/headers-state.d.ts +2 -0
  457. package/dist/shims/internal/headers-state.js +6 -1
  458. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
  459. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  460. package/dist/shims/internal/navigation-untracked.js +1 -1
  461. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  462. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  463. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  464. package/dist/shims/link.js +197 -52
  465. package/dist/shims/metadata.d.ts +52 -29
  466. package/dist/shims/metadata.js +142 -42
  467. package/dist/shims/navigation-errors.d.ts +2 -1
  468. package/dist/shims/navigation-server.js +1 -1
  469. package/dist/shims/navigation.d.ts +95 -8
  470. package/dist/shims/navigation.js +255 -47
  471. package/dist/shims/navigation.react-server.js +2 -2
  472. package/dist/shims/pages-router-runtime.d.ts +2 -1
  473. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  474. package/dist/shims/request-state-types.d.ts +2 -2
  475. package/dist/shims/router.js +14 -3
  476. package/dist/shims/slot.d.ts +12 -0
  477. package/dist/shims/slot.js +37 -9
  478. package/dist/shims/unified-request-context.d.ts +1 -1
  479. package/dist/shims/unified-request-context.js +5 -6
  480. package/dist/typegen.d.ts +2 -1
  481. package/dist/utils/cache-control-metadata.d.ts +5 -0
  482. package/dist/utils/cache-control-metadata.js +9 -1
  483. package/dist/utils/client-build-manifest.d.ts +4 -1
  484. package/dist/utils/client-build-manifest.js +9 -2
  485. package/dist/utils/client-entry-manifest.d.ts +13 -0
  486. package/dist/utils/client-entry-manifest.js +20 -1
  487. package/dist/utils/client-reference-chunks.d.ts +45 -0
  488. package/dist/utils/client-reference-chunks.js +30 -0
  489. package/dist/utils/client-runtime-metadata.d.ts +9 -1
  490. package/dist/utils/client-runtime-metadata.js +40 -9
  491. package/dist/utils/compare.d.ts +9 -0
  492. package/dist/utils/compare.js +15 -1
  493. package/dist/utils/lazy-chunks.d.ts +14 -0
  494. package/dist/utils/lazy-chunks.js +27 -1
  495. package/dist/utils/middleware-request-headers.d.ts +2 -1
  496. package/dist/utils/project.d.ts +4 -3
  497. package/dist/utils/project.js +12 -17
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/regex.d.ts +5 -0
  500. package/dist/utils/regex.js +11 -1
  501. package/dist/utils/text-stream.d.ts +10 -5
  502. package/dist/utils/text-stream.js +6 -6
  503. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  504. package/package.json +6 -5
  505. package/dist/build/layout-classification-types.d.ts +0 -60
  506. package/dist/build/layout-classification-types.js +0 -1
  507. package/dist/build/layout-classification.d.ts +0 -61
  508. package/dist/build/layout-classification.js +0 -98
  509. package/dist/build/route-classification-injector.d.ts +0 -32
  510. package/dist/build/route-classification-injector.js +0 -59
  511. package/dist/build/route-classification-manifest.d.ts +0 -53
  512. package/dist/build/route-classification-manifest.js +0 -143
  513. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  514. package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -10
  515. package/dist/server/app-browser-client-reuse-manifest.js +0 -101
  516. package/dist/server/app-layout-param-observation.d.ts +0 -41
  517. package/dist/server/app-layout-param-observation.js +0 -168
  518. package/dist/server/client-reuse-manifest.d.ts +0 -102
  519. package/dist/server/client-reuse-manifest.js +0 -209
  520. package/dist/server/default-not-found-module.d.ts +0 -19
  521. package/dist/server/default-not-found-module.js +0 -18
  522. package/dist/server/rsc-stream-hints.d.ts +0 -21
  523. package/dist/server/rsc-stream-hints.js +0 -227
  524. package/dist/server/skip-cache-proof.d.ts +0 -60
  525. package/dist/server/skip-cache-proof.js +0 -168
  526. package/dist/server/static-layout-client-reuse-proof.d.ts +0 -13
  527. package/dist/server/static-layout-client-reuse-proof.js +0 -33
  528. package/dist/utils/sorted-array.d.ts +0 -7
  529. package/dist/utils/sorted-array.js +0 -20
@@ -9,6 +9,26 @@ export declare class PagesBodyParseError extends Error {
9
9
  readonly statusCode: number;
10
10
  constructor(message: string, statusCode: number);
11
11
  }
12
- export declare function getMediaType(contentType: string | null | undefined): string;
13
12
  export declare function isJsonMediaType(mediaType: string): boolean;
13
+ /** A `TextDecoder`-shaped decoder for one request body. */
14
+ export type PagesBodyDecoder = {
15
+ decode(input?: Uint8Array, options?: {
16
+ stream?: boolean;
17
+ }): string;
18
+ };
19
+ /**
20
+ * Resolve the media type and body decoder for a Pages API request, matching
21
+ * Next.js `parseBody()`: a malformed Content-Type is treated as `text/plain`,
22
+ * the body is decoded with its `charset` (UTF-8 by default), and a charset that
23
+ * can't be decoded is rejected with `400 Invalid body`.
24
+ *
25
+ * Next.js decodes through raw-body with iconv-lite 0.4, which vinext bundles
26
+ * at the same version. It is loaded only for non-UTF-8 charsets: `TextDecoder`
27
+ * decodes UTF-8 identically, BOM stripping included, and keeps iconv-lite's
28
+ * encoding tables out of the startup path.
29
+ */
30
+ export declare function createPagesBodyDecoder(contentType: string | null | undefined): Promise<{
31
+ mediaType: string;
32
+ decoder: PagesBodyDecoder;
33
+ }>;
14
34
  //#endregion
@@ -1,3 +1,5 @@
1
+ import { __toESM } from "../_virtual/_rolldown/runtime.js";
2
+ import { Buffer } from "node:buffer";
1
3
  //#region src/server/pages-media-type.ts
2
4
  /**
3
5
  * Shared media-type helpers and body-parse error for Pages API routes.
@@ -13,12 +15,74 @@ var PagesBodyParseError = class extends Error {
13
15
  this.name = "PagesBodyParseError";
14
16
  }
15
17
  };
16
- function getMediaType(contentType) {
17
- const [type] = (contentType ?? "text/plain").split(";");
18
- return type?.trim().toLowerCase() || "text/plain";
19
- }
20
18
  function isJsonMediaType(mediaType) {
21
19
  return mediaType === "application/json" || mediaType === "application/ld+json";
22
20
  }
21
+ const TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
22
+ const PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g;
23
+ const QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g;
24
+ function parseContentType(header) {
25
+ let index = header.indexOf(";");
26
+ const type = (index === -1 ? header : header.slice(0, index)).trim();
27
+ if (!TYPE_REGEXP.test(type)) return null;
28
+ let charset;
29
+ if (index !== -1) {
30
+ const paramRegexp = new RegExp(PARAM_REGEXP);
31
+ paramRegexp.lastIndex = index;
32
+ let match;
33
+ while (match = paramRegexp.exec(header)) {
34
+ if (match.index !== index) return null;
35
+ index += match[0].length;
36
+ if (match[1].toLowerCase() !== "charset") continue;
37
+ const value = match[2];
38
+ charset = value.startsWith("\"") ? value.slice(1, -1).replace(QESC_REGEXP, "$1") : value;
39
+ }
40
+ if (index !== header.length) return null;
41
+ }
42
+ return {
43
+ mediaType: type.toLowerCase(),
44
+ charset
45
+ };
46
+ }
47
+ function iconvBodyDecoder(decoder) {
48
+ return { decode(input, options) {
49
+ let text = input ? decoder.write(Buffer.from(input.buffer, input.byteOffset, input.byteLength)) : "";
50
+ if (!options?.stream) text += decoder.end() || "";
51
+ return text;
52
+ } };
53
+ }
54
+ /**
55
+ * Resolve the media type and body decoder for a Pages API request, matching
56
+ * Next.js `parseBody()`: a malformed Content-Type is treated as `text/plain`,
57
+ * the body is decoded with its `charset` (UTF-8 by default), and a charset that
58
+ * can't be decoded is rejected with `400 Invalid body`.
59
+ *
60
+ * Next.js decodes through raw-body with iconv-lite 0.4, which vinext bundles
61
+ * at the same version. It is loaded only for non-UTF-8 charsets: `TextDecoder`
62
+ * decodes UTF-8 identically, BOM stripping included, and keeps iconv-lite's
63
+ * encoding tables out of the startup path.
64
+ */
65
+ async function createPagesBodyDecoder(contentType) {
66
+ const parsed = contentType && parseContentType(contentType) || {
67
+ mediaType: "text/plain",
68
+ charset: void 0
69
+ };
70
+ const charset = parsed.charset || "utf-8";
71
+ if (charset.toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, "") === "utf8") return {
72
+ mediaType: parsed.mediaType,
73
+ decoder: new TextDecoder()
74
+ };
75
+ const iconv = (await import("../deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1))).default;
76
+ let decoder;
77
+ try {
78
+ decoder = iconv.getDecoder(charset);
79
+ } catch {
80
+ throw new PagesBodyParseError("Invalid body", 400);
81
+ }
82
+ return {
83
+ mediaType: parsed.mediaType,
84
+ decoder: iconvBodyDecoder(decoder)
85
+ };
86
+ }
23
87
  //#endregion
24
- export { PagesBodyParseError, getMediaType, isJsonMediaType };
88
+ export { PagesBodyParseError, createPagesBodyDecoder, isJsonMediaType };
@@ -2,11 +2,11 @@ import { parseCookieHeader } from "../utils/parse-cookie.js";
2
2
  import { getRequestExecutionContext } from "../shims/request-context.js";
3
3
  import { readStreamAsTextWithLimit } from "../utils/text-stream.js";
4
4
  import { DEFAULT_PAGES_API_BODY_SIZE_LIMIT } from "./pages-body-parser-config.js";
5
- import { PagesBodyParseError, getMediaType, isJsonMediaType } from "./pages-media-type.js";
5
+ import { PagesBodyParseError, createPagesBodyDecoder, isJsonMediaType } from "./pages-media-type.js";
6
6
  import { performOnDemandRevalidate } from "./pages-revalidate.js";
7
7
  import { clearPagesPreviewData, getPagesPreviewState, setPagesDraftMode, setPagesPreviewData } from "./pages-preview.js";
8
8
  import { decode } from "node:querystring";
9
- import { Readable, Writable } from "node:stream";
9
+ import { Readable, Stream, Writable } from "node:stream";
10
10
  //#region src/server/pages-node-compat.ts
11
11
  const MAX_PAGES_API_BODY_SIZE = DEFAULT_PAGES_API_BODY_SIZE_LIMIT;
12
12
  const NO_BODY_RESPONSE_STATUSES = /* @__PURE__ */ new Set([
@@ -26,11 +26,17 @@ function validateAppendedHeader(name, value) {
26
26
  if (INVALID_HEADER_VALUE_CHAR_PATTERN.test(String(item))) throw createNodeTypeError("ERR_INVALID_CHAR", `Invalid character in header content ["${name}"]`);
27
27
  }
28
28
  }
29
- async function readPagesRequestBodyWithLimit(request, maxBytes) {
30
- if (!request.body) return "";
31
- return readStreamAsTextWithLimit(request.body, maxBytes, () => {
29
+ /** The decoded body, or undefined when the request carried no body bytes. */
30
+ async function readPagesRequestBodyWithLimit(request, maxBytes, decoder) {
31
+ if (!request.body) return;
32
+ let byteLength = 0;
33
+ const text = await readStreamAsTextWithLimit(request.body, maxBytes, () => {
32
34
  throw new PagesBodyParseError("Request body too large", 413);
33
- });
35
+ }, { decode(input, options) {
36
+ byteLength += input?.byteLength ?? 0;
37
+ return decoder.decode(input, options);
38
+ } });
39
+ return byteLength > 0 ? text : void 0;
34
40
  }
35
41
  /**
36
42
  * Read and parse a Pages Router API request body for the Workers/prod path.
@@ -43,16 +49,16 @@ async function readPagesRequestBodyWithLimit(request, maxBytes) {
43
49
  * @see https://nextjs.org/docs/pages/building-your-application/routing/api-routes#custom-config
44
50
  */
45
51
  async function parsePagesApiBody(request, maxBytes = MAX_PAGES_API_BODY_SIZE) {
52
+ const { mediaType, decoder } = await createPagesBodyDecoder(request.headers.get("content-type"));
46
53
  if (Number.parseInt(request.headers.get("content-length") || "0", 10) > maxBytes) throw new PagesBodyParseError("Request body too large", 413);
47
- let rawBody = "";
54
+ let rawBody;
48
55
  try {
49
- rawBody = await readPagesRequestBodyWithLimit(request, maxBytes);
56
+ rawBody = await readPagesRequestBodyWithLimit(request, maxBytes, decoder);
50
57
  } catch (err) {
51
58
  if (err instanceof PagesBodyParseError) throw err;
52
59
  throw new PagesBodyParseError("Request body too large", 413);
53
60
  }
54
- const mediaType = getMediaType(request.headers.get("content-type"));
55
- if (!rawBody) return isJsonMediaType(mediaType) ? {} : mediaType === "application/x-www-form-urlencoded" ? decode(rawBody) : void 0;
61
+ if (!rawBody) return isJsonMediaType(mediaType) ? {} : mediaType === "application/x-www-form-urlencoded" ? decode("") : rawBody;
56
62
  if (isJsonMediaType(mediaType)) try {
57
63
  return JSON.parse(rawBody);
58
64
  } catch {
@@ -61,24 +67,34 @@ async function parsePagesApiBody(request, maxBytes = MAX_PAGES_API_BODY_SIZE) {
61
67
  if (mediaType === "application/x-www-form-urlencoded") return decode(rawBody);
62
68
  return rawBody;
63
69
  }
64
- async function* requestBodyChunks(request) {
65
- if (!request.body || request.bodyUsed) return;
66
- const reader = request.body.getReader();
67
- try {
68
- for (;;) {
69
- const { value, done } = await reader.read();
70
- if (done) return;
71
- yield Buffer.from(value.buffer, value.byteOffset, value.byteLength);
72
- }
73
- } finally {
74
- try {
75
- await reader.cancel();
76
- } catch {}
77
- reader.releaseLock();
78
- }
79
- }
80
70
  function createRequestReadable(request) {
81
- return Readable.from(requestBodyChunks(request), { objectMode: false });
71
+ const body = request.bodyUsed ? null : request.body;
72
+ let reader;
73
+ return new Readable({
74
+ read() {
75
+ if (!body) {
76
+ this.push(null);
77
+ return;
78
+ }
79
+ reader ??= body.getReader();
80
+ reader.read().then(({ value, done }) => {
81
+ if (this.destroyed) return;
82
+ if (done) {
83
+ this.push(null);
84
+ return;
85
+ }
86
+ this.push(Buffer.from(value.buffer, value.byteOffset, value.byteLength));
87
+ }, (error) => this.destroy(error));
88
+ },
89
+ destroy(error, callback) {
90
+ const cancelled = reader ? reader.cancel(error ?? void 0) : body?.cancel(error ?? void 0);
91
+ if (!cancelled) {
92
+ callback(error);
93
+ return;
94
+ }
95
+ cancelled.then(() => callback(error), () => callback(error));
96
+ }
97
+ });
82
98
  }
83
99
  function parsePagesRequestCookies(cookieHeader) {
84
100
  return parseCookieHeader(Array.isArray(cookieHeader) ? cookieHeader.join("; ") : cookieHeader);
@@ -189,6 +205,15 @@ var PagesResponseStream = class extends Writable {
189
205
  this.end(JSON.stringify(data));
190
206
  }
191
207
  send(data) {
208
+ if (NO_BODY_RESPONSE_STATUSES.has(this.resStatusCode)) {
209
+ this.end();
210
+ return;
211
+ }
212
+ if (data instanceof Stream) {
213
+ if (!this.resHeaders["content-type"]) this.resHeaders["content-type"] = "application/octet-stream";
214
+ data.pipe(this);
215
+ return;
216
+ }
192
217
  if (Buffer.isBuffer(data)) {
193
218
  if (!this.resHeaders["content-type"]) this.resHeaders["content-type"] = "application/octet-stream";
194
219
  this.resHeaders["content-length"] = String(data.length);
@@ -298,6 +298,11 @@ type ResolvePagesPageDataNotFoundResult = {
298
298
  cacheState?: "MISS" | "HIT" | "STALE";
299
299
  };
300
300
  type ResolvePagesPageDataResult = ResolvePagesPageDataRenderResult | ResolvePagesPageDataResponseResult | ResolvePagesPageDataNotFoundResult;
301
+ /**
302
+ * Write a Pages res header the way Node sends it: an array sends one header
303
+ * line per item, so `[]` sends none.
304
+ */
305
+ export declare function setPagesResponseHeader(headers: Headers, name: string, value: string | number | boolean | string[]): void;
301
306
  export declare function mergePagesNotFoundSourceHeaders(response: Response, sourceHeaders: Record<string, string | number | boolean | string[]> | undefined): Response;
302
307
  /** Validate and normalize the redirect metadata returned by gSP/gSSP. */
303
308
  export declare function resolvePagesRedirect(redirect: PagesRedirectResult, options: {
@@ -330,4 +335,5 @@ export type PagesRouteParam = {
330
335
  export declare function getPagesRouteParams(routePattern: string): PagesRouteParam[];
331
336
  export declare function matchesPagesStaticPath(pathEntry: PagesStaticPathsEntry, params: Record<string, unknown>, routeParams: PagesRouteParam[], routeUrl: string, i18n?: Pick<PagesI18nRenderContext, "locale" | "locales" | "defaultLocale">): boolean;
332
337
  export declare function resolvePagesPageData(options: ResolvePagesPageDataOptions): Promise<ResolvePagesPageDataResult>;
333
- //#endregion
338
+ //#endregion
339
+ export {};
@@ -6,7 +6,7 @@ import { isDangerousScheme } from "../shims/url-safety.js";
6
6
  import { extractLocaleFromUrl } from "./pages-i18n.js";
7
7
  import { buildNextDataPropsJsonResponse } from "./pages-data-route.js";
8
8
  import { recordRouteCacheability } from "../shims/cacheability-classification.js";
9
- import { applyCdnResponseHeaders } from "./cache-control.js";
9
+ import { NEVER_CACHE_CONTROL, applyCdnResponseHeaders } from "./cache-control.js";
10
10
  import { buildMissIsrCacheControl, decideIsr } from "./isr-decision.js";
11
11
  import { isrCacheControl } from "./isr-cache.js";
12
12
  import { normalizeStaticPathname } from "../routing/route-pattern.js";
@@ -98,14 +98,22 @@ function buildPagesNotFoundResult(options, revalidateSeconds, cacheState, expire
98
98
  responseHeaders
99
99
  };
100
100
  }
101
+ /**
102
+ * Write a Pages res header the way Node sends it: an array sends one header
103
+ * line per item, so `[]` sends none.
104
+ */
105
+ function setPagesResponseHeader(headers, name, value) {
106
+ headers.delete(name);
107
+ if (!Array.isArray(value)) {
108
+ headers.set(name, String(value));
109
+ return;
110
+ }
111
+ for (const item of value) headers.append(name, String(item));
112
+ }
101
113
  function mergePagesNotFoundSourceHeaders(response, sourceHeaders) {
102
114
  if (!sourceHeaders) return response;
103
115
  const headers = new Headers(response.headers);
104
- for (const [name, value] of Object.entries(sourceHeaders)) if (name.toLowerCase() === "set-cookie") {
105
- headers.delete("set-cookie");
106
- const cookies = Array.isArray(value) ? value : [value];
107
- for (const cookie of cookies) headers.append("set-cookie", String(cookie));
108
- } else headers.set(name, Array.isArray(value) ? value.join(", ") : String(value));
116
+ for (const [name, value] of Object.entries(sourceHeaders)) setPagesResponseHeader(headers, name, value);
109
117
  return new Response(response.body, {
110
118
  headers,
111
119
  status: response.status,
@@ -292,6 +300,15 @@ function buildPagesRedirectResponse(redirect, options, props = { pageProps: {} }
292
300
  headers
293
301
  });
294
302
  }
303
+ /**
304
+ * Next.js pages-handler.ts gives a getServerSideProps result `revalidate: 0`,
305
+ * so its redirect and notFound exits are answered private/no-store unless the
306
+ * handler set its own Cache-Control. Like Next's `!res.getHeader(...)`, this
307
+ * reads the raw value, so `""` and `0` count as unset.
308
+ */
309
+ function applyPagesGsspCacheControlDefault(headers, res) {
310
+ if (!res.getHeaders()["cache-control"]) headers.set("Cache-Control", NEVER_CACHE_CONTROL);
311
+ }
295
312
  function getPagesGsspResponseHeaders(res) {
296
313
  const headers = new Headers();
297
314
  for (const [name, value] of Object.entries(res.getHeaders())) if (Array.isArray(value)) for (const item of value) headers.append(name, item);
@@ -566,13 +583,19 @@ async function resolvePagesPageData(options) {
566
583
  pageProps
567
584
  };
568
585
  }
569
- if (result?.redirect) return {
570
- kind: "response",
571
- response: buildPagesRedirectResponse(result.redirect, options, renderProps, "getServerSideProps", getPagesGsspResponseHeaders(res))
572
- };
586
+ if (result?.redirect) {
587
+ const responseHeaders = getPagesGsspResponseHeaders(res);
588
+ applyPagesGsspCacheControlDefault(responseHeaders, res);
589
+ return {
590
+ kind: "response",
591
+ response: buildPagesRedirectResponse(result.redirect, options, renderProps, "getServerSideProps", responseHeaders)
592
+ };
593
+ }
573
594
  if (result?.notFound) {
574
595
  const responseHeaders = res.getHeaders();
575
- return buildPagesNotFoundResult(options, void 0, void 0, void 0, Object.keys(responseHeaders).length > 0 ? responseHeaders : void 0);
596
+ const notFoundResult = buildPagesNotFoundResult(options, void 0, void 0, void 0, Object.keys(responseHeaders).length > 0 ? responseHeaders : void 0);
597
+ if (notFoundResult.kind === "response") applyPagesGsspCacheControlDefault(notFoundResult.response.headers, res);
598
+ return notFoundResult;
576
599
  }
577
600
  if (result?.props !== void 0 && options.validatePropsSerialization !== false) isSerializableProps(options.routePattern, "getServerSideProps", pageProps);
578
601
  gsspRes = res;
@@ -796,4 +819,4 @@ async function resolvePagesPageData(options) {
796
819
  };
797
820
  }
798
821
  //#endregion
799
- export { assertPages404DoesNotReturnNotFound, buildPagesRedirectProps, getPagesRouteParams, matchesPagesStaticPath, mergePagesDataProps, mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesRedirect, resolvePagesRedirectLocation, resolvePagesRevalidateSeconds, resolvePagesStatusPageRenderPath };
822
+ export { assertPages404DoesNotReturnNotFound, buildPagesRedirectProps, getPagesRouteParams, matchesPagesStaticPath, mergePagesDataProps, mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesRedirect, resolvePagesRedirectLocation, resolvePagesRevalidateSeconds, resolvePagesStatusPageRenderPath, setPagesResponseHeader };
@@ -97,7 +97,7 @@ export type CreatePagesPageHandlerOptions = {
97
97
  href: string;
98
98
  type: string;
99
99
  }>;
100
- /** `renderToReadableStream` from `react-dom/server.edge`. */
100
+ /** `renderToReadableStream` from `react-dom/server`. */
101
101
  renderToReadableStream: (element: ReactNode) => Promise<ReadableStream<Uint8Array>>;
102
102
  /** `safeJsonStringify` from `vinext/html`. */
103
103
  safeJsonStringify: (value: unknown) => string;
@@ -139,4 +139,5 @@ type RenderPageOptions = {
139
139
  * accepts the same options shape the generated entry always passed inline.
140
140
  */
141
141
  export declare function createPagesPageHandler(opts: CreatePagesPageHandlerOptions): (request: Request, url: string, manifest: Record<string, string[]> | null | undefined, middlewareHeaders: Headers | null | undefined, options: RenderPageOptions | null | undefined, initialResponseHeaders?: Headers) => Promise<Response>;
142
- //#endregion
142
+ //#endregion
143
+ export {};
@@ -10,11 +10,11 @@ import { buildNextDataNotFoundResponse, buildNextDataPropsJsonResponse, normaliz
10
10
  import { reportRequestError } from "./instrumentation.js";
11
11
  import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
12
12
  import { beginRouteCacheability, isRouteCacheabilityIdentityProbe, isRouteCacheabilityProbe, markRouteCacheabilityExplicitResponsePolicy, markRouteCacheabilityFinalResponseUncacheable, recordRouteCacheability } from "../shims/cacheability-classification.js";
13
- import { BROWSER_REVALIDATE_CACHE_CONTROL, NEVER_CACHE_CONTROL, STATIC_CACHE_CONTROL, applyCdnResponseHeaders, hasCdnResponsePolicy, hasExplicitNonCacheableResponsePolicy, shouldUseNextDeployCacheControl } from "./cache-control.js";
13
+ import { BROWSER_REVALIDATE_CACHE_CONTROL, NEVER_CACHE_CONTROL, STATIC_CACHE_CONTROL, applyCdnResponseHeaders, hasCdnResponsePolicy, hasExplicitNonCacheableResponsePolicy, isCdnResponsePolicyHeader, shouldUseNextDeployCacheControl } from "./cache-control.js";
14
14
  import { buildMissIsrCacheControl } from "./isr-decision.js";
15
15
  import { isOnDemandRevalidateRequest } from "./revalidation-request.js";
16
- import { coalesceOnDemandRevalidation, isrGet, isrSet, pagesIsrCacheKey, triggerBackgroundRegeneration } from "./isr-cache.js";
17
- import { ensureFetchPatch } from "../shims/fetch-cache.js";
16
+ import { coalesceOnDemandResponse, isrGet, isrSet, pagesIsrCacheKey, triggerBackgroundRegeneration } from "./isr-cache.js";
17
+ import { ensureFetchPatch, setCurrentFetchDraftMode } from "../shims/fetch-cache.js";
18
18
  import { mergeRouteParamsIntoQuery, parseQueryString } from "../utils/query.js";
19
19
  import { getScriptNonceFromHeaderSources } from "./csp.js";
20
20
  import { buildDefaultPagesNotFoundResponse } from "./pages-default-404.js";
@@ -25,7 +25,7 @@ import { pagesPathCacheTag } from "./pages-cache-tag.js";
25
25
  import { renderPagesPageResponse } from "./pages-page-response.js";
26
26
  import { hasPagesGetInitialProps } from "./pages-get-initial-props.js";
27
27
  import { traceFindPageComponents, tracePagesDocumentStream } from "./pages-execution-tracing.js";
28
- import { mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesStatusPageRenderPath } from "./pages-page-data.js";
28
+ import { mergePagesNotFoundSourceHeaders, resolvePagesPageData, resolvePagesStatusPageRenderPath, setPagesResponseHeader } from "./pages-page-data.js";
29
29
  import { collectAssetTags, resolveClientModuleUrl } from "./pages-asset-tags.js";
30
30
  import { PAGES_PREVIEW_CACHE_CONTROL, appendPagesPreviewClearCookies, getPagesPreviewState } from "./pages-preview.js";
31
31
  import { createPagesReqRes } from "./pages-node-compat.js";
@@ -87,14 +87,23 @@ function stripPagesNotFoundFramingHeaders(response) {
87
87
  statusText: response.statusText
88
88
  });
89
89
  }
90
- function applyPagesErrorCachePolicy(response, revalidateSeconds, expireSeconds, cacheTagPathname) {
90
+ /**
91
+ * `notFoundResHeaders` is the getServerSideProps res as it stands after the
92
+ * 404 render: the middleware and next.config headers, the handler's writes,
93
+ * then any write from the 404 render's own user code.
94
+ */
95
+ function applyPagesErrorCachePolicy(response, revalidateSeconds, expireSeconds, cacheTagPathname, notFoundResHeaders) {
91
96
  const headers = new Headers(response.headers);
92
97
  recordRouteCacheability(revalidateSeconds === void 0 ? { cacheable: false } : {
93
98
  cacheable: revalidateSeconds !== 0,
94
99
  cacheControl: buildMissIsrCacheControl(revalidateSeconds, expireSeconds)
95
100
  });
96
101
  if (hasExplicitNonCacheableResponsePolicy(headers)) return response;
97
- if (revalidateSeconds === void 0) applyCdnResponseHeaders(headers, { cacheControl: NEVER_CACHE_CONTROL });
102
+ if (revalidateSeconds === void 0 && notFoundResHeaders?.["cache-control"]) {
103
+ const policyHeaderNames = Array.from(headers.keys()).filter(isCdnResponsePolicyHeader);
104
+ for (const name of policyHeaderNames) headers.delete(name);
105
+ for (const [name, value] of Object.entries(notFoundResHeaders)) if (isCdnResponsePolicyHeader(name)) setPagesResponseHeader(headers, name, value);
106
+ } else if (revalidateSeconds === void 0) applyCdnResponseHeaders(headers, { cacheControl: NEVER_CACHE_CONTROL });
98
107
  else applyCdnResponseHeaders(headers, {
99
108
  cacheControl: buildMissIsrCacheControl(revalidateSeconds, expireSeconds),
100
109
  tags: [pagesPathCacheTag(cacheTagPathname)]
@@ -249,23 +258,10 @@ function createPagesPageHandler(opts) {
249
258
  const isStaticPropsRender = isStaticPropsRoute && typeof pageModule.getServerSideProps !== "function";
250
259
  if (!options?.__skipOnDemandCoalesce && !options?.__forcedRoute && !cacheIdentityDiverges && isStaticPropsRoute && isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate"))) {
251
260
  const cacheKey = pageIsrCacheKey("pages", routeUrl.split("?")[0]);
252
- const snapshot = await coalesceOnDemandRevalidation(cacheKey, async () => {
253
- const response = await renderPage(request, url, manifest, middlewareHeaders, {
254
- ...options,
255
- __skipOnDemandCoalesce: true
256
- }, initialResponseHeaders);
257
- return {
258
- body: request.method === "HEAD" || response.status === 204 || response.status === 304 ? null : new Uint8Array(await response.arrayBuffer()),
259
- headers: [...response.headers.entries()],
260
- status: response.status,
261
- statusText: response.statusText
262
- };
263
- });
264
- return new Response(snapshot.body?.slice() ?? null, {
265
- headers: snapshot.headers,
266
- status: snapshot.status,
267
- statusText: snapshot.statusText
268
- });
261
+ return coalesceOnDemandResponse(cacheKey, request.method, () => renderPage(request, url, manifest, middlewareHeaders, {
262
+ ...options,
263
+ __skipOnDemandCoalesce: true
264
+ }, initialResponseHeaders));
269
265
  }
270
266
  const routePattern = patternToNextFormat(route.pattern);
271
267
  const renderStatusCode = renderStatusCodeOverride ?? (routePattern === "/404" ? 404 : void 0);
@@ -274,7 +270,10 @@ function createPagesPageHandler(opts) {
274
270
  const renderRouteUrl = isStaticPropsRender && isStatusPageIdentity ? resolvePagesStatusPageRenderPath(statusPagePathname, vinextConfig.trailingSlash, originalRequestUrl.pathname) : isStaticPropsRender ? routeUrl.split("?")[0] : routeUrl;
275
271
  const routerAsPathSource = isStaticPropsRender ? renderRouteUrl : renderAsPath ?? renderRouteUrl;
276
272
  const routerAsPath = i18nConfig ? extractLocaleFromUrl(routerAsPathSource, i18nConfig, locale).url : routerAsPathSource;
277
- const uCtx = createRequestContext({ executionContext: getRequestExecutionContext() });
273
+ const uCtx = createRequestContext({
274
+ executionContext: getRequestExecutionContext(),
275
+ isOnDemandRevalidate: isOnDemandRevalidateRequest(request.headers.get(PRERENDER_REVALIDATE_HEADER))
276
+ });
278
277
  let pageReqRes = null;
279
278
  const pageResponseSent = () => pageReqRes?.res.headersSent === true;
280
279
  const sendsEarly = isStaticPropsRoute && !isOnDemandRevalidateRequest(request.headers.get("x-prerender-revalidate"));
@@ -313,6 +312,7 @@ function createPagesPageHandler(opts) {
313
312
  shouldClear: false
314
313
  };
315
314
  const previewData = preview.data;
315
+ setCurrentFetchDraftMode(previewData !== false);
316
316
  const pagesNextData = {
317
317
  ...pagesReadiness,
318
318
  ...previewData === false ? {} : { isPreview: true }
@@ -364,7 +364,7 @@ function createPagesPageHandler(opts) {
364
364
  }
365
365
  };
366
366
  const scriptNonce = getScriptNonceFromHeaderSources(request.headers, middlewareHeaders);
367
- const browserCacheControl = isStaticPropsRoute && !scriptNonce ? (initialResponseHeaders ?? middlewareHeaders)?.get("Cache-Control") : null;
367
+ const browserCacheControl = isStaticPropsRoute && !scriptNonce && !options?.__notFoundSourceHeaders ? (initialResponseHeaders ?? middlewareHeaders)?.get("Cache-Control") : null;
368
368
  const withBrowserPolicy = (response) => {
369
369
  if (browserCacheControl) response.headers.set("Cache-Control", browserCacheControl);
370
370
  return response;
@@ -590,7 +590,7 @@ function createPagesPageHandler(opts) {
590
590
  if (pageDataResult.kind === "response") {
591
591
  if (sendsEarly && pageResponseSent()) return pageDataResult.response;
592
592
  let response = isOnDemandRevalidate && pageDataResult.onDemandRevalidateSuccess !== false ? withPagesCacheState(pageDataResult.response, "REVALIDATED", isrCachePathname) : pageDataResult.response;
593
- if (shouldApplyErrorResponsePolicy) response = applyPagesErrorCachePolicy(response, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname);
593
+ if (shouldApplyErrorResponsePolicy) response = applyPagesErrorCachePolicy(response, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname, options?.__notFoundSourceHeaders);
594
594
  return finalizePagesPreviewResponse(withBrowserPolicy(response), preview);
595
595
  }
596
596
  const { pageProps, renderProps } = withErrorStatusCode(pageDataResult.pageProps, previewData !== false ? {
@@ -656,7 +656,7 @@ function createPagesPageHandler(opts) {
656
656
  requestCacheControl: request.headers.get("cache-control") ?? void 0
657
657
  });
658
658
  if (sendsEarly && pageResponseSent()) return pageResponse;
659
- if (shouldApplyErrorResponsePolicy) pageResponse = applyPagesErrorCachePolicy(pageResponse, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname);
659
+ if (shouldApplyErrorResponsePolicy) pageResponse = applyPagesErrorCachePolicy(pageResponse, errorPageRevalidateSeconds, errorPageExpireSeconds, errorResponseCachePathname, options?.__notFoundSourceHeaders ? documentReqRes?.res.getHeaders() ?? options.__notFoundSourceHeaders : void 0);
660
660
  return finalizePagesPreviewResponse(withBrowserPolicy(pageResponse), preview);
661
661
  } catch (e) {
662
662
  await reportSsrError(e);
@@ -43,4 +43,5 @@ type PagesPageMethodOptions = {
43
43
  * static (no `getServerSideProps`) Pages Router page, otherwise `null`.
44
44
  */
45
45
  export declare function resolvePagesPageMethodResponse(options: PagesPageMethodOptions): Response | null;
46
- //#endregion
46
+ //#endregion
47
+ export {};
@@ -151,4 +151,5 @@ export declare function buildPagesNextDataScript(options: Pick<RenderPagesPageRe
151
151
  vinext?: VinextNextData["__vinext"];
152
152
  }): string;
153
153
  export declare function renderPagesPageResponse(options: RenderPagesPageResponseOptions): Promise<Response>;
154
- //#endregion
154
+ //#endregion
155
+ export {};
@@ -22,4 +22,5 @@ export declare function clearPagesPreviewData(response: PreviewResponse, options
22
22
  path?: string;
23
23
  }): void;
24
24
  export declare function appendPagesPreviewClearCookies(headers: Headers): void;
25
- //#endregion
25
+ //#endregion
26
+ export {};
@@ -32,4 +32,5 @@ export declare function buildPagesReadinessNextData(options: {
32
32
  } | null | undefined;
33
33
  hasRewrites: boolean;
34
34
  }): PagesReadinessNextData;
35
- //#endregion
35
+ //#endregion
36
+ export {};
@@ -84,6 +84,14 @@ export type PagesPipelineDeps = {
84
84
  dataNotFoundResponse?: Response | null;
85
85
  renderPage?: ((request: Request, resolvedUrl: string, options?: PagesRenderOptions, stagedHeaders?: Headers) => Promise<Response>) | null;
86
86
  handleApi?: ((request: Request, apiUrl: string, ctx: unknown, stagedHeaders: Headers) => Promise<Response>) | null;
87
+ /**
88
+ * `handleApi` installs the staged headers on the handler's `res` before user
89
+ * code runs, as Next.js does, so its response already reflects any header the
90
+ * handler replaced and only middleware's status is applied here.
91
+ * Workers leaves this unset: its response stage strips the inherited cookies
92
+ * so they are not stored, and this merge adds them back.
93
+ */
94
+ handleApiAppliesStagedHeaders?: boolean;
87
95
  /**
88
96
  * Optional override for proxying external rewrite destinations.
89
97
  * When supplied, the pipeline calls this instead of proxyExternalRequest(currentRequest, url).
@@ -157,4 +165,5 @@ export type PagesPipelineResult = {
157
165
  * runPagesRequest receives a "clean" request with basePath-stripped URL.
158
166
  */
159
167
  export declare function runPagesRequest(request: Request, deps: PagesPipelineDeps): Promise<PagesPipelineResult>;
160
- //#endregion
168
+ //#endregion
169
+ export {};
@@ -1,11 +1,11 @@
1
1
  import { PRERENDER_REVALIDATE_HEADER } from "../utils/protocol-headers.js";
2
2
  import { requestContextFromRequest } from "../config/request-context.js";
3
3
  import { isExternalUrl } from "../utils/external-url.js";
4
- import { addBasePathToPathname, hasBasePath } from "../utils/base-path.js";
4
+ import { addBasePathToPathname } from "../utils/base-path.js";
5
5
  import { VINEXT_PRERENDER_REWRITTEN_HEADER } from "./headers.js";
6
6
  import { methodNotAllowedResponse, notFoundStaticAssetResponse, sanitizeMethodNotAllowedHeaders } from "./http-error-responses.js";
7
7
  import { cloneRequestWithUrl, normalizeTrailingSlash } from "./request-pipeline.js";
8
- import { applyMiddlewareRequestHeaders, matchRedirect, matchRewrite, preserveRedirectDestinationQuery, proxyExternalRequest, sanitizeDestination } from "../config/config-matchers.js";
8
+ import { applyMiddlewareRequestHeaders, encodeRedirectLocation, matchRedirect, matchRewrite, preserveRedirectDestinationQuery, proxyExternalRequest } from "../config/config-matchers.js";
9
9
  import { assetPrefixPathname, isAssetPrefixBuildAsset, isNextStaticPath } from "../utils/asset-prefix.js";
10
10
  import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
11
11
  import { patternToNextFormat } from "../routing/route-validation.js";
@@ -14,8 +14,8 @@ import { buildMiddlewarePrefetchSkipResponse } from "./pages-data-route.js";
14
14
  import { markRouteCacheabilityDynamic } from "../shims/cacheability-classification.js";
15
15
  import { isOnDemandRevalidateRequest } from "./revalidation-request.js";
16
16
  import { mergeRewriteQuery } from "../utils/query.js";
17
- import { withExternalRewriteResponseHeaders } from "./middleware-response-headers.js";
18
17
  import { setFrameworkRequestRoute } from "./request-tracing.js";
18
+ import { withExternalRewriteResponseHeaders } from "./middleware-response-headers.js";
19
19
  import { applyConfigHeadersToHeaderRecord } from "./config-headers.js";
20
20
  import { finalizeMissingStaticAssetResponse, mergeHeaders } from "./worker-utils.js";
21
21
  //#region src/server/pages-request-pipeline.ts
@@ -127,12 +127,11 @@ async function runPagesRequest(request, deps) {
127
127
  if (configRedirects.length) {
128
128
  const redirect = matchRedirect(requestConfigMatchPathname, configRedirects, reqCtx, basePathState, conditionalRedirectCacheability);
129
129
  if (redirect) {
130
- const dest = sanitizeDestination(basePath && hadBasePath && !isExternalUrl(redirect.destination) && !hasBasePath(redirect.destination, basePath) ? basePath + redirect.destination : redirect.destination);
131
- const location = preserveRedirectDestinationQuery(dest, deps.rawSearch ?? search, redirect.destinationQuery);
130
+ const location = encodeRedirectLocation(preserveRedirectDestinationQuery(redirect.destination, deps.rawSearch ?? search, redirect.destinationQuery));
132
131
  return {
133
132
  type: "response",
134
133
  response: new Response(null, {
135
- status: redirect.permanent ? 308 : 307,
134
+ status: redirect.statusCode,
136
135
  headers: { Location: location }
137
136
  })
138
137
  };
@@ -311,7 +310,7 @@ async function runPagesRequest(request, deps) {
311
310
  apiRequest = cloneRequestWithUrl(request, apiRequestUrl.toString());
312
311
  }
313
312
  const response = await deps.handleApi(apiRequest, apiLookupUrl, deps.ctx ?? null, headersFromRecord(middlewareHeaders));
314
- const merged = mergeHeaders(response, middlewareHeaders, middlewareStatus);
313
+ const merged = mergeHeaders(response, deps.handleApiAppliesStagedHeaders ? {} : middlewareHeaders, middlewareStatus);
315
314
  if (merged !== response) merged.__vinextStreamedApiResponse = response.__vinextStreamedApiResponse;
316
315
  return {
317
316
  type: "response",
@@ -26,4 +26,5 @@ export declare function isPagesClientBuildFileRequest(request: Request, env: Pag
26
26
  export declare function handleRequestStage(request: Request, env: PagesWorkerEnv | undefined, ctx: PagesWorkerExecutionContext | undefined, dispatchResponseStage: DispatchWorkerResponseStage): Promise<Response>;
27
27
  /** Preserve the direct single-entry Worker path without retaining it in request-only builds. */
28
28
  export declare function handleRequestStageLocally(request: Request, env: PagesWorkerEnv | undefined, ctx: PagesWorkerExecutionContext | undefined, dispatchResponseStage: PagesLocalResponseStage): Promise<Response>;
29
- //#endregion
29
+ //#endregion
30
+ export {};