@powersync/service-module-mongodb-storage 0.15.4 → 0.16.0

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 (193) hide show
  1. package/CHANGELOG.md +35 -0
  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 +2 -2
  5. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js.map +1 -1
  6. package/dist/storage/MongoBucketStorage.d.ts +2 -2
  7. package/dist/storage/MongoBucketStorage.js +47 -34
  8. package/dist/storage/MongoBucketStorage.js.map +1 -1
  9. package/dist/storage/implementation/BucketDefinitionMapping.d.ts +17 -0
  10. package/dist/storage/implementation/BucketDefinitionMapping.js +58 -0
  11. package/dist/storage/implementation/BucketDefinitionMapping.js.map +1 -0
  12. package/dist/storage/implementation/MongoBucketBatch.d.ts +16 -14
  13. package/dist/storage/implementation/MongoBucketBatch.js +80 -115
  14. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
  15. package/dist/storage/implementation/MongoBucketBatchShared.d.ts +5 -0
  16. package/dist/storage/implementation/MongoBucketBatchShared.js +8 -0
  17. package/dist/storage/implementation/MongoBucketBatchShared.js.map +1 -0
  18. package/dist/storage/implementation/MongoChecksums.d.ts +28 -17
  19. package/dist/storage/implementation/MongoChecksums.js +13 -72
  20. package/dist/storage/implementation/MongoChecksums.js.map +1 -1
  21. package/dist/storage/implementation/MongoCompactor.d.ts +98 -58
  22. package/dist/storage/implementation/MongoCompactor.js +229 -296
  23. package/dist/storage/implementation/MongoCompactor.js.map +1 -1
  24. package/dist/storage/implementation/MongoParameterCompactor.d.ts +11 -6
  25. package/dist/storage/implementation/MongoParameterCompactor.js +11 -8
  26. package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
  27. package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +14 -0
  28. package/dist/storage/implementation/MongoPersistedSyncRules.js +64 -0
  29. package/dist/storage/implementation/MongoPersistedSyncRules.js.map +1 -0
  30. package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +3 -0
  31. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +9 -0
  32. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +1 -1
  33. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +47 -29
  34. package/dist/storage/implementation/MongoSyncBucketStorage.js +94 -387
  35. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
  36. package/dist/storage/implementation/MongoSyncRulesLock.d.ts +5 -3
  37. package/dist/storage/implementation/MongoSyncRulesLock.js +12 -10
  38. package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
  39. package/dist/storage/implementation/MongoWriteCheckpointAPI.js +1 -1
  40. package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
  41. package/dist/storage/implementation/OperationBatch.js +1 -1
  42. package/dist/storage/implementation/common/BucketDataDoc.d.ts +35 -0
  43. package/dist/storage/implementation/common/BucketDataDoc.js +2 -0
  44. package/dist/storage/implementation/common/BucketDataDoc.js.map +1 -0
  45. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.d.ts +13 -0
  46. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js +2 -0
  47. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js.map +1 -0
  48. package/dist/storage/implementation/common/PersistedBatch.d.ts +108 -0
  49. package/dist/storage/implementation/common/PersistedBatch.js +237 -0
  50. package/dist/storage/implementation/common/PersistedBatch.js.map +1 -0
  51. package/dist/storage/implementation/common/SingleBucketStore.d.ts +54 -0
  52. package/dist/storage/implementation/common/SingleBucketStore.js +3 -0
  53. package/dist/storage/implementation/common/SingleBucketStore.js.map +1 -0
  54. package/dist/storage/implementation/common/SourceRecordStore.d.ts +36 -0
  55. package/dist/storage/implementation/common/SourceRecordStore.js +2 -0
  56. package/dist/storage/implementation/common/SourceRecordStore.js.map +1 -0
  57. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.d.ts +27 -0
  58. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js +57 -0
  59. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js.map +1 -0
  60. package/dist/storage/implementation/createMongoSyncBucketStorage.d.ts +7 -0
  61. package/dist/storage/implementation/createMongoSyncBucketStorage.js +9 -0
  62. package/dist/storage/implementation/createMongoSyncBucketStorage.js.map +1 -0
  63. package/dist/storage/implementation/db.d.ts +32 -35
  64. package/dist/storage/implementation/db.js +77 -99
  65. package/dist/storage/implementation/db.js.map +1 -1
  66. package/dist/storage/implementation/models.d.ts +62 -33
  67. package/dist/storage/implementation/models.js +20 -1
  68. package/dist/storage/implementation/models.js.map +1 -1
  69. package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +13 -0
  70. package/dist/storage/implementation/v1/MongoBucketBatchV1.js +22 -0
  71. package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -0
  72. package/dist/storage/implementation/v1/MongoChecksumsV1.d.ts +12 -0
  73. package/dist/storage/implementation/v1/MongoChecksumsV1.js +56 -0
  74. package/dist/storage/implementation/v1/MongoChecksumsV1.js.map +1 -0
  75. package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +23 -0
  76. package/dist/storage/implementation/v1/MongoCompactorV1.js +52 -0
  77. package/dist/storage/implementation/v1/MongoCompactorV1.js.map +1 -0
  78. package/dist/storage/implementation/v1/MongoParameterCompactorV1.d.ts +9 -0
  79. package/dist/storage/implementation/v1/MongoParameterCompactorV1.js +20 -0
  80. package/dist/storage/implementation/v1/MongoParameterCompactorV1.js.map +1 -0
  81. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +41 -0
  82. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +283 -0
  83. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -0
  84. package/dist/storage/implementation/v1/PersistedBatchV1.d.ts +26 -0
  85. package/dist/storage/implementation/v1/PersistedBatchV1.js +183 -0
  86. package/dist/storage/implementation/v1/PersistedBatchV1.js.map +1 -0
  87. package/dist/storage/implementation/v1/SingleBucketStoreV1.d.ts +18 -0
  88. package/dist/storage/implementation/v1/SingleBucketStoreV1.js +57 -0
  89. package/dist/storage/implementation/v1/SingleBucketStoreV1.js.map +1 -0
  90. package/dist/storage/implementation/v1/SourceRecordStoreV1.d.ts +19 -0
  91. package/dist/storage/implementation/v1/SourceRecordStoreV1.js +105 -0
  92. package/dist/storage/implementation/v1/SourceRecordStoreV1.js.map +1 -0
  93. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.d.ts +12 -0
  94. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js +20 -0
  95. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js.map +1 -0
  96. package/dist/storage/implementation/v1/models.d.ts +34 -0
  97. package/dist/storage/implementation/v1/models.js +37 -0
  98. package/dist/storage/implementation/v1/models.js.map +1 -0
  99. package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +13 -0
  100. package/dist/storage/implementation/v3/MongoBucketBatchV3.js +34 -0
  101. package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -0
  102. package/dist/storage/implementation/v3/MongoChecksumsV3.d.ts +15 -0
  103. package/dist/storage/implementation/v3/MongoChecksumsV3.js +84 -0
  104. package/dist/storage/implementation/v3/MongoChecksumsV3.js.map +1 -0
  105. package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +23 -0
  106. package/dist/storage/implementation/v3/MongoCompactorV3.js +68 -0
  107. package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -0
  108. package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +9 -0
  109. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +18 -0
  110. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +1 -0
  111. package/dist/storage/implementation/v3/MongoParameterLookupV3.d.ts +5 -0
  112. package/dist/storage/implementation/v3/MongoParameterLookupV3.js +9 -0
  113. package/dist/storage/implementation/v3/MongoParameterLookupV3.js.map +1 -0
  114. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +41 -0
  115. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +407 -0
  116. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -0
  117. package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +29 -0
  118. package/dist/storage/implementation/v3/PersistedBatchV3.js +259 -0
  119. package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -0
  120. package/dist/storage/implementation/v3/SingleBucketStoreV3.d.ts +18 -0
  121. package/dist/storage/implementation/v3/SingleBucketStoreV3.js +48 -0
  122. package/dist/storage/implementation/v3/SingleBucketStoreV3.js.map +1 -0
  123. package/dist/storage/implementation/v3/SourceRecordStoreV3.d.ts +22 -0
  124. package/dist/storage/implementation/v3/SourceRecordStoreV3.js +164 -0
  125. package/dist/storage/implementation/v3/SourceRecordStoreV3.js.map +1 -0
  126. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +21 -0
  127. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +71 -0
  128. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -0
  129. package/dist/storage/implementation/v3/models.d.ts +43 -0
  130. package/dist/storage/implementation/v3/models.js +34 -0
  131. package/dist/storage/implementation/v3/models.js.map +1 -0
  132. package/dist/storage/storage-index.d.ts +6 -3
  133. package/dist/storage/storage-index.js +6 -3
  134. package/dist/storage/storage-index.js.map +1 -1
  135. package/dist/utils/util.d.ts +10 -3
  136. package/dist/utils/util.js +24 -3
  137. package/dist/utils/util.js.map +1 -1
  138. package/package.json +9 -9
  139. package/src/migrations/db/migrations/1688556755264-initial-sync-rules.ts +1 -1
  140. package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +6 -6
  141. package/src/storage/MongoBucketStorage.ts +92 -59
  142. package/src/storage/implementation/BucketDefinitionMapping.ts +72 -0
  143. package/src/storage/implementation/MongoBucketBatch.ts +110 -144
  144. package/src/storage/implementation/MongoBucketBatchShared.ts +11 -0
  145. package/src/storage/implementation/MongoChecksums.ts +52 -75
  146. package/src/storage/implementation/MongoCompactor.ts +374 -404
  147. package/src/storage/implementation/MongoParameterCompactor.ts +37 -24
  148. package/src/storage/implementation/MongoPersistedSyncRules.ts +76 -0
  149. package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +17 -0
  150. package/src/storage/implementation/MongoSyncBucketStorage.ts +181 -455
  151. package/src/storage/implementation/MongoSyncRulesLock.ts +11 -13
  152. package/src/storage/implementation/MongoWriteCheckpointAPI.ts +3 -1
  153. package/src/storage/implementation/OperationBatch.ts +1 -1
  154. package/src/storage/implementation/common/BucketDataDoc.ts +37 -0
  155. package/src/storage/implementation/common/MongoSyncBucketStorageContext.ts +15 -0
  156. package/src/storage/implementation/common/PersistedBatch.ts +364 -0
  157. package/src/storage/implementation/common/SingleBucketStore.ts +63 -0
  158. package/src/storage/implementation/common/SourceRecordStore.ts +49 -0
  159. package/src/storage/implementation/common/VersionedPowerSyncMongoBase.ts +80 -0
  160. package/src/storage/implementation/createMongoSyncBucketStorage.ts +25 -0
  161. package/src/storage/implementation/db.ts +105 -129
  162. package/src/storage/implementation/models.ts +82 -36
  163. package/src/storage/implementation/v1/MongoBucketBatchV1.ts +32 -0
  164. package/src/storage/implementation/v1/MongoChecksumsV1.ts +75 -0
  165. package/src/storage/implementation/v1/MongoCompactorV1.ts +93 -0
  166. package/src/storage/implementation/v1/MongoParameterCompactorV1.ts +26 -0
  167. package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +448 -0
  168. package/src/storage/implementation/v1/PersistedBatchV1.ts +230 -0
  169. package/src/storage/implementation/v1/SingleBucketStoreV1.ts +74 -0
  170. package/src/storage/implementation/v1/SourceRecordStoreV1.ts +156 -0
  171. package/src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts +28 -0
  172. package/src/storage/implementation/v1/models.ts +84 -0
  173. package/src/storage/implementation/v3/MongoBucketBatchV3.ts +44 -0
  174. package/src/storage/implementation/v3/MongoChecksumsV3.ts +120 -0
  175. package/src/storage/implementation/v3/MongoCompactorV3.ts +107 -0
  176. package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +24 -0
  177. package/src/storage/implementation/v3/MongoParameterLookupV3.ts +12 -0
  178. package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +550 -0
  179. package/src/storage/implementation/v3/PersistedBatchV3.ts +318 -0
  180. package/src/storage/implementation/v3/SingleBucketStoreV3.ts +68 -0
  181. package/src/storage/implementation/v3/SourceRecordStoreV3.ts +226 -0
  182. package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +112 -0
  183. package/src/storage/implementation/v3/models.ts +96 -0
  184. package/src/storage/storage-index.ts +6 -3
  185. package/src/utils/util.ts +34 -5
  186. package/test/src/storage_compacting.test.ts +57 -29
  187. package/test/src/storage_sync.test.ts +351 -5
  188. package/test/tsconfig.json +0 -1
  189. package/tsconfig.tsbuildinfo +1 -1
  190. package/dist/storage/implementation/PersistedBatch.d.ts +0 -71
  191. package/dist/storage/implementation/PersistedBatch.js +0 -354
  192. package/dist/storage/implementation/PersistedBatch.js.map +0 -1
  193. package/src/storage/implementation/PersistedBatch.ts +0 -432
@@ -0,0 +1,18 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { InternalOpId } from '@powersync/service-core';
3
+ import { BucketDataDoc, BucketKey } from '../common/BucketDataDoc.js';
4
+ import { BucketDataDocumentGeneric, BucketDataDocumentGenericId, SingleBucketStore } from '../common/SingleBucketStore.js';
5
+ import { BucketDataProperties } from '../models.js';
6
+ import { VersionedPowerSyncMongoV1 } from './VersionedPowerSyncMongoV1.js';
7
+ export declare class SingleBucketStoreV1 implements SingleBucketStore {
8
+ private db;
9
+ readonly key: BucketKey;
10
+ readonly collection: mongo.Collection<BucketDataDocumentGeneric>;
11
+ constructor(db: VersionedPowerSyncMongoV1, key: BucketKey);
12
+ docId(o: InternalOpId): BucketDataDocumentGenericId;
13
+ get minId(): BucketDataDocumentGenericId;
14
+ get maxId(): BucketDataDocumentGenericId;
15
+ toPersistedDocument(source: Omit<BucketDataDoc, 'bucketKey'>): BucketDataDocumentGeneric;
16
+ fromPersistedDocument(doc: BucketDataDocumentGeneric): BucketDataDoc;
17
+ fromPartialPersistedDocument<T extends keyof BucketDataProperties>(doc: Pick<BucketDataDocumentGeneric, '_id' | T>): Pick<BucketDataDoc, 'bucketKey' | 'o' | T>;
18
+ }
@@ -0,0 +1,57 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { serializeBucketDataV1 } from './models.js';
3
+ export class SingleBucketStoreV1 {
4
+ db;
5
+ key;
6
+ collection;
7
+ constructor(db, key) {
8
+ this.db = db;
9
+ this.key = key;
10
+ this.collection = db.bucketDataV1;
11
+ }
12
+ docId(o) {
13
+ // `satisfies BucketDataKeyV1` checks that we use the correct type for V1 storage
14
+ // `as anyt` is to allow casting to the interface virtual type
15
+ return {
16
+ g: this.key.replicationStreamId,
17
+ b: this.key.bucket,
18
+ o
19
+ };
20
+ }
21
+ get minId() {
22
+ return {
23
+ g: this.key.replicationStreamId,
24
+ b: this.key.bucket,
25
+ o: new mongo.MinKey()
26
+ };
27
+ }
28
+ get maxId() {
29
+ return {
30
+ g: this.key.replicationStreamId,
31
+ b: this.key.bucket,
32
+ o: new mongo.MaxKey()
33
+ };
34
+ }
35
+ toPersistedDocument(source) {
36
+ return serializeBucketDataV1({ bucketKey: this.key, ...source });
37
+ }
38
+ fromPersistedDocument(doc) {
39
+ const document = doc;
40
+ const { _id, ...rest } = document;
41
+ return {
42
+ bucketKey: this.key,
43
+ o: _id.o,
44
+ ...rest
45
+ };
46
+ }
47
+ fromPartialPersistedDocument(doc) {
48
+ const document = doc;
49
+ const { _id, ...rest } = document;
50
+ return {
51
+ bucketKey: this.key,
52
+ o: _id.o,
53
+ ...rest
54
+ };
55
+ }
56
+ }
57
+ //# sourceMappingURL=SingleBucketStoreV1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleBucketStoreV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/SingleBucketStoreV1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAUvD,OAAO,EAAyC,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE3F,MAAM,OAAO,mBAAmB;IAIpB;IACQ;IAJF,UAAU,CAA8C;IAExE,YACU,EAA6B,EACrB,GAAc;QADtB,OAAE,GAAF,EAAE,CAA2B;QACrB,QAAG,GAAH,GAAG,CAAW;QAE9B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,YAAsE,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,CAAe;QACnB,iFAAiF;QACjF,8DAA8D;QAC9D,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB;YAC/B,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;YAClB,CAAC;SAC+B,CAAC;IACrC,CAAC;IAED,IAAI,KAAK;QACP,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB;YAC/B,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;YAClB,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE;SACf,CAAC;IACX,CAAC;IAED,IAAI,KAAK;QACP,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB;YAC/B,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;YAClB,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE;SACf,CAAC;IACX,CAAC;IAED,mBAAmB,CAAC,MAAwC;QAC1D,OAAO,qBAAqB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAyC,CAAC;IAC3G,CAAC;IAED,qBAAqB,CAAC,GAA8B;QAClD,MAAM,QAAQ,GAAG,GAAsC,CAAC;QACxD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;QAClC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG;YACnB,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAED,4BAA4B,CAC1B,GAA+C;QAE/C,MAAM,QAAQ,GAAG,GAA4C,CAAC;QAC9D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;QAClC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG;YACnB,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,GAAG,IAAI;SACsC,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { Logger } from '@powersync/lib-services-framework';
3
+ import { EvaluatedParameters, EvaluatedRow } from '@powersync/service-sync-rules';
4
+ import * as bson from 'bson';
5
+ import { LoadedSourceRecord, SourceRecordLookupEntry, SourceRecordLookupState, SourceRecordStore } from '../common/SourceRecordStore.js';
6
+ import { VersionedPowerSyncMongoV1 } from './VersionedPowerSyncMongoV1.js';
7
+ export declare class SourceRecordStoreV1 implements SourceRecordStore {
8
+ private readonly db;
9
+ private readonly groupId;
10
+ constructor(db: VersionedPowerSyncMongoV1, groupId: number);
11
+ mapEvaluatedBuckets(evaluated: EvaluatedRow[]): LoadedSourceRecord['buckets'];
12
+ mapParameterLookups(paramEvaluated: EvaluatedParameters[]): SourceRecordLookupState[];
13
+ private createId;
14
+ private createLoadedDocument;
15
+ loadSizes(session: mongo.ClientSession, entries: SourceRecordLookupEntry[]): Promise<Map<string, number>>;
16
+ loadDocuments(session: mongo.ClientSession, entries: SourceRecordLookupEntry[], idsOnly: boolean): Promise<Map<string, LoadedSourceRecord>>;
17
+ loadTruncateBatch(session: mongo.ClientSession, sourceTableId: bson.ObjectId, limit: number): Promise<LoadedSourceRecord[]>;
18
+ postCommitCleanup(_lastCheckpoint: bigint, _logger: Logger): Promise<void>;
19
+ }
@@ -0,0 +1,105 @@
1
+ import { storage } from '@powersync/service-core';
2
+ import { idPrefixFilter } from '../../../utils/util.js';
3
+ import { cacheKey } from '../OperationBatch.js';
4
+ export class SourceRecordStoreV1 {
5
+ db;
6
+ groupId;
7
+ constructor(db, groupId) {
8
+ this.db = db;
9
+ this.groupId = groupId;
10
+ }
11
+ mapEvaluatedBuckets(evaluated) {
12
+ return evaluated.map((entry) => ({
13
+ definitionId: null,
14
+ bucket: entry.bucket,
15
+ table: entry.table,
16
+ id: entry.id
17
+ }));
18
+ }
19
+ mapParameterLookups(paramEvaluated) {
20
+ return paramEvaluated.map((entry) => ({
21
+ indexId: null,
22
+ lookup: storage.serializeLookup(entry.lookup)
23
+ }));
24
+ }
25
+ createId(sourceTableId, replicaId) {
26
+ return {
27
+ g: this.groupId,
28
+ t: sourceTableId,
29
+ k: replicaId
30
+ };
31
+ }
32
+ createLoadedDocument(sourceTableId, id, data, buckets, lookups) {
33
+ return {
34
+ sourceTableId,
35
+ replicaId: id.k,
36
+ data,
37
+ buckets: buckets.map((bucket) => ({
38
+ definitionId: null,
39
+ bucket: bucket.bucket,
40
+ table: bucket.table,
41
+ id: bucket.id
42
+ })),
43
+ lookups: lookups.map((lookup) => ({
44
+ indexId: null,
45
+ lookup
46
+ })),
47
+ cacheKey: cacheKey(sourceTableId, id.k)
48
+ };
49
+ }
50
+ async loadSizes(session, entries) {
51
+ const sizes = new Map();
52
+ const sizeCursor = this.db.sourceRecordsV1.aggregate([
53
+ {
54
+ $match: {
55
+ _id: {
56
+ $in: entries.map((entry) => this.createId(entry.sourceTableId, entry.replicaId))
57
+ }
58
+ }
59
+ },
60
+ {
61
+ $project: {
62
+ _id: 1,
63
+ size: { $bsonSize: '$$ROOT' }
64
+ }
65
+ }
66
+ ], { session });
67
+ for await (const doc of sizeCursor.stream()) {
68
+ sizes.set(cacheKey(doc._id.t, doc._id.k), doc.size);
69
+ }
70
+ return sizes;
71
+ }
72
+ async loadDocuments(session, entries, idsOnly) {
73
+ const documents = new Map();
74
+ const projection = idsOnly ? { _id: 1 } : undefined;
75
+ const cursor = this.db.sourceRecordsV1.find({
76
+ _id: {
77
+ $in: entries.map((entry) => this.createId(entry.sourceTableId, entry.replicaId))
78
+ }
79
+ }, { session, projection });
80
+ for await (const doc of cursor.stream()) {
81
+ const loaded = this.createLoadedDocument(doc._id.t, doc._id, idsOnly ? null : doc.data, idsOnly ? [] : doc.buckets, idsOnly ? [] : doc.lookups);
82
+ documents.set(loaded.cacheKey, loaded);
83
+ }
84
+ return documents;
85
+ }
86
+ async loadTruncateBatch(session, sourceTableId, limit) {
87
+ const cursor = this.db.sourceRecordsV1.find({
88
+ _id: idPrefixFilter({ g: this.groupId, t: sourceTableId }, ['k']),
89
+ pending_delete: { $exists: false }
90
+ }, {
91
+ projection: {
92
+ _id: 1,
93
+ buckets: 1,
94
+ lookups: 1
95
+ },
96
+ limit,
97
+ session
98
+ });
99
+ return (await cursor.toArray()).map((doc) => this.createLoadedDocument(sourceTableId, doc._id, null, doc.buckets, doc.lookups));
100
+ }
101
+ async postCommitCleanup(_lastCheckpoint, _logger) {
102
+ // No-op for V1.
103
+ }
104
+ }
105
+ //# sourceMappingURL=SourceRecordStoreV1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceRecordStoreV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/SourceRecordStoreV1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { BaseVersionedPowerSyncMongo } from '../common/VersionedPowerSyncMongoBase.js';
3
+ import { CommonSourceTableDocument } from '../models.js';
4
+ import { BucketDataDocumentV1, BucketParameterDocument, BucketStateDocumentV1, CurrentDataDocument } from './models.js';
5
+ export declare class VersionedPowerSyncMongoV1 extends BaseVersionedPowerSyncMongo {
6
+ get sourceRecordsV1(): mongo.Collection<CurrentDataDocument>;
7
+ get bucketStateV1(): mongo.Collection<BucketStateDocumentV1>;
8
+ commonSourceTables(_replicationStreamId: number): mongo.Collection<CommonSourceTableDocument>;
9
+ initializeStreamStorage(_replicationStreamId: number): Promise<void>;
10
+ get bucketDataV1(): mongo.Collection<BucketDataDocumentV1>;
11
+ get parameterIndexV1(): mongo.Collection<BucketParameterDocument>;
12
+ }
@@ -0,0 +1,20 @@
1
+ import { BaseVersionedPowerSyncMongo } from '../common/VersionedPowerSyncMongoBase.js';
2
+ export class VersionedPowerSyncMongoV1 extends BaseVersionedPowerSyncMongo {
3
+ get sourceRecordsV1() {
4
+ return this.upstream.current_data;
5
+ }
6
+ get bucketStateV1() {
7
+ return this.upstream.bucket_state;
8
+ }
9
+ commonSourceTables(_replicationStreamId) {
10
+ return this.upstream.source_tables;
11
+ }
12
+ async initializeStreamStorage(_replicationStreamId) { }
13
+ get bucketDataV1() {
14
+ return this.upstream.bucket_data;
15
+ }
16
+ get parameterIndexV1() {
17
+ return this.upstream.bucket_parameters;
18
+ }
19
+ }
20
+ //# sourceMappingURL=VersionedPowerSyncMongoV1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionedPowerSyncMongoV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAIvF,MAAM,OAAO,yBAA0B,SAAQ,2BAA2B;IACxE,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,kBAAkB,CAAC,oBAA4B;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAmE,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,oBAA4B,IAAkB,CAAC;IAE7E,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnC,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,34 @@
1
+ import * as bson from 'bson';
2
+ import { BucketDataDoc } from '../common/BucketDataDoc.js';
3
+ import { BucketDataDocumentBase, BucketParameterDocumentBase, BucketStateDocumentBase, CurrentBucket, SourceKey, SourceTableDocument, TaggedBucketParameterDocument } from '../models.js';
4
+ export interface BucketDataKeyV1 {
5
+ /** group_id */
6
+ g: number;
7
+ /** bucket name */
8
+ b: string;
9
+ /** op_id */
10
+ o: bigint;
11
+ }
12
+ export interface CurrentDataDocument {
13
+ _id: SourceKey;
14
+ data: bson.Binary;
15
+ buckets: CurrentBucket[];
16
+ lookups: bson.Binary[];
17
+ }
18
+ export interface BucketParameterDocument extends BucketParameterDocumentBase<SourceKey> {
19
+ }
20
+ export interface BucketDataDocumentV1 extends BucketDataDocumentBase {
21
+ _id: BucketDataKeyV1;
22
+ }
23
+ export declare function serializeBucketDataV1(document: BucketDataDoc): BucketDataDocumentV1;
24
+ export declare function loadBucketDataDocumentV1(doc: BucketDataDocumentV1): BucketDataDoc;
25
+ export declare function taggedBucketParameterDocumentToV1(document: TaggedBucketParameterDocument): BucketParameterDocument;
26
+ export interface SourceTableDocumentV1 extends SourceTableDocument {
27
+ group_id: number;
28
+ }
29
+ export interface BucketStateDocumentV1 extends BucketStateDocumentBase {
30
+ _id: BucketStateDocumentBase['_id'] & {
31
+ g: number;
32
+ };
33
+ }
34
+ export type BucketStateDocument = BucketStateDocumentV1;
@@ -0,0 +1,37 @@
1
+ import { LEGACY_BUCKET_DATA_DEFINITION_ID } from '../models.js';
2
+ export function serializeBucketDataV1(document) {
3
+ const { bucketKey, o } = document;
4
+ return {
5
+ _id: {
6
+ g: bucketKey.replicationStreamId,
7
+ b: bucketKey.bucket,
8
+ o: o
9
+ },
10
+ // List fields directly, so that we don't accidentally persist any unknown fields
11
+ op: document.op,
12
+ source_table: document.source_table,
13
+ source_key: document.source_key,
14
+ table: document.table,
15
+ row_id: document.row_id,
16
+ checksum: document.checksum,
17
+ data: document.data,
18
+ target_op: document.target_op
19
+ };
20
+ }
21
+ export function loadBucketDataDocumentV1(doc) {
22
+ const { _id, ...rest } = doc;
23
+ return {
24
+ bucketKey: {
25
+ replicationStreamId: _id.g,
26
+ definitionId: LEGACY_BUCKET_DATA_DEFINITION_ID,
27
+ bucket: _id.b
28
+ },
29
+ o: _id.o,
30
+ ...rest
31
+ };
32
+ }
33
+ export function taggedBucketParameterDocumentToV1(document) {
34
+ const { index: _index, ...rest } = document;
35
+ return rest;
36
+ }
37
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/models.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,gCAAgC,EAIjC,MAAM,cAAc,CAAC;AAwBtB,MAAM,UAAU,qBAAqB,CAAC,QAAuB;IAC3D,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC;IAClC,OAAO;QACL,GAAG,EAAE;YACH,CAAC,EAAE,SAAS,CAAC,mBAAmB;YAChC,CAAC,EAAE,SAAS,CAAC,MAAM;YACnB,CAAC,EAAE,CAAC;SACL;QACD,iFAAiF;QACjF,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAyB;IAChE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAC7B,OAAO;QACL,SAAS,EAAE;YACT,mBAAmB,EAAE,GAAG,CAAC,CAAC;YAC1B,YAAY,EAAE,gCAAgC;YAC9C,MAAM,EAAE,GAAG,CAAC,CAAC;SACd;QACD,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,QAAuC;IACvF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC5C,OAAO,IAA+B,CAAC;AACzC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { storage } from '@powersync/service-core';
2
+ import { MongoBucketBatch, MongoBucketBatchOptions } from '../MongoBucketBatch.js';
3
+ import { PersistedBatch } from '../common/PersistedBatch.js';
4
+ import { SourceRecordStore } from '../common/SourceRecordStore.js';
5
+ import { VersionedPowerSyncMongoV3 } from './VersionedPowerSyncMongoV3.js';
6
+ export declare class MongoBucketBatchV3 extends MongoBucketBatch {
7
+ readonly db: VersionedPowerSyncMongoV3;
8
+ private readonly store;
9
+ constructor(options: MongoBucketBatchOptions);
10
+ protected createPersistedBatch(writtenSize: number): PersistedBatch;
11
+ protected get sourceRecordStore(): SourceRecordStore;
12
+ protected cleanupDroppedSourceTables(sourceTables: storage.SourceTable[]): Promise<void>;
13
+ }
@@ -0,0 +1,34 @@
1
+ import * as lib_mongo from '@powersync/lib-service-mongodb';
2
+ import { mongoTableId } from '../../../utils/util.js';
3
+ import { MongoBucketBatch } from '../MongoBucketBatch.js';
4
+ import { PersistedBatchV3 } from './PersistedBatchV3.js';
5
+ import { SourceRecordStoreV3 } from './SourceRecordStoreV3.js';
6
+ export class MongoBucketBatchV3 extends MongoBucketBatch {
7
+ store;
8
+ constructor(options) {
9
+ super(options);
10
+ this.store = new SourceRecordStoreV3(this.db, this.group_id, this.mapping);
11
+ }
12
+ createPersistedBatch(writtenSize) {
13
+ return new PersistedBatchV3(this.db, this.group_id, this.mapping, writtenSize, {
14
+ logger: this.logger
15
+ });
16
+ }
17
+ get sourceRecordStore() {
18
+ return this.store;
19
+ }
20
+ async cleanupDroppedSourceTables(sourceTables) {
21
+ for (const table of sourceTables) {
22
+ await this.db
23
+ .sourceRecordsV3(this.group_id, mongoTableId(table.id))
24
+ .drop()
25
+ .catch((error) => {
26
+ if (lib_mongo.isMongoServerError(error) && error.codeName === 'NamespaceNotFound') {
27
+ return;
28
+ }
29
+ throw error;
30
+ });
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=MongoBucketBatchV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoBucketBatchV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoBucketBatchV3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAA2B,MAAM,wBAAwB,CAAC;AAGnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IAGrC,KAAK,CAAoB;IAE1C,YAAY,OAAgC;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;IAES,oBAAoB,CAAC,WAAmB;QAChD,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE;YAC7E,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED,IAAc,iBAAiB;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAES,KAAK,CAAC,0BAA0B,CAAC,YAAmC;QAC5E,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE;iBACV,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACtD,IAAI,EAAE;iBACN,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,IAAI,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;oBAClF,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { BucketChecksum, FetchPartialBucketChecksum, InternalOpId, PartialChecksumMap } from '@powersync/service-core';
2
+ import { FetchPartialBucketChecksumV3, MongoChecksumOptions, MongoChecksums } from '../MongoChecksums.js';
3
+ import { VersionedPowerSyncMongoV3 } from './VersionedPowerSyncMongoV3.js';
4
+ export declare class MongoChecksumsV3 extends MongoChecksums {
5
+ protected readonly db: VersionedPowerSyncMongoV3;
6
+ private readonly mapping;
7
+ constructor(db: VersionedPowerSyncMongoV3, group_id: number, options: MongoChecksumOptions);
8
+ private normalizeBatch;
9
+ computePartialChecksumsDirectByDefinition(batch: FetchPartialBucketChecksumV3[]): Promise<PartialChecksumMap>;
10
+ protected fetchPreStates(batch: FetchPartialBucketChecksum[]): Promise<Map<string, {
11
+ opId: InternalOpId;
12
+ checksum: BucketChecksum;
13
+ }>>;
14
+ protected computePartialChecksumsInternal(batch: FetchPartialBucketChecksum[]): Promise<PartialChecksumMap>;
15
+ }
@@ -0,0 +1,84 @@
1
+ import { bson } from '@powersync/service-core';
2
+ import { emptyChecksumForRequest, MongoChecksums } from '../MongoChecksums.js';
3
+ export class MongoChecksumsV3 extends MongoChecksums {
4
+ mapping;
5
+ constructor(db, group_id, options) {
6
+ super(db, group_id, options);
7
+ this.mapping = options.mapping;
8
+ }
9
+ normalizeBatch(batch) {
10
+ return batch.map((request) => ({
11
+ bucket: request.bucket,
12
+ definitionId: this.mapping.bucketSourceId(request.source),
13
+ start: request.start,
14
+ end: request.end
15
+ }));
16
+ }
17
+ async computePartialChecksumsDirectByDefinition(batch) {
18
+ const results = new Map();
19
+ const requestsByDefinition = new Map();
20
+ for (const request of batch) {
21
+ const existing = requestsByDefinition.get(request.definitionId) ?? [];
22
+ existing.push(request);
23
+ requestsByDefinition.set(request.definitionId, existing);
24
+ }
25
+ for (const [definitionId, requests] of requestsByDefinition.entries()) {
26
+ const groupResults = await this.computePartialChecksumsForCollection(requests, this.db.bucketDataV3(this.group_id, definitionId), createV3BucketFilter);
27
+ for (const checksum of groupResults.values()) {
28
+ results.set(checksum.bucket, checksum);
29
+ }
30
+ }
31
+ return new Map(batch.map((request) => [request.bucket, results.get(request.bucket) ?? emptyChecksumForRequest(request)]));
32
+ }
33
+ async fetchPreStates(batch) {
34
+ const preFilters = this.normalizeBatch(batch)
35
+ .filter((request) => request.start == null)
36
+ .map((request) => ({
37
+ _id: {
38
+ d: request.definitionId,
39
+ b: request.bucket
40
+ },
41
+ 'compacted_state.op_id': { $exists: true, $lte: request.end }
42
+ }));
43
+ const preStates = new Map();
44
+ if (preFilters.length == 0) {
45
+ return preStates;
46
+ }
47
+ const states = await this.db
48
+ .bucketStateV3(this.group_id)
49
+ .find({
50
+ $or: preFilters
51
+ })
52
+ .toArray();
53
+ for (const state of states) {
54
+ const compactedState = state.compacted_state;
55
+ preStates.set(state._id.b, {
56
+ opId: compactedState.op_id,
57
+ checksum: {
58
+ bucket: state._id.b,
59
+ checksum: Number(compactedState.checksum),
60
+ count: compactedState.count
61
+ }
62
+ });
63
+ }
64
+ return preStates;
65
+ }
66
+ async computePartialChecksumsInternal(batch) {
67
+ return this.computePartialChecksumsDirectByDefinition(this.normalizeBatch(batch));
68
+ }
69
+ }
70
+ function createV3BucketFilter(request) {
71
+ return {
72
+ _id: {
73
+ $gt: {
74
+ b: request.bucket,
75
+ o: request.start ?? new bson.MinKey()
76
+ },
77
+ $lte: {
78
+ b: request.bucket,
79
+ o: request.end
80
+ }
81
+ }
82
+ };
83
+ }
84
+ //# sourceMappingURL=MongoChecksumsV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoChecksumsV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoChecksumsV3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { storage } from '@powersync/service-core';
3
+ import { BucketDefinitionId } from '../BucketDefinitionMapping.js';
4
+ import { SingleBucketStore } from '../common/SingleBucketStore.js';
5
+ import { BucketStateDocumentBase } from '../models.js';
6
+ import { DirtyBucket, MongoCompactor } from '../MongoCompactor.js';
7
+ import type { MongoSyncBucketStorageV3 } from './MongoSyncBucketStorageV3.js';
8
+ import { VersionedPowerSyncMongoV3 } from './VersionedPowerSyncMongoV3.js';
9
+ export declare class MongoCompactorV3 extends MongoCompactor {
10
+ protected readonly db: VersionedPowerSyncMongoV3;
11
+ protected readonly storage: MongoSyncBucketStorageV3;
12
+ dirtyBucketBatches(options: {
13
+ minBucketChanges: number;
14
+ minChangeRatio: number;
15
+ }): AsyncGenerator<DirtyBucket[]>;
16
+ dirtyBucketBatchForChecksums(options: {
17
+ minBucketChanges: number;
18
+ }): Promise<DirtyBucket[]>;
19
+ protected writeBucketStateUpdates(): Promise<void>;
20
+ protected computeChecksumsForBuckets(buckets: Pick<DirtyBucket, 'bucket' | 'definitionId'>[]): Promise<storage.PartialChecksumMap>;
21
+ protected bucketStateFilter(bucket: string, definitionId: BucketDefinitionId | null): mongo.Filter<BucketStateDocumentBase>;
22
+ protected getBucketDataContext(bucket: string, definitionId: BucketDefinitionId | null): Promise<SingleBucketStore | null>;
23
+ }
@@ -0,0 +1,68 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { ReplicationAssertionError, ServiceAssertionError } from '@powersync/lib-services-framework';
3
+ import { MongoCompactor } from '../MongoCompactor.js';
4
+ import { SingleBucketStoreV3 } from './SingleBucketStoreV3.js';
5
+ export class MongoCompactorV3 extends MongoCompactor {
6
+ async *dirtyBucketBatches(options) {
7
+ if (options.minBucketChanges <= 0) {
8
+ throw new ReplicationAssertionError('minBucketChanges must be >= 1');
9
+ }
10
+ // Same scan strategy as V1, but with the V3 bucket_state key shape.
11
+ yield* this.dirtyBucketBatchesForCollection(this.db.bucketStateV3(this.group_id), { d: new mongo.MinKey(), b: new mongo.MinKey() }, { d: new mongo.MaxKey(), b: new mongo.MaxKey() }, options, (bucketState) => bucketState._id.d);
12
+ }
13
+ async dirtyBucketBatchForChecksums(options) {
14
+ if (options.minBucketChanges <= 0) {
15
+ throw new ReplicationAssertionError('minBucketChanges must be >= 1');
16
+ }
17
+ return this.dirtyBucketBatchForChecksumsForCollection(this.db.bucketStateV3(this.group_id), {
18
+ 'estimate_since_compact.count': { $gte: options.minBucketChanges }
19
+ }, (bucketState) => bucketState._id.d);
20
+ }
21
+ async writeBucketStateUpdates() {
22
+ await this.db
23
+ .bucketStateV3(this.group_id)
24
+ .bulkWrite(this.bucketStateUpdates, { ordered: false });
25
+ }
26
+ async computeChecksumsForBuckets(buckets) {
27
+ return this.storage.checksums.computePartialChecksumsDirectByDefinition(buckets.map(({ bucket, definitionId }) => {
28
+ if (definitionId == null) {
29
+ throw new ServiceAssertionError(`Missing definitionId for V3 bucket checksum update on bucket ${bucket}`);
30
+ }
31
+ return {
32
+ bucket,
33
+ definitionId,
34
+ end: this.maxOpId
35
+ };
36
+ }));
37
+ }
38
+ bucketStateFilter(bucket, definitionId) {
39
+ if (definitionId == null) {
40
+ throw new ServiceAssertionError(`Missing definitionId for V3 bucket state filter on bucket ${bucket}`);
41
+ }
42
+ return {
43
+ _id: {
44
+ d: definitionId,
45
+ b: bucket
46
+ }
47
+ };
48
+ }
49
+ async getBucketDataContext(bucket, definitionId) {
50
+ if (definitionId == null) {
51
+ // Not the _most_ efficient approach, but this is not used often
52
+ const allDefinitionIds = this.storage.mapping.allBucketDefinitionIds();
53
+ if (allDefinitionIds.length == 0) {
54
+ return null;
55
+ }
56
+ const potentialIds = allDefinitionIds.map((definitionId) => ({ d: definitionId, b: bucket }));
57
+ const bucketState = await this.db.bucketStateV3(this.group_id).findOne({
58
+ _id: { $in: potentialIds }
59
+ });
60
+ if (bucketState == null) {
61
+ return null;
62
+ }
63
+ definitionId = bucketState._id.d;
64
+ }
65
+ return new SingleBucketStoreV3(this.db, { bucket, definitionId, replicationStreamId: this.group_id });
66
+ }
67
+ }
68
+ //# sourceMappingURL=MongoCompactorV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoCompactorV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoCompactorV3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { MongoParameterCompactor } from '../MongoParameterCompactor.js';
3
+ import { VersionedPowerSyncMongoV3 } from './VersionedPowerSyncMongoV3.js';
4
+ export declare class MongoParameterCompactorV3 extends MongoParameterCompactor {
5
+ protected readonly db: VersionedPowerSyncMongoV3;
6
+ protected getCollections(): Promise<mongo.Collection<mongo.Document>[]>;
7
+ protected collectionFilter(): mongo.Document;
8
+ protected deleteFilter(doc: mongo.Document): mongo.Document;
9
+ }
@@ -0,0 +1,18 @@
1
+ import { MongoParameterCompactor } from '../MongoParameterCompactor.js';
2
+ export class MongoParameterCompactorV3 extends MongoParameterCompactor {
3
+ async getCollections() {
4
+ const collections = await this.db.listParameterIndexCollectionsV3(this.group_id);
5
+ return collections.map((collection) => collection.collection);
6
+ }
7
+ collectionFilter() {
8
+ return {};
9
+ }
10
+ deleteFilter(doc) {
11
+ return {
12
+ lookup: doc.lookup,
13
+ _id: { $lte: doc._id },
14
+ key: doc.key
15
+ };
16
+ }
17
+ }
18
+ //# sourceMappingURL=MongoParameterCompactorV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoParameterCompactorV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoParameterCompactorV3.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,MAAM,OAAO,yBAA0B,SAAQ,uBAAuB;IAG1D,KAAK,CAAC,cAAc;QAC5B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjF,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAyD,CAAC,CAAC;IAC/G,CAAC;IAES,gBAAgB;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,YAAY,CAAC,GAAmB;QACxC,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE;YACtB,GAAG,EAAE,GAAG,CAAC,GAAG;SACb,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import { ScopedParameterLookup, SqliteJsonValue } from '@powersync/service-sync-rules';
2
+ import * as bson from 'bson';
3
+ import { ParameterIndexId } from '../BucketDefinitionMapping.js';
4
+ export declare function serializeParameterLookupV3(lookup: ScopedParameterLookup): bson.Binary;
5
+ export declare function deserializeParameterLookupV3(lookup: bson.Binary, indexId: ParameterIndexId): SqliteJsonValue[];