> ## Documentation Index
> Fetch the complete documentation index at: https://cellar.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Filtros

> Reduza 187.000 módulos para os que você realmente quer.

Um release contém cerca de 187.000 módulos. Aproximadamente 11% deles têm alguma
relação com o protocolo do WhatsApp. O resto são botões, ícones, analytics e código do
Facebook e do Instagram, que dividem o mesmo bundle.

Sem filtro, comparar dois releases gera dezenas de milhares de entradas. Os filtros
são o que deixa o resultado legível.

## Filtros embutidos

| Filtro | O que mantém | Serve para |
| - | - | - |
| `default` | A superfície de protocolo, cerca de 11% | Comparar releases |
| `all` | Tudo | Checar se um filtro escondeu sua resposta |
| `protocol` | Só módulos de protocolo confirmados | Resultados curtos e diretos |
| `schemas` | `.pb`, `.proto` e `.graphql` | Campos de dados e queries novas |
| `wam` | Eventos e enums de analytics | O sinal mais precoce de um recurso não lançado |

```bash theme={null}
cellar filter list
```

A diferença não é sutil. Buscar `Passkey` sem filtro devolve 193 módulos, quase todos
telas de login empresarial do Facebook. Com `--filter protocol` devolve 12, que são o
recurso inteiro.

> [!WARNING]
>
> O `default` pula de propósito arquivos `.pb` e `.graphql`. Eles são gerados, e
> comparar o texto deles é ruído. Se você está caçando um campo protobuf novo, use
> `--filter schemas`, senão vai concluir que nada mudou.

## Confira antes de confiar

```bash theme={null}
cellar filter test default --bundle latest
```

```
filter `default` on whatsapp-1044822804: keeps 18761 of 172040 modules (10.9%)
  dropped by dependsOnExcluded: 25095
  dropped by exclude: 58397
  dropped by hardExclude: 69787

kept, for example:
  WAWebSendMsgStanza
  WASmaxInIqCallReceiptResponse
  …

dropped, for example:
  AACDestinationGuidanceCardContainer.react   {"pattern":"\\.react$","reason":"hardExclude"}
  AAAMediaPickerVisibilityAction              {"module":"Laminar","reason":"dependsOn"}
```

Todo módulo descartado informa por que foi descartado, então um resultado
inesperadamente vazio é explicável em vez de misterioso.

## Criando o seu

Filtros embutidos são somente leitura. Copie um e edite a cópia.

```bash theme={null}
cellar filter fork protocol newsletters
cellar filter show newsletters > newsletters.json
# edite e depois:
cellar filter set newsletters --from newsletters.json
```

Um filtro é JSON, e um documento parcial é tratado como edição, então você só envia os
campos que quer mudar.

```json theme={null}
{
  "description": "Só a superfície de newsletters e canais",
  "include": ["^WAWebNewsletter", "Newsletter"],
  "defaultVerdict": "drop"
}
```

```bash theme={null}
echo '{"include":["Newsletter"],"defaultVerdict":"drop"}' | cellar filter set meu --from -
```

Apagar um filtro que sobrepõe um embutido restaura o embutido.

```bash theme={null}
cellar filter rm newsletters
```

## Como o casamento funciona

Quatro listas de expressões regulares, verificadas em ordem. A primeira que casar
vence.

**1. hardExclude**

Descartado de qualquer jeito, mesmo que a lista de inclusão também case. Existe
para tipos de arquivo que se tratam melhor por outros meios, como schemas `.pb`.

**2. include**

Mantido, sobrepondo a lista de exclusão. O `WAWebSendMessageAction` casa com a
exclusão genérica de "termina em Action", mas é exatamente o que você quer, então
a lista de inclusão o resgata.

**3. exclude**

Descartado.

**4. defaultVerdict**

O que acontece com o que nenhuma lista casou. `keep` faz uma lista de bloqueio,
que é o que o `default` é. `drop` faz uma lista de permissão, que é o que o
`protocol` é.

Com `excludeDependentsOfExcluded`, tudo que depende de um módulo descartado também é
descartado, seguindo a cadeia até o fim. Módulos casados por `include` ficam isentos,
já que você pediu por eles explicitamente.

Mais duas listas ajustam a comparação em vez da seleção:

* `noiseDeps` lista dependências cuja entrada e saída não diz nada, então elas ficam
  fora das mudanças de dependência relatadas.
* `noiseCode` lista padrões de saída de compilador, então um módulo cuja mudança
  inteira é ruído de build é contado como ruído em vez de relatado.

> [!NOTE]
>
> As regras do filtro `default` vêm do `wa-diff-analyzer` do ProtoCocktail,
> construídas à mão contra bundles reais ao longo de muito tempo. Elas carregam um
> bocado de conhecimento acumulado sobre qual nome de módulo significa o quê.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.