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