UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

101 lines (100 loc) 2.64 kB
/** * A structural snapshot of JSON CRDT model. */ export interface JsonCrdtVerboseDocument { /** * Vector clock which contains the latest values of all known logical clocks. * The first clock is the local clock of this document. */ time: JsonCrdtVerboseServerTimestamp | JsonCrdtVerboseLogicalTimestamp[]; /** * Root node of the document data model. */ root: JsonCrdtVerboseVal; } export type JsonCrdtVerboseTimestamp = JsonCrdtVerboseServerTimestamp | JsonCrdtVerboseLogicalTimestamp; /** * A serialized logical clock timestamp. */ export type JsonCrdtVerboseLogicalTimestamp = [sessionId: number, time: number]; /** * A serialized server clock timestamp. */ export type JsonCrdtVerboseServerTimestamp = number; /** * A constant immutable JSON value. */ export interface JsonCrdtVerboseCon { type: 'con'; id: JsonCrdtVerboseTimestamp; timestamp?: boolean; value?: unknown | JsonCrdtVerboseTimestamp; } /** * LWW register for any JSON value. */ export interface JsonCrdtVerboseVal { type: 'val'; id: JsonCrdtVerboseTimestamp; value: JsonCrdtNode; } /** * LWW JSON object node. */ export interface JsonCrdtVerboseObj { type: 'obj'; id: JsonCrdtVerboseTimestamp; map: Record<string, JsonCrdtNode>; } /** * Tuple (LWW JSON array) node. */ export interface JsonCrdtVerboseVec { type: 'vec'; id: JsonCrdtVerboseTimestamp; map: (null | JsonCrdtNode)[]; } /** * RGA JSON string node. */ export interface JsonCrdtVerboseStr { type: 'str'; id: JsonCrdtVerboseTimestamp; chunks: (JsonCrdtVerboseStrChunk | JsonCrdtVerboseTombstone)[]; } export interface JsonCrdtVerboseStrChunk { id: JsonCrdtVerboseTimestamp; value: string; } /** * RGA binary node. */ export interface JsonCrdtVerboseBin { type: 'bin'; id: JsonCrdtVerboseTimestamp; chunks: (JsonCrdtVerboseBinChunk | JsonCrdtVerboseTombstone)[]; } export interface JsonCrdtVerboseBinChunk { id: JsonCrdtVerboseTimestamp; value: string; } /** * RGA JSON array node. */ export interface JsonCrdtVerboseArr { type: 'arr'; id: JsonCrdtVerboseTimestamp; chunks: (JsonCrdtVerboseArrChunk | JsonCrdtVerboseTombstone)[]; } export interface JsonCrdtVerboseArrChunk { id: JsonCrdtVerboseTimestamp; value: JsonCrdtNode[]; } /** * A tombstone used in RGA nodes. */ export interface JsonCrdtVerboseTombstone { id: JsonCrdtVerboseTimestamp; span: number; } export type JsonCrdtNode = JsonCrdtVerboseObj | JsonCrdtVerboseVec | JsonCrdtVerboseArr | JsonCrdtVerboseStr | JsonCrdtVerboseBin | JsonCrdtVerboseVal | JsonCrdtVerboseCon;