herdux-cli 0.2.2 → 0.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.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +390 -385
  3. package/README.pt-BR.md +390 -384
  4. package/dist/commands/backup.d.ts.map +1 -1
  5. package/dist/commands/backup.js +8 -9
  6. package/dist/commands/backup.js.map +1 -1
  7. package/dist/commands/clean.d.ts.map +1 -1
  8. package/dist/commands/clean.js +9 -10
  9. package/dist/commands/clean.js.map +1 -1
  10. package/dist/commands/config.js +2 -2
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/create.d.ts.map +1 -1
  13. package/dist/commands/create.js +5 -5
  14. package/dist/commands/create.js.map +1 -1
  15. package/dist/commands/doctor.d.ts.map +1 -1
  16. package/dist/commands/doctor.js +23 -69
  17. package/dist/commands/doctor.js.map +1 -1
  18. package/dist/commands/drop.d.ts.map +1 -1
  19. package/dist/commands/drop.js +5 -5
  20. package/dist/commands/drop.js.map +1 -1
  21. package/dist/commands/list.d.ts.map +1 -1
  22. package/dist/commands/list.js +8 -6
  23. package/dist/commands/list.js.map +1 -1
  24. package/dist/commands/restore.d.ts.map +1 -1
  25. package/dist/commands/restore.js +6 -7
  26. package/dist/commands/restore.js.map +1 -1
  27. package/dist/commands/version.d.ts.map +1 -1
  28. package/dist/commands/version.js +7 -8
  29. package/dist/commands/version.js.map +1 -1
  30. package/dist/core/interfaces/database-engine.interface.d.ts +78 -0
  31. package/dist/core/interfaces/database-engine.interface.d.ts.map +1 -0
  32. package/dist/core/interfaces/database-engine.interface.js +2 -0
  33. package/dist/core/interfaces/database-engine.interface.js.map +1 -0
  34. package/dist/index.js +0 -0
  35. package/dist/infra/command-runner.d.ts.map +1 -0
  36. package/dist/infra/command-runner.js.map +1 -0
  37. package/dist/{services → infra/config}/config.service.d.ts +1 -1
  38. package/dist/infra/config/config.service.d.ts.map +1 -0
  39. package/dist/infra/config/config.service.js.map +1 -0
  40. package/dist/{services/environment.service.d.ts → infra/engines/postgres/postgres-env.d.ts} +1 -1
  41. package/dist/infra/engines/postgres/postgres-env.d.ts.map +1 -0
  42. package/dist/{services/environment.service.js → infra/engines/postgres/postgres-env.js} +5 -5
  43. package/dist/infra/engines/postgres/postgres-env.js.map +1 -0
  44. package/dist/infra/engines/postgres/postgres.engine.d.ts +17 -0
  45. package/dist/infra/engines/postgres/postgres.engine.d.ts.map +1 -0
  46. package/dist/infra/engines/postgres/postgres.engine.js +377 -0
  47. package/dist/infra/engines/postgres/postgres.engine.js.map +1 -0
  48. package/dist/infra/engines/postgres/resolve-connection.d.ts +3 -0
  49. package/dist/infra/engines/postgres/resolve-connection.d.ts.map +1 -0
  50. package/dist/{utils → infra/engines/postgres}/resolve-connection.js +10 -9
  51. package/dist/infra/engines/postgres/resolve-connection.js.map +1 -0
  52. package/dist/infra/utils/detect-binary.d.ts.map +1 -0
  53. package/dist/{utils → infra/utils}/detect-binary.js +1 -1
  54. package/dist/infra/utils/detect-binary.js.map +1 -0
  55. package/dist/presentation/logger.d.ts.map +1 -0
  56. package/dist/presentation/logger.js.map +1 -0
  57. package/package.json +69 -57
  58. package/dist/core/command-runner.d.ts.map +0 -1
  59. package/dist/core/command-runner.js.map +0 -1
  60. package/dist/core/logger.d.ts.map +0 -1
  61. package/dist/core/logger.js.map +0 -1
  62. package/dist/services/backup.service.d.ts +0 -4
  63. package/dist/services/backup.service.d.ts.map +0 -1
  64. package/dist/services/backup.service.js +0 -99
  65. package/dist/services/backup.service.js.map +0 -1
  66. package/dist/services/config.service.d.ts.map +0 -1
  67. package/dist/services/config.service.js.map +0 -1
  68. package/dist/services/environment.service.d.ts.map +0 -1
  69. package/dist/services/environment.service.js.map +0 -1
  70. package/dist/services/postgres.service.d.ts +0 -27
  71. package/dist/services/postgres.service.d.ts.map +0 -1
  72. package/dist/services/postgres.service.js +0 -180
  73. package/dist/services/postgres.service.js.map +0 -1
  74. package/dist/utils/detect-binary.d.ts.map +0 -1
  75. package/dist/utils/detect-binary.js.map +0 -1
  76. package/dist/utils/resolve-connection.d.ts +0 -3
  77. package/dist/utils/resolve-connection.d.ts.map +0 -1
  78. package/dist/utils/resolve-connection.js.map +0 -1
  79. /package/dist/{core → infra}/command-runner.d.ts +0 -0
  80. /package/dist/{core → infra}/command-runner.js +0 -0
  81. /package/dist/{services → infra/config}/config.service.js +0 -0
  82. /package/dist/{utils → infra/utils}/detect-binary.d.ts +0 -0
  83. /package/dist/{core → presentation}/logger.d.ts +0 -0
  84. /package/dist/{core → presentation}/logger.js +0 -0
package/README.pt-BR.md CHANGED
@@ -1,384 +1,390 @@
1
- 🇧🇷 Português | 🇺🇸 [English](./README.md)
2
-
3
- # Herdux — Database Workflow CLI
4
-
5
- <p align="center">
6
- <strong>Infrastructure-grade power. Developer-grade experience.</strong>
7
- </p>
8
-
9
- 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.
10
-
11
- ![Version](https://img.shields.io/badge/version-0.2.1-blue.svg)
12
- ![License](https://img.shields.io/badge/license-MIT-green.svg)
13
- ![Node](https://img.shields.io/badge/node-18%2B-43853d.svg)
14
- [![GitHub Sponsors](https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?style=flat&logo=github)](https://github.com/sponsors/eduardozaniboni)
15
- [![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)
16
-
17
- > Otimizado para ambientes locais e de desenvolvimento. O uso em produção é suportado com configuração explícita.
18
-
19
- <!-- <p align="center">
20
- <img src=".github/herdux.gif" alt="herdux terminal gif" width="1220" />
21
- </p> -->
22
-
23
- ---
24
-
25
- ## ⚡ Início Rápido
26
-
27
- ```bash
28
- npm install -g herdux-cli
29
-
30
- # Você pode usar 'herdux' ou o alias mais curto 'hdx'
31
- hdx doctor
32
- herdux list
33
- ```
34
-
35
- É só isso. Você já está gerenciando bancos de dados.
36
-
37
- ---
38
-
39
- ## Por que Herdux?
40
-
41
- Gerenciar bancos de dados locais através de scripts bash ou binários crus é repetitivo, propenso a erros e doloroso em escala.
42
-
43
- ### ❌ Sem Herdux
44
-
45
- ```bash
46
- # Fazer backup de um banco
47
- pg_dump -U postgres -h localhost -p 5416 -Fc -f ./backups/mydb_2026-02-23.dump mydb
48
-
49
- # Depois dropar manualmente
50
- psql -U postgres -h localhost -p 5416 -c "DROP DATABASE mydb;"
51
-
52
- # Restaurar do backup
53
- pg_restore -U postgres -h localhost -p 5416 -d mydb --clean --if-exists ./backups/mydb_2026-02-23.dump
54
-
55
- # Verificar se as ferramentas estão instaladas
56
- psql --version && pg_dump --version && pg_restore --version
57
- ```
58
-
59
- ### ✅ Com Herdux
60
-
61
- ```bash
62
- herdux backup mydb --drop --yes # Backup + drop em um comando
63
- herdux restore ./backups/mydb.dump --db mydb # Cria o banco (se faltar) e detecta o formato
64
- herdux clean # Multi-seleção e batch-drop de bancos
65
- herdux doctor # Verificação completa do sistema
66
- ```
67
-
68
- Menos flags. Menos erros. Zero fadiga de terminal.
69
-
70
- ---
71
-
72
- ## 🎯 Para quem é o Herdux?
73
-
74
- O **Herdux** foi construído *por desenvolvedores, para desenvolvedores*.
75
-
76
- Ele nasceu da frustração diária de ter que constantemente restaurar backups para testar um estado específico, dropar bancos corrompidos durante o desenvolvimento e lidar com binários crus de bancos de dados toda hora.
77
-
78
- Ele é especificamente projetado para desenvolvedores que:
79
- - Gerenciam infraestruturas locais e precisam verificar o tamanho dos discos antes de popular novos bancos.
80
- - Querem clonar, popular (seed) e resetar bancos de dados rapidamente sem precisar ler documentações complexas.
81
- - Precisam de fluxos seguros de backup & restore que não dependam de scripts bash frágeis.
82
- - Preferem ferramentas focadas no terminal (terminal-first).
83
- - Querem resolução previsível de conexões sem mágicas ocultas.
84
-
85
- Se você gerencia bancos de dados localmente e compartilha dessa dor, o Herdux foi criado para você.
86
-
87
- ---
88
-
89
- ## 🚀 Funcionalidades Principais
90
-
91
- - **📋 Listagem Inteligente** — Estratégia otimizada para clusters massivos. Flag opcional `--size` para análise de uso de disco, ordenado do maior para o menor.
92
- - **💾 Backup & Restore Inteligente** — Suporta formatos Custom (`.dump`) e Plain (`.sql`). Detecta automaticamente a ferramenta correta para restauração.
93
- - **🧹 Limpeza em Massa** — Multi-seleção de bancos, backup opcional e batch-drop. Recupere espaço em disco instantaneamente.
94
- - **🩺 Diagnóstico do Sistema** — Verificação completa de saúde com um único comando: binários, autenticação e conectividade.
95
- - **⚙️ Perfis Persistentes** — Salve configurações de servidor nomeadas. Alterne entre ambientes com `-s pg16`.
96
- - **🎯 Resolução Inteligente de Conexão** — Flags CLI explícitas perfis padrões salvos auto-descoberta. Sempre previsível.
97
-
98
- ---
99
-
100
- ## 💡 Filosofia
101
-
102
- **Herdux** combina *herd* (manada/rebanho) e *UX* — entregando uma melhor Developer Experience ao gerenciar seus clusters de bancos de dados. O nome reflete nosso foco em melhorar a experiência de desenvolvimento ao gerenciar "manadas" de bancos.
103
-
104
- O **Herdux** segue três princípios:
105
-
106
- - **Segurança primeiro** — Nunca apaga dados sem confirmação explícita ou um backup verificado.
107
- - **Explícito sobre implícito** — A resolução de conexão segue uma prioridade estrita e documentada. Sem mágica.
108
- - **Otimização de workflow** — Cada comando é projetado para te salvar de tarefas repetitivas no terminal.
109
-
110
- ---
111
-
112
- ## 🔒 Segurança
113
-
114
- O **Herdux** trata operações destrutivas com cuidado:
115
-
116
- - **Nunca dropa um banco** sem confirmação explícita
117
- - **Aborta toda a operação** se um backup de segurança falhar durante o `herdux clean`
118
- - **Valida códigos de saída do `pg_dump`** antes de considerar um backup bem-sucedido
119
- - **Requer a flag `--drop`** intencionalmente dropar nunca é o padrão
120
- - **`--yes` deve ser combinado com `--drop`** — não é possível pular confirmação sozinho
121
-
122
- > Se você solicitar um backup antes de dropar e esse backup falhar, o **Herdux** para imediatamente. Nenhum dado é perdido.
123
-
124
- ---
125
-
126
- ## 🧩 Requisitos
127
-
128
- - **Node.js** 18 ou superior
129
- - **Ferramentas cliente PostgreSQL** (`psql`, `pg_dump`, `pg_restore`) instaladas e disponíveis no `PATH`
130
-
131
- > [!TIP]
132
- > Execute `herdux doctor` após a instalação para verificar se tudo está configurado corretamente.
133
-
134
- ---
135
-
136
- ## 📦 Instalação
137
-
138
- **npm (recomendado):**
139
-
140
- > **⚠️ IMPORTANTE:** Você precisa usar a flag `-g` (global) para que a CLI fique disponível no seu terminal.
141
-
142
- ```bash
143
- npm install -g herdux-cli
144
- ```
145
-
146
- **Pelo código-fonte:**
147
-
148
- ```bash
149
- git clone https://github.com/herdux/herdux.git
150
- cd herdux
151
- npm install
152
- npm run build
153
- npm link
154
- ```
155
-
156
- ---
157
-
158
- ## 🛠️ Comandos
159
-
160
- ### `herdux version`
161
-
162
- Mostra a versão da CLI e a versão do servidor PostgreSQL conectado.
163
-
164
- ```bash
165
- herdux version
166
- ```
167
-
168
- ### `herdux doctor`
169
-
170
- Executa uma verificação completa de saúde do sistema:
171
-
172
- - Verifica se `psql`, `pg_dump` e `pg_restore` estão instalados e acessíveis
173
- - Tenta uma conexão real usando a configuração resolvida
174
- - Testa autenticação contra o servidor alvo
175
-
176
- ```bash
177
- herdux doctor
178
- ```
179
-
180
- ---
181
-
182
- ### 📋 `herdux list`
183
-
184
- Lista todos os bancos de dados no servidor conectado.
185
-
186
- ```bash
187
- herdux list # Listagem rápida (nome, owner, encoding)
188
- herdux ls --size # Inclui tamanho em disco, ordenado do maior → menor
189
- ```
190
-
191
- > [!NOTE]
192
- > A flag `--size` calcula o uso físico de disco via `pg_database_size()`. Em servidores com dezenas de bancos multi-GB, isso pode levar alguns minutos dependendo da velocidade do disco.
193
-
194
- ---
195
-
196
- ### `herdux create <nome>`
197
-
198
- Cria um novo banco de dados.
199
-
200
- ```bash
201
- herdux create meu_novo_db
202
- ```
203
-
204
- ### `herdux drop <nome>`
205
-
206
- Remove um banco de dados com confirmação interativa.
207
-
208
- ```bash
209
- herdux drop meu_banco_antigo
210
- ```
211
-
212
- ---
213
-
214
- ### 🧹 `herdux clean` — Limpeza em Massa
215
-
216
- Trabalhando com bancos de desenvolvimento cheios de seeds? Precisa recuperar espaço em disco rápido?
217
-
218
- `herdux clean` permite:
219
-
220
- - **Multi-seleção** de bancos a partir de uma interface interativa com checkboxes
221
- - **Gerar backups de segurança opcionais** antes de qualquer ação destrutiva
222
- - **Batch-drop** de todos os bancos selecionados com segurança
223
- - **Abortar imediatamente** se qualquer backup falhar, prevenindo perda de dados
224
-
225
- ```bash
226
- herdux clean
227
- ```
228
-
229
- Projetado para o workflow real do desenvolvedor: clonar bancos, experimentar, depois limpar tudo de uma vez.
230
-
231
- ---
232
-
233
- ### 📦 `herdux backup <banco>`
234
-
235
- Gera um backup com timestamp em `./backups/`.
236
-
237
- ```bash
238
- herdux backup mydb # Formato custom (.dump)
239
- herdux backup mydb --format plain # SQL puro (.sql)
240
- herdux backup mydb --drop # Backup, depois pergunta se quer dropar
241
- herdux backup mydb --drop --yes # Backup + drop, sem perguntas
242
- herdux backup mydb -o ./meus-backups # Diretório de saída personalizado
243
- ```
244
-
245
- | Opção | Descrição |
246
- |---|---|
247
- | `-F, --format <tipo>` | `custom` (padrão, comprimido) ou `plain` (SQL puro) |
248
- | `-d, --drop` | Pergunta se deseja dropar o banco após backup bem-sucedido |
249
- | `-y, --yes` | Pula confirmação do drop (requer `--drop`) |
250
- | `-o, --output <dir>` | Diretório de saída (padrão: `./backups`) |
251
-
252
- ---
253
-
254
- ### 📥 `herdux restore <arquivo>`
255
-
256
- Restaura um banco de dados a partir de um arquivo de backup. Detecta automaticamente o formato:
257
-
258
- - `.sql` → usa `psql -f`
259
- - `.dump` ou qualquer outra extensão → usa `pg_restore`
260
-
261
- ```bash
262
- herdux restore ./backups/mydb_2026-02-23.dump --db mydb
263
- herdux restore ./exports/data.sql --db mydb
264
- ```
265
-
266
- Precisa sobrescrever a auto-detecção? Use `--format`:
267
-
268
- ```bash
269
- herdux restore arquivo.bkp --db mydb --format custom
270
- herdux restore script.txt --db mydb --format plain
271
- ```
272
-
273
- ---
274
-
275
- ## ⚙️ Configuração & Perfis de Servidor
276
-
277
- O `herdux` armazena configurações localmente em `~/.herdux/config.json`.
278
-
279
- ### Definir Padrões Globais
280
-
281
- ```bash
282
- herdux config set user postgres
283
- herdux config set password minha_senha
284
- herdux config set port 5432
285
- ```
286
-
287
- ### Perfis de Servidor Nomeados
288
-
289
- Gerencie múltiplas instâncias de banco de dados sem esforço:
290
-
291
- ```bash
292
- herdux config add pg16 --port 5416
293
- herdux config add pg17 --port 5417 --user admin
294
- herdux config add staging --host 192.168.0.10 --port 5432
295
- ```
296
-
297
- Depois conecte usando a flag `-s`:
298
-
299
- ```bash
300
- herdux list -s pg16
301
- herdux backup mydb -s staging
302
- ```
303
-
304
- ### Visualizar & Gerenciar Config
305
-
306
- ```bash
307
- herdux config list # Mostra todas as configurações e perfis salvos
308
- herdux config get port # Obtém um valor específico
309
- herdux config rm pg16 # Remove um perfil de servidor
310
- herdux config reset # Limpa toda a configuração
311
- ```
312
-
313
- ---
314
-
315
- ## 🔌 Prioridade de Conexão
316
-
317
- Ao resolver como se conectar, o **Herdux** segue uma ordem de prioridade estrita e previsível:
318
-
319
- | Prioridade | Fonte | Exemplo |
320
- |---|---|---|
321
- | 1️⃣ | **Flags CLI** | `herdux list --port 5417` |
322
- | 2️⃣ | **Perfil de servidor** | `herdux list -s pg16` |
323
- | 3️⃣ | **Padrões salvos** | `herdux config set port 5432` |
324
- | 4️⃣ | **Auto-descoberta** | Escaneia portas comuns; pergunta se encontrar múltiplas |
325
-
326
- Isso significa que a entrada explícita sempre vence. Sem surpresas.
327
-
328
- ---
329
-
330
- ## 🤔 Por que não pgAdmin?
331
-
332
- O **Herdux** não é um substituto de GUI.
333
- É um acelerador de workflow para desenvolvedores que vivem no terminal.
334
-
335
- Sem GUI. Sem overhead. Só velocidade.
336
-
337
- ---
338
-
339
- ## 🧠 Princípios de Design
340
-
341
- - Sem padrões ocultos (hidden defaults).
342
- - Sem mágicas destrutivas.
343
- - Resolução de conexão determinística.
344
- - Comandos explícitos e combináveis.
345
-
346
- ---
347
-
348
- ## 🐳 Suporte Docker (Em Breve)
349
-
350
- O **Herdux** poderá detectar e interagir com instâncias PostgreSQL rodando dentro de containers Docker — listando, conectando e gerenciando-as tão naturalmente quanto instâncias locais.
351
-
352
- ---
353
-
354
- ## 🗺 Roadmap
355
-
356
- Consulte o [ROADMAP.md](./ROADMAP.md) para ver nossos planos futuros detalhados, incluindo integração com Docker e backups criptografados.
357
-
358
- ---
359
-
360
- ## 🤝 Contribuindo
361
-
362
- PRs são bem-vindas! Por favor, abra uma issue primeiro para discutir mudanças significativas.
363
-
364
- ```bash
365
- git clone https://github.com/herdux/herdux.git
366
- cd herdux
367
- npm install
368
- npm run dev
369
- ```
370
-
371
- ---
372
-
373
- ## Apoie o Projeto
374
-
375
- Se o **Herdux** tem te salvado horas de dores de cabeça com bancos de dados, considere apoiar o projeto! Isso ajuda demais a mantê-lo ativo e open-source.
376
-
377
- <a href="https://github.com/sponsors/eduardozaniboni" target="_blank"><img src="https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?style=for-the-badge&logo=github" alt="GitHub Sponsors"></a>
378
- <a href="https://www.buymeacoffee.com/eduardozaniboni" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 28px !important;width: 100px !important;" ></a>
379
-
380
- ---
381
-
382
- ## 📄 Licença
383
-
384
- MIT
1
+ 🇧🇷 Português | 🇺🇸 [English](./README.md)
2
+
3
+ # Herdux — Database Workflow CLI
4
+
5
+ <p align="center">
6
+ <strong>Infrastructure-grade power. Developer-grade experience.</strong>
7
+ </p>
8
+
9
+ 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.
10
+
11
+ ![Version](https://img.shields.io/badge/version-0.3.0-blue.svg)
12
+ ![License](https://img.shields.io/badge/license-MIT-green.svg)
13
+ ![Node](https://img.shields.io/badge/node-18%2B-43853d.svg)
14
+ [![GitHub Sponsors](https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?style=flat&logo=github)](https://github.com/sponsors/eduardozaniboni)
15
+ [![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)
16
+
17
+ > Otimizado para ambientes locais e de desenvolvimento. O uso em produção é suportado com configuração explícita.
18
+
19
+ <!-- <p align="center">
20
+ <img src=".github/herdux.gif" alt="herdux terminal gif" width="1220" />
21
+ </p> -->
22
+
23
+ ---
24
+
25
+ ## ⚡ Início Rápido
26
+
27
+ ```bash
28
+ npm install -g herdux-cli
29
+
30
+ # Você pode usar 'herdux' ou o alias mais curto 'hdx'
31
+ hdx doctor
32
+ herdux list
33
+ ```
34
+
35
+ É só isso. Você já está gerenciando bancos de dados.
36
+
37
+ ---
38
+
39
+ ## Por que Herdux?
40
+
41
+ Gerenciar bancos de dados locais através de scripts bash ou binários crus é repetitivo, propenso a erros e doloroso em escala.
42
+
43
+ ### ❌ Sem Herdux
44
+
45
+ ```bash
46
+ # Fazer backup de um banco
47
+ pg_dump -U postgres -h localhost -p 5416 -Fc -f ./backups/mydb_2026-02-23.dump mydb
48
+
49
+ # Depois dropar manualmente
50
+ psql -U postgres -h localhost -p 5416 -c "DROP DATABASE mydb;"
51
+
52
+ # Restaurar do backup
53
+ pg_restore -U postgres -h localhost -p 5416 -d mydb --clean --if-exists ./backups/mydb_2026-02-23.dump
54
+
55
+ # Verificar se as ferramentas estão instaladas
56
+ psql --version && pg_dump --version && pg_restore --version
57
+ ```
58
+
59
+ ### ✅ Com Herdux
60
+
61
+ ```bash
62
+ herdux backup mydb --drop --yes # Backup + drop em um comando
63
+ herdux restore ./backups/mydb.dump --db mydb # Cria o banco (se faltar) e detecta o formato
64
+ herdux clean # Multi-seleção e batch-drop de bancos
65
+ herdux doctor # Verificação completa do sistema
66
+ ```
67
+
68
+ Menos flags. Menos erros. Zero fadiga de terminal.
69
+
70
+ ---
71
+
72
+ ## 🎯 Para quem é o Herdux?
73
+
74
+ O **Herdux** foi construído _por desenvolvedores, para desenvolvedores_.
75
+
76
+ Ele nasceu da frustração diária de ter que constantemente restaurar backups para testar um estado específico, dropar bancos corrompidos durante o desenvolvimento e lidar com binários crus de bancos de dados toda hora.
77
+
78
+ Ele é especificamente projetado para desenvolvedores que:
79
+
80
+ - Gerenciam infraestruturas locais e precisam verificar o tamanho dos discos antes de popular novos bancos.
81
+ - Querem clonar, popular (seed) e resetar bancos de dados rapidamente sem precisar ler documentações complexas.
82
+ - Precisam de fluxos seguros de backup & restore que não dependam de scripts bash frágeis.
83
+ - Preferem ferramentas focadas no terminal (terminal-first).
84
+ - Querem resolução previsível de conexões sem mágicas ocultas.
85
+
86
+ Se você gerencia bancos de dados localmente e compartilha dessa dor, o Herdux foi criado para você.
87
+
88
+ ---
89
+
90
+ ## 🚀 Funcionalidades Principais
91
+
92
+ - **📋 Listagem Inteligente** — Estratégia otimizada para clusters massivos. Flag opcional `--size` para análise de uso de disco, ordenado do maior para o menor.
93
+ - **💾 Backup & Restore Inteligente** — Suporta formatos Custom (`.dump`) e Plain (`.sql`). Detecta automaticamente a ferramenta correta para restauração.
94
+ - **🧹 Limpeza em Massa** — Multi-seleção de bancos, backup opcional e batch-drop. Recupere espaço em disco instantaneamente.
95
+ - **🩺 Diagnóstico do Sistema** — Verificação completa de saúde com um único comando: binários, autenticação e conectividade.
96
+ - **⚙️ Perfis Persistentes** — Salve configurações de servidor nomeadas. Alterne entre ambientes com `-s pg16`.
97
+ - **🎯 Resolução Inteligente de Conexão** — Flags CLI explícitas → perfis → padrões salvos → auto-descoberta. Sempre previsível.
98
+
99
+ ---
100
+
101
+ ## 💡 Filosofia
102
+
103
+ **Herdux** combina _herd_ (manada/rebanho) e _UX_ — entregando uma melhor Developer Experience ao gerenciar seus clusters de bancos de dados. O nome reflete nosso foco em melhorar a experiência de desenvolvimento ao gerenciar "manadas" de bancos.
104
+
105
+ O **Herdux** segue três princípios:
106
+
107
+ - **Segurança primeiro** — Nunca apaga dados sem confirmação explícita ou um backup verificado.
108
+ - **Explícito sobre implícito** — A resolução de conexão segue uma prioridade estrita e documentada. Sem mágica.
109
+ - **Otimização de workflow** — Cada comando é projetado para te salvar de tarefas repetitivas no terminal.
110
+
111
+ ---
112
+
113
+ ## 🔒 Segurança
114
+
115
+ O **Herdux** trata operações destrutivas com cuidado:
116
+
117
+ - **Nunca dropa um banco** sem confirmação explícita
118
+ - **Aborta toda a operação** se um backup de segurança falhar durante o `herdux clean`
119
+ - **Valida códigos de saída do `pg_dump`** antes de considerar um backup bem-sucedido
120
+ - **Requer a flag `--drop`** intencionalmente dropar nunca é o padrão
121
+ - **`--yes` deve ser combinado com `--drop`** — não é possível pular confirmação sozinho
122
+
123
+ > Se você solicitar um backup antes de dropar e esse backup falhar, o **Herdux** para imediatamente. Nenhum dado é perdido.
124
+
125
+ ---
126
+
127
+ ## 🧩 Requisitos
128
+
129
+ - **Node.js** 18 ou superior
130
+ - **Ferramentas cliente PostgreSQL** (`psql`, `pg_dump`, `pg_restore`) instaladas e disponíveis no `PATH`
131
+
132
+ > [!TIP]
133
+ > Execute `herdux doctor` após a instalação para verificar se tudo está configurado corretamente.
134
+
135
+ ---
136
+
137
+ ## 📦 Instalação
138
+
139
+ **npm (recomendado):**
140
+
141
+ > **⚠️ IMPORTANTE:** Você precisa usar a flag `-g` (global) para que a CLI fique disponível no seu terminal.
142
+
143
+ ```bash
144
+ npm install -g herdux-cli
145
+ ```
146
+
147
+ **Pelo código-fonte:**
148
+
149
+ ```bash
150
+ git clone https://github.com/herdux/herdux-cli.git
151
+ cd herdux-cli
152
+ npm install
153
+ npm run build
154
+ npm link
155
+ ```
156
+
157
+ ---
158
+
159
+ ## 🛠️ Comandos
160
+
161
+ ### `herdux version`
162
+
163
+ Mostra a versão da CLI e a versão do servidor PostgreSQL conectado.
164
+
165
+ ```bash
166
+ herdux version
167
+ ```
168
+
169
+ ### `herdux doctor`
170
+
171
+ Executa uma verificação completa de saúde do sistema:
172
+
173
+ - Verifica se `psql`, `pg_dump` e `pg_restore` estão instalados e acessíveis
174
+ - Tenta uma conexão real usando a configuração resolvida
175
+ - Testa autenticação contra o servidor alvo
176
+
177
+ ```bash
178
+ herdux doctor
179
+ ```
180
+
181
+ ---
182
+
183
+ ### 📋 `herdux list`
184
+
185
+ Lista todos os bancos de dados no servidor conectado.
186
+
187
+ ```bash
188
+ herdux list # Listagem rápida (nome, owner, encoding)
189
+ herdux ls --size # Inclui tamanho em disco, ordenado do maior → menor
190
+ ```
191
+
192
+ > [!NOTE]
193
+ > A flag `--size` calcula o uso físico de disco via `pg_database_size()`. Em servidores com dezenas de bancos multi-GB, isso pode levar alguns minutos dependendo da velocidade do disco.
194
+
195
+ ---
196
+
197
+ ### `herdux create <nome>`
198
+
199
+ Cria um novo banco de dados.
200
+
201
+ ```bash
202
+ herdux create meu_novo_db
203
+ ```
204
+
205
+ ### `herdux drop <nome>`
206
+
207
+ Remove um banco de dados com confirmação interativa.
208
+
209
+ ```bash
210
+ herdux drop meu_banco_antigo
211
+ ```
212
+
213
+ ---
214
+
215
+ ### 🧹 `herdux clean` — Limpeza em Massa
216
+
217
+ Trabalhando com bancos de desenvolvimento cheios de seeds? Precisa recuperar espaço em disco rápido?
218
+
219
+ `herdux clean` permite:
220
+
221
+ - **Multi-seleção** de bancos a partir de uma interface interativa com checkboxes
222
+ - **Gerar backups de segurança opcionais** antes de qualquer ação destrutiva
223
+ - **Batch-drop** de todos os bancos selecionados com segurança
224
+ - **Abortar imediatamente** se qualquer backup falhar, prevenindo perda de dados
225
+
226
+ ```bash
227
+ herdux clean
228
+ ```
229
+
230
+ Projetado para o workflow real do desenvolvedor: clonar bancos, experimentar, depois limpar tudo de uma vez.
231
+
232
+ ---
233
+
234
+ ### 📦 `herdux backup <banco>`
235
+
236
+ Gera um backup com timestamp em `./backups/`.
237
+
238
+ ```bash
239
+ herdux backup mydb # Formato custom (.dump)
240
+ herdux backup mydb --format plain # SQL puro (.sql)
241
+ herdux backup mydb --drop # Backup, depois pergunta se quer dropar
242
+ herdux backup mydb --drop --yes # Backup + drop, sem perguntas
243
+ herdux backup mydb -o ./meus-backups # Diretório de saída personalizado
244
+ ```
245
+
246
+ | Opção | Descrição |
247
+ | --------------------- | ---------------------------------------------------------- |
248
+ | `-F, --format <tipo>` | `custom` (padrão, comprimido) ou `plain` (SQL puro) |
249
+ | `-d, --drop` | Pergunta se deseja dropar o banco após backup bem-sucedido |
250
+ | `-y, --yes` | Pula confirmação do drop (requer `--drop`) |
251
+ | `-o, --output <dir>` | Diretório de saída (padrão: `./backups`) |
252
+
253
+ ---
254
+
255
+ ### 📥 `herdux restore <arquivo>`
256
+
257
+ Restaura um banco de dados a partir de um arquivo de backup. Detecta automaticamente o formato:
258
+
259
+ - `.sql` → usa `psql -f`
260
+ - `.dump` ou qualquer outra extensão → usa `pg_restore`
261
+
262
+ ```bash
263
+ herdux restore ./backups/mydb_2026-02-23.dump --db mydb
264
+ herdux restore ./exports/data.sql --db mydb
265
+ ```
266
+
267
+ Precisa sobrescrever a auto-detecção? Use `--format`:
268
+
269
+ ```bash
270
+ herdux restore arquivo.bkp --db mydb --format custom
271
+ herdux restore script.txt --db mydb --format plain
272
+ ```
273
+
274
+ ---
275
+
276
+ ## ⚙️ Configuração & Perfis de Servidor
277
+
278
+ O `herdux` armazena configurações localmente em `~/.herdux/config.json`.
279
+
280
+ ### Definir Padrões Globais
281
+
282
+ ```bash
283
+ herdux config set user postgres
284
+ herdux config set password minha_senha
285
+ herdux config set port 5432
286
+ ```
287
+
288
+ ### Perfis de Servidor Nomeados
289
+
290
+ Gerencie múltiplas instâncias de banco de dados sem esforço:
291
+
292
+ ```bash
293
+ herdux config add pg16 --port 5416
294
+ herdux config add pg17 --port 5417 --user admin
295
+ herdux config add staging --host 192.168.0.10 --port 5432
296
+ ```
297
+
298
+ Depois conecte usando a flag `-s`:
299
+
300
+ ```bash
301
+ herdux list -s pg16
302
+ herdux backup mydb -s staging
303
+ ```
304
+
305
+ ### Visualizar & Gerenciar Config
306
+
307
+ ```bash
308
+ herdux config list # Mostra todas as configurações e perfis salvos
309
+ herdux config get port # Obtém um valor específico
310
+ herdux config rm pg16 # Remove um perfil de servidor
311
+ herdux config reset # Limpa toda a configuração
312
+ ```
313
+
314
+ ---
315
+
316
+ ## 🔌 Prioridade de Conexão
317
+
318
+ Ao resolver como se conectar, o **Herdux** segue uma ordem de prioridade estrita e previsível:
319
+
320
+ | Prioridade | Fonte | Exemplo |
321
+ | ---------- | ---------------------- | ------------------------------------------------------- |
322
+ | 1️⃣ | **Flags CLI** | `herdux list --port 5417` |
323
+ | 2️⃣ | **Perfil de servidor** | `herdux list -s pg16` |
324
+ | 3️⃣ | **Padrões salvos** | `herdux config set port 5432` |
325
+ | 4️⃣ | **Auto-descoberta** | Escaneia portas comuns; pergunta se encontrar múltiplas |
326
+
327
+ Isso significa que a entrada explícita sempre vence. Sem surpresas.
328
+
329
+ ---
330
+
331
+ ## 🤔 Por que não pgAdmin?
332
+
333
+ O **Herdux** não é um substituto de GUI.
334
+ É um acelerador de workflow para desenvolvedores que vivem no terminal.
335
+
336
+ Sem GUI. Sem overhead. Só velocidade.
337
+
338
+ ---
339
+
340
+ ## 🧠 Princípios de Design
341
+
342
+ - Sem padrões ocultos (hidden defaults).
343
+ - Sem mágicas destrutivas.
344
+ - Resolução de conexão determinística.
345
+ - Comandos explícitos e combináveis.
346
+
347
+ ---
348
+
349
+ ## 🐳 Suporte Docker (Em Breve)
350
+
351
+ O **Herdux** poderá detectar e interagir com instâncias PostgreSQL rodando dentro de containers Docker — listando, conectando e gerenciando-as tão naturalmente quanto instâncias locais.
352
+
353
+ ---
354
+
355
+ ## 🗺 Roadmap
356
+
357
+ Consulte o [ROADMAP.md](./ROADMAP.md) para ver nossos planos futuros detalhados, incluindo integração com Docker e backups criptografados.
358
+
359
+ ---
360
+
361
+ ## 🤝 Contribuindo
362
+
363
+ PRs são bem-vindas! Por favor, abra uma issue primeiro para discutir mudanças significativas.
364
+
365
+ ```bash
366
+ git clone https://github.com/herdux/herdux-cli.git
367
+ cd herdux-cli
368
+ npm install
369
+ npm run dev
370
+
371
+ # Executar testes unitários
372
+ npm run test:unit
373
+ # Executar testes de integração (requer Docker para E2E)
374
+ npm run test:e2e
375
+ ```
376
+
377
+ ---
378
+
379
+ ## ☕ Apoie o Projeto
380
+
381
+ Se o **Herdux** tem te salvado horas de dores de cabeça com bancos de dados, considere apoiar o projeto! Isso ajuda demais a mantê-lo ativo e open-source.
382
+
383
+ <a href="https://github.com/sponsors/eduardozaniboni" target="_blank"><img src="https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?style=for-the-badge&logo=github" alt="GitHub Sponsors"></a>
384
+ <a href="https://www.buymeacoffee.com/eduardozaniboni" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 28px !important;width: 100px !important;" ></a>
385
+
386
+ ---
387
+
388
+ ## 📄 Licença
389
+
390
+ MIT