181 lines
4.3 KiB
Markdown
Executable file
181 lines
4.3 KiB
Markdown
Executable file
## ✅ Uso do BiomeJS para Autoformatação
|
|
|
|
Este guia mostra como configurar o [BiomeJS](https://biomejs.dev) para formatar e analisar código JavaScript/TypeScript no seu projeto.
|
|
|
|
---
|
|
|
|
### 1. Incluir o pacote de configuração comum
|
|
|
|
Certifique-se de que o pacote `p-comuns` (ou outro com a configuração compartilhada) esteja disponível no seu projeto. Ele deve conter o arquivo `Documentos/biome.json`.
|
|
|
|
pnpm up p-comuns
|
|
|
|
---
|
|
|
|
### 2. Instalar o Biome com `pnpm`
|
|
|
|
```bash
|
|
pnpm add --save-dev --save-exact @biomejs/biome@2.1.4
|
|
```
|
|
|
|
> 🎯 Use `--save-exact` para garantir consistência de versões entre ambientes.
|
|
|
|
---
|
|
|
|
### 3. Criar o arquivo de configuração na raiz do projeto
|
|
|
|
Crie um arquivo chamado `biome.json` com o seguinte conteúdo:
|
|
|
|
```json
|
|
{
|
|
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
|
"extends": ["./node_modules/p-comuns/Documentos/biome.json"],
|
|
"files": {
|
|
"includes": ["src/**/*.{js,ts,jsx,tsx}"]
|
|
}
|
|
}
|
|
```
|
|
|
|
> ⚠️ Verifique o caminho correto do `extends` relativo à raiz do seu projeto. Use `./` sempre que possível para evitar erros de resolução.
|
|
|
|
---
|
|
|
|
### 4. Adicionar script no `package.json`
|
|
|
|
Inclua o comando abaixo em `"scripts"`:
|
|
|
|
```json
|
|
{
|
|
"scripts": {
|
|
"biome": "pnpm exec biome check --write",
|
|
}
|
|
}
|
|
```
|
|
|
|
Isso permite executar:
|
|
|
|
```bash
|
|
pnpm biome
|
|
```
|
|
|
|
> O comando irá **formatar e aplicar as regras de lint** nos arquivos do diretório `src/`.
|
|
|
|
---
|
|
|
|
### ✅ Dica extra: formatar todos os arquivos
|
|
|
|
Se quiser aplicar o Biome a todo o projeto (não só `src/`), altere o include:
|
|
|
|
```json
|
|
"includes": ["**/*.{js,ts,jsx,tsx}"]
|
|
```
|
|
|
|
|
|
|
|
adicionar em .vscode/settings.json
|
|
|
|
{
|
|
"editor.defaultFormatter": "biomejs.biome",
|
|
"[javascript]": { "editor.defaultFormatter": "biomejs.biome" },
|
|
"[javascriptreact]": { "editor.defaultFormatter": "biomejs.biome" },
|
|
"[typescript]": { "editor.defaultFormatter": "biomejs.biome" },
|
|
"[typescriptreact]": { "editor.defaultFormatter": "biomejs.biome" },
|
|
"[json]": { "editor.defaultFormatter": "biomejs.biome" },
|
|
"[jsonc]": { "editor.defaultFormatter": "biomejs.biome" },
|
|
"[vue]": {"editor.defaultFormatter": "octref.vetur"},
|
|
"editor.codeActionsOnSave": {
|
|
"source.organizeImports.biome": "always",
|
|
"source.fixAll.biome": "always"
|
|
}
|
|
}
|
|
|
|
---
|
|
|
|
## ✅ Sistema de Filtros (tipoFiltro26)
|
|
|
|
O sistema `tipoFiltro26` foi projetado para gerar automaticamente a tipagem de filtros compatíveis com operadores padrão do PostgreSQL, a partir de um tipo base `T`.
|
|
|
|
**Principais características:**
|
|
- Tipagem forte e segura (Typescript)
|
|
- Suporte a aninhamento de objetos
|
|
- Operadores lógicos `E` (AND) e `OU` (OR)
|
|
- Validação de operadores permitidos por tipo de dado (string, number, boolean)
|
|
|
|
### Estrutura do Filtro
|
|
|
|
O filtro segue uma estrutura onde chaves representam campos (simples ou aninhados) e valores representam condições com operadores específicos.
|
|
|
|
#### 1. Campos Simples
|
|
```typescript
|
|
{
|
|
idade: { ">=": 18 }
|
|
}
|
|
```
|
|
|
|
#### 2. Campos Aninhados
|
|
```typescript
|
|
{
|
|
carro: {
|
|
ano: { "=": 2020 }
|
|
}
|
|
}
|
|
```
|
|
|
|
#### 3. Operadores Lógicos
|
|
|
|
**Operador E (AND):** Todos devem ser verdadeiros.
|
|
```typescript
|
|
{
|
|
E: [
|
|
{ idade: { ">=": 18 } },
|
|
{ nome: { like: "%pa%" } }
|
|
]
|
|
}
|
|
```
|
|
|
|
**Operador OU (OR):** Pelo menos um deve ser verdadeiro.
|
|
```typescript
|
|
{
|
|
OU: [
|
|
{ idade: { "<": 18 } },
|
|
{ idade: { ">=": 60 } }
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 4. Exemplo Complexo Complet
|
|
```typescript
|
|
{
|
|
idade: { ">=": 18 },
|
|
OU: [
|
|
{ nome: { like: "%pa%" } },
|
|
{
|
|
E: [
|
|
{ carro: { ano: { "=": 2020 } } },
|
|
{ carro: { modelo: { in: ["Civic"] } } }
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Operadores Suportados (`operadores26`)
|
|
|
|
Os operadores são fornecidos pelo enum `operadores26` e são restritos pelo tipo do campo:
|
|
|
|
* **Number**: `=`, `!=`, `>`, `>=`, `<`, `<=`, `in`
|
|
* **String**: `=`, `!=`, `like`, `in`
|
|
* **Boolean**: `=`, `!=`, `in`
|
|
|
|
> **Nota:** Atualmente não há suporte automático para `null`, `date`, `jsonb` ou `arrays` como tipos de campo raiz (exceto arrays dentro do operador `in`).
|
|
|
|
### Validação em Tempo de Execução (Zod)
|
|
|
|
O sistema inclui um validador Zod `zFiltro26` para validação estrutural dos objetos de filtro recebidos (ex: via API).
|
|
|
|
```typescript
|
|
import { zFiltro26 } from './tipoFiltro.26';
|
|
|
|
// Valida a estrutura (não checa existência de colunas no DB)
|
|
zFiltro26.parse(objetoFiltro);
|
|
```
|