/** * Códigos padrão usados pelo contrato de respostas. * * Observação: este enum é parte da API pública do pacote. */ export var codigosResposta; (function (codigosResposta) { codigosResposta[codigosResposta["sucesso"] = 200] = "sucesso"; codigosResposta[codigosResposta["erroConhecido"] = 400] = "erroConhecido"; codigosResposta[codigosResposta["erroPermissao"] = 401] = "erroPermissao"; codigosResposta[codigosResposta["erroNaoEncontrado"] = 404] = "erroNaoEncontrado"; codigosResposta[codigosResposta["erroDesconhecido"] = 500] = "erroDesconhecido"; codigosResposta[codigosResposta["tempoEsgotado"] = 504] = "tempoEsgotado"; })(codigosResposta || (codigosResposta = {})); // ─── Helper interno ───────────────────────────────────────────────── /** * Aplica o callback de interceptação quando fornecido. * Retorno com cast seguro: o callback preserva a forma da resposta, * mas o TypeScript não consegue estreitar o genérico ao subtipo * concreto (ex.: tipoRespostaSucesso), então o cast é inevitável * e está isolado neste único ponto. */ function aplicarCallback(resposta, callback) { if (!callback) return resposta; return callback(resposta); } export const IniciarRespostas = ( /** Callback opcional de interceptação — invocado após a construção de cada resposta */ callback) => { const valor = (valor, detalhes) => { const resposta = { cod: codigosResposta.sucesso, valor, mensagem: undefined, eErro: false, eCerto: true, detalhes, }; return aplicarCallback(resposta, callback); }; const valorTrue = (detalhes) => { const resposta = { cod: codigosResposta.sucesso, valor: true, mensagem: undefined, eErro: false, eCerto: true, detalhes, }; return aplicarCallback(resposta, callback); }; const erro = (mensagem, detalhes) => { const resposta = { cod: codigosResposta.erroConhecido, valor: undefined, mensagem, eErro: true, eCerto: false, detalhes, }; return aplicarCallback(resposta, callback); }; const erroPermissao = (mensagem, detalhes) => { const resposta = { cod: codigosResposta.erroPermissao, valor: undefined, mensagem: mensagem || "Sem permissão para esse recurso.", eErro: true, eCerto: false, detalhes, }; return aplicarCallback(resposta, callback); }; const naoEncontrado = (mensagem, detalhes) => { const resposta = { cod: codigosResposta.erroNaoEncontrado, valor: undefined, mensagem: mensagem || "Registro não encontrado ou a execução dessa ação depende de um registro existente.", eErro: true, eCerto: false, detalhes, }; return aplicarCallback(resposta, callback); }; const erroInterno = (op) => { const mensagemFim = `${op.mensagem || "Erro interno"}`; const resposta = { cod: codigosResposta.erroDesconhecido, valor: undefined, mensagem: mensagemFim, eErro: true, eCerto: false, }; return aplicarCallback(resposta, callback); }; const tempoEsgotado = (mensagem, detalhes) => { const resposta = { cod: codigosResposta.tempoEsgotado, valor: undefined, mensagem: mensagem || "Tempo de resposta esgotado ao tentar acessar o recurso.", eErro: true, eCerto: false, detalhes, }; return aplicarCallback(resposta, callback); }; const erroEspera = tempoEsgotado; return { /** * Gera uma resposta de sucesso */ valor, /** * Gera uma resposta de sucesso com valor true */ valorTrue, /** * Gera uma resposta de erro conhecido */ erro, /** * Gera uma resposta de erro de permissão,será necessário fazer o login novamente */ erroPermissao, /** * Gera uma resposta de erro desconhecido, geralmente tem origem de um exception */ erroInterno, /** * Gera uma resposta de erro quando um registro não é encontrado ou sua execução depende de um registro existente */ naoEncontrado, /** * Gera uma resposta de erro quando o tempo de resposta é esgotado */ tempoEsgotado, /** * Gera uma resposta de erro quando o tempo de resposta é esgotado */ erroEspera, }; }; /** * @deprecated Use IniciarRespostas em seu lugar */ export const gerarRespostas = IniciarRespostas; /** * Instância default (sem handler de interceptação). */ export const respostaComuns = IniciarRespostas();