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