void 0.24.0 → 0.25.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 (137) hide show
  1. package/README.md +19 -106
  2. package/dist/{account-cmd-vJhh5lrb.mjs → account-cmd-DcR1ywt8.mjs} +5 -5
  3. package/dist/{auth-CQkSDS50.mjs → auth-7wuZ5ob8.mjs} +3 -3
  4. package/dist/{auth-DX3JURcX.mjs → auth-CdgZ9uag.mjs} +1 -1
  5. package/dist/{auth-link-D75t9wO2.mjs → auth-link-Z6E5DYvM.mjs} +5 -6
  6. package/dist/{auth-router-ClfhL1J7.mjs → auth-router-BdM4avI8.mjs} +7 -7
  7. package/dist/{build-cmd-zMi1iFnS.mjs → build-cmd-CEE7D-hM.mjs} +6 -7
  8. package/dist/{cache-ZtQmyxVV.mjs → cache-TcZnBLtH.mjs} +6 -7
  9. package/dist/{cancel-deploy-Box0kkEV.mjs → cancel-deploy-CYoZmcmR.mjs} +4 -6
  10. package/dist/{cf-access-BGe5sWXF.mjs → cf-access-AHKBzmuu.mjs} +1 -1
  11. package/dist/cf-build-output-ChY6-XWP.mjs +2 -0
  12. package/dist/cli/cli.mjs +45 -45
  13. package/dist/cli/cloudflare-operation-process.mjs +2 -2
  14. package/dist/cli/env-schema-probe.mjs +2 -2
  15. package/dist/client-B4Me-9HE.mjs +2 -0
  16. package/dist/{client-DKAsFA4X.mjs → client-RsPo8wsP.mjs} +103 -25
  17. package/dist/{cloudflare-cmd-CmY8dGkd.mjs → cloudflare-cmd-bhwCxAN6.mjs} +2 -2
  18. package/dist/{cloudflare-connect-IiR3ZieC.mjs → cloudflare-connect-CuhRgk3k.mjs} +2 -2
  19. package/dist/{cloudflare-operations-BCdXSsmo.mjs → cloudflare-operations-BhbK6yTq.mjs} +1 -1
  20. package/dist/{cloudflare-operations-DzH-A966.mjs → cloudflare-operations-CjaV4lZi.mjs} +2 -2
  21. package/dist/{connect-B-usTnlF.mjs → connect-DCvUmPXY.mjs} +12 -9
  22. package/dist/{create-project-FWbf5Olo.mjs → create-project-C734I-Mu.mjs} +1 -1
  23. package/dist/{create-project-CYOOAYcn.mjs → create-project-eAPgYq35.mjs} +6 -6
  24. package/dist/{db-Ck2eZ2iB.mjs → db-C07GEdKF.mjs} +25 -28
  25. package/dist/{delete-sK56qtzZ.mjs → delete-pKMVsrpJ.mjs} +5 -6
  26. package/dist/deploy-BDu1vhSH.mjs +2 -0
  27. package/dist/{deploy-gCVaiJbS.mjs → deploy-DfsAe-T0.mjs} +9212 -8902
  28. package/dist/{dev-inbox-P0u4tM8Y.mjs → dev-inbox-D64ZKUod.mjs} +5 -6
  29. package/dist/{domain-DFfQE8jg.mjs → domain-D3uA9ize.mjs} +8 -8
  30. package/dist/{email-CdnhUHvJ.mjs → email-z3o2cwjH.mjs} +7 -7
  31. package/dist/{env-DmGdHi5i.mjs → env-3Q8-_2IH.mjs} +6 -8
  32. package/dist/{env-validation-zZOCcQVZ.mjs → env-validation-cZBvGWaP.mjs} +1 -1
  33. package/dist/gen-ById9r2j.mjs +2 -0
  34. package/dist/{gen-CshAkukR.mjs → gen-NjwoG9FK.mjs} +2 -4
  35. package/dist/{github-cmd-DftuEvIt.mjs → github-cmd-DquUq-b1.mjs} +7 -16
  36. package/dist/help-DPGBwomV.mjs +2 -0
  37. package/dist/{help-Dotbf6iz.mjs → help-DRZXC4fj.mjs} +3 -3
  38. package/dist/index.d.mts +18 -14
  39. package/dist/index.mjs +2166 -2096
  40. package/dist/{info-B97bTX9N.mjs → info-BmA3_IFZ.mjs} +1 -3
  41. package/dist/{init-BTQEZZGJ.mjs → init-DT7yuuyl.mjs} +16 -18
  42. package/dist/{link-B46sYH0K.mjs → link-CXOlqh2F.mjs} +6 -7
  43. package/dist/{list-BnPrIsU_.mjs → list-eEWVJEPn.mjs} +8 -9
  44. package/dist/{local-d1-2CMnpuW_.mjs → local-d1-Df4XpwhW.mjs} +1 -1
  45. package/dist/login-C98-sw79.mjs +2 -0
  46. package/dist/{login-BuiMyUrx.mjs → login-pWQHYVu2.mjs} +9 -7
  47. package/dist/{logs-CZG9d-ic.mjs → logs-DnxVX7TR.mjs} +7 -8
  48. package/dist/migrate-CEu2X5DB.mjs +2 -0
  49. package/dist/{migrate-q4_njtaW.mjs → migrate-CV1on-yJ.mjs} +2 -4
  50. package/dist/{operator-args-B3BTmSoi.mjs → operator-args-CAVcmwUt.mjs} +1 -1
  51. package/dist/{operator-auth-7erYc6Lt.mjs → operator-auth-CkmTE3rt.mjs} +2 -2
  52. package/dist/{operator-client-CpHjTd0t.mjs → operator-client-LmwjxT6q.mjs} +2 -2
  53. package/dist/{operator-cmd-DGqPJUD3.mjs → operator-cmd-d-IEKgNk.mjs} +6 -6
  54. package/dist/{output-CbM85T4k.mjs → output-BBsUwdyT.mjs} +5 -5
  55. package/dist/pages/client.d.mts +3 -0
  56. package/dist/pages/client.mjs +120 -29
  57. package/dist/{platform-args-3k8X9-H_.mjs → platform-args-Bzf8JPc2.mjs} +1 -1
  58. package/dist/platform-args-Cq6EjQro.mjs +2 -0
  59. package/dist/{platform-auth-config-DDrxUy4m.mjs → platform-auth-config-0V0lA3pF.mjs} +7 -7
  60. package/dist/{platform-auth-protection-BLadnnct.mjs → platform-auth-protection-DFeJ-JkK.mjs} +8 -8
  61. package/dist/{platform-auth-recovery-CmCzX2Fl.mjs → platform-auth-recovery-ICy4muq6.mjs} +7 -7
  62. package/dist/{platform-cmd-pMTRhvYs.mjs → platform-cmd-BPySFOew.mjs} +1 -1
  63. package/dist/{platform-cmd-DMDEc9uS.mjs → platform-cmd-D7vSWMvV.mjs} +37 -27
  64. package/dist/platform-discovery-DDDUvnqp.mjs +27 -0
  65. package/dist/{platform-domain-Di6EYrQl.mjs → platform-domain-CUdY064e.mjs} +4 -4
  66. package/dist/{platform-lifecycle-BFdSi9Qt.mjs → platform-lifecycle-BaUdTRPU.mjs} +1 -1
  67. package/dist/{platform-lifecycle-BBoNzojY.mjs → platform-lifecycle-Dm09JNkn.mjs} +3901 -3651
  68. package/dist/{platform-management-CWOQOWXm.mjs → platform-management-BSEc_ZeG.mjs} +47 -10
  69. package/dist/platform-management-Bp6aoH2C.mjs +2 -0
  70. package/dist/{platform-plans-config-Vl9BP3H4.mjs → platform-plans-config-B0pOVQyW.mjs} +3 -3
  71. package/dist/{platform-recovery-BJnQJEtQ.mjs → platform-recovery-WOZ95Uze.mjs} +3 -3
  72. package/dist/{prepare-CBLT3CHH.mjs → prepare-39EvOhI6.mjs} +1 -3
  73. package/dist/{project-DKG5Ra8p.mjs → project-BkbfDs0V.mjs} +1 -1
  74. package/dist/{project-DsblYifa.mjs → project-IOjBU8R6.mjs} +1 -1
  75. package/dist/{project-cmd-DxnXstAq.mjs → project-cmd-Bs5A392E.mjs} +21 -22
  76. package/dist/{project-team-BmHcaALJ.mjs → project-team-ohAWWaew.mjs} +8 -9
  77. package/dist/{project-token-GionZlBI.mjs → project-token-CP01Jna6.mjs} +6 -9
  78. package/dist/{project-zero-trust-JLCjVQA7.mjs → project-zero-trust-BzkVgx35.mjs} +5 -6
  79. package/dist/{prompts-BNUoTiaf.mjs → prompts-6OSVA7DJ.mjs} +58 -15
  80. package/dist/{prompts-2TGE6oXx.mjs → prompts-ZAuJlyCj.mjs} +1 -1
  81. package/dist/{provision-CVku1JFU.mjs → provision-BEv0k-qz.mjs} +1 -1
  82. package/dist/{provision-CaoxO_U7.mjs → provision-Btj1jppf.mjs} +5 -7
  83. package/dist/{requests-BOjIVAeF.mjs → requests-B3PBuGlX.mjs} +5 -6
  84. package/dist/{rollback-CwR3pLj3.mjs → rollback-DDub9GsO.mjs} +9 -10
  85. package/dist/runtime/email/testing.mjs +1 -1
  86. package/dist/runtime/email.mjs +35 -17
  87. package/dist/runtime/routing.mjs +1 -1
  88. package/dist/{secret-ByWJWBUG.mjs → secret-3c72lY1U.mjs} +15 -16
  89. package/dist/{skills-C1PlclPt.mjs → skills-BPQUGClu.mjs} +1 -1
  90. package/dist/{subcommand-prompt-klFCfcor.mjs → subcommand-prompt-Dhom39bd.mjs} +2 -2
  91. package/dist/sveltekit.d.mts +1 -1
  92. package/dist/sveltekit.mjs +4 -9
  93. package/dist/{wrangler-7K-bW_DL.mjs → wrangler-DhUerFkW.mjs} +10 -15
  94. package/package.json +21 -21
  95. package/sandbox.Dockerfile +1 -1
  96. package/skills/void/docs/guide/ai.md +24 -86
  97. package/skills/void/docs/guide/auth.md +0 -2
  98. package/skills/void/docs/guide/database/d1.md +7 -7
  99. package/skills/void/docs/guide/deployment.md +58 -124
  100. package/skills/void/docs/guide/env-vars.md +1 -5
  101. package/skills/void/docs/guide/index.md +19 -18
  102. package/skills/void/docs/guide/kv.md +0 -2
  103. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +49 -47
  104. package/skills/void/docs/guide/pages-routing/overview.md +2 -2
  105. package/skills/void/docs/guide/platform/administration/email.md +0 -2
  106. package/skills/void/docs/guide/platform/administration/operations.md +11 -22
  107. package/skills/void/docs/guide/platform/administration/plans.md +1 -5
  108. package/skills/void/docs/guide/platform/administration/zero-trust.md +1 -4
  109. package/skills/void/docs/guide/platform/development/schema-ci.md +7 -1
  110. package/skills/void/docs/guide/platform/installation/maintenance.md +30 -10
  111. package/skills/void/docs/guide/platform/installation/prerequisites.md +79 -7
  112. package/skills/void/docs/guide/quickstart.md +37 -80
  113. package/skills/void/docs/guide/sandboxes.md +36 -46
  114. package/skills/void/docs/guide/self-hosted-platform.md +20 -0
  115. package/skills/void/docs/guide/websockets.md +0 -2
  116. package/skills/void/docs/integrations/frameworks/overview.md +2 -2
  117. package/skills/void/docs/integrations/frameworks/sveltekit.md +40 -25
  118. package/skills/void/docs/integrations/nodejs-bun-deno.md +7 -2
  119. package/skills/void/docs/reference/api/resources.md +27 -0
  120. package/skills/void/docs/reference/api.md +1 -1
  121. package/skills/void/docs/reference/cli/deploy.md +1 -1
  122. package/skills/void/docs/reference/cli/platform-operations.md +4 -8
  123. package/skills/void/docs/reference/cli/platform.md +5 -0
  124. package/skills/void/docs/reference/resource-inference.md +11 -8
  125. package/dist/cf-build-output-_0HNWysu.mjs +0 -2
  126. package/dist/client-B9UBI03V.mjs +0 -2
  127. package/dist/deploy-irP5q0-x.mjs +0 -2
  128. package/dist/gen-DvQTWzDU.mjs +0 -2
  129. package/dist/help-mabuIV98.mjs +0 -2
  130. package/dist/login-DIy9Sb-U.mjs +0 -2
  131. package/dist/migrate-BCiJ8w0f.mjs +0 -2
  132. package/dist/platform-args-DdnM6WIf.mjs +0 -2
  133. package/dist/platform-management-DG47jys8.mjs +0 -2
  134. package/skills/void/docs/guide/env-migration.md +0 -109
  135. package/dist/{cf-build-output-BPqOT964.mjs → cf-build-output-U8o1Gl6X.mjs} +1 -1
  136. package/dist/{env-validation-C_8tPdhs.mjs → env-validation-vBSQ8gw5.mjs} +1 -1
  137. package/dist/{platform-registry-DkPPXfp_.mjs → platform-registry-KfNEF84O.mjs} +1 -1
@@ -1,9 +1,10 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
+ import { s as normalizePlatformApiUrl } from "./platform-registry-KfNEF84O.mjs";
2
3
  import { t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
3
- import { s as normalizePlatformApiUrl } from "./platform-registry-DkPPXfp_.mjs";
4
- import { i as isCloudflareAccessChallenge, n as ensurePlatformAccessToken, t as ensureCloudflaredToken } from "./cf-access-BGe5sWXF.mjs";
5
- import { a as getApiUrl } from "./auth-CQkSDS50.mjs";
4
+ import { i as isCloudflareAccessChallenge, n as ensurePlatformAccessToken, t as ensureCloudflaredToken } from "./cf-access-AHKBzmuu.mjs";
5
+ import { a as getApiUrl } from "./auth-7wuZ5ob8.mjs";
6
6
  import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
7
+ import { t as readPlatformDiscoveryResponse } from "./platform-discovery-DDDUvnqp.mjs";
7
8
  import { readFileSync } from "node:fs";
8
9
  import { stripVTControlCharacters } from "node:util";
9
10
  //#region src/cli/platform-errors.ts
@@ -106,6 +107,41 @@ function readCliVersion() {
106
107
  }
107
108
  }
108
109
  const VOID_CLI_VERSION = readCliVersion();
110
+ /** The oldest Void platform release this CLI supports. */
111
+ const MIN_PLATFORM_VERSION = "0.25.0";
112
+ const RELEASE_VERSION = /^(\d+)\.(\d+)\.(\d+)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/;
113
+ /**
114
+ * Version checks keyed by platform base URL. Every outcome (pass, inconclusive,
115
+ * or too old) is kept for the rest of the process, so polling commands probe
116
+ * discovery once.
117
+ */
118
+ const platformVersionChecks = /* @__PURE__ */ new Map();
119
+ /**
120
+ * Returns whether `version` is older than MIN_PLATFORM_VERSION, or null when
121
+ * it is not a release version. A prerelease sorts before its release.
122
+ */
123
+ function isOlderThanMinimumPlatform(version) {
124
+ const actual = RELEASE_VERSION.exec(version);
125
+ const minimum = RELEASE_VERSION.exec(MIN_PLATFORM_VERSION);
126
+ if (!actual) return null;
127
+ for (const part of [
128
+ 1,
129
+ 2,
130
+ 3
131
+ ]) {
132
+ const difference = Number(actual[part]) - Number(minimum[part]);
133
+ if (difference !== 0) return difference < 0;
134
+ }
135
+ return actual[4] !== void 0 && minimum[4] === void 0;
136
+ }
137
+ const UPGRADE_PLATFORM_ACTION = "Ask its administrator to upgrade the platform runtime with `void platform upgrade`.";
138
+ function assertSupportedPlatform(apiUrl, probe) {
139
+ if (probe.kind === "unknown") return;
140
+ if (probe.kind === "missing") throw new Error(`The Void platform at ${apiUrl} does not report its version, but this CLI requires ${MIN_PLATFORM_VERSION} or later. ${UPGRADE_PLATFORM_ACTION}`);
141
+ const { version } = probe;
142
+ if (version === "hosted" || isOlderThanMinimumPlatform(version) !== true) return;
143
+ throw new Error(`The Void platform at ${apiUrl} runs version ${version}, but this CLI requires ${MIN_PLATFORM_VERSION} or later. ${UPGRADE_PLATFORM_ACTION}`);
144
+ }
109
145
  /**
110
146
  * Detects the `cli_outdated` 426 response shape emitted by the platform's
111
147
  * `cliVersionGate` middleware. When present, callers should surface the
@@ -199,12 +235,20 @@ var PlatformClient = class {
199
235
  authHeaders;
200
236
  accessHeaders;
201
237
  cliLog;
238
+ checkPlatformVersion;
202
239
  apiUrl;
240
+ /**
241
+ * `checkPlatformVersion: false` skips the minimum platform version check.
242
+ * Only login uses it, so users can still sign in to an older platform.
243
+ */
203
244
  constructor(token, options) {
204
- if (typeof options === "string") this.baseUrl = normalizePlatformApiUrl(options);
205
- else {
245
+ if (typeof options === "string") {
246
+ this.baseUrl = normalizePlatformApiUrl(options);
247
+ this.checkPlatformVersion = true;
248
+ } else {
206
249
  this.baseUrl = normalizePlatformApiUrl(options?.apiUrl ?? getApiUrl(options?.root));
207
250
  this.cliLog = options?.cliLog;
251
+ this.checkPlatformVersion = options?.checkPlatformVersion !== false;
208
252
  }
209
253
  this.apiUrl = this.baseUrl;
210
254
  ensureCloudflaredToken(this.baseUrl);
@@ -216,6 +260,46 @@ var PlatformClient = class {
216
260
  }
217
261
  async request(url, options = {}) {
218
262
  if (new URL(url).origin !== this.baseUrl) throw new Error("Platform credentials cannot be sent to another origin.");
263
+ if (this.checkPlatformVersion) await this.ensureSupportedPlatform();
264
+ return this.send(url, options);
265
+ }
266
+ /**
267
+ * Checks the platform version once per process and base URL. Concurrent
268
+ * first requests share one check, and its outcome is kept for later requests.
269
+ */
270
+ ensureSupportedPlatform() {
271
+ const apiUrl = this.baseUrl;
272
+ const cached = platformVersionChecks.get(apiUrl);
273
+ if (cached) return cached;
274
+ const check = this.probePlatformVersion().then((probe) => assertSupportedPlatform(apiUrl, probe));
275
+ platformVersionChecks.set(apiUrl, check);
276
+ return check;
277
+ }
278
+ /** Reads the platform version from public discovery, without credentials. */
279
+ async probePlatformVersion() {
280
+ let response;
281
+ try {
282
+ response = await this.send(`${this.baseUrl}/.well-known/void-platform`, {
283
+ headers: { Accept: "application/json" },
284
+ signal: AbortSignal.timeout(15e3)
285
+ });
286
+ } catch {
287
+ return { kind: "unknown" };
288
+ }
289
+ if (response.status === 404) {
290
+ await response.body?.cancel();
291
+ return { kind: "missing" };
292
+ }
293
+ try {
294
+ return {
295
+ kind: "version",
296
+ version: (await readPlatformDiscoveryResponse(this.baseUrl, response)).platformVersion
297
+ };
298
+ } catch {
299
+ return { kind: "unknown" };
300
+ }
301
+ }
302
+ async send(url, options) {
219
303
  if (!this.accessHeaders["CF-Access-Client-Id"]) ensureCloudflaredToken(this.baseUrl);
220
304
  const send = () => {
221
305
  const currentAccessHeaders = cfAccessHeaders(process.env, this.baseUrl);
@@ -268,7 +352,6 @@ var PlatformClient = class {
268
352
  /** A lightweight project list for interactive linking. */
269
353
  async listProjectChoices() {
270
354
  const res = await this.request(`${this.baseUrl}/projects/choices`, { headers: { ...this.authHeaders } });
271
- if (res.status === 404) throw new Error("This platform does not support project lookup. Ask its administrator to upgrade the platform runtime.");
272
355
  if (!res.ok) await throwPlatformApiError("Failed to list project choices", res);
273
356
  return res.json();
274
357
  }
@@ -284,7 +367,6 @@ var PlatformClient = class {
284
367
  const url = new URL(`${this.baseUrl}/projects/resolve`);
285
368
  url.searchParams.set("slug", slug);
286
369
  const res = await this.request(url.toString(), { headers: { ...this.authHeaders } });
287
- if (res.status === 404) throw new Error("This platform does not support project lookup. Ask its administrator to upgrade the platform runtime.");
288
370
  if (!res.ok) await throwPlatformApiError("Failed to resolve project", res);
289
371
  return (await res.json()).project;
290
372
  }
@@ -599,22 +681,19 @@ var PlatformClient = class {
599
681
  }
600
682
  const receipt = res.headers.get("x-void-deployment-id");
601
683
  const observationDeadline = Date.now() + DEPLOY_OBSERVATION_DEADLINE_MS;
602
- if (receipt !== null && !/^[A-Za-z0-9_-]{1,128}$/.test(receipt)) {
684
+ if (receipt === null || !/^[A-Za-z0-9_-]{1,128}$/.test(receipt)) {
603
685
  res.body?.cancel().catch(() => {});
604
- throw new Error("Invalid deployment receipt from platform.");
686
+ throw new Error(receipt === null ? "Platform returned no deployment receipt." : "Invalid deployment receipt from platform.");
605
687
  }
606
688
  let cursor = 0;
607
689
  let terminal = false;
608
690
  if (!res.body) {
609
- if (receipt) {
610
- yield {
611
- event: "start",
612
- deploymentId: receipt
613
- };
614
- yield* this.followDeploymentEvents(projectId, receipt, cursor, observationDeadline);
615
- return;
616
- }
617
- throw new Error("Platform returned no deployment event stream.");
691
+ yield {
692
+ event: "start",
693
+ deploymentId: receipt
694
+ };
695
+ yield* this.followDeploymentEvents(projectId, receipt, cursor, observationDeadline);
696
+ return;
618
697
  }
619
698
  const reader = res.body.getReader();
620
699
  const decoder = new TextDecoder();
@@ -627,7 +706,6 @@ var PlatformClient = class {
627
706
  let streamFinished = false;
628
707
  let readTimer;
629
708
  const read = async () => {
630
- if (!receipt) return reader.read();
631
709
  const remaining = observationDeadline - Date.now();
632
710
  if (remaining <= 0) throw new DeploymentObservationTimeoutError(receipt);
633
711
  try {
@@ -653,18 +731,18 @@ var PlatformClient = class {
653
731
  event: lastEventName,
654
732
  raw: line.slice(0, 200)
655
733
  });
656
- if (receipt && event.event === "start") return null;
734
+ if (event.event === "start") return null;
657
735
  terminal = event.event === "done" || event.event === "error";
658
736
  return event;
659
737
  };
660
738
  try {
661
- if (receipt) yield {
739
+ yield {
662
740
  event: "start",
663
741
  deploymentId: receipt
664
742
  };
665
743
  while (true) {
666
744
  const { done, value } = await read();
667
- if (receipt && Date.now() >= observationDeadline) throw new DeploymentObservationTimeoutError(receipt);
745
+ if (Date.now() >= observationDeadline) throw new DeploymentObservationTimeoutError(receipt);
668
746
  if (done) {
669
747
  streamFinished = true;
670
748
  buffer += decoder.decode();
@@ -701,13 +779,13 @@ var PlatformClient = class {
701
779
  eventCount,
702
780
  lastEvent: lastEventName
703
781
  });
704
- if (!receipt || err instanceof DeploymentObservationTimeoutError || err instanceof DeploymentProtocolError || err instanceof SyntaxError || err instanceof DOMException && err.name === "AbortError") throw err;
782
+ if (err instanceof DeploymentObservationTimeoutError || err instanceof DeploymentProtocolError || err instanceof SyntaxError || err instanceof DOMException && err.name === "AbortError") throw err;
705
783
  } finally {
706
784
  clearTimeout(readTimer);
707
785
  if (!streamFinished) reader.cancel().catch(() => {});
708
786
  reader.releaseLock();
709
787
  }
710
- if (receipt && !terminal) yield* this.followDeploymentEvents(projectId, receipt, cursor, observationDeadline);
788
+ if (!terminal) yield* this.followDeploymentEvents(projectId, receipt, cursor, observationDeadline);
711
789
  }
712
790
  async *followDeploymentEvents(projectId, deploymentId, since, deadline) {
713
791
  let cursor = since;
@@ -1165,4 +1243,4 @@ function sleep(ms) {
1165
1243
  return new Promise((resolve) => setTimeout(resolve, ms));
1166
1244
  }
1167
1245
  //#endregion
1168
- export { readCliVersion as a, isExpiredTokenError as i, PlatformClient as n, parsePlatformErrorBody as o, isCliOutdatedError as r, platformErrorMessage as s, PlatformApiError as t };
1246
+ export { isExpiredTokenError as a, platformErrorMessage as c, isCliOutdatedError as i, PlatformApiError as n, readCliVersion as o, PlatformClient as r, parsePlatformErrorBody as s, MIN_PLATFORM_VERSION as t };
@@ -1,6 +1,6 @@
1
1
  import { t as basename } from "./dist-BVqXeR_h.mjs";
2
- import { y as readRootWranglerConfig } from "./wrangler-7K-bW_DL.mjs";
3
- import { L as log } from "./prompts-BNUoTiaf.mjs";
2
+ import { y as readRootWranglerConfig } from "./wrangler-DhUerFkW.mjs";
3
+ import { L as log } from "./prompts-6OSVA7DJ.mjs";
4
4
  import { a as parseCloudflareAuthSession, i as ensureCloudflareAuthentication, n as cloudflareCredentialOverrides, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-Qdc7tw8F.mjs";
5
5
  //#region src/cli/cloudflare-cmd.ts
6
6
  async function runCloudflareCommand(root, args) {
@@ -1,6 +1,6 @@
1
1
  import { a as join, t as basename } from "./dist-BVqXeR_h.mjs";
2
- import { A as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE, y as readRootWranglerConfig } from "./wrangler-7K-bW_DL.mjs";
3
- import { K as select, L as log, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
2
+ import { A as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE, y as readRootWranglerConfig } from "./wrangler-DhUerFkW.mjs";
3
+ import { K as select, L as log, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
4
4
  import { i as ensureCloudflareAuthentication, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-Qdc7tw8F.mjs";
5
5
  import { existsSync } from "node:fs";
6
6
  //#region src/cli/cloudflare-connect.ts
@@ -1,2 +1,2 @@
1
- import { _ as resolveCloudflareD1Context, b as tailCloudflareWorker, c as listCloudflareDomains, g as readCloudflareWorkerStatus, h as readCloudflareD1Migrations, l as listCloudflareSecrets, m as putCloudflareSecret, n as applyCloudflareD1Migrations, o as deleteCloudflareSecret, r as changeCloudflareDomain, s as executeCloudflareD1Sql, t as activateCloudflareExistingVersion, v as resolveCloudflareOperationContext, y as syncCloudflareSecrets } from "./cloudflare-operations-DzH-A966.mjs";
1
+ import { _ as resolveCloudflareD1Context, b as tailCloudflareWorker, c as listCloudflareDomains, g as readCloudflareWorkerStatus, h as readCloudflareD1Migrations, l as listCloudflareSecrets, m as putCloudflareSecret, n as applyCloudflareD1Migrations, o as deleteCloudflareSecret, r as changeCloudflareDomain, s as executeCloudflareD1Sql, t as activateCloudflareExistingVersion, v as resolveCloudflareOperationContext, y as syncCloudflareSecrets } from "./cloudflare-operations-CjaV4lZi.mjs";
2
2
  export { activateCloudflareExistingVersion, applyCloudflareD1Migrations, changeCloudflareDomain, deleteCloudflareSecret, executeCloudflareD1Sql, listCloudflareDomains, listCloudflareSecrets, putCloudflareSecret, readCloudflareD1Migrations, readCloudflareWorkerStatus, resolveCloudflareD1Context, resolveCloudflareOperationContext, syncCloudflareSecrets, tailCloudflareWorker };
@@ -1,9 +1,9 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
2
  import { i as persistCloudflareConfig, r as materializeCloudflareConfig } from "./cloudflare-config-Bktvwtpf.mjs";
3
- import { C as readWranglerPublishedTrafficSnapshot, j as writeWranglerPublishedTrafficSnapshot, k as updateWranglerCustomDomain, x as readWranglerCustomDomains } from "./wrangler-7K-bW_DL.mjs";
3
+ import { C as readWranglerPublishedTrafficSnapshot, j as writeWranglerPublishedTrafficSnapshot, k as updateWranglerCustomDomain, x as readWranglerCustomDomains } from "./wrangler-DhUerFkW.mjs";
4
4
  import { r as scanWranglerDotenvKeys } from "./dotenv-VQxupEUv.mjs";
5
5
  import { t as createCloudflareProcessRunner } from "./cloudflare-process-B-wekeR6.mjs";
6
- import { _ as resolvePinnedApiBaseUrl, g as provisionEnv, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware } from "./provision-CaoxO_U7.mjs";
6
+ import { _ as resolvePinnedApiBaseUrl, g as provisionEnv, r as assertNoTransportRedirectInProjectDotenv, s as deleteEnvVarCaseAware } from "./provision-Btj1jppf.mjs";
7
7
  import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
8
8
  import { tmpdir } from "node:os";
9
9
  import { deployCloudflareVersionTraffic, encodeCloudflareVersionMessage, parseCloudflareVersionMessage, parseRootWranglerConfig, readBindingFieldPresence, readCloudflareTriggerConfig, readWranglerTopLevelString, resolveD1MigrateTarget, stabilizeCloudflareVersionTriggers } from "@void/deploy-cloudflare";
@@ -1,11 +1,11 @@
1
- import { o as listPlatformConnections, s as normalizePlatformApiUrl } from "./platform-registry-DkPPXfp_.mjs";
2
- import { c as writePlatformSelection, n as readDeploymentPlatform, s as writeDeploymentPlatform } from "./project-DKG5Ra8p.mjs";
3
- import { d as readPlatformToken } from "./auth-CQkSDS50.mjs";
4
- import { K as select, L as log, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
5
- import { i as isExpiredTokenError, n as PlatformClient } from "./client-DKAsFA4X.mjs";
6
- import { t as promptForLoginToken } from "./login-BuiMyUrx.mjs";
7
- import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-DMDEc9uS.mjs";
8
- import { t as connectCloudflare } from "./cloudflare-connect-IiR3ZieC.mjs";
1
+ import { o as listPlatformConnections, s as normalizePlatformApiUrl } from "./platform-registry-KfNEF84O.mjs";
2
+ import { c as writePlatformSelection, n as readDeploymentPlatform, s as writeDeploymentPlatform } from "./project-BkbfDs0V.mjs";
3
+ import { d as readPlatformToken } from "./auth-7wuZ5ob8.mjs";
4
+ import { K as select, L as log, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
5
+ import { a as isExpiredTokenError, r as PlatformClient } from "./client-RsPo8wsP.mjs";
6
+ import { t as promptForLoginToken } from "./login-pWQHYVu2.mjs";
7
+ import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-D7vSWMvV.mjs";
8
+ import { t as connectCloudflare } from "./cloudflare-connect-CuhRgk3k.mjs";
9
9
  //#region src/cli/connect.ts
10
10
  async function selectVoidPlatform(interactive) {
11
11
  if (!interactive) throw new Error("connect: Supply a Void platform URL in non-interactive mode.");
@@ -31,7 +31,10 @@ async function authenticateConnection(root, discovery, interactive) {
31
31
  const matchingEnv = Boolean(envToken && envUrl && normalizePlatformApiUrl(envUrl) === discovery.apiUrl);
32
32
  const token = matchingEnv ? envToken : readPlatformToken(discovery.apiUrl);
33
33
  if (token) try {
34
- await new PlatformClient(token, { apiUrl: discovery.apiUrl }).whoami();
34
+ await new PlatformClient(token, {
35
+ apiUrl: discovery.apiUrl,
36
+ checkPlatformVersion: false
37
+ }).whoami();
35
38
  log.success(`Authenticated with ${discovery.displayName}.`);
36
39
  return;
37
40
  } catch (error) {
@@ -1,2 +1,2 @@
1
- import { t as createProjectWithSlugRetry } from "./create-project-CYOOAYcn.mjs";
1
+ import { t as createProjectWithSlugRetry } from "./create-project-eAPgYq35.mjs";
2
2
  export { createProjectWithSlugRetry };
@@ -1,8 +1,8 @@
1
- import { l as writeProjectConfig, t as attachSelectedPlatform } from "./project-DKG5Ra8p.mjs";
2
- import { s as getSiteDomain } from "./auth-CQkSDS50.mjs";
3
- import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
4
- import { t as PlatformApiError } from "./client-DKAsFA4X.mjs";
5
- import { c as import_picocolors, l as sanitizeTerminalText } from "./output-CbM85T4k.mjs";
1
+ import { l as writeProjectConfig, t as attachSelectedPlatform } from "./project-BkbfDs0V.mjs";
2
+ import { s as getSiteDomain } from "./auth-7wuZ5ob8.mjs";
3
+ import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
4
+ import { n as PlatformApiError } from "./client-RsPo8wsP.mjs";
5
+ import { c as import_picocolors, l as sanitizeTerminalText } from "./output-BBsUwdyT.mjs";
6
6
  import { t as validateProjectSlug } from "./project-slug-23TpquG4.mjs";
7
7
  import { n as inferDefaultSlug } from "./resolve-project-BG5ORGID.mjs";
8
8
  //#region src/cli/prompt.ts
@@ -30,7 +30,7 @@ async function promptProjectSelection(projects, message = "Select a project:", r
30
30
  }], ...projects.map((p) => ({
31
31
  value: p.id,
32
32
  label: `${p.slug} (${p.url ?? `${p.slug}.${getSiteDomain(root)}`})`,
33
- ...p.role ? { hint: p.role === "reader" ? "reader (read-only)" : p.role } : {}
33
+ hint: p.role === "reader" ? "reader (read-only)" : p.role
34
34
  }))];
35
35
  const result = await select({
36
36
  message,
@@ -3,17 +3,17 @@ import { r as detectFramework } from "./plugin-inference-CXWnn79A.mjs";
3
3
  import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
4
4
  import { h as resolveBindingNames, m as readConfig, u as getDatabaseDialect } from "./config-Br_JZD6u.mjs";
5
5
  import { i as writeJournal, n as readJournal, r as stripSqlExt, t as collectMigrations } from "./collect-DiTn9yr6.mjs";
6
+ import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-BkbfDs0V.mjs";
7
+ import { t as resolveLocalD1Target } from "./local-d1-Df4XpwhW.mjs";
6
8
  import { t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
7
- import { i as isCloudflareAccessChallenge, n as ensurePlatformAccessToken, r as ensurePlatformProxyAccess } from "./cf-access-BGe5sWXF.mjs";
8
- import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DKG5Ra8p.mjs";
9
- import { c as getToken, o as getProxyUrl } from "./auth-CQkSDS50.mjs";
10
- import { t as resolveLocalD1Target } from "./local-d1-2CMnpuW_.mjs";
9
+ import { i as isCloudflareAccessChallenge, n as ensurePlatformAccessToken, r as ensurePlatformProxyAccess } from "./cf-access-AHKBzmuu.mjs";
10
+ import { c as getToken, o as getProxyUrl } from "./auth-7wuZ5ob8.mjs";
11
11
  import { a as loadLocalEnv } from "./env-_v349JBd.mjs";
12
- import { A as confirm, H as outro, L as log, N as intro, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
12
+ import { A as confirm, H as outro, L as log, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
13
+ import { n as PlatformApiError, r as PlatformClient } from "./client-RsPo8wsP.mjs";
14
+ import { c as import_picocolors, i as dim, o as formatCount } from "./output-BBsUwdyT.mjs";
13
15
  import { i as validateMigrations, r as listDrizzleArtifacts, t as assertJournalCoherence } from "./validate-ctOrgiS3.mjs";
14
- import { n as PlatformClient, t as PlatformApiError } from "./client-DKAsFA4X.mjs";
15
- import { a as dim, c as import_picocolors, r as cliTitle } from "./output-CbM85T4k.mjs";
16
- import { n as formatTimestamp } from "./gen-CshAkukR.mjs";
16
+ import { n as formatTimestamp } from "./gen-NjwoG9FK.mjs";
17
17
  import { createRequire } from "node:module";
18
18
  import { existsSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
19
19
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -197,10 +197,7 @@ function validatePendingMigrations(migrations, appliedNames) {
197
197
  validateMigrations(pending);
198
198
  }
199
199
  async function runDbCommand(root, args) {
200
- const exportToStdout = args.action === "export" && !args.output;
201
- if (exportToStdout) process.stderr.write("\n");
202
- else console.log();
203
- intro(cliTitle("db"), exportToStdout ? { output: process.stderr } : void 0);
200
+ if (!(args.action === "export" && !args.output)) console.log();
204
201
  const dialect = getDatabaseDialect(readConfig(root));
205
202
  if (args.action === "push") await runPush(root, dialect);
206
203
  else if (args.action === "generate") await runGenerate(root, dialect);
@@ -273,7 +270,7 @@ async function runConnect(root, dialect, args) {
273
270
  if (result.dashboardUrl) log.info(`Dashboard: ${result.dashboardUrl}`);
274
271
  }
275
272
  if (!connectionString) {
276
- const { text: promptText, isCancel: isCancelCheck } = await import("./prompts-2TGE6oXx.mjs");
273
+ const { text: promptText, isCancel: isCancelCheck } = await import("./prompts-ZAuJlyCj.mjs");
277
274
  const answer = await promptText({
278
275
  message: `Enter your ${dialect === "mysql" ? "MySQL" : "PostgreSQL"} connection string:`,
279
276
  placeholder: dialect === "mysql" ? "mysql://user:pass@host:3306/database" : "postgresql://user:pass@host:5432/database"
@@ -399,7 +396,7 @@ async function runStatus(root, dialect) {
399
396
  applied_at: ""
400
397
  }));
401
398
  } else {
402
- const { readCloudflareD1Migrations, resolveCloudflareD1Context } = await import("./cloudflare-operations-BCdXSsmo.mjs");
399
+ const { readCloudflareD1Migrations, resolveCloudflareD1Context } = await import("./cloudflare-operations-BhbK6yTq.mjs");
403
400
  remoteApplied = (await readCloudflareD1Migrations(resolveCloudflareD1Context(root, resolveBindingNames(readConfig(root).inference?.bindings)?.d1 ?? "DB"))).map((name) => ({
404
401
  name,
405
402
  applied_at: ""
@@ -423,7 +420,7 @@ async function runStatus(root, dialect) {
423
420
  }
424
421
  log.info(lines.join("\n"));
425
422
  const localPending = allMigrations.length - localSet.size;
426
- const parts = [`${allMigrations.length} migration(s)`];
423
+ const parts = [formatCount(allMigrations.length, "migration")];
427
424
  if (localPending > 0) parts.push(`${localPending} pending locally`);
428
425
  if (remoteSet !== null) {
429
426
  const remotePending = allMigrations.length - remoteSet.size;
@@ -489,13 +486,13 @@ async function resetDatabase(root, dialect) {
489
486
  }
490
487
  async function runReset(root, dialect) {
491
488
  const count = await resetDatabase(root, dialect);
492
- log.success(`Database reset. Applied ${count} migration(s).`);
489
+ log.success(`Database reset. Applied ${formatCount(count, "migration")}.`);
493
490
  if (dialect === "sqlite") log.info(dim("Restart your dev server if it's running."));
494
491
  outro("Done.");
495
492
  }
496
493
  async function runSeed(root, file, dialect) {
497
494
  const migrationCount = await resetDatabase(root, dialect);
498
- log.step(`Reset database. Applied ${migrationCount} migration(s).`);
495
+ log.step(`Reset database. Applied ${formatCount(migrationCount, "migration")}.`);
499
496
  const seed = resolveSeedTarget(root, file);
500
497
  if (seed.kind === "sql") {
501
498
  const sql = readFileSync(seed.path, "utf-8");
@@ -641,7 +638,7 @@ async function runExecute(root, command, file, dialect, remote) {
641
638
  process.exit(0);
642
639
  }
643
640
  if (dialect === "sqlite") {
644
- const { executeCloudflareD1Sql, resolveCloudflareD1Context } = await import("./cloudflare-operations-BCdXSsmo.mjs");
641
+ const { executeCloudflareD1Sql, resolveCloudflareD1Context } = await import("./cloudflare-operations-BhbK6yTq.mjs");
645
642
  const rows = await executeCloudflareD1Sql(resolveCloudflareD1Context(root, resolveBindingNames(readConfig(root).inference?.bindings)?.d1 ?? "DB"), sql);
646
643
  if (rows.length > 0) printTable(rows);
647
644
  else log.success("Executed successfully.");
@@ -832,7 +829,7 @@ async function runMigrate(root, dialect, remote) {
832
829
  validateMigrations(pending);
833
830
  const applied = await applyMigrations();
834
831
  for (const migration of applied) log.step(migration);
835
- log.success(`Applied ${applied.length} migration(s) to remote database.`);
832
+ log.success(`Applied ${formatCount(applied.length, "migration")} to remote database.`);
836
833
  outro("Done.");
837
834
  return;
838
835
  } catch (error) {
@@ -846,7 +843,7 @@ async function runMigrate(root, dialect, remote) {
846
843
  outro("Done.");
847
844
  return;
848
845
  }
849
- const { applyCloudflareD1Migrations, readCloudflareD1Migrations, resolveCloudflareD1Context } = await import("./cloudflare-operations-BCdXSsmo.mjs");
846
+ const { applyCloudflareD1Migrations, readCloudflareD1Migrations, resolveCloudflareD1Context } = await import("./cloudflare-operations-BhbK6yTq.mjs");
850
847
  const binding = resolveBindingNames(readConfig(root).inference?.bindings)?.d1 ?? "DB";
851
848
  const context = resolveCloudflareD1Context(root, binding);
852
849
  const remoteBefore = new Set(await readCloudflareD1Migrations(context));
@@ -862,7 +859,7 @@ async function runMigrate(root, dialect, remote) {
862
859
  log.error(getErrorMessage(error));
863
860
  process.exit(1);
864
861
  }
865
- const { checkWranglerMigrationApplySet, parseRootWranglerConfig } = await import("./deploy-irP5q0-x.mjs");
862
+ const { checkWranglerMigrationApplySet, parseRootWranglerConfig } = await import("./deploy-BDu1vhSH.mjs");
866
863
  const applySet = await checkWranglerMigrationApplySet(context.operation.configPath, parseRootWranglerConfig(context.operation.configPath), binding, context.migrationsDir, rawMigrations);
867
864
  if (!applySet.ok) {
868
865
  log.error(applySet.reason);
@@ -876,7 +873,7 @@ async function runMigrate(root, dialect, remote) {
876
873
  process.exit(1);
877
874
  }
878
875
  for (const migration of pending) log.step(migration.name);
879
- log.success(`Applied ${pending.length} migration(s) to remote database.`);
876
+ log.success(`Applied ${formatCount(pending.length, "migration")} to remote database.`);
880
877
  outro("Done.");
881
878
  return;
882
879
  }
@@ -924,7 +921,7 @@ async function runMigrate(root, dialect, remote) {
924
921
  if (result.applied.length === 0) log.info("Remote database is up to date.");
925
922
  else {
926
923
  for (const name of result.applied) log.step(name);
927
- log.success(`Applied ${result.applied.length} migration(s) to remote database.`);
924
+ log.success(`Applied ${formatCount(result.applied.length, "migration")} to remote database.`);
928
925
  }
929
926
  for (const warning of result.warnings ?? []) log.warn(warning);
930
927
  outro("Done.");
@@ -950,7 +947,7 @@ async function runMigrate(root, dialect, remote) {
950
947
  if (applied.length === 0) log.info("All migrations are up to date.");
951
948
  else {
952
949
  for (const name of applied) log.step(name);
953
- log.success(`Applied ${applied.length} migration(s).`);
950
+ log.success(`Applied ${formatCount(applied.length, "migration")}.`);
954
951
  }
955
952
  outro("Done.");
956
953
  return;
@@ -975,7 +972,7 @@ async function runMigrate(root, dialect, remote) {
975
972
  if (applied.length === 0) log.info("All migrations are up to date.");
976
973
  else {
977
974
  for (const name of applied) log.step(name);
978
- log.success(`Applied ${applied.length} migration(s).`);
975
+ log.success(`Applied ${formatCount(applied.length, "migration")}.`);
979
976
  }
980
977
  outro("Done.");
981
978
  return;
@@ -993,7 +990,7 @@ async function runMigrate(root, dialect, remote) {
993
990
  if (applied.length === 0) log.info("All migrations are up to date.");
994
991
  else {
995
992
  for (const name of applied) log.step(name);
996
- log.success(`Applied ${applied.length} migration(s).`);
993
+ log.success(`Applied ${formatCount(applied.length, "migration")}.`);
997
994
  log.info(dim("Restart your dev server if it's running."));
998
995
  }
999
996
  outro("Done.");
@@ -1319,7 +1316,7 @@ async function runRenameMigrations(root, dialect) {
1319
1316
  process.exit(1);
1320
1317
  }
1321
1318
  }
1322
- log.success(`Renamed ${renames.length} migration(s) to timestamp format.`);
1319
+ log.success(`Renamed ${formatCount(renames.length, "migration")} to timestamp format.`);
1323
1320
  outro("Done.");
1324
1321
  }
1325
1322
  function formatMySqlExportValue(value) {
@@ -1524,7 +1521,7 @@ async function runSetUrl(root) {
1524
1521
  log.error("No project linked. Run `void deploy` first or link a project.");
1525
1522
  process.exit(1);
1526
1523
  }
1527
- const { text: promptText, isCancel: isCancelCheck } = await import("./prompts-2TGE6oXx.mjs");
1524
+ const { text: promptText, isCancel: isCancelCheck } = await import("./prompts-ZAuJlyCj.mjs");
1528
1525
  const connectionString = await promptText({
1529
1526
  message: `Enter your ${dialect === "mysql" ? "MySQL" : "PostgreSQL"} connection string:`,
1530
1527
  placeholder: dialect === "mysql" ? "mysql://user:pass@host:3306/dbname" : "postgresql://user:pass@host:5432/dbname",
@@ -1,13 +1,12 @@
1
- import { a as removeProjectConfig, r as readProjectConfig } from "./project-DKG5Ra8p.mjs";
2
- import { c as getToken } from "./auth-CQkSDS50.mjs";
3
- import { B as note, H as outro, L as log, N as intro, O as cancel, X as text, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
4
- import { n as PlatformClient } from "./client-DKAsFA4X.mjs";
5
- import { i as createSpinner, r as cliTitle } from "./output-CbM85T4k.mjs";
1
+ import { a as removeProjectConfig, r as readProjectConfig } from "./project-BkbfDs0V.mjs";
2
+ import { c as getToken } from "./auth-7wuZ5ob8.mjs";
3
+ import { B as note, H as outro, L as log, O as cancel, X as text, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
4
+ import { r as PlatformClient } from "./client-RsPo8wsP.mjs";
5
+ import { r as createSpinner } from "./output-BBsUwdyT.mjs";
6
6
  import { r as resolveProjectBySlug } from "./resolve-project-BG5ORGID.mjs";
7
7
  //#region src/cli/delete.ts
8
8
  async function runDeleteCommand(root, slug, options) {
9
9
  console.log();
10
- intro(cliTitle("delete"));
11
10
  const token = getToken(root);
12
11
  if (!token) {
13
12
  log.error("Not logged in. Run `void account login` first.");
@@ -0,0 +1,2 @@
1
+ import { r as runDeploy, t as parseRootWranglerConfig, y as checkWranglerMigrationApplySet } from "./deploy-DfsAe-T0.mjs";
2
+ export { checkWranglerMigrationApplySet, parseRootWranglerConfig, runDeploy };