@zenstackhq/cli 3.3.0-beta.3 → 3.3.0-beta.5

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/index.js CHANGED
@@ -12,6 +12,7 @@ var __export = (target, all) => {
12
12
  };
13
13
 
14
14
  // src/index.ts
15
+ import "dotenv/config";
15
16
  import { ZModelLanguageMetaData as ZModelLanguageMetaData2 } from "@zenstackhq/language";
16
17
  import colors10 from "colors";
17
18
  import { Command, CommanderError, Option } from "commander";
@@ -226,7 +227,7 @@ function execPrisma(args, options) {
226
227
  execPackage(`prisma ${args}`, _options);
227
228
  return;
228
229
  }
229
- execSync(`node ${prismaPath} ${args}`, _options);
230
+ execSync(`node "${prismaPath}" ${args}`, _options);
230
231
  }
231
232
  __name(execPrisma, "execPrisma");
232
233
 
@@ -913,20 +914,23 @@ function handleSubProcessError2(err) {
913
914
  __name(handleSubProcessError2, "handleSubProcessError");
914
915
 
915
916
  // src/actions/proxy.ts
916
- import { isDataSource as isDataSource2 } from "@zenstackhq/language/ast";
917
917
  import { ZModelCodeGenerator } from "@zenstackhq/language";
918
+ import { isDataSource as isDataSource2 } from "@zenstackhq/language/ast";
918
919
  import { getStringLiteral } from "@zenstackhq/language/utils";
919
- import { SqliteDialect } from "@zenstackhq/orm/dialects/sqlite";
920
- import { PostgresDialect } from "@zenstackhq/orm/dialects/postgres";
921
- import SQLite from "better-sqlite3";
922
- import { Pool } from "pg";
923
- import path9 from "path";
924
920
  import { ZenStackClient } from "@zenstackhq/orm";
921
+ import { MysqlDialect } from "@zenstackhq/orm/dialects/mysql";
922
+ import { PostgresDialect } from "@zenstackhq/orm/dialects/postgres";
923
+ import { SqliteDialect } from "@zenstackhq/orm/dialects/sqlite";
925
924
  import { RPCApiHandler } from "@zenstackhq/server/api";
926
925
  import { ZenStackMiddleware } from "@zenstackhq/server/express";
927
- import express from "express";
926
+ import SQLite from "better-sqlite3";
928
927
  import colors9 from "colors";
928
+ import cors from "cors";
929
+ import express from "express";
929
930
  import { createJiti as createJiti2 } from "jiti";
931
+ import { createPool as createMysqlPool } from "mysql2";
932
+ import path9 from "path";
933
+ import { Pool as PgPool } from "pg";
930
934
 
931
935
  // src/utils/version-utils.ts
932
936
  import colors8 from "colors";
@@ -977,7 +981,6 @@ async function getLatestVersion() {
977
981
  __name(getLatestVersion, "getLatestVersion");
978
982
 
979
983
  // src/actions/proxy.ts
980
- import cors from "cors";
981
984
  async function run9(options) {
982
985
  const schemaFile = getSchemaFile(options.schema);
983
986
  console.log(colors9.gray(`Loading ZModel schema from: ${schemaFile}`));
@@ -1038,6 +1041,21 @@ function evaluateUrl(value) {
1038
1041
  }
1039
1042
  }
1040
1043
  __name(evaluateUrl, "evaluateUrl");
1044
+ function redactDatabaseUrl(url) {
1045
+ try {
1046
+ const parsedUrl = new URL(url);
1047
+ if (parsedUrl.password) {
1048
+ parsedUrl.password = "***";
1049
+ }
1050
+ if (parsedUrl.username) {
1051
+ parsedUrl.username = "***";
1052
+ }
1053
+ return parsedUrl.toString();
1054
+ } catch {
1055
+ return url;
1056
+ }
1057
+ }
1058
+ __name(redactDatabaseUrl, "redactDatabaseUrl");
1041
1059
  function createDialect(provider, databaseUrl, outputPath) {
1042
1060
  switch (provider) {
1043
1061
  case "sqlite": {
@@ -1054,12 +1072,17 @@ function createDialect(provider, databaseUrl, outputPath) {
1054
1072
  });
1055
1073
  }
1056
1074
  case "postgresql":
1057
- console.log(colors9.gray(`Connecting to PostgreSQL database at: ${databaseUrl}`));
1075
+ console.log(colors9.gray(`Connecting to PostgreSQL database at: ${redactDatabaseUrl(databaseUrl)}`));
1058
1076
  return new PostgresDialect({
1059
- pool: new Pool({
1077
+ pool: new PgPool({
1060
1078
  connectionString: databaseUrl
1061
1079
  })
1062
1080
  });
1081
+ case "mysql":
1082
+ console.log(colors9.gray(`Connecting to MySQL database at: ${redactDatabaseUrl(databaseUrl)}`));
1083
+ return new MysqlDialect({
1084
+ pool: createMysqlPool(databaseUrl)
1085
+ });
1063
1086
  default:
1064
1087
  throw new CliError(`Unsupported database provider: ${provider}`);
1065
1088
  }
@@ -1091,6 +1114,14 @@ function startServer(client, schema, options) {
1091
1114
  console.log(`ZenStack proxy server is running on port: ${options.port}`);
1092
1115
  console.log(`You can visit ZenStack Studio at: ${colors9.blue("https://studio.zenstack.dev")}`);
1093
1116
  });
1117
+ server.on("error", (err) => {
1118
+ if (err.code === "EADDRINUSE") {
1119
+ console.error(colors9.red(`Port ${options.port} is already in use. Please choose a different port using -p option.`));
1120
+ } else {
1121
+ throw new CliError(`Failed to start the server: ${err.message}`);
1122
+ }
1123
+ process.exit(1);
1124
+ });
1094
1125
  process.on("SIGTERM", async () => {
1095
1126
  server.close(() => {
1096
1127
  console.log("\nZenStack proxy server closed");
@@ -1407,7 +1438,7 @@ Arguments following -- are passed to the seed script. E.g.: "zen db seed -- --us
1407
1438
  program.command("init").description("Initialize an existing project for ZenStack").argument("[path]", "project path", ".").addOption(noVersionCheckOption).action(initAction);
1408
1439
  program.command("check").description("Check a ZModel schema for syntax or semantic errors").addOption(schemaOption).addOption(noVersionCheckOption).action(checkAction);
1409
1440
  program.command("format").description("Format a ZModel schema file").addOption(schemaOption).addOption(noVersionCheckOption).action(formatAction);
1410
- program.command("proxy").alias("studio").description("Start the ZenStack proxy server").addOption(schemaOption).addOption(new Option("-p, --port <port>", "port to run the proxy server on").default(8008)).addOption(new Option("-o, --output <path>", "output directory for `zen generate` command")).addOption(new Option("-d, --databaseUrl <url>", "database connection URL")).addOption(new Option("-l, --logLevel <level>", "Query log levels (e.g., query, error)")).addOption(noVersionCheckOption).action(proxyAction);
1441
+ program.command("proxy").alias("studio").description("Start the ZenStack proxy server").addOption(schemaOption).addOption(new Option("-p, --port <port>", "port to run the proxy server on").default(2311)).addOption(new Option("-o, --output <path>", "output directory for `zen generate` command")).addOption(new Option("-d, --databaseUrl <url>", "database connection URL")).addOption(new Option("-l, --logLevel <level>", "Query log levels (e.g., query, error)")).addOption(noVersionCheckOption).action(proxyAction);
1411
1442
  program.addHelpCommand("help [command]", "Display help for a command");
1412
1443
  program.hook("preAction", async (_thisCommand, actionCommand) => {
1413
1444
  if (actionCommand.getOptionValue("versionCheck") !== false) {