71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
#!/usr/bin/env node
|
||
|
||
const readline = require('readline');
|
||
const { execSync } = require('child_process');
|
||
|
||
const rl = readline.createInterface({
|
||
input: process.stdin,
|
||
output: process.stdout
|
||
});
|
||
|
||
const types = {
|
||
'feat': 'Nova funcionalidade',
|
||
'fix': 'Correção de bug',
|
||
'docs': 'Documentação',
|
||
'style': 'Formatação/estilo',
|
||
'refactor': 'Refatoração',
|
||
'test': 'Testes',
|
||
'chore': 'Manutenção',
|
||
'perf': 'Performance',
|
||
'ci': 'CI/CD',
|
||
'build': 'Build',
|
||
'revert': 'Reverter'
|
||
};
|
||
|
||
console.log('🚀 Assistente de Commit\n');
|
||
|
||
console.log('📋 Tipos disponíveis:');
|
||
Object.entries(types).forEach(([key, desc], index) => {
|
||
console.log(`${index + 1}. ${key.padEnd(8)} - ${desc}`);
|
||
});
|
||
|
||
rl.question('\n🏷️ Escolha o tipo (1-11): ', (typeChoice) => {
|
||
const typeKeys = Object.keys(types);
|
||
const type = typeKeys[parseInt(typeChoice) - 1];
|
||
|
||
if (!type) {
|
||
console.log('❌ Tipo inválido');
|
||
process.exit(1);
|
||
}
|
||
|
||
rl.question('📦 Escopo (opcional): ', (scope) => {
|
||
rl.question('📝 Descrição: ', (description) => {
|
||
rl.question('📄 Corpo da mensagem (opcional): ', (body) => {
|
||
|
||
const scopePart = scope ? `(${scope})` : '';
|
||
const firstLine = `${type}${scopePart}: ${description}`;
|
||
const fullMessage = body ? `${firstLine}\n\n${body}` : firstLine;
|
||
|
||
console.log('\n📋 Mensagem de commit:');
|
||
console.log('─'.repeat(50));
|
||
console.log(fullMessage);
|
||
console.log('─'.repeat(50));
|
||
|
||
rl.question('\n✅ Confirmar commit? (y/N): ', (confirm) => {
|
||
if (confirm.toLowerCase() === 'y') {
|
||
try {
|
||
execSync(`git commit -m "${fullMessage}"`, { stdio: 'inherit' });
|
||
console.log('✅ Commit realizado com sucesso!');
|
||
} catch (error) {
|
||
console.log('❌ Erro no commit:', error.message);
|
||
}
|
||
} else {
|
||
console.log('❌ Commit cancelado');
|
||
}
|
||
rl.close();
|
||
});
|
||
});
|
||
});
|
||
});
|
||
});
|