nexusql 0.8.1 → 0.9.1
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 +37 -0
- package/dist/cli.js +49 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +42 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
@@ -3217,7 +3217,13 @@ var Database = class _Database {
|
|
|
3217
3217
|
for (const ext of extensions) {
|
|
3218
3218
|
try {
|
|
3219
3219
|
await this.exec(`CREATE EXTENSION IF NOT EXISTS "${ext}";`);
|
|
3220
|
-
} catch {
|
|
3220
|
+
} catch (error) {
|
|
3221
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
3222
|
+
throw new Error(
|
|
3223
|
+
`Failed to install extension "${ext}": ${message}
|
|
3224
|
+
Make sure the extension is installed on your PostgreSQL server.
|
|
3225
|
+
For pgvector: https://github.com/pgvector/pgvector#installation`
|
|
3226
|
+
);
|
|
3221
3227
|
}
|
|
3222
3228
|
}
|
|
3223
3229
|
}
|
|
@@ -4147,6 +4153,40 @@ async function types(options = {}) {
|
|
|
4147
4153
|
}
|
|
4148
4154
|
}
|
|
4149
4155
|
|
|
4156
|
+
// src/commands/test-connection.ts
|
|
4157
|
+
async function testConnection() {
|
|
4158
|
+
console.log(source_default.bold("Testing database connection...\n"));
|
|
4159
|
+
try {
|
|
4160
|
+
const config = await loadConfig();
|
|
4161
|
+
const rawUrl = getDatabaseUrl(config);
|
|
4162
|
+
const parsed = parseAndEncodeDbUrl(rawUrl);
|
|
4163
|
+
console.log(source_default.cyan("Connection details:"));
|
|
4164
|
+
console.log(source_default.dim(" Protocol:"), parsed.protocol);
|
|
4165
|
+
console.log(source_default.dim(" User:"), parsed.user);
|
|
4166
|
+
console.log(source_default.dim(" Host:"), parsed.host);
|
|
4167
|
+
console.log(source_default.dim(" Port:"), parsed.port);
|
|
4168
|
+
console.log(source_default.dim(" Database:"), parsed.database);
|
|
4169
|
+
console.log(source_default.dim(" Password:"), "***" + decodeURIComponent(parsed.password).slice(-4));
|
|
4170
|
+
console.log();
|
|
4171
|
+
const db = new Database(rawUrl);
|
|
4172
|
+
const result = await db.query("SELECT current_user, current_database(), version()");
|
|
4173
|
+
console.log(source_default.green("\u2713 Connection successful!\n"));
|
|
4174
|
+
console.log(source_default.cyan("Server info:"));
|
|
4175
|
+
console.log(source_default.dim(" Current user:"), result.rows[0].current_user);
|
|
4176
|
+
console.log(source_default.dim(" Current database:"), result.rows[0].current_database);
|
|
4177
|
+
console.log(source_default.dim(" PostgreSQL version:"), result.rows[0].version.split(",")[0]);
|
|
4178
|
+
} catch (error) {
|
|
4179
|
+
console.log(source_default.red("\u2717 Connection failed!\n"));
|
|
4180
|
+
console.error(source_default.red("Error:"), error.message);
|
|
4181
|
+
console.log(source_default.yellow("\nTroubleshooting tips:"));
|
|
4182
|
+
console.log(" \u2022 Check DATABASE_URL in your .env file");
|
|
4183
|
+
console.log(" \u2022 Ensure special characters in password are NOT URL-encoded");
|
|
4184
|
+
console.log(" \u2022 Verify the database server is running");
|
|
4185
|
+
console.log(" \u2022 Check host, port, username, and database name");
|
|
4186
|
+
process.exit(1);
|
|
4187
|
+
}
|
|
4188
|
+
}
|
|
4189
|
+
|
|
4150
4190
|
// src/cli.ts
|
|
4151
4191
|
var __filename = fileURLToPath(import.meta.url);
|
|
4152
4192
|
var __dirname = dirname(__filename);
|
|
@@ -4228,5 +4268,13 @@ program.command("types").description("Generate TypeScript definitions from DBML"
|
|
|
4228
4268
|
process.exit(1);
|
|
4229
4269
|
}
|
|
4230
4270
|
});
|
|
4271
|
+
program.command("test-connection").description("Test database connection").action(async () => {
|
|
4272
|
+
try {
|
|
4273
|
+
await testConnection();
|
|
4274
|
+
} catch (error) {
|
|
4275
|
+
console.error("Error:", error.message);
|
|
4276
|
+
process.exit(1);
|
|
4277
|
+
}
|
|
4278
|
+
});
|
|
4231
4279
|
program.parse();
|
|
4232
4280
|
//# sourceMappingURL=cli.js.map
|