@powersync/service-module-mongodb 0.0.0-dev-20241219153510 → 0.0.0-dev-20250108073049
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 +19 -6
- package/dist/api/MongoRouteAPIAdapter.d.ts +1 -1
- package/dist/api/MongoRouteAPIAdapter.js +4 -3
- package/dist/api/MongoRouteAPIAdapter.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/module/MongoModule.d.ts +0 -1
- package/dist/module/MongoModule.js +2 -10
- package/dist/module/MongoModule.js.map +1 -1
- package/dist/replication/MongoRelation.js +15 -5
- package/dist/replication/MongoRelation.js.map +1 -1
- package/dist/types/types.d.ts +16 -22
- package/dist/types/types.js +4 -24
- package/dist/types/types.js.map +1 -1
- package/package.json +9 -10
- package/src/api/MongoRouteAPIAdapter.ts +4 -4
- package/src/index.ts +3 -4
- package/src/module/MongoModule.ts +2 -14
- package/src/replication/MongoRelation.ts +13 -5
- package/src/types/types.ts +8 -34
- package/test/src/change_stream.test.ts +2 -4
- package/test/src/env.ts +1 -1
- package/test/src/mongo_test.test.ts +69 -10
- package/test/src/setup.ts +4 -1
- package/test/src/slow_tests.test.ts +5 -12
- package/test/src/util.ts +5 -38
- package/test/tsconfig.json +1 -2
- package/tsconfig.json +6 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/db/db-index.d.ts +0 -1
- package/dist/db/db-index.js +0 -2
- package/dist/db/db-index.js.map +0 -1
- package/dist/db/mongo.d.ts +0 -35
- package/dist/db/mongo.js +0 -73
- package/dist/db/mongo.js.map +0 -1
- package/dist/locks/MonogLocks.d.ts +0 -36
- package/dist/locks/MonogLocks.js +0 -83
- package/dist/locks/MonogLocks.js.map +0 -1
- package/dist/migrations/MonogMigrationAgent.d.ts +0 -12
- package/dist/migrations/MonogMigrationAgent.js +0 -25
- package/dist/migrations/MonogMigrationAgent.js.map +0 -1
- package/dist/migrations/db/migrations/1684951997326-init.d.ts +0 -3
- package/dist/migrations/db/migrations/1684951997326-init.js +0 -30
- package/dist/migrations/db/migrations/1684951997326-init.js.map +0 -1
- package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.d.ts +0 -2
- package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js +0 -5
- package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js.map +0 -1
- package/dist/migrations/db/migrations/1702295701188-sync-rule-state.d.ts +0 -3
- package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js +0 -54
- package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js.map +0 -1
- package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.d.ts +0 -3
- package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js +0 -26
- package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js.map +0 -1
- package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.d.ts +0 -3
- package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.js +0 -28
- package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.js.map +0 -1
- package/dist/migrations/mongo-migration-store.d.ts +0 -7
- package/dist/migrations/mongo-migration-store.js +0 -49
- package/dist/migrations/mongo-migration-store.js.map +0 -1
- package/dist/storage/MongoBucketStorage.d.ts +0 -48
- package/dist/storage/MongoBucketStorage.js +0 -425
- package/dist/storage/MongoBucketStorage.js.map +0 -1
- package/dist/storage/implementation/MongoBucketBatch.d.ts +0 -72
- package/dist/storage/implementation/MongoBucketBatch.js +0 -681
- package/dist/storage/implementation/MongoBucketBatch.js.map +0 -1
- package/dist/storage/implementation/MongoCompactor.d.ts +0 -40
- package/dist/storage/implementation/MongoCompactor.js +0 -310
- package/dist/storage/implementation/MongoCompactor.js.map +0 -1
- package/dist/storage/implementation/MongoIdSequence.d.ts +0 -12
- package/dist/storage/implementation/MongoIdSequence.js +0 -21
- package/dist/storage/implementation/MongoIdSequence.js.map +0 -1
- package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +0 -9
- package/dist/storage/implementation/MongoPersistedSyncRules.js +0 -9
- package/dist/storage/implementation/MongoPersistedSyncRules.js.map +0 -1
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +0 -20
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +0 -26
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +0 -1
- package/dist/storage/implementation/MongoStorageProvider.d.ts +0 -6
- package/dist/storage/implementation/MongoStorageProvider.js +0 -34
- package/dist/storage/implementation/MongoStorageProvider.js.map +0 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +0 -36
- package/dist/storage/implementation/MongoSyncBucketStorage.js +0 -529
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +0 -1
- package/dist/storage/implementation/MongoSyncRulesLock.d.ts +0 -16
- package/dist/storage/implementation/MongoSyncRulesLock.js +0 -65
- package/dist/storage/implementation/MongoSyncRulesLock.js.map +0 -1
- package/dist/storage/implementation/MongoWriteCheckpointAPI.d.ts +0 -20
- package/dist/storage/implementation/MongoWriteCheckpointAPI.js +0 -104
- package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +0 -1
- package/dist/storage/implementation/OperationBatch.d.ts +0 -34
- package/dist/storage/implementation/OperationBatch.js +0 -119
- package/dist/storage/implementation/OperationBatch.js.map +0 -1
- package/dist/storage/implementation/PersistedBatch.d.ts +0 -46
- package/dist/storage/implementation/PersistedBatch.js +0 -223
- package/dist/storage/implementation/PersistedBatch.js.map +0 -1
- package/dist/storage/implementation/config.d.ts +0 -19
- package/dist/storage/implementation/config.js +0 -26
- package/dist/storage/implementation/config.js.map +0 -1
- package/dist/storage/implementation/db.d.ts +0 -36
- package/dist/storage/implementation/db.js +0 -47
- package/dist/storage/implementation/db.js.map +0 -1
- package/dist/storage/implementation/models.d.ts +0 -139
- package/dist/storage/implementation/models.js +0 -2
- package/dist/storage/implementation/models.js.map +0 -1
- package/dist/storage/implementation/util.d.ts +0 -41
- package/dist/storage/implementation/util.js +0 -141
- package/dist/storage/implementation/util.js.map +0 -1
- package/dist/storage/storage-index.d.ts +0 -14
- package/dist/storage/storage-index.js +0 -15
- package/dist/storage/storage-index.js.map +0 -1
- package/src/db/db-index.ts +0 -1
- package/src/db/mongo.ts +0 -81
- package/src/locks/MonogLocks.ts +0 -147
- package/src/migrations/MonogMigrationAgent.ts +0 -39
- package/src/migrations/db/migrations/1684951997326-init.ts +0 -39
- package/src/migrations/db/migrations/1688556755264-initial-sync-rules.ts +0 -5
- package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +0 -105
- package/src/migrations/db/migrations/1711543888062-write-checkpoint-index.ts +0 -38
- package/src/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.ts +0 -40
- package/src/migrations/mongo-migration-store.ts +0 -62
- package/src/storage/MongoBucketStorage.ts +0 -530
- package/src/storage/implementation/MongoBucketBatch.ts +0 -896
- package/src/storage/implementation/MongoCompactor.ts +0 -392
- package/src/storage/implementation/MongoIdSequence.ts +0 -24
- package/src/storage/implementation/MongoPersistedSyncRules.ts +0 -16
- package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +0 -49
- package/src/storage/implementation/MongoStorageProvider.ts +0 -42
- package/src/storage/implementation/MongoSyncBucketStorage.ts +0 -612
- package/src/storage/implementation/MongoSyncRulesLock.ts +0 -88
- package/src/storage/implementation/MongoWriteCheckpointAPI.ts +0 -146
- package/src/storage/implementation/OperationBatch.ts +0 -129
- package/src/storage/implementation/PersistedBatch.ts +0 -283
- package/src/storage/implementation/config.ts +0 -40
- package/src/storage/implementation/db.ts +0 -87
- package/src/storage/implementation/models.ts +0 -161
- package/src/storage/implementation/util.ts +0 -154
- package/src/storage/storage-index.ts +0 -14
- package/test/src/__snapshots__/storage_sync.test.ts.snap +0 -332
- package/test/src/storage.test.ts +0 -7
- package/test/src/storage_compacting.test.ts +0 -6
- package/test/src/storage_sync.test.ts +0 -113
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import * as framework from '@powersync/lib-services-framework';
|
|
2
|
-
|
|
3
|
-
import { migrations } from '@powersync/service-core';
|
|
4
|
-
import { configFile } from '@powersync/service-types';
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
import { fileURLToPath } from 'url';
|
|
7
|
-
import { createMongoLockManager } from '../locks/MonogLocks.js';
|
|
8
|
-
import { createPowerSyncMongo, PowerSyncMongo } from '../storage/storage-index.js';
|
|
9
|
-
import { createMongoMigrationStore } from './mongo-migration-store.js';
|
|
10
|
-
|
|
11
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
-
const __dirname = path.dirname(__filename);
|
|
13
|
-
|
|
14
|
-
const MONGO_LOCK_PROCESS = 'migrations';
|
|
15
|
-
const MIGRATIONS_DIR = path.join(__dirname, '/db/migrations');
|
|
16
|
-
|
|
17
|
-
export class MongoMigrationAgent extends migrations.AbstractPowerSyncMigrationAgent {
|
|
18
|
-
store: framework.MigrationStore;
|
|
19
|
-
locks: framework.LockManager;
|
|
20
|
-
|
|
21
|
-
protected client: PowerSyncMongo;
|
|
22
|
-
|
|
23
|
-
constructor(mongoConfig: configFile.MongoStorageConfig) {
|
|
24
|
-
super();
|
|
25
|
-
|
|
26
|
-
this.client = createPowerSyncMongo(mongoConfig);
|
|
27
|
-
|
|
28
|
-
this.store = createMongoMigrationStore(this.client.db);
|
|
29
|
-
this.locks = createMongoLockManager(this.client.locks, { name: MONGO_LOCK_PROCESS });
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
getInternalScriptsDir(): string {
|
|
33
|
-
return MIGRATIONS_DIR;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async [Symbol.asyncDispose](): Promise<void> {
|
|
37
|
-
await this.client.client.close();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { migrations } from '@powersync/service-core';
|
|
2
|
-
import { configFile } from '@powersync/service-types';
|
|
3
|
-
import * as mongo from '../../../db/mongo.js';
|
|
4
|
-
import * as storage from '../../../storage/storage-index.js';
|
|
5
|
-
|
|
6
|
-
export const up: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
7
|
-
const {
|
|
8
|
-
service_context: { configuration }
|
|
9
|
-
} = context;
|
|
10
|
-
const database = storage.createPowerSyncMongo(configuration.storage as configFile.MongoStorageConfig);
|
|
11
|
-
await mongo.waitForAuth(database.db);
|
|
12
|
-
try {
|
|
13
|
-
await database.bucket_parameters.createIndex(
|
|
14
|
-
{
|
|
15
|
-
'key.g': 1,
|
|
16
|
-
lookup: 1,
|
|
17
|
-
_id: 1
|
|
18
|
-
},
|
|
19
|
-
{ name: 'lookup1' }
|
|
20
|
-
);
|
|
21
|
-
} finally {
|
|
22
|
-
await database.client.close();
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const down: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
27
|
-
const {
|
|
28
|
-
service_context: { configuration }
|
|
29
|
-
} = context;
|
|
30
|
-
|
|
31
|
-
const database = storage.createPowerSyncMongo(configuration.storage as configFile.MongoStorageConfig);
|
|
32
|
-
try {
|
|
33
|
-
if (await database.bucket_parameters.indexExists('lookup')) {
|
|
34
|
-
await database.bucket_parameters.dropIndex('lookup1');
|
|
35
|
-
}
|
|
36
|
-
} finally {
|
|
37
|
-
await database.client.close();
|
|
38
|
-
}
|
|
39
|
-
};
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { storage as core_storage, migrations } from '@powersync/service-core';
|
|
2
|
-
import { configFile } from '@powersync/service-types';
|
|
3
|
-
import * as mongo from '../../../db/mongo.js';
|
|
4
|
-
import * as storage from '../../../storage/storage-index.js';
|
|
5
|
-
|
|
6
|
-
interface LegacySyncRulesDocument extends storage.SyncRuleDocument {
|
|
7
|
-
/**
|
|
8
|
-
* True if this is the active sync rules.
|
|
9
|
-
* requires `snapshot_done == true` and `replicating == true`.
|
|
10
|
-
*/
|
|
11
|
-
active?: boolean;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* True if this sync rules should be used for replication.
|
|
15
|
-
*
|
|
16
|
-
* During reprocessing, there is one sync rules with `replicating = true, active = true`,
|
|
17
|
-
* and one with `replicating = true, active = false, auto_activate = true`.
|
|
18
|
-
*/
|
|
19
|
-
replicating?: boolean;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* True if the sync rules should set `active = true` when `snapshot_done` = true.
|
|
23
|
-
*/
|
|
24
|
-
auto_activate?: boolean;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export const up: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
28
|
-
const {
|
|
29
|
-
service_context: { configuration }
|
|
30
|
-
} = context;
|
|
31
|
-
const db = storage.createPowerSyncMongo(configuration.storage as configFile.MongoStorageConfig);
|
|
32
|
-
|
|
33
|
-
await mongo.waitForAuth(db.db);
|
|
34
|
-
try {
|
|
35
|
-
// We keep the old flags for existing deployments still shutting down.
|
|
36
|
-
|
|
37
|
-
// 1. New sync rules: `active = false, snapshot_done = false, replicating = true, auto_activate = true`
|
|
38
|
-
await db.sync_rules.updateMany(
|
|
39
|
-
{
|
|
40
|
-
active: { $ne: true },
|
|
41
|
-
replicating: true,
|
|
42
|
-
auto_activate: true
|
|
43
|
-
},
|
|
44
|
-
{ $set: { state: core_storage.SyncRuleState.PROCESSING } }
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
// 2. Snapshot done: `active = true, snapshot_done = true, replicating = true, auto_activate = false`
|
|
48
|
-
await db.sync_rules.updateMany(
|
|
49
|
-
{
|
|
50
|
-
active: true
|
|
51
|
-
},
|
|
52
|
-
{ $set: { state: core_storage.SyncRuleState.ACTIVE } }
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
// 3. Stopped: `active = false, snapshot_done = true, replicating = false, auto_activate = false`.
|
|
56
|
-
await db.sync_rules.updateMany(
|
|
57
|
-
{
|
|
58
|
-
active: { $ne: true },
|
|
59
|
-
replicating: { $ne: true },
|
|
60
|
-
auto_activate: { $ne: true }
|
|
61
|
-
},
|
|
62
|
-
{ $set: { state: core_storage.SyncRuleState.STOP } }
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
const remaining = await db.sync_rules.find({ state: null as any }).toArray();
|
|
66
|
-
if (remaining.length > 0) {
|
|
67
|
-
const slots = remaining.map((doc) => doc.slot_name).join(', ');
|
|
68
|
-
throw new Error(`Invalid state for sync rules: ${slots}`);
|
|
69
|
-
}
|
|
70
|
-
} finally {
|
|
71
|
-
await db.client.close();
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export const down: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
76
|
-
const {
|
|
77
|
-
service_context: { configuration }
|
|
78
|
-
} = context;
|
|
79
|
-
|
|
80
|
-
const db = storage.createPowerSyncMongo(configuration.storage as configFile.MongoStorageConfig);
|
|
81
|
-
try {
|
|
82
|
-
await db.sync_rules.updateMany(
|
|
83
|
-
{
|
|
84
|
-
state: core_storage.SyncRuleState.ACTIVE
|
|
85
|
-
},
|
|
86
|
-
{ $set: { active: true, replicating: true } }
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
await db.sync_rules.updateMany(
|
|
90
|
-
{
|
|
91
|
-
state: core_storage.SyncRuleState.PROCESSING
|
|
92
|
-
},
|
|
93
|
-
{ $set: { active: false, replicating: true, auto_activate: true } }
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
await db.sync_rules.updateMany(
|
|
97
|
-
{
|
|
98
|
-
$or: [{ state: core_storage.SyncRuleState.STOP }, { state: core_storage.SyncRuleState.TERMINATED }]
|
|
99
|
-
},
|
|
100
|
-
{ $set: { active: false, replicating: false, auto_activate: false } }
|
|
101
|
-
);
|
|
102
|
-
} finally {
|
|
103
|
-
await db.client.close();
|
|
104
|
-
}
|
|
105
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { migrations } from '@powersync/service-core';
|
|
2
|
-
import { configFile } from '@powersync/service-types';
|
|
3
|
-
|
|
4
|
-
import * as storage from '../../../storage/storage-index.js';
|
|
5
|
-
|
|
6
|
-
export const up: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
7
|
-
const {
|
|
8
|
-
service_context: { configuration }
|
|
9
|
-
} = context;
|
|
10
|
-
const db = storage.createPowerSyncMongo(configuration.storage as configFile.MongoStorageConfig);
|
|
11
|
-
|
|
12
|
-
try {
|
|
13
|
-
await db.write_checkpoints.createIndex(
|
|
14
|
-
{
|
|
15
|
-
user_id: 1
|
|
16
|
-
},
|
|
17
|
-
{ name: 'user_id' }
|
|
18
|
-
);
|
|
19
|
-
} finally {
|
|
20
|
-
await db.client.close();
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export const down: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
25
|
-
const {
|
|
26
|
-
service_context: { configuration }
|
|
27
|
-
} = context;
|
|
28
|
-
|
|
29
|
-
const db = storage.createPowerSyncMongo(configuration.storage as configFile.MongoStorageConfig);
|
|
30
|
-
|
|
31
|
-
try {
|
|
32
|
-
if (await db.write_checkpoints.indexExists('user_id')) {
|
|
33
|
-
await db.write_checkpoints.dropIndex('user_id');
|
|
34
|
-
}
|
|
35
|
-
} finally {
|
|
36
|
-
await db.client.close();
|
|
37
|
-
}
|
|
38
|
-
};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { migrations } from '@powersync/service-core';
|
|
2
|
-
import { configFile } from '@powersync/service-types';
|
|
3
|
-
import * as storage from '../../../storage/storage-index.js';
|
|
4
|
-
|
|
5
|
-
const INDEX_NAME = 'user_sync_rule_unique';
|
|
6
|
-
|
|
7
|
-
export const up: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
8
|
-
const {
|
|
9
|
-
service_context: { configuration }
|
|
10
|
-
} = context;
|
|
11
|
-
const db = storage.createPowerSyncMongo(configuration.storage as configFile.MongoStorageConfig);
|
|
12
|
-
|
|
13
|
-
try {
|
|
14
|
-
await db.custom_write_checkpoints.createIndex(
|
|
15
|
-
{
|
|
16
|
-
user_id: 1,
|
|
17
|
-
sync_rules_id: 1
|
|
18
|
-
},
|
|
19
|
-
{ name: INDEX_NAME, unique: true }
|
|
20
|
-
);
|
|
21
|
-
} finally {
|
|
22
|
-
await db.client.close();
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const down: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
27
|
-
const {
|
|
28
|
-
service_context: { configuration }
|
|
29
|
-
} = context;
|
|
30
|
-
|
|
31
|
-
const db = storage.createPowerSyncMongo(configuration.storage as configFile.MongoStorageConfig);
|
|
32
|
-
|
|
33
|
-
try {
|
|
34
|
-
if (await db.custom_write_checkpoints.indexExists(INDEX_NAME)) {
|
|
35
|
-
await db.custom_write_checkpoints.dropIndex(INDEX_NAME);
|
|
36
|
-
}
|
|
37
|
-
} finally {
|
|
38
|
-
await db.client.close();
|
|
39
|
-
}
|
|
40
|
-
};
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { migrations } from '@powersync/lib-services-framework';
|
|
2
|
-
import { Db } from 'mongodb';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* A custom store for node-migrate which is used to save and load migrations that have
|
|
7
|
-
* been operated on to mongo.
|
|
8
|
-
*/
|
|
9
|
-
export const createMongoMigrationStore = (db: Db): migrations.MigrationStore => {
|
|
10
|
-
const collection = db.collection<migrations.MigrationState>('migrations');
|
|
11
|
-
|
|
12
|
-
return {
|
|
13
|
-
load: async () => {
|
|
14
|
-
const state_entry = await collection.findOne();
|
|
15
|
-
if (!state_entry) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const { _id, ...state } = state_entry;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* This is for backwards compatibility. A previous version of the migration tool used to save
|
|
23
|
-
* state as `lastRun`.
|
|
24
|
-
*/
|
|
25
|
-
let last_run = state.last_run;
|
|
26
|
-
if ('lastRun' in state) {
|
|
27
|
-
last_run = (state as any).lastRun;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* This is for backwards compatibility. A previous version of the migration tool used to include the
|
|
32
|
-
* file extension in migration names. This strips that extension off if it exists
|
|
33
|
-
*/
|
|
34
|
-
const extension = path.extname(last_run);
|
|
35
|
-
if (extension) {
|
|
36
|
-
last_run = last_run.replace(extension, '');
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return {
|
|
40
|
-
last_run,
|
|
41
|
-
log: state.log || []
|
|
42
|
-
};
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
clear: async () => {
|
|
46
|
-
await collection.deleteMany({});
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
save: async (state: migrations.MigrationState) => {
|
|
50
|
-
await collection.replaceOne(
|
|
51
|
-
{},
|
|
52
|
-
{
|
|
53
|
-
last_run: state.last_run,
|
|
54
|
-
log: state.log
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
upsert: true
|
|
58
|
-
}
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
};
|