fabien0102 / ts-to-zod

Generate zod schemas from typescript types/interfaces
MIT License
1.17k stars 65 forks source link

@equals parameter for comparing values #56

Open replete opened 2 years ago

replete commented 2 years ago

Feature description

A common use-case of Zod validation within APIs, for instance, is to check incoming request objects for matching values - typically, password and passwordConfirmation fields for a user signup type endpoint.

Input

export interface CreateUser {
    /**
     * @minLength 2
     * @maxLength 254
     */
    name: string
    /**
     * @minLength 6
     * @maxLength 320
     * @format email
     */
    email: string
    /**
     * @minLength 6
     * @maxLength 127
     */
    password: string
    /**
     * @equals password, "Passwords do not match"
     */
     passwordConfirmation: string
}

Output

// Generated by ts-to-zod
import { z } from 'zod'

export const createUserSchema = z.object({
    name: z.string().min(2).max(254),
    email: z.string().min(6).max(320).email(),
    password: z.string().min(6).max(127)
}).refine((object) => object.password === object.passwordConfirmation, {
    message: "Passwords do not match",
    path: ["passwordConfirmation"]
  }),
replete commented 2 years ago

@equalsProperty might be a better name