import { ListFindQuery } from '..';
import { Model, RelationType } from '../dataModel';
import { Relation } from './interface';
export default class ManyToMany implements Relation {
    private readonly modelA;
    private readonly modelB;
    private readonly modelAField;
    private readonly modelBField;
    constructor({ modelA, modelB, modelAField, modelBField, }: {
        modelA: Model;
        modelB: Model;
        modelAField: string;
        modelBField?: string;
    });
    getType(): RelationType;
    getModelA(): Model;
    getModelAField(): string;
    getModelB(): Model;
    getModelBField(): string;
    addId({ modelAId, modelBId }: {
        modelAId: string;
        modelBId: string;
    }, context: any): Promise<void>;
    private createAndAddIdFromRefSide;
    createAndAddIdForModelA({ modelAId, modelBData }: {
        modelAId: string;
        modelBData: Record<string, any>;
    }, context: any): Promise<void>;
    createAndAddIdForModelB({ modelBId, modelAData }: {
        modelBId: string;
        modelAData: Record<string, any>;
    }, context: any): Promise<any>;
    removeId({ modelAId, modelBId }: {
        modelAId: string;
        modelBId: string;
    }, context: any): Promise<void>;
    deleteAndRemoveIdFromModelA({ modelAId, modelBId }: {
        modelAId: string;
        modelBId: string;
    }, context: any): Promise<void>;
    deleteAndRemoveIdFromModelB({ modelAId, modelBId }: {
        modelAId: string;
        modelBId: string;
    }, context: any): Promise<void>;
    joinModelA(modelBId: string, argument: Record<string, any>, context: any): Promise<any[]>;
    joinModelB(modelAId: string, argument: Record<string, any>, context: any): Promise<any[]>;
    listFindQuery(argument: Record<string, any>): ListFindQuery;
}
