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);
  }
};