src/cli/commands/estudar.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import chalk from 'chalk';
import ora from 'ora';
import { analisarSite } from '../../core/pipeline.js';
import { montarTrilha } from '../../knowledge/trilhas.js';
import { TECNOLOGIAS, significadoGenerico } from '../../knowledge/tecnologias.js';
export interface OpcoesEstudar {
completo?: boolean;
}
export async function comandoEstudar(url: string, opcoes: OpcoesEstudar): Promise<void> {
const spinner = ora({ text: 'analisando…', stream: process.stderr }).start();
const rep = await analisarSite(url, {
modo: opcoes.completo ? 'completo' : 'rapido',
aoProgredir: (etapa) => (spinner.text = etapa),
});
spinner.stop();
const linhas: string[] = [];
linhas.push(chalk.bold('O site utiliza:'));
const relevantes = rep.deteccoes.filter((d) => d.confianca >= 50).slice(0, 8);
if (!relevantes.length) {
linhas.push(chalk.dim(' Não reconheci tecnologias com confiança suficiente para uma trilha.'));
process.stdout.write(linhas.join('\n') + '\n');
return;
}
for (const d of relevantes) {
const resumo = TECNOLOGIAS[d.nome]?.significado ?? significadoGenerico(d.categorias);
const curto = resumo.split(/[.—]/)[0]?.trim() ?? resumo;
linhas.push(` ${chalk.red(d.nome)} ${chalk.dim('→')} ${curto}`);
}
linhas.push('');
linhas.push(chalk.bold('Para compreender uma estrutura semelhante, estude nesta ordem:'));
montarTrilha(rep.deteccoes).forEach((passo, i) => {
linhas.push(` ${chalk.red(`${i + 1}.`)} ${passo}`);
});
process.stdout.write(linhas.join('\n') + '\n');
}
|