nexusql 0.8.1 → 0.9.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/README.md CHANGED
@@ -63,6 +63,7 @@ nexusql migrate
63
63
  | Command | Description |
64
64
  | -------------------------------- | ------------------------------------------- |
65
65
  | `nexusql init` | Initialize configuration and directories |
66
+ | `nexusql test-connection` | Test database connection |
66
67
  | `nexusql gen` | Generate migration SQL from DBML schema |
67
68
  | `nexusql migrate` | Interactive: generate → create file → apply |
68
69
  | `nexusql up` | Apply all pending migrations |
@@ -71,6 +72,42 @@ nexusql migrate
71
72
  | `nexusql types` | Generate TypeScript definitions |
72
73
  | `nexusql mark-applied <version>` | Mark migration as applied without running |
73
74
 
75
+ ### `nexusql test-connection`
76
+
77
+ Test your database connection and verify credentials:
78
+
79
+ ```bash
80
+ nexusql test-connection
81
+ ```
82
+
83
+ This command will:
84
+ - Parse and validate your `DATABASE_URL`
85
+ - Display connection details (protocol, user, host, port, database)
86
+ - Attempt to connect to the database
87
+ - Show server information if successful
88
+
89
+ **Note:** If your password contains special characters like `@`, `#`, `:`, etc., keep them unencoded in your `.env` file. The tool will handle URL encoding automatically.
90
+
91
+ Example output:
92
+ ```
93
+ Testing database connection...
94
+
95
+ Connection details:
96
+ Protocol: postgresql
97
+ User: myuser
98
+ Host: localhost
99
+ Port: 5432
100
+ Database: mydb
101
+ Password: ***@123
102
+
103
+ ✓ Connection successful!
104
+
105
+ Server info:
106
+ Current user: myuser
107
+ Current database: mydb
108
+ PostgreSQL version: PostgreSQL 15.3
109
+ ```
110
+
74
111
  ### `nexusql gen`
75
112
 
76
113
  Generate migration SQL by diffing your current database against the DBML schema.
package/dist/cli.js CHANGED
@@ -4147,6 +4147,40 @@ async function types(options = {}) {
4147
4147
  }
4148
4148
  }
4149
4149
 
4150
+ // src/commands/test-connection.ts
4151
+ async function testConnection() {
4152
+ console.log(source_default.bold("Testing database connection...\n"));
4153
+ try {
4154
+ const config = await loadConfig();
4155
+ const rawUrl = getDatabaseUrl(config);
4156
+ const parsed = parseAndEncodeDbUrl(rawUrl);
4157
+ console.log(source_default.cyan("Connection details:"));
4158
+ console.log(source_default.dim(" Protocol:"), parsed.protocol);
4159
+ console.log(source_default.dim(" User:"), parsed.user);
4160
+ console.log(source_default.dim(" Host:"), parsed.host);
4161
+ console.log(source_default.dim(" Port:"), parsed.port);
4162
+ console.log(source_default.dim(" Database:"), parsed.database);
4163
+ console.log(source_default.dim(" Password:"), "***" + decodeURIComponent(parsed.password).slice(-4));
4164
+ console.log();
4165
+ const db = new Database(rawUrl);
4166
+ const result = await db.query("SELECT current_user, current_database(), version()");
4167
+ console.log(source_default.green("\u2713 Connection successful!\n"));
4168
+ console.log(source_default.cyan("Server info:"));
4169
+ console.log(source_default.dim(" Current user:"), result.rows[0].current_user);
4170
+ console.log(source_default.dim(" Current database:"), result.rows[0].current_database);
4171
+ console.log(source_default.dim(" PostgreSQL version:"), result.rows[0].version.split(",")[0]);
4172
+ } catch (error) {
4173
+ console.log(source_default.red("\u2717 Connection failed!\n"));
4174
+ console.error(source_default.red("Error:"), error.message);
4175
+ console.log(source_default.yellow("\nTroubleshooting tips:"));
4176
+ console.log(" \u2022 Check DATABASE_URL in your .env file");
4177
+ console.log(" \u2022 Ensure special characters in password are NOT URL-encoded");
4178
+ console.log(" \u2022 Verify the database server is running");
4179
+ console.log(" \u2022 Check host, port, username, and database name");
4180
+ process.exit(1);
4181
+ }
4182
+ }
4183
+
4150
4184
  // src/cli.ts
4151
4185
  var __filename = fileURLToPath(import.meta.url);
4152
4186
  var __dirname = dirname(__filename);
@@ -4228,5 +4262,13 @@ program.command("types").description("Generate TypeScript definitions from DBML"
4228
4262
  process.exit(1);
4229
4263
  }
4230
4264
  });
4265
+ program.command("test-connection").description("Test database connection").action(async () => {
4266
+ try {
4267
+ await testConnection();
4268
+ } catch (error) {
4269
+ console.error("Error:", error.message);
4270
+ process.exit(1);
4271
+ }
4272
+ });
4231
4273
  program.parse();
4232
4274
  //# sourceMappingURL=cli.js.map