void 1.2.1 → 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.
- package/dist/{account-cmd-CdUll_35.mjs → account-cmd-B4i71m7k.mjs} +3 -3
- package/dist/{application-analysis-fEqoSeMp.mjs → application-analysis-DYdVoMAY.mjs} +8 -6
- package/dist/{application-routing-DAhNP4u3.mjs → application-routing-C8EqRDfv.mjs} +3 -1
- package/dist/{auth-link-C87vGXM-.mjs → auth-link-BKwHPbdv.mjs} +3 -3
- package/dist/{auth-router-6I81r-ix.mjs → auth-router-DqLx8E0F.mjs} +2 -2
- package/dist/{better-auth-shared-D-6z0q0f.mjs → better-auth-shared-7FM3Uk2N.mjs} +48 -2
- package/dist/{build-cmd-ex1g-j_e.mjs → build-cmd-Dy4psnt1.mjs} +1 -1
- package/dist/{cache-oHzrnY3z.mjs → cache-DV37S6dl.mjs} +1 -1
- package/dist/{cancel-deploy-viAMD0Q_.mjs → cancel-deploy-DMPyu1Vt.mjs} +1 -1
- package/dist/{cf-build-output-BhVxldCw.mjs → cf-build-output-Bapzc_8Z.mjs} +102 -1
- package/dist/cf-build-output-DlBkWdNU.mjs +1 -0
- package/dist/cli/cli.mjs +41 -32
- package/dist/cli/cloudflare-operation-process.mjs +27 -6
- package/dist/cli/env-schema-probe.mjs +2 -2
- package/dist/{client-BEkdj1kx.mjs → client-BEMtySaV.mjs} +8 -1
- package/dist/client-DyxPQnF_.mjs +1 -0
- package/dist/{cloudflare-cmd-DMzCv12s.mjs → cloudflare-cmd-BaqIigwI.mjs} +1 -1
- package/dist/{cloudflare-connect-CCRTVg-I.mjs → cloudflare-connect-pNLQmr_e.mjs} +1 -1
- package/dist/{cloudflare-operations-DsSaw2BT.mjs → cloudflare-operations-PCM4wucv.mjs} +1 -1
- package/dist/{cloudflare-operations-Dh9dEHJj.mjs → cloudflare-operations-vP3b5CQf.mjs} +3 -3
- package/dist/config-BTu1o3Dc.mjs +49 -0
- package/dist/{config-DQfHOKh9.d.mts → config-Du88-7Y8.d.mts} +2 -1
- package/dist/config-entry.d.mts +1 -1
- package/dist/{connect-k7R2rPVA.mjs → connect-DwVsBvVh.mjs} +4 -4
- package/dist/{create-project-DTuy-l0z.mjs → create-project-CgrnvzyA.mjs} +1 -1
- package/dist/{create-project-DV71ol5d.mjs → create-project-CjzbBlTv.mjs} +1 -1
- package/dist/{db-DVOkLH5X.mjs → db-rvo64snS.mjs} +13 -13
- package/dist/{delete-BbP5eopu.mjs → delete-DWX6dP4M.mjs} +1 -1
- package/dist/deploy-CtHE2A3R.mjs +2 -0
- package/dist/{deploy-7H32EnUs.mjs → deploy-hRPvw8ci.mjs} +229 -69
- package/dist/{deploy-managed-static-DlvcvnQT.mjs → deploy-managed-static-CDYA2p3L.mjs} +30 -14
- package/dist/{deploy-transport-BzGEj0Ge.mjs → deploy-transport-JCxw7QDi.mjs} +3 -3
- package/dist/deploy.mjs +4 -3
- package/dist/{dispatch-DoUnxTNo.mjs → dispatch-OVLeWW8K.mjs} +71 -2
- package/dist/{domain-CA2wBgra.mjs → domain-CH5iBD9Y.mjs} +2 -2
- package/dist/{email-DXpCc77w.mjs → email-CbTO1l78.mjs} +58 -9
- package/dist/{email-cloudflare-D03g2TkS.mjs → email-cloudflare-B8-pq_-W.mjs} +106 -5
- package/dist/{env-DgOQ9_8S.mjs → env-BBdw236G.mjs} +3 -3
- package/dist/{env-BJjULvL0.mjs → env-BaMz0j7H.mjs} +6 -1
- package/dist/{env-validation-BmsdCZEk.mjs → env-validation-BfBVvBNe.mjs} +1 -1
- package/dist/{env-validation-Dwq3PJzK.mjs → env-validation-XcukUlFM.mjs} +1 -1
- package/dist/{gen-BfmcIi2g.mjs → gen-CCx3t2Ju.mjs} +1 -1
- package/dist/gen-TgXy93Rr.mjs +1 -0
- package/dist/{github-cmd-CY9LUqLh.mjs → github-cmd-BzkRLkbg.mjs} +1 -1
- package/dist/{handler-BbkSPzGF.d.mts → handler-CQv5YDS0.d.mts} +1 -1
- package/dist/{help-CxSlPpzJ.mjs → help-CKbrhZha.mjs} +16 -1
- package/dist/help-qOZr3wng.mjs +1 -0
- package/dist/index.d.mts +2 -4
- package/dist/index.mjs +317 -122
- package/dist/{info-7VDlhtyy.mjs → info-oBm8yK8J.mjs} +2 -2
- package/dist/{init-DxYyOs4-.mjs → init-CBp_uMve.mjs} +217 -197
- package/dist/{link-Ddmod1dZ.mjs → link-Dt_QXmM4.mjs} +2 -2
- package/dist/{list-MogaugiO.mjs → list-DF6asTdt.mjs} +2 -2
- package/dist/{live-Bt8Y_0bg.d.mts → live-CXJ9yC98.d.mts} +1 -1
- package/dist/{local-d1-BHBnKWRb.mjs → local-d1-CUhH3qtj.mjs} +1 -1
- package/dist/{login-Cttnagmm.mjs → login-BjSyhXlT.mjs} +2 -2
- package/dist/login-Cdo8Aco1.mjs +1 -0
- package/dist/{logs-CAszUWZI.mjs → logs-DmvBl6xA.mjs} +2 -2
- package/dist/{migrate-DyT2jJ8y.mjs → migrate-BXRHpYwR.mjs} +1 -1
- package/dist/migrate-COPncCGx.mjs +1 -0
- package/dist/nitro.mjs +2 -2
- package/dist/{node-WB7c2N4L.mjs → node-DtD7ZiPf.mjs} +4 -4
- package/dist/{operator-args-UnE8Y2eK.mjs → operator-args-BsJIYXaT.mjs} +8 -1
- package/dist/operator-cmd-DDiX7Y3f.mjs +1 -0
- package/dist/{operator-cmd-skshjMGl.mjs → operator-cmd-DjZKGGgN.mjs} +4 -3
- package/dist/pages/client.d.mts +17 -4
- package/dist/pages/client.mjs +161 -29
- package/dist/pages/index.d.mts +18 -2
- package/dist/pages/index.mjs +2 -52
- package/dist/pages/islands-plugin.d.mts +1 -1
- package/dist/pages/islands-plugin.mjs +9 -3
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/platform-args-BC8_hsDj.mjs +1 -0
- package/dist/{platform-args-DVbVClZl.mjs → platform-args-BMD2gjc_.mjs} +1 -1
- package/dist/{platform-auth-config-C-pm5Qzx.mjs → platform-auth-config-BgnuMbml.mjs} +3 -3
- package/dist/{platform-auth-protection-SHhvim1L.mjs → platform-auth-protection-NjRejttU.mjs} +2 -2
- package/dist/{platform-auth-recovery-DXVWs-wA.mjs → platform-auth-recovery-Ug12d9W5.mjs} +2 -2
- package/dist/{platform-cmd-PiNRkopU.mjs → platform-cmd-BYKLMPCn.mjs} +1 -1
- package/dist/{platform-cmd-D5I1beUX.mjs → platform-cmd-HByuZAO7.mjs} +4 -4
- package/dist/{platform-domain-jpmBfZeb.mjs → platform-domain-DLSQ8GF8.mjs} +2 -2
- package/dist/{platform-lifecycle-DyKmuNY6.mjs → platform-lifecycle-3dwFJmnq.mjs} +102 -40
- package/dist/{platform-lifecycle-DH3Yr1qQ.mjs → platform-lifecycle-BRqcxerG.mjs} +1 -1
- package/dist/{platform-management-7m-PLaPJ.mjs → platform-management-ZK6XcbCo.mjs} +1 -1
- package/dist/{platform-management--vDwSn35.mjs → platform-management-ZZ6bQM5j.mjs} +1 -1
- package/dist/{platform-recovery-BiNpZZab.mjs → platform-recovery-8vNE5dNN.mjs} +2 -2
- package/dist/{plugin-inference-DUjCd55H.mjs → plugin-inference-CeiB6BG5.mjs} +53 -18
- package/dist/{prepare-BcAE5Sdj.mjs → prepare-5BR7Splm.mjs} +1 -1
- package/dist/prepare-B3VrSF1Z.mjs +1 -0
- package/dist/{prepare-DA-17DhO.mjs → prepare-Dseww74N.mjs} +4 -4
- package/dist/{prerender-render-Cijv7UFo.mjs → prerender-render-CaShbHJ3.mjs} +13 -1
- package/dist/prerender-render.d.mts +1 -0
- package/dist/prerender-render.mjs +1 -1
- package/dist/{project-cmd-DA4K5faU.mjs → project-cmd-CjLNNxwe.mjs} +15 -15
- package/dist/{project-team-CQBNveX3.mjs → project-team-DE5drjcl.mjs} +1 -1
- package/dist/{project-token-CCalFyQf.mjs → project-token-XEYEXfiJ.mjs} +1 -1
- package/dist/{project-zero-trust-DPnkiEuT.mjs → project-zero-trust-6VPU8zmV.mjs} +1 -1
- package/dist/{protocol-BBDpJz3G.d.mts → protocol-BekmFxCI.d.mts} +2 -2
- package/dist/{provision-DtROpNNI.mjs → provision-B7UFrBH7.mjs} +1 -1
- package/dist/{provision-BFLCrnUp.mjs → provision-Chq0NRAV.mjs} +1 -1
- package/dist/{requests-BpH0kImL.mjs → requests-CG-Pj8ze.mjs} +1 -1
- package/dist/{rollback-CXS1tAa-.mjs → rollback-CIrm2txZ.mjs} +2 -2
- package/dist/{route-types-BZi26DVS.mjs → route-types--PAOzHlH.mjs} +49 -28
- package/dist/routes-stub.d.mts +22 -13
- package/dist/runtime/better-auth-mysql.mjs +1 -1
- package/dist/runtime/better-auth-pg.mjs +1 -1
- package/dist/runtime/better-auth.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/log.mjs +19 -1
- package/dist/runtime/routing.d.mts +2 -2
- package/dist/runtime/routing.mjs +4 -3
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +1 -1
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/{scan-8IzYXiU_.mjs → scan-N9WzdcAl.mjs} +302 -23
- package/dist/{secret-BbXHfLAt.mjs → secret-BL6g7mF5.mjs} +3 -3
- package/dist/static-asset-marker-Btf-6oCD.mjs +32 -0
- package/dist/{types-7AIz0OZu.d.mts → types-w72dljaA.d.mts} +6 -1
- package/dist/{version-metadata-tS39iW09.mjs → version-metadata-DmaZNTYW.mjs} +1 -1
- package/dist/worker-conditions-AWFRcFxR.mjs +11 -0
- package/dist/{wrangler-F96NnLyb.mjs → wrangler-CDiEBCdS.mjs} +2 -1
- package/dist/wrangler-DOPr4jyI.mjs +1 -0
- package/dist/{wrapper-D3sZyh2C.mjs → wrapper-CEiDeCqD.mjs} +6 -10
- package/dist/{ws-BH-im_tX.d.mts → ws-D1zWiB_P.d.mts} +1 -1
- package/docs/guide/auth.md +3 -1
- package/docs/guide/edge/static-assets.md +10 -0
- package/docs/guide/email/domains.md +1 -1
- package/docs/guide/email/receiving.md +2 -0
- package/docs/guide/email/sending.md +1 -1
- package/docs/guide/pages-routing/actions-and-forms.md +19 -13
- package/docs/guide/pages-routing/markdown.md +2 -0
- package/docs/guide/pages-routing/overview.md +33 -2
- package/docs/guide/platform/administration/email.md +18 -0
- package/docs/guide/platform/installation/prerequisites.md +9 -4
- package/docs/guide/platform/installation/uninstall.md +2 -0
- package/docs/guide/queues.md +13 -1
- package/docs/guide/server-routing.md +38 -2
- package/docs/guide/type-safety.md +7 -7
- package/docs/guide/websockets.md +4 -2
- package/docs/reference/api/pages.md +4 -4
- package/docs/reference/cli/email.md +13 -0
- package/docs/reference/cli/platform-email.md +2 -2
- package/docs/reference/cli.md +1 -0
- package/docs/reference/structure.md +3 -1
- package/package.json +8 -7
- package/templates/assets/icons.svg +49 -0
- package/templates/assets/react.svg +1 -0
- package/templates/assets/solid.svg +1 -0
- package/templates/assets/stack.svg +35 -0
- package/templates/assets/svelte.svg +1 -0
- package/templates/assets/void.svg +5 -0
- package/templates/assets/vue.svg +1 -0
- package/dist/cf-build-output-BJHuSsVN.mjs +0 -1
- package/dist/client-BiRDZTSd.mjs +0 -1
- package/dist/config-CyUJzi3q.mjs +0 -32
- package/dist/deploy-CE0Ev0Ob.mjs +0 -2
- package/dist/gen-NrOlWZaG.mjs +0 -1
- package/dist/help-BeAFFE5C.mjs +0 -1
- package/dist/login-DgDwlKc_.mjs +0 -1
- package/dist/migrate-n49ZeS1X.mjs +0 -1
- package/dist/operator-cmd-d2MvJOrl.mjs +0 -1
- package/dist/parse-filename-DioPHiR9.mjs +0 -77
- package/dist/platform-args-kQrgxScY.mjs +0 -1
- package/dist/prepare-C4I0f--h.mjs +0 -1
- 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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
22
|
-
import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-
|
|
23
|
-
import { t as connectCloudflare } from "./cloudflare-connect-
|
|
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-
|
|
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
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
<
|
|
461
|
-
<
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
</
|
|
477
|
-
</
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
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":
|
|
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("
|
|
509
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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 {
|
|
4
|
-
import { n as bundleWorkerSqlDriver } from "./wrapper-
|
|
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";
|