@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
@@ -1,17 +0,0 @@
1
- import { BucketDataSource, ParameterIndexLookupCreator, SyncConfigWithErrors } from '@powersync/service-sync-rules';
2
- import { SyncRuleDocument } from './models.js';
3
- export type BucketDefinitionId = string;
4
- export type ParameterIndexId = string;
5
- export declare class BucketDefinitionMapping {
6
- private definitions;
7
- private parameterLookupMapping;
8
- static fromSyncRules(doc: Pick<SyncRuleDocument, 'rule_mapping'>): BucketDefinitionMapping;
9
- static fromParsedSyncRules(syncRules: SyncConfigWithErrors): BucketDefinitionMapping;
10
- constructor(definitions?: Record<string, BucketDefinitionId>, parameterLookupMapping?: Record<string, ParameterIndexId>);
11
- bucketSourceId(source: BucketDataSource): BucketDefinitionId;
12
- allBucketDefinitionIds(): BucketDefinitionId[];
13
- allParameterIndexIds(): ParameterIndexId[];
14
- parameterLookupId(source: ParameterIndexLookupCreator): ParameterIndexId;
15
- private parameterLookupKey;
16
- serialize(): NonNullable<SyncRuleDocument['rule_mapping']>;
17
- }
@@ -1,58 +0,0 @@
1
- import { ServiceAssertionError } from '@powersync/lib-services-framework';
2
- export class BucketDefinitionMapping {
3
- definitions;
4
- parameterLookupMapping;
5
- static fromSyncRules(doc) {
6
- return new BucketDefinitionMapping(doc.rule_mapping?.definitions ?? {}, doc.rule_mapping?.parameter_indexes ?? {});
7
- }
8
- static fromParsedSyncRules(syncRules) {
9
- const definitionNames = syncRules.config.bucketDataSources.map((source) => source.uniqueName).sort();
10
- const parameterKeys = syncRules.config.bucketParameterLookupSources
11
- .map((source) => `${source.defaultLookupScope.lookupName}#${source.defaultLookupScope.queryId}`)
12
- .sort();
13
- const definitions = {};
14
- const parameterLookups = {};
15
- for (const [index, uniqueName] of definitionNames.entries()) {
16
- definitions[uniqueName] = (index + 1).toString(16);
17
- }
18
- for (const [index, key] of parameterKeys.entries()) {
19
- parameterLookups[key] = (index + 1).toString(16);
20
- }
21
- return new BucketDefinitionMapping(definitions, parameterLookups);
22
- }
23
- constructor(definitions = {}, parameterLookupMapping = {}) {
24
- this.definitions = definitions;
25
- this.parameterLookupMapping = parameterLookupMapping;
26
- }
27
- bucketSourceId(source) {
28
- const defId = this.definitions[source.uniqueName];
29
- if (defId == null) {
30
- throw new ServiceAssertionError(`No mapping found for bucket source ${source.uniqueName}`);
31
- }
32
- return defId;
33
- }
34
- allBucketDefinitionIds() {
35
- return Object.values(this.definitions);
36
- }
37
- allParameterIndexIds() {
38
- return Object.values(this.parameterLookupMapping);
39
- }
40
- parameterLookupId(source) {
41
- const key = this.parameterLookupKey(source.defaultLookupScope.lookupName, source.defaultLookupScope.queryId);
42
- const defId = this.parameterLookupMapping[key];
43
- if (defId == null) {
44
- throw new ServiceAssertionError(`No mapping found for parameter lookup source ${key}`);
45
- }
46
- return defId;
47
- }
48
- parameterLookupKey(lookupName, queryId) {
49
- return `${lookupName}#${queryId}`;
50
- }
51
- serialize() {
52
- return {
53
- definitions: { ...this.definitions },
54
- parameter_indexes: { ...this.parameterLookupMapping }
55
- };
56
- }
57
- }
58
- //# sourceMappingURL=BucketDefinitionMapping.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BucketDefinitionMapping.js","sourceRoot":"","sources":["../../../src/storage/implementation/BucketDefinitionMapping.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import { storage } from '@powersync/service-core';
2
- import { HydratedSyncRules, HydrationState, SyncConfigWithErrors } from '@powersync/service-sync-rules';
3
- import { BucketDefinitionMapping } from './BucketDefinitionMapping.js';
4
- import { StorageConfig } from './models.js';
5
- export declare class MongoPersistedSyncRules implements storage.PersistedSyncRules {
6
- readonly id: number;
7
- readonly sync_rules: SyncConfigWithErrors;
8
- readonly slot_name: string;
9
- private readonly mapping;
10
- private readonly storageConfig;
11
- readonly hydrationState: HydrationState;
12
- constructor(id: number, sync_rules: SyncConfigWithErrors, slot_name: string, mapping: BucketDefinitionMapping | null, storageConfig: StorageConfig);
13
- hydratedSyncRules(): HydratedSyncRules;
14
- }
@@ -1,64 +0,0 @@
1
- import { ServiceAssertionError } from '@powersync/lib-services-framework';
2
- import { CompatibilityOption, DEFAULT_HYDRATION_STATE, versionedHydrationState } from '@powersync/service-sync-rules';
3
- export class MongoPersistedSyncRules {
4
- id;
5
- sync_rules;
6
- slot_name;
7
- mapping;
8
- storageConfig;
9
- hydrationState;
10
- constructor(id, sync_rules, slot_name, mapping, storageConfig) {
11
- this.id = id;
12
- this.sync_rules = sync_rules;
13
- this.slot_name = slot_name;
14
- this.mapping = mapping;
15
- this.storageConfig = storageConfig;
16
- if (this.storageConfig.incrementalReprocessing) {
17
- if (this.mapping == null) {
18
- throw new ServiceAssertionError(`mapping is required for v3 storage`);
19
- }
20
- this.hydrationState = new MongoHydrationState(this.mapping, this.id);
21
- }
22
- else if (!this.sync_rules.config.compatibility.isEnabled(CompatibilityOption.versionedBucketIds) &&
23
- !this.storageConfig.versionedBuckets) {
24
- this.hydrationState = DEFAULT_HYDRATION_STATE;
25
- }
26
- else {
27
- this.hydrationState = versionedHydrationState(this.id);
28
- }
29
- }
30
- hydratedSyncRules() {
31
- return this.sync_rules.config.hydrate({ hydrationState: this.hydrationState });
32
- }
33
- }
34
- class MongoHydrationState {
35
- mapping;
36
- version;
37
- constructor(mapping, version) {
38
- this.mapping = mapping;
39
- this.version = version;
40
- }
41
- getBucketSourceScope(source) {
42
- // Keep this aligned with versionedHydrationState() for now.
43
- //
44
- // Previous Mongo-specific behavior:
45
- // const defId = this.mapping.bucketSourceId(source);
46
- // return {
47
- // bucketPrefix: defId,
48
- // source
49
- // };
50
- return {
51
- bucketPrefix: `${this.version}#${source.uniqueName}`,
52
- source
53
- };
54
- }
55
- getParameterIndexLookupScope(source) {
56
- const defId = this.mapping.parameterLookupId(source);
57
- return {
58
- lookupName: defId,
59
- queryId: '',
60
- source
61
- };
62
- }
63
- }
64
- //# sourceMappingURL=MongoPersistedSyncRules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MongoPersistedSyncRules.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoPersistedSyncRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAGL,mBAAmB,EACnB,uBAAuB,EAKvB,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,OAAO,uBAAuB;IAIhB;IACA;IACA;IACC;IACA;IAPH,cAAc,CAAiB;IAE/C,YACkB,EAAU,EACV,UAAgC,EAChC,SAAiB,EAChB,OAAuC,EACvC,aAA4B;QAJ7B,OAAE,GAAF,EAAE,CAAQ;QACV,eAAU,GAAV,UAAU,CAAsB;QAChC,cAAS,GAAT,SAAS,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAgC;QACvC,kBAAa,GAAb,aAAa,CAAe;QAE7C,IAAI,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,IAAI,qBAAqB,CAAC,oCAAoC,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;aAAM,IACL,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;YACvF,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,EACpC,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,uBAAuB,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,GAAG,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACjF,CAAC;CACF;AAED,MAAM,mBAAmB;IAEJ;IACA;IAFnB,YACmB,OAAgC,EAChC,OAAe;QADf,YAAO,GAAP,OAAO,CAAyB;QAChC,YAAO,GAAP,OAAO,CAAQ;IAC/B,CAAC;IAEJ,oBAAoB,CAAC,MAAwB;QAC3C,4DAA4D;QAC5D,EAAE;QACF,oCAAoC;QACpC,qDAAqD;QACrD,WAAW;QACX,yBAAyB;QACzB,WAAW;QACX,KAAK;QACL,OAAO;YACL,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE;YACpD,MAAM;SACP,CAAC;IACJ,CAAC;IAED,4BAA4B,CAAC,MAAmC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,EAAE;YACX,MAAM;SACP,CAAC;IACJ,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import { mongo } from '@powersync/lib-service-mongodb';
2
- import { storage } from '@powersync/service-core';
3
- import { BucketDefinitionMapping } from './BucketDefinitionMapping.js';
4
- import { MongoSyncRulesLock } from './MongoSyncRulesLock.js';
5
- import { PowerSyncMongo } from './db.js';
6
- import { SyncRuleDocument } from './models.js';
7
- export declare class MongoPersistedSyncRulesContent extends storage.PersistedSyncRulesContent {
8
- private db;
9
- current_lock: MongoSyncRulesLock | null;
10
- readonly mapping: BucketDefinitionMapping;
11
- constructor(db: PowerSyncMongo, doc: mongo.WithId<SyncRuleDocument>);
12
- getStorageConfig(): import("./models.js").StorageConfig;
13
- parsed(options: storage.ParseSyncRulesOptions): storage.PersistedSyncRules;
14
- lock(): Promise<MongoSyncRulesLock>;
15
- }
@@ -1,42 +0,0 @@
1
- import { storage } from '@powersync/service-core';
2
- import { BucketDefinitionMapping } from './BucketDefinitionMapping.js';
3
- import { MongoPersistedSyncRules } from './MongoPersistedSyncRules.js';
4
- import { MongoSyncRulesLock } from './MongoSyncRulesLock.js';
5
- import { getMongoStorageConfig } from './models.js';
6
- export class MongoPersistedSyncRulesContent extends storage.PersistedSyncRulesContent {
7
- db;
8
- current_lock = null;
9
- mapping;
10
- constructor(db, doc) {
11
- super({
12
- id: doc._id,
13
- sync_rules_content: doc.content,
14
- compiled_plan: doc.serialized_plan ?? null,
15
- last_checkpoint_lsn: doc.last_checkpoint_lsn,
16
- // Handle legacy values
17
- slot_name: doc.slot_name ?? `powersync_${doc._id}`,
18
- last_fatal_error: doc.last_fatal_error,
19
- last_fatal_error_ts: doc.last_fatal_error_ts,
20
- last_checkpoint_ts: doc.last_checkpoint_ts,
21
- last_keepalive_ts: doc.last_keepalive_ts,
22
- active: doc.state == 'ACTIVE',
23
- storageVersion: doc.storage_version ?? storage.LEGACY_STORAGE_VERSION
24
- });
25
- this.db = db;
26
- this.mapping = BucketDefinitionMapping.fromSyncRules(doc);
27
- }
28
- getStorageConfig() {
29
- return getMongoStorageConfig(this.storageVersion);
30
- }
31
- parsed(options) {
32
- const parsed = super.parsed(options);
33
- const storageConfig = this.getStorageConfig();
34
- return new MongoPersistedSyncRules(parsed.id, parsed.sync_rules, parsed.slot_name, storageConfig.incrementalReprocessing ? this.mapping : null, storageConfig);
35
- }
36
- async lock() {
37
- const lock = await MongoSyncRulesLock.createLock(this.db.versioned(this.getStorageConfig()), this);
38
- this.current_lock = lock;
39
- return lock;
40
- }
41
- }
42
- //# sourceMappingURL=MongoPersistedSyncRulesContent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MongoPersistedSyncRulesContent.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoPersistedSyncRulesContent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAoB,MAAM,aAAa,CAAC;AAEtE,MAAM,OAAO,8BAA+B,SAAQ,OAAO,CAAC,yBAAyB;IAKzE;IAJH,YAAY,GAA8B,IAAI,CAAC;IACtC,OAAO,CAA0B;IAEjD,YACU,EAAkB,EAC1B,GAAmC;QAEnC,KAAK,CAAC;YACJ,EAAE,EAAE,GAAG,CAAC,GAAG;YACX,kBAAkB,EAAE,GAAG,CAAC,OAAO;YAC/B,aAAa,EAAE,GAAG,CAAC,eAAe,IAAI,IAAI;YAC1C,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;YAC5C,uBAAuB;YACvB,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,aAAa,GAAG,CAAC,GAAG,EAAE;YAClD,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;YAC5C,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;YAC1C,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ;YAC7B,cAAc,EAAE,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,sBAAsB;SACtE,CAAC,CAAC;QAhBK,OAAE,GAAF,EAAE,CAAgB;QAiB1B,IAAI,CAAC,OAAO,GAAG,uBAAuB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,gBAAgB;QACd,OAAO,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,OAAsC;QAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9C,OAAO,IAAI,uBAAuB,CAChC,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,EAChB,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAC3D,aAAa,CACd,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACnG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,13 +0,0 @@
1
- import { InternalOpId } from '@powersync/service-core';
2
- import * as bson from 'bson';
3
- import { BucketDefinitionMapping } from '../BucketDefinitionMapping.js';
4
- import type { VersionedPowerSyncMongo } from '../db.js';
5
- export interface MongoSyncBucketStorageContext<TDb extends VersionedPowerSyncMongo = VersionedPowerSyncMongo> {
6
- db: TDb;
7
- group_id: number;
8
- mapping: BucketDefinitionMapping;
9
- }
10
- export interface MongoSyncBucketStorageCheckpoint {
11
- checkpoint: InternalOpId;
12
- snapshotTime: bson.Timestamp;
13
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=MongoSyncBucketStorageContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MongoSyncBucketStorageContext.js","sourceRoot":"","sources":["../../../../src/storage/implementation/common/MongoSyncBucketStorageContext.ts"],"names":[],"mappings":""}
@@ -1,9 +0,0 @@
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
- }
@@ -1,18 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,5 +0,0 @@
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[];
@@ -1,9 +0,0 @@
1
- import { deserializeParameterLookup } from '@powersync/service-core';
2
- import * as bson from 'bson';
3
- export function serializeParameterLookupV3(lookup) {
4
- return new bson.Binary(bson.serialize({ l: lookup.values.slice(2) }));
5
- }
6
- export function deserializeParameterLookupV3(lookup, indexId) {
7
- return [indexId, '', ...deserializeParameterLookup(lookup)];
8
- }
9
- //# sourceMappingURL=MongoParameterLookupV3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MongoParameterLookupV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoParameterLookupV3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,UAAU,0BAA0B,CAAC,MAA6B;IACtE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAmB,EAAE,OAAyB;IACzF,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC"}
@@ -1,72 +0,0 @@
1
- import { ServiceAssertionError } from '@powersync/lib-services-framework';
2
- import { BucketDataSource, ParameterIndexLookupCreator, SyncConfigWithErrors } from '@powersync/service-sync-rules';
3
- import { SyncRuleDocument } from './models.js';
4
-
5
- export type BucketDefinitionId = string;
6
- export type ParameterIndexId = string;
7
-
8
- export class BucketDefinitionMapping {
9
- static fromSyncRules(doc: Pick<SyncRuleDocument, 'rule_mapping'>): BucketDefinitionMapping {
10
- return new BucketDefinitionMapping(doc.rule_mapping?.definitions ?? {}, doc.rule_mapping?.parameter_indexes ?? {});
11
- }
12
-
13
- static fromParsedSyncRules(syncRules: SyncConfigWithErrors): BucketDefinitionMapping {
14
- const definitionNames = syncRules.config.bucketDataSources.map((source) => source.uniqueName).sort();
15
- const parameterKeys = syncRules.config.bucketParameterLookupSources
16
- .map((source) => `${source.defaultLookupScope.lookupName}#${source.defaultLookupScope.queryId}`)
17
- .sort();
18
-
19
- const definitions: Record<string, BucketDefinitionId> = {};
20
- const parameterLookups: Record<string, ParameterIndexId> = {};
21
-
22
- for (const [index, uniqueName] of definitionNames.entries()) {
23
- definitions[uniqueName] = (index + 1).toString(16);
24
- }
25
- for (const [index, key] of parameterKeys.entries()) {
26
- parameterLookups[key] = (index + 1).toString(16);
27
- }
28
-
29
- return new BucketDefinitionMapping(definitions, parameterLookups);
30
- }
31
-
32
- constructor(
33
- private definitions: Record<string, BucketDefinitionId> = {},
34
- private parameterLookupMapping: Record<string, ParameterIndexId> = {}
35
- ) {}
36
-
37
- bucketSourceId(source: BucketDataSource): BucketDefinitionId {
38
- const defId = this.definitions[source.uniqueName];
39
- if (defId == null) {
40
- throw new ServiceAssertionError(`No mapping found for bucket source ${source.uniqueName}`);
41
- }
42
- return defId;
43
- }
44
-
45
- allBucketDefinitionIds(): BucketDefinitionId[] {
46
- return Object.values(this.definitions);
47
- }
48
-
49
- allParameterIndexIds(): ParameterIndexId[] {
50
- return Object.values(this.parameterLookupMapping);
51
- }
52
-
53
- parameterLookupId(source: ParameterIndexLookupCreator): ParameterIndexId {
54
- const key = this.parameterLookupKey(source.defaultLookupScope.lookupName, source.defaultLookupScope.queryId);
55
- const defId = this.parameterLookupMapping[key];
56
- if (defId == null) {
57
- throw new ServiceAssertionError(`No mapping found for parameter lookup source ${key}`);
58
- }
59
- return defId;
60
- }
61
-
62
- private parameterLookupKey(lookupName: string, queryId: string) {
63
- return `${lookupName}#${queryId}`;
64
- }
65
-
66
- serialize(): NonNullable<SyncRuleDocument['rule_mapping']> {
67
- return {
68
- definitions: { ...this.definitions },
69
- parameter_indexes: { ...this.parameterLookupMapping }
70
- };
71
- }
72
- }
@@ -1,76 +0,0 @@
1
- import { ServiceAssertionError } from '@powersync/lib-services-framework';
2
- import { storage } from '@powersync/service-core';
3
- import {
4
- BucketDataScope,
5
- BucketDataSource,
6
- CompatibilityOption,
7
- DEFAULT_HYDRATION_STATE,
8
- HydratedSyncRules,
9
- HydrationState,
10
- ParameterIndexLookupCreator,
11
- SyncConfigWithErrors,
12
- versionedHydrationState
13
- } from '@powersync/service-sync-rules';
14
- import { BucketDefinitionMapping } from './BucketDefinitionMapping.js';
15
- import { StorageConfig } from './models.js';
16
-
17
- export class MongoPersistedSyncRules implements storage.PersistedSyncRules {
18
- public readonly hydrationState: HydrationState;
19
-
20
- constructor(
21
- public readonly id: number,
22
- public readonly sync_rules: SyncConfigWithErrors,
23
- public readonly slot_name: string,
24
- private readonly mapping: BucketDefinitionMapping | null,
25
- private readonly storageConfig: StorageConfig
26
- ) {
27
- if (this.storageConfig.incrementalReprocessing) {
28
- if (this.mapping == null) {
29
- throw new ServiceAssertionError(`mapping is required for v3 storage`);
30
- }
31
- this.hydrationState = new MongoHydrationState(this.mapping, this.id);
32
- } else if (
33
- !this.sync_rules.config.compatibility.isEnabled(CompatibilityOption.versionedBucketIds) &&
34
- !this.storageConfig.versionedBuckets
35
- ) {
36
- this.hydrationState = DEFAULT_HYDRATION_STATE;
37
- } else {
38
- this.hydrationState = versionedHydrationState(this.id);
39
- }
40
- }
41
-
42
- hydratedSyncRules(): HydratedSyncRules {
43
- return this.sync_rules.config.hydrate({ hydrationState: this.hydrationState });
44
- }
45
- }
46
-
47
- class MongoHydrationState implements HydrationState {
48
- constructor(
49
- private readonly mapping: BucketDefinitionMapping,
50
- private readonly version: number
51
- ) {}
52
-
53
- getBucketSourceScope(source: BucketDataSource): BucketDataScope {
54
- // Keep this aligned with versionedHydrationState() for now.
55
- //
56
- // Previous Mongo-specific behavior:
57
- // const defId = this.mapping.bucketSourceId(source);
58
- // return {
59
- // bucketPrefix: defId,
60
- // source
61
- // };
62
- return {
63
- bucketPrefix: `${this.version}#${source.uniqueName}`,
64
- source
65
- };
66
- }
67
-
68
- getParameterIndexLookupScope(source: ParameterIndexLookupCreator) {
69
- const defId = this.mapping.parameterLookupId(source);
70
- return {
71
- lookupName: defId,
72
- queryId: '',
73
- source
74
- };
75
- }
76
- }
@@ -1,56 +0,0 @@
1
- import { mongo } from '@powersync/lib-service-mongodb';
2
- import { storage } from '@powersync/service-core';
3
- import { BucketDefinitionMapping } from './BucketDefinitionMapping.js';
4
- import { MongoPersistedSyncRules } from './MongoPersistedSyncRules.js';
5
- import { MongoSyncRulesLock } from './MongoSyncRulesLock.js';
6
- import { PowerSyncMongo } from './db.js';
7
- import { getMongoStorageConfig, SyncRuleDocument } from './models.js';
8
-
9
- export class MongoPersistedSyncRulesContent extends storage.PersistedSyncRulesContent {
10
- public current_lock: MongoSyncRulesLock | null = null;
11
- public readonly mapping: BucketDefinitionMapping;
12
-
13
- constructor(
14
- private db: PowerSyncMongo,
15
- doc: mongo.WithId<SyncRuleDocument>
16
- ) {
17
- super({
18
- id: doc._id,
19
- sync_rules_content: doc.content,
20
- compiled_plan: doc.serialized_plan ?? null,
21
- last_checkpoint_lsn: doc.last_checkpoint_lsn,
22
- // Handle legacy values
23
- slot_name: doc.slot_name ?? `powersync_${doc._id}`,
24
- last_fatal_error: doc.last_fatal_error,
25
- last_fatal_error_ts: doc.last_fatal_error_ts,
26
- last_checkpoint_ts: doc.last_checkpoint_ts,
27
- last_keepalive_ts: doc.last_keepalive_ts,
28
- active: doc.state == 'ACTIVE',
29
- storageVersion: doc.storage_version ?? storage.LEGACY_STORAGE_VERSION
30
- });
31
- this.mapping = BucketDefinitionMapping.fromSyncRules(doc);
32
- }
33
-
34
- getStorageConfig() {
35
- return getMongoStorageConfig(this.storageVersion);
36
- }
37
-
38
- parsed(options: storage.ParseSyncRulesOptions): storage.PersistedSyncRules {
39
- const parsed = super.parsed(options);
40
- const storageConfig = this.getStorageConfig();
41
-
42
- return new MongoPersistedSyncRules(
43
- parsed.id,
44
- parsed.sync_rules,
45
- parsed.slot_name,
46
- storageConfig.incrementalReprocessing ? this.mapping : null,
47
- storageConfig
48
- );
49
- }
50
-
51
- async lock() {
52
- const lock = await MongoSyncRulesLock.createLock(this.db.versioned(this.getStorageConfig()), this);
53
- this.current_lock = lock;
54
- return lock;
55
- }
56
- }
@@ -1,15 +0,0 @@
1
- import { InternalOpId } from '@powersync/service-core';
2
- import * as bson from 'bson';
3
- import { BucketDefinitionMapping } from '../BucketDefinitionMapping.js';
4
- import type { VersionedPowerSyncMongo } from '../db.js';
5
-
6
- export interface MongoSyncBucketStorageContext<TDb extends VersionedPowerSyncMongo = VersionedPowerSyncMongo> {
7
- db: TDb;
8
- group_id: number;
9
- mapping: BucketDefinitionMapping;
10
- }
11
-
12
- export interface MongoSyncBucketStorageCheckpoint {
13
- checkpoint: InternalOpId;
14
- snapshotTime: bson.Timestamp;
15
- }
@@ -1,24 +0,0 @@
1
- import { mongo } from '@powersync/lib-service-mongodb';
2
- import { MongoParameterCompactor } from '../MongoParameterCompactor.js';
3
- import { VersionedPowerSyncMongoV3 } from './VersionedPowerSyncMongoV3.js';
4
-
5
- export class MongoParameterCompactorV3 extends MongoParameterCompactor {
6
- declare protected readonly db: VersionedPowerSyncMongoV3;
7
-
8
- protected async getCollections(): Promise<mongo.Collection<mongo.Document>[]> {
9
- const collections = await this.db.listParameterIndexCollectionsV3(this.group_id);
10
- return collections.map((collection) => collection.collection as unknown as mongo.Collection<mongo.Document>);
11
- }
12
-
13
- protected collectionFilter(): mongo.Document {
14
- return {};
15
- }
16
-
17
- protected deleteFilter(doc: mongo.Document): mongo.Document {
18
- return {
19
- lookup: doc.lookup,
20
- _id: { $lte: doc._id },
21
- key: doc.key
22
- };
23
- }
24
- }
@@ -1,12 +0,0 @@
1
- import { deserializeParameterLookup } from '@powersync/service-core';
2
- import { ScopedParameterLookup, SqliteJsonValue } from '@powersync/service-sync-rules';
3
- import * as bson from 'bson';
4
- import { ParameterIndexId } from '../BucketDefinitionMapping.js';
5
-
6
- export function serializeParameterLookupV3(lookup: ScopedParameterLookup): bson.Binary {
7
- return new bson.Binary(bson.serialize({ l: lookup.values.slice(2) }));
8
- }
9
-
10
- export function deserializeParameterLookupV3(lookup: bson.Binary, indexId: ParameterIndexId): SqliteJsonValue[] {
11
- return [indexId, '', ...deserializeParameterLookup(lookup)];
12
- }