UNPKG

liquido

Version:

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

330 lines 19 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.GeradorRotas = void 0; const sistemaArquivos = __importStar(require("fs")); const caminho = __importStar(require("path")); const flexoes_1 = require("@designliquido/flexoes"); const _1 = require("."); class GeradorRotas { constructor(motor = 'lincones') { this.indentacao = 4; this.motor = motor; } /** * Cria arquivos de rota no diretório 'rotas/<modelo no plural>' com cinco rotas. * A extensão dos arquivos é `.delegua` (motores `lincones` e `delegua-entidades`) * ou `.pitu` (motor `pitugues`): * - Arquivo `inicial.<ext>` * - rotaGet (selecionar todos os registros) * - rotaPost (gravar 1 registro) * - Arquivo `novo.<ext>` * - rotaGet (exibir formulário para novo registro) * - Arquivo `[id]/inicial.<ext>` * - rotaGet (selecionar 1 registro por id) * - Arquivo `[id]/editar.<ext>` * - rotaGet (carregar dados para edição) * - rotaPost (alterar 1 registro) * - Arquivo `[id]/excluir.<ext>` * - rotaGet (confirmar exclusão) * - rotaPost (excluir 1 registro) * @param {Classe} declaracaoModelo O descritor do modelo, com suas propriedades. * @returns {string[]} Os caminhos completos onde os arquivos de rotas foram criados. */ criarNovasRotas(declaracaoModelo) { const nomeBaseModelo = declaracaoModelo.simbolo.lexema.toLocaleLowerCase('pt'); const nomeModeloPlural = (0, flexoes_1.pluralizar)(nomeBaseModelo).toLocaleLowerCase('pt'); const diretorioRotas = caminho.join(process.cwd(), 'rotas', nomeModeloPlural); (0, _1.criarDiretorioSeNaoExiste)('rotas', nomeModeloPlural); const rotasCriadas = []; rotasCriadas.push(this.criarNovasRotasSemId(declaracaoModelo, diretorioRotas)); rotasCriadas.push(this.criarNovaRotaFormularioNovo(diretorioRotas)); rotasCriadas.push(...this.criarNovasRotasComId(declaracaoModelo, diretorioRotas)); return rotasCriadas; } criarNovasRotasSemId(declaracaoModelo, diretorioRotas) { const caminhoRotas = caminho.join(diretorioRotas, `inicial${this.extensao}`); sistemaArquivos.writeFileSync(caminhoRotas, this.criarConteudoInicialSemId(declaracaoModelo)); return caminhoRotas; } criarNovaRotaFormularioNovo(diretorioRotas) { const caminhoRota = caminho.join(diretorioRotas, `novo${this.extensao}`); sistemaArquivos.writeFileSync(caminhoRota, this.criarConteudoFormularioNovo()); return caminhoRota; } criarNovasRotasComId(declaracaoModelo, diretorioRotas) { const diretorioRotasComId = (0, _1.criarDiretorioComIdSeNaoExiste)(diretorioRotas); const caminhoRotasId = caminho.join(diretorioRotasComId, `inicial${this.extensao}`); sistemaArquivos.writeFileSync(caminhoRotasId, this.criarConteudoInicialComId(declaracaoModelo)); const caminhoRotaEditar = caminho.join(diretorioRotasComId, `editar${this.extensao}`); sistemaArquivos.writeFileSync(caminhoRotaEditar, this.criarConteudoEditar(declaracaoModelo)); const caminhoRotaExcluir = caminho.join(diretorioRotasComId, `excluir${this.extensao}`); sistemaArquivos.writeFileSync(caminhoRotaExcluir, this.criarConteudoExcluir(declaracaoModelo)); return [caminhoRotasId, caminhoRotaEditar, caminhoRotaExcluir]; } obterNomeChave(modelo) { for (const propriedade of modelo.propriedades) { if (propriedade.decoradores.some(d => d.nome === '@chave')) { return propriedade.nome.lexema; } } for (const propriedade of modelo.propriedades) { if (propriedade.nome.lexema === 'id') return 'id'; } return 'id'; } obterCamposNaoChave(modelo) { const nomeChave = this.obterNomeChave(modelo); return modelo.propriedades.filter(p => p.nome.lexema !== nomeChave); } get extensao() { return this.motor === 'pitugues' ? '.pitu' : '.delegua'; } i(nivel = 1) { return ' '.repeat(this.indentacao * nivel); } criarConteudoInicialSemId(declaracaoModelo) { const nomeModelo = declaracaoModelo.simbolo.lexema; const nomeModeloPlural = (0, flexoes_1.pluralizar)(nomeModelo.toLocaleLowerCase('pt')); if (this.motor === 'delegua-entidades') { const rotaGet = `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}var colecao = contexto.colecao(${nomeModelo})\n` + `${this.i()}var resultados = colecao.todos()\n` + `${this.i()}resposta.lmht({"linhas": resultados}).status(200)\n` + `})\n\n`; const rotaPost = `liquido.rotaPost(funcao(requisicao, resposta) {\n` + `${this.i()}var corpo = requisicao.corpo\n` + `${this.i()}var colecao = contexto.colecao(${nomeModelo})\n` + `${this.i()}colecao.salvar(corpo)\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n` + `})\n\n`; return rotaGet + rotaPost; } // LinConEs const campos = this.obterCamposNaoChave(declaracaoModelo); const colunas = campos.map(p => p.nome.lexema).join(', '); const placeholders = campos.map(() => '?').join(', '); const valoresInserir = campos.map(p => `corpo.${p.nome.lexema}`).join(', '); if (this.motor === 'pitugues') { const rotaGet = `funcao rota_get(requisicao, resposta):\n` + `${this.i()}resultados = lincones.executar("SELECIONAR * DE ${nomeModeloPlural}")\n` + `${this.i()}linhas = []\n` + `${this.i()}se resultados != nulo e resultados[0] != nulo:\n` + `${this.i(2)}linhas = resultados[0].linhasRetornadas\n\n` + `${this.i()}resposta.lmht({"linhas": linhas}).status(200)\n\n`; const rotaPost = `funcao rota_post(requisicao, resposta):\n` + `${this.i()}corpo = requisicao.corpo\n` + `${this.i()}lincones.executar("INSERIR EM ${nomeModeloPlural} (${colunas}) VALORES (${placeholders})", [${valoresInserir}])\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n\n`; return rotaGet + rotaPost + `liquido.rotaGet(rota_get)\n` + `liquido.rotaPost(rota_post)\n`; } const rotaGet = `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}var resultados = lincones.executar("SELECIONAR * DE ${nomeModeloPlural}")\n` + `${this.i()}var linhas = []\n` + `${this.i()}se (resultados != nulo e resultados[0] != nulo) {\n` + `${this.i(2)}linhas = resultados[0].linhasRetornadas\n` + `${this.i()}}\n` + `${this.i()}resposta.lmht({"linhas": linhas}).status(200)\n` + `})\n\n`; const rotaPost = `liquido.rotaPost(funcao(requisicao, resposta) {\n` + `${this.i()}var corpo = requisicao.corpo\n` + `${this.i()}lincones.executar("INSERIR EM ${nomeModeloPlural} (${colunas}) VALORES (${placeholders})", [${valoresInserir}])\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n` + `})\n\n`; return rotaGet + rotaPost; } criarConteudoFormularioNovo() { if (this.motor === 'delegua-entidades' || this.motor === 'lincones') { return `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}resposta.lmht("adicionar", {}).status(200)\n` + `})\n`; } // Pituguês return `funcao rota_get(requisicao, resposta):\n` + `${this.i()}resposta.lmht("adicionar", {}).status(200)\n\n` + `liquido.rotaGet(rota_get)\n`; } criarConteudoInicialComId(declaracaoModelo) { const nomeModelo = declaracaoModelo.simbolo.lexema; const nomeModeloPlural = (0, flexoes_1.pluralizar)(nomeModelo.toLocaleLowerCase('pt')); const nomeSingular = nomeModelo.toLocaleLowerCase('pt'); const nomeChave = this.obterNomeChave(declaracaoModelo); if (this.motor === 'delegua-entidades') { return `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}var colecao = contexto.colecao(${nomeModelo})\n` + `${this.i()}var registro = colecao.buscarPorId(requisicao.parametros.${nomeChave})\n` + `${this.i()}se (registro == nulo) {\n` + `${this.i(2)}resposta.status(404)\n` + `${this.i()}} senao {\n` + `${this.i(2)}resposta.lmht("detalhes", {"${nomeSingular}": registro}).status(200)\n` + `${this.i()}}\n` + `})\n\n`; } // LinConEs if (this.motor === 'pitugues') { return `funcao rota_get(requisicao, resposta):\n` + `${this.i()}resultados = lincones.executar("SELECIONAR * DE ${nomeModeloPlural} ONDE ${nomeChave} = ?", [requisicao.parametros.${nomeChave}])\n` + `${this.i()}se resultados != nulo e resultados[0] != nulo e resultados[0].linhasRetornadas.tamanho() > 0:\n` + `${this.i(2)}resposta.lmht("detalhes", {"${nomeSingular}": resultados[0].linhasRetornadas[0]}).status(200)\n` + `${this.i()}senao:\n` + `${this.i(2)}resposta.status(404)\n\n` + `liquido.rotaGet(rota_get)\n`; } return `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}var resultados = lincones.executar("SELECIONAR * DE ${nomeModeloPlural} ONDE ${nomeChave} = ?", [requisicao.parametros.${nomeChave}])\n` + `${this.i()}se (resultados != nulo e resultados[0] != nulo e resultados[0].linhasRetornadas.tamanho() > 0) {\n` + `${this.i(2)}resposta.lmht("detalhes", {"${nomeSingular}": resultados[0].linhasRetornadas[0]}).status(200)\n` + `${this.i()}} senao {\n` + `${this.i(2)}resposta.status(404)\n` + `${this.i()}}\n` + `})\n\n`; } criarConteudoEditar(declaracaoModelo) { const nomeModelo = declaracaoModelo.simbolo.lexema; const nomeModeloPlural = (0, flexoes_1.pluralizar)(nomeModelo.toLocaleLowerCase('pt')); const nomeSingular = nomeModelo.toLocaleLowerCase('pt'); const nomeChave = this.obterNomeChave(declaracaoModelo); if (this.motor === 'delegua-entidades') { const rotaGet = `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}var colecao = contexto.colecao(${nomeModelo})\n` + `${this.i()}var registro = colecao.buscarPorId(requisicao.parametros.${nomeChave})\n` + `${this.i()}se (registro == nulo) {\n` + `${this.i(2)}resposta.status(404)\n` + `${this.i()}} senao {\n` + `${this.i(2)}resposta.lmht("editar", {"${nomeSingular}": registro}).status(200)\n` + `${this.i()}}\n` + `})\n\n`; const rotaPost = `liquido.rotaPost(funcao(requisicao, resposta) {\n` + `${this.i()}var corpo = requisicao.corpo\n` + `${this.i()}var colecao = contexto.colecao(${nomeModelo})\n` + `${this.i()}colecao.modificar(corpo)\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n` + `})\n\n`; return rotaGet + rotaPost; } // LinConEs const campos = this.obterCamposNaoChave(declaracaoModelo); const definir = campos.map(p => `${p.nome.lexema} = ?`).join(', '); const valoresAtualizar = [ ...campos.map(p => `corpo.${p.nome.lexema}`), `requisicao.parametros.${nomeChave}` ].join(', '); if (this.motor === 'pitugues') { const rotaGet = `funcao rota_get(requisicao, resposta):\n` + `${this.i()}resultados = lincones.executar("SELECIONAR * DE ${nomeModeloPlural} ONDE ${nomeChave} = ?", [requisicao.parametros.${nomeChave}])\n` + `${this.i()}se resultados != nulo e resultados[0] != nulo e resultados[0].linhasRetornadas.tamanho() > 0:\n` + `${this.i(2)}resposta.lmht("editar", {"${nomeSingular}": resultados[0].linhasRetornadas[0]}).status(200)\n` + `${this.i()}senao:\n` + `${this.i(2)}resposta.status(404)\n\n`; const rotaPost = `funcao rota_post(requisicao, resposta):\n` + `${this.i()}corpo = requisicao.corpo\n` + `${this.i()}lincones.executar("ATUALIZAR ${nomeModeloPlural} DEFINIR ${definir} ONDE ${nomeChave} = ?", [${valoresAtualizar}])\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n\n`; return rotaGet + rotaPost + `liquido.rotaGet(rota_get)\n` + `liquido.rotaPost(rota_post)\n`; } const rotaGet = `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}var resultados = lincones.executar("SELECIONAR * DE ${nomeModeloPlural} ONDE ${nomeChave} = ?", [requisicao.parametros.${nomeChave}])\n` + `${this.i()}se (resultados != nulo e resultados[0] != nulo e resultados[0].linhasRetornadas.tamanho() > 0) {\n` + `${this.i(2)}resposta.lmht("editar", {"${nomeSingular}": resultados[0].linhasRetornadas[0]}).status(200)\n` + `${this.i()}} senao {\n` + `${this.i(2)}resposta.status(404)\n` + `${this.i()}}\n` + `})\n\n`; const rotaPost = `liquido.rotaPost(funcao(requisicao, resposta) {\n` + `${this.i()}var corpo = requisicao.corpo\n` + `${this.i()}lincones.executar("ATUALIZAR ${nomeModeloPlural} DEFINIR ${definir} ONDE ${nomeChave} = ?", [${valoresAtualizar}])\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n` + `})\n\n`; return rotaGet + rotaPost; } criarConteudoExcluir(declaracaoModelo) { const nomeModelo = declaracaoModelo.simbolo.lexema; const nomeModeloPlural = (0, flexoes_1.pluralizar)(nomeModelo.toLocaleLowerCase('pt')); const nomeSingular = nomeModelo.toLocaleLowerCase('pt'); const nomeChave = this.obterNomeChave(declaracaoModelo); if (this.motor === 'delegua-entidades') { const rotaGet = `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}var colecao = contexto.colecao(${nomeModelo})\n` + `${this.i()}var registro = colecao.buscarPorId(requisicao.parametros.${nomeChave})\n` + `${this.i()}se (registro == nulo) {\n` + `${this.i(2)}resposta.status(404)\n` + `${this.i()}} senao {\n` + `${this.i(2)}resposta.lmht("excluir", {"${nomeSingular}": registro}).status(200)\n` + `${this.i()}}\n` + `})\n\n`; const rotaPost = `liquido.rotaPost(funcao(requisicao, resposta) {\n` + `${this.i()}var colecao = contexto.colecao(${nomeModelo})\n` + `${this.i()}colecao.remover(requisicao.parametros.${nomeChave})\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n` + `})\n\n`; return rotaGet + rotaPost; } // LinConEs if (this.motor === 'pitugues') { const rotaGet = `funcao rota_get(requisicao, resposta):\n` + `${this.i()}resultados = lincones.executar("SELECIONAR * DE ${nomeModeloPlural} ONDE ${nomeChave} = ?", [requisicao.parametros.${nomeChave}])\n` + `${this.i()}se resultados != nulo e resultados[0] != nulo e resultados[0].linhasRetornadas.tamanho() > 0:\n` + `${this.i(2)}resposta.lmht("excluir", {"${nomeSingular}": resultados[0].linhasRetornadas[0]}).status(200)\n` + `${this.i()}senao:\n` + `${this.i(2)}resposta.status(404)\n\n`; const rotaPost = `funcao rota_post(requisicao, resposta):\n` + `${this.i()}lincones.executar("EXCLUIR EM ${nomeModeloPlural} ONDE ${nomeChave} = ?", [requisicao.parametros.${nomeChave}])\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n\n`; return rotaGet + rotaPost + `liquido.rotaGet(rota_get)\n` + `liquido.rotaPost(rota_post)\n`; } const rotaGet = `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${this.i()}var resultados = lincones.executar("SELECIONAR * DE ${nomeModeloPlural} ONDE ${nomeChave} = ?", [requisicao.parametros.${nomeChave}])\n` + `${this.i()}se (resultados != nulo e resultados[0] != nulo e resultados[0].linhasRetornadas.tamanho() > 0) {\n` + `${this.i(2)}resposta.lmht("excluir", {"${nomeSingular}": resultados[0].linhasRetornadas[0]}).status(200)\n` + `${this.i()}} senao {\n` + `${this.i(2)}resposta.status(404)\n` + `${this.i()}}\n` + `})\n\n`; const rotaPost = `liquido.rotaPost(funcao(requisicao, resposta) {\n` + `${this.i()}lincones.executar("EXCLUIR EM ${nomeModeloPlural} ONDE ${nomeChave} = ?", [requisicao.parametros.${nomeChave}])\n` + `${this.i()}resposta.redirecionar("/${nomeModeloPlural}")\n` + `})\n\n`; return rotaGet + rotaPost; } } exports.GeradorRotas = GeradorRotas; //# sourceMappingURL=gerador-rotas.js.map