UNPKG

liquido

Version:

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

160 lines 8.78 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() { this.indentacao = 4; } /** * Cria arquivos `.delegua` no diretório 'rotas/<modelo no plural>' com cinco rotas: * - Arquivo `inicial.delegua` * - rotaGet (para selecionar vários registros na base de dados) * - rotaPost (para gravar 1 registro na base de dados) * - Arquivo `[id].delegua` * - rotaGet (para selecionar 1 registro por id na base de dados) * - rotaPut (para alterar 1 registro na base de dados) * - rotaDelete (para excluir 1 registro na base de dados) * @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); let rotasCriadas = []; rotasCriadas.push(this.criarNovasRotasSemId(declaracaoModelo, diretorioRotas)); rotasCriadas = rotasCriadas.concat(this.criarNovasRotasComId(declaracaoModelo, diretorioRotas)); return rotasCriadas; } /** * Gera arquivo de rotas que não usam um id como sufixo. * @param {Classe} declaracaoModelo O descritor do modelo, com suas propriedades. * @param {string} diretorioRotas O diretório onde o arquivo de rotas deve ser salvo. * @returns O caminho do arquivo de rotas no sistema de arquivos. */ criarNovasRotasSemId(declaracaoModelo, diretorioRotas) { const conteudoSelecionarTudo = this.criarRotaSelecionarTudo(declaracaoModelo); const nomeModeloPlural = (0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase('pt')).toLocaleLowerCase('pt'); const conteudoAdicionar = `liquido.rotaPost(funcao(requisicao, resposta) {\n resposta.redirecionar("/${nomeModeloPlural}")\n})\n\n`; const conteudoRotas = `${conteudoSelecionarTudo}${conteudoAdicionar}`; const caminhoRotas = caminho.join(diretorioRotas, 'inicial.delegua'); sistemaArquivos.writeFileSync(caminhoRotas, conteudoRotas); return caminhoRotas; } /** * Gera arquivo de rotas que usam id como sufixo. * @param {Classe} declaracaoModelo O descritor do modelo, com suas propriedades. * @param {string} diretorioRotas O diretório onde o arquivo de rotas deve ser salvo. * @returns O caminho do arquivo de rotas no sistema de arquivos. */ criarNovasRotasComId(declaracaoModelo, diretorioRotas) { const nomeModeloPlural = (0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase('pt')).toLocaleLowerCase('pt'); const conteudoSelecionarUm = this.criarRotaSelecionarUm(declaracaoModelo); const conteudoSelecionarParaEdicao = this.criarRotaEditar(declaracaoModelo); const conteudoAtualizar = `liquido.rotaPost(funcao(requisicao, resposta) {\n resposta.redirecionar("/${nomeModeloPlural}")\n})\n\n`; const conteudoSelecionarParaExclusao = this.criarRotaConfirmarExclusao(declaracaoModelo); const conteudoExcluir = `liquido.rotaPost(funcao(requisicao, resposta) {\n resposta.redirecionar("/${nomeModeloPlural}")\n})\n\n`; const diretorioRotasComId = (0, _1.criarDiretorioComIdSeNaoExiste)(diretorioRotas); const caminhoRotasId = caminho.join(diretorioRotasComId, 'inicial.delegua'); sistemaArquivos.writeFileSync(caminhoRotasId, `${conteudoSelecionarUm}`); const caminhoRotaEditar = caminho.join(diretorioRotasComId, 'editar.delegua'); sistemaArquivos.writeFileSync(caminhoRotaEditar, `${conteudoSelecionarParaEdicao}${conteudoAtualizar}`); const caminhoRotaExcluir = caminho.join(diretorioRotasComId, 'excluir.delegua'); sistemaArquivos.writeFileSync(caminhoRotaExcluir, `${conteudoSelecionarParaExclusao}${conteudoExcluir}`); return [caminhoRotasId, caminhoRotaEditar, caminhoRotaExcluir]; } criarRotaSelecionarTudo(declaracaoModelo) { // Isso aqui não vai ficar assim. // É preciso montar as partes de dados antes. const dadosTestes = []; for (const propriedade of declaracaoModelo.propriedades) { dadosTestes.push(`"${propriedade.nome.lexema}": "Teste"`); } return `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${" ".repeat(this.indentacao)}resposta.lmht({\n` + `${" ".repeat(this.indentacao * 2)}"linhas": [\n` + `${" ".repeat(this.indentacao * 3)}{${dadosTestes.reduce((acumulador, elemento) => acumulador + ', ' + elemento)}}\n` + `${" ".repeat(this.indentacao * 2)}]\n` + `${" ".repeat(this.indentacao)}})\n` + `})\n\n`; } criarRotaSelecionarUm(declaracaoModelo) { // Isso aqui não vai ficar assim. // É preciso montar as partes de dados antes. const dadosTestes = []; for (const propriedade of declaracaoModelo.propriedades) { dadosTestes.push(`"${propriedade.nome.lexema}": "Teste"`); } return `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${" ".repeat(this.indentacao)}resposta.lmht("detalhes", {\n` + `${" ".repeat(this.indentacao * 2)}${dadosTestes.reduce((acumulador, elemento) => acumulador + ', ' + elemento)}\n` + `${" ".repeat(this.indentacao)}})\n` + `})\n\n`; } criarRotaEditar(declaracaoModelo) { // Isso aqui não vai ficar assim. // É preciso montar as partes de dados antes. const dadosTestes = []; for (const propriedade of declaracaoModelo.propriedades) { dadosTestes.push(`"${propriedade.nome.lexema}": "Teste"`); } return `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${" ".repeat(this.indentacao)}resposta.lmht("editar", {\n` + `${" ".repeat(this.indentacao * 2)}${dadosTestes.reduce((acumulador, elemento) => acumulador + ', ' + elemento)}\n` + `${" ".repeat(this.indentacao)}})\n` + `})\n\n`; } criarRotaConfirmarExclusao(declaracaoModelo) { // Isso aqui não vai ficar assim. // É preciso montar as partes de dados antes. const dadosTestes = []; for (const propriedade of declaracaoModelo.propriedades) { dadosTestes.push(`"${propriedade.nome.lexema}": "Teste"`); } return `liquido.rotaGet(funcao(requisicao, resposta) {\n` + `${" ".repeat(this.indentacao)}resposta.lmht("excluir", {\n` + `${" ".repeat(this.indentacao * 2)}${dadosTestes.reduce((acumulador, elemento) => acumulador + ', ' + elemento)}\n` + `${" ".repeat(this.indentacao)}})\n` + `})\n\n`; } } exports.GeradorRotas = GeradorRotas; //# sourceMappingURL=gerador-rotas.js.map