import { type DB as DefaultDB, type PrimaryFieldType } from "../../core";
import { type EmitsEvents, EventManager } from "../../core/events";
import type { DeleteQueryBuilder, InsertQueryBuilder, UpdateQueryBuilder } from "kysely";
import { type TActionContext } from "..";
import type { Entity, EntityData, EntityManager } from "../entities";
import { MutatorEvents } from "../events";
import type { RepoQuery } from "../server/query";
type MutatorQB = InsertQueryBuilder<any, any, any> | UpdateQueryBuilder<any, any, any, any> | DeleteQueryBuilder<any, any, any>;
export type MutatorResponse<T = EntityData[]> = {
    entity: Entity;
    sql: string;
    parameters: any[];
    result: EntityData[];
    data: T;
};
export declare class Mutator<TBD extends object = DefaultDB, TB extends keyof TBD = any, Output = TBD[TB], Input = Omit<Output, "id">> implements EmitsEvents {
    em: EntityManager<TBD>;
    entity: Entity;
    protected options?: {
        emgr?: EventManager<any>;
    } | undefined;
    static readonly Events: {
        MutatorInsertBefore: typeof import("../events").MutatorInsertBefore;
        MutatorInsertAfter: typeof import("../events").MutatorInsertAfter;
        MutatorUpdateBefore: typeof import("../events").MutatorUpdateBefore;
        MutatorUpdateAfter: typeof import("../events").MutatorUpdateAfter;
        MutatorDeleteBefore: typeof import("../events").MutatorDeleteBefore;
        MutatorDeleteAfter: typeof import("../events").MutatorDeleteAfter;
    };
    emgr: EventManager<typeof MutatorEvents>;
    __unstable_disable_system_entity_creation: boolean;
    __unstable_toggleSystemEntityCreation(value: boolean): void;
    constructor(em: EntityManager<TBD>, entity: Entity, options?: {
        emgr?: EventManager<any>;
    } | undefined);
    private get conn();
    getValidatedData<Given = any>(data: Given, context: TActionContext): Promise<Given>;
    protected many(qb: MutatorQB): Promise<MutatorResponse>;
    protected single(qb: MutatorQB): Promise<MutatorResponse<EntityData>>;
    insertOne(data: Input): Promise<MutatorResponse<Output>>;
    updateOne(id: PrimaryFieldType, data: Partial<Input>): Promise<MutatorResponse<Output>>;
    deleteOne(id: PrimaryFieldType): Promise<MutatorResponse<Output>>;
    private getValidOptions;
    private appendWhere;
    deleteWhere(where: RepoQuery["where"]): Promise<MutatorResponse<Output[]>>;
    updateWhere(data: Partial<Input>, where: RepoQuery["where"]): Promise<MutatorResponse<Output[]>>;
    insertMany(data: Input[]): Promise<MutatorResponse<Output[]>>;
}
export {};
