Executando verificação de segurança...
2

O método .trim() que você usou no trecho de código removerá os espaços em branco de ambas as extremidades da string.

Usando um pipe, você pode primeiro remover os espaços em branco e, em seguida, realizar validações adicionais.

Tente isso:

import { z } from "zod";

const test = z.object({
  name: z.string().transform(e => e.replace(/\s+/g, ''))
.pipe(z.string().min(1, { message: 'required' }).toLowerCase())
})

const result = test.safeParse({
  name: "P a lavra com Espaço"
})


A baixo o retorno:

npx ts-node index.ts { success: true, data: { name: 'palavracomespaço' } }

Carregando publicação patrocinada...
1

Realmente não sei pq n funciona, eu tenho um arquivo chamado createBrandSchema.js que é esse de baixo.

import { object, string } from 'zod';
export const createBrandSchema = object({
  body: object({
    name: string({
      required_error: 'Nome da marca é obrigatório',
    })
      .transform(e => e.replace(/\s+/g, ''))
      .pipe(string().min(1, { message: 'required' }).toLowerCase()),
  }),
});

E o arquivo validate.js recebe como schema e faz a validações necessárias

import { ZodError } from 'zod';
export const validate = schema => (req, res, next) => {
  console.log(req);
  try {
    schema.safeParse({
      params: req.params,
      query: req.query,
      body: req.body,
    });
    console.log(req.next().value);
  } catch (error) {
    if (error instanceof ZodError) {
      return res.status(400).json({
        status: 'fail',
        errors: error.errors,
      });
    }
    next(error);
  }
};