Novos métodos no Zod aumentam muito nossa qualidade de vida

Olá pessoal, esse é meu primeiro post, então não sei bem o "formato" que devo escrever aqui, por isso agradeço se derem feedbacks. Também pesquisei se já não tinha nenhum post sobre isso no site mas não achei.

Queria falar da nova versão do Zod (3.20): ela tem várias novidades muito legais e que facilitam vários casos comuns do dia a dia que antes precisavam de mais código/lógica para serem resolvidos.

Entre os métodos novos os que achei mais interessantes são o .pipe(), .coerce() e .catch().

Uma pequena explicação de cada um deles:

.pipe()

Serve pra encadear schemas, quando você quer fazer mais de uma validação seguida. Exemplo:

z.string()
  .transform(val => val.length)
  .pipe(z.number().min(5))

Primeiro valida se é string, depois transforma para um número (que será o length da string), e valida se o número final é no mínimo 5. Isso antes só era possível fazer manualmente com .refine().

.coerce()

Serve pra converter valores. Também era possível fazer de uma forma mais manual, mas agora fica muito mais fácil. No exemplo abaixo qualquer valor que chegar será convertido pra string.

const schema = z.coerce.string();
schema.parse("tuna"); // => "tuna"
schema.parse(12); // => "12"
schema.parse(true); // => "true"

.catch()

Serve para termos fallbacks. Caso o valor não seja válido, um valor padrão é colocado no lugar. Exemplo:

const schema = z.string().catch("name");

schema.parse("kate"); // => "kate"
schema.parse(4); // => "name"

Eu achei demais essa atualização. Originalmente eu postei sobre isso no br-dev.org (em breve queria compartilhar sobre ele aqui tbm :D), lá tem alguns detalhes a mais: https://br-dev.org/publicacoes/lancado-zod-3-20-com-pipe-coerce-e-mais.

E vocês, o que acharam? Já usam o Zod?