@powersync/service-core 1.10.1 → 1.10.3

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.
Files changed (68) hide show
  1. package/.probes/poll +1 -0
  2. package/CHANGELOG.md +12 -0
  3. package/dist/sync/sync.js +8 -1
  4. package/dist/sync/sync.js.map +1 -1
  5. package/package.json +3 -3
  6. package/src/sync/sync.ts +8 -1
  7. package/test/dist/auth.test.d.ts +1 -0
  8. package/test/dist/auth.test.js +332 -0
  9. package/test/dist/auth.test.js.map +1 -0
  10. package/test/dist/broadcast_iterable.test.d.ts +1 -0
  11. package/test/dist/broadcast_iterable.test.js +131 -0
  12. package/test/dist/broadcast_iterable.test.js.map +1 -0
  13. package/test/dist/bucket_validation.d.ts +26 -0
  14. package/test/dist/bucket_validation.js +56 -0
  15. package/test/dist/bucket_validation.js.map +1 -0
  16. package/test/dist/bucket_validation.test.d.ts +1 -0
  17. package/test/dist/bucket_validation.test.js +134 -0
  18. package/test/dist/bucket_validation.test.js.map +1 -0
  19. package/test/dist/checksum_cache.test.d.ts +1 -0
  20. package/test/dist/checksum_cache.test.js +375 -0
  21. package/test/dist/checksum_cache.test.js.map +1 -0
  22. package/test/dist/compacting.test.d.ts +1 -0
  23. package/test/dist/compacting.test.js +254 -0
  24. package/test/dist/compacting.test.js.map +1 -0
  25. package/test/dist/data_storage.test.d.ts +1 -0
  26. package/test/dist/data_storage.test.js +1306 -0
  27. package/test/dist/data_storage.test.js.map +1 -0
  28. package/test/dist/demultiplexer.test.d.ts +1 -0
  29. package/test/dist/demultiplexer.test.js +166 -0
  30. package/test/dist/demultiplexer.test.js.map +1 -0
  31. package/test/dist/env.d.ts +3 -0
  32. package/test/dist/env.js +5 -0
  33. package/test/dist/env.js.map +1 -0
  34. package/test/dist/merge_iterable.test.d.ts +1 -0
  35. package/test/dist/merge_iterable.test.js +321 -0
  36. package/test/dist/merge_iterable.test.js.map +1 -0
  37. package/test/dist/routes/probes.integration.test.d.ts +1 -0
  38. package/test/dist/routes/probes.integration.test.js +192 -0
  39. package/test/dist/routes/probes.integration.test.js.map +1 -0
  40. package/test/dist/routes/probes.test.d.ts +1 -0
  41. package/test/dist/routes/probes.test.js +119 -0
  42. package/test/dist/routes/probes.test.js.map +1 -0
  43. package/test/dist/setup.d.ts +1 -0
  44. package/test/dist/setup.js +7 -0
  45. package/test/dist/setup.js.map +1 -0
  46. package/test/dist/stream_utils.d.ts +6 -0
  47. package/test/dist/stream_utils.js +37 -0
  48. package/test/dist/stream_utils.js.map +1 -0
  49. package/test/dist/sync/BucketChecksumState.test.d.ts +1 -0
  50. package/test/dist/sync/BucketChecksumState.test.js +499 -0
  51. package/test/dist/sync/BucketChecksumState.test.js.map +1 -0
  52. package/test/dist/sync/checksum_state.test.d.ts +1 -0
  53. package/test/dist/sync/checksum_state.test.js +21 -0
  54. package/test/dist/sync/checksum_state.test.js.map +1 -0
  55. package/test/dist/sync/util.test.d.ts +1 -0
  56. package/test/dist/sync/util.test.js +28 -0
  57. package/test/dist/sync/util.test.js.map +1 -0
  58. package/test/dist/sync.test.d.ts +1 -0
  59. package/test/dist/sync.test.js +428 -0
  60. package/test/dist/sync.test.js.map +1 -0
  61. package/test/dist/util.d.ts +36 -0
  62. package/test/dist/util.js +114 -0
  63. package/test/dist/util.js.map +1 -0
  64. package/test/dist/util.test.d.ts +1 -0
  65. package/test/dist/util.test.js +45 -0
  66. package/test/dist/util.test.js.map +1 -0
  67. package/test/tsconfig.tsbuildinfo +1 -0
  68. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,499 @@
1
+ import { BucketChecksumState, CHECKPOINT_INVALIDATE_ALL, SyncContext } from '@/index.js';
2
+ import { JSONBig } from '@powersync/service-jsonbig';
3
+ import { RequestParameters, ParameterLookup, SqlSyncRules } from '@powersync/service-sync-rules';
4
+ import { describe, expect, test } from 'vitest';
5
+ describe('BucketChecksumState', () => {
6
+ // Single global[] bucket.
7
+ // We don't care about data in these tests
8
+ const SYNC_RULES_GLOBAL = SqlSyncRules.fromYaml(`
9
+ bucket_definitions:
10
+ global:
11
+ data: []
12
+ `, { defaultSchema: 'public' });
13
+ // global[1] and global[2]
14
+ const SYNC_RULES_GLOBAL_TWO = SqlSyncRules.fromYaml(`
15
+ bucket_definitions:
16
+ global:
17
+ parameters:
18
+ - select 1 as id
19
+ - select 2 as id
20
+ data: []
21
+ `, { defaultSchema: 'public' });
22
+ // by_project[n]
23
+ const SYNC_RULES_DYNAMIC = SqlSyncRules.fromYaml(`
24
+ bucket_definitions:
25
+ by_project:
26
+ parameters: select id from projects where user_id = request.user_id()
27
+ data: []
28
+ `, { defaultSchema: 'public' });
29
+ const syncContext = new SyncContext({
30
+ maxBuckets: 100,
31
+ maxParameterQueryResults: 100,
32
+ maxDataFetchConcurrency: 10
33
+ });
34
+ test('global bucket with update', async () => {
35
+ const storage = new MockBucketChecksumStateStorage();
36
+ // Set intial state
37
+ storage.updateTestChecksum({ bucket: 'global[]', checksum: 1, count: 1 });
38
+ const state = new BucketChecksumState({
39
+ syncContext,
40
+ syncParams: new RequestParameters({ sub: '' }, {}),
41
+ syncRules: SYNC_RULES_GLOBAL,
42
+ bucketStorage: storage
43
+ });
44
+ const line = (await state.buildNextCheckpointLine({
45
+ base: { checkpoint: 1n, lsn: '1' },
46
+ writeCheckpoint: null,
47
+ update: CHECKPOINT_INVALIDATE_ALL
48
+ }));
49
+ expect(line.checkpointLine).toEqual({
50
+ checkpoint: {
51
+ buckets: [{ bucket: 'global[]', checksum: 1, count: 1, priority: 3 }],
52
+ last_op_id: '1',
53
+ write_checkpoint: undefined
54
+ }
55
+ });
56
+ expect(line.bucketsToFetch).toEqual([
57
+ {
58
+ bucket: 'global[]',
59
+ priority: 3
60
+ }
61
+ ]);
62
+ // This is the bucket data to be fetched
63
+ expect(state.getFilteredBucketPositions(line.bucketsToFetch)).toEqual(new Map([['global[]', 0n]]));
64
+ // This similuates the bucket data being sent
65
+ state.updateBucketPosition({ bucket: 'global[]', nextAfter: 1n, hasMore: false });
66
+ // Update bucket storage state
67
+ storage.updateTestChecksum({ bucket: 'global[]', checksum: 2, count: 2 });
68
+ // Now we get a new line
69
+ const line2 = (await state.buildNextCheckpointLine({
70
+ base: { checkpoint: 2n, lsn: '2' },
71
+ writeCheckpoint: null,
72
+ update: {
73
+ updatedDataBuckets: new Set(['global[]']),
74
+ invalidateDataBuckets: false,
75
+ updatedParameterLookups: new Set(),
76
+ invalidateParameterBuckets: false
77
+ }
78
+ }));
79
+ expect(line2.checkpointLine).toEqual({
80
+ checkpoint_diff: {
81
+ removed_buckets: [],
82
+ updated_buckets: [{ bucket: 'global[]', checksum: 2, count: 2, priority: 3 }],
83
+ last_op_id: '2',
84
+ write_checkpoint: undefined
85
+ }
86
+ });
87
+ expect(state.getFilteredBucketPositions(line2.bucketsToFetch)).toEqual(new Map([['global[]', 1n]]));
88
+ });
89
+ test('global bucket with initial state', async () => {
90
+ // This tests the client sending an initial state
91
+ // This does not affect the checkpoint, but does affect the data to be fetched
92
+ /// (getFilteredBucketStates)
93
+ const storage = new MockBucketChecksumStateStorage();
94
+ // Set intial state
95
+ storage.updateTestChecksum({ bucket: 'global[]', checksum: 1, count: 1 });
96
+ const state = new BucketChecksumState({
97
+ syncContext,
98
+ // Client sets the initial state here
99
+ initialBucketPositions: [{ name: 'global[]', after: 1n }],
100
+ syncParams: new RequestParameters({ sub: '' }, {}),
101
+ syncRules: SYNC_RULES_GLOBAL,
102
+ bucketStorage: storage
103
+ });
104
+ const line = (await state.buildNextCheckpointLine({
105
+ base: { checkpoint: 1n, lsn: '1' },
106
+ writeCheckpoint: null,
107
+ update: CHECKPOINT_INVALIDATE_ALL
108
+ }));
109
+ expect(line.checkpointLine).toEqual({
110
+ checkpoint: {
111
+ buckets: [{ bucket: 'global[]', checksum: 1, count: 1, priority: 3 }],
112
+ last_op_id: '1',
113
+ write_checkpoint: undefined
114
+ }
115
+ });
116
+ expect(line.bucketsToFetch).toEqual([
117
+ {
118
+ bucket: 'global[]',
119
+ priority: 3
120
+ }
121
+ ]);
122
+ // This is the main difference between this and the previous test
123
+ expect(state.getFilteredBucketPositions(line.bucketsToFetch)).toEqual(new Map([['global[]', 1n]]));
124
+ });
125
+ test('multiple static buckets', async () => {
126
+ const storage = new MockBucketChecksumStateStorage();
127
+ // Set intial state
128
+ storage.updateTestChecksum({ bucket: 'global[1]', checksum: 1, count: 1 });
129
+ storage.updateTestChecksum({ bucket: 'global[2]', checksum: 1, count: 1 });
130
+ const state = new BucketChecksumState({
131
+ syncContext,
132
+ syncParams: new RequestParameters({ sub: '' }, {}),
133
+ syncRules: SYNC_RULES_GLOBAL_TWO,
134
+ bucketStorage: storage
135
+ });
136
+ const line = (await state.buildNextCheckpointLine({
137
+ base: { checkpoint: 1n, lsn: '1' },
138
+ writeCheckpoint: null,
139
+ update: CHECKPOINT_INVALIDATE_ALL
140
+ }));
141
+ expect(line.checkpointLine).toEqual({
142
+ checkpoint: {
143
+ buckets: [
144
+ { bucket: 'global[1]', checksum: 1, count: 1, priority: 3 },
145
+ { bucket: 'global[2]', checksum: 1, count: 1, priority: 3 }
146
+ ],
147
+ last_op_id: '1',
148
+ write_checkpoint: undefined
149
+ }
150
+ });
151
+ expect(line.bucketsToFetch).toEqual([
152
+ {
153
+ bucket: 'global[1]',
154
+ priority: 3
155
+ },
156
+ {
157
+ bucket: 'global[2]',
158
+ priority: 3
159
+ }
160
+ ]);
161
+ storage.updateTestChecksum({ bucket: 'global[1]', checksum: 2, count: 2 });
162
+ storage.updateTestChecksum({ bucket: 'global[2]', checksum: 2, count: 2 });
163
+ const line2 = (await state.buildNextCheckpointLine({
164
+ base: { checkpoint: 2n, lsn: '2' },
165
+ writeCheckpoint: null,
166
+ update: {
167
+ ...CHECKPOINT_INVALIDATE_ALL,
168
+ updatedDataBuckets: new Set(['global[1]', 'global[2]']),
169
+ invalidateDataBuckets: false
170
+ }
171
+ }));
172
+ expect(line2.checkpointLine).toEqual({
173
+ checkpoint_diff: {
174
+ removed_buckets: [],
175
+ updated_buckets: [
176
+ { bucket: 'global[1]', checksum: 2, count: 2, priority: 3 },
177
+ { bucket: 'global[2]', checksum: 2, count: 2, priority: 3 }
178
+ ],
179
+ last_op_id: '2',
180
+ write_checkpoint: undefined
181
+ }
182
+ });
183
+ });
184
+ test('removing a static bucket', async () => {
185
+ // This tests the client sending an initial state, with a bucket that we don't have.
186
+ // This makes effectively no difference to the output. By not including the bucket
187
+ // in the output, the client will remove the bucket.
188
+ const storage = new MockBucketChecksumStateStorage();
189
+ const state = new BucketChecksumState({
190
+ syncContext,
191
+ // Client sets the initial state here
192
+ initialBucketPositions: [{ name: 'something_here[]', after: 1n }],
193
+ syncParams: new RequestParameters({ sub: '' }, {}),
194
+ syncRules: SYNC_RULES_GLOBAL,
195
+ bucketStorage: storage
196
+ });
197
+ storage.updateTestChecksum({ bucket: 'global[]', checksum: 1, count: 1 });
198
+ const line = (await state.buildNextCheckpointLine({
199
+ base: { checkpoint: 1n, lsn: '1' },
200
+ writeCheckpoint: null,
201
+ update: CHECKPOINT_INVALIDATE_ALL
202
+ }));
203
+ expect(line.checkpointLine).toEqual({
204
+ checkpoint: {
205
+ buckets: [{ bucket: 'global[]', checksum: 1, count: 1, priority: 3 }],
206
+ last_op_id: '1',
207
+ write_checkpoint: undefined
208
+ }
209
+ });
210
+ expect(line.bucketsToFetch).toEqual([
211
+ {
212
+ bucket: 'global[]',
213
+ priority: 3
214
+ }
215
+ ]);
216
+ expect(state.getFilteredBucketPositions(line.bucketsToFetch)).toEqual(new Map([['global[]', 0n]]));
217
+ });
218
+ test('invalidating individual bucket', async () => {
219
+ // We manually control the filter events here.
220
+ const storage = new MockBucketChecksumStateStorage();
221
+ // Set initial state
222
+ storage.updateTestChecksum({ bucket: 'global[1]', checksum: 1, count: 1 });
223
+ storage.updateTestChecksum({ bucket: 'global[2]', checksum: 1, count: 1 });
224
+ const state = new BucketChecksumState({
225
+ syncContext,
226
+ syncParams: new RequestParameters({ sub: '' }, {}),
227
+ syncRules: SYNC_RULES_GLOBAL_TWO,
228
+ bucketStorage: storage
229
+ });
230
+ // We specifically do not set this here, so that we have manual control over the events.
231
+ // storage.filter = state.checkpointFilter;
232
+ await state.buildNextCheckpointLine({
233
+ base: { checkpoint: 1n, lsn: '1' },
234
+ writeCheckpoint: null,
235
+ update: CHECKPOINT_INVALIDATE_ALL
236
+ });
237
+ state.updateBucketPosition({ bucket: 'global[1]', nextAfter: 1n, hasMore: false });
238
+ state.updateBucketPosition({ bucket: 'global[2]', nextAfter: 1n, hasMore: false });
239
+ storage.updateTestChecksum({ bucket: 'global[1]', checksum: 2, count: 2 });
240
+ storage.updateTestChecksum({ bucket: 'global[2]', checksum: 2, count: 2 });
241
+ const line2 = (await state.buildNextCheckpointLine({
242
+ base: { checkpoint: 2n, lsn: '2' },
243
+ writeCheckpoint: null,
244
+ update: {
245
+ ...CHECKPOINT_INVALIDATE_ALL,
246
+ // Invalidate the state for global[1] - will only re-check the single bucket.
247
+ // This is essentially inconsistent state, but is the simplest way to test that
248
+ // the filter is working.
249
+ updatedDataBuckets: new Set(['global[1]']),
250
+ invalidateDataBuckets: false
251
+ }
252
+ }));
253
+ expect(line2.checkpointLine).toEqual({
254
+ checkpoint_diff: {
255
+ removed_buckets: [],
256
+ updated_buckets: [
257
+ // This does not include global[2], since it was not invalidated.
258
+ { bucket: 'global[1]', checksum: 2, count: 2, priority: 3 }
259
+ ],
260
+ last_op_id: '2',
261
+ write_checkpoint: undefined
262
+ }
263
+ });
264
+ expect(line2.bucketsToFetch).toEqual([{ bucket: 'global[1]', priority: 3 }]);
265
+ });
266
+ test('invalidating all buckets', async () => {
267
+ // We manually control the filter events here.
268
+ const storage = new MockBucketChecksumStateStorage();
269
+ const state = new BucketChecksumState({
270
+ syncContext,
271
+ syncParams: new RequestParameters({ sub: '' }, {}),
272
+ syncRules: SYNC_RULES_GLOBAL_TWO,
273
+ bucketStorage: storage
274
+ });
275
+ // We specifically do not set this here, so that we have manual control over the events.
276
+ // storage.filter = state.checkpointFilter;
277
+ // Set initial state
278
+ storage.updateTestChecksum({ bucket: 'global[1]', checksum: 1, count: 1 });
279
+ storage.updateTestChecksum({ bucket: 'global[2]', checksum: 1, count: 1 });
280
+ await state.buildNextCheckpointLine({
281
+ base: { checkpoint: 1n, lsn: '1' },
282
+ writeCheckpoint: null,
283
+ update: CHECKPOINT_INVALIDATE_ALL
284
+ });
285
+ storage.updateTestChecksum({ bucket: 'global[1]', checksum: 2, count: 2 });
286
+ storage.updateTestChecksum({ bucket: 'global[2]', checksum: 2, count: 2 });
287
+ const line2 = (await state.buildNextCheckpointLine({
288
+ base: { checkpoint: 2n, lsn: '2' },
289
+ writeCheckpoint: null,
290
+ // Invalidate the state - will re-check all buckets
291
+ update: CHECKPOINT_INVALIDATE_ALL
292
+ }));
293
+ expect(line2.checkpointLine).toEqual({
294
+ checkpoint_diff: {
295
+ removed_buckets: [],
296
+ updated_buckets: [
297
+ { bucket: 'global[1]', checksum: 2, count: 2, priority: 3 },
298
+ { bucket: 'global[2]', checksum: 2, count: 2, priority: 3 }
299
+ ],
300
+ last_op_id: '2',
301
+ write_checkpoint: undefined
302
+ }
303
+ });
304
+ expect(line2.bucketsToFetch).toEqual([
305
+ { bucket: 'global[1]', priority: 3 },
306
+ { bucket: 'global[2]', priority: 3 }
307
+ ]);
308
+ });
309
+ test('interrupt and resume static buckets checkpoint', async () => {
310
+ const storage = new MockBucketChecksumStateStorage();
311
+ // Set intial state
312
+ storage.updateTestChecksum({ bucket: 'global[1]', checksum: 3, count: 3 });
313
+ storage.updateTestChecksum({ bucket: 'global[2]', checksum: 3, count: 3 });
314
+ const state = new BucketChecksumState({
315
+ syncContext,
316
+ syncParams: new RequestParameters({ sub: '' }, {}),
317
+ syncRules: SYNC_RULES_GLOBAL_TWO,
318
+ bucketStorage: storage
319
+ });
320
+ const line = (await state.buildNextCheckpointLine({
321
+ base: { checkpoint: 3n, lsn: '3' },
322
+ writeCheckpoint: null,
323
+ update: CHECKPOINT_INVALIDATE_ALL
324
+ }));
325
+ expect(line.checkpointLine).toEqual({
326
+ checkpoint: {
327
+ buckets: [
328
+ { bucket: 'global[1]', checksum: 3, count: 3, priority: 3 },
329
+ { bucket: 'global[2]', checksum: 3, count: 3, priority: 3 }
330
+ ],
331
+ last_op_id: '3',
332
+ write_checkpoint: undefined
333
+ }
334
+ });
335
+ expect(line.bucketsToFetch).toEqual([
336
+ {
337
+ bucket: 'global[1]',
338
+ priority: 3
339
+ },
340
+ {
341
+ bucket: 'global[2]',
342
+ priority: 3
343
+ }
344
+ ]);
345
+ // This is the bucket data to be fetched
346
+ expect(state.getFilteredBucketPositions(line.bucketsToFetch)).toEqual(new Map([
347
+ ['global[1]', 0n],
348
+ ['global[2]', 0n]
349
+ ]));
350
+ // No data changes here.
351
+ // We simulate partial data sent, before a checkpoint is interrupted.
352
+ state.updateBucketPosition({ bucket: 'global[1]', nextAfter: 3n, hasMore: false });
353
+ state.updateBucketPosition({ bucket: 'global[2]', nextAfter: 1n, hasMore: true });
354
+ storage.updateTestChecksum({ bucket: 'global[1]', checksum: 4, count: 4 });
355
+ const line2 = (await state.buildNextCheckpointLine({
356
+ base: { checkpoint: 4n, lsn: '4' },
357
+ writeCheckpoint: null,
358
+ update: {
359
+ ...CHECKPOINT_INVALIDATE_ALL,
360
+ invalidateDataBuckets: false,
361
+ updatedDataBuckets: new Set(['global[1]'])
362
+ }
363
+ }));
364
+ expect(line2.checkpointLine).toEqual({
365
+ checkpoint_diff: {
366
+ removed_buckets: [],
367
+ updated_buckets: [
368
+ {
369
+ bucket: 'global[1]',
370
+ checksum: 4,
371
+ count: 4,
372
+ priority: 3
373
+ }
374
+ ],
375
+ last_op_id: '4',
376
+ write_checkpoint: undefined
377
+ }
378
+ });
379
+ // This should contain both buckets, even though only one changed.
380
+ expect(line2.bucketsToFetch).toEqual([
381
+ {
382
+ bucket: 'global[1]',
383
+ priority: 3
384
+ },
385
+ {
386
+ bucket: 'global[2]',
387
+ priority: 3
388
+ }
389
+ ]);
390
+ expect(state.getFilteredBucketPositions(line2.bucketsToFetch)).toEqual(new Map([
391
+ ['global[1]', 3n],
392
+ ['global[2]', 1n]
393
+ ]));
394
+ });
395
+ test('dynamic buckets with updates', async () => {
396
+ const storage = new MockBucketChecksumStateStorage();
397
+ // Set intial state
398
+ storage.updateTestChecksum({ bucket: 'by_project[1]', checksum: 1, count: 1 });
399
+ storage.updateTestChecksum({ bucket: 'by_project[2]', checksum: 1, count: 1 });
400
+ storage.updateTestChecksum({ bucket: 'by_project[3]', checksum: 1, count: 1 });
401
+ const state = new BucketChecksumState({
402
+ syncContext,
403
+ syncParams: new RequestParameters({ sub: 'u1' }, {}),
404
+ syncRules: SYNC_RULES_DYNAMIC,
405
+ bucketStorage: storage
406
+ });
407
+ storage.getParameterSets = async (checkpoint, lookups) => {
408
+ expect(checkpoint).toEqual(1n);
409
+ expect(lookups).toEqual([ParameterLookup.normalized('by_project', '1', ['u1'])]);
410
+ return [{ id: 1 }, { id: 2 }];
411
+ };
412
+ const line = (await state.buildNextCheckpointLine({
413
+ base: { checkpoint: 1n, lsn: '1' },
414
+ writeCheckpoint: null,
415
+ update: CHECKPOINT_INVALIDATE_ALL
416
+ }));
417
+ expect(line.checkpointLine).toEqual({
418
+ checkpoint: {
419
+ buckets: [
420
+ { bucket: 'by_project[1]', checksum: 1, count: 1, priority: 3 },
421
+ { bucket: 'by_project[2]', checksum: 1, count: 1, priority: 3 }
422
+ ],
423
+ last_op_id: '1',
424
+ write_checkpoint: undefined
425
+ }
426
+ });
427
+ expect(line.bucketsToFetch).toEqual([
428
+ {
429
+ bucket: 'by_project[1]',
430
+ priority: 3
431
+ },
432
+ {
433
+ bucket: 'by_project[2]',
434
+ priority: 3
435
+ }
436
+ ]);
437
+ // This is the bucket data to be fetched
438
+ expect(state.getFilteredBucketPositions(line.bucketsToFetch)).toEqual(new Map([
439
+ ['by_project[1]', 0n],
440
+ ['by_project[2]', 0n]
441
+ ]));
442
+ state.updateBucketPosition({ bucket: 'by_project[1]', nextAfter: 1n, hasMore: false });
443
+ state.updateBucketPosition({ bucket: 'by_project[2]', nextAfter: 1n, hasMore: false });
444
+ storage.getParameterSets = async (checkpoint, lookups) => {
445
+ expect(checkpoint).toEqual(2n);
446
+ expect(lookups).toEqual([ParameterLookup.normalized('by_project', '1', ['u1'])]);
447
+ return [{ id: 1 }, { id: 2 }, { id: 3 }];
448
+ };
449
+ // Now we get a new line
450
+ const line2 = (await state.buildNextCheckpointLine({
451
+ base: { checkpoint: 2n, lsn: '2' },
452
+ writeCheckpoint: null,
453
+ update: {
454
+ invalidateDataBuckets: false,
455
+ updatedDataBuckets: new Set(),
456
+ updatedParameterLookups: new Set([JSONBig.stringify(['by_project', '1', 'u1'])]),
457
+ invalidateParameterBuckets: false
458
+ }
459
+ }));
460
+ expect(line2.checkpointLine).toEqual({
461
+ checkpoint_diff: {
462
+ removed_buckets: [],
463
+ updated_buckets: [{ bucket: 'by_project[3]', checksum: 1, count: 1, priority: 3 }],
464
+ last_op_id: '2',
465
+ write_checkpoint: undefined
466
+ }
467
+ });
468
+ expect(state.getFilteredBucketPositions(line2.bucketsToFetch)).toEqual(new Map([['by_project[3]', 0n]]));
469
+ });
470
+ });
471
+ class MockBucketChecksumStateStorage {
472
+ state = new Map();
473
+ filter;
474
+ constructor() { }
475
+ updateTestChecksum(checksum) {
476
+ this.state.set(checksum.bucket, checksum);
477
+ this.filter?.({ changedDataBucket: checksum.bucket });
478
+ }
479
+ invalidate() {
480
+ this.filter?.({ invalidate: true });
481
+ }
482
+ async getChecksums(checkpoint, buckets) {
483
+ return new Map(buckets.map((bucket) => {
484
+ const checksum = this.state.get(bucket);
485
+ return [
486
+ bucket,
487
+ {
488
+ bucket: bucket,
489
+ checksum: checksum?.checksum ?? 0,
490
+ count: checksum?.count ?? 0
491
+ }
492
+ ];
493
+ }));
494
+ }
495
+ async getParameterSets(checkpoint, lookups) {
496
+ throw new Error('Method not implemented.');
497
+ }
498
+ }
499
+ //# sourceMappingURL=BucketChecksumState.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BucketChecksumState.test.js","sourceRoot":"","sources":["../../src/sync/BucketChecksumState.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ import { BucketChecksumState } from '@/index.js';
2
+ import { RequestParameters, SqlSyncRules } from '@powersync/service-sync-rules';
3
+ import { describe, expect, test } from 'vitest';
4
+ describe('BucketChecksumState', () => {
5
+ test('basic setup', async () => {
6
+ const syncRules = SqlSyncRules.fromYaml(`
7
+ bucket_definitions:
8
+ global:
9
+ data: []
10
+ `, { defaultSchema: 'public' });
11
+ const state = new BucketChecksumState({
12
+ initialBucketState: new Map(),
13
+ syncParams: new RequestParameters({ sub: '' }, {}),
14
+ syncRules: syncRules,
15
+ bucketStorage: null
16
+ });
17
+ const line = (await state.buildNextCheckpointLine({ base: { checkpoint: '1', lsn: '1' }, writeCheckpoint: null }));
18
+ expect(line.checkpointLine).toEqual({ checkpoint: '1', lsn: '1' });
19
+ });
20
+ });
21
+ //# sourceMappingURL=checksum_state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checksum_state.test.js","sourceRoot":"","sources":["../../src/sync/checksum_state.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEhD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CACrC;;;;OAIC,EACD,EAAE,aAAa,EAAE,QAAQ,EAAE,CAC5B,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC;YACpC,kBAAkB,EAAE,IAAI,GAAG,EAAE;YAC7B,UAAU,EAAE,IAAI,iBAAiB,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAClD,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,IAAW;SAC3B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAE,CAAC;QACpH,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ import { acquireSemaphoreAbortable } from '@/index.js';
2
+ import { Semaphore } from 'async-mutex';
3
+ import { describe, expect, test, vi } from 'vitest';
4
+ describe('acquireSemaphoreAbortable', () => {
5
+ test('can acquire', async () => {
6
+ const semaphore = new Semaphore(1);
7
+ const controller = new AbortController();
8
+ expect(await acquireSemaphoreAbortable(semaphore, controller.signal)).not.toBe('aborted');
9
+ });
10
+ test('can cancel', async () => {
11
+ const semaphore = new Semaphore(1);
12
+ const controller = new AbortController();
13
+ const resolve = vi.fn();
14
+ const reject = vi.fn();
15
+ // First invocation: Lock the semaphore
16
+ const result = await acquireSemaphoreAbortable(semaphore, controller.signal);
17
+ expect(result).not.toBe('aborted');
18
+ const [count, release] = result;
19
+ acquireSemaphoreAbortable(semaphore, controller.signal).then(resolve, reject);
20
+ controller.abort();
21
+ await Promise.resolve();
22
+ expect(reject).not.toHaveBeenCalled();
23
+ expect(resolve).toHaveBeenCalledWith('aborted');
24
+ // Releasing the semaphore should not invoke resolve again
25
+ release();
26
+ });
27
+ });
28
+ //# sourceMappingURL=util.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.test.js","sourceRoot":"","sources":["../../src/sync/util.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEpD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,MAAM,CAAC,MAAM,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QAEzC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvB,uCAAuC;QACvC,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAA+C,CAAC;QAEzE,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9E,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAEhD,0DAA0D;QAC1D,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};