void 1.2.0 → 1.3.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 (169) hide show
  1. package/dist/{account-cmd-CdUll_35.mjs → account-cmd-B4i71m7k.mjs} +3 -3
  2. package/dist/{application-analysis-fEqoSeMp.mjs → application-analysis-DYdVoMAY.mjs} +8 -6
  3. package/dist/{application-routing-DAhNP4u3.mjs → application-routing-C8EqRDfv.mjs} +3 -1
  4. package/dist/{auth-link-C87vGXM-.mjs → auth-link-BKwHPbdv.mjs} +3 -3
  5. package/dist/{auth-router-6I81r-ix.mjs → auth-router-DqLx8E0F.mjs} +2 -2
  6. package/dist/{better-auth-shared-D-6z0q0f.mjs → better-auth-shared-7FM3Uk2N.mjs} +48 -2
  7. package/dist/{build-cmd-ex1g-j_e.mjs → build-cmd-Dy4psnt1.mjs} +1 -1
  8. package/dist/{cache-oHzrnY3z.mjs → cache-DV37S6dl.mjs} +1 -1
  9. package/dist/{cancel-deploy-viAMD0Q_.mjs → cancel-deploy-DMPyu1Vt.mjs} +1 -1
  10. package/dist/{cf-build-output-BhVxldCw.mjs → cf-build-output-Bapzc_8Z.mjs} +102 -1
  11. package/dist/cf-build-output-DlBkWdNU.mjs +1 -0
  12. package/dist/cli/cli.mjs +41 -32
  13. package/dist/cli/cloudflare-operation-process.mjs +27 -6
  14. package/dist/cli/env-schema-probe.mjs +2 -2
  15. package/dist/{client-BEkdj1kx.mjs → client-BEMtySaV.mjs} +8 -1
  16. package/dist/client-DyxPQnF_.mjs +1 -0
  17. package/dist/{cloudflare-cmd-DMzCv12s.mjs → cloudflare-cmd-BaqIigwI.mjs} +1 -1
  18. package/dist/{cloudflare-connect-CCRTVg-I.mjs → cloudflare-connect-pNLQmr_e.mjs} +1 -1
  19. package/dist/{cloudflare-operations-DsSaw2BT.mjs → cloudflare-operations-PCM4wucv.mjs} +1 -1
  20. package/dist/{cloudflare-operations-Dh9dEHJj.mjs → cloudflare-operations-vP3b5CQf.mjs} +3 -3
  21. package/dist/config-BTu1o3Dc.mjs +49 -0
  22. package/dist/{config-DQfHOKh9.d.mts → config-Du88-7Y8.d.mts} +2 -1
  23. package/dist/config-entry.d.mts +1 -1
  24. package/dist/{connect-k7R2rPVA.mjs → connect-DwVsBvVh.mjs} +4 -4
  25. package/dist/{create-project-DTuy-l0z.mjs → create-project-CgrnvzyA.mjs} +1 -1
  26. package/dist/{create-project-DV71ol5d.mjs → create-project-CjzbBlTv.mjs} +1 -1
  27. package/dist/{db-DVOkLH5X.mjs → db-rvo64snS.mjs} +13 -13
  28. package/dist/{delete-BbP5eopu.mjs → delete-DWX6dP4M.mjs} +1 -1
  29. package/dist/deploy-CtHE2A3R.mjs +2 -0
  30. package/dist/{deploy-7H32EnUs.mjs → deploy-hRPvw8ci.mjs} +229 -69
  31. package/dist/{deploy-managed-static-DlvcvnQT.mjs → deploy-managed-static-CDYA2p3L.mjs} +30 -14
  32. package/dist/{deploy-transport-BzGEj0Ge.mjs → deploy-transport-JCxw7QDi.mjs} +3 -3
  33. package/dist/deploy.mjs +4 -3
  34. package/dist/{dispatch-DoUnxTNo.mjs → dispatch-OVLeWW8K.mjs} +71 -2
  35. package/dist/{domain-CA2wBgra.mjs → domain-CH5iBD9Y.mjs} +2 -2
  36. package/dist/{email-DXpCc77w.mjs → email-CbTO1l78.mjs} +58 -9
  37. package/dist/{email-cloudflare-D03g2TkS.mjs → email-cloudflare-B8-pq_-W.mjs} +106 -5
  38. package/dist/{env-DgOQ9_8S.mjs → env-BBdw236G.mjs} +3 -3
  39. package/dist/{env-BJjULvL0.mjs → env-BaMz0j7H.mjs} +6 -1
  40. package/dist/{env-validation-BmsdCZEk.mjs → env-validation-BfBVvBNe.mjs} +1 -1
  41. package/dist/{env-validation-Dwq3PJzK.mjs → env-validation-XcukUlFM.mjs} +1 -1
  42. package/dist/{gen-BfmcIi2g.mjs → gen-CCx3t2Ju.mjs} +1 -1
  43. package/dist/gen-TgXy93Rr.mjs +1 -0
  44. package/dist/{github-cmd-CY9LUqLh.mjs → github-cmd-BzkRLkbg.mjs} +1 -1
  45. package/dist/{handler-BbkSPzGF.d.mts → handler-CQv5YDS0.d.mts} +1 -1
  46. package/dist/{help-CxSlPpzJ.mjs → help-CKbrhZha.mjs} +16 -1
  47. package/dist/help-qOZr3wng.mjs +1 -0
  48. package/dist/index.d.mts +2 -4
  49. package/dist/index.mjs +317 -122
  50. package/dist/{info-7VDlhtyy.mjs → info-oBm8yK8J.mjs} +2 -2
  51. package/dist/{init-DxYyOs4-.mjs → init-CBp_uMve.mjs} +217 -197
  52. package/dist/{link-Ddmod1dZ.mjs → link-Dt_QXmM4.mjs} +2 -2
  53. package/dist/{list-MogaugiO.mjs → list-DF6asTdt.mjs} +2 -2
  54. package/dist/{live-Bt8Y_0bg.d.mts → live-CXJ9yC98.d.mts} +1 -1
  55. package/dist/{local-d1-BHBnKWRb.mjs → local-d1-CUhH3qtj.mjs} +1 -1
  56. package/dist/{login-Cttnagmm.mjs → login-BjSyhXlT.mjs} +2 -2
  57. package/dist/login-Cdo8Aco1.mjs +1 -0
  58. package/dist/{logs-CAszUWZI.mjs → logs-DmvBl6xA.mjs} +2 -2
  59. package/dist/{migrate-DyT2jJ8y.mjs → migrate-BXRHpYwR.mjs} +1 -1
  60. package/dist/migrate-COPncCGx.mjs +1 -0
  61. package/dist/nitro.mjs +2 -2
  62. package/dist/{node-WB7c2N4L.mjs → node-DtD7ZiPf.mjs} +4 -4
  63. package/dist/{operator-args-UnE8Y2eK.mjs → operator-args-BsJIYXaT.mjs} +8 -1
  64. package/dist/operator-cmd-DDiX7Y3f.mjs +1 -0
  65. package/dist/{operator-cmd-skshjMGl.mjs → operator-cmd-DjZKGGgN.mjs} +4 -3
  66. package/dist/pages/client.d.mts +21 -4
  67. package/dist/pages/client.mjs +174 -35
  68. package/dist/pages/index.d.mts +18 -2
  69. package/dist/pages/index.mjs +2 -52
  70. package/dist/pages/islands-plugin.d.mts +1 -1
  71. package/dist/pages/islands-plugin.mjs +9 -3
  72. package/dist/pages/protocol.d.mts +2 -2
  73. package/dist/platform-args-BC8_hsDj.mjs +1 -0
  74. package/dist/{platform-args-DVbVClZl.mjs → platform-args-BMD2gjc_.mjs} +1 -1
  75. package/dist/{platform-auth-config-C-pm5Qzx.mjs → platform-auth-config-BgnuMbml.mjs} +3 -3
  76. package/dist/{platform-auth-protection-SHhvim1L.mjs → platform-auth-protection-NjRejttU.mjs} +2 -2
  77. package/dist/{platform-auth-recovery-DXVWs-wA.mjs → platform-auth-recovery-Ug12d9W5.mjs} +2 -2
  78. package/dist/{platform-cmd-PiNRkopU.mjs → platform-cmd-BYKLMPCn.mjs} +1 -1
  79. package/dist/{platform-cmd-D5I1beUX.mjs → platform-cmd-HByuZAO7.mjs} +4 -4
  80. package/dist/{platform-domain-jpmBfZeb.mjs → platform-domain-DLSQ8GF8.mjs} +2 -2
  81. package/dist/{platform-lifecycle-DyKmuNY6.mjs → platform-lifecycle-3dwFJmnq.mjs} +102 -40
  82. package/dist/{platform-lifecycle-DH3Yr1qQ.mjs → platform-lifecycle-BRqcxerG.mjs} +1 -1
  83. package/dist/{platform-management-7m-PLaPJ.mjs → platform-management-ZK6XcbCo.mjs} +1 -1
  84. package/dist/{platform-management--vDwSn35.mjs → platform-management-ZZ6bQM5j.mjs} +1 -1
  85. package/dist/{platform-recovery-BiNpZZab.mjs → platform-recovery-8vNE5dNN.mjs} +2 -2
  86. package/dist/{plugin-inference-DUjCd55H.mjs → plugin-inference-CeiB6BG5.mjs} +53 -18
  87. package/dist/{prepare-BcAE5Sdj.mjs → prepare-5BR7Splm.mjs} +1 -1
  88. package/dist/prepare-B3VrSF1Z.mjs +1 -0
  89. package/dist/{prepare-DA-17DhO.mjs → prepare-Dseww74N.mjs} +4 -4
  90. package/dist/{prerender-render-Cijv7UFo.mjs → prerender-render-CaShbHJ3.mjs} +13 -1
  91. package/dist/prerender-render.d.mts +1 -0
  92. package/dist/prerender-render.mjs +1 -1
  93. package/dist/{project-cmd-DA4K5faU.mjs → project-cmd-CjLNNxwe.mjs} +15 -15
  94. package/dist/{project-team-CQBNveX3.mjs → project-team-DE5drjcl.mjs} +1 -1
  95. package/dist/{project-token-CCalFyQf.mjs → project-token-XEYEXfiJ.mjs} +1 -1
  96. package/dist/{project-zero-trust-DPnkiEuT.mjs → project-zero-trust-6VPU8zmV.mjs} +1 -1
  97. package/dist/{protocol-BBDpJz3G.d.mts → protocol-BekmFxCI.d.mts} +2 -2
  98. package/dist/{provision-DtROpNNI.mjs → provision-B7UFrBH7.mjs} +1 -1
  99. package/dist/{provision-BFLCrnUp.mjs → provision-Chq0NRAV.mjs} +1 -1
  100. package/dist/{requests-BpH0kImL.mjs → requests-CG-Pj8ze.mjs} +1 -1
  101. package/dist/{rollback-CXS1tAa-.mjs → rollback-CIrm2txZ.mjs} +2 -2
  102. package/dist/{route-types-BZi26DVS.mjs → route-types--PAOzHlH.mjs} +49 -28
  103. package/dist/routes-stub.d.mts +22 -13
  104. package/dist/runtime/better-auth-mysql.mjs +1 -1
  105. package/dist/runtime/better-auth-pg.mjs +1 -1
  106. package/dist/runtime/better-auth.mjs +1 -1
  107. package/dist/runtime/handler.d.mts +1 -1
  108. package/dist/runtime/live-client.d.mts +1 -1
  109. package/dist/runtime/live.d.mts +1 -1
  110. package/dist/runtime/log.mjs +19 -1
  111. package/dist/runtime/routing.d.mts +2 -2
  112. package/dist/runtime/routing.mjs +4 -3
  113. package/dist/runtime/validator.d.mts +1 -1
  114. package/dist/runtime/ws-server.d.mts +1 -1
  115. package/dist/runtime/ws.d.mts +1 -1
  116. package/dist/{scan-8IzYXiU_.mjs → scan-N9WzdcAl.mjs} +302 -23
  117. package/dist/{secret-BbXHfLAt.mjs → secret-BL6g7mF5.mjs} +3 -3
  118. package/dist/static-asset-marker-Btf-6oCD.mjs +32 -0
  119. package/dist/{types-7AIz0OZu.d.mts → types-w72dljaA.d.mts} +6 -1
  120. package/dist/{version-metadata-tS39iW09.mjs → version-metadata-DmaZNTYW.mjs} +1 -1
  121. package/dist/worker-conditions-AWFRcFxR.mjs +11 -0
  122. package/dist/{wrangler-F96NnLyb.mjs → wrangler-CDiEBCdS.mjs} +2 -1
  123. package/dist/wrangler-DOPr4jyI.mjs +1 -0
  124. package/dist/{wrapper-D3sZyh2C.mjs → wrapper-CEiDeCqD.mjs} +6 -10
  125. package/dist/{ws-BH-im_tX.d.mts → ws-D1zWiB_P.d.mts} +1 -1
  126. package/docs/guide/auth.md +3 -1
  127. package/docs/guide/edge/static-assets.md +10 -0
  128. package/docs/guide/email/domains.md +1 -1
  129. package/docs/guide/email/receiving.md +2 -0
  130. package/docs/guide/email/sending.md +1 -1
  131. package/docs/guide/pages-routing/actions-and-forms.md +19 -13
  132. package/docs/guide/pages-routing/markdown.md +2 -0
  133. package/docs/guide/pages-routing/overview.md +34 -3
  134. package/docs/guide/platform/administration/email.md +18 -0
  135. package/docs/guide/platform/installation/prerequisites.md +9 -4
  136. package/docs/guide/platform/installation/uninstall.md +2 -0
  137. package/docs/guide/queues.md +13 -1
  138. package/docs/guide/quickstart.md +26 -1
  139. package/docs/guide/sandboxes.md +2 -2
  140. package/docs/guide/server-routing.md +38 -2
  141. package/docs/guide/type-safety.md +7 -7
  142. package/docs/guide/websockets.md +4 -2
  143. package/docs/reference/api/pages.md +4 -4
  144. package/docs/reference/cli/email.md +13 -0
  145. package/docs/reference/cli/platform-email.md +2 -2
  146. package/docs/reference/cli.md +2 -1
  147. package/docs/reference/structure.md +3 -1
  148. package/package.json +8 -7
  149. package/sandbox.Dockerfile +1 -1
  150. package/templates/assets/icons.svg +49 -0
  151. package/templates/assets/react.svg +1 -0
  152. package/templates/assets/solid.svg +1 -0
  153. package/templates/assets/stack.svg +35 -0
  154. package/templates/assets/svelte.svg +1 -0
  155. package/templates/assets/void.svg +5 -0
  156. package/templates/assets/vue.svg +1 -0
  157. package/dist/cf-build-output-BJHuSsVN.mjs +0 -1
  158. package/dist/client-BiRDZTSd.mjs +0 -1
  159. package/dist/config-CyUJzi3q.mjs +0 -32
  160. package/dist/deploy-CE0Ev0Ob.mjs +0 -2
  161. package/dist/gen-NrOlWZaG.mjs +0 -1
  162. package/dist/help-BeAFFE5C.mjs +0 -1
  163. package/dist/login-DgDwlKc_.mjs +0 -1
  164. package/dist/migrate-n49ZeS1X.mjs +0 -1
  165. package/dist/operator-cmd-d2MvJOrl.mjs +0 -1
  166. package/dist/parse-filename-DioPHiR9.mjs +0 -77
  167. package/dist/platform-args-kQrgxScY.mjs +0 -1
  168. package/dist/prepare-C4I0f--h.mjs +0 -1
  169. package/dist/wrangler-BLb3_luP.mjs +0 -1
@@ -1,7 +1,7 @@
1
1
  import { a as join, s as relative } from "./dist-ipQi0Q8y.mjs";
2
- import { a as deriveWebSocketClassNameFromName, o as inferWebSocketResourceName } from "./plugin-inference-DUjCd55H.mjs";
2
+ import { a as deriveWebSocketClassNameFromName, o as inferWebSocketResourceName } from "./plugin-inference-CeiB6BG5.mjs";
3
3
  import { p as readConfig } from "./config-DHgSEWT7.mjs";
4
- import { d as deriveDurableResourceIdentity, f as inferDurableResourceName, t as analyzeApplicationSync } from "./application-analysis-fEqoSeMp.mjs";
4
+ import { d as deriveDurableResourceIdentity, f as inferDurableResourceName, t as analyzeApplicationSync } from "./application-analysis-DYdVoMAY.mjs";
5
5
  import { n as VOID_LOCK_FILE } from "./cloudflare-config-DchHxPTo.mjs";
6
6
  import { existsSync, readFileSync } from "node:fs";
7
7
  import { isRecord } from "@void/deploy-core";
@@ -1,11 +1,11 @@
1
1
  import { a as join, c as resolve, i as isAbsolute, n as dirname, s as relative, t as basename } from "./dist-ipQi0Q8y.mjs";
2
- import { r as detectFramework } from "./plugin-inference-DUjCd55H.mjs";
2
+ import { r as detectFramework } from "./plugin-inference-CeiB6BG5.mjs";
3
3
  import { n as readProjectPaths, o as TYPED_CONFIG_FILE } from "./project-paths-DGu_QZ_Q.mjs";
4
4
  import { c as getDatabaseCasing, l as getDatabaseDialect, p as readConfig, s as databaseConfigValue } from "./config-DHgSEWT7.mjs";
5
5
  import { t as MagicString } from "./dist-Cegxq8gs.mjs";
6
6
  import { c as writeDeploymentPlatform, n as readDeploymentPlatform, r as readProjectConfig, t as attachSelectedPlatform, u as writeProjectConfig } from "./project-rqDnVsJN.mjs";
7
7
  import { r as materializeCloudflareConfig } from "./cloudflare-config-DchHxPTo.mjs";
8
- import { M as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE } from "./wrangler-F96NnLyb.mjs";
8
+ import { M as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE } from "./wrangler-CDiEBCdS.mjs";
9
9
  import { i as readPackageJson, n as hasPackageDependency } from "./package-json-BjYqR-So.mjs";
10
10
  import { c as getToken } from "./auth-B6iOCjKI.mjs";
11
11
  import { n as ensureProjectTsconfig, t as createProjectTsconfig } from "./project-tsconfig-Itv1f4WC.mjs";
@@ -13,16 +13,16 @@ import { t as parseDotenvFile } from "./dotenv-CNazY3-w.mjs";
13
13
  import { r as writeDrizzleConfig, t as PLACEHOLDER_DB_URL } from "./config-BIaXIkkv.mjs";
14
14
  import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./dist-Cor9XGoz.mjs";
15
15
  import { n as getOwnVersion, r as getPackageDir, t as detectAgents } from "./agents-CuNtT0D_.mjs";
16
- import { r as PlatformClient } from "./client-BEkdj1kx.mjs";
16
+ import { r as PlatformClient } from "./client-BEMtySaV.mjs";
17
17
  import { l as formatUrl, m as printSuccess, p as note } from "./output-BpgYODYx.mjs";
18
- import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-DV71ol5d.mjs";
18
+ import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-CjzbBlTv.mjs";
19
19
  import { s as formatProjectCommand } from "./cloudflare-process-8jEYIeim.mjs";
20
20
  import { i as hasLocalLockfile, n as drizzleKitBin, r as findInstalledYarnPnpRuntime, t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-DLbEFMT0.mjs";
21
- import { t as promptForLoginToken } from "./login-Cttnagmm.mjs";
22
- import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-D5I1beUX.mjs";
23
- import { t as connectCloudflare } from "./cloudflare-connect-CCRTVg-I.mjs";
21
+ import { t as promptForLoginToken } from "./login-BjSyhXlT.mjs";
22
+ import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-HByuZAO7.mjs";
23
+ import { t as connectCloudflare } from "./cloudflare-connect-pNLQmr_e.mjs";
24
24
  import { n as snapshotDrizzleOutputs } from "./generate-B1m4Cm4n.mjs";
25
- import { i as writeVoidProjectConfig, o as migrateFrameworkAdapterPaths, r as canRewriteVoidProjectConfig, t as migrateLegacyVoidConfig } from "./migrate-DyT2jJ8y.mjs";
25
+ import { i as writeVoidProjectConfig, o as migrateFrameworkAdapterPaths, r as canRewriteVoidProjectConfig, t as migrateLegacyVoidConfig } from "./migrate-BXRHpYwR.mjs";
26
26
  import { createRequire } from "node:module";
27
27
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
28
28
  import { parseSync } from "vite";
@@ -211,6 +211,9 @@ function initialCommitCommand(root) {
211
211
  return `${git} add -A && ${git} commit -m "chore: initial commit"`;
212
212
  }
213
213
  //#endregion
214
+ //#region src/cli/starter-ui.css?raw
215
+ var starter_ui_default = ":root {\n --text: rgb(22 23 29 / 70%);\n --text-h: #16171d;\n --bg: #fff;\n --border: #e5e4e7;\n --code-bg: #f2f1f4;\n --accent: #6c3bff;\n --error: #b42318;\n --social-bg: #f2f1f4;\n --radius-inner: 4px;\n --radius-element: 6px;\n --shadow: rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px;\n\n --sans: system-ui, 'Segoe UI', Roboto, sans-serif;\n --heading: system-ui, 'Segoe UI', Roboto, sans-serif;\n --mono: ui-monospace, Consolas, monospace;\n\n font: 18px/145% var(--sans);\n letter-spacing: 0.18px;\n color-scheme: light dark;\n color: var(--text);\n background: var(--bg);\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n @media (max-width: 1024px) {\n font-size: 16px;\n }\n}\n\n@supports (corner-shape: squircle) {\n :root {\n /* Squircle curves need about twice the radius to read as rounded. */\n --radius-inner: 8px;\n --radius-element: 12px;\n }\n\n :where(.starter, .starter *),\n .starter *::before,\n .starter *::after {\n corner-shape: squircle;\n }\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --text: rgb(255 255 255 / 70%);\n --text-h: #fff;\n --bg: #16171d;\n --border: #3b3440;\n --code-bg: #3b3440;\n --accent: #b39aff;\n --error: #fda29b;\n --social-bg: #3b3440;\n --shadow: rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px;\n }\n}\n\n.starter {\n width: 1126px;\n max-width: 100%;\n margin: 0 auto;\n text-align: center;\n border-inline: 1px solid var(--border);\n min-height: 100svh;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n}\n\nh1,\nh2 {\n font-family: var(--heading);\n font-weight: 500;\n color: var(--text-h);\n}\n\nh1 {\n font-size: 56px;\n letter-spacing: -1.68px;\n margin: 32px 0;\n @media (max-width: 1024px) {\n font-size: 36px;\n margin: 20px 0;\n }\n}\nh2 {\n font-size: 24px;\n line-height: 118%;\n letter-spacing: -0.24px;\n margin: 0 0 8px;\n @media (max-width: 1024px) {\n font-size: 20px;\n }\n}\np {\n margin: 0;\n}\n\ncode {\n font-family: var(--mono);\n display: inline-flex;\n border-radius: var(--radius-inner);\n color: var(--text-h);\n font-size: 15px;\n line-height: 135%;\n padding: 4px 8px;\n background: var(--code-bg);\n}\n\n.hero {\n position: relative;\n\n .base,\n .framework,\n .void {\n inset-inline: 0;\n margin: 0 auto;\n }\n\n .base {\n width: 170px;\n position: relative;\n z-index: 0;\n }\n\n .framework,\n .void {\n position: absolute;\n }\n\n .framework {\n z-index: 1;\n top: 34px;\n height: 28px;\n transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) scale(1.4);\n }\n\n .void {\n z-index: 0;\n top: 107px;\n height: 22px;\n width: auto;\n transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) scale(0.8);\n }\n}\n\n#center {\n display: flex;\n flex-direction: column;\n gap: 25px;\n padding-bottom: 24px;\n place-content: center;\n place-items: center;\n flex-grow: 1;\n\n @media (max-width: 1024px) {\n padding: 32px 20px 24px;\n gap: 18px;\n }\n}\n\n.starter-intro {\n width: min(720px, 100%);\n padding-inline: 20px;\n box-sizing: border-box;\n\n a {\n color: var(--accent);\n }\n\n @media (max-width: 1024px) {\n padding-inline: 0;\n }\n}\n\n.starter-description {\n display: grid;\n gap: 12px;\n\n > p:nth-child(2) {\n text-wrap: balance;\n }\n}\n\n.starter-demo {\n border-top: 1px solid var(--border);\n padding: 32px;\n text-align: left;\n\n @media (max-width: 1024px) {\n padding: 24px 20px;\n }\n}\n\n.demo-content {\n max-width: 640px;\n margin: 0 auto;\n display: grid;\n gap: 24px;\n\n h2 {\n margin: 0;\n }\n}\n\n.messages {\n list-style: none;\n margin: 0;\n padding: 0;\n display: grid;\n gap: 12px;\n\n li {\n padding: 12px 16px;\n border: 1px solid var(--border);\n border-radius: var(--radius-element);\n overflow-wrap: anywhere;\n }\n\n strong {\n display: block;\n color: var(--text-h);\n font-weight: 500;\n }\n\n small {\n font-size: 14px;\n }\n}\n\n.message-form {\n display: grid;\n gap: 12px;\n\n label {\n color: var(--text-h);\n }\n\n input,\n button {\n font: inherit;\n color: var(--text-h);\n background: var(--social-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius-element);\n padding: 10px 12px;\n\n &:focus-visible {\n outline: 2px solid var(--accent);\n outline-offset: 2px;\n }\n }\n\n input {\n flex: 1;\n min-width: 0;\n }\n\n button {\n cursor: pointer;\n\n &:hover {\n border-color: var(--accent);\n }\n\n &:disabled {\n cursor: wait;\n opacity: 0.6;\n }\n }\n}\n\n.message-fields {\n display: flex;\n gap: 8px;\n\n @media (max-width: 480px) {\n flex-direction: column;\n }\n}\n\n.message-form [data-void-form-error] {\n color: var(--error);\n font-size: 14px;\n}\n\n#next-steps {\n display: flex;\n border-top: 1px solid var(--border);\n text-align: left;\n\n & > div {\n flex: 1 1 0;\n padding: 32px;\n @media (max-width: 1024px) {\n padding: 24px 20px;\n }\n }\n\n .icon {\n color: var(--accent);\n margin-bottom: 16px;\n width: 22px;\n height: 22px;\n }\n\n @media (max-width: 1024px) {\n flex-direction: column;\n text-align: center;\n }\n}\n\n#docs {\n border-right: 1px solid var(--border);\n\n @media (max-width: 1024px) {\n border-right: none;\n border-bottom: 1px solid var(--border);\n }\n}\n\n#next-steps ul {\n list-style: none;\n padding: 0;\n display: flex;\n gap: 8px;\n margin: 32px 0 0;\n\n a {\n color: var(--text-h);\n font-size: 16px;\n border-radius: var(--radius-element);\n background: var(--social-bg);\n display: flex;\n padding: 6px 12px;\n align-items: center;\n gap: 8px;\n text-decoration: none;\n transition: box-shadow 0.3s;\n\n &:hover {\n box-shadow: var(--shadow);\n }\n .button-icon {\n height: 18px;\n width: 18px;\n }\n }\n\n @media (max-width: 1024px) {\n margin-top: 20px;\n flex-wrap: wrap;\n justify-content: center;\n\n li {\n flex: 1 1 calc(50% - 8px);\n }\n\n a {\n width: 100%;\n justify-content: center;\n box-sizing: border-box;\n }\n }\n}\n\n#spacer {\n height: 88px;\n border-top: 1px solid var(--border);\n @media (max-width: 1024px) {\n height: 48px;\n }\n}\n\n.ticks {\n position: relative;\n width: 100%;\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: -4.5px;\n border: 5px solid transparent;\n }\n\n &::before {\n left: 0;\n border-left-color: var(--border);\n }\n &::after {\n right: 0;\n border-right-color: var(--border);\n }\n}\n";
216
+ //#endregion
214
217
  //#region src/cli/template.ts
215
218
  const SCAFFOLD_GITIGNORE_LINES = [
216
219
  "node_modules",
@@ -268,6 +271,7 @@ const SCAFFOLD_FRAMEWORK_OPTIONS = [
268
271
  const SCAFFOLD_FRAMEWORKS = {
269
272
  react: {
270
273
  label: "React",
274
+ docsUrl: "https://react.dev/",
271
275
  adapterPackage: "@void/react",
272
276
  adapterImport: "voidReact",
273
277
  adapterPlugin: "@void/react/plugin",
@@ -285,6 +289,7 @@ const SCAFFOLD_FRAMEWORKS = {
285
289
  },
286
290
  vue: {
287
291
  label: "Vue",
292
+ docsUrl: "https://vuejs.org/",
288
293
  adapterPackage: "@void/vue",
289
294
  adapterImport: "voidVue",
290
295
  adapterPlugin: "@void/vue/plugin",
@@ -295,6 +300,7 @@ const SCAFFOLD_FRAMEWORKS = {
295
300
  },
296
301
  svelte: {
297
302
  label: "Svelte",
303
+ docsUrl: "https://svelte.dev/",
298
304
  adapterPackage: "@void/svelte",
299
305
  adapterImport: "voidSvelte",
300
306
  adapterPlugin: "@void/svelte/plugin",
@@ -305,6 +311,7 @@ const SCAFFOLD_FRAMEWORKS = {
305
311
  },
306
312
  solid: {
307
313
  label: "Solid",
314
+ docsUrl: "https://www.solidjs.com/",
308
315
  adapterPackage: "@void/solid",
309
316
  adapterImport: "voidSolid",
310
317
  adapterPlugin: "@void/solid/plugin",
@@ -326,9 +333,16 @@ function getScaffoldTsconfigCompilerOptions(framework) {
326
333
  function createPagesStarterTemplate(options) {
327
334
  const { framework, starterMode, toolchain = "vite", voidPackageSpec, adapterPackageSpec } = options;
328
335
  const config = SCAFFOLD_FRAMEWORKS[framework];
336
+ const assets = join(getPackageDir(), "templates", "assets");
329
337
  const files = {
330
338
  "vite.config.ts": getViteConfig(framework, config),
331
- [`pages/index.${config.pageExtension}`]: getIndexPage(framework, starterMode)
339
+ [`pages/index.${config.pageExtension}`]: getIndexPage(framework, starterMode),
340
+ "pages/style.css": starter_ui_default,
341
+ "pages/vite-env.d.ts": "/// <reference types=\"vite/client\" />\n",
342
+ "public/stack.svg": readFileSync(join(assets, "stack.svg"), "utf8"),
343
+ "public/void.svg": readFileSync(join(assets, "void.svg"), "utf8"),
344
+ [`public/${framework}.svg`]: readFileSync(join(assets, `${framework}.svg`), "utf8"),
345
+ "public/icons.svg": readFileSync(join(assets, "icons.svg"), "utf8")
332
346
  };
333
347
  if (starterMode !== "static") {
334
348
  files["pages/index.server.ts"] = getIndexServer();
@@ -452,210 +466,216 @@ export default defineSeed<typeof import("./schema")>(async ({ db, schema }) => {
452
466
  `;
453
467
  }
454
468
  function getIndexPage(framework, starterMode) {
455
- if (starterMode === "static") switch (framework) {
456
- case "react": return `export default function HomePage() {
457
- return (
458
- <main>
459
- <h1>Welcome to Void</h1>
460
- <p>This starter is running in Pages mode with no database or server code yet.</p>
461
- <p>
462
- Add <code>pages/*.server.ts</code>, <code>routes/</code>, or <code>void/db</code> when
463
- you want to grow into full-stack features.
464
- </p>
465
- </main>
466
- );
467
- }
468
- `;
469
- case "vue": return `<template>
470
- <main>
471
- <h1>Welcome to Void</h1>
472
- <p>This starter is running in Pages mode with no database or server code yet.</p>
473
- <p>
474
- Add <code>pages/*.server.ts</code>, <code>routes/</code>, or <code>void/db</code> when you
475
- want to grow into full-stack features.
476
- </p>
477
- </main>
478
- </template>
479
- `;
480
- case "svelte": return `<main>
481
- <h1>Welcome to Void</h1>
482
- <p>This starter is running in Pages mode with no database or server code yet.</p>
483
- <p>
484
- Add <code>pages/*.server.ts</code>, <code>routes/</code>, or <code>void/db</code> when you
485
- want to grow into full-stack features.
486
- </p>
487
- </main>
488
- `;
489
- case "solid": return `export default function HomePage() {
490
- return (
491
- <main>
492
- <h1>Welcome to Void</h1>
493
- <p>This starter is running in Pages mode with no database or server code yet.</p>
494
- <p>
495
- Add <code>pages/*.server.ts</code>, <code>routes/</code>, or <code>void/db</code> when
496
- you want to grow into full-stack features.
497
- </p>
498
- </main>
499
- );
500
- }
501
- `;
502
- }
469
+ const { label, docsUrl } = SCAFFOLD_FRAMEWORKS[framework];
470
+ const hasDatabase = starterMode !== "static";
471
+ const body = `<main class="starter">
472
+ <section id="center" aria-labelledby="welcome-title">
473
+ <div class="hero">
474
+ <img class="base" src="/stack.svg" width="170" height="179" alt="" />
475
+ <img class="framework" src="/${framework}.svg" alt="${label} logo" />
476
+ <img class="void" src="/void.svg" alt="Void logo" />
477
+ </div>
478
+ <div class="starter-intro">
479
+ <h1 id="welcome-title">Welcome to Void</h1>
480
+ <div class="starter-description">
481
+ ${indent(starterMode === "static" ? `<p>This starter is running in Pages mode with no database or server code yet.</p>
482
+ <p>
483
+ Add <code>pages/*.server.ts</code>, <code>routes/</code>, or <code>void/db</code> when
484
+ you want to grow into full-stack features.
485
+ </p>` : `<p>
486
+ This starter is running in Pages mode. The list below is loaded from your database in <code>pages/index.server.ts</code>.
487
+ </p>
488
+ <p>API example: <a href="/api/hello">/api/hello</a></p>`, 8)}
489
+ </div>
490
+ </div>
491
+ </section>${hasDatabase ? `\n <div class="ticks" aria-hidden="true"></div>\n${indent(getMessagesDemo(framework), 2)}` : ""}
492
+ <div class="ticks" aria-hidden="true"></div>
493
+ <section id="next-steps" aria-label="Resources">
494
+ <div id="docs">
495
+ <svg class="icon" role="presentation" aria-hidden="true">
496
+ <use href="/icons.svg#documentation-icon"></use>
497
+ </svg>
498
+ <h2>Documentation</h2>
499
+ <p>Your questions, answered</p>
500
+ <ul>
501
+ <li>
502
+ <a href="https://void.cloud/guide/quickstart" target="_blank" rel="noreferrer">
503
+ Quickstart
504
+ </a>
505
+ </li>
506
+ <li>
507
+ <a href="${docsUrl}" target="_blank" rel="noreferrer">
508
+ <img class="button-icon" src="/${framework}.svg" alt="" />
509
+ Learn more
510
+ </a>
511
+ </li>
512
+ </ul>
513
+ </div>
514
+ <div id="social">
515
+ <svg class="icon" role="presentation" aria-hidden="true">
516
+ <use href="/icons.svg#social-icon"></use>
517
+ </svg>
518
+ <h2>Connect with us</h2>
519
+ <p>Join the Void community</p>
520
+ <ul>
521
+ <li>
522
+ <a href="https://github.com/voidzero-dev/void" target="_blank" rel="noreferrer">
523
+ <svg class="button-icon" role="presentation" aria-hidden="true">
524
+ <use href="/icons.svg#github-icon"></use>
525
+ </svg>
526
+ GitHub
527
+ </a>
528
+ </li>
529
+ <li>
530
+ <a href="https://discord.gg/cC6TEVFKSx" target="_blank" rel="noreferrer">
531
+ <svg class="button-icon" role="presentation" aria-hidden="true">
532
+ <use href="/icons.svg#discord-icon"></use>
533
+ </svg>
534
+ Discord
535
+ </a>
536
+ </li>
537
+ <li>
538
+ <a href="https://x.com/deploytovoid" target="_blank" rel="noreferrer">
539
+ <svg class="button-icon" role="presentation" aria-hidden="true">
540
+ <use href="/icons.svg#x-icon"></use>
541
+ </svg>
542
+ X.com
543
+ </a>
544
+ </li>
545
+ <li>
546
+ <a href="https://bsky.app/profile/voidzero.dev" target="_blank" rel="noreferrer">
547
+ <svg class="button-icon" role="presentation" aria-hidden="true">
548
+ <use href="/icons.svg#bluesky-icon"></use>
549
+ </svg>
550
+ Bluesky
551
+ </a>
552
+ </li>
553
+ </ul>
554
+ </div>
555
+ </section>
556
+ <div class="ticks" aria-hidden="true"></div>
557
+ <div id="spacer" aria-hidden="true"></div>
558
+ </main>`;
503
559
  switch (framework) {
504
- case "react": return `import { Form, useForm } from "${SCAFFOLD_FRAMEWORKS[framework].adapterPackage}";
560
+ case "react":
561
+ case "solid": {
562
+ const jsx = framework === "react" ? body.replaceAll("class=", "className=") : body;
563
+ return `${hasDatabase ? `${framework === "solid" ? "import { For, Show } from \"solid-js\";\n" : ""}import { Form, useForm } from "${SCAFFOLD_FRAMEWORKS[framework].adapterPackage}";
505
564
  import type { Props } from "./index.server";
565
+ ` : ""}import "./style.css";
506
566
 
507
- export default function HomePage({ messages }: Props) {
508
- const form = useForm("/", { text: "" });
509
- return (
510
- <main>
511
- <h1>Welcome to Void</h1>
512
- <p>
513
- This starter is running in Pages mode. The list below is loaded from your database in
514
- <code> pages/index.server.ts</code>.
515
- </p>
516
- <p>
517
- API example: <a href="/api/hello">/api/hello</a>
518
- </p>
519
- {messages.length === 0 ? (
520
- <p>
521
- No messages yet. Run <code>void db seed</code> to load the sample row from
522
- <code> db/seed.ts</code>.
523
- </p>
524
- ) : (
525
- <ul>
526
- {messages.map((message) => (
527
- <li key={message.id}>
528
- <strong>{message.text}</strong>
529
- <br />
530
- <small>{String(message.createdAt)}</small>
531
- </li>
532
- ))}
533
- </ul>
534
- )}
535
- <Form form={form}>
536
- <label>Message <input value={form.data.text} onChange={event => form.setData("text", event.target.value)} /></label>
537
- <button disabled={form.pending}>Add message</button>
538
- </Form>
539
- </main>
567
+ export default function HomePage(${hasDatabase ? framework === "react" ? "{ messages }: Props" : "props: Props" : ""}) {
568
+ ${hasDatabase ? " const form = useForm(\"/\", { text: \"\" });\n\n" : ""} return (
569
+ ${indent(jsx, 4)}
540
570
  );
541
571
  }
542
572
  `;
573
+ }
543
574
  case "vue": return `<script setup lang="ts">
544
- import type { Props } from "./index.server";
545
- import { Form, useForm } from "@void/vue";
546
-
547
- defineProps<Props>();
548
- const form = useForm("/", { text: "" });
549
- <\/script>
575
+ ${hasDatabase ? "import { Form, useForm } from \"@void/vue\";\nimport type { Props } from \"./index.server\";\n" : ""}import "./style.css";
576
+ ${hasDatabase ? "\ndefineProps<Props>();\nconst form = useForm(\"/\", { text: \"\" });\n" : ""}<\/script>
550
577
 
551
578
  <template>
552
- <main>
553
- <h1>Welcome to Void</h1>
554
- <p>
555
- This starter is running in Pages mode. The list below is loaded from your database in
556
- <code>pages/index.server.ts</code>.
557
- </p>
558
- <p>
559
- API example: <a href="/api/hello">/api/hello</a>
560
- </p>
561
- <p v-if="messages.length === 0">
562
- No messages yet. Run <code>void db seed</code> to load the sample row from
563
- <code>db/seed.ts</code>.
564
- </p>
565
- <ul v-else>
566
- <li v-for="message in messages" :key="message.id">
567
- <strong>{{ message.text }}</strong>
568
- <br />
569
- <small>{{ String(message.createdAt) }}</small>
570
- </li>
571
- </ul>
572
- <Form :form="form">
573
- <label>Message <input v-model="form.data.text" /></label>
574
- <button :disabled="form.pending">Add message</button>
575
- </Form>
576
- </main>
579
+ ${indent(body, 2)}
577
580
  </template>
578
581
  `;
579
582
  case "svelte": return `<script lang="ts">
580
- import type { Props } from "./index.server";
581
- import { Form, useForm } from "@void/svelte";
582
- const form = useForm("/", { text: "" });
583
-
584
- let { messages }: Props = $props();
585
- <\/script>
586
-
587
- <main>
588
- <h1>Welcome to Void</h1>
589
- <p>
590
- This starter is running in Pages mode. The list below is loaded from your database in
591
- <code>pages/index.server.ts</code>.
592
- </p>
593
- <p>
594
- API example: <a href="/api/hello">/api/hello</a>
595
- </p>
596
- {#if messages.length === 0}
597
- <p>
598
- No messages yet. Run <code>void db seed</code> to load the sample row from
599
- <code>db/seed.ts</code>.
600
- </p>
601
- {:else}
602
- <ul>
603
- {#each messages as message (message.id)}
604
- <li>
605
- <strong>{message.text}</strong>
606
- <br />
607
- <small>{String(message.createdAt)}</small>
608
- </li>
609
- {/each}
610
- </ul>
611
- {/if}
612
- <Form {form}>
613
- <label>Message <input bind:value={form.data.text} /></label>
614
- <button disabled={form.pending}>Add message</button>
615
- </Form>
616
- </main>
617
- `;
618
- case "solid": return `import { Form, useForm } from "${SCAFFOLD_FRAMEWORKS[framework].adapterPackage}";
619
- import type { Props } from "./index.server";
583
+ ${hasDatabase ? " import { Form, useForm } from \"@void/svelte\";\n import type { Props } from \"./index.server\";\n" : ""} import "./style.css";
584
+ ${hasDatabase ? "\n let { messages }: Props = $props();\n const form = useForm(\"/\", { text: \"\" });\n" : ""}<\/script>
620
585
 
621
- export default function HomePage(props: Props) {
622
- const form = useForm("/", { text: "" });
623
- return (
624
- <main>
625
- <h1>Welcome to Void</h1>
626
- <p>
627
- This starter is running in Pages mode. The list below is loaded from your database in
628
- <code> pages/index.server.ts</code>.
629
- </p>
630
- <p>
631
- API example: <a href="/api/hello">/api/hello</a>
632
- </p>
633
- {props.messages.length === 0 ? (
634
- <p>
635
- No messages yet. Run <code>void db seed</code> to load the sample row from
636
- <code> db/seed.ts</code>.
637
- </p>
638
- ) : (
639
- <ul>
640
- {props.messages.map((message) => (
641
- <li>
642
- <strong>{message.text}</strong>
643
- <br />
644
- <small>{String(message.createdAt)}</small>
645
- </li>
646
- ))}
647
- </ul>
648
- )}
649
- <Form form={form}>
650
- <label>Message <input value={form.data.text} onInput={event => form.setData("text", event.target.value)} /></label>
651
- <button disabled={form.pending}>Add message</button>
652
- </Form>
653
- </main>
654
- );
655
- }
586
+ ${body}
656
587
  `;
657
588
  }
658
589
  }
590
+ function getMessagesDemo(framework) {
591
+ const empty = `<p class="empty-state">
592
+ No messages yet. Run <code>void db seed</code> to load the sample row from <code>db/seed.ts</code>.
593
+ </p>`;
594
+ const content = {
595
+ react: `{messages.length === 0 ? (
596
+ ${indent(empty, 2)}
597
+ ) : (
598
+ <ul class="messages">
599
+ {messages.map((message) => (
600
+ <li key={message.id}>
601
+ <strong>{message.text}</strong>
602
+ <small>{String(message.createdAt)}</small>
603
+ </li>
604
+ ))}
605
+ </ul>
606
+ )}
607
+ <Form form={form} className="message-form">
608
+ <label htmlFor="message-text">Message</label>
609
+ <div class="message-fields">
610
+ <input id="message-text" name="text" value={form.data.text} onChange={(event) => form.setData("text", event.target.value)} required maxLength={1000} />
611
+ <button type="submit" disabled={form.pending}>Add message</button>
612
+ </div>
613
+ </Form>`,
614
+ vue: `<template v-if="messages.length === 0">
615
+ ${indent(empty, 2)}
616
+ </template>
617
+ <ul v-else class="messages">
618
+ <li v-for="message in messages" :key="message.id">
619
+ <strong>{{ message.text }}</strong>
620
+ <small>{{ String(message.createdAt) }}</small>
621
+ </li>
622
+ </ul>
623
+ <Form :form="form" class="message-form">
624
+ <label for="message-text">Message</label>
625
+ <div class="message-fields">
626
+ <input id="message-text" name="text" v-model="form.data.text" required maxlength="1000" />
627
+ <button type="submit" :disabled="form.pending">Add message</button>
628
+ </div>
629
+ </Form>`,
630
+ svelte: `{#if messages.length === 0}
631
+ ${indent(empty, 2)}
632
+ {:else}
633
+ <ul class="messages">
634
+ {#each messages as message (message.id)}
635
+ <li>
636
+ <strong>{message.text}</strong>
637
+ <small>{String(message.createdAt)}</small>
638
+ </li>
639
+ {/each}
640
+ </ul>
641
+ {/if}
642
+ <Form {form} class="message-form">
643
+ <label for="message-text">Message</label>
644
+ <div class="message-fields">
645
+ <input id="message-text" name="text" bind:value={form.data.text} required maxlength={1000} />
646
+ <button type="submit" disabled={form.pending}>Add message</button>
647
+ </div>
648
+ </Form>`,
649
+ solid: `<Show when={props.messages.length > 0} fallback={
650
+ ${indent(empty, 2)}
651
+ }>
652
+ <ul class="messages">
653
+ <For each={props.messages}>{(message) => (
654
+ <li>
655
+ <strong>{message.text}</strong>
656
+ <small>{String(message.createdAt)}</small>
657
+ </li>
658
+ )}</For>
659
+ </ul>
660
+ </Show>
661
+ <Form form={form} class="message-form">
662
+ <label for="message-text">Message</label>
663
+ <div class="message-fields">
664
+ <input id="message-text" name="text" value={form.data.text} onInput={(event) => form.setData("text", event.currentTarget.value)} required maxLength={1000} />
665
+ <button type="submit" disabled={form.pending}>Add message</button>
666
+ </div>
667
+ </Form>`
668
+ }[framework];
669
+ return `<section class="starter-demo" aria-labelledby="messages-title">
670
+ <div class="demo-content">
671
+ <h2 id="messages-title">Messages</h2>
672
+ ${indent(content, 4)}
673
+ </div>
674
+ </section>`;
675
+ }
676
+ function indent(source, spaces) {
677
+ return source.split("\n").map((line) => " ".repeat(spaces) + line).join("\n");
678
+ }
659
679
  //#endregion
660
680
  //#region src/cli/init-vite-plus.ts
661
681
  /** Keep every Vite consumer on the core used by the selected Vite+ toolchain. */
@@ -1,9 +1,9 @@
1
1
  import { r as readProjectConfig, t as attachSelectedPlatform, u as writeProjectConfig } from "./project-rqDnVsJN.mjs";
2
2
  import { c as getToken, s as getSiteDomain } from "./auth-B6iOCjKI.mjs";
3
3
  import { H as outro, L as log, O as cancel } from "./dist-Cor9XGoz.mjs";
4
- import { r as PlatformClient } from "./client-BEkdj1kx.mjs";
4
+ import { r as PlatformClient } from "./client-BEMtySaV.mjs";
5
5
  import { f as import_picocolors, m as printSuccess } from "./output-BpgYODYx.mjs";
6
- import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-DV71ol5d.mjs";
6
+ import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-CjzbBlTv.mjs";
7
7
  import { a as resolveProjectBySlug } from "./resolve-project-Xoi6eTWY.mjs";
8
8
  //#region src/cli/link.ts
9
9
  function projectLabel(slug, root, url) {
@@ -1,7 +1,7 @@
1
1
  import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-rqDnVsJN.mjs";
2
2
  import { c as getToken } from "./auth-B6iOCjKI.mjs";
3
3
  import { H as outro, L as log } from "./dist-Cor9XGoz.mjs";
4
- import { r as PlatformClient } from "./client-BEkdj1kx.mjs";
4
+ import { r as PlatformClient } from "./client-BEMtySaV.mjs";
5
5
  import { _ as tablePrefix, c as formatRelativeTime, f as import_picocolors, h as sanitizeTerminalText, i as dim, o as formatCount } from "./output-BpgYODYx.mjs";
6
6
  import { a as resolveProjectBySlug } from "./resolve-project-Xoi6eTWY.mjs";
7
7
  //#region src/cli/list.ts
@@ -42,7 +42,7 @@ async function runListCommand(root, slug) {
42
42
  }
43
43
  async function showCloudflareDeployments(root, slug) {
44
44
  if (slug) throw new Error("project: A project name selects a Void platform project and is not used for direct Cloudflare apps.");
45
- const { readCloudflareWorkerStatus, resolveCloudflareOperationContext } = await import("./cloudflare-operations-DsSaw2BT.mjs");
45
+ const { readCloudflareWorkerStatus, resolveCloudflareOperationContext } = await import("./cloudflare-operations-PCM4wucv.mjs");
46
46
  const status = await readCloudflareWorkerStatus(resolveCloudflareOperationContext(root));
47
47
  if (status.versions.length === 0) {
48
48
  outro(`No deployments for ${status.workerName}.`);
@@ -1,5 +1,5 @@
1
1
  import { r as AuthUser } from "./auth-DkcFflXV.mjs";
2
- import { a as CloudEnv, r as CloudContext } from "./handler-BbkSPzGF.mjs";
2
+ import { a as CloudEnv, r as CloudContext } from "./handler-CQv5YDS0.mjs";
3
3
  //#region src/runtime/live.d.ts
4
4
  type MaybePromise<T> = T | Promise<T>;
5
5
  type LiveControlRequest = {
@@ -1,5 +1,5 @@
1
1
  import { a as join, c as resolve, i as isAbsolute } from "./dist-ipQi0Q8y.mjs";
2
- import { b as readRootWranglerConfig } from "./wrangler-F96NnLyb.mjs";
2
+ import { b as readRootWranglerConfig } from "./wrangler-CDiEBCdS.mjs";
3
3
  import { r as getMiniflareDatabasePath } from "./runner-3uGC-oLF.mjs";
4
4
  import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { createHash } from "node:crypto";
@@ -1,6 +1,6 @@
1
1
  import { a as getApiUrl, c as getToken, f as removeToken, l as getTokenSource, m as savePlatformToken, p as runPlatformLogin } from "./auth-B6iOCjKI.mjs";
2
2
  import { H as outro, K as select, L as log, O as cancel, tt as isCancel } from "./dist-Cor9XGoz.mjs";
3
- import { a as isExpiredTokenError, r as PlatformClient } from "./client-BEkdj1kx.mjs";
3
+ import { a as isExpiredTokenError, r as PlatformClient } from "./client-BEMtySaV.mjs";
4
4
  import { f as import_picocolors, l as formatUrl, m as printSuccess, r as createSpinner } from "./output-BpgYODYx.mjs";
5
5
  //#region src/cli/login.ts
6
6
  async function selectPlatformLoginMethod(platform, requestedId) {
@@ -30,7 +30,7 @@ async function selectPlatformLoginMethod(platform, requestedId) {
30
30
  }
31
31
  async function promptForLoginToken(root = process.cwd(), platform) {
32
32
  const apiUrl = platform?.apiUrl ?? getApiUrl(root);
33
- const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await (await import("./platform-cmd-PiNRkopU.mjs")).discoverPlatform(apiUrl));
33
+ const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await (await import("./platform-cmd-BYKLMPCn.mjs")).discoverPlatform(apiUrl));
34
34
  const s = createSpinner();
35
35
  s.start(`Opening browser for ${providerName} login...`);
36
36
  try {
@@ -0,0 +1 @@
1
+ export { r as selectPlatformLoginMethod } from "./login-BjSyhXlT.mjs";
@@ -1,7 +1,7 @@
1
1
  import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-rqDnVsJN.mjs";
2
2
  import { c as getToken } from "./auth-B6iOCjKI.mjs";
3
3
  import { $ as wrapTextWithPrefix, H as outro, L as log } from "./dist-Cor9XGoz.mjs";
4
- import { r as PlatformClient } from "./client-BEkdj1kx.mjs";
4
+ import { r as PlatformClient } from "./client-BEMtySaV.mjs";
5
5
  import { a as errorStackFrames, f as import_picocolors, i as dim, o as formatCount } from "./output-BpgYODYx.mjs";
6
6
  import { t as sanitizeTerminalLogText } from "./terminal-log-text-D9ACPOuG.mjs";
7
7
  //#region src/cli/logs.ts
@@ -9,7 +9,7 @@ async function runLogsCommand(root, filter, range, deployment, level) {
9
9
  console.log();
10
10
  const platform = readDeploymentPlatform(root);
11
11
  if (platform === "cloudflare") {
12
- const { resolveCloudflareOperationContext, tailCloudflareWorker } = await import("./cloudflare-operations-DsSaw2BT.mjs");
12
+ const { resolveCloudflareOperationContext, tailCloudflareWorker } = await import("./cloudflare-operations-PCM4wucv.mjs");
13
13
  if (range !== "1h") log.warn("Cloudflare tail streams live logs; --range does not select historical entries.");
14
14
  if (level && level !== "all" && level !== "error") log.warn("Cloudflare tail cannot filter individual console levels; showing all invocation logs.");
15
15
  await tailCloudflareWorker(resolveCloudflareOperationContext(root), {
@@ -3,7 +3,7 @@ import { o as TYPED_CONFIG_FILE, s as loadTypedVoidConfigFile } from "./project-
3
3
  import { h as validateConfig } from "./config-DHgSEWT7.mjs";
4
4
  import { t as parseJsoncObject } from "./generated-wrangler-config-DeWj5F9Y.mjs";
5
5
  import { n as VOID_LOCK_FILE, o as seedCloudflareConfig, s as stashCloudflareDeployPointer } from "./cloudflare-config-DchHxPTo.mjs";
6
- import "./wrangler-F96NnLyb.mjs";
6
+ import "./wrangler-CDiEBCdS.mjs";
7
7
  import { L as log } from "./dist-Cor9XGoz.mjs";
8
8
  import { m as printSuccess } from "./output-BpgYODYx.mjs";
9
9
  import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
@@ -0,0 +1 @@
1
+ export { n as runMigrateCommand } from "./migrate-BXRHpYwR.mjs";
package/dist/nitro.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as join, n as dirname } from "./dist-ipQi0Q8y.mjs";
2
2
  import { l as getDatabaseDialect, p as readConfig } from "./config-DHgSEWT7.mjs";
3
- import { r as voidDbBundlerPlugin } from "./dispatch-DoUnxTNo.mjs";
4
- import { n as bundleWorkerSqlDriver } from "./wrapper-D3sZyh2C.mjs";
3
+ import { c as voidDbBundlerPlugin } from "./dispatch-OVLeWW8K.mjs";
4
+ import { n as bundleWorkerSqlDriver } from "./wrapper-CEiDeCqD.mjs";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { normalizePath } from "vite";
7
7
  import { resolve } from "node:path/win32";