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