Erros de execução em português, com código específico, arquivo e linh…#124
Merged
leonelsanchesdasilva merged 1 commit intoJul 13, 2026
Merged
Conversation
DesignLiquido#100) Falhas de runtime chegavam ao console como 'LIQ99999: Cannot read properties of undefined (reading name)' e ao cliente HTTP como o corpo literal '[object Object]' com Content-Type text/plain. Três causas, três correções: 1. Entrega da resposta de erro (a origem do '[object Object]'): logicaComumErrosInterpretacao montava um objeto JSON (REST) ou uma página HTML (MVC), mas não definia tipoConteudo. Na expedição da resposta, sem tipoConteudo o corpo caía no ramo text/plain e era coagido com String(corpo) — objetos viravam '[object Object]' e a página HTML de erro do MVC era exibida como texto cru. Agora o retorno define tipoConteudo 'JSON' (REST) ou 'HTML' (MVC), com fallback em JSON estruturado para arquétipos desconhecidos (antes, corpo indefinido). 2. Classificação e tradução (o LIQ99999 genérico): listaDeErros passa a aceitar uma mensagem amigável em português por entrada, e ganha códigos novos para os erros de runtime mais comuns do motor JavaScript: LIQ20001 (leitura de propriedade de nulo/indefinido), LIQ20002 (chamada de algo que não é função), LIQ20003 (nome não definido) e LIQ20004 (só pode chamar função ou classe), além de mensagens para os erros de banco LIQ10000. A mensagem original é sempre preservada como 'detalhe técnico'. LIQ99999 fica reservado ao que ainda não foi mapeado. 3. Localização (arquivo e linha do código do usuário): o caminho do arquivo fonte da rota agora é encanado do registro da rota (adicionarRota, novo parâmetro opcional) até a montagem das mensagens, exibido relativo à raiz do projeto, junto da linha reportada pelo interpretador quando disponível. Saída de console antes e depois, no mesmo cenário: [Liquido] LIQ99999: Cannot read properties of undefined (reading 'name') [Liquido] LIQ20001 [Arquivo: rotas/usuarios/[id].pitu, Linha: 2]: Tentativa de acessar uma propriedade de um valor nulo ou indefinido. (detalhe técnico: Cannot read properties of undefined (reading 'name')) Validação de ponta a ponta com o código compilado sobreposto ao pacote liquido@1.4.0, reproduzindo o erro real de parâmetro de rota: - Arquétipo rest: HTTP 500 com application/json e corpo estruturado (mensagem, código, arquivo, linha, detalhe técnico, pilha); - Arquétipo mvc: HTTP 500 com text/html e a página de erro rica, que antes existia mas era entregue como text/plain. Testes: novo testes/tratamento-erros.test.ts com 7 casos (JSON estruturado no REST, tradução com código próprio, arquivo e linha, LIQ99999 apenas para não mapeados, HTML no MVC, fallback JSON para arquétipo desconhecido); expectativa de cadeia-middlewares atualizada para a nova assinatura de executarFuncaoRota. Suíte unitária completa: 233 testes passando. Fixes DesignLiquido#100
Coverage report
Test suite run success240 tests passing in 24 suites. Report generated by 🧪jest coverage report action from 2302de3 |
leonelsanchesdasilva
merged commit Jul 13, 2026
8450144
into
DesignLiquido:principal
3 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Erros de execução em português, com código específico, arquivo e linha
Fixes #100
Problema
Falhas de runtime chegavam ao console como
LIQ99999: Cannot read properties of undefined (reading 'name')e ao cliente HTTP como o corpo literal[object Object]comContent-Type: text/plain. Sem português, sem código discriminante, sem arquivo/linha do código do usuário.Diagnóstico
Eram três problemas independentes se somando:
logicaComumErrosInterpretacaojá montava um objeto JSON (REST) e até uma página HTML de erro rica (MVC), mas não definiatipoConteudono retorno. Na expedição da resposta, semtipoConteudo, o corpo caía no ramotext/plaine era coagido comString(corpo)— objetos viravam[object Object]e a página HTML do MVC (que já existia!) era exibida como texto cru.classificarErromapeava por palavra-chave para um código, mas sem tradução: a mensagem crua do motor JavaScript (em inglês) era repassada, e quase tudo caía no genéricoLIQ99999.adicionarRota), mas nunca chegava à montagem das mensagens de erro; alinhado interpretador só aparecia em um dos dois ramos.Solução
1. Entrega correta por arquétipo (
fontes/liquido.ts):mvc→tipoConteudo: 'HTML'— a página de erro rica finalmente renderiza no navegador;rest→tipoConteudo: 'JSON'— resposta estruturada{ mensagem, detalhes }comapplication/json;undefined).2. Taxonomia com mensagens em português (
fontes/erros.ts):listaDeErrosaceitamensagemamigável por entrada e ganha códigos para os erros de runtime mais comuns:cannot read propertis not a functionis not definedsó pode chamar função ou classeA mensagem original é sempre preservada como detalhe técnico.
LIQ99999fica reservado ao que ainda não foi mapeado — e o caminho para eliminá-lo é adicionar entradas nesta lista.3. Arquivo e linha do código do usuário: o arquivo fonte da rota é encanado do registro (
adicionarRota, novo parâmetro opcional — sem quebra de compatibilidade; interface atualizada) até as mensagens, exibido relativo à raiz do projeto, junto da linha do interpretador quando disponível.Antes e depois (mesmo cenário real)
Console:
Cliente HTTP:
Validação de ponta a ponta
Código compilado (
tsc) e sobreposto ao pacoteliquido@1.4.0instalado, reproduzindo o erro real de parâmetro de rota (requisicao.parametros.id) em projetos Delégua (rest) e Pituguês (mvc) — os quatro resultados acima confirmados por requisição HTTP real.Testes
testes/tratamento-erros.test.tscom 7 casos: JSON estruturado no REST (nunca[object Object]), tradução com código próprio e detalhe técnico preservado, arquivo + linha na saída,LIQ99999apenas para não mapeados,tipoConteudo: 'HTML'no MVC, e fallback JSON para arquétipo desconhecido.testes/cadeia-middlewares.test.ts: uma expectativa atualizada para a nova assinatura deexecutarFuncaoRota(5º parâmetro opcional).Fora do escopo (deliberadamente)
hashArquivo→ conteúdo via Importador; boa evolução futura sobre a base deste PR.