92 lines
2.8 KiB
JavaScript
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`);
|
|
}
|