sync: memória completa 2026-05-20 (daily+learnings+errors+patterns)
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# Errors — Falhas para evitar
|
||||
|
||||
_Registro de erros, exceções e falhas com contexto de reprodução._
|
||||
|
||||
---
|
||||
|
||||
## [ERR-20260519-002] tsup-flat-infinity-breaks-dts
|
||||
|
||||
**Logged**: 2026-05-19T21:35:00-03:00
|
||||
**Severity**: high
|
||||
**Area**: config | build
|
||||
|
||||
### What happened
|
||||
`cn()` usava `flat(Infinity)` no array de classes. O gerador de DTS do tsup v8 quebra com tipos recursivos infinitos, lançando `Type instantiation is excessively deep`.
|
||||
|
||||
### Error message
|
||||
```
|
||||
src/utils/index.ts: error TS2589: Type instantiation is excessively deep and possibly infinite.
|
||||
DTS Build error
|
||||
```
|
||||
|
||||
### Reproduction
|
||||
```ts
|
||||
type ClassValue = string | false | null | undefined | ClassValue[];
|
||||
// ❌ flat(Infinity) → tipo recursivo infinito → DTS quebra
|
||||
export function cn(...inputs: ClassValue[]): string {
|
||||
return inputs.flat(Infinity)....
|
||||
}
|
||||
```
|
||||
|
||||
### Fix
|
||||
```ts
|
||||
type ClassValue = string | boolean | null | undefined | Array<ClassValue>;
|
||||
// ✅ flat(2) — máximo de aninhamento é 2 níveis (cls, [cls2])
|
||||
export function cn(...inputs: ClassValue[]): string {
|
||||
return inputs.flat(2)....
|
||||
}
|
||||
```
|
||||
|
||||
### Also fixed in same session
|
||||
- `process.env.NODE_ENV` no código → quebra SSR / bundler. Solução: guarda `typeof localStorage !== 'undefined'`
|
||||
- `documentoSchema` usava `.replace()` direto na string Zod → `.transform(v => v.replace(…))`
|
||||
|
||||
---
|
||||
|
||||
<!-- Novas entradas acima desta linha -->
|
||||
|
||||
---
|
||||
|
||||
## ERR-20260519-002
|
||||
**Data**: 2026-05-19T21:35:00-03:00
|
||||
**Severidade**: medium
|
||||
**Status**: resolved
|
||||
|
||||
### Problema
|
||||
Template strings com backticks aninhadas em `docker/dockerfile.ts` quebraram compilação TypeScript.
|
||||
|
||||
### Resolução
|
||||
Reescrever com template literals simples sem aninhamento: concatenar strings ou usar `.replace()` fora do template.
|
||||
|
||||
### Lição
|
||||
Template strings aninhadas (backticks dentro de backticks) podem quebrar sintaxe TS. Usar `fn().replace(...)` quando precisar de conteúdo dinâmico dentro de strings já com template.
|
||||
|
||||
Reference in New Issue
Block a user