lookatni-file-markers
Version:
Advanced file organization system with unique markers for code sharing and project management. Extract files from marked content, generate markers, and validate project integrity.
304 lines (303 loc) • 13.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LookAtniCLI = void 0;
const extractFiles_1 = require("./extractFiles");
const generateMarkers_1 = require("./generateMarkers");
const testLookatni_1 = require("./testLookatni");
const demo_1 = require("./demo");
require("./validateMarkers");
const colors = {
RED: '\x1b[0;31m',
GREEN: '\x1b[0;32m',
YELLOW: '\x1b[1;33m',
BLUE: '\x1b[0;34m',
PURPLE: '\x1b[0;35m',
CYAN: '\x1b[0;36m',
NC: '\x1b[0m'
};
class LookAtniCLI {
printHelp() {
console.log(`${colors.CYAN}🚀 LookAtni CLI v3.0 - Sistema de Marcadores Únicos${colors.NC}`);
console.log("====================================================");
console.log("");
console.log("Uso: lookatni <comando> [argumentos]");
console.log("");
console.log(`${colors.PURPLE}📦 Instalação Global:${colors.NC}`);
console.log(`${colors.YELLOW}npm install -g lookatni-file-markers${colors.NC}`);
console.log("");
console.log(`${colors.YELLOW}Comandos disponíveis:${colors.NC}`);
console.log("");
console.log(`${colors.GREEN}extract${colors.NC} - Extrai arquivos de um arquivo marcado`);
console.log(`${colors.GREEN}generate${colors.NC} - Gera marcadores a partir de uma estrutura de arquivos`);
console.log(`${colors.GREEN}validate${colors.NC} - Valida marcadores em um arquivo`);
console.log(`${colors.GREEN}test${colors.NC} - Executa testes do sistema LookAtni`);
console.log(`${colors.GREEN}demo${colors.NC} - Cria demonstração do sistema`);
console.log(`${colors.GREEN}help${colors.NC} - Mostra esta ajuda`);
console.log(`${colors.GREEN}version${colors.NC} - Mostra a versão do LookAtni`);
console.log("");
console.log(`${colors.YELLOW}Exemplos:${colors.NC}`);
console.log("");
console.log(`${colors.BLUE}# Extrair arquivos${colors.NC}`);
console.log(`lookatni extract codigo.txt ./projeto`);
console.log(`lookatni extract codigo.txt ./destino --dry-run --stats`);
console.log("");
console.log(`${colors.BLUE}# Gerar marcadores${colors.NC}`);
console.log(`lookatni generate ./src codigo.txt`);
console.log(`lookatni generate . projeto.txt --exclude node_modules --include "*.ts"`);
console.log("");
console.log(`${colors.BLUE}# Validar marcadores${colors.NC}`);
console.log(`lookatni validate projeto.txt`);
console.log(`lookatni validate codigo.txt --verbose --warnings`);
console.log("");
console.log(`${colors.BLUE}# Executar testes${colors.NC}`);
console.log(`lookatni test`);
console.log("");
console.log(`${colors.BLUE}# Criar demo${colors.NC}`);
console.log(`lookatni demo`);
console.log("");
console.log(`${colors.PURPLE}💡 Dica: Use ${colors.YELLOW}lookatni <comando> --help${colors.NC}${colors.PURPLE} para ajuda específica de cada comando${colors.NC}`);
console.log("");
console.log(`${colors.CYAN}✨ LookAtni File Markers - Organize your code with unique markers! ✨${colors.NC}`);
}
async handleCommand(command, args) {
switch (command) {
case 'extract':
await this.handleExtract(args);
break;
case 'generate':
await this.handleGenerate(args);
break;
case 'validate':
await this.handleValidate(args);
break;
case 'test':
await this.handleTest(args);
break;
case 'demo':
await this.handleDemo(args);
break;
case 'version':
case '--version':
case '-v':
this.printVersion();
break;
case 'help':
case '--help':
case '-h':
this.printHelp();
break;
default:
console.error(`${colors.RED}❌ Comando desconhecido: ${command}${colors.NC}`);
console.error(`${colors.YELLOW}Use 'lookatni help' para ver os comandos disponíveis${colors.NC}`);
process.exit(1);
}
}
printVersion() {
try {
const fs = require('fs');
const path = require('path');
const packagePath = path.resolve(__dirname, '../../package.json');
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
console.log(`${colors.CYAN}LookAtni File Markers v${packageJson.version}${colors.NC}`);
}
catch {
console.log(`${colors.CYAN}LookAtni File Markers v3.0${colors.NC}`);
}
}
async handleExtract(args) {
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
const extractor = new extractFiles_1.LookAtniExtractor({
interactive: false,
verbose: false,
dryRun: false,
showStats: false,
validateFormat: false
});
extractor.printHelp();
return;
}
const options = {
interactive: args.includes('--interactive') || args.includes('-i'),
verbose: args.includes('--verbose') || args.includes('-v'),
dryRun: args.includes('--dry-run') || args.includes('-d'),
showStats: args.includes('--stats') || args.includes('-s'),
validateFormat: args.includes('--format') || args.includes('-f')
};
const nonOptionArgs = args.filter(arg => !arg.startsWith('-'));
if (nonOptionArgs.length === 0) {
console.error(`${colors.RED}❌ Arquivo de código necessário${colors.NC}`);
console.error(`${colors.YELLOW}Uso: tsx cli.ts extract <arquivo_codigo> [diretorio_destino]${colors.NC}`);
process.exit(1);
}
const sourceFile = nonOptionArgs[0];
const destDir = nonOptionArgs[1] || './extracted';
const extractor = new extractFiles_1.LookAtniExtractor(options);
await extractor.extractFiles(sourceFile, destDir);
}
async handleGenerate(args) {
if (args.includes('--help') || args.includes('-h')) {
const generator = new generateMarkers_1.LookAtniGenerator({
excludePatterns: [],
includePatterns: [],
maxSizeKB: 1000,
verbose: false
});
generator.printHelp();
return;
}
const options = {
excludePatterns: [],
includePatterns: [],
maxSizeKB: 1000,
verbose: args.includes('--verbose') || args.includes('-v')
};
let sourceDir = '.';
let outputFile = 'lookatni-code.txt';
for (let i = 0; i < args.length; i++) {
const arg = args[i];
switch (arg) {
case '-e':
case '--exclude':
if (i + 1 < args.length) {
options.excludePatterns.push(args[++i]);
}
break;
case '-i':
case '--include':
if (i + 1 < args.length) {
options.includePatterns.push(args[++i]);
}
break;
case '-m':
case '--max-size':
if (i + 1 < args.length) {
const size = parseInt(args[++i]);
if (!isNaN(size) && size > 0) {
options.maxSizeKB = size;
}
}
break;
case '-v':
case '--verbose':
break;
default:
if (!arg.startsWith('-')) {
if (sourceDir === '.') {
sourceDir = arg;
}
else if (outputFile === 'lookatni-code.txt') {
outputFile = arg;
}
}
break;
}
}
const generator = new generateMarkers_1.LookAtniGenerator(options);
await generator.generateMarkers(sourceDir, outputFile);
}
async handleValidate(args) {
if (args.includes('--help') || args.includes('-h')) {
console.log(`${colors.CYAN}🔍 LookAtni Validator - Valida marcadores únicos${colors.NC}`);
console.log("====================================================");
console.log("");
console.log("Uso: lookatni validate <arquivo> [opções]");
console.log("");
console.log(`${colors.YELLOW}Argumentos:${colors.NC}`);
console.log(" arquivo Arquivo com marcadores para validar");
console.log("");
console.log(`${colors.YELLOW}Opções:${colors.NC}`);
console.log(" -v, --verbose Saída detalhada");
console.log(" -w, --warnings Mostrar avisos além de erros");
console.log(" -j, --json Saída em formato JSON");
console.log(" -e, --exit-on-error Sair com código de erro se inválido");
console.log(" -h, --help Mostrar esta ajuda");
console.log("");
console.log(`${colors.YELLOW}Exemplos:${colors.NC}`);
console.log("");
console.log(`${colors.BLUE}# Validar arquivo básico${colors.NC}`);
console.log(`lookatni validate projeto.txt`);
console.log("");
console.log(`${colors.BLUE}# Validar com avisos e verbose${colors.NC}`);
console.log(`lookatni validate projeto.txt --verbose --warnings`);
console.log("");
console.log(`${colors.BLUE}# Validar para CI/CD (JSON + exit on error)${colors.NC}`);
console.log(`lookatni validate projeto.txt --json --exit-on-error`);
return;
}
const { spawn } = require('child_process');
const path = require('path');
const validateScript = path.resolve(__dirname, 'validateMarkers.js');
const child = spawn('node', [validateScript, ...args], {
stdio: 'inherit'
});
child.on('exit', (code) => {
process.exit(code || 0);
});
child.on('error', (error) => {
console.error(`${colors.RED}❌ Erro ao executar validação: ${error.message}${colors.NC}`);
process.exit(1);
});
}
async handleTest(args) {
if (args.includes('--help') || args.includes('-h')) {
console.log(`${colors.CYAN}🧪 LookAtni Test Suite v3.0${colors.NC}`);
console.log("===============================");
console.log("");
console.log("Executa testes completos do sistema LookAtni");
console.log("");
console.log("Uso: tsx cli.ts test");
console.log("");
console.log("Os testes irão:");
console.log("1. Criar estrutura de teste");
console.log("2. Gerar marcadores");
console.log("3. Extrair arquivos");
console.log("4. Validar integridade");
console.log("5. Limpar arquivos temporários");
return;
}
const tester = new testLookatni_1.LookAtniTester();
await tester.runTests();
}
async handleDemo(args) {
if (args.includes('--help') || args.includes('-h')) {
console.log(`${colors.CYAN}🎯 LookAtni Demo v3.0${colors.NC}`);
console.log("=======================");
console.log("");
console.log("Cria arquivo de demonstração do sistema LookAtni");
console.log("");
console.log("Uso: tsx cli.ts demo");
console.log("");
console.log("Cria demo-code.txt com:");
console.log("- Projeto web completo");
console.log("- HTML, CSS, JavaScript");
console.log("- Documentação e exemplos");
return;
}
const demo = new demo_1.LookAtniDemo();
demo.run();
}
}
exports.LookAtniCLI = LookAtniCLI;
async function main() {
const args = process.argv.slice(2);
if (args.length === 0) {
const cli = new LookAtniCLI();
cli.printHelp();
return;
}
const command = args[0];
const commandArgs = args.slice(1);
try {
const cli = new LookAtniCLI();
await cli.handleCommand(command, commandArgs);
process.exit(0);
}
catch (error) {
console.error(`${colors.RED}❌ Erro: ${error}${colors.NC}`);
process.exit(1);
}
}
if (require.main === module) {
main().catch(console.error);
}