Files
pulse-libs/.learnings/ERRORS.md
T
pulse-agent 9afdccdc14 feat(tests-hooks): 23/23 hooks tests pass — useToggle, useAsync, useDebounce, useLocalStorage, useMedia, useInterval, useClipboard, useFetch
- useLocalStorage: retorna tupla [valor, setter] tipada como [T, (v: T|fn) => void]
- useAsync: espera microtask act cycle antes de checar status
- useClipboard: mock navigator.clipboard.writeText antes
- useMedia: mock matchMedia antes
- Busca por padrão: act() + waitFor p/ efeitos assíncronos (sem fakeTimers gerais)
- docs: PROJECTS-REGISTER, SESSION-STATE (pretérito + presente)
2026-05-19 23:37:04 -03:00

1.9 KiB

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

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

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(…))


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.