Zod
Haladó validációk (refine, transform)
Egyedi szabályok refine/superRefine-val, adat transzformáció transform-mal, preprocess és pipe.
refine – egyedi validációs szabály
import { z } from "zod"
const evenNumberSchema = z.number().refine((val) => val % 2 === 0, {
message: "Csak páros szám megengedett",
})const passwordSchema = z.string().superRefine((val, ctx) => {
if (val.length < 8) {
ctx.addIssue({
code: z.ZodIssueCode.too_small,
minimum: 8,
type: "string",
inclusive: true,
message: "Minimum 8 karakter szükséges",
})
}
if (!/[A-Z]/.test(val)) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: "Legalább egy nagybetű szükséges",
})
}
})transform – adat átalakítása validáció után
const numericStringSchema = z.string().transform((val) => parseInt(val, 10))const emailSchema = z
.string()
.email()
.transform((val) => val.toLowerCase().trim())const dateStringSchema = z
.string()
.datetime()
.transform((val) => new Date(val))preprocess – validáció előtti előkészítés
const numberFromString = z.preprocess(
(val) => (typeof val === "string" ? parseFloat(val) : val),
z.number().positive()
)pipe – sémák láncolása
const schema = z
.string()
.transform((val) => val.split(","))
.pipe(z.array(z.string().min(1)))