UNPKG

tulz

Version:

A lightweight CLI tool for codebase analysis and aggregation - perfect for slow machines and text editor workflows

125 lines (106 loc) 5.79 kB
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); // Get the directory where the CLI is installed const CLI_ROOT = __dirname; // Update all your require paths to use absolute paths const { generateStructureReport } = require(path.join(CLI_ROOT, 'tulz_core/reporting/generateStructureReport.js')); const { generateLineCountReport } = require(path.join(CLI_ROOT, 'tulz_core/reporting/generateLineCountReport.js')); const { findDryOpportunities } = require(path.join(CLI_ROOT, 'tulz_core/analysis/findDry.js')); const { findInvalidImports } = require(path.join(CLI_ROOT, 'tulz_core/analysis/findInvalidImports.js')); const { generateAggregatedTxt } = require(path.join(CLI_ROOT, 'tulz_core/aggregation/generateAggregatedTxt.js')); const { formatDryReport, formatImportsReport } = require(path.join(CLI_ROOT, 'tulz_core/utils/formatters.js')); const args = process.argv.slice(2); const command = args[0]; const targetPath = args[1] || '.'; const absoluteTargetPath = path.resolve(targetPath); const projectName = path.basename(absoluteTargetPath); console.log(`\n🛠️ tulz CLI - Analisando: "${absoluteTargetPath}"\n`); function saveReport(content, suffix) { const filename = `${projectName}__${suffix}.txt`; const outputPath = path.join(process.cwd(), filename); try { fs.writeFileSync(outputPath, content); console.log(`✅ [${suffix}] Relatório salvo em: ${outputPath}`); } catch (error) { console.error(`❌ [${suffix}] Erro ao salvar arquivo: ${error.message}`); } } // Funções wrapper para cada comando function runStructure() { /* ...código existente sem alteração... */ } function runLines() { /* ...código existente sem alteração... */ } function runDry() { /* ...código existente sem alteração... */ } function runImports() { /* ...código existente sem alteração... */ } // <-- CÓDIGO EXISTENTE DAS FUNÇÕES WRAPPER (copiado para não quebrar) function runStructure() { console.log('⏳ Gerando relatório de estrutura...'); const report = generateStructureReport(targetPath); saveReport(report, 'structure'); } function runLines() { console.log('⏳ Gerando relatório de contagem de linhas...'); const report = generateLineCountReport(targetPath); saveReport(report, 'lines'); } function runDry() { console.log('⏳ Analisando oportunidades DRY...'); const results = findDryOpportunities(targetPath); const report = formatDryReport(results); saveReport(report, 'dry'); } function runImports() { console.log('⏳ Verificando imports inválidos...'); const results = findInvalidImports(targetPath); const report = formatImportsReport(results); saveReport(report, 'imports'); } function runAggregate() { console.log('⏳ Agregando código-fonte...'); const configPath = path.join(process.cwd(), 'tulz.config.json'); const globalConfigPath = '/etc/tulz/default-config.json'; let config; if (fs.existsSync(configPath)) { // Use local config if exists try { config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); } catch (error) { console.error(`❌ [aggregate] Erro ao processar o arquivo de configuração local: ${error.message}`); return; } } else if (fs.existsSync(globalConfigPath)) { // Fall back to global config try { config = JSON.parse(fs.readFileSync(globalConfigPath, 'utf-8')); console.log('ℹ️ Usando configuração global padrão'); } catch (error) { console.error(`❌ [aggregate] Erro ao processar a configuração global: ${error.message}`); return; } } else { console.error('❌ [aggregate] Erro: Nenhum arquivo de configuração encontrado.'); console.error(' Crie "tulz.config.json" no diretório atual ou configure o arquivo global em /etc/tulz/default-config.json'); return; } if (!config.aggregatePaths || !Array.isArray(config.aggregatePaths)) { console.error('❌ [aggregate] Erro: A chave "aggregatePaths" está faltando ou não é um array na configuração.'); return; } const report = generateAggregatedTxt(targetPath, config.aggregatePaths); saveReport(report, 'aggregate'); } // Roteador principal de comandos function run() { switch (command) { case 'structure': { runStructure(); break; } case 'lines': { runLines(); break; } case 'dry': { runDry(); break; } case 'imports': { runImports(); break; } case 'aggregate': { runAggregate(); break; } // <-- NOVO COMANDO case 'all': { console.log('🚀 Executando todos os relatórios e a agregação...\n'); runStructure(); console.log('---'); runLines(); console.log('---'); runDry(); console.log('---'); runImports(); console.log('---'); runAggregate(); // <-- ADICIONADO AO 'all' console.log('\n✨ Concluído! Todas as tarefas foram executadas.'); break; } case 'help': default: { console.log('Uso: node cli.js <comando> [caminho]'); console.log('\nComandos disponíveis:'); console.log(' all - Executa TODAS as tarefas (gera 4 relatórios e 1 agregado).'); console.log(' structure - Gera o relatório de estrutura.'); console.log(' lines - Gera o relatório de contagem de linhas.'); console.log(' dry - Analisa o código em busca de duplicatas.'); console.log(' imports - Verifica se há imports quebrados no código.'); console.log(' aggregate - Agrega os arquivos/pastas definidos em tulz.config.json.'); // <-- NOVA AJUDA console.log(' help - Mostra esta mensagem de ajuda.'); break; } } } run();