Skip to content

Commit b89c4d0

Browse files
committed
feat(json-crdt): 🎸 add compact encoding types
1 parent 92426df commit b89c4d0

File tree

1 file changed

+93
-0
lines changed
  • src/json-crdt/codec/structural/compact

1 file changed

+93
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import {JsonCrdtDataType} from '../../../../json-crdt-patch/constants';
2+
3+
export type JsonCrdtCompactDocument = [
4+
time: JsonCrdtCompactClockTable | 0,
5+
root: JsonCrdtCompactNode | 0,
6+
];
7+
8+
export type JsonCrdtCompactClockTable = number[];
9+
10+
export type JsonCrdtCompactTimestamp =
11+
| JsonCrdtCompactTimestampServer
12+
| JsonCrdtCompactTimestampLogical;
13+
14+
export type JsonCrdtCompactTimestampServer = number;
15+
export type JsonCrdtCompactTimestampLogical = [sessionId: number, time: number];
16+
17+
export type JsonCrdtCompactNode =
18+
| JsonCrdtCompactCon
19+
| JsonCrdtCompactVal
20+
| JsonCrdtCompactObj
21+
| JsonCrdtCompactVec
22+
| JsonCrdtCompactStr
23+
| JsonCrdtCompactBin
24+
| JsonCrdtCompactArr;
25+
26+
export type JsonCrdtCompactCon =
27+
| [
28+
type: JsonCrdtDataType.con,
29+
id: JsonCrdtCompactTimestamp,
30+
data: unknown,
31+
]
32+
| [
33+
type: JsonCrdtDataType.con,
34+
id: JsonCrdtCompactTimestamp,
35+
data: 0,
36+
specialData: JsonCrdtCompactTimestamp | 0,
37+
];
38+
39+
export type JsonCrdtCompactVal = [
40+
type: JsonCrdtDataType.val,
41+
id: JsonCrdtCompactTimestamp,
42+
child: JsonCrdtCompactNode,
43+
];
44+
45+
export type JsonCrdtCompactObj = [
46+
type: JsonCrdtDataType.obj,
47+
id: JsonCrdtCompactTimestamp,
48+
map: Record<string, JsonCrdtCompactNode>,
49+
];
50+
51+
export type JsonCrdtCompactVec = [
52+
type: JsonCrdtDataType.vec,
53+
id: JsonCrdtCompactTimestamp,
54+
map: (JsonCrdtCompactNode | 0)[],
55+
];
56+
57+
export type JsonCrdtCompactStr = [
58+
type: JsonCrdtDataType.str,
59+
id: JsonCrdtCompactTimestamp,
60+
chunks: Array<JsonCrdtCompactStrChunk | JsonCrdtCompactTombstone>,
61+
];
62+
63+
export type JsonCrdtCompactStrChunk = [
64+
id: JsonCrdtCompactTimestamp,
65+
data: string,
66+
];
67+
68+
export type JsonCrdtCompactBin = [
69+
type: JsonCrdtDataType.bin,
70+
id: JsonCrdtCompactTimestamp,
71+
chunks: Array<JsonCrdtCompactBinChunk | JsonCrdtCompactTombstone>,
72+
];
73+
74+
export type JsonCrdtCompactBinChunk = [
75+
id: JsonCrdtCompactTimestamp,
76+
data: Uint8Array,
77+
];
78+
79+
export type JsonCrdtCompactArr = [
80+
type: JsonCrdtDataType.arr,
81+
id: JsonCrdtCompactTimestamp,
82+
chunks: Array<JsonCrdtCompactArrChunk | JsonCrdtCompactTombstone>,
83+
];
84+
85+
export type JsonCrdtCompactArrChunk = [
86+
id: JsonCrdtCompactTimestamp,
87+
data: JsonCrdtCompactNode,
88+
];
89+
90+
export type JsonCrdtCompactTombstone = [
91+
id: JsonCrdtCompactTimestamp,
92+
span: number,
93+
];

0 commit comments

Comments
 (0)