import { TransformBuilderFunc } from '@orbit/data';
import { StandardValidator, ValidatorForFn } from '@orbit/validators';
import { InitializedRecord, RecordIdentity, RecordInitializer, UninitializedRecord } from './record';
import { RecordNormalizer } from './record-normalizer';
import { RecordOperation } from './record-operation';
import { AddRecordTerm, AddToRelatedRecordsTerm, RemoveFromRelatedRecordsTerm, RemoveRecordTerm, ReplaceAttributeTerm, ReplaceKeyTerm, ReplaceRelatedRecordsTerm, ReplaceRelatedRecordTerm, UpdateRecordTerm } from './record-operation-term';
import { RecordSchema } from './record-schema';
import { StandardRecordValidator } from './record-validators/standard-record-validators';
export declare type RecordTransformBuilderFunc = TransformBuilderFunc<RecordOperation, RecordTransformBuilder>;
export interface RecordTransformBuilderSettings<RT = string, RI = RecordIdentity, R = UninitializedRecord> {
    /**
     * @deprecated since v0.17, replaced by `recordNormalizer`
     */
    recordInitializer?: RecordInitializer;
    schema?: RecordSchema;
    normalizer?: RecordNormalizer<RT, RI, R>;
    validatorFor?: ValidatorForFn<StandardValidator | StandardRecordValidator>;
}
export declare class RecordTransformBuilder<RT = string, RI = RecordIdentity, R = UninitializedRecord> {
    $schema?: RecordSchema;
    $normalizer?: RecordNormalizer<RT, RI, R>;
    $validatorFor?: ValidatorForFn<StandardValidator | StandardRecordValidator>;
    constructor(settings?: RecordTransformBuilderSettings<RT, RI, R>);
    /**
     * Instantiate a new `addRecord` operation.
     */
    addRecord(record: R): AddRecordTerm<RT, RI, R>;
    /**
     * Instantiate a new `updateRecord` operation.
     */
    updateRecord(record: R): UpdateRecordTerm<RT, RI, R>;
    /**
     * Instantiate a new `removeRecord` operation.
     */
    removeRecord(record: RI): RemoveRecordTerm<RT, RI, R>;
    /**
     * Instantiate a new `replaceKey` operation.
     */
    replaceKey(record: RI, key: string, value: string): ReplaceKeyTerm<RT, RI, R>;
    /**
     * Instantiate a new `replaceAttribute` operation.
     */
    replaceAttribute(record: RI, attribute: string, value: unknown): ReplaceAttributeTerm<RT, RI, R>;
    /**
     * Instantiate a new `addToRelatedRecords` operation.
     */
    addToRelatedRecords(record: RI, relationship: string, relatedRecord: RI): AddToRelatedRecordsTerm<RT, RI, R>;
    /**
     * Instantiate a new `removeFromRelatedRecords` operation.
     */
    removeFromRelatedRecords(record: RI, relationship: string, relatedRecord: RI): RemoveFromRelatedRecordsTerm<RT, RI, R>;
    /**
     * Instantiate a new `replaceRelatedRecords` operation.
     */
    replaceRelatedRecords(record: RI, relationship: string, relatedRecords: RI[]): ReplaceRelatedRecordsTerm<RT, RI, R>;
    /**
     * Instantiate a new `replaceRelatedRecord` operation.
     */
    replaceRelatedRecord(record: RI, relationship: string, relatedRecord: RI | null): ReplaceRelatedRecordTerm<RT, RI, R>;
    $normalizeRecord(r: R): InitializedRecord;
    $normalizeRecordIdentity(ri: RI): RecordIdentity;
}
