herdux-cli 0.8.2 → 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
@@ -12,12 +12,13 @@
12
12
 
13
13
  A fast, interactive CLI that removes friction from daily local database workflows, especially when juggling multiple instances and large datasets.
14
14
 
15
- ![Version](https://img.shields.io/badge/version-0.8.2-blue.svg)
15
+ ![Version](https://img.shields.io/badge/version-0.9.0-blue.svg)
16
16
  ![License](https://img.shields.io/badge/license-MIT-green.svg)
17
17
  ![Node](https://img.shields.io/badge/node-18%2B-43853d.svg)
18
18
  ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-316192?style=flat&logo=postgresql&logoColor=white)
19
19
  ![MySQL](https://img.shields.io/badge/MySQL-4479A1?style=flat&logo=mysql&logoColor=white)
20
20
  ![SQLite](https://img.shields.io/badge/SQLite-003B57?style=flat&logo=sqlite&logoColor=white)
21
+ ![MongoDB](https://img.shields.io/badge/MongoDB-47A248?style=flat&logo=mongodb&logoColor=white)
21
22
  [![GitHub Sponsors](https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?style=flat&logo=github)](https://github.com/sponsors/eduardozaniboni)
22
23
  [![Buy Me A Coffee](https://img.shields.io/badge/Buy_Me_A_Coffee-FFDD00?style=flat&logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/eduardozaniboni)
23
24
 
@@ -39,11 +40,12 @@ herdux list
39
40
 
40
41
  ## Supported Engines
41
42
 
42
- | Engine | Status | Client Tools Required |
43
- | ---------- | ------ | ------------------------------- |
44
- | PostgreSQL | ✅ | `psql`, `pg_dump`, `pg_restore` |
45
- | MySQL | ✅ | `mysql`, `mysqldump` |
46
- | SQLite | ✅ | `sqlite3` |
43
+ | Engine | Status | Client Tools Required |
44
+ | ---------- | ------ | -------------------------------------- |
45
+ | PostgreSQL | ✅ | `psql`, `pg_dump`, `pg_restore` |
46
+ | MySQL | ✅ | `mysql`, `mysqldump` |
47
+ | SQLite | ✅ | `sqlite3` |
48
+ | MongoDB | ✅ | `mongosh`, `mongodump`, `mongorestore` |
47
49
 
48
50
  Use `--engine <name>` or configure the engine in a saved profile. PostgreSQL is the default.
49
51
 
@@ -51,6 +53,7 @@ Use `--engine <name>` or configure the engine in a saved profile. PostgreSQL is
51
53
  herdux list # PostgreSQL (default)
52
54
  herdux --engine mysql list # MySQL
53
55
  herdux --engine sqlite list # SQLite (file-based, no server required)
56
+ herdux --engine mongodb list # MongoDB
54
57
  herdux list -s my-profile # Using a saved server profile
55
58
  ```
56
59
 
@@ -91,6 +94,7 @@ Same commands. Any engine. Fewer flags. Fewer mistakes. Zero terminal fatigue.
91
94
  - **For PostgreSQL:** `psql`, `pg_dump`, `pg_restore` installed and in your `PATH`
92
95
  - **For MySQL:** `mysql`, `mysqldump` installed and in your `PATH`
93
96
  - **For SQLite:** `sqlite3` installed and in your `PATH`
97
+ - **For MongoDB:** `mongosh`, `mongodump`, `mongorestore` installed and in your `PATH`
94
98
 
95
99
  > [!TIP]
96
100
  > Run `herdux doctor` after installation to verify everything is correctly set up.
@@ -191,8 +195,8 @@ Aborts immediately if any safety backup fails. No data is dropped without a conf
191
195
  Creates a timestamped backup in `~/.herdux/backups/` by default.
192
196
 
193
197
  ```bash
194
- herdux backup mydb # Engine-native format (.dump for PG, .db for SQLite, .sql for MySQL)
195
- herdux backup mydb --format plain # Plain SQL (.sql)
198
+ herdux backup mydb # Engine-native format (.dump for PG, .db for SQLite, .sql for MySQL, .mongodump for MongoDB)
199
+ herdux backup mydb --format plain # Plain SQL (.sql) — not supported by MongoDB
196
200
  herdux backup mydb --drop # Backup, then prompt to drop
197
201
  herdux backup mydb --drop --yes # Backup + drop, no confirmation
198
202
  herdux backup mydb -o ./my-backups # Custom output directory
@@ -232,18 +236,20 @@ The target database is automatically created if it does not exist.
232
236
 
233
237
  Inspects the contents of a backup file without connecting to a database. Completely offline.
234
238
 
235
- | Extension | Output |
236
- | ----------------- | ---------------------------------------------------------------------- |
237
- | `.dump` | PostgreSQL custom format: full Table of Contents (`pg_restore --list`) |
238
- | `.tar` | PostgreSQL tar format: full Table of Contents (`pg_restore --list`) |
239
- | `.sql` | Plain SQL (any engine): CREATE TABLE, VIEW, INDEX, SEQUENCE statements |
240
- | `.db` / `.sqlite` | SQLite database file: schema (`sqlite3 .schema`) |
239
+ | Extension | Output |
240
+ | ----------------- | ---------------------------------------------------------------------------- |
241
+ | `.dump` | PostgreSQL custom format: full Table of Contents (`pg_restore --list`) |
242
+ | `.tar` | PostgreSQL tar format: full Table of Contents (`pg_restore --list`) |
243
+ | `.sql` | Plain SQL (any engine): CREATE TABLE, VIEW, INDEX, SEQUENCE statements |
244
+ | `.db` / `.sqlite` | SQLite database file: schema (`sqlite3 .schema`) |
245
+ | `.mongodump` | MongoDB archive: collection list dry-run (`mongorestore --archive --dryRun`) |
241
246
 
242
247
  ```bash
243
- hdx inspect backup.dump # Table of Contents of a PostgreSQL custom dump
244
- hdx inspect backup.tar # Table of Contents of a PostgreSQL tar dump
245
- hdx inspect export.sql # CREATE statements extracted from plain SQL
246
- hdx inspect mydb.db # SQLite schema
248
+ hdx inspect backup.dump # Table of Contents of a PostgreSQL custom dump
249
+ hdx inspect backup.tar # Table of Contents of a PostgreSQL tar dump
250
+ hdx inspect export.sql # CREATE statements extracted from plain SQL
251
+ hdx inspect mydb.db # SQLite schema
252
+ hdx inspect mydb_2026-03-04.mongodump # MongoDB archive collection listing
247
253
  ```
248
254
 
249
255
  ---
package/README.pt-BR.md CHANGED
@@ -12,12 +12,13 @@
12
12
 
13
13
  Uma CLI rápida e interativa que remove a fricção dos workflows diários com bancos de dados locais, especialmente ao lidar com múltiplas instâncias e grandes datasets.
14
14
 
15
- ![Version](https://img.shields.io/badge/version-0.8.2-blue.svg)
15
+ ![Version](https://img.shields.io/badge/version-0.9.0-blue.svg)
16
16
  ![License](https://img.shields.io/badge/license-MIT-green.svg)
17
17
  ![Node](https://img.shields.io/badge/node-18%2B-43853d.svg)
18
18
  ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-316192?style=flat&logo=postgresql&logoColor=white)
19
19
  ![MySQL](https://img.shields.io/badge/MySQL-4479A1?style=flat&logo=mysql&logoColor=white)
20
20
  ![SQLite](https://img.shields.io/badge/SQLite-003B57?style=flat&logo=sqlite&logoColor=white)
21
+ ![MongoDB](https://img.shields.io/badge/MongoDB-47A248?style=flat&logo=mongodb&logoColor=white)
21
22
  [![GitHub Sponsors](https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?style=flat&logo=github)](https://github.com/sponsors/eduardozaniboni)
22
23
  [![Buy Me A Coffee](https://img.shields.io/badge/Buy_Me_A_Coffee-FFDD00?style=flat&logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/eduardozaniboni)
23
24
 
@@ -39,11 +40,12 @@ herdux list
39
40
 
40
41
  ## Engines Suportadas
41
42
 
42
- | Engine | Status | Ferramentas Cliente Necessárias |
43
- | ---------- | ------ | ------------------------------- |
44
- | PostgreSQL | ✅ | `psql`, `pg_dump`, `pg_restore` |
45
- | MySQL | ✅ | `mysql`, `mysqldump` |
46
- | SQLite | ✅ | `sqlite3` |
43
+ | Engine | Status | Ferramentas Cliente Necessárias |
44
+ | ---------- | ------ | -------------------------------------- |
45
+ | PostgreSQL | ✅ | `psql`, `pg_dump`, `pg_restore` |
46
+ | MySQL | ✅ | `mysql`, `mysqldump` |
47
+ | SQLite | ✅ | `sqlite3` |
48
+ | MongoDB | ✅ | `mongosh`, `mongodump`, `mongorestore` |
47
49
 
48
50
  Use `--engine <nome>` ou configure a engine em um perfil salvo. PostgreSQL é o padrão.
49
51
 
@@ -51,6 +53,7 @@ Use `--engine <nome>` ou configure a engine em um perfil salvo. PostgreSQL é o
51
53
  herdux list # PostgreSQL (padrão)
52
54
  herdux --engine mysql list # MySQL
53
55
  herdux --engine sqlite list # SQLite (baseado em arquivos, sem servidor)
56
+ herdux --engine mongodb list # MongoDB
54
57
  herdux list -s meu-perfil # Usando um perfil de servidor salvo
55
58
  ```
56
59
 
@@ -91,6 +94,7 @@ Mesmos comandos. Qualquer engine. Menos flags. Menos erros. Zero fadiga de termi
91
94
  - **Para PostgreSQL:** `psql`, `pg_dump`, `pg_restore` instalados e no `PATH`
92
95
  - **Para MySQL:** `mysql`, `mysqldump` instalados e no `PATH`
93
96
  - **Para SQLite:** `sqlite3` instalado e no `PATH`
97
+ - **Para MongoDB:** `mongosh`, `mongodump`, `mongorestore` instalados e no `PATH`
94
98
 
95
99
  > [!TIP]
96
100
  > Execute `herdux doctor` após a instalação para verificar se tudo está configurado corretamente.
@@ -191,7 +195,7 @@ Aborta imediatamente se algum backup de segurança falhar. Nenhum dado é removi
191
195
  Cria um backup com timestamp em `~/.herdux/backups/` por padrão.
192
196
 
193
197
  ```bash
194
- herdux backup mydb # Formato nativo da engine (.dump para PG, .db para SQLite, .sql para MySQL)
198
+ herdux backup mydb # Formato nativo da engine (.dump para PG, .db para SQLite, .sql para MySQL, .mongodump para MongoDB)
195
199
  herdux backup mydb --format plain # SQL puro (.sql)
196
200
  herdux backup mydb --drop # Backup e depois pergunta se quer dropar
197
201
  herdux backup mydb --drop --yes # Backup + drop sem confirmacao
@@ -232,18 +236,20 @@ O banco de dados é criado automaticamente se não existir.
232
236
 
233
237
  Inspeciona o conteúdo de um arquivo de backup sem se conectar ao banco de dados. Funciona completamente offline.
234
238
 
235
- | Extensão | Output |
236
- | ----------------- | ------------------------------------------------------------------------------ |
237
- | `.dump` | Formato custom do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
238
- | `.tar` | Formato tar do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
239
- | `.sql` | SQL puro (qualquer engine): declarações CREATE TABLE, VIEW, INDEX, SEQUENCE |
240
- | `.db` / `.sqlite` | Arquivo SQLite: schema (`sqlite3 .schema`) |
239
+ | Extensão | Output |
240
+ | ----------------- | ---------------------------------------------------------------------------------------- |
241
+ | `.dump` | Formato custom do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
242
+ | `.tar` | Formato tar do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
243
+ | `.sql` | SQL puro (qualquer engine): declarações CREATE TABLE, VIEW, INDEX, SEQUENCE |
244
+ | `.db` / `.sqlite` | Arquivo SQLite: schema (`sqlite3 .schema`) |
245
+ | `.mongodump` | Archive MongoDB: listagem de collections via dry-run (`mongorestore --archive --dryRun`) |
241
246
 
242
247
  ```bash
243
- hdx inspect backup.dump # Table of Contents de um dump custom do PostgreSQL
244
- hdx inspect backup.tar # Table of Contents de um dump tar do PostgreSQL
245
- hdx inspect export.sql # CREATE statements extraídos de SQL puro
246
- hdx inspect mydb.db # Schema do SQLite
248
+ hdx inspect backup.dump # Table of Contents de um dump custom do PostgreSQL
249
+ hdx inspect backup.tar # Table of Contents de um dump tar do PostgreSQL
250
+ hdx inspect export.sql # CREATE statements extraídos de SQL puro
251
+ hdx inspect mydb.db # Schema do SQLite
252
+ hdx inspect mydb_2026-03-04.mongodump # Listagem de collections do archive MongoDB
247
253
  ```
248
254
 
249
255
  ---
@@ -9,7 +9,7 @@ export interface DatabaseInfo {
9
9
  encoding?: string;
10
10
  size?: string;
11
11
  }
12
- export type EngineType = "postgres" | "mysql" | "sqlite";
12
+ export type EngineType = "postgres" | "mysql" | "sqlite" | "mongodb";
13
13
  export interface ConnectionOptions {
14
14
  host?: string;
15
15
  port?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"database-engine.interface.d.ts","sourceRoot":"","sources":["../../../src/core/interfaces/database-engine.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE,CAAC;IAEjC;;OAEG;IACH,aAAa,IAAI,MAAM,CAAC;IAExB;;OAEG;IACH,2BAA2B,IAAI,iBAAiB,CAAC;IAEjD;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtC;;;OAGG;IACH,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;OAEG;IACH,iBAAiB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEzE;;OAEG;IACH,gBAAgB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEnE;;OAEG;IACH,aAAa,CACX,IAAI,CAAC,EAAE,iBAAiB,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACnD,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3B;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;OAGG;IACH,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,iBAAiB,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;OAEG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,iBAAiB,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO,GACd,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CAChE"}
1
+ {"version":3,"file":"database-engine.interface.d.ts","sourceRoot":"","sources":["../../../src/core/interfaces/database-engine.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE,CAAC;IAEjC;;OAEG;IACH,aAAa,IAAI,MAAM,CAAC;IAExB;;OAEG;IACH,2BAA2B,IAAI,iBAAiB,CAAC;IAEjD;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtC;;;OAGG;IACH,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;OAEG;IACH,iBAAiB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEzE;;OAEG;IACH,gBAAgB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEnE;;OAEG;IACH,aAAa,CACX,IAAI,CAAC,EAAE,iBAAiB,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACnD,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3B;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;OAGG;IACH,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,iBAAiB,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;OAEG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,iBAAiB,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO,GACd,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CAChE"}
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ program
30
30
  .option("-U, --user <user>", "Database user")
31
31
  .option("-W, --password <password>", "Database password")
32
32
  .option("-s, --server <name>", "Use a named server profile from config")
33
- .option("-e, --engine <type>", "Database engine (postgres, mysql)")
33
+ .option("-e, --engine <type>", "Database engine (postgres, mysql, sqlite, mongodb)")
34
34
  .addHelpText("after", `
35
35
  Examples:
36
36
  hdx list
@@ -49,7 +49,7 @@ program.hook("preAction", () => {
49
49
  process.exit(1);
50
50
  }
51
51
  }
52
- const validEngines = ["postgres", "mysql", "sqlite"];
52
+ const validEngines = ["postgres", "mysql", "sqlite", "mongodb"];
53
53
  if (opts.engine !== undefined && !validEngines.includes(opts.engine)) {
54
54
  console.error(chalk.red(`\n✖ Unknown engine "${opts.engine}". Valid engines: ${validEngines.join(", ")}.\n`));
55
55
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine-factory.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/engine-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACX,MAAM,oDAAoD,CAAC;AAE5D,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,eAAe,CAU/D"}
1
+ {"version":3,"file":"engine-factory.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/engine-factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACX,MAAM,oDAAoD,CAAC;AAE5D,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,eAAe,CAY/D"}
@@ -1,12 +1,15 @@
1
1
  import { PostgresEngine } from "./postgres/postgres.engine.js";
2
2
  import { MysqlEngine } from "./mysql/mysql.engine.js";
3
3
  import { SqliteEngine } from "./sqlite/sqlite.engine.js";
4
+ import { MongodbEngine } from "./mongodb/mongodb.engine.js";
4
5
  export function createEngine(type) {
5
6
  switch (type) {
6
7
  case "mysql":
7
8
  return new MysqlEngine();
8
9
  case "sqlite":
9
10
  return new SqliteEngine();
11
+ case "mongodb":
12
+ return new MongodbEngine();
10
13
  case "postgres":
11
14
  default:
12
15
  return new PostgresEngine();
@@ -1 +1 @@
1
- {"version":3,"file":"engine-factory.js","sourceRoot":"","sources":["../../../src/infra/engines/engine-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAMzD,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,KAAK,QAAQ;YACX,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,IAAI,cAAc,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"engine-factory.js","sourceRoot":"","sources":["../../../src/infra/engines/engine-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAM5D,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,KAAK,QAAQ;YACX,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,KAAK,SAAS;YACZ,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,IAAI,cAAc,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -5,6 +5,7 @@
5
5
  * .dump / .tar PostgreSQL dump formats — pg_restore --list
6
6
  * .sql Plain SQL (any engine) — extracts CREATE statements
7
7
  * .db / .sqlite SQLite database file — sqlite3 .schema
8
+ * .mongodump MongoDB archive dump — mongorestore --archive --dryRun
8
9
  *
9
10
  * @throws if the file does not exist, the extension is unsupported, or the
10
11
  * underlying tool returns a non-zero exit code.
@@ -1 +1 @@
1
- {"version":3,"file":"inspect-backup.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/inspect-backup.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBzE"}
1
+ {"version":3,"file":"inspect-backup.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/inspect-backup.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BzE"}
@@ -8,6 +8,7 @@ import { execa } from "execa";
8
8
  * .dump / .tar PostgreSQL dump formats — pg_restore --list
9
9
  * .sql Plain SQL (any engine) — extracts CREATE statements
10
10
  * .db / .sqlite SQLite database file — sqlite3 .schema
11
+ * .mongodump MongoDB archive dump — mongorestore --archive --dryRun
11
12
  *
12
13
  * @throws if the file does not exist, the extension is unsupported, or the
13
14
  * underlying tool returns a non-zero exit code.
@@ -27,7 +28,10 @@ export async function inspectBackupFile(filePath) {
27
28
  if (ext === ".db" || ext === ".sqlite") {
28
29
  return inspectSqliteFile(resolvedPath);
29
30
  }
30
- throw new Error(`Unsupported file type "${ext}". Supported extensions: .dump / .tar (PostgreSQL), .sql (any engine), .db / .sqlite (SQLite)`);
31
+ if (ext === ".mongodump") {
32
+ return inspectMongodump(resolvedPath);
33
+ }
34
+ throw new Error(`Unsupported file type "${ext}". Supported extensions: .dump / .tar (PostgreSQL), .sql (any engine), .db / .sqlite (SQLite), .mongodump (MongoDB)`);
31
35
  }
32
36
  async function inspectPostgresDump(filePath) {
33
37
  const result = await execa("pg_restore", ["--list", filePath], {
@@ -94,4 +98,13 @@ async function inspectSqliteFile(filePath) {
94
98
  const schema = result.stdout.trim();
95
99
  return schema || "(empty database — no tables defined)";
96
100
  }
101
+ async function inspectMongodump(filePath) {
102
+ const result = await execa("mongorestore", [`--archive=${filePath}`, "--gzip", "--dryRun", "--verbose"], { reject: false });
103
+ if (result.exitCode !== 0) {
104
+ throw new Error(`mongorestore failed: ${result.stderr || "unknown error"}\n\nMake sure mongorestore is installed and the file is a valid MongoDB archive dump.`);
105
+ }
106
+ // mongorestore --dryRun outputs collection info to stderr
107
+ const output = (result.stderr || result.stdout).trim();
108
+ return output || "(empty archive — no collections found)";
109
+ }
97
110
  //# sourceMappingURL=inspect-backup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inspect-backup.js","sourceRoot":"","sources":["../../../src/infra/engines/inspect-backup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspect-backup.js","sourceRoot":"","sources":["../../../src/infra/engines/inspect-backup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Checks that the `mongosh` client binary is available and returns its version string.
3
+ * Throws a user-friendly error if not found.
4
+ */
5
+ export declare function checkMongoshClient(): Promise<string>;
6
+ /**
7
+ * Checks that `mongodump` and `mongorestore` are available.
8
+ * Throws a user-friendly error if not found.
9
+ */
10
+ export declare function checkMongodump(): Promise<void>;
11
+ //# sourceMappingURL=mongodb-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-env.d.ts","sourceRoot":"","sources":["../../../../src/infra/engines/mongodb/mongodb-env.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAa1D;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAWpD"}
@@ -0,0 +1,32 @@
1
+ import { binaryExists, getBinaryVersion } from "../../utils/detect-binary.js";
2
+ /**
3
+ * Checks that the `mongosh` client binary is available and returns its version string.
4
+ * Throws a user-friendly error if not found.
5
+ */
6
+ export async function checkMongoshClient() {
7
+ const found = await binaryExists("mongosh");
8
+ if (!found) {
9
+ throw new Error("MongoDB Shell (mongosh) not found.\n" +
10
+ "Please install mongosh to continue.\n" +
11
+ " Ubuntu/Debian: sudo apt install mongodb-mongosh\n" +
12
+ " macOS: brew install mongosh\n" +
13
+ " Docs: https://www.mongodb.com/docs/mongodb-shell/install/");
14
+ }
15
+ const version = await getBinaryVersion("mongosh");
16
+ return version ?? "mongosh (version unknown)";
17
+ }
18
+ /**
19
+ * Checks that `mongodump` and `mongorestore` are available.
20
+ * Throws a user-friendly error if not found.
21
+ */
22
+ export async function checkMongodump() {
23
+ const found = await binaryExists("mongodump");
24
+ if (!found) {
25
+ throw new Error("mongodump not found.\n" +
26
+ "Please install the MongoDB Database Tools to enable backup and restore.\n" +
27
+ " Ubuntu/Debian: sudo apt install mongodb-database-tools\n" +
28
+ " macOS: brew install mongodb-database-tools\n" +
29
+ " Docs: https://www.mongodb.com/docs/database-tools/");
30
+ }
31
+ }
32
+ //# sourceMappingURL=mongodb-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-env.js","sourceRoot":"","sources":["../../../../src/infra/engines/mongodb/mongodb-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,sCAAsC;YACpC,uCAAuC;YACvC,qDAAqD;YACrD,yCAAyC;YACzC,sEAAsE,CACzE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,OAAO,IAAI,2BAA2B,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,wBAAwB;YACtB,2EAA2E;YAC3E,4DAA4D;YAC5D,wDAAwD;YACxD,+DAA+D,CAClE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { IDatabaseEngine, ConnectionOptions, DatabaseInstance, DatabaseInfo, HealthCheck } from "../../../core/interfaces/database-engine.interface.js";
2
+ export declare class MongodbEngine implements IDatabaseEngine {
3
+ getHealthChecks(): HealthCheck[];
4
+ getEngineName(): string;
5
+ getDefaultConnectionOptions(): ConnectionOptions;
6
+ checkClientVersion(): Promise<string>;
7
+ checkBackupRequirements(): Promise<void>;
8
+ discoverInstances(opts?: ConnectionOptions): Promise<DatabaseInstance[]>;
9
+ getServerVersion(opts?: ConnectionOptions): Promise<string | null>;
10
+ listDatabases(opts?: ConnectionOptions & {
11
+ includeSize?: boolean;
12
+ }): Promise<DatabaseInfo[]>;
13
+ createDatabase(name: string, opts?: ConnectionOptions): Promise<void>;
14
+ dropDatabase(name: string, opts?: ConnectionOptions): Promise<void>;
15
+ backupDatabase(dbName: string, outputDir?: string, opts?: ConnectionOptions, format?: string): Promise<string>;
16
+ restoreDatabase(filePath: string, dbName: string, opts?: ConnectionOptions, _format?: string, _clean?: boolean): Promise<{
17
+ hasWarnings: boolean;
18
+ warnings?: string;
19
+ } | void>;
20
+ }
21
+ //# sourceMappingURL=mongodb.engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb.engine.d.ts","sourceRoot":"","sources":["../../../../src/infra/engines/mongodb/mongodb.engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACZ,MAAM,uDAAuD,CAAC;AAsD/D,qBAAa,aAAc,YAAW,eAAe;IACnD,eAAe,IAAI,WAAW,EAAE;IAiFhC,aAAa,IAAI,MAAM;IAIvB,2BAA2B,IAAI,iBAAiB;IAI1C,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC,iBAAiB,CACrB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA+BxB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBtE,aAAa,CACjB,IAAI,GAAE,iBAAiB,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,GACvD,OAAO,CAAC,YAAY,EAAE,CAAC;IAwCpB,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAoCV,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC;IA0BV,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAoB,EAC/B,IAAI,GAAE,iBAAsB,EAC5B,MAAM,GAAE,MAAiB,GACxB,OAAO,CAAC,MAAM,CAAC;IAoCZ,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,iBAAsB,EAC5B,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAkC/D"}
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "herdux-cli",
3
- "version": "0.8.2",
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",