Skip to content

Commit 407c383

Browse files
committed
fix(json-crdt): 🐛 store golbal session in clock vector
1 parent 4813bc9 commit 407c383

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

src/json-crdt-extensions/peritext/util/__tests__/ChunkSlice.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {Model} from '../../../../json-crdt/model';
33
import {ChunkSlice} from '../ChunkSlice';
44

55
const setup = () => {
6-
const model = Model.withLogicalClock().setSchema(s.str('Hello world'));
6+
const model = Model.withLogicalClock().setSchema(s.str('Hello world'), false);
77
const node = model.root.node();
88
const chunk = node.first()!;
99
return {

src/json-crdt/model/Model.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -403,13 +403,16 @@ export class Model<N extends JsonNode = JsonNode<any>> implements Printable {
403403
* @returns Strictly typed model.
404404
*/
405405
public setSchema<S extends NodeBuilder>(schema: S, useGlobalSession: boolean = true): Model<SchemaToJsonNode<S>> {
406-
const clock = this.clock;
407-
const sid = useGlobalSession ? SESSION.GLOBAL : clock.sid;
408-
if (clock.time < 2) {
409-
const oldSid = clock.sid;
410-
clock.sid = sid;
406+
const c = this.clock;
407+
const isNewDocument = c.time === 1;
408+
if (isNewDocument) {
409+
const oldSid = c.sid;
410+
if (useGlobalSession) c.sid = SESSION.GLOBAL;
411411
this.api.root(schema);
412-
clock.sid = oldSid;
412+
if (useGlobalSession) {
413+
c.sid = oldSid;
414+
c.observe(new clock.Timestamp(SESSION.GLOBAL, c.time - 1), 1);
415+
}
413416
}
414417
return <any>this;
415418
}

0 commit comments

Comments
 (0)