Section Checker
Script para validar se todas as ocorrĂȘncias de Sections e Loaders (em blocos e pĂĄginas) estĂŁo com estrutura de dados compatĂvel com suas tipagens TypeScript.
Como usar
Validar todas as sections e loaders:
deno task validate-blocksValidar uma section especĂfica:
deno task validate-blocks sections/Footer/Footer.tsxou
deno task validate-blocks sections/Category/CategoryGrid.tsxVocĂȘ pode usar caminho relativo ou absoluto.
Usar pasta de blocos customizada:
Por padrĂŁo, o script busca os JSONs em .deco/blocks. VocĂȘ pode especificar outro caminho:
deno task validate-blocks --blocks-dir /caminho/completo/para/jsonsou
deno task validate-blocks sections/Footer/Footer.tsx --blocks-dir /outro/projeto/.deco/blocksIsso permite rodar o script em um projeto e validar os blocos de outro projeto.
Flags disponĂveis:
--include-unused-vars
Por padrĂŁo, o script nĂŁo mostra warnings de propriedades nĂŁo definidas na tipagem. Use esta flag para incluĂ-las:
deno task validate-blocks --include-unused-varsou
deno task validate-blocks sections/Footer/Footer.tsx --include-unused-vars--blocks-dir <caminho>
Especifica um caminho customizado para a pasta contendo os blocos JSON. Por padrĂŁo usa .deco/blocks:
deno task validate-blocks --blocks-dir /caminho/completo/para/jsonsou combinado com outras flags:
deno task validate-blocks sections/Footer/Footer.tsx --blocks-dir /outro/projeto/.deco/blocks --include-unused-vars--remove-unused-vars
â ïž CUIDADO: Modifica arquivos JSON automaticamente!
Remove todas as propriedades que nĂŁo estĂŁo definidas na tipagem:
deno task validate-blocks --remove-unused-varsou para uma section especĂfica:
deno task validate-blocks sections/Footer/Footer.tsx --remove-unused-varsO script:
- Identifica propriedades no JSON que nĂŁo existem na interface
Props - Remove essas propriedades automaticamente
- Salva o arquivo JSON modificado
Exemplo:
Se o JSON tem:
{
"__resolveType": "site/sections/Footer/Footer.tsx",
"title": "Footer",
"teste": "valor nĂŁo usado" // <- nĂŁo estĂĄ na interface Props
}ApĂłs rodar --remove-unused-vars, o JSON fica:
{
"__resolveType": "site/sections/Footer/Footer.tsx",
"title": "Footer"
}--remove-unused-sections
â ïž CUIDADO: Deleta arquivos permanentemente!
Remove todos os arquivos de sections/loaders que nĂŁo estĂŁo sendo referenciados em nenhum JSON:
deno task validate-blocks --remove-unused-sectionsO script:
- Identifica sections/loaders que nĂŁo tĂȘm nenhuma ocorrĂȘncia nos JSONs
- Lista os arquivos que serĂŁo removidos
- Pede confirmação (digite
simpara confirmar) - Deleta os arquivos permanentemente
Exemplo de output:
đïž Removendo sections/loaders nĂŁo utilizadas...
đ 15 arquivo(s) serĂŁo removidos:
- sections/Category/CategoryGrid.tsx
- sections/Institutional/NumbersWithImage.tsx
- sections/Product/ProductShelf.tsx
...
â ïž Esta ação Ă© irreversĂvel!
Digite 'sim' para confirmar a remoção:Nota: Esta flag sĂł funciona na validação completa (sem especificar arquivo), nĂŁo funciona ao validar uma section especĂfica.
O que faz
O script:
- Itera por todos os arquivos em
sections/eloaders/ - Gera o
__resolveTypede cada section/loader - Busca TODAS as ocorrĂȘncias desse
__resolveTypeem.deco/blocks(incluindo dentro de pĂĄginas) - Extrai a interface Props do arquivo TypeScript
- Valida profundamente cada ocorrĂȘncia contra a tipagem
- Reporta erros e warnings com caminho exato no JSON
Funcionalidades
Detecção Inteligente de Props
- â
Segue re-exports (
export { default } from "./outro-arquivo") - â Extrai tipo do parĂąmetro do componente exportado como default
- â Fallback para interface/type chamada âPropsâ
- â Suporta type aliases e interfaces
- â Suporta utility types (Omit, Pick, Partial)
Validação Profunda
- â
Tipos primitivos:
string,number,boolean,null - â Arrays com validação de elementos
- â Objetos nested recursivamente
- â
Propriedades opcionais (
?) - â
Union types (
string | number) - â
Tipos especiais:
ImageWidget,Product,RichText, etc - â
Respeita anotação
@ignoreem propriedades - â ïž Detecta propriedades extras nĂŁo definidas na tipagem (warnings)
ProteçÔes
- â Ignora blocos de apps externos (vtex, commerce, shopify, etc)
- â Ignora blocos de Theme
- â Proteção contra recursĂŁo infinita em tipos circulares
Sistema de Severidade
- â VĂĄlido - Bloco estĂĄ correto
- â ïž Warning - Props nĂŁo encontrada OU propriedades extras nĂŁo definidas na tipagem OU section nĂŁo estĂĄ sendo usada (nĂŁo falha o build)
- â Erro - Propriedades obrigatĂłrias ausentes ou tipos incorretos (falha o build)
Estrutura dos Arquivos
validate-blocks/
âââ main.ts # Entrypoint principal
âââ src/
â âââ type-mapper.ts # Mapeia __resolveType para caminhos
â âââ ts-parser.ts # Parser TypeScript (extrai Props)
â âââ validator.ts # Validador recursivo de tipos
â âââ validate-blocks.ts # Orquestrador e relatĂłrio
âââ README.md # Esta documentaçãoOutput Exemplo
đ Validando sections e loaders...
â
sections/Header/Header.tsx - 15 ocorrĂȘncia(s)
â
sections/Footer/Footer.tsx - 1 ocorrĂȘncia(s)
â ïž sections/Footer/Footer.tsx - 1 ocorrĂȘncia(s), 2 warning(s)
Footer.json
- propriedade nĂŁo definida na tipagem (pode ser removida) (.deco/blocks/Footer.json:265)
- propriedade nĂŁo definida na tipagem (pode ser removida) (.deco/blocks/Footer.json:273)
â sections/Category/CategoryGrid.tsx - 1 ocorrĂȘncia(s), 1 erro(s)
Preview%20%2Fsections%2FCategory%2FCategoryGrid.tsx.json
- "items": propriedade obrigatĂłria ausente (.deco/blocks/Preview%20%2Fsections%2FCategory%2FCategoryGrid.tsx.json:2)
â sections/Sac/Stores.tsx - 2 ocorrĂȘncia(s), 2 erro(s)
pages-Lojas-735837.json
- esperado array, recebido object (.deco/blocks/pages-Lojas-735837.json:57)
- esperado array, recebido object (.deco/blocks/pages-Lojas-735837.json:73)
âââââââââââââââââââââââââââââââââââââââ
đ RESUMO
âââââââââââââââââââââââââââââââââââââââ
Total de sections/loaders: 95
Total de ocorrĂȘncias: 284
â
Sem problemas: 85
â ïž Com warnings: 3
â ïž NĂŁo usadas: 3
â Com erros: 4
â ïž Sections nĂŁo usadas:
- sections/Example/Unused.tsx
- sections/Test/OldComponent.tsx
â Sections com erros:
- sections/Category/CategoryGrid.tsx (1 erro(s))Nota: O script mostra o caminho e linha do arquivo JSON no formato clicĂĄvel
(ex: .deco/blocks/pages-Lojas-735837.json:61). Na maioria dos terminais
modernos (VSCode, Cursor, iTerm2), vocĂȘ pode clicar diretamente no link para
abrir o arquivo na linha exata do problema.
Exemplos de Uso
Validar todas as sections
deno task validate-blocksValidar section especĂfica durante desenvolvimento
deno task validate-blocks sections/Header/Header.tsxValidar loader especĂfico
deno task validate-blocks loaders/Product/categoryTabs.tsIgnorar propriedades nĂŁo usadas
# Todas as sections sem warnings de props extras
deno task validate-blocks --ignore-unused-props
# Section especĂfica sem warnings de props extras
deno task validate-blocks sections/Footer/Footer.tsx --ignore-unused-propsPortabilidade
Todo o código estå organizado na pasta src para facilitar migração
para outro repositĂłrio.