testes/.agent/scripts/check-reuse.js

92 lines
2.8 KiB
JavaScript

#!/usr/bin/env node
/**
* Script: Analisar reutilização de código
* Busca componentes, hooks e services existentes antes de criar novos
* Uso: node check-reuse.js [termo-de-busca]
* Exemplo: node check-reuse.js user
*/
const fs = require('fs');
const path = require('path');
const [, , searchTerm] = process.argv;
if (!searchTerm) {
console.error('❌ Termo de busca é obrigatório!');
console.log('Uso: node check-reuse.js [termo-de-busca]');
process.exit(1);
}
const srcPath = path.join(__dirname, '../../src');
// Buscar arquivos recursivamente
function findFiles(dir, pattern, results = []) {
const files = fs.readdirSync(dir);
files.forEach(file => {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);
if (stat.isDirectory() && !file.includes('node_modules')) {
findFiles(filePath, pattern, results);
} else if (file.toLowerCase().includes(pattern.toLowerCase())) {
results.push(filePath.replace(srcPath, 'src'));
}
});
return results;
}
console.log(`\n🔍 Buscando por: "${searchTerm}"\n`);
// Buscar componentes
const components = findFiles(path.join(srcPath, 'components'), searchTerm);
const featureComponents = findFiles(path.join(srcPath, 'features'), searchTerm)
.filter(f => f.includes('/components/'));
// Buscar hooks
const hooks = findFiles(path.join(srcPath, 'hooks'), searchTerm);
const featureHooks = findFiles(path.join(srcPath, 'features'), searchTerm)
.filter(f => f.includes('/hooks/'));
// Buscar services
const services = findFiles(path.join(srcPath, 'services'), searchTerm);
const featureServices = findFiles(path.join(srcPath, 'features'), searchTerm)
.filter(f => f.includes('Service'));
// Exibir resultados
if (components.length > 0) {
console.log('📦 Componentes Compartilhados:');
components.forEach(c => console.log(` - ${c}`));
console.log('');
}
if (featureComponents.length > 0) {
console.log('📦 Componentes de Features:');
featureComponents.forEach(c => console.log(` - ${c}`));
console.log('');
}
if (hooks.length > 0 || featureHooks.length > 0) {
console.log('🎣 Hooks:');
[...hooks, ...featureHooks].forEach(h => console.log(` - ${h}`));
console.log('');
}
if (services.length > 0 || featureServices.length > 0) {
console.log('🔌 Services:');
[...services, ...featureServices].forEach(s => console.log(` - ${s}`));
console.log('');
}
const total = components.length + featureComponents.length + hooks.length +
featureHooks.length + services.length + featureServices.length;
if (total === 0) {
console.log('❌ Nenhum arquivo encontrado.');
console.log('✅ Pode criar novo componente/hook/service com esse nome.\n');
} else {
console.log(`✅ Total encontrado: ${total} arquivos`);
console.log(`⚠️ Verifique se pode reutilizar antes de criar novo!\n`);
}