import { z, ZodSchema, ZodError, ZodType } from 'zod'; /** * Validation result structure */ export interface ValidationResult { success: boolean; data?: T; errors?: FormattedValidationError[]; } /** * Formatted validation error for UI display */ export interface FormattedValidationError { path: string; message: string; code: string; params?: Record; } /** * Custom validator function */ export type CustomValidator = (value: T, context?: ValidationContext) => Promise> | ValidationResult; /** * Validation context for custom validators */ export interface ValidationContext { path: string[]; data: Record; abortSignal?: AbortSignal; } /** * Form field state */ export interface FieldState { value: T; error?: string; touched: boolean; dirty: boolean; validating: boolean; } /** * Form validation options */ export interface FormValidationOptions { mode?: 'onChange' | 'onBlur' | 'onSubmit'; revalidateMode?: 'onChange' | 'onBlur'; shouldFocusError?: boolean; criteriaMode?: 'firstError' | 'all'; } /** * State validation configuration */ export interface StateValidationConfig { schema: ZodSchema; onError?: (errors: FormattedValidationError[]) => void; strict?: boolean; } /** * Format Zod errors for UI display */ export declare function formatZodErrors(error: ZodError): FormattedValidationError[]; /** * Format errors for React Hook Form */ export declare function formatErrorsForForm(errors: FormattedValidationError[]): Record; /** * Get first error message for a field */ export declare function getFieldError(errors: FormattedValidationError[], fieldPath: string): string | undefined; /** * Group errors by field path */ export declare function groupErrorsByField(errors: FormattedValidationError[]): Record; /** * Validate data against a registered schema */ export declare function validateWithSchema(schemaName: string, data: unknown, options?: { useCache?: boolean; abortSignal?: AbortSignal; }): Promise>; /** * Validate data with direct schema */ export declare function validate(schema: ZodSchema, data: unknown): Promise>; /** * Validate API response */ export declare function validateApiResponse(schema: ZodSchema, response: unknown, options?: { strict?: boolean; }): Promise>; /** * Validate state change */ export declare function validateStateChange(currentState: T, updates: Partial, schema: ZodSchema): ValidationResult; /** * Form validation hook with comprehensive field management */ export declare function useFormValidation>(schema: ZodSchema, options?: FormValidationOptions): { values: Partial; errors: Record; touched: Record; isSubmitting: boolean; isValidating: boolean; submitCount: number; isValid: boolean; setValue: (name: keyof T, value: unknown) => void; setFieldValues: (updates: Partial) => void; handleBlur: (name: keyof T) => void; handleSubmit: (onSubmit: (data: T) => void | Promise) => (e?: React.FormEvent) => Promise; validateForm: (data: Partial) => Promise; validateField: (name: keyof T, value: unknown) => Promise; reset: (newValues?: Partial) => void; register: (name: keyof T) => { name: string; value: string | NonNullable[keyof T]>; onChange: (e: React.ChangeEvent) => void; onBlur: () => void; error: string | undefined; touched: boolean; }; }; /** * Single field validation hook */ export declare function useFieldValidation(_name: string, schema: ZodType, options?: { defaultValue?: T; validateOn?: 'change' | 'blur' | 'both'; debounceMs?: number; }): { value: T | undefined; error: string | undefined; touched: boolean; validating: boolean; setValue: (newValue: T) => void; onBlur: () => void; reset: () => void; }; /** * Create async validator with debouncing */ export declare function createAsyncValidator(validatorFn: (value: T) => Promise, options?: { debounceMs?: number; cacheResults?: boolean; }): (value: T) => Promise>; /** * Check uniqueness (e.g., email, username) */ export declare function createUniquenessValidator(checkFn: (value: T) => Promise, message?: string): CustomValidator; /** * Common validation schemas */ export declare const commonSchemas: { email: z.ZodString; password: z.ZodString; url: z.ZodString; uuid: z.ZodString; phone: z.ZodString; zipCode: z.ZodString; slug: z.ZodString; username: z.ZodString; positiveNumber: z.ZodNumber; percentage: z.ZodNumber; dateString: z.ZodString; }; /** * Enzyme Validation Extension */ export declare const validationExtension: { name: string; version: string; description: string; client: { /** * Register a named schema */ $registerSchema(name: string, schema: ZodSchema, metadata?: { description?: string; version?: string; }): void; /** * Validate data against registered schema */ $validate(schemaName: string, data: unknown, options?: { useCache?: boolean; }): Promise>; /** * Validate with direct schema */ $validateAsync(schema: ZodSchema, data: unknown): Promise>; /** * Get validation errors formatted for display */ $getValidationErrors(result: ValidationResult): FormattedValidationError[]; /** * Format errors for form display */ $formatErrorsForForm(errors: FormattedValidationError[]): Record; /** * Create form validator */ $createFormValidator>(schema: ZodSchema, options?: FormValidationOptions): { schema: z.ZodType>; options: FormValidationOptions | undefined; validate: (data: Partial) => Promise>; }; /** * Add custom validator */ $addCustomValidator(name: string, validator: CustomValidator): void; /** * Execute custom validator */ $executeValidator(name: string, value: T, context?: ValidationContext): Promise>; /** * Validate API response */ $validateApiResponse(schema: ZodSchema, response: unknown, options?: { strict?: boolean; }): Promise>; /** * Validate state change */ $validateStateChange(currentState: T, updates: Partial, schema: ZodSchema): ValidationResult; /** * Configure validation cache */ $configureCache(options: { maxSize?: number; ttl?: number; }): void; /** * Clear validation cache */ $clearCache(): void; /** * Get registered schemas */ $listSchemas(): string[]; /** * Get schema by name */ $getSchema(name: string): ZodSchema | undefined; /** * Common validation schemas */ $commonSchemas: { email: z.ZodString; password: z.ZodString; url: z.ZodString; uuid: z.ZodString; phone: z.ZodString; zipCode: z.ZodString; slug: z.ZodString; username: z.ZodString; positiveNumber: z.ZodNumber; percentage: z.ZodNumber; dateString: z.ZodString; }; }; }; export default validationExtension;