void 1.1.0 → 1.1.11
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-BTcUzv9L.mjs → account-cmd-R35a4Oa8.mjs} +3 -3
- package/dist/{application-analysis-AB_YYWgH.mjs → application-analysis-D7nNmNJb.mjs} +6 -6
- package/dist/{application-routing-L7V-TFhZ.mjs → application-routing-CZH66gXn.mjs} +1 -1
- package/dist/{auth-link-DUJuvRx5.mjs → auth-link-VHmiKZmP.mjs} +3 -3
- package/dist/{auth-migrations-Cgs0k6lS.mjs → auth-migrations-BO27GDNr.mjs} +38 -2
- package/dist/{auth-router-CIxiMG7i.mjs → auth-router-O_Wrs5kg.mjs} +5 -4
- package/dist/{better-auth-shared-B74NJIus.d.mts → better-auth-shared-Bv18bB-l.d.mts} +2 -0
- package/dist/{better-auth-shared-CMXlZG7W.mjs → better-auth-shared-D-6z0q0f.mjs} +28 -1
- package/dist/{build-cmd-BkIv25PA.mjs → build-cmd-CMZiMn46.mjs} +1 -1
- package/dist/{cache-Ctzfig-W.mjs → cache-TZ5Ab3d7.mjs} +1 -1
- package/dist/{cancel-deploy-CD9o-SsC.mjs → cancel-deploy-DXoR6oC3.mjs} +1 -1
- package/dist/cli/cli.mjs +69 -50
- package/dist/cli/env-schema-probe.mjs +3 -3
- package/dist/client-DrdeJgHR.mjs +1 -0
- package/dist/{client-DM9Kcf4e.mjs → client-GuSO3v_x.mjs} +1 -1
- package/dist/{cloudflare-auth-CqFBDo52.mjs → cloudflare-auth-DSvBc1Gu.mjs} +1 -1
- package/dist/{cloudflare-cmd-BIAF_BIY.mjs → cloudflare-cmd-ZSErUl6Y.mjs} +3 -3
- package/dist/{cloudflare-config-DV60XFFK.mjs → cloudflare-config-rdFOys4X.mjs} +2 -2
- package/dist/{cloudflare-connect-WjwnVOJA.mjs → cloudflare-connect-BN-k2kD-.mjs} +2 -2
- package/dist/{cloudflare-operations-CrSUFRzJ.mjs → cloudflare-operations-Cm8lVx7W.mjs} +1 -1
- package/dist/{cloudflare-operations-B42EZeJy.mjs → cloudflare-operations-DH3GedbV.mjs} +6 -6
- package/dist/{cloudflare-process-CeDWJRhj.mjs → cloudflare-process-CZJ4viYl.mjs} +2 -2
- package/dist/collect-BWhkgtAn.mjs +1 -0
- package/dist/{collect-xjffdCdk.mjs → collect-Dew86qce.mjs} +4 -3
- package/dist/{config-D0GY5ItR.mjs → config-CyUJzi3q.mjs} +1 -1
- package/dist/{config-Bx_1SpnO.mjs → config-D26zcdKy.mjs} +2 -2
- package/dist/{config-BEm9vRvS.mjs → config-DC5llZaI.mjs} +2 -2
- package/dist/{config-QrJWu0IX.mjs → config-DYJV8aEH.mjs} +1 -1
- package/dist/{connect-CKtk-EZe.mjs → connect-yQuLbuiJ.mjs} +4 -4
- package/dist/{create-project-B-ewF_Af.mjs → create-project-CGOo_OL_.mjs} +1 -1
- package/dist/{create-project-yInGo72M.mjs → create-project-DEEWJX_M.mjs} +1 -1
- package/dist/database-provider.d.mts +6 -0
- package/dist/{db-7I_gfdVq.mjs → db-COI-yTJE.mjs} +255 -110
- package/dist/{db-types-Bb4WBWIs.mjs → db-types-NGxPwnlt.mjs} +1 -1
- package/dist/{delete-Cy-M1u-r.mjs → delete-PgN6L_9N.mjs} +1 -1
- package/dist/deploy-CxNgEYr4.mjs +2 -0
- package/dist/{deploy-BYYlnsiy.mjs → deploy-DsW-PrRQ.mjs} +38 -36
- package/dist/{deploy-managed-static-Ca4TFdmx.mjs → deploy-managed-static-Dqz06S2u.mjs} +20 -20
- package/dist/{deploy-transport-DWlWBe6M.mjs → deploy-transport-nY3vLXPL.mjs} +2 -2
- package/dist/deploy.mjs +5 -5
- package/dist/discover-D4TPKo57.mjs +1 -0
- package/dist/{discover-D2PGT63u.mjs → discover-LaV0tbIu.mjs} +1 -1
- package/dist/{dispatch-DrTTk8Xg.mjs → dispatch-BAbbn3jg.mjs} +6 -6
- package/dist/{domain-CZGxPv9u.mjs → domain-DKlNI0SR.mjs} +2 -2
- package/dist/{drizzle-CF84FOVM.mjs → drizzle-BQfyvQKX.mjs} +13 -2
- package/dist/{email-DzyNVuoU.mjs → email-C0s3OvJk.mjs} +10 -11
- package/dist/{email-cloudflare-DfG6UEMm.mjs → email-cloudflare-etpKiITL.mjs} +7 -10
- package/dist/{entry-ehmBvs5w.mjs → entry-B_0IhV64.mjs} +1 -1
- package/dist/{env-Nx3yf50r.mjs → env-BX2JFsgF.mjs} +4 -4
- package/dist/{env-types-DS2_y4X8.mjs → env-types-GRchm5dw.mjs} +1 -1
- package/dist/{env-validation-BT7z-qpQ.mjs → env-validation-CuGfWRJd.mjs} +1 -1
- package/dist/{env-validation-DYxjz_Wo.mjs → env-validation-D_KyMdab.mjs} +2 -2
- package/dist/{fetch-BPCYVi3H.d.mts → fetch-DHLOuPyk.d.mts} +2 -2
- package/dist/{fetch-stream-obvZ7fvO.d.mts → fetch-stream-CNxOrBdP.d.mts} +1 -1
- package/dist/{gen-CufHEf42.mjs → gen-Bj6ZkOcI.mjs} +25 -19
- package/dist/gen-DsCukhuw.mjs +1 -0
- package/dist/{generate-Dat0UTry.mjs → generate-B1m4Cm4n.mjs} +1 -1
- package/dist/{generate-ClI89brV.mjs → generate-DkEb9rL-.mjs} +1 -1
- package/dist/{github-cmd-FU8EjFyU.mjs → github-cmd-DQDryS-5.mjs} +1 -1
- package/dist/{headers-Di1FsD3e.mjs → headers-Bi4bOAwp.mjs} +1 -1
- package/dist/{help-BT2hovNI.mjs → help-D49SL_lN.mjs} +16 -12
- package/dist/help-DOFygYi4.mjs +1 -0
- package/dist/{inbound-brj2-TM5.d.mts → inbound-Da7XsjH3.d.mts} +6 -12
- package/dist/index.mjs +103 -57
- package/dist/{info-l249eUdH.mjs → info-Bxunp14X.mjs} +4 -4
- package/dist/{init-D0A6M64Q.mjs → init-DyTEY04s.mjs} +50 -27
- package/dist/{link-WMoJFf4i.mjs → link-CgOVn9EC.mjs} +2 -2
- package/dist/{list-CQ2EQEHL.mjs → list-CUfD9RSb.mjs} +2 -2
- package/dist/{local-d1-BxvQYEFi.mjs → local-d1-CpaPbd_L.mjs} +5 -5
- package/dist/{login-C2T1oVG-.mjs → login-BJvGW5Eu.mjs} +2 -2
- package/dist/login-alAlxw4S.mjs +1 -0
- package/dist/{logs-DnC1d7xB.mjs → logs-DeizBI4j.mjs} +2 -2
- package/dist/{migrate-BDIprOYd.mjs → migrate-8rk56vV8.mjs} +4 -4
- package/dist/migrate-D2odrAmh.mjs +1 -0
- package/dist/{neon-n74ta1Pr.mjs → neon-DTZr7Bu7.mjs} +0 -1
- package/dist/nitro.mjs +3 -3
- package/dist/{node-cPadMgUO.mjs → node-uN8_zxJr.mjs} +15 -9
- package/dist/{operator-cmd-DHieWtFp.mjs → operator-cmd-CA5QQyvE.mjs} +3 -3
- package/dist/operator-cmd-D7toMPJ9.mjs +1 -0
- package/dist/pages/client.d.mts +1 -1
- package/dist/pages/index.d.mts +1 -1
- package/dist/pages/index.mjs +4 -4
- package/dist/pages/islands-plugin.d.mts +1 -1
- package/dist/pages/islands-plugin.mjs +1 -1
- package/dist/pages/protocol.d.mts +1 -1
- package/dist/{platform-args-CaCL_1Ch.mjs → platform-args-B7ke06up.mjs} +1 -4
- package/dist/platform-args-B_LrqEZB.mjs +1 -0
- package/dist/{platform-auth-config-Z16-I8nT.mjs → platform-auth-config-CZaY812e.mjs} +3 -3
- package/dist/{platform-auth-protection-BXwZiJSF.mjs → platform-auth-protection-U9HCqoXv.mjs} +2 -2
- package/dist/{platform-auth-recovery-CXjfqyOv.mjs → platform-auth-recovery-B0BV2hfV.mjs} +2 -2
- package/dist/{platform-cmd-DaAOiWTl.mjs → platform-cmd-CXrjk4fb.mjs} +4 -4
- package/dist/{platform-cmd-PT4YwMLM.mjs → platform-cmd-D9lwFpcl.mjs} +1 -1
- package/dist/{platform-domain-CxpvUeo0.mjs → platform-domain-CXyq-68_.mjs} +2 -2
- package/dist/{platform-lifecycle-DBiS0cJd.mjs → platform-lifecycle-D0TdyXbN.mjs} +20 -11
- package/dist/{platform-lifecycle-u9pMOvxC.mjs → platform-lifecycle-Dz2cJsLX.mjs} +1 -1
- package/dist/{platform-management-DvBS83rC.mjs → platform-management-BvgbusqL.mjs} +1 -1
- package/dist/{platform-management-DhEFdQAf.mjs → platform-management-CnXhgxTM.mjs} +1 -3
- package/dist/{platform-recovery-BUGOB4RC.mjs → platform-recovery-CH_fThW6.mjs} +2 -2
- package/dist/{plugin-inference-DsARdQKE.mjs → plugin-inference-Bekzjuqw.mjs} +2 -2
- package/dist/{prepare-PQCgsny0.mjs → prepare-2XD6kh77.mjs} +1 -1
- package/dist/{prepare-DEB5SeVJ.mjs → prepare-DepAGBcV.mjs} +9 -9
- package/dist/prepare-EVEbQ9n2.mjs +1 -0
- package/dist/{project-cmd-DVatD8Ev.mjs → project-cmd-CpLYflCH.mjs} +16 -16
- package/dist/{project-paths-DMvEeSau.mjs → project-paths-DGu_QZ_Q.mjs} +1 -1
- package/dist/{project-team-DJrWEAG1.mjs → project-team-CTSY7W7Q.mjs} +1 -1
- package/dist/{project-token-CBgLBuL6.mjs → project-token-Cybtlfbl.mjs} +1 -1
- package/dist/{project-tsconfig-bveqhlYA.mjs → project-tsconfig-Itv1f4WC.mjs} +1 -1
- package/dist/{project-zero-trust-92gLtZ25.mjs → project-zero-trust-DKOtqyvu.mjs} +1 -1
- package/dist/{protocol-4H7V_3Os.d.mts → protocol-B8sI8dRD.d.mts} +1 -1
- package/dist/{providers-BXuhmuub.mjs → providers-BUHwJlmM.mjs} +10 -1
- package/dist/{provision-BnSSkiED.mjs → provision-BuifYvLc.mjs} +63 -64
- package/dist/provision-UcYjpTRh.mjs +1 -0
- package/dist/r2-conditions-B8xUgJRc.mjs +61 -0
- package/dist/{requests-7W1Pygt2.mjs → requests-Ryiazz9i.mjs} +1 -1
- package/dist/{rollback-BcASVnwP.mjs → rollback-Or0EV3rP.mjs} +2 -2
- package/dist/{runner-CabsQ-iM.mjs → runner-3uGC-oLF.mjs} +9 -7
- package/dist/{runner-So9mYfcm.mjs → runner-WCdfeI0q.mjs} +1 -1
- package/dist/{runner-mysql-BhRaONkO.mjs → runner-mysql-BWmbk5IE.mjs} +1 -1
- package/dist/{runner-mysql-DWwE8jKi.mjs → runner-mysql-BcHnLUuM.mjs} +1 -1
- package/dist/{runner-pg-_Xncr3H5.mjs → runner-pg-Cgp-cr_p.mjs} +1 -1
- package/dist/{runner-pg-BRemq_GX.mjs → runner-pg-Cr3qrqi4.mjs} +1 -1
- package/dist/runtime/ai.d.mts +4 -0
- package/dist/runtime/ai.mjs +2 -37
- package/dist/runtime/better-auth-mysql.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.mjs +2 -2
- package/dist/runtime/better-auth-pg.d.mts +1 -1
- package/dist/runtime/better-auth-pg.mjs +2 -2
- package/dist/runtime/better-auth.d.mts +1 -1
- package/dist/runtime/better-auth.mjs +2 -2
- package/dist/runtime/client-react.d.mts +2 -2
- package/dist/runtime/client-solid.d.mts +2 -2
- package/dist/runtime/client-svelte.d.mts +2 -2
- package/dist/runtime/client-vue.d.mts +2 -2
- package/dist/runtime/client.d.mts +2 -2
- package/dist/runtime/email/testing.d.mts +1 -1
- package/dist/runtime/email.d.mts +2 -3
- package/dist/runtime/email.mjs +2 -3
- package/dist/runtime/fetch-stream.d.mts +2 -2
- package/dist/runtime/fetch.d.mts +1 -1
- package/dist/runtime/migration-handler-mysql.mjs +4 -4
- package/dist/runtime/migration-handler-pg.mjs +9 -1
- package/dist/runtime/remote/binding-handler.mjs +25 -25
- package/dist/runtime/remote/index.d.mts +3 -0
- package/dist/runtime/remote/index.mjs +86 -23
- package/dist/runtime/routing.d.mts +2 -2
- package/dist/runtime/sse-client.d.mts +4 -0
- package/dist/runtime/ws-server.d.mts +2 -2
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/{scan-C0BMdmEd.mjs → scan-D2-FcLHs.mjs} +13 -5
- package/dist/{secret-bg73f1Ge.mjs → secret-CClHaFxm.mjs} +3 -3
- package/dist/{types-BAp5AEBU.d.mts → types-7AIz0OZu.d.mts} +1 -1
- package/dist/{validate-CheZGRE7.mjs → validate-CnZPMq4q.mjs} +22 -17
- package/dist/validate-D7Wn8PUX.mjs +1 -0
- package/dist/{version-metadata-DIrqEHQo.mjs → version-metadata-B1Bm2wSq.mjs} +1 -1
- package/dist/{wrangler-BYs07Rxy.mjs → wrangler-C9XSzrju.mjs} +3 -3
- package/dist/wrangler-DAdxHEzh.mjs +1 -0
- package/dist/{wrapper-CwhpNWtH.mjs → wrapper-BOigE1xJ.mjs} +4 -4
- package/dist/{ws-aKVYB-fA.d.mts → ws-CsBNxv86.d.mts} +5 -0
- package/docs/guide/auth.md +1 -1
- package/docs/guide/database/d1.md +2 -2
- package/docs/guide/database/mysql.md +1 -1
- package/docs/guide/edge/headers.md +10 -2
- package/docs/guide/edge/revalidation.md +2 -0
- package/docs/guide/email/receiving.md +1 -1
- package/docs/guide/email/sending.md +1 -1
- package/docs/guide/pages-routing/islands.md +2 -2
- package/docs/guide/platform/administration/connected-apps.md +18 -2
- package/docs/guide/remote-dev.md +2 -0
- package/docs/guide/websockets.md +2 -2
- package/docs/index.md +78 -22
- package/docs/reference/api/pages.md +7 -5
- package/docs/reference/api.md +2 -0
- package/docs/reference/cli/database.md +7 -5
- package/docs/reference/cli/deploy.md +12 -10
- package/docs/reference/cli/email.md +1 -1
- package/docs/reference/cli/generate.md +1 -1
- package/docs/reference/cli/platform-installation.md +2 -2
- package/docs/reference/cli/project.md +4 -2
- package/docs/reference/cli.md +1 -1
- package/docs/reference/config.md +11 -1
- package/package.json +7 -7
- package/dist/client-B60PwCC4.mjs +0 -1
- package/dist/collect-Cae8A7Zr.mjs +0 -1
- package/dist/deploy-9lgfhrXS.mjs +0 -2
- package/dist/discover-ClzFSwns.mjs +0 -1
- package/dist/gen-sXyp5DFO.mjs +0 -1
- package/dist/help-i2YGGnTH.mjs +0 -1
- package/dist/login-XD844Xs-.mjs +0 -1
- package/dist/migrate-BRwU-blY.mjs +0 -1
- package/dist/operator-cmd-D6gnZsnK.mjs +0 -1
- package/dist/platform-args-B0HeTh0C.mjs +0 -1
- package/dist/prepare-CYT6tAzD.mjs +0 -1
- package/dist/r2-conditions-D1Wk8i7b.mjs +0 -30
- package/dist/validate-BQFdf0Pi.mjs +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { c as getToken, f as removeToken } from "./auth-B6iOCjKI.mjs";
|
|
2
2
|
import { L as log } from "./dist-BVdsO7Py.mjs";
|
|
3
3
|
import { m as printSuccess } from "./output-Ba6ZbrzY.mjs";
|
|
4
|
-
import { r as PlatformClient } from "./client-
|
|
5
|
-
import { n as runLoginCommand } from "./login-
|
|
4
|
+
import { r as PlatformClient } from "./client-GuSO3v_x.mjs";
|
|
5
|
+
import { n as runLoginCommand } from "./login-BJvGW5Eu.mjs";
|
|
6
6
|
import { execSync } from "node:child_process";
|
|
7
7
|
//#region src/cli/account-cmd.ts
|
|
8
8
|
async function runAccountCommand(root, args) {
|
|
9
9
|
switch (args.subcommand) {
|
|
10
10
|
case "login": return runLoginCommand(root);
|
|
11
|
-
case "link": return import("./auth-link-
|
|
11
|
+
case "link": return import("./auth-link-VHmiKZmP.mjs").then(({ runAuthLink }) => runAuthLink(root, args.connectionId));
|
|
12
12
|
case "logout":
|
|
13
13
|
if (removeToken(root)) printSuccess("Logged out.");
|
|
14
14
|
else log.info("Not logged in.");
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { a as join, i as isAbsolute, t as basename } from "./dist-ipQi0Q8y.mjs";
|
|
2
|
-
import { c as scanWebSocketRoutesSync, f as readResourceDefinition, h as needsApplicationDatabase, i as inferProjectBindings, n as FRAMEWORK_SCAN_DIRS, p as listConventionFiles, r as detectFramework, s as isWebSocketPatternFile } from "./plugin-inference-
|
|
3
|
-
import { i as resolveProjectPaths, n as readProjectPaths } from "./project-paths-
|
|
4
|
-
import { t as findVoidAuthConfig } from "./config-
|
|
5
|
-
import { f as resolveBindingNames, s as getDatabaseDialect } from "./config-
|
|
2
|
+
import { c as scanWebSocketRoutesSync, f as readResourceDefinition, h as needsApplicationDatabase, i as inferProjectBindings, n as FRAMEWORK_SCAN_DIRS, p as listConventionFiles, r as detectFramework, s as isWebSocketPatternFile } from "./plugin-inference-Bekzjuqw.mjs";
|
|
3
|
+
import { i as resolveProjectPaths, n as readProjectPaths } from "./project-paths-DGu_QZ_Q.mjs";
|
|
4
|
+
import { t as findVoidAuthConfig } from "./config-CyUJzi3q.mjs";
|
|
5
|
+
import { f as resolveBindingNames, s as getDatabaseDialect } from "./config-D26zcdKy.mjs";
|
|
6
6
|
import { n as globSync } from "./dist-Bn8Kodjp.mjs";
|
|
7
7
|
import { n as isIdentifier } from "./ast-CPGPjb0V.mjs";
|
|
8
8
|
import { a as staticLiteral, i as staticExportInitializers, n as parseRouteFilename, o as unwrapStaticExpression, t as isRouteEnabledForEnvironment } from "./parse-filename-CUbj-1MP.mjs";
|
|
9
9
|
import { n as resourceNameWords } from "./resource-name-C7LVpcRm.mjs";
|
|
10
|
-
import { t as collectMigrations } from "./collect-
|
|
10
|
+
import { t as collectMigrations } from "./collect-Dew86qce.mjs";
|
|
11
11
|
import { i as scanEmailHandlersSync } from "./email-BcjSyAL0.mjs";
|
|
12
|
-
import { t as scanPages } from "./scan-
|
|
12
|
+
import { t as scanPages } from "./scan-D2-FcLHs.mjs";
|
|
13
13
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
14
14
|
import { fileURLToPath } from "node:url";
|
|
15
15
|
import { parseSync } from "vite";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as scanRoutes, t as analyzeApplicationSync } from "./application-analysis-
|
|
1
|
+
import { l as scanRoutes, t as analyzeApplicationSync } from "./application-analysis-D7nNmNJb.mjs";
|
|
2
2
|
//#region src/application-routing.ts
|
|
3
3
|
/** Complete route/page analysis using the same resource and handler inventories. */
|
|
4
4
|
async function completeApplicationAnalysis(analysis) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { a as getApiUrl, c as getToken, m as savePlatformToken, p as runPlatformLogin, u as openBrowser } from "./auth-B6iOCjKI.mjs";
|
|
2
2
|
import { L as log } from "./dist-BVdsO7Py.mjs";
|
|
3
3
|
import { l as formatUrl } from "./output-Ba6ZbrzY.mjs";
|
|
4
|
-
import { r as PlatformClient } from "./client-
|
|
5
|
-
import { r as selectPlatformLoginMethod } from "./login-
|
|
6
|
-
import { t as discoverPlatform } from "./platform-cmd-
|
|
4
|
+
import { r as PlatformClient } from "./client-GuSO3v_x.mjs";
|
|
5
|
+
import { r as selectPlatformLoginMethod } from "./login-BJvGW5Eu.mjs";
|
|
6
|
+
import { t as discoverPlatform } from "./platform-cmd-CXrjk4fb.mjs";
|
|
7
7
|
//#region src/cli/auth-link.ts
|
|
8
8
|
async function runAuthLink(root, connectionId) {
|
|
9
9
|
const token = getToken(root);
|
|
@@ -48,7 +48,7 @@ function resolveColumnType(dialect, idStrategy, fieldName, field) {
|
|
|
48
48
|
if (useIdType) {
|
|
49
49
|
if (fieldName === "id" && idStrategy === "serial") return "integer GENERATED BY DEFAULT AS IDENTITY";
|
|
50
50
|
if (idStrategy === "serial") return "integer";
|
|
51
|
-
if (idStrategy === "uuid") return "uuid";
|
|
51
|
+
if (idStrategy === "uuid") return fieldName === "id" ? "uuid DEFAULT gen_random_uuid()" : "uuid";
|
|
52
52
|
return "text";
|
|
53
53
|
}
|
|
54
54
|
if (field.type === "boolean") return "boolean";
|
|
@@ -61,10 +61,18 @@ function resolveColumnType(dialect, idStrategy, fieldName, field) {
|
|
|
61
61
|
if (field.type === "boolean" || field.type === "date" || field.type === "number") return "INTEGER";
|
|
62
62
|
return "TEXT";
|
|
63
63
|
}
|
|
64
|
+
function renderDefaultLiteral(dialect, value) {
|
|
65
|
+
if (typeof value === "boolean") return dialect === "sqlite" ? value ? "1" : "0" : value ? "TRUE" : "FALSE";
|
|
66
|
+
if (typeof value === "number") return String(value);
|
|
67
|
+
if (dialect === "mysql" && value.includes("\\")) return `_utf8mb4 X'${Array.from(new TextEncoder().encode(value), (byte) => byte.toString(16).padStart(2, "0")).join("")}'`;
|
|
68
|
+
if (dialect === "postgresql" && value.includes("\\")) return `E'${value.replaceAll("\\", "\\\\").replaceAll("'", "''")}'`;
|
|
69
|
+
return `'${value.replaceAll("'", "''")}'`;
|
|
70
|
+
}
|
|
64
71
|
function buildColumnDefinition(dialect, schema, fieldName, field, options = {}) {
|
|
65
72
|
const parts = [`${quoteIdentifier(fieldName, dialect)} ${resolveColumnType(dialect, schema.idStrategy, fieldName, field)}`];
|
|
66
73
|
if (options.primaryKey) parts.push("PRIMARY KEY");
|
|
67
74
|
if (field.required || options.primaryKey) parts.push("NOT NULL");
|
|
75
|
+
if (options.withDefault && field.defaultValue !== void 0) parts.push(`DEFAULT ${renderDefaultLiteral(dialect, field.defaultValue)}`);
|
|
68
76
|
if (field.references) parts.push(`REFERENCES ${quoteIdentifier(field.references.table, dialect)}(${quoteIdentifier(field.references.field, dialect)}) ON DELETE ${String(field.references.onDelete ?? "cascade").toUpperCase()}`);
|
|
69
77
|
return parts.join(" ");
|
|
70
78
|
}
|
|
@@ -81,7 +89,7 @@ function buildCreateTableSql(schema, table) {
|
|
|
81
89
|
}
|
|
82
90
|
function buildAddColumnSql(schema, tableName, fieldName, field) {
|
|
83
91
|
const ifNotExists = schema.dialect === "postgresql" ? " IF NOT EXISTS" : "";
|
|
84
|
-
return `ALTER TABLE ${quoteIdentifier(tableName, schema.dialect)} ADD COLUMN${ifNotExists} ${buildColumnDefinition(schema.dialect, schema, fieldName, field)}`;
|
|
92
|
+
return `ALTER TABLE ${quoteIdentifier(tableName, schema.dialect)} ADD COLUMN${ifNotExists} ${buildColumnDefinition(schema.dialect, schema, fieldName, field, { withDefault: true })}`;
|
|
85
93
|
}
|
|
86
94
|
function buildModifyMySqlColumnSql(schema, tableName, fieldName, field) {
|
|
87
95
|
return `ALTER TABLE ${quoteIdentifier(tableName, "mysql")} MODIFY COLUMN ${buildColumnDefinition("mysql", schema, fieldName, field)}`;
|
|
@@ -105,6 +113,31 @@ async function ensurePgIndexes(runner, schemaName, table) {
|
|
|
105
113
|
const indexRows = await runner.all("SELECT indexname FROM pg_indexes WHERE schemaname = $1 AND tablename = $2", [schemaName, table.name]);
|
|
106
114
|
await createMissingIndexes(runner, "postgresql", table, new Set(indexRows.map((row) => String(row.indexname))));
|
|
107
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Name the fields that a table with rows cannot take, and the fix, before the table changes.
|
|
118
|
+
* SQLite and PostgreSQL cannot add a NOT NULL column with no default to a table that has rows;
|
|
119
|
+
* MySQL fills those rows itself. On each dialect, a new required column gives every row the same
|
|
120
|
+
* value, so its unique index fails when the table has two or more rows.
|
|
121
|
+
*/
|
|
122
|
+
async function assertRequiredColumnsCanBeAdded(runner, dialect, table, missing) {
|
|
123
|
+
const required = missing.filter((fieldName) => table.fields[fieldName].required);
|
|
124
|
+
const unique = required.filter((fieldName) => table.fields[fieldName].unique);
|
|
125
|
+
const noDefault = dialect === "mysql" ? [] : required.filter((fieldName) => table.fields[fieldName].defaultValue === void 0);
|
|
126
|
+
if (unique.length === 0 && noDefault.length === 0) return;
|
|
127
|
+
const rows = await runner.all(`SELECT 1 AS present FROM ${quoteIdentifier(table.name, dialect)} LIMIT 2`);
|
|
128
|
+
const describe = (fieldNames) => ({
|
|
129
|
+
names: fieldNames.map((fieldName) => JSON.stringify(fieldName)).join(", "),
|
|
130
|
+
noun: fieldNames.length === 1 ? "field" : "fields"
|
|
131
|
+
});
|
|
132
|
+
if (rows.length >= 2 && unique.length > 0) {
|
|
133
|
+
const { names, noun } = describe(unique);
|
|
134
|
+
throw new Error(`Cannot add required unique auth ${noun} ${names} to table ${JSON.stringify(table.name)}: the table has more than one row, and a new column gives every row the same value. Set \`required: false\` on the ${noun}, or add the ${unique.length === 1 ? "column" : "columns"} in a migration that gives each row its own value.`);
|
|
135
|
+
}
|
|
136
|
+
if (rows.length >= 1 && noDefault.length > 0) {
|
|
137
|
+
const { names, noun } = describe(noDefault);
|
|
138
|
+
throw new Error(`Cannot add required auth ${noun} ${names} to table ${JSON.stringify(table.name)}: the table has rows, and there is no fixed default value to fill them. Set \`required: false\` on the ${noun}. A string, number or boolean field can use a fixed \`defaultValue\` instead.`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
108
141
|
async function applySqliteAuthMigrations(runner, schema) {
|
|
109
142
|
const tableRows = await runner.all("SELECT name FROM sqlite_master WHERE type = 'table'");
|
|
110
143
|
const existingTables = new Set(tableRows.map((row) => String(row.name)));
|
|
@@ -117,6 +150,7 @@ async function applySqliteAuthMigrations(runner, schema) {
|
|
|
117
150
|
}
|
|
118
151
|
const columnRows = await runner.all(`PRAGMA table_info(${quotePragmaArg(table.name)})`);
|
|
119
152
|
const existingColumns = new Set(columnRows.map((row) => String(row.name)));
|
|
153
|
+
await assertRequiredColumnsCanBeAdded(runner, "sqlite", table, Object.keys(table.fields).filter((fieldName) => !existingColumns.has(fieldName)));
|
|
120
154
|
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
121
155
|
if (existingColumns.has(fieldName)) continue;
|
|
122
156
|
await runner.run(buildAddColumnSql(schema, table.name, fieldName, field));
|
|
@@ -138,6 +172,7 @@ async function applyPgAuthMigrations(runner, schema) {
|
|
|
138
172
|
}
|
|
139
173
|
const columnRows = await runner.all("SELECT column_name FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2", [schemaName, table.name]);
|
|
140
174
|
const existingColumns = new Set(columnRows.map((row) => String(row.column_name)));
|
|
175
|
+
await assertRequiredColumnsCanBeAdded(runner, "postgresql", table, Object.keys(table.fields).filter((fieldName) => !existingColumns.has(fieldName)));
|
|
141
176
|
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
142
177
|
if (existingColumns.has(fieldName)) continue;
|
|
143
178
|
await runner.run(buildAddColumnSql(schema, table.name, fieldName, field));
|
|
@@ -157,6 +192,7 @@ async function applyMySqlAuthMigrations(runner, schema) {
|
|
|
157
192
|
} else {
|
|
158
193
|
const columnRows = await runner.all("SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type FROM information_schema.columns WHERE table_schema = ? AND table_name = ?", [databaseName, table.name]);
|
|
159
194
|
const existingColumns = new Map(columnRows.map((row) => [String(row.column_name), row]));
|
|
195
|
+
await assertRequiredColumnsCanBeAdded(runner, "mysql", table, Object.keys(table.fields).filter((fieldName) => !existingColumns.has(fieldName)));
|
|
160
196
|
for (const [fieldName, field] of Object.entries(table.fields)) {
|
|
161
197
|
const existingColumn = existingColumns.get(fieldName);
|
|
162
198
|
if (!existingColumn) await runner.run(buildAddColumnSql(schema, table.name, fieldName, field));
|
|
@@ -22,7 +22,8 @@ async function chooseDestination(root, args, interactive) {
|
|
|
22
22
|
...connections.length === 0 ? [{
|
|
23
23
|
value: "void",
|
|
24
24
|
label: "Void platform",
|
|
25
|
-
hint: "
|
|
25
|
+
hint: "Run `void connect <url>` first",
|
|
26
|
+
disabled: true
|
|
26
27
|
}] : []
|
|
27
28
|
];
|
|
28
29
|
const selected = await select({
|
|
@@ -32,17 +33,17 @@ async function chooseDestination(root, args, interactive) {
|
|
|
32
33
|
if (isCancel(selected) || typeof selected !== "string") throw new Error("auth: Cancelled.");
|
|
33
34
|
return selected === "cloudflare" ? { platform: "cloudflare" } : {
|
|
34
35
|
platform: "void",
|
|
35
|
-
|
|
36
|
+
apiUrl: selected
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
39
|
async function runAuthRouter(root, args, interactive = Boolean(process.stdin.isTTY)) {
|
|
39
40
|
const destination = await chooseDestination(root, args, interactive);
|
|
40
41
|
if (destination.platform === "cloudflare") {
|
|
41
|
-
const { runCloudflareCommand } = await import("./cloudflare-cmd-
|
|
42
|
+
const { runCloudflareCommand } = await import("./cloudflare-cmd-ZSErUl6Y.mjs");
|
|
42
43
|
await runCloudflareCommand(root, { subcommand: args.subcommand });
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
|
-
const { runAccountCommand } = await import("./account-cmd-
|
|
46
|
+
const { runAccountCommand } = await import("./account-cmd-R35a4Oa8.mjs");
|
|
46
47
|
const subcommand = args.subcommand === "status" ? "whoami" : args.subcommand;
|
|
47
48
|
if (!destination.apiUrl) {
|
|
48
49
|
await runAccountCommand(root, { subcommand });
|
|
@@ -12,6 +12,8 @@ type VoidAuthMigrationField = {
|
|
|
12
12
|
index: boolean;
|
|
13
13
|
bigint: boolean;
|
|
14
14
|
unbounded?: boolean;
|
|
15
|
+
/** A fixed default of a required field. Adding the column fills rows that exist with it. */
|
|
16
|
+
defaultValue?: string | number | boolean;
|
|
15
17
|
references?: {
|
|
16
18
|
table: string;
|
|
17
19
|
field: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as getVoidAuthProviderSettingEnvNames, o as isVoidSocialAuthProvider, r as getVoidAuthProviderEnvNames } from "./providers-BUHwJlmM.mjs";
|
|
2
2
|
import { t as authContext } from "./auth-3sGB0zJ1.mjs";
|
|
3
3
|
import { randomBytes, scrypt, timingSafeEqual } from "node:crypto";
|
|
4
4
|
import { betterAuth } from "better-auth";
|
|
@@ -64,11 +64,37 @@ function resolveSocialProviderCredentials(env, provider) {
|
|
|
64
64
|
const clientId = readEnvString(env, envNames.clientId);
|
|
65
65
|
const clientSecret = readEnvString(env, envNames.clientSecret);
|
|
66
66
|
if (!clientId || !clientSecret) throw new Error(`auth: Missing credentials for provider '${provider}'. Set ${envNames.clientId} and ${envNames.clientSecret}, or remove '${provider}' from auth.providers.`);
|
|
67
|
+
const settings = {};
|
|
68
|
+
for (const [option, envName] of Object.entries(getVoidAuthProviderSettingEnvNames(provider))) {
|
|
69
|
+
const value = readEnvString(env, envName);
|
|
70
|
+
if (value) settings[option] = value;
|
|
71
|
+
}
|
|
67
72
|
return {
|
|
73
|
+
...settings,
|
|
68
74
|
clientId,
|
|
69
75
|
clientSecret
|
|
70
76
|
};
|
|
71
77
|
}
|
|
78
|
+
/** Fail early when a configured provider still lacks a required setting after auth.ts runs. */
|
|
79
|
+
function assertSocialProviderSettings(options, configuredProviders) {
|
|
80
|
+
const socialProviders = options.socialProviders;
|
|
81
|
+
for (const provider of configuredProviders ?? []) {
|
|
82
|
+
if (!isVoidSocialAuthProvider(provider)) continue;
|
|
83
|
+
const config = socialProviders?.[provider];
|
|
84
|
+
if (typeof config !== "object" || config === null) continue;
|
|
85
|
+
const values = config;
|
|
86
|
+
if (values.enabled === false) continue;
|
|
87
|
+
const missing = Object.entries(getVoidAuthProviderSettingEnvNames(provider)).filter(([option]) => !values[option]);
|
|
88
|
+
if (missing.length > 0) {
|
|
89
|
+
const options = joinNames(missing.map(([option]) => option));
|
|
90
|
+
throw new Error(`auth: Missing ${options} for the ${provider} provider. Set ${joinNames(missing.map(([, envName]) => envName))}, or set ${options} in auth.ts.`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** `a`, `a and b`, `a, b and c`. */
|
|
95
|
+
function joinNames(names) {
|
|
96
|
+
return names.length > 1 ? `${names.slice(0, -1).join(", ")} and ${names.at(-1)}` : names[0];
|
|
97
|
+
}
|
|
72
98
|
function resolveSocialProviders(env, configuredProviders) {
|
|
73
99
|
if (!configuredProviders) return;
|
|
74
100
|
const providers = {};
|
|
@@ -215,6 +241,7 @@ function createVoidAuthRuntime(dialect, applyMigrations) {
|
|
|
215
241
|
trustedOrigins: [origin]
|
|
216
242
|
};
|
|
217
243
|
const resolved = resolveUserConfig(runtime.userConfig, defaults, request, env, dialect);
|
|
244
|
+
assertSocialProviderSettings(resolved, runtime.providers);
|
|
218
245
|
return runtime.dev !== true && cloudflareClientIp(request) ? applyCloudflareRateLimitDefaults(resolved) : resolved;
|
|
219
246
|
}
|
|
220
247
|
async function createVoidAuth(request, env, runtime, database) {
|
|
@@ -2,7 +2,7 @@ import { 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-BVdsO7Py.mjs";
|
|
4
4
|
import { f as import_picocolors, i as dim, m as printSuccess } from "./output-Ba6ZbrzY.mjs";
|
|
5
|
-
import { n as PlatformApiError, r as PlatformClient } from "./client-
|
|
5
|
+
import { n as PlatformApiError, r as PlatformClient } from "./client-GuSO3v_x.mjs";
|
|
6
6
|
import { a as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-WpwkCB_c.mjs";
|
|
7
7
|
import { appendFileSync, writeFileSync } from "node:fs";
|
|
8
8
|
//#region src/cli/build-cmd.ts
|
|
@@ -2,7 +2,7 @@ import { r as readProjectConfig } from "./project-rqDnVsJN.mjs";
|
|
|
2
2
|
import { c as getToken } from "./auth-B6iOCjKI.mjs";
|
|
3
3
|
import { L as log } from "./dist-BVdsO7Py.mjs";
|
|
4
4
|
import { m as printSuccess, o as formatCount, r as createSpinner } from "./output-Ba6ZbrzY.mjs";
|
|
5
|
-
import { r as PlatformClient } from "./client-
|
|
5
|
+
import { r as PlatformClient } from "./client-GuSO3v_x.mjs";
|
|
6
6
|
import { a as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-WpwkCB_c.mjs";
|
|
7
7
|
//#region src/cli/cache.ts
|
|
8
8
|
async function runPurgeCacheCommand(root, projectSlug) {
|
|
@@ -2,7 +2,7 @@ import { r as readProjectConfig } from "./project-rqDnVsJN.mjs";
|
|
|
2
2
|
import { c as getToken } from "./auth-B6iOCjKI.mjs";
|
|
3
3
|
import { A as confirm, H as outro, L as log, tt as isCancel } from "./dist-BVdsO7Py.mjs";
|
|
4
4
|
import { m as printSuccess } from "./output-Ba6ZbrzY.mjs";
|
|
5
|
-
import { r as PlatformClient } from "./client-
|
|
5
|
+
import { r as PlatformClient } from "./client-GuSO3v_x.mjs";
|
|
6
6
|
//#region src/cli/cancel-deploy.ts
|
|
7
7
|
const ACTIVE_STATUSES = /* @__PURE__ */ new Set([
|
|
8
8
|
"pending",
|
package/dist/cli/cli.mjs
CHANGED
|
@@ -3,9 +3,10 @@ import { L as log } from "../dist-BVdsO7Py.mjs";
|
|
|
3
3
|
import { f as import_picocolors, l as formatUrl } from "../output-Ba6ZbrzY.mjs";
|
|
4
4
|
import { t as formatCloudflareUserMessage } from "../cloudflare-user-output-Q-k0QoNQ.mjs";
|
|
5
5
|
import { n as getOwnVersion } from "../agents-CuNtT0D_.mjs";
|
|
6
|
-
import { i as printVoidHeader, n as printGlobalHelp, r as printHelpPage, t as getHelpPath } from "../help-
|
|
6
|
+
import { i as printVoidHeader, n as printGlobalHelp, r as printHelpPage, t as getHelpPath } from "../help-D49SL_lN.mjs";
|
|
7
7
|
import { r as OperatorClientError } from "../operator-client-C-ROjk1I.mjs";
|
|
8
|
-
import { n as
|
|
8
|
+
import { n as operatorGroups } from "../operator-args-UnE8Y2eK.mjs";
|
|
9
|
+
import { n as platformSubcommands, t as parsePlatformArgs } from "../platform-args-B7ke06up.mjs";
|
|
9
10
|
import { parseArgs } from "node:util";
|
|
10
11
|
//#region src/cli/account-args.ts
|
|
11
12
|
const accountSubcommands = [
|
|
@@ -245,7 +246,7 @@ function parseConnectArgs(args) {
|
|
|
245
246
|
const dbSubcommands = [
|
|
246
247
|
{
|
|
247
248
|
name: "push",
|
|
248
|
-
description: "Push schema to
|
|
249
|
+
description: "Push schema to the development database (no migration files)"
|
|
249
250
|
},
|
|
250
251
|
{
|
|
251
252
|
name: "generate",
|
|
@@ -287,7 +288,7 @@ const dbSubcommands = [
|
|
|
287
288
|
},
|
|
288
289
|
{
|
|
289
290
|
name: "studio",
|
|
290
|
-
description: "Open Drizzle Studio against the database (use --remote for the deployed PostgreSQL database)",
|
|
291
|
+
description: "Open Drizzle Studio against the database (use --remote for the deployed PostgreSQL or MySQL database)",
|
|
291
292
|
flags: [{
|
|
292
293
|
name: "--remote",
|
|
293
294
|
description: "Open Studio against the deployed database"
|
|
@@ -366,6 +367,30 @@ const MAX_POSITIONALS = {
|
|
|
366
367
|
"rename-migrations": 0,
|
|
367
368
|
export: 0
|
|
368
369
|
};
|
|
370
|
+
const ACTION_FLAGS = {
|
|
371
|
+
push: [],
|
|
372
|
+
generate: [],
|
|
373
|
+
status: [],
|
|
374
|
+
reset: ["yes"],
|
|
375
|
+
seed: ["file", "yes"],
|
|
376
|
+
execute: ["file", "remote"],
|
|
377
|
+
migrate: ["remote"],
|
|
378
|
+
studio: ["remote"],
|
|
379
|
+
"set-url": [],
|
|
380
|
+
connect: [
|
|
381
|
+
"provider",
|
|
382
|
+
"name",
|
|
383
|
+
"region",
|
|
384
|
+
"local-only"
|
|
385
|
+
],
|
|
386
|
+
"rename-migrations": [],
|
|
387
|
+
export: [
|
|
388
|
+
"output",
|
|
389
|
+
"no-data",
|
|
390
|
+
"no-schema",
|
|
391
|
+
"table"
|
|
392
|
+
]
|
|
393
|
+
};
|
|
369
394
|
function isDbAction(value) {
|
|
370
395
|
return value !== void 0 && Object.hasOwn(MAX_POSITIONALS, value);
|
|
371
396
|
}
|
|
@@ -390,7 +415,9 @@ function parseDbArgs(args) {
|
|
|
390
415
|
});
|
|
391
416
|
const [action, ...rest] = positionals;
|
|
392
417
|
if (!isDbAction(action)) throw new Error("db: Usage: void db <push|generate|status|reset|seed|execute|migrate|studio|export|connect|set-url|rename-migrations>.");
|
|
393
|
-
if (action === "export" && values.remote) throw new Error("`void db export
|
|
418
|
+
if (action === "export" && values.remote) throw new Error("db: `void db export` reads only the local database; --remote is not supported.");
|
|
419
|
+
const unsupported = Object.keys(values).find((flag) => !ACTION_FLAGS[action].includes(flag));
|
|
420
|
+
if (unsupported) throw new Error(`db: \`void db ${action}\` does not support --${unsupported}.`);
|
|
394
421
|
const maxPositionals = MAX_POSITIONALS[action];
|
|
395
422
|
if (rest.length > maxPositionals) throw new Error(`db: Unexpected argument '${rest[maxPositionals]}'.`);
|
|
396
423
|
switch (action) {
|
|
@@ -525,7 +552,7 @@ const emailSubcommands = [
|
|
|
525
552
|
},
|
|
526
553
|
{
|
|
527
554
|
name: "status",
|
|
528
|
-
description: "Show the email setup state
|
|
555
|
+
description: "Show the email setup state on your own Cloudflare account (--platform cloudflare)",
|
|
529
556
|
flags: [PLATFORM_FLAG]
|
|
530
557
|
},
|
|
531
558
|
{
|
|
@@ -544,7 +571,6 @@ const EMAIL_SUBCOMMANDS = [
|
|
|
544
571
|
"status",
|
|
545
572
|
"setup"
|
|
546
573
|
];
|
|
547
|
-
const SUBDOMAIN_ADD_ONLY = "email: --subdomain applies to `void email domain add` only.";
|
|
548
574
|
const EMAIL_DOMAIN_VERBS = [
|
|
549
575
|
"add",
|
|
550
576
|
"status",
|
|
@@ -581,7 +607,6 @@ function parseEmailArgs(args) {
|
|
|
581
607
|
let limit;
|
|
582
608
|
const projectValues = [];
|
|
583
609
|
const platformValues = [];
|
|
584
|
-
const subdomainValues = [];
|
|
585
610
|
const positional = [];
|
|
586
611
|
const rest = args.slice(1);
|
|
587
612
|
for (let i = 0; i < rest.length; i++) if (rest[i] === "--project" || rest[i]?.startsWith("--project=")) {
|
|
@@ -602,12 +627,8 @@ function parseEmailArgs(args) {
|
|
|
602
627
|
platformValues.push(value);
|
|
603
628
|
i = next;
|
|
604
629
|
} else if (rest[i] === "--backend" || rest[i]?.startsWith("--backend=")) throw new Error("email: Unknown option '--backend'.");
|
|
605
|
-
else if (rest[i] === "--subdomain" || rest[i]?.startsWith("--subdomain="))
|
|
606
|
-
|
|
607
|
-
if (value === void 0 || value.trim() === "") throw new Error("email: --subdomain requires a value (a subdomain label or host).");
|
|
608
|
-
subdomainValues.push(value);
|
|
609
|
-
i = next;
|
|
610
|
-
} else positional.push(rest[i]);
|
|
630
|
+
else if (rest[i] === "--subdomain" || rest[i]?.startsWith("--subdomain=")) throw new Error("email: Unknown option '--subdomain'.");
|
|
631
|
+
else positional.push(rest[i]);
|
|
611
632
|
if (projectValues.length > 1) throw new Error("email: --project can only be specified once.");
|
|
612
633
|
const projectSlug = projectValues[0];
|
|
613
634
|
if (platformValues.length > 1) throw new Error("email: --platform can only be specified once.");
|
|
@@ -617,18 +638,14 @@ function parseEmailArgs(args) {
|
|
|
617
638
|
if (platformValue !== "cloudflare" && platformValue !== "void") throw new Error("email: --platform must be 'cloudflare' or 'void'.");
|
|
618
639
|
platform = platformValue;
|
|
619
640
|
}
|
|
620
|
-
if (subdomainValues.length > 1) throw new Error("email: --subdomain can only be specified once.");
|
|
621
|
-
const subdomain = subdomainValues[0];
|
|
622
641
|
if (subcommand === "domain") {
|
|
623
642
|
if (platform === "cloudflare") throw new Error("email: --platform cloudflare applies to `void email status` and `void email setup` only (`domain` is a Void platform command).");
|
|
624
643
|
return parseEmailDomainArgs(positional, {
|
|
625
644
|
projectSlug,
|
|
626
645
|
limit,
|
|
627
|
-
platform
|
|
628
|
-
subdomain
|
|
646
|
+
platform
|
|
629
647
|
});
|
|
630
648
|
}
|
|
631
|
-
if (subdomain !== void 0) throw new Error(SUBDOMAIN_ADD_ONLY);
|
|
632
649
|
if (positional.length > 1) throw new Error(`email: \`void email ${subcommand}\` takes exactly one positional argument (got ${positional.length}: ${positional.map((p) => JSON.stringify(p)).join(", ")}).`);
|
|
633
650
|
const address = positional[0];
|
|
634
651
|
if ((subcommand === "allow" || subcommand === "disallow") && !address) throw new Error(`email: Usage: void email ${subcommand} <address> [--project <name>].`);
|
|
@@ -652,7 +669,6 @@ function parseEmailArgs(args) {
|
|
|
652
669
|
function parseEmailDomainArgs(positional, flags) {
|
|
653
670
|
const verb = positional[0];
|
|
654
671
|
if (!verb || !EMAIL_DOMAIN_VERBS.includes(verb)) throw new Error("email: Usage: void email domain <add|status|list|sync|rotate-secret|remove> [<domain>] [--project <name>].");
|
|
655
|
-
if (flags.subdomain !== void 0 && verb !== "add") throw new Error(SUBDOMAIN_ADD_ONLY);
|
|
656
672
|
const domain = positional[1];
|
|
657
673
|
if (verb === "list") {
|
|
658
674
|
if (domain !== void 0) throw new Error("email: `void email domain list` takes no domain argument.");
|
|
@@ -662,7 +678,6 @@ function parseEmailDomainArgs(positional, flags) {
|
|
|
662
678
|
subcommand: "domain",
|
|
663
679
|
domainVerb: verb,
|
|
664
680
|
domain,
|
|
665
|
-
subdomain: flags.subdomain,
|
|
666
681
|
projectSlug: flags.projectSlug,
|
|
667
682
|
limit: flags.limit,
|
|
668
683
|
platform: flags.platform
|
|
@@ -708,7 +723,7 @@ const genSubcommands = [
|
|
|
708
723
|
{
|
|
709
724
|
name: "model",
|
|
710
725
|
arg: "<name>",
|
|
711
|
-
description: "
|
|
726
|
+
description: "Scaffold a Drizzle table, API routes, and DB types",
|
|
712
727
|
followUp: {
|
|
713
728
|
type: "repeat-input",
|
|
714
729
|
placeholder: "name:type or name:type?"
|
|
@@ -1138,7 +1153,7 @@ const projectSubcommands = [
|
|
|
1138
1153
|
},
|
|
1139
1154
|
{
|
|
1140
1155
|
name: "purge-cache",
|
|
1141
|
-
description: "Purge all cached pages"
|
|
1156
|
+
description: "Purge all cached pages (Void platform)"
|
|
1142
1157
|
}
|
|
1143
1158
|
];
|
|
1144
1159
|
function parseProjectArgs(args) {
|
|
@@ -1513,19 +1528,19 @@ const args = process.argv.slice(2);
|
|
|
1513
1528
|
const command = args[0];
|
|
1514
1529
|
const helpPath = getHelpPath(args);
|
|
1515
1530
|
const subcommandGroups = {
|
|
1516
|
-
auth: () => runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (root, parsed) => import("../auth-router-
|
|
1517
|
-
account: () => runSubcommandGroup("account", accountSubcommands, parseAccountArgs, (root, parsed) => import("../account-cmd-
|
|
1518
|
-
platform: () => runSubcommandGroup("platform", platformSubcommands, parsePlatformArgs, (root, parsed) => import("../platform-cmd-
|
|
1519
|
-
cloudflare: () => runSubcommandGroup("cloudflare", cloudflareSubcommands, parseCloudflareArgs, (root, parsed) => import("../cloudflare-cmd-
|
|
1520
|
-
project: () => runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (root, parsed) => import("../project-cmd-
|
|
1521
|
-
secret: () => runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (root, parsed) => import("../secret-
|
|
1522
|
-
domain: () => runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (root, parsed) => import("../domain-
|
|
1523
|
-
email: () => runSubcommandGroup("email", emailSubcommands, parseEmailArgs, (root, parsed) => import("../email-
|
|
1524
|
-
db: () => runSubcommandGroup("db", dbSubcommands, parseDbArgs, (root, parsed) => import("../db-
|
|
1525
|
-
env: () => runSubcommandGroup("env", envSubcommands, parseEnvArgs, (root, parsed) => import("../env-
|
|
1526
|
-
gen: () => runSubcommandGroup("gen", genSubcommands, parseGenArgs, (root, parsed) => import("../gen-
|
|
1527
|
-
github: () => runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (root, parsed) => import("../github-cmd-
|
|
1528
|
-
build: () => runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (root, parsed) => import("../build-cmd-
|
|
1531
|
+
auth: () => runSubcommandGroup("auth", authSubcommands, parseAuthArgs, (root, parsed) => import("../auth-router-O_Wrs5kg.mjs").then(({ runAuthRouter }) => runAuthRouter(root, parsed))),
|
|
1532
|
+
account: () => runSubcommandGroup("account", accountSubcommands, parseAccountArgs, (root, parsed) => import("../account-cmd-R35a4Oa8.mjs").then(({ runAccountCommand }) => runAccountCommand(root, parsed))),
|
|
1533
|
+
platform: () => runSubcommandGroup("platform", platformSubcommands, parsePlatformArgs, (root, parsed) => import("../platform-cmd-D9lwFpcl.mjs").then(({ runPlatformCommand }) => runPlatformCommand(root, parsed))),
|
|
1534
|
+
cloudflare: () => runSubcommandGroup("cloudflare", cloudflareSubcommands, parseCloudflareArgs, (root, parsed) => import("../cloudflare-cmd-ZSErUl6Y.mjs").then(({ runCloudflareCommand }) => runCloudflareCommand(root, parsed))),
|
|
1535
|
+
project: () => runSubcommandGroup("project", projectSubcommands, parseProjectArgs, (root, parsed) => import("../project-cmd-CpLYflCH.mjs").then(({ runProjectCommand }) => runProjectCommand(root, parsed))),
|
|
1536
|
+
secret: () => runSubcommandGroup("secret", secretSubcommands, parseSecretArgs, (root, parsed) => import("../secret-CClHaFxm.mjs").then(({ runSecretCommand }) => runSecretCommand(root, parsed))),
|
|
1537
|
+
domain: () => runSubcommandGroup("domain", domainSubcommands, parseDomainArgs, (root, parsed) => import("../domain-DKlNI0SR.mjs").then(({ runDomainCommand }) => runDomainCommand(root, parsed))),
|
|
1538
|
+
email: () => runSubcommandGroup("email", emailSubcommands, parseEmailArgs, (root, parsed) => import("../email-C0s3OvJk.mjs").then(({ runEmailCommand }) => runEmailCommand(root, parsed))),
|
|
1539
|
+
db: () => runSubcommandGroup("db", dbSubcommands, parseDbArgs, (root, parsed) => import("../db-COI-yTJE.mjs").then(({ runDbCommand }) => runDbCommand(root, parsed))),
|
|
1540
|
+
env: () => runSubcommandGroup("env", envSubcommands, parseEnvArgs, (root, parsed) => import("../env-BX2JFsgF.mjs").then(({ runEnvCommand }) => runEnvCommand(root, parsed))),
|
|
1541
|
+
gen: () => runSubcommandGroup("gen", genSubcommands, parseGenArgs, (root, parsed) => import("../gen-DsCukhuw.mjs").then(({ runGenCommand }) => runGenCommand(root, parsed))),
|
|
1542
|
+
github: () => runSubcommandGroup("github", githubSubcommands, parseGithubArgs, (root, parsed) => import("../github-cmd-DQDryS-5.mjs").then(({ runGithubCommand }) => runGithubCommand(root, parsed))),
|
|
1543
|
+
build: () => runSubcommandGroup("build", buildSubcommands, parseBuildArgs, (root, parsed) => import("../build-cmd-CMZiMn46.mjs").then(({ runBuildCommand }) => runBuildCommand(root, parsed)))
|
|
1529
1544
|
};
|
|
1530
1545
|
if (helpPath) {
|
|
1531
1546
|
if (helpPath.length === 0) printGlobalHelp();
|
|
@@ -1544,7 +1559,7 @@ if (helpPath) {
|
|
|
1544
1559
|
log.error(formatCloudflareUserMessage(err instanceof Error ? err.message : String(err)));
|
|
1545
1560
|
process.exit(1);
|
|
1546
1561
|
}
|
|
1547
|
-
import("../deploy-
|
|
1562
|
+
import("../deploy-CxNgEYr4.mjs").then(({ runDeploy }) => {
|
|
1548
1563
|
runDeploy(root, deployArgs).catch((err) => {
|
|
1549
1564
|
log.error(formatCloudflareUserMessage(err.message ?? String(err)));
|
|
1550
1565
|
process.exit(1);
|
|
@@ -1552,14 +1567,14 @@ if (helpPath) {
|
|
|
1552
1567
|
});
|
|
1553
1568
|
} else if (command === "connect") (async () => {
|
|
1554
1569
|
const parsed = parseConnectArgs(args.slice(1));
|
|
1555
|
-
const { runConnectCommand } = await import("../connect-
|
|
1570
|
+
const { runConnectCommand } = await import("../connect-yQuLbuiJ.mjs");
|
|
1556
1571
|
await runConnectCommand(process.cwd(), parsed);
|
|
1557
1572
|
})().catch((err) => {
|
|
1558
1573
|
log.error(formatCloudflareUserMessage(err instanceof Error ? err.message : String(err)));
|
|
1559
1574
|
process.exit(1);
|
|
1560
1575
|
});
|
|
1561
1576
|
else if (command && Object.hasOwn(subcommandGroups, command)) subcommandGroups[command]();
|
|
1562
|
-
else if (command === "info") import("../info-
|
|
1577
|
+
else if (command === "info") import("../info-Bxunp14X.mjs").then(async ({ runInfoCommand }) => {
|
|
1563
1578
|
try {
|
|
1564
1579
|
await runInfoCommand(process.cwd(), parseInfoArgs(args.slice(1)));
|
|
1565
1580
|
} catch (err) {
|
|
@@ -1580,7 +1595,7 @@ else if (command === "prepare") {
|
|
|
1580
1595
|
log.error(formatCloudflareUserMessage(err instanceof Error ? err.message : String(err)));
|
|
1581
1596
|
process.exit(1);
|
|
1582
1597
|
}
|
|
1583
|
-
import("../prepare-
|
|
1598
|
+
import("../prepare-2XD6kh77.mjs").then(({ runPrepareCommand }) => {
|
|
1584
1599
|
runPrepareCommand(root).catch((err) => {
|
|
1585
1600
|
log.error(formatCloudflareUserMessage(err.message ?? String(err)));
|
|
1586
1601
|
process.exit(1);
|
|
@@ -1588,7 +1603,7 @@ else if (command === "prepare") {
|
|
|
1588
1603
|
});
|
|
1589
1604
|
} else if (command === "init") {
|
|
1590
1605
|
const root = process.cwd();
|
|
1591
|
-
import("../init-
|
|
1606
|
+
import("../init-DyTEY04s.mjs").then(({ runInitCommand, parseInitArgs }) => {
|
|
1592
1607
|
let initArgs;
|
|
1593
1608
|
try {
|
|
1594
1609
|
initArgs = parseInitArgs(args.slice(1));
|
|
@@ -1606,7 +1621,7 @@ else if (command === "prepare") {
|
|
|
1606
1621
|
log.error("migrate: This command takes no arguments.");
|
|
1607
1622
|
process.exit(1);
|
|
1608
1623
|
}
|
|
1609
|
-
import("../migrate-
|
|
1624
|
+
import("../migrate-D2odrAmh.mjs").then(({ runMigrateCommand }) => {
|
|
1610
1625
|
runMigrateCommand(process.cwd()).catch((err) => {
|
|
1611
1626
|
log.error(formatCloudflareUserMessage(err instanceof Error ? err.message : String(err)));
|
|
1612
1627
|
process.exit(1);
|
|
@@ -1652,7 +1667,11 @@ else if (command) {
|
|
|
1652
1667
|
},
|
|
1653
1668
|
{
|
|
1654
1669
|
name: "platform",
|
|
1655
|
-
hint:
|
|
1670
|
+
hint: [
|
|
1671
|
+
"config",
|
|
1672
|
+
...operatorGroups,
|
|
1673
|
+
"install"
|
|
1674
|
+
].join(" | "),
|
|
1656
1675
|
description: "Install platforms and administer plans, users, projects, access, and operations"
|
|
1657
1676
|
},
|
|
1658
1677
|
{
|
|
@@ -1692,7 +1711,7 @@ else if (command) {
|
|
|
1692
1711
|
},
|
|
1693
1712
|
{
|
|
1694
1713
|
name: "db",
|
|
1695
|
-
hint:
|
|
1714
|
+
hint: dbSubcommands.map(({ name }) => name).join(" | "),
|
|
1696
1715
|
description: "Database migrations and management"
|
|
1697
1716
|
},
|
|
1698
1717
|
{
|
|
@@ -1724,32 +1743,32 @@ else if (command) {
|
|
|
1724
1743
|
if (Object.hasOwn(subcommandGroups, cmd)) return subcommandGroups[cmd]();
|
|
1725
1744
|
switch (cmd) {
|
|
1726
1745
|
case "connect": {
|
|
1727
|
-
const { runConnectCommand } = await import("../connect-
|
|
1746
|
+
const { runConnectCommand } = await import("../connect-yQuLbuiJ.mjs");
|
|
1728
1747
|
await runConnectCommand(root, parseConnectArgs([]));
|
|
1729
1748
|
return;
|
|
1730
1749
|
}
|
|
1731
1750
|
case "init": {
|
|
1732
|
-
const { runInitCommand, parseInitArgs } = await import("../init-
|
|
1751
|
+
const { runInitCommand, parseInitArgs } = await import("../init-DyTEY04s.mjs");
|
|
1733
1752
|
await runInitCommand(root, parseInitArgs([]));
|
|
1734
1753
|
return;
|
|
1735
1754
|
}
|
|
1736
1755
|
case "migrate": {
|
|
1737
|
-
const { runMigrateCommand } = await import("../migrate-
|
|
1756
|
+
const { runMigrateCommand } = await import("../migrate-D2odrAmh.mjs");
|
|
1738
1757
|
await runMigrateCommand(root);
|
|
1739
1758
|
return;
|
|
1740
1759
|
}
|
|
1741
1760
|
case "deploy": {
|
|
1742
|
-
const { runDeploy } = await import("../deploy-
|
|
1761
|
+
const { runDeploy } = await import("../deploy-CxNgEYr4.mjs");
|
|
1743
1762
|
await runDeploy(root);
|
|
1744
1763
|
return;
|
|
1745
1764
|
}
|
|
1746
1765
|
case "info": {
|
|
1747
|
-
const { runInfoCommand } = await import("../info-
|
|
1766
|
+
const { runInfoCommand } = await import("../info-Bxunp14X.mjs");
|
|
1748
1767
|
await runInfoCommand(root, parseInfoArgs([]));
|
|
1749
1768
|
return;
|
|
1750
1769
|
}
|
|
1751
1770
|
case "prepare": {
|
|
1752
|
-
const { runPrepareCommand } = await import("../prepare-
|
|
1771
|
+
const { runPrepareCommand } = await import("../prepare-2XD6kh77.mjs");
|
|
1753
1772
|
await runPrepareCommand(root);
|
|
1754
1773
|
return;
|
|
1755
1774
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as findEnvFile } from "../env-types-
|
|
1
|
+
import { t as findEnvFile } from "../env-types-GRchm5dw.mjs";
|
|
2
2
|
import { writeSync } from "node:fs";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { spawnSync } from "node:child_process";
|
|
@@ -109,7 +109,7 @@ function emitResult(result) {
|
|
|
109
109
|
writeSync(RESULT_FD, JSON.stringify(result));
|
|
110
110
|
}
|
|
111
111
|
async function runFactsChild(root) {
|
|
112
|
-
const { deriveSelfHostSchemaFacts, SelfHostSchemaError } = await import("../env-validation-
|
|
112
|
+
const { deriveSelfHostSchemaFacts, SelfHostSchemaError } = await import("../env-validation-CuGfWRJd.mjs");
|
|
113
113
|
try {
|
|
114
114
|
emitResult({
|
|
115
115
|
kind: "ok",
|
|
@@ -128,7 +128,7 @@ async function runFactsChild(root) {
|
|
|
128
128
|
}
|
|
129
129
|
/** The parent already found the emitted config, so a read failure here fails closed. */
|
|
130
130
|
async function runValidateEmittedChild(root) {
|
|
131
|
-
const { computeInvalidEmittedKeys, readEmittedWorkerVars, SelfHostSchemaError } = await import("../env-validation-
|
|
131
|
+
const { computeInvalidEmittedKeys, readEmittedWorkerVars, SelfHostSchemaError } = await import("../env-validation-CuGfWRJd.mjs");
|
|
132
132
|
const emitted = readEmittedWorkerVars(root);
|
|
133
133
|
if (!emitted.ok) {
|
|
134
134
|
emitResult({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { r as PlatformClient } from "./client-GuSO3v_x.mjs";
|
|
@@ -95,7 +95,7 @@ function readCliVersion() {
|
|
|
95
95
|
}
|
|
96
96
|
const VOID_CLI_VERSION = readCliVersion();
|
|
97
97
|
/** The oldest Void platform release this CLI supports. */
|
|
98
|
-
const MIN_PLATFORM_VERSION = "
|
|
98
|
+
const MIN_PLATFORM_VERSION = "1.1.11";
|
|
99
99
|
const RELEASE_VERSION = /^(\d+)\.(\d+)\.(\d+)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/;
|
|
100
100
|
/**
|
|
101
101
|
* Version checks keyed by platform base URL. Every outcome (pass, inconclusive,
|