@syncable/core
Version:
31 lines (30 loc) • 2.05 kB
TypeScript
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;