import { z, ZodArray, ZodLiteral, ZodNumber, ZodObject, ZodOptional, ZodString, ZodUnion } from 'zod';
import { MapController } from '../../types';
import { TupleOfEntityRelation, ZodEntityProps } from '../../../mixin/types';
import { EntityClass, ObjectLiteral } from '../../../../types';
export declare enum Operation {
    add = "add",
    update = "update",
    remove = "remove"
}
declare const literalSchema: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>;
type Literal = z.infer<typeof literalSchema>;
type Json = Literal | {
    [key: string]: Json;
} | Json[];
declare const zodGeneralData: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
type ZodGeneral = typeof zodGeneralData;
export type ZodAdd<T extends string> = ReturnType<typeof zodAdd<T>>;
export declare const zodAdd: <T extends string>(type: T) => z.ZodObject<{
    op: z.ZodLiteral<Operation.add>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    op: z.ZodLiteral<Operation.add>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>, any> extends infer T_3 ? { [k_2 in keyof T_3]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    op: z.ZodLiteral<Operation.add>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>, any>[k_2]; } : never, z.baseObjectInputType<{
    op: z.ZodLiteral<Operation.add>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}> extends infer T_4 ? { [k_3 in keyof T_4]: z.baseObjectInputType<{
    op: z.ZodLiteral<Operation.add>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>[k_3]; } : never>;
export type ZodUpdate<T extends string> = ReturnType<typeof zodUpdate<T>>;
export declare const zodUpdate: <T extends string>(type: T) => z.ZodObject<{
    op: z.ZodLiteral<Operation.update>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    op: z.ZodLiteral<Operation.update>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>, any> extends infer T_3 ? { [k_2 in keyof T_3]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    op: z.ZodLiteral<Operation.update>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>, any>[k_2]; } : never, z.baseObjectInputType<{
    op: z.ZodLiteral<Operation.update>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}> extends infer T_4 ? { [k_3 in keyof T_4]: z.baseObjectInputType<{
    op: z.ZodLiteral<Operation.update>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>[k_3]; } : never>;
export type ZodRemove<T extends string> = ReturnType<typeof zodRemove<T>>;
export declare const zodRemove: <T extends string>(type: T) => z.ZodObject<{
    op: z.ZodLiteral<Operation.remove>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
}, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    op: z.ZodLiteral<Operation.remove>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
}>, any> extends infer T_3 ? { [k_2 in keyof T_3]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    op: z.ZodLiteral<Operation.remove>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
}>, any>[k_2]; } : never, z.baseObjectInputType<{
    op: z.ZodLiteral<Operation.remove>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
}> extends infer T_4 ? { [k_3 in keyof T_4]: z.baseObjectInputType<{
    op: z.ZodLiteral<Operation.remove>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>, any>[k]; } : never, z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
        type: z.ZodLiteral<T>;
        id: z.ZodString;
    }>[k_1]; } : never>;
}>[k_3]; } : never>;
export type ZodOperationRel<E extends ObjectLiteral, O extends Operation> = ReturnType<typeof zodOperationRel<E, O>>;
export declare const zodOperationRel: <E extends ObjectLiteral, O extends Operation>(type: string, rel: TupleOfEntityRelation<E>, typeOperation: O) => z.ZodObject<{
    op: z.ZodLiteral<O>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<string>;
        id: z.ZodString;
        relationship: z.ZodUnion<[z.ZodLiteral<string>, z.ZodLiteral<string>, ...z.ZodLiteral<string>[]]>;
    }, "strict", z.ZodTypeAny, {
        id: string;
        type: string;
        relationship: string;
    }, {
        id: string;
        type: string;
        relationship: string;
    }>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}, "strict", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    op: z.ZodLiteral<O>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<string>;
        id: z.ZodString;
        relationship: z.ZodUnion<[z.ZodLiteral<string>, z.ZodLiteral<string>, ...z.ZodLiteral<string>[]]>;
    }, "strict", z.ZodTypeAny, {
        id: string;
        type: string;
        relationship: string;
    }, {
        id: string;
        type: string;
        relationship: string;
    }>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>, any> extends infer T ? { [k in keyof T]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    op: z.ZodLiteral<O>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<string>;
        id: z.ZodString;
        relationship: z.ZodUnion<[z.ZodLiteral<string>, z.ZodLiteral<string>, ...z.ZodLiteral<string>[]]>;
    }, "strict", z.ZodTypeAny, {
        id: string;
        type: string;
        relationship: string;
    }, {
        id: string;
        type: string;
        relationship: string;
    }>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>, any>[k]; } : never, z.baseObjectInputType<{
    op: z.ZodLiteral<O>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<string>;
        id: z.ZodString;
        relationship: z.ZodUnion<[z.ZodLiteral<string>, z.ZodLiteral<string>, ...z.ZodLiteral<string>[]]>;
    }, "strict", z.ZodTypeAny, {
        id: string;
        type: string;
        relationship: string;
    }, {
        id: string;
        type: string;
        relationship: string;
    }>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}> extends infer T_1 ? { [k_1 in keyof T_1]: z.baseObjectInputType<{
    op: z.ZodLiteral<O>;
    ref: z.ZodObject<{
        type: z.ZodLiteral<string>;
        id: z.ZodString;
        relationship: z.ZodUnion<[z.ZodLiteral<string>, z.ZodLiteral<string>, ...z.ZodLiteral<string>[]]>;
    }, "strict", z.ZodTypeAny, {
        id: string;
        type: string;
        relationship: string;
    }, {
        id: string;
        type: string;
        relationship: string;
    }>;
    data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
}>[k_1]; } : never>;
export type ZodInputArray = ZodArray<ZodObject<{
    op: ZodLiteral<Operation>;
    ref: ZodObject<{
        type: ZodString;
        id: ZodOptional<ZodString>;
        relationship: ZodOptional<ZodString>;
        tmpId: ZodOptional<ZodUnion<[ZodNumber, ZodString]>>;
    }>;
    data: ZodOptional<ZodGeneral>;
}>, 'atleastone'>;
export type ZodInputOperation<E extends ObjectLiteral = ObjectLiteral> = ReturnType<typeof zodInputOperation<E>>;
export type InputOperation<E extends ObjectLiteral> = z.infer<ZodInputOperation<E>>;
export type InputArray = z.infer<ZodInputArray>;
export declare function zodInputOperation<E extends ObjectLiteral>(mapController: MapController<E>, entityMapProps: Map<EntityClass<E>, ZodEntityProps<E>>): z.ZodObject<{
    "atomic:operations": z.ZodArray<z.ZodUnion<[z.ZodObject<{
        op: z.ZodLiteral<Operation.add>;
        ref: z.ZodObject<{
            type: z.ZodLiteral<string>;
            tmpId: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
        }, "strict", z.ZodTypeAny, {
            type: string;
            tmpId?: string | number | undefined;
        }, {
            type: string;
            tmpId?: string | number | undefined;
        }>;
        data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
    }, "strict", z.ZodTypeAny, {
        ref: {
            type: string;
            tmpId?: string | number | undefined;
        };
        op: Operation.add;
        data: Json;
    }, {
        ref: {
            type: string;
            tmpId?: string | number | undefined;
        };
        op: Operation.add;
        data: Json;
    }>, z.ZodObject<{
        op: z.ZodLiteral<Operation.update>;
        ref: z.ZodObject<{
            type: z.ZodLiteral<string>;
            id: z.ZodString;
        }, "strict", z.ZodTypeAny, {
            id: string;
            type: string;
        }, {
            id: string;
            type: string;
        }>;
        data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
    }, "strict", z.ZodTypeAny, {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.update;
        data: Json;
    }, {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.update;
        data: Json;
    }>, z.ZodObject<{
        op: z.ZodLiteral<Operation.remove>;
        ref: z.ZodObject<{
            type: z.ZodLiteral<string>;
            id: z.ZodString;
        }, "strict", z.ZodTypeAny, {
            id: string;
            type: string;
        }, {
            id: string;
            type: string;
        }>;
    }, "strict", z.ZodTypeAny, {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.remove;
    }, {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.remove;
    }>, z.ZodObject<{
        op: z.ZodLiteral<Operation.add>;
        ref: z.ZodObject<{
            type: z.ZodLiteral<string>;
            id: z.ZodString;
            relationship: z.ZodUnion<[z.ZodLiteral<string>, z.ZodLiteral<string>, ...z.ZodLiteral<string>[]]>;
        }, "strict", z.ZodTypeAny, {
            id: string;
            type: string;
            relationship: string;
        }, {
            id: string;
            type: string;
            relationship: string;
        }>;
        data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
    }, "strict", z.ZodTypeAny, {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.add;
        data: Json;
    }, {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.add;
        data: Json;
    }>, z.ZodObject<{
        op: z.ZodLiteral<Operation.remove>;
        ref: z.ZodObject<{
            type: z.ZodLiteral<string>;
            id: z.ZodString;
            relationship: z.ZodUnion<[z.ZodLiteral<string>, z.ZodLiteral<string>, ...z.ZodLiteral<string>[]]>;
        }, "strict", z.ZodTypeAny, {
            id: string;
            type: string;
            relationship: string;
        }, {
            id: string;
            type: string;
            relationship: string;
        }>;
        data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
    }, "strict", z.ZodTypeAny, {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.remove;
        data: Json;
    }, {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.remove;
        data: Json;
    }>, z.ZodObject<{
        op: z.ZodLiteral<Operation.update>;
        ref: z.ZodObject<{
            type: z.ZodLiteral<string>;
            id: z.ZodString;
            relationship: z.ZodUnion<[z.ZodLiteral<string>, z.ZodLiteral<string>, ...z.ZodLiteral<string>[]]>;
        }, "strict", z.ZodTypeAny, {
            id: string;
            type: string;
            relationship: string;
        }, {
            id: string;
            type: string;
            relationship: string;
        }>;
        data: z.ZodNullable<z.ZodType<Json, z.ZodTypeDef, Json>>;
    }, "strict", z.ZodTypeAny, {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.update;
        data: Json;
    }, {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.update;
        data: Json;
    }>]>, "atleastone">;
}, "strict", z.ZodTypeAny, {
    "atomic:operations": [{
        ref: {
            type: string;
            tmpId?: string | number | undefined;
        };
        op: Operation.add;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.update;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.remove;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.add;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.remove;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.update;
        data: Json;
    }, ...({
        ref: {
            type: string;
            tmpId?: string | number | undefined;
        };
        op: Operation.add;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.update;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.remove;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.add;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.remove;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.update;
        data: Json;
    })[]];
}, {
    "atomic:operations": [{
        ref: {
            type: string;
            tmpId?: string | number | undefined;
        };
        op: Operation.add;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.update;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.remove;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.add;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.remove;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.update;
        data: Json;
    }, ...({
        ref: {
            type: string;
            tmpId?: string | number | undefined;
        };
        op: Operation.add;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.update;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
        };
        op: Operation.remove;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.add;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.remove;
        data: Json;
    } | {
        ref: {
            id: string;
            type: string;
            relationship: string;
        };
        op: Operation.update;
        data: Json;
    })[]];
}>;
export {};
