Skip to content

fix(#117): delega validação delprops ao pacote @designliquido/delprops - #132

Merged
leonelsanchesdasilva merged 5 commits into
DesignLiquido:principalfrom
kunaaaalcodes:fix-117-delprops-schema
Jul 29, 2026
Merged

fix(#117): delega validação delprops ao pacote @designliquido/delprops#132
leonelsanchesdasilva merged 5 commits into
DesignLiquido:principalfrom
kunaaaalcodes:fix-117-delprops-schema

Conversation

@kunaaaalcodes

@kunaaaalcodes kunaaaalcodes commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Resolve #117

Descrição

Esta PR simplifica o validador de arquivos .delprops, substituindo esquemas hardcoded e lógica manual por uma implementação baseada diretamente no pacote oficial @designliquido/delprops.

Com essa mudança, a extensão passa a utilizar o pacote como única fonte da verdade para os schemas de configuração, eliminando inconsistências, reduzindo significativamente a quantidade de código mantido e facilitando futuras evoluções do framework.


Problema

O arquivo:

fontes/linguagens/delprops/validador-delprops.ts

mantinha 374 linhas de esquemas hardcoded e lógica de validação manual.

Essa implementação apresentava diversos problemas:

  • os esquemas estavam dessincronizados com @designliquido/delprops v0.3.0;
  • propriedades como porta, host, usuario, senha e banco existiam no pacote oficial, mas geravam falsos warnings na extensão;
  • o namespace liquido.estilos não era reconhecido;
  • liquido.verboso permanecia sendo aceito, embora não exista mais no framework;
  • cada nova propriedade precisava ser adicionada manualmente no validador, no provedor de completude e no provedor de documentação.

Essa duplicação aumentava o custo de manutenção e favorecia divergências entre a extensão e o framework.


Solução

O validador foi reescrito para delegar a validação ao pacote oficial @designliquido/delprops.

O novo fluxo de validação é composto por três etapas:

Documento .delprops
        │
        ├── removerComentarioLinha()
        │       ↓ remove comentários preservando URLs
        │
        ├── analisar()
        │       ↓ erros de sintaxe
        │
        └── validar()
                ↓ erros de tipo e valor
                ↓ propriedades desconhecidas

A função removerComentarioLinha() foi mantida para garantir que URLs contendo // dentro de aspas não sejam interpretadas como comentários.


Schemas registrados pelo pacote

Os schemas deixam de ser mantidos manualmente na extensão e passam a ser registrados diretamente através de registrar().

Namespace Origem
liquido arquetipo + linguagem
liquido.aplicacao aplicacao
liquido.roteador roteador
liquido.dados dados
liquido.autenticacao autenticacao
liquido.estilos estilos

Dessa forma, @designliquido/delprops passa a ser a única fonte da verdade para as definições de configuração.


Mudanças de comportamento

Configuração Antes Depois Motivo
liquido.roteador.porta = 3000 Warning Válido porta existe no schema oficial
liquido.roteador.porta = 'texto' Warning Erro de tipo porta aceita apenas números
liquido.dados.bd.porta = 5432 Warning Válido porta existe no schema oficial
liquido.dados.bd.host = 'localhost' Warning Válido host existe no schema oficial
liquido.dados.bd.usuario = 'admin' Warning Válido usuario existe no schema oficial
liquido.dados.bd.senha = 'secret' Warning Válido senha existe no schema oficial
liquido.dados.bd.banco = 'meu-db' Warning Válido banco existe no schema oficial
liquido.estilos.diretorioBase = 'publico/css' Namespace desconhecido Válido Namespace registrado pelo pacote
liquido.verboso = verdadeiro Válido Warning Propriedade inexistente no schema oficial

Refatoração

fontes/linguagens/delprops/validador-delprops.ts

O arquivo foi reduzido de 374 para 73 linhas, removendo aproximadamente 301 linhas de código.

Removido

  • 7 esquemas hardcoded:
    • esquemaPropriedadesLiquido
    • esquemaAplicacao
    • esquemaLicenca
    • esquemaRoteador
    • esquemaDadosDireto
    • esquemaFonteDados
    • esquemaAutenticacao
  • inferirTipoValor()
  • extrairValorTexto()
  • validarTipoEValor()
  • validarPropriedadeLiquido()
  • lógica baseada em switch/case com 9 ramificações.

Adicionado

  • registrar() para os seis namespaces oficiais;
  • aplanarEsquemas(), responsável por converter ContribuicaoEsquema[] em DefinicaoPropriedade[].

Foi mantida apenas a função:

removerComentarioLinha()

necessária para preservar corretamente URLs contendo // dentro de strings.


Testes

Atualizado:

testes/linguagens/delprops/validador-delprops.test.ts

Principais alterações:

  • criação de mocks para:
    • analisar();
    • validar();
    • registrar();
    • obterTodos();
  • remoção da dependência de ../../../fontes/interfaces;
  • remoção dos testes relacionados aos schemas internos, agora responsabilidade do pacote oficial;
  • manutenção de 17 testes cobrindo:
    • erros de parsing;
    • erros e avisos de validação;
    • remoção de comentários;
    • preservação de URLs contendo //.

Arquivos alterados

Arquivo Descrição
fontes/linguagens/delprops/validador-delprops.ts Refatoração do validador para utilizar os schemas oficiais do pacote
testes/linguagens/delprops/validador-delprops.test.ts Atualização da suíte de testes para validar a camada de integração

Verificação

Foram executadas as seguintes verificações:

npx jest --testPathPatterns="validador-delprops" --no-coverage

Resultado:

Test Suites: 1 passed, 1 total
Tests:       17 passed, 17 total

Também foi executado:

npx tsc --noEmit

Resultado:

0 errors

Resultado

Com esta PR, o validador .delprops passa a utilizar diretamente as definições oficiais do pacote @designliquido/delprops, eliminando inconsistências entre a extensão e o framework, reduzindo significativamente a quantidade de código mantido e simplificando a evolução futura do suporte a arquivos de configuração.


**Resolve #117 **

Kunal Jaiswal added 3 commits July 28, 2026 10:16
…quido/delprops

- Substitui 374 linhas de esquemas hardcoded e validação manual por
  delegação ao pacote @designliquido/delprops (analisar + registrar + validar)
- Mantém removerComentarioLinha() para preservar URLs com // em aspas
- Registra todos os namespaces: liquido, aplicacao, roteador, dados,
  autenticacao, estilos — via pacote, nevera hardcoded
- Adiciona suporte automático a liquido.estilos.diretorioBase,
  liquido.roteador.porta, liquido.dados.<nome>.host|porta|usuario|senha|banco
- Reescrita completa dos testes com mocks do pacote
- Remove dependência de interfaces.ts (EsquemaPropriedade, TipoValor)
…s ausentes

- Adiciona verificarPropriedadesAusentes() que percorre esquemas
  registrados e sinaliza propriedades sem padrao (default) como
  obrigatórias — solução heurística que dispensa modificação no
  pacote @designliquido/delprops
- Namespace dinâmico liquido.dados.<nome> tratado com agrupamento
  por fonte
- Namespaces flat (aplicacao, roteador, etc.) verificados diretamente
- Avisos emitidos como DiagnosticSeverity.Warning no Range(0,0,0,0)
  (topo do documento)
- 6 novos testes: ausente simples, com padrao ignorado, todas
  preenchidas, dados ausente, dados completo, múltiplos namespaces
…fora do pacote)

A heurística !padrao para detectar propriedades obrigatórias não é
exposta pelo pacote @designliquido/delprops — DefinicaoPropriedade não
tem campo required. Remove função e 6 testes.

@leonelsanchesdasilva leonelsanchesdasilva left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Obrigado!

@leonelsanchesdasilva
leonelsanchesdasilva merged commit afc84b1 into DesignLiquido:principal Jul 29, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sem validação de configuracao.delprops contra o esquema delprops

2 participants