@powersync/service-module-mongodb-storage 0.0.0-dev-20260313100403 → 0.0.0-dev-20260515144844

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 (207) hide show
  1. package/CHANGELOG.md +96 -8
  2. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js +1 -1
  3. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js.map +1 -1
  4. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js +3 -3
  5. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js.map +1 -1
  6. package/dist/migrations/db/migrations/1770213298299-storage-version.js.map +1 -1
  7. package/dist/storage/MongoBucketStorage.d.ts +5 -3
  8. package/dist/storage/MongoBucketStorage.js +50 -36
  9. package/dist/storage/MongoBucketStorage.js.map +1 -1
  10. package/dist/storage/MongoReportStorage.d.ts +3 -3
  11. package/dist/storage/MongoReportStorage.js +5 -5
  12. package/dist/storage/MongoReportStorage.js.map +1 -1
  13. package/dist/storage/implementation/BucketDefinitionMapping.d.ts +17 -0
  14. package/dist/storage/implementation/BucketDefinitionMapping.js +58 -0
  15. package/dist/storage/implementation/BucketDefinitionMapping.js.map +1 -0
  16. package/dist/storage/implementation/MongoBucketBatch.d.ts +16 -14
  17. package/dist/storage/implementation/MongoBucketBatch.js +80 -115
  18. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
  19. package/dist/storage/implementation/MongoBucketBatchShared.d.ts +5 -0
  20. package/dist/storage/implementation/MongoBucketBatchShared.js +8 -0
  21. package/dist/storage/implementation/MongoBucketBatchShared.js.map +1 -0
  22. package/dist/storage/implementation/MongoChecksums.d.ts +28 -17
  23. package/dist/storage/implementation/MongoChecksums.js +13 -72
  24. package/dist/storage/implementation/MongoChecksums.js.map +1 -1
  25. package/dist/storage/implementation/MongoCompactor.d.ts +98 -52
  26. package/dist/storage/implementation/MongoCompactor.js +256 -295
  27. package/dist/storage/implementation/MongoCompactor.js.map +1 -1
  28. package/dist/storage/implementation/MongoParameterCompactor.d.ts +11 -6
  29. package/dist/storage/implementation/MongoParameterCompactor.js +24 -9
  30. package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
  31. package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +14 -0
  32. package/dist/storage/implementation/MongoPersistedSyncRules.js +64 -0
  33. package/dist/storage/implementation/MongoPersistedSyncRules.js.map +1 -0
  34. package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +3 -0
  35. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +9 -0
  36. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +1 -1
  37. package/dist/storage/implementation/MongoStorageProvider.js +1 -1
  38. package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
  39. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +49 -30
  40. package/dist/storage/implementation/MongoSyncBucketStorage.js +100 -456
  41. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
  42. package/dist/storage/implementation/MongoSyncRulesLock.d.ts +5 -3
  43. package/dist/storage/implementation/MongoSyncRulesLock.js +12 -10
  44. package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
  45. package/dist/storage/implementation/MongoWriteCheckpointAPI.js +1 -1
  46. package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
  47. package/dist/storage/implementation/OperationBatch.js +1 -1
  48. package/dist/storage/implementation/common/BucketDataDoc.d.ts +35 -0
  49. package/dist/storage/implementation/common/BucketDataDoc.js +2 -0
  50. package/dist/storage/implementation/common/BucketDataDoc.js.map +1 -0
  51. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.d.ts +13 -0
  52. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js +2 -0
  53. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js.map +1 -0
  54. package/dist/storage/implementation/common/PersistedBatch.d.ts +108 -0
  55. package/dist/storage/implementation/common/PersistedBatch.js +237 -0
  56. package/dist/storage/implementation/common/PersistedBatch.js.map +1 -0
  57. package/dist/storage/implementation/common/SingleBucketStore.d.ts +54 -0
  58. package/dist/storage/implementation/common/SingleBucketStore.js +3 -0
  59. package/dist/storage/implementation/common/SingleBucketStore.js.map +1 -0
  60. package/dist/storage/implementation/common/SourceRecordStore.d.ts +36 -0
  61. package/dist/storage/implementation/common/SourceRecordStore.js +2 -0
  62. package/dist/storage/implementation/common/SourceRecordStore.js.map +1 -0
  63. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.d.ts +27 -0
  64. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js +57 -0
  65. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js.map +1 -0
  66. package/dist/storage/implementation/createMongoSyncBucketStorage.d.ts +7 -0
  67. package/dist/storage/implementation/createMongoSyncBucketStorage.js +9 -0
  68. package/dist/storage/implementation/createMongoSyncBucketStorage.js.map +1 -0
  69. package/dist/storage/implementation/db.d.ts +34 -34
  70. package/dist/storage/implementation/db.js +78 -98
  71. package/dist/storage/implementation/db.js.map +1 -1
  72. package/dist/storage/implementation/models.d.ts +65 -36
  73. package/dist/storage/implementation/models.js +21 -2
  74. package/dist/storage/implementation/models.js.map +1 -1
  75. package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +13 -0
  76. package/dist/storage/implementation/v1/MongoBucketBatchV1.js +22 -0
  77. package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -0
  78. package/dist/storage/implementation/v1/MongoChecksumsV1.d.ts +12 -0
  79. package/dist/storage/implementation/v1/MongoChecksumsV1.js +56 -0
  80. package/dist/storage/implementation/v1/MongoChecksumsV1.js.map +1 -0
  81. package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +23 -0
  82. package/dist/storage/implementation/v1/MongoCompactorV1.js +52 -0
  83. package/dist/storage/implementation/v1/MongoCompactorV1.js.map +1 -0
  84. package/dist/storage/implementation/v1/MongoParameterCompactorV1.d.ts +9 -0
  85. package/dist/storage/implementation/v1/MongoParameterCompactorV1.js +20 -0
  86. package/dist/storage/implementation/v1/MongoParameterCompactorV1.js.map +1 -0
  87. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +41 -0
  88. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +283 -0
  89. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -0
  90. package/dist/storage/implementation/v1/PersistedBatchV1.d.ts +26 -0
  91. package/dist/storage/implementation/v1/PersistedBatchV1.js +183 -0
  92. package/dist/storage/implementation/v1/PersistedBatchV1.js.map +1 -0
  93. package/dist/storage/implementation/v1/SingleBucketStoreV1.d.ts +18 -0
  94. package/dist/storage/implementation/v1/SingleBucketStoreV1.js +57 -0
  95. package/dist/storage/implementation/v1/SingleBucketStoreV1.js.map +1 -0
  96. package/dist/storage/implementation/v1/SourceRecordStoreV1.d.ts +19 -0
  97. package/dist/storage/implementation/v1/SourceRecordStoreV1.js +105 -0
  98. package/dist/storage/implementation/v1/SourceRecordStoreV1.js.map +1 -0
  99. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.d.ts +12 -0
  100. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js +20 -0
  101. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js.map +1 -0
  102. package/dist/storage/implementation/v1/models.d.ts +34 -0
  103. package/dist/storage/implementation/v1/models.js +37 -0
  104. package/dist/storage/implementation/v1/models.js.map +1 -0
  105. package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +13 -0
  106. package/dist/storage/implementation/v3/MongoBucketBatchV3.js +34 -0
  107. package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -0
  108. package/dist/storage/implementation/v3/MongoChecksumsV3.d.ts +15 -0
  109. package/dist/storage/implementation/v3/MongoChecksumsV3.js +84 -0
  110. package/dist/storage/implementation/v3/MongoChecksumsV3.js.map +1 -0
  111. package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +23 -0
  112. package/dist/storage/implementation/v3/MongoCompactorV3.js +68 -0
  113. package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -0
  114. package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +9 -0
  115. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +18 -0
  116. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +1 -0
  117. package/dist/storage/implementation/v3/MongoParameterLookupV3.d.ts +5 -0
  118. package/dist/storage/implementation/v3/MongoParameterLookupV3.js +9 -0
  119. package/dist/storage/implementation/v3/MongoParameterLookupV3.js.map +1 -0
  120. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +41 -0
  121. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +407 -0
  122. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -0
  123. package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +29 -0
  124. package/dist/storage/implementation/v3/PersistedBatchV3.js +259 -0
  125. package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -0
  126. package/dist/storage/implementation/v3/SingleBucketStoreV3.d.ts +18 -0
  127. package/dist/storage/implementation/v3/SingleBucketStoreV3.js +48 -0
  128. package/dist/storage/implementation/v3/SingleBucketStoreV3.js.map +1 -0
  129. package/dist/storage/implementation/v3/SourceRecordStoreV3.d.ts +22 -0
  130. package/dist/storage/implementation/v3/SourceRecordStoreV3.js +164 -0
  131. package/dist/storage/implementation/v3/SourceRecordStoreV3.js.map +1 -0
  132. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +21 -0
  133. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +71 -0
  134. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -0
  135. package/dist/storage/implementation/v3/models.d.ts +43 -0
  136. package/dist/storage/implementation/v3/models.js +34 -0
  137. package/dist/storage/implementation/v3/models.js.map +1 -0
  138. package/dist/storage/storage-index.d.ts +8 -5
  139. package/dist/storage/storage-index.js +8 -5
  140. package/dist/storage/storage-index.js.map +1 -1
  141. package/dist/utils/util.d.ts +11 -4
  142. package/dist/utils/util.js +25 -4
  143. package/dist/utils/util.js.map +1 -1
  144. package/package.json +9 -9
  145. package/src/migrations/db/migrations/1688556755264-initial-sync-rules.ts +1 -1
  146. package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +7 -7
  147. package/src/migrations/db/migrations/1770213298299-storage-version.ts +1 -1
  148. package/src/storage/MongoBucketStorage.ts +97 -62
  149. package/src/storage/MongoReportStorage.ts +7 -7
  150. package/src/storage/implementation/BucketDefinitionMapping.ts +72 -0
  151. package/src/storage/implementation/MongoBucketBatch.ts +110 -144
  152. package/src/storage/implementation/MongoBucketBatchShared.ts +11 -0
  153. package/src/storage/implementation/MongoChecksums.ts +53 -76
  154. package/src/storage/implementation/MongoCompactor.ts +401 -403
  155. package/src/storage/implementation/MongoParameterCompactor.ts +51 -25
  156. package/src/storage/implementation/MongoPersistedSyncRules.ts +76 -0
  157. package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +18 -1
  158. package/src/storage/implementation/MongoStorageProvider.ts +1 -1
  159. package/src/storage/implementation/MongoSyncBucketStorage.ts +190 -457
  160. package/src/storage/implementation/MongoSyncRulesLock.ts +12 -14
  161. package/src/storage/implementation/MongoWriteCheckpointAPI.ts +4 -2
  162. package/src/storage/implementation/OperationBatch.ts +1 -1
  163. package/src/storage/implementation/common/BucketDataDoc.ts +37 -0
  164. package/src/storage/implementation/common/MongoSyncBucketStorageContext.ts +15 -0
  165. package/src/storage/implementation/common/PersistedBatch.ts +364 -0
  166. package/src/storage/implementation/common/SingleBucketStore.ts +63 -0
  167. package/src/storage/implementation/common/SourceRecordStore.ts +49 -0
  168. package/src/storage/implementation/common/VersionedPowerSyncMongoBase.ts +80 -0
  169. package/src/storage/implementation/createMongoSyncBucketStorage.ts +25 -0
  170. package/src/storage/implementation/db.ts +107 -128
  171. package/src/storage/implementation/models.ts +86 -40
  172. package/src/storage/implementation/v1/MongoBucketBatchV1.ts +32 -0
  173. package/src/storage/implementation/v1/MongoChecksumsV1.ts +75 -0
  174. package/src/storage/implementation/v1/MongoCompactorV1.ts +93 -0
  175. package/src/storage/implementation/v1/MongoParameterCompactorV1.ts +26 -0
  176. package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +448 -0
  177. package/src/storage/implementation/v1/PersistedBatchV1.ts +230 -0
  178. package/src/storage/implementation/v1/SingleBucketStoreV1.ts +74 -0
  179. package/src/storage/implementation/v1/SourceRecordStoreV1.ts +156 -0
  180. package/src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts +28 -0
  181. package/src/storage/implementation/v1/models.ts +84 -0
  182. package/src/storage/implementation/v3/MongoBucketBatchV3.ts +44 -0
  183. package/src/storage/implementation/v3/MongoChecksumsV3.ts +120 -0
  184. package/src/storage/implementation/v3/MongoCompactorV3.ts +107 -0
  185. package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +24 -0
  186. package/src/storage/implementation/v3/MongoParameterLookupV3.ts +12 -0
  187. package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +550 -0
  188. package/src/storage/implementation/v3/PersistedBatchV3.ts +318 -0
  189. package/src/storage/implementation/v3/SingleBucketStoreV3.ts +68 -0
  190. package/src/storage/implementation/v3/SourceRecordStoreV3.ts +226 -0
  191. package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +112 -0
  192. package/src/storage/implementation/v3/models.ts +96 -0
  193. package/src/storage/storage-index.ts +8 -5
  194. package/src/utils/util.ts +36 -7
  195. package/test/src/__snapshots__/{client-connections-storage.test.ts.snap → connection-report-storage.test.ts.snap} +68 -68
  196. package/test/src/__snapshots__/storage_sync.test.ts.snap +282 -0
  197. package/test/src/{client-connections-storage.test.ts → connection-report-storage.test.ts} +4 -4
  198. package/test/src/setup.ts +1 -1
  199. package/test/src/storage.test.ts +2 -2
  200. package/test/src/storage_compacting.test.ts +94 -3
  201. package/test/src/storage_sync.test.ts +351 -5
  202. package/test/tsconfig.json +0 -1
  203. package/tsconfig.tsbuildinfo +1 -1
  204. package/dist/storage/implementation/PersistedBatch.d.ts +0 -71
  205. package/dist/storage/implementation/PersistedBatch.js +0 -354
  206. package/dist/storage/implementation/PersistedBatch.js.map +0 -1
  207. package/src/storage/implementation/PersistedBatch.ts +0 -432
@@ -1,5 +1,99 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
+ exports[`sync - mongodb > storage v1 > can override priority when subscribing to stream 1`] = `
4
+ [
5
+ {
6
+ "checkpoint": {
7
+ "buckets": [
8
+ {
9
+ "bucket": "1#todos|0["a"]",
10
+ "checksum": -1712802421,
11
+ "count": 1,
12
+ "priority": 0,
13
+ "subscriptions": [
14
+ {
15
+ "sub": 0,
16
+ },
17
+ {
18
+ "sub": 1,
19
+ },
20
+ ],
21
+ },
22
+ {
23
+ "bucket": "1#todos|0["b"]",
24
+ "checksum": -1291414318,
25
+ "count": 1,
26
+ "priority": 3,
27
+ "subscriptions": [
28
+ {
29
+ "sub": 1,
30
+ },
31
+ ],
32
+ },
33
+ ],
34
+ "last_op_id": "2",
35
+ "streams": [
36
+ {
37
+ "errors": [],
38
+ "is_default": false,
39
+ "name": "todos",
40
+ },
41
+ ],
42
+ "write_checkpoint": undefined,
43
+ },
44
+ },
45
+ {
46
+ "data": {
47
+ "after": "0",
48
+ "bucket": "1#todos|0["a"]",
49
+ "data": [
50
+ {
51
+ "checksum": 2582164875,
52
+ "data": "{"id":"a","description":"Test 1"}",
53
+ "object_id": "a",
54
+ "object_type": "test",
55
+ "op": "PUT",
56
+ "op_id": "1",
57
+ "subkey": "e5aa2ddc-1328-58fa-a000-0b5ed31eaf1a",
58
+ },
59
+ ],
60
+ "has_more": false,
61
+ "next_after": "1",
62
+ },
63
+ },
64
+ {
65
+ "partial_checkpoint_complete": {
66
+ "last_op_id": "2",
67
+ "priority": 0,
68
+ },
69
+ },
70
+ {
71
+ "data": {
72
+ "after": "0",
73
+ "bucket": "1#todos|0["b"]",
74
+ "data": [
75
+ {
76
+ "checksum": 3003552978,
77
+ "data": "{"id":"b","description":"Test 2"}",
78
+ "object_id": "b",
79
+ "object_type": "test",
80
+ "op": "PUT",
81
+ "op_id": "2",
82
+ "subkey": "0dfe86bd-d15b-5fd0-9c7b-a31693030ee0",
83
+ },
84
+ ],
85
+ "has_more": false,
86
+ "next_after": "2",
87
+ },
88
+ },
89
+ {
90
+ "checkpoint_complete": {
91
+ "last_op_id": "2",
92
+ },
93
+ },
94
+ ]
95
+ `;
96
+
3
97
  exports[`sync - mongodb > storage v1 > compacting data - invalidate checkpoint 1`] = `
4
98
  [
5
99
  {
@@ -1095,6 +1189,100 @@ exports[`sync - mongodb > storage v1 > sync updates to parameter query only 2`]
1095
1189
  ]
1096
1190
  `;
1097
1191
 
1192
+ exports[`sync - mongodb > storage v2 > can override priority when subscribing to stream 1`] = `
1193
+ [
1194
+ {
1195
+ "checkpoint": {
1196
+ "buckets": [
1197
+ {
1198
+ "bucket": "1#todos|0["a"]",
1199
+ "checksum": -1712802421,
1200
+ "count": 1,
1201
+ "priority": 0,
1202
+ "subscriptions": [
1203
+ {
1204
+ "sub": 0,
1205
+ },
1206
+ {
1207
+ "sub": 1,
1208
+ },
1209
+ ],
1210
+ },
1211
+ {
1212
+ "bucket": "1#todos|0["b"]",
1213
+ "checksum": -1291414318,
1214
+ "count": 1,
1215
+ "priority": 3,
1216
+ "subscriptions": [
1217
+ {
1218
+ "sub": 1,
1219
+ },
1220
+ ],
1221
+ },
1222
+ ],
1223
+ "last_op_id": "2",
1224
+ "streams": [
1225
+ {
1226
+ "errors": [],
1227
+ "is_default": false,
1228
+ "name": "todos",
1229
+ },
1230
+ ],
1231
+ "write_checkpoint": undefined,
1232
+ },
1233
+ },
1234
+ {
1235
+ "data": {
1236
+ "after": "0",
1237
+ "bucket": "1#todos|0["a"]",
1238
+ "data": [
1239
+ {
1240
+ "checksum": 2582164875,
1241
+ "data": "{"id":"a","description":"Test 1"}",
1242
+ "object_id": "a",
1243
+ "object_type": "test",
1244
+ "op": "PUT",
1245
+ "op_id": "1",
1246
+ "subkey": "e5aa2ddc-1328-58fa-a000-0b5ed31eaf1a",
1247
+ },
1248
+ ],
1249
+ "has_more": false,
1250
+ "next_after": "1",
1251
+ },
1252
+ },
1253
+ {
1254
+ "partial_checkpoint_complete": {
1255
+ "last_op_id": "2",
1256
+ "priority": 0,
1257
+ },
1258
+ },
1259
+ {
1260
+ "data": {
1261
+ "after": "0",
1262
+ "bucket": "1#todos|0["b"]",
1263
+ "data": [
1264
+ {
1265
+ "checksum": 3003552978,
1266
+ "data": "{"id":"b","description":"Test 2"}",
1267
+ "object_id": "b",
1268
+ "object_type": "test",
1269
+ "op": "PUT",
1270
+ "op_id": "2",
1271
+ "subkey": "0dfe86bd-d15b-5fd0-9c7b-a31693030ee0",
1272
+ },
1273
+ ],
1274
+ "has_more": false,
1275
+ "next_after": "2",
1276
+ },
1277
+ },
1278
+ {
1279
+ "checkpoint_complete": {
1280
+ "last_op_id": "2",
1281
+ },
1282
+ },
1283
+ ]
1284
+ `;
1285
+
1098
1286
  exports[`sync - mongodb > storage v2 > compacting data - invalidate checkpoint 1`] = `
1099
1287
  [
1100
1288
  {
@@ -2190,6 +2378,100 @@ exports[`sync - mongodb > storage v2 > sync updates to parameter query only 2`]
2190
2378
  ]
2191
2379
  `;
2192
2380
 
2381
+ exports[`sync - mongodb > storage v3 > can override priority when subscribing to stream 1`] = `
2382
+ [
2383
+ {
2384
+ "checkpoint": {
2385
+ "buckets": [
2386
+ {
2387
+ "bucket": "1#todos|0["a"]",
2388
+ "checksum": -1712802421,
2389
+ "count": 1,
2390
+ "priority": 0,
2391
+ "subscriptions": [
2392
+ {
2393
+ "sub": 0,
2394
+ },
2395
+ {
2396
+ "sub": 1,
2397
+ },
2398
+ ],
2399
+ },
2400
+ {
2401
+ "bucket": "1#todos|0["b"]",
2402
+ "checksum": -1291414318,
2403
+ "count": 1,
2404
+ "priority": 3,
2405
+ "subscriptions": [
2406
+ {
2407
+ "sub": 1,
2408
+ },
2409
+ ],
2410
+ },
2411
+ ],
2412
+ "last_op_id": "2",
2413
+ "streams": [
2414
+ {
2415
+ "errors": [],
2416
+ "is_default": false,
2417
+ "name": "todos",
2418
+ },
2419
+ ],
2420
+ "write_checkpoint": undefined,
2421
+ },
2422
+ },
2423
+ {
2424
+ "data": {
2425
+ "after": "0",
2426
+ "bucket": "1#todos|0["a"]",
2427
+ "data": [
2428
+ {
2429
+ "checksum": 2582164875,
2430
+ "data": "{"id":"a","description":"Test 1"}",
2431
+ "object_id": "a",
2432
+ "object_type": "test",
2433
+ "op": "PUT",
2434
+ "op_id": "1",
2435
+ "subkey": "e5aa2ddc-1328-58fa-a000-0b5ed31eaf1a",
2436
+ },
2437
+ ],
2438
+ "has_more": false,
2439
+ "next_after": "1",
2440
+ },
2441
+ },
2442
+ {
2443
+ "partial_checkpoint_complete": {
2444
+ "last_op_id": "2",
2445
+ "priority": 0,
2446
+ },
2447
+ },
2448
+ {
2449
+ "data": {
2450
+ "after": "0",
2451
+ "bucket": "1#todos|0["b"]",
2452
+ "data": [
2453
+ {
2454
+ "checksum": 3003552978,
2455
+ "data": "{"id":"b","description":"Test 2"}",
2456
+ "object_id": "b",
2457
+ "object_type": "test",
2458
+ "op": "PUT",
2459
+ "op_id": "2",
2460
+ "subkey": "0dfe86bd-d15b-5fd0-9c7b-a31693030ee0",
2461
+ },
2462
+ ],
2463
+ "has_more": false,
2464
+ "next_after": "2",
2465
+ },
2466
+ },
2467
+ {
2468
+ "checkpoint_complete": {
2469
+ "last_op_id": "2",
2470
+ },
2471
+ },
2472
+ ]
2473
+ `;
2474
+
2193
2475
  exports[`sync - mongodb > storage v3 > compacting data - invalidate checkpoint 1`] = `
2194
2476
  [
2195
2477
  {
@@ -1,8 +1,8 @@
1
- import { afterAll, beforeAll, describe, expect, it } from 'vitest';
2
- import { INITIALIZED_MONGO_REPORT_STORAGE_FACTORY } from './util.js';
1
+ import { MongoReportStorage } from '@module/storage/MongoReportStorage.js';
3
2
  import { register, ReportUserData } from '@powersync/service-core-tests';
4
3
  import { event_types } from '@powersync/service-types';
5
- import { MongoReportStorage } from '@module/storage/MongoReportStorage.js';
4
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
5
+ import { INITIALIZED_MONGO_REPORT_STORAGE_FACTORY } from './util.js';
6
6
 
7
7
  const userData = register.REPORT_TEST_USERS;
8
8
  const dates = register.REPORT_TEST_DATES;
@@ -128,7 +128,7 @@ describe('Connection reporting storage', async () => {
128
128
  await factory.deleteOldConnectionData({
129
129
  date: dates.weekAgo
130
130
  });
131
- const connection = await factory.getClientConnectionsSummary({
131
+ const connection = await factory.getClientConnectionReports({
132
132
  start: dates.monthAgo,
133
133
  end: dates.now
134
134
  });
package/test/src/setup.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { container } from '@powersync/lib-services-framework';
2
- import { beforeAll, beforeEach } from 'vitest';
3
2
  import { METRICS_HELPER } from '@powersync/service-core-tests';
3
+ import { beforeAll, beforeEach } from 'vitest';
4
4
 
5
5
  beforeAll(async () => {
6
6
  // Executes for every test file
@@ -1,8 +1,8 @@
1
+ import { mongoTestStorageFactoryGenerator } from '@module/utils/test-utils.js';
1
2
  import { register } from '@powersync/service-core-tests';
2
3
  import { describe } from 'vitest';
3
- import { INITIALIZED_MONGO_STORAGE_FACTORY, TEST_STORAGE_VERSIONS } from './util.js';
4
4
  import { env } from './env.js';
5
- import { mongoTestStorageFactoryGenerator } from '@module/utils/test-utils.js';
5
+ import { INITIALIZED_MONGO_STORAGE_FACTORY, TEST_STORAGE_VERSIONS } from './util.js';
6
6
 
7
7
  for (let storageVersion of TEST_STORAGE_VERSIONS) {
8
8
  describe(`Mongo Sync Bucket Storage - Parameters - v${storageVersion}`, () =>
@@ -1,3 +1,4 @@
1
+ import { VersionedPowerSyncMongoV3 } from '@module/storage/implementation/v3/VersionedPowerSyncMongoV3.js';
1
2
  import { storage, SyncRulesBucketStorage, updateSyncRulesFromYaml } from '@powersync/service-core';
2
3
  import { bucketRequest, register, test_utils } from '@powersync/service-core-tests';
3
4
  import { describe, expect, test } from 'vitest';
@@ -63,9 +64,16 @@ bucket_definitions:
63
64
 
64
65
  test('full compact', async () => {
65
66
  const { bucketStorage, checkpoint, factory, syncRules } = await setup();
67
+ const storageDb = bucketStorage.db;
66
68
 
67
69
  // Simulate bucket_state from old version not being available
68
- await factory.db.bucket_state.deleteMany({});
70
+ if (storageDb.storageConfig.incrementalReprocessing) {
71
+ // This should actually never happen on V3, but we test this anyway.
72
+ // Can remove this if it causes issues in the future.
73
+ await (storageDb as VersionedPowerSyncMongoV3).bucketStateV3(bucketStorage.group_id).deleteMany({});
74
+ } else {
75
+ await factory.db.bucket_state.deleteMany({});
76
+ }
69
77
 
70
78
  await bucketStorage.compact({
71
79
  clearBatchLimit: 200,
@@ -94,10 +102,10 @@ bucket_definitions:
94
102
  });
95
103
 
96
104
  test('populatePersistentChecksumCache', async () => {
97
- // Populate old sync rules version
105
+ // Populate old replication stream
98
106
  const { factory } = await setup();
99
107
 
100
- // Now populate another version (bucket definition name changed)
108
+ // Now populate another replication stream (bucket definition name changed)
101
109
  const syncRules = await factory.updateSyncRules(
102
110
  updateSyncRulesFromYaml(`
103
111
  bucket_definitions:
@@ -107,6 +115,7 @@ bucket_definitions:
107
115
  `)
108
116
  );
109
117
  const bucketStorage = factory.getInstance(syncRules);
118
+ const storageDb = (bucketStorage as any).db;
110
119
 
111
120
  await populate(bucketStorage, 2);
112
121
  const { checkpoint } = await bucketStorage.getCheckpoint();
@@ -146,6 +155,88 @@ bucket_definitions:
146
155
  count: 1
147
156
  });
148
157
  });
158
+
159
+ test('dirty bucket discovery handles bigint bucket_state bytes', async () => {
160
+ await using factory = await INITIALIZED_MONGO_STORAGE_FACTORY.factory();
161
+ const syncRules = await factory.updateSyncRules(
162
+ updateSyncRulesFromYaml(`
163
+ bucket_definitions:
164
+ global:
165
+ data: [select * from test]
166
+ `)
167
+ );
168
+ const bucketStorage = factory.getInstance(syncRules);
169
+ const storageDb = bucketStorage.db;
170
+
171
+ // This simulates bucket_state created using bigint bytes.
172
+ // This typically happens when buckets get very large (> 2GiB). We don't want to create that much
173
+ // data in the tests, so we directly insert the bucket_state here.
174
+ if (storageDb.storageConfig.incrementalReprocessing) {
175
+ const bucketStateCollection = (storageDb as VersionedPowerSyncMongoV3).bucketStateV3(bucketStorage.group_id);
176
+ await bucketStateCollection.insertOne({
177
+ _id: {
178
+ d: '1',
179
+ b: 'global[]'
180
+ },
181
+ last_op: 5n,
182
+ compacted_state: {
183
+ op_id: 3n,
184
+ count: 3,
185
+ checksum: 0n,
186
+ bytes: 7n
187
+ },
188
+ estimate_since_compact: {
189
+ count: 2,
190
+ bytes: 5n
191
+ }
192
+ });
193
+ } else {
194
+ await factory.db.bucket_state.insertOne({
195
+ _id: {
196
+ g: bucketStorage.group_id,
197
+ b: 'global[]'
198
+ },
199
+ last_op: 5n,
200
+ compacted_state: {
201
+ op_id: 3n,
202
+ count: 3,
203
+ checksum: 0n,
204
+ bytes: 7n
205
+ },
206
+ estimate_since_compact: {
207
+ count: 2,
208
+ bytes: 5n
209
+ }
210
+ });
211
+ }
212
+
213
+ // This test uses a couple of "internal" APIs of the compactor.
214
+ const compactor = bucketStorage.createMongoCompactor({ maxOpId: 5n });
215
+
216
+ const dirtyBuckets = compactor.dirtyBucketBatches({
217
+ minBucketChanges: 1,
218
+ minChangeRatio: 0.39
219
+ });
220
+ const firstBatch = await dirtyBuckets.next();
221
+
222
+ expect(firstBatch.done).toBe(false);
223
+ expect(firstBatch.value).toHaveLength(1);
224
+ expect(firstBatch.value[0].bucket).toBe('global[]');
225
+ expect(firstBatch.value[0].estimatedCount).toBe(5);
226
+ expect(typeof firstBatch.value[0].estimatedCount).toBe('number');
227
+ expect(firstBatch.value[0].dirtyRatio).toBeCloseTo(5 / 12);
228
+
229
+ const checksumBuckets = await (compactor as any).dirtyBucketBatchForChecksums({
230
+ minBucketChanges: 1
231
+ });
232
+ expect(checksumBuckets).toEqual([
233
+ {
234
+ bucket: 'global[]',
235
+ definitionId: storageDb.storageConfig.incrementalReprocessing ? '1' : null,
236
+ estimatedCount: 5
237
+ }
238
+ ]);
239
+ });
149
240
  });
150
241
  });
151
242