implementado biome para ia
This commit is contained in:
parent
0a6ce2e323
commit
b132aa8005
5 changed files with 441 additions and 78 deletions
153
README.md
153
README.md
|
|
@ -1,93 +1,120 @@
|
|||
## ✅ Uso do BiomeJS para Autoformatação
|
||||
# `p-comuns` — Pacote Compartilhado e-licencie
|
||||
|
||||
Este guia mostra como configurar o [BiomeJS](https://biomejs.dev) para formatar e analisar código JavaScript/TypeScript no seu projeto.
|
||||
Pacote de tipos, utilitários e configurações compartilhadas entre todos os subprojetos da plataforma **e-licencie** (back-end Node.js, front-end Vue 3 / TSX).
|
||||
|
||||
---
|
||||
|
||||
### 1. Incluir o pacote de configuração comum
|
||||
## ✅ Configuração do BiomeJS nos Subprojetos
|
||||
|
||||
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`.
|
||||
Este guia mostra como usar a configuração base do Biome disponível neste pacote (`Documentos/biome.json`). Todos os subprojetos herdam essas regras via `extends`.
|
||||
|
||||
pnpm up p-comuns
|
||||
|
||||
---
|
||||
|
||||
### 2. Instalar o Biome com `pnpm`
|
||||
### 1. Adicionar o `p-comuns` como dependência
|
||||
|
||||
```bash
|
||||
pnpm add --save-dev --save-exact @biomejs/biome@2.1.4
|
||||
pnpm add --save-dev p-comuns
|
||||
# ou atualizar se já existir:
|
||||
pnpm up p-comuns
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. Instalar o Biome
|
||||
|
||||
```bash
|
||||
pnpm add --save-dev --save-exact @biomejs/biome@2.4.0
|
||||
```
|
||||
|
||||
> 🎯 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:
|
||||
### 3. Criar `biome.json` na raiz do subprojeto
|
||||
|
||||
```json
|
||||
{
|
||||
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
||||
"extends": ["./node_modules/p-comuns/Documentos/biome.json"],
|
||||
"$schema": "node_modules/@biomejs/biome/configuration_schema.json",
|
||||
"extends": ["node_modules/p-comuns/Documentos/biome.json"],
|
||||
"vcs": {
|
||||
"enabled": true,
|
||||
"clientKind": "git",
|
||||
"useIgnoreFile": true
|
||||
},
|
||||
"files": {
|
||||
"includes": ["src/**/*.{js,ts,jsx,tsx}"]
|
||||
"includes": ["**/*.{ts,tsx,vue}"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> ⚠️ Verifique o caminho correto do `extends` relativo à raiz do seu projeto. Use `./` sempre que possível para evitar erros de resolução.
|
||||
> `vcs.useIgnoreFile: true` faz o Biome respeitar o `.gitignore` automaticamente — arquivos como `dist/`, `node_modules/` etc. são ignorados sem configuração adicional.
|
||||
|
||||
---
|
||||
|
||||
### 4. Adicionar script no `package.json`
|
||||
|
||||
Inclua o comando abaixo em `"scripts"`:
|
||||
### 4. Adicionar scripts no `package.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"scripts": {
|
||||
"biome": "pnpm exec biome check --write",
|
||||
"check": "pnpm run biome && npx tsc --noEmit"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
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:
|
||||
### 5. Configurar o VS Code (`.vscode/settings.json`)
|
||||
|
||||
```json
|
||||
"includes": ["**/*.{js,ts,jsx,tsx}"]
|
||||
```
|
||||
|
||||
|
||||
|
||||
adicionar em .vscode/settings.json
|
||||
|
||||
{
|
||||
"editor.defaultFormatter": "biomejs.biome",
|
||||
"editor.formatOnSave": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.organizeImports.biome": "always",
|
||||
"source.fixAll.biome": "always"
|
||||
},
|
||||
"[javascript]": { "editor.defaultFormatter": "biomejs.biome" },
|
||||
"[javascriptreact]": { "editor.defaultFormatter": "biomejs.biome" },
|
||||
"[typescript]": { "editor.defaultFormatter": "biomejs.biome" },
|
||||
"[typescriptreact]": { "editor.defaultFormatter": "biomejs.biome" },
|
||||
"[vue]": { "editor.defaultFormatter": "biomejs.biome" },
|
||||
"[css]": { "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"
|
||||
}
|
||||
"editor.rulers": [100],
|
||||
"files.eol": "\n",
|
||||
"files.trimTrailingWhitespace": true,
|
||||
"files.insertFinalNewline": true
|
||||
}
|
||||
```
|
||||
|
||||
> 💡 **Biome formata Vue `.vue` nativamente desde a v2.3** — não precisa do Prettier ou Vetur para formatação!
|
||||
|
||||
---
|
||||
|
||||
## 🔑 Regras da configuração base (Documentos/biome.json)
|
||||
|
||||
### O que está ativado:
|
||||
|
||||
| Categoria | Regras notáveis |
|
||||
|-----------|----------------|
|
||||
| **Correctness** | `noUnusedVariables`, `noUnusedImports`, `noVueSetupPropsReactivityLoss` |
|
||||
| **Vue 3 específico** | `noVueVIfWithVFor`, `useVueVForKey`, `noVueDuplicateKeys`, `noVueReservedKeys` |
|
||||
| **Style** | `useAsConstAssertion`, `useSelfClosingElements`, `useConsistentArrayType` (shorthand `T[]`) |
|
||||
| **Nursery Vue** | `noVueArrowFuncInWatch`, `useVueDefineMacrosOrder`, `useVueConsistentVBindStyle` |
|
||||
| **Security** | `noDangerouslySetInnerHtml` (warn) |
|
||||
|
||||
### Globals do Vue (sem necessidade de importar):
|
||||
|
||||
`defineProps`, `defineEmits`, `defineExpose`, `withDefaults`, `defineModel`, `defineOptions`, `defineSlots`
|
||||
|
||||
### Formatação:
|
||||
|
||||
- Indentação: **2 espaços**
|
||||
- Linha máxima: **100 caracteres**
|
||||
- Aspas: **duplas**
|
||||
- Ponto-e-vírgula: **apenas quando necessário**
|
||||
- Trailing comma: **sempre**
|
||||
- Line ending: **LF (`\n`)**
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -96,29 +123,21 @@ adicionar em .vscode/settings.json
|
|||
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)
|
||||
- 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 }
|
||||
}
|
||||
{ idade: { ">=": 18 } }
|
||||
```
|
||||
|
||||
#### 2. Campos Aninhados
|
||||
```typescript
|
||||
{
|
||||
carro: {
|
||||
ano: { "=": 2020 }
|
||||
}
|
||||
}
|
||||
{ carro: { ano: { "=": 2020 } } }
|
||||
```
|
||||
|
||||
#### 3. Operadores Lógicos
|
||||
|
|
@ -143,7 +162,7 @@ O filtro segue uma estrutura onde chaves representam campos (simples ou aninhado
|
|||
}
|
||||
```
|
||||
|
||||
#### 4. Exemplo Complexo Complet
|
||||
#### 4. Exemplo Complexo Completo
|
||||
```typescript
|
||||
{
|
||||
idade: { ">=": 18 },
|
||||
|
|
@ -161,21 +180,23 @@ O filtro segue uma estrutura onde chaves representam campos (simples ou aninhado
|
|||
|
||||
### 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`).
|
||||
- **Number**: `=`, `!=`, `>`, `>=`, `<`, `<=`, `in`
|
||||
- **String**: `=`, `!=`, `like`, `in`
|
||||
- **Boolean**: `=`, `!=`, `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';
|
||||
import { zFiltro26 } from "p-comuns"
|
||||
|
||||
// Valida a estrutura (não checa existência de colunas no DB)
|
||||
zFiltro26.parse(objetoFiltro);
|
||||
zFiltro26.parse(objetoFiltro)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Veja também
|
||||
|
||||
- [`AGENTS.md`](./AGENTS.md) — Guia para assistentes de IA (padrões, convenções, arquitetura)
|
||||
- [Biome 2.x Docs](https://biomejs.dev)
|
||||
- [Vue 3 Composition API](https://vuejs.org/guide/composition-api)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue