cojson 0.18.26 → 0.18.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +17 -0
- package/dist/PeerKnownStates.d.ts +4 -3
- package/dist/PeerKnownStates.d.ts.map +1 -1
- package/dist/PeerKnownStates.js +27 -18
- package/dist/PeerKnownStates.js.map +1 -1
- package/dist/PeerState.d.ts +3 -2
- package/dist/PeerState.d.ts.map +1 -1
- package/dist/PeerState.js.map +1 -1
- package/dist/SyncStateManager.d.ts +2 -2
- package/dist/SyncStateManager.d.ts.map +1 -1
- package/dist/SyncStateManager.js +2 -10
- package/dist/SyncStateManager.js.map +1 -1
- package/dist/coValueContentMessage.d.ts +1 -1
- package/dist/coValueContentMessage.d.ts.map +1 -1
- package/dist/coValueContentMessage.js +1 -1
- package/dist/coValueContentMessage.js.map +1 -1
- package/dist/coValueCore/SessionMap.d.ts +6 -3
- package/dist/coValueCore/SessionMap.d.ts.map +1 -1
- package/dist/coValueCore/SessionMap.js +41 -8
- package/dist/coValueCore/SessionMap.js.map +1 -1
- package/dist/coValueCore/branching.d.ts +5 -4
- package/dist/coValueCore/branching.d.ts.map +1 -1
- package/dist/coValueCore/branching.js +22 -4
- package/dist/coValueCore/branching.js.map +1 -1
- package/dist/coValueCore/coValueCore.d.ts +29 -25
- package/dist/coValueCore/coValueCore.d.ts.map +1 -1
- package/dist/coValueCore/coValueCore.js +163 -126
- package/dist/coValueCore/coValueCore.js.map +1 -1
- package/dist/coValueCore/decryptTransactionChangesAndMeta.d.ts +3 -0
- package/dist/coValueCore/decryptTransactionChangesAndMeta.d.ts.map +1 -0
- package/dist/coValueCore/decryptTransactionChangesAndMeta.js +34 -0
- package/dist/coValueCore/decryptTransactionChangesAndMeta.js.map +1 -0
- package/dist/coValueCore/verifiedState.d.ts +12 -6
- package/dist/coValueCore/verifiedState.d.ts.map +1 -1
- package/dist/coValueCore/verifiedState.js +28 -56
- package/dist/coValueCore/verifiedState.js.map +1 -1
- package/dist/coValues/coMap.d.ts.map +1 -1
- package/dist/coValues/coMap.js.map +1 -1
- package/dist/coValues/coStream.d.ts.map +1 -1
- package/dist/coValues/coStream.js.map +1 -1
- package/dist/exports.d.ts +3 -2
- package/dist/exports.d.ts.map +1 -1
- package/dist/exports.js +2 -1
- package/dist/exports.js.map +1 -1
- package/dist/knownState.d.ts +58 -2
- package/dist/knownState.d.ts.map +1 -1
- package/dist/knownState.js +79 -5
- package/dist/knownState.js.map +1 -1
- package/dist/localNode.js +1 -1
- package/dist/localNode.js.map +1 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +18 -20
- package/dist/permissions.js.map +1 -1
- package/dist/storage/knownState.d.ts +1 -1
- package/dist/storage/knownState.d.ts.map +1 -1
- package/dist/storage/knownState.js +2 -3
- package/dist/storage/knownState.js.map +1 -1
- package/dist/storage/storageAsync.d.ts +2 -1
- package/dist/storage/storageAsync.d.ts.map +1 -1
- package/dist/storage/storageAsync.js +5 -6
- package/dist/storage/storageAsync.js.map +1 -1
- package/dist/storage/storageSync.d.ts +2 -1
- package/dist/storage/storageSync.d.ts.map +1 -1
- package/dist/storage/storageSync.js +5 -5
- package/dist/storage/storageSync.js.map +1 -1
- package/dist/storage/types.d.ts +2 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/sync.d.ts +2 -12
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +9 -38
- package/dist/sync.js.map +1 -1
- package/dist/tests/PeerKnownStates.test.js +1 -1
- package/dist/tests/PeerKnownStates.test.js.map +1 -1
- package/dist/tests/PeerState.test.js +19 -0
- package/dist/tests/PeerState.test.js.map +1 -1
- package/dist/tests/PureJSCrypto.test.js.map +1 -1
- package/dist/tests/StorageApiAsync.test.js +1 -1
- package/dist/tests/StorageApiAsync.test.js.map +1 -1
- package/dist/tests/StorageApiSync.test.js +1 -2
- package/dist/tests/StorageApiSync.test.js.map +1 -1
- package/dist/tests/StoreQueue.test.js.map +1 -1
- package/dist/tests/SyncStateManager.test.js +1 -1
- package/dist/tests/SyncStateManager.test.js.map +1 -1
- package/dist/tests/branching.test.js +237 -28
- package/dist/tests/branching.test.js.map +1 -1
- package/dist/tests/coValueContentMessage.test.js +1 -1
- package/dist/tests/coValueContentMessage.test.js.map +1 -1
- package/dist/tests/coValueCore.loadFromStorage.test.d.ts +2 -0
- package/dist/tests/coValueCore.loadFromStorage.test.d.ts.map +1 -0
- package/dist/tests/coValueCore.loadFromStorage.test.js +395 -0
- package/dist/tests/coValueCore.loadFromStorage.test.js.map +1 -0
- package/dist/tests/coValueCore.loadingState.test.d.ts +2 -0
- package/dist/tests/coValueCore.loadingState.test.d.ts.map +1 -0
- package/dist/tests/{coValueCoreLoadingState.test.js → coValueCore.loadingState.test.js} +4 -12
- package/dist/tests/coValueCore.loadingState.test.js.map +1 -0
- package/dist/tests/coValueCore.test.js +30 -5
- package/dist/tests/coValueCore.test.js.map +1 -1
- package/dist/tests/knownState.test.d.ts +2 -0
- package/dist/tests/knownState.test.d.ts.map +1 -0
- package/dist/tests/knownState.test.js +510 -0
- package/dist/tests/knownState.test.js.map +1 -0
- package/dist/tests/messagesTestUtils.d.ts.map +1 -1
- package/dist/tests/messagesTestUtils.js.map +1 -1
- package/dist/tests/priority.test.js.map +1 -1
- package/dist/tests/sync.mesh.test.js +4 -34
- package/dist/tests/sync.mesh.test.js.map +1 -1
- package/dist/tests/sync.storage.test.js.map +1 -1
- package/dist/tests/sync.upload.test.js.map +1 -1
- package/dist/tests/testUtils.d.ts +7 -1
- package/dist/tests/testUtils.d.ts.map +1 -1
- package/dist/tests/testUtils.js +12 -0
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +3 -3
- package/src/PeerKnownStates.ts +36 -22
- package/src/PeerState.ts +2 -1
- package/src/SyncStateManager.ts +4 -17
- package/src/coValueContentMessage.ts +2 -1
- package/src/coValueCore/SessionMap.ts +66 -11
- package/src/coValueCore/branching.ts +37 -13
- package/src/coValueCore/coValueCore.ts +224 -177
- package/src/coValueCore/decryptTransactionChangesAndMeta.ts +56 -0
- package/src/coValueCore/verifiedState.ts +32 -64
- package/src/coValues/coMap.ts +1 -5
- package/src/coValues/coStream.ts +1 -5
- package/src/exports.ts +2 -2
- package/src/knownState.ts +118 -12
- package/src/localNode.ts +1 -1
- package/src/permissions.ts +21 -22
- package/src/storage/knownState.ts +9 -3
- package/src/storage/storageAsync.ts +15 -7
- package/src/storage/storageSync.ts +16 -8
- package/src/storage/types.ts +2 -1
- package/src/sync.ts +14 -60
- package/src/tests/PeerKnownStates.test.ts +1 -1
- package/src/tests/PeerState.test.ts +29 -3
- package/src/tests/PureJSCrypto.test.ts +0 -1
- package/src/tests/StorageApiAsync.test.ts +3 -6
- package/src/tests/StorageApiSync.test.ts +2 -6
- package/src/tests/StoreQueue.test.ts +3 -2
- package/src/tests/SyncStateManager.test.ts +1 -1
- package/src/tests/branching.test.ts +392 -45
- package/src/tests/coValueContentMessage.test.ts +2 -2
- package/src/tests/coValueCore.loadFromStorage.test.ts +540 -0
- package/src/tests/{coValueCoreLoadingState.test.ts → coValueCore.loadingState.test.ts} +3 -16
- package/src/tests/coValueCore.test.ts +40 -5
- package/src/tests/knownState.test.ts +665 -0
- package/src/tests/messagesTestUtils.ts +2 -1
- package/src/tests/priority.test.ts +0 -2
- package/src/tests/sync.mesh.test.ts +11 -38
- package/src/tests/sync.storage.test.ts +0 -1
- package/src/tests/sync.upload.test.ts +0 -1
- package/src/tests/testUtils.ts +22 -2
- package/dist/coValueCore/decodeTransactionChangesAndMeta.d.ts +0 -3
- package/dist/coValueCore/decodeTransactionChangesAndMeta.d.ts.map +0 -1
- package/dist/coValueCore/decodeTransactionChangesAndMeta.js +0 -59
- package/dist/coValueCore/decodeTransactionChangesAndMeta.js.map +0 -1
- package/dist/tests/coValueCoreLoadingState.test.d.ts +0 -2
- package/dist/tests/coValueCoreLoadingState.test.d.ts.map +0 -1
- package/dist/tests/coValueCoreLoadingState.test.js.map +0 -1
- package/src/coValueCore/decodeTransactionChangesAndMeta.ts +0 -81
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { emptyKnownState, knownStateFrom, combineKnownStates, combineKnownStateSessions, setSessionCounter, updateSessionCounter, cloneKnownState, areLocalSessionsUploaded, } from "../knownState.js";
|
|
3
|
+
describe("knownState", () => {
|
|
4
|
+
describe("emptyKnownState", () => {
|
|
5
|
+
test("should create an empty known state with the given id", () => {
|
|
6
|
+
const id = "test-id";
|
|
7
|
+
const result = emptyKnownState(id);
|
|
8
|
+
expect(result).toEqual({
|
|
9
|
+
id: "test-id",
|
|
10
|
+
header: false,
|
|
11
|
+
sessions: {},
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
test("should have no sessions", () => {
|
|
15
|
+
const id = "test-id";
|
|
16
|
+
const result = emptyKnownState(id);
|
|
17
|
+
expect(Object.keys(result.sessions)).toHaveLength(0);
|
|
18
|
+
});
|
|
19
|
+
test("should have header set to false", () => {
|
|
20
|
+
const id = "test-id";
|
|
21
|
+
const result = emptyKnownState(id);
|
|
22
|
+
expect(result.header).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe("knownStateFrom", () => {
|
|
26
|
+
test("should extract known state properties from input", () => {
|
|
27
|
+
const id = "test-id";
|
|
28
|
+
const session1 = "session-1";
|
|
29
|
+
const input = {
|
|
30
|
+
id,
|
|
31
|
+
header: true,
|
|
32
|
+
sessions: { [session1]: 5 },
|
|
33
|
+
};
|
|
34
|
+
const result = knownStateFrom(input);
|
|
35
|
+
expect(result).toEqual({
|
|
36
|
+
id: "test-id",
|
|
37
|
+
header: true,
|
|
38
|
+
sessions: { [session1]: 5 },
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
test("should create a shallow copy of sessions", () => {
|
|
42
|
+
const id = "test-id";
|
|
43
|
+
const session1 = "session-1";
|
|
44
|
+
const sessions = { [session1]: 5 };
|
|
45
|
+
const input = {
|
|
46
|
+
id,
|
|
47
|
+
header: true,
|
|
48
|
+
sessions,
|
|
49
|
+
};
|
|
50
|
+
const result = knownStateFrom(input);
|
|
51
|
+
expect(result.sessions).toBe(sessions);
|
|
52
|
+
});
|
|
53
|
+
test("should work with empty sessions", () => {
|
|
54
|
+
const id = "test-id";
|
|
55
|
+
const input = emptyKnownState(id);
|
|
56
|
+
const result = knownStateFrom(input);
|
|
57
|
+
expect(result).toEqual({
|
|
58
|
+
id: "test-id",
|
|
59
|
+
header: false,
|
|
60
|
+
sessions: {},
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe("combineKnownStates", () => {
|
|
65
|
+
test("should combine sessions from source to target", () => {
|
|
66
|
+
const id = "test-id";
|
|
67
|
+
const session1 = "session-1";
|
|
68
|
+
const session2 = "session-2";
|
|
69
|
+
const target = {
|
|
70
|
+
id,
|
|
71
|
+
header: false,
|
|
72
|
+
sessions: { [session1]: 3 },
|
|
73
|
+
};
|
|
74
|
+
const source = {
|
|
75
|
+
id,
|
|
76
|
+
header: false,
|
|
77
|
+
sessions: { [session2]: 7 },
|
|
78
|
+
};
|
|
79
|
+
const result = combineKnownStates(target, source);
|
|
80
|
+
expect(result.sessions).toEqual({
|
|
81
|
+
[session1]: 3,
|
|
82
|
+
[session2]: 7,
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
test("should update target when source has higher counter", () => {
|
|
86
|
+
const id = "test-id";
|
|
87
|
+
const session1 = "session-1";
|
|
88
|
+
const target = {
|
|
89
|
+
id,
|
|
90
|
+
header: false,
|
|
91
|
+
sessions: { [session1]: 3 },
|
|
92
|
+
};
|
|
93
|
+
const source = {
|
|
94
|
+
id,
|
|
95
|
+
header: false,
|
|
96
|
+
sessions: { [session1]: 7 },
|
|
97
|
+
};
|
|
98
|
+
combineKnownStates(target, source);
|
|
99
|
+
expect(target.sessions[session1]).toBe(7);
|
|
100
|
+
});
|
|
101
|
+
test("should not update target when source has lower counter", () => {
|
|
102
|
+
const id = "test-id";
|
|
103
|
+
const session1 = "session-1";
|
|
104
|
+
const target = {
|
|
105
|
+
id,
|
|
106
|
+
header: false,
|
|
107
|
+
sessions: { [session1]: 10 },
|
|
108
|
+
};
|
|
109
|
+
const source = {
|
|
110
|
+
id,
|
|
111
|
+
header: false,
|
|
112
|
+
sessions: { [session1]: 5 },
|
|
113
|
+
};
|
|
114
|
+
combineKnownStates(target, source);
|
|
115
|
+
expect(target.sessions[session1]).toBe(10);
|
|
116
|
+
});
|
|
117
|
+
test("should set header to true when source has header true", () => {
|
|
118
|
+
const id = "test-id";
|
|
119
|
+
const target = {
|
|
120
|
+
id,
|
|
121
|
+
header: false,
|
|
122
|
+
sessions: {},
|
|
123
|
+
};
|
|
124
|
+
const source = {
|
|
125
|
+
id,
|
|
126
|
+
header: true,
|
|
127
|
+
sessions: {},
|
|
128
|
+
};
|
|
129
|
+
combineKnownStates(target, source);
|
|
130
|
+
expect(target.header).toBe(true);
|
|
131
|
+
});
|
|
132
|
+
test("should not change header when both have header true", () => {
|
|
133
|
+
const id = "test-id";
|
|
134
|
+
const target = {
|
|
135
|
+
id,
|
|
136
|
+
header: true,
|
|
137
|
+
sessions: {},
|
|
138
|
+
};
|
|
139
|
+
const source = {
|
|
140
|
+
id,
|
|
141
|
+
header: true,
|
|
142
|
+
sessions: {},
|
|
143
|
+
};
|
|
144
|
+
combineKnownStates(target, source);
|
|
145
|
+
expect(target.header).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
test("should not change header when source has header false", () => {
|
|
148
|
+
const id = "test-id";
|
|
149
|
+
const target = {
|
|
150
|
+
id,
|
|
151
|
+
header: true,
|
|
152
|
+
sessions: {},
|
|
153
|
+
};
|
|
154
|
+
const source = {
|
|
155
|
+
id,
|
|
156
|
+
header: false,
|
|
157
|
+
sessions: {},
|
|
158
|
+
};
|
|
159
|
+
combineKnownStates(target, source);
|
|
160
|
+
expect(target.header).toBe(true);
|
|
161
|
+
});
|
|
162
|
+
test("should return the target object", () => {
|
|
163
|
+
const id = "test-id";
|
|
164
|
+
const target = {
|
|
165
|
+
id,
|
|
166
|
+
header: false,
|
|
167
|
+
sessions: {},
|
|
168
|
+
};
|
|
169
|
+
const source = {
|
|
170
|
+
id,
|
|
171
|
+
header: false,
|
|
172
|
+
sessions: {},
|
|
173
|
+
};
|
|
174
|
+
const result = combineKnownStates(target, source);
|
|
175
|
+
expect(result).toBe(target);
|
|
176
|
+
});
|
|
177
|
+
test("should mutate the target object", () => {
|
|
178
|
+
const id = "test-id";
|
|
179
|
+
const session1 = "session-1";
|
|
180
|
+
const target = {
|
|
181
|
+
id,
|
|
182
|
+
header: false,
|
|
183
|
+
sessions: {},
|
|
184
|
+
};
|
|
185
|
+
const source = {
|
|
186
|
+
id,
|
|
187
|
+
header: true,
|
|
188
|
+
sessions: { [session1]: 5 },
|
|
189
|
+
};
|
|
190
|
+
combineKnownStates(target, source);
|
|
191
|
+
expect(target.header).toBe(true);
|
|
192
|
+
expect(target.sessions[session1]).toBe(5);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
describe("combineKnownStateSessions", () => {
|
|
196
|
+
test("should add new sessions from source to target", () => {
|
|
197
|
+
const session1 = "session-1";
|
|
198
|
+
const session2 = "session-2";
|
|
199
|
+
const target = { [session1]: 3 };
|
|
200
|
+
const source = { [session2]: 7 };
|
|
201
|
+
combineKnownStateSessions(target, source);
|
|
202
|
+
expect(target).toEqual({
|
|
203
|
+
[session1]: 3,
|
|
204
|
+
[session2]: 7,
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
test("should update session when source has higher counter", () => {
|
|
208
|
+
const session1 = "session-1";
|
|
209
|
+
const target = { [session1]: 3 };
|
|
210
|
+
const source = { [session1]: 7 };
|
|
211
|
+
combineKnownStateSessions(target, source);
|
|
212
|
+
expect(target[session1]).toBe(7);
|
|
213
|
+
});
|
|
214
|
+
test("should not update session when source has lower counter", () => {
|
|
215
|
+
const session1 = "session-1";
|
|
216
|
+
const target = { [session1]: 10 };
|
|
217
|
+
const source = { [session1]: 5 };
|
|
218
|
+
combineKnownStateSessions(target, source);
|
|
219
|
+
expect(target[session1]).toBe(10);
|
|
220
|
+
});
|
|
221
|
+
test("should add session when target has no counter for that session", () => {
|
|
222
|
+
const session1 = "session-1";
|
|
223
|
+
const target = {};
|
|
224
|
+
const source = { [session1]: 5 };
|
|
225
|
+
combineKnownStateSessions(target, source);
|
|
226
|
+
expect(target[session1]).toBe(5);
|
|
227
|
+
});
|
|
228
|
+
test("should handle empty source", () => {
|
|
229
|
+
const session1 = "session-1";
|
|
230
|
+
const target = { [session1]: 3 };
|
|
231
|
+
const source = {};
|
|
232
|
+
combineKnownStateSessions(target, source);
|
|
233
|
+
expect(target).toEqual({ [session1]: 3 });
|
|
234
|
+
});
|
|
235
|
+
test("should handle empty target", () => {
|
|
236
|
+
const session1 = "session-1";
|
|
237
|
+
const target = {};
|
|
238
|
+
const source = { [session1]: 5 };
|
|
239
|
+
combineKnownStateSessions(target, source);
|
|
240
|
+
expect(target).toEqual({ [session1]: 5 });
|
|
241
|
+
});
|
|
242
|
+
test("should handle multiple sessions", () => {
|
|
243
|
+
const session1 = "session-1";
|
|
244
|
+
const session2 = "session-2";
|
|
245
|
+
const session3 = "session-3";
|
|
246
|
+
const target = {
|
|
247
|
+
[session1]: 5,
|
|
248
|
+
[session2]: 10,
|
|
249
|
+
};
|
|
250
|
+
const source = {
|
|
251
|
+
[session1]: 3,
|
|
252
|
+
[session2]: 15,
|
|
253
|
+
[session3]: 8,
|
|
254
|
+
};
|
|
255
|
+
combineKnownStateSessions(target, source);
|
|
256
|
+
expect(target).toEqual({
|
|
257
|
+
[session1]: 5,
|
|
258
|
+
[session2]: 15,
|
|
259
|
+
[session3]: 8,
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
test("should return the target object", () => {
|
|
263
|
+
const session1 = "session-1";
|
|
264
|
+
const target = { [session1]: 3 };
|
|
265
|
+
const source = { [session1]: 7 };
|
|
266
|
+
const result = combineKnownStateSessions(target, source);
|
|
267
|
+
expect(result).toBe(target);
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
describe("setSessionCounter", () => {
|
|
271
|
+
test("should set counter for a new session", () => {
|
|
272
|
+
const session1 = "session-1";
|
|
273
|
+
const knownState = {};
|
|
274
|
+
setSessionCounter(knownState, session1, 5);
|
|
275
|
+
expect(knownState[session1]).toBe(5);
|
|
276
|
+
});
|
|
277
|
+
test("should update counter for an existing session", () => {
|
|
278
|
+
const session1 = "session-1";
|
|
279
|
+
const knownState = { [session1]: 3 };
|
|
280
|
+
setSessionCounter(knownState, session1, 10);
|
|
281
|
+
expect(knownState[session1]).toBe(10);
|
|
282
|
+
});
|
|
283
|
+
test("should allow setting counter to 0", () => {
|
|
284
|
+
const session1 = "session-1";
|
|
285
|
+
const knownState = { [session1]: 5 };
|
|
286
|
+
setSessionCounter(knownState, session1, 0);
|
|
287
|
+
expect(knownState[session1]).toBe(0);
|
|
288
|
+
});
|
|
289
|
+
test("should allow setting counter to a lower value", () => {
|
|
290
|
+
const session1 = "session-1";
|
|
291
|
+
const knownState = { [session1]: 10 };
|
|
292
|
+
setSessionCounter(knownState, session1, 3);
|
|
293
|
+
expect(knownState[session1]).toBe(3);
|
|
294
|
+
});
|
|
295
|
+
test("should mutate the input object", () => {
|
|
296
|
+
const session1 = "session-1";
|
|
297
|
+
const knownState = {};
|
|
298
|
+
setSessionCounter(knownState, session1, 5);
|
|
299
|
+
expect(knownState).toEqual({ [session1]: 5 });
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
describe("updateSessionCounter", () => {
|
|
303
|
+
test("should set counter for a new session", () => {
|
|
304
|
+
const session1 = "session-1";
|
|
305
|
+
const knownState = {};
|
|
306
|
+
updateSessionCounter(knownState, session1, 5);
|
|
307
|
+
expect(knownState[session1]).toBe(5);
|
|
308
|
+
});
|
|
309
|
+
test("should update counter when new value is higher", () => {
|
|
310
|
+
const session1 = "session-1";
|
|
311
|
+
const knownState = { [session1]: 3 };
|
|
312
|
+
updateSessionCounter(knownState, session1, 10);
|
|
313
|
+
expect(knownState[session1]).toBe(10);
|
|
314
|
+
});
|
|
315
|
+
test("should not update counter when new value is lower", () => {
|
|
316
|
+
const session1 = "session-1";
|
|
317
|
+
const knownState = { [session1]: 10 };
|
|
318
|
+
updateSessionCounter(knownState, session1, 3);
|
|
319
|
+
expect(knownState[session1]).toBe(10);
|
|
320
|
+
});
|
|
321
|
+
test("should not update counter when new value is equal", () => {
|
|
322
|
+
const session1 = "session-1";
|
|
323
|
+
const knownState = { [session1]: 5 };
|
|
324
|
+
updateSessionCounter(knownState, session1, 5);
|
|
325
|
+
expect(knownState[session1]).toBe(5);
|
|
326
|
+
});
|
|
327
|
+
test("should handle zero value for existing session", () => {
|
|
328
|
+
const session1 = "session-1";
|
|
329
|
+
const knownState = { [session1]: 5 };
|
|
330
|
+
updateSessionCounter(knownState, session1, 0);
|
|
331
|
+
expect(knownState[session1]).toBe(5);
|
|
332
|
+
});
|
|
333
|
+
test("should set to 0 when counter does not exist and value is 0", () => {
|
|
334
|
+
const session1 = "session-1";
|
|
335
|
+
const knownState = {};
|
|
336
|
+
updateSessionCounter(knownState, session1, 0);
|
|
337
|
+
expect(knownState[session1]).toBe(0);
|
|
338
|
+
});
|
|
339
|
+
test("should mutate the input object", () => {
|
|
340
|
+
const session1 = "session-1";
|
|
341
|
+
const knownState = {};
|
|
342
|
+
updateSessionCounter(knownState, session1, 5);
|
|
343
|
+
expect(knownState).toEqual({ [session1]: 5 });
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
describe("cloneKnownState", () => {
|
|
347
|
+
test("should create a copy with the same values", () => {
|
|
348
|
+
const id = "test-id";
|
|
349
|
+
const session1 = "session-1";
|
|
350
|
+
const original = {
|
|
351
|
+
id,
|
|
352
|
+
header: true,
|
|
353
|
+
sessions: { [session1]: 5 },
|
|
354
|
+
};
|
|
355
|
+
const cloned = cloneKnownState(original);
|
|
356
|
+
expect(cloned).toEqual(original);
|
|
357
|
+
});
|
|
358
|
+
test("should create a new object", () => {
|
|
359
|
+
const id = "test-id";
|
|
360
|
+
const original = {
|
|
361
|
+
id,
|
|
362
|
+
header: true,
|
|
363
|
+
sessions: {},
|
|
364
|
+
};
|
|
365
|
+
const cloned = cloneKnownState(original);
|
|
366
|
+
expect(cloned).not.toBe(original);
|
|
367
|
+
});
|
|
368
|
+
test("should create a new sessions object", () => {
|
|
369
|
+
const id = "test-id";
|
|
370
|
+
const session1 = "session-1";
|
|
371
|
+
const original = {
|
|
372
|
+
id,
|
|
373
|
+
header: true,
|
|
374
|
+
sessions: { [session1]: 5 },
|
|
375
|
+
};
|
|
376
|
+
const cloned = cloneKnownState(original);
|
|
377
|
+
expect(cloned.sessions).not.toBe(original.sessions);
|
|
378
|
+
});
|
|
379
|
+
test("should not affect original when modifying clone", () => {
|
|
380
|
+
const id = "test-id";
|
|
381
|
+
const session1 = "session-1";
|
|
382
|
+
const session2 = "session-2";
|
|
383
|
+
const original = {
|
|
384
|
+
id,
|
|
385
|
+
header: false,
|
|
386
|
+
sessions: { [session1]: 5 },
|
|
387
|
+
};
|
|
388
|
+
const cloned = cloneKnownState(original);
|
|
389
|
+
cloned.header = true;
|
|
390
|
+
cloned.sessions[session2] = 10;
|
|
391
|
+
expect(original.header).toBe(false);
|
|
392
|
+
expect(original.sessions[session2]).toBeUndefined();
|
|
393
|
+
});
|
|
394
|
+
test("should work with empty sessions", () => {
|
|
395
|
+
const id = "test-id";
|
|
396
|
+
const original = emptyKnownState(id);
|
|
397
|
+
const cloned = cloneKnownState(original);
|
|
398
|
+
expect(cloned).toEqual(original);
|
|
399
|
+
expect(cloned).not.toBe(original);
|
|
400
|
+
});
|
|
401
|
+
test("should work with multiple sessions", () => {
|
|
402
|
+
const id = "test-id";
|
|
403
|
+
const session1 = "session-1";
|
|
404
|
+
const session2 = "session-2";
|
|
405
|
+
const session3 = "session-3";
|
|
406
|
+
const original = {
|
|
407
|
+
id,
|
|
408
|
+
header: true,
|
|
409
|
+
sessions: {
|
|
410
|
+
[session1]: 5,
|
|
411
|
+
[session2]: 10,
|
|
412
|
+
[session3]: 15,
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
const cloned = cloneKnownState(original);
|
|
416
|
+
expect(cloned).toEqual(original);
|
|
417
|
+
expect(cloned.sessions).not.toBe(original.sessions);
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
|
+
describe("areLocalSessionsUploaded", () => {
|
|
421
|
+
test("should return true when all counters match", () => {
|
|
422
|
+
const session1 = "session-1";
|
|
423
|
+
const session2 = "session-2";
|
|
424
|
+
const from = { [session1]: 5, [session2]: 10 };
|
|
425
|
+
const to = { [session1]: 5, [session2]: 10 };
|
|
426
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
427
|
+
expect(result).toBe(true);
|
|
428
|
+
});
|
|
429
|
+
test("should return false when counter differs", () => {
|
|
430
|
+
const session1 = "session-1";
|
|
431
|
+
const from = { [session1]: 5 };
|
|
432
|
+
const to = { [session1]: 3 };
|
|
433
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
434
|
+
expect(result).toBe(false);
|
|
435
|
+
});
|
|
436
|
+
test("should return false when session is missing in to", () => {
|
|
437
|
+
const session1 = "session-1";
|
|
438
|
+
const from = { [session1]: 5 };
|
|
439
|
+
const to = {};
|
|
440
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
441
|
+
expect(result).toBe(false);
|
|
442
|
+
});
|
|
443
|
+
test("should return true when from is empty", () => {
|
|
444
|
+
const session1 = "session-1";
|
|
445
|
+
const from = {};
|
|
446
|
+
const to = { [session1]: 5 };
|
|
447
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
448
|
+
expect(result).toBe(true);
|
|
449
|
+
});
|
|
450
|
+
test("should return true when both are empty", () => {
|
|
451
|
+
const from = {};
|
|
452
|
+
const to = {};
|
|
453
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
454
|
+
expect(result).toBe(true);
|
|
455
|
+
});
|
|
456
|
+
test("should handle multiple sessions", () => {
|
|
457
|
+
const session1 = "session-1";
|
|
458
|
+
const session2 = "session-2";
|
|
459
|
+
const session3 = "session-3";
|
|
460
|
+
const from = {
|
|
461
|
+
[session1]: 5,
|
|
462
|
+
[session2]: 10,
|
|
463
|
+
[session3]: 15,
|
|
464
|
+
};
|
|
465
|
+
const to = {
|
|
466
|
+
[session1]: 5,
|
|
467
|
+
[session2]: 10,
|
|
468
|
+
[session3]: 15,
|
|
469
|
+
};
|
|
470
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
471
|
+
expect(result).toBe(true);
|
|
472
|
+
});
|
|
473
|
+
test("should return false if any session counter differs", () => {
|
|
474
|
+
const session1 = "session-1";
|
|
475
|
+
const session2 = "session-2";
|
|
476
|
+
const session3 = "session-3";
|
|
477
|
+
const from = {
|
|
478
|
+
[session1]: 5,
|
|
479
|
+
[session2]: 10,
|
|
480
|
+
[session3]: 15,
|
|
481
|
+
};
|
|
482
|
+
const to = {
|
|
483
|
+
[session1]: 5,
|
|
484
|
+
[session2]: 8,
|
|
485
|
+
[session3]: 15,
|
|
486
|
+
};
|
|
487
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
488
|
+
expect(result).toBe(false);
|
|
489
|
+
});
|
|
490
|
+
test("should not check sessions in to that are not in from", () => {
|
|
491
|
+
const session1 = "session-1";
|
|
492
|
+
const session2 = "session-2";
|
|
493
|
+
const from = { [session1]: 5 };
|
|
494
|
+
const to = {
|
|
495
|
+
[session1]: 5,
|
|
496
|
+
[session2]: 10,
|
|
497
|
+
};
|
|
498
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
499
|
+
expect(result).toBe(true);
|
|
500
|
+
});
|
|
501
|
+
test("should return false when counter in to is higher", () => {
|
|
502
|
+
const session1 = "session-1";
|
|
503
|
+
const from = { [session1]: 5 };
|
|
504
|
+
const to = { [session1]: 10 };
|
|
505
|
+
const result = areLocalSessionsUploaded(from, to);
|
|
506
|
+
expect(result).toBe(false);
|
|
507
|
+
});
|
|
508
|
+
});
|
|
509
|
+
});
|
|
510
|
+
//# sourceMappingURL=knownState.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knownState.test.js","sourceRoot":"","sources":["../../src/tests/knownState.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messagesTestUtils.d.ts","sourceRoot":"","sources":["../../src/tests/messagesTestUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"messagesTestUtils.d.ts","sourceRoot":"","sources":["../../src/tests/messagesTestUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAqB,WAAW,EAAE,MAAM,SAAS,CAAC;AA0BzD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACrC,QAAQ,EAAE;IACR,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,WAAW,CAAC;CAClB,EAAE,YA0BJ;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;;EASrE;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACrC,QAAQ,EAAE;IACR,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,WAAW,CAAC;CAClB,EAAE,QAGJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messagesTestUtils.js","sourceRoot":"","sources":["../../src/tests/messagesTestUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messagesTestUtils.js","sourceRoot":"","sources":["../../src/tests/messagesTestUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"priority.test.js","sourceRoot":"","sources":["../../src/tests/priority.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"priority.test.js","sourceRoot":"","sources":["../../src/tests/priority.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -214,42 +214,12 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
214
214
|
expect(coValue.get("fromServer")).toEqual("updated");
|
|
215
215
|
expect(coValue.get("fromClient")).toEqual("updated");
|
|
216
216
|
});
|
|
217
|
-
|
|
217
|
+
const syncLog = SyncMessagesLog.getMessages({
|
|
218
218
|
Group: group.core,
|
|
219
219
|
Map: map.core,
|
|
220
|
-
})
|
|
221
|
-
|
|
222
|
-
"
|
|
223
|
-
"edge-italy -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
224
|
-
"edge-italy -> core | CONTENT Group header: true new: After: 0 New: 5",
|
|
225
|
-
"edge-italy -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
226
|
-
"edge-italy -> core | CONTENT Map header: true new: After: 0 New: 1",
|
|
227
|
-
"edge-italy -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
228
|
-
"edge-italy -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
229
|
-
"core -> edge-italy | KNOWN Group sessions: header/5",
|
|
230
|
-
"core -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
231
|
-
"core -> edge-italy | KNOWN Map sessions: header/1",
|
|
232
|
-
"core -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
233
|
-
"client -> edge-italy | KNOWN Group sessions: header/5",
|
|
234
|
-
"client -> edge-italy | KNOWN Map sessions: header/1",
|
|
235
|
-
"client -> edge-italy | CONTENT Map header: false new: After: 0 New: 1",
|
|
236
|
-
"core -> storage | CONTENT Map header: false new: After: 0 New: 1",
|
|
237
|
-
"core -> edge-italy | CONTENT Map header: false new: After: 0 New: 1",
|
|
238
|
-
"edge-italy -> client | KNOWN CORRECTION Map sessions: empty",
|
|
239
|
-
"edge-italy -> core | KNOWN CORRECTION Map sessions: empty",
|
|
240
|
-
"client -> edge-italy | CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
|
|
241
|
-
"core -> edge-italy | CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
|
|
242
|
-
"edge-italy -> client | KNOWN Map sessions: header/2",
|
|
243
|
-
"edge-italy -> storage | CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
|
|
244
|
-
"edge-italy -> core | CONTENT Map header: false new: After: 0 New: 1",
|
|
245
|
-
"edge-italy -> core | KNOWN Map sessions: header/3",
|
|
246
|
-
"edge-italy -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
247
|
-
"edge-italy -> client | CONTENT Map header: false new: After: 0 New: 1",
|
|
248
|
-
"core -> edge-italy | KNOWN Map sessions: header/3",
|
|
249
|
-
"core -> storage | CONTENT Map header: false new: After: 0 New: 1",
|
|
250
|
-
"client -> edge-italy | KNOWN Map sessions: header/3",
|
|
251
|
-
]
|
|
252
|
-
`);
|
|
220
|
+
});
|
|
221
|
+
expect(syncLog).toContain("edge-italy -> client | KNOWN CORRECTION Map sessions: empty");
|
|
222
|
+
expect(syncLog).toContain("edge-italy -> core | KNOWN CORRECTION Map sessions: empty");
|
|
253
223
|
});
|
|
254
224
|
test("sync of changes of a coValue with bad signatures should be blocked", async () => {
|
|
255
225
|
const italianClient = setupTestNode();
|