@ridiormf/version-control 1.1.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 (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +708 -0
  3. package/bin/smart-commit.js +201 -0
  4. package/bin/version-control.js +4 -0
  5. package/dist/analyzer.d.ts +7 -0
  6. package/dist/analyzer.d.ts.map +1 -0
  7. package/dist/analyzer.js +109 -0
  8. package/dist/analyzer.js.map +1 -0
  9. package/dist/changelog.d.ts +49 -0
  10. package/dist/changelog.d.ts.map +1 -0
  11. package/dist/changelog.js +219 -0
  12. package/dist/changelog.js.map +1 -0
  13. package/dist/colors.d.ts +6 -0
  14. package/dist/colors.d.ts.map +1 -0
  15. package/dist/colors.js +16 -0
  16. package/dist/colors.js.map +1 -0
  17. package/dist/commitGenerator.d.ts +27 -0
  18. package/dist/commitGenerator.d.ts.map +1 -0
  19. package/dist/commitGenerator.js +272 -0
  20. package/dist/commitGenerator.js.map +1 -0
  21. package/dist/config.d.ts +36 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +116 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/git.d.ts +7 -0
  26. package/dist/git.d.ts.map +1 -0
  27. package/dist/git.js +18 -0
  28. package/dist/git.js.map +1 -0
  29. package/dist/gitCommands.d.ts +6 -0
  30. package/dist/gitCommands.d.ts.map +1 -0
  31. package/dist/gitCommands.js +55 -0
  32. package/dist/gitCommands.js.map +1 -0
  33. package/dist/i18n.d.ts +15 -0
  34. package/dist/i18n.d.ts.map +1 -0
  35. package/dist/i18n.js +452 -0
  36. package/dist/i18n.js.map +1 -0
  37. package/dist/index.d.ts +16 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +221 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/readline.d.ts +19 -0
  42. package/dist/readline.d.ts.map +1 -0
  43. package/dist/readline.js +129 -0
  44. package/dist/readline.js.map +1 -0
  45. package/dist/types.d.ts +28 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +6 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/updateChecker.d.ts +5 -0
  50. package/dist/updateChecker.d.ts.map +1 -0
  51. package/dist/updateChecker.js +117 -0
  52. package/dist/updateChecker.js.map +1 -0
  53. package/dist/updater.d.ts +22 -0
  54. package/dist/updater.d.ts.map +1 -0
  55. package/dist/updater.js +170 -0
  56. package/dist/updater.js.map +1 -0
  57. package/dist/version.d.ts +14 -0
  58. package/dist/version.d.ts.map +1 -0
  59. package/dist/version.js +69 -0
  60. package/dist/version.js.map +1 -0
  61. package/package.json +61 -0
package/README.md ADDED
@@ -0,0 +1,708 @@
1
+ # Version Control
2
+
3
+ > Sistema inteligente de controle de versão que analisa commits do Git e automatiza o versionamento semântico (SemVer).
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@ridio/version-control.svg)](https://www.npmjs.com/package/@ridio/version-control)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ ## 📋 Índice
9
+
10
+ - [Sobre](#sobre)
11
+ - [Instalação](#instalação)
12
+ - [Uso](#uso)
13
+ - [Como Funciona](#como-funciona)
14
+ - [Exemplos](#exemplos)
15
+ - [API](#api)
16
+ - [Contribuindo](#contribuindo)
17
+ - [Licença](#licença)
18
+
19
+ ## 🎯 Sobre
20
+
21
+ O **Version Control** é uma ferramenta CLI que automatiza o processo de versionamento semântico do seu projeto. Ele analisa as mensagens de commit do Git, identifica os tipos de mudanças (breaking changes, novas funcionalidades, correções de bugs) e sugere automaticamente a versão apropriada segundo as especificações do [Semantic Versioning](https://semver.org/).
22
+
23
+ ### ✨ Funcionalidades
24
+
25
+ - 🔍 **Análise Inteligente de Commits**: Analisa mensagens de commit e arquivos modificados
26
+ - 🎯 **Sugestão Automática de Versão**: Sugere MAJOR, MINOR ou PATCH baseado nas mudanças
27
+ - 📝 **Atualização Automática**: Atualiza `package.json`, `CHANGELOG.md` e arquivos de código
28
+ - 🏷️ **Git Tags**: Cria tags automaticamente e faz push para o repositório
29
+ - 🎨 **Interface Colorida**: Output colorido e intuitivo no terminal
30
+ - 🔄 **Interativo**: Permite confirmar ou modificar a versão sugerida
31
+ - 🤖 **Smart Commit**: Gera mensagens de commit automaticamente em inglês (Conventional Commits)
32
+ - 📋 **CHANGELOG Inteligente**: Agrupa commits por tipo e remove duplicatas
33
+ - 🧪 **Modo de Teste**: Teste mudanças com rollback automático
34
+ - 🌍 **Internacionalização**: Suporte automático para 4 idiomas (EN, PT, ES, FR)
35
+
36
+ ## 📦 Instalação
37
+
38
+ ### Global (Recomendado)
39
+
40
+ ```bash
41
+ yarn global add @ridio/version-control
42
+ ```
43
+
44
+ ### Como dependência de desenvolvimento
45
+
46
+ ```bash
47
+ yarn add -D @ridio/version-control
48
+ ```
49
+
50
+ ### Uso com npx (sem instalação)
51
+
52
+ ```bash
53
+ yarn dlx @ridio/version-control
54
+ ```
55
+
56
+ ## 🚀 Uso
57
+
58
+ ### CLI - Version Control
59
+
60
+ Após fazer suas alterações e commitar:
61
+
62
+ ```bash
63
+ version-control
64
+ ```
65
+
66
+ Ou com yarn dlx:
67
+
68
+ ```bash
69
+ yarn dlx @ridio/version-control
70
+ ```
71
+
72
+ ### CLI - Smart Commit
73
+
74
+ Commit inteligente com mensagem automática em inglês:
75
+
76
+ ```bash
77
+ # 1. Faça suas alterações
78
+ vim src/index.ts
79
+
80
+ # 2. Adicione os arquivos
81
+ git add .
82
+
83
+ # 3. Execute o smart commit
84
+ smart-commit
85
+ # ou
86
+ yarn commit
87
+
88
+ # 4. Pressione Enter para aceitar a mensagem gerada
89
+ ```
90
+
91
+ **Exemplo de saída:**
92
+
93
+ ```bash
94
+ ═══════════════════════════════════════════════════════════
95
+ Smart Commit - Auto Message
96
+ ═══════════════════════════════════════════════════════════
97
+
98
+ Staged files: 2
99
+ ✨ src/newFeature.ts (+45/-0)
100
+ 📝 src/index.ts (+5/-2)
101
+
102
+ Analyzing changes...
103
+
104
+ Generated commit message:
105
+ feat(src): add newFeature
106
+
107
+ Details:
108
+ Type: feat
109
+ Scope: src
110
+ Description: add newFeature
111
+
112
+ Options: [1] Commit [2] Edit [3] Cancel (default: 1)
113
+ Choice:
114
+
115
+ ✓ Commit created successfully!
116
+ ```
117
+
118
+ ### Adicionando ao package.json
119
+
120
+ Adicione um script no seu `package.json`:
121
+
122
+ ```json
123
+ {
124
+ "scripts": {
125
+ "version": "version-control",
126
+ "version:test": "version-control --test",
127
+ "commit": "smart-commit"
128
+ }
129
+ }
130
+ ```
131
+
132
+ E execute:
133
+
134
+ ```bash
135
+ # Commit inteligente
136
+ yarn commit
137
+
138
+ # Versionamento normal
139
+ yarn version
140
+
141
+ # Versionamento com teste (permite desfazer)
142
+ yarn version:test
143
+ ```
144
+
145
+ ### Uso Programático
146
+
147
+ Você também pode usar a biblioteca programaticamente:
148
+
149
+ ```typescript
150
+ import {
151
+ analyzeChanges,
152
+ bumpVersion,
153
+ getCurrentVersion,
154
+ } from "@ridio/version-control";
155
+
156
+ // Obter versão atual
157
+ const currentVersion = getCurrentVersion();
158
+ console.log("Versão atual:", currentVersion);
159
+
160
+ // Analisar mudanças do último commit
161
+ const analysis = analyzeChanges();
162
+ console.log("Tipo sugerido:", analysis.type);
163
+ console.log("Razões:", analysis.reason);
164
+
165
+ // Calcular nova versão
166
+ const newVersion = bumpVersion(currentVersion, analysis.type);
167
+ console.log("Nova versão:", newVersion);
168
+ ```
169
+
170
+ ## 🔧 Como Funciona
171
+
172
+ O sistema analisa as mudanças do último commit do Git e sugere a versão apropriada baseado em:
173
+
174
+ ### � Conventional Commits
175
+
176
+ A ferramenta suporta o formato [Conventional Commits](https://www.conventionalcommits.org/), que estrutura as mensagens de commit de forma padronizada:
177
+
178
+ ```
179
+ <tipo>(<escopo>): <descrição>
180
+
181
+ [corpo opcional]
182
+
183
+ [rodapé(s) opcional(is)]
184
+ ```
185
+
186
+ **Exemplos:**
187
+
188
+ - `feat(auth): add login functionality`
189
+ - `fix: resolve memory leak in cache`
190
+ - `feat!: remove support for Node 12` (breaking change)
191
+
192
+ ### 📋 CHANGELOG Inteligente
193
+
194
+ Todos os commits desde a última versão são **automaticamente incluídos** no CHANGELOG, agrupados por tipo:
195
+
196
+ - **✨ Added** - Novas funcionalidades (`feat:`, `add`, `new`)
197
+ - **🐛 Fixed** - Correções de bugs (`fix:`, `bug`)
198
+ - **🔄 Changed** - Mudanças em funcionalidades (`refactor:`, `perf:`)
199
+ - **⚠️ Breaking Changes** - Mudanças incompatíveis (`BREAKING CHANGE`, `!`)
200
+ - **🗑️ Removed** - Remoções (`remove`, `delete`)
201
+ - **🔒 Security** - Correções de segurança (`security`)
202
+ - **⚠️ Deprecated** - Funcionalidades obsoletas (`deprecat`)
203
+
204
+ A ferramenta **remove automaticamente** duplicatas e commits similares, mantendo apenas as entradas mais relevantes.
205
+
206
+ ### 🤖 Smart Commit - Mensagens Automáticas
207
+
208
+ O **Smart Commit** analisa os arquivos staged e gera mensagens de commit automaticamente em inglês, seguindo o padrão Conventional Commits:
209
+
210
+ #### Como funciona:
211
+
212
+ 1. **Analisa os arquivos**: Detecta arquivos adicionados, modificados ou deletados
213
+ 2. **Identifica o tipo**: feat, fix, docs, test, refactor, style, chore
214
+ 3. **Detecta o escopo**: Identifica automaticamente (src, api, ui, etc.)
215
+ 4. **Gera a descrição**: Baseado nos nomes dos arquivos e padrões de mudança
216
+
217
+ #### Tipos detectados automaticamente:
218
+
219
+ - **feat**: Novos arquivos ou funcionalidades
220
+ - **fix**: Mais deleções que adições (correções)
221
+ - **docs**: Apenas arquivos de documentação (.md, .txt)
222
+ - **test**: Apenas arquivos de teste
223
+ - **style**: Mudanças pequenas em CSS/SCSS
224
+ - **refactor**: Modificações em código existente
225
+ - **chore**: Configurações e arquivos auxiliares
226
+
227
+ #### Exemplo:
228
+
229
+ ```bash
230
+ # Adicionar novo arquivo
231
+ git add src/authentication.ts
232
+ yarn commit
233
+ # Gera: feat(src): add authentication
234
+
235
+ # Corrigir bug
236
+ git add src/bugFix.ts
237
+ yarn commit
238
+ # Gera: fix(src): resolve issue in bugFix
239
+
240
+ # Atualizar documentação
241
+ git add README.md
242
+ yarn commit
243
+ # Gera: docs: update README
244
+ ```
245
+
246
+ #### 🎉 Versão Inicial (1.0.0)
247
+
248
+ Quando a ferramenta detecta que está gerando a versão **1.0.0** (primeira release), ela adiciona uma mensagem especial no CHANGELOG:
249
+
250
+ ```markdown
251
+ ## [1.0.0] - 2025-12-24
252
+
253
+ ### 🎉 Initial Release
254
+
255
+ Primeira versão pública do projeto.
256
+ ```
257
+
258
+ Esta é uma regra automática aplicada a **qualquer projeto** que usar a ferramenta pela primeira vez.
259
+
260
+ ### �🔴 MAJOR (X.0.0) - Breaking Changes
261
+
262
+ Detectado quando a mensagem de commit contém palavras-chave como:
263
+
264
+ - `breaking`, `break`
265
+ - `incompatível`, `incompatible`
266
+ - `remove`, `delete`
267
+ - `refactor completo`, `rewrite`
268
+
269
+ **Exemplo:**
270
+
271
+ ```bash
272
+ git commit -m "breaking: remove deprecated API methods"
273
+ # Sugere: 1.5.3 → 2.0.0
274
+ ```
275
+
276
+ ### 🟡 MINOR (x.Y.0) - Novas Funcionalidades
277
+
278
+ Detectado quando:
279
+
280
+ - Mensagem contém: `add`, `new`, `feature`, `implement`, `create`
281
+ - Novos arquivos são adicionados ao projeto
282
+ - Arquivos de configuração são modificados
283
+
284
+ **Exemplo:**
285
+
286
+ ```bash
287
+ git commit -m "feat: add user authentication module"
288
+ # Sugere: 1.5.3 → 1.6.0
289
+ ```
290
+
291
+ ### 🟢 PATCH (x.y.Z) - Correções
292
+
293
+ Detectado quando a mensagem contém:
294
+
295
+ - `fix`, `bug`, `error`
296
+ - `correção`, `ajuste`
297
+ - Pequenas mudanças sem novos arquivos
298
+
299
+ **Exemplo:**
300
+
301
+ ```bash
302
+ git commit -m "fix: resolve memory leak in cache"
303
+ # Sugere: 1.5.3 → 1.5.4
304
+ ```
305
+
306
+ ### 📊 Entendendo o Impacto de Cada Tipo de Versão
307
+
308
+ Seguindo o [Semantic Versioning (SemVer)](https://semver.org/), cada tipo de versão tem um significado específico e impacta diferentes aspectos do seu projeto:
309
+
310
+ #### 🔴 MAJOR (X.0.0) - Quando usar?
311
+
312
+ **Use MAJOR quando você fizer mudanças incompatíveis na API/interface pública.**
313
+
314
+ **Impactos:**
315
+
316
+ - ⚠️ **Quebra compatibilidade**: Usuários precisarão atualizar o código deles
317
+ - 🔧 **Requer migração**: Pode necessitar guia de migração
318
+ - 📢 **Comunicação crítica**: Deve ser amplamente comunicado
319
+ - 🚨 **Risco alto**: Pode causar falhas em projetos dependentes
320
+
321
+ **Exemplos de mudanças MAJOR:**
322
+
323
+ ```javascript
324
+ // ❌ Remover funções/métodos públicos
325
+ - export function oldMethod() { } // Removido
326
+
327
+ // ❌ Mudar assinatura de funções
328
+ - function process(data: string): void
329
+ + function process(data: object, options: Options): Promise<void>
330
+
331
+ // ❌ Alterar comportamento esperado
332
+ - return { success: true } // Antes retornava objeto
333
+ + return true // Agora retorna boolean
334
+
335
+ // ❌ Remover ou renomear propriedades públicas
336
+ - interface User { username: string }
337
+ + interface User { name: string } // Quebra código existente
338
+ ```
339
+
340
+ **Quando evitar:** Se possível, adicione a nova funcionalidade sem remover a antiga (deprecated) e só remova na próxima MAJOR.
341
+
342
+ #### 🟡 MINOR (x.Y.0) - Quando usar?
343
+
344
+ **Use MINOR quando você adicionar funcionalidades novas, mantendo compatibilidade com versões anteriores.**
345
+
346
+ **Impactos:**
347
+
348
+ - ✅ **Mantém compatibilidade**: Código existente continua funcionando
349
+ - 🎁 **Adiciona valor**: Novas features disponíveis
350
+ - 📈 **Evolução natural**: Crescimento do projeto
351
+ - 🔄 **Upgrade seguro**: Usuários podem atualizar sem medo
352
+
353
+ **Exemplos de mudanças MINOR:**
354
+
355
+ ```javascript
356
+ // ✅ Adicionar novas funções/métodos
357
+ + export function newFeature() { } // Nova função
358
+
359
+ // ✅ Adicionar novos parâmetros opcionais
360
+ - function process(data: string): void
361
+ + function process(data: string, options?: Options): void
362
+
363
+ // ✅ Adicionar novas propriedades opcionais
364
+ interface User {
365
+ username: string;
366
+ + email?: string; // Novo campo opcional
367
+ }
368
+
369
+ // ✅ Adicionar novas classes/módulos
370
+ + export class NewService { } // Nova funcionalidade
371
+ ```
372
+
373
+ **Quando usar:** Sempre que adicionar algo novo que não quebra código existente.
374
+
375
+ #### 🟢 PATCH (x.y.Z) - Quando usar?
376
+
377
+ **Use PATCH quando você corrigir bugs, sem adicionar funcionalidades ou quebrar compatibilidade.**
378
+
379
+ **Impactos:**
380
+
381
+ - 🐛 **Corrige problemas**: Bugs são resolvidos
382
+ - 🔒 **Totalmente seguro**: Zero risco de quebrar código
383
+ - ⚡ **Deve ser automático**: Usuários devem poder atualizar sem pensar
384
+ - 🎯 **Foco em estabilidade**: Melhora qualidade sem mudanças
385
+
386
+ **Exemplos de mudanças PATCH:**
387
+
388
+ ```javascript
389
+ // ✅ Corrigir bugs
390
+ - if (value > 10) // Bug: deveria ser >=
391
+ + if (value >= 10)
392
+
393
+ // ✅ Corrigir tipos/documentação
394
+ - * @param value - Must be string // Documentação errada
395
+ + * @param value - Must be number
396
+
397
+ // ✅ Melhorar performance sem mudar comportamento
398
+ - return items.map(x => x).filter(x => x > 0) // Ineficiente
399
+ + return items.filter(x => x > 0) // Otimizado
400
+
401
+ // ✅ Corrigir edge cases
402
+ - if (array.length) return array[0] // Falha se length = 0
403
+ + if (array.length > 0) return array[0]
404
+ ```
405
+
406
+ **Quando usar:** Sempre que consertar algo que não estava funcionando corretamente.
407
+
408
+ #### 🎯 Decisão Rápida: Qual versão usar?
409
+
410
+ ```
411
+ Quebra código existente?
412
+ ├─ SIM → 🔴 MAJOR (X.0.0)
413
+ └─ NÃO → Adiciona nova funcionalidade?
414
+ ├─ SIM → 🟡 MINOR (x.Y.0)
415
+ └─ NÃO → 🟢 PATCH (x.y.Z)
416
+ ```
417
+
418
+ #### 💡 Dicas Práticas
419
+
420
+ 1. **Na dúvida entre MINOR e PATCH:**
421
+
422
+ - Se adiciona qualquer coisa nova (função, parâmetro, propriedade) → MINOR
423
+ - Se apenas corrige comportamento → PATCH
424
+
425
+ 2. **Evite MAJOR sempre que possível:**
426
+
427
+ - Use `@deprecated` para marcar código antigo
428
+ - Mantenha compatibilidade por 1-2 versões MINOR antes de remover
429
+
430
+ 3. **Pre-releases (0.x.x):**
431
+
432
+ - Versões 0.x.x podem fazer breaking changes em MINOR
433
+ - Use antes do 1.0.0 para desenvolvimento inicial
434
+
435
+ 4. **Versão 1.0.0:**
436
+ - Representa a primeira versão estável
437
+ - A partir dela, siga SemVer rigorosamente
438
+
439
+ ## 📖 Exemplos
440
+
441
+ ### Fluxo Típico
442
+
443
+ ```bash
444
+ # 1. Faça suas alterações
445
+ vim src/index.ts
446
+
447
+ # 2. Commit suas mudanças
448
+ git commit -m "feat: add new export functionality"
449
+
450
+ # 3. Execute o version control
451
+ version-control
452
+
453
+ # Output:
454
+ # ═══════════════════════════════════════════════════════════
455
+ # Sistema de Controle de Versão
456
+ # ═══════════════════════════════════════════════════════════
457
+ #
458
+ # Versão atual: 1.2.3
459
+ #
460
+ # Analisando último commit...
461
+ #
462
+ # Mensagem do commit:
463
+ # "feat: add new export functionality"
464
+ #
465
+ # Arquivos modificados: 2
466
+ # - src/index.ts
467
+ # - src/exporter.ts
468
+ #
469
+ # Análise da mudança:
470
+ # 🟡 Commit indica nova funcionalidade
471
+ #
472
+ # Tipo sugerido: 🟡 MINOR
473
+ # Nova versão: 1.2.3 → 1.3.0
474
+ #
475
+ # Deseja atualizar a versão? (s/n): s
476
+ #
477
+ # Confirme o tipo de versão:
478
+ # 1 - MAJOR (2.0.0) - Breaking changes
479
+ # 2 - MINOR (1.3.0) - Nova funcionalidade
480
+ # 3 - PATCH (1.2.4) - Correção de bug
481
+ #
482
+ # Escolha (1/2/3) [padrão: 2]:
483
+ #
484
+ # Atualizando arquivos...
485
+ # ✓ package.json atualizado
486
+ # ✓ CHANGELOG.md atualizado
487
+ #
488
+ # ✓ Versão atualizada para 1.3.0!
489
+ #
490
+ # Executando comandos git...
491
+ # → git add -A
492
+ # ✓ Arquivos adicionados
493
+ # → git commit -m "chore: bump version to 1.3.0"
494
+ # ✓ Commit criado
495
+ # → git tag v1.3.0
496
+ # ✓ Tag criada
497
+ # → git push
498
+ # ✓ Push realizado
499
+ # → git push --tags
500
+ # ✓ Tags enviadas
501
+ #
502
+ # ✓ Versão 1.3.0 publicada com sucesso!
503
+ ```
504
+
505
+ ### Personalizando a Escolha
506
+
507
+ Você pode escolher um tipo diferente do sugerido:
508
+
509
+ ```bash
510
+ version-control
511
+
512
+ # O sistema sugere PATCH, mas você quer MINOR
513
+ # Escolha (1/2/3) [padrão: 3]: 2
514
+ ```
515
+
516
+ ## 📚 API
517
+
518
+ ### `analyzeChanges(): ChangeAnalysis`
519
+
520
+ Analisa o último commit e retorna uma análise das mudanças.
521
+
522
+ **Retorno:**
523
+
524
+ ```typescript
525
+ interface ChangeAnalysis {
526
+ type: "major" | "minor" | "patch";
527
+ reason: string[];
528
+ filesChanged: string[];
529
+ commitMsg: string;
530
+ }
531
+ ```
532
+
533
+ ### `getCurrentVersion(projectRoot?: string): string`
534
+
535
+ Retorna a versão atual do `package.json`.
536
+
537
+ **Parâmetros:**
538
+
539
+ - `projectRoot` (opcional): Caminho raiz do projeto (padrão: `process.cwd()`)
540
+
541
+ ### `bumpVersion(currentVersion: string, type: VersionType): string`
542
+
543
+ Calcula a nova versão baseado no tipo de bump.
544
+
545
+ **Parâmetros:**
546
+
547
+ - `currentVersion`: Versão atual (ex: "1.2.3")
548
+ - `type`: Tipo de bump (`'major'`, `'minor'`, ou `'patch'`)
549
+
550
+ **Exemplo:**
551
+
552
+ ```typescript
553
+ bumpVersion("1.2.3", "major"); // "2.0.0"
554
+ bumpVersion("1.2.3", "minor"); // "1.3.0"
555
+ bumpVersion("1.2.3", "patch"); // "1.2.4"
556
+ ```
557
+
558
+ ## � Internacionalização
559
+
560
+ A ferramenta detecta automaticamente o idioma do sistema e ajusta todas as mensagens de acordo.
561
+
562
+ ### Idiomas Suportados
563
+
564
+ - 🇬🇧 **Inglês (EN)** - Default
565
+ - 🇧🇷 **Português (PT)** - pt_BR, pt_PT
566
+ - 🇪🇸 **Espanhol (ES)** - es_ES, es_MX, etc.
567
+ - 🇫🇷 **Francês (FR)** - fr_FR, fr_CA, etc.
568
+
569
+ ### Configurar Idioma Manualmente
570
+
571
+ ```bash
572
+ # Configurar para português
573
+ version-control config --lang pt
574
+
575
+ # Configurar para inglês
576
+ version-control config --lang en
577
+
578
+ # Configurar para espanhol
579
+ version-control config --lang es
580
+
581
+ # Configurar para francês
582
+ version-control config --lang fr
583
+
584
+ # Limpar configuração (volta a usar detecção automática)
585
+ version-control config --clear
586
+
587
+ # Ver configuração atual
588
+ version-control config
589
+ ```
590
+
591
+ A configuração é salva globalmente em `~/.version-control-config.json` e será usada em todos os projetos.
592
+
593
+ ### Como Funciona
594
+
595
+ 1. **Configuração Manual**: Se você configurou um idioma com `version-control config --lang`, ele será usado
596
+ 2. **Detecção Automática**: Se não houver configuração, detecta do sistema via `LANG`, `LANGUAGE`, `LC_ALL`
597
+ 3. **Fallback**: Se o idioma não for suportado, usa inglês automaticamente
598
+
599
+ **Indicador de Idioma:**
600
+
601
+ Toda vez que você executar `version-control` ou `smart-commit`, verá uma linha informando:
602
+
603
+ ```bash
604
+ ℹ Current language: PT (manually configured)
605
+ To change language: version-control config --lang <code>
606
+ ```
607
+
608
+ ou
609
+
610
+ ```bash
611
+ ℹ Idioma atual: PT (detectado do sistema)
612
+ Para mudar o idioma: version-control config --lang <code>
613
+ ```
614
+
615
+ ### Detecção Automática do Sistema
616
+
617
+ A detecção é automática baseada nas variáveis de ambiente do sistema:
618
+
619
+ - `LANG`
620
+ - `LANGUAGE`
621
+ - `LC_ALL`
622
+
623
+ **Exemplo:**
624
+
625
+ ```bash
626
+ # Sistema em português
627
+ LANG=pt_BR.UTF-8 version-control
628
+ # Output: "Versão atual: 1.0.0"
629
+ # Output: "Deseja atualizar a versão? (s/n):"
630
+
631
+ # Sistema em inglês
632
+ LANG=en_US.UTF-8 version-control
633
+ # Output: "Current version: 1.0.0"
634
+ # Output: "Update version? (y/n):"
635
+
636
+ # Sistema em espanhol
637
+ LANG=es_ES.UTF-8 version-control
638
+ # Output: "Versión actual: 1.0.0"
639
+ # Output: "¿Actualizar versión? (s/n):"
640
+
641
+ # Sistema em francês
642
+ LANG=fr_FR.UTF-8 version-control
643
+ # Output: "Version actuelle: 1.0.0"
644
+ # Output: "Mettre à jour la version? (o/n):"
645
+ ```
646
+
647
+ ### Idiomas Não Suportados
648
+
649
+ Se o idioma do sistema não for um dos 4 suportados, a ferramenta **automaticamente usa inglês** como fallback.
650
+
651
+ ```bash
652
+ # Sistema em alemão (não suportado)
653
+ LANG=de_DE.UTF-8 version-control
654
+ # Output em inglês: "Current version: 1.0.0"
655
+ ```
656
+
657
+ ## �🎨 Palavras-chave Reconhecidas
658
+
659
+ ### Breaking Changes (MAJOR)
660
+
661
+ - `breaking`, `break`
662
+ - `incompatível`, `incompatible`
663
+ - `remove`, `remov`, `delete`, `delet`
664
+ - `refactor completo`, `reescrita`, `rewrite`
665
+
666
+ ### Novas Funcionalidades (MINOR)
667
+
668
+ - `add`, `adicion`
669
+ - `nova`, `novo`, `new`
670
+ - `feature`, `implement`
671
+ - `criar`, `create`, `funcionalidade`
672
+
673
+ ### Correções (PATCH)
674
+
675
+ - `fix`, `corrig`
676
+ - `bug`, `erro`, `error`
677
+ - `ajust`, `ajeit`, `pequen`
678
+ - `minor change`
679
+
680
+ ## 🤝 Contribuindo
681
+
682
+ Contribuições são bem-vindas! Sinta-se à vontade para:
683
+
684
+ 1. Fazer fork do projeto
685
+ 2. Criar uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
686
+ 3. Commit suas mudanças (`git commit -m 'feat: add some AmazingFeature'`)
687
+ 4. Push para a branch (`git push origin feature/AmazingFeature`)
688
+ 5. Abrir um Pull Request
689
+
690
+ ## 📄 Licença
691
+
692
+ Este projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.
693
+
694
+ ## 👤 Autor
695
+
696
+ **Ridio Ricardo**
697
+
698
+ - GitHub: [@ridioricardo](https://github.com/ridioricardo)
699
+
700
+ ## 🙏 Agradecimentos
701
+
702
+ - Inspirado nas melhores práticas de versionamento semântico
703
+ - Construído com TypeScript para melhor experiência de desenvolvimento
704
+ - Baseado nas especificações do [Semantic Versioning 2.0.0](https://semver.org/)
705
+
706
+ ---
707
+
708
+ ⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!