@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.
- package/CHANGELOG.md +53 -0
- package/dist/storage/MongoBucketStorage.d.ts +35 -15
- package/dist/storage/MongoBucketStorage.js +309 -86
- package/dist/storage/MongoBucketStorage.js.map +1 -1
- package/dist/storage/implementation/CheckpointState.d.ts +20 -0
- package/dist/storage/implementation/CheckpointState.js +31 -0
- package/dist/storage/implementation/CheckpointState.js.map +1 -0
- package/dist/storage/implementation/MongoBucketBatch.d.ts +69 -39
- package/dist/storage/implementation/MongoBucketBatch.js +104 -313
- package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
- package/dist/storage/implementation/MongoChecksums.d.ts +11 -9
- package/dist/storage/implementation/MongoChecksums.js +3 -111
- package/dist/storage/implementation/MongoChecksums.js.map +1 -1
- package/dist/storage/implementation/MongoCompactor.d.ts +3 -1
- package/dist/storage/implementation/MongoCompactor.js +18 -9
- package/dist/storage/implementation/MongoCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoHydrationState.d.ts +11 -0
- package/dist/storage/implementation/MongoHydrationState.js +49 -0
- package/dist/storage/implementation/MongoHydrationState.js.map +1 -0
- package/dist/storage/implementation/MongoParameterCompactor.d.ts +6 -5
- package/dist/storage/implementation/MongoParameterCompactor.js +24 -1
- package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoParsedSyncConfigSet.d.ts +13 -0
- package/dist/storage/implementation/MongoParsedSyncConfigSet.js +64 -0
- package/dist/storage/implementation/MongoParsedSyncConfigSet.js.map +1 -0
- package/dist/storage/implementation/MongoPersistedReplicationStream.d.ts +36 -0
- package/dist/storage/implementation/MongoPersistedReplicationStream.js +90 -0
- package/dist/storage/implementation/MongoPersistedReplicationStream.js.map +1 -0
- package/dist/storage/implementation/MongoPersistedSyncConfigContent.d.ts +25 -0
- package/dist/storage/implementation/MongoPersistedSyncConfigContent.js +121 -0
- package/dist/storage/implementation/MongoPersistedSyncConfigContent.js.map +1 -0
- package/dist/storage/implementation/MongoStorageProvider.js +5 -2
- package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +50 -21
- package/dist/storage/implementation/MongoSyncBucketStorage.js +62 -199
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/MongoSyncRulesLock.d.ts +5 -1
- package/dist/storage/implementation/MongoSyncRulesLock.js +9 -5
- package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
- package/dist/storage/implementation/SyncRuleStateUpdate.d.ts +14 -0
- package/dist/storage/implementation/SyncRuleStateUpdate.js +36 -0
- package/dist/storage/implementation/SyncRuleStateUpdate.js.map +1 -0
- package/dist/storage/implementation/common/BucketDataDoc.d.ts +1 -1
- package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.d.ts +6 -0
- package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.js +2 -0
- package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.js.map +1 -0
- package/dist/storage/implementation/common/PersistedBatch.d.ts +2 -3
- package/dist/storage/implementation/common/PersistedBatch.js +5 -0
- package/dist/storage/implementation/common/PersistedBatch.js.map +1 -1
- package/dist/storage/implementation/common/SourceRecordStore.d.ts +1 -2
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.d.ts +1 -1
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js +1 -1
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js.map +1 -1
- package/dist/storage/implementation/createMongoSyncBucketStorage.d.ts +2 -2
- package/dist/storage/implementation/createMongoSyncBucketStorage.js +4 -4
- package/dist/storage/implementation/createMongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/db.d.ts +10 -2
- package/dist/storage/implementation/db.js +9 -14
- package/dist/storage/implementation/db.js.map +1 -1
- package/dist/storage/implementation/models.d.ts +25 -50
- package/dist/storage/implementation/models.js.map +1 -1
- package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +23 -1
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js +403 -2
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -1
- package/dist/storage/implementation/v1/MongoChecksumsV1.js +114 -3
- package/dist/storage/implementation/v1/MongoChecksumsV1.js.map +1 -1
- package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +1 -1
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +22 -15
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +100 -27
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -1
- package/dist/storage/implementation/v1/PersistedBatchV1.d.ts +1 -2
- package/dist/storage/implementation/v1/PersistedBatchV1.js.map +1 -1
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.d.ts +2 -1
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js +3 -0
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js.map +1 -1
- package/dist/storage/implementation/v1/models.d.ts +21 -1
- package/dist/storage/implementation/v1/models.js.map +1 -1
- package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +21 -0
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js +459 -3
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoChecksumsV3.d.ts +27 -7
- package/dist/storage/implementation/v3/MongoChecksumsV3.js +202 -18
- package/dist/storage/implementation/v3/MongoChecksumsV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +20 -3
- package/dist/storage/implementation/v3/MongoCompactorV3.js +511 -22
- package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.d.ts +62 -0
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js +350 -0
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js.map +1 -0
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +50 -16
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +292 -75
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -1
- package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +2 -3
- package/dist/storage/implementation/v3/PersistedBatchV3.js +43 -20
- package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -1
- package/dist/storage/implementation/v3/SingleBucketStoreV3.js +52 -16
- package/dist/storage/implementation/v3/SingleBucketStoreV3.js.map +1 -1
- package/dist/storage/implementation/v3/SourceRecordStoreV3.d.ts +3 -3
- package/dist/storage/implementation/v3/SourceRecordStoreV3.js +13 -11
- package/dist/storage/implementation/v3/SourceRecordStoreV3.js.map +1 -1
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +16 -14
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +32 -27
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -1
- package/dist/storage/implementation/v3/bucket-format.d.ts +4 -0
- package/dist/storage/implementation/v3/bucket-format.js +58 -0
- package/dist/storage/implementation/v3/bucket-format.js.map +1 -0
- package/dist/storage/implementation/v3/chunking.d.ts +10 -0
- package/dist/storage/implementation/v3/chunking.js +28 -0
- package/dist/storage/implementation/v3/chunking.js.map +1 -0
- package/dist/storage/implementation/v3/models.d.ts +111 -10
- package/dist/storage/implementation/v3/models.js +11 -28
- package/dist/storage/implementation/v3/models.js.map +1 -1
- package/dist/storage/implementation/v3/source-table-utils.d.ts +55 -0
- package/dist/storage/implementation/v3/source-table-utils.js +214 -0
- package/dist/storage/implementation/v3/source-table-utils.js.map +1 -0
- package/dist/storage/storage-index.d.ts +4 -4
- package/dist/storage/storage-index.js +4 -4
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/types/types.d.ts +2 -2
- package/dist/utils/test-utils.d.ts +1 -2
- package/dist/utils/test-utils.js +5 -1
- package/dist/utils/test-utils.js.map +1 -1
- package/dist/utils/util.d.ts +1 -1
- package/dist/utils/util.js +3 -2
- package/dist/utils/util.js.map +1 -1
- package/package.json +9 -19
- package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +1 -1
- package/src/storage/MongoBucketStorage.ts +464 -95
- package/src/storage/implementation/CheckpointState.ts +59 -0
- package/src/storage/implementation/MongoBucketBatch.ts +159 -405
- package/src/storage/implementation/MongoChecksums.ts +7 -138
- package/src/storage/implementation/MongoCompactor.ts +20 -10
- package/src/storage/implementation/MongoHydrationState.ts +61 -0
- package/src/storage/implementation/MongoParameterCompactor.ts +24 -5
- package/src/storage/implementation/MongoParsedSyncConfigSet.ts +88 -0
- package/src/storage/implementation/MongoPersistedReplicationStream.ts +118 -0
- package/src/storage/implementation/MongoPersistedSyncConfigContent.ts +152 -0
- package/src/storage/implementation/MongoStorageProvider.ts +5 -2
- package/src/storage/implementation/MongoSyncBucketStorage.ts +89 -250
- package/src/storage/implementation/MongoSyncRulesLock.ts +14 -5
- package/src/storage/implementation/SyncRuleStateUpdate.ts +38 -0
- package/src/storage/implementation/common/BucketDataDoc.ts +1 -1
- package/src/storage/implementation/common/MongoSyncBucketStorageCheckpoint.ts +7 -0
- package/src/storage/implementation/common/PersistedBatch.ts +8 -4
- package/src/storage/implementation/common/SourceRecordStore.ts +1 -2
- package/src/storage/implementation/common/VersionedPowerSyncMongoBase.ts +1 -1
- package/src/storage/implementation/createMongoSyncBucketStorage.ts +21 -7
- package/src/storage/implementation/db.ts +16 -21
- package/src/storage/implementation/models.ts +28 -61
- package/src/storage/implementation/v1/MongoBucketBatchV1.ts +503 -5
- package/src/storage/implementation/v1/MongoChecksumsV1.ts +137 -4
- package/src/storage/implementation/v1/MongoCompactorV1.ts +1 -1
- package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +150 -49
- package/src/storage/implementation/v1/PersistedBatchV1.ts +1 -2
- package/src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts +11 -1
- package/src/storage/implementation/v1/models.ts +25 -0
- package/src/storage/implementation/v3/MongoBucketBatchV3.ts +611 -4
- package/src/storage/implementation/v3/MongoChecksumsV3.ts +262 -26
- package/src/storage/implementation/v3/MongoCompactorV3.ts +647 -30
- package/src/storage/implementation/v3/MongoStoppedSyncConfigCleanup.ts +480 -0
- package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +397 -111
- package/src/storage/implementation/v3/PersistedBatchV3.ts +63 -38
- package/src/storage/implementation/v3/SingleBucketStoreV3.ts +59 -19
- package/src/storage/implementation/v3/SourceRecordStoreV3.ts +12 -12
- package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +48 -38
- package/src/storage/implementation/v3/bucket-format.ts +70 -0
- package/src/storage/implementation/v3/chunking.ts +38 -0
- package/src/storage/implementation/v3/models.ts +150 -44
- package/src/storage/implementation/v3/source-table-utils.ts +392 -0
- package/src/storage/storage-index.ts +12 -4
- package/src/utils/test-utils.ts +6 -3
- package/src/utils/util.ts +3 -2
- package/test/src/__snapshots__/storage.test.ts.snap +0 -75
- package/test/src/__snapshots__/storage_sync.test.ts.snap +48 -48
- package/test/src/cleanup-stopped-sync-configs.test.ts +648 -0
- package/test/src/storage.test.ts +11 -11
- package/test/src/storage_compacting.test.ts +1956 -6
- package/test/src/storage_sync.test.ts +1429 -42
- package/test/src/storeCurrentData.test.ts +221 -0
- package/test/src/util.ts +2 -1
- package/tsconfig.json +1 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/storage/implementation/BucketDefinitionMapping.d.ts +0 -17
- package/dist/storage/implementation/BucketDefinitionMapping.js +0 -58
- package/dist/storage/implementation/BucketDefinitionMapping.js.map +0 -1
- package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +0 -14
- package/dist/storage/implementation/MongoPersistedSyncRules.js +0 -64
- package/dist/storage/implementation/MongoPersistedSyncRules.js.map +0 -1
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +0 -15
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +0 -42
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +0 -1
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.d.ts +0 -13
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js +0 -2
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js.map +0 -1
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +0 -9
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +0 -18
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +0 -1
- package/dist/storage/implementation/v3/MongoParameterLookupV3.d.ts +0 -5
- package/dist/storage/implementation/v3/MongoParameterLookupV3.js +0 -9
- package/dist/storage/implementation/v3/MongoParameterLookupV3.js.map +0 -1
- package/src/storage/implementation/BucketDefinitionMapping.ts +0 -72
- package/src/storage/implementation/MongoPersistedSyncRules.ts +0 -76
- package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +0 -56
- package/src/storage/implementation/common/MongoSyncBucketStorageContext.ts +0 -15
- package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +0 -24
- 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 +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
|
-
}
|