UNPKG

@syncable/core

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