vinext 1.0.0-beta.9 → 1.0.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 (828) hide show
  1. package/README.md +150 -92
  2. package/THIRD_PARTY_LICENSES.md +51 -0
  3. package/dist/_virtual/_rolldown/runtime.js +25 -0
  4. package/dist/build/action-owner-manifest.d.ts +8 -9
  5. package/dist/build/action-owner-manifest.js +23 -5
  6. package/dist/build/assets-ignore.d.ts +3 -4
  7. package/dist/build/clean-output.d.ts +2 -3
  8. package/dist/build/client-build-config.d.ts +40 -12
  9. package/dist/build/client-build-config.js +76 -6
  10. package/dist/build/css-url-assets.d.ts +4 -5
  11. package/dist/build/css-url-assets.js +5 -2
  12. package/dist/build/google-fonts/build-url.d.ts +3 -4
  13. package/dist/build/google-fonts/fallback-metrics.d.ts +3 -4
  14. package/dist/build/google-fonts/find-font-files-in-css.d.ts +2 -3
  15. package/dist/build/google-fonts/font-metadata.d.ts +2 -3
  16. package/dist/build/google-fonts/get-axes.d.ts +2 -3
  17. package/dist/build/google-fonts/sort-variants.d.ts +2 -3
  18. package/dist/build/google-fonts/validate.d.ts +2 -3
  19. package/dist/build/google-fonts/validate.js +8 -4
  20. package/dist/build/inject-pregenerated-paths.d.ts +2 -3
  21. package/dist/build/inject-pregenerated-paths.js +16 -14
  22. package/dist/build/inline-css.d.ts +3 -4
  23. package/dist/build/layout-classification-types.d.ts +4 -5
  24. package/dist/build/layout-classification.d.ts +7 -8
  25. package/dist/build/lifecycle.d.ts +42 -0
  26. package/dist/build/lifecycle.js +253 -0
  27. package/dist/build/module-dependency-cache.d.ts +2 -3
  28. package/dist/build/next-client-runtime-manifests.d.ts +4 -5
  29. package/dist/build/nitro-route-rules.d.ts +6 -7
  30. package/dist/build/nitro-route-rules.js +1 -1
  31. package/dist/build/pages-client-assets-module.d.ts +4 -8
  32. package/dist/build/pages-client-assets-module.js +7 -14
  33. package/dist/build/precompress.d.ts +2 -3
  34. package/dist/build/precompress.js +1 -1
  35. package/dist/build/prerender-cloudflare-loader.d.ts +4 -0
  36. package/dist/build/prerender-cloudflare-loader.js +49 -0
  37. package/dist/build/prerender-paths.d.ts +36 -11
  38. package/dist/build/prerender-paths.js +274 -102
  39. package/dist/build/prerender-phase.d.ts +2 -3
  40. package/dist/build/prerender-server-entry.js +11 -3
  41. package/dist/build/prerender-server-pool.d.ts +9 -6
  42. package/dist/build/prerender-server-pool.js +8 -5
  43. package/dist/build/prerender.d.ts +73 -16
  44. package/dist/build/prerender.js +272 -80
  45. package/dist/build/preview-credentials.d.ts +5 -6
  46. package/dist/build/preview-credentials.js +2 -2
  47. package/dist/build/public-dir-conflict.d.ts +5 -6
  48. package/dist/build/public-dir-conflict.js +2 -1
  49. package/dist/build/report.d.ts +24 -20
  50. package/dist/build/report.js +10 -2
  51. package/dist/build/route-classification-injector.d.ts +2 -3
  52. package/dist/build/route-classification-manifest.d.ts +5 -6
  53. package/dist/build/run-prerender.d.ts +11 -9
  54. package/dist/build/run-prerender.js +26 -16
  55. package/dist/build/server-entry.d.ts +6 -0
  56. package/dist/build/server-entry.js +34 -0
  57. package/dist/build/server-manifest.d.ts +8 -3
  58. package/dist/build/server-manifest.js +14 -2
  59. package/dist/build/ssr-manifest.d.ts +5 -6
  60. package/dist/build/standalone.d.ts +2 -3
  61. package/dist/build/standalone.js +2 -2
  62. package/dist/build/static-export.d.ts +6 -7
  63. package/dist/cache/cache-adapters-virtual.d.ts +60 -20
  64. package/dist/cache/cache-adapters-virtual.js +50 -7
  65. package/dist/check.d.ts +11 -10
  66. package/dist/check.js +467 -176
  67. package/dist/cli-args.d.ts +7 -16
  68. package/dist/cli-args.js +2 -45
  69. package/dist/cli-dev-config.d.ts +10 -7
  70. package/dist/cli-dev-config.js +160 -3
  71. package/dist/cli.js +124 -442
  72. package/dist/client/app-nav-failure-handler.d.ts +6 -7
  73. package/dist/client/browser-globals.d.ts +4 -0
  74. package/dist/client/browser-globals.js +5 -0
  75. package/dist/client/client-rewrite-matcher.d.ts +2 -3
  76. package/dist/client/client-rewrites.d.ts +4 -5
  77. package/dist/client/dev-error-overlay-store.d.ts +13 -14
  78. package/dist/client/dev-error-overlay.d.ts +15 -15
  79. package/dist/client/dev-error-overlay.js +8 -5
  80. package/dist/client/instrumentation-client-inject.d.ts +3 -4
  81. package/dist/client/instrumentation-client-state.d.ts +5 -6
  82. package/dist/client/instrumentation-client.d.ts +3 -4
  83. package/dist/client/navigation-runtime.d.ts +20 -17
  84. package/dist/client/navigation-runtime.js +4 -3
  85. package/dist/client/pages-router-link-navigation.d.ts +4 -5
  86. package/dist/client/react-instance.d.ts +2 -3
  87. package/dist/client/validate-module-path.d.ts +2 -3
  88. package/dist/client/vinext-next-data.d.ts +7 -10
  89. package/dist/client/window-next.d.ts +4 -5
  90. package/dist/config/config-matchers.d.ts +16 -16
  91. package/dist/config/config-matchers.js +2 -4
  92. package/dist/config/dotenv.d.ts +3 -4
  93. package/dist/config/dotenv.js +14 -2
  94. package/dist/config/next-config.d.ts +31 -27
  95. package/dist/config/next-config.js +163 -16
  96. package/dist/config/prerender.d.ts +20 -16
  97. package/dist/config/prerender.js +10 -4
  98. package/dist/config/request-context.d.ts +5 -6
  99. package/dist/config/server-external-packages.d.ts +14 -3
  100. package/dist/config/server-external-packages.js +37 -3
  101. package/dist/config/tsconfig-paths.d.ts +3 -4
  102. package/dist/deps/.pnpm/ignore@5.3.2/deps/ignore/index.js +189 -0
  103. package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +1057 -0
  104. package/dist/entries/app-browser-entry.d.ts +4 -5
  105. package/dist/entries/app-browser-entry.js +1 -3
  106. package/dist/entries/app-rsc-entry.d.ts +10 -3
  107. package/dist/entries/app-rsc-entry.js +503 -51
  108. package/dist/entries/app-rsc-manifest.d.ts +4 -3
  109. package/dist/entries/app-rsc-manifest.js +26 -8
  110. package/dist/entries/app-ssr-entry.d.ts +2 -3
  111. package/dist/entries/app-ssr-entry.js +8 -1
  112. package/dist/entries/pages-client-entry.d.ts +3 -3
  113. package/dist/entries/pages-client-entry.js +17 -2
  114. package/dist/entries/pages-server-entry.d.ts +13 -3
  115. package/dist/entries/pages-server-entry.js +234 -33
  116. package/dist/entries/runtime-entry-module.d.ts +4 -5
  117. package/dist/image/image-adapters-virtual.d.ts +4 -5
  118. package/dist/index.d.ts +10 -11
  119. package/dist/index.js +848 -255
  120. package/dist/init-cloudflare.d.ts +26 -17
  121. package/dist/init-cloudflare.js +711 -103
  122. package/dist/init-platform.d.ts +26 -22
  123. package/dist/init-platform.js +85 -29
  124. package/dist/init.d.ts +19 -13
  125. package/dist/init.js +126 -42
  126. package/dist/plugins/action-owner-manifest.d.ts +3 -4
  127. package/dist/plugins/action-owner-manifest.js +10 -3
  128. package/dist/plugins/ast-scope.d.ts +10 -11
  129. package/dist/plugins/ast-scope.js +10 -22
  130. package/dist/plugins/ast-utils.d.ts +16 -29
  131. package/dist/plugins/ast-utils.js +27 -71
  132. package/dist/plugins/async-hooks-stub.d.ts +2 -3
  133. package/dist/plugins/client-reference-dedup.d.ts +4 -5
  134. package/dist/plugins/commonjs-syntax.d.ts +16 -0
  135. package/dist/plugins/commonjs-syntax.js +22 -0
  136. package/dist/plugins/css-data-url.d.ts +2 -3
  137. package/dist/plugins/css-module-imports.d.ts +3 -4
  138. package/dist/plugins/css-module-imports.js +1 -1
  139. package/dist/plugins/dynamic-preload-metadata.d.ts +3 -4
  140. package/dist/plugins/dynamic-preload-metadata.js +55 -154
  141. package/dist/plugins/environment.d.ts +2 -3
  142. package/dist/plugins/extensionless-dynamic-import.d.ts +2 -3
  143. package/dist/plugins/extensionless-dynamic-import.js +6 -10
  144. package/dist/plugins/fonts.d.ts +10 -11
  145. package/dist/plugins/fonts.js +4 -3
  146. package/dist/plugins/ignore-dynamic-requests.d.ts +14 -4
  147. package/dist/plugins/ignore-dynamic-requests.js +113 -91
  148. package/dist/plugins/import-meta-url.d.ts +6 -7
  149. package/dist/plugins/import-meta-url.js +36 -48
  150. package/dist/plugins/instrumentation-client.d.ts +3 -3
  151. package/dist/plugins/instrumentation-client.js +46 -10
  152. package/dist/plugins/middleware-export-validation.d.ts +3 -4
  153. package/dist/plugins/middleware-export-validation.js +3 -3
  154. package/dist/plugins/middleware-server-only.d.ts +2 -3
  155. package/dist/plugins/og-asset-ownership.d.ts +5 -4
  156. package/dist/plugins/og-asset-ownership.js +24 -13
  157. package/dist/plugins/og-assets.d.ts +22 -5
  158. package/dist/plugins/og-assets.js +82 -21
  159. package/dist/plugins/og-harfbuzz.d.ts +24 -0
  160. package/dist/plugins/og-harfbuzz.js +271 -0
  161. package/dist/plugins/optimize-imports.d.ts +7 -7
  162. package/dist/plugins/optimize-imports.js +34 -45
  163. package/dist/plugins/pages-node-externals.d.ts +2 -3
  164. package/dist/plugins/pages-node-externals.js +6 -11
  165. package/dist/plugins/postcss.d.ts +8 -4
  166. package/dist/plugins/postcss.js +1 -1
  167. package/dist/plugins/remove-console.d.ts +2 -3
  168. package/dist/plugins/remove-console.js +0 -1
  169. package/dist/plugins/require-condition-resolution.d.ts +3 -4
  170. package/dist/plugins/require-condition-resolution.js +17 -18
  171. package/dist/plugins/require-context.d.ts +3 -3
  172. package/dist/plugins/require-context.js +41 -22
  173. package/dist/plugins/rsc-client-reference-loaders.d.ts +2 -3
  174. package/dist/plugins/rsc-client-shim-excludes.d.ts +4 -5
  175. package/dist/plugins/rsc-client-shim-excludes.js +1 -0
  176. package/dist/plugins/rsc-reference-validation-normalizer.d.ts +2 -3
  177. package/dist/plugins/sass.d.ts +7 -8
  178. package/dist/plugins/sass.js +7 -4
  179. package/dist/plugins/scan-build-css.d.ts +12 -0
  180. package/dist/plugins/scan-build-css.js +39 -0
  181. package/dist/plugins/server-externals-manifest.d.ts +2 -3
  182. package/dist/plugins/strip-server-exports.d.ts +7 -6
  183. package/dist/plugins/strip-server-exports.js +4 -2
  184. package/dist/plugins/styled-jsx.d.ts +2 -3
  185. package/dist/plugins/styled-jsx.js +7 -7
  186. package/dist/plugins/transform-cache.d.ts +2 -3
  187. package/dist/plugins/transform-result.d.ts +21 -4
  188. package/dist/plugins/transform-result.js +23 -2
  189. package/dist/plugins/transitive-externals.d.ts +2 -3
  190. package/dist/plugins/typeof-window.d.ts +16 -7
  191. package/dist/plugins/typeof-window.js +62 -39
  192. package/dist/plugins/use-cache-callable.d.ts +2 -5
  193. package/dist/plugins/use-cache-callable.js +43 -22
  194. package/dist/plugins/wasm-module-import.d.ts +2 -3
  195. package/dist/plugins/worker-image-imports.d.ts +2 -3
  196. package/dist/plugins/worker-image-imports.js +6 -8
  197. package/dist/routing/app-route-graph.d.ts +18 -19
  198. package/dist/routing/app-route-graph.js +5 -6
  199. package/dist/routing/app-route-ids.d.ts +3 -0
  200. package/dist/routing/app-route-ids.js +6 -0
  201. package/dist/routing/app-router.d.ts +19 -6
  202. package/dist/routing/app-router.js +24 -2
  203. package/dist/routing/file-matcher.d.ts +9 -10
  204. package/dist/routing/pages-router.d.ts +6 -6
  205. package/dist/routing/pages-router.js +1 -1
  206. package/dist/routing/route-matching.d.ts +4 -5
  207. package/dist/routing/route-matching.js +4 -2
  208. package/dist/routing/route-pattern.d.ts +13 -14
  209. package/dist/routing/route-trie.d.ts +5 -6
  210. package/dist/routing/route-validation.d.ts +3 -4
  211. package/dist/routing/route-validation.js +12 -11
  212. package/dist/routing/utils.d.ts +13 -14
  213. package/dist/server/accept-encoding.d.ts +9 -10
  214. package/dist/server/api-handler.d.ts +2 -3
  215. package/dist/server/api-handler.js +9 -6
  216. package/dist/server/app-action-forwarding.d.ts +3 -4
  217. package/dist/server/app-action-forwarding.js +1 -1
  218. package/dist/server/app-action-request.d.ts +2 -3
  219. package/dist/server/app-bfcache-id.d.ts +4 -4
  220. package/dist/server/app-bfcache-id.js +7 -1
  221. package/dist/server/app-bfcache-identity.d.ts +8 -9
  222. package/dist/server/app-bfcache-identity.js +1 -2
  223. package/dist/server/app-browser-action-result.d.ts +15 -16
  224. package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -3
  225. package/dist/server/app-browser-entry.js +91 -36
  226. package/dist/server/app-browser-error.d.ts +5 -6
  227. package/dist/server/app-browser-error.js +9 -3
  228. package/dist/server/app-browser-history-controller.d.ts +4 -5
  229. package/dist/server/app-browser-hydration.d.ts +16 -6
  230. package/dist/server/app-browser-hydration.js +15 -2
  231. package/dist/server/app-browser-interception-context.d.ts +3 -4
  232. package/dist/server/app-browser-mpa-navigation.d.ts +4 -5
  233. package/dist/server/app-browser-navigation-abort.d.ts +3 -4
  234. package/dist/server/app-browser-navigation-controller.d.ts +8 -8
  235. package/dist/server/app-browser-navigation-controller.js +9 -5
  236. package/dist/server/app-browser-navigation-response.d.ts +2 -3
  237. package/dist/server/app-browser-popstate.d.ts +4 -5
  238. package/dist/server/app-browser-prefetch-response.d.ts +5 -6
  239. package/dist/server/app-browser-rsc-redirect.d.ts +4 -5
  240. package/dist/server/app-browser-server-action-client.d.ts +7 -6
  241. package/dist/server/app-browser-server-action-client.js +9 -5
  242. package/dist/server/app-browser-server-action-navigation.d.ts +2 -3
  243. package/dist/server/app-browser-state.d.ts +17 -17
  244. package/dist/server/app-browser-state.js +7 -3
  245. package/dist/server/app-browser-stream.d.ts +5 -6
  246. package/dist/server/app-browser-stream.js +8 -6
  247. package/dist/server/app-browser-supplemental-refresh.d.ts +11 -12
  248. package/dist/server/app-browser-visible-commit.d.ts +6 -7
  249. package/dist/server/app-client-reference-preloader.d.ts +2 -3
  250. package/dist/server/app-elements-wire-key.d.ts +25 -0
  251. package/dist/server/app-elements-wire-key.js +69 -0
  252. package/dist/server/app-elements-wire.d.ts +34 -53
  253. package/dist/server/app-elements-wire.js +4 -75
  254. package/dist/server/app-elements.d.ts +5 -5
  255. package/dist/server/app-elements.js +1 -1
  256. package/dist/server/app-fallback-renderer.d.ts +4 -4
  257. package/dist/server/app-fallback-renderer.js +6 -6
  258. package/dist/server/app-fetch-tracing.d.ts +15 -0
  259. package/dist/server/app-fetch-tracing.js +38 -0
  260. package/dist/server/app-history-state.d.ts +25 -27
  261. package/dist/server/app-history-state.js +21 -16
  262. package/dist/server/app-hook-warning-suppression.d.ts +2 -3
  263. package/dist/server/app-hydration-cache-publication.d.ts +3 -4
  264. package/dist/server/app-inline-css-client.d.ts +3 -4
  265. package/dist/server/app-interception-context-header.d.ts +2 -3
  266. package/dist/server/app-layout-param-observation.d.ts +7 -8
  267. package/dist/server/app-metadata-tracing.d.ts +12 -0
  268. package/dist/server/app-metadata-tracing.js +17 -0
  269. package/dist/server/app-middleware.d.ts +7 -7
  270. package/dist/server/app-middleware.js +2 -3
  271. package/dist/server/app-mounted-slots-header.d.ts +2 -3
  272. package/dist/server/app-mounted-slots-header.js +2 -2
  273. package/dist/server/app-optimistic-routing.d.ts +10 -11
  274. package/dist/server/app-optimistic-routing.js +3 -2
  275. package/dist/server/app-page-boundary-render.d.ts +6 -6
  276. package/dist/server/app-page-boundary-render.js +10 -4
  277. package/dist/server/app-page-boundary.d.ts +9 -10
  278. package/dist/server/app-page-boundary.js +1 -1
  279. package/dist/server/app-page-cache-finalizer.d.ts +18 -9
  280. package/dist/server/app-page-cache-finalizer.js +51 -16
  281. package/dist/server/app-page-cache-render.d.ts +8 -5
  282. package/dist/server/app-page-cache-render.js +22 -4
  283. package/dist/server/app-page-cache.d.ts +28 -9
  284. package/dist/server/app-page-cache.js +95 -24
  285. package/dist/server/app-page-dispatch.d.ts +34 -12
  286. package/dist/server/app-page-dispatch.js +181 -64
  287. package/dist/server/app-page-element-builder.d.ts +13 -11
  288. package/dist/server/app-page-element-builder.js +104 -61
  289. package/dist/server/app-page-execution.d.ts +14 -14
  290. package/dist/server/app-page-execution.js +11 -7
  291. package/dist/server/app-page-head.d.ts +19 -16
  292. package/dist/server/app-page-head.js +25 -25
  293. package/dist/server/app-page-http-access-fallback-metadata.d.ts +6 -5
  294. package/dist/server/app-page-http-access-fallback-metadata.js +9 -2
  295. package/dist/server/app-page-method.d.ts +5 -11
  296. package/dist/server/app-page-method.js +2 -9
  297. package/dist/server/app-page-params.d.ts +5 -6
  298. package/dist/server/app-page-ppr-runtime.d.ts +2 -2
  299. package/dist/server/app-page-probe.d.ts +5 -6
  300. package/dist/server/app-page-probe.js +5 -4
  301. package/dist/server/app-page-render-identity.d.ts +4 -5
  302. package/dist/server/app-page-render-observation.d.ts +8 -9
  303. package/dist/server/app-page-render-observation.js +1 -1
  304. package/dist/server/app-page-render.d.ts +41 -6
  305. package/dist/server/app-page-render.js +171 -24
  306. package/dist/server/app-page-request.d.ts +10 -9
  307. package/dist/server/app-page-request.js +16 -12
  308. package/dist/server/app-page-response.d.ts +20 -9
  309. package/dist/server/app-page-response.js +30 -12
  310. package/dist/server/app-page-route-wiring.d.ts +15 -15
  311. package/dist/server/app-page-route-wiring.js +31 -24
  312. package/dist/server/app-page-search-params-observation.d.ts +26 -5
  313. package/dist/server/app-page-search-params-observation.js +43 -7
  314. package/dist/server/app-page-segment-plan.d.ts +2 -3
  315. package/dist/server/app-page-segment-state.d.ts +11 -12
  316. package/dist/server/app-page-stream.d.ts +27 -11
  317. package/dist/server/app-page-stream.js +34 -6
  318. package/dist/server/app-page-tracing.d.ts +33 -0
  319. package/dist/server/app-page-tracing.js +50 -0
  320. package/dist/server/app-pages-bridge.d.ts +6 -6
  321. package/dist/server/app-pages-bridge.js +18 -4
  322. package/dist/server/app-post-middleware-context.d.ts +2 -3
  323. package/dist/server/app-ppr-fallback-shell-render.d.ts +3 -4
  324. package/dist/server/app-ppr-fallback-shell-render.js +3 -2
  325. package/dist/server/app-ppr-fallback-shell.d.ts +6 -7
  326. package/dist/server/app-prerender-endpoints.d.ts +5 -5
  327. package/dist/server/app-prerender-endpoints.js +3 -1
  328. package/dist/server/app-prerender-static-params.d.ts +15 -7
  329. package/dist/server/app-prerender-static-params.js +24 -9
  330. package/dist/server/app-render-abort-error.d.ts +3 -0
  331. package/dist/server/app-render-abort-error.js +8 -0
  332. package/dist/server/app-render-dependency.d.ts +14 -13
  333. package/dist/server/app-render-dependency.js +5 -1
  334. package/dist/server/app-request-context.d.ts +3 -4
  335. package/dist/server/app-request-stage-context.d.ts +5 -0
  336. package/dist/server/app-request-stage-context.js +11 -0
  337. package/dist/server/app-request-stage-dispatch.d.ts +25 -0
  338. package/dist/server/app-request-stage-dispatch.js +54 -0
  339. package/dist/server/app-request-stage-independent-entry.d.ts +8 -0
  340. package/dist/server/app-request-stage-independent-entry.js +112 -0
  341. package/dist/server/app-response-header-provenance.d.ts +13 -7
  342. package/dist/server/app-response-header-provenance.js +34 -1
  343. package/dist/server/app-response-stage-entry.d.ts +9 -0
  344. package/dist/server/app-response-stage-entry.js +87 -0
  345. package/dist/server/app-route-handler-cache.d.ts +4 -4
  346. package/dist/server/app-route-handler-cache.js +51 -35
  347. package/dist/server/app-route-handler-dispatch.d.ts +3 -3
  348. package/dist/server/app-route-handler-dispatch.js +77 -56
  349. package/dist/server/app-route-handler-execution.d.ts +26 -14
  350. package/dist/server/app-route-handler-execution.js +94 -28
  351. package/dist/server/app-route-handler-middleware-context.d.ts +8 -0
  352. package/dist/server/app-route-handler-middleware-context.js +15 -0
  353. package/dist/server/app-route-handler-policy.d.ts +11 -11
  354. package/dist/server/app-route-handler-policy.js +2 -2
  355. package/dist/server/app-route-handler-response.d.ts +9 -10
  356. package/dist/server/app-route-handler-response.js +14 -3
  357. package/dist/server/app-route-handler-runtime.d.ts +9 -10
  358. package/dist/server/app-route-handler-runtime.js +20 -16
  359. package/dist/server/app-route-module-loader.d.ts +6 -7
  360. package/dist/server/app-route-request-built-ins.d.ts +3 -4
  361. package/dist/server/app-route-tree-prefetch.d.ts +6 -7
  362. package/dist/server/app-route-tree-prefetch.js +2 -1
  363. package/dist/server/app-router-entry.d.ts +4 -1
  364. package/dist/server/app-router-entry.js +33 -17
  365. package/dist/server/app-rsc-cache-busting.d.ts +34 -27
  366. package/dist/server/app-rsc-cache-busting.js +14 -2
  367. package/dist/server/app-rsc-combined-handler.d.ts +9 -0
  368. package/dist/server/app-rsc-combined-handler.js +11 -0
  369. package/dist/server/app-rsc-embedded-chunks.d.ts +6 -7
  370. package/dist/server/app-rsc-error-handler.d.ts +12 -6
  371. package/dist/server/app-rsc-error-handler.js +15 -6
  372. package/dist/server/app-rsc-errors.d.ts +11 -9
  373. package/dist/server/app-rsc-errors.js +14 -16
  374. package/dist/server/app-rsc-handler.d.ts +32 -6
  375. package/dist/server/app-rsc-handler.js +425 -64
  376. package/dist/server/app-rsc-redirect-flight.d.ts +4 -5
  377. package/dist/server/app-rsc-render-mode.d.ts +8 -9
  378. package/dist/server/app-rsc-request-normalization.d.ts +3 -3
  379. package/dist/server/app-rsc-request-normalization.js +5 -3
  380. package/dist/server/app-rsc-response-finalizer.d.ts +8 -5
  381. package/dist/server/app-rsc-response-finalizer.js +10 -7
  382. package/dist/server/app-rsc-response-stage.d.ts +6 -0
  383. package/dist/server/app-rsc-response-stage.js +251 -0
  384. package/dist/server/app-rsc-route-matching.d.ts +3 -4
  385. package/dist/server/app-rsc-route-matching.js +3 -2
  386. package/dist/server/app-rsc-state-fingerprint.d.ts +3 -4
  387. package/dist/server/app-rsc-vary.d.ts +16 -0
  388. package/dist/server/app-rsc-vary.js +31 -0
  389. package/dist/server/app-segment-config.d.ts +119 -7
  390. package/dist/server/app-segment-config.js +242 -2
  391. package/dist/server/app-server-action-execution.d.ts +18 -13
  392. package/dist/server/app-server-action-execution.js +86 -33
  393. package/dist/server/app-ssr-entry.d.ts +14 -4
  394. package/dist/server/app-ssr-entry.js +62 -15
  395. package/dist/server/app-ssr-error-meta.d.ts +3 -4
  396. package/dist/server/app-ssr-error-meta.js +2 -1
  397. package/dist/server/app-ssr-router-instance.d.ts +2 -3
  398. package/dist/server/app-ssr-search-params-gate.d.ts +20 -0
  399. package/dist/server/app-ssr-search-params-gate.js +54 -0
  400. package/dist/server/app-ssr-stream.d.ts +13 -9
  401. package/dist/server/app-ssr-stream.js +34 -8
  402. package/dist/server/app-static-generation.d.ts +4 -5
  403. package/dist/server/app-visited-response-cache.d.ts +11 -12
  404. package/dist/server/app-visited-response-cache.js +2 -2
  405. package/dist/server/app-worker-stages.d.ts +112 -0
  406. package/dist/server/app-worker-stages.js +105 -0
  407. package/dist/server/artifact-compatibility.d.ts +11 -12
  408. package/dist/server/before-interactive-head.d.ts +2 -3
  409. package/dist/server/bfcache-identity.d.ts +7 -8
  410. package/dist/server/cache-control.d.ts +35 -13
  411. package/dist/server/cache-control.js +64 -6
  412. package/dist/server/cache-headers.d.ts +3 -4
  413. package/dist/server/cache-proof.d.ts +75 -70
  414. package/dist/server/cache-proof.js +9 -1
  415. package/dist/server/cacheability-limits.d.ts +4 -5
  416. package/dist/server/cacheability-limits.js +2 -2
  417. package/dist/server/cacheability-manifest.d.ts +42 -16
  418. package/dist/server/cacheability-manifest.js +60 -10
  419. package/dist/server/cacheability-request.d.ts +37 -8
  420. package/dist/server/cacheability-request.js +192 -90
  421. package/dist/server/client-reuse-manifest.d.ts +17 -18
  422. package/dist/server/client-reuse-manifest.js +2 -2
  423. package/dist/server/client-trace-metadata.d.ts +9 -6
  424. package/dist/server/client-trace-metadata.js +27 -15
  425. package/dist/server/cloudflare-workers-tracing.d.ts +1 -0
  426. package/dist/server/cloudflare-workers-tracing.js +8 -0
  427. package/dist/server/config-headers.d.ts +19 -5
  428. package/dist/server/config-headers.js +25 -11
  429. package/dist/server/cookie-utils.d.ts +2 -3
  430. package/dist/server/csp.d.ts +5 -6
  431. package/dist/server/default-global-error-module.d.ts +2 -3
  432. package/dist/server/default-global-not-found-module.d.ts +2 -3
  433. package/dist/server/default-not-found-module.d.ts +2 -3
  434. package/dist/server/defer-until-stream-consumed.d.ts +2 -3
  435. package/dist/server/defer-until-stream-consumed.js +2 -1
  436. package/dist/server/dev-initial-server-error.d.ts +3 -4
  437. package/dist/server/dev-initial-server-error.js +2 -1
  438. package/dist/server/dev-lockfile.d.ts +7 -8
  439. package/dist/server/dev-lockfile.js +4 -1
  440. package/dist/server/dev-module-runner.d.ts +2 -3
  441. package/dist/server/dev-origin-check.d.ts +5 -6
  442. package/dist/server/dev-route-files.d.ts +2 -3
  443. package/dist/server/dev-server.d.ts +4 -5
  444. package/dist/server/dev-server.js +141 -64
  445. package/dist/server/dev-stack-sourcemap.d.ts +7 -7
  446. package/dist/server/dev-stack-sourcemap.js +1 -1
  447. package/dist/server/document-initial-head.d.ts +3 -4
  448. package/dist/server/edge-api-runtime.d.ts +4 -5
  449. package/dist/server/fetch-handler.d.ts +3 -2
  450. package/dist/server/fetch-handler.js +3 -18
  451. package/dist/server/file-based-metadata.d.ts +2 -3
  452. package/dist/server/framework-tracer.d.ts +46 -0
  453. package/dist/server/framework-tracer.js +125 -0
  454. package/dist/server/fully-buffered-response.d.ts +11 -0
  455. package/dist/server/fully-buffered-response.js +19 -0
  456. package/dist/server/headers.d.ts +56 -61
  457. package/dist/server/headers.js +22 -31
  458. package/dist/server/html.d.ts +6 -27
  459. package/dist/server/html.js +16 -1
  460. package/dist/server/http-conditional.d.ts +5 -6
  461. package/dist/server/http-date.d.ts +2 -3
  462. package/dist/server/http-error-responses.d.ts +9 -10
  463. package/dist/server/http-error-responses.js +1 -0
  464. package/dist/server/http-range.d.ts +4 -5
  465. package/dist/server/hybrid-route-priority.d.ts +4 -5
  466. package/dist/server/image-optimization.d.ts +20 -21
  467. package/dist/server/implicit-tags.d.ts +3 -4
  468. package/dist/server/instrumentation-runtime.d.ts +17 -21
  469. package/dist/server/instrumentation-runtime.js +26 -8
  470. package/dist/server/instrumentation.d.ts +26 -30
  471. package/dist/server/instrumentation.js +18 -23
  472. package/dist/server/isr-cache.d.ts +30 -27
  473. package/dist/server/isr-cache.js +23 -70
  474. package/dist/server/isr-decision.d.ts +4 -4
  475. package/dist/server/metadata-route-build-data.d.ts +4 -5
  476. package/dist/server/metadata-route-response.d.ts +7 -7
  477. package/dist/server/metadata-route-response.js +158 -35
  478. package/dist/server/metadata-routes.d.ts +18 -19
  479. package/dist/server/middleware-matcher-pattern.d.ts +6 -7
  480. package/dist/server/middleware-matcher.d.ts +6 -7
  481. package/dist/server/middleware-path-to-regexp.d.ts +6 -7
  482. package/dist/server/middleware-path-to-regexp.js +11 -9
  483. package/dist/server/middleware-response-headers.d.ts +3 -4
  484. package/dist/server/middleware-runtime.d.ts +7 -8
  485. package/dist/server/middleware-runtime.js +36 -7
  486. package/dist/server/middleware.d.ts +5 -5
  487. package/dist/server/multi-stage.d.ts +141 -0
  488. package/dist/server/multi-stage.js +8 -0
  489. package/dist/server/navigation-planner.d.ts +26 -26
  490. package/dist/server/navigation-trace.d.ts +11 -12
  491. package/dist/server/next-error-digest.d.ts +4 -5
  492. package/dist/server/normalize-path.d.ts +5 -6
  493. package/dist/server/open-redirect.d.ts +2 -3
  494. package/dist/server/opentelemetry-api.d.ts +59 -0
  495. package/dist/server/opentelemetry-api.js +53 -0
  496. package/dist/server/opentelemetry-tracing.d.ts +5 -0
  497. package/dist/server/opentelemetry-tracing.js +83 -0
  498. package/dist/server/operation-token.d.ts +11 -12
  499. package/dist/server/otel-tracer-extension.d.ts +7 -9
  500. package/dist/server/otel-tracer-extension.js +37 -36
  501. package/dist/server/pages-api-route.d.ts +5 -4
  502. package/dist/server/pages-api-route.js +28 -9
  503. package/dist/server/pages-asset-tags.d.ts +7 -6
  504. package/dist/server/pages-asset-tags.js +104 -18
  505. package/dist/server/pages-body-parser-config.d.ts +4 -5
  506. package/dist/server/pages-body-parser-config.js +4 -4
  507. package/dist/server/pages-client-assets.d.ts +13 -5
  508. package/dist/server/pages-data-route.d.ts +11 -12
  509. package/dist/server/pages-data-route.js +1 -1
  510. package/dist/server/pages-default-404.d.ts +3 -4
  511. package/dist/server/pages-dev-hydration.d.ts +9 -4
  512. package/dist/server/pages-dev-hydration.js +19 -7
  513. package/dist/server/pages-dev-module-url.d.ts +3 -4
  514. package/dist/server/pages-dev-stylesheets.d.ts +5 -6
  515. package/dist/server/pages-document-asset-props.d.ts +6 -7
  516. package/dist/server/pages-document-initial-props.d.ts +5 -5
  517. package/dist/server/pages-document-initial-props.js +4 -2
  518. package/dist/server/pages-execution-tracing.d.ts +40 -0
  519. package/dist/server/pages-execution-tracing.js +80 -0
  520. package/dist/server/pages-get-initial-props.d.ts +9 -10
  521. package/dist/server/pages-i18n.d.ts +8 -8
  522. package/dist/server/pages-media-type.d.ts +4 -5
  523. package/dist/server/pages-node-compat.d.ts +11 -10
  524. package/dist/server/pages-node-compat.js +12 -4
  525. package/dist/server/pages-page-data.d.ts +23 -19
  526. package/dist/server/pages-page-data.js +82 -75
  527. package/dist/server/pages-page-handler.d.ts +7 -6
  528. package/dist/server/pages-page-handler.js +103 -47
  529. package/dist/server/pages-page-method.d.ts +2 -3
  530. package/dist/server/pages-page-response.d.ts +14 -10
  531. package/dist/server/pages-page-response.js +52 -32
  532. package/dist/server/pages-preview.d.ts +10 -11
  533. package/dist/server/pages-readiness.d.ts +2 -3
  534. package/dist/server/pages-request-pipeline.d.ts +15 -12
  535. package/dist/server/pages-request-pipeline.js +80 -35
  536. package/dist/server/pages-request-stage-entry.d.ts +23 -0
  537. package/dist/server/pages-request-stage-entry.js +316 -0
  538. package/dist/server/pages-response-stage-entry.d.ts +11 -0
  539. package/dist/server/pages-response-stage-entry.js +106 -0
  540. package/dist/server/pages-response-stage.d.ts +31 -0
  541. package/dist/server/pages-response-stage.js +49 -0
  542. package/dist/server/pages-revalidate.d.ts +3 -4
  543. package/dist/server/pages-revalidate.js +9 -4
  544. package/dist/server/pages-route-data-kind.d.ts +18 -0
  545. package/dist/server/pages-route-data-kind.js +11 -0
  546. package/dist/server/pages-router-entry.d.ts +1 -25
  547. package/dist/server/pages-router-entry.js +35 -148
  548. package/dist/server/pages-serializable-props.d.ts +3 -4
  549. package/dist/server/pregenerated-concrete-paths.d.ts +9 -7
  550. package/dist/server/pregenerated-concrete-paths.js +12 -6
  551. package/dist/server/prerender-cache-life-header.d.ts +3 -4
  552. package/dist/server/prerender-manifest.d.ts +17 -11
  553. package/dist/server/prerender-manifest.js +7 -4
  554. package/dist/server/prerender-route-params.d.ts +16 -9
  555. package/dist/server/prerender-route-params.js +18 -3
  556. package/dist/server/prerender-work-unit-setup.d.ts +2 -3
  557. package/dist/server/prerender-work-unit-setup.js +5 -5
  558. package/dist/server/prod-server.d.ts +12 -9
  559. package/dist/server/prod-server.js +127 -44
  560. package/dist/server/proxy-trust.d.ts +5 -6
  561. package/dist/server/request-log.d.ts +3 -4
  562. package/dist/server/request-pipeline.d.ts +16 -16
  563. package/dist/server/request-pipeline.js +7 -2
  564. package/dist/server/request-stage.d.ts +5 -0
  565. package/dist/server/request-stage.js +7 -0
  566. package/dist/server/request-tracing.d.ts +22 -0
  567. package/dist/server/request-tracing.js +180 -0
  568. package/dist/server/response-stage-cacheability.d.ts +37 -0
  569. package/dist/server/response-stage-cacheability.js +55 -0
  570. package/dist/server/response-stage-policy.d.ts +23 -0
  571. package/dist/server/response-stage-policy.js +89 -0
  572. package/dist/server/response-stage.d.ts +5 -0
  573. package/dist/server/response-stage.js +7 -0
  574. package/dist/server/response-start-tracing.d.ts +14 -0
  575. package/dist/server/response-start-tracing.js +80 -0
  576. package/dist/server/revalidation-host.d.ts +2 -3
  577. package/dist/server/revalidation-host.js +1 -1
  578. package/dist/server/revalidation-request.d.ts +8 -0
  579. package/dist/server/revalidation-request.js +37 -0
  580. package/dist/server/rsc-completion-metadata.d.ts +6 -7
  581. package/dist/server/rsc-stream-hints.d.ts +18 -7
  582. package/dist/server/rsc-stream-hints.js +70 -35
  583. package/dist/server/seed-cache.d.ts +2 -3
  584. package/dist/server/seed-cache.js +8 -7
  585. package/dist/server/server-action-not-found.d.ts +5 -6
  586. package/dist/server/server-globals.d.ts +2 -3
  587. package/dist/server/skip-cache-proof.d.ts +4 -4
  588. package/dist/server/socket-error-backstop.d.ts +5 -6
  589. package/dist/server/socket-error-backstop.js +1 -1
  590. package/dist/server/static-file-cache.d.ts +5 -6
  591. package/dist/server/static-file-cache.js +9 -7
  592. package/dist/server/static-file-signal.d.ts +9 -6
  593. package/dist/server/static-file-signal.js +51 -2
  594. package/dist/server/static-layout-client-reuse-proof.d.ts +4 -5
  595. package/dist/server/streaming-metadata.d.ts +2 -3
  596. package/dist/server/tracer.d.ts +5 -0
  597. package/dist/server/tracer.js +13 -0
  598. package/dist/server/worker-prerender-discovery.d.ts +5 -6
  599. package/dist/server/worker-revalidation-context.d.ts +4 -4
  600. package/dist/server/worker-revalidation-context.js +6 -5
  601. package/dist/server/worker-stages.d.ts +43 -0
  602. package/dist/server/worker-stages.js +25 -0
  603. package/dist/server/worker-utils.d.ts +5 -6
  604. package/dist/server/worker-utils.js +2 -1
  605. package/dist/server/workers-tracing.d.ts +34 -0
  606. package/dist/server/workers-tracing.js +67 -0
  607. package/dist/shims/amp.d.ts +3 -4
  608. package/dist/shims/app-router-scroll-state.d.ts +9 -10
  609. package/dist/shims/app-router-scroll.d.ts +4 -5
  610. package/dist/shims/app-router-scroll.js +2 -1
  611. package/dist/shims/app.d.ts +5 -6
  612. package/dist/shims/before-interactive-context.d.ts +5 -6
  613. package/dist/shims/cache-callable-runtime.d.ts +44 -4
  614. package/dist/shims/cache-callable-runtime.js +168 -8
  615. package/dist/shims/cache-for-request.d.ts +2 -3
  616. package/dist/shims/cache-handler.d.ts +33 -20
  617. package/dist/shims/cache-handler.js +61 -2
  618. package/dist/shims/cache-request-state.d.ts +26 -38
  619. package/dist/shims/cache-request-state.js +2 -13
  620. package/dist/shims/cache-runtime.d.ts +23 -21
  621. package/dist/shims/cache-runtime.js +110 -28
  622. package/dist/shims/cache.d.ts +17 -16
  623. package/dist/shims/cache.js +19 -15
  624. package/dist/shims/cacheability-classification.d.ts +50 -29
  625. package/dist/shims/cacheability-classification.js +29 -14
  626. package/dist/shims/cdn-cache-state.d.ts +13 -0
  627. package/dist/shims/cdn-cache-state.js +23 -0
  628. package/dist/shims/cdn-cache.d.ts +59 -21
  629. package/dist/shims/cdn-cache.js +31 -47
  630. package/dist/shims/client-hook-error.d.ts +3 -4
  631. package/dist/shims/client-locale.d.ts +2 -3
  632. package/dist/shims/client-page-root.d.ts +24 -0
  633. package/dist/shims/client-page-root.js +121 -0
  634. package/dist/shims/compat-router.d.ts +2 -3
  635. package/dist/shims/config.d.ts +3 -4
  636. package/dist/shims/constants.d.ts +73 -74
  637. package/dist/shims/constants.js +1 -1
  638. package/dist/shims/default-not-found.d.ts +2 -3
  639. package/dist/shims/document.d.ts +9 -9
  640. package/dist/shims/dynamic-preload-chunks.d.ts +2 -3
  641. package/dist/shims/dynamic-preload-chunks.js +17 -13
  642. package/dist/shims/dynamic.d.ts +3 -3
  643. package/dist/shims/error-boundary-navigation.d.ts +3 -4
  644. package/dist/shims/error-boundary.d.ts +17 -18
  645. package/dist/shims/error-boundary.js +17 -11
  646. package/dist/shims/error.d.ts +5 -19
  647. package/dist/shims/error.js +17 -10
  648. package/dist/shims/error.react-server.d.ts +4 -7
  649. package/dist/shims/error.react-server.js +4 -1
  650. package/dist/shims/fetch-cache.d.ts +22 -22
  651. package/dist/shims/fetch-cache.js +46 -20
  652. package/dist/shims/font-google-base.d.ts +9 -9
  653. package/dist/shims/font-google-base.js +2 -1
  654. package/dist/shims/font-local.d.ts +3 -3
  655. package/dist/shims/font-local.js +1 -1
  656. package/dist/shims/font-utils.d.ts +14 -15
  657. package/dist/shims/form.d.ts +2 -2
  658. package/dist/shims/form.js +10 -7
  659. package/dist/shims/hash-scroll.d.ts +5 -6
  660. package/dist/shims/head-state.d.ts +4 -5
  661. package/dist/shims/head.d.ts +16 -16
  662. package/dist/shims/head.js +5 -4
  663. package/dist/shims/headers.d.ts +44 -73
  664. package/dist/shims/headers.js +87 -144
  665. package/dist/shims/i18n-context.d.ts +5 -6
  666. package/dist/shims/i18n-state.d.ts +4 -5
  667. package/dist/shims/image-config.d.ts +5 -6
  668. package/dist/shims/image-config.js +2 -0
  669. package/dist/shims/image.d.ts +5 -5
  670. package/dist/shims/image.js +12 -8
  671. package/dist/shims/internal/als-registry.d.ts +4 -5
  672. package/dist/shims/internal/api-utils.d.ts +3 -4
  673. package/dist/shims/internal/app-page-props-cache-key.d.ts +32 -4
  674. package/dist/shims/internal/app-page-props-cache-key.js +53 -1
  675. package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +5 -6
  676. package/dist/shims/internal/app-prefetch-rsc-request.d.ts +5 -17
  677. package/dist/shims/internal/app-prefetch-rsc-request.js +5 -14
  678. package/dist/shims/internal/app-route-detection.d.ts +2 -2
  679. package/dist/shims/internal/app-route-prefetch-policy.d.ts +5 -8
  680. package/dist/shims/internal/app-route-prefetch-policy.js +0 -1
  681. package/dist/shims/internal/app-router-context.d.ts +9 -10
  682. package/dist/shims/internal/cache-context-accessor.d.ts +16 -0
  683. package/dist/shims/internal/cache-context-accessor.js +15 -0
  684. package/dist/shims/internal/cookie-serialize.d.ts +4 -5
  685. package/dist/shims/internal/format-url-object.d.ts +7 -0
  686. package/dist/shims/internal/format-url-object.js +53 -0
  687. package/dist/shims/internal/headers-state.d.ts +74 -0
  688. package/dist/shims/internal/headers-state.js +157 -0
  689. package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -7
  690. package/dist/shims/internal/hybrid-client-route-owner.d.ts +3 -3
  691. package/dist/shims/internal/hybrid-client-route-owner.js +3 -2
  692. package/dist/shims/internal/interpolate-as.d.ts +5 -6
  693. package/dist/shims/internal/interpolate-as.js +4 -2
  694. package/dist/shims/internal/link-status-registry.d.ts +5 -6
  695. package/dist/shims/internal/make-hanging-promise.d.ts +3 -4
  696. package/dist/shims/internal/navigation-untracked.d.ts +2 -3
  697. package/dist/shims/internal/normalize-router-href.d.ts +15 -0
  698. package/dist/shims/internal/normalize-router-href.js +41 -0
  699. package/dist/shims/internal/pages-data-fetch-dedup.d.ts +8 -9
  700. package/dist/shims/internal/pages-data-target.d.ts +8 -6
  701. package/dist/shims/internal/pages-data-target.js +32 -36
  702. package/dist/shims/internal/pages-data-url.d.ts +4 -5
  703. package/dist/shims/internal/pages-data-url.js +2 -1
  704. package/dist/shims/internal/pages-router-accessor.d.ts +3 -4
  705. package/dist/shims/internal/pages-router-components.d.ts +3 -4
  706. package/dist/shims/internal/route-pattern-for-warning.d.ts +5 -6
  707. package/dist/shims/internal/route-pattern-for-warning.js +3 -3
  708. package/dist/shims/internal/router-context.d.ts +2 -3
  709. package/dist/shims/internal/thenable-well-known-properties.d.ts +10 -0
  710. package/dist/shims/internal/thenable-well-known-properties.js +33 -0
  711. package/dist/shims/internal/utils.d.ts +7 -8
  712. package/dist/shims/internal/work-unit-async-storage.d.ts +10 -11
  713. package/dist/shims/layout-segment-context.d.ts +3 -4
  714. package/dist/shims/link-prefetch.d.ts +9 -10
  715. package/dist/shims/link.d.ts +4 -4
  716. package/dist/shims/link.js +56 -116
  717. package/dist/shims/metadata.d.ts +15 -16
  718. package/dist/shims/metadata.js +40 -36
  719. package/dist/shims/navigation-context-accessors.d.ts +9 -0
  720. package/dist/shims/navigation-context-accessors.js +19 -0
  721. package/dist/shims/navigation-context-state.d.ts +27 -18
  722. package/dist/shims/navigation-errors.d.ts +18 -19
  723. package/dist/shims/navigation-state.d.ts +6 -7
  724. package/dist/shims/navigation.d.ts +80 -68
  725. package/dist/shims/navigation.js +26 -18
  726. package/dist/shims/navigation.react-server.d.ts +9 -9
  727. package/dist/shims/offline.d.ts +2 -3
  728. package/dist/shims/og.d.ts +2 -2
  729. package/dist/shims/pages-router-runtime.d.ts +4 -5
  730. package/dist/shims/ppr-fallback-shell.d.ts +13 -14
  731. package/dist/shims/readonly-url-search-params.d.ts +2 -3
  732. package/dist/shims/request-context.d.ts +5 -6
  733. package/dist/shims/request-state-types.d.ts +2 -1
  734. package/dist/shims/root-params.d.ts +14 -15
  735. package/dist/shims/root-params.js +1 -1
  736. package/dist/shims/router-state.d.ts +5 -6
  737. package/dist/shims/router-state.js +1 -1
  738. package/dist/shims/router.d.ts +22 -21
  739. package/dist/shims/router.js +339 -164
  740. package/dist/shims/script-nonce-context.d.ts +8 -6
  741. package/dist/shims/script-nonce-context.js +15 -6
  742. package/dist/shims/script.d.ts +4 -4
  743. package/dist/shims/script.js +9 -7
  744. package/dist/shims/search-params-gate.d.ts +35 -0
  745. package/dist/shims/search-params-gate.js +32 -0
  746. package/dist/shims/server.d.ts +19 -51
  747. package/dist/shims/server.js +66 -30
  748. package/dist/shims/slot.d.ts +33 -15
  749. package/dist/shims/slot.js +41 -9
  750. package/dist/shims/streamed-icons.d.ts +3 -4
  751. package/dist/shims/thenable-params.d.ts +5 -7
  752. package/dist/shims/thenable-params.js +3 -24
  753. package/dist/shims/unified-request-context.d.ts +35 -32
  754. package/dist/shims/unified-request-context.js +34 -24
  755. package/dist/shims/unrecognized-action-error.d.ts +3 -4
  756. package/dist/shims/url-safety.d.ts +5 -6
  757. package/dist/shims/url-utils.d.ts +12 -13
  758. package/dist/shims/use-merged-ref.d.ts +2 -3
  759. package/dist/shims/user-agent.d.ts +31 -0
  760. package/dist/shims/user-agent.js +16 -0
  761. package/dist/shims/web-vitals.d.ts +2 -2
  762. package/dist/typegen.d.ts +3 -4
  763. package/dist/utils/asset-prefix.d.ts +7 -8
  764. package/dist/utils/base-path.d.ts +5 -6
  765. package/dist/utils/built-asset-url.d.ts +2 -3
  766. package/dist/utils/built-asset-url.js +1 -1
  767. package/dist/utils/cache-control-metadata.d.ts +4 -5
  768. package/dist/utils/client-build-manifest.d.ts +6 -7
  769. package/dist/utils/client-build-manifest.js +2 -1
  770. package/dist/utils/client-entry-manifest.d.ts +6 -7
  771. package/dist/utils/client-runtime-metadata.d.ts +8 -3
  772. package/dist/utils/client-runtime-metadata.js +18 -1
  773. package/dist/utils/commonjs-loader.d.ts +4 -5
  774. package/dist/utils/compare.d.ts +2 -3
  775. package/dist/utils/deployment-id.d.ts +6 -7
  776. package/dist/utils/dev-error-recovery-event.d.ts +2 -3
  777. package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +2 -3
  778. package/dist/utils/domain-locale.d.ts +7 -8
  779. package/dist/utils/encode-cache-tag.d.ts +4 -4
  780. package/dist/utils/encode-cache-tag.js +11 -1
  781. package/dist/utils/error-cause.d.ts +2 -3
  782. package/dist/utils/external-url.d.ts +2 -3
  783. package/dist/utils/has-trailing-comma.d.ts +3 -4
  784. package/dist/utils/hash.d.ts +3 -4
  785. package/dist/utils/html-limited-bots.d.ts +3 -4
  786. package/dist/utils/lazy-chunks.d.ts +8 -9
  787. package/dist/utils/lazy-chunks.js +4 -4
  788. package/dist/utils/manifest-paths.d.ts +5 -6
  789. package/dist/utils/mdx-scan.d.ts +11 -4
  790. package/dist/utils/mdx-scan.js +27 -1
  791. package/dist/utils/middleware-request-headers.d.ts +7 -6
  792. package/dist/utils/middleware-request-headers.js +6 -1
  793. package/dist/utils/navigation-signal.d.ts +3 -3
  794. package/dist/utils/navigation-signal.js +16 -1
  795. package/dist/utils/number.d.ts +2 -3
  796. package/dist/utils/package-name.d.ts +3 -4
  797. package/dist/utils/parse-cookie.d.ts +4 -5
  798. package/dist/utils/path.d.ts +8 -9
  799. package/dist/utils/plugin-options.d.ts +2 -3
  800. package/dist/utils/precompressed-variant.d.ts +3 -4
  801. package/dist/utils/prerender-output-paths.d.ts +4 -5
  802. package/dist/utils/project.d.ts +19 -30
  803. package/dist/utils/project.js +20 -29
  804. package/dist/utils/promise.d.ts +2 -3
  805. package/dist/utils/protocol-headers.d.ts +14 -15
  806. package/dist/utils/public-file-path.d.ts +2 -3
  807. package/dist/utils/public-routes.d.ts +2 -3
  808. package/dist/utils/query.d.ts +14 -9
  809. package/dist/utils/query.js +22 -1
  810. package/dist/utils/react-compiler-support.d.ts +6 -7
  811. package/dist/utils/react-version.d.ts +4 -3
  812. package/dist/utils/react-version.js +19 -1
  813. package/dist/utils/record.d.ts +2 -3
  814. package/dist/utils/redirect-digest.d.ts +3 -4
  815. package/dist/utils/regex-safety.d.ts +4 -5
  816. package/dist/utils/regex.d.ts +2 -3
  817. package/dist/utils/safe-json-file.d.ts +2 -3
  818. package/dist/utils/sorted-array.d.ts +2 -3
  819. package/dist/utils/text-stream.d.ts +3 -4
  820. package/dist/utils/vinext-root.d.ts +2 -3
  821. package/dist/utils/virtual-module.d.ts +3 -4
  822. package/dist/utils/vite-cli-invocation.d.ts +21 -0
  823. package/dist/utils/vite-cli-invocation.js +151 -0
  824. package/dist/utils/vite-version.d.ts +5 -6
  825. package/next-package.json +4 -0
  826. package/package.json +51 -6
  827. package/dist/server/metadata-route-cache-policy.d.ts +0 -6
  828. package/dist/server/metadata-route-cache-policy.js +0 -6
@@ -1,59 +1,112 @@
1
1
  import path from "./deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js";
2
2
  import { detectProject } from "./utils/project.js";
3
+ import { isUnknownRecord } from "./utils/record.js";
3
4
  import { createRequire } from "node:module";
4
5
  import fs from "node:fs";
6
+ import { createHash } from "node:crypto";
5
7
  import MagicString from "magic-string";
6
8
  //#region src/init-cloudflare.ts
7
9
  const require = createRequire(import.meta.url);
8
10
  const DEFAULT_CLOUDFLARE_INIT_OPTIONS = {
9
- dataCache: "kv",
10
- cdnCache: "workers-cache",
11
+ dataCache: "none",
12
+ cdnCache: "none",
11
13
  imageOptimization: "cloudflare-images"
12
14
  };
13
15
  const DEFAULT_VERSION_METADATA_BINDING = "CF_VERSION_METADATA";
16
+ const RESPONSE_STORE_WRANGLER_CONFIG = "wrangler.response-store.jsonc";
17
+ const RESPONSE_STORE_BINDING = "RESPONSE_STORE";
18
+ const RESPONSE_STORE_ENTRYPOINT = "ResponseStoreService";
19
+ const RESPONSE_STORE_MAIN = "./node_modules/@cloudflare/workers-response-store/dist/service.js";
20
+ const CACHE_BODIES_BINDING = "CACHE_BODIES";
21
+ const CACHE_METADATA_BINDING = "CACHE_METADATA";
22
+ const CACHE_METADATA_CLASS = "CacheMetadata";
23
+ const CACHE_METADATA_EXPORT = {
24
+ type: "durable-object",
25
+ storage: "sqlite"
26
+ };
27
+ const CTX_EXPORTS_DEFAULT_DATE = "2025-11-17";
14
28
  function validateCloudflarePlatformSetup(context, cloudflare) {
29
+ if (!cloudflare.legacyWrangler) {
30
+ const existingWrangler = [
31
+ "wrangler.toml",
32
+ "wrangler.json",
33
+ "wrangler.jsonc",
34
+ RESPONSE_STORE_WRANGLER_CONFIG
35
+ ].find((name) => fs.existsSync(path.join(context.root, name)));
36
+ if (existingWrangler) throw new Error(`Cloudflare init cannot replace an existing Wrangler config (${existingWrangler}). Migrate its bindings to cloudflare.config.ts first, or use --legacy-wrangler-cloudflare-init to keep the Wrangler setup.`);
37
+ const typedConfigPath = path.join(context.root, "cloudflare.config.ts");
38
+ if (cloudflare.cdnCache === "static-assets" && fs.existsSync(typedConfigPath)) throw new Error("Static Assets cache setup for an existing cloudflare.config.ts must be configured manually. Keep its assets binding aligned with staticAssetsAdapter({ binding }) and include \"/_vinext/static-cache/*\" in assets.runWorkerFirst to protect private cache files.");
39
+ if (cloudflare.cdnCache === "response-store" && (cloudflare.responseStoreMode ?? "service-binding") === "service-binding" && fs.existsSync(typedConfigPath) && !fs.readFileSync(typedConfigPath, "utf-8").includes("export const responseStoreServiceBinding")) throw new Error("The existing cloudflare.config.ts must export responseStoreServiceBinding for the Response Store auxiliary Worker. Configure it before rerunning init.");
40
+ if (context.existingViteConfigPath && cloudflare.cdnCache === "response-store" && (cloudflare.responseStoreMode ?? "service-binding") === "service-binding" && !fs.readFileSync(context.existingViteConfigPath, "utf-8").includes("auxiliaryWorkers: [{ config: responseStoreServiceBinding }]")) throw new Error("Cloudflare init with Response Store service-binding requires a fresh Vite config so the auxiliary Worker is connected. Remove the existing Vite config or configure it manually.");
41
+ if (context.existingViteConfigPath) {
42
+ const updatedConfig = updateViteConfigForCloudflare(context.existingViteConfigPath, fs.readFileSync(context.existingViteConfigPath, "utf-8"), {
43
+ isAppRouter: context.isAppRouter,
44
+ nativeModulesToStub: detectProject(context.root).nativeModulesToStub,
45
+ cache: cloudflare
46
+ });
47
+ if (context.hasCssModules) updateViteConfigForCssModules(context.existingViteConfigPath, updatedConfig);
48
+ }
49
+ return;
50
+ }
15
51
  const tomlPath = path.join(context.root, "wrangler.toml");
16
52
  if (fs.existsSync(tomlPath)) throw new Error("wrangler.toml is not supported by vinext init. Convert it to wrangler.jsonc and rerun.");
17
53
  const projectInfo = detectProject(context.root);
18
54
  const wranglerPath = ["wrangler.jsonc", "wrangler.json"].map((fileName) => path.join(context.root, fileName)).find((candidate) => fs.existsSync(candidate));
19
55
  const wranglerCode = wranglerPath ? fs.readFileSync(wranglerPath, "utf-8") : void 0;
56
+ if (!wranglerCode && cloudflare.cdnCache === "response-store" && (cloudflare.responseStoreMode ?? "service-binding") === "service-binding" && fs.existsSync(path.join(context.root, RESPONSE_STORE_WRANGLER_CONFIG))) readResponseStoreServiceName(context.root, {});
20
57
  const updatedWranglerCode = wranglerCode ? updateWranglerConfigForCloudflare(wranglerCode, cloudflare, { root: context.root }) : void 0;
21
58
  const imagesBinding = updatedWranglerCode ? getWranglerImagesBinding(updatedWranglerCode) : "IMAGES";
59
+ const assetsBinding = updatedWranglerCode ? getWranglerAssetsBinding(updatedWranglerCode) : "ASSETS";
60
+ const assetsDirectory = updatedWranglerCode ? getWranglerAssetsDirectory(updatedWranglerCode) : "dist/client";
22
61
  const versionMetadataBinding = updatedWranglerCode ? getWranglerVersionMetadataBinding(updatedWranglerCode) : DEFAULT_VERSION_METADATA_BINDING;
23
- if (context.existingViteConfigPath) updateViteConfigForCloudflare(context.existingViteConfigPath, fs.readFileSync(context.existingViteConfigPath, "utf-8"), {
24
- isAppRouter: context.isAppRouter,
25
- nativeModulesToStub: projectInfo.nativeModulesToStub,
26
- cache: cloudflare,
27
- imagesBinding,
28
- versionMetadataBinding,
29
- prerender: context.prerender
30
- });
62
+ if (context.existingViteConfigPath) {
63
+ const updatedConfig = updateViteConfigForCloudflare(context.existingViteConfigPath, fs.readFileSync(context.existingViteConfigPath, "utf-8"), {
64
+ isAppRouter: context.isAppRouter,
65
+ nativeModulesToStub: projectInfo.nativeModulesToStub,
66
+ cache: cloudflare,
67
+ assetsBinding,
68
+ assetsDirectory,
69
+ imagesBinding,
70
+ versionMetadataBinding
71
+ });
72
+ if (context.hasCssModules) updateViteConfigForCssModules(context.existingViteConfigPath, updatedConfig);
73
+ }
31
74
  }
32
75
  function setupCloudflarePlatform(context, cloudflare) {
76
+ if (!cloudflare.legacyWrangler) return setupCfPlatform(context, cloudflare);
33
77
  const projectInfo = detectProject(context.root);
34
78
  const wranglerPath = ["wrangler.jsonc", "wrangler.json"].map((fileName) => path.join(context.root, fileName)).find((candidate) => fs.existsSync(candidate));
35
79
  const wranglerCode = wranglerPath ? fs.readFileSync(wranglerPath, "utf-8") : void 0;
36
80
  const updatedWranglerCode = wranglerCode ? updateWranglerConfigForCloudflare(wranglerCode, cloudflare, { root: context.root }) : void 0;
37
81
  const imagesBinding = updatedWranglerCode ? getWranglerImagesBinding(updatedWranglerCode) : "IMAGES";
82
+ const assetsBinding = updatedWranglerCode ? getWranglerAssetsBinding(updatedWranglerCode) : "ASSETS";
83
+ const assetsDirectory = updatedWranglerCode ? getWranglerAssetsDirectory(updatedWranglerCode) : "dist/client";
38
84
  const versionMetadataBinding = updatedWranglerCode ? getWranglerVersionMetadataBinding(updatedWranglerCode) : DEFAULT_VERSION_METADATA_BINDING;
39
85
  let generatedViteConfig = false;
40
86
  let skippedViteConfig = false;
87
+ let preservedExistingGenerateScopedName = false;
41
88
  if (context.existingViteConfigPath) {
42
89
  const currentConfig = fs.readFileSync(context.existingViteConfigPath, "utf-8");
43
- const updatedConfig = updateViteConfigForCloudflare(context.existingViteConfigPath, currentConfig, {
90
+ let updatedConfig = updateViteConfigForCloudflare(context.existingViteConfigPath, currentConfig, {
44
91
  isAppRouter: context.isAppRouter,
45
92
  nativeModulesToStub: projectInfo.nativeModulesToStub,
46
93
  cache: cloudflare,
94
+ assetsBinding,
95
+ assetsDirectory,
47
96
  imagesBinding,
48
- versionMetadataBinding,
49
- prerender: context.prerender
97
+ versionMetadataBinding
50
98
  });
99
+ if (context.hasCssModules) {
100
+ const cssUpdate = updateViteConfigForCssModules(context.existingViteConfigPath, updatedConfig);
101
+ updatedConfig = cssUpdate.code;
102
+ preservedExistingGenerateScopedName = cssUpdate.preservedExistingGenerateScopedName;
103
+ }
51
104
  if (updatedConfig !== currentConfig) {
52
105
  fs.writeFileSync(context.existingViteConfigPath, updatedConfig, "utf-8");
53
106
  generatedViteConfig = true;
54
107
  } else skippedViteConfig = true;
55
108
  } else {
56
- const configContent = context.isAppRouter ? generateAppRouterViteConfig(projectInfo, cloudflare, imagesBinding, context.prerender, versionMetadataBinding) : generatePagesRouterViteConfig(projectInfo, cloudflare, imagesBinding, context.prerender, versionMetadataBinding);
109
+ const configContent = context.isAppRouter ? generateAppRouterViteConfig(projectInfo, cloudflare, imagesBinding, versionMetadataBinding, false, assetsBinding, assetsDirectory, context.hasCssModules) : generatePagesRouterViteConfig(projectInfo, cloudflare, imagesBinding, versionMetadataBinding, false, context.hasCssModules, assetsBinding, assetsDirectory);
57
110
  fs.writeFileSync(path.join(context.root, "vite.config.ts"), configContent, "utf-8");
58
111
  generatedViteConfig = true;
59
112
  }
@@ -68,22 +121,116 @@ function setupCloudflarePlatform(context, cloudflare) {
68
121
  }
69
122
  }
70
123
  const finalWranglerPath = wranglerPath ?? path.join(context.root, "wrangler.jsonc");
71
- const finalWranglerFileName = path.basename(finalWranglerPath);
72
- const kvBinding = JSON.parse(stripJsonComments(fs.readFileSync(finalWranglerPath, "utf-8"))).kv_namespaces?.find((namespace) => namespace.binding === "VINEXT_KV_CACHE");
73
- const needsKvNamespaceId = cloudflare.dataCache === "kv" && (!kvBinding || typeof kvBinding.id !== "string" || kvBinding.id.length === 0 || kvBinding.id === "<your-kv-namespace-id>");
124
+ if (cloudflare.cdnCache === "response-store" && (cloudflare.responseStoreMode ?? "service-binding") === "service-binding") {
125
+ const responseStorePath = path.join(path.dirname(finalWranglerPath), RESPONSE_STORE_WRANGLER_CONFIG);
126
+ if (!fs.existsSync(responseStorePath)) {
127
+ fs.writeFileSync(responseStorePath, generateResponseStoreWranglerConfig(fs.readFileSync(finalWranglerPath, "utf-8"), context.root), "utf-8");
128
+ generatedPlatformFiles.push(path.relative(context.root, responseStorePath) || RESPONSE_STORE_WRANGLER_CONFIG);
129
+ }
130
+ }
131
+ const nextSteps = [];
132
+ if (cloudflare.cdnCache === "response-store" && (cloudflare.responseStoreMode ?? "service-binding") === "service-binding") nextSteps.push("Deploy Workers Response Store before deploying the application:", ` ${context.packageManager ?? "npm"} run deploy:response-store`);
133
+ if (cloudflare.prerender && cloudflare.cdnCache !== "static-assets") nextSteps.push("Pre-rendered routes are built, but Cloudflare deploys do not serve them.", " Use the Static Assets cache to serve them, or cache warming to fill another cache.");
74
134
  return {
75
135
  generatedViteConfig,
76
136
  skippedViteConfig,
77
137
  generatedPlatformFiles,
78
- nextSteps: needsKvNamespaceId ? [
79
- "Cloudflare setup is incomplete until you finish KV configuration:",
80
- "1. Create the KV namespace:",
81
- " npx wrangler kv namespace create VINEXT_KV_CACHE",
82
- `2. Copy the returned namespace ID into the VINEXT_KV_CACHE entry in ${finalWranglerFileName}:`,
83
- " Set its \"id\" value, replacing \"<your-kv-namespace-id>\" if present."
84
- ] : []
138
+ nextSteps,
139
+ preservedExistingGenerateScopedName
140
+ };
141
+ }
142
+ function setupCfPlatform(context, cloudflare) {
143
+ const projectInfo = detectProject(context.root);
144
+ const serviceBinding = cloudflare.cdnCache === "response-store" && (cloudflare.responseStoreMode ?? "service-binding") === "service-binding";
145
+ let generatedViteConfig = false;
146
+ let preservedExistingGenerateScopedName = false;
147
+ if (context.existingViteConfigPath) {
148
+ const current = fs.readFileSync(context.existingViteConfigPath, "utf-8");
149
+ let updated = updateViteConfigForCloudflare(context.existingViteConfigPath, current, {
150
+ isAppRouter: context.isAppRouter,
151
+ nativeModulesToStub: projectInfo.nativeModulesToStub,
152
+ cache: cloudflare
153
+ });
154
+ if (context.hasCssModules) {
155
+ const cssUpdate = updateViteConfigForCssModules(context.existingViteConfigPath, updated);
156
+ updated = cssUpdate.code;
157
+ preservedExistingGenerateScopedName = cssUpdate.preservedExistingGenerateScopedName;
158
+ }
159
+ if (updated !== current) {
160
+ fs.writeFileSync(context.existingViteConfigPath, updated, "utf-8");
161
+ generatedViteConfig = true;
162
+ }
163
+ } else {
164
+ const viteConfig = context.isAppRouter ? generateAppRouterViteConfig(projectInfo, cloudflare, "IMAGES", DEFAULT_VERSION_METADATA_BINDING, serviceBinding, "ASSETS", "dist/client", context.hasCssModules) : generatePagesRouterViteConfig(projectInfo, cloudflare, "IMAGES", DEFAULT_VERSION_METADATA_BINDING, serviceBinding, context.hasCssModules);
165
+ fs.writeFileSync(path.join(context.root, "vite.config.ts"), viteConfig, "utf-8");
166
+ generatedViteConfig = true;
167
+ }
168
+ const configPath = path.join(context.root, "cloudflare.config.ts");
169
+ const generatedPlatformFiles = [];
170
+ if (!fs.existsSync(configPath)) {
171
+ fs.writeFileSync(configPath, generateTypedCloudflareConfig(projectInfo, cloudflare, context.today));
172
+ generatedPlatformFiles.push("cloudflare.config.ts");
173
+ }
174
+ const nextSteps = [];
175
+ if (serviceBinding) nextSteps.push("After `vinext build`, deploy the Response Store Worker explicitly (and repeat when its code/config changes):", ` ${context.packageManager ?? "npm"} run deploy:response-store`, "vinext-cloudflare deploy only deploys the application Worker.");
176
+ if (cloudflare.prerender && cloudflare.cdnCache !== "static-assets") nextSteps.push("Pre-rendered routes are built, but Cloudflare deploys do not serve them.", " Use the Static Assets cache to serve them, or cache warming to fill another cache.");
177
+ nextSteps.push("For TypeScript, add \".cloudflare/types\" to the include list in tsconfig.json.", "Worker types are generated during dev/build; run `cf workers types` before standalone type-checks.");
178
+ return {
179
+ generatedViteConfig,
180
+ skippedViteConfig: !generatedViteConfig,
181
+ generatedPlatformFiles,
182
+ nextSteps,
183
+ preservedExistingGenerateScopedName
85
184
  };
86
185
  }
186
+ function generateTypedCloudflareConfig(info, options, today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0]) {
187
+ const serviceBinding = options.cdnCache === "response-store" && (options.responseStoreMode ?? "service-binding") === "service-binding";
188
+ const selfContained = options.cdnCache === "response-store" && !serviceBinding;
189
+ const workersCache = options.cdnCache === "workers-cache";
190
+ const helper = serviceBinding ? "createWorkersResponseStoreServiceBindingConfig" : selfContained ? "createWorkersResponseStoreSelfContainedConfig" : workersCache ? "createWorkersCacheConfig" : void 0;
191
+ const imports = [`import { bindings, defineConfig, defineWorker } from "cf/config";`, ...helper ? [`import { ${helper} } from "@vinext/cloudflare/cache/config";`] : []];
192
+ const responseStoreName = compactResourceName(info.projectName, "-response-store", 63);
193
+ const bucket = serviceBinding ? compactResourceName(responseStoreName, "-cache-bodies", 63) : compactResourceName(info.projectName, "-response-store-cache-bodies", 63);
194
+ const shared = serviceBinding ? `const responseStore = await ${helper}({
195
+ worker: {
196
+ name: ${JSON.stringify(responseStoreName)},
197
+ compatibilityDate: ${JSON.stringify(today)},
198
+ compatibilityFlags: ["nodejs_compat"],
199
+ },
200
+ bucket: ${JSON.stringify(bucket)},
201
+ });
202
+
203
+ export const responseStoreServiceBinding = responseStore.serviceBindingWorker;
204
+
205
+ ` : selfContained ? `const cache = await ${helper}({
206
+ worker: ${JSON.stringify(info.projectName)},
207
+ bucket: ${JSON.stringify(bucket)},
208
+ });
209
+
210
+ ` : workersCache ? `const cache = await ${helper}();\n\n` : "";
211
+ const cacheSpread = serviceBinding ? "responseStore.applicationWorker" : helper ? "cache" : void 0;
212
+ const envBindings = [
213
+ ...cacheSpread ? [`...${cacheSpread}.env`] : [],
214
+ "ASSETS: bindings.assets()",
215
+ ...options.imageOptimization === "cloudflare-images" ? ["IMAGES: bindings.images()"] : [],
216
+ ...options.dataCache === "kv" ? ["VINEXT_KV_CACHE: bindings.kv()"] : []
217
+ ];
218
+ return `${imports.join("\n")}
219
+
220
+ ${shared}export default defineConfig({
221
+ worker: defineWorker({
222
+ ${cacheSpread ? `...${cacheSpread},\n ` : ""}name: ${JSON.stringify(info.projectName)},
223
+ entrypoint: ${JSON.stringify(resolveWorkerEntry(info.root))},
224
+ compatibilityDate: ${JSON.stringify(today)},
225
+ compatibilityFlags: ["nodejs_compat"],
226
+ assets: { notFoundHandling: "none"${options.cdnCache === "static-assets" ? ", runWorkerFirst: [\"/_vinext/static-cache/*\"]" : ""} },
227
+ env: {
228
+ ${envBindings.join(",\n ")},
229
+ },
230
+ }),
231
+ });
232
+ `;
233
+ }
87
234
  /**
88
235
  * `main` is what makes a Wrangler config a Worker rather than a static-assets
89
236
  * project. A custom `worker/index.*` wins when present; otherwise the
@@ -106,7 +253,8 @@ function generateWranglerConfig(info, options = DEFAULT_CLOUDFLARE_INIT_OPTIONS,
106
253
  assets: {
107
254
  directory: "dist/client",
108
255
  not_found_handling: "none",
109
- binding: "ASSETS"
256
+ binding: "ASSETS",
257
+ ...options.cdnCache === "static-assets" ? { run_worker_first: ["/_vinext/static-cache/*"] } : {}
110
258
  }
111
259
  };
112
260
  if (options.cdnCache === "workers-cache") {
@@ -114,11 +262,11 @@ function generateWranglerConfig(info, options = DEFAULT_CLOUDFLARE_INIT_OPTIONS,
114
262
  config.version_metadata = { binding: DEFAULT_VERSION_METADATA_BINDING };
115
263
  }
116
264
  if (options.imageOptimization === "cloudflare-images") config.images = { binding: "IMAGES" };
117
- if (options.dataCache === "kv") config.kv_namespaces = [{
118
- binding: "VINEXT_KV_CACHE",
119
- id: "<your-kv-namespace-id>"
120
- }];
121
- return JSON.stringify(config, null, 2) + "\n";
265
+ if (options.dataCache === "kv") config.kv_namespaces = [{ binding: "VINEXT_KV_CACHE" }];
266
+ const code = `${JSON.stringify(config, null, 2)}\n`;
267
+ if (options.cdnCache !== "response-store") return code;
268
+ const configured = configureResponseStoreWrangler(code, config, options.responseStoreMode ?? "service-binding", info.root);
269
+ return `${JSON.stringify(JSON.parse(configured), null, 2)}\n`;
122
270
  }
123
271
  function stripJsonComments(code) {
124
272
  let output = "";
@@ -277,6 +425,197 @@ function appendTopLevelJsonProperty(code, property) {
277
425
  const structuralBefore = stripJsonComments(before);
278
426
  return `${before}${!/,\s*$/.test(structuralBefore) && !/{\s*$/.test(structuralBefore) ? "," : ""}\n${property}\n${code.slice(closing)}`;
279
427
  }
428
+ function setTopLevelJsonProperty(code, name, value) {
429
+ const property = findTopLevelJsonProperty(code, name);
430
+ const serialized = JSON.stringify(value);
431
+ if (!property) return appendTopLevelJsonProperty(code, ` ${JSON.stringify(name)}: ${serialized}`);
432
+ return `${code.slice(0, property.valueStart)}${serialized}${code.slice(property.valueEnd)}`;
433
+ }
434
+ function compactResourceName(name, suffix, maxLength) {
435
+ const fullName = `${name}${suffix}`;
436
+ if (fullName.length <= maxLength) return fullName;
437
+ const hash = createHash("sha256").update(name).digest("hex").slice(0, 8);
438
+ return `${name.slice(0, maxLength - suffix.length - hash.length - 1)}-${hash}${suffix}`;
439
+ }
440
+ function isCacheMetadataExport(value) {
441
+ return isUnknownRecord(value) && value.type === CACHE_METADATA_EXPORT.type && value.storage === CACHE_METADATA_EXPORT.storage;
442
+ }
443
+ function readResponseStoreServiceName(root, appConfig) {
444
+ const responseStorePath = path.join(root, RESPONSE_STORE_WRANGLER_CONFIG);
445
+ if (fs.existsSync(responseStorePath)) {
446
+ let responseStoreConfig;
447
+ try {
448
+ responseStoreConfig = JSON.parse(stripJsonComments(fs.readFileSync(responseStorePath, "utf8")));
449
+ } catch (cause) {
450
+ throw new Error(`Could not parse ${RESPONSE_STORE_WRANGLER_CONFIG}.`, { cause });
451
+ }
452
+ if (!isUnknownRecord(responseStoreConfig) || typeof responseStoreConfig.name !== "string" || responseStoreConfig.name.length === 0) throw new Error(`${RESPONSE_STORE_WRANGLER_CONFIG} must contain a Worker name.`);
453
+ if (responseStoreConfig.main !== RESPONSE_STORE_MAIN) throw new Error(`${RESPONSE_STORE_WRANGLER_CONFIG} already exists but does not use @cloudflare/workers-response-store.`);
454
+ const responseStoreExport = isUnknownRecord(responseStoreConfig.exports) ? responseStoreConfig.exports.ResponseStoreBinding : void 0;
455
+ const cacheMetadataExport = isUnknownRecord(responseStoreConfig.exports) ? responseStoreConfig.exports[CACHE_METADATA_CLASS] : void 0;
456
+ const hasCacheBodies = Array.isArray(responseStoreConfig.r2_buckets) && responseStoreConfig.r2_buckets.some((binding) => isUnknownRecord(binding) && binding.binding === CACHE_BODIES_BINDING);
457
+ const durableBindings = isUnknownRecord(responseStoreConfig.durable_objects) ? responseStoreConfig.durable_objects.bindings : void 0;
458
+ const hasCacheMetadata = Array.isArray(durableBindings) && durableBindings.some((binding) => isUnknownRecord(binding) && binding.name === CACHE_METADATA_BINDING && binding.class_name === CACHE_METADATA_CLASS && binding.script_name === void 0);
459
+ const hasNoMigrations = responseStoreConfig.migrations === void 0 || Array.isArray(responseStoreConfig.migrations) && responseStoreConfig.migrations.length === 0;
460
+ if (!isUnknownRecord(responseStoreConfig.cache) || responseStoreConfig.cache.enabled !== true || !isUnknownRecord(responseStoreExport) || !isUnknownRecord(responseStoreExport.cache) || responseStoreExport.cache.enabled !== true || !hasCacheBodies || !hasCacheMetadata || !isCacheMetadataExport(cacheMetadataExport) || !hasNoMigrations) throw new Error(`${RESPONSE_STORE_WRANGLER_CONFIG} is missing required Response Store bindings.`);
461
+ const compatibilityFlags = responseStoreConfig.compatibility_flags;
462
+ if (compatibilityFlags !== void 0 && (!Array.isArray(compatibilityFlags) || compatibilityFlags.some((flag) => typeof flag !== "string"))) throw new Error(`${RESPONSE_STORE_WRANGLER_CONFIG} has invalid compatibility flags.`);
463
+ const flags = compatibilityFlags ?? [];
464
+ if (flags.includes("disable_ctx_exports") || (typeof responseStoreConfig.compatibility_date !== "string" || responseStoreConfig.compatibility_date < CTX_EXPORTS_DEFAULT_DATE) && !flags.includes("enable_ctx_exports")) throw new Error(`${RESPONSE_STORE_WRANGLER_CONFIG} must enable ctx.exports with a compatibility date on or after ${CTX_EXPORTS_DEFAULT_DATE}, or the enable_ctx_exports compatibility flag.`);
465
+ return responseStoreConfig.name;
466
+ }
467
+ if (Array.isArray(appConfig.services)) {
468
+ const binding = appConfig.services.find((service) => isUnknownRecord(service) && service.binding === RESPONSE_STORE_BINDING);
469
+ if (isUnknownRecord(binding) && typeof binding.service === "string" && binding.service.length > 0) return binding.service;
470
+ }
471
+ return compactResourceName(typeof appConfig.name === "string" && appConfig.name.length > 0 ? appConfig.name : detectProject(root).projectName, "-response-store", 63);
472
+ }
473
+ function configureResponseStoreWrangler(code, config, mode, root) {
474
+ const flags = Array.isArray(config.compatibility_flags) ? config.compatibility_flags.filter((flag) => typeof flag === "string") : [];
475
+ if (flags.includes("disable_ctx_exports")) throw new Error("Workers Response Store requires ctx.exports to be enabled.");
476
+ if ((typeof config.compatibility_date !== "string" || config.compatibility_date < CTX_EXPORTS_DEFAULT_DATE) && !flags.includes("enable_ctx_exports")) code = setTopLevelJsonProperty(code, "compatibility_flags", [...flags, "enable_ctx_exports"]);
477
+ const versionMetadata = config.version_metadata;
478
+ if (versionMetadata !== void 0 && (!isUnknownRecord(versionMetadata) || versionMetadata.binding !== DEFAULT_VERSION_METADATA_BINDING)) throw new Error(`Workers Response Store requires version_metadata.binding to be ${JSON.stringify(DEFAULT_VERSION_METADATA_BINDING)}.`);
479
+ code = setTopLevelJsonProperty(code, "version_metadata", { binding: DEFAULT_VERSION_METADATA_BINDING });
480
+ const cache = config.cache;
481
+ if (cache !== void 0 && !isUnknownRecord(cache)) throw new Error("The existing Wrangler config has an invalid cache value.");
482
+ code = setTopLevelJsonProperty(code, "cache", {
483
+ ...cache,
484
+ enabled: mode === "self-contained"
485
+ });
486
+ const exportsConfig = config.exports;
487
+ if (exportsConfig !== void 0 && !isUnknownRecord(exportsConfig)) throw new Error("The existing Wrangler config has an invalid exports value.");
488
+ const workerExports = { ...exportsConfig };
489
+ const cacheMetadataExport = workerExports[CACHE_METADATA_CLASS];
490
+ const hasCacheMetadataExport = isCacheMetadataExport(cacheMetadataExport);
491
+ let updateWorkerExports = mode === "self-contained";
492
+ const services = config.services;
493
+ if (services !== void 0 && !Array.isArray(services)) throw new Error("The existing Wrangler config has an invalid services value.");
494
+ const existingServices = services ?? [];
495
+ if (existingServices.some((service) => !isUnknownRecord(service))) throw new Error("The existing Wrangler config has an invalid service binding.");
496
+ const responseStoreService = existingServices.find((service) => service.binding === RESPONSE_STORE_BINDING);
497
+ if (responseStoreService && responseStoreService.entrypoint !== RESPONSE_STORE_ENTRYPOINT) throw new Error(`The ${RESPONSE_STORE_BINDING} service binding uses a different entrypoint.`);
498
+ if (mode === "service-binding") {
499
+ const responseStoreExport = workerExports.ResponseStoreBinding;
500
+ const hasSelfContainedResponseStore = isUnknownRecord(responseStoreExport) && responseStoreExport.type === "worker" && isUnknownRecord(responseStoreExport.cache) && responseStoreExport.cache.enabled === true;
501
+ if (responseStoreExport !== void 0 && !hasSelfContainedResponseStore) throw new Error("The existing ResponseStoreBinding export conflicts with Workers Response Store.");
502
+ if (hasSelfContainedResponseStore && cacheMetadataExport !== void 0 && !hasCacheMetadataExport) throw new Error(`The existing ${CACHE_METADATA_CLASS} export conflicts with Workers Response Store.`);
503
+ const hasCacheBodies = Array.isArray(config.r2_buckets) && config.r2_buckets.some((bucket) => isUnknownRecord(bucket) && bucket.binding === CACHE_BODIES_BINDING);
504
+ const durableBindings = isUnknownRecord(config.durable_objects) ? config.durable_objects.bindings : void 0;
505
+ const hasCacheMetadata = Array.isArray(durableBindings) && durableBindings.some((binding) => isUnknownRecord(binding) && binding.name === CACHE_METADATA_BINDING);
506
+ if (!hasSelfContainedResponseStore && hasCacheBodies) throw new Error(`${CACHE_BODIES_BINDING} is already used by an application-owned R2 binding.`);
507
+ if (!hasSelfContainedResponseStore && hasCacheMetadata) throw new Error(`${CACHE_METADATA_BINDING} is already used by an application-owned Durable Object binding.`);
508
+ const serviceName = readResponseStoreServiceName(root, config);
509
+ code = setTopLevelJsonProperty(code, "services", [...existingServices.filter((service) => service.binding !== RESPONSE_STORE_BINDING), {
510
+ ...responseStoreService,
511
+ binding: RESPONSE_STORE_BINDING,
512
+ service: serviceName,
513
+ entrypoint: RESPONSE_STORE_ENTRYPOINT
514
+ }]);
515
+ updateWorkerExports = hasSelfContainedResponseStore;
516
+ delete workerExports.ResponseStoreBinding;
517
+ if (hasSelfContainedResponseStore) delete workerExports[CACHE_METADATA_CLASS];
518
+ if (Array.isArray(config.r2_buckets)) code = setTopLevelJsonProperty(code, "r2_buckets", config.r2_buckets.filter((bucket) => !isUnknownRecord(bucket) || bucket.binding !== CACHE_BODIES_BINDING));
519
+ if (isUnknownRecord(config.durable_objects) && Array.isArray(config.durable_objects.bindings)) code = setTopLevelJsonProperty(code, "durable_objects", {
520
+ ...config.durable_objects,
521
+ bindings: config.durable_objects.bindings.filter((binding) => !isUnknownRecord(binding) || binding.name !== CACHE_METADATA_BINDING)
522
+ });
523
+ } else {
524
+ const defaultExport = workerExports.default;
525
+ if (defaultExport !== void 0 && !isUnknownRecord(defaultExport)) throw new Error("The existing Wrangler config has an invalid default export.");
526
+ workerExports.default = {
527
+ ...defaultExport,
528
+ type: "worker",
529
+ cache: { enabled: false }
530
+ };
531
+ if (responseStoreService) code = setTopLevelJsonProperty(code, "services", existingServices.filter((service) => service.binding !== RESPONSE_STORE_BINDING));
532
+ for (const [name, value] of Object.entries(workerExports)) {
533
+ if (!isUnknownRecord(value)) throw new Error(`The existing Wrangler config has an invalid ${name} export.`);
534
+ if (value.type === "worker" && value.cache === void 0) workerExports[name] = {
535
+ ...value,
536
+ cache: { enabled: false }
537
+ };
538
+ }
539
+ const responseStoreExport = workerExports.ResponseStoreBinding;
540
+ if (responseStoreExport !== void 0 && !isUnknownRecord(responseStoreExport)) throw new Error("The existing Wrangler config has an invalid ResponseStoreBinding export.");
541
+ workerExports.ResponseStoreBinding = {
542
+ ...responseStoreExport,
543
+ type: "worker",
544
+ cache: { enabled: true }
545
+ };
546
+ if (cacheMetadataExport !== void 0 && !hasCacheMetadataExport) throw new Error(`The existing ${CACHE_METADATA_CLASS} export conflicts with Workers Response Store.`);
547
+ workerExports[CACHE_METADATA_CLASS] = CACHE_METADATA_EXPORT;
548
+ const r2Buckets = config.r2_buckets;
549
+ if (r2Buckets !== void 0 && !Array.isArray(r2Buckets)) throw new Error("The existing Wrangler config has an invalid r2_buckets value.");
550
+ const existingBuckets = r2Buckets ?? [];
551
+ if (existingBuckets.some((bucket) => !isUnknownRecord(bucket))) throw new Error("The existing Wrangler config has an invalid R2 binding.");
552
+ if (!existingBuckets.some((bucket) => bucket.binding === CACHE_BODIES_BINDING)) {
553
+ const appName = typeof config.name === "string" && config.name.length > 0 ? config.name : detectProject(root).projectName;
554
+ code = setTopLevelJsonProperty(code, "r2_buckets", [...existingBuckets, {
555
+ binding: CACHE_BODIES_BINDING,
556
+ bucket_name: compactResourceName(appName, "-response-store-cache-bodies", 63)
557
+ }]);
558
+ }
559
+ const durableObjects = config.durable_objects;
560
+ if (durableObjects !== void 0 && !isUnknownRecord(durableObjects)) throw new Error("The existing Wrangler config has an invalid durable_objects value.");
561
+ const durableBindings = durableObjects?.bindings;
562
+ if (durableBindings !== void 0 && !Array.isArray(durableBindings)) throw new Error("The existing Wrangler config has invalid Durable Object bindings.");
563
+ const existingDurableBindings = durableBindings ?? [];
564
+ if (existingDurableBindings.some((binding) => !isUnknownRecord(binding))) throw new Error("The existing Wrangler config has an invalid Durable Object binding.");
565
+ const existingMetadataBinding = existingDurableBindings.find((binding) => binding.name === CACHE_METADATA_BINDING);
566
+ if (existingMetadataBinding && (existingMetadataBinding.class_name !== CACHE_METADATA_CLASS || existingMetadataBinding.script_name !== void 0)) throw new Error(`The ${CACHE_METADATA_BINDING} Durable Object binding is incompatible.`);
567
+ code = setTopLevelJsonProperty(code, "durable_objects", {
568
+ ...durableObjects,
569
+ bindings: existingMetadataBinding ? existingDurableBindings : [...existingDurableBindings, {
570
+ name: CACHE_METADATA_BINDING,
571
+ class_name: CACHE_METADATA_CLASS
572
+ }]
573
+ });
574
+ const migrations = config.migrations;
575
+ if (migrations !== void 0 && !Array.isArray(migrations)) throw new Error("The existing Wrangler config has an invalid migrations value.");
576
+ const existingMigrations = migrations ?? [];
577
+ if (existingMigrations.some((migration) => !isUnknownRecord(migration))) throw new Error("The existing Wrangler config has an invalid Durable Object migration.");
578
+ if (existingMigrations.length > 0) throw new Error("Self-contained Workers Response Store cannot be combined with migration-based Durable Objects. Convert the existing Durable Objects to declarative exports or use service-binding mode.");
579
+ }
580
+ return updateWorkerExports ? setTopLevelJsonProperty(code, "exports", workerExports) : code;
581
+ }
582
+ function generateResponseStoreWranglerConfig(appWranglerCode, root) {
583
+ const appConfig = JSON.parse(stripJsonComments(appWranglerCode));
584
+ const serviceName = readResponseStoreServiceName(root, appConfig);
585
+ const compatibilityDate = typeof appConfig.compatibility_date === "string" ? appConfig.compatibility_date : (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
586
+ const compatibilityFlags = ["nodejs_compat"];
587
+ if (compatibilityDate < CTX_EXPORTS_DEFAULT_DATE) compatibilityFlags.push("enable_ctx_exports");
588
+ return `${JSON.stringify({
589
+ $schema: "node_modules/wrangler/config-schema.json",
590
+ name: serviceName,
591
+ main: RESPONSE_STORE_MAIN,
592
+ compatibility_date: compatibilityDate,
593
+ compatibility_flags: compatibilityFlags,
594
+ workers_dev: false,
595
+ preview_urls: false,
596
+ cache: { enabled: true },
597
+ exports: {
598
+ default: {
599
+ type: "worker",
600
+ cache: { enabled: false }
601
+ },
602
+ ResponseStoreBinding: {
603
+ type: "worker",
604
+ cache: { enabled: true }
605
+ },
606
+ [CACHE_METADATA_CLASS]: CACHE_METADATA_EXPORT
607
+ },
608
+ r2_buckets: [{
609
+ binding: CACHE_BODIES_BINDING,
610
+ bucket_name: compactResourceName(serviceName, "-cache-bodies", 63)
611
+ }],
612
+ durable_objects: { bindings: [{
613
+ name: CACHE_METADATA_BINDING,
614
+ class_name: CACHE_METADATA_CLASS
615
+ }] },
616
+ ...typeof appConfig.account_id === "string" ? { account_id: appConfig.account_id } : {}
617
+ }, null, 2)}\n`;
618
+ }
280
619
  function updateWranglerConfigForCloudflare(code, options, context = {}) {
281
620
  let config;
282
621
  try {
@@ -291,6 +630,24 @@ function updateWranglerConfigForCloudflare(code, options, context = {}) {
291
630
  output = appendTopLevelJsonProperty(output, ` "main": ${JSON.stringify(workerEntry)}`);
292
631
  }
293
632
  if (!findTopLevelJsonProperty(output, "assets")) output = appendTopLevelJsonProperty(output, " \"assets\": { \"directory\": \"dist/client\", \"not_found_handling\": \"none\", \"binding\": \"ASSETS\" }");
633
+ if (options.cdnCache === "static-assets") {
634
+ const assetsProperty = findTopLevelJsonProperty(output, "assets");
635
+ const assets = JSON.parse(stripJsonComments(output.slice(assetsProperty.valueStart, assetsProperty.valueEnd)));
636
+ if (!assets || typeof assets !== "object" || Array.isArray(assets)) throw new Error("The existing Wrangler config has an invalid assets value.");
637
+ const workerFirst = assets.run_worker_first;
638
+ if (workerFirst !== void 0 && typeof workerFirst !== "boolean" && !Array.isArray(workerFirst)) throw new Error("The existing Wrangler config has an invalid assets.run_worker_first value.");
639
+ if (Array.isArray(workerFirst) && workerFirst.some((pattern) => typeof pattern !== "string" || pattern.startsWith("!"))) throw new Error("Static Assets cache requires run_worker_first without exclusion patterns. Use true or an array of positive path patterns.");
640
+ const protectedRouting = workerFirst === true ? true : [.../* @__PURE__ */ new Set([...Array.isArray(workerFirst) ? workerFirst : [], "/_vinext/static-cache/*"])];
641
+ if (typeof assets.directory !== "string" || assets.directory.length === 0 || typeof assets.binding !== "string" || assets.binding.length === 0 || JSON.stringify(workerFirst) !== JSON.stringify(protectedRouting)) {
642
+ const updatedAssets = JSON.stringify({
643
+ ...assets,
644
+ ...typeof assets.directory === "string" && assets.directory.length > 0 ? {} : { directory: "dist/client" },
645
+ ...typeof assets.binding === "string" && assets.binding.length > 0 ? {} : { binding: "ASSETS" },
646
+ run_worker_first: protectedRouting
647
+ });
648
+ output = `${output.slice(0, assetsProperty.valueStart)}${updatedAssets}${output.slice(assetsProperty.valueEnd)}`;
649
+ }
650
+ }
294
651
  if (options.cdnCache === "workers-cache") {
295
652
  const cacheProperty = findTopLevelJsonProperty(output, "cache");
296
653
  if (!cacheProperty) output = appendTopLevelJsonProperty(output, " \"cache\": { \"enabled\": true }");
@@ -321,17 +678,18 @@ function updateWranglerConfigForCloudflare(code, options, context = {}) {
321
678
  }
322
679
  if (options.dataCache === "kv") {
323
680
  const kvProperty = findTopLevelJsonProperty(output, "kv_namespaces");
324
- if (!kvProperty) output = appendTopLevelJsonProperty(output, " \"kv_namespaces\": [{ \"binding\": \"VINEXT_KV_CACHE\", \"id\": \"<your-kv-namespace-id>\" }]");
681
+ if (!kvProperty) output = appendTopLevelJsonProperty(output, " \"kv_namespaces\": [{ \"binding\": \"VINEXT_KV_CACHE\" }]");
325
682
  else {
326
683
  const rawValue = output.slice(kvProperty.valueStart, kvProperty.valueEnd);
327
684
  if (!JSON.parse(stripJsonComments(rawValue)).some((namespace) => namespace.binding === "VINEXT_KV_CACHE")) {
328
685
  const closing = kvProperty.valueEnd - 1;
329
686
  const content = output.slice(kvProperty.valueStart + 1, closing);
330
687
  const separator = content.trim() ? `${/,\s*$/.test(content) ? "" : ","}\n ` : "";
331
- output = `${output.slice(0, closing)}${separator}{ "binding": "VINEXT_KV_CACHE", "id": "<your-kv-namespace-id>" }${output.slice(closing)}`;
688
+ output = `${output.slice(0, closing)}${separator}{ "binding": "VINEXT_KV_CACHE" }${output.slice(closing)}`;
332
689
  }
333
690
  }
334
691
  }
692
+ if (options.cdnCache === "response-store") output = configureResponseStoreWrangler(output, config, options.responseStoreMode ?? "service-binding", context.root ?? process.cwd());
335
693
  return output;
336
694
  }
337
695
  function getWranglerImagesBinding(code) {
@@ -340,6 +698,18 @@ function getWranglerImagesBinding(code) {
340
698
  const images = JSON.parse(stripJsonComments(code.slice(property.valueStart, property.valueEnd)));
341
699
  return images && typeof images.binding === "string" && images.binding.length > 0 ? images.binding : "IMAGES";
342
700
  }
701
+ function getWranglerAssetsBinding(code) {
702
+ const property = findTopLevelJsonProperty(code, "assets");
703
+ if (!property) return "ASSETS";
704
+ const assets = JSON.parse(stripJsonComments(code.slice(property.valueStart, property.valueEnd)));
705
+ return assets && typeof assets.binding === "string" && assets.binding.length > 0 ? assets.binding : "ASSETS";
706
+ }
707
+ function getWranglerAssetsDirectory(code) {
708
+ const property = findTopLevelJsonProperty(code, "assets");
709
+ if (!property) return "dist/client";
710
+ const assets = JSON.parse(stripJsonComments(code.slice(property.valueStart, property.valueEnd)));
711
+ return assets && typeof assets.directory === "string" && assets.directory.length > 0 ? assets.directory : "dist/client";
712
+ }
343
713
  function getWranglerVersionMetadataBinding(code) {
344
714
  const property = findTopLevelJsonProperty(code, "version_metadata");
345
715
  if (!property) return DEFAULT_VERSION_METADATA_BINDING;
@@ -349,40 +719,67 @@ function getWranglerVersionMetadataBinding(code) {
349
719
  function cacheImports(options) {
350
720
  const imports = [];
351
721
  if (options.dataCache === "kv") imports.push("import { kvDataAdapter } from \"@vinext/cloudflare/cache/kv-data-adapter\";");
352
- if (options.cdnCache === "workers-cache") imports.push("import { cdnAdapter } from \"@vinext/cloudflare/cache/cdn-adapter\";");
722
+ if (options.cdnCache === "workers-cache") imports.push("import { workersCacheCdnAdapter } from \"@vinext/cloudflare/cache/workers-cache-cdn-adapter\";");
723
+ if (options.cdnCache === "static-assets") imports.push("import { staticAssetsAdapter } from \"@vinext/cloudflare/cache/static-assets-adapter\";");
724
+ if (options.cdnCache === "response-store") imports.push("import { responseStoreAdapter } from \"@vinext/cloudflare/cache/response-store-adapter\";");
353
725
  if (options.imageOptimization === "cloudflare-images") imports.push("import { imagesOptimizer } from \"@vinext/cloudflare/images/images-optimizer\";");
354
726
  return imports;
355
727
  }
356
- function vinextExpression(options, binding = "vinext", imageBinding = "imagesOptimizer", imagesBinding = "IMAGES", prerender = false, versionMetadataBinding = DEFAULT_VERSION_METADATA_BINDING) {
728
+ function vinextExpression(options, binding = "vinext", imageBinding = "imagesOptimizer", imagesBinding = "IMAGES", versionMetadataBinding = DEFAULT_VERSION_METADATA_BINDING, responseStoreBinding = "responseStoreAdapter", assetsBinding = "ASSETS", assetsDirectory = "dist/client") {
729
+ const responseStore = options.cdnCache === "response-store";
357
730
  const cacheEntries = [];
358
731
  if (options.dataCache === "kv") cacheEntries.push("data: kvDataAdapter()");
359
732
  if (options.cdnCache === "workers-cache") {
360
733
  const adapterOptions = versionMetadataBinding === DEFAULT_VERSION_METADATA_BINDING ? "" : `{ versionMetadataBinding: ${JSON.stringify(versionMetadataBinding)} }`;
361
- cacheEntries.push(`cdn: cdnAdapter(${adapterOptions})`);
734
+ cacheEntries.push(`cdn: workersCacheCdnAdapter(${adapterOptions})`);
735
+ }
736
+ if (options.cdnCache === "static-assets") {
737
+ const adapterOptions = assetsBinding === "ASSETS" ? "" : `{ binding: ${JSON.stringify(assetsBinding)} }`;
738
+ cacheEntries.push(`cdn: staticAssetsAdapter(${adapterOptions})`);
362
739
  }
363
740
  const optionEntries = [];
364
- if (cacheEntries.length > 0) optionEntries.push(`cache: { ${cacheEntries.join(", ")} }`);
741
+ if (responseStore) optionEntries.push(`cache: ${responseStoreBinding}(${options.responseStoreMode === "self-contained" ? "{ mode: \"self-contained\" }" : ""})`);
742
+ else if (cacheEntries.length > 0) optionEntries.push(`cache: { ${cacheEntries.join(", ")} }`);
743
+ if (options.cdnCache === "static-assets" || options.prerender) optionEntries.push("prerender: { routes: \"*\" }");
744
+ if (options.cdnCache === "static-assets") {
745
+ if (path.normalize(assetsDirectory) !== path.normalize("dist/client")) optionEntries.push(`clientOutDir: ${JSON.stringify(assetsDirectory)}`);
746
+ }
365
747
  if (options.imageOptimization === "cloudflare-images") {
366
748
  const adapterOptions = imagesBinding === "IMAGES" ? "" : `{ binding: ${JSON.stringify(imagesBinding)} }`;
367
749
  optionEntries.push(`images: { optimizer: ${imageBinding}(${adapterOptions}) }`);
368
750
  }
369
- if (prerender) optionEntries.push(`prerender: { routes: "*" }`);
370
751
  return optionEntries.length === 0 ? `${binding}()` : `${binding}({\n ${optionEntries.join(",\n ")},\n})`;
371
752
  }
753
+ function scopedNameSource(indent, pathBinding = "path", hashBinding = "createHash", typescript = true) {
754
+ return `${indent}generateScopedName(${typescript ? "name: string, filename: string" : "name, filename"}) {
755
+ ${indent} const relativePath = ${pathBinding}.relative(import.meta.dirname, filename.replace(/\\?.*$/, "")).replaceAll("\\\\", "/");
756
+ ${indent} return \`_\${name}_\${${hashBinding}("sha256").update(relativePath).digest("hex").slice(0, 7)}\`;
757
+ ${indent}}`;
758
+ }
759
+ function cssModulesConfigSource(indent = " ") {
760
+ return `\n${indent}css: {
761
+ ${indent} modules: {
762
+ ${scopedNameSource(`${indent} `)},
763
+ ${indent} },
764
+ ${indent}},`;
765
+ }
372
766
  /** Generate vite.config.ts for App Router */
373
- function generateAppRouterViteConfig(info, options = DEFAULT_CLOUDFLARE_INIT_OPTIONS, imagesBinding = "IMAGES", prerender = false, versionMetadataBinding = DEFAULT_VERSION_METADATA_BINDING) {
767
+ function generateAppRouterViteConfig(info, options = DEFAULT_CLOUDFLARE_INIT_OPTIONS, imagesBinding = "IMAGES", versionMetadataBinding = DEFAULT_VERSION_METADATA_BINDING, serviceBinding = false, assetsBinding = "ASSETS", assetsDirectory = "dist/client", hasCssModules = false) {
374
768
  const imports = [
375
769
  `import { defineConfig } from "vite";`,
376
770
  `import vinext from "vinext";`,
377
771
  `import { cloudflare } from "@cloudflare/vite-plugin";`,
378
- ...cacheImports(options)
772
+ ...serviceBinding ? ["import { responseStoreServiceBinding } from \"./cloudflare.config\";"] : [],
773
+ ...cacheImports(options),
774
+ ...hasCssModules ? ["import { createHash } from \"node:crypto\";", "import { patchCssModules } from \"vite-css-modules\";"] : []
379
775
  ];
380
- if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) imports.push(`import path from "node:path";`);
776
+ if (hasCssModules || info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) imports.push(`import path from "node:path";`);
381
777
  const plugins = [];
778
+ if (hasCssModules) plugins.push(" patchCssModules({ exportMode: \"default\" }),");
382
779
  if (info?.hasMDX) plugins.push(` // vinext auto-injects @mdx-js/rollup with plugins from next.config`);
383
- plugins.push(` ${vinextExpression(options, "vinext", "imagesOptimizer", imagesBinding, prerender, versionMetadataBinding).replace(/\n/g, "\n ")},`);
780
+ plugins.push(` ${vinextExpression(options, "vinext", "imagesOptimizer", imagesBinding, versionMetadataBinding, "responseStoreAdapter", assetsBinding, assetsDirectory).replace(/\n/g, "\n ")},`);
384
781
  plugins.push(` cloudflare({
385
- viteEnvironment: {
782
+ ${serviceBinding ? "auxiliaryWorkers: [{ config: responseStoreServiceBinding }],\n " : ""}viteEnvironment: {
386
783
  name: "rsc",
387
784
  childEnvironments: ["ssr"],
388
785
  },
@@ -396,19 +793,22 @@ function generateAppRouterViteConfig(info, options = DEFAULT_CLOUDFLARE_INIT_OPT
396
793
  export default defineConfig({
397
794
  plugins: [
398
795
  ${plugins.join("\n")}
399
- ],${resolveBlock}
796
+ ],${resolveBlock}${hasCssModules ? cssModulesConfigSource() : ""}
400
797
  });
401
798
  `;
402
799
  }
403
800
  /** Generate vite.config.ts for Pages Router */
404
- function generatePagesRouterViteConfig(info, options = DEFAULT_CLOUDFLARE_INIT_OPTIONS, imagesBinding = "IMAGES", prerender = false, versionMetadataBinding = DEFAULT_VERSION_METADATA_BINDING) {
801
+ function generatePagesRouterViteConfig(info, options = DEFAULT_CLOUDFLARE_INIT_OPTIONS, imagesBinding = "IMAGES", versionMetadataBinding = DEFAULT_VERSION_METADATA_BINDING, serviceBinding = false, hasCssModules = false, assetsBinding = "ASSETS", assetsDirectory = "dist/client") {
802
+ const legacyStaticAssets = options.legacyWrangler && options.cdnCache === "static-assets";
405
803
  const imports = [
406
804
  `import { defineConfig } from "vite";`,
407
805
  `import vinext from "vinext";`,
408
806
  `import { cloudflare } from "@cloudflare/vite-plugin";`,
409
- ...cacheImports(options)
807
+ ...serviceBinding ? ["import { responseStoreServiceBinding } from \"./cloudflare.config\";"] : [],
808
+ ...cacheImports(options),
809
+ ...hasCssModules ? ["import { createHash } from \"node:crypto\";", "import { patchCssModules } from \"vite-css-modules\";"] : []
410
810
  ];
411
- if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) imports.push(`import path from "node:path";`);
811
+ if (hasCssModules || info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) imports.push(`import path from "node:path";`);
412
812
  let resolveBlock = "";
413
813
  const aliases = [];
414
814
  if (info?.nativeModulesToStub && info.nativeModulesToStub.length > 0) for (const mod of info.nativeModulesToStub) aliases.push(` "${mod}": path.resolve(__dirname, "empty-stub.js"),`);
@@ -416,10 +816,10 @@ function generatePagesRouterViteConfig(info, options = DEFAULT_CLOUDFLARE_INIT_O
416
816
  return `${imports.join("\n")}
417
817
 
418
818
  export default defineConfig({
419
- plugins: [
420
- ${vinextExpression(options, "vinext", "imagesOptimizer", imagesBinding, prerender, versionMetadataBinding).replace(/\n/g, "\n ")},
421
- cloudflare(),
422
- ],${resolveBlock}
819
+ ${legacyStaticAssets ? ` environments: { client: { build: { outDir: ${JSON.stringify(assetsDirectory)} } }, ssr: { build: { outDir: "dist/server" } } },\n` : ""} plugins: [
820
+ ${hasCssModules ? " patchCssModules({ exportMode: \"default\" }),\n" : ""} ${vinextExpression(options, "vinext", "imagesOptimizer", imagesBinding, versionMetadataBinding, "responseStoreAdapter", assetsBinding, assetsDirectory).replace(/\n/g, "\n ")},
821
+ cloudflare(${legacyStaticAssets ? "{ viteEnvironment: { name: \"ssr\" } }" : serviceBinding ? "{ auxiliaryWorkers: [{ config: responseStoreServiceBinding }] }" : ""}),
822
+ ],${resolveBlock}${hasCssModules ? cssModulesConfigSource() : ""}
423
823
  });
424
824
  `;
425
825
  }
@@ -555,14 +955,17 @@ function allocateBinding(bindings, preferred) {
555
955
  }
556
956
  function findImportedBinding(program, source, imported) {
557
957
  for (const statement of program.body) {
558
- if (statement.type !== "ImportDeclaration" || statement.source.value !== source) continue;
559
- for (const specifier of statement.specifiers) if (specifier.type === "ImportSpecifier" && specifier.imported.type === "Identifier" && specifier.imported.name === imported) return specifier.local.name;
958
+ if (statement.type !== "ImportDeclaration" || statement.importKind === "type" || statement.source.value !== source) continue;
959
+ for (const specifier of statement.specifiers) if (specifier.type === "ImportSpecifier" && specifier.importKind !== "type" && specifier.imported.type === "Identifier" && specifier.imported.name === imported) return specifier.local.name;
560
960
  }
561
961
  }
962
+ function quoteImportSource(program, source) {
963
+ return program.body.find((statement) => statement.type === "ImportDeclaration")?.source.raw?.startsWith("'") ? `'${source.replaceAll("\\", "\\\\").replaceAll("'", "\\'")}'` : JSON.stringify(source);
964
+ }
562
965
  function ensureNamedImport(program, output, source, imported, binding) {
563
966
  const existing = findImportedBinding(program, source, imported);
564
967
  if (existing) return existing;
565
- const declaration = program.body.find((statement) => statement.type === "ImportDeclaration" && statement.source.value === source);
968
+ const declaration = program.body.find((statement) => statement.type === "ImportDeclaration" && statement.importKind !== "type" && statement.source.value === source);
566
969
  if (declaration) {
567
970
  const named = declaration.specifiers.filter((specifier) => specifier.type === "ImportSpecifier");
568
971
  if (named.length > 0) {
@@ -572,15 +975,15 @@ function ensureNamedImport(program, output, source, imported, binding) {
572
975
  }
573
976
  }
574
977
  const offset = importInsertionOffset(program);
575
- const sourceText = `import { ${binding === imported ? imported : `${imported} as ${binding}`} } from ${JSON.stringify(source)};`;
978
+ const sourceText = `import { ${binding === imported ? imported : `${imported} as ${binding}`} } from ${quoteImportSource(program, source)};`;
576
979
  output.appendLeft(offset, offset === 0 ? `${sourceText}\n` : `\n${sourceText}`);
577
980
  return binding;
578
981
  }
579
982
  function ensureDefaultImport(program, output, source, binding) {
580
- const existing = program.body.find((statement) => statement.type === "ImportDeclaration" && statement.source.value === source)?.specifiers.find((specifier) => specifier.type === "ImportDefaultSpecifier");
983
+ const existing = program.body.find((statement) => statement.type === "ImportDeclaration" && statement.importKind !== "type" && statement.source.value === source)?.specifiers.find((specifier) => specifier.type === "ImportDefaultSpecifier");
581
984
  if (existing) return existing.local.name;
582
985
  const offset = importInsertionOffset(program);
583
- const sourceText = `import ${binding} from ${JSON.stringify(source)};`;
986
+ const sourceText = `import ${binding} from ${quoteImportSource(program, source)};`;
584
987
  output.appendLeft(offset, offset === 0 ? `${sourceText}\n` : `\n${sourceText}`);
585
988
  return binding;
586
989
  }
@@ -619,11 +1022,50 @@ function ensureDefaultRequire(program, output, source, binding) {
619
1022
  output.appendLeft(offset, offset === 0 ? `${sourceText}\n` : `\n${sourceText}`);
620
1023
  return binding;
621
1024
  }
1025
+ const insertedCommas = /* @__PURE__ */ new WeakMap();
622
1026
  function insertObjectProperty(output, object, source, code) {
623
1027
  const offset = object.end - 1;
624
- const hasProperties = object.properties.length > 0;
625
- const hasTrailingComma = /,\s*$/.test(code.slice(object.start + 1, offset));
626
- output.appendLeft(offset, `${hasProperties && !hasTrailingComma ? "," : ""}\n${source}\n`);
1028
+ const lastProperty = object.properties.at(-1);
1029
+ if (lastProperty) {
1030
+ const gap = code.slice(lastProperty.end, offset);
1031
+ if (!endsWithCommaIgnoringWhitespaceAndComments(gap) && !insertedCommas.get(output)?.has(lastProperty.end)) {
1032
+ if (/^[ \t]+$/.test(gap)) output.update(lastProperty.end, offset, ",");
1033
+ else output.appendLeft(lastProperty.end, ",");
1034
+ const offsets = insertedCommas.get(output) ?? /* @__PURE__ */ new Set();
1035
+ offsets.add(lastProperty.end);
1036
+ insertedCommas.set(output, offsets);
1037
+ }
1038
+ }
1039
+ output.appendLeft(offset, `\n${source}\n`);
1040
+ }
1041
+ function formatInlineConfig(filePath, code, originalCode) {
1042
+ if (code === originalCode) return code;
1043
+ const config = findConfigObject(parseViteConfig(filePath, code));
1044
+ if (!config || config.properties.length === 0) return code;
1045
+ const output = new MagicString(code);
1046
+ const lineStart = code.lastIndexOf("\n", config.start) + 1;
1047
+ const indent = code.slice(lineStart, config.start).match(/^[ \t]*/)?.[0] ?? "";
1048
+ const properties = config.properties;
1049
+ const first = properties[0];
1050
+ const opening = code.slice(config.start + 1, first.start);
1051
+ if (/^[ \t]*$/.test(opening)) {
1052
+ if (opening) output.update(config.start + 1, first.start, `\n${indent} `);
1053
+ else output.appendLeft(first.start, `\n${indent} `);
1054
+ }
1055
+ for (let index = 1; index < properties.length; index++) {
1056
+ const previous = properties[index - 1];
1057
+ const current = properties[index];
1058
+ const gap = code.slice(previous.end, current.start);
1059
+ if (/^,[ \t]*$/.test(gap)) output.update(previous.end, current.start, `,\n${indent} `);
1060
+ }
1061
+ const last = properties.at(-1);
1062
+ const closing = code.slice(last.end, config.end - 1);
1063
+ if (/^,?[ \t]*$/.test(closing)) {
1064
+ const replacement = `${closing.includes(",") ? "," : ""}\n${indent}`;
1065
+ if (closing) output.update(last.end, config.end - 1, replacement);
1066
+ else output.appendLeft(last.end, replacement);
1067
+ }
1068
+ return output.toString();
627
1069
  }
628
1070
  function endsWithCommaIgnoringWhitespaceAndComments(code) {
629
1071
  let index = 0;
@@ -701,6 +1143,11 @@ function getVinextCacheSlot(call, name) {
701
1143
  if (cache?.value.type !== "ObjectExpression") return void 0;
702
1144
  return findProperty(cache.value, name);
703
1145
  }
1146
+ function getVinextCacheOption(call) {
1147
+ const firstArgument = call?.arguments[0];
1148
+ if (!firstArgument || firstArgument.type === "SpreadElement" || firstArgument.type !== "ObjectExpression") return;
1149
+ return findProperty(firstArgument, "cache");
1150
+ }
704
1151
  function hasVinextCacheSlot(call, name) {
705
1152
  return Boolean(getVinextCacheSlot(call, name));
706
1153
  }
@@ -711,11 +1158,6 @@ function getVinextImageOptimizer(call) {
711
1158
  if (images?.value.type !== "ObjectExpression") return void 0;
712
1159
  return findProperty(images.value, "optimizer");
713
1160
  }
714
- function hasVinextPrerender(call) {
715
- const firstArgument = call?.arguments[0];
716
- if (!firstArgument || firstArgument.type === "SpreadElement" || firstArgument.type !== "ObjectExpression") return false;
717
- return Boolean(findProperty(firstArgument, "prerender"));
718
- }
719
1161
  function isUsableImageOptimizer(property) {
720
1162
  if (!property) return false;
721
1163
  const value = property.value;
@@ -745,6 +1187,17 @@ function ensureVinextCache(output, config, vinextBinding, additions, code) {
745
1187
  const missing = additions.filter(({ name }) => !findProperty(cacheObject, name));
746
1188
  if (missing.length > 0) insertObjectProperty(output, cacheObject, missing.map(({ name, expression }) => ` ${name}: ${expression},`).join("\n"), code);
747
1189
  }
1190
+ function ensureVinextResponseStore(output, config, vinextBinding, expression, code) {
1191
+ if (!expression) return;
1192
+ const call = findPluginCall(config, vinextBinding);
1193
+ const firstArgument = call?.arguments[0];
1194
+ if (!call || !firstArgument || firstArgument.type === "SpreadElement") return;
1195
+ if (firstArgument.type !== "ObjectExpression") throw new Error("The vinext() plugin options must be a static object for vinext init to configure Workers Response Store.");
1196
+ const optionsObject = firstArgument;
1197
+ const cache = findProperty(optionsObject, "cache");
1198
+ if (!cache) insertObjectProperty(output, optionsObject, ` cache: ${expression},`, code);
1199
+ else if (cache.value.type === "ObjectExpression" && cache.value.properties.length === 0) output.overwrite(cache.value.start, cache.value.end, expression);
1200
+ }
748
1201
  function ensureVinextImageOptimizer(output, config, vinextBinding, expression, code) {
749
1202
  if (!expression) return;
750
1203
  const call = findPluginCall(config, vinextBinding);
@@ -767,17 +1220,28 @@ function ensureVinextImageOptimizer(output, config, vinextBinding, expression, c
767
1220
  if (!optimizer) insertObjectProperty(output, imagesObject, ` optimizer: ${expression},`, code);
768
1221
  else output.overwrite(optimizer.value.start, optimizer.value.end, expression);
769
1222
  }
770
- function ensureVinextPrerender(output, config, vinextBinding, prerender, code) {
771
- if (!prerender) return;
1223
+ function ensureVinextPrerenderOptions(output, config, vinextBinding, assetsDirectory, code) {
772
1224
  const call = findPluginCall(config, vinextBinding);
773
- if (!call || hasVinextPrerender(call)) return;
774
- if (call.arguments.length === 0) {
775
- output.appendLeft(call.end - 1, `{ prerender: { routes: "*" } }`);
776
- return;
1225
+ const firstArgument = call?.arguments[0];
1226
+ if (!call || !firstArgument || firstArgument.type === "SpreadElement") return;
1227
+ if (firstArgument.type !== "ObjectExpression") throw new Error("The vinext() plugin options must be a static object for vinext init to configure build-time prerendering.");
1228
+ const optionsObject = firstArgument;
1229
+ const additions = [];
1230
+ const prerender = findProperty(optionsObject, "prerender");
1231
+ if (!prerender) additions.push(" prerender: { routes: \"*\" },");
1232
+ else {
1233
+ const value = prerender.value;
1234
+ if (value.type === "Literal" && (value.value === false || value.value === null) || value.type === "Identifier" && value.name === "undefined") output.overwrite(value.start, value.end, "{ routes: \"*\" }");
777
1235
  }
778
- const firstArgument = call.arguments[0];
779
- if (firstArgument.type === "SpreadElement" || firstArgument.type !== "ObjectExpression") throw new Error("The vinext() plugin options must be a static object for vinext init to add prerender config.");
780
- insertObjectProperty(output, firstArgument, ` prerender: { routes: "*" },`, code);
1236
+ const clientOutDir = assetsDirectory && findProperty(optionsObject, "clientOutDir");
1237
+ if (assetsDirectory && !clientOutDir) {
1238
+ if (path.normalize(assetsDirectory) !== path.normalize("dist/client")) additions.push(` clientOutDir: ${JSON.stringify(assetsDirectory)},`);
1239
+ } else if (assetsDirectory && clientOutDir) {
1240
+ const value = clientOutDir.value;
1241
+ if (value.type !== "Literal" || typeof value.value !== "string") throw new Error("The vinext() clientOutDir option must be a string literal for vinext init to align it with Wrangler assets.directory.");
1242
+ if (path.normalize(value.value) !== path.normalize(assetsDirectory)) throw new Error(`The vinext() clientOutDir (${JSON.stringify(value.value)}) must match Wrangler assets.directory (${JSON.stringify(assetsDirectory)}) when using the Static Assets cache.`);
1243
+ }
1244
+ if (additions.length > 0) insertObjectProperty(output, optionsObject, additions.join("\n"), code);
781
1245
  }
782
1246
  function indentBlock(source, indent) {
783
1247
  return source.split("\n").map((line) => `${indent}${line}`).join("\n");
@@ -790,8 +1254,9 @@ function ensurePlugins(output, config, additions, code) {
790
1254
  }
791
1255
  if (plugins.value.type !== "ArrayExpression") throw new Error("The Vite config's plugins option must be an array for vinext init to update it.");
792
1256
  const array = plugins.value;
793
- const propertyIndent = code.slice(0, plugins.start).split("\n").at(-1)?.match(/^\s*/)?.[0] ?? "";
794
- const elementIndent = `${propertyIndent} `;
1257
+ const propertyIndent = code.slice(0, plugins.start).split("\n").at(-1)?.match(/^[ \t]*/)?.[0] ?? "";
1258
+ const inlinePropertyIndent = code.slice(config.start, plugins.start).includes("\n") ? propertyIndent : `${propertyIndent} `;
1259
+ const elementIndent = `${inlinePropertyIndent} `;
795
1260
  const missingExpressions = [];
796
1261
  for (const addition of additions) if (!array.elements.some((element) => element?.type === "CallExpression" && element.callee.type === "Identifier" && element.callee.name === addition.binding)) missingExpressions.push(addition.expression);
797
1262
  if (missingExpressions.length === 0) return;
@@ -820,7 +1285,91 @@ function ensurePlugins(output, config, additions, code) {
820
1285
  previousElement = element;
821
1286
  }
822
1287
  }
823
- output.appendLeft(closingOffset, `${prefix}\n${missingExpressions.map((expression) => indentBlock(expression, elementIndent)).join(",\n")},\n${propertyIndent}`);
1288
+ output.appendLeft(closingOffset, `${prefix}\n${missingExpressions.map((expression) => indentBlock(expression, elementIndent)).join(",\n")},\n${inlinePropertyIndent}`);
1289
+ }
1290
+ function simpleCssConfig(program) {
1291
+ const value = program.body.find((statement) => statement.type === "ExportDefaultDeclaration")?.declaration;
1292
+ const direct = value && value.type !== "FunctionDeclaration" && value.type !== "ClassDeclaration" ? unwrapObject(value) : void 0;
1293
+ if (direct) return direct;
1294
+ if (value?.type === "CallExpression" && value.callee.type === "Identifier" && value.callee.name === findImportedBinding(program, "vite", "defineConfig") && value.arguments[0]?.type === "ObjectExpression") return value.arguments[0];
1295
+ throw new Error("CSS Modules require an inline Vite config object (export default { ... } or defineConfig({ ... })). Convert a dynamic config to an inline object before running vinext init, or finish migration manually with patchCssModules({ exportMode: \"default\" }) and a deterministic css.modules.generateScopedName.");
1296
+ }
1297
+ function simpleProperties(object) {
1298
+ const names = /* @__PURE__ */ new Set();
1299
+ for (const property of object.properties) {
1300
+ const name = property.type === "Property" ? propertyName(property) : void 0;
1301
+ if (!name || property.type !== "Property" || property.kind !== "init" || names.has(name)) throw new Error("CSS Modules cannot safely update Vite config spreads, computed keys, accessors, or duplicate properties. Add patchCssModules({ exportMode: \"default\" }) before vinext() and a deterministic css.modules.generateScopedName manually.");
1302
+ names.add(name);
1303
+ }
1304
+ }
1305
+ function updateViteConfigForCssModules(filePath, code) {
1306
+ const program = parseViteConfig(filePath, code);
1307
+ const config = simpleCssConfig(program);
1308
+ simpleProperties(config);
1309
+ const css = findProperty(config, "css");
1310
+ const cssObject = css?.value.type === "ObjectExpression" ? css.value : void 0;
1311
+ if (css && !cssObject) throw new Error("CSS Modules require a literal css config object.");
1312
+ if (cssObject) simpleProperties(cssObject);
1313
+ const modules = cssObject && findProperty(cssObject, "modules");
1314
+ const modulesObject = modules?.value.type === "ObjectExpression" ? modules.value : void 0;
1315
+ if (modules && !modulesObject) throw new Error("CSS Modules require a literal css.modules object.");
1316
+ if (modulesObject) simpleProperties(modulesObject);
1317
+ const existingName = modulesObject && findProperty(modulesObject, "generateScopedName");
1318
+ if (existingName) {
1319
+ const value = existingName.value;
1320
+ if (value.type !== "FunctionExpression" && value.type !== "ArrowFunctionExpression" && !(value.type === "Literal" && typeof value.value === "string" && !/\[hash(?::[^\]]*)?\]/i.test(value.value))) throw new Error("CSS Modules need a deterministic generateScopedName function; replace the existing hash template or dynamic value manually.");
1321
+ }
1322
+ const firstOutput = new MagicString(code);
1323
+ if (!existingName) {
1324
+ const bindings = collectTopLevelBindings(program);
1325
+ const hashBinding = ensureNamedImport(program, firstOutput, "node:crypto", "createHash", allocateBinding(bindings, "createHash"));
1326
+ const source = scopedNameSource(" ", ensureDefaultImport(program, firstOutput, "node:path", allocateBinding(bindings, "path")), hashBinding, [
1327
+ ".ts",
1328
+ ".mts",
1329
+ ".cts"
1330
+ ].includes(path.extname(filePath)));
1331
+ if (modulesObject) insertObjectProperty(firstOutput, modulesObject, `${source},`, code);
1332
+ else if (cssObject) insertObjectProperty(firstOutput, cssObject, ` modules: {\n${source},\n },`, code);
1333
+ else insertObjectProperty(firstOutput, config, ` css: {\n modules: {\n${source},\n },\n },`, code);
1334
+ }
1335
+ const withCss = firstOutput.toString();
1336
+ const nextProgram = parseViteConfig(filePath, withCss);
1337
+ const nextConfig = simpleCssConfig(nextProgram);
1338
+ const plugins = findProperty(nextConfig, "plugins");
1339
+ const pluginArray = plugins?.value.type === "ArrayExpression" ? plugins.value : void 0;
1340
+ if (plugins && !pluginArray) throw new Error("CSS Modules require a literal plugins array.");
1341
+ if (pluginArray?.elements.some((element) => element?.type === "SpreadElement")) throw new Error("CSS Modules cannot safely update a plugins array containing spreads.");
1342
+ if (pluginArray?.elements.some((element) => element && element.type !== "CallExpression")) throw new Error("CSS Modules require direct plugin calls in the plugins array.");
1343
+ const existingBinding = findImportedBinding(nextProgram, "vite-css-modules", "patchCssModules");
1344
+ const namespaceBinding = nextProgram.body.filter((statement) => statement.type === "ImportDeclaration" && statement.importKind !== "type" && statement.source.value === "vite-css-modules").flatMap((statement) => statement.specifiers).find((specifier) => specifier.type === "ImportNamespaceSpecifier")?.local.name;
1345
+ const existingCall = pluginArray?.elements.find((element) => element?.type === "CallExpression" && (element.callee.type === "Identifier" && element.callee.name === (existingBinding ?? "patchCssModules") || element.callee.type === "MemberExpression" && !element.callee.computed && element.callee.property.type === "Identifier" && element.callee.property.name === "patchCssModules"));
1346
+ if (existingCall?.type === "CallExpression") {
1347
+ const callee = existingCall.callee;
1348
+ if (callee.type === "Identifier" && callee.name !== existingBinding || callee.type === "MemberExpression" && (callee.object.type !== "Identifier" || callee.object.name !== namespaceBinding)) throw new Error("Import patchCssModules from \"vite-css-modules\" before configuring CSS Modules.");
1349
+ const argument = existingCall.arguments[0];
1350
+ if (argument?.type === "ObjectExpression") simpleProperties(argument);
1351
+ const mode = argument?.type === "ObjectExpression" ? findProperty(argument, "exportMode") : void 0;
1352
+ if (argument?.type !== "ObjectExpression" || argument.properties.some((property) => property.type !== "Property" || property.computed) || mode?.value.type !== "Literal" || mode.value.value !== "default") throw new Error("Set the existing patchCssModules plugin to exportMode: \"default\" for CSS classes named \"default\".");
1353
+ } else {
1354
+ const output = new MagicString(withCss);
1355
+ const expression = `${ensureNamedImport(nextProgram, output, "vite-css-modules", "patchCssModules", allocateBinding(collectTopLevelBindings(nextProgram), "patchCssModules"))}({ exportMode: "default" })`;
1356
+ if (!pluginArray) insertObjectProperty(output, nextConfig, ` plugins: [${expression}],`, withCss);
1357
+ else {
1358
+ const first = pluginArray.elements.find(Boolean);
1359
+ output.appendLeft(first ? first.start : pluginArray.end - 1, first ? `${expression}, ` : expression);
1360
+ }
1361
+ const updated = output.toString();
1362
+ parseViteConfig(filePath, updated);
1363
+ return {
1364
+ code: formatInlineConfig(filePath, updated, code),
1365
+ preservedExistingGenerateScopedName: Boolean(existingName)
1366
+ };
1367
+ }
1368
+ parseViteConfig(filePath, withCss);
1369
+ return {
1370
+ code: formatInlineConfig(filePath, withCss, code),
1371
+ preservedExistingGenerateScopedName: Boolean(existingName)
1372
+ };
824
1373
  }
825
1374
  function ensureNativeAliases(output, config, modules, pathBinding, code) {
826
1375
  if (modules.length === 0) return;
@@ -845,11 +1394,7 @@ function ensureNativeAliases(output, config, modules, pathBinding, code) {
845
1394
  }
846
1395
  function updateViteConfigForCloudflare(filePath, code, options) {
847
1396
  const program = parseViteConfig(filePath, code);
848
- const cacheOptions = options.cache ?? {
849
- dataCache: "none",
850
- cdnCache: "workers-cache",
851
- imageOptimization: "cloudflare-images"
852
- };
1397
+ const cacheOptions = options.cache ?? DEFAULT_CLOUDFLARE_INIT_OPTIONS;
853
1398
  const config = findConfigObject(program);
854
1399
  if (!config) throw new Error(`Could not find a static Vite config object in ${path.basename(filePath)}. Use an object export or defineConfig({...}) so vinext init can update it.`);
855
1400
  const output = new MagicString(code);
@@ -859,9 +1404,45 @@ function updateViteConfigForCloudflare(filePath, code, options) {
859
1404
  const vinextBinding = commonJs ? ensureDefaultRequire(program, output, "vinext", vinextLocal) : ensureDefaultImport(program, output, "vinext", vinextLocal);
860
1405
  const existingVinextCall = findPluginCall(config, vinextBinding);
861
1406
  const existingImageOptimizer = getVinextImageOptimizer(existingVinextCall);
862
- const needsPrerender = Boolean(options.prerender && !hasVinextPrerender(existingVinextCall));
863
1407
  const configureCaches = options.cache !== void 0;
1408
+ const existingCache = getVinextCacheOption(existingVinextCall);
1409
+ if (configureCaches && existingCache) {
1410
+ const cacheObject = existingCache.value.type === "ObjectExpression" ? existingCache.value : void 0;
1411
+ if (!cacheObject && cacheOptions.cdnCache !== "response-store" || cacheObject && (cacheOptions.cdnCache === "none" || cacheOptions.cdnCache === "data-cache") && findProperty(cacheObject, "cdn") || cacheObject && cacheOptions.dataCache === "none" && findProperty(cacheObject, "data")) throw new Error("The existing vinext() cache configuration does not match the selected cache options. Remove it before rerunning vinext init.");
1412
+ }
864
1413
  const cacheAdditions = [];
1414
+ let responseStoreExpression;
1415
+ let responseStoreBinding = "responseStoreAdapter";
1416
+ if (configureCaches && cacheOptions.cdnCache === "response-store") {
1417
+ const source = "@vinext/cloudflare/cache/response-store-adapter";
1418
+ const imported = "responseStoreAdapter";
1419
+ const existing = commonJs ? findRequiredBinding(program, source, imported) : findImportedBinding(program, source, imported);
1420
+ const cache = getVinextCacheOption(existingVinextCall);
1421
+ const alreadyConfigured = Boolean(existing && cache?.value.type === "CallExpression" && cache.value.callee.type === "Identifier" && cache.value.callee.name === existing);
1422
+ if (cache && !alreadyConfigured && !(cache.value.type === "ObjectExpression" && cache.value.properties.length === 0)) throw new Error("The vinext() cache option is already configured. Remove it before configuring Workers Response Store.");
1423
+ if (!cache || alreadyConfigured || cache.value.type === "ObjectExpression" && cache.value.properties.length === 0) {
1424
+ const local = existing ?? allocateBinding(bindings, imported);
1425
+ const binding = commonJs ? ensureNamedRequire(program, output, source, imported, local) : ensureNamedImport(program, output, source, imported, local);
1426
+ responseStoreBinding = binding;
1427
+ responseStoreExpression = `${binding}(${cacheOptions.responseStoreMode === "self-contained" ? "{ mode: \"self-contained\" }" : ""})`;
1428
+ if (alreadyConfigured && cache) {
1429
+ const call = cache.value;
1430
+ const argument = call.arguments[0];
1431
+ const mode = cacheOptions.responseStoreMode ?? "service-binding";
1432
+ if (!argument) {
1433
+ if (mode === "self-contained") output.appendLeft(call.end - 1, "{ mode: \"self-contained\" }");
1434
+ } else if (argument.type === "ObjectExpression") {
1435
+ const optionsObject = argument;
1436
+ const existingMode = findProperty(optionsObject, "mode");
1437
+ if (existingMode) {
1438
+ if (existingMode.shorthand) output.overwrite(existingMode.start, existingMode.end, `mode: ${JSON.stringify(mode)}`);
1439
+ else output.overwrite(existingMode.value.start, existingMode.value.end, JSON.stringify(mode));
1440
+ } else if (mode === "self-contained") insertObjectProperty(output, optionsObject, " mode: \"self-contained\",", code);
1441
+ } else throw new Error("responseStoreAdapter() options must be a static object for vinext init to update its mode.");
1442
+ responseStoreExpression = void 0;
1443
+ }
1444
+ }
1445
+ }
865
1446
  if (cacheOptions.dataCache === "kv" && !hasVinextCacheSlot(existingVinextCall, "data")) {
866
1447
  const local = (commonJs ? findRequiredBinding(program, "@vinext/cloudflare/cache/kv-data-adapter", "kvDataAdapter") : findImportedBinding(program, "@vinext/cloudflare/cache/kv-data-adapter", "kvDataAdapter")) ?? allocateBinding(bindings, "kvDataAdapter");
867
1448
  const binding = commonJs ? ensureNamedRequire(program, output, "@vinext/cloudflare/cache/kv-data-adapter", "kvDataAdapter", local) : ensureNamedImport(program, output, "@vinext/cloudflare/cache/kv-data-adapter", "kvDataAdapter", local);
@@ -871,12 +1452,15 @@ function updateViteConfigForCloudflare(filePath, code, options) {
871
1452
  });
872
1453
  }
873
1454
  if (configureCaches && cacheOptions.cdnCache === "workers-cache") {
874
- const imported = "cdnAdapter";
875
- const source = "@vinext/cloudflare/cache/cdn-adapter";
876
- const existing = commonJs ? findRequiredBinding(program, source, imported) : findImportedBinding(program, source, imported);
877
1455
  const existingCdnSlot = getVinextCacheSlot(existingVinextCall, "cdn");
878
- const existingUsesCloudflareAdapter = Boolean(existing && existingCdnSlot?.value.type === "CallExpression" && existingCdnSlot.value.callee.type === "Identifier" && existingCdnSlot.value.callee.name === existing);
879
- if (!existingCdnSlot || existingUsesCloudflareAdapter) {
1456
+ const existingCallee = existingCdnSlot?.value.type === "CallExpression" && existingCdnSlot.value.callee.type === "Identifier" ? existingCdnSlot.value.callee.name : void 0;
1457
+ const adapterImports = [["@vinext/cloudflare/cache/workers-cache-cdn-adapter", "workersCacheCdnAdapter"], ["@vinext/cloudflare/cache/cdn-adapter", "cdnAdapter"]].map(([source, imported]) => ({
1458
+ source,
1459
+ imported,
1460
+ local: commonJs ? findRequiredBinding(program, source, imported) : findImportedBinding(program, source, imported)
1461
+ }));
1462
+ const { source, imported, local: existing } = adapterImports.find(({ local }) => local && local === existingCallee) ?? adapterImports[0];
1463
+ if (!existingCdnSlot || Boolean(existing && existingCallee === existing)) {
880
1464
  const local = existing ?? allocateBinding(bindings, imported);
881
1465
  const expression = `${commonJs ? ensureNamedRequire(program, output, source, imported, local) : ensureNamedImport(program, output, source, imported, local)}(${options.versionMetadataBinding && options.versionMetadataBinding !== DEFAULT_VERSION_METADATA_BINDING ? `{ versionMetadataBinding: ${JSON.stringify(options.versionMetadataBinding)} }` : ""})`;
882
1466
  if (existingCdnSlot) output.overwrite(existingCdnSlot.value.start, existingCdnSlot.value.end, expression);
@@ -886,6 +1470,23 @@ function updateViteConfigForCloudflare(filePath, code, options) {
886
1470
  });
887
1471
  }
888
1472
  }
1473
+ if (configureCaches && cacheOptions.cdnCache === "static-assets") {
1474
+ const imported = "staticAssetsAdapter";
1475
+ const source = "@vinext/cloudflare/cache/static-assets-adapter";
1476
+ const existing = commonJs ? findRequiredBinding(program, source, imported) : findImportedBinding(program, source, imported);
1477
+ const existingCdnSlot = getVinextCacheSlot(existingVinextCall, "cdn");
1478
+ const existingUsesStaticAssets = Boolean(existing && existingCdnSlot?.value.type === "CallExpression" && existingCdnSlot.value.callee.type === "Identifier" && existingCdnSlot.value.callee.name === existing);
1479
+ if (existingCdnSlot && !existingUsesStaticAssets) throw new Error("The existing vinext() CDN cache adapter does not match the selected Static Assets cache. Remove it before rerunning vinext init.");
1480
+ if (!existingCdnSlot || existingUsesStaticAssets) {
1481
+ const local = existing ?? allocateBinding(bindings, imported);
1482
+ const expression = `${commonJs ? ensureNamedRequire(program, output, source, imported, local) : ensureNamedImport(program, output, source, imported, local)}(${options.assetsBinding && options.assetsBinding !== "ASSETS" ? `{ binding: ${JSON.stringify(options.assetsBinding)} }` : ""})`;
1483
+ if (existingCdnSlot) output.overwrite(existingCdnSlot.value.start, existingCdnSlot.value.end, expression);
1484
+ else cacheAdditions.push({
1485
+ name: "cdn",
1486
+ expression
1487
+ });
1488
+ }
1489
+ }
889
1490
  let imageOptimizerExpression;
890
1491
  if (cacheOptions.imageOptimization === "cloudflare-images") {
891
1492
  const source = "@vinext/cloudflare/images/images-optimizer";
@@ -899,37 +1500,44 @@ function updateViteConfigForCloudflare(filePath, code, options) {
899
1500
  const cloudflareLocal = (commonJs ? findRequiredBinding(program, "@cloudflare/vite-plugin", "cloudflare") : findImportedBinding(program, "@cloudflare/vite-plugin", "cloudflare")) ?? allocateBinding(bindings, "cloudflare");
900
1501
  const cloudflareBinding = commonJs ? ensureNamedRequire(program, output, "@cloudflare/vite-plugin", "cloudflare", cloudflareLocal) : ensureNamedImport(program, output, "@cloudflare/vite-plugin", "cloudflare", cloudflareLocal);
901
1502
  ensurePlugins(output, config, [{
902
- expression: existingVinextCall ? `${vinextBinding}()` : options.cache || options.prerender ? vinextExpression(cacheOptions, vinextBinding, imageOptimizerExpression?.slice(0, imageOptimizerExpression.indexOf("(")) || "imagesOptimizer", options.imagesBinding, options.prerender, options.versionMetadataBinding) : `${vinextBinding}()`,
1503
+ expression: existingVinextCall ? `${vinextBinding}()` : options.cache ? vinextExpression(cacheOptions, vinextBinding, imageOptimizerExpression?.slice(0, imageOptimizerExpression.indexOf("(")) || "imagesOptimizer", options.imagesBinding, options.versionMetadataBinding, responseStoreBinding, options.assetsBinding, options.assetsDirectory) : `${vinextBinding}()`,
903
1504
  binding: vinextBinding
904
1505
  }, {
905
1506
  expression: cloudflarePluginExpression(options.isAppRouter, cloudflareBinding),
906
1507
  binding: cloudflareBinding
907
1508
  }], code);
908
1509
  ensureCloudflareViteEnvironment(output, config, cloudflareBinding, options.isAppRouter, code);
909
- if (existingVinextCall) if (existingVinextCall.arguments.length === 0 && (cacheAdditions.length > 0 || imageOptimizerExpression || needsPrerender)) {
910
- const properties = [];
911
- if (cacheAdditions.length > 0) properties.push(`cache: { ${cacheAdditions.map(({ name, expression }) => `${name}: ${expression}`).join(", ")} }`);
912
- if (imageOptimizerExpression) properties.push(`images: { optimizer: ${imageOptimizerExpression} }`);
913
- if (needsPrerender) properties.push(`prerender: { routes: "*" }`);
914
- const plugins = findProperty(config, "plugins");
915
- const closingIndent = `${plugins ? code.slice(0, plugins.start).split("\n").at(-1)?.match(/^\s*/)?.[0] ?? "" : ""} `;
916
- const propertyEntryIndent = `${closingIndent} `;
917
- output.appendLeft(existingVinextCall.end - 1, `{\n${propertyEntryIndent}${properties.join(`,\n${propertyEntryIndent}`)},\n${closingIndent}}`);
918
- } else {
919
- ensureVinextCache(output, config, vinextBinding, cacheAdditions, code);
920
- ensureVinextImageOptimizer(output, config, vinextBinding, imageOptimizerExpression, code);
921
- ensureVinextPrerender(output, config, vinextBinding, options.prerender, code);
1510
+ if (existingVinextCall) {
1511
+ if (existingVinextCall.arguments.length === 0 && (responseStoreExpression || cacheAdditions.length > 0 || imageOptimizerExpression || cacheOptions.cdnCache === "static-assets" || cacheOptions.prerender)) {
1512
+ const properties = [];
1513
+ if (responseStoreExpression) properties.push(`cache: ${responseStoreExpression}`);
1514
+ else if (cacheAdditions.length > 0) properties.push(`cache: { ${cacheAdditions.map(({ name, expression }) => `${name}: ${expression}`).join(", ")} }`);
1515
+ if (imageOptimizerExpression) properties.push(`images: { optimizer: ${imageOptimizerExpression} }`);
1516
+ if (cacheOptions.cdnCache === "static-assets" || cacheOptions.prerender) properties.push("prerender: { routes: \"*\" }");
1517
+ if (cacheOptions.cdnCache === "static-assets") {
1518
+ if (options.assetsDirectory && path.normalize(options.assetsDirectory) !== path.normalize("dist/client")) properties.push(`clientOutDir: ${JSON.stringify(options.assetsDirectory)}`);
1519
+ }
1520
+ const plugins = findProperty(config, "plugins");
1521
+ const closingIndent = `${plugins ? code.slice(0, plugins.start).split("\n").at(-1)?.match(/^\s*/)?.[0] ?? "" : ""} `;
1522
+ const propertyEntryIndent = `${closingIndent} `;
1523
+ output.appendLeft(existingVinextCall.end - 1, `{\n${propertyEntryIndent}${properties.join(`,\n${propertyEntryIndent}`)},\n${closingIndent}}`);
1524
+ } else {
1525
+ ensureVinextResponseStore(output, config, vinextBinding, responseStoreExpression, code);
1526
+ ensureVinextCache(output, config, vinextBinding, cacheAdditions, code);
1527
+ ensureVinextImageOptimizer(output, config, vinextBinding, imageOptimizerExpression, code);
1528
+ if (cacheOptions.cdnCache === "static-assets" || cacheOptions.prerender) ensureVinextPrerenderOptions(output, config, vinextBinding, cacheOptions.cdnCache === "static-assets" ? options.assetsDirectory ?? "dist/client" : void 0, code);
1529
+ }
922
1530
  }
923
1531
  if (options.nativeModulesToStub.length > 0) {
924
1532
  const pathLocal = (commonJs ? findRequiredBinding(program, "node:path", "default") : program.body.filter((statement) => statement.type === "ImportDeclaration").find((statement) => statement.source.value === "node:path")?.specifiers.find((specifier) => specifier.type === "ImportDefaultSpecifier")?.local.name) ?? allocateBinding(bindings, "path");
925
1533
  const pathBinding = commonJs ? ensureDefaultRequire(program, output, "node:path", pathLocal) : ensureDefaultImport(program, output, "node:path", pathLocal);
926
1534
  ensureNativeAliases(output, config, options.nativeModulesToStub, pathBinding, code);
927
1535
  }
928
- return output.toString();
1536
+ return formatInlineConfig(filePath, output.toString(), code);
929
1537
  }
930
1538
  function usesCommonJsViteConfig(filePath, code) {
931
1539
  if (/\.(?:cjs|cts)$/.test(filePath)) return true;
932
1540
  return parseViteConfig(filePath, code).body.some((statement) => statement.type === "ExpressionStatement" && statement.expression.type === "AssignmentExpression" && statement.expression.left.type === "MemberExpression" && statement.expression.left.object.type === "Identifier" && statement.expression.left.object.name === "module" && statement.expression.left.property.type === "Identifier" && statement.expression.left.property.name === "exports");
933
1541
  }
934
1542
  //#endregion
935
- export { generateAppRouterViteConfig, generatePagesRouterViteConfig, generateWranglerConfig, getWranglerImagesBinding, getWranglerVersionMetadataBinding, setupCloudflarePlatform, updateViteConfigForCloudflare, updateWranglerConfigForCloudflare, usesCommonJsViteConfig, validateCloudflarePlatformSetup };
1543
+ export { compactResourceName, cssModulesConfigSource, generateAppRouterViteConfig, generatePagesRouterViteConfig, generateResponseStoreWranglerConfig, generateWranglerConfig, getWranglerImagesBinding, getWranglerVersionMetadataBinding, setupCloudflarePlatform, updateViteConfigForCloudflare, updateViteConfigForCssModules, updateWranglerConfigForCloudflare, usesCommonJsViteConfig, validateCloudflarePlatformSetup };