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
@@ -0,0 +1,156 @@
1
+ import { getOrCreateAls } from "../shims/internal/als-registry.js";
2
+ import { escapeHtmlAttr } from "./html.js";
3
+ import * as ReactDOM from "react-dom";
4
+ import { setOnClientReference } from "@vitejs/plugin-rsc/ssr";
5
+ //#region src/server/app-streamed-client-references.ts
6
+ /**
7
+ * Stream the client references an SSR render may show before they load, and
8
+ * link every client reference's scripts with the render's CSP nonce and the
9
+ * configured crossOrigin, and its stylesheets with the configured crossOrigin.
10
+ *
11
+ * A render waits for its route's client references before it starts, except
12
+ * those whose modules evaluate asynchronously (top-level await). Like Next.js,
13
+ * it streams those: React suspends on one until it loads, showing the nearest
14
+ * Suspense fallback first.
15
+ *
16
+ * plugin-rsc links a client module's stylesheets as the render reads its
17
+ * exports, so a streamed module would link them wherever it rendered once
18
+ * loaded, which depends on how long it took. Instead, a render links a
19
+ * streamed reference's stylesheets in the route's import order, as Next.js's
20
+ * Turbopack build does: just before the first reference after it links its
21
+ * own, or after the shell's stylesheets when none does. Its scripts link as the
22
+ * Flight stream names it.
23
+ *
24
+ * plugin-rsc hints a client module's scripts without the render's nonce, which
25
+ * a nonce-based CSP blocks, and always as anonymous, so under
26
+ * `crossOrigin: "use-credentials"` the browser fetches the module the page
27
+ * then imports without credentials. React keeps the first hint for each
28
+ * script, so a render with either hints them first, with both, as Next.js does.
29
+ * plugin-rsc also links its stylesheets as anonymous whatever the config, so a
30
+ * render links them first with the configured crossOrigin too. Unlike Next.js,
31
+ * it links them as anonymous when that's unset: Vite's preload helper always
32
+ * links a lazily imported module's stylesheets as anonymous, and a later page
33
+ * doing so would fail the CORS check on the no-cors copy the browser cached.
34
+ */
35
+ const WRAPPED = Symbol.for("vinext.streamedClientReferences.wrapped");
36
+ const STYLESHEET_PRECEDENCE = "vite-rsc/client-reference";
37
+ const referenceDeps = /* @__PURE__ */ new Map();
38
+ const renderStorage = getOrCreateAls("vinext.streamedClientReferences");
39
+ function hintsScripts(render) {
40
+ return !!render.nonce || render.crossOrigin === "use-credentials";
41
+ }
42
+ function linkScripts(deps, render) {
43
+ const options = {
44
+ as: "script",
45
+ crossOrigin: render.crossOrigin,
46
+ fetchPriority: "low",
47
+ nonce: render.nonce
48
+ };
49
+ for (const href of deps.js) ReactDOM.preloadModule(href, options);
50
+ }
51
+ function linkStylesheets(hrefs, render) {
52
+ const options = {
53
+ as: "style",
54
+ crossOrigin: render.crossOrigin,
55
+ precedence: STYLESHEET_PRECEDENCE
56
+ };
57
+ for (const href of hrefs) ReactDOM.preinit(href, options);
58
+ }
59
+ /**
60
+ * Before reference `id` links its stylesheets, link those of the streamed
61
+ * references that come before it in import order.
62
+ */
63
+ function linkStreamedStylesheetsBefore(render, id) {
64
+ const position = render.positions.get(id);
65
+ if (position === void 0) return;
66
+ while (render.unlinked.length > 0 && render.positions.get(render.unlinked[0]) < position) {
67
+ const hrefs = referenceDeps.get(render.unlinked.shift())?.css ?? [];
68
+ for (const href of hrefs) render.linkedStylesheets.add(href);
69
+ linkStylesheets(hrefs, render);
70
+ }
71
+ }
72
+ /**
73
+ * Wrap plugin-rsc's client-reference loader before any client reference
74
+ * loads; a production build calls this as its SSR entry starts. `asyncIds` are
75
+ * the references any route may stream, and `getLoader` returns a reference's
76
+ * own loader from the client-references module.
77
+ */
78
+ function wrapClientReferenceRequire(asyncIds, getLoader) {
79
+ const load = globalThis.__vite_rsc_client_require__;
80
+ if (typeof load !== "function" || WRAPPED in load) return;
81
+ setOnClientReference(({ id, deps }) => {
82
+ referenceDeps.set(id, deps);
83
+ const render = renderStorage.getStore();
84
+ if (render && !render.streamed.has(id)) for (const href of deps.css) render.linkedStylesheets.add(href);
85
+ });
86
+ const loads = /* @__PURE__ */ new Map();
87
+ const wrapped = (id) => {
88
+ const render = renderStorage.getStore();
89
+ if (render?.streamed.has(id)) {
90
+ const deps = referenceDeps.get(id);
91
+ if (deps) linkScripts(deps, render);
92
+ }
93
+ let loading = loads.get(id);
94
+ if (!loading) {
95
+ const loader = asyncIds.has(id) ? getLoader(id) : void 0;
96
+ loading = Promise.all([load(id), loader?.()]).then(([mod, exports]) => new Proxy(mod, { get(target, key, receiver) {
97
+ const render = renderStorage.getStore();
98
+ if (render) {
99
+ if (exports !== void 0 && render.streamed.has(id)) return Reflect.get(exports, key);
100
+ linkStreamedStylesheetsBefore(render, id);
101
+ const deps = referenceDeps.get(id);
102
+ if (deps && key in target) {
103
+ linkStylesheets(deps.css, render);
104
+ if (hintsScripts(render)) linkScripts(deps, render);
105
+ }
106
+ }
107
+ return Reflect.get(target, key, receiver);
108
+ } }));
109
+ loads.set(id, loading);
110
+ }
111
+ return loading;
112
+ };
113
+ Object.defineProperty(wrapped, WRAPPED, { value: true });
114
+ globalThis.__vite_rsc_client_require__ = wrapped;
115
+ }
116
+ function createStreamedClientReferences(route, nonce, crossOrigin) {
117
+ const streamed = new Set(route?.streamed);
118
+ return {
119
+ nonce,
120
+ crossOrigin,
121
+ streamed,
122
+ positions: new Map(route?.references.map((id, index) => [id, index])),
123
+ unlinked: route?.references.filter((id) => streamed.has(id)) ?? [],
124
+ linkedStylesheets: /* @__PURE__ */ new Set()
125
+ };
126
+ }
127
+ /**
128
+ * Forget the stylesheets a discarded render linked, so the render that
129
+ * replaces it links them again.
130
+ */
131
+ function resetStreamedClientReferences(render, route) {
132
+ if (!render) return;
133
+ render.unlinked = route?.references.filter((id) => render.streamed.has(id)) ?? [];
134
+ render.linkedStylesheets.clear();
135
+ }
136
+ /** Run a render, and the Flight stream it reads, with its streamed references. */
137
+ function runWithStreamedClientReferences(render, fn) {
138
+ return renderStorage.run(render, fn);
139
+ }
140
+ /**
141
+ * The `<head>` links of the streamed stylesheets a render's shell left
142
+ * unlinked, those of streamed references after every reference it rendered.
143
+ */
144
+ function renderStreamedStylesheets(render) {
145
+ const hrefs = /* @__PURE__ */ new Set();
146
+ for (const id of render.unlinked.splice(0)) for (const href of referenceDeps.get(id)?.css ?? []) if (!render.linkedStylesheets.has(href)) hrefs.add(href);
147
+ const crossOrigin = render.crossOrigin === "use-credentials" ? "use-credentials" : "";
148
+ let html = "";
149
+ for (const href of hrefs) {
150
+ render.linkedStylesheets.add(href);
151
+ html += `<link rel="stylesheet" href="${escapeHtmlAttr(href)}" data-precedence="${STYLESHEET_PRECEDENCE}" crossorigin="${crossOrigin}"/>`;
152
+ }
153
+ return html;
154
+ }
155
+ //#endregion
156
+ export { createStreamedClientReferences, renderStreamedStylesheets, resetStreamedClientReferences, runWithStreamedClientReferences, wrapClientReferenceRequire };
@@ -35,4 +35,5 @@ export declare function findVisitedResponseCacheEntry(cache: Map<string, Visited
35
35
  export declare function deleteVisitedResponseCacheEntry(cache: Map<string, VisitedResponseCacheEntry>, rscUrl: string, interceptionContext: string | null): boolean;
36
36
  export declare function deleteAllVisitedResponseCacheEntries(cache: Map<string, VisitedResponseCacheEntry>, rscUrl: string, interceptionContext: string | null): number;
37
37
  export declare function deleteInvalidatedHistoryRestoreEntries(cache: Map<string, VisitedResponseCacheEntry>): void;
38
- //#endregion
38
+ //#endregion
39
+ export {};
@@ -114,4 +114,5 @@ export declare function withoutAppPageDispatchQuery(requestUrl: string, props: A
114
114
  */
115
115
  export declare function isStaticCandidateAppPageDispatch(projection: CacheabilityManifest, request: Request, props: AppMatchedWorkerResponseStageProps): boolean;
116
116
  export declare function isAppWorkerResponseStageProps(value: unknown): value is AppWorkerResponseStageProps;
117
- //#endregion
117
+ //#endregion
118
+ export {};
@@ -50,4 +50,5 @@ export declare function createArtifactCompatibilityEnvelope(input?: ArtifactComp
50
50
  export declare function createArtifactCompatibilityGraphVersion(input: ArtifactCompatibilityGraphVersionInput): string;
51
51
  export declare function parseArtifactCompatibilityEnvelope(value: unknown): ArtifactCompatibilityEnvelope | null;
52
52
  export declare function evaluateArtifactCompatibility(current: ArtifactCompatibilityEnvelope, candidate: ArtifactCompatibilityEnvelope, options?: ArtifactCompatibilityEvaluationOptions): ArtifactCompatibilityDecision;
53
- //#endregion
53
+ //#endregion
54
+ export {};
@@ -41,4 +41,5 @@ export type BfcacheSegmentDescriptor = {
41
41
  sourceBoundSegmentKey: string;
42
42
  };
43
43
  export declare function deriveBfcacheSegmentIdentity(descriptor: BfcacheSegmentDescriptor): string;
44
- //#endregion
44
+ //#endregion
45
+ export {};
@@ -2,4 +2,5 @@
2
2
  type VinextCacheState = "HIT" | "MISS" | "STALE" | "STATIC";
3
3
  export declare function setCacheStateHeaders(headers: Headers, cacheState: VinextCacheState): void;
4
4
  export declare function buildCacheStateHeaders(cacheState: VinextCacheState): Record<string, string>;
5
- //#endregion
5
+ //#endregion
6
+ export {};
@@ -46,4 +46,5 @@ export type CacheabilityAdmissionCaptureBudget = {
46
46
  export declare function createCacheabilityAdmissionCaptureBudget(maxBytes: number): CacheabilityAdmissionCaptureBudget;
47
47
  export declare function captureCacheabilityAdmissionBody(body: ReadableStream<Uint8Array> | null, deadlineAt: number, limit?: number, budget?: CacheabilityAdmissionCaptureBudget): Promise<CapturedAdmissionBody>;
48
48
  export declare function finalizeWorkerCacheabilityResponse(response: Response, ctx: ExecutionContextLike): Promise<Response>;
49
- //#endregion
49
+ //#endregion
50
+ export {};
@@ -99,4 +99,5 @@ export declare function createClientReusePayloadHash(input: string): string;
99
99
  export declare function createClientReuseManifest(input: CreateClientReuseManifestInput): ClientReuseManifestWire;
100
100
  export declare function serializeClientReuseManifest(input: CreateClientReuseManifestInput): string;
101
101
  export declare function parseClientReuseManifestHeader(rawHeader: string | null | undefined, options?: ParseClientReuseManifestOptions): ClientReuseManifestParseResult;
102
- //#endregion
102
+ //#endregion
103
+ export {};
@@ -39,4 +39,5 @@ type ApplyConfigHeadersOptions = {
39
39
  export declare function applyConfigHeadersToResponse(responseHeaders: Headers, options: ApplyConfigHeadersOptions): void;
40
40
  /** Apply matched next.config.js headers to an early response header record. */
41
41
  export declare function applyConfigHeadersToHeaderRecord(headers: HeaderRecord, options: ApplyConfigHeadersOptions): void;
42
- //#endregion
42
+ //#endregion
43
+ export {};
@@ -76,10 +76,12 @@ function appendVaryHeaderRecord(headers, value) {
76
76
  function applyConfigHeadersToResponse(responseHeaders, options) {
77
77
  const matched = retainLastSingularConfigValues(matchHeaders(options.pathname, options.configHeaders, options.requestContext, options.basePathState, options.recordCacheability === false ? void 0 : markConditionalConfigHeaderCacheability));
78
78
  if (options.recordCacheability !== false) markExplicitConfigResponseVeto(matched);
79
+ const configCookies = [];
79
80
  for (const header of matched) {
80
81
  const lowerName = header.key.toLowerCase();
81
82
  if (lowerName === "x-vinext-special-error-status") continue;
82
- if (lowerName === "link") {
83
+ if (lowerName === "set-cookie") configCookies.push(header.value);
84
+ else if (lowerName === "link") {
83
85
  if (options.middlewareHeaders?.get(lowerName)) continue;
84
86
  const postConfigLink = options.appendToPostConfigLink ? responseHeaders.get(lowerName) : null;
85
87
  responseHeaders.set(header.key, postConfigLink ? `${header.value}, ${postConfigLink}` : header.value);
@@ -88,15 +90,22 @@ function applyConfigHeadersToResponse(responseHeaders, options) {
88
90
  else if (ADDITIVE_CONFIG_HEADER_NAMES.has(lowerName)) responseHeaders.append(header.key, header.value);
89
91
  else if ((typeof options.overwriteExisting === "function" ? options.overwriteExisting(lowerName) : options.overwriteExisting?.has(lowerName)) || !responseHeaders.has(lowerName)) responseHeaders.set(header.key, header.value);
90
92
  }
93
+ if (configCookies.length > 0 && !options.middlewareHeaders?.get("set-cookie")) {
94
+ const responseCookies = responseHeaders.getSetCookie();
95
+ responseHeaders.delete("set-cookie");
96
+ for (const cookie of [...configCookies, ...responseCookies]) responseHeaders.append("set-cookie", cookie);
97
+ }
91
98
  }
92
99
  /** Apply matched next.config.js headers to an early response header record. */
93
100
  function applyConfigHeadersToHeaderRecord(headers, options) {
94
101
  const matched = retainLastSingularConfigValues(matchHeaders(options.pathname, options.configHeaders, options.requestContext, options.basePathState, options.recordCacheability === false ? void 0 : markConditionalConfigHeaderCacheability));
95
102
  if (options.recordCacheability !== false) markExplicitConfigResponseVeto(matched);
103
+ const middlewareSetsCookie = Boolean(options.middlewareHeaders?.get("set-cookie")) || findHeaderRecordKey(headers, "set-cookie") !== void 0;
96
104
  for (const header of matched) {
97
105
  const lowerName = header.key.toLowerCase();
98
- if (lowerName === "set-cookie") appendHeaderRecord(headers, lowerName, header.value);
99
- else if (lowerName === "vary") appendVaryHeaderRecord(headers, header.value);
106
+ if (lowerName === "set-cookie") {
107
+ if (!middlewareSetsCookie) appendHeaderRecord(headers, lowerName, header.value);
108
+ } else if (lowerName === "vary") appendVaryHeaderRecord(headers, header.value);
100
109
  else if (findHeaderRecordKey(headers, lowerName) === void 0) headers[lowerName] = header.value;
101
110
  }
102
111
  }
@@ -5,4 +5,5 @@ export declare function getScriptNonceFromHeader(cspHeaderValue: string): string
5
5
  export declare function getScriptNonceFromHeaders(headers: Headers | null | undefined): string | undefined;
6
6
  export declare function getScriptNonceFromNodeHeaderSources(...headersList: readonly (NodeHeaders | null | undefined)[]): string | undefined;
7
7
  export declare function getScriptNonceFromHeaderSources(...headersList: readonly (Headers | null | undefined)[]): string | undefined;
8
- //#endregion
8
+ //#endregion
9
+ export {};
@@ -9,4 +9,5 @@ declare function DefaultGlobalNotFound(): React.ReactElement;
9
9
  export declare const DEFAULT_GLOBAL_NOT_FOUND_MODULE: {
10
10
  readonly default: typeof DefaultGlobalNotFound;
11
11
  };
12
- //#endregion
12
+ //#endregion
13
+ export {};
@@ -0,0 +1,33 @@
1
+ import DefaultForbidden from "../shims/default-forbidden.js";
2
+ import DefaultNotFound from "../shims/default-not-found.js";
3
+ import DefaultUnauthorized from "../shims/default-unauthorized.js";
4
+ //#region src/server/default-http-access-fallback-modules.d.ts
5
+ /**
6
+ * Module-shaped wrappers around vinext's built-in not-found, forbidden and
7
+ * unauthorized components. Used as the fallback when an app does not define
8
+ * its own `app/not-found.tsx` (and has not opted into
9
+ * `app/global-not-found.tsx`), `app/forbidden.tsx` or `app/unauthorized.tsx`.
10
+ * The runtime treats any `{ default: Component }` record as a boundary
11
+ * module, so wrapping the components this way lets us thread the defaults
12
+ * through the existing boundary plumbing without introducing a parallel code
13
+ * path.
14
+ *
15
+ * Mirrors Next.js's `builtin/not-found.js`, `builtin/forbidden.js` and
16
+ * `builtin/unauthorized.js`, which the app loader selects for the root
17
+ * segment when the user has not supplied the file:
18
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/build/webpack/loaders/next-app-loader/index.ts
19
+ * https://github.com/vercel/next.js/blob/canary/crates/next-core/src/app_structure.rs
20
+ */
21
+ export declare const DEFAULT_NOT_FOUND_MODULE: {
22
+ readonly default: typeof DefaultNotFound;
23
+ };
24
+ export declare const DEFAULT_FORBIDDEN_MODULE: {
25
+ readonly default: typeof DefaultForbidden;
26
+ };
27
+ export declare const DEFAULT_UNAUTHORIZED_MODULE: {
28
+ readonly default: typeof DefaultUnauthorized;
29
+ };
30
+ export declare function getDefaultHttpAccessFallbackModule(statusCode: number): {
31
+ readonly default: typeof DefaultNotFound;
32
+ } | null;
33
+ //#endregion
@@ -0,0 +1,31 @@
1
+ import DefaultForbidden from "../shims/default-forbidden.js";
2
+ import DefaultNotFound from "../shims/default-not-found.js";
3
+ import DefaultUnauthorized from "../shims/default-unauthorized.js";
4
+ //#region src/server/default-http-access-fallback-modules.ts
5
+ /**
6
+ * Module-shaped wrappers around vinext's built-in not-found, forbidden and
7
+ * unauthorized components. Used as the fallback when an app does not define
8
+ * its own `app/not-found.tsx` (and has not opted into
9
+ * `app/global-not-found.tsx`), `app/forbidden.tsx` or `app/unauthorized.tsx`.
10
+ * The runtime treats any `{ default: Component }` record as a boundary
11
+ * module, so wrapping the components this way lets us thread the defaults
12
+ * through the existing boundary plumbing without introducing a parallel code
13
+ * path.
14
+ *
15
+ * Mirrors Next.js's `builtin/not-found.js`, `builtin/forbidden.js` and
16
+ * `builtin/unauthorized.js`, which the app loader selects for the root
17
+ * segment when the user has not supplied the file:
18
+ * https://github.com/vercel/next.js/blob/canary/packages/next/src/build/webpack/loaders/next-app-loader/index.ts
19
+ * https://github.com/vercel/next.js/blob/canary/crates/next-core/src/app_structure.rs
20
+ */
21
+ const DEFAULT_NOT_FOUND_MODULE = { default: DefaultNotFound };
22
+ const DEFAULT_FORBIDDEN_MODULE = { default: DefaultForbidden };
23
+ const DEFAULT_UNAUTHORIZED_MODULE = { default: DefaultUnauthorized };
24
+ function getDefaultHttpAccessFallbackModule(statusCode) {
25
+ if (statusCode === 404) return DEFAULT_NOT_FOUND_MODULE;
26
+ if (statusCode === 403) return DEFAULT_FORBIDDEN_MODULE;
27
+ if (statusCode === 401) return DEFAULT_UNAUTHORIZED_MODULE;
28
+ return null;
29
+ }
30
+ //#endregion
31
+ export { DEFAULT_FORBIDDEN_MODULE, DEFAULT_NOT_FOUND_MODULE, DEFAULT_UNAUTHORIZED_MODULE, getDefaultHttpAccessFallbackModule };
@@ -1,7 +1,41 @@
1
1
  //#region src/server/defer-until-stream-consumed.d.ts
2
+ export type StreamConsumptionCallbacks = {
3
+ /** Runs once when the consumer reads the first chunk. */
4
+ onStart?: () => void;
5
+ /** Runs once when the stream ends, errors or is cancelled. */
6
+ onFlush?: () => void;
7
+ onError?: (error: unknown) => void;
8
+ onCancel?: (reason: unknown) => void;
9
+ };
2
10
  /**
3
11
  * Defers cleanup until the downstream consumer drains or cancels the stream.
4
12
  * `onCancel` runs before the cancellation reaches the source stream.
5
13
  */
6
14
  export declare function deferUntilStreamConsumed(stream: ReadableStream<Uint8Array>, onFlush: () => void, onError?: (error: unknown) => void, onCancel?: (reason: unknown) => void): ReadableStream<Uint8Array>;
15
+ /**
16
+ * Runs the callbacks as the downstream consumer reads the stream: `onStart`
17
+ * when it reads the first chunk, the others when the stream ends, errors or
18
+ * is cancelled.
19
+ *
20
+ * The wrapper reads the source directly instead of piping it through an
21
+ * identity `TransformStream`, and a wrapper that is wrapped again before
22
+ * anything reads it takes on the new callbacks instead of adding a layer.
23
+ * Every streamed response passes through several of these, and each layer
24
+ * cost a pipe, two more streams and their promise hops per chunk. Nothing is
25
+ * read ahead of the consumer, so an unread wrapper is still untouched.
26
+ *
27
+ * The callbacks run as separate layers would run them. Start, flush and error
28
+ * callbacks run innermost first, and a layer sees the error an inner layer's
29
+ * callback threw as its stream error, or the error its own flush callback
30
+ * threw. Cancel callbacks run outermost first. A layer whose error or cancel
31
+ * callback throws doesn't run its flush callback. When a start callback
32
+ * throws, that layer and the layers outside it see the error, and the layers
33
+ * inside it are cancelled with it. As with the pipe, each layer's callbacks
34
+ * run in the async context that added them, and the source is read and
35
+ * cancelled in the context of the first layer. Cleanup reads and clears
36
+ * request-scoped state, and spans the source starts while producing chunks
37
+ * need their request parent, but the consumer (the runtime sending the body)
38
+ * reads from outside that scope.
39
+ */
40
+ export declare function observeStreamConsumption(stream: ReadableStream<Uint8Array>, callbacks: StreamConsumptionCallbacks): ReadableStream<Uint8Array>;
7
41
  //#endregion
@@ -1,37 +1,170 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
1
2
  //#region src/server/defer-until-stream-consumed.ts
3
+ const UNREAD_WRAPPERS_KEY = Symbol.for("vinext.deferUntilStreamConsumed.unreadWrappers");
4
+ const unreadWrappers = globalThis[UNREAD_WRAPPERS_KEY] ??= /* @__PURE__ */ new WeakMap();
2
5
  /**
3
6
  * Defers cleanup until the downstream consumer drains or cancels the stream.
4
7
  * `onCancel` runs before the cancellation reaches the source stream.
5
8
  */
6
9
  function deferUntilStreamConsumed(stream, onFlush, onError, onCancel) {
7
- let called = false;
8
- const once = () => {
9
- if (!called) {
10
- called = true;
11
- onFlush();
10
+ return observeStreamConsumption(stream, {
11
+ onFlush,
12
+ onError,
13
+ onCancel
14
+ });
15
+ }
16
+ /**
17
+ * Runs the callbacks as the downstream consumer reads the stream: `onStart`
18
+ * when it reads the first chunk, the others when the stream ends, errors or
19
+ * is cancelled.
20
+ *
21
+ * The wrapper reads the source directly instead of piping it through an
22
+ * identity `TransformStream`, and a wrapper that is wrapped again before
23
+ * anything reads it takes on the new callbacks instead of adding a layer.
24
+ * Every streamed response passes through several of these, and each layer
25
+ * cost a pipe, two more streams and their promise hops per chunk. Nothing is
26
+ * read ahead of the consumer, so an unread wrapper is still untouched.
27
+ *
28
+ * The callbacks run as separate layers would run them. Start, flush and error
29
+ * callbacks run innermost first, and a layer sees the error an inner layer's
30
+ * callback threw as its stream error, or the error its own flush callback
31
+ * threw. Cancel callbacks run outermost first. A layer whose error or cancel
32
+ * callback throws doesn't run its flush callback. When a start callback
33
+ * throws, that layer and the layers outside it see the error, and the layers
34
+ * inside it are cancelled with it. As with the pipe, each layer's callbacks
35
+ * run in the async context that added them, and the source is read and
36
+ * cancelled in the context of the first layer. Cleanup reads and clears
37
+ * request-scoped state, and spans the source starts while producing chunks
38
+ * need their request parent, but the consumer (the runtime sending the body)
39
+ * reads from outside that scope.
40
+ */
41
+ function observeStreamConsumption(stream, callbacks) {
42
+ const layer = {
43
+ ...callbacks,
44
+ runInCreationContext: AsyncLocalStorage.snapshot()
45
+ };
46
+ const unread = unreadWrappers.get(stream);
47
+ if (unread && !stream.locked) {
48
+ unread.push(layer);
49
+ return stream;
50
+ }
51
+ const layers = [layer];
52
+ let started = false;
53
+ let settled = false;
54
+ const finish = (sourceFailure, first = 0, end = layers.length) => {
55
+ let failure = sourceFailure;
56
+ for (const current of layers.slice(first, end)) current.runInCreationContext(() => {
57
+ const reportedError = failure !== void 0;
58
+ try {
59
+ if (failure) current.onError?.(failure.error);
60
+ } catch (error) {
61
+ failure = { error };
62
+ return;
63
+ }
64
+ try {
65
+ current.onFlush?.();
66
+ } catch (error) {
67
+ failure = { error };
68
+ if (reportedError) return;
69
+ try {
70
+ current.onError?.(error);
71
+ } catch (callbackError) {
72
+ failure = { error: callbackError };
73
+ }
74
+ }
75
+ });
76
+ return failure;
77
+ };
78
+ const cancelLayers = (reason, end) => {
79
+ let failure;
80
+ for (const current of layers.slice(0, end).reverse()) current.runInCreationContext(() => {
81
+ try {
82
+ current.onCancel?.(reason);
83
+ } catch (error) {
84
+ failure ??= { error };
85
+ return;
86
+ }
87
+ try {
88
+ current.onFlush?.();
89
+ } catch (error) {
90
+ failure ??= { error };
91
+ }
92
+ });
93
+ return failure;
94
+ };
95
+ const start = () => {
96
+ for (const [index, current] of layers.entries()) {
97
+ try {
98
+ current.runInCreationContext(() => current.onStart?.());
99
+ } catch (error) {
100
+ return {
101
+ error,
102
+ index
103
+ };
104
+ }
105
+ if (settled) return void 0;
12
106
  }
13
107
  };
14
- const cleanup = new TransformStream({ flush() {
15
- once();
16
- } });
17
- const reader = stream.pipeThrough(cleanup).getReader();
18
- return new ReadableStream({
108
+ const reader = stream.getReader();
109
+ const release = () => {
110
+ try {
111
+ reader.releaseLock();
112
+ } catch {}
113
+ };
114
+ const wrapped = new ReadableStream({
19
115
  pull(controller) {
20
- return reader.read().then(({ done, value }) => {
21
- if (done) controller.close();
22
- else controller.enqueue(value);
116
+ unreadWrappers.delete(wrapped);
117
+ return layer.runInCreationContext(() => reader.read()).then(({ done, value }) => {
118
+ if (settled) return;
119
+ if (!done) {
120
+ if (!started) {
121
+ started = true;
122
+ const startFailure = start();
123
+ if (settled) return;
124
+ if (startFailure) {
125
+ settled = true;
126
+ const { error, index } = startFailure;
127
+ let failure = finish({ error }, index, index + 1);
128
+ cancelLayers(error, index);
129
+ layer.runInCreationContext(() => reader.cancel(error)).catch(() => {}).finally(release);
130
+ failure = finish(failure, index + 1);
131
+ controller.error(failure?.error);
132
+ return;
133
+ }
134
+ }
135
+ controller.enqueue(value);
136
+ return;
137
+ }
138
+ settled = true;
139
+ release();
140
+ const failure = finish(void 0);
141
+ if (failure) controller.error(failure.error);
142
+ else controller.close();
23
143
  }, (error) => {
24
- onError?.(error);
25
- once();
26
- controller.error(error);
144
+ if (settled) return;
145
+ settled = true;
146
+ release();
147
+ controller.error(finish({ error })?.error);
27
148
  });
28
149
  },
29
150
  cancel(reason) {
30
- onCancel?.(reason);
31
- once();
32
- return reader.cancel(reason);
151
+ unreadWrappers.delete(wrapped);
152
+ let failure;
153
+ if (!settled) {
154
+ settled = true;
155
+ failure = cancelLayers(reason, layers.length);
156
+ }
157
+ const cancelled = layer.runInCreationContext(() => reader.cancel(reason)).finally(release);
158
+ if (!failure) return cancelled;
159
+ const { error } = failure;
160
+ const fail = () => {
161
+ throw error;
162
+ };
163
+ return cancelled.then(fail, fail);
33
164
  }
34
- });
165
+ }, { highWaterMark: 0 });
166
+ unreadWrappers.set(wrapped, layers);
167
+ return wrapped;
35
168
  }
36
169
  //#endregion
37
- export { deferUntilStreamConsumed };
170
+ export { deferUntilStreamConsumed, observeStreamConsumption };
@@ -19,6 +19,9 @@
19
19
  * (`process.kill(pid, 0)`), which is good enough for the dev-server
20
20
  * "another server is running" use case. Race conditions on lock acquisition
21
21
  * are tolerated: at worst, two dev servers race and one fails to bind a port.
22
+ * Unlike a `flock()`, the lock file survives a hard restart, so a lock
23
+ * written before the current boot is treated as stale whatever its PID: the
24
+ * PID may now belong to an unrelated process. See `predatesCurrentBoot()`.
22
25
  * - Lock file lives in `<root>/.vinext/dev/lock.json` (mirroring Next.js'
23
26
  * `.next/dev/lock` layout). `.vinext/` is already used by the fonts plugin
24
27
  * to cache self-hosted Google Fonts, so this re-uses the same project-local
@@ -62,6 +65,31 @@ export declare function readLockfile(lockfilePath: string): DevServerInfo | unde
62
65
  * signal it (in which case it's still running, just owned by someone else).
63
66
  */
64
67
  export declare function isPidAlive(pid: number): boolean;
68
+ /**
69
+ * Returns true if a lock with the given `startedAt` was written before the
70
+ * machine last booted.
71
+ *
72
+ * Such a lock was left behind by a session whose exit handler never ran (a
73
+ * crash, a forced restart, power loss). PIDs are handed out again after a
74
+ * boot, so the lock's PID may be held by an unrelated process, and
75
+ * `isPidAlive()` alone would report the dead server as running.
76
+ *
77
+ * The boot time is derived from `Date.now() - os.uptime()`. Stepping the wall
78
+ * clock forward moves it too (`os.uptime()` doesn't change), so a forward
79
+ * step larger than the uptime at which a server started makes its lock look
80
+ * stale, e.g. a VM resuming after the host slept. The second `vinext dev`
81
+ * then takes over, as in the acquisition race tolerated below: Vite moves it
82
+ * to another port, or it fails to bind with `strictPort`.
83
+ *
84
+ * Known limitations, where a lock is still checked by PID alone:
85
+ * - A wall clock that comes back from a reboot behind the previous session
86
+ * (an RTC running slow, or NTP stepping it back) can leave the lock's
87
+ * `startedAt` after the derived boot time.
88
+ * - Windows Fast Startup shuts down by hibernating the kernel, so
89
+ * `os.uptime()` keeps counting across that shutdown.
90
+ * - A container restart doesn't reset the host's uptime.
91
+ */
92
+ export declare function predatesCurrentBoot(startedAt: number): boolean;
65
93
  type FormatErrorOptions = {
66
94
  /** Existing server info from the lock file, if readable. */
67
95
  existing: DevServerInfo | undefined;
@@ -87,7 +115,8 @@ type AcquireOptions = {
87
115
  /** Initial server info to write. Port/URL may be updated later via `update()`. */
88
116
  info: DevServerInfo;
89
117
  /**
90
- * If a lock file exists but its PID is dead, take over instead of failing.
118
+ * If a lock file exists but is stale (its PID is dead, or it was written
119
+ * before the current boot), take over instead of failing.
91
120
  * Defaults to `true`. Set to `false` for testing.
92
121
  */
93
122
  takeOverStale?: boolean;
@@ -117,4 +146,5 @@ type AcquireResult = AcquireSuccess | AcquireFailure;
117
146
  * already holds the lock.
118
147
  */
119
148
  export declare function tryAcquireLockfile(opts: AcquireOptions): AcquireResult;
120
- //#endregion
149
+ //#endregion
150
+ export {};