import { SpecType, Model, SpecPool } from 'pretur.spec';
import { MutateRequest, Requester, MutateResult } from 'pretur.sync';
import { Set } from './Set';
import { Record } from './Record';
export interface ApplyMutationsResult {
    results: MutateResult<any>[];
    applied: boolean;
}
export declare function buildApplyMutations(requester: Requester): (mutations: MutateRequest<any>[]) => Promise<ApplyMutationsResult>;
export declare function applyMutations(requester: Requester, mutations: MutateRequest<any>[]): Promise<ApplyMutationsResult>;
export interface MutationsExtractor {
    extractInsertData<T extends SpecType>(clay: Record<T>, scope: string, model: T['name']): Partial<Model<T>>;
    extractInsertData<T extends SpecType>(clay: Set<T>, scope: string, model: T['name']): Partial<Model<T>>[];
    extractUpdateData<T extends SpecType>(record: Record<T>, scope: string, model: T['name']): Partial<T['fields']>;
    extractRemoveIdentifiers<T extends SpecType>(record: Record<T>, scope: string, model: T['name']): Partial<T['fields']>;
    getMutations<T extends SpecType>(clay: Set<T> | Record<T>, scope: string, model: T['name']): MutateRequest<any>[];
}
export declare function buildMutationsExtractor(specPool: SpecPool): MutationsExtractor;
