liquido
Version:
Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português
330 lines • 19 kB
JavaScript
"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