import { OperationTerm } from '@orbit/data';
import { AddRecordOperation, UpdateRecordOperation, RemoveRecordOperation, ReplaceAttributeOperation, ReplaceKeyOperation, AddToRelatedRecordsOperation, RemoveFromRelatedRecordsOperation, ReplaceRelatedRecordsOperation, ReplaceRelatedRecordOperation, RecordOperation } from './record-operation';
import { InitializedRecord, RecordIdentity, UninitializedRecord } from './record';
import { RecordTransformBuilder } from './record-transform-builder';
export declare class BaseRecordOperationTerm<O extends RecordOperation, RT = string, RI = RecordIdentity, R = UninitializedRecord> extends OperationTerm<O> {
    $transformBuilder: RecordTransformBuilder<RT, RI, R>;
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, operation: O);
    toOperation(): O;
}
export declare class AddRecordTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<AddRecordOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: InitializedRecord);
}
export declare class UpdateRecordTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<UpdateRecordOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: InitializedRecord);
}
export declare class RemoveRecordTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<RemoveRecordOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: RecordIdentity);
}
export declare class ReplaceAttributeTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<ReplaceAttributeOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: RecordIdentity, attribute: string, value: unknown);
}
export declare class ReplaceKeyTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<ReplaceKeyOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: RecordIdentity, key: string, value: string);
}
export declare class AddToRelatedRecordsTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<AddToRelatedRecordsOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: RecordIdentity, relationship: string, relatedRecord: RecordIdentity);
}
export declare class RemoveFromRelatedRecordsTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<RemoveFromRelatedRecordsOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: RecordIdentity, relationship: string, relatedRecord: RecordIdentity);
}
export declare class ReplaceRelatedRecordsTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<ReplaceRelatedRecordsOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: RecordIdentity, relationship: string, relatedRecords: RecordIdentity[]);
}
export declare class ReplaceRelatedRecordTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> extends BaseRecordOperationTerm<ReplaceRelatedRecordOperation, RT, RI, R> {
    constructor(transformBuilder: RecordTransformBuilder<RT, RI, R>, record: RecordIdentity, relationship: string, relatedRecord: RecordIdentity | null);
}
export declare type RecordOperationTerm<RT = string, RI = RecordIdentity, R = UninitializedRecord> = AddRecordTerm<RT, RI, R> | UpdateRecordTerm<RT, RI, R> | RemoveRecordTerm<RT, RI, R> | ReplaceKeyTerm<RT, RI, R> | ReplaceAttributeTerm<RT, RI, R> | AddToRelatedRecordsTerm<RT, RI, R> | RemoveFromRelatedRecordsTerm<RT, RI, R> | ReplaceRelatedRecordsTerm<RT, RI, R> | ReplaceRelatedRecordTerm<RT, RI, R>;
