@storyous/mongodb 1.9.0 → 1.10.1
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/lib/appData/index.d.ts +1 -0
- package/lib/appData/index.js +1 -1
- package/lib/appData/index.ts +4 -1
- package/lib/concurrentTask.js +1 -1
- package/lib/fixtures.js +1 -1
- package/lib/getMongoConfig.js +1 -1
- package/lib/getMongoLocker.d.ts +2 -2
- package/lib/getMongoLocker.js +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +1 -1
- package/lib/index.ts +2 -1
- package/lib/migrations/MigrationsStore.js +1 -1
- package/lib/migrations/runMigrations.d.ts +10 -6
- package/lib/migrations/runMigrations.js +35 -6
- package/lib/migrations/runMigrations.ts +48 -5
- package/lib/migrations/templateJsCompatible.d.ts +4 -0
- package/lib/migrations/templateJsCompatible.js +10 -0
- package/lib/mongoClient.d.ts +2 -2
- package/lib/mongoClient.js +1 -1
- package/lib/mongoLocker.js +1 -1
- package/lib/withTransaction.d.ts +1 -1
- package/lib/withTransaction.js +1 -1
- package/package.json +2 -2
package/lib/appData/index.d.ts
CHANGED
package/lib/appData/index.js
CHANGED
|
@@ -34,4 +34,4 @@ const appData = {
|
|
|
34
34
|
},
|
|
35
35
|
};
|
|
36
36
|
exports.default = appData;
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUlBLHFFQUE2QztBQUc3QyxNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRW5ELE1BQU0sT0FBTyxHQUFHO0lBRVosSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFBLHVCQUFhLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVUsRUFBRSxDQUFDO0lBRWIsb0JBQW9CLENBQUUsUUFBc0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsV0FBVzthQUNsQixTQUFTLENBQUMsUUFBZSxDQUFDO2FBQzFCLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FDakIsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVaLE9BQU87WUFDWCxDQUFDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNMLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjLENBQUUsR0FBUSxFQUFFLE1BQWMsRUFBRSxTQUFrQixLQUFLO1FBQzdELE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDcEQsY0FBYyxFQUFFLE9BQU87WUFDdkIsTUFBTTtTQUNULENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXLENBQUUsR0FBUTtRQUNqQixNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUVKLENBQUM7QUFFRixrQkFBZSxPQUFPLENBQUMifQ==
|
package/lib/appData/index.ts
CHANGED
package/lib/concurrentTask.js
CHANGED
|
@@ -17,4 +17,4 @@ const attemptRecursive = async (task, startAttemptsDelay, latestTime, callNumber
|
|
|
17
17
|
*/
|
|
18
18
|
const concurrentTask = async (task, { noLaterThan = 2000, startAttemptsDelay = 50 } = {}) => (attemptRecursive(task, startAttemptsDelay, Date.now() + noLaterThan, 1));
|
|
19
19
|
exports.default = concurrentTask;
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY3VycmVudFRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25jdXJyZW50VGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUE0QztBQUU1QyxNQUFNLGdCQUFnQixHQUFHLEtBQUssRUFDMUIsSUFBc0IsRUFDdEIsa0JBQTBCLEVBQzFCLFVBQWtCLEVBQ2xCLFVBQWtCLEVBQ04sRUFBRSxDQUFDLENBQ2YsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFVLEVBQUUsRUFBRTtJQUM5QixJQUFJLGlCQUFRLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RSxPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sR0FBRyxDQUFDO0FBQ2QsQ0FBQyxDQUFDLENBQ0wsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sY0FBYyxHQUFHLEtBQUssRUFBTSxJQUFzQixFQUFFLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxrQkFBa0IsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQy9HLGdCQUFnQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUMxRSxDQUFDO0FBRUYsa0JBQWUsY0FBYyxDQUFDIn0=
|
package/lib/fixtures.js
CHANGED
|
@@ -25,4 +25,4 @@ const fixtures = {
|
|
|
25
25
|
},
|
|
26
26
|
};
|
|
27
27
|
exports.default = fixtures;
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUFpQztBQUdqQyxNQUFNLFFBQVEsR0FBRztJQUNiLGtCQUFrQixDQUFFLFNBQXFCLEVBQUUsVUFBc0I7UUFDN0QsTUFBTSxVQUFVLEdBQWUsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUE2QixFQUFFLENBQUM7UUFFL0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUNsQixFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUMvQjthQUNJLE9BQU8sRUFBRTthQUNULElBQUksQ0FDRCxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sZUFBZSxHQUFlLElBQUEsZ0JBQU8sRUFBQyxTQUFTLENBQUMsQ0FBQztZQUV2RCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQztBQUVGLGtCQUFlLFFBQVEsQ0FBQyJ9
|
package/lib/getMongoConfig.js
CHANGED
|
@@ -84,4 +84,4 @@ exports.default = (envPrefix = 'DOCUMENTDB', mongoOptions = {}, documentDbOption
|
|
|
84
84
|
}
|
|
85
85
|
throw new Error(`Invalid ${envPrefix}_ENGINE value "${engine}", values "mongodb" or "documentdb" allowed.`);
|
|
86
86
|
};
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0TW9uZ29Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnZXRNb25nb0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBTzdCLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsZUFBNEIsSUFBSSxFQUFVLEVBQUU7SUFDMUYsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRW5ELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0MsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLE1BQU0sSUFBSSxRQUFRLFlBQVksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixrQkFBZSxDQUNYLFlBQW9CLFlBQVksRUFDaEMsWUFBWSxHQUFHLEVBQUUsRUFDakIsaUJBQWlCLEdBQUcsRUFBRSxFQUNoQixFQUFFO0lBQ1IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNOLE9BQU87WUFDSCxVQUFVLEVBQUUsR0FBRztZQUNmLFlBQVk7U0FDZixDQUFDO0lBQ04sQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sWUFBWSxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMzRCxNQUFNLFNBQVMsR0FBRyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbEQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdkIsT0FBTztZQUNILFVBQVUsRUFBRSxHQUFHLFFBQVEsTUFBTSxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsR0FBRyxRQUFRLEdBQUcsWUFBWSxHQUFHLFNBQVMsRUFBRTtZQUNyRyxZQUFZO1NBQ2YsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0gsVUFBVSxFQUFFLEdBQUcsUUFBUSxNQUFNLFFBQVEsR0FBRyxRQUFRLEdBQUcsWUFBWSxHQUFHLFNBQVMsRUFBRTtZQUM3RSxZQUFZLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDO2dCQUN2RCxHQUFHLEVBQUUsSUFBSTtnQkFDVCxXQUFXLEVBQUUsSUFBSTtnQkFDakIsSUFBSSxFQUFFO29CQUNGLFFBQVE7b0JBQ1IsUUFBUTtpQkFDWDtnQkFDRCxVQUFVLEVBQUUsS0FBSztnQkFDakIsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixlQUFlLEVBQUUsSUFBSTtnQkFDckIsa0JBQWtCLEVBQUUsSUFBSTtnQkFDeEIsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLHdCQUF3QixFQUFFLElBQUk7Z0JBQzlCLEdBQUcsaUJBQWlCO2FBQ3ZCO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsU0FBUyxrQkFBa0IsTUFBTSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ2hILENBQUMsQ0FBQyJ9
|
package/lib/getMongoLocker.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Collection } from 'mongodb';
|
|
2
2
|
import { Key } from './mongoClient';
|
|
3
|
-
export
|
|
4
|
-
export
|
|
3
|
+
export type LockCallback<T> = () => Promise<T>;
|
|
4
|
+
export type LockerOptions = {
|
|
5
5
|
noLaterThan?: number;
|
|
6
6
|
startAttemptsDelay?: number;
|
|
7
7
|
expireIn?: number;
|
package/lib/getMongoLocker.js
CHANGED
|
@@ -49,4 +49,4 @@ exports.default = async (collection) => {
|
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0TW9uZ29Mb2NrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnZXRNb25nb0xvY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUM1QyxxQ0FBK0M7QUFDL0Msc0VBQThDO0FBRTlDLHdFQUFnRDtBQVVoRCxNQUFNLHNCQUFzQixHQUFHLEtBQUssRUFBRSxVQUFzQixFQUFFLEVBQUU7SUFDNUQsSUFBSSxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLGtCQUFlLEtBQUssRUFBRSxVQUFzQixFQUFFLEVBQUU7SUFFNUMsTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxRSxNQUFNLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXpDLE9BQU8sS0FBSyxFQUNSLEdBQVEsRUFDUixRQUF5QixFQUN6QixFQUFFLFdBQVcsR0FBRyxJQUFJLEVBQUUsa0JBQWtCLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxNQUFNLEtBQW9CLEVBQUUsRUFDNUUsRUFBRTtRQUVaLE1BQU0sTUFBTSxHQUFHLElBQUksa0JBQVEsRUFBRSxDQUFDO1FBRTlCLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFNUUsTUFBTSxXQUFXLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDO2dCQUNELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCOzs7Ozs7bUJBTUc7Z0JBQ0gsTUFBTSxVQUFVLENBQUMsVUFBVSxDQUN2QixFQUFFLEdBQUcsRUFBRSxHQUFVLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUM3QyxnRkFBZ0Y7Z0JBQ2hGLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFDekQsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQ25CLENBQUM7WUFDTixDQUFDO1lBQUMsT0FBTyxHQUFPLEVBQUUsQ0FBQztnQkFDZixJQUFJLHlCQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbkQsTUFBTSxpQkFBUSxDQUFDLGlCQUFpQixDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQ3RFLENBQUM7Z0JBQ0QsTUFBTSxXQUFXLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQztnQkFDM0QsTUFBTSxHQUFHLENBQUM7WUFDZCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsTUFBTSxJQUFBLHdCQUFjLEVBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUM7WUFDRCxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUM7UUFFNUIsQ0FBQztnQkFBUyxDQUFDO1lBQ1AsTUFBTSxXQUFXLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIn0=
|
package/lib/index.d.ts
CHANGED
|
@@ -7,9 +7,9 @@ import getMongoConfig from './getMongoConfig';
|
|
|
7
7
|
import getMongoLocker, { LockCallback, LockerOptions } from './getMongoLocker';
|
|
8
8
|
import Migration from './migrations/Migration';
|
|
9
9
|
import MigrationsStore from './migrations/MigrationsStore';
|
|
10
|
-
import runMigrations from './migrations/runMigrations';
|
|
10
|
+
import runMigrations, { RunMigrationsOptions } from './migrations/runMigrations';
|
|
11
11
|
import mongoClient from './mongoClient';
|
|
12
12
|
import mongoErrorCodes from './mongoErrorCodes';
|
|
13
13
|
import mongoLocker from './mongoLocker';
|
|
14
14
|
import withTransaction from './withTransaction';
|
|
15
|
-
export { appData, fixtures, getCollection, getMongoConfig, getMongoLocker, LockCallback, LockerOptions, Migration, MigrationsStore, mongoClient, mongoLocker, runMigrations, withTransaction, ObjectId, MongoDecimal, mongoErrorCodes, concurrentTask, };
|
|
15
|
+
export { appData, fixtures, getCollection, getMongoConfig, getMongoLocker, LockCallback, LockerOptions, Migration, MigrationsStore, mongoClient, mongoLocker, runMigrations, RunMigrationsOptions, withTransaction, ObjectId, MongoDecimal, mongoErrorCodes, concurrentTask, };
|
package/lib/index.js
CHANGED
|
@@ -33,4 +33,4 @@ const mongoLocker_1 = __importDefault(require("./mongoLocker"));
|
|
|
33
33
|
exports.mongoLocker = mongoLocker_1.default;
|
|
34
34
|
const withTransaction_1 = __importDefault(require("./withTransaction"));
|
|
35
35
|
exports.withTransaction = withTransaction_1.default;
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxQ0FBK0Q7QUErQjNELDZGQS9CbUIsb0JBQVksT0ErQm5CO0FBRFoseUZBOUJpQyxrQkFBUSxPQThCakM7QUE3Qlosd0RBQWdDO0FBZTVCLGtCQWZHLGlCQUFPLENBZUg7QUFkWCxzRUFBOEM7QUErQjFDLHlCQS9CRyx3QkFBYyxDQStCSDtBQTlCbEIsMERBQWtDO0FBYzlCLG1CQWRHLGtCQUFRLENBY0g7QUFiWixvRUFBNEM7QUFjeEMsd0JBZEcsdUJBQWEsQ0FjSDtBQWJqQixzRUFBOEM7QUFjMUMseUJBZEcsd0JBQWMsQ0FjSDtBQWJsQixzRUFBK0U7QUFjM0UseUJBZEcsd0JBQWMsQ0FjSDtBQWJsQix1RUFBK0M7QUFnQjNDLG9CQWhCRyxtQkFBUyxDQWdCSDtBQWZiLG1GQUEyRDtBQWdCdkQsMEJBaEJHLHlCQUFlLENBZ0JIO0FBZm5CLCtFQUFpRjtBQWtCN0Usd0JBbEJHLHVCQUFhLENBa0JIO0FBakJqQixnRUFBd0M7QUFlcEMsc0JBZkcscUJBQVcsQ0FlSDtBQWRmLHdFQUFnRDtBQXFCNUMsMEJBckJHLHlCQUFlLENBcUJIO0FBcEJuQixnRUFBd0M7QUFjcEMsc0JBZEcscUJBQVcsQ0FjSDtBQWJmLHdFQUFnRDtBQWdCNUMsMEJBaEJHLHlCQUFlLENBZ0JIIn0=
|
package/lib/index.ts
CHANGED
|
@@ -7,7 +7,7 @@ import getMongoConfig from './getMongoConfig';
|
|
|
7
7
|
import getMongoLocker, { LockCallback, LockerOptions } from './getMongoLocker';
|
|
8
8
|
import Migration from './migrations/Migration';
|
|
9
9
|
import MigrationsStore from './migrations/MigrationsStore';
|
|
10
|
-
import runMigrations from './migrations/runMigrations';
|
|
10
|
+
import runMigrations, { RunMigrationsOptions } from './migrations/runMigrations';
|
|
11
11
|
import mongoClient from './mongoClient';
|
|
12
12
|
import mongoErrorCodes from './mongoErrorCodes';
|
|
13
13
|
import mongoLocker from './mongoLocker';
|
|
@@ -26,6 +26,7 @@ export {
|
|
|
26
26
|
mongoClient,
|
|
27
27
|
mongoLocker,
|
|
28
28
|
runMigrations,
|
|
29
|
+
RunMigrationsOptions,
|
|
29
30
|
withTransaction,
|
|
30
31
|
ObjectId,
|
|
31
32
|
MongoDecimal,
|
|
@@ -62,4 +62,4 @@ class MigrationsStore {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
exports.default = MigrationsStore;
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uc1N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTWlncmF0aW9uc1N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQWdEO0FBR2hELHlEQUFpQztBQUVqQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUM7QUFFakMsTUFBTSxnQkFBZ0IsR0FBRyx1RUFBdUU7TUFDMUYsZ0RBQWdELENBQUM7QUFFdkQsTUFBcUIsZUFBZTtJQUNoQyw2Q0FBNkM7SUFDN0MsWUFBcUIsT0FBZSxFQUFFLElBQVksRUFBVSxjQUF1QjtRQUE5RCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQXdCLG1CQUFjLEdBQWQsY0FBYyxDQUFTO0lBQ25GLENBQUM7SUFFTSxJQUFJLENBQUUsR0FBVyxFQUFFLEVBQWlCO1FBQ3ZDLElBQUksQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBUSxJQUFBLGFBQUksRUFBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUV4QyxNQUFNLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxVQUFVO3FCQUM5QyxNQUFNLENBQUMsQ0FBQyxJQUFZLEVBQUUsR0FBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFOUYsc0dBQXNHO2dCQUN0RywrQkFBK0I7Z0JBQy9CLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLG9CQUFvQixJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUVyQyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDTCxDQUFDO1lBRUQsaUJBQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQztpQkFDM0QsSUFBSSxDQUNELEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEI7aUJBQ0EsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1osQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJLENBQ1AsRUFNUztRQUVULGlCQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQzthQUMzQixJQUFJLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFFRCxFQUFFLENBQ0UsSUFBSSxFQUFFLEtBQUssSUFBSTtnQkFDWCxPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsRUFBRTthQUNqQixDQUNKLENBQUM7UUFDTixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNYLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxxQkFBcUIsQ0FBRSxpQkFBOEM7UUFDekUsSUFDSSxDQUFDLGlCQUFpQjtlQUNmLElBQUEsZ0JBQU8sRUFBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7ZUFDckMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBdEVELGtDQXNFQyJ9
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { Logger } from 'winston';
|
|
2
|
+
import { LockerOptions } from '../getMongoLocker';
|
|
3
|
+
export type RunMigrationsOptions = {
|
|
4
|
+
continueOnError?: boolean;
|
|
5
|
+
safeMigration?: boolean;
|
|
6
|
+
fileType?: 'js' | 'ts';
|
|
7
|
+
lockOptions?: LockerOptions;
|
|
8
|
+
skipLock?: boolean;
|
|
9
|
+
};
|
|
2
10
|
/**
|
|
3
11
|
* In case of fail - logs the result and returns rejected promise
|
|
4
12
|
* @param {Logger} logger Logger
|
|
5
13
|
* @param {string} directory Path to directory where migrations are
|
|
6
|
-
* @param {
|
|
7
|
-
* @param {boolean} safeMigration Do not allow to rewrite all migrations with empty array
|
|
14
|
+
* @param {RunMigrationsOptions} runMigrationsOptions
|
|
8
15
|
*/
|
|
9
|
-
export default function runMigrations(logger: Logger, directory: string, { continueOnError, safeMigration, }:
|
|
10
|
-
continueOnError?: boolean | undefined;
|
|
11
|
-
safeMigration?: boolean | undefined;
|
|
12
|
-
}): Promise<void>;
|
|
16
|
+
export default function runMigrations(logger: Logger, directory: string, { continueOnError, safeMigration, fileType, lockOptions, skipLock, }: RunMigrationsOptions): Promise<void>;
|
|
@@ -3,21 +3,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const errors_1 = require("@storyous/errors");
|
|
6
7
|
const migrate_1 = require("migrate");
|
|
8
|
+
const mongoLocker_1 = __importDefault(require("../mongoLocker"));
|
|
7
9
|
const MigrationsStore_1 = __importDefault(require("./MigrationsStore"));
|
|
10
|
+
const MIGRATIONS_LOCK_KEY = 'migrations:run';
|
|
8
11
|
/**
|
|
9
12
|
* In case of fail - logs the result and returns rejected promise
|
|
10
13
|
* @param {Logger} logger Logger
|
|
11
14
|
* @param {string} directory Path to directory where migrations are
|
|
12
|
-
* @param {
|
|
13
|
-
* @param {boolean} safeMigration Do not allow to rewrite all migrations with empty array
|
|
15
|
+
* @param {RunMigrationsOptions} runMigrationsOptions
|
|
14
16
|
*/
|
|
15
|
-
async function runMigrations(logger, directory, { continueOnError = false, safeMigration = true,
|
|
16
|
-
|
|
17
|
+
async function runMigrations(logger, directory, { continueOnError = false, safeMigration = true, fileType = 'js', lockOptions = {
|
|
18
|
+
expireIn: 600000, // 10 minutes
|
|
19
|
+
// noLaterThan and StartAttemptsDelay remain default by mongoLocker
|
|
20
|
+
}, skipLock = false, }) {
|
|
21
|
+
const executeMigrations = () => new Promise((resolve, reject) => {
|
|
17
22
|
(0, migrate_1.load)({
|
|
18
23
|
stateStore: new MigrationsStore_1.default(logger, directory, safeMigration),
|
|
19
24
|
migrationsDirectory: directory,
|
|
20
|
-
filterFunction: (file) =>
|
|
25
|
+
filterFunction: ((file) => {
|
|
26
|
+
if (fileType === 'js') {
|
|
27
|
+
return file.endsWith('.js');
|
|
28
|
+
}
|
|
29
|
+
if (fileType === 'ts') {
|
|
30
|
+
return file.endsWith('.ts') && !file.endsWith('.d.ts');
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}),
|
|
21
34
|
}, (err, set) => {
|
|
22
35
|
if (err) {
|
|
23
36
|
logger.error('Migrations did not run due to error', err);
|
|
@@ -45,6 +58,22 @@ async function runMigrations(logger, directory, { continueOnError = false, safeM
|
|
|
45
58
|
});
|
|
46
59
|
});
|
|
47
60
|
});
|
|
61
|
+
if (skipLock) {
|
|
62
|
+
logger.info('Running migrations without distributed lock');
|
|
63
|
+
return executeMigrations();
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
logger.info('Attempting to acquire migration lock');
|
|
67
|
+
return await (0, mongoLocker_1.default)(MIGRATIONS_LOCK_KEY, executeMigrations, lockOptions);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (errors_1.AppError.isConcurrentRequestError(error)) {
|
|
71
|
+
logger.info('Another instance is running migrations');
|
|
72
|
+
return Promise.resolve();
|
|
73
|
+
}
|
|
74
|
+
logger.error('Error while acquiring migration lock', error);
|
|
75
|
+
return Promise.reject(error);
|
|
76
|
+
}
|
|
48
77
|
}
|
|
49
78
|
exports.default = runMigrations;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuTWlncmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bk1pZ3JhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMscUNBQTZDO0FBRzdDLGlFQUF5QztBQUN6Qyx3RUFBZ0Q7QUFFaEQsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztBQVU3Qzs7Ozs7R0FLRztBQUNZLEtBQUssVUFBVSxhQUFhLENBQ3ZDLE1BQWMsRUFDZCxTQUFpQixFQUNqQixFQUNJLGVBQWUsR0FBRyxLQUFLLEVBQ3ZCLGFBQWEsR0FBRyxJQUFJLEVBQ3BCLFFBQVEsR0FBRyxJQUFJLEVBQ2YsV0FBVyxHQUFHO0lBQ1YsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhO0lBQy9CLG1FQUFtRTtDQUN0RSxFQUNELFFBQVEsR0FBRyxLQUFLLEdBQ0c7SUFFdkIsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsRSxJQUFBLGNBQUksRUFDQTtZQUNJLFVBQVUsRUFBRSxJQUFJLHlCQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUM7WUFDakUsbUJBQW1CLEVBQUUsU0FBUztZQUM5QixjQUFjLEVBQUUsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO2dCQUM5QixJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO2dCQUNELElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUMsQ0FBQztTQUNMLEVBQ0QsQ0FBQyxHQUFpQixFQUFFLEdBQWlCLEVBQUUsRUFBRTtZQUNyQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDWixPQUFPO1lBQ1gsQ0FBQztZQUVELEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFjLEVBQUUsU0FBaUIsRUFBRSxFQUFFO2dCQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsU0FBUyxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUUsQ0FBQyxDQUFDLENBQUM7WUFFSCxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2QsT0FBTztvQkFDWCxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBQy9DLENBQUM7Z0JBRUQsT0FBTyxFQUFFLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzNELE9BQU8saUJBQWlCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sTUFBTSxJQUFBLHFCQUFXLEVBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxpQkFBUSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0wsQ0FBQztBQTVFRCxnQ0E0RUMifQ==
|
|
@@ -1,13 +1,25 @@
|
|
|
1
|
+
import { AppError } from '@storyous/errors';
|
|
1
2
|
import { load, MigrationSet } from 'migrate';
|
|
2
3
|
import { Logger } from 'winston';
|
|
4
|
+
import { LockerOptions } from '../getMongoLocker';
|
|
5
|
+
import mongoLocker from '../mongoLocker';
|
|
3
6
|
import MigrationsStore from './MigrationsStore';
|
|
4
7
|
|
|
8
|
+
const MIGRATIONS_LOCK_KEY = 'migrations:run';
|
|
9
|
+
|
|
10
|
+
export type RunMigrationsOptions = {
|
|
11
|
+
continueOnError?: boolean; // If app crashes on error or continue
|
|
12
|
+
safeMigration?: boolean; // Do not allow to rewrite all migrations with empty array
|
|
13
|
+
fileType?: 'js' | 'ts'; // Specifies the file extension type to check in the migration folder
|
|
14
|
+
lockOptions?: LockerOptions; // Lock options for distributed locking to prevent concurrent migration execution.
|
|
15
|
+
skipLock?: boolean; // Skip distributed locking (not recommended in production with multiple instances).
|
|
16
|
+
};
|
|
17
|
+
|
|
5
18
|
/**
|
|
6
19
|
* In case of fail - logs the result and returns rejected promise
|
|
7
20
|
* @param {Logger} logger Logger
|
|
8
21
|
* @param {string} directory Path to directory where migrations are
|
|
9
|
-
* @param {
|
|
10
|
-
* @param {boolean} safeMigration Do not allow to rewrite all migrations with empty array
|
|
22
|
+
* @param {RunMigrationsOptions} runMigrationsOptions
|
|
11
23
|
*/
|
|
12
24
|
export default async function runMigrations (
|
|
13
25
|
logger: Logger,
|
|
@@ -15,14 +27,28 @@ export default async function runMigrations (
|
|
|
15
27
|
{
|
|
16
28
|
continueOnError = false,
|
|
17
29
|
safeMigration = true,
|
|
18
|
-
|
|
30
|
+
fileType = 'js',
|
|
31
|
+
lockOptions = {
|
|
32
|
+
expireIn: 600000, // 10 minutes
|
|
33
|
+
// noLaterThan and StartAttemptsDelay remain default by mongoLocker
|
|
34
|
+
},
|
|
35
|
+
skipLock = false,
|
|
36
|
+
}: RunMigrationsOptions,
|
|
19
37
|
) {
|
|
20
|
-
|
|
38
|
+
const executeMigrations = () => new Promise<void>((resolve, reject) => {
|
|
21
39
|
load(
|
|
22
40
|
{
|
|
23
41
|
stateStore: new MigrationsStore(logger, directory, safeMigration),
|
|
24
42
|
migrationsDirectory: directory,
|
|
25
|
-
filterFunction: (file: string) =>
|
|
43
|
+
filterFunction: ((file: string) => {
|
|
44
|
+
if (fileType === 'js') {
|
|
45
|
+
return file.endsWith('.js');
|
|
46
|
+
}
|
|
47
|
+
if (fileType === 'ts') {
|
|
48
|
+
return file.endsWith('.ts') && !file.endsWith('.d.ts');
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
}),
|
|
26
52
|
},
|
|
27
53
|
(err: Error | null, set: MigrationSet) => {
|
|
28
54
|
if (err) {
|
|
@@ -54,4 +80,21 @@ export default async function runMigrations (
|
|
|
54
80
|
});
|
|
55
81
|
});
|
|
56
82
|
});
|
|
83
|
+
|
|
84
|
+
if (skipLock) {
|
|
85
|
+
logger.info('Running migrations without distributed lock');
|
|
86
|
+
return executeMigrations();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
logger.info('Attempting to acquire migration lock');
|
|
91
|
+
return await mongoLocker(MIGRATIONS_LOCK_KEY, executeMigrations, lockOptions);
|
|
92
|
+
} catch (error: any) {
|
|
93
|
+
if (AppError.isConcurrentRequestError(error)) {
|
|
94
|
+
logger.info('Another instance is running migrations');
|
|
95
|
+
return Promise.resolve();
|
|
96
|
+
}
|
|
97
|
+
logger.error('Error while acquiring migration lock', error);
|
|
98
|
+
return Promise.reject(error);
|
|
99
|
+
}
|
|
57
100
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** template for older systems like IS runs on js modules.
|
|
3
|
+
* Transpiled file is compatible and can be used in migrate:create script */
|
|
4
|
+
const getCollection = require('../getCollection');
|
|
5
|
+
const Migration = require('./Migration');
|
|
6
|
+
module.exports = new Migration('[ADD DESCRIPTION HERE]', async () => {
|
|
7
|
+
// add logic here
|
|
8
|
+
await getCollection('exampleCollection');
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVKc0NvbXBhdGlibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZUpzQ29tcGF0aWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7NEVBQzRFO0FBQzVFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUV6QyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLHdCQUF3QixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ2hFLGlCQUFpQjtJQUNqQixNQUFNLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxDQUFDIn0=
|
package/lib/mongoClient.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { MongoClient, MongoClientOptions, ObjectId } from 'mongodb';
|
|
2
|
-
export
|
|
2
|
+
export type Key = string | number | ObjectId;
|
|
3
3
|
declare const mongoClient: {
|
|
4
4
|
_client: MongoClient | null;
|
|
5
|
-
init(mongodbUrl: string, mongoOptions?: MongoClientOptions
|
|
5
|
+
init(mongodbUrl: string, mongoOptions?: MongoClientOptions): void;
|
|
6
6
|
getClient(): MongoClient;
|
|
7
7
|
};
|
|
8
8
|
export default mongoClient;
|
package/lib/mongoClient.js
CHANGED
|
@@ -15,4 +15,4 @@ const mongoClient = {
|
|
|
15
15
|
},
|
|
16
16
|
};
|
|
17
17
|
exports.default = mongoClient;
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29DbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb25nb0NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUFzQztBQUN0QyxxQ0FBb0U7QUFJcEUsTUFBTSxXQUFXLEdBQUc7SUFDaEIsT0FBTyxFQUFxQixJQUFJO0lBRWhDLElBQUksQ0FBRSxVQUFrQixFQUFFLFlBQWlDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxxQkFBVyxDQUMxQixVQUFVLEVBQ1YsSUFBQSxxQkFBWSxFQUFDLFlBQVksQ0FBQyxDQUM3QixDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDSixDQUFDO0FBRUYsa0JBQWUsV0FBVyxDQUFDIn0=
|
package/lib/mongoLocker.js
CHANGED
|
@@ -14,4 +14,4 @@ async function default_1(key, callback, options = {}) {
|
|
|
14
14
|
return locker(key, callback, options);
|
|
15
15
|
}
|
|
16
16
|
exports.default = default_1;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29Mb2NrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb25nb0xvY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9FQUE0QztBQUM1QyxzRUFBK0U7QUFHL0UsSUFBSSxhQUFnRCxDQUFDO0FBRXRDLEtBQUssb0JBQWUsR0FBUSxFQUFFLFFBQXlCLEVBQUUsVUFBeUIsRUFBRTtJQUMvRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakIsYUFBYSxHQUFHLElBQUEsd0JBQWMsRUFBQyxJQUFBLHVCQUFhLEVBQU0sVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBUkQsNEJBUUMifQ==
|
package/lib/withTransaction.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ClientSession, TransactionOptions } from 'mongodb';
|
|
2
|
-
declare const _default: <T>(callback: (session: ClientSession) => Promise<T>, options?: TransactionOptions
|
|
2
|
+
declare const _default: <T>(callback: (session: ClientSession) => Promise<T>, options?: TransactionOptions) => Promise<T>;
|
|
3
3
|
export default _default;
|
package/lib/withTransaction.js
CHANGED
|
@@ -18,4 +18,4 @@ exports.default = async (callback, options) => {
|
|
|
18
18
|
await session.endSession();
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aFRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2l0aFRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsZ0VBQXdDO0FBRXhDLGtCQUFlLEtBQUssRUFDaEIsUUFBZ0QsRUFDaEQsT0FBNEIsRUFDbEIsRUFBRTtJQUVaLE1BQU0sT0FBTyxHQUFHLHFCQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdkQsSUFBSSxDQUFDO1FBQ0QsSUFBSSxNQUFTLENBQUM7UUFFZCxNQUFNLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDckMsTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVaLGFBQWE7UUFDYixPQUFPLE1BQU0sQ0FBQztJQUVsQixDQUFDO1lBQVMsQ0FBQztRQUNQLE1BQU0sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQy9CLENBQUM7QUFDTCxDQUFDLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storyous/mongodb",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"homepage": "https://github.com/Storyous/mono-utils#readme",
|
|
6
6
|
"license": "ISC",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"mongodb": "^6.8.0"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "96a2c32b09d6cd337a57a503832c768d55620f4b"
|
|
50
50
|
}
|