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
@@ -7,7 +7,7 @@ import { attachRequestCfMetadata, cloneRequestWithHeaders, cloneRequestWithUrl,
7
7
  import { assetPrefixPathname, isNextStaticPath } from "../utils/asset-prefix.js";
8
8
  import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
9
9
  import { runWithExecutionContext } from "../shims/request-context.js";
10
- import { normalizeDefaultLocalePathname } from "./pages-i18n.js";
10
+ import { normalizeDefaultLocalePathname, shouldRestoreLocaleRootTrailingSlash } from "./pages-i18n.js";
11
11
  import { isNextDataPathname } from "./pages-data-route.js";
12
12
  import { getExplicitCdnCacheAdapter } from "../shims/cdn-cache-state.js";
13
13
  import { CACHEABILITY_REQUEST_STATE } from "../shims/cacheability-classification.js";
@@ -48,6 +48,10 @@ const pagesRequestStagePrerenderSecret = pagesEntry.prerenderSecret ?? null;
48
48
  const basePath = vinextConfig?.basePath ?? "";
49
49
  const assetPathPrefix = assetPrefixPathname(vinextConfig?.assetPrefix ?? "");
50
50
  const trailingSlash = vinextConfig?.trailingSlash ?? false;
51
+ const localeRootTrailingSlashConfig = {
52
+ trailingSlash,
53
+ skipProxyUrlNormalize: vinextConfig?.skipProxyUrlNormalize
54
+ };
51
55
  const skipTrailingSlashRedirect = vinextConfig?.skipTrailingSlashRedirect ?? false;
52
56
  const i18nConfig = vinextConfig?.i18n ?? null;
53
57
  const configRedirects = vinextConfig?.redirects ?? [];
@@ -88,7 +92,7 @@ function handleRequestStageLocally(request, env, ctx, dispatchResponseStage) {
88
92
  function handleRequest(request, env, platformCtx, dispatchResponseStage, forceCacheBypass, defaultHostRuntime, assets) {
89
93
  const url = new URL(request.url);
90
94
  const trace = async () => {
91
- await pagesEntry.__ensureInstrumentation?.();
95
+ await pagesEntry.__ensureInstrumentation?.(platformCtx);
92
96
  return traceFrameworkRequest({
93
97
  callback: () => handleRequestImpl(request, env, platformCtx, dispatchResponseStage, forceCacheBypass, defaultHostRuntime, assets),
94
98
  getStatus: (response) => response?.status,
@@ -175,6 +179,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
175
179
  }
176
180
  const missingBuildAsset = isNextStaticPath(pathname, basePath, assetPathPrefix);
177
181
  const hadBasePath = !basePath || hasBasePath(pathname, basePath);
182
+ const restoreLocaleRootTrailingSlash = shouldRestoreLocaleRootTrailingSlash(pathname, localeRootTrailingSlashConfig);
178
183
  {
179
184
  const stripped = stripBasePath(pathname, basePath);
180
185
  if (stripped !== pathname) {
@@ -193,7 +198,10 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
193
198
  request = dataNorm.request;
194
199
  pathname = dataNorm.normalizedPathname;
195
200
  }
196
- const responseStagePolicyPathname = i18nConfig ? normalizeDefaultLocalePathname(pathname, i18nConfig, { hostname: url.hostname }) : pathname;
201
+ const responseStagePolicyPathname = i18nConfig ? normalizeDefaultLocalePathname(pathname, i18nConfig, {
202
+ hostname: url.hostname,
203
+ restoreRootTrailingSlash: restoreLocaleRootTrailingSlash
204
+ }) : pathname;
197
205
  const responseStagePolicyHeaders = resolveResponseStageCachePolicy({
198
206
  basePathState: {
199
207
  basePath,
@@ -219,6 +227,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
219
227
  hasMiddleware,
220
228
  ctx,
221
229
  recordCacheability: forceCacheBypass,
230
+ restoreLocaleRootTrailingSlash,
222
231
  middlewareRequest: isDataReq && vinextConfig?.skipProxyUrlNormalize ? middlewareRequest : void 0,
223
232
  dataNotFoundResponse: vinextConfig?.skipProxyUrlNormalize ? dataNorm.notFoundResponse : null,
224
233
  authorizeOnDemandRevalidate: typeof authorizeOnDemandRevalidate === "function" ? authorizeOnDemandRevalidate : void 0,
@@ -320,7 +329,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
320
329
  fetchPublicFile: (sourceRequest) => resolvePublicImageSource(sourceRequest, assets)
321
330
  }), allowedWidths, imageConfig);
322
331
  }
323
- return fetchWorkerFilesystemRoute(filesystemRequest, requestPathname, phase, (assetRequest) => Promise.resolve(assets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, hadBasePath);
332
+ return fetchWorkerFilesystemRoute(filesystemRequest, requestPathname, phase, (assetRequest) => Promise.resolve(assets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, resolvedPathnameHasBasePath);
324
333
  }
325
334
  };
326
335
  const resolvePublicImageSource = async (sourceRequest, sourceAssets) => {
@@ -333,6 +342,7 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
333
342
  const sourceResult = await runPagesRequest(attachRequestCfMetadata(new Request(new URL(sourcePathname + sourceUrl.search, sourceUrl), { signal: sourceRequest.signal }), sourceRequest), {
334
343
  ...deps,
335
344
  hadBasePath: sourceHadBasePath,
345
+ restoreLocaleRootTrailingSlash: shouldRestoreLocaleRootTrailingSlash(sourceUrl.pathname, localeRootTrailingSlashConfig),
336
346
  isDataReq: false,
337
347
  isDataRequest: false,
338
348
  middlewareRequest: void 0,
@@ -341,9 +351,9 @@ async function handleRequestImpl(request, env, platformCtx, dispatchResponseStag
341
351
  runMiddleware: typeof runMiddleware === "function" ? wrapMiddlewareWithBasePath(runMiddleware, basePath, sourceHadBasePath) : null,
342
352
  renderPage: null,
343
353
  handleApi: null,
344
- serveFilesystemRoute: async (candidate, _stagedHeaders, phase, _resolvedUrl, filesystemRequest) => {
354
+ serveFilesystemRoute: async (candidate, _stagedHeaders, phase, _resolvedUrl, filesystemRequest, candidateHasBasePath) => {
345
355
  if (isImageOptimizationPath(candidate)) return false;
346
- const asset = await fetchWorkerFilesystemRoute(filesystemRequest, candidate, phase, (assetRequest) => Promise.resolve(sourceAssets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, sourceHadBasePath);
356
+ const asset = await fetchWorkerFilesystemRoute(filesystemRequest, candidate, phase, (assetRequest) => Promise.resolve(sourceAssets.fetch(assetRequest)), publicFiles, basePath, assetPathPrefix, candidateHasBasePath);
347
357
  if (asset === false) return false;
348
358
  sourceAsset = asset;
349
359
  return new Response(null);
@@ -8,4 +8,5 @@ type PagesWorkerExecutionContext = ExecutionContextLike & {
8
8
  };
9
9
  export declare function renderPagesResponse(request: Request, env: PagesWorkerEnv | undefined, platformCtx: PagesWorkerExecutionContext | undefined, props: WorkerResponseStageProps, stagedHeaders?: Headers, dispatchRequestStage?: VinextRequestStageTransport, dispatchOptions?: VinextResponseStageDispatchOptions): Promise<Response>;
10
10
  export declare function handleResponseStage(request: Request, env: PagesWorkerEnv | undefined, ctx: PagesWorkerExecutionContext | undefined, props: WorkerResponseStageProps, dispatchRequestStage: VinextRequestStageTransport, options: VinextResponseStageDispatchOptions): Promise<Response>;
11
- //#endregion
11
+ //#endregion
12
+ export {};
@@ -36,7 +36,7 @@ async function renderPagesResponse(request, env, platformCtx, props, stagedHeade
36
36
  if (!isPagesResponseStageProps(props)) return new Response("Invalid vinext Pages response stage", { status: 400 });
37
37
  if (props.buildId !== pagesEntry.buildId) return new Response("Vinext Pages response stage deployment mismatch", { status: 409 });
38
38
  if (props.requestHost !== new URL(request.url).host) return new Response("Invalid vinext Pages response stage", { status: 400 });
39
- await pagesEntry.__ensureInstrumentation?.();
39
+ await pagesEntry.__ensureInstrumentation?.(platformCtx);
40
40
  registerConfiguredImageOptimizer(env);
41
41
  const renderHeaders = new Headers(stagedHeaders ?? props.stagedHeaders ?? []);
42
42
  renderHeaders.delete("Content-Length");
@@ -12,6 +12,7 @@ async function performOnDemandRevalidate(source, urlPath, opts = {}, trustedOrig
12
12
  if (isSourceRevalidationRequest(source)) throw new Error(`Cannot revalidate ${urlPath} from an internal revalidation request`);
13
13
  const executionContext = getRequestExecutionContext();
14
14
  const dispatchRevalidate = executionContext?.dispatchPagesRevalidate;
15
+ if (!dispatchRevalidate && !trustedOrigin) throw new Error(`Cannot revalidate ${urlPath}: no in-process dispatcher or server-owned origin is available`);
15
16
  const target = createRevalidateTarget(source, urlPath, trustedOrigin);
16
17
  const headers = { [PRERENDER_REVALIDATE_HEADER]: getRevalidateSecret() };
17
18
  if (trustedOrigin && !dispatchRevalidate) {
@@ -15,4 +15,5 @@ type AppComponent = {
15
15
  } | null;
16
16
  /** Classify loaded Pages modules after HOCs and re-exports have been evaluated. */
17
17
  export declare function getRuntimePagesDataKind(pageModule: PagesModule, appComponent: AppComponent): RuntimePagesDataKind;
18
- //#endregion
18
+ //#endregion
19
+ export {};
@@ -20,7 +20,7 @@ async function handleSingleStageRequest(request, env, platformCtx) {
20
20
  let ctx = createWorkerPrerenderDiscoveryContext(ctxWithRevalidation, request, pagesRequestStagePrerenderSecret);
21
21
  const readinessResponse = createWorkerPrerenderReadinessResponse(ctx, request);
22
22
  if (readinessResponse) {
23
- if (readinessResponse.status === 204) await Promise.all([__ensureInstrumentation(), __ensureInstrumentation$1()]);
23
+ if (readinessResponse.status === 204) await Promise.all([__ensureInstrumentation(ctx), __ensureInstrumentation$1(ctx)]);
24
24
  return await validateCdnRequest(request) ?? readinessResponse;
25
25
  }
26
26
  const isClientBuildFile = isPagesClientBuildFileRequest(request, env, ctx);
@@ -7,4 +7,5 @@ type PrerenderCacheLife = {
7
7
  };
8
8
  export declare function applyPrerenderCacheLifeHeader(headers: Headers, requestCacheLife: PrerenderCacheLife | null | undefined): void;
9
9
  export declare function applyPrerenderCacheTagsHeader(headers: Headers, cacheTags: readonly string[]): void;
10
- //#endregion
10
+ //#endregion
11
+ export {};
@@ -26,4 +26,5 @@ export declare function readTrustedPrerenderStateFromHeaders(headers: Headers, e
26
26
  export declare function readTrustedPrerenderRouteParams(request: Request): PrerenderRouteParamsPayload | null;
27
27
  export declare function matchPrerenderRouteParamsPayload(payload: PrerenderRouteParamsPayload | null, routePattern: string, params: PrerenderRouteParams): PrerenderRouteParamsRouteMatch | null;
28
28
  export declare function encodePrerenderRouteParams(pattern: string, params: PrerenderRouteParams, fallbackParamNames?: readonly string[]): PrerenderRouteParamsPayload | null;
29
- //#endregion
29
+ //#endregion
30
+ export {};
@@ -3,7 +3,7 @@ import { negotiateEncoding } from "./accept-encoding.js";
3
3
  import { StaticFileCache } from "./static-file-cache.js";
4
4
  import { resolveRequestHost, trustProxy, trustedHosts } from "./proxy-trust.js";
5
5
  import { COMPRESS_THRESHOLD, isCompressibleContentType } from "./response-compression.js";
6
- import { IncomingMessage, ServerResponse } from "node:http";
6
+ import { IncomingMessage, Server, ServerResponse } from "node:http";
7
7
  //#region src/server/prod-server.d.ts
8
8
  /**
9
9
  * Import a built server entry module (App Router RSC entry or Pages Router
@@ -127,7 +127,7 @@ declare function waitForNodeResponseCompletion(res: ServerResponse): Promise<voi
127
127
  * Pages Router (dist/server/entry.js) and configures the appropriate handler.
128
128
  */
129
129
  export declare function startProdServer(options?: ProdServerOptions): Promise<{
130
- server: import("node:http").Server<typeof IncomingMessage, typeof ServerResponse>;
130
+ server: Server<typeof IncomingMessage, typeof ServerResponse>;
131
131
  port: number;
132
132
  }>;
133
133
  type AppRouterPrerenderSeeder = (serverDir: string) => Promise<number>;
@@ -7,11 +7,12 @@ import { notFoundResponse } from "./http-error-responses.js";
7
7
  import { getRepeatedSlashRedirect, isOpenRedirectShaped, sendRepeatedSlashRedirect } from "./open-redirect.js";
8
8
  import { readStaticFileSignal } from "./static-file-signal.js";
9
9
  import { canonicalizeRequestPathname, filterInternalHeaders } from "./request-pipeline.js";
10
- import { ASSET_PREFIX_URL_DIR, assetPrefixPathname, isAbsoluteAssetPrefix } from "../utils/asset-prefix.js";
10
+ import { ASSET_PREFIX_URL_DIR, assetPrefixPathname, isAbsoluteAssetPrefix, isAssetPrefixBuildAsset } from "../utils/asset-prefix.js";
11
11
  import { StaticFileCache, contentTypeForPath, etagFromFilenameHash } from "./static-file-cache.js";
12
12
  import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
13
- import { resolveRequestHost, resolveRequestProtocol, trustProxy, trustedHosts } from "./proxy-trust.js";
13
+ import { resolveRequestHost, resolveRequestProtocol, resolveTrustedForwardedHost, trustProxy, trustedHosts } from "./proxy-trust.js";
14
14
  import { normalizePath } from "./normalize-path.js";
15
+ import { shouldRestoreLocaleRootTrailingSlash } from "./pages-i18n.js";
15
16
  import { buildNextDataNotFoundResponse, encodeUrlParserIgnoredCharacters, isNextDataPathname, normalizeNextDataPagePathname, parseNextDataPathname, shouldAddTrailingSlashToPagesDataPath, urlParserCreatesPagesDataPath } from "./pages-data-route.js";
16
17
  import { buildCacheStateHeaders } from "./cache-headers.js";
17
18
  import { parseHttpDate } from "./http-date.js";
@@ -30,7 +31,6 @@ import { readPrerenderSecret, readServerCompress } from "../build/server-manifes
30
31
  import { readTrustedPrerenderRouteParamsFromHeaders, serializePrerenderRouteParamsHeader } from "./prerender-route-params.js";
31
32
  import { resolveClientBuildFile } from "./client-build-files.js";
32
33
  import { registerPrerenderCloudflareLoader } from "../build/prerender-cloudflare-loader.js";
33
- import { seedMemoryCacheFromPrerender } from "./seed-cache.js";
34
34
  import { negotiateEncoding, parseAcceptedEncodings, selectContentEncoding } from "./accept-encoding.js";
35
35
  import { COMPRESS_THRESHOLD, hasNoTransform, isCompressibleContentType, parseContentLengthHeader, resolveResponseCompression } from "./response-compression.js";
36
36
  import { ifRangeAllowsRange, parseByteRange } from "./http-range.js";
@@ -328,6 +328,7 @@ function installClientBuildManifestGlobals(clientDir, assetBase, assetPrefix, cr
328
328
  });
329
329
  setPagesClientAssets({
330
330
  appBootstrapPreinitModules: metadata.appBootstrapPreinitModules,
331
+ appRouteManifestModule: metadata.appRouteManifestModule,
331
332
  lazyChunks: metadata.lazyChunks,
332
333
  dynamicPreloads: metadata.dynamicPreloads,
333
334
  crossOrigin
@@ -378,6 +379,19 @@ function isVinextStreamedHtmlResponse(response) {
378
379
  function isVinextStreamedApiResponse(response) {
379
380
  return response.__vinextStreamedApiResponse === true;
380
381
  }
382
+ function disablePrerenderKeepAliveTimeout(server, purpose) {
383
+ if (purpose === "prerender") server.keepAliveTimeout = 0;
384
+ }
385
+ function listen(server, port, host) {
386
+ return new Promise((resolve, reject) => {
387
+ server.once("error", reject);
388
+ server.listen(port, host, () => {
389
+ server.off("error", reject);
390
+ const addr = server.address();
391
+ resolve(typeof addr === "object" && addr ? addr.port : port);
392
+ });
393
+ });
394
+ }
381
395
  function logProdServerStarted(host, port, purpose) {
382
396
  const url = `http://${host}:${port}`;
383
397
  if (purpose === "prerender") {
@@ -890,6 +904,7 @@ function waitForNodeResponseCompletion(res) {
890
904
  */
891
905
  async function startProdServer(options = {}) {
892
906
  installSocketErrorBackstop({ runningServer: options.purpose !== "prerender" });
907
+ if (options.purpose !== "prerender" && !process.env.NODE_ENV) Reflect.set(process.env, "NODE_ENV", "production");
893
908
  const { port = process.env.PORT ? parseInt(process.env.PORT) : 3e3, host = "0.0.0.0", outDir = path.resolve("dist"), rscEntryPath: explicitRscEntryPath, serverDir: explicitServerDir, serverEntryPath: explicitServerEntryPath, noCompression = false, purpose, silent = false } = options;
894
909
  if (purpose === "prerender") registerPrerenderCloudflareLoader();
895
910
  const compress = !noCompression;
@@ -925,14 +940,16 @@ async function startProdServer(options = {}) {
925
940
  silent
926
941
  });
927
942
  }
928
- function createNodeExecutionContext(trustedRevalidateOrigin) {
943
+ function createNodeExecutionContext(trustedRevalidateOrigin, { middlewareOrigin, requestSignal } = {}) {
929
944
  return {
930
945
  hostRuntime: "node",
946
+ requestSignal,
931
947
  waitUntil(promise) {
932
948
  Promise.resolve(promise).catch(() => {});
933
949
  },
934
950
  passThroughOnException() {},
935
- trustedRevalidateOrigin
951
+ trustedRevalidateOrigin,
952
+ middlewareOrigin
936
953
  };
937
954
  }
938
955
  /**
@@ -953,8 +970,26 @@ function markPrerenderSpecialError(response, marker) {
953
970
  });
954
971
  }
955
972
  function resolveTrustedNodeRevalidateOrigin(req, configuredHost, configuredPort) {
973
+ return `http://${resolveNodeServerHost(req, configuredHost, configuredPort)}`;
974
+ }
975
+ /**
976
+ * The origin middleware runs against. The Host header is client-controlled,
977
+ * so, like Next.js, which builds the middleware URL from its own hostname and
978
+ * port, it never counts as the server's origin. Otherwise a client could send
979
+ * the host of an external middleware rewrite target and turn that rewrite into
980
+ * an internal one, skipping middleware's checks for the target path. A trusted
981
+ * `X-Forwarded-Host` is operator-approved, so it keeps the request origin, and
982
+ * rewrites to that host stay internal.
983
+ */
984
+ function resolveNodeMiddlewareOrigin(req, requestUrl, configuredHost, configuredPort) {
985
+ const url = new URL(requestUrl);
986
+ if (resolveTrustedForwardedHost(req) !== void 0) return url.origin;
987
+ return `${url.protocol}//${resolveNodeServerHost(req, configuredHost, configuredPort)}`;
988
+ }
989
+ /** The `host:port` this server is reachable at locally. */
990
+ function resolveNodeServerHost(req, configuredHost, configuredPort) {
956
991
  const port = req.socket.localPort ?? configuredPort;
957
- return `http://${normalizeInternalFetchHost(configuredHost)}:${port}`;
992
+ return `${normalizeInternalFetchHost(configuredHost)}:${port}`;
958
993
  }
959
994
  function normalizeInternalFetchHost(host) {
960
995
  if (!host || host === "0.0.0.0" || host === "::") return "localhost";
@@ -973,15 +1008,19 @@ function resolveAppRouterHandler(entry) {
973
1008
  console.error("[vinext] App Router entry must export either a default handler function or a Worker-style default export with fetch()");
974
1009
  process.exit(1);
975
1010
  }
1011
+ async function seedMemoryCacheFromPrerenderFallback(serverDir) {
1012
+ const { seedMemoryCacheFromPrerender } = await import("./seed-cache.js");
1013
+ return seedMemoryCacheFromPrerender(serverDir);
1014
+ }
976
1015
  function isAppRouterPrerenderSeederExport(value) {
977
1016
  return typeof value === "function";
978
1017
  }
979
1018
  function resolveAppRouterPrerenderSeeder(entryModule) {
980
- if (typeof entryModule !== "object" || entryModule === null) return seedMemoryCacheFromPrerender;
1019
+ if (typeof entryModule !== "object" || entryModule === null) return seedMemoryCacheFromPrerenderFallback;
981
1020
  const seedExport = Object.getOwnPropertyDescriptor(entryModule, "seedMemoryCacheFromPrerender")?.value;
982
1021
  if (!isAppRouterPrerenderSeederExport(seedExport)) {
983
1022
  if (process.env.NEXT_PRIVATE_DEBUG_CACHE) console.debug("[vinext] ISR: using fallback prerender cache seeder");
984
- return seedMemoryCacheFromPrerender;
1023
+ return seedMemoryCacheFromPrerenderFallback;
985
1024
  }
986
1025
  if (process.env.NEXT_PRIVATE_DEBUG_CACHE) console.debug("[vinext] ISR: using App Router entry prerender cache seeder");
987
1026
  return async (serverDir) => {
@@ -1057,7 +1096,9 @@ function installPagesClientAssets(options) {
1057
1096
  setPagesClientAssets({
1058
1097
  clientEntry: metadata.clientEntryFile,
1059
1098
  appBootstrapPreinitModules: metadata.appBootstrapPreinitModules,
1099
+ appRouteManifestModule: metadata.appRouteManifestModule,
1060
1100
  ssrManifest: Object.keys(ssrManifest).length > 0 ? ssrManifest : void 0,
1101
+ sharedChunks: metadata.sharedChunks,
1061
1102
  cssGraph: metadata.cssGraph,
1062
1103
  lazyChunks: metadata.lazyChunks,
1063
1104
  dynamicPreloads: metadata.dynamicPreloads,
@@ -1154,7 +1195,7 @@ async function startAppRouterServer(options) {
1154
1195
  const assetLookupPath = sourcePathname !== null ? resolveAppRouterAssetPath(sourcePathname, appAssetPathPrefix, appRouterAssetPrefix) : null;
1155
1196
  if (assetLookupPath && await serveSource(assetLookupPath)) return;
1156
1197
  if (sourcePathname !== null) {
1157
- const sourceResponse = await rscHandler(new Request(sourceUrl, { signal: request.signal }), createNodeExecutionContext(resolveTrustedNodeRevalidateOrigin(req, host, port)));
1198
+ const sourceResponse = await rscHandler(new Request(sourceUrl, { signal: request.signal }), createNodeExecutionContext(resolveTrustedNodeRevalidateOrigin(req, host, port), { middlewareOrigin: resolveNodeMiddlewareOrigin(req, request.url, host, port) }));
1158
1199
  const sourceSignal = isImageSourceBodyStatus(sourceResponse.status) ? readStaticFileSignal(sourceResponse) : null;
1159
1200
  cancelResponseBody(sourceResponse, request.signal.reason);
1160
1201
  if (request.signal.aborted) return;
@@ -1211,8 +1252,12 @@ async function startAppRouterServer(options) {
1211
1252
  if (clientBuildFile && await tryServeStatic(req, res, clientDir, clientBuildFile, compress, staticCache)) return;
1212
1253
  }
1213
1254
  try {
1214
- const request = nodeToWebRequest(req, rawUrl, prerenderSecret, appRouterI18nConfig, appRouterAuthorizeOnDemandRevalidate, signalFromNodeResponse(res));
1215
- const ctx = createNodeExecutionContext(resolveTrustedNodeRevalidateOrigin(req, host, port));
1255
+ const signal = signalFromNodeResponse(res);
1256
+ const request = nodeToWebRequest(req, rawUrl, prerenderSecret, appRouterI18nConfig, appRouterAuthorizeOnDemandRevalidate, signal);
1257
+ const ctx = createNodeExecutionContext(resolveTrustedNodeRevalidateOrigin(req, host, port), {
1258
+ middlewareOrigin: resolveNodeMiddlewareOrigin(req, request.url, host, port),
1259
+ requestSignal: signal
1260
+ });
1216
1261
  const recorded = {};
1217
1262
  if (purpose === "prerender") ctx.recordPrerenderSpecialError = (marker) => {
1218
1263
  recorded.marker = marker;
@@ -1282,18 +1327,12 @@ async function startAppRouterServer(options) {
1282
1327
  const server = createServer((req, res) => {
1283
1328
  runWithServerEntryRequire(rscEntryRequire, () => handleRequest(req, res));
1284
1329
  });
1285
- await new Promise((resolve) => {
1286
- server.listen(port, host, () => {
1287
- const addr = server.address();
1288
- const actualPort = typeof addr === "object" && addr ? addr.port : port;
1289
- if (!silent) logProdServerStarted(host, actualPort, purpose);
1290
- resolve();
1291
- });
1292
- });
1293
- const addr = server.address();
1330
+ disablePrerenderKeepAliveTimeout(server, purpose);
1331
+ const actualPort = await listen(server, port, host);
1332
+ if (!silent) logProdServerStarted(host, actualPort, purpose);
1294
1333
  return {
1295
1334
  server,
1296
- port: typeof addr === "object" && addr ? addr.port : port
1335
+ port: actualPort
1297
1336
  };
1298
1337
  }
1299
1338
  function isPagesServerEntryPageRoute(value) {
@@ -1323,18 +1362,12 @@ async function startPagesRouterServer(options) {
1323
1362
  const { port, host, purpose, silent } = options;
1324
1363
  const handler = await createPagesRouterRequestHandler(options);
1325
1364
  const server = createServer(handler);
1326
- await new Promise((resolve) => {
1327
- server.listen(port, host, () => {
1328
- const addr = server.address();
1329
- const actualPort = typeof addr === "object" && addr ? addr.port : port;
1330
- if (!silent) logProdServerStarted(host, actualPort, purpose);
1331
- resolve();
1332
- });
1333
- });
1334
- const addr = server.address();
1365
+ disablePrerenderKeepAliveTimeout(server, purpose);
1366
+ const actualPort = await listen(server, port, host);
1367
+ if (!silent) logProdServerStarted(host, actualPort, purpose);
1335
1368
  return {
1336
1369
  server,
1337
- port: typeof addr === "object" && addr ? addr.port : port
1370
+ port: actualPort
1338
1371
  };
1339
1372
  }
1340
1373
  /**
@@ -1481,6 +1514,10 @@ async function createPagesRouterRequestHandler(options) {
1481
1514
  }
1482
1515
  try {
1483
1516
  const hadBasePath = !basePath || hasBasePath(requestPathname, basePath);
1517
+ const restoreLocaleRootTrailingSlash = shouldRestoreLocaleRootTrailingSlash(requestPathname, {
1518
+ trailingSlash,
1519
+ skipProxyUrlNormalize
1520
+ });
1484
1521
  let configMatchPathname = stripBasePath(requestPathname, basePath);
1485
1522
  {
1486
1523
  const strippedPathname = stripBasePath(pathname, basePath);
@@ -1543,6 +1580,8 @@ async function createPagesRouterRequestHandler(options) {
1543
1580
  duplex: hasBody ? "half" : void 0
1544
1581
  });
1545
1582
  const middlewareRequest = isDataReq && skipProxyUrlNormalize ? new Request(new URL(originalRenderUrl, webRequest.url), webRequest) : void 0;
1583
+ const middlewareCtx = createNodeExecutionContext(void 0, { middlewareOrigin: resolveNodeMiddlewareOrigin(req, webRequest.url, host, port) });
1584
+ const runNodeMiddleware = typeof runMiddleware === "function" ? (request, _ctx, opts) => runMiddleware(request, middlewareCtx, opts) : null;
1546
1585
  const resolvePublicImageSource = async (sourceUrl) => {
1547
1586
  const rawSourcePathname = sourceUrl.pathname;
1548
1587
  if (getRepeatedSlashRedirect(rawSourcePathname) || isOpenRedirectShaped(rawSourcePathname)) return null;
@@ -1561,11 +1600,15 @@ async function createPagesRouterRequestHandler(options) {
1561
1600
  recordCacheability: false,
1562
1601
  rawSearch: sourceUrl.search,
1563
1602
  configMatchPathname: strippedSourcePathname,
1564
- runMiddleware: typeof runMiddleware === "function" ? wrapMiddlewareWithBasePath(runMiddleware, basePath, sourceHadBasePath) : null,
1603
+ restoreLocaleRootTrailingSlash: shouldRestoreLocaleRootTrailingSlash(sourceRequestPathname, {
1604
+ trailingSlash,
1605
+ skipProxyUrlNormalize
1606
+ }),
1607
+ runMiddleware: runNodeMiddleware ? wrapMiddlewareWithBasePath(runNodeMiddleware, basePath, sourceHadBasePath) : null,
1565
1608
  renderPage: null,
1566
1609
  handleApi: null,
1567
- serveFilesystemRoute: async (candidate, _stagedHeaders, phase) => {
1568
- if (isImageOptimizationPath(candidate) || isPagesFilesystemExcludedPath(candidate, phase)) return false;
1610
+ serveFilesystemRoute: async (candidate, _stagedHeaders, phase, _resolvedUrl, _request, candidateHasBasePath) => {
1611
+ if (!candidateHasBasePath && !isAssetPrefixBuildAsset(candidate, pagesAssetPathPrefix) || isImageOptimizationPath(candidate) || isPagesFilesystemExcludedPath(candidate, phase)) return false;
1569
1612
  const lookupPath = staticCacheLookupPath(candidate);
1570
1613
  if (lookupPath === null || lookupPath === "/" || !staticCache.lookup(lookupPath)) return false;
1571
1614
  sourcePath = candidate;
@@ -1595,9 +1638,10 @@ async function createPagesRouterRequestHandler(options) {
1595
1638
  rawSearch: rawQs,
1596
1639
  authorizeOnDemandRevalidate: typeof authorizeOnDemandRevalidate === "function" ? authorizeOnDemandRevalidate : void 0,
1597
1640
  configMatchPathname,
1641
+ restoreLocaleRootTrailingSlash,
1598
1642
  matchPageRoute: matchPageRoute ?? null,
1599
1643
  matchApiRoute: matchApiRoute ?? null,
1600
- runMiddleware: typeof runMiddleware === "function" ? wrapMiddlewareWithBasePath(runMiddleware, basePath, hadBasePath) : null,
1644
+ runMiddleware: runNodeMiddleware ? wrapMiddlewareWithBasePath(runNodeMiddleware, basePath, hadBasePath) : null,
1601
1645
  renderPage: typeof renderPage === "function" ? (request, resolvedUrl, options, stagedHeaders) => renderPage(request, resolvedUrl, ssrManifest, void 0, stagedHeaders, {
1602
1646
  ...options,
1603
1647
  originalUrl: originalRenderUrl
@@ -1648,7 +1692,7 @@ async function createPagesRouterRequestHandler(options) {
1648
1692
  res.end(INVALID_IMAGE_SOURCE_MESSAGE);
1649
1693
  return true;
1650
1694
  }
1651
- if (isPagesFilesystemExcludedPath(requestPathname, phase)) return false;
1695
+ if (!resolvedPathnameHasBasePath && !isAssetPrefixBuildAsset(requestPathname, pagesAssetPathPrefix) || isPagesFilesystemExcludedPath(requestPathname, phase)) return false;
1652
1696
  return tryServeStatic(req, res, clientDir, requestPathname, compress, staticCache, stagedHeaders);
1653
1697
  }
1654
1698
  };
@@ -35,4 +35,10 @@ export declare function resolveRequestProtocol(source: IncomingMessage | Headers
35
35
  * against `request.url`.
36
36
  */
37
37
  export declare function resolveRequestHost(source: IncomingMessage | Headers, fallback: string): string;
38
+ /**
39
+ * The `X-Forwarded-Host` value when it matches the `trustedHosts` allow-list,
40
+ * otherwise undefined. Unlike the raw `Host` header, this host is
41
+ * operator-approved.
42
+ */
43
+ export declare function resolveTrustedForwardedHost(source: IncomingMessage | Headers): string | undefined;
38
44
  //#endregion
@@ -42,12 +42,18 @@ function resolveRequestProtocol(source) {
42
42
  * against `request.url`.
43
43
  */
44
44
  function resolveRequestHost(source, fallback) {
45
+ return resolveTrustedForwardedHost(source) ?? (readHost(source) || fallback);
46
+ }
47
+ /**
48
+ * The `X-Forwarded-Host` value when it matches the `trustedHosts` allow-list,
49
+ * otherwise undefined. Unlike the raw `Host` header, this host is
50
+ * operator-approved.
51
+ */
52
+ function resolveTrustedForwardedHost(source) {
45
53
  const rawForwarded = readForwardedHost(source);
46
- if (rawForwarded && trustedHosts.size > 0) {
47
- const forwardedHost = rawForwarded.split(",")[0]?.trim().toLowerCase();
48
- if (forwardedHost && trustedHosts.has(forwardedHost)) return forwardedHost;
49
- }
50
- return readHost(source) || fallback;
54
+ if (!rawForwarded || trustedHosts.size === 0) return void 0;
55
+ const forwardedHost = rawForwarded.split(",")[0]?.trim().toLowerCase();
56
+ return forwardedHost && trustedHosts.has(forwardedHost) ? forwardedHost : void 0;
51
57
  }
52
58
  function readForwardedProto(source) {
53
59
  if (isWebHeaders(source)) return source.get("x-forwarded-proto") ?? void 0;
@@ -65,4 +71,4 @@ function isWebHeaders(source) {
65
71
  return typeof source.get === "function";
66
72
  }
67
73
  //#endregion
68
- export { resolveRequestHost, resolveRequestProtocol, trustProxy, trustedHosts };
74
+ export { resolveRequestHost, resolveRequestProtocol, resolveTrustedForwardedHost, trustProxy, trustedHosts };
@@ -31,4 +31,5 @@ export declare function logRequest({ method, url, status, totalMs, compileMs, re
31
31
  * Returns `performance.now()` - a high-resolution monotonic timestamp.
32
32
  */
33
33
  export declare function now(): number;
34
- //#endregion
34
+ //#endregion
35
+ export {};
@@ -143,6 +143,11 @@ export declare function isOriginAllowed(origin: string, allowed: string[]): bool
143
143
  *
144
144
  * @param headers - The Headers object to modify in place
145
145
  */
146
+ /**
147
+ * Next.js drops each empty middleware Set-Cookie value when it converts
148
+ * middleware's response headers, so blank values never reach the response.
149
+ */
150
+ export declare function dropEmptyMiddlewareSetCookie(headers: Headers): void;
146
151
  export declare function processMiddlewareHeaders(headers: Headers): void;
147
152
  /**
148
153
  * Strip internal headers from an inbound request so they cannot be forged by
@@ -313,7 +313,18 @@ function isOriginAllowed(origin, allowed) {
313
313
  *
314
314
  * @param headers - The Headers object to modify in place
315
315
  */
316
+ /**
317
+ * Next.js drops each empty middleware Set-Cookie value when it converts
318
+ * middleware's response headers, so blank values never reach the response.
319
+ */
320
+ function dropEmptyMiddlewareSetCookie(headers) {
321
+ const cookies = headers.getSetCookie();
322
+ if (!cookies.includes("")) return;
323
+ headers.delete("set-cookie");
324
+ for (const cookie of cookies) if (cookie) headers.append("set-cookie", cookie);
325
+ }
316
326
  function processMiddlewareHeaders(headers) {
327
+ dropEmptyMiddlewareSetCookie(headers);
317
328
  const keysToDelete = [];
318
329
  const unconsumedRequestHeaders = getUnconsumedMiddlewareRequestHeaders(headers);
319
330
  for (const key of headers.keys()) if (key.startsWith("x-middleware-") && key !== "x-middleware-cache" && !unconsumedRequestHeaders.has(key)) keysToDelete.push(key);
@@ -433,4 +444,4 @@ function cloneRequestWithUrl(request, url) {
433
444
  return attachRequestCfMetadata(cloned, request);
434
445
  }
435
446
  //#endregion
436
- export { INTERNAL_HEADERS, VINEXT_INTERNAL_HEADERS, attachRequestCfMetadata, canonicalizeRequestPathname, canonicalizeRequestUrlPathname, cloneRequestWithHeaders, cloneRequestWithUrl, createStaticFileSignal, filterInternalHeaders, getRepeatedSlashRedirect, guardProtocolRelativeUrl, hasBasePath, isOpenRedirectShaped, isOriginAllowed, normalizeTrailingSlash, normalizeTrailingSlashPathname, processMiddlewareHeaders, resolvePublicFileRoute, sendRepeatedSlashRedirect, stripBasePath, validateCsrfOrigin, validateServerActionPayload };
447
+ export { INTERNAL_HEADERS, VINEXT_INTERNAL_HEADERS, attachRequestCfMetadata, canonicalizeRequestPathname, canonicalizeRequestUrlPathname, cloneRequestWithHeaders, cloneRequestWithUrl, createStaticFileSignal, dropEmptyMiddlewareSetCookie, filterInternalHeaders, getRepeatedSlashRedirect, guardProtocolRelativeUrl, hasBasePath, isOpenRedirectShaped, isOriginAllowed, normalizeTrailingSlash, normalizeTrailingSlashPathname, processMiddlewareHeaders, resolvePublicFileRoute, sendRepeatedSlashRedirect, stripBasePath, validateCsrfOrigin, validateServerActionPayload };
@@ -19,4 +19,5 @@ export declare function clearFrameworkRequestError(response: Response): Response
19
19
  export declare function attachFrameworkRequestError(response: Response, error: unknown): Response;
20
20
  export declare function consumeFrameworkRequestRoute(response: Response): Response;
21
21
  export declare function traceFrameworkRequest<T>(input: RequestTraceInput<T>): Promise<T>;
22
- //#endregion
22
+ //#endregion
23
+ export {};
@@ -1,8 +1,8 @@
1
1
  import { getOrCreateAls } from "../shims/internal/als-registry.js";
2
2
  import { isFullyBufferedBody, markFullyBufferedBody, preserveFullyBufferedBodyMetadata } from "./fully-buffered-response.js";
3
+ import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
3
4
  import { VINEXT_TRACE_BUFFERED_BODY_HEADER, VINEXT_TRACE_ERROR_HEADER, VINEXT_TRACE_ROUTE_HEADER } from "./headers.js";
4
5
  import { frameworkTracer } from "./tracer.js";
5
- import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
6
6
  import { getResponseStartCompletion } from "./response-start-tracing.js";
7
7
  //#region src/server/request-tracing.ts
8
8
  const activeRequestTrace = getOrCreateAls("vinext.requestTracing.als");
@@ -1,4 +1,5 @@
1
1
  import { preserveFullyBufferedBodyMetadata } from "./fully-buffered-response.js";
2
+ import { observeStreamConsumption } from "./defer-until-stream-consumed.js";
2
3
  import { frameworkTracer } from "./tracer.js";
3
4
  import { copyLinkHeaderProvenance } from "./app-response-header-provenance.js";
4
5
  //#region src/server/response-start-tracing.ts
@@ -13,37 +14,14 @@ function createResponseStartSpanDescriptor() {
13
14
  };
14
15
  }
15
16
  function traceResponseStartStream(stream, onSettled) {
16
- const reader = stream.getReader();
17
17
  const runInTraceContext = frameworkTracer.captureActiveContext();
18
- let started = false;
19
- return new ReadableStream({
20
- async pull(controller) {
21
- try {
22
- const result = await reader.read();
23
- if (result.done) {
24
- onSettled();
25
- controller.close();
26
- return;
27
- }
28
- if (!started) {
29
- started = true;
30
- runInTraceContext(() => frameworkTracer.trace(createResponseStartSpanDescriptor(), () => void 0));
31
- onSettled();
32
- }
33
- controller.enqueue(result.value);
34
- } catch (error) {
35
- onSettled();
36
- controller.error(error);
37
- }
18
+ return observeStreamConsumption(stream, {
19
+ onStart() {
20
+ runInTraceContext(() => frameworkTracer.trace(createResponseStartSpanDescriptor(), () => void 0));
21
+ onSettled();
38
22
  },
39
- async cancel(reason) {
40
- try {
41
- await reader.cancel(reason);
42
- } finally {
43
- onSettled();
44
- }
45
- }
46
- }, { highWaterMark: 0 });
23
+ onFlush: onSettled
24
+ });
47
25
  }
48
26
  function traceResponseStartWithCompletion(response) {
49
27
  const existing = tracedResponses.get(response);
@@ -0,0 +1,4 @@
1
+ //#region src/server/rsc-render-stream.d.ts
2
+ export type RscRawRenderer = (model: unknown, options?: unknown) => ReadableStream<Uint8Array>;
3
+ export declare function createRscRenderer(render: RscRawRenderer): RscRawRenderer;
4
+ //#endregion
@@ -0,0 +1,25 @@
1
+ import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
2
+ import { createRenderStreamCancellation } from "./app-render-abort-error.js";
3
+ //#region src/server/rsc-render-stream.ts
4
+ const noop = () => {};
5
+ function createRscRenderer(render) {
6
+ return (model, options) => {
7
+ const cancellation = createRenderStreamCancellation();
8
+ return deferUntilStreamConsumed(render(model, ignoreCancellationErrors(options, cancellation)), noop, void 0, cancellation.record);
9
+ };
10
+ }
11
+ /** A consumer cancelling the payload is not a render failure. */
12
+ function ignoreCancellationErrors(options, cancellation) {
13
+ if (!options || typeof options !== "object") return options;
14
+ const onError = Reflect.get(options, "onError");
15
+ if (typeof onError !== "function") return options;
16
+ return {
17
+ ...options,
18
+ onError(error, ...rest) {
19
+ if (cancellation.isReason(error)) return void 0;
20
+ return Reflect.apply(onError, options, [error, ...rest]);
21
+ }
22
+ };
23
+ }
24
+ //#endregion
25
+ export { createRscRenderer };
@@ -30,4 +30,5 @@ type PrerenderCacheSeedOptions = {
30
30
  * @returns The number of routes seeded (0 if no manifest or no renderable routes).
31
31
  */
32
32
  export declare function seedMemoryCacheFromPrerender(serverDir: string, options?: PrerenderCacheSeedOptions): Promise<number>;
33
- //#endregion
33
+ //#endregion
34
+ export {};