import { z } from 'zod';
import { ObjectLiteral } from '../../../../types';
import { ResultGetField, RelationTree } from '../../types';
declare function getZodRules<K extends readonly [string, ...string[]]>(fields: K): z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<K>>, "atleastone">, [z.Writeable<K>[number], ...z.Writeable<K>[number][]], [z.Writeable<K>[number], ...z.Writeable<K>[number][]]>>;
type ZodRule<K extends readonly [string, ...string[]]> = ReturnType<typeof getZodRules<K>>;
type TargetRelationShape<E extends ObjectLiteral> = {
    [K in keyof RelationTree<E>]: ZodRule<RelationTree<E>[K]>;
};
export declare function zodFieldsQuery<E extends ObjectLiteral>(fields: ResultGetField<E>['field'], relationList: RelationTree<E>): z.ZodNullable<z.ZodEffects<z.ZodObject<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>>, any> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>>, any>[k]; } : never, z.baseObjectInputType<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>> extends infer T_1 ? { [k_1 in keyof T_1]: z.baseObjectInputType<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>>[k_1]; } : never>, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>>, any> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>>, any>[k]; } : never, z.baseObjectInputType<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>> extends infer T_1 ? { [k_1 in keyof T_1]: z.baseObjectInputType<{
    target: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEnum<z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>>, "atleastone">, [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]], [z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number], ...z.Writeable<import("../../types").TupleOfEntityProps<E, import("../../types").UnionToTuple<import("../../types").EntityProps<E>>>>[number][]]>>;
} & TargetRelationShape<E>>[k_1]; } : never>>;
export type ZodFieldsQuery<E extends ObjectLiteral> = ReturnType<typeof zodFieldsQuery<E>>;
export type FieldsQuery<E extends ObjectLiteral> = z.infer<ZodFieldsQuery<E>>;
export {};
