Skip to content

Commit 2c60d52

Browse files
committed
feat: 🎸 synchronize SESSION.GLOBAL patches
1 parent e9c3fe0 commit 2c60d52

File tree

5 files changed

+33
-12
lines changed

5 files changed

+33
-12
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
"@jsonjoy.com/jit-router": "^1.0.1",
7575
"@jsonjoy.com/json-pack": "^1.0.2",
7676
"@jsonjoy.com/util": "^1.0.0",
77-
"json-joy": "^15.4.1",
77+
"json-joy": "^15.8.0",
7878
"memfs": "^5.0.0-next.1",
7979
"sonic-forest": "^1.0.0",
8080
"thingies": "^2.1.0"

src/json-crdt-repo/local/server-crud/ServerCrudLocalHistory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class ServerCrudLocalHistory implements LocalHistory {
2020

2121
public async create(
2222
collection: string[],
23-
log: Log,
23+
log: Log<any>,
2424
id: string = genId(),
2525
): Promise<{id: string; remote: Promise<void>}> {
2626
if (log.end.clock.time <= 1) throw new Error('EMPTY_LOG');

src/json-crdt-repo/local/server-crud/ServerCrudLocalHistorySync.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {timeout} from 'thingies/lib/timeout';
22
import type {RemoteBlockPatch} from '../../remote/types';
33
import type {ServerCrudLocalHistoryCore} from './ServerCrudLocalHistoryCore';
44
import type {BlockSyncMetadata} from './types';
5+
import {SESSION} from 'json-joy/lib/json-crdt-patch/constants';
56

67
const SYNC_FILE_NAME = 'sync.cbor';
78

@@ -58,8 +59,7 @@ export class ServerCrudLocalHistorySync {
5859
history!.patches.forEach(({v: patch}) => {
5960
const id = patch.getId();
6061
if (!id) return;
61-
// TODO: also filter in SESSION.GLOBAL patches.
62-
if (id.sid === core.sid && id.time > meta.time) {
62+
if ((id.sid === core.sid || (id.sid === SESSION.GLOBAL)) && id.time > meta.time) {
6363
patches.push({blob: patch.toBinary()});
6464
time = id.time;
6565
}

src/json-crdt-repo/local/server-crud/__tests__/ServerCrudLocalHistory.spec.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ import {memfs} from 'memfs';
33
import {NodeCrud} from 'memfs/lib/node-to-crud';
44
import {toTreeSync} from 'memfs/lib/print';
55
import {Locks} from 'thingies/lib/Locks';
6-
import {Model} from 'json-joy/lib/json-crdt';
6+
import {Model, nodes, s} from 'json-joy/lib/json-crdt';
77
import {Log} from 'json-joy/lib/json-crdt/log/Log';
88
import {BehaviorSubject} from 'rxjs';
99
import {setup as remoteSetup} from '../../../remote/__tests__/setup';
1010
import {tick} from 'thingies';
11+
import {SESSION} from 'json-joy/lib/json-crdt-patch/constants';
1112

1213
const setup = async (
1314
opts: {
@@ -92,6 +93,26 @@ describe('.create()', () => {
9293
expect(isDirty).toBe(false);
9394
});
9495

96+
test('sends over SESSION.GLOBAL patches', async () => {
97+
const kit = await setup();
98+
const schema = s.obj({
99+
foo: s.str('bar'),
100+
arr: s.arr<nodes.val<nodes.con<number>>>([]),
101+
});
102+
const log = Log.fromNewModel(Model.withLogicalClock(kit.sid).setSchema(schema));
103+
log.end.api.r.get().get('foo').ins(3, '!');
104+
log.end.api.flush();
105+
const res = await kit.local.create(['my', 'col'], log, kit.id);
106+
await res.remote;
107+
const {block} = await kit.remote.remote.read(['my', 'col', kit.id].join('/'));
108+
const model2 = Model
109+
.fromBinary(block.snapshot.blob)
110+
.setSchema(schema)
111+
.fork(kit.sid);
112+
expect(model2.view()).toEqual({foo: 'bar!', arr: []});
113+
expect(model2.clock.peers.has(SESSION.GLOBAL)).toBe(true);
114+
});
115+
95116
describe('when not connected', () => {
96117
const setupNotConnected = () =>
97118
setup({

yarn.lock

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1926,18 +1926,18 @@ jsesc@^2.5.1:
19261926
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
19271927
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
19281928

1929-
json-joy@^15.4.1:
1930-
version "15.4.1"
1931-
resolved "https://registry.yarnpkg.com/json-joy/-/json-joy-15.4.1.tgz#dc57284782213502057c456b828771b8fc855c0c"
1932-
integrity sha512-o2x8ave2Si0aoamm7Jg3eX7zjOmtFBzJaS8B/j13FTQDjh7EEbngRGv+Gh15p6C7IirXlgdTO09+nIAYeBz1DA==
1929+
json-joy@^15.8.0:
1930+
version "15.8.0"
1931+
resolved "https://registry.yarnpkg.com/json-joy/-/json-joy-15.8.0.tgz#423b64501abaaaf20b2ad9f3e826cf55d52d9c5a"
1932+
integrity sha512-NzFvF7qA3Dv9Gv6rrSg3f18CNjrbVtVzGxui4vP4OJZvQmT6glJEKXkK2exB7if8Npw2Um+9FyEoexcpPSLbjg==
19331933
dependencies:
19341934
"@jsonjoy.com/base64" "^1.1.1"
19351935
"@jsonjoy.com/json-pack" "^1.0.2"
1936-
"@jsonjoy.com/util" "^1.0.0"
1936+
"@jsonjoy.com/util" "^1.1.0"
19371937
arg "^5.0.2"
19381938
hyperdyperid "^1.2.0"
19391939
sonic-forest "^1.0.0"
1940-
thingies "^1.20.0"
1940+
thingies "^2.0.0"
19411941

19421942
json-parse-even-better-errors@^2.3.0:
19431943
version "2.3.1"
@@ -2506,7 +2506,7 @@ thingies@^1.20.0:
25062506
resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.20.0.tgz#27bf93397c39c3ff36601197e8cf78f43b7b2319"
25072507
integrity sha512-WvXY4CjHp/Uim2Ri0daqu6jkNTHJTk1H8NvuMQiOL0mgtdkqoSH5fkENy2M6XnvsLOp5iwyPcbmokoBjVb4lnQ==
25082508

2509-
thingies@^2.1.0:
2509+
thingies@^2.0.0, thingies@^2.1.0:
25102510
version "2.1.0"
25112511
resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.1.0.tgz#e0f771d5bc42e147fe9518be48f667319e748e25"
25122512
integrity sha512-SASxQdAtapX03qTa1V/kt9UGhQLUoP54luRasJxZoleeAL+PSQsBlIAGNxj1FoayglyCGUhxByFgSn7dh2JFog==

0 commit comments

Comments
 (0)