UNPKG

@state-weaver/interface

Version:

An interface for the State Weaver library, enabling seamless synchronization of JavaScript objects with CRDTs such as Yjs, Json-Joy, etc

49 lines (46 loc) 2.24 kB
import { JsonObject } from 'type-fest'; import { Patches } from 'mutative'; type NoChangeUpdateResult = { changed: false; }; type ChangeUpdateResult<T, U> = { changed: true; oldState: T; newState: T; patches: Patches; update: U; }; type UpdateResult<T, U> = ChangeUpdateResult<T, U> | NoChangeUpdateResult; type NoChangeApplyUpdateResult = { changed: false; }; type ChangeApplyUpdateResult<T> = { changed: true; oldState: T; newState: T; patches: Patches; }; type ApplyUpdateResult<T> = ChangeApplyUpdateResult<T> | NoChangeApplyUpdateResult; type NoChangeFromObjectResult<T extends JsonObject, U, D, Wrapper extends CRDTWrapper<T, U, D> = CRDTWrapper<T, U, D>> = { changed: false; wrapper: Wrapper; state: T; }; type ChangeFromObjectResult<T extends JsonObject, U, D, Wrapper extends CRDTWrapper<T, U, D> = CRDTWrapper<T, U, D>> = { changed: true; wrapper: Wrapper; state: T; update: U; }; type FromObjectResult<T extends JsonObject, U, D, Wrapper extends CRDTWrapper<T, U, D> = CRDTWrapper<T, U, D>> = ChangeFromObjectResult<T, U, D, Wrapper> | NoChangeFromObjectResult<T, U, D, Wrapper>; type NoChangeFromUpdatesResult<T extends JsonObject, U, D, Wrapper extends CRDTWrapper<T, U, D> = CRDTWrapper<T, U, D>> = NoChangeFromObjectResult<T, U, D, Wrapper>; type ChangeFromUpdatesResult<T extends JsonObject, U, D, Wrapper extends CRDTWrapper<T, U, D> = CRDTWrapper<T, U, D>> = Omit<ChangeFromObjectResult<T, U, D, Wrapper>, "update">; type FromUpdatesResult<T extends JsonObject, U, D, Wrapper extends CRDTWrapper<T, U, D> = CRDTWrapper<T, U, D>> = NoChangeFromUpdatesResult<T, U, D, Wrapper> | ChangeFromUpdatesResult<T, U, D, Wrapper>; interface CRDTWrapper<T extends JsonObject, U, D = unknown> { doc: D; state: T; update(changeFn: (value: T) => void): UpdateResult<T, U>; applyUpdates(updates: U[]): ApplyUpdateResult<T>; [Symbol.dispose](): void; } export type { ApplyUpdateResult, CRDTWrapper, ChangeApplyUpdateResult, ChangeFromObjectResult, ChangeFromUpdatesResult, ChangeUpdateResult, FromObjectResult, FromUpdatesResult, NoChangeApplyUpdateResult, NoChangeFromObjectResult, NoChangeFromUpdatesResult, NoChangeUpdateResult, UpdateResult };