@powersync/service-core 0.0.0-dev-20241022111143 → 0.0.0-dev-20241023230541

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 (50) hide show
  1. package/CHANGELOG.md +5 -5
  2. package/dist/api/RouteAPI.d.ts +6 -4
  3. package/dist/api/diagnostics.js +3 -1
  4. package/dist/api/diagnostics.js.map +1 -1
  5. package/dist/api/schema.js +2 -2
  6. package/dist/api/schema.js.map +1 -1
  7. package/dist/replication/AbstractReplicationJob.js +2 -2
  8. package/dist/replication/AbstractReplicationJob.js.map +1 -1
  9. package/dist/replication/ReplicationModule.d.ts +13 -1
  10. package/dist/replication/ReplicationModule.js +7 -4
  11. package/dist/replication/ReplicationModule.js.map +1 -1
  12. package/dist/routes/configure-fastify.js +12 -12
  13. package/dist/routes/configure-fastify.js.map +1 -1
  14. package/dist/routes/configure-rsocket.js +4 -1
  15. package/dist/routes/configure-rsocket.js.map +1 -1
  16. package/dist/routes/endpoints/admin.js.map +1 -1
  17. package/dist/routes/endpoints/sync-rules.js.map +1 -1
  18. package/dist/routes/router.d.ts +8 -1
  19. package/dist/routes/router.js.map +1 -1
  20. package/dist/storage/BucketStorage.d.ts +16 -11
  21. package/dist/storage/BucketStorage.js +6 -0
  22. package/dist/storage/BucketStorage.js.map +1 -1
  23. package/dist/storage/MongoBucketStorage.d.ts +1 -3
  24. package/dist/storage/MongoBucketStorage.js.map +1 -1
  25. package/dist/storage/mongo/MongoBucketBatch.js +1 -0
  26. package/dist/storage/mongo/MongoBucketBatch.js.map +1 -1
  27. package/dist/storage/mongo/MongoSyncBucketStorage.d.ts +2 -4
  28. package/dist/storage/mongo/MongoSyncBucketStorage.js +3 -2
  29. package/dist/storage/mongo/MongoSyncBucketStorage.js.map +1 -1
  30. package/dist/util/protocol-types.d.ts +2 -1
  31. package/package.json +5 -5
  32. package/src/api/RouteAPI.ts +7 -4
  33. package/src/api/diagnostics.ts +3 -1
  34. package/src/api/schema.ts +3 -3
  35. package/src/replication/AbstractReplicationJob.ts +2 -2
  36. package/src/replication/ReplicationModule.ts +26 -5
  37. package/src/routes/configure-fastify.ts +16 -17
  38. package/src/routes/configure-rsocket.ts +7 -2
  39. package/src/routes/endpoints/admin.ts +2 -2
  40. package/src/routes/endpoints/sync-rules.ts +1 -0
  41. package/src/routes/router.ts +7 -1
  42. package/src/storage/BucketStorage.ts +18 -10
  43. package/src/storage/MongoBucketStorage.ts +1 -3
  44. package/src/storage/mongo/MongoBucketBatch.ts +1 -0
  45. package/src/storage/mongo/MongoSyncBucketStorage.ts +5 -3
  46. package/src/util/protocol-types.ts +1 -1
  47. package/test/src/compacting.test.ts +13 -15
  48. package/test/src/data_storage.test.ts +56 -56
  49. package/test/src/sync.test.ts +10 -9
  50. package/tsconfig.tsbuildinfo +1 -1
@@ -9,6 +9,7 @@ import * as util from '../../util/util-index.js';
9
9
  import {
10
10
  BucketDataBatchOptions,
11
11
  BucketStorageBatch,
12
+ Checkpoint,
12
13
  CompactOptions,
13
14
  DEFAULT_DOCUMENT_BATCH_LIMIT,
14
15
  DEFAULT_DOCUMENT_CHUNK_LIMIT_BYTES,
@@ -107,15 +108,16 @@ export class MongoSyncBucketStorage
107
108
  return this.parsedSyncRulesCache;
108
109
  }
109
110
 
110
- async getCheckpoint() {
111
+ async getCheckpoint(): Promise<Checkpoint> {
111
112
  const doc = await this.db.sync_rules.findOne(
112
113
  { _id: this.group_id },
113
114
  {
114
- projection: { last_checkpoint: 1 }
115
+ projection: { last_checkpoint: 1, last_checkpoint_lsn: 1 }
115
116
  }
116
117
  );
117
118
  return {
118
- checkpoint: util.timestampToOpId(doc?.last_checkpoint ?? 0n)
119
+ checkpoint: util.timestampToOpId(doc?.last_checkpoint ?? 0n),
120
+ lsn: doc?.last_checkpoint_lsn ?? null
119
121
  };
120
122
  }
121
123
 
@@ -88,7 +88,7 @@ export type StreamingSyncLine =
88
88
  */
89
89
  export type OpId = string;
90
90
 
91
- export interface Checkpoint {
91
+ interface Checkpoint {
92
92
  last_op_id: OpId;
93
93
  write_checkpoint?: OpId;
94
94
  buckets: BucketChecksum[];
@@ -1,11 +1,9 @@
1
+ import { SaveOperationTag } from '@/storage/BucketStorage.js';
1
2
  import { MongoCompactOptions } from '@/storage/mongo/MongoCompactor.js';
2
- import { SqlSyncRules } from '@powersync/service-sync-rules';
3
3
  import { describe, expect, test } from 'vitest';
4
4
  import { validateCompactedBucket } from './bucket_validation.js';
5
5
  import { oneFromAsync } from './stream_utils.js';
6
- import { BATCH_OPTIONS, makeTestTable, MONGO_STORAGE_FACTORY, rid, testRules, ZERO_LSN } from './util.js';
7
- import { ParseSyncRulesOptions, PersistedSyncRulesContent, StartBatchOptions } from '@/storage/BucketStorage.js';
8
- import { getUuidReplicaIdentityBson } from '@/util/util-index.js';
6
+ import { BATCH_OPTIONS, makeTestTable, MONGO_STORAGE_FACTORY, rid, testRules } from './util.js';
9
7
 
10
8
  const TEST_TABLE = makeTestTable('test', ['id']);
11
9
 
@@ -31,7 +29,7 @@ bucket_definitions:
31
29
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
32
30
  await batch.save({
33
31
  sourceTable: TEST_TABLE,
34
- tag: 'insert',
32
+ tag: SaveOperationTag.INSERT,
35
33
  after: {
36
34
  id: 't1'
37
35
  },
@@ -40,7 +38,7 @@ bucket_definitions:
40
38
 
41
39
  await batch.save({
42
40
  sourceTable: TEST_TABLE,
43
- tag: 'insert',
41
+ tag: SaveOperationTag.INSERT,
44
42
  after: {
45
43
  id: 't2'
46
44
  },
@@ -49,7 +47,7 @@ bucket_definitions:
49
47
 
50
48
  await batch.save({
51
49
  sourceTable: TEST_TABLE,
52
- tag: 'update',
50
+ tag: SaveOperationTag.UPDATE,
53
51
  after: {
54
52
  id: 't2'
55
53
  },
@@ -128,7 +126,7 @@ bucket_definitions:
128
126
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
129
127
  await batch.save({
130
128
  sourceTable: TEST_TABLE,
131
- tag: 'insert',
129
+ tag: SaveOperationTag.INSERT,
132
130
  after: {
133
131
  id: 't1'
134
132
  },
@@ -137,7 +135,7 @@ bucket_definitions:
137
135
 
138
136
  await batch.save({
139
137
  sourceTable: TEST_TABLE,
140
- tag: 'insert',
138
+ tag: SaveOperationTag.INSERT,
141
139
  after: {
142
140
  id: 't2'
143
141
  },
@@ -146,7 +144,7 @@ bucket_definitions:
146
144
 
147
145
  await batch.save({
148
146
  sourceTable: TEST_TABLE,
149
- tag: 'delete',
147
+ tag: SaveOperationTag.DELETE,
150
148
  before: {
151
149
  id: 't1'
152
150
  },
@@ -155,7 +153,7 @@ bucket_definitions:
155
153
 
156
154
  await batch.save({
157
155
  sourceTable: TEST_TABLE,
158
- tag: 'update',
156
+ tag: SaveOperationTag.UPDATE,
159
157
  after: {
160
158
  id: 't2'
161
159
  },
@@ -233,7 +231,7 @@ bucket_definitions:
233
231
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
234
232
  await batch.save({
235
233
  sourceTable: TEST_TABLE,
236
- tag: 'insert',
234
+ tag: SaveOperationTag.INSERT,
237
235
  after: {
238
236
  id: 't1'
239
237
  },
@@ -242,7 +240,7 @@ bucket_definitions:
242
240
 
243
241
  await batch.save({
244
242
  sourceTable: TEST_TABLE,
245
- tag: 'insert',
243
+ tag: SaveOperationTag.INSERT,
246
244
  after: {
247
245
  id: 't2'
248
246
  },
@@ -251,7 +249,7 @@ bucket_definitions:
251
249
 
252
250
  await batch.save({
253
251
  sourceTable: TEST_TABLE,
254
- tag: 'delete',
252
+ tag: SaveOperationTag.DELETE,
255
253
  before: {
256
254
  id: 't1'
257
255
  },
@@ -265,7 +263,7 @@ bucket_definitions:
265
263
  const result2 = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
266
264
  await batch.save({
267
265
  sourceTable: TEST_TABLE,
268
- tag: 'delete',
266
+ tag: SaveOperationTag.DELETE,
269
267
  before: {
270
268
  id: 't2'
271
269
  },
@@ -1,5 +1,4 @@
1
- import { BucketDataBatchOptions } from '@/storage/BucketStorage.js';
2
- import { getUuidReplicaIdentityBson } from '@/util/util-index.js';
1
+ import { BucketDataBatchOptions, SaveOperationTag } from '@/storage/BucketStorage.js';
3
2
  import { RequestParameters } from '@powersync/service-sync-rules';
4
3
  import { describe, expect, test } from 'vitest';
5
4
  import { fromAsync, oneFromAsync } from './stream_utils.js';
@@ -14,6 +13,7 @@ import {
14
13
  StorageFactory,
15
14
  testRules
16
15
  } from './util.js';
16
+ import { getUuidReplicaIdentityBson } from '@/util/util-index.js';
17
17
 
18
18
  const TEST_TABLE = makeTestTable('test', ['id']);
19
19
 
@@ -36,7 +36,7 @@ bucket_definitions:
36
36
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
37
37
  await batch.save({
38
38
  sourceTable: TEST_TABLE,
39
- tag: 'insert',
39
+ tag: SaveOperationTag.INSERT,
40
40
  after: {
41
41
  id: 't2',
42
42
  id1: 'user3',
@@ -48,7 +48,7 @@ bucket_definitions:
48
48
 
49
49
  await batch.save({
50
50
  sourceTable: TEST_TABLE,
51
- tag: 'insert',
51
+ tag: SaveOperationTag.INSERT,
52
52
  after: {
53
53
  id: 't1',
54
54
  id1: 'user1',
@@ -83,7 +83,7 @@ bucket_definitions:
83
83
  const result1 = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
84
84
  await batch.save({
85
85
  sourceTable: TEST_TABLE,
86
- tag: 'insert',
86
+ tag: SaveOperationTag.INSERT,
87
87
  after: {
88
88
  id: 'user1',
89
89
  group_id: 'group1'
@@ -94,7 +94,7 @@ bucket_definitions:
94
94
  const result2 = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
95
95
  await batch.save({
96
96
  sourceTable: TEST_TABLE,
97
- tag: 'insert',
97
+ tag: SaveOperationTag.INSERT,
98
98
  after: {
99
99
  id: 'user1',
100
100
  group_id: 'group2'
@@ -135,7 +135,7 @@ bucket_definitions:
135
135
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
136
136
  await batch.save({
137
137
  sourceTable: TEST_TABLE,
138
- tag: 'insert',
138
+ tag: SaveOperationTag.INSERT,
139
139
  after: {
140
140
  id: 't1',
141
141
  group_id: 'group1',
@@ -179,7 +179,7 @@ bucket_definitions:
179
179
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
180
180
  await batch.save({
181
181
  sourceTable: TEST_TABLE,
182
- tag: 'insert',
182
+ tag: SaveOperationTag.INSERT,
183
183
  after: {
184
184
  id: 't1',
185
185
  group_id: 'group1',
@@ -190,7 +190,7 @@ bucket_definitions:
190
190
 
191
191
  await batch.save({
192
192
  sourceTable: TEST_TABLE,
193
- tag: 'update',
193
+ tag: SaveOperationTag.UPDATE,
194
194
  after: {
195
195
  id: 't1',
196
196
  group_id: 'group1',
@@ -226,7 +226,7 @@ bucket_definitions:
226
226
 
227
227
  await batch.save({
228
228
  sourceTable,
229
- tag: 'insert',
229
+ tag: SaveOperationTag.INSERT,
230
230
  after: {
231
231
  id: 'test1',
232
232
  description: 'test1'
@@ -235,7 +235,7 @@ bucket_definitions:
235
235
  });
236
236
  await batch.save({
237
237
  sourceTable,
238
- tag: 'delete',
238
+ tag: SaveOperationTag.DELETE,
239
239
  beforeReplicaId: rid('test1')
240
240
  });
241
241
  });
@@ -289,7 +289,7 @@ bucket_definitions:
289
289
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
290
290
  await batch.save({
291
291
  sourceTable: WORKSPACE_TABLE,
292
- tag: 'insert',
292
+ tag: SaveOperationTag.INSERT,
293
293
  after: {
294
294
  id: 'workspace1',
295
295
  userId: 'u1'
@@ -339,7 +339,7 @@ bucket_definitions:
339
339
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
340
340
  await batch.save({
341
341
  sourceTable: WORKSPACE_TABLE,
342
- tag: 'insert',
342
+ tag: SaveOperationTag.INSERT,
343
343
  after: {
344
344
  id: 'workspace1',
345
345
  visibility: 'public'
@@ -349,7 +349,7 @@ bucket_definitions:
349
349
 
350
350
  await batch.save({
351
351
  sourceTable: WORKSPACE_TABLE,
352
- tag: 'insert',
352
+ tag: SaveOperationTag.INSERT,
353
353
  after: {
354
354
  id: 'workspace2',
355
355
  visibility: 'private'
@@ -359,7 +359,7 @@ bucket_definitions:
359
359
 
360
360
  await batch.save({
361
361
  sourceTable: WORKSPACE_TABLE,
362
- tag: 'insert',
362
+ tag: SaveOperationTag.INSERT,
363
363
  after: {
364
364
  id: 'workspace3',
365
365
  visibility: 'public'
@@ -413,7 +413,7 @@ bucket_definitions:
413
413
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
414
414
  await batch.save({
415
415
  sourceTable: WORKSPACE_TABLE,
416
- tag: 'insert',
416
+ tag: SaveOperationTag.INSERT,
417
417
  after: {
418
418
  id: 'workspace1',
419
419
  visibility: 'public'
@@ -423,7 +423,7 @@ bucket_definitions:
423
423
 
424
424
  await batch.save({
425
425
  sourceTable: WORKSPACE_TABLE,
426
- tag: 'insert',
426
+ tag: SaveOperationTag.INSERT,
427
427
  after: {
428
428
  id: 'workspace2',
429
429
  visibility: 'private'
@@ -433,7 +433,7 @@ bucket_definitions:
433
433
 
434
434
  await batch.save({
435
435
  sourceTable: WORKSPACE_TABLE,
436
- tag: 'insert',
436
+ tag: SaveOperationTag.INSERT,
437
437
  after: {
438
438
  id: 'workspace3',
439
439
  user_id: 'u1',
@@ -444,7 +444,7 @@ bucket_definitions:
444
444
 
445
445
  await batch.save({
446
446
  sourceTable: WORKSPACE_TABLE,
447
- tag: 'insert',
447
+ tag: SaveOperationTag.INSERT,
448
448
  after: {
449
449
  id: 'workspace4',
450
450
  user_id: 'u2',
@@ -501,7 +501,7 @@ bucket_definitions:
501
501
  const result = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
502
502
  await batch.save({
503
503
  sourceTable,
504
- tag: 'insert',
504
+ tag: SaveOperationTag.INSERT,
505
505
  after: {
506
506
  id: 'test1',
507
507
  client_id: 'client1a',
@@ -511,7 +511,7 @@ bucket_definitions:
511
511
  });
512
512
  await batch.save({
513
513
  sourceTable,
514
- tag: 'update',
514
+ tag: SaveOperationTag.UPDATE,
515
515
  after: {
516
516
  id: 'test1',
517
517
  client_id: 'client1b',
@@ -522,7 +522,7 @@ bucket_definitions:
522
522
 
523
523
  await batch.save({
524
524
  sourceTable,
525
- tag: 'insert',
525
+ tag: SaveOperationTag.INSERT,
526
526
  after: {
527
527
  id: 'test2',
528
528
  client_id: 'client2',
@@ -564,7 +564,7 @@ bucket_definitions:
564
564
 
565
565
  await batch.save({
566
566
  sourceTable,
567
- tag: 'insert',
567
+ tag: SaveOperationTag.INSERT,
568
568
  after: {
569
569
  id: 'test1',
570
570
  description: 'test1'
@@ -578,7 +578,7 @@ bucket_definitions:
578
578
 
579
579
  await batch.save({
580
580
  sourceTable,
581
- tag: 'delete',
581
+ tag: SaveOperationTag.DELETE,
582
582
  beforeReplicaId: rid('test1')
583
583
  });
584
584
  });
@@ -588,7 +588,7 @@ bucket_definitions:
588
588
 
589
589
  await batch.save({
590
590
  sourceTable,
591
- tag: 'delete',
591
+ tag: SaveOperationTag.DELETE,
592
592
  beforeReplicaId: rid('test1')
593
593
  });
594
594
  });
@@ -638,7 +638,7 @@ bucket_definitions:
638
638
 
639
639
  await batch.save({
640
640
  sourceTable,
641
- tag: 'insert',
641
+ tag: SaveOperationTag.INSERT,
642
642
  after: {
643
643
  id: 'test1',
644
644
  description: 'test1'
@@ -652,7 +652,7 @@ bucket_definitions:
652
652
 
653
653
  await batch.save({
654
654
  sourceTable,
655
- tag: 'update',
655
+ tag: SaveOperationTag.UPDATE,
656
656
  after: {
657
657
  id: 'test1',
658
658
  description: undefined
@@ -662,7 +662,7 @@ bucket_definitions:
662
662
 
663
663
  await batch.save({
664
664
  sourceTable,
665
- tag: 'update',
665
+ tag: SaveOperationTag.UPDATE,
666
666
  after: {
667
667
  id: 'test1',
668
668
  description: undefined
@@ -672,7 +672,7 @@ bucket_definitions:
672
672
 
673
673
  await batch.save({
674
674
  sourceTable,
675
- tag: 'delete',
675
+ tag: SaveOperationTag.DELETE,
676
676
  beforeReplicaId: rid('test1')
677
677
  });
678
678
  });
@@ -682,7 +682,7 @@ bucket_definitions:
682
682
 
683
683
  await batch.save({
684
684
  sourceTable,
685
- tag: 'update',
685
+ tag: SaveOperationTag.UPDATE,
686
686
  after: {
687
687
  id: 'test1',
688
688
  description: undefined
@@ -692,7 +692,7 @@ bucket_definitions:
692
692
 
693
693
  await batch.save({
694
694
  sourceTable,
695
- tag: 'update',
695
+ tag: SaveOperationTag.UPDATE,
696
696
  after: {
697
697
  id: 'test1',
698
698
  description: undefined
@@ -702,7 +702,7 @@ bucket_definitions:
702
702
 
703
703
  await batch.save({
704
704
  sourceTable,
705
- tag: 'delete',
705
+ tag: SaveOperationTag.DELETE,
706
706
  beforeReplicaId: rid('test1')
707
707
  });
708
708
  });
@@ -755,7 +755,7 @@ bucket_definitions:
755
755
  await storage.startBatch(BATCH_OPTIONS, async (batch) => {
756
756
  await batch.save({
757
757
  sourceTable: TEST_TABLE,
758
- tag: 'insert',
758
+ tag: SaveOperationTag.INSERT,
759
759
  after: {
760
760
  id: 't2',
761
761
  id1: 'user3',
@@ -799,7 +799,7 @@ bucket_definitions:
799
799
 
800
800
  await batch.save({
801
801
  sourceTable,
802
- tag: 'insert',
802
+ tag: SaveOperationTag.INSERT,
803
803
  after: {
804
804
  id: 'test1',
805
805
  description: 'test1a'
@@ -809,7 +809,7 @@ bucket_definitions:
809
809
 
810
810
  await batch.save({
811
811
  sourceTable,
812
- tag: 'insert',
812
+ tag: SaveOperationTag.INSERT,
813
813
  after: {
814
814
  id: 'test2',
815
815
  description: 'test2a'
@@ -826,7 +826,7 @@ bucket_definitions:
826
826
  // b
827
827
  await batch.save({
828
828
  sourceTable,
829
- tag: 'insert',
829
+ tag: SaveOperationTag.INSERT,
830
830
  after: {
831
831
  id: 'test1',
832
832
  description: 'test1b'
@@ -836,7 +836,7 @@ bucket_definitions:
836
836
 
837
837
  await batch.save({
838
838
  sourceTable,
839
- tag: 'update',
839
+ tag: SaveOperationTag.UPDATE,
840
840
  before: {
841
841
  id: 'test1'
842
842
  },
@@ -850,7 +850,7 @@ bucket_definitions:
850
850
 
851
851
  await batch.save({
852
852
  sourceTable,
853
- tag: 'update',
853
+ tag: SaveOperationTag.UPDATE,
854
854
  before: {
855
855
  id: 'test2'
856
856
  },
@@ -866,7 +866,7 @@ bucket_definitions:
866
866
  // c
867
867
  await batch.save({
868
868
  sourceTable,
869
- tag: 'update',
869
+ tag: SaveOperationTag.UPDATE,
870
870
  after: {
871
871
  id: 'test2',
872
872
  description: 'test2c'
@@ -877,7 +877,7 @@ bucket_definitions:
877
877
  // d
878
878
  await batch.save({
879
879
  sourceTable,
880
- tag: 'insert',
880
+ tag: SaveOperationTag.INSERT,
881
881
  after: {
882
882
  id: 'test4',
883
883
  description: 'test4d'
@@ -887,7 +887,7 @@ bucket_definitions:
887
887
 
888
888
  await batch.save({
889
889
  sourceTable,
890
- tag: 'update',
890
+ tag: SaveOperationTag.UPDATE,
891
891
  before: {
892
892
  id: 'test4'
893
893
  },
@@ -953,7 +953,7 @@ bucket_definitions:
953
953
  const result1 = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
954
954
  await batch.save({
955
955
  sourceTable,
956
- tag: 'insert',
956
+ tag: SaveOperationTag.INSERT,
957
957
  after: {
958
958
  id: 'test1',
959
959
  description: 'test1a'
@@ -968,7 +968,7 @@ bucket_definitions:
968
968
  // Unchanged, but has a before id
969
969
  await batch.save({
970
970
  sourceTable,
971
- tag: 'update',
971
+ tag: SaveOperationTag.UPDATE,
972
972
  before: {
973
973
  id: 'test1',
974
974
  description: 'test1a'
@@ -986,7 +986,7 @@ bucket_definitions:
986
986
  // Delete
987
987
  await batch.save({
988
988
  sourceTable,
989
- tag: 'delete',
989
+ tag: SaveOperationTag.DELETE,
990
990
  before: {
991
991
  id: 'test1',
992
992
  description: 'test1b'
@@ -1058,7 +1058,7 @@ bucket_definitions:
1058
1058
  const result1 = await storage.startBatch(BATCH_OPTIONS, async (batch) => {
1059
1059
  await batch.save({
1060
1060
  sourceTable,
1061
- tag: 'insert',
1061
+ tag: SaveOperationTag.INSERT,
1062
1062
  after: {
1063
1063
  id: 'test1',
1064
1064
  description: 'test1a'
@@ -1073,7 +1073,7 @@ bucket_definitions:
1073
1073
  // Unchanged, but has a before id
1074
1074
  await batch.save({
1075
1075
  sourceTable,
1076
- tag: 'update',
1076
+ tag: SaveOperationTag.UPDATE,
1077
1077
  before: {
1078
1078
  id: 'test1',
1079
1079
  description: 'test1a'
@@ -1091,7 +1091,7 @@ bucket_definitions:
1091
1091
  // Delete
1092
1092
  await batch.save({
1093
1093
  sourceTable,
1094
- tag: 'delete',
1094
+ tag: SaveOperationTag.DELETE,
1095
1095
  before: {
1096
1096
  id: 'test1',
1097
1097
  description: 'test1a'
@@ -1154,7 +1154,7 @@ bucket_definitions:
1154
1154
 
1155
1155
  await batch.save({
1156
1156
  sourceTable,
1157
- tag: 'insert',
1157
+ tag: SaveOperationTag.INSERT,
1158
1158
  after: {
1159
1159
  id: 'test1',
1160
1160
  description: 'test1'
@@ -1164,7 +1164,7 @@ bucket_definitions:
1164
1164
 
1165
1165
  await batch.save({
1166
1166
  sourceTable,
1167
- tag: 'insert',
1167
+ tag: SaveOperationTag.INSERT,
1168
1168
  after: {
1169
1169
  id: 'large1',
1170
1170
  description: largeDescription
@@ -1175,7 +1175,7 @@ bucket_definitions:
1175
1175
  // Large enough to split the returned batch
1176
1176
  await batch.save({
1177
1177
  sourceTable,
1178
- tag: 'insert',
1178
+ tag: SaveOperationTag.INSERT,
1179
1179
  after: {
1180
1180
  id: 'large2',
1181
1181
  description: largeDescription
@@ -1185,7 +1185,7 @@ bucket_definitions:
1185
1185
 
1186
1186
  await batch.save({
1187
1187
  sourceTable,
1188
- tag: 'insert',
1188
+ tag: SaveOperationTag.INSERT,
1189
1189
  after: {
1190
1190
  id: 'test3',
1191
1191
  description: 'test3'
@@ -1252,7 +1252,7 @@ bucket_definitions:
1252
1252
 
1253
1253
  await batch.save({
1254
1254
  sourceTable,
1255
- tag: 'insert',
1255
+ tag: SaveOperationTag.INSERT,
1256
1256
  after: {
1257
1257
  id: 'test1',
1258
1258
  description: 'test1'
@@ -1262,7 +1262,7 @@ bucket_definitions:
1262
1262
 
1263
1263
  await batch.save({
1264
1264
  sourceTable,
1265
- tag: 'insert',
1265
+ tag: SaveOperationTag.INSERT,
1266
1266
  after: {
1267
1267
  id: 'large1',
1268
1268
  description: largeDescription
@@ -1273,7 +1273,7 @@ bucket_definitions:
1273
1273
  // Large enough to split the returned batch
1274
1274
  await batch.save({
1275
1275
  sourceTable,
1276
- tag: 'insert',
1276
+ tag: SaveOperationTag.INSERT,
1277
1277
  after: {
1278
1278
  id: 'large2',
1279
1279
  description: largeDescription
@@ -1283,7 +1283,7 @@ bucket_definitions:
1283
1283
 
1284
1284
  await batch.save({
1285
1285
  sourceTable,
1286
- tag: 'insert',
1286
+ tag: SaveOperationTag.INSERT,
1287
1287
  after: {
1288
1288
  id: 'test3',
1289
1289
  description: 'test3'
@@ -1346,7 +1346,7 @@ bucket_definitions:
1346
1346
  for (let i = 1; i <= 6; i++) {
1347
1347
  await batch.save({
1348
1348
  sourceTable,
1349
- tag: 'insert',
1349
+ tag: SaveOperationTag.INSERT,
1350
1350
  after: {
1351
1351
  id: `test${i}`,
1352
1352
  description: `test${i}`