UNPKG

@syncable/core

Version:
47 lines (37 loc) 1.08 kB
import _ from 'lodash'; import {Dict} from 'tslang'; import uuid from 'uuid'; import {SyncableCreationRef} from './change'; import {SyncableRef} from './syncable'; export function generateUniqueId<T extends string>(): T { return uuid() as T; } export function getNonCreationRefsFromRefDict( refDict: Dict<SyncableRef | SyncableRef[] | SyncableCreationRef>, ): SyncableRef[] { return _.flatMap(Object.values(refDict), ref => Array.isArray(ref) ? ref.filter(ref => 'id' in ref) : ref && 'id' in ref ? [ref] : [], ); } export function getRefsFromRefDict( refDict: Dict<SyncableRef | SyncableRef[]>, ): SyncableRef[] { return _.flatMap(Object.values(refDict), ref => Array.isArray(ref) ? ref : [ref], ); } export function deepFreeze<T extends unknown>(value: T): void { if (!_.isObjectLike(value)) { return; } let propertyNames = Object.getOwnPropertyNames(value); for (let propertyName of propertyNames) { let propertyValue = (value as any)[propertyName]; deepFreeze(propertyValue); } Object.freeze(value); }