Something went wrong. Try again.
Extra schema for validating FormData on Zod & Zod mini 4+
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829import { z } from "zod/v4/mini";import { transformFormDataToObject } from "./shared";import type { FormDataValidatorInput, FormDataValidatorParams } from "./types";
/** * Transforms and validates a `FormData` instance into an object parseable with `z.object()`. * * # Important notes * - If parsing server side, directly use Zod's schemas instead of using the included `dom` schemas. * - By spec, `FormData` allows for a duplicated key (e.g, having 2 or more different values per key). This validator will only use the latest / bottom-most field value * * @example * ```ts * import { z } from "zod/v4/mini"; * import { formData } from "@angelo/zfd/mini-formdata"; * * const schema = formData({ * key: z.optional(z.string()) * }); * * const parsed = z.parse(schema, new FormData()) * // ^?: { key?: string | undefined } * ``` */export const formData = <T extends FormDataValidatorParams>( formSchema?: T,): z.ZodMiniType<z.output<z.ZodMiniObject<T>>, FormDataValidatorInput> => z.pipe(z.pipe(z.instanceof(FormData), z.transform(transformFormDataToObject)), z.object(formSchema));