@powersync/service-module-mongodb-storage 0.16.0 → 0.18.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 (206) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/storage/MongoBucketStorage.d.ts +35 -15
  3. package/dist/storage/MongoBucketStorage.js +309 -86
  4. package/dist/storage/MongoBucketStorage.js.map +1 -1
  5. package/dist/storage/implementation/CheckpointState.d.ts +20 -0
  6. package/dist/storage/implementation/CheckpointState.js +31 -0
  7. package/dist/storage/implementation/CheckpointState.js.map +1 -0
  8. package/dist/storage/implementation/MongoBucketBatch.d.ts +69 -39
  9. package/dist/storage/implementation/MongoBucketBatch.js +104 -313
  10. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
  11. package/dist/storage/implementation/MongoChecksums.d.ts +11 -9
  12. package/dist/storage/implementation/MongoChecksums.js +3 -111
  13. package/dist/storage/implementation/MongoChecksums.js.map +1 -1
  14. package/dist/storage/implementation/MongoCompactor.d.ts +3 -1
  15. package/dist/storage/implementation/MongoCompactor.js +18 -9
  16. package/dist/storage/implementation/MongoCompactor.js.map +1 -1
  17. package/dist/storage/implementation/MongoHydrationState.d.ts +11 -0
  18. package/dist/storage/implementation/MongoHydrationState.js +49 -0
  19. package/dist/storage/implementation/MongoHydrationState.js.map +1 -0
  20. package/dist/storage/implementation/MongoParameterCompactor.d.ts +6 -5
  21. package/dist/storage/implementation/MongoParameterCompactor.js +24 -1
  22. package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
  23. package/dist/storage/implementation/MongoParsedSyncConfigSet.d.ts +13 -0
  24. package/dist/storage/implementation/MongoParsedSyncConfigSet.js +64 -0
  25. package/dist/storage/implementation/MongoParsedSyncConfigSet.js.map +1 -0
  26. package/dist/storage/implementation/MongoPersistedReplicationStream.d.ts +36 -0
  27. package/dist/storage/implementation/MongoPersistedReplicationStream.js +90 -0
  28. package/dist/storage/implementation/MongoPersistedReplicationStream.js.map +1 -0
  29. package/dist/storage/implementation/MongoPersistedSyncConfigContent.d.ts +25 -0
  30. package/dist/storage/implementation/MongoPersistedSyncConfigContent.js +121 -0
  31. package/dist/storage/implementation/MongoPersistedSyncConfigContent.js.map +1 -0
  32. package/dist/storage/implementation/MongoStorageProvider.js +5 -2
  33. package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
  34. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +50 -21
  35. package/dist/storage/implementation/MongoSyncBucketStorage.js +62 -199
  36. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
  37. package/dist/storage/implementation/MongoSyncRulesLock.d.ts +5 -1
  38. package/dist/storage/implementation/MongoSyncRulesLock.js +9 -5
  39. package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
  40. package/dist/storage/implementation/SyncRuleStateUpdate.d.ts +14 -0
  41. package/dist/storage/implementation/SyncRuleStateUpdate.js +36 -0
  42. package/dist/storage/implementation/SyncRuleStateUpdate.js.map +1 -0
  43. package/dist/storage/implementation/common/BucketDataDoc.d.ts +1 -1
  44. package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.d.ts +6 -0
  45. package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.js +2 -0
  46. package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.js.map +1 -0
  47. package/dist/storage/implementation/common/PersistedBatch.d.ts +2 -3
  48. package/dist/storage/implementation/common/PersistedBatch.js +5 -0
  49. package/dist/storage/implementation/common/PersistedBatch.js.map +1 -1
  50. package/dist/storage/implementation/common/SourceRecordStore.d.ts +1 -2
  51. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.d.ts +1 -1
  52. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js +1 -1
  53. package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js.map +1 -1
  54. package/dist/storage/implementation/createMongoSyncBucketStorage.d.ts +2 -2
  55. package/dist/storage/implementation/createMongoSyncBucketStorage.js +4 -4
  56. package/dist/storage/implementation/createMongoSyncBucketStorage.js.map +1 -1
  57. package/dist/storage/implementation/db.d.ts +10 -2
  58. package/dist/storage/implementation/db.js +9 -14
  59. package/dist/storage/implementation/db.js.map +1 -1
  60. package/dist/storage/implementation/models.d.ts +25 -50
  61. package/dist/storage/implementation/models.js.map +1 -1
  62. package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +23 -1
  63. package/dist/storage/implementation/v1/MongoBucketBatchV1.js +403 -2
  64. package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -1
  65. package/dist/storage/implementation/v1/MongoChecksumsV1.js +114 -3
  66. package/dist/storage/implementation/v1/MongoChecksumsV1.js.map +1 -1
  67. package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +1 -1
  68. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +22 -15
  69. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +100 -27
  70. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -1
  71. package/dist/storage/implementation/v1/PersistedBatchV1.d.ts +1 -2
  72. package/dist/storage/implementation/v1/PersistedBatchV1.js.map +1 -1
  73. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.d.ts +2 -1
  74. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js +3 -0
  75. package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js.map +1 -1
  76. package/dist/storage/implementation/v1/models.d.ts +21 -1
  77. package/dist/storage/implementation/v1/models.js.map +1 -1
  78. package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +21 -0
  79. package/dist/storage/implementation/v3/MongoBucketBatchV3.js +459 -3
  80. package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -1
  81. package/dist/storage/implementation/v3/MongoChecksumsV3.d.ts +27 -7
  82. package/dist/storage/implementation/v3/MongoChecksumsV3.js +202 -18
  83. package/dist/storage/implementation/v3/MongoChecksumsV3.js.map +1 -1
  84. package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +20 -3
  85. package/dist/storage/implementation/v3/MongoCompactorV3.js +511 -22
  86. package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -1
  87. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.d.ts +62 -0
  88. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js +350 -0
  89. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js.map +1 -0
  90. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +50 -16
  91. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +292 -75
  92. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -1
  93. package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +2 -3
  94. package/dist/storage/implementation/v3/PersistedBatchV3.js +43 -20
  95. package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -1
  96. package/dist/storage/implementation/v3/SingleBucketStoreV3.js +52 -16
  97. package/dist/storage/implementation/v3/SingleBucketStoreV3.js.map +1 -1
  98. package/dist/storage/implementation/v3/SourceRecordStoreV3.d.ts +3 -3
  99. package/dist/storage/implementation/v3/SourceRecordStoreV3.js +13 -11
  100. package/dist/storage/implementation/v3/SourceRecordStoreV3.js.map +1 -1
  101. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +16 -14
  102. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +32 -27
  103. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -1
  104. package/dist/storage/implementation/v3/bucket-format.d.ts +4 -0
  105. package/dist/storage/implementation/v3/bucket-format.js +58 -0
  106. package/dist/storage/implementation/v3/bucket-format.js.map +1 -0
  107. package/dist/storage/implementation/v3/chunking.d.ts +10 -0
  108. package/dist/storage/implementation/v3/chunking.js +28 -0
  109. package/dist/storage/implementation/v3/chunking.js.map +1 -0
  110. package/dist/storage/implementation/v3/models.d.ts +111 -10
  111. package/dist/storage/implementation/v3/models.js +11 -28
  112. package/dist/storage/implementation/v3/models.js.map +1 -1
  113. package/dist/storage/implementation/v3/source-table-utils.d.ts +55 -0
  114. package/dist/storage/implementation/v3/source-table-utils.js +214 -0
  115. package/dist/storage/implementation/v3/source-table-utils.js.map +1 -0
  116. package/dist/storage/storage-index.d.ts +4 -4
  117. package/dist/storage/storage-index.js +4 -4
  118. package/dist/storage/storage-index.js.map +1 -1
  119. package/dist/types/types.d.ts +2 -2
  120. package/dist/utils/test-utils.d.ts +1 -2
  121. package/dist/utils/test-utils.js +5 -1
  122. package/dist/utils/test-utils.js.map +1 -1
  123. package/dist/utils/util.d.ts +1 -1
  124. package/dist/utils/util.js +3 -2
  125. package/dist/utils/util.js.map +1 -1
  126. package/package.json +9 -19
  127. package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +1 -1
  128. package/src/storage/MongoBucketStorage.ts +464 -95
  129. package/src/storage/implementation/CheckpointState.ts +59 -0
  130. package/src/storage/implementation/MongoBucketBatch.ts +159 -405
  131. package/src/storage/implementation/MongoChecksums.ts +7 -138
  132. package/src/storage/implementation/MongoCompactor.ts +20 -10
  133. package/src/storage/implementation/MongoHydrationState.ts +61 -0
  134. package/src/storage/implementation/MongoParameterCompactor.ts +24 -5
  135. package/src/storage/implementation/MongoParsedSyncConfigSet.ts +88 -0
  136. package/src/storage/implementation/MongoPersistedReplicationStream.ts +118 -0
  137. package/src/storage/implementation/MongoPersistedSyncConfigContent.ts +152 -0
  138. package/src/storage/implementation/MongoStorageProvider.ts +5 -2
  139. package/src/storage/implementation/MongoSyncBucketStorage.ts +89 -250
  140. package/src/storage/implementation/MongoSyncRulesLock.ts +14 -5
  141. package/src/storage/implementation/SyncRuleStateUpdate.ts +38 -0
  142. package/src/storage/implementation/common/BucketDataDoc.ts +1 -1
  143. package/src/storage/implementation/common/MongoSyncBucketStorageCheckpoint.ts +7 -0
  144. package/src/storage/implementation/common/PersistedBatch.ts +8 -4
  145. package/src/storage/implementation/common/SourceRecordStore.ts +1 -2
  146. package/src/storage/implementation/common/VersionedPowerSyncMongoBase.ts +1 -1
  147. package/src/storage/implementation/createMongoSyncBucketStorage.ts +21 -7
  148. package/src/storage/implementation/db.ts +16 -21
  149. package/src/storage/implementation/models.ts +28 -61
  150. package/src/storage/implementation/v1/MongoBucketBatchV1.ts +503 -5
  151. package/src/storage/implementation/v1/MongoChecksumsV1.ts +137 -4
  152. package/src/storage/implementation/v1/MongoCompactorV1.ts +1 -1
  153. package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +150 -49
  154. package/src/storage/implementation/v1/PersistedBatchV1.ts +1 -2
  155. package/src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts +11 -1
  156. package/src/storage/implementation/v1/models.ts +25 -0
  157. package/src/storage/implementation/v3/MongoBucketBatchV3.ts +611 -4
  158. package/src/storage/implementation/v3/MongoChecksumsV3.ts +262 -26
  159. package/src/storage/implementation/v3/MongoCompactorV3.ts +647 -30
  160. package/src/storage/implementation/v3/MongoStoppedSyncConfigCleanup.ts +480 -0
  161. package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +397 -111
  162. package/src/storage/implementation/v3/PersistedBatchV3.ts +63 -38
  163. package/src/storage/implementation/v3/SingleBucketStoreV3.ts +59 -19
  164. package/src/storage/implementation/v3/SourceRecordStoreV3.ts +12 -12
  165. package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +48 -38
  166. package/src/storage/implementation/v3/bucket-format.ts +70 -0
  167. package/src/storage/implementation/v3/chunking.ts +38 -0
  168. package/src/storage/implementation/v3/models.ts +150 -44
  169. package/src/storage/implementation/v3/source-table-utils.ts +392 -0
  170. package/src/storage/storage-index.ts +12 -4
  171. package/src/utils/test-utils.ts +6 -3
  172. package/src/utils/util.ts +3 -2
  173. package/test/src/__snapshots__/storage.test.ts.snap +0 -75
  174. package/test/src/__snapshots__/storage_sync.test.ts.snap +48 -48
  175. package/test/src/cleanup-stopped-sync-configs.test.ts +648 -0
  176. package/test/src/storage.test.ts +11 -11
  177. package/test/src/storage_compacting.test.ts +1956 -6
  178. package/test/src/storage_sync.test.ts +1429 -42
  179. package/test/src/storeCurrentData.test.ts +221 -0
  180. package/test/src/util.ts +2 -1
  181. package/tsconfig.json +1 -4
  182. package/tsconfig.tsbuildinfo +1 -1
  183. package/dist/storage/implementation/BucketDefinitionMapping.d.ts +0 -17
  184. package/dist/storage/implementation/BucketDefinitionMapping.js +0 -58
  185. package/dist/storage/implementation/BucketDefinitionMapping.js.map +0 -1
  186. package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +0 -14
  187. package/dist/storage/implementation/MongoPersistedSyncRules.js +0 -64
  188. package/dist/storage/implementation/MongoPersistedSyncRules.js.map +0 -1
  189. package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +0 -15
  190. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +0 -42
  191. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +0 -1
  192. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.d.ts +0 -13
  193. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js +0 -2
  194. package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js.map +0 -1
  195. package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +0 -9
  196. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +0 -18
  197. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +0 -1
  198. package/dist/storage/implementation/v3/MongoParameterLookupV3.d.ts +0 -5
  199. package/dist/storage/implementation/v3/MongoParameterLookupV3.js +0 -9
  200. package/dist/storage/implementation/v3/MongoParameterLookupV3.js.map +0 -1
  201. package/src/storage/implementation/BucketDefinitionMapping.ts +0 -72
  202. package/src/storage/implementation/MongoPersistedSyncRules.ts +0 -76
  203. package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +0 -56
  204. package/src/storage/implementation/common/MongoSyncBucketStorageContext.ts +0 -15
  205. package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +0 -24
  206. package/src/storage/implementation/v3/MongoParameterLookupV3.ts +0 -12
@@ -13,11 +13,13 @@ export class MongoParameterCompactor {
13
13
  group_id;
14
14
  checkpoint;
15
15
  options;
16
- constructor(db, group_id, checkpoint, options) {
16
+ getCollectionsCb;
17
+ constructor(db, group_id, checkpoint, options, getCollectionsCb) {
17
18
  this.db = db;
18
19
  this.group_id = group_id;
19
20
  this.checkpoint = checkpoint;
20
21
  this.options = options;
22
+ this.getCollectionsCb = getCollectionsCb;
21
23
  }
22
24
  async compact() {
23
25
  logger.info(`Compacting parameters for sync config ${this.group_id} up to checkpoint ${this.checkpoint}`);
@@ -25,6 +27,25 @@ export class MongoParameterCompactor {
25
27
  await this.compactCollection(collection);
26
28
  }
27
29
  }
30
+ async getCollections() {
31
+ if (this.getCollectionsCb == null) {
32
+ throw new Error('getCollections callback not provided');
33
+ }
34
+ const collections = await this.getCollectionsCb();
35
+ // Cast from the version-specific collection type to the generic Document type
36
+ // used by the parameter compactor base class.
37
+ return collections.map((collection) => collection);
38
+ }
39
+ collectionFilter() {
40
+ return {};
41
+ }
42
+ deleteFilter(doc) {
43
+ return {
44
+ lookup: doc.lookup,
45
+ _id: { $lte: doc._id },
46
+ key: doc.key
47
+ };
48
+ }
28
49
  async compactCollection(collection) {
29
50
  // This is the currently-active checkpoint.
30
51
  // We do not remove any data that may be used by this checkpoint.
@@ -51,6 +72,7 @@ export class MongoParameterCompactor {
51
72
  let lastProgressLogTime = Date.now();
52
73
  const flush = async (force) => {
53
74
  if (removeIds.length >= 1000 || (force && removeIds.length > 0)) {
75
+ // MongoDB Filter<T> doesn't fully match our dynamic delete filter shape here.
54
76
  const results = await collection.deleteMany({ _id: { $in: removeIds } });
55
77
  logger.info(`Removed ${results.deletedCount} (${removeIds.length}) superseded parameter entries`);
56
78
  removeIds = [];
@@ -62,6 +84,7 @@ export class MongoParameterCompactor {
62
84
  }
63
85
  };
64
86
  while (await cursor.hasNext()) {
87
+ // readBufferedDocuments returns a generic type; we know the shape from our projection.
65
88
  const batch = cursor.readBufferedDocuments();
66
89
  checkedEntries += batch.length;
67
90
  const now = Date.now();
@@ -1 +1 @@
1
- {"version":3,"file":"MongoParameterCompactor.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoParameterCompactor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MongoParameterCompactor.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoParameterCompactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { BucketDefinitionMapping, storage, SyncConfigWithMapping } from '@powersync/service-core';
2
+ import { HydratedSyncConfig, HydrationState, SyncConfigWithErrors } from '@powersync/service-sync-rules';
3
+ import { StorageConfig } from './models.js';
4
+ export declare class MongoParsedSyncConfigSet implements storage.ParsedSyncConfigSet {
5
+ #private;
6
+ readonly replicationStreamId: number;
7
+ readonly hydrationState: HydrationState;
8
+ readonly syncConfigs: SyncConfigWithErrors[];
9
+ readonly replicationStreamName: string;
10
+ readonly mapping: BucketDefinitionMapping;
11
+ constructor(replicationStreamId: number, storageConfig: StorageConfig, slotName: string, syncConfigs: SyncConfigWithMapping[]);
12
+ get hydratedSyncConfig(): HydratedSyncConfig;
13
+ }
@@ -0,0 +1,64 @@
1
+ import * as sqlite from 'node:sqlite';
2
+ import { ServiceAssertionError } from '@powersync/lib-services-framework';
3
+ import { MultiSyncConfigBucketDefinitionMapping, SingleSyncConfigBucketDefinitionMapping } from '@powersync/service-core';
4
+ import { CompatibilityOption, DEFAULT_HYDRATION_STATE, HydratedSyncConfig, nodeSqlite, versionedHydrationState } from '@powersync/service-sync-rules';
5
+ import { MongoHydrationState } from './MongoHydrationState.js';
6
+ export class MongoParsedSyncConfigSet {
7
+ replicationStreamId;
8
+ hydrationState;
9
+ syncConfigs;
10
+ replicationStreamName;
11
+ mapping;
12
+ constructor(replicationStreamId, storageConfig, slotName, syncConfigs) {
13
+ this.replicationStreamId = replicationStreamId;
14
+ this.replicationStreamName = slotName;
15
+ this.syncConfigs = syncConfigs.map((config) => config.syncConfig);
16
+ if (this.syncConfigs.length == 0) {
17
+ throw new ServiceAssertionError(`At least one sync config is required`);
18
+ }
19
+ const [firstConfig] = this.syncConfigs;
20
+ const compatibility = firstConfig.config.compatibility;
21
+ for (const config of this.syncConfigs) {
22
+ if (config.config.compatibility.equals(compatibility)) {
23
+ continue;
24
+ }
25
+ throw new ServiceAssertionError(`All sync configs in a replication stream must use the same compatibility options`);
26
+ }
27
+ if (storageConfig.incrementalReprocessing) {
28
+ if (syncConfigs.some((c) => c.mapping == null)) {
29
+ throw new ServiceAssertionError(`mapping is required for v3 storage`);
30
+ }
31
+ const mappedConfigs = syncConfigs;
32
+ this.hydrationState = new MongoHydrationState(mappedConfigs, this.replicationStreamId);
33
+ this.mapping = new MultiSyncConfigBucketDefinitionMapping(mappedConfigs);
34
+ }
35
+ else if (!compatibility.isEnabled(CompatibilityOption.versionedBucketIds) && !storageConfig.versionedBuckets) {
36
+ const [syncConfig] = syncConfigs;
37
+ if (syncConfigs.length != 1 || syncConfig == null) {
38
+ throw new ServiceAssertionError(`Non-incremental storage requires exactly one sync config`);
39
+ }
40
+ this.hydrationState = DEFAULT_HYDRATION_STATE;
41
+ this.mapping = syncConfig.mapping ?? new SingleSyncConfigBucketDefinitionMapping();
42
+ }
43
+ else {
44
+ const [syncConfig] = syncConfigs;
45
+ if (syncConfigs.length != 1 || syncConfig == null) {
46
+ throw new ServiceAssertionError(`Non-incremental storage requires exactly one sync config`);
47
+ }
48
+ this.hydrationState = versionedHydrationState(this.replicationStreamId);
49
+ this.mapping = syncConfig.mapping ?? new SingleSyncConfigBucketDefinitionMapping();
50
+ }
51
+ }
52
+ #hydratedSyncConfig;
53
+ get hydratedSyncConfig() {
54
+ this.#hydratedSyncConfig ??= new HydratedSyncConfig({
55
+ definitions: this.syncConfigs.map((config) => config.config),
56
+ createParams: {
57
+ hydrationState: this.hydrationState,
58
+ sqlite: nodeSqlite(sqlite)
59
+ }
60
+ });
61
+ return this.#hydratedSyncConfig;
62
+ }
63
+ }
64
+ //# sourceMappingURL=MongoParsedSyncConfigSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoParsedSyncConfigSet.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoParsedSyncConfigSet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { ReplicationStreamStorageIds, storage } from '@powersync/service-core';
3
+ import * as bson from 'bson';
4
+ import { ReplicationStreamDocumentV3, SyncConfigDefinition } from '../storage-index.js';
5
+ import { PowerSyncMongo } from './db.js';
6
+ import { MongoParsedSyncConfigSet } from './MongoParsedSyncConfigSet.js';
7
+ import { MongoPersistedSyncConfigContentBase } from './MongoPersistedSyncConfigContent.js';
8
+ import { MongoSyncRulesLock } from './MongoSyncRulesLock.js';
9
+ import { SyncRuleDocumentV1 } from './v1/models.js';
10
+ export declare class MongoPersistedReplicationStream extends storage.PersistedReplicationStream {
11
+ #private;
12
+ private readonly db;
13
+ private readonly doc;
14
+ private readonly configs;
15
+ current_lock: MongoSyncRulesLock | null;
16
+ readonly syncConfigContent: readonly MongoPersistedSyncConfigContentBase[];
17
+ constructor(db: PowerSyncMongo, doc: SyncRuleDocumentV1 | ReplicationStreamDocumentV3, configs?: SyncConfigDefinition[]);
18
+ getStorageConfig(): import("./models.js").StorageConfig;
19
+ private createSyncConfigContent;
20
+ get syncConfigIds(): bson.ObjectId[];
21
+ /**
22
+ * Persisted storage ids for all sync configs in this replication stream.
23
+ *
24
+ * Derived from the persisted rule_mapping documents - requires no parsed sync configs.
25
+ */
26
+ get storageIds(): ReplicationStreamStorageIds;
27
+ /**
28
+ * Parse the sync configs for this replication stream.
29
+ *
30
+ * This creates a fresh parse on every call. Do not call this from operational paths -
31
+ * use {@link MongoSyncBucketStorage.getParsedSyncConfigSet} instead, which returns a
32
+ * canonical instance so that parsed source objects and mappings stay associated.
33
+ */
34
+ parsed(options: storage.ParseSyncConfigOptions): MongoParsedSyncConfigSet;
35
+ lock(session?: mongo.ClientSession): Promise<MongoSyncRulesLock>;
36
+ }
@@ -0,0 +1,90 @@
1
+ import { ServiceAssertionError } from '@powersync/lib-services-framework';
2
+ import { ReplicationStreamStorageIds, SingleSyncConfigBucketDefinitionMapping, storage } from '@powersync/service-core';
3
+ import { getMongoStorageConfig } from './models.js';
4
+ import { MongoParsedSyncConfigSet } from './MongoParsedSyncConfigSet.js';
5
+ import { MongoPersistedSyncConfigContentV1, MongoPersistedSyncConfigContentV3 } from './MongoPersistedSyncConfigContent.js';
6
+ import { MongoSyncRulesLock } from './MongoSyncRulesLock.js';
7
+ export class MongoPersistedReplicationStream extends storage.PersistedReplicationStream {
8
+ db;
9
+ doc;
10
+ configs;
11
+ current_lock = null;
12
+ syncConfigContent;
13
+ constructor(db, doc, configs = []) {
14
+ const storageVersion = doc.storage_version ?? storage.LEGACY_STORAGE_VERSION;
15
+ const replicationJobId = configs.length == 0
16
+ ? String(doc._id)
17
+ : `${doc._id}:${configs
18
+ .map((config) => config._id.toHexString())
19
+ .sort()
20
+ .join(',')}`;
21
+ super({
22
+ replicationStreamId: doc._id,
23
+ replicationStreamName: doc.slot_name ?? `powersync_${doc._id}`,
24
+ state: doc.state,
25
+ storageVersion,
26
+ replicationJobId
27
+ });
28
+ this.db = db;
29
+ this.doc = doc;
30
+ this.configs = configs;
31
+ this.syncConfigContent = this.createSyncConfigContent();
32
+ }
33
+ getStorageConfig() {
34
+ return getMongoStorageConfig(this.storageVersion);
35
+ }
36
+ createSyncConfigContent() {
37
+ if (this.getStorageConfig().incrementalReprocessing) {
38
+ if (this.configs.length == 0) {
39
+ throw new ServiceAssertionError(`Cannot create v3 storage without sync config definitions`);
40
+ }
41
+ return this.configs.map((config) => new MongoPersistedSyncConfigContentV3(this.db, this.doc, config));
42
+ }
43
+ return [new MongoPersistedSyncConfigContentV1(this.db, this.doc)];
44
+ }
45
+ get syncConfigIds() {
46
+ return this.configs.map((config) => config._id);
47
+ }
48
+ #storageIds;
49
+ /**
50
+ * Persisted storage ids for all sync configs in this replication stream.
51
+ *
52
+ * Derived from the persisted rule_mapping documents - requires no parsed sync configs.
53
+ */
54
+ get storageIds() {
55
+ this.#storageIds ??= new ReplicationStreamStorageIds(this.syncConfigContent.map((content) => content.mapping));
56
+ return this.#storageIds;
57
+ }
58
+ /**
59
+ * Parse the sync configs for this replication stream.
60
+ *
61
+ * This creates a fresh parse on every call. Do not call this from operational paths -
62
+ * use {@link MongoSyncBucketStorage.getParsedSyncConfigSet} instead, which returns a
63
+ * canonical instance so that parsed source objects and mappings stay associated.
64
+ */
65
+ parsed(options) {
66
+ const storageConfig = this.getStorageConfig();
67
+ if (!storageConfig.incrementalReprocessing) {
68
+ return this.syncConfigContent[0].parsed(options);
69
+ }
70
+ const syncConfigs = this.configs.map((config) => {
71
+ return {
72
+ syncConfigId: config._id.toHexString(),
73
+ syncConfig: storage.parsePersistedSyncConfigContent({
74
+ content: config.content,
75
+ compiledPlan: config.serialized_plan ?? null,
76
+ storageVersion: this.storageVersion,
77
+ parseOptions: options
78
+ }),
79
+ mapping: SingleSyncConfigBucketDefinitionMapping.fromPersistedMapping(config.rule_mapping)
80
+ };
81
+ });
82
+ return new MongoParsedSyncConfigSet(this.replicationStreamId, storageConfig, this.replicationStreamName, syncConfigs);
83
+ }
84
+ async lock(session) {
85
+ const lock = await MongoSyncRulesLock.createLock(this.db.versioned(this.getStorageConfig()), this, session);
86
+ this.current_lock = lock;
87
+ return lock;
88
+ }
89
+ }
90
+ //# sourceMappingURL=MongoPersistedReplicationStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoPersistedReplicationStream.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoPersistedReplicationStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { SingleSyncConfigBucketDefinitionMapping, storage } from '@powersync/service-core';
2
+ import * as bson from 'bson';
3
+ import { ReplicationStreamDocumentV3, SyncConfigDefinition, SyncRuleDocumentV1 } from '../storage-index.js';
4
+ import { PowerSyncMongo } from './db.js';
5
+ import { MongoParsedSyncConfigSet } from './MongoParsedSyncConfigSet.js';
6
+ export declare abstract class MongoPersistedSyncConfigContentBase extends storage.PersistedSyncConfigContent {
7
+ protected readonly db: PowerSyncMongo;
8
+ readonly mapping: SingleSyncConfigBucketDefinitionMapping;
9
+ readonly syncConfigObjectId: bson.ObjectId | null;
10
+ protected constructor(db: PowerSyncMongo, options: Omit<storage.PersistedSyncConfigContentData, 'syncConfigId'> & {
11
+ mapping: SingleSyncConfigBucketDefinitionMapping;
12
+ syncConfigId: bson.ObjectId | null;
13
+ });
14
+ getStorageConfig(): import("./models.js").StorageConfig;
15
+ parsed(options: storage.ParseSyncConfigOptions): MongoParsedSyncConfigSet;
16
+ }
17
+ export declare class MongoPersistedSyncConfigContentV1 extends MongoPersistedSyncConfigContentBase {
18
+ constructor(db: PowerSyncMongo, doc: SyncRuleDocumentV1);
19
+ getSyncConfigStatus(): Promise<storage.PersistedSyncConfigStatus | null>;
20
+ }
21
+ export declare class MongoPersistedSyncConfigContentV3 extends MongoPersistedSyncConfigContentBase {
22
+ readonly syncConfigObjectId: bson.ObjectId;
23
+ constructor(db: PowerSyncMongo, doc: ReplicationStreamDocumentV3, config: SyncConfigDefinition);
24
+ getSyncConfigStatus(): Promise<storage.PersistedSyncConfigStatus | null>;
25
+ }
@@ -0,0 +1,121 @@
1
+ import { ServiceAssertionError } from '@powersync/lib-services-framework';
2
+ import { SingleSyncConfigBucketDefinitionMapping, storage } from '@powersync/service-core';
3
+ import { getMongoStorageConfig } from './models.js';
4
+ import { MongoParsedSyncConfigSet } from './MongoParsedSyncConfigSet.js';
5
+ export class MongoPersistedSyncConfigContentBase extends storage.PersistedSyncConfigContent {
6
+ db;
7
+ mapping;
8
+ syncConfigObjectId;
9
+ constructor(db, options) {
10
+ const { mapping, syncConfigId, ...base } = options;
11
+ super({
12
+ ...base,
13
+ syncConfigId: syncConfigId?.toHexString() ?? null
14
+ });
15
+ this.db = db;
16
+ this.mapping = mapping;
17
+ this.syncConfigObjectId = syncConfigId;
18
+ }
19
+ getStorageConfig() {
20
+ return getMongoStorageConfig(this.storageVersion);
21
+ }
22
+ parsed(options) {
23
+ const parsed = super.parsed(options);
24
+ const storageConfig = this.getStorageConfig();
25
+ const [syncConfig] = parsed.syncConfigs;
26
+ if (syncConfig == null) {
27
+ throw new ServiceAssertionError(`Expected one parsed sync config`);
28
+ }
29
+ if (storageConfig.incrementalReprocessing) {
30
+ const syncConfigId = this.syncConfigId;
31
+ if (syncConfigId == null) {
32
+ throw new ServiceAssertionError(`syncConfigId is required for v3 sync config content`);
33
+ }
34
+ return new MongoParsedSyncConfigSet(parsed.replicationStreamId, storageConfig, parsed.replicationStreamName, [
35
+ { syncConfigId, syncConfig, mapping: this.mapping }
36
+ ]);
37
+ }
38
+ return new MongoParsedSyncConfigSet(parsed.replicationStreamId, storageConfig, parsed.replicationStreamName, [
39
+ { syncConfig, mapping: null }
40
+ ]);
41
+ }
42
+ }
43
+ export class MongoPersistedSyncConfigContentV1 extends MongoPersistedSyncConfigContentBase {
44
+ constructor(db, doc) {
45
+ super(db, {
46
+ replicationStreamId: doc._id,
47
+ sync_rules_content: doc.content,
48
+ compiled_plan: doc.serialized_plan ?? null,
49
+ // Handle legacy values
50
+ replicationStreamName: doc.slot_name ?? `powersync_${doc._id}`,
51
+ storageVersion: doc.storage_version ?? storage.LEGACY_STORAGE_VERSION,
52
+ mapping: new SingleSyncConfigBucketDefinitionMapping(),
53
+ syncConfigId: null
54
+ });
55
+ }
56
+ async getSyncConfigStatus() {
57
+ const doc = await this.db.sync_rules.findOne({ _id: this.replicationStreamId });
58
+ if (doc == null) {
59
+ return null;
60
+ }
61
+ return syncConfigStatusFromV1(doc);
62
+ }
63
+ }
64
+ export class MongoPersistedSyncConfigContentV3 extends MongoPersistedSyncConfigContentBase {
65
+ constructor(db, doc, config) {
66
+ const state = doc.sync_configs.find((c) => c._id.equals(config._id));
67
+ if (state == null) {
68
+ throw new ServiceAssertionError(`Cannot find sync config ${config._id} in replication stream ${doc._id}`);
69
+ }
70
+ super(db, {
71
+ replicationStreamId: doc._id,
72
+ sync_rules_content: config.content,
73
+ compiled_plan: config.serialized_plan ?? null,
74
+ replicationStreamName: doc.slot_name ?? `powersync_${doc._id}`,
75
+ storageVersion: doc.storage_version,
76
+ mapping: SingleSyncConfigBucketDefinitionMapping.fromPersistedMapping(config.rule_mapping),
77
+ syncConfigId: config._id
78
+ });
79
+ }
80
+ async getSyncConfigStatus() {
81
+ const doc = await this.db.sync_rules.findOne({
82
+ _id: this.replicationStreamId,
83
+ 'sync_configs._id': this.syncConfigObjectId
84
+ });
85
+ if (doc == null) {
86
+ return null;
87
+ }
88
+ const state = doc.sync_configs.find((c) => c._id.equals(this.syncConfigObjectId));
89
+ if (state == null) {
90
+ return null;
91
+ }
92
+ return syncConfigStatusFromV3(doc, state);
93
+ }
94
+ }
95
+ function syncConfigStatusFromV1(doc) {
96
+ return {
97
+ id: String(doc._id),
98
+ replicationStreamId: doc._id,
99
+ state: doc.state,
100
+ snapshot_done: doc.snapshot_done,
101
+ last_checkpoint_lsn: doc.last_checkpoint_lsn,
102
+ last_fatal_error: doc.last_fatal_error,
103
+ last_fatal_error_ts: doc.last_fatal_error_ts,
104
+ last_keepalive_ts: doc.last_keepalive_ts,
105
+ last_checkpoint_ts: doc.last_checkpoint_ts
106
+ };
107
+ }
108
+ function syncConfigStatusFromV3(doc, state) {
109
+ return {
110
+ id: state._id.toHexString(),
111
+ replicationStreamId: doc._id,
112
+ state: state.state,
113
+ snapshot_done: state.snapshot_done,
114
+ last_checkpoint_lsn: state.last_checkpoint_lsn,
115
+ last_fatal_error: doc.last_fatal_error,
116
+ last_fatal_error_ts: doc.last_fatal_error_ts,
117
+ last_keepalive_ts: doc.last_keepalive_ts,
118
+ last_checkpoint_ts: doc.last_checkpoint_ts
119
+ };
120
+ }
121
+ //# sourceMappingURL=MongoPersistedSyncConfigContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoPersistedSyncConfigContent.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoPersistedSyncConfigContent.ts"],"names":[],"mappings":"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"}
@@ -30,8 +30,11 @@ export class MongoStorageProvider {
30
30
  await client.connect();
31
31
  const database = new PowerSyncMongo(client, { database: resolvedConfig.storage.database });
32
32
  const syncStorageFactory = new MongoBucketStorage(database, {
33
- // TODO currently need the entire resolved config due to this
34
- slot_name_prefix: resolvedConfig.slot_name_prefix
33
+ replicationStreamNamePrefix: resolvedConfig.slot_name_prefix,
34
+ // Right now, only MongoDB source databases supports incremental reprocessing.
35
+ // Remove this filter when we support it for other source databases.
36
+ // This assumes a single source connection - revisit if we ever support multiple connections.
37
+ supportsMultipleSyncConfigs: resolvedConfig.connections?.[0]?.type == lib_mongo.MONGO_CONNECTION_TYPE
35
38
  });
36
39
  // Storage factory for reports
37
40
  const reportStorageFactory = new MongoReportStorage(database);
@@ -1 +1 @@
1
- {"version":3,"file":"MongoStorageProvider.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoStorageProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MongoStorageProvider.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoStorageProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC3G,OAAO,EAAE,iBAAiB,EAAW,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,OAAO,oBAAoB;IAC/B,IAAI,IAAI;QACN,OAAO,SAAS,CAAC,qBAAqB,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAkC;QACjD,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QAEnC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;QACnC,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,gFAAgF;YAChF,MAAM,IAAI,qBAAqB,CAC7B,6DAA6D,OAAO,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,EAAE,CAC7F,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAc,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,aAAa,EAAE;YAC3D,gBAAgB,EAAE,iBAAiB;YACnC,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC;SACvD,CAAC,CAAC;QAEH,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,iCAAiC;QACjC,0FAA0F;QAC1F,2FAA2F;QAC3F,yBAAyB;QACzB,8CAA8C;QAC9C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAEvB,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3F,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,QAAQ,EAAE;YAC1D,2BAA2B,EAAE,cAAc,CAAC,gBAAgB;YAC5D,8EAA8E;YAC9E,oEAAoE;YACpE,6FAA6F;YAC7F,2BAA2B,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,SAAS,CAAC,qBAAqB;SACtG,CAAC,CAAC;QAEH,8BAA8B;QAC9B,MAAM,oBAAoB,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC9D,OAAO;YACL,OAAO,EAAE,kBAAkB;YAC3B,aAAa,EAAE,oBAAoB;YACnC,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC;gBACjE,OAAO,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;YACpC,CAAC;YACD,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACzB,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,GAAG,EAAE;oBACxC,iEAAiE;oBACjE,IAAI,CAAC,YAAY,EAAE,CAAC;wBAClB,yEAAyE;wBACzE,8FAA8F;wBAC9F,kDAAkD;wBAClD,QAAQ,CACN,IAAI,YAAY,CAAC;4BACf,IAAI,EAAE,SAAS,CAAC,WAAW;4BAC3B,WAAW,EAAE,iEAAiE;yBAC/E,CAAC,CACH,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;SAC8B,CAAC;IACpC,CAAC;CACF"}
@@ -1,19 +1,18 @@
1
1
  import { mongo } from '@powersync/lib-service-mongodb';
2
2
  import { BaseObserver, DO_NOT_LOG, Logger } from '@powersync/lib-services-framework';
3
- import { CheckpointChanges, GetCheckpointChangesOptions, InternalOpId, PopulateChecksumCacheOptions, PopulateChecksumCacheResults, ReplicationCheckpoint, storage, utils, WatchWriteCheckpointOptions } from '@powersync/service-core';
4
- import { HydratedSyncRules, ParameterLookupRows, ScopedParameterLookup } from '@powersync/service-sync-rules';
5
- import * as bson from 'bson';
3
+ import { CheckpointChanges, GetCheckpointChangesOptions, InternalOpId, PopulateChecksumCacheOptions, PopulateChecksumCacheResults, ReplicationCheckpoint, ReplicationStreamStorageIds, storage, utils, WatchWriteCheckpointOptions } from '@powersync/service-core';
4
+ import { HydratedSyncConfig, ParameterLookupRows, ScopedParameterLookup } from '@powersync/service-sync-rules';
6
5
  import { MongoBucketStorage } from '../MongoBucketStorage.js';
7
- import { MongoSyncBucketStorageContext } from './common/MongoSyncBucketStorageContext.js';
8
6
  import type { VersionedPowerSyncMongo } from './db.js';
9
- import { CommonSourceTableDocument, StorageConfig } from './models.js';
7
+ import { StorageConfig } from './models.js';
10
8
  import { MongoBucketBatchOptions } from './MongoBucketBatch.js';
11
9
  import { MongoChecksumOptions, MongoChecksums } from './MongoChecksums.js';
12
10
  import { MongoCompactOptions, MongoCompactor } from './MongoCompactor.js';
13
11
  import { MongoParameterCompactor } from './MongoParameterCompactor.js';
14
- import { MongoPersistedSyncRulesContent } from './MongoPersistedSyncRulesContent.js';
12
+ import { MongoParsedSyncConfigSet } from './MongoParsedSyncConfigSet.js';
13
+ import { MongoPersistedReplicationStream } from './MongoPersistedReplicationStream.js';
15
14
  export interface MongoSyncBucketStorageOptions {
16
- checksumOptions?: Omit<MongoChecksumOptions, 'storageConfig' | 'mapping'>;
15
+ checksumOptions?: Omit<MongoChecksumOptions, 'storageConfig'>;
17
16
  storageConfig: StorageConfig;
18
17
  }
19
18
  interface InternalCheckpointChanges extends CheckpointChanges {
@@ -23,16 +22,24 @@ interface InternalCheckpointChanges extends CheckpointChanges {
23
22
  export declare abstract class MongoSyncBucketStorage extends BaseObserver<storage.SyncRulesBucketStorageListener> implements storage.SyncRulesBucketStorage {
24
23
  #private;
25
24
  readonly factory: MongoBucketStorage;
26
- readonly group_id: number;
27
- protected readonly sync_rules: MongoPersistedSyncRulesContent;
28
- readonly slot_name: string;
25
+ readonly replicationStreamId: number;
26
+ readonly replicationStream: MongoPersistedReplicationStream;
27
+ readonly replicationStreamName: string;
29
28
  readonly db: VersionedPowerSyncMongo;
30
29
  [DO_NOT_LOG]: boolean;
31
30
  readonly checksums: MongoChecksums;
32
- private parsedSyncRulesCache;
31
+ /**
32
+ * Canonical parsed sync config sets, keyed by defaultSchema.
33
+ *
34
+ * Entries are never evicted: each parse options value maps to exactly one parsed set for
35
+ * the lifetime of this storage instance, so parsed source objects and mappings always
36
+ * stay associated.
37
+ */
38
+ private readonly parsedSyncConfigSets;
33
39
  private writeCheckpointAPI;
34
40
  readonly logger: Logger;
35
- constructor(factory: MongoBucketStorage, group_id: number, sync_rules: MongoPersistedSyncRulesContent, slot_name: string, writeCheckpointMode: storage.WriteCheckpointMode | undefined, options: MongoSyncBucketStorageOptions);
41
+ readonly storageConfig: StorageConfig;
42
+ constructor(factory: MongoBucketStorage, replicationStreamId: number, replicationStream: MongoPersistedReplicationStream, replicationStreamName: string, writeCheckpointMode: storage.WriteCheckpointMode | undefined, options: MongoSyncBucketStorageOptions);
36
43
  /**
37
44
  * Not for external use - public here for tests only.
38
45
  *
@@ -42,40 +49,62 @@ export declare abstract class MongoSyncBucketStorage extends BaseObserver<storag
42
49
  protected abstract createMongoChecksums(options: MongoSyncBucketStorageOptions): MongoChecksums;
43
50
  protected abstract createMongoParameterCompactor(checkpoint: InternalOpId, options: storage.CompactOptions): MongoParameterCompactor;
44
51
  get writeCheckpointMode(): storage.WriteCheckpointMode;
45
- get mapping(): import("./BucketDefinitionMapping.js").BucketDefinitionMapping;
46
- protected get versionContext(): MongoSyncBucketStorageContext;
52
+ /**
53
+ * Persisted storage ids of all sync configs in this replication stream. Parse-free.
54
+ */
55
+ get storageIds(): ReplicationStreamStorageIds;
47
56
  setWriteCheckpointMode(mode: storage.WriteCheckpointMode): void;
48
57
  createManagedWriteCheckpoint(checkpoint: storage.ManagedWriteCheckpointOptions): Promise<bigint>;
49
58
  lastWriteCheckpoint(filters: storage.SyncStorageLastWriteCheckpointFilters): Promise<bigint | null>;
50
- getParsedSyncRules(options: storage.ParseSyncRulesOptions): HydratedSyncRules;
59
+ getParsedSyncConfigSet(options: storage.ParseSyncConfigOptions): MongoParsedSyncConfigSet;
60
+ getParsedSyncRules(options: storage.ParseSyncConfigOptions): HydratedSyncConfig;
51
61
  getCheckpoint(): Promise<storage.ReplicationCheckpoint>;
62
+ protected abstract fetchCheckpointState(session: mongo.ClientSession): Promise<{
63
+ checkpoint: bigint;
64
+ lsn: string | null;
65
+ } | null>;
52
66
  getCheckpointInternal(): Promise<storage.ReplicationCheckpoint | null>;
53
67
  protected abstract initializeVersionStorage(): Promise<void>;
54
68
  private initializeStorage;
55
- protected abstract createWriterImpl(batchOptions: MongoBucketBatchOptions): storage.BucketStorageBatch;
69
+ /**
70
+ * Create the version-specific writer. Implementations fetch their own resume state
71
+ * (e.g. resume LSN, v1 keepalive op) and construct the batch from
72
+ * {@link writerBatchOptions} plus the version-specific fields.
73
+ */
74
+ protected abstract createWriterImpl(options: storage.CreateWriterOptions): Promise<storage.BucketStorageBatch>;
75
+ /**
76
+ * The version-independent part of the batch options.
77
+ */
78
+ protected writerBatchOptions(options: storage.CreateWriterOptions): Omit<MongoBucketBatchOptions, 'resumeFromLsn'>;
56
79
  createWriter(options: storage.CreateWriterOptions): Promise<storage.BucketStorageBatch>;
57
80
  startBatch(options: storage.CreateWriterOptions, callback: (batch: storage.BucketStorageBatch) => Promise<void>): Promise<storage.FlushedResult | null>;
58
- protected abstract sourceTableBaseId(): Partial<CommonSourceTableDocument>;
59
- protected abstract augmentCreatedSourceTableDocument(createDoc: CommonSourceTableDocument, options: storage.ResolveTableOptions, candidateSourceTable: storage.SourceTable): void;
60
- protected abstract initializeResolvedSourceRecords(sourceTableId: bson.ObjectId): Promise<void>;
61
- resolveTable(options: storage.ResolveTableOptions): Promise<storage.ResolveTableResult>;
62
81
  protected abstract getParameterSetsImpl(checkpoint: MongoReplicationCheckpoint, lookups: ScopedParameterLookup[], limit: number): Promise<ParameterLookupRows[]>;
63
82
  getParameterSets(checkpoint: MongoReplicationCheckpoint, lookups: ScopedParameterLookup[], limit: number): Promise<ParameterLookupRows[]>;
64
83
  protected abstract getBucketDataBatchImpl(checkpoint: utils.InternalOpId, dataBuckets: storage.BucketDataRequest[], options?: storage.BucketDataBatchOptions): AsyncIterable<storage.SyncBucketDataChunk>;
65
84
  getBucketDataBatch(checkpoint: utils.InternalOpId, dataBuckets: storage.BucketDataRequest[], options?: storage.BucketDataBatchOptions): AsyncIterable<storage.SyncBucketDataChunk>;
66
85
  getChecksums(checkpoint: utils.InternalOpId, buckets: storage.BucketChecksumRequest[]): Promise<utils.ChecksumMap>;
67
86
  clearChecksumCache(): void;
87
+ protected abstract terminateSyncRuleState(): Promise<void>;
68
88
  terminate(options?: storage.TerminateOptions): Promise<void>;
69
- getStatus(): Promise<storage.SyncRuleStatus>;
89
+ protected abstract getStatusImpl(): Promise<storage.ReplicationStreamStatus>;
90
+ getStatus(): Promise<storage.ReplicationStreamStatus>;
70
91
  protected abstract clearBucketData(signal?: AbortSignal): Promise<void>;
71
92
  protected abstract clearParameterIndexes(signal?: AbortSignal): Promise<void>;
72
93
  protected abstract clearSourceRecords(signal?: AbortSignal): Promise<void>;
73
94
  protected abstract clearBucketState(signal?: AbortSignal): Promise<void>;
74
95
  protected abstract clearSourceTables(signal?: AbortSignal): Promise<void>;
96
+ protected abstract clearSyncRuleState(): Promise<void>;
75
97
  clear(options?: storage.ClearStorageOptions): Promise<void>;
76
98
  protected clearDeleteMany(label: string, operation: () => Promise<mongo.DeleteResult>, signal?: AbortSignal): Promise<void>;
77
99
  reportError(e: any): Promise<void>;
78
100
  compact(options?: storage.CompactOptions): Promise<void>;
101
+ /**
102
+ * The highest op id persisted for this stream, whether or not covered by a checkpoint.
103
+ *
104
+ * Used as the default `maxOpId` for {@link populatePersistentChecksumCache}, which runs after
105
+ * initial replication but before the first checkpoint exists.
106
+ */
107
+ protected abstract fetchPersistedOpHead(): Promise<InternalOpId | null>;
79
108
  populatePersistentChecksumCache(options: PopulateChecksumCacheOptions): Promise<PopulateChecksumCacheResults>;
80
109
  private watchActiveCheckpoint;
81
110
  private readonly sharedIter;