UNPKG

cartorio-plataforma-cli

Version:

CLI para gerenciar a Plataforma do Cartório de Criciúma com sistema de módulos

184 lines (167 loc) 9.31 kB
const chalk = require('chalk'); const boxen = require('boxen'); module.exports = function help() { // Banner personalizado para a CLI const banner = chalk.bold.cyan(` ██████╗ ██╗ █████╗ ████████╗ █████╗ ███████╗ ██████╗ ██████╗ ███╗ ███╗ █████╗ ██╔══██╗██║ ██╔══██╗╚══██╔══╝██╔══██╗██╔════╝██╔═══██╗██╔══██╗████╗ ████║██╔══██╗ ██████╔╝██║ ███████║ ██║ ███████║█████╗ ██║ ██║██████╔╝██╔████╔██║███████║ ██╔═══╝ ██║ ██╔══██║ ██║ ██╔══██║██╔══╝ ██║ ██║██╔══██╗██║╚██╔╝██║██╔══██║ ██║ ███████╗██║ ██║ ██║ ██║ ██║██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║██║ ██║ ╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ██████╗ █████╗ ██████╗ ████████╗ ██████╗ ██████╗ ██╗ ██████╗ ██╔════╝██╔══██╗██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗██║██╔═══██╗ ██║ ███████║██████╔╝ ██║ ██║ ██║██████╔╝██║██║ ██║ ██║ ██╔══██║██╔══██╗ ██║ ██║ ██║██╔══██╗██║██║ ██║ ╚██████╗██║ ██║██║ ██║ ██║ ╚██████╔╝██║ ██║██║╚██████╔╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ `); // Descrição da CLI const description = chalk.white( 'CLI para gerenciar a Plataforma do Cartório de Criciúma. Permite o controle centralizado de todos os componentes da plataforma, incluindo serviços de infraestrutura, core e módulos.' ); // Comandos disponíveis const commandsTitle = chalk.bold.underline.white('\n📋 COMANDOS DISPONÍVEIS:'); const commands = [ { command: 'start', description: 'Inicia os componentes da plataforma', options: [ { option: '-a, --all', description: 'Inicia todos os componentes (Infra + Core + Módulos)' }, { option: '-i, --infra', description: 'Inicia apenas serviços de infraestrutura (Consul, PostgreSQL, Traefik)' }, { option: '-c, --core', description: 'Inicia infraestrutura e componentes core (Root Config, Plataforma Frontend, Plataforma Backend)' }, { option: '-f, --full', description: 'Inicia infraestrutura, core e módulos' }, { option: '-u, --custom', description: 'Modo personalizado - permite selecionar módulos específicos' }, { option: '-m, --modules <lista>', description: 'Lista de módulos para iniciar no formato id:tipo (ex: senhas:frontend,senhas:backend)' }, { option: '-e, --env <ambiente>', description: 'Especifica o ambiente (dev, local, prod). Padrão: local' }, { option: '-I, --interactive', description: 'Modo interativo com assistente para seleção de componentes e ambiente' }, { option: '-b, --build', description: 'Constrói as imagens com Docker Buildx Bake antes de iniciar (padrão)' }, { option: '-n, --no-build', description: 'Não constrói as imagens, usa as existentes' } ] }, { command: 'stop', description: 'Para componentes da plataforma', options: [ { option: '-e, --env <ambiente>', description: 'Especifica o ambiente (dev, local, prod). Padrão: local' }, { option: '-i, --interactive', description: 'Modo interativo com assistente para seleção de componentes e ambiente' } ] }, { command: 'status', description: 'Exibe o status atual dos componentes da plataforma', options: [ { option: '-e, --env <ambiente>', description: 'Especifica o ambiente (dev, local, prod). Padrão: local' }, { option: '-i, --interactive', description: 'Modo interativo com assistente para verificação detalhada de status' } ] }, { command: 'logs', description: 'Exibe logs dos componentes da plataforma', options: [ { option: '-s, --service <serviço>', description: 'Exibe logs apenas do serviço especificado' }, { option: '-e, --env <ambiente>', description: 'Especifica o ambiente (dev, local, prod). Padrão: local' }, { option: '-f, --follow', description: 'Segue os logs em tempo real' }, { option: '-i, --interactive', description: 'Modo interativo para seleção de serviços' } ] } ]; // Exemplos de uso const examplesTitle = chalk.bold.underline.white('\n🔍 EXEMPLOS DE USO:'); const examples = [ { description: 'Iniciar todos os componentes no ambiente local', command: 'plataforma start --all' }, { description: 'Iniciar em modo interativo para selecionar componentes', command: 'plataforma start --interactive' }, { description: 'Iniciar apenas a infraestrutura em ambiente de desenvolvimento', command: 'plataforma start --infra --env dev' }, { description: 'Iniciar infraestrutura e core em ambiente local', command: 'plataforma start --core' }, { description: 'Iniciar infraestrutura, core e módulos em ambiente de produção', command: 'plataforma start --full --env prod' }, { description: 'Iniciar módulos específicos', command: 'plataforma start --custom --modules senhas:frontend,senhas:backend' }, { description: 'Iniciar serviços sem reconstruir as imagens', command: 'plataforma start --all --no-build' }, { description: 'Verificar status de todos os componentes', command: 'plataforma status' }, { description: 'Parar componentes de forma interativa', command: 'plataforma stop --interactive' }, { description: 'Visualizar logs do serviço plataforma-backend', command: 'plataforma logs --service plataforma-backend --follow' } ]; // Ambientes disponíveis const environmentsTitle = chalk.bold.underline.white('\n🌐 AMBIENTES DISPONÍVEIS:'); const environments = [ { name: 'dev', description: 'Ambiente de desenvolvimento (para equipe de desenvolvimento)' }, { name: 'local', description: 'Ambiente local (padrão, para testes)' }, { name: 'prod', description: 'Ambiente de produção' } ]; // Dicas adicionais const tipsTitle = chalk.bold.underline.white('\n💡 DICAS:'); const tips = [ 'Use o modo interativo (--interactive) para uma experiência guiada e mais amigável', 'Para visualizar logs em tempo real, use a opção --follow', 'Verifique o status dos componentes antes de iniciar ou parar serviços', 'Utilize o ambiente correto para evitar conflitos de configuração', 'Use --no-build para iniciar rapidamente quando souber que as imagens já estão construídas' ]; // Formatação das seções const formatCommands = commands.map(cmd => { const cmdText = chalk.green(`plataforma ${cmd.command}`); const descText = chalk.white(cmd.description); const options = cmd.options.map(opt => ` ${chalk.yellow(opt.option.padEnd(20))} ${chalk.dim(opt.description)}` ).join('\n'); return ` ${cmdText} - ${descText}\n${options}`; }).join('\n\n'); const formatExamples = examples.map(ex => ` ${chalk.dim(ex.description)}\n ${chalk.green(ex.command)}` ).join('\n\n'); const formatEnvironments = environments.map(env => ` ${chalk.yellow(env.name.padEnd(10))} ${chalk.white(env.description)}` ).join('\n'); const formatTips = tips.map(tip => ` ${chalk.cyan('•')} ${chalk.white(tip)}` ).join('\n'); // Montagem final da ajuda const help = boxen( `${banner}\n\n${description}\n${commandsTitle}\n\n${formatCommands}\n${examplesTitle}\n\n${formatExamples}\n${environmentsTitle}\n\n${formatEnvironments}\n${tipsTitle}\n\n${formatTips}`, { padding: 1, margin: 1, borderStyle: 'round', borderColor: 'cyan' } ); console.log(help); };