@powersync/service-module-mongodb-storage 0.15.4 → 0.17.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 (202) hide show
  1. package/CHANGELOG.md +69 -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 +8 -6
  7. package/dist/storage/MongoBucketStorage.js +153 -66
  8. package/dist/storage/MongoBucketStorage.js.map +1 -1
  9. package/dist/storage/implementation/BucketDefinitionMapping.d.ts +15 -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/CheckpointState.d.ts +20 -0
  13. package/dist/storage/implementation/CheckpointState.js +31 -0
  14. package/dist/storage/implementation/CheckpointState.js.map +1 -0
  15. package/dist/storage/implementation/MongoBucketBatch.d.ts +48 -35
  16. package/dist/storage/implementation/MongoBucketBatch.js +118 -379
  17. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
  18. package/dist/storage/implementation/MongoBucketBatchShared.d.ts +5 -0
  19. package/dist/storage/implementation/MongoBucketBatchShared.js +8 -0
  20. package/dist/storage/implementation/MongoBucketBatchShared.js.map +1 -0
  21. package/dist/storage/implementation/MongoChecksums.d.ts +29 -17
  22. package/dist/storage/implementation/MongoChecksums.js +13 -72
  23. package/dist/storage/implementation/MongoChecksums.js.map +1 -1
  24. package/dist/storage/implementation/MongoCompactor.d.ts +98 -58
  25. package/dist/storage/implementation/MongoCompactor.js +229 -296
  26. package/dist/storage/implementation/MongoCompactor.js.map +1 -1
  27. package/dist/storage/implementation/MongoParameterCompactor.d.ts +11 -6
  28. package/dist/storage/implementation/MongoParameterCompactor.js +11 -8
  29. package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
  30. package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +14 -0
  31. package/dist/storage/implementation/MongoPersistedSyncRules.js +67 -0
  32. package/dist/storage/implementation/MongoPersistedSyncRules.js.map +1 -0
  33. package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +22 -5
  34. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +56 -13
  35. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +1 -1
  36. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +61 -32
  37. package/dist/storage/implementation/MongoSyncBucketStorage.js +85 -523
  38. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
  39. package/dist/storage/implementation/MongoSyncRulesLock.d.ts +10 -4
  40. package/dist/storage/implementation/MongoSyncRulesLock.js +19 -13
  41. package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
  42. package/dist/storage/implementation/MongoWriteCheckpointAPI.js +1 -1
  43. package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
  44. package/dist/storage/implementation/OperationBatch.js +1 -1
  45. package/dist/storage/implementation/SyncRuleStateUpdate.d.ts +14 -0
  46. package/dist/storage/implementation/SyncRuleStateUpdate.js +36 -0
  47. package/dist/storage/implementation/SyncRuleStateUpdate.js.map +1 -0
  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 +35 -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 +41 -36
  70. package/dist/storage/implementation/db.js +77 -99
  71. package/dist/storage/implementation/db.js.map +1 -1
  72. package/dist/storage/implementation/models.d.ts +79 -66
  73. package/dist/storage/implementation/models.js +20 -1
  74. package/dist/storage/implementation/models.js.map +1 -1
  75. package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +27 -0
  76. package/dist/storage/implementation/v1/MongoBucketBatchV1.js +407 -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 +50 -0
  88. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +354 -0
  89. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -0
  90. package/dist/storage/implementation/v1/PersistedBatchV1.d.ts +25 -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 +45 -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 +30 -0
  106. package/dist/storage/implementation/v3/MongoBucketBatchV3.js +463 -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 +4 -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 +63 -0
  121. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +508 -0
  122. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -0
  123. package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +28 -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 +22 -0
  133. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +74 -0
  134. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -0
  135. package/dist/storage/implementation/v3/models.d.ts +101 -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 +6 -3
  139. package/dist/storage/storage-index.js +6 -3
  140. package/dist/storage/storage-index.js.map +1 -1
  141. package/dist/utils/util.d.ts +10 -3
  142. package/dist/utils/util.js +24 -3
  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/storage/MongoBucketStorage.ts +254 -99
  148. package/src/storage/implementation/BucketDefinitionMapping.ts +75 -0
  149. package/src/storage/implementation/CheckpointState.ts +59 -0
  150. package/src/storage/implementation/MongoBucketBatch.ts +182 -490
  151. package/src/storage/implementation/MongoBucketBatchShared.ts +11 -0
  152. package/src/storage/implementation/MongoChecksums.ts +53 -75
  153. package/src/storage/implementation/MongoCompactor.ts +374 -404
  154. package/src/storage/implementation/MongoParameterCompactor.ts +37 -24
  155. package/src/storage/implementation/MongoPersistedSyncRules.ts +82 -0
  156. package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +78 -16
  157. package/src/storage/implementation/MongoSyncBucketStorage.ts +179 -628
  158. package/src/storage/implementation/MongoSyncRulesLock.ts +20 -16
  159. package/src/storage/implementation/MongoWriteCheckpointAPI.ts +3 -1
  160. package/src/storage/implementation/OperationBatch.ts +1 -1
  161. package/src/storage/implementation/SyncRuleStateUpdate.ts +38 -0
  162. package/src/storage/implementation/common/BucketDataDoc.ts +37 -0
  163. package/src/storage/implementation/common/MongoSyncBucketStorageContext.ts +15 -0
  164. package/src/storage/implementation/common/PersistedBatch.ts +364 -0
  165. package/src/storage/implementation/common/SingleBucketStore.ts +63 -0
  166. package/src/storage/implementation/common/SourceRecordStore.ts +48 -0
  167. package/src/storage/implementation/common/VersionedPowerSyncMongoBase.ts +80 -0
  168. package/src/storage/implementation/createMongoSyncBucketStorage.ts +25 -0
  169. package/src/storage/implementation/db.ts +110 -131
  170. package/src/storage/implementation/models.ts +102 -79
  171. package/src/storage/implementation/v1/MongoBucketBatchV1.ts +509 -0
  172. package/src/storage/implementation/v1/MongoChecksumsV1.ts +75 -0
  173. package/src/storage/implementation/v1/MongoCompactorV1.ts +93 -0
  174. package/src/storage/implementation/v1/MongoParameterCompactorV1.ts +26 -0
  175. package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +543 -0
  176. package/src/storage/implementation/v1/PersistedBatchV1.ts +229 -0
  177. package/src/storage/implementation/v1/SingleBucketStoreV1.ts +74 -0
  178. package/src/storage/implementation/v1/SourceRecordStoreV1.ts +156 -0
  179. package/src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts +28 -0
  180. package/src/storage/implementation/v1/models.ts +99 -0
  181. package/src/storage/implementation/v3/MongoBucketBatchV3.ts +607 -0
  182. package/src/storage/implementation/v3/MongoChecksumsV3.ts +120 -0
  183. package/src/storage/implementation/v3/MongoCompactorV3.ts +107 -0
  184. package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +24 -0
  185. package/src/storage/implementation/v3/MongoParameterLookupV3.ts +11 -0
  186. package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +678 -0
  187. package/src/storage/implementation/v3/PersistedBatchV3.ts +317 -0
  188. package/src/storage/implementation/v3/SingleBucketStoreV3.ts +68 -0
  189. package/src/storage/implementation/v3/SourceRecordStoreV3.ts +226 -0
  190. package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +117 -0
  191. package/src/storage/implementation/v3/models.ts +164 -0
  192. package/src/storage/storage-index.ts +6 -3
  193. package/src/utils/util.ts +34 -5
  194. package/test/src/storage_compacting.test.ts +57 -29
  195. package/test/src/storage_sync.test.ts +767 -5
  196. package/test/src/storeCurrentData.test.ts +211 -0
  197. package/test/tsconfig.json +0 -1
  198. package/tsconfig.tsbuildinfo +1 -1
  199. package/dist/storage/implementation/PersistedBatch.d.ts +0 -71
  200. package/dist/storage/implementation/PersistedBatch.js +0 -354
  201. package/dist/storage/implementation/PersistedBatch.js.map +0 -1
  202. package/src/storage/implementation/PersistedBatch.ts +0 -432
@@ -0,0 +1,20 @@
1
+ export interface CheckpointStateInput {
2
+ lsn: string;
3
+ snapshotDone: boolean;
4
+ lastCheckpointLsn: string | null;
5
+ noCheckpointBefore: string | null;
6
+ keepaliveOp: bigint | null;
7
+ lastCheckpoint: bigint | null;
8
+ persistedOp: bigint | null;
9
+ createEmptyCheckpoints: boolean;
10
+ }
11
+ export interface CheckpointStateResult {
12
+ canCheckpoint: boolean;
13
+ checkpointBlocked: boolean;
14
+ checkpointCreated: boolean;
15
+ notEmpty: boolean;
16
+ newKeepaliveOp: bigint | null;
17
+ newLastCheckpoint: bigint | null;
18
+ }
19
+ export declare function canCheckpointState(lsn: string, state: Pick<CheckpointStateInput, 'snapshotDone' | 'lastCheckpointLsn' | 'noCheckpointBefore'>): boolean;
20
+ export declare function calculateCheckpointState(input: CheckpointStateInput): CheckpointStateResult;
@@ -0,0 +1,31 @@
1
+ function maxOpId(...values) {
2
+ let max = 0n;
3
+ for (const value of values) {
4
+ if (value != null && value > max) {
5
+ max = value;
6
+ }
7
+ }
8
+ return max;
9
+ }
10
+ export function canCheckpointState(lsn, state) {
11
+ return (state.snapshotDone === true &&
12
+ (state.lastCheckpointLsn == null || state.lastCheckpointLsn <= lsn) &&
13
+ (state.noCheckpointBefore == null || state.noCheckpointBefore <= lsn));
14
+ }
15
+ export function calculateCheckpointState(input) {
16
+ const canCheckpoint = canCheckpointState(input.lsn, input);
17
+ const newKeepaliveOp = canCheckpoint ? null : maxOpId(input.keepaliveOp, input.persistedOp);
18
+ const newLastCheckpoint = canCheckpoint
19
+ ? maxOpId(input.lastCheckpoint, input.persistedOp, input.keepaliveOp)
20
+ : input.lastCheckpoint;
21
+ const notEmpty = input.createEmptyCheckpoints || input.keepaliveOp !== newKeepaliveOp || input.lastCheckpoint !== newLastCheckpoint;
22
+ return {
23
+ canCheckpoint,
24
+ checkpointBlocked: !canCheckpoint,
25
+ checkpointCreated: canCheckpoint && notEmpty,
26
+ notEmpty,
27
+ newKeepaliveOp,
28
+ newLastCheckpoint
29
+ };
30
+ }
31
+ //# sourceMappingURL=CheckpointState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckpointState.js","sourceRoot":"","sources":["../../../src/storage/implementation/CheckpointState.ts"],"names":[],"mappings":"AAoBA,SAAS,OAAO,CAAC,GAAG,MAAqC;IACvD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YACjC,GAAG,GAAG,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,KAA8F;IAE9F,OAAO,CACL,KAAK,CAAC,YAAY,KAAK,IAAI;QAC3B,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,IAAI,KAAK,CAAC,iBAAiB,IAAI,GAAG,CAAC;QACnE,CAAC,KAAK,CAAC,kBAAkB,IAAI,IAAI,IAAI,KAAK,CAAC,kBAAkB,IAAI,GAAG,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAA2B;IAClE,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5F,MAAM,iBAAiB,GAAG,aAAa;QACrC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;QACrE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IACzB,MAAM,QAAQ,GACZ,KAAK,CAAC,sBAAsB,IAAI,KAAK,CAAC,WAAW,KAAK,cAAc,IAAI,KAAK,CAAC,cAAc,KAAK,iBAAiB,CAAC;IAErH,OAAO;QACL,aAAa;QACb,iBAAiB,EAAE,CAAC,aAAa;QACjC,iBAAiB,EAAE,aAAa,IAAI,QAAQ;QAC5C,QAAQ;QACR,cAAc;QACd,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
@@ -1,44 +1,59 @@
1
1
  import { mongo } from '@powersync/lib-service-mongodb';
2
- import { HydratedSyncRules, SqlEventDescriptor } from '@powersync/service-sync-rules';
2
+ import { HydratedSyncConfig, SqlEventDescriptor } from '@powersync/service-sync-rules';
3
+ import * as bson from 'bson';
3
4
  import { BaseObserver, Logger } from '@powersync/lib-services-framework';
4
- import { BucketStorageMarkRecordUnavailable, CheckpointResult, InternalOpId, storage } from '@powersync/service-core';
5
- import { VersionedPowerSyncMongo } from './db.js';
6
- import { CurrentBucket } from './models.js';
7
- /**
8
- * 15MB
9
- */
10
- export declare const MAX_ROW_SIZE: number;
11
- export declare const EMPTY_DATA: mongo.Binary;
5
+ import { BucketStorageMarkRecordUnavailable, InternalOpId, PerformanceTracer, storage } from '@powersync/service-core';
6
+ import { BucketDefinitionMapping } from './BucketDefinitionMapping.js';
7
+ import { PersistedBatch } from './common/PersistedBatch.js';
8
+ import { SourceRecordStore } from './common/SourceRecordStore.js';
9
+ import type { VersionedPowerSyncMongo } from './db.js';
12
10
  export interface MongoBucketBatchOptions {
13
11
  db: VersionedPowerSyncMongo;
14
- syncRules: HydratedSyncRules;
12
+ syncRules: HydratedSyncConfig;
15
13
  groupId: number;
16
14
  slotName: string;
15
+ syncConfigId?: bson.ObjectId | null;
17
16
  lastCheckpointLsn: string | null;
18
17
  keepaliveOp: InternalOpId | null;
19
18
  resumeFromLsn: string | null;
20
19
  storeCurrentData: boolean;
20
+ mapping: BucketDefinitionMapping;
21
21
  /**
22
22
  * Set to true for initial replication.
23
23
  */
24
24
  skipExistingRows: boolean;
25
25
  markRecordUnavailable: BucketStorageMarkRecordUnavailable | undefined;
26
- logger?: Logger;
26
+ hooks: storage.StorageHooks | undefined;
27
+ logger: Logger;
28
+ tracer?: PerformanceTracer<'storage' | 'evaluate'>;
27
29
  }
28
- export declare class MongoBucketBatch extends BaseObserver<storage.BucketBatchStorageListener> implements storage.BucketStorageBatch {
29
- private logger;
30
+ export declare abstract class MongoBucketBatch extends BaseObserver<storage.BucketBatchStorageListener> implements storage.BucketStorageBatch {
31
+ protected readonly options: MongoBucketBatchOptions;
32
+ protected logger: Logger;
30
33
  private readonly client;
31
34
  readonly db: VersionedPowerSyncMongo;
32
35
  readonly session: mongo.ClientSession;
33
- private readonly sync_rules;
34
- private readonly group_id;
36
+ protected readonly sync_rules: HydratedSyncConfig;
37
+ protected readonly group_id: number;
35
38
  private readonly slot_name;
39
+ /**
40
+ * Source-level setting for whether raw row data should be stored in current_data.
41
+ *
42
+ * Some sources always send complete rows (MongoDB, MySQL with binlog_row_image=full),
43
+ * in which case this is false for the whole batch. For sources where it depends on the
44
+ * table (Postgres REPLICA IDENTITY), this is true and the decision is refined per-table
45
+ * via SourceTable.storeCurrentData. The effective per-record value is the conjunction of
46
+ * the two.
47
+ */
36
48
  private readonly storeCurrentData;
37
- private readonly skipExistingRows;
49
+ readonly skipExistingRows: boolean;
50
+ protected readonly mapping: BucketDefinitionMapping;
38
51
  private batch;
39
52
  private write_checkpoint_batch;
40
53
  private markRecordUnavailable;
54
+ private hooks;
41
55
  private clearedError;
56
+ private tracer;
42
57
  /**
43
58
  * Last LSN received associated with a checkpoint.
44
59
  *
@@ -46,8 +61,8 @@ export declare class MongoBucketBatch extends BaseObserver<storage.BucketBatchSt
46
61
  * 1. A commit LSN.
47
62
  * 2. A keepalive message LSN.
48
63
  */
49
- private last_checkpoint_lsn;
50
- private persisted_op;
64
+ protected last_checkpoint_lsn: string | null;
65
+ protected persisted_op: InternalOpId | null;
51
66
  /**
52
67
  * Last written op, if any. This may not reflect a consistent checkpoint.
53
68
  */
@@ -63,29 +78,31 @@ export declare class MongoBucketBatch extends BaseObserver<storage.BucketBatchSt
63
78
  * This is set when creating the batch, but may not be updated afterwards.
64
79
  */
65
80
  resumeFromLsn: string | null;
66
- private needsActivation;
67
81
  constructor(options: MongoBucketBatchOptions);
68
82
  addCustomWriteCheckpoint(checkpoint: storage.BatchedCustomWriteCheckpointOptions): void;
69
83
  get lastCheckpointLsn(): string | null;
84
+ abstract resolveTables(options: storage.ResolveTablesOptions): Promise<storage.ResolveTablesResult>;
85
+ protected abstract createPersistedBatch(writtenSize: number): PersistedBatch;
86
+ protected abstract get sourceRecordStore(): SourceRecordStore;
87
+ protected abstract cleanupDroppedSourceTables(sourceTables: storage.SourceTable[]): Promise<void>;
88
+ abstract commit(lsn: string, options?: storage.BucketBatchCommitOptions): Promise<storage.CheckpointResult>;
89
+ abstract keepalive(lsn: string): Promise<storage.CheckpointResult>;
90
+ abstract setResumeLsn(lsn: string): Promise<void>;
91
+ abstract getSourceTableStatus(table: storage.SourceTable): Promise<storage.SourceTable | null>;
92
+ abstract markAllSnapshotDone(no_checkpoint_before_lsn: string): Promise<void>;
93
+ abstract markSnapshotDone(no_checkpoint_before_lsn: string, options?: {
94
+ throwOnConflict?: boolean;
95
+ }): Promise<void>;
96
+ abstract markTableSnapshotRequired(table: storage.SourceTable): Promise<void>;
97
+ abstract markTableSnapshotDone(tables: storage.SourceTable[], no_checkpoint_before_lsn?: string): Promise<storage.SourceTable[]>;
70
98
  flush(options?: storage.BatchBucketFlushOptions): Promise<storage.FlushedResult | null>;
71
99
  private flushInner;
72
100
  private replicateBatch;
73
101
  private saveOperation;
74
- private withTransaction;
102
+ protected withTransaction(cb: () => Promise<void>): Promise<void>;
75
103
  private withReplicationTransaction;
76
104
  [Symbol.asyncDispose](): Promise<void>;
77
105
  dispose(): Promise<void>;
78
- private lastWaitingLogThottled;
79
- commit(lsn: string, options?: storage.BucketBatchCommitOptions): Promise<CheckpointResult>;
80
- private cleanupCurrentData;
81
- /**
82
- * Switch from processing -> active if relevant.
83
- *
84
- * Called on new commits.
85
- */
86
- private autoActivate;
87
- keepalive(lsn: string): Promise<CheckpointResult>;
88
- setResumeLsn(lsn: string): Promise<void>;
89
106
  save(record: storage.SaveOptions): Promise<storage.FlushedResult | null>;
90
107
  /**
91
108
  * Drop is equivalent to TRUNCATE, plus removing our record of the table.
@@ -94,13 +111,9 @@ export declare class MongoBucketBatch extends BaseObserver<storage.BucketBatchSt
94
111
  truncate(sourceTables: storage.SourceTable[]): Promise<storage.FlushedResult | null>;
95
112
  truncateSingle(sourceTable: storage.SourceTable): Promise<InternalOpId>;
96
113
  updateTableProgress(table: storage.SourceTable, progress: Partial<storage.TableSnapshotStatus>): Promise<storage.SourceTable>;
97
- markAllSnapshotDone(no_checkpoint_before_lsn: string): Promise<void>;
98
- markTableSnapshotRequired(table: storage.SourceTable): Promise<void>;
99
- markTableSnapshotDone(tables: storage.SourceTable[], no_checkpoint_before_lsn?: string): Promise<storage.SourceTable[]>;
100
114
  protected clearError(): Promise<void>;
101
115
  /**
102
116
  * Gets relevant {@link SqlEventDescriptor}s for the given {@link SourceTable}
103
117
  */
104
118
  protected getTableEvents(table: storage.SourceTable): SqlEventDescriptor[];
105
119
  }
106
- export declare function currentBucketKey(b: CurrentBucket): string;