/** * Helper factories for stateful CRDT collections. * * Prefer these helpers over invoking constructors inside state class constructors. */ import { UnorderedMap } from '../collections/UnorderedMap'; import { UnorderedSet } from '../collections/UnorderedSet'; import { Vector } from '../collections/Vector'; import { Counter } from '../collections/Counter'; import { LwwRegister } from '../collections/LwwRegister'; import { UserStorage } from '../collections/UserStorage'; import { FrozenStorage } from '../collections/FrozenStorage'; import type { UnorderedMapOptions } from '../collections/UnorderedMap'; import type { UnorderedSetOptions } from '../collections/UnorderedSet'; import type { VectorOptions } from '../collections/Vector'; import type { CounterOptions } from '../collections/Counter'; import type { LwwRegisterOptions } from '../collections/LwwRegister'; import type { UserStorageOptions } from '../collections/UserStorage'; import type { FrozenStorageOptions } from '../collections/FrozenStorage'; export function createUnorderedMap(options?: UnorderedMapOptions): UnorderedMap { return new UnorderedMap(options); } export function createUnorderedSet(options?: UnorderedSetOptions): UnorderedSet { return new UnorderedSet(options); } export function createVector(options?: VectorOptions): Vector { return new Vector(options); } export function createCounter( options?: CounterOptions & { initialValue?: number | bigint } ): Counter { const { initialValue = 0, ...rest } = options ?? {}; const counter = new Counter(rest); if (initialValue !== 0) { counter.incrementBy(initialValue); } return counter; } export function createLwwRegister(options?: LwwRegisterOptions): LwwRegister { return new LwwRegister(options); } export function createUserStorage(options?: UserStorageOptions): UserStorage { return new UserStorage(options); } export function createFrozenStorage(options?: FrozenStorageOptions): FrozenStorage { return new FrozenStorage(options); }