herdux-cli 0.7.0 → 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 +81 -25
- package/README.pt-BR.md +81 -25
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +29 -2
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cloud.d.ts +3 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +322 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +33 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/core/interfaces/database-engine.interface.d.ts +1 -1
- package/dist/core/interfaces/database-engine.interface.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/infra/cloud/cloud-credential.d.ts +4 -0
- package/dist/infra/cloud/cloud-credential.d.ts.map +1 -0
- package/dist/infra/cloud/cloud-credential.js +16 -0
- package/dist/infra/cloud/cloud-credential.js.map +1 -0
- package/dist/infra/cloud/s3.service.d.ts +23 -0
- package/dist/infra/cloud/s3.service.d.ts.map +1 -0
- package/dist/infra/cloud/s3.service.js +114 -0
- package/dist/infra/cloud/s3.service.js.map +1 -0
- package/dist/infra/config/config.service.d.ts +11 -0
- package/dist/infra/config/config.service.d.ts.map +1 -1
- package/dist/infra/config/config.service.js +16 -0
- package/dist/infra/config/config.service.js.map +1 -1
- package/dist/infra/docker/docker.service.d.ts.map +1 -1
- package/dist/infra/docker/docker.service.js.map +1 -1
- package/dist/infra/engines/engine-factory.d.ts.map +1 -1
- package/dist/infra/engines/engine-factory.js +3 -0
- package/dist/infra/engines/engine-factory.js.map +1 -1
- package/dist/infra/engines/inspect-backup.d.ts +1 -0
- package/dist/infra/engines/inspect-backup.d.ts.map +1 -1
- package/dist/infra/engines/inspect-backup.js +14 -1
- package/dist/infra/engines/inspect-backup.js.map +1 -1
- package/dist/infra/engines/mongodb/mongodb-env.d.ts +11 -0
- package/dist/infra/engines/mongodb/mongodb-env.d.ts.map +1 -0
- package/dist/infra/engines/mongodb/mongodb-env.js +32 -0
- package/dist/infra/engines/mongodb/mongodb-env.js.map +1 -0
- package/dist/infra/engines/mongodb/mongodb.engine.d.ts +21 -0
- package/dist/infra/engines/mongodb/mongodb.engine.d.ts.map +1 -0
- package/dist/infra/engines/mongodb/mongodb.engine.js +282 -0
- package/dist/infra/engines/mongodb/mongodb.engine.js.map +1 -0
- package/dist/infra/engines/resolve-connection.d.ts +17 -0
- package/dist/infra/engines/resolve-connection.d.ts.map +1 -1
- package/dist/infra/engines/resolve-connection.js +4 -4
- package/dist/infra/engines/resolve-connection.js.map +1 -1
- package/package.json +7 -1
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { runCommand } from "../../command-runner.js";
|
|
2
|
+
import { existsSync, mkdirSync } from "fs";
|
|
3
|
+
import { join, resolve, basename } from "path";
|
|
4
|
+
import { execa } from "execa";
|
|
5
|
+
import { checkMongoshClient, checkMongodump } from "./mongodb-env.js";
|
|
6
|
+
// --- Internal Helpers ---
|
|
7
|
+
async function checkBin(binName) {
|
|
8
|
+
try {
|
|
9
|
+
const result = await execa(binName, ["--version"], { timeout: 5000 });
|
|
10
|
+
return { ok: true, version: result.stdout.trim().split("\n")[0] };
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
return { ok: false, error: err.message };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function buildMongoshURI(opts, db) {
|
|
17
|
+
const host = opts.host ?? "localhost";
|
|
18
|
+
const port = opts.port ?? "27017";
|
|
19
|
+
if (opts.user && opts.password) {
|
|
20
|
+
return `mongodb://${encodeURIComponent(opts.user)}:${encodeURIComponent(opts.password)}@${host}:${port}/${db}?authSource=admin`;
|
|
21
|
+
}
|
|
22
|
+
return `mongodb://${host}:${port}/${db}`;
|
|
23
|
+
}
|
|
24
|
+
function buildDumpAuthArgs(opts) {
|
|
25
|
+
const args = [];
|
|
26
|
+
if (opts.user && opts.password) {
|
|
27
|
+
args.push("--username", opts.user, "--password", opts.password, "--authenticationDatabase", "admin");
|
|
28
|
+
}
|
|
29
|
+
return args;
|
|
30
|
+
}
|
|
31
|
+
function generateBackupFilename(dbName) {
|
|
32
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
33
|
+
return `${dbName}_${date}.mongodump`;
|
|
34
|
+
}
|
|
35
|
+
const DEFAULT_SCAN_PORTS = ["27017", "27018", "27019"];
|
|
36
|
+
const SYSTEM_DBS = new Set(["admin", "config", "local"]);
|
|
37
|
+
// --- MongodbEngine ---
|
|
38
|
+
export class MongodbEngine {
|
|
39
|
+
getHealthChecks() {
|
|
40
|
+
return [
|
|
41
|
+
{
|
|
42
|
+
name: "mongosh",
|
|
43
|
+
pendingMessage: "Checking mongosh client...",
|
|
44
|
+
run: async () => {
|
|
45
|
+
const res = await checkBin("mongosh");
|
|
46
|
+
if (res.ok)
|
|
47
|
+
return {
|
|
48
|
+
status: "success",
|
|
49
|
+
message: `mongosh is installed: ${res.version}`,
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
status: "error",
|
|
53
|
+
message: "mongosh is missing. Install it: apt install mongodb-mongosh / brew install mongosh",
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "mongodump",
|
|
59
|
+
pendingMessage: "Checking mongodump...",
|
|
60
|
+
run: async () => {
|
|
61
|
+
const res = await checkBin("mongodump");
|
|
62
|
+
if (res.ok)
|
|
63
|
+
return {
|
|
64
|
+
status: "success",
|
|
65
|
+
message: `mongodump is installed: ${res.version}`,
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
status: "error",
|
|
69
|
+
message: "mongodump is missing. Backups will not work. Install: apt install mongodb-database-tools",
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: "Connection",
|
|
75
|
+
pendingMessage: "Testing database connection...",
|
|
76
|
+
run: async (opts) => {
|
|
77
|
+
try {
|
|
78
|
+
const host = opts.host ?? "localhost";
|
|
79
|
+
const port = opts.port ?? "27017";
|
|
80
|
+
const uri = buildMongoshURI({ ...opts, host, port }, "admin");
|
|
81
|
+
const result = await execa("mongosh", [uri, "--quiet", "--eval", "db.version()"], { timeout: 5000 });
|
|
82
|
+
if (result.exitCode === 0) {
|
|
83
|
+
return {
|
|
84
|
+
status: "success",
|
|
85
|
+
message: `Successfully connected to MongoDB at ${host}:${port}`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
status: "error",
|
|
90
|
+
message: `Connection check returned exit code ${result.exitCode}`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err.message?.includes("Authentication") ||
|
|
95
|
+
err.message?.includes("authentication") ||
|
|
96
|
+
err.message?.includes("Unauthorized")) {
|
|
97
|
+
return {
|
|
98
|
+
status: "error",
|
|
99
|
+
message: `Authentication failed. Check your username and password.`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
status: "error",
|
|
104
|
+
message: "Could not connect to the database. Make sure MongoDB is running and port is open.",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
getEngineName() {
|
|
112
|
+
return "MongoDB";
|
|
113
|
+
}
|
|
114
|
+
getDefaultConnectionOptions() {
|
|
115
|
+
return { host: "localhost", port: "27017" };
|
|
116
|
+
}
|
|
117
|
+
async checkClientVersion() {
|
|
118
|
+
return await checkMongoshClient();
|
|
119
|
+
}
|
|
120
|
+
async checkBackupRequirements() {
|
|
121
|
+
await checkMongodump();
|
|
122
|
+
}
|
|
123
|
+
async discoverInstances(opts = {}) {
|
|
124
|
+
const instances = [];
|
|
125
|
+
const host = opts.host ?? "localhost";
|
|
126
|
+
const checks = DEFAULT_SCAN_PORTS.map(async (port) => {
|
|
127
|
+
try {
|
|
128
|
+
const uri = buildMongoshURI({ ...opts, host, port }, "admin");
|
|
129
|
+
const result = await execa("mongosh", [uri, "--quiet", "--eval", "db.version()"], { timeout: 3000 });
|
|
130
|
+
if (result.exitCode === 0) {
|
|
131
|
+
const version = result.stdout.trim() || "running";
|
|
132
|
+
instances.push({
|
|
133
|
+
port,
|
|
134
|
+
version: `MongoDB ${version}`,
|
|
135
|
+
status: "running",
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Port not available — skip
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
await Promise.all(checks);
|
|
144
|
+
instances.sort((a, b) => parseInt(a.port) - parseInt(b.port));
|
|
145
|
+
return instances;
|
|
146
|
+
}
|
|
147
|
+
async getServerVersion(opts = {}) {
|
|
148
|
+
const host = opts.host ?? "localhost";
|
|
149
|
+
const port = opts.port ?? "27017";
|
|
150
|
+
const uri = buildMongoshURI({ ...opts, host, port }, "admin");
|
|
151
|
+
const result = await runCommand("mongosh", [uri, "--quiet", "--eval", "db.version()"], { timeout: 5000 });
|
|
152
|
+
if (result.exitCode !== 0)
|
|
153
|
+
return null;
|
|
154
|
+
const output = result.stdout.trim();
|
|
155
|
+
return output ? `MongoDB ${output}` : null;
|
|
156
|
+
}
|
|
157
|
+
async listDatabases(opts = {}) {
|
|
158
|
+
const host = opts.host ?? "localhost";
|
|
159
|
+
const port = opts.port ?? "27017";
|
|
160
|
+
const uri = buildMongoshURI({ ...opts, host, port }, "admin");
|
|
161
|
+
const evalExpr = opts.includeSize
|
|
162
|
+
? `JSON.stringify(db.adminCommand({listDatabases:1}).databases.map(d=>({name:d.name,size:Math.round(d.sizeOnDisk/1024)+' kB'})))`
|
|
163
|
+
: `JSON.stringify(db.adminCommand({listDatabases:1}).databases.map(d=>({name:d.name})))`;
|
|
164
|
+
const result = await runCommand("mongosh", [uri, "--quiet", "--eval", evalExpr], {
|
|
165
|
+
timeout: 60000,
|
|
166
|
+
});
|
|
167
|
+
if (result.exitCode !== 0) {
|
|
168
|
+
const errMsg = result.stderr;
|
|
169
|
+
if (errMsg.includes("Authentication") ||
|
|
170
|
+
errMsg.includes("authentication") ||
|
|
171
|
+
errMsg.includes("Unauthorized")) {
|
|
172
|
+
throw new Error(`Authentication failed. Use --password to provide credentials:\n herdux --engine mongodb --password <password> list`);
|
|
173
|
+
}
|
|
174
|
+
throw new Error(`Failed to list databases: ${errMsg}`);
|
|
175
|
+
}
|
|
176
|
+
const output = result.stdout.trim();
|
|
177
|
+
if (!output || output === "null" || output === "[]")
|
|
178
|
+
return [];
|
|
179
|
+
try {
|
|
180
|
+
const dbs = JSON.parse(output);
|
|
181
|
+
return dbs
|
|
182
|
+
.filter((db) => !SYSTEM_DBS.has(db.name))
|
|
183
|
+
.map((db) => ({ name: db.name, size: db.size }));
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
throw new Error(`Failed to parse database list: ${output}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async createDatabase(name, opts = {}) {
|
|
190
|
+
const existing = await this.listDatabases(opts);
|
|
191
|
+
if (existing.some((db) => db.name === name)) {
|
|
192
|
+
throw new Error(`Database "${name}" already exists.`);
|
|
193
|
+
}
|
|
194
|
+
const host = opts.host ?? "localhost";
|
|
195
|
+
const port = opts.port ?? "27017";
|
|
196
|
+
const uri = buildMongoshURI({ ...opts, host, port }, name);
|
|
197
|
+
const result = await runCommand("mongosh", [
|
|
198
|
+
uri,
|
|
199
|
+
"--quiet",
|
|
200
|
+
"--eval",
|
|
201
|
+
"db.createCollection('_herdux_init'); db.dropCollection('_herdux_init')",
|
|
202
|
+
], { timeout: 10000 });
|
|
203
|
+
if (result.exitCode !== 0) {
|
|
204
|
+
const errMsg = result.stderr;
|
|
205
|
+
if (errMsg.includes("Authentication") ||
|
|
206
|
+
errMsg.includes("authentication") ||
|
|
207
|
+
errMsg.includes("Unauthorized")) {
|
|
208
|
+
throw new Error(`Authentication failed. Use --password to provide credentials:\n herdux --engine mongodb --password <password> create "${name}"`);
|
|
209
|
+
}
|
|
210
|
+
throw new Error(`Failed to create database "${name}": ${errMsg}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async dropDatabase(name, opts = {}) {
|
|
214
|
+
const host = opts.host ?? "localhost";
|
|
215
|
+
const port = opts.port ?? "27017";
|
|
216
|
+
const uri = buildMongoshURI({ ...opts, host, port }, name);
|
|
217
|
+
const result = await runCommand("mongosh", [uri, "--quiet", "--eval", "db.dropDatabase()"], { timeout: 30000 });
|
|
218
|
+
if (result.exitCode !== 0) {
|
|
219
|
+
const errMsg = result.stderr;
|
|
220
|
+
if (errMsg.includes("Authentication") ||
|
|
221
|
+
errMsg.includes("authentication") ||
|
|
222
|
+
errMsg.includes("Unauthorized")) {
|
|
223
|
+
throw new Error(`Authentication failed. Use --password to provide credentials:\n herdux --engine mongodb --password <password> drop "${name}"`);
|
|
224
|
+
}
|
|
225
|
+
throw new Error(`Failed to drop database "${name}": ${errMsg}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async backupDatabase(dbName, outputDir = "./backups", opts = {}, format = "custom") {
|
|
229
|
+
if (format && format !== "custom") {
|
|
230
|
+
throw new Error(`MongoDB does not support "${format}" format. Only archive format is available.\n Remove --format or use: --format custom`);
|
|
231
|
+
}
|
|
232
|
+
const resolvedDir = resolve(outputDir);
|
|
233
|
+
if (!existsSync(resolvedDir)) {
|
|
234
|
+
mkdirSync(resolvedDir, { recursive: true });
|
|
235
|
+
}
|
|
236
|
+
const filename = generateBackupFilename(dbName);
|
|
237
|
+
const outputPath = join(resolvedDir, filename);
|
|
238
|
+
const host = opts.host ?? "localhost";
|
|
239
|
+
const port = opts.port ?? "27017";
|
|
240
|
+
const args = [
|
|
241
|
+
`--host=${host}`,
|
|
242
|
+
`--port=${port}`,
|
|
243
|
+
`--db=${dbName}`,
|
|
244
|
+
`--archive=${outputPath}`,
|
|
245
|
+
"--gzip",
|
|
246
|
+
...buildDumpAuthArgs(opts),
|
|
247
|
+
];
|
|
248
|
+
const result = await runCommand("mongodump", args, { timeout: 0 });
|
|
249
|
+
if (result.exitCode !== 0) {
|
|
250
|
+
throw new Error(`Backup failed for "${dbName}": ${result.stderr}`);
|
|
251
|
+
}
|
|
252
|
+
return outputPath;
|
|
253
|
+
}
|
|
254
|
+
async restoreDatabase(filePath, dbName, opts = {}, _format, _clean) {
|
|
255
|
+
const resolvedPath = resolve(filePath);
|
|
256
|
+
if (!existsSync(resolvedPath)) {
|
|
257
|
+
throw new Error(`Backup file not found: ${resolvedPath}`);
|
|
258
|
+
}
|
|
259
|
+
const host = opts.host ?? "localhost";
|
|
260
|
+
const port = opts.port ?? "27017";
|
|
261
|
+
// Extract original DB name from filename (e.g., "mydb_2026-03-01.mongodump" → "mydb")
|
|
262
|
+
const sourceName = basename(resolvedPath)
|
|
263
|
+
.replace(/\.mongodump$/, "")
|
|
264
|
+
.replace(/_\d{4}-\d{2}-\d{2}$/, "");
|
|
265
|
+
const args = [
|
|
266
|
+
`--host=${host}`,
|
|
267
|
+
`--port=${port}`,
|
|
268
|
+
`--archive=${resolvedPath}`,
|
|
269
|
+
"--gzip",
|
|
270
|
+
...buildDumpAuthArgs(opts),
|
|
271
|
+
];
|
|
272
|
+
// Remap namespaces if target name differs from source name
|
|
273
|
+
if (sourceName && sourceName !== dbName) {
|
|
274
|
+
args.push(`--nsFrom=${sourceName}.*`, `--nsTo=${dbName}.*`);
|
|
275
|
+
}
|
|
276
|
+
const result = await runCommand("mongorestore", args, { timeout: 0 });
|
|
277
|
+
if (result.exitCode !== 0) {
|
|
278
|
+
throw new Error(`Restore failed: ${result.stderr}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=mongodb.engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.engine.js","sourceRoot":"","sources":["../../../../src/infra/engines/mongodb/mongodb.engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
import type { ConnectionOptions, EngineType, IDatabaseEngine } from "../../core/interfaces/database-engine.interface.js";
|
|
2
|
+
import type { ServerProfile } from "../config/config.service.js";
|
|
2
3
|
export interface ResolvedConnection {
|
|
3
4
|
engine: IDatabaseEngine;
|
|
4
5
|
engineType: EngineType;
|
|
5
6
|
opts: ConnectionOptions;
|
|
6
7
|
}
|
|
8
|
+
type SavedDefaults = ConnectionOptions & {
|
|
9
|
+
output?: string;
|
|
10
|
+
engine?: EngineType;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Presents an interactive prompt for the user to select a server profile.
|
|
14
|
+
* Returns the selected server name, or undefined if the user selected
|
|
15
|
+
* the default connection or no options were available.
|
|
16
|
+
*/
|
|
17
|
+
export declare function _promptServerSelection(servers: Record<string, ServerProfile>, serverNames: string[], savedDefaults: SavedDefaults, requestedEngine?: EngineType): Promise<string | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Determines the engine type from the CLI flag, server profile, or config defaults.
|
|
20
|
+
* Priority: CLI flag > server profile engine > config default engine > "postgres"
|
|
21
|
+
*/
|
|
22
|
+
export declare function _resolveEngineType(rawEngine: EngineType | undefined, serverName: string | undefined, savedDefaults: SavedDefaults): EngineType;
|
|
7
23
|
/**
|
|
8
24
|
* Resolves both the database engine and connection options together.
|
|
9
25
|
*
|
|
@@ -23,4 +39,5 @@ export declare function resolveEngineAndConnection(rawOpts: ConnectionOptions &
|
|
|
23
39
|
engine?: EngineType;
|
|
24
40
|
server?: string;
|
|
25
41
|
}): Promise<ResolvedConnection>;
|
|
42
|
+
export {};
|
|
26
43
|
//# sourceMappingURL=resolve-connection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-connection.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,eAAe,EAChB,MAAM,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-connection.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,eAAe,EAChB,MAAM,oDAAoD,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAKjE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAID,KAAK,aAAa,GAAG,iBAAiB,GAAG;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACtC,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,aAAa,EAC5B,eAAe,CAAC,EAAE,UAAU,GAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiD7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,aAAa,GAC3B,UAAU,CAOZ;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iBAAiB,GAAG;IAAE,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,OAAO,CAAC,kBAAkB,CAAC,CA0J7B"}
|
|
@@ -9,7 +9,7 @@ import { logger } from "../../presentation/logger.js";
|
|
|
9
9
|
* Returns the selected server name, or undefined if the user selected
|
|
10
10
|
* the default connection or no options were available.
|
|
11
11
|
*/
|
|
12
|
-
async function
|
|
12
|
+
export async function _promptServerSelection(servers, serverNames, savedDefaults, requestedEngine) {
|
|
13
13
|
const dEngine = savedDefaults.engine ?? "postgres";
|
|
14
14
|
const isDefaultCompatible = !requestedEngine || dEngine === requestedEngine;
|
|
15
15
|
const hasDefaults = Object.keys(savedDefaults).length > 0;
|
|
@@ -55,7 +55,7 @@ async function promptServerSelection(servers, serverNames, savedDefaults, reques
|
|
|
55
55
|
* Determines the engine type from the CLI flag, server profile, or config defaults.
|
|
56
56
|
* Priority: CLI flag > server profile engine > config default engine > "postgres"
|
|
57
57
|
*/
|
|
58
|
-
function
|
|
58
|
+
export function _resolveEngineType(rawEngine, serverName, savedDefaults) {
|
|
59
59
|
if (rawEngine)
|
|
60
60
|
return rawEngine;
|
|
61
61
|
if (serverName) {
|
|
@@ -91,13 +91,13 @@ export async function resolveEngineAndConnection(rawOpts) {
|
|
|
91
91
|
if (rawOpts.engine) {
|
|
92
92
|
serverNames = serverNames.filter((name) => servers[name].engine === rawOpts.engine);
|
|
93
93
|
}
|
|
94
|
-
const selected = await
|
|
94
|
+
const selected = await _promptServerSelection(servers, serverNames, savedDefaults, rawOpts.engine);
|
|
95
95
|
if (selected !== undefined) {
|
|
96
96
|
serverName = selected;
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
// --- Step 2: Determine engine type ---
|
|
100
|
-
const engineType =
|
|
100
|
+
const engineType = _resolveEngineType(rawOpts.engine, serverName, savedDefaults);
|
|
101
101
|
const engine = createEngine(engineType);
|
|
102
102
|
// --- Step 3: Resolve connection options ---
|
|
103
103
|
if (serverName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-connection.js","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMnD,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAiBtD;;;;GAIG;AACH,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"resolve-connection.js","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "herdux-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Modern Database workflow CLI focused on developer experience, safety, and automation.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,12 +35,16 @@
|
|
|
35
35
|
"test:e2e:mysql:up": "docker compose -f infra/docker/compose.e2e-mysql.yml up -d --wait",
|
|
36
36
|
"test:e2e:mysql:down": "docker compose -f infra/docker/compose.e2e-mysql.yml down -v --remove-orphans",
|
|
37
37
|
"test:e2e:sqlite": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js -- tests/e2e/sqlite/",
|
|
38
|
+
"test:e2e:mongodb": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js -- tests/e2e/mongodb/",
|
|
39
|
+
"test:e2e:mongodb:up": "docker compose -f infra/docker/compose.e2e-mongodb.yml up -d --wait",
|
|
40
|
+
"test:e2e:mongodb:down": "docker compose -f infra/docker/compose.e2e-mongodb.yml down -v --remove-orphans",
|
|
38
41
|
"prepare": "husky"
|
|
39
42
|
},
|
|
40
43
|
"keywords": [
|
|
41
44
|
"postgresql",
|
|
42
45
|
"mysql",
|
|
43
46
|
"sqlite",
|
|
47
|
+
"mongodb",
|
|
44
48
|
"cli",
|
|
45
49
|
"database",
|
|
46
50
|
"backup",
|
|
@@ -59,6 +63,8 @@
|
|
|
59
63
|
"author": "Eduardo Zaniboni",
|
|
60
64
|
"license": "MIT",
|
|
61
65
|
"dependencies": {
|
|
66
|
+
"@aws-sdk/client-s3": "^3.1000.0",
|
|
67
|
+
"@aws-sdk/lib-storage": "^3.1000.0",
|
|
62
68
|
"chalk": "^5.6.2",
|
|
63
69
|
"commander": "^12.1.0",
|
|
64
70
|
"execa": "^9.6.1",
|