import { Dict } from '@orbit/utils';
export interface LinkObject {
    href: string;
    meta?: Dict<unknown>;
}
export declare type Link = string | LinkObject;
export interface RecordIdentity {
    type: string;
    id: string;
}
export interface RecordHasOneRelationship {
    data?: RecordIdentity | null;
    links?: Dict<Link>;
    meta?: Dict<unknown>;
}
export interface RecordHasManyRelationship {
    data?: RecordIdentity[];
    links?: Dict<Link>;
    meta?: Dict<unknown>;
}
export declare type RecordRelationship = RecordHasOneRelationship | RecordHasManyRelationship;
export interface RecordFields {
    keys?: Dict<string>;
    attributes?: Dict<unknown>;
    relationships?: Dict<RecordRelationship>;
    links?: Dict<Link>;
    meta?: Dict<unknown>;
}
/**
 * @deprecated since v0.17, use alias `InitializedRecord` instead
 */
export interface Record extends RecordFields, RecordIdentity {
}
export interface InitializedRecord extends RecordFields, RecordIdentity {
}
export interface UninitializedRecord extends RecordFields {
    type: string;
    id?: string;
}
export interface RecordKeyValue {
    type: string;
    key: string;
    value: string;
}
/**
 * @deprecated since v0.17, replaced by `RecordNormalizer`
 */
export interface RecordInitializer {
    initializeRecord(record: UninitializedRecord): InitializedRecord;
}
export declare function cloneRecordIdentity(identity: RecordIdentity): RecordIdentity;
export declare function equalRecordIdentities(record1?: RecordIdentity | null, record2?: RecordIdentity | null): boolean;
export declare function equalRecordIdentitySets(set1: RecordIdentity[], set2: RecordIdentity[]): boolean;
export declare function uniqueRecordIdentities(set1: RecordIdentity[], set2: RecordIdentity[]): RecordIdentity[];
export declare function dedupeRecordIdentities(recordIdentities: RecordIdentity[]): RecordIdentity[];
export declare function recordsInclude(records: RecordIdentity[], match: RecordIdentity): boolean;
export declare function recordsIncludeAll(records: RecordIdentity[], match: RecordIdentity[]): boolean;
export declare function mergeRecords(current: InitializedRecord | null, updates: InitializedRecord): InitializedRecord;
export declare function isRecordIdentity(identity: RecordIdentity | unknown): identity is RecordIdentity;
export declare function serializeRecordIdentity(record: RecordIdentity): string;
export declare function deserializeRecordIdentity(identity: string): RecordIdentity;
