vinext 1.2.1 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/README.md +12 -9
  2. package/dist/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/build/action-owner-manifest.d.ts +3 -2
  4. package/dist/build/action-owner-manifest.js +18 -2
  5. package/dist/build/app-page-static-eligibility.d.ts +17 -1
  6. package/dist/build/app-page-static-eligibility.js +80 -13
  7. package/dist/build/clean-output.d.ts +2 -1
  8. package/dist/build/client-build-config.d.ts +77 -6
  9. package/dist/build/client-build-config.js +176 -12
  10. package/dist/build/client-reference-async.d.ts +48 -0
  11. package/dist/build/client-reference-async.js +123 -0
  12. package/dist/build/client-reference-chunks.d.ts +32 -0
  13. package/dist/build/client-reference-chunks.js +111 -0
  14. package/dist/build/client-reference-groups.d.ts +171 -0
  15. package/dist/build/client-reference-groups.js +572 -0
  16. package/dist/build/css-url-assets.d.ts +2 -1
  17. package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
  18. package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
  19. package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
  20. package/dist/build/google-fonts/font-metadata.d.ts +2 -1
  21. package/dist/build/google-fonts/validate.d.ts +2 -1
  22. package/dist/build/inline-css.d.ts +2 -1
  23. package/dist/build/layout-classification.d.ts +2 -1
  24. package/dist/build/module-dependency-cache.d.ts +33 -1
  25. package/dist/build/module-dependency-cache.js +51 -1
  26. package/dist/build/next-client-runtime-manifests.d.ts +12 -2
  27. package/dist/build/next-client-runtime-manifests.js +19 -4
  28. package/dist/build/nitro-public-files.d.ts +24 -0
  29. package/dist/build/nitro-public-files.js +60 -0
  30. package/dist/build/pages-client-assets-module.js +1 -1
  31. package/dist/build/precompress.d.ts +2 -1
  32. package/dist/build/precompress.js +1 -1
  33. package/dist/build/prerender-paths.d.ts +2 -1
  34. package/dist/build/prerender-paths.js +5 -2
  35. package/dist/build/prerender-phase.d.ts +2 -1
  36. package/dist/build/prerender-server-pool.js +1 -1
  37. package/dist/build/prerender.d.ts +3 -2
  38. package/dist/build/prerender.js +5 -4
  39. package/dist/build/report.d.ts +2 -1
  40. package/dist/build/route-classification-injector.d.ts +2 -1
  41. package/dist/build/route-classification-manifest.d.ts +2 -1
  42. package/dist/build/run-prerender.d.ts +2 -1
  43. package/dist/build/server-actions-encryption-key.d.ts +24 -0
  44. package/dist/build/server-actions-encryption-key.js +101 -0
  45. package/dist/build/ssr-manifest.d.ts +3 -0
  46. package/dist/build/ssr-manifest.js +34 -2
  47. package/dist/build/standalone.d.ts +2 -1
  48. package/dist/cache/cache-adapters-virtual.d.ts +2 -1
  49. package/dist/cache.js +1 -2
  50. package/dist/check.d.ts +2 -1
  51. package/dist/check.js +4 -0
  52. package/dist/cli-args.d.ts +2 -1
  53. package/dist/cli.js +2 -0
  54. package/dist/client/client-redirect-matcher.js +2 -1
  55. package/dist/client/client-redirects.d.ts +4 -3
  56. package/dist/client/client-redirects.js +2 -1
  57. package/dist/client/client-rewrite-params.d.ts +9 -0
  58. package/dist/client/client-rewrite-params.js +20 -0
  59. package/dist/client/client-rewrites.d.ts +2 -1
  60. package/dist/client/dev-error-overlay-store.d.ts +2 -1
  61. package/dist/client/dev-error-overlay.js +2 -1
  62. package/dist/client/index.js +1 -2
  63. package/dist/client/instrumentation-client-state.js +5 -5
  64. package/dist/client/navigation-runtime.d.ts +28 -3
  65. package/dist/client/navigation-runtime.js +42 -11
  66. package/dist/client/pages-router-link-navigation.d.ts +2 -1
  67. package/dist/client/vinext-next-data.d.ts +25 -2
  68. package/dist/client/window-next.d.ts +2 -1
  69. package/dist/config/config-matchers.d.ts +27 -41
  70. package/dist/config/config-matchers.js +293 -270
  71. package/dist/config/config-source.d.ts +34 -0
  72. package/dist/config/config-source.js +141 -0
  73. package/dist/config/dotenv.d.ts +2 -1
  74. package/dist/config/header-params.d.ts +29 -0
  75. package/dist/config/header-params.js +106 -0
  76. package/dist/config/next-config.d.ts +20 -6
  77. package/dist/config/next-config.js +149 -11
  78. package/dist/config/tsconfig-paths.d.ts +2 -1
  79. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
  80. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
  81. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
  82. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
  83. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
  84. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
  85. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
  86. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
  87. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
  88. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
  89. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
  90. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
  91. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
  92. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
  93. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
  94. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
  95. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
  96. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
  97. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
  98. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
  99. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
  100. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
  101. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
  102. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
  103. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
  104. package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
  105. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
  106. package/dist/entries/app-browser-entry.d.ts +34 -6
  107. package/dist/entries/app-browser-entry.js +103 -40
  108. package/dist/entries/app-rsc-entry.d.ts +4 -1
  109. package/dist/entries/app-rsc-entry.js +131 -66
  110. package/dist/entries/app-rsc-manifest.d.ts +12 -1
  111. package/dist/entries/app-rsc-manifest.js +73 -1
  112. package/dist/entries/app-ssr-entry.d.ts +4 -1
  113. package/dist/entries/app-ssr-entry.js +9 -2
  114. package/dist/entries/pages-client-entry.d.ts +1 -0
  115. package/dist/entries/pages-client-entry.js +6 -6
  116. package/dist/entries/pages-entry-helpers.js +1 -2
  117. package/dist/entries/pages-server-entry.d.ts +2 -1
  118. package/dist/entries/pages-server-entry.js +18 -15
  119. package/dist/entries/runtime-entry-module.d.ts +1 -0
  120. package/dist/entries/runtime-entry-module.js +4 -1
  121. package/dist/image/image-adapters-virtual.d.ts +2 -1
  122. package/dist/index.d.ts +11 -0
  123. package/dist/index.js +340 -116
  124. package/dist/init.js +17 -0
  125. package/dist/plugins/client-compile-hints.d.ts +30 -0
  126. package/dist/plugins/client-compile-hints.js +88 -0
  127. package/dist/plugins/client-reference-dedup.d.ts +2 -1
  128. package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
  129. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
  130. package/dist/plugins/dynamic-preload-metadata.js +1 -1
  131. package/dist/plugins/environment.d.ts +2 -1
  132. package/dist/plugins/fonts.js +9 -12
  133. package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
  134. package/dist/plugins/import-meta-url.d.ts +2 -1
  135. package/dist/plugins/og-assets.d.ts +2 -1
  136. package/dist/plugins/og-assets.js +2 -3
  137. package/dist/plugins/optimize-imports.d.ts +27 -3
  138. package/dist/plugins/optimize-imports.js +106 -20
  139. package/dist/plugins/pages-node-externals.d.ts +2 -1
  140. package/dist/plugins/remove-console.d.ts +2 -1
  141. package/dist/plugins/require-condition-resolution.d.ts +2 -1
  142. package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
  143. package/dist/plugins/rsc-client-reference-loaders.js +447 -27
  144. package/dist/plugins/rsc-client-shim-excludes.js +2 -0
  145. package/dist/plugins/sass.d.ts +2 -1
  146. package/dist/plugins/strip-server-exports.d.ts +2 -1
  147. package/dist/plugins/styled-jsx.d.ts +2 -1
  148. package/dist/plugins/transform-result.d.ts +2 -1
  149. package/dist/plugins/typeof-window.d.ts +2 -1
  150. package/dist/plugins/use-cache-callable.d.ts +5 -0
  151. package/dist/plugins/use-cache-callable.js +30 -8
  152. package/dist/plugins/worker-image-imports.d.ts +1 -0
  153. package/dist/plugins/worker-image-imports.js +2 -2
  154. package/dist/plugins/worker-use-server.d.ts +2 -1
  155. package/dist/routing/app-route-graph.d.ts +41 -1
  156. package/dist/routing/app-route-graph.js +122 -50
  157. package/dist/routing/browser-route-manifest.d.ts +44 -0
  158. package/dist/routing/browser-route-manifest.js +195 -0
  159. package/dist/routing/hashed-route-patterns.d.ts +4 -0
  160. package/dist/routing/hashed-route-patterns.js +22 -0
  161. package/dist/routing/optimistic-route-trie.d.ts +28 -0
  162. package/dist/routing/optimistic-route-trie.js +102 -0
  163. package/dist/routing/route-matching.d.ts +2 -1
  164. package/dist/routing/route-pattern.d.ts +2 -1
  165. package/dist/routing/route-validation.d.ts +6 -1
  166. package/dist/routing/route-validation.js +26 -10
  167. package/dist/server/accept-encoding.d.ts +2 -1
  168. package/dist/server/app-action-forwarding.d.ts +10 -1
  169. package/dist/server/app-action-forwarding.js +15 -1
  170. package/dist/server/app-bfcache-identity.d.ts +2 -1
  171. package/dist/server/app-browser-action-result.d.ts +2 -1
  172. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
  173. package/dist/server/app-browser-entry.js +175 -64
  174. package/dist/server/app-browser-error.d.ts +5 -2
  175. package/dist/server/app-browser-error.js +7 -2
  176. package/dist/server/app-browser-history-controller.d.ts +2 -1
  177. package/dist/server/app-browser-hydration.d.ts +2 -1
  178. package/dist/server/app-browser-interception-context.d.ts +4 -3
  179. package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
  180. package/dist/server/app-browser-mpa-navigation.js +6 -5
  181. package/dist/server/app-browser-navigation-controller.d.ts +17 -6
  182. package/dist/server/app-browser-navigation-controller.js +103 -36
  183. package/dist/server/app-browser-popstate.d.ts +2 -1
  184. package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
  185. package/dist/server/app-browser-server-action-client.d.ts +2 -1
  186. package/dist/server/app-browser-state.d.ts +2 -2
  187. package/dist/server/app-browser-state.js +1 -1
  188. package/dist/server/app-browser-stream.d.ts +2 -1
  189. package/dist/server/app-browser-visible-commit.d.ts +6 -5
  190. package/dist/server/app-client-reference-manifest.d.ts +31 -0
  191. package/dist/server/app-client-reference-manifest.js +46 -0
  192. package/dist/server/app-client-reference-preloader.d.ts +45 -2
  193. package/dist/server/app-client-reference-preloader.js +48 -10
  194. package/dist/server/app-elements-wire.d.ts +2 -1
  195. package/dist/server/app-elements.d.ts +2 -0
  196. package/dist/server/app-elements.js +3 -1
  197. package/dist/server/app-fallback-renderer.d.ts +9 -2
  198. package/dist/server/app-fallback-renderer.js +6 -2
  199. package/dist/server/app-history-state.d.ts +2 -1
  200. package/dist/server/app-inline-css-client.d.ts +2 -1
  201. package/dist/server/app-layout-param-observation.d.ts +2 -1
  202. package/dist/server/app-metadata-tracing.d.ts +2 -1
  203. package/dist/server/app-middleware.d.ts +6 -0
  204. package/dist/server/app-middleware.js +8 -10
  205. package/dist/server/app-optimistic-routing.d.ts +26 -11
  206. package/dist/server/app-optimistic-routing.js +38 -96
  207. package/dist/server/app-page-boundary-render.d.ts +20 -2
  208. package/dist/server/app-page-boundary-render.js +229 -39
  209. package/dist/server/app-page-boundary.d.ts +34 -5
  210. package/dist/server/app-page-boundary.js +40 -7
  211. package/dist/server/app-page-cache-finalizer.d.ts +2 -1
  212. package/dist/server/app-page-cache-finalizer.js +1 -1
  213. package/dist/server/app-page-cache-render.d.ts +10 -2
  214. package/dist/server/app-page-cache-render.js +15 -2
  215. package/dist/server/app-page-cache.js +2 -2
  216. package/dist/server/app-page-dispatch.d.ts +34 -1
  217. package/dist/server/app-page-dispatch.js +165 -34
  218. package/dist/server/app-page-element-builder.d.ts +17 -1
  219. package/dist/server/app-page-element-builder.js +187 -66
  220. package/dist/server/app-page-execution.d.ts +28 -1
  221. package/dist/server/app-page-execution.js +114 -5
  222. package/dist/server/app-page-head.d.ts +95 -3
  223. package/dist/server/app-page-head.js +307 -152
  224. package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
  225. package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
  226. package/dist/server/app-page-method.d.ts +2 -1
  227. package/dist/server/app-page-probe.d.ts +2 -1
  228. package/dist/server/app-page-render-identity.d.ts +2 -1
  229. package/dist/server/app-page-render.d.ts +7 -1
  230. package/dist/server/app-page-render.js +38 -11
  231. package/dist/server/app-page-request.d.ts +14 -1
  232. package/dist/server/app-page-request.js +1 -1
  233. package/dist/server/app-page-route-wiring.d.ts +52 -2
  234. package/dist/server/app-page-route-wiring.js +197 -47
  235. package/dist/server/app-page-rsc-render-status.d.ts +3 -1
  236. package/dist/server/app-page-rsc-render-status.js +1 -0
  237. package/dist/server/app-page-search-params-observation.d.ts +8 -6
  238. package/dist/server/app-page-search-params-observation.js +16 -11
  239. package/dist/server/app-page-segment-plan.d.ts +2 -1
  240. package/dist/server/app-page-stream.d.ts +38 -1
  241. package/dist/server/app-page-stream.js +24 -4
  242. package/dist/server/app-pages-bridge.d.ts +4 -2
  243. package/dist/server/app-pages-bridge.js +11 -7
  244. package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
  245. package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
  246. package/dist/server/app-prerender-endpoints.d.ts +2 -1
  247. package/dist/server/app-prerender-static-params.d.ts +2 -1
  248. package/dist/server/app-prerender-static-params.js +3 -2
  249. package/dist/server/app-render-dependency.d.ts +11 -1
  250. package/dist/server/app-render-dependency.js +65 -6
  251. package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
  252. package/dist/server/app-request-stage-independent-entry.js +2 -2
  253. package/dist/server/app-response-stage-entry.d.ts +2 -1
  254. package/dist/server/app-response-stage-entry.js +3 -3
  255. package/dist/server/app-route-handler-cache.d.ts +2 -1
  256. package/dist/server/app-route-handler-dispatch.d.ts +2 -1
  257. package/dist/server/app-route-handler-dispatch.js +4 -2
  258. package/dist/server/app-route-handler-execution.d.ts +4 -1
  259. package/dist/server/app-route-handler-execution.js +9 -2
  260. package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
  261. package/dist/server/app-route-handler-middleware-context.js +3 -3
  262. package/dist/server/app-route-handler-response.d.ts +4 -2
  263. package/dist/server/app-route-handler-response.js +2 -2
  264. package/dist/server/app-route-handler-runtime.d.ts +4 -1
  265. package/dist/server/app-route-handler-runtime.js +20 -3
  266. package/dist/server/app-route-module-loader.d.ts +18 -1
  267. package/dist/server/app-route-module-loader.js +15 -6
  268. package/dist/server/app-route-tree-prefetch.d.ts +2 -1
  269. package/dist/server/app-route-tree.d.ts +20 -0
  270. package/dist/server/app-route-tree.js +18 -0
  271. package/dist/server/app-router-entry.js +2 -2
  272. package/dist/server/app-rsc-combined-handler.js +8 -1
  273. package/dist/server/app-rsc-error-handler.d.ts +2 -1
  274. package/dist/server/app-rsc-errors.d.ts +9 -1
  275. package/dist/server/app-rsc-errors.js +9 -2
  276. package/dist/server/app-rsc-handler.d.ts +6 -2
  277. package/dist/server/app-rsc-handler.js +152 -140
  278. package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
  279. package/dist/server/app-rsc-response-finalizer.js +4 -1
  280. package/dist/server/app-rsc-response-stage.js +3 -1
  281. package/dist/server/app-rsc-route-matching.d.ts +39 -1
  282. package/dist/server/app-rsc-route-matching.js +25 -1
  283. package/dist/server/app-segment-config.d.ts +2 -1
  284. package/dist/server/app-segment-config.js +1 -14
  285. package/dist/server/app-server-action-execution.d.ts +25 -7
  286. package/dist/server/app-server-action-execution.js +53 -59
  287. package/dist/server/app-ssr-entry.d.ts +12 -0
  288. package/dist/server/app-ssr-entry.js +104 -48
  289. package/dist/server/app-ssr-error-meta.d.ts +2 -1
  290. package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
  291. package/dist/server/app-ssr-stream.d.ts +29 -10
  292. package/dist/server/app-ssr-stream.js +311 -67
  293. package/dist/server/app-static-generation.d.ts +2 -1
  294. package/dist/server/app-streamed-client-references.d.ts +39 -0
  295. package/dist/server/app-streamed-client-references.js +156 -0
  296. package/dist/server/app-visited-response-cache.d.ts +2 -1
  297. package/dist/server/app-worker-stages.d.ts +2 -1
  298. package/dist/server/artifact-compatibility.d.ts +2 -1
  299. package/dist/server/bfcache-identity.d.ts +2 -1
  300. package/dist/server/cache-headers.d.ts +2 -1
  301. package/dist/server/cacheability-request.d.ts +2 -1
  302. package/dist/server/client-reuse-manifest.d.ts +2 -1
  303. package/dist/server/config-headers.d.ts +2 -1
  304. package/dist/server/config-headers.js +12 -3
  305. package/dist/server/csp.d.ts +2 -1
  306. package/dist/server/default-global-not-found-module.d.ts +2 -1
  307. package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
  308. package/dist/server/default-http-access-fallback-modules.js +31 -0
  309. package/dist/server/defer-until-stream-consumed.d.ts +34 -0
  310. package/dist/server/defer-until-stream-consumed.js +154 -21
  311. package/dist/server/dev-lockfile.d.ts +32 -2
  312. package/dist/server/dev-lockfile.js +46 -2
  313. package/dist/server/dev-module-runner.d.ts +2 -1
  314. package/dist/server/dev-server.js +10 -3
  315. package/dist/server/fetch-handler.js +1 -2
  316. package/dist/server/file-based-metadata.d.ts +2 -1
  317. package/dist/server/framework-tracer.d.ts +2 -1
  318. package/dist/server/html.d.ts +1 -0
  319. package/dist/server/html.js +19 -1
  320. package/dist/server/http-conditional.d.ts +2 -1
  321. package/dist/server/http-error-responses.d.ts +2 -1
  322. package/dist/server/implicit-tags.d.ts +2 -1
  323. package/dist/server/isolate-shared-promise.d.ts +10 -0
  324. package/dist/server/isolate-shared-promise.js +33 -0
  325. package/dist/server/isr-cache.js +3 -2
  326. package/dist/server/metadata-route-build-data.d.ts +2 -1
  327. package/dist/server/metadata-route-build-data.js +1 -1
  328. package/dist/server/metadata-route-response.d.ts +2 -1
  329. package/dist/server/metadata-route-response.js +1 -1
  330. package/dist/server/metadata-routes.d.ts +2 -1
  331. package/dist/server/middleware-matcher-pattern.d.ts +0 -1
  332. package/dist/server/middleware-matcher-pattern.js +11 -140
  333. package/dist/server/middleware-matcher.js +5 -6
  334. package/dist/server/middleware-response-headers.d.ts +31 -0
  335. package/dist/server/middleware-response-headers.js +57 -1
  336. package/dist/server/middleware-runtime.d.ts +2 -1
  337. package/dist/server/middleware-runtime.js +26 -13
  338. package/dist/server/navigation-planner.d.ts +2 -2
  339. package/dist/server/navigation-trace.d.ts +2 -1
  340. package/dist/server/next-error-digest.d.ts +2 -1
  341. package/dist/server/nitro-public-files-plugin.d.ts +39 -0
  342. package/dist/server/nitro-public-files-plugin.js +106 -0
  343. package/dist/server/nitro-public-files.d.ts +22 -0
  344. package/dist/server/nitro-public-files.js +39 -0
  345. package/dist/server/opentelemetry-api.d.ts +2 -1
  346. package/dist/server/operation-token.d.ts +2 -1
  347. package/dist/server/pages-api-route.d.ts +2 -1
  348. package/dist/server/pages-asset-tags.d.ts +7 -1
  349. package/dist/server/pages-asset-tags.js +9 -2
  350. package/dist/server/pages-body-parser-config.d.ts +2 -1
  351. package/dist/server/pages-client-assets.d.ts +8 -1
  352. package/dist/server/pages-data-route.d.ts +2 -1
  353. package/dist/server/pages-document-asset-props.d.ts +2 -1
  354. package/dist/server/pages-document-initial-props.d.ts +2 -1
  355. package/dist/server/pages-execution-tracing.d.ts +2 -1
  356. package/dist/server/pages-execution-tracing.js +1 -1
  357. package/dist/server/pages-get-initial-props.d.ts +2 -1
  358. package/dist/server/pages-i18n.d.ts +18 -0
  359. package/dist/server/pages-i18n.js +18 -2
  360. package/dist/server/pages-node-compat.d.ts +5 -3
  361. package/dist/server/pages-node-compat.js +35 -16
  362. package/dist/server/pages-page-data.d.ts +7 -1
  363. package/dist/server/pages-page-data.js +35 -12
  364. package/dist/server/pages-page-handler.d.ts +3 -2
  365. package/dist/server/pages-page-handler.js +16 -7
  366. package/dist/server/pages-page-method.d.ts +2 -1
  367. package/dist/server/pages-page-response.d.ts +2 -1
  368. package/dist/server/pages-preview.d.ts +2 -1
  369. package/dist/server/pages-readiness.d.ts +2 -1
  370. package/dist/server/pages-request-pipeline.d.ts +8 -2
  371. package/dist/server/pages-request-pipeline.js +35 -40
  372. package/dist/server/pages-request-stage-entry.d.ts +2 -1
  373. package/dist/server/pages-request-stage-entry.js +16 -6
  374. package/dist/server/pages-response-stage-entry.d.ts +2 -1
  375. package/dist/server/pages-response-stage-entry.js +1 -1
  376. package/dist/server/pages-revalidate.js +1 -0
  377. package/dist/server/pages-route-data-kind.d.ts +2 -1
  378. package/dist/server/pages-router-entry.js +1 -1
  379. package/dist/server/prerender-cache-life-header.d.ts +2 -1
  380. package/dist/server/prerender-route-params.d.ts +2 -1
  381. package/dist/server/prod-server.d.ts +2 -2
  382. package/dist/server/prod-server.js +80 -36
  383. package/dist/server/proxy-trust.d.ts +6 -0
  384. package/dist/server/proxy-trust.js +12 -6
  385. package/dist/server/request-log.d.ts +2 -1
  386. package/dist/server/request-pipeline.d.ts +5 -0
  387. package/dist/server/request-pipeline.js +12 -1
  388. package/dist/server/request-tracing.d.ts +2 -1
  389. package/dist/server/request-tracing.js +1 -1
  390. package/dist/server/response-start-tracing.js +7 -29
  391. package/dist/server/rsc-render-stream.d.ts +4 -0
  392. package/dist/server/rsc-render-stream.js +25 -0
  393. package/dist/server/seed-cache.d.ts +2 -1
  394. package/dist/server/seed-cache.js +1 -1
  395. package/dist/server/server-reference-loader.js +10 -1
  396. package/dist/server/static-file-cache.d.ts +2 -1
  397. package/dist/server/static-file-cache.js +16 -3
  398. package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
  399. package/dist/server/worker-revalidation-context.d.ts +2 -1
  400. package/dist/server/worker-stages.d.ts +2 -1
  401. package/dist/server/worker-utils.js +1 -1
  402. package/dist/shims/app.d.ts +2 -1
  403. package/dist/shims/cache-callable-runtime.d.ts +2 -1
  404. package/dist/shims/cache-handler.d.ts +8 -3
  405. package/dist/shims/cache-handler.js +32 -11
  406. package/dist/shims/cache-request-state.d.ts +40 -3
  407. package/dist/shims/cache-request-state.js +70 -5
  408. package/dist/shims/cache-runtime.js +47 -19
  409. package/dist/shims/cache.d.ts +2 -2
  410. package/dist/shims/cache.js +17 -8
  411. package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
  412. package/dist/shims/caught-not-found-boundaries.js +48 -0
  413. package/dist/shims/cdn-purge-routes.d.ts +25 -0
  414. package/dist/shims/cdn-purge-routes.js +77 -0
  415. package/dist/shims/client-locale.js +2 -1
  416. package/dist/shims/client-page-root.d.ts +2 -1
  417. package/dist/shims/config.d.ts +2 -1
  418. package/dist/shims/default-forbidden.d.ts +4 -0
  419. package/dist/shims/default-forbidden.js +18 -0
  420. package/dist/shims/default-not-found.d.ts +0 -5
  421. package/dist/shims/default-not-found.js +5 -41
  422. package/dist/shims/default-unauthorized.d.ts +4 -0
  423. package/dist/shims/default-unauthorized.js +18 -0
  424. package/dist/shims/dynamic.js +17 -4
  425. package/dist/shims/error-boundary.d.ts +39 -3
  426. package/dist/shims/error-boundary.js +31 -16
  427. package/dist/shims/font-google.js +1 -2
  428. package/dist/shims/font-utils.d.ts +3 -2
  429. package/dist/shims/font-utils.js +5 -3
  430. package/dist/shims/form.js +9 -4
  431. package/dist/shims/http-access-error-fallback.d.ts +7 -0
  432. package/dist/shims/http-access-error-fallback.js +47 -0
  433. package/dist/shims/image-props.d.ts +93 -0
  434. package/dist/shims/image-props.js +323 -0
  435. package/dist/shims/image.d.ts +4 -39
  436. package/dist/shims/image.js +4 -319
  437. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
  438. package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
  439. package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
  440. package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
  441. package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
  442. package/dist/shims/internal/client-reference-loader.d.ts +7 -0
  443. package/dist/shims/internal/client-reference-loader.js +91 -0
  444. package/dist/shims/internal/cookie-serialize.d.ts +2 -1
  445. package/dist/shims/internal/cookies.js +1 -2
  446. package/dist/shims/internal/headers-state.d.ts +9 -0
  447. package/dist/shims/internal/headers-state.js +19 -2
  448. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
  449. package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
  450. package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
  451. package/dist/shims/internal/interpolate-as.d.ts +2 -1
  452. package/dist/shims/internal/pages-data-target.d.ts +2 -1
  453. package/dist/shims/internal/pages-data-url.d.ts +2 -1
  454. package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
  455. package/dist/shims/link.js +198 -53
  456. package/dist/shims/metadata.d.ts +32 -11
  457. package/dist/shims/metadata.js +88 -26
  458. package/dist/shims/navigation-errors.d.ts +2 -1
  459. package/dist/shims/navigation.d.ts +23 -3
  460. package/dist/shims/navigation.js +91 -25
  461. package/dist/shims/og.js +35 -10
  462. package/dist/shims/pages-router-runtime.d.ts +2 -1
  463. package/dist/shims/ppr-fallback-shell.d.ts +2 -1
  464. package/dist/shims/request-context.d.ts +13 -0
  465. package/dist/shims/router.js +33 -43
  466. package/dist/shims/server.d.ts +31 -4
  467. package/dist/shims/server.js +58 -10
  468. package/dist/shims/thenable-params.d.ts +6 -1
  469. package/dist/shims/thenable-params.js +11 -2
  470. package/dist/shims/unified-request-context.d.ts +5 -0
  471. package/dist/shims/unified-request-context.js +5 -3
  472. package/dist/typegen.d.ts +2 -1
  473. package/dist/utils/asset-prefix.d.ts +7 -0
  474. package/dist/utils/asset-prefix.js +10 -1
  475. package/dist/utils/client-build-manifest.d.ts +4 -1
  476. package/dist/utils/client-build-manifest.js +20 -6
  477. package/dist/utils/client-entry-manifest.d.ts +13 -0
  478. package/dist/utils/client-entry-manifest.js +20 -1
  479. package/dist/utils/client-reference-chunks.d.ts +45 -0
  480. package/dist/utils/client-reference-chunks.js +30 -0
  481. package/dist/utils/client-runtime-metadata.d.ts +10 -1
  482. package/dist/utils/client-runtime-metadata.js +53 -9
  483. package/dist/utils/compare.d.ts +9 -0
  484. package/dist/utils/compare.js +15 -1
  485. package/dist/utils/lazy-chunks.d.ts +18 -0
  486. package/dist/utils/lazy-chunks.js +27 -1
  487. package/dist/utils/manifest-paths.d.ts +14 -0
  488. package/dist/utils/manifest-paths.js +22 -1
  489. package/dist/utils/middleware-request-headers.d.ts +2 -1
  490. package/dist/utils/path-to-regexp.d.ts +21 -0
  491. package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
  492. package/dist/utils/plugin-react-version.d.ts +15 -0
  493. package/dist/utils/plugin-react-version.js +64 -0
  494. package/dist/utils/project.d.ts +2 -1
  495. package/dist/utils/project.js +9 -1
  496. package/dist/utils/public-routes.d.ts +2 -0
  497. package/dist/utils/public-routes.js +18 -7
  498. package/dist/utils/query.d.ts +2 -1
  499. package/dist/utils/sorted-array.d.ts +2 -1
  500. package/dist/utils/vite-cli-invocation.d.ts +2 -1
  501. package/package.json +5 -5
  502. package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
  503. package/dist/server/default-not-found-module.d.ts +0 -19
  504. package/dist/server/default-not-found-module.js +0 -18
  505. package/dist/server/middleware-path-to-regexp.d.ts +0 -13
  506. package/dist/server/rsc-stream-hints.d.ts +0 -21
  507. package/dist/server/rsc-stream-hints.js +0 -227
  508. package/dist/utils/regex-safety.d.ts +0 -17
  509. package/dist/utils/regex-safety.js +0 -789
@@ -1,46 +1,466 @@
1
+ import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
+ import { magicStringTransformResult, omitUnusedBuildSourcemap } from "./transform-result.js";
3
+ import { resolveShimRuntimeModule } from "../entries/runtime-entry-module.js";
4
+ import { CLIENT_REFERENCE_GROUP_MAX_COST_BYTES, collectClientReferencePreloadPlan, collectClientReferenceRouteSignatures, measureClientReferenceGroupCosts, planClientReferenceGroups, readClientModuleBindings } from "../build/client-reference-groups.js";
5
+ import { collectAsyncModules, createSideEffectsDeclarationCheck } from "../build/client-reference-async.js";
6
+ import { RESOLVED_EAGER_CLIENT_REFERENCES_ID, hasUserClientChunkGroups } from "../build/client-build-config.js";
7
+ import fs from "node:fs";
8
+ import { isCSSRequest } from "vite";
9
+ import { randomBytes } from "node:crypto";
10
+ import MagicString from "magic-string";
1
11
  //#region src/plugins/rsc-client-reference-loaders.ts
2
12
  const CLIENT_REFERENCES_ID = "\0virtual:vite-rsc/client-references";
3
13
  const RESOLVED_ID_PROXY_PREFIX = "virtual:vite-rsc/resolved-id/";
14
+ const RESOLVED_CLIENT_REFERENCE_GROUP_PREFIX = `\0virtual:vinext-client-reference-group-`;
15
+ /** Prefixes the module that registers one client reference outside every group. */
16
+ const RESOLVED_CLIENT_REFERENCE_MODULE_PREFIX = `\0virtual:vinext-client-reference-module/`;
17
+ const CLIENT_REFERENCES_ID_RE = /^\0virtual:vite-rsc\/client-references$/;
18
+ const CLIENT_REFERENCE_MODULE_RE = /^virtual:vinext-client-reference-(?:group-|module\/)|^virtual:vinext-client-reference-(?:chunks|eager)$/;
19
+ const RESOLVED_CLIENT_REFERENCE_MODULE_RE = /^\0virtual:vinext-client-reference-(?:group-|module\/)|^\0virtual:vinext-client-reference-(?:chunks|eager)$/;
20
+ const CLIENT_REFERENCE_CHUNKS_ID = "virtual:vinext-client-reference-chunks";
21
+ const RESOLVED_CLIENT_REFERENCE_CHUNKS_ID = `\0${CLIENT_REFERENCE_CHUNKS_ID}`;
22
+ const NO_ROUTE_CLIENT_REFERENCES_EXPORT = "export const routeClientReferences = null;\n";
23
+ /**
24
+ * Whether the cost estimate loads a module. Rolldown keeps externals and
25
+ * unresolved `require()`s in `importedIds` under their specifier (a bare name
26
+ * or URL), and never settles a load of one, so only files and `\0` virtual
27
+ * modules are measured.
28
+ */
29
+ function isMeasured(id) {
30
+ return id.startsWith("\0") || path.isAbsolute(id);
31
+ }
32
+ /**
33
+ * Whether `id` shares the package `sideEffects` flag of `owner`: it is in the
34
+ * same package, and the package's `sideEffects` field is not a list of files.
35
+ * `uniformSideEffects` caches that last check per package.json path.
36
+ */
37
+ function isInPackage(id, owner, uniformSideEffects) {
38
+ const packageJsonPath = owner.packageJsonPath;
39
+ if (!packageJsonPath) return false;
40
+ const relative = path.relative(path.dirname(packageJsonPath), id);
41
+ if (relative.startsWith("..") || relative.split("/").includes("node_modules")) return false;
42
+ let uniform = uniformSideEffects.get(packageJsonPath);
43
+ if (uniform === void 0) {
44
+ try {
45
+ const { sideEffects } = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
46
+ uniform = sideEffects === void 0 || typeof sideEffects === "boolean";
47
+ } catch {
48
+ uniform = false;
49
+ }
50
+ uniformSideEffects.set(packageJsonPath, uniform);
51
+ }
52
+ return uniform;
53
+ }
4
54
  function withResolvedIdProxy(resolvedId) {
5
55
  return resolvedId.startsWith("\0") ? RESOLVED_ID_PROXY_PREFIX + encodeURIComponent(resolvedId) : resolvedId;
6
56
  }
7
- function generateClientReferenceObject(meta) {
8
- const exports = meta.renderedExports.slice().sort().map((name) => ` get ${JSON.stringify(name)}() { return m[${JSON.stringify(name)}]; },`).join("\n");
9
- return exports ? `{\n${exports}\n }` : "{}";
10
- }
11
- function generateDirectClientReferenceLoaders(metas) {
12
- return `export default {\n${metas.slice().sort((a, b) => a.referenceKey.localeCompare(b.referenceKey)).map((meta) => {
13
- const importId = withResolvedIdProxy(meta.importId);
14
- return [
15
- ` ${JSON.stringify(meta.referenceKey)}: async () => {`,
16
- ` const m = await import(${JSON.stringify(importId)});`,
17
- ` return ${generateClientReferenceObject(meta)};`,
18
- ` },`
19
- ].join("\n");
20
- }).join("\n")}\n};\n`;
21
- }
22
- function createRscClientReferenceLoadersPlugin() {
57
+ function sortedRenderedExports(meta) {
58
+ return meta.renderedExports.slice().sort();
59
+ }
60
+ /**
61
+ * The exports of a client reference, read from the module namespace `binding`.
62
+ * Keep them lazy. In async or cyclic client module evaluation, eagerly copying
63
+ * module namespace values can observe an uninitialized binding.
64
+ */
65
+ function generateClientReferenceObject(meta, binding) {
66
+ const exports = sortedRenderedExports(meta).map((name) => ` get ${JSON.stringify(name)}() { return ${binding}[${JSON.stringify(name)}]; },`).join("\n");
67
+ return exports ? `{\n${exports}\n}` : "{}";
68
+ }
69
+ function generateClientReferenceLoaders(metas) {
70
+ return `export default {\n${metas.slice().sort((a, b) => a.referenceKey.localeCompare(b.referenceKey)).map((meta) => [
71
+ `${JSON.stringify(meta.referenceKey)}: async () => {`,
72
+ ` const m = await import(${JSON.stringify(withResolvedIdProxy(meta.importId))});`,
73
+ ` return ${generateClientReferenceObject(meta, "m")};`,
74
+ `},`
75
+ ].join("\n")).join("\n")}\n};\n`;
76
+ }
77
+ /**
78
+ * The client build's client-references module, which the App browser entry
79
+ * imports. It names no client reference chunk, so the entry neither grows nor
80
+ * changes its hash with the app's client references: each reference's Flight
81
+ * row names the chunks it loads (see shims/internal/client-reference-loader.ts).
82
+ */
83
+ function generateBrowserClientReferencesModule(loaderPath, eager) {
84
+ return `${eager ? `import ${JSON.stringify(RESOLVED_EAGER_CLIENT_REFERENCES_ID.slice(1))};\n` : ""}export { clientReferences as default } from ${JSON.stringify(loaderPath)};\n`;
85
+ }
86
+ /**
87
+ * A client build module that registers client references as it evaluates:
88
+ * a route group's members, the references in chunks every page loads, or one
89
+ * other reference outside every group. It imports
90
+ * only each member's rendered exports, so unused exports and their
91
+ * dependencies still tree-shake as they do with direct loaders. A member
92
+ * without rendered exports is imported for its side effects. The last member
93
+ * is imported last (see build/client-reference-chunks.ts).
94
+ */
95
+ function generateClientReferenceModule(metas, loaderPath) {
96
+ const imports = metas.map((meta, index) => {
97
+ const source = JSON.stringify(withResolvedIdProxy(meta.importId));
98
+ return meta.renderedExports.length > 0 ? `import * as m${index} from ${source};` : `import ${source};`;
99
+ });
100
+ const registrations = metas.map((meta, index) => `registerClientReference(${JSON.stringify(meta.referenceKey)}, ${generateClientReferenceObject(meta, `m${index}`)});`);
101
+ return [
102
+ `import { registerClientReference } from ${JSON.stringify(loaderPath)};`,
103
+ ...imports,
104
+ ...registrations,
105
+ ""
106
+ ].join("\n");
107
+ }
108
+ /**
109
+ * The browser never loads this module. Its dynamic imports make each client
110
+ * reference module a chunk of its own that only a Flight row names.
111
+ */
112
+ function generateClientReferenceChunksModule(moduleIds) {
113
+ return `export default [\n${moduleIds.map((id) => ` () => import(${JSON.stringify(id.slice(1))}),`).join("\n")}\n];\n`;
114
+ }
115
+ /**
116
+ * The SSR build's `routeClientReferences` export: the reference keys each route
117
+ * preloads before it renders (see server/app-client-reference-preloader.ts),
118
+ * stored as indices into `references`. Client references the plan doesn't know
119
+ * join `always`. `async` holds `asyncPlaceholder`, which renderChunk replaces
120
+ * with the candidates whose SSR modules evaluate asynchronously.
121
+ */
122
+ function generateRouteClientReferencesExport(plan, metaEntries, asyncPlaceholder) {
123
+ if (!plan) return {
124
+ code: NO_ROUTE_CLIENT_REFERENCES_EXPORT,
125
+ asyncCandidates: []
126
+ };
127
+ const metaById = new Map(metaEntries);
128
+ const references = [];
129
+ const indices = /* @__PURE__ */ new Map();
130
+ const toIndices = (referenceIds) => referenceIds.flatMap((referenceId) => {
131
+ const meta = metaById.get(referenceId);
132
+ if (!meta) return [];
133
+ let index = indices.get(referenceId);
134
+ if (index === void 0) {
135
+ index = references.length;
136
+ indices.set(referenceId, index);
137
+ references.push(meta.referenceKey);
138
+ }
139
+ return [index];
140
+ });
141
+ const always = toIndices([...plan.preloads.always, ...metaEntries.map(([referenceId]) => referenceId).filter((referenceId) => !plan.referenceIds.has(referenceId))]);
142
+ const files = plan.preloads.files.map(toIndices);
143
+ const asyncCandidates = plan.preloads.staticOnly.flatMap((referenceId) => {
144
+ const index = indices.get(referenceId);
145
+ const meta = metaById.get(referenceId);
146
+ return index === void 0 || !meta ? [] : [{
147
+ index,
148
+ importId: meta.importId
149
+ }];
150
+ });
151
+ const manifest = {
152
+ references,
153
+ always,
154
+ files,
155
+ routes: Object.fromEntries(plan.preloads.routes),
156
+ routeless: plan.preloads.routeless,
157
+ async: asyncPlaceholder
158
+ };
159
+ return {
160
+ code: `export const routeClientReferences = ${JSON.stringify(manifest)};\n`,
161
+ asyncCandidates
162
+ };
163
+ }
164
+ /**
165
+ * Replaces @vitejs/plugin-rsc's client-reference facades with per-reference
166
+ * loaders. With `routes`, the SSR build also exports the client references
167
+ * each App Router route preloads. With `grouping`, production client builds
168
+ * additionally load references that the same App Router routes reach through
169
+ * one shared route group module (see build/client-reference-groups.ts), so a
170
+ * page fetches one chunk per route group instead of one per `"use client"`
171
+ * module.
172
+ */
173
+ function createRscClientReferenceLoadersPlugin(options = {}) {
174
+ const { routes: routeOptions } = options;
175
+ const grouping = routeOptions && options.grouping;
176
+ const loaderPath = resolveShimRuntimeModule("internal/client-reference-loader");
23
177
  let rscApi;
178
+ let root = "";
179
+ let groupingEnabled = false;
180
+ let routeSignatures = /* @__PURE__ */ new Map();
181
+ // @vitejs/plugin-rsc also builds before the SSR environment.
182
+ let preloadPlan = null;
183
+ const referenceModules = /* @__PURE__ */ new Map();
184
+ let asyncCandidates = [];
185
+ const asyncPlaceholder = `__vinext_async_client_references_${randomBytes(8).toString("hex")}__`;
186
+ const asyncPlaceholderRe = new RegExp(`(["'])${asyncPlaceholder}\\1`, "g");
24
187
  return {
25
188
  name: "vinext:rsc-client-reference-loaders",
26
189
  enforce: "post",
27
190
  configResolved(config) {
191
+ root = config.root;
28
192
  rscApi = config.plugins.find((plugin) => plugin.name === "rsc:minimal")?.api;
29
193
  },
30
- transform(_code, id) {
31
- if (id !== CLIENT_REFERENCES_ID) return null;
194
+ outputOptions: {
195
+ order: "post",
196
+ handler(output) {
197
+ if (this.environment?.name !== "client") return;
198
+ groupingEnabled = !!grouping && !hasUserClientChunkGroups(output, grouping.ownClientChunkGroups);
199
+ }
200
+ },
201
+ buildStart() {
202
+ if (this.environment.name === "rsc") {
203
+ routeSignatures = /* @__PURE__ */ new Map();
204
+ preloadPlan = null;
205
+ }
206
+ if (this.environment.name === "client") {
207
+ referenceModules.clear();
208
+ options.onClientReferenceModules?.(/* @__PURE__ */ new Map());
209
+ }
210
+ },
211
+ buildEnd(error) {
212
+ if (error || !routeOptions) return;
213
+ if (this.environment.name !== "rsc" || this.environment.mode !== "build") return;
32
214
  const manager = rscApi?.manager;
33
- if (!manager || manager.isScanBuild) return null;
34
- const metaEntries = Object.entries(manager.clientReferenceMetaMap).filter(([, meta]) => meta.serverChunk);
35
- const metas = metaEntries.map(([, meta]) => meta);
36
- if (metas.length === 0) return null;
37
- for (const [id, meta] of metaEntries) meta.groupChunkId = id;
38
- return {
39
- code: generateDirectClientReferenceLoaders(metas),
40
- map: null
215
+ const routes = routeOptions.getRoutes();
216
+ if (!manager || manager.isScanBuild || !routes) return;
217
+ const clientReferenceIds = new Set(Object.keys(manager.clientReferenceMetaMap));
218
+ const getModuleInfo = (id) => this.getModuleInfo(id);
219
+ preloadPlan = {
220
+ referenceIds: clientReferenceIds,
221
+ preloads: collectClientReferencePreloadPlan({
222
+ alwaysRoots: routeOptions.getAlwaysRenderedFiles(),
223
+ canonicalizeModuleId: routeOptions.canonicalizeModuleId,
224
+ clientReferenceIds,
225
+ entryIds: [...this.getModuleIds()].filter((id) => this.getModuleInfo(id)?.isEntry),
226
+ getModuleInfo,
227
+ routelessFiles: routeOptions.getRoutelessFiles(),
228
+ routes
229
+ })
41
230
  };
231
+ if (!grouping) return;
232
+ routeSignatures = collectClientReferenceRouteSignatures({
233
+ canonicalizeModuleId: routeOptions.canonicalizeModuleId,
234
+ clientReferenceIds,
235
+ getModuleInfo,
236
+ root,
237
+ routes,
238
+ sharedRoots: routeOptions.getSharedRoots()
239
+ });
240
+ },
241
+ resolveId: {
242
+ filter: { id: CLIENT_REFERENCE_MODULE_RE },
243
+ handler(source) {
244
+ return referenceModules.has(`\0${source}`) ? `\0${source}` : null;
245
+ }
246
+ },
247
+ load: {
248
+ filter: { id: RESOLVED_CLIENT_REFERENCE_MODULE_RE },
249
+ handler(id) {
250
+ return referenceModules.get(id) ?? null;
251
+ }
252
+ },
253
+ transform: {
254
+ filter: { id: CLIENT_REFERENCES_ID_RE },
255
+ async handler(code) {
256
+ const manager = rscApi?.manager;
257
+ if (!manager || manager.isScanBuild) return null;
258
+ const isServer = this.environment.config.consumer === "server";
259
+ const metaEntries = Object.entries(manager.clientReferenceMetaMap).filter(([, meta]) => meta.serverChunk);
260
+ const metas = metaEntries.map(([, meta]) => meta);
261
+ let routeClientReferencesExport = "";
262
+ if (isServer) {
263
+ const generated = generateRouteClientReferencesExport(preloadPlan, metaEntries, asyncPlaceholder);
264
+ routeClientReferencesExport = generated.code;
265
+ asyncCandidates = generated.asyncCandidates;
266
+ }
267
+ if (metas.length === 0) return isServer ? {
268
+ code: `${code}\n${routeClientReferencesExport}`,
269
+ map: null
270
+ } : null;
271
+ for (const [id, meta] of metaEntries) meta.groupChunkId = id;
272
+ const isClientBuild = this.environment.name === "client" && this.environment.mode === "build";
273
+ const moduleKeys = /* @__PURE__ */ new Map();
274
+ const grouped = /* @__PURE__ */ new Set();
275
+ const referenceIds = new Set(metaEntries.map(([referenceId]) => referenceId));
276
+ const referenceKeys = new Map(metaEntries.map(([referenceId, meta]) => [referenceId, meta.referenceKey]));
277
+ if (grouping && groupingEnabled && isClientBuild && planClientReferenceGroups({
278
+ referenceIds,
279
+ referenceKeys,
280
+ signatures: routeSignatures,
281
+ costs: new Map([...referenceIds].map((referenceId) => [referenceId, 0])),
282
+ maxCostBytes: 0
283
+ }).length > 0) {
284
+ const references = /* @__PURE__ */ new Map();
285
+ const resolutions = /* @__PURE__ */ new Map();
286
+ const packages = /* @__PURE__ */ new Map();
287
+ const externalIds = /* @__PURE__ */ new Set();
288
+ const uniformSideEffects = /* @__PURE__ */ new Map();
289
+ const resolveCache = /* @__PURE__ */ new Map();
290
+ const addResolution = (resolved) => {
291
+ resolutions.set(resolved.id, resolved);
292
+ packages.set(resolved.id, resolved);
293
+ };
294
+ await Promise.all(metaEntries.map(async ([referenceId, meta]) => {
295
+ if (meta.importId.startsWith("\0")) {
296
+ references.set(referenceId, meta.importId);
297
+ return;
298
+ }
299
+ const resolved = await this.resolve(meta.importId);
300
+ if (!resolved || resolved.external) return;
301
+ references.set(referenceId, resolved.id);
302
+ addResolution(resolved);
303
+ }));
304
+ const { external } = this.environment.config.build.rolldownOptions;
305
+ const excludedById = /* @__PURE__ */ new Map();
306
+ const isExcludedById = (moduleId) => {
307
+ let excluded = excludedById.get(moduleId);
308
+ if (excluded === void 0) {
309
+ excluded = !isMeasured(moduleId) || moduleId === CLIENT_REFERENCES_ID || moduleId.startsWith(RESOLVED_CLIENT_REFERENCE_GROUP_PREFIX) || isCSSRequest(moduleId) || grouping.isAlwaysLoadedClientModule(moduleId);
310
+ excludedById.set(moduleId, excluded);
311
+ }
312
+ return excluded;
313
+ };
314
+ const costs = await measureClientReferenceGroupCosts({
315
+ references,
316
+ loadModule: async (moduleId) => {
317
+ if (external && !resolutions.has(moduleId) && !moduleId.startsWith("\0")) {
318
+ const resolved = await this.resolve(moduleId);
319
+ if (!resolved || resolved.external) return {
320
+ code: "",
321
+ importedIds: []
322
+ };
323
+ }
324
+ const { code, importedIds } = await this.load(resolutions.get(moduleId) ?? { id: moduleId });
325
+ if (code === null) return {
326
+ code,
327
+ importedIds
328
+ };
329
+ const importedIdSet = new Set(importedIds);
330
+ const owner = packages.get(moduleId);
331
+ return {
332
+ code,
333
+ importedIds,
334
+ bindings: await readClientModuleBindings({
335
+ code,
336
+ importedIds,
337
+ resolve: async (specifier) => {
338
+ if (owner && path.isAbsolute(moduleId) && (specifier.startsWith("./") || specifier.startsWith("../"))) {
339
+ const candidate = path.resolve(path.dirname(moduleId), specifier);
340
+ if (importedIdSet.has(candidate) && isInPackage(candidate, owner, uniformSideEffects)) {
341
+ packages.set(candidate, owner);
342
+ return candidate;
343
+ }
344
+ }
345
+ const key = `${path.dirname(moduleId)}\0${specifier}`;
346
+ let resolving = resolveCache.get(key);
347
+ if (!resolving) {
348
+ resolving = this.resolve(specifier, moduleId).then((resolved) => {
349
+ if (!resolved) return null;
350
+ if (resolved.external) externalIds.add(resolved.id);
351
+ else addResolution(resolved);
352
+ return resolved.id;
353
+ });
354
+ resolveCache.set(key, resolving);
355
+ }
356
+ return resolving;
357
+ }
358
+ })
359
+ };
360
+ },
361
+ isSideEffectFree: (moduleId) => packages.get(moduleId)?.moduleSideEffects === false,
362
+ isExcluded: (moduleId) => externalIds.has(moduleId) || isExcludedById(moduleId)
363
+ });
364
+ const groups = planClientReferenceGroups({
365
+ referenceIds,
366
+ referenceKeys,
367
+ signatures: routeSignatures,
368
+ costs,
369
+ maxCostBytes: CLIENT_REFERENCE_GROUP_MAX_COST_BYTES
370
+ });
371
+ const metaById = new Map(metaEntries);
372
+ for (const group of groups) {
373
+ const groupMetas = group.referenceIds.map((referenceId) => metaById.get(referenceId));
374
+ const resolvedGroupId = `${RESOLVED_CLIENT_REFERENCE_GROUP_PREFIX}${group.key}`;
375
+ referenceModules.set(resolvedGroupId, generateClientReferenceModule(groupMetas, loaderPath));
376
+ moduleKeys.set(resolvedGroupId, groupMetas.map((meta) => meta.referenceKey));
377
+ for (const meta of groupMetas) {
378
+ meta.groupChunkId = resolvedGroupId;
379
+ grouped.add(meta);
380
+ }
381
+ }
382
+ }
383
+ if (isClientBuild) {
384
+ const eager = [];
385
+ for (const [referenceId, meta] of metaEntries) {
386
+ if (grouped.has(meta)) continue;
387
+ if (grouping && groupingEnabled && grouping.isAlwaysLoadedClientModule(referenceId)) {
388
+ eager.push(meta);
389
+ continue;
390
+ }
391
+ const fileName = path.basename(meta.importId).replace(/\.[^.]*$/, "");
392
+ const moduleId = `${RESOLVED_CLIENT_REFERENCE_MODULE_PREFIX}${meta.referenceKey}/${fileName}`;
393
+ referenceModules.set(moduleId, generateClientReferenceModule([meta], loaderPath));
394
+ moduleKeys.set(moduleId, [meta.referenceKey]);
395
+ meta.groupChunkId = moduleId;
396
+ }
397
+ if (eager.length > 0) referenceModules.set(RESOLVED_EAGER_CLIENT_REFERENCES_ID, generateClientReferenceModule(eager, loaderPath));
398
+ referenceModules.set(RESOLVED_CLIENT_REFERENCE_CHUNKS_ID, generateClientReferenceChunksModule([...moduleKeys.keys()].sort()));
399
+ this.emitFile({
400
+ type: "chunk",
401
+ id: CLIENT_REFERENCE_CHUNKS_ID,
402
+ preserveSignature: "strict"
403
+ });
404
+ options.onClientReferenceModules?.(moduleKeys);
405
+ return {
406
+ code: generateBrowserClientReferencesModule(loaderPath, eager.length > 0),
407
+ map: null
408
+ };
409
+ }
410
+ return {
411
+ code: generateClientReferenceLoaders(metas) + routeClientReferencesExport,
412
+ map: null
413
+ };
414
+ }
415
+ },
416
+ async renderChunk(code, _chunk, _outputOptions, meta) {
417
+ if (this.environment.config.consumer !== "server") return null;
418
+ if (!code.includes(asyncPlaceholder)) return null;
419
+ const roots = /* @__PURE__ */ new Map();
420
+ await Promise.all(asyncCandidates.map(async ({ index, importId }) => {
421
+ let id = importId;
422
+ if (!importId.startsWith("\0") && !path.isAbsolute(importId)) {
423
+ const resolved = await this.resolve(importId);
424
+ id = resolved && !resolved.external ? resolved.id : void 0;
425
+ }
426
+ if (id === void 0) return;
427
+ let list = roots.get(id);
428
+ if (!list) roots.set(id, list = []);
429
+ list.push(index);
430
+ }));
431
+ const asyncIndices = [...collectAsyncModules({
432
+ roots: [...roots.keys()],
433
+ getModuleInfo: (id) => this.getModuleInfo(id),
434
+ chunks: Object.values(meta.chunks),
435
+ declaresSideEffects: createSideEffectsDeclarationCheck()
436
+ })].flatMap((id) => roots.get(id)).sort((a, b) => a - b);
437
+ const output = new MagicString(code);
438
+ for (const match of code.matchAll(asyncPlaceholderRe)) output.overwrite(match.index, match.index + match[0].length, JSON.stringify(asyncIndices));
439
+ return omitUnusedBuildSourcemap(this.environment, magicStringTransformResult(output));
440
+ }
441
+ };
442
+ }
443
+ /**
444
+ * Exports a null preload plan from the client-references virtual module when
445
+ * the app registers @vitejs/plugin-rsc itself (`rsc: false`), where vinext
446
+ * doesn't add the loaders plugin above. The App Router SSR entry imports the
447
+ * plan, and null makes it preload every client reference.
448
+ */
449
+ function createRouteClientReferencesFallbackPlugin() {
450
+ return {
451
+ name: "vinext:route-client-references-fallback",
452
+ enforce: "post",
453
+ transform: {
454
+ filter: { id: CLIENT_REFERENCES_ID_RE },
455
+ handler(code) {
456
+ if (this.environment.config.consumer !== "server") return null;
457
+ return {
458
+ code: `${code}\n${NO_ROUTE_CLIENT_REFERENCES_EXPORT}`,
459
+ map: null
460
+ };
461
+ }
42
462
  }
43
463
  };
44
464
  }
45
465
  //#endregion
46
- export { createRscClientReferenceLoadersPlugin };
466
+ export { RESOLVED_CLIENT_REFERENCE_CHUNKS_ID, RESOLVED_CLIENT_REFERENCE_MODULE_PREFIX, createRouteClientReferencesFallbackPlugin, createRscClientReferenceLoadersPlugin };
@@ -18,7 +18,9 @@ const VINEXT_OPTIMIZE_DEPS_EXCLUDE = Object.freeze([
18
18
  const SSR_EXTERNAL_REACT_ENTRIES = Object.freeze([
19
19
  "react",
20
20
  "react-dom",
21
+ "react-dom/server",
21
22
  "react-dom/server.edge",
23
+ "react-dom/static",
22
24
  "react-dom/static.edge",
23
25
  "react/jsx-runtime",
24
26
  "react/jsx-dev-runtime",
@@ -102,4 +102,5 @@ export declare function createSassAwareFileSystemLoader(): {
102
102
  };
103
103
  setResolvedConfig: (config: ResolvedConfig) => void;
104
104
  };
105
- //#endregion
105
+ //#endregion
106
+ export {};
@@ -18,4 +18,5 @@ type StripServerExportsResult = {
18
18
  * - crates/next-custom-transforms/src/transforms/strip_page_exports.rs
19
19
  */
20
20
  export declare function stripServerExports(code: string): StripServerExportsResult | null;
21
- //#endregion
21
+ //#endregion
22
+ export {};
@@ -11,4 +11,5 @@ type StyledJsxPluginOptions = {
11
11
  importModule?: (url: string) => Promise<NextSwcModule>;
12
12
  };
13
13
  export declare function createStyledJsxPlugin(initialProjectRoot: string, options?: StyledJsxPluginOptions): Plugin;
14
- //#endregion
14
+ //#endregion
15
+ export {};
@@ -28,4 +28,5 @@ export declare function omitUnusedBuildSourcemap<TMap = ReturnType<MagicString["
28
28
  code: string;
29
29
  map: TMap | null;
30
30
  } | null;
31
- //#endregion
31
+ //#endregion
32
+ export {};
@@ -25,4 +25,5 @@ export declare function getTypeofWindowReplacement(environment: EnvironmentLike)
25
25
  export declare function mayFoldChangeScannedImports(code: string): boolean;
26
26
  export declare function replaceTypeofWindow(code: string, replacement: WindowType, id?: string): MagicStringTransformResult<import("magic-string").SourceMap> | null;
27
27
  export declare function replaceConsumerEnvironmentConditions(code: string, replacements: ConsumerEnvironmentReplacements, id?: string): MagicStringTransformResult<import("magic-string").SourceMap> | null;
28
- //#endregion
28
+ //#endregion
29
+ export {};
@@ -5,6 +5,11 @@ type Options = {
5
5
  projectRoot: string;
6
6
  cacheRuntime: string;
7
7
  allowMissingRsc?: boolean;
8
+ /**
9
+ * The Server Actions encryption key vinext loaded for an auto-registered
10
+ * @vitejs/plugin-rsc, so reference names derive from the same key.
11
+ */
12
+ getEncryptionKey?: () => string | undefined;
8
13
  };
9
14
  type BrowserTransformOptions = {
10
15
  environmentName: string;
@@ -2,9 +2,10 @@ import path from "../deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
2
  import { parseProgramAsync } from "./ast-utils.js";
3
3
  import { magicStringTransformResult } from "./transform-result.js";
4
4
  import { NODE_MODULES_PATH_RE } from "../utils/path.js";
5
+ import { getServerActionsKeyCacheFsDeny, loadOrGenerateServerActionsEncryptionKey } from "../build/server-actions-encryption-key.js";
5
6
  import { createRequire } from "node:module";
6
7
  import { pathToFileURL } from "node:url";
7
- import { createHmac, randomBytes } from "node:crypto";
8
+ import { createHmac } from "node:crypto";
8
9
  //#region src/plugins/use-cache-callable.ts
9
10
  const PLUGIN_NAME = "vinext:server-function-directives";
10
11
  const SOURCE_MODULE_ID_RE = /\.(?:tsx?|jsx?|mjs)(?:\?.*)?$/;
@@ -114,21 +115,33 @@ function transformBrowserModule(transforms, code, ast, id, moduleDirective, opti
114
115
  referenceNames: result.exportNames.map(referenceName)
115
116
  };
116
117
  }
118
+ /**
119
+ * Ported from Next.js: crates/next-custom-transforms/src/transforms/server_actions.rs
120
+ * salts server-reference IDs with the encryption key (`serverReferenceHashSalt`
121
+ * in packages/next/src/build/webpack-config.ts), so rebuilds of identical
122
+ * source emit identical client chunks. See
123
+ * loadOrGenerateServerActionsEncryptionKey for where the key comes from. The
124
+ * secret is derived under a label rather than used directly so the reference
125
+ * names reveal nothing about the key.
126
+ */
127
+ function createReferenceSecret(encryptionKey) {
128
+ return createHmac("sha256", encryptionKey).update("vinext use cache reference").digest();
129
+ }
117
130
  async function createUseCacheCallablePlugin(options) {
118
131
  const rscModulePath = resolvePluginRscModule(options.projectRoot, "@vitejs/plugin-rsc");
119
132
  const transformsPath = resolvePluginRscModule(options.projectRoot, "@vitejs/plugin-rsc/transforms");
120
133
  const rscModule = await import(pathToFileURL(rscModulePath).href);
121
134
  const transforms = await import(pathToFileURL(transformsPath).href);
122
- const referenceSecret = randomBytes(32);
135
+ let referenceSecret;
123
136
  let manager;
124
- async function analyzeModule(manager, code, id) {
137
+ async function analyzeModule(manager, secret, code, id) {
125
138
  const ast = await parseProgramAsync(code);
126
139
  const moduleDirective = findModuleUseCacheDirective(ast);
127
140
  const useServerBoundary = transforms.hasDirective(ast.body, "use server");
128
141
  if (moduleDirective && useServerBoundary) throw new Error(`A module cannot contain both ${JSON.stringify(moduleDirective)} and "use server" directives.`);
129
142
  const reference = manager.serverReferences.resolve(id, "rsc");
130
143
  const relativeImportId = manager.toRelativeId(reference.importId);
131
- const secureExportName = (name) => `$$vinext_cache_${createHmac("sha256", referenceSecret).update(relativeImportId).update("\0").update(name).digest("hex")}`;
144
+ const secureExportName = (name) => `$$vinext_cache_${createHmac("sha256", secret).update(relativeImportId).update("\0").update(name).digest("hex")}`;
132
145
  return {
133
146
  ast,
134
147
  moduleDirective,
@@ -141,11 +154,12 @@ async function createUseCacheCallablePlugin(options) {
141
154
  name: PLUGIN_NAME,
142
155
  api: { async transformWorkerModule(code, id, createReference) {
143
156
  if (!code.includes("use cache")) return;
144
- if (!manager) {
157
+ const secret = referenceSecret;
158
+ if (!manager || !secret) {
145
159
  if (findModuleUseCacheDirective(await parseProgramAsync(code))) throw new Error("vinext: cannot compile a \"use cache\" module in a Web Worker without @vitejs/plugin-rsc.");
146
160
  return;
147
161
  }
148
- const { ast, moduleDirective, useServerBoundary, reference, secureExportName } = await analyzeModule(manager, code, id);
162
+ const { ast, moduleDirective, useServerBoundary, reference, secureExportName } = await analyzeModule(manager, secret, code, id);
149
163
  if (useServerBoundary) return;
150
164
  return transformBrowserModule(transforms, code, ast, id, moduleDirective, {
151
165
  environmentName: "worker",
@@ -154,10 +168,17 @@ async function createUseCacheCallablePlugin(options) {
154
168
  createReference
155
169
  })?.output;
156
170
  } },
171
+ config(config) {
172
+ return { server: { fs: { deny: getServerActionsKeyCacheFsDeny(config.server?.fs?.deny) } } };
173
+ },
157
174
  configResolved(config) {
158
175
  const pluginApi = rscModule.getPluginApi(config);
159
176
  const hasRscPlugin = config.plugins.some((plugin) => plugin.name === "rsc");
160
177
  if (!pluginApi && options.allowMissingRsc && !hasRscPlugin) return;
178
+ referenceSecret ??= createReferenceSecret(options.getEncryptionKey?.() ?? loadOrGenerateServerActionsEncryptionKey({
179
+ root: config.root,
180
+ isBuild: config.command === "build"
181
+ }));
161
182
  if (!pluginApi?.manager.serverReferences) throw new Error("vinext: callable use cache requires @vitejs/plugin-rsc 0.5.34 or newer.");
162
183
  if (options.allowMissingRsc) {
163
184
  const useCacheIndex = config.plugins.findIndex((plugin) => plugin.name === PLUGIN_NAME);
@@ -172,12 +193,13 @@ async function createUseCacheCallablePlugin(options) {
172
193
  exclude: [NODE_MODULES_PATH_RE, RESOLVED_VIRTUAL_MODULE_ID_RE]
173
194
  } },
174
195
  async handler(code, id) {
175
- if (!manager) return;
196
+ const secret = referenceSecret;
197
+ if (!manager || !secret) return;
176
198
  if (!code.includes("use cache")) {
177
199
  manager.serverReferences.deleteClaim(PLUGIN_NAME, id);
178
200
  return;
179
201
  }
180
- const { ast, moduleDirective, useServerBoundary, reference, secureExportName } = await analyzeModule(manager, code, id);
202
+ const { ast, moduleDirective, useServerBoundary, reference, secureExportName } = await analyzeModule(manager, secret, code, id);
181
203
  if (!(this.environment.name === "rsc")) {
182
204
  if (useServerBoundary) {
183
205
  manager.serverReferences.deleteClaim(PLUGIN_NAME, id);
@@ -1,5 +1,6 @@
1
1
  import { Plugin } from "vite";
2
2
  //#region src/plugins/worker-image-imports.d.ts
3
+ export declare const WORKER_IMAGE_METADATA_PREFIX = "\0vinext-worker-image-meta:";
3
4
  /**
4
5
  * Preserve Next.js's StaticImageData shape for dynamic image imports inside
5
6
  * Vite worker graphs. Worker builds use their own plugin container, so the