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