import { Nominal, OmitValueOfKey } from 'tslang'; import { SyncableCreationRef } from '../change'; import { AccessControlEntry } from './access-control'; import { ISyncableObject } from './syncable-object'; export declare type SyncableId = Nominal; export interface SyncableRef { id: T['syncable']['_id']; type: T['syncable']['_type']; } export declare type SyncableRefType = T extends ISyncableObject ? { id: T['syncable']['_id']; type: T['syncable']['_type']; } : never; export interface ISyncable { _type: TType; _id: SyncableId; _clock: number; _createdAt: number; _updatedAt: number; _acl?: AccessControlEntry[]; _sanitizedFieldNames?: string[]; } export declare type SyncableIdType = T extends ISyncable ? T['_id'] : T extends ISyncableObject ? T['id'] : never; export declare type SyncableObjectType = T extends SyncableRef ? TSyncableObject : never; export declare type SyncableType = T extends SyncableCreationRef ? TSyncableObject['syncable'] : T extends SyncableRef ? TSyncableObject['syncable'] : never; export declare function createSyncableCreationRef(type: T['syncable']['_type']): SyncableCreationRef; export declare type CreateSyncableExcludingKey = '_id' | '_type' | '_clock' | '_createdAt' | '_updatedAt'; export declare function createSyncable(type: T['syncable']['_type'] | SyncableCreationRef, data: OmitValueOfKey): T['syncable']; export declare function getSyncableRef(source: string | T['syncable'] | SyncableCreationRef): SyncableRef; export declare function getSyncableKey(source: ISyncable | SyncableRef | SyncableCreationRef): string;