Skip to content

Commit 42bf790

Browse files
committed
feat(json-crdt): 🎸 improve verbose codec types
1 parent 239d795 commit 42bf790

File tree

3 files changed

+85
-85
lines changed

3 files changed

+85
-85
lines changed

src/json-crdt/codec/structural/verbose/Decoder.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import {SESSION} from '../../../../json-crdt-patch/constants';
66
import * as types from './types';
77

88
export class Decoder {
9-
public decode({time, root}: types.JsonCrdtSnapshot): Model {
9+
public decode({time, root}: types.JsonCrdtVerboseDocument): Model {
1010
const isServerClock = typeof time === 'number';
1111
const doc = isServerClock ? Model.withServerClock(time) : Model.withLogicalClock(this.cClock(time));
1212
this.cRoot(doc, root);
1313
return doc;
1414
}
1515

16-
protected cClock(timestamps: types.JsonCrdtLogicalTimestamp[]): VectorClock {
16+
protected cClock(timestamps: types.JsonCrdtVerboseLogicalTimestamp[]): VectorClock {
1717
const [stamp] = timestamps;
1818
const vectorClock = new VectorClock(stamp[0], stamp[1]);
1919
const length = timestamps.length;
@@ -25,12 +25,12 @@ export class Decoder {
2525
return vectorClock;
2626
}
2727

28-
protected cTs(stamp: types.JsonCrdtTimestamp): ITimestampStruct {
28+
protected cTs(stamp: types.JsonCrdtVerboseTimestamp): ITimestampStruct {
2929
const isServerClock = typeof stamp === 'number';
3030
return isServerClock ? ts(SESSION.SERVER, stamp) : ts(stamp[0], stamp[1]);
3131
}
3232

33-
protected cRoot(doc: Model, {value}: types.ValueJsonCrdtNode): void {
33+
protected cRoot(doc: Model, {value}: types.JsonCrdtVerboseVal): void {
3434
const val = value ? this.cNode(doc, value) : new nodes.ConNode(doc.clock.tick(0), null);
3535
const root = new nodes.RootNode(doc, val.id);
3636
doc.root = root;
@@ -56,7 +56,7 @@ export class Decoder {
5656
throw new Error('UNKNOWN_NODE');
5757
}
5858

59-
protected cObj(doc: Model, node: types.ObjectJsonCrdtNode): nodes.ObjNode {
59+
protected cObj(doc: Model, node: types.JsonCrdtVerboseObj): nodes.ObjNode {
6060
const id = this.cTs(node.id);
6161
const obj = new nodes.ObjNode(doc, id);
6262
const map = node.map;
@@ -69,7 +69,7 @@ export class Decoder {
6969
return obj;
7070
}
7171

72-
protected cVec(doc: Model, node: types.VectorJsonCrdtNode): nodes.VecNode {
72+
protected cVec(doc: Model, node: types.JsonCrdtVerboseVec): nodes.VecNode {
7373
const id = this.cTs(node.id);
7474
const obj = new nodes.VecNode(doc, id);
7575
const elements = obj.elements;
@@ -84,7 +84,7 @@ export class Decoder {
8484
return obj;
8585
}
8686

87-
protected cArr(doc: Model, node: types.ArrayJsonCrdtNode): nodes.ArrNode {
87+
protected cArr(doc: Model, node: types.JsonCrdtVerboseArr): nodes.ArrNode {
8888
const id = this.cTs(node.id);
8989
const rga = new nodes.ArrNode(doc, id);
9090
const chunks = node.chunks;
@@ -95,10 +95,10 @@ export class Decoder {
9595
rga.ingest(length, () => {
9696
const c = chunks[i++];
9797
const id = self.cTs(c.id);
98-
if (typeof (c as types.JsonCrdtRgaTombstone).span === 'number')
99-
return new nodes.ArrChunk(id, (c as types.JsonCrdtRgaTombstone).span, undefined);
98+
if (typeof (c as types.JsonCrdtVerboseTombstone).span === 'number')
99+
return new nodes.ArrChunk(id, (c as types.JsonCrdtVerboseTombstone).span, undefined);
100100
else {
101-
const ids = (c as types.ArrayJsonCrdtChunk).value.map((n) => this.cNode(doc, n).id);
101+
const ids = (c as types.JsonCrdtVerboseArrChunk).value.map((n) => this.cNode(doc, n).id);
102102
return new nodes.ArrChunk(id, ids.length, ids);
103103
}
104104
});
@@ -107,7 +107,7 @@ export class Decoder {
107107
return rga;
108108
}
109109

110-
protected cStr(doc: Model, node: types.StringJsonCrdtNode): nodes.StrNode {
110+
protected cStr(doc: Model, node: types.JsonCrdtVerboseStr): nodes.StrNode {
111111
const id = this.cTs(node.id);
112112
const rga = new nodes.StrNode(id);
113113
const chunks = node.chunks;
@@ -118,10 +118,10 @@ export class Decoder {
118118
rga.ingest(length, () => {
119119
const c = chunks[i++];
120120
const id = self.cTs(c.id);
121-
if (typeof (c as types.JsonCrdtRgaTombstone).span === 'number')
122-
return new nodes.StrChunk(id, (c as types.JsonCrdtRgaTombstone).span, '');
121+
if (typeof (c as types.JsonCrdtVerboseTombstone).span === 'number')
122+
return new nodes.StrChunk(id, (c as types.JsonCrdtVerboseTombstone).span, '');
123123
else {
124-
const value = (c as types.StringJsonCrdtChunk).value;
124+
const value = (c as types.JsonCrdtVerboseStrChunk).value;
125125
return new nodes.StrChunk(id, value.length, value);
126126
}
127127
});
@@ -130,7 +130,7 @@ export class Decoder {
130130
return rga;
131131
}
132132

133-
protected cBin(doc: Model, node: types.BinaryJsonCrdtNode): nodes.BinNode {
133+
protected cBin(doc: Model, node: types.JsonCrdtVerboseBin): nodes.BinNode {
134134
const id = this.cTs(node.id);
135135
const rga = new nodes.BinNode(id);
136136
const chunks = node.chunks;
@@ -141,10 +141,10 @@ export class Decoder {
141141
rga.ingest(length, () => {
142142
const c = chunks[i++];
143143
const id = self.cTs(c.id);
144-
if (typeof (c as types.JsonCrdtRgaTombstone).span === 'number')
145-
return new nodes.BinChunk(id, (c as types.JsonCrdtRgaTombstone).span, undefined);
144+
if (typeof (c as types.JsonCrdtVerboseTombstone).span === 'number')
145+
return new nodes.BinChunk(id, (c as types.JsonCrdtVerboseTombstone).span, undefined);
146146
else {
147-
const value = (c as types.BinaryJsonCrdtChunk).value;
147+
const value = (c as types.JsonCrdtVerboseBinChunk).value;
148148
const buf = fromBase64(value);
149149
return new nodes.BinChunk(id, buf.length, buf);
150150
}
@@ -154,17 +154,17 @@ export class Decoder {
154154
return rga;
155155
}
156156

157-
protected cVal(doc: Model, node: types.ValueJsonCrdtNode): nodes.ValNode {
157+
protected cVal(doc: Model, node: types.JsonCrdtVerboseVal): nodes.ValNode {
158158
const id = this.cTs(node.id);
159159
const val = this.cNode(doc, node.value);
160160
const obj = new nodes.ValNode(doc, id, val.id);
161161
doc.index.set(id, obj);
162162
return obj;
163163
}
164164

165-
protected cCon(doc: Model, node: types.ConstantJsonCrdtNode): nodes.ConNode {
165+
protected cCon(doc: Model, node: types.JsonCrdtVerboseCon): nodes.ConNode {
166166
const id = this.cTs(node.id);
167-
const val = node.timestamp ? this.cTs(node.value as types.JsonCrdtLogicalTimestamp) : node.value;
167+
const val = node.timestamp ? this.cTs(node.value as types.JsonCrdtVerboseLogicalTimestamp) : node.value;
168168
const obj = new nodes.ConNode(id, val);
169169
doc.index.set(id, obj);
170170
return obj;

src/json-crdt/codec/structural/verbose/Encoder.ts

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type * as types from './types';
88
export class Encoder {
99
protected model!: Model;
1010

11-
public encode(model: Model): types.JsonCrdtSnapshot {
11+
public encode(model: Model): types.JsonCrdtVerboseDocument {
1212
this.model = model;
1313
const clock = model.clock;
1414
const isServerClock = clock.sid === SESSION.SERVER;
@@ -18,16 +18,16 @@ export class Encoder {
1818
};
1919
}
2020

21-
public cClock(clock: IVectorClock): types.JsonCrdtLogicalTimestamp[] {
22-
const data: types.JsonCrdtLogicalTimestamp[] = [];
21+
public cClock(clock: IVectorClock): types.JsonCrdtVerboseLogicalTimestamp[] {
22+
const data: types.JsonCrdtVerboseLogicalTimestamp[] = [];
2323
const sessionId = clock.sid;
2424
const localTs = clock.peers.get(sessionId);
2525
if (!localTs) data.push([sessionId, clock.time]);
2626
for (const c of clock.peers.values()) data.push([c.sid, c.time]);
2727
return data;
2828
}
2929

30-
public cTs(ts: ITimestampStruct): types.JsonCrdtLogicalTimestamp | types.JsonCrdtServerTimestamp {
30+
public cTs(ts: ITimestampStruct): types.JsonCrdtVerboseLogicalTimestamp | types.JsonCrdtVerboseServerTimestamp {
3131
return ts.sid === SESSION.SERVER ? ts.time : [ts.sid, ts.time];
3232
}
3333

@@ -42,7 +42,7 @@ export class Encoder {
4242
throw new Error('UNKNOWN_NODE');
4343
}
4444

45-
public cObj(obj: nodes.ObjNode): types.ObjectJsonCrdtNode {
45+
public cObj(obj: nodes.ObjNode): types.JsonCrdtVerboseObj {
4646
const map: Record<string, types.JsonCrdtNode> = {};
4747
obj.nodes((node, key) => {
4848
map[key] = this.cNode(node);
@@ -54,8 +54,8 @@ export class Encoder {
5454
};
5555
}
5656

57-
public cVec(obj: nodes.VecNode): types.VectorJsonCrdtNode {
58-
const map: types.VectorJsonCrdtNode['map'] = [];
57+
public cVec(obj: nodes.VecNode): types.JsonCrdtVerboseVec {
58+
const map: types.JsonCrdtVerboseVec['map'] = [];
5959
const elements = obj.elements;
6060
const length = elements.length;
6161
const index = this.model.index;
@@ -71,8 +71,8 @@ export class Encoder {
7171
};
7272
}
7373

74-
public cArr(obj: nodes.ArrNode): types.ArrayJsonCrdtNode {
75-
const chunks: (types.ArrayJsonCrdtChunk | types.JsonCrdtRgaTombstone)[] = [];
74+
public cArr(obj: nodes.ArrNode): types.JsonCrdtVerboseArr {
75+
const chunks: (types.JsonCrdtVerboseArrChunk | types.JsonCrdtVerboseTombstone)[] = [];
7676
const iterator = obj.iterator();
7777
let chunk;
7878
while ((chunk = iterator())) chunks.push(this.cArrChunk(chunk));
@@ -83,24 +83,24 @@ export class Encoder {
8383
};
8484
}
8585

86-
public cArrChunk(chunk: nodes.ArrChunk): types.ArrayJsonCrdtChunk | types.JsonCrdtRgaTombstone {
86+
public cArrChunk(chunk: nodes.ArrChunk): types.JsonCrdtVerboseArrChunk | types.JsonCrdtVerboseTombstone {
8787
if (chunk.del) {
88-
const tombstone: types.JsonCrdtRgaTombstone = {
88+
const tombstone: types.JsonCrdtVerboseTombstone = {
8989
id: this.cTs(chunk.id),
9090
span: chunk.span,
9191
};
9292
return tombstone;
9393
}
9494
const index = this.model.index;
95-
const res: types.ArrayJsonCrdtChunk = {
95+
const res: types.JsonCrdtVerboseArrChunk = {
9696
id: this.cTs(chunk.id),
9797
value: chunk.data!.map((n) => this.cNode(index.get(n)!)),
9898
};
9999
return res;
100100
}
101101

102-
public cStr(obj: nodes.StrNode): types.StringJsonCrdtNode {
103-
const chunks: (types.StringJsonCrdtChunk | types.JsonCrdtRgaTombstone)[] = [];
102+
public cStr(obj: nodes.StrNode): types.JsonCrdtVerboseStr {
103+
const chunks: (types.JsonCrdtVerboseStrChunk | types.JsonCrdtVerboseTombstone)[] = [];
104104
const iterator = obj.iterator();
105105
let chunk;
106106
while ((chunk = iterator())) chunks.push(this.cStrChunk(chunk as nodes.StrChunk));
@@ -111,23 +111,23 @@ export class Encoder {
111111
};
112112
}
113113

114-
public cStrChunk(chunk: nodes.StrChunk): types.StringJsonCrdtChunk | types.JsonCrdtRgaTombstone {
114+
public cStrChunk(chunk: nodes.StrChunk): types.JsonCrdtVerboseStrChunk | types.JsonCrdtVerboseTombstone {
115115
if (chunk.del) {
116-
const tombstone: types.JsonCrdtRgaTombstone = {
116+
const tombstone: types.JsonCrdtVerboseTombstone = {
117117
id: this.cTs(chunk.id),
118118
span: chunk.span,
119119
};
120120
return tombstone;
121121
}
122-
const res: types.StringJsonCrdtChunk = {
122+
const res: types.JsonCrdtVerboseStrChunk = {
123123
id: this.cTs(chunk.id),
124124
value: chunk.data!,
125125
};
126126
return res;
127127
}
128128

129-
public cBin(obj: nodes.BinNode): types.BinaryJsonCrdtNode {
130-
const chunks: (types.BinaryJsonCrdtChunk | types.JsonCrdtRgaTombstone)[] = [];
129+
public cBin(obj: nodes.BinNode): types.JsonCrdtVerboseBin {
130+
const chunks: (types.JsonCrdtVerboseBinChunk | types.JsonCrdtVerboseTombstone)[] = [];
131131
const iterator = obj.iterator();
132132
let chunk;
133133
while ((chunk = iterator())) chunks.push(this.cBinChunk(chunk as nodes.BinChunk));
@@ -138,31 +138,31 @@ export class Encoder {
138138
};
139139
}
140140

141-
public cBinChunk(chunk: nodes.BinChunk): types.BinaryJsonCrdtChunk | types.JsonCrdtRgaTombstone {
141+
public cBinChunk(chunk: nodes.BinChunk): types.JsonCrdtVerboseBinChunk | types.JsonCrdtVerboseTombstone {
142142
if (chunk.del) {
143-
const tombstone: types.JsonCrdtRgaTombstone = {
143+
const tombstone: types.JsonCrdtVerboseTombstone = {
144144
id: this.cTs(chunk.id),
145145
span: chunk.span,
146146
};
147147
return tombstone;
148148
}
149-
const res: types.StringJsonCrdtChunk = {
149+
const res: types.JsonCrdtVerboseStrChunk = {
150150
id: this.cTs(chunk.id),
151151
value: toBase64(chunk.data!),
152152
};
153153
return res;
154154
}
155155

156-
public cVal(obj: nodes.ValNode): types.ValueJsonCrdtNode {
156+
public cVal(obj: nodes.ValNode): types.JsonCrdtVerboseVal {
157157
return {
158158
type: 'val',
159159
id: this.cTs(obj.id),
160160
value: this.cNode(obj.node()),
161161
};
162162
}
163163

164-
public cCon(obj: nodes.ConNode): types.ConstantJsonCrdtNode {
165-
const node: types.ConstantJsonCrdtNode = {
164+
public cCon(obj: nodes.ConNode): types.JsonCrdtVerboseCon {
165+
const node: types.JsonCrdtVerboseCon = {
166166
type: 'con',
167167
id: this.cTs(obj.id),
168168
};

0 commit comments

Comments
 (0)