react-zod-form
Version:
Simple form validation and values transformation.
48 lines (47 loc) • 2.61 kB
TypeScript
import { FormEvent } from "react";
import { z } from "zod";
import { Leaves, ShapeToFields, ZodFormEvents, ZodFormOptions } from "./types";
/**
* A general view of a form.
*/
declare class ZodForm<Shape extends z.ZodRawShape, FormObject extends z.ZodObject<Shape>> {
readonly shape: Shape;
readonly options?: ZodFormOptions | undefined;
private events;
readonly object: FormObject;
readonly fields: ShapeToFields<Shape>;
readonly fieldNames: Exclude<Leaves<FormObject["_type"]>, null | undefined>[];
constructor(shape: Shape, options?: ZodFormOptions | undefined);
/**
* @throws `ZodError`
* @returns Field name and value
*/
parseCurrentField<Key extends keyof Shape & string>(event: FormEvent<HTMLFormElement>): {
name: string;
value: any;
} | undefined;
parseField<Key extends keyof Shape & string>(event: FormEvent<HTMLFormElement>, fieldName: Key): {
name: string;
value: any;
} | undefined;
private emitError;
/**
* @throws `ZodError`
* @returns Fields dictionary
*/
parseAllFields(event: FormEvent<HTMLFormElement>): (z.objectUtil.addQuestionMarks<z.baseObjectOutputType<Shape>, { [k_1 in keyof z.baseObjectOutputType<Shape>]: undefined extends z.baseObjectOutputType<Shape>[k_1] ? never : k_1; }[keyof Shape]> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<Shape>, { [k_1 in keyof z.baseObjectOutputType<Shape>]: undefined extends z.baseObjectOutputType<Shape>[k_1] ? never : k_1; }[keyof Shape]>[k]; } : never) | undefined;
safeParseAllFields(event: FormEvent<HTMLFormElement>): z.SafeParseReturnType<z.baseObjectInputType<Shape> extends infer T ? { [k in keyof T]: z.baseObjectInputType<Shape>[k]; } : never, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<Shape>, { [k_2 in keyof z.baseObjectOutputType<Shape>]: undefined extends z.baseObjectOutputType<Shape>[k_2] ? never : k_2; }[keyof Shape]> extends infer T_1 ? { [k_1 in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<Shape>, { [k_2 in keyof z.baseObjectOutputType<Shape>]: undefined extends z.baseObjectOutputType<Shape>[k_2] ? never : k_2; }[keyof Shape]>[k_1]; } : never>;
private shapeToFields;
private getShapeFlatKeys;
/**
* Subscribes to `event` with `listener`.
*
* @example
* form.on("close", () => { })
*
* @returns `unsubscribe` method
*/
on<T extends keyof ZodFormEvents>(event: T, listener: ZodFormEvents[T]): () => void;
}
export default ZodForm;
export type ZodFormAny = ZodForm<any, any>;