json-joy
Version:
Collection of libraries for building collaborative editing apps.
101 lines (100 loc) • 2.64 kB
TypeScript
/**
* 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;