import { 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 = ( formSchema?: T, ): z.ZodMiniType>, FormDataValidatorInput> => z.pipe(z.pipe(z.instanceof(FormData), z.transform(transformFormDataToObject)), z.object(formSchema));