@zenstackhq/cli 3.3.0-beta.4 → 3.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/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";
@@ -1021,25 +1022,34 @@ async function run9(options) {
1021
1022
  }
1022
1023
  __name(run9, "run");
1023
1024
  function evaluateUrl(value) {
1024
- const env2 = /* @__PURE__ */ __name((varName) => {
1025
+ const envMatch = value.trim().match(/^env\s*\(\s*['"]([^'"]+)['"]\s*\)$/);
1026
+ if (envMatch) {
1027
+ const varName = envMatch[1];
1025
1028
  const envValue = process.env[varName];
1026
1029
  if (!envValue) {
1027
1030
  throw new CliError(`Environment variable ${varName} is not set`);
1028
1031
  }
1029
1032
  return envValue;
1030
- }, "env");
1033
+ } else {
1034
+ return value;
1035
+ }
1036
+ }
1037
+ __name(evaluateUrl, "evaluateUrl");
1038
+ function redactDatabaseUrl(url) {
1031
1039
  try {
1032
- const urlFn = new Function("env", `return ${value}`);
1033
- const url = urlFn(env2);
1034
- return url;
1035
- } catch (err) {
1036
- if (err instanceof CliError) {
1037
- throw err;
1040
+ const parsedUrl = new URL(url);
1041
+ if (parsedUrl.password) {
1042
+ parsedUrl.password = "***";
1043
+ }
1044
+ if (parsedUrl.username) {
1045
+ parsedUrl.username = "***";
1038
1046
  }
1039
- throw new CliError("Could not evaluate datasource url from schema, you could provide it via -d option.");
1047
+ return parsedUrl.toString();
1048
+ } catch {
1049
+ return url;
1040
1050
  }
1041
1051
  }
1042
- __name(evaluateUrl, "evaluateUrl");
1052
+ __name(redactDatabaseUrl, "redactDatabaseUrl");
1043
1053
  function createDialect(provider, databaseUrl, outputPath) {
1044
1054
  switch (provider) {
1045
1055
  case "sqlite": {
@@ -1056,14 +1066,14 @@ function createDialect(provider, databaseUrl, outputPath) {
1056
1066
  });
1057
1067
  }
1058
1068
  case "postgresql":
1059
- console.log(colors9.gray(`Connecting to PostgreSQL database at: ${databaseUrl}`));
1069
+ console.log(colors9.gray(`Connecting to PostgreSQL database at: ${redactDatabaseUrl(databaseUrl)}`));
1060
1070
  return new PostgresDialect({
1061
1071
  pool: new PgPool({
1062
1072
  connectionString: databaseUrl
1063
1073
  })
1064
1074
  });
1065
1075
  case "mysql":
1066
- console.log(colors9.gray(`Connecting to MySQL database at: ${databaseUrl}`));
1076
+ console.log(colors9.gray(`Connecting to MySQL database at: ${redactDatabaseUrl(databaseUrl)}`));
1067
1077
  return new MysqlDialect({
1068
1078
  pool: createMysqlPool(databaseUrl)
1069
1079
  });
@@ -1098,6 +1108,14 @@ function startServer(client, schema, options) {
1098
1108
  console.log(`ZenStack proxy server is running on port: ${options.port}`);
1099
1109
  console.log(`You can visit ZenStack Studio at: ${colors9.blue("https://studio.zenstack.dev")}`);
1100
1110
  });
1111
+ server.on("error", (err) => {
1112
+ if (err.code === "EADDRINUSE") {
1113
+ console.error(colors9.red(`Port ${options.port} is already in use. Please choose a different port using -p option.`));
1114
+ } else {
1115
+ throw new CliError(`Failed to start the server: ${err.message}`);
1116
+ }
1117
+ process.exit(1);
1118
+ });
1101
1119
  process.on("SIGTERM", async () => {
1102
1120
  server.close(() => {
1103
1121
  console.log("\nZenStack proxy server closed");
@@ -1122,7 +1140,7 @@ import fs13 from "fs";
1122
1140
  import * as os2 from "os";
1123
1141
 
1124
1142
  // src/constants.ts
1125
- var TELEMETRY_TRACKING_TOKEN = "<TELEMETRY_TRACKING_TOKEN>";
1143
+ var TELEMETRY_TRACKING_TOKEN = "74944eb779d7d3b4ce185be843fde9fc";
1126
1144
 
1127
1145
  // src/utils/is-ci.ts
1128
1146
  import { env } from "process";
@@ -1414,7 +1432,7 @@ Arguments following -- are passed to the seed script. E.g.: "zen db seed -- --us
1414
1432
  program.command("init").description("Initialize an existing project for ZenStack").argument("[path]", "project path", ".").addOption(noVersionCheckOption).action(initAction);
1415
1433
  program.command("check").description("Check a ZModel schema for syntax or semantic errors").addOption(schemaOption).addOption(noVersionCheckOption).action(checkAction);
1416
1434
  program.command("format").description("Format a ZModel schema file").addOption(schemaOption).addOption(noVersionCheckOption).action(formatAction);
1417
- 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);
1435
+ 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);
1418
1436
  program.addHelpCommand("help [command]", "Display help for a command");
1419
1437
  program.hook("preAction", async (_thisCommand, actionCommand) => {
1420
1438
  if (actionCommand.getOptionValue("versionCheck") !== false) {