UNPKG

liquido

Version:

Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português

270 lines 15.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const figlet_1 = require("figlet"); const flexoes_1 = require("@designliquido/flexoes"); const chalk_1 = require("chalk"); const yargs_1 = __importDefault(require("yargs")); const prompts_1 = __importDefault(require("prompts")); const child_process_1 = require("child_process"); const process_1 = require("process"); const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const liquido_1 = require("./liquido"); const interface_linha_comando_1 = require("./interface-linha-comando"); const gerador_visoes_1 = require("./interface-linha-comando/gerar/gerador-visoes"); const gerador_rotas_1 = require("./interface-linha-comando/gerar/gerador-rotas"); const gerador_inicializacao_lincones_1 = require("./interface-linha-comando/gerar/gerador-inicializacao-lincones"); /** * Classe que representa o ponto de entrada da aplicação Liquido. */ class LiquidoPontoEntrada { constructor() { this.logo = (0, figlet_1.textSync)('Liquido', { horizontalLayout: 'full' }); } mostrarLogo() { if (process.env.LIQUIDO_OBSERVANDO === '1') { return; } console.log((0, chalk_1.blue)(this.logo + '\n')); } async comandoDocumentar() { // await encontrarControladores(); await (0, interface_linha_comando_1.documentar)(); } async comandoGerar(args) { var _a, _b, _c, _d, _e; let nomeModelo = args.modelo; if (nomeModelo === undefined || nomeModelo.length <= 0) { const opcoesModelos = (0, interface_linha_comando_1.obterTodosModelos)(); const respostaNomeModelo = await (0, prompts_1.default)({ type: 'select', name: 'nomeModelo', message: 'Qual o nome do modelo?', choices: opcoesModelos }); nomeModelo = respostaNomeModelo.nomeModelo; } const declaracoes = await (0, interface_linha_comando_1.importarModelos)(nomeModelo); (0, interface_linha_comando_1.criarDiretorioAplicacao)('rotas'); const motor = (0, interface_linha_comando_1.lerMotorConfigurado)(); const geradorVisoes = new gerador_visoes_1.GeradorVisoes(); const geradorRotas = new gerador_rotas_1.GeradorRotas(motor); let geradorInicializacao = null; let caminhoArquivoInicializacao = null; if (motor === 'lincones') { const liquido = new liquido_1.Liquido(process.cwd()); await liquido.importarArquivoConfiguracao(); const arquivoInicializacao = (_e = (_d = (_c = (_b = (_a = liquido.centroConfiguracoes) === null || _a === void 0 ? void 0 : _a.liquido) === null || _b === void 0 ? void 0 : _b.dados) === null || _c === void 0 ? void 0 : _c.lincones) === null || _d === void 0 ? void 0 : _d.arquivoInicializacao) !== null && _e !== void 0 ? _e : 'inicializacao.lincones'; caminhoArquivoInicializacao = path_1.default.join(process.cwd(), arquivoInicializacao); geradorInicializacao = new gerador_inicializacao_lincones_1.GeradorInicializacaoLincones(); } for (const declaracao of declaracoes) { const declaracaoModelo = declaracao; const nomeBaseModelo = declaracaoModelo.simbolo.lexema.toLocaleLowerCase('pt'); const nomeModeloPlural = (0, flexoes_1.pluralizar)(nomeBaseModelo).toLocaleLowerCase('pt'); const caminhosRotas = geradorRotas.criarNovasRotas(declaracaoModelo); for (const caminhoRota of caminhosRotas) { console.info((0, chalk_1.blue)(`Rota ${caminhoRota}`)); } (0, interface_linha_comando_1.criarDiretorioSeNaoExiste)('visoes', nomeModeloPlural); const visaoSelecionarTudo = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'selecionarTudo'); console.info((0, chalk_1.blue)(`Visão ${visaoSelecionarTudo}`)); const visaoSelecionarUm = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'selecionarUm'); console.info((0, chalk_1.blue)(`Visão ${visaoSelecionarUm}`)); const visaoAdicionar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'adicionar'); console.info((0, chalk_1.blue)(`Visão ${visaoAdicionar}`)); const visaoEditar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'editar'); console.info((0, chalk_1.blue)(`Visão ${visaoEditar}`)); const visaoExcluir = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'excluir'); console.info((0, chalk_1.blue)(`Visão ${visaoExcluir}`)); if (geradorInicializacao && caminhoArquivoInicializacao) { geradorInicializacao.acrescentarCriarTabela(declaracaoModelo, caminhoArquivoInicializacao); console.info((0, chalk_1.blue)(`Inicialização ${caminhoArquivoInicializacao}`)); } } } async comandoNovo(args) { let nomeProjeto = args.nome; if (nomeProjeto === undefined || nomeProjeto.length <= 0) { const respostaNomeProjeto = await (0, prompts_1.default)({ type: 'text', name: 'nomeProjeto', message: 'Qual o nome do seu projeto?' }); nomeProjeto = respostaNomeProjeto.nomeProjeto; } if (nomeProjeto.length > 0) { const diretorioAlvo = nomeProjeto; if (nomeProjeto === '.' || nomeProjeto === './') { nomeProjeto = path_1.default.basename((0, process_1.cwd)()); } console.log((0, chalk_1.green)(`Iremos criar um novo projeto em Liquido chamado "${nomeProjeto}"`)); const resposta = await (0, prompts_1.default)({ type: 'confirm', message: 'Confirma?', name: 'confirmado', initial: true, onRender() { this.yesMsg = 'Sim'; this.noMsg = 'não'; this.yesOption = '(S/n)'; } }); if (resposta.confirmado) { const diretorioCompleto = (0, interface_linha_comando_1.criarDiretorioAplicacao)(diretorioAlvo); const perguntaTipoProjeto = await (0, prompts_1.default)({ type: 'select', name: 'tipoProjeto', message: 'Selecione o tipo de projeto', choices: [ { title: 'MVC', description: 'Modelo-Visão-Controlador', value: 'mvc' }, { title: 'API REST', description: 'Interface de dados usando o modelo REST', value: 'api-rest' } ], initial: 1 }); const perguntaLinguagemDeBackEnd = await (0, prompts_1.default)({ type: 'select', name: 'linguagemBackEnd', message: 'Selecione a linguagem de programação', choices: [ { title: 'Delégua', value: 'delegua' }, { title: 'Pituguês', value: 'pitugues' } ], initial: 1 }); const perguntaInicializarRepositorioGit = await (0, prompts_1.default)({ type: 'confirm', message: 'Deseja inicializar um repositório Git?', name: 'confirmado', initial: true, onRender() { this.yesMsg = 'Sim'; this.noMsg = 'não'; this.yesOption = '(S/n)'; } }); const inicializarRepositorioGit = perguntaInicializarRepositorioGit.confirmado; const perguntaQualGerenciadorDePacotesQuerUsar = await (0, prompts_1.default)({ type: 'select', name: 'gerenciadorDePacotes', message: 'Selecione o gerenciador de pacotes que você deseja utilizar', choices: [ { title: 'NPM', value: 'npm' }, { title: 'Yarn', value: 'yarn' }, { title: 'Bun', value: 'bun' } ], initial: 1 }); const gerenciadorDePacotes = perguntaQualGerenciadorDePacotesQuerUsar.gerenciadorDePacotes; const linguagemSelecionada = perguntaLinguagemDeBackEnd.linguagemBackEnd; await (0, interface_linha_comando_1.detectarGerenciadorDePacotes)(gerenciadorDePacotes, diretorioCompleto); await (0, interface_linha_comando_1.copiarArquivosDeExemploParaNovoProjeto)(nomeProjeto, perguntaTipoProjeto.tipoProjeto, linguagemSelecionada, diretorioCompleto); await (0, interface_linha_comando_1.gerarRepositorioGit)(inicializarRepositorioGit, diretorioCompleto); console.info((0, chalk_1.yellow)(`Seu projeto foi criado com sucesso! ${diretorioCompleto}`)); } } } async comandoBancoIniciar(args) { var _a, _b, _c, _d, _e, _f; const liquido = new liquido_1.Liquido(process.cwd()); await liquido.importarArquivoConfiguracao(); const dados = (_b = (_a = liquido.centroConfiguracoes) === null || _a === void 0 ? void 0 : _a.liquido) === null || _b === void 0 ? void 0 : _b.dados; const motor = (_c = dados === null || dados === void 0 ? void 0 : dados.motor) !== null && _c !== void 0 ? _c : 'lincones'; const tecnologia = (_d = dados === null || dados === void 0 ? void 0 : dados.lincones) === null || _d === void 0 ? void 0 : _d.tecnologia; const caminhoBanco = (_e = dados === null || dados === void 0 ? void 0 : dados.lincones) === null || _e === void 0 ? void 0 : _e.caminho; if (!tecnologia || !caminhoBanco) { console.error((0, chalk_1.red)('Configuração de banco de dados não encontrada em configuracao.delprops.')); console.error((0, chalk_1.red)('Adicione liquido.dados.lincones.tecnologia e liquido.dados.lincones.caminho')); process.exit(1); return; } try { if (motor === 'delegua-entidades') { await (0, interface_linha_comando_1.inicializarBancoDeleguaEntidades)(tecnologia, caminhoBanco, args.apenasEstrutura, args.apenasDados); } else { await (0, interface_linha_comando_1.inicializarBancoLincones)(tecnologia, caminhoBanco, args.arquivo, args.apenasEstrutura, args.apenasDados); } } catch (erro) { console.error((0, chalk_1.red)(`Erro na inicialização do banco: ${(_f = erro === null || erro === void 0 ? void 0 : erro.message) !== null && _f !== void 0 ? _f : erro}`)); process.exit(1); } } resolverCaminhosObservados() { return ['rotas', 'visoes', 'estilos'] .map((diretorio) => path_1.default.join(process.cwd(), diretorio)) .filter((diretorio) => fs_1.default.existsSync(diretorio)); } iniciarServidorComObservacao() { const caminhosObservados = this.resolverCaminhosObservados(); if (caminhosObservados.length === 0) { console.warn((0, chalk_1.yellow)('Nenhum diretório de rotas, visões ou estilos encontrado para observar.')); } const argumentos = [ '--watch', ...caminhosObservados.map((diretorio) => `--watch-path=${diretorio}`), process_1.argv[1], ...process_1.argv.slice(2) ]; console.info((0, chalk_1.blue)('Observando mudanças em rotas, visões e estilos...')); const processo = (0, child_process_1.spawn)(process_1.execPath, argumentos, { stdio: 'inherit', env: Object.assign(Object.assign({}, process_1.env), { LIQUIDO_OBSERVANDO: '1' }) }); processo.on('exit', (codigo) => { process.exit(codigo !== null && codigo !== void 0 ? codigo : 0); }); } comandoServidor() { if (process_1.env.LIQUIDO_OBSERVANDO !== '1') { this.iniciarServidorComObservacao(); return; } const liquido = new liquido_1.Liquido(process.cwd()); liquido.iniciar(); } opcoes() { return yargs_1.default .scriptName('liquido') .version(false) .option('versao', { type: 'boolean', description: 'Exibe a versão do Líquido.' }) .middleware((argv) => { if (argv.versao) { const pkgPath = fs_1.default.existsSync(path_1.default.join(__dirname, 'package.json')) ? path_1.default.join(__dirname, 'package.json') : path_1.default.join(__dirname, '..', 'package.json'); console.log(require(pkgPath).version); process.exit(0); } }) .usage('Uso: $0 <comando> [opções]') .help('ajuda') .alias('ajuda', '?') .command(['*', 'servidor'], 'Serve o diretório local como uma aplicação para a internet.', {}, this.comandoServidor.bind(this)) .command('documentar', 'Lê o projeto e gera uma documentação OpenAPI correspondente', {}, this.comandoDocumentar) .command('novo [nome]', 'Inicia uma nova aplicação pré-configurada para funcionar com Liquido.', { nome: { type: 'string', default: '' } }, this.comandoNovo) .command('gerar [modelo]', 'Gera controlador e visão correspondentes ao nome do modelo passado por parâmetro. O modelo deve ter um arquivo .delegua correspondente no diretório "modelos".', { modelo: { type: 'string', default: '' } }, this.comandoGerar) .command('banco iniciar', 'Inicializa a estrutura e dados do banco de dados a partir de um script LinConEs ou de migrações e sementes do delegua-entidades.', { arquivo: { type: 'string', default: 'inicializacao.lincones', describe: 'Arquivo de script LinConEs a executar (padrão: inicializacao.lincones)' }, 'apenas-estrutura': { type: 'boolean', default: false, describe: 'Executa apenas enunciados DDL (estrutura)' }, 'apenas-dados': { type: 'boolean', default: false, describe: 'Executa apenas enunciados DML (dados)' } }, this.comandoBancoIniciar.bind(this)) .argv; } async iniciar() { this.mostrarLogo(); this.opcoes(); } } (async () => new LiquidoPontoEntrada().iniciar())(); //# sourceMappingURL=index.js.map