void 1.1.11 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/{account-cmd-R35a4Oa8.mjs → account-cmd-CdUll_35.mjs} +5 -5
  2. package/dist/action-key-XZ9HkWAO.mjs +26 -0
  3. package/dist/{application-analysis-D7nNmNJb.mjs → application-analysis-fEqoSeMp.mjs} +11 -11
  4. package/dist/{application-routing-CZH66gXn.mjs → application-routing-DAhNP4u3.mjs} +1 -1
  5. package/dist/{ast-CPGPjb0V.mjs → ast-CsZ_q_gc.mjs} +6 -1
  6. package/dist/ast-bindings-C3yaPs1y.mjs +296 -0
  7. package/dist/{auth-link-VHmiKZmP.mjs → auth-link-C87vGXM-.mjs} +5 -5
  8. package/dist/{auth-router-O_Wrs5kg.mjs → auth-router-6I81r-ix.mjs} +3 -3
  9. package/dist/{better-auth-shared-Bv18bB-l.d.mts → better-auth-shared-DVk2DkTW.d.mts} +1 -1
  10. package/dist/{build-cmd-CMZiMn46.mjs → build-cmd-ex1g-j_e.mjs} +4 -4
  11. package/dist/{cache-TZ5Ab3d7.mjs → cache-oHzrnY3z.mjs} +4 -4
  12. package/dist/{cancel-deploy-DXoR6oC3.mjs → cancel-deploy-viAMD0Q_.mjs} +3 -3
  13. package/dist/cf-build-output-BJHuSsVN.mjs +1 -0
  14. package/dist/{cf-build-output-Bc8i3dzE.mjs → cf-build-output-BhVxldCw.mjs} +75 -10
  15. package/dist/{cf-user-agent-ChjQp2MU.mjs → cf-command-values-ByHk0xg4.mjs} +6 -16
  16. package/dist/cf-worker-settings-BECvvTVd.mjs +37 -0
  17. package/dist/cli/cli.mjs +139 -35
  18. package/dist/cli/cloudflare-operation-process.mjs +65 -18
  19. package/dist/cli/env-schema-probe.d.mts +1 -1
  20. package/dist/cli/env-schema-probe.mjs +3 -3
  21. package/dist/{client-GuSO3v_x.mjs → client-BEkdj1kx.mjs} +58 -13
  22. package/dist/client-BiRDZTSd.mjs +1 -0
  23. package/dist/{cloudflare-auth-DSvBc1Gu.mjs → cloudflare-auth-Byo_0_N9.mjs} +1 -1
  24. package/dist/{cloudflare-cmd-ZSErUl6Y.mjs → cloudflare-cmd-DMzCv12s.mjs} +5 -5
  25. package/dist/{cloudflare-config-rdFOys4X.mjs → cloudflare-config-DchHxPTo.mjs} +1 -1
  26. package/dist/{cloudflare-connect-BN-k2kD-.mjs → cloudflare-connect-CCRTVg-I.mjs} +3 -3
  27. package/dist/{cloudflare-operations-DH3GedbV.mjs → cloudflare-operations-Dh9dEHJj.mjs} +17 -7
  28. package/dist/{cloudflare-operations-Cm8lVx7W.mjs → cloudflare-operations-DsSaw2BT.mjs} +1 -1
  29. package/dist/{cloudflare-process-CZJ4viYl.mjs → cloudflare-process-8jEYIeim.mjs} +3 -2
  30. package/dist/{config-DC5llZaI.mjs → config-BIaXIkkv.mjs} +8 -3
  31. package/dist/{config-DYJV8aEH.mjs → config-BU6hMu1W.mjs} +1 -1
  32. package/dist/{config-D26zcdKy.mjs → config-DHgSEWT7.mjs} +39 -6
  33. package/dist/{config-7qoq2p9v.d.mts → config-DQfHOKh9.d.mts} +10 -1
  34. package/dist/config-entry.d.mts +1 -1
  35. package/dist/{connect-yQuLbuiJ.mjs → connect-k7R2rPVA.mjs} +6 -6
  36. package/dist/{create-project-CGOo_OL_.mjs → create-project-DTuy-l0z.mjs} +1 -1
  37. package/dist/{create-project-DEEWJX_M.mjs → create-project-DV71ol5d.mjs} +4 -4
  38. package/dist/{db-COI-yTJE.mjs → db-DVOkLH5X.mjs} +79 -23
  39. package/dist/{delete-PgN6L_9N.mjs → delete-BbP5eopu.mjs} +4 -4
  40. package/dist/{deploy-DsW-PrRQ.mjs → deploy-7H32EnUs.mjs} +220 -95
  41. package/dist/deploy-CE0Ev0Ob.mjs +2 -0
  42. package/dist/{deploy-managed-static-Dqz06S2u.mjs → deploy-managed-static-DlvcvnQT.mjs} +74 -28
  43. package/dist/{deploy-transport-nY3vLXPL.mjs → deploy-transport-BzGEj0Ge.mjs} +2 -2
  44. package/dist/deploy.d.mts +22 -1
  45. package/dist/deploy.mjs +49 -8
  46. package/dist/{dev-inbox-Rd6j_8vM.mjs → dev-inbox-D0jxye_D.mjs} +1 -1
  47. package/dist/{dispatch-BAbbn3jg.mjs → dispatch-DoUnxTNo.mjs} +15 -11
  48. package/dist/{dist-CfgIkieS.mjs → dist-B1PLt4_8.mjs} +1 -1
  49. package/dist/{dist-BVdsO7Py.mjs → dist-Cor9XGoz.mjs} +94 -200
  50. package/dist/{dist-Bn8Kodjp.mjs → dist-D15hFhP0.mjs} +1 -1
  51. package/dist/{domain-DKlNI0SR.mjs → domain-CA2wBgra.mjs} +5 -5
  52. package/dist/drizzle-9TubSZvI.mjs +1 -0
  53. package/dist/{email-BcjSyAL0.mjs → email-B9ayYQEG.mjs} +1 -1
  54. package/dist/{email-C0s3OvJk.mjs → email-DXpCc77w.mjs} +10 -10
  55. package/dist/{email-cloudflare-etpKiITL.mjs → email-cloudflare-D03g2TkS.mjs} +7 -7
  56. package/dist/{entry-B_0IhV64.mjs → entry-BEM8ZuGP.mjs} +40 -12
  57. package/dist/{env-BX2JFsgF.mjs → env-DgOQ9_8S.mjs} +6 -6
  58. package/dist/{env-public-CCdykygU.d.mts → env-public-6lqiSD2b.d.mts} +1 -0
  59. package/dist/{env-types-GRchm5dw.mjs → env-types-BicfKBhV.mjs} +1 -1
  60. package/dist/{env-validation-CuGfWRJd.mjs → env-validation-BmsdCZEk.mjs} +1 -1
  61. package/dist/{env-validation-D_KyMdab.mjs → env-validation-Dwq3PJzK.mjs} +3 -3
  62. package/dist/{fetch-DHLOuPyk.d.mts → fetch-CUX0tB78.d.mts} +14 -1
  63. package/dist/fetch-CtESUYWd.mjs +26 -0
  64. package/dist/{fetch-error-Dj3crt0e.mjs → fetch-error-Bw0n-IY-.mjs} +1 -1
  65. package/dist/{fetch-stream-PGgz4uGz.mjs → fetch-stream-BspOeTAI.mjs} +1 -1
  66. package/dist/{fetch-stream-CNxOrBdP.d.mts → fetch-stream-DfkAzZf-.d.mts} +1 -1
  67. package/dist/{gen-Bj6ZkOcI.mjs → gen-BfmcIi2g.mjs} +5 -5
  68. package/dist/gen-NrOlWZaG.mjs +1 -0
  69. package/dist/{github-cmd-DQDryS-5.mjs → github-cmd-CY9LUqLh.mjs} +4 -4
  70. package/dist/{handler-_PqY82xe.d.mts → handler-BbkSPzGF.d.mts} +91 -9
  71. package/dist/{headers-Bi4bOAwp.mjs → headers-D522zd0A.mjs} +2 -2
  72. package/dist/help-BeAFFE5C.mjs +1 -0
  73. package/dist/{help-D49SL_lN.mjs → help-CxSlPpzJ.mjs} +83 -12
  74. package/dist/{inbound-BuTfm11U.mjs → inbound-VrOLqwZY.mjs} +1 -1
  75. package/dist/index.d.mts +1 -1
  76. package/dist/index.mjs +125 -124
  77. package/dist/{info-Bxunp14X.mjs → info-7VDlhtyy.mjs} +4 -4
  78. package/dist/{init-DyTEY04s.mjs → init-DxYyOs4-.mjs} +103 -43
  79. package/dist/{link-CgOVn9EC.mjs → link-Ddmod1dZ.mjs} +5 -5
  80. package/dist/{list-CUfD9RSb.mjs → list-MogaugiO.mjs} +5 -5
  81. package/dist/{live-DJONVlQK.d.mts → live-Bt8Y_0bg.d.mts} +1 -1
  82. package/dist/{local-d1-CpaPbd_L.mjs → local-d1-BHBnKWRb.mjs} +1 -1
  83. package/dist/{log-vqY3pqwI.mjs → log-BMwmN5Ae.mjs} +2 -2
  84. package/dist/{login-BJvGW5Eu.mjs → login-Cttnagmm.mjs} +4 -4
  85. package/dist/login-DgDwlKc_.mjs +1 -0
  86. package/dist/{logs-DeizBI4j.mjs → logs-CAszUWZI.mjs} +4 -4
  87. package/dist/{migrate-8rk56vV8.mjs → migrate-DyT2jJ8y.mjs} +5 -5
  88. package/dist/migrate-n49ZeS1X.mjs +1 -0
  89. package/dist/{mime-srOklVVv.mjs → mime-BAyHPskU.mjs} +1 -1
  90. package/dist/nitro.mjs +3 -3
  91. package/dist/{node-uN8_zxJr.mjs → node-WB7c2N4L.mjs} +2 -2
  92. package/dist/operator-cmd-d2MvJOrl.mjs +1 -0
  93. package/dist/{operator-cmd-CA5QQyvE.mjs → operator-cmd-skshjMGl.mjs} +4 -4
  94. package/dist/output-BW9uK099.mjs +1 -0
  95. package/dist/{output-Ba6ZbrzY.mjs → output-BpgYODYx.mjs} +16 -4
  96. package/dist/pages/client.d.mts +2 -2
  97. package/dist/pages/client.mjs +48 -25
  98. package/dist/pages/index.d.mts +2 -2
  99. package/dist/pages/index.mjs +4 -4
  100. package/dist/pages/islands-plugin.d.mts +43 -5
  101. package/dist/pages/islands-plugin.mjs +100 -28
  102. package/dist/pages/protocol.d.mts +2 -2
  103. package/dist/pages/protocol.mjs +1 -1
  104. package/dist/pages/serialize.d.mts +2 -2
  105. package/dist/pages/serialize.mjs +1 -1
  106. package/dist/{parse-filename-CUbj-1MP.mjs → parse-filename-DioPHiR9.mjs} +1 -35
  107. package/dist/{picocolors-BTps1_gs.mjs → picocolors-BsDfhxIw.mjs} +1 -1
  108. package/dist/{platform-args-B7ke06up.mjs → platform-args-DVbVClZl.mjs} +12 -4
  109. package/dist/platform-args-kQrgxScY.mjs +1 -0
  110. package/dist/{platform-auth-config-CZaY812e.mjs → platform-auth-config-C-pm5Qzx.mjs} +6 -6
  111. package/dist/{platform-auth-protection-U9HCqoXv.mjs → platform-auth-protection-SHhvim1L.mjs} +4 -4
  112. package/dist/{platform-auth-recovery-B0BV2hfV.mjs → platform-auth-recovery-DXVWs-wA.mjs} +4 -4
  113. package/dist/{platform-cmd-CXrjk4fb.mjs → platform-cmd-D5I1beUX.mjs} +7 -7
  114. package/dist/{platform-cmd-D9lwFpcl.mjs → platform-cmd-PiNRkopU.mjs} +1 -1
  115. package/dist/{platform-domain-CXyq-68_.mjs → platform-domain-jpmBfZeb.mjs} +4 -4
  116. package/dist/{platform-lifecycle-Dz2cJsLX.mjs → platform-lifecycle-DH3Yr1qQ.mjs} +1 -1
  117. package/dist/{platform-lifecycle-D0TdyXbN.mjs → platform-lifecycle-DyKmuNY6.mjs} +405 -44
  118. package/dist/{platform-management-CnXhgxTM.mjs → platform-management--vDwSn35.mjs} +49 -5
  119. package/dist/{platform-management-BvgbusqL.mjs → platform-management-7m-PLaPJ.mjs} +1 -1
  120. package/dist/{platform-plans-config-BWn1S2Rv.mjs → platform-plans-config-CeydDSj0.mjs} +2 -2
  121. package/dist/{platform-recovery-CH_fThW6.mjs → platform-recovery-BiNpZZab.mjs} +2 -2
  122. package/dist/{platform-setup-YvN9VQXV.mjs → platform-setup-Ca53gtt0.mjs} +3 -2
  123. package/dist/{plugin-inference-Bekzjuqw.mjs → plugin-inference-DUjCd55H.mjs} +145 -218
  124. package/dist/{prepare-2XD6kh77.mjs → prepare-BcAE5Sdj.mjs} +3 -3
  125. package/dist/prepare-C4I0f--h.mjs +1 -0
  126. package/dist/{prepare-DepAGBcV.mjs → prepare-DA-17DhO.mjs} +5 -5
  127. package/dist/{prerender-render-Bfsumdkv.mjs → prerender-render-Cijv7UFo.mjs} +11 -6
  128. package/dist/prerender-render.mjs +1 -1
  129. package/dist/{project-cmd-CpLYflCH.mjs → project-cmd-DA4K5faU.mjs} +18 -18
  130. package/dist/{project-team-CTSY7W7Q.mjs → project-team-CQBNveX3.mjs} +4 -4
  131. package/dist/{project-token-Cybtlfbl.mjs → project-token-CCalFyQf.mjs} +4 -4
  132. package/dist/{project-zero-trust-DKOtqyvu.mjs → project-zero-trust-DPnkiEuT.mjs} +4 -4
  133. package/dist/{protocol-B8sI8dRD.d.mts → protocol-BBDpJz3G.d.mts} +3 -1
  134. package/dist/{protocol-RNP0u7UY.mjs → protocol-DimNxVRr.mjs} +42 -17
  135. package/dist/{provision-UcYjpTRh.mjs → provision-BFLCrnUp.mjs} +1 -1
  136. package/dist/{provision-BuifYvLc.mjs → provision-DtROpNNI.mjs} +6 -5
  137. package/dist/{requests-Ryiazz9i.mjs → requests-BpH0kImL.mjs} +3 -3
  138. package/dist/resolve-project-DD1vu8s9.mjs +1 -0
  139. package/dist/{resolve-project-WpwkCB_c.mjs → resolve-project-Xoi6eTWY.mjs} +1 -1
  140. package/dist/{rollback-Or0EV3rP.mjs → rollback-CXS1tAa-.mjs} +10 -9
  141. package/dist/{rolldown-runtime-DXIUcv95.mjs → rolldown-runtime-3h0WiCiA.mjs} +1 -1
  142. package/dist/{routing-assets-VkrKIbxE.mjs → routing-assets-DdSFxoLp.mjs} +10 -4
  143. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  144. package/dist/runtime/better-auth-pg.d.mts +1 -1
  145. package/dist/runtime/better-auth.d.mts +1 -1
  146. package/dist/runtime/client-react.d.mts +2 -2
  147. package/dist/runtime/client-react.mjs +3 -3
  148. package/dist/runtime/client-solid.d.mts +2 -2
  149. package/dist/runtime/client-solid.mjs +3 -3
  150. package/dist/runtime/client-svelte.d.mts +2 -2
  151. package/dist/runtime/client-svelte.mjs +3 -3
  152. package/dist/runtime/client-vue.d.mts +2 -2
  153. package/dist/runtime/client-vue.mjs +3 -3
  154. package/dist/runtime/client.d.mts +2 -2
  155. package/dist/runtime/client.mjs +3 -3
  156. package/dist/runtime/email/testing.mjs +4 -4
  157. package/dist/runtime/email.mjs +3 -3
  158. package/dist/runtime/env-public.d.mts +1 -1
  159. package/dist/runtime/fetch-server.d.mts +8 -0
  160. package/dist/runtime/fetch-server.mjs +30 -0
  161. package/dist/runtime/fetch-stream.d.mts +2 -2
  162. package/dist/runtime/fetch-stream.mjs +2 -2
  163. package/dist/runtime/fetch.d.mts +2 -2
  164. package/dist/runtime/fetch.mjs +3 -3
  165. package/dist/runtime/handler.d.mts +1 -1
  166. package/dist/runtime/live-client.d.mts +1 -1
  167. package/dist/runtime/live.d.mts +1 -1
  168. package/dist/runtime/routing.d.mts +17 -76
  169. package/dist/runtime/routing.mjs +277 -216
  170. package/dist/runtime/validator.d.mts +1 -1
  171. package/dist/runtime/ws-server.d.mts +2 -2
  172. package/dist/runtime/ws.d.mts +1 -1
  173. package/dist/{scan-D2-FcLHs.mjs → scan-8IzYXiU_.mjs} +12 -11
  174. package/dist/{secret-CClHaFxm.mjs → secret-BbXHfLAt.mjs} +6 -6
  175. package/dist/serialize-DtR8Vwa_.d.mts +18 -0
  176. package/dist/serialize-YHvlcG3Q.mjs +31 -0
  177. package/dist/{skills-C_yRTg0g.mjs → skills-CrUO3PJ0.mjs} +1 -1
  178. package/dist/{subcommand-prompt-Bm3ZlYgA.mjs → subcommand-prompt-D9OhhbGG.mjs} +2 -2
  179. package/dist/{version-metadata-B1Bm2wSq.mjs → version-metadata-tS39iW09.mjs} +1 -1
  180. package/dist/wrangler-BLb3_luP.mjs +1 -0
  181. package/dist/{wrangler-C9XSzrju.mjs → wrangler-F96NnLyb.mjs} +13 -5
  182. package/dist/{wrapper-BOigE1xJ.mjs → wrapper-D3sZyh2C.mjs} +5 -3
  183. package/dist/{ws-CsBNxv86.d.mts → ws-BH-im_tX.d.mts} +1 -1
  184. package/docs/guide/ai.md +1 -1
  185. package/docs/guide/database/postgresql.md +1 -1
  186. package/docs/guide/database.md +26 -0
  187. package/docs/guide/deployment.md +2 -0
  188. package/docs/guide/edge/headers.md +1 -1
  189. package/docs/guide/email/domains.md +1 -1
  190. package/docs/guide/email/receiving.md +1 -1
  191. package/docs/guide/email/sending.md +3 -3
  192. package/docs/guide/pages-routing/actions-and-forms.md +1 -1
  193. package/docs/guide/pages-routing/markdown.md +3 -1
  194. package/docs/guide/platform/administration/email.md +7 -1
  195. package/docs/guide/platform/installation/ci.md +2 -0
  196. package/docs/guide/platform/installation/credentials.md +24 -6
  197. package/docs/guide/platform/installation/domains.md +16 -0
  198. package/docs/guide/platform/installation/maintenance.md +32 -2
  199. package/docs/guide/platform/installation/setup.md +1 -1
  200. package/docs/guide/self-hosted-platform.md +1 -1
  201. package/docs/guide/server-routing.md +1 -1
  202. package/docs/guide/typed-fetch.md +1 -1
  203. package/docs/integrations/cloudflare.md +2 -1
  204. package/docs/integrations/frameworks/tanstack-start.md +25 -0
  205. package/docs/reference/api/deploy.md +35 -3
  206. package/docs/reference/api/env.md +1 -1
  207. package/docs/reference/api/rewrites.md +1 -1
  208. package/docs/reference/api/types.md +1 -0
  209. package/docs/reference/cli/database.md +15 -0
  210. package/docs/reference/cli/platform-installation.md +5 -2
  211. package/docs/reference/cli/project.md +4 -2
  212. package/docs/reference/cli/setup.md +17 -0
  213. package/docs/reference/cli.md +1 -0
  214. package/docs/reference/config.md +14 -1
  215. package/docs/reference/resource-inference.md +4 -0
  216. package/package.json +23 -22
  217. package/sandbox.Dockerfile +1 -1
  218. package/schema.json +23 -3
  219. package/dist/cf-build-output-BU3hqdHu.mjs +0 -1
  220. package/dist/client-DrdeJgHR.mjs +0 -1
  221. package/dist/deploy-CxNgEYr4.mjs +0 -2
  222. package/dist/fetch-sAcwjzLO.mjs +0 -18
  223. package/dist/gen-DsCukhuw.mjs +0 -1
  224. package/dist/help-DOFygYi4.mjs +0 -1
  225. package/dist/login-alAlxw4S.mjs +0 -1
  226. package/dist/migrate-D2odrAmh.mjs +0 -1
  227. package/dist/operator-cmd-D7toMPJ9.mjs +0 -1
  228. package/dist/platform-args-B_LrqEZB.mjs +0 -1
  229. package/dist/prepare-EVEbQ9n2.mjs +0 -1
  230. package/dist/resolve-project-PnhzMtY6.mjs +0 -1
  231. package/dist/serialize-BtQyaYoC.mjs +0 -20
  232. package/dist/serialize-CfSwWfF2.d.mts +0 -10
  233. package/dist/wrangler-DAdxHEzh.mjs +0 -1
@@ -95,14 +95,14 @@ function readCliVersion() {
95
95
  }
96
96
  const VOID_CLI_VERSION = readCliVersion();
97
97
  /** The oldest Void platform release this CLI supports. */
98
- const MIN_PLATFORM_VERSION = "1.1.11";
98
+ const MIN_PLATFORM_VERSION = "1.2.0";
99
99
  const RELEASE_VERSION = /^(\d+)\.(\d+)\.(\d+)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/;
100
100
  /**
101
- * Version checks keyed by platform base URL. Every outcome (pass, inconclusive,
102
- * or too old) is kept for the rest of the process, so polling commands probe
103
- * discovery once.
101
+ * Discovery probes keyed by platform base URL. Every outcome (pass,
102
+ * inconclusive, or too old) is kept for the rest of the process, so polling
103
+ * commands probe discovery once.
104
104
  */
105
- const platformVersionChecks = /* @__PURE__ */ new Map();
105
+ const platformVersionProbes = /* @__PURE__ */ new Map();
106
106
  /**
107
107
  * Returns whether `version` is older than MIN_PLATFORM_VERSION, or null when
108
108
  * it is not a release version. A prerelease sorts before its release.
@@ -244,15 +244,26 @@ var PlatformClient = class {
244
244
  }
245
245
  /**
246
246
  * Checks the platform version once per process and base URL. Concurrent
247
- * first requests share one check, and its outcome is kept for later requests.
247
+ * first requests share one probe, and its outcome is kept for later requests.
248
248
  */
249
- ensureSupportedPlatform() {
250
- const apiUrl = this.baseUrl;
251
- const cached = platformVersionChecks.get(apiUrl);
249
+ async ensureSupportedPlatform() {
250
+ assertSupportedPlatform(this.baseUrl, await this.platformProbe());
251
+ }
252
+ platformProbe() {
253
+ const cached = platformVersionProbes.get(this.baseUrl);
252
254
  if (cached) return cached;
253
- const check = this.probePlatformVersion().then((probe) => assertSupportedPlatform(apiUrl, probe));
254
- platformVersionChecks.set(apiUrl, check);
255
- return check;
255
+ const probe = this.probePlatformVersion();
256
+ platformVersionProbes.set(this.baseUrl, probe);
257
+ return probe;
258
+ }
259
+ /**
260
+ * Whether discovery says the platform accepts Worker modules uploaded to R2.
261
+ * False when discovery omits the field or gave no usable answer.
262
+ */
263
+ async supportsDirectWorkerUpload() {
264
+ let probe = await this.platformProbe();
265
+ if (probe.kind === "unknown") probe = await this.probePlatformVersion();
266
+ return probe.kind === "version" && probe.directWorkerUpload;
256
267
  }
257
268
  /** Reads the platform version from public discovery, without credentials. */
258
269
  async probePlatformVersion() {
@@ -270,9 +281,11 @@ var PlatformClient = class {
270
281
  return { kind: "missing" };
271
282
  }
272
283
  try {
284
+ const discovery = await readPlatformDiscoveryResponse(this.baseUrl, response);
273
285
  return {
274
286
  kind: "version",
275
- version: (await readPlatformDiscoveryResponse(this.baseUrl, response)).platformVersion
287
+ version: discovery.platformVersion,
288
+ directWorkerUpload: discovery.directWorkerUpload === true
276
289
  };
277
290
  } catch {
278
291
  return { kind: "unknown" };
@@ -518,6 +531,38 @@ var PlatformClient = class {
518
531
  if (!res.ok) await throwPlatformApiError("Failed to request upload URLs", res, "deploy");
519
532
  return (await res.json()).urls;
520
533
  }
534
+ /**
535
+ * Requests one presigned R2 PUT per Worker module, in `modules` order. The
536
+ * platform refuses a Worker over Cloudflare's size limit here (413
537
+ * `worker_too_large`), before any bytes are uploaded.
538
+ */
539
+ async requestWorkerUploadUrls(projectId, modules) {
540
+ const url = `${this.baseUrl}/projects/${projectId}/deploy/worker-upload-urls`;
541
+ this.cliLog?.info("worker_upload_urls_post", {
542
+ url,
543
+ moduleCount: modules.length
544
+ });
545
+ const request = { modules };
546
+ const res = await this.request(url, {
547
+ method: "POST",
548
+ headers: {
549
+ "Content-Type": "application/json",
550
+ ...this.authHeaders
551
+ },
552
+ body: JSON.stringify(request)
553
+ });
554
+ this.cliLog?.info("worker_upload_urls_response", {
555
+ status: res.status,
556
+ cfRay: res.headers.get("cf-ray")
557
+ });
558
+ if (!res.ok) await throwPlatformApiError("Failed to request worker upload URLs", res, "deploy");
559
+ const json = await res.json();
560
+ if (typeof json?.id !== "string" || !json.id || !Array.isArray(json.urls) || json.urls.length !== modules.length || !json.urls.every((entry) => typeof entry?.url === "string" && typeof entry.headers === "object" && !!entry.headers)) throw new Error("Invalid worker upload URLs from platform.");
561
+ return {
562
+ id: json.id,
563
+ urls: json.urls
564
+ };
565
+ }
521
566
  async *finalizeDeploy(projectId, payload) {
522
567
  const url = `${this.baseUrl}/projects/${projectId}/deploy`;
523
568
  yield* this.streamDeployRequest(url, projectId, {
@@ -0,0 +1 @@
1
+ export { r as PlatformClient } from "./client-BEkdj1kx.mjs";
@@ -1,4 +1,4 @@
1
- import { i as isCleanCloudflareExit, l as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation, t as createCloudflareProcessRunner } from "./cloudflare-process-CZJ4viYl.mjs";
1
+ import { i as isCleanCloudflareExit, l as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation, t as createCloudflareProcessRunner } from "./cloudflare-process-8jEYIeim.mjs";
2
2
  import { execFile, spawn } from "node:child_process";
3
3
  //#region src/cli/cloudflare-auth.ts
4
4
  var CloudflareAuthenticationError = class extends Error {
@@ -1,9 +1,9 @@
1
1
  import { t as basename } from "./dist-ipQi0Q8y.mjs";
2
- import { b as readRootWranglerConfig } from "./wrangler-C9XSzrju.mjs";
3
- import { L as log } from "./dist-BVdsO7Py.mjs";
4
- import { m as printSuccess } from "./output-Ba6ZbrzY.mjs";
5
- import { i as isCleanCloudflareExit } from "./cloudflare-process-CZJ4viYl.mjs";
6
- import { a as parseCloudflareAuthSession, i as ensureCloudflareAuthentication, n as cloudflareCredentialOverrides, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-DSvBc1Gu.mjs";
2
+ import { b as readRootWranglerConfig } from "./wrangler-F96NnLyb.mjs";
3
+ import { L as log } from "./dist-Cor9XGoz.mjs";
4
+ import { m as printSuccess } from "./output-BpgYODYx.mjs";
5
+ import { i as isCleanCloudflareExit } from "./cloudflare-process-8jEYIeim.mjs";
6
+ import { a as parseCloudflareAuthSession, i as ensureCloudflareAuthentication, n as cloudflareCredentialOverrides, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-Byo_0_N9.mjs";
7
7
  //#region src/cli/cloudflare-cmd.ts
8
8
  async function runCloudflareCommand(root, args) {
9
9
  const runWrangler = createBundledCloudflareAuthRunner(root);
@@ -1,6 +1,6 @@
1
1
  import { a as join } from "./dist-ipQi0Q8y.mjs";
2
2
  import "./project-paths-DGu_QZ_Q.mjs";
3
- import { d as readConfig } from "./config-D26zcdKy.mjs";
3
+ import { p as readConfig } from "./config-DHgSEWT7.mjs";
4
4
  import { t as writeFileAtomic } from "./atomic-write-Dq6R0BPN.mjs";
5
5
  import { t as parseJsoncObject } from "./generated-wrangler-config-DeWj5F9Y.mjs";
6
6
  import { existsSync, mkdirSync, readFileSync, rmSync } from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import { a as join, t as basename } from "./dist-ipQi0Q8y.mjs";
2
- import { b as readRootWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE, j as writeProvisionedWranglerConfig } from "./wrangler-C9XSzrju.mjs";
3
- import { K as select, L as log, tt as isCancel } from "./dist-BVdsO7Py.mjs";
4
- import { i as ensureCloudflareAuthentication, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-DSvBc1Gu.mjs";
2
+ import { M as writeProvisionedWranglerConfig, b as readRootWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE } from "./wrangler-F96NnLyb.mjs";
3
+ import { K as select, L as log, tt as isCancel } from "./dist-Cor9XGoz.mjs";
4
+ import { i as ensureCloudflareAuthentication, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-Byo_0_N9.mjs";
5
5
  import { existsSync } from "node:fs";
6
6
  //#region src/cli/cloudflare-connect.ts
7
7
  async function connectCloudflare(root, interactive = Boolean(process.stdin.isTTY)) {
@@ -1,10 +1,10 @@
1
1
  import { a as join } from "./dist-ipQi0Q8y.mjs";
2
- import { i as persistCloudflareConfig, r as materializeCloudflareConfig } from "./cloudflare-config-rdFOys4X.mjs";
3
- import { A as updateWranglerCustomDomain, M as writeWranglerPublishedTrafficSnapshot, S as readWranglerCustomDomains, w as readWranglerPublishedTrafficSnapshot } from "./wrangler-C9XSzrju.mjs";
4
- import { u as getErrorMessage } from "./output-Ba6ZbrzY.mjs";
5
- import { t as createCloudflareProcessRunner } from "./cloudflare-process-CZJ4viYl.mjs";
6
- import { _ as provisionEnv, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware, v as resolvePinnedApiBaseUrl } from "./provision-BuifYvLc.mjs";
7
- import { a as findWranglerCiOverrideDotenvFile, i as findAmbientConfigOverride } from "./deploy-transport-nY3vLXPL.mjs";
2
+ import { i as persistCloudflareConfig, r as materializeCloudflareConfig } from "./cloudflare-config-DchHxPTo.mjs";
3
+ import { N as writeWranglerPublishedTrafficSnapshot, S as readWranglerCustomDomains, j as updateWranglerCustomDomain, w as readWranglerPublishedTrafficSnapshot } from "./wrangler-F96NnLyb.mjs";
4
+ import { u as getErrorMessage } from "./output-BpgYODYx.mjs";
5
+ import { t as createCloudflareProcessRunner } from "./cloudflare-process-8jEYIeim.mjs";
6
+ import { _ as provisionEnv, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware, v as resolvePinnedApiBaseUrl } from "./provision-DtROpNNI.mjs";
7
+ import { a as findWranglerCiOverrideDotenvFile, i as findAmbientConfigOverride } from "./deploy-transport-BzGEj0Ge.mjs";
8
8
  import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
9
9
  import { tmpdir } from "node:os";
10
10
  import { deployCloudflareVersionTraffic, encodeCloudflareVersionMessage, parseCloudflareVersionMessage, parseRootWranglerConfig, readBindingFieldPresence, readCloudflareTriggerConfig, readWranglerTopLevelString, resolveD1MigrateTarget, stabilizeCloudflareVersionTriggers } from "@void/deploy-cloudflare";
@@ -115,6 +115,16 @@ async function applyCloudflareD1Migrations(context) {
115
115
  configPath: context.operation.configPath
116
116
  }, { capture: false });
117
117
  }
118
+ /** Restore the D1 database with Time Travel. Returns the bookmark that undoes the restore. */
119
+ async function restoreCloudflareD1Database(context, target) {
120
+ const previous = (await run(context.operation, {
121
+ type: "d1.time-travel.restore",
122
+ database: context.migrateToken,
123
+ target,
124
+ configPath: context.operation.configPath
125
+ })).data?.previousBookmark;
126
+ return typeof previous === "string" ? previous : void 0;
127
+ }
118
128
  async function readCloudflareWorkerStatus(context) {
119
129
  const [deployment, deployments, versions] = await Promise.all([
120
130
  run(context, {
@@ -439,4 +449,4 @@ function failedOperationResult(error) {
439
449
  };
440
450
  }
441
451
  //#endregion
442
- export { resolveCloudflareD1Context as _, createCloudflareEmptyDomainPublisher as a, tailCloudflareWorker as b, listCloudflareDomains as c, parseCloudflareDeployedVersionIds as d, parseCloudflareVersions as f, readCloudflareWorkerStatus as g, readCloudflareD1Migrations as h, createCloudflareEmptyCronPublisher as i, listCloudflareSecrets as l, putCloudflareSecret as m, applyCloudflareD1Migrations as n, deleteCloudflareSecret as o, publishEmptyCloudflareCustomDomainSet as p, changeCloudflareDomain as r, executeCloudflareD1Sql as s, activateCloudflareExistingVersion as t, parseActiveVersionId as u, resolveCloudflareOperationContext as v, syncCloudflareSecrets as y };
452
+ export { resolveCloudflareD1Context as _, createCloudflareEmptyDomainPublisher as a, syncCloudflareSecrets as b, listCloudflareDomains as c, parseCloudflareDeployedVersionIds as d, parseCloudflareVersions as f, readCloudflareWorkerStatus as g, readCloudflareD1Migrations as h, createCloudflareEmptyCronPublisher as i, listCloudflareSecrets as l, putCloudflareSecret as m, applyCloudflareD1Migrations as n, deleteCloudflareSecret as o, publishEmptyCloudflareCustomDomainSet as p, changeCloudflareDomain as r, executeCloudflareD1Sql as s, activateCloudflareExistingVersion as t, parseActiveVersionId as u, resolveCloudflareOperationContext as v, tailCloudflareWorker as x, restoreCloudflareD1Database as y };
@@ -1 +1 @@
1
- export { t as activateCloudflareExistingVersion, n as applyCloudflareD1Migrations, r as changeCloudflareDomain, o as deleteCloudflareSecret, s as executeCloudflareD1Sql, c as listCloudflareDomains, l as listCloudflareSecrets, m as putCloudflareSecret, h as readCloudflareD1Migrations, g as readCloudflareWorkerStatus, _ as resolveCloudflareD1Context, v as resolveCloudflareOperationContext, y as syncCloudflareSecrets, b as tailCloudflareWorker } from "./cloudflare-operations-DH3GedbV.mjs";
1
+ export { t as activateCloudflareExistingVersion, n as applyCloudflareD1Migrations, r as changeCloudflareDomain, o as deleteCloudflareSecret, s as executeCloudflareD1Sql, c as listCloudflareDomains, l as listCloudflareSecrets, m as putCloudflareSecret, h as readCloudflareD1Migrations, g as readCloudflareWorkerStatus, _ as resolveCloudflareD1Context, v as resolveCloudflareOperationContext, y as restoreCloudflareD1Database, b as syncCloudflareSecrets, x as tailCloudflareWorker } from "./cloudflare-operations-Dh9dEHJj.mjs";
@@ -1,7 +1,8 @@
1
1
  import { a as join, c as resolve, n as dirname, s as relative } from "./dist-ipQi0Q8y.mjs";
2
2
  import { n as readProjectPaths } from "./project-paths-DGu_QZ_Q.mjs";
3
- import { i as hasSsrEntry, r as getSsrServerEntryPath } from "./entry-B_0IhV64.mjs";
3
+ import { i as hasSsrEntry, r as getSsrServerEntryPath } from "./entry-BEM8ZuGP.mjs";
4
4
  import { i as readPackageJson, n as hasPackageDependency, t as getPackageDependencies } from "./package-json-BjYqR-So.mjs";
5
+ import { t as CF_VERSION_SOURCE_MAX_OUTPUT_BYTES } from "./cf-command-values-ByHk0xg4.mjs";
5
6
  import { existsSync } from "node:fs";
6
7
  import { fileURLToPath } from "node:url";
7
8
  import { spawnSync } from "node:child_process";
@@ -364,7 +365,7 @@ function createCloudflareProcessRunner(options) {
364
365
  encoding: "utf8",
365
366
  shell: false,
366
367
  windowsHide: true,
367
- maxBuffer: 33554432,
368
+ maxBuffer: operation.type === "versions.view" && operation.includeSource ? CF_VERSION_SOURCE_MAX_OUTPUT_BYTES : 33554432,
368
369
  timeout: options.timeoutMs,
369
370
  stdio: streaming ? [
370
371
  "inherit",
@@ -1,5 +1,6 @@
1
1
  import { a as join, s as relative } from "./dist-ipQi0Q8y.mjs";
2
- import { n as readProjectPaths } from "./project-paths-DGu_QZ_Q.mjs";
2
+ import { i as resolveProjectPaths } from "./project-paths-DGu_QZ_Q.mjs";
3
+ import { c as getDatabaseCasing, p as readConfig } from "./config-DHgSEWT7.mjs";
3
4
  import { n as schemaSpecifier, t as discoverSchema } from "./discover-LaV0tbIu.mjs";
4
5
  import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
5
6
  import { tmpdir } from "node:os";
@@ -15,14 +16,17 @@ const PLACEHOLDER_DB_URL = {
15
16
  * Schema and migration paths are relative to the project root: drizzle-kit
16
17
  * resolves them against its working directory, and `void db` always runs it
17
18
  * with `cwd` set to the project root, so the config file itself may live
18
- * anywhere (see `outDir`).
19
+ * anywhere (see `outDir`). It carries `database.casing` from the project's
20
+ * config, which `void/db` also passes to drizzle.
19
21
  *
20
22
  * @param options.outDir Directory for the config file. When set, the file is
21
23
  * written readable by the owner only.
22
24
  * @returns Absolute path to the written config file.
23
25
  */
24
26
  function writeDrizzleConfig(root, dbPath, dialect = "sqlite", options) {
25
- const paths = readProjectPaths(root);
27
+ const projectConfig = readConfig(root);
28
+ const paths = resolveProjectPaths(root, projectConfig);
29
+ const casing = getDatabaseCasing(projectConfig);
26
30
  const schema = discoverSchema(root, paths);
27
31
  const schemaPaths = [...schema ? [schemaSpecifier(schema, root)] : [], ...(options?.additionalSchemas ?? []).map((path) => `./${relative(root, path)}`)];
28
32
  if (schemaPaths.length === 0) throw new Error(`db: No Drizzle schema found. Create ${paths.sourceRelative("db/schema.ts")} or run \`void gen model <name>\`.`);
@@ -30,6 +34,7 @@ function writeDrizzleConfig(root, dbPath, dialect = "sqlite", options) {
30
34
  mkdirSync(outDir, { recursive: true });
31
35
  const config = {
32
36
  dialect,
37
+ ...casing ? { casing } : {},
33
38
  schema: schemaPaths.length === 1 ? schemaPaths[0] : schemaPaths,
34
39
  out: `./${relative(root, paths.migrationsDir)}`,
35
40
  migrations: { prefix: "timestamp" },
@@ -1 +1 @@
1
- export { t as PLACEHOLDER_DB_URL, n as withPrivateDrizzleConfig, r as writeDrizzleConfig } from "./config-DC5llZaI.mjs";
1
+ export { t as PLACEHOLDER_DB_URL, n as withPrivateDrizzleConfig, r as writeDrizzleConfig } from "./config-BIaXIkkv.mjs";
@@ -1,6 +1,6 @@
1
1
  import { a as validateSourceDir, c as loadVoidConfig } from "./project-paths-DGu_QZ_Q.mjs";
2
2
  import { a as isVoidAuthProvider, t as VOID_AUTH_PROVIDERS } from "./providers-BUHwJlmM.mjs";
3
- import { n as MimeError, s as parseAddress } from "./mime-srOklVVv.mjs";
3
+ import { n as MimeError, s as parseAddress } from "./mime-BAyHPskU.mjs";
4
4
  import { isRecord } from "@void/deploy-core";
5
5
  //#region src/config.ts
6
6
  const CONFIG_FILE = "void.json";
@@ -40,6 +40,12 @@ const VALID_REDIRECT_STATUSES = /* @__PURE__ */ new Set([
40
40
  308
41
41
  ]);
42
42
  const VALID_DATABASE_VALUES = /* @__PURE__ */ new Set(["pg", "mysql"]);
43
+ const VALID_DATABASE_DIALECTS = /* @__PURE__ */ new Set([
44
+ "sqlite",
45
+ "pg",
46
+ "mysql"
47
+ ]);
48
+ const VALID_DATABASE_CASINGS = /* @__PURE__ */ new Set(["snake_case", "camelCase"]);
43
49
  /** Cloudflare's hard maximum for Workers CPU time per request (5 minutes). */
44
50
  const MAX_WORKER_CPU_MS = 3e5;
45
51
  const VALID_SANDBOX_INSTANCE_TYPES = /* @__PURE__ */ new Set([
@@ -361,7 +367,12 @@ function validateConfigObject(obj) {
361
367
  }
362
368
  }
363
369
  if (obj.database !== void 0) {
364
- if (typeof obj.database !== "string" || !VALID_DATABASE_VALUES.has(obj.database)) throw new Error(`config: "database" in ${CONFIG_FILE} must be "pg" or "mysql".`);
370
+ if (isRecord(obj.database)) {
371
+ const databaseCfg = obj.database;
372
+ for (const key of Object.keys(databaseCfg)) if (key !== "dialect" && key !== "casing") throw new Error(`config: Unknown key 'database.${key}' in ${CONFIG_FILE}. Valid: dialect, casing.`);
373
+ if (databaseCfg.dialect !== void 0 && (typeof databaseCfg.dialect !== "string" || !VALID_DATABASE_DIALECTS.has(databaseCfg.dialect))) throw new Error(`config: "database.dialect" in ${CONFIG_FILE} must be "sqlite", "pg" or "mysql".`);
374
+ if (databaseCfg.casing !== void 0 && (typeof databaseCfg.casing !== "string" || !VALID_DATABASE_CASINGS.has(databaseCfg.casing))) throw new Error(`config: "database.casing" in ${CONFIG_FILE} must be "snake_case" or "camelCase".`);
375
+ } else if (typeof obj.database !== "string" || !VALID_DATABASE_VALUES.has(obj.database)) throw new Error(`config: "database" in ${CONFIG_FILE} must be "pg", "mysql" or an object with "dialect" and "casing".`);
365
376
  }
366
377
  if (obj.ai !== void 0) {
367
378
  if (!isRecord(obj.ai)) throw new Error(`config: "ai" in ${CONFIG_FILE} must be an object.`);
@@ -428,14 +439,36 @@ function resolveBindingNames(bindings) {
428
439
  return hasCustom ? names : void 0;
429
440
  }
430
441
  /**
431
- * Get the database dialect from config. Defaults to "sqlite".
442
+ * Get the database dialect from config, in its string or object form. Defaults to "sqlite".
432
443
  */
433
444
  function getDatabaseDialect(config) {
434
- if (config.database === "pg") return "postgresql";
435
- if (config.database === "mysql") return "mysql";
445
+ const database = config.database;
446
+ const value = typeof database === "object" && database !== null ? database.dialect : database;
447
+ if (value === "pg") return "postgresql";
448
+ if (value === "mysql") return "mysql";
436
449
  return "sqlite";
437
450
  }
438
451
  /**
452
+ * Get Drizzle's `casing` from config. Undefined when unset: callers then pass no casing,
453
+ * so Drizzle keeps its default of naming a column after its key.
454
+ */
455
+ function getDatabaseCasing(config) {
456
+ const database = config.database;
457
+ return typeof database === "object" && database !== null ? database.casing : void 0;
458
+ }
459
+ /**
460
+ * The `database` value for a dialect that keeps the configured casing. Without casing it is
461
+ * the string shorthand, or undefined for the default D1 (SQLite).
462
+ */
463
+ function databaseConfigValue(dialect, casing) {
464
+ const shorthand = dialect === "postgresql" ? "pg" : dialect === "mysql" ? "mysql" : void 0;
465
+ if (casing === void 0) return shorthand;
466
+ return shorthand ? {
467
+ dialect: shorthand,
468
+ casing
469
+ } : { casing };
470
+ }
471
+ /**
439
472
  * Convert the `headers` config field into `HeaderRule[]` for the deploy manifest.
440
473
  *
441
474
  * Each key is a URL pattern (e.g. "/assets/*") and each value is an array of
@@ -537,4 +570,4 @@ function convertRewriteRules(caller, entries, field, force) {
537
570
  return rules.length > 0 ? rules : void 0;
538
571
  }
539
572
  //#endregion
540
- export { convertRewritesConfig as a, isNodeTarget as c, readConfig as d, resolveBindingNames as f, convertRedirectsConfig as i, isProtocolRelative as l, convertFallbacksConfig as n, countSplats as o, validateConfig as p, convertHeadersConfig as r, getDatabaseDialect as s, VALID_REDIRECT_STATUSES as t, parseHostPrefixedSource as u };
573
+ export { convertRewritesConfig as a, getDatabaseCasing as c, isProtocolRelative as d, parseHostPrefixedSource as f, validateConfig as h, convertRedirectsConfig as i, getDatabaseDialect as l, resolveBindingNames as m, convertFallbacksConfig as n, countSplats as o, readConfig as p, convertHeadersConfig as r, databaseConfigValue as s, VALID_REDIRECT_STATUSES as t, isNodeTarget as u };
@@ -21,6 +21,15 @@ type RedirectDestination = string | {
21
21
  to: string;
22
22
  status?: 301 | 302 | 303 | 307 | 308;
23
23
  };
24
+ /** Drizzle's `casing`: how a column declared without a name is named in the database. */
25
+ type DatabaseCasing = "snake_case" | "camelCase";
26
+ /** Object form of `database`, for options next to the dialect. */
27
+ type DatabaseConfig = {
28
+ /** Database backend. Defaults to `"sqlite"` (D1). */
29
+ dialect?: "sqlite" | "pg" | "mysql";
30
+ /** Column naming for keys without an explicit column name, as in Drizzle's `casing` option. */
31
+ casing?: DatabaseCasing;
32
+ };
24
33
  /** Curated Worker fields accepted by the `worker` config field. */
25
34
  type WranglerConfig = {
26
35
  compatibility_date?: string;
@@ -184,7 +193,7 @@ type VoidConfig = {
184
193
  worker?: WranglerConfig;
185
194
  cloudflare?: CloudflareConfig;
186
195
  deploy?: DeployConfig;
187
- database?: "pg" | "mysql";
196
+ database?: "pg" | "mysql" | DatabaseConfig;
188
197
  ai?: AiConfig;
189
198
  email?: EmailConfig;
190
199
  };
@@ -1,4 +1,4 @@
1
- import { t as VoidConfig } from "./config-7qoq2p9v.mjs";
1
+ import { t as VoidConfig } from "./config-DQfHOKh9.mjs";
2
2
  //#region src/config-entry.d.ts
3
3
  /** Define a typed Void project configuration without loading the Vite plugin. */
4
4
  export declare function defineConfig<const T extends VoidConfig>(config: T): T;
@@ -1,12 +1,12 @@
1
1
  import { c as normalizePlatformApiUrl, s as listPlatformConnections } from "./platform-registry-B9mWX9LO.mjs";
2
2
  import { c as writeDeploymentPlatform, l as writePlatformSelection, n as readDeploymentPlatform } from "./project-rqDnVsJN.mjs";
3
3
  import { d as readPlatformToken } from "./auth-B6iOCjKI.mjs";
4
- import { K as select, L as log, tt as isCancel } from "./dist-BVdsO7Py.mjs";
5
- import { m as printSuccess } from "./output-Ba6ZbrzY.mjs";
6
- import { a as isExpiredTokenError, r as PlatformClient } from "./client-GuSO3v_x.mjs";
7
- import { t as promptForLoginToken } from "./login-BJvGW5Eu.mjs";
8
- import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-CXrjk4fb.mjs";
9
- import { t as connectCloudflare } from "./cloudflare-connect-BN-k2kD-.mjs";
4
+ import { K as select, L as log, tt as isCancel } from "./dist-Cor9XGoz.mjs";
5
+ import { a as isExpiredTokenError, r as PlatformClient } from "./client-BEkdj1kx.mjs";
6
+ import { m as printSuccess } from "./output-BpgYODYx.mjs";
7
+ import { t as promptForLoginToken } from "./login-Cttnagmm.mjs";
8
+ import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-D5I1beUX.mjs";
9
+ import { t as connectCloudflare } from "./cloudflare-connect-CCRTVg-I.mjs";
10
10
  //#region src/cli/connect.ts
11
11
  async function selectVoidPlatform(interactive) {
12
12
  if (!interactive) throw new Error("connect: Supply a Void platform URL in non-interactive mode.");
@@ -1 +1 @@
1
- export { t as createProjectWithSlugRetry } from "./create-project-DEEWJX_M.mjs";
1
+ export { t as createProjectWithSlugRetry } from "./create-project-DV71ol5d.mjs";
@@ -1,10 +1,10 @@
1
1
  import { t as attachSelectedPlatform, u as writeProjectConfig } from "./project-rqDnVsJN.mjs";
2
2
  import { s as getSiteDomain } from "./auth-B6iOCjKI.mjs";
3
- import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./dist-BVdsO7Py.mjs";
4
- import { f as import_picocolors, h as sanitizeTerminalText } from "./output-Ba6ZbrzY.mjs";
5
- import { n as PlatformApiError } from "./client-GuSO3v_x.mjs";
3
+ import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./dist-Cor9XGoz.mjs";
4
+ import { n as PlatformApiError } from "./client-BEkdj1kx.mjs";
5
+ import { f as import_picocolors, h as sanitizeTerminalText } from "./output-BpgYODYx.mjs";
6
6
  import { t as validateProjectSlug } from "./project-slug-23TpquG4.mjs";
7
- import { n as inferDefaultSlug } from "./resolve-project-WpwkCB_c.mjs";
7
+ import { n as inferDefaultSlug } from "./resolve-project-Xoi6eTWY.mjs";
8
8
  //#region src/cli/prompt.ts
9
9
  async function promptProjectSetupAction(message = "Set up a Void project:", options = {}) {
10
10
  const result = await select({