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