UNPKG

liquido

Version:

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

101 lines 6.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Resposta = void 0; const lexador_1 = require("@designliquido/delegua/lexador"); const construtos_1 = require("@designliquido/delegua/construtos"); const declaracoes_1 = require("@designliquido/delegua/declaracoes"); const estruturas_1 = require("@designliquido/delegua/interpretador/estruturas"); const gerador_expressoes_1 = require("./utilidades/gerador-expressoes"); /** * A classe de Resposta é usada por Delégua para instrumentação do Express. * Cada método dessa classe (implementado numa estrutura declarativa) direciona * um aspecto da resposta a ser enviada para o Express. */ class Resposta extends estruturas_1.DescritorTipoClasse { constructor() { const metodos = {}; const propriedades = [ new declaracoes_1.PropriedadeClasse(new lexador_1.Simbolo('IDENTIFICADOR', 'destino', null, -1, -1), 'texto'), new declaracoes_1.PropriedadeClasse(new lexador_1.Simbolo('IDENTIFICADOR', 'respostaJson', null, -1, -1), 'dicionário'), new declaracoes_1.PropriedadeClasse(new lexador_1.Simbolo('IDENTIFICADOR', 'mensagem', null, -1, -1), 'texto'), new declaracoes_1.PropriedadeClasse(new lexador_1.Simbolo('IDENTIFICADOR', 'statusHttp', null, -1, -1), 'numero'), new declaracoes_1.PropriedadeClasse(new lexador_1.Simbolo('IDENTIFICADOR', 'valores', null, -1, -1), 'dicionário'), new declaracoes_1.PropriedadeClasse(new lexador_1.Simbolo('IDENTIFICADOR', 'visao', null, -1, -1), 'texto') ]; // Há duas formas de construção de métodos apenas usando // estruturas de alto nível: declarando cada uma manualmente, // ou usando o gerador de expressões. // O exemplo abaixo utiliza o gerador de expressões. // Seria o equivalente à seguinte implementação em Delégua: // classe Resposta { // // Outros método e propriedades aqui // enviar(mensagem: texto) { // isto.mensagem = mensagem // retorna isto // } // } const geradorExpressoes = new gerador_expressoes_1.GeradorExpressoes(); metodos['enviar'] = geradorExpressoes.gerarMetodo('enviar', geradorExpressoes.gerarConstrutoFuncao([geradorExpressoes.gerarParametro('mensagem', 'texto')], [ geradorExpressoes.gerarAtribuicaoValorEmPropriedadeClasse('mensagem', geradorExpressoes.gerarReferenciaVariavel('mensagem')), geradorExpressoes.gerarRetornoDeFuncao('isto') ])); // O exemplo abaixo gera um método `status` declarando manualmente // todas as estruturas de alto nível de Delégua. // Seria o equivalente à seguinte implementação: // classe Resposta { // // Outros método e propriedades aqui // status(statusHttp: numero) { // isto.statusHttp = statusHttp // retorna isto // } // } metodos['status'] = new estruturas_1.DeleguaFuncao('status', new construtos_1.FuncaoConstruto(-1, -1, [ { abrangencia: 'padrao', tipoDado: 'número', nome: new lexador_1.Simbolo('IDENTIFICADOR', 'statusHttp', null, -1, -1) } ], [ new declaracoes_1.Expressao(new construtos_1.DefinirValor(-1, -1, new construtos_1.Isto(-1, -1, new lexador_1.Simbolo('ISTO', 'isto', null, -1, -1)), new lexador_1.Simbolo('IDENTIFICADOR', 'statusHttp', null, -1, -1), new construtos_1.Variavel(-1, new lexador_1.Simbolo('IDENTIFICADOR', 'statusHttp', null, -1, -1)))), new declaracoes_1.Retorna(new lexador_1.Simbolo('IDENTIFICADOR', 'qualquerCoisa', null, -1, -1), new construtos_1.Variavel(-1, new lexador_1.Simbolo('IDENTIFICADOR', 'isto', null, -1, -1))) ]), null, false); // O exemplo abaixo gera um método `lmht` utilizando o gerador de expressões. // Seria o equivalente à seguinte implementação: // classe Resposta { // visao: texto // valores: dicionário // // lmht(*visaoEValores) { // se visaoEValores.tamanho() > 1 { // isto.visao = visaoEValores[0] // isto.valores = visaoEValores[1] // } senão { // isto.valores = visaoEValores[0] // } // // retorna isto // } // } metodos['lmht'] = geradorExpressoes.gerarMetodo('lmht', geradorExpressoes.gerarConstrutoFuncao([geradorExpressoes.gerarParametro('visaoEValores', 'vetor', 'multiplo')], [ geradorExpressoes.gerarAtribuicaoValorEmPropriedadeClasse('lmht', geradorExpressoes.gerarLiteral(true)), geradorExpressoes.gerarDeclaracaoSe(geradorExpressoes.gerarConstrutoBinario(geradorExpressoes.gerarChamada(geradorExpressoes.gerarAcessoMetodoOuPropriedade(geradorExpressoes.gerarReferenciaVariavel('visaoEValores'), 'tamanho')), geradorExpressoes.gerarOperadorComparacao('maior'), geradorExpressoes.gerarLiteral(1)), geradorExpressoes.gerarBlocoEscopo([ geradorExpressoes.gerarAtribuicaoValorEmPropriedadeClasse('visao', geradorExpressoes.gerarAcessoIndiceVariavel('visaoEValores', 0)), geradorExpressoes.gerarAtribuicaoValorEmPropriedadeClasse('valores', geradorExpressoes.gerarAcessoIndiceVariavel('visaoEValores', 1)) ]), geradorExpressoes.gerarBlocoEscopo([ geradorExpressoes.gerarAtribuicaoValorEmPropriedadeClasse('valores', geradorExpressoes.gerarAcessoIndiceVariavel('visaoEValores', 0)), ])), geradorExpressoes.gerarRetornoDeFuncao('isto') ])); metodos['redirecionar'] = geradorExpressoes.gerarMetodo('redirecionar', geradorExpressoes.gerarConstrutoFuncao([geradorExpressoes.gerarParametro('destino', 'texto')], [ geradorExpressoes.gerarAtribuicaoValorEmPropriedadeClasse('destino', geradorExpressoes.gerarReferenciaVariavel('destino')), geradorExpressoes.gerarRetornoDeFuncao('isto') ])); metodos['json'] = geradorExpressoes.gerarMetodo('json', geradorExpressoes.gerarConstrutoFuncao([geradorExpressoes.gerarParametro('json', 'dicionário', 'multiplo')], [ geradorExpressoes.gerarAtribuicaoValorEmPropriedadeClasse('respostaJson', geradorExpressoes.gerarReferenciaVariavel('json')), geradorExpressoes.gerarRetornoDeFuncao('isto') ])); super(new lexador_1.Simbolo('IDENTIFICADOR', 'Resposta', null, -1, -1), null, metodos, propriedades); } } exports.Resposta = Resposta; //# sourceMappingURL=resposta.js.map