import { z } from 'zod';

declare type ZodValidatorShape<InputModel> = {
    [key in keyof InputModel]-?: undefined extends InputModel[key] ? null extends InputModel[key] ? z.ZodNullableType<z.ZodOptionalType<z.ZodType<InputModel[key]>>> : z.ZodOptionalType<z.ZodType<InputModel[key]>> : null extends InputModel[key] ? z.ZodNullableType<z.ZodType<InputModel[key]>> : z.ZodType<InputModel[key]>;
} | {
    [unknownKey in Exclude<keyof InputModel, keyof InputModel>]: z.ZodTypeAny;
};
declare type ZodValidatorSchemaRules<Shape extends z.ZodRawShape> = z.ZodObject<Shape>;
declare type ZodValidatorParsed<Shape> = Shape extends z.ZodTypeAny ? z.infer<Shape> : Shape extends Record<string, z.ZodTypeAny> ? {
    [key in keyof Shape]: z.infer<Shape[key]>;
} : never;

export { ZodValidatorParsed, ZodValidatorSchemaRules, ZodValidatorShape };
