mongodash 2.0.0 → 2.1.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/README.md +40 -22
- package/dist/dashboard/index.html +40 -0
- package/dist/lib/playground/server.js +131 -0
- package/dist/lib/playground/server.js.map +1 -0
- package/dist/lib/src/ConcurrentRunner.js +148 -0
- package/dist/lib/src/ConcurrentRunner.js.map +1 -0
- package/dist/lib/{OnError.js → src/OnError.js} +3 -3
- package/dist/lib/src/OnError.js.map +1 -0
- package/dist/lib/{OnInfo.js → src/OnInfo.js} +6 -3
- package/dist/lib/src/OnInfo.js.map +1 -0
- package/dist/lib/{createContinuousLock.js → src/createContinuousLock.js} +5 -3
- package/dist/lib/src/createContinuousLock.js.map +1 -0
- package/dist/lib/{cronTasks.js → src/cronTasks.js} +129 -73
- package/dist/lib/src/cronTasks.js.map +1 -0
- package/dist/lib/{getCollection.js → src/getCollection.js} +2 -2
- package/dist/lib/src/getCollection.js.map +1 -0
- package/dist/lib/{getMongoClient.js → src/getMongoClient.js} +2 -2
- package/dist/lib/src/getMongoClient.js.map +1 -0
- package/dist/lib/src/globalsCollection.js +10 -0
- package/dist/lib/src/globalsCollection.js.map +1 -0
- package/dist/lib/src/index.js +101 -0
- package/dist/lib/src/index.js.map +1 -0
- package/dist/lib/{initPromise.js → src/initPromise.js} +2 -3
- package/dist/lib/src/initPromise.js.map +1 -0
- package/dist/lib/src/mongoCompatibility.js +10 -0
- package/dist/lib/src/mongoCompatibility.js.map +1 -0
- package/dist/lib/src/parseInterval.js +60 -0
- package/dist/lib/src/parseInterval.js.map +1 -0
- package/dist/lib/src/prefixFilterKeys.js +69 -0
- package/dist/lib/src/prefixFilterKeys.js.map +1 -0
- package/dist/lib/src/processInBatches.js +46 -0
- package/dist/lib/src/processInBatches.js.map +1 -0
- package/dist/lib/src/reactiveTasks/LeaderElector.js +155 -0
- package/dist/lib/src/reactiveTasks/LeaderElector.js.map +1 -0
- package/dist/lib/src/reactiveTasks/MetricsCollector.js +410 -0
- package/dist/lib/src/reactiveTasks/MetricsCollector.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js +288 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js +185 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js +443 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js +218 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js +184 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js +355 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js +153 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js +34 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js +186 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js.map +1 -0
- package/dist/lib/src/reactiveTasks/compileWatchProjection.js +65 -0
- package/dist/lib/src/reactiveTasks/compileWatchProjection.js.map +1 -0
- package/dist/lib/src/reactiveTasks/index.js +298 -0
- package/dist/lib/src/reactiveTasks/index.js.map +1 -0
- package/dist/lib/src/reactiveTasks/queryToExpression.js +160 -0
- package/dist/lib/src/reactiveTasks/queryToExpression.js.map +1 -0
- package/dist/lib/src/reactiveTasks/validateTaskFilter.js +88 -0
- package/dist/lib/src/reactiveTasks/validateTaskFilter.js.map +1 -0
- package/dist/lib/src/task-management/OperationalTaskController.js +162 -0
- package/dist/lib/src/task-management/OperationalTaskController.js.map +1 -0
- package/dist/lib/src/task-management/index.js +27 -0
- package/dist/lib/src/task-management/index.js.map +1 -0
- package/dist/lib/src/task-management/serveDashboard.js +149 -0
- package/dist/lib/src/task-management/serveDashboard.js.map +1 -0
- package/dist/lib/src/task-management/types.js +10 -0
- package/dist/lib/src/task-management/types.js.map +1 -0
- package/dist/lib/{withLock.js → src/withLock.js} +3 -4
- package/dist/lib/src/withLock.js.map +1 -0
- package/dist/lib/{withTransaction.js → src/withTransaction.js} +4 -4
- package/dist/lib/src/withTransaction.js.map +1 -0
- package/dist/lib/tools/check-db-connection.js +28 -0
- package/dist/lib/tools/check-db-connection.js.map +1 -0
- package/dist/lib/tools/clean-testing-databases.js +12 -0
- package/dist/lib/tools/clean-testing-databases.js.map +1 -0
- package/dist/lib/tools/prepare-republish.js +27 -0
- package/dist/lib/tools/prepare-republish.js.map +1 -0
- package/dist/lib/tools/test-matrix-local.js +212 -0
- package/dist/lib/tools/test-matrix-local.js.map +1 -0
- package/dist/lib/tools/testingDatabase.js +55 -0
- package/dist/lib/tools/testingDatabase.js.map +1 -0
- package/dist/types/playground/server.d.ts +1 -0
- package/dist/types/src/ConcurrentRunner.d.ts +30 -0
- package/dist/types/{OnInfo.d.ts → src/OnInfo.d.ts} +1 -1
- package/dist/types/{cronTasks.d.ts → src/cronTasks.d.ts} +44 -1
- package/dist/types/src/globalsCollection.d.ts +4 -0
- package/dist/types/src/index.d.ts +28 -0
- package/dist/types/src/mongoCompatibility.d.ts +29 -0
- package/dist/types/src/parseInterval.d.ts +12 -0
- package/dist/types/src/prefixFilterKeys.d.ts +11 -0
- package/dist/types/src/processInBatches.d.ts +10 -0
- package/dist/types/src/reactiveTasks/LeaderElector.d.ts +42 -0
- package/dist/types/src/reactiveTasks/MetricsCollector.d.ts +73 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskManager.d.ts +18 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskOps.d.ts +17 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskPlanner.d.ts +62 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskReconciler.d.ts +29 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskRegistry.d.ts +34 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskRepository.d.ts +59 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskRetryStrategy.d.ts +21 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskTypes.d.ts +389 -0
- package/dist/types/src/reactiveTasks/ReactiveTaskWorker.d.ts +36 -0
- package/dist/types/src/reactiveTasks/compileWatchProjection.d.ts +12 -0
- package/dist/types/src/reactiveTasks/index.d.ts +82 -0
- package/dist/types/src/reactiveTasks/queryToExpression.d.ts +13 -0
- package/dist/types/src/reactiveTasks/validateTaskFilter.d.ts +10 -0
- package/dist/types/src/task-management/OperationalTaskController.d.ts +59 -0
- package/dist/types/src/task-management/index.d.ts +3 -0
- package/dist/types/src/task-management/serveDashboard.d.ts +12 -0
- package/dist/types/src/task-management/types.d.ts +95 -0
- package/dist/types/tools/check-db-connection.d.ts +2 -0
- package/dist/types/tools/clean-testing-databases.d.ts +1 -0
- package/dist/types/tools/prepare-republish.d.ts +2 -0
- package/dist/types/tools/test-matrix-local.d.ts +1 -0
- package/dist/types/tools/testingDatabase.d.ts +2 -0
- package/docs/.vitepress/cache/deps/_metadata.json +31 -0
- package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +12824 -0
- package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +7 -0
- package/docs/.vitepress/cache/deps/package.json +3 -0
- package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
- package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +9731 -0
- package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
- package/docs/.vitepress/cache/deps/vue.js +347 -0
- package/docs/.vitepress/cache/deps/vue.js.map +7 -0
- package/docs/.vitepress/config.mts +48 -0
- package/docs/.vitepress/theme/index.ts +4 -0
- package/docs/.vitepress/theme/style.css +16 -0
- package/docs/assets/dashboard.png +0 -0
- package/docs/cron-tasks.md +172 -0
- package/docs/dashboard.md +117 -0
- package/docs/getters.md +31 -0
- package/docs/getting-started.md +120 -0
- package/docs/index.md +29 -0
- package/docs/initialization.md +59 -0
- package/docs/process-in-batches.md +73 -0
- package/docs/reactive-tasks.md +914 -0
- package/docs/with-lock.md +45 -0
- package/docs/with-transaction.md +65 -0
- package/grafana/reactive_tasks.json +765 -0
- package/package.json +127 -116
- package/dist/lib/OnError.js.map +0 -1
- package/dist/lib/OnInfo.js.map +0 -1
- package/dist/lib/createContinuousLock.js.map +0 -1
- package/dist/lib/cronTasks.js.map +0 -1
- package/dist/lib/getCollection.js.map +0 -1
- package/dist/lib/getMongoClient.js.map +0 -1
- package/dist/lib/index.js +0 -64
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/initPromise.js.map +0 -1
- package/dist/lib/withLock.js.map +0 -1
- package/dist/lib/withTransaction.js.map +0 -1
- package/dist/types/index.d.ts +0 -17
- /package/dist/types/{OnError.d.ts → src/OnError.d.ts} +0 -0
- /package/dist/types/{createContinuousLock.d.ts → src/createContinuousLock.d.ts} +0 -0
- /package/dist/types/{getCollection.d.ts → src/getCollection.d.ts} +0 -0
- /package/dist/types/{getMongoClient.d.ts → src/getMongoClient.d.ts} +0 -0
- /package/dist/types/{initPromise.d.ts → src/initPromise.d.ts} +0 -0
- /package/dist/types/{withLock.d.ts → src/withLock.d.ts} +0 -0
- /package/dist/types/{withTransaction.d.ts → src/withTransaction.d.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**!
|
|
2
|
-
* mongodash v2.
|
|
3
|
-
* https://github.com/VaclavObornik/mongodash.git
|
|
2
|
+
* mongodash v2.1.0
|
|
3
|
+
* git+https://github.com/VaclavObornik/mongodash.git
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) 2025 Václav Oborník
|
|
6
6
|
* Released under the MIT license
|
|
@@ -15,7 +15,6 @@ exports.withLock = withLock;
|
|
|
15
15
|
const mongodb_1 = require("mongodb");
|
|
16
16
|
const createContinuousLock_1 = require("./createContinuousLock");
|
|
17
17
|
const getCollection_1 = require("./getCollection");
|
|
18
|
-
const lodash_1 = require("lodash");
|
|
19
18
|
// const debug = _debug('mongodash:withLock');
|
|
20
19
|
let onError;
|
|
21
20
|
function init(options) {
|
|
@@ -83,7 +82,7 @@ async function withLock(key, callback, { maxWaitForLock = 3 * 1000, startingDela
|
|
|
83
82
|
break;
|
|
84
83
|
}
|
|
85
84
|
catch (err) {
|
|
86
|
-
const randomMultiplier = (
|
|
85
|
+
const randomMultiplier = Math.random() * (1.2 - 1) + 1; // replaces random(1, 1.2, true)
|
|
87
86
|
let waitTime = Math.min(2 ** n * randomMultiplier * startingDelay, maxDelay);
|
|
88
87
|
let nextTime = new Date(Date.now() + waitTime);
|
|
89
88
|
const ultimateAttemptStart = new Date(maxDate.getTime() - lastAcquireDuration);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withLock.js","sourceRoot":"","sources":["../../../src/withLock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**!
|
|
2
|
-
* mongodash v2.
|
|
3
|
-
* https://github.com/VaclavObornik/mongodash.git
|
|
2
|
+
* mongodash v2.1.0
|
|
3
|
+
* git+https://github.com/VaclavObornik/mongodash.git
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) 2025 Václav Oborník
|
|
6
6
|
* Released under the MIT license
|
|
@@ -36,7 +36,7 @@ async function withTransaction(callback, options) {
|
|
|
36
36
|
await clientSession.withTransaction(async () => {
|
|
37
37
|
returnValue = await callback(clientSession);
|
|
38
38
|
}, options);
|
|
39
|
-
const hooks = postCommitHooks.get(clientSession);
|
|
39
|
+
const hooks = postCommitHooks.get(clientSession);
|
|
40
40
|
if (hooks.length > 0) {
|
|
41
41
|
const results = await Promise.allSettled(hooks.map((hook) => hook()));
|
|
42
42
|
results.forEach((result) => {
|
|
@@ -45,7 +45,7 @@ async function withTransaction(callback, options) {
|
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
-
return returnValue;
|
|
48
|
+
return returnValue;
|
|
49
49
|
}
|
|
50
50
|
finally {
|
|
51
51
|
postCommitHooks.delete(clientSession);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withTransaction.js","sourceRoot":"","sources":["../../../src/withTransaction.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAkBb,oBAGC;AAED,wDAYC;AAED,0CA4BC;AA9DD,qDAAkD;AAWlD,MAAM,eAAe,GAAG,IAAI,OAAO,EAAmC,CAAC;AACvE,IAAI,QAAiB,CAAC;AACtB,IAAI,OAAe,CAAC;AAEpB,SAAgB,IAAI,CAAC,OAAoB;IACrC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;AAC7B,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAsB,EAAE,IAAoB;IAC/E,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC,CAAC;IAC9H,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,eAAe,CAAI,QAAgD,EAAE,OAA4B;IACnH,MAAM,aAAa,GAAG,IAAA,+BAAc,GAAE,CAAC,YAAY,EAAE,CAAC;IAEtD,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAEvC,IAAI,CAAC;QACD,IAAI,WAAc,CAAC;QAEnB,MAAM,aAAa,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YAC3C,WAAW,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC,EAAE,OAAO,CAAC,CAAC;QAEZ,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC;QAElD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC/B,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,WAAY,CAAC;IACxB,CAAC;YAAS,CAAC;QACP,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**!
|
|
2
|
+
* mongodash v2.1.0
|
|
3
|
+
* git+https://github.com/VaclavObornik/mongodash.git
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2025 Václav Oborník
|
|
6
|
+
* Released under the MIT license
|
|
7
|
+
*/
|
|
8
|
+
"use strict";
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const mongodb_1 = require("mongodb");
|
|
11
|
+
const testingDatabase_1 = require("./testingDatabase");
|
|
12
|
+
exports.default = async () => {
|
|
13
|
+
const uri = (0, testingDatabase_1.getConnectionString)();
|
|
14
|
+
console.log(`Checking database connection at: ${uri}`);
|
|
15
|
+
try {
|
|
16
|
+
const client = new mongodb_1.MongoClient(uri, { serverSelectionTimeoutMS: 2000 }); // Fast fail
|
|
17
|
+
await client.connect();
|
|
18
|
+
await client.db('admin').command({ ping: 1 });
|
|
19
|
+
await client.close();
|
|
20
|
+
console.log('Database connection successful.');
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error('Database connection failed! Ensure MongoDB is running.');
|
|
24
|
+
console.error('Error:', err.message);
|
|
25
|
+
throw err; // Throwing error will cause Jest to fail fast
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=check-db-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-db-connection.js","sourceRoot":"","sources":["../../../tools/check-db-connection.ts"],"names":[],"mappings":";;AAAA,qCAAsC;AACtC,uDAAwD;AAExD,kBAAe,KAAK,IAAI,EAAE;IACtB,MAAM,GAAG,GAAG,IAAA,qCAAmB,GAAE,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,qBAAW,CAAC,GAAG,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY;QACrF,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC,CAAC,8CAA8C;IAC7D,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**!
|
|
2
|
+
* mongodash v2.1.0
|
|
3
|
+
* git+https://github.com/VaclavObornik/mongodash.git
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2025 Václav Oborník
|
|
6
|
+
* Released under the MIT license
|
|
7
|
+
*/
|
|
8
|
+
"use strict";
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const testingDatabase_1 = require("./testingDatabase");
|
|
11
|
+
(0, testingDatabase_1.cleanTestingDatabases)(true);
|
|
12
|
+
//# sourceMappingURL=clean-testing-databases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean-testing-databases.js","sourceRoot":"","sources":["../../../tools/clean-testing-databases.ts"],"names":[],"mappings":";;AAAA,uDAA0D;AAE1D,IAAA,uCAAqB,EAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**!
|
|
2
|
+
* mongodash v2.1.0
|
|
3
|
+
* git+https://github.com/VaclavObornik/mongodash.git
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2025 Václav Oborník
|
|
6
|
+
* Released under the MIT license
|
|
7
|
+
*/
|
|
8
|
+
"use strict";
|
|
9
|
+
const sh = require('shelljs');
|
|
10
|
+
const cli = require('@bndynet/cli');
|
|
11
|
+
cli.print(cli.styles.info(`
|
|
12
|
+
# **** NOTE THAT ****
|
|
13
|
+
# This command is just for failed to publish to NPM during running GitHub Action.
|
|
14
|
+
# That will rewrite your history commits.
|
|
15
|
+
# Please double confirm the commit id you typed and which is in your current branch.
|
|
16
|
+
# *******************
|
|
17
|
+
`));
|
|
18
|
+
cli.questions(['Version(v1.0.0):', 'Commit id for publish:']).then((answers) => {
|
|
19
|
+
const version = answers[0] || 'v1.0.0';
|
|
20
|
+
const commitId = answers[1];
|
|
21
|
+
cli.log(`Remove your remote tag ${version} ...`);
|
|
22
|
+
sh.exec(`git tag -d ${version}`);
|
|
23
|
+
sh.exec(`git push --delete origin ${version}`);
|
|
24
|
+
cli.log(`Reset your commit and force to push ...`);
|
|
25
|
+
sh.exec(`git reset ${commitId} --hard && git push -f`);
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=prepare-republish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare-republish.js","sourceRoot":"","sources":["../../../tools/prepare-republish.ts"],"names":[],"mappings":";AAAA,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAEpC,GAAG,CAAC,KAAK,CACL,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;CAMnB,CAAC,CACD,CAAC;AAEF,GAAG,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAc,EAAE,EAAE;IAClF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE5B,GAAG,CAAC,GAAG,CAAC,0BAA0B,OAAO,MAAM,CAAC,CAAC;IACjD,EAAE,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;IACjC,EAAE,CAAC,IAAI,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IAE/C,GAAG,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACnD,EAAE,CAAC,IAAI,CAAC,aAAa,QAAQ,wBAAwB,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**!
|
|
2
|
+
* mongodash v2.1.0
|
|
3
|
+
* git+https://github.com/VaclavObornik/mongodash.git
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2025 Václav Oborník
|
|
6
|
+
* Released under the MIT license
|
|
7
|
+
*/
|
|
8
|
+
"use strict";
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const fs = require("fs");
|
|
11
|
+
const path = require("path");
|
|
12
|
+
const child_process = require("child_process");
|
|
13
|
+
const util = require("util");
|
|
14
|
+
// --- Configuration ---
|
|
15
|
+
const CONFIG_FILE = path.resolve(__dirname, '../test-matrix.json');
|
|
16
|
+
const NETWORK_NAME = 'mongodash-local-matrix-net';
|
|
17
|
+
const MONGO_CONTAINER_NAME = 'mongodash-local-mongo';
|
|
18
|
+
const NODE_CONTAINER_NAME = 'mongodash-local-node';
|
|
19
|
+
// --- Helpers ---
|
|
20
|
+
const exec = util.promisify(child_process.exec);
|
|
21
|
+
const spawn = (cmd, args, opts) => {
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
const proc = child_process.spawn(cmd, args, Object.assign({ stdio: 'inherit' }, opts));
|
|
24
|
+
proc.on('close', (code) => {
|
|
25
|
+
if (code === 0)
|
|
26
|
+
resolve();
|
|
27
|
+
else
|
|
28
|
+
reject(new Error(`Command ${cmd} ${args.join(' ')} failed with code ${code}`));
|
|
29
|
+
});
|
|
30
|
+
proc.on('error', reject);
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
34
|
+
// --- Main Logic ---
|
|
35
|
+
async function loadMatrix() {
|
|
36
|
+
const content = await fs.promises.readFile(CONFIG_FILE, 'utf-8');
|
|
37
|
+
return JSON.parse(content);
|
|
38
|
+
}
|
|
39
|
+
function parseArgs(matrix) {
|
|
40
|
+
const args = process.argv.slice(2);
|
|
41
|
+
const options = {
|
|
42
|
+
nodeVersion: matrix['node-version'][0], // Default to first (usually latest)
|
|
43
|
+
mongoVersion: matrix['mongodb-version'][0], // Default to first
|
|
44
|
+
driverVersion: matrix['mongodb-driver-version'][0], // Default to first
|
|
45
|
+
all: false,
|
|
46
|
+
};
|
|
47
|
+
for (let i = 0; i < args.length; i++) {
|
|
48
|
+
switch (args[i]) {
|
|
49
|
+
case '--node':
|
|
50
|
+
options.nodeVersion = args[++i];
|
|
51
|
+
break;
|
|
52
|
+
case '--mongo':
|
|
53
|
+
options.mongoVersion = args[++i];
|
|
54
|
+
break;
|
|
55
|
+
case '--driver':
|
|
56
|
+
options.driverVersion = args[++i];
|
|
57
|
+
break;
|
|
58
|
+
case '--all':
|
|
59
|
+
options.all = true;
|
|
60
|
+
break;
|
|
61
|
+
case '--help':
|
|
62
|
+
console.log('Usage: ts-node tools/test-matrix-local.ts [options]');
|
|
63
|
+
console.log('Options:');
|
|
64
|
+
console.log(` --node <ver> Node.js version (choices: ${matrix['node-version'].join(', ')}) [default: ${options.nodeVersion}]`);
|
|
65
|
+
console.log(` --mongo <ver> MongoDB version (choices: ${matrix['mongodb-version'].join(', ')}) [default: ${options.mongoVersion}]`);
|
|
66
|
+
console.log(` --driver <ver> Driver version (choices: ${matrix['mongodb-driver-version'].join(', ')}) [default: ${options.driverVersion}]`);
|
|
67
|
+
console.log(' --all Run all combinations locally (sanity check)');
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return options;
|
|
72
|
+
}
|
|
73
|
+
async function cleanupContainers() {
|
|
74
|
+
try {
|
|
75
|
+
await exec(`docker rm -f ${MONGO_CONTAINER_NAME} ${NODE_CONTAINER_NAME}`);
|
|
76
|
+
}
|
|
77
|
+
catch (_a) {
|
|
78
|
+
// Ignore errors if they don't exist
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
await exec(`docker network rm ${NETWORK_NAME}`);
|
|
82
|
+
}
|
|
83
|
+
catch (_b) {
|
|
84
|
+
// Ignore
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function runTest(options) {
|
|
88
|
+
console.log(`\n>>> Running test with: Node ${options.nodeVersion}, Mongo ${options.mongoVersion}, Driver ${options.driverVersion}`);
|
|
89
|
+
try {
|
|
90
|
+
await cleanupContainers();
|
|
91
|
+
// 1. Create Network
|
|
92
|
+
console.log('Creating Docker network...');
|
|
93
|
+
await exec(`docker network create ${NETWORK_NAME}`);
|
|
94
|
+
// 2. Start MongoDB
|
|
95
|
+
console.log(`Starting MongoDB ${options.mongoVersion}...`);
|
|
96
|
+
// Use mongo:version tag. For 4.x/5.x/6.x/7.x usually just number works or number.0
|
|
97
|
+
// Matrix has "7", "8".
|
|
98
|
+
const mongoImage = `mongo:${options.mongoVersion}`;
|
|
99
|
+
await exec(`docker run -d --name ${MONGO_CONTAINER_NAME} --network ${NETWORK_NAME} ${mongoImage} mongod --replSet rs0`);
|
|
100
|
+
// Wait for Mongo to be ready
|
|
101
|
+
console.log('Waiting for MongoDB to accept connections...');
|
|
102
|
+
let retries = 30;
|
|
103
|
+
let connected = false;
|
|
104
|
+
while (retries > 0) {
|
|
105
|
+
try {
|
|
106
|
+
// Try simple eval inside container
|
|
107
|
+
await exec(`docker exec ${MONGO_CONTAINER_NAME} mongosh --eval "db.adminCommand('ping')" --quiet`);
|
|
108
|
+
connected = true;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
catch (_a) {
|
|
112
|
+
// Try legacy mongo shell if mongosh missing (older versions)
|
|
113
|
+
try {
|
|
114
|
+
await exec(`docker exec ${MONGO_CONTAINER_NAME} mongo --eval "db.adminCommand('ping')" --quiet`);
|
|
115
|
+
connected = true;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
catch (_b) {
|
|
119
|
+
await sleep(1000);
|
|
120
|
+
retries--;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!connected)
|
|
125
|
+
throw new Error('MongoDB failed to start or is unreachable');
|
|
126
|
+
// Initiate Replica Set
|
|
127
|
+
console.log('Initiating Replica Set...');
|
|
128
|
+
// Try mongosh first, then mongo
|
|
129
|
+
try {
|
|
130
|
+
await exec(`docker exec ${MONGO_CONTAINER_NAME} mongosh --eval "try { rs.initiate(); } catch(e) { if (e.codeName !== 'AlreadyInitialized') throw e; }" --quiet`);
|
|
131
|
+
}
|
|
132
|
+
catch (_c) {
|
|
133
|
+
await exec(`docker exec ${MONGO_CONTAINER_NAME} mongo --eval "try { rs.initiate(); } catch(e) { if (e.codeName !== 'AlreadyInitialized') throw e; }" --quiet`);
|
|
134
|
+
}
|
|
135
|
+
// Wait for Primary
|
|
136
|
+
console.log('Waiting for Primary...');
|
|
137
|
+
await sleep(2000); // Give it a moment to elect
|
|
138
|
+
// 3. Run Node Tests
|
|
139
|
+
console.log(`Starting Node.js ${options.nodeVersion} test runner...`);
|
|
140
|
+
const projectRoot = path.resolve(__dirname, '..');
|
|
141
|
+
// We mount the project root.
|
|
142
|
+
// WARNING: node_modules might be architecture dependent if using native addons (snappy, etc).
|
|
143
|
+
// While mongodash dependencies seem mostly pure JS, `mongodb` driver might have optional deps.
|
|
144
|
+
// Best practice is to install deps INSIDE container.
|
|
145
|
+
// We will mount to /app, but use a separate internal /app/node_modules if we assume host is mac (arm64) and container might be linux/amd64 or similar.
|
|
146
|
+
// However, standard node image is usually same arch as host.
|
|
147
|
+
// To be safe and clean, we should run `npm ci` inside.
|
|
148
|
+
// Command script
|
|
149
|
+
const testScript = [
|
|
150
|
+
'echo ">>> Inside Container Setup"',
|
|
151
|
+
'npm install -g npm@latest', // Ensure npm is decent
|
|
152
|
+
'npm ci',
|
|
153
|
+
`npm install mongodb@${options.driverVersion}`,
|
|
154
|
+
'npx tsc', // Ensure build is fresh or just rely on ts-node in tests?
|
|
155
|
+
// package.json test:simple runs jest directly (ts-jest)
|
|
156
|
+
'echo ">>> Running Tests"',
|
|
157
|
+
// We need to point to the mongo container.
|
|
158
|
+
// In CI we might use explicit hostname. in docker network it is the container name.
|
|
159
|
+
`export MONGODB_URI="mongodb://${MONGO_CONTAINER_NAME}:27017/mongodashTesting?replicaSet=rs0&directConnection=true"`,
|
|
160
|
+
'npm run test:simple',
|
|
161
|
+
].join(' && ');
|
|
162
|
+
await spawn('docker', [
|
|
163
|
+
'run',
|
|
164
|
+
'--rm',
|
|
165
|
+
'--name',
|
|
166
|
+
NODE_CONTAINER_NAME,
|
|
167
|
+
'--network',
|
|
168
|
+
NETWORK_NAME,
|
|
169
|
+
'-v',
|
|
170
|
+
`${projectRoot}:/app`,
|
|
171
|
+
'-w',
|
|
172
|
+
'/app',
|
|
173
|
+
// '-e', 'CI=true', // Maybe?
|
|
174
|
+
`node:${options.nodeVersion}`,
|
|
175
|
+
'/bin/sh',
|
|
176
|
+
'-c',
|
|
177
|
+
testScript,
|
|
178
|
+
]);
|
|
179
|
+
console.log('✅ Test run passed!');
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
console.error('❌ Test run failed:', err);
|
|
183
|
+
throw err;
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
await cleanupContainers();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async function main() {
|
|
190
|
+
try {
|
|
191
|
+
const matrix = await loadMatrix();
|
|
192
|
+
const options = parseArgs(matrix);
|
|
193
|
+
if (options.all) {
|
|
194
|
+
console.log('Running ALL matrix combinations...');
|
|
195
|
+
for (const n of matrix['node-version']) {
|
|
196
|
+
for (const m of matrix['mongodb-version']) {
|
|
197
|
+
for (const d of matrix['mongodb-driver-version']) {
|
|
198
|
+
await runTest({ nodeVersion: n, mongoVersion: m, driverVersion: d, all: false });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
await runTest(options);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (_a) {
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
main();
|
|
212
|
+
//# sourceMappingURL=test-matrix-local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-matrix-local.js","sourceRoot":"","sources":["../../../tools/test-matrix-local.ts"],"names":[],"mappings":";;AAAA,yBAAyB;AACzB,6BAA6B;AAC7B,+CAA+C;AAC/C,6BAA6B;AAE7B,wBAAwB;AACxB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;AACnE,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAClD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AACrD,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAenD,kBAAkB;AAClB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAChD,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,IAAiC,EAAE,EAAE;IAC7E,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,kBAAI,KAAK,EAAE,SAAS,IAAK,IAAI,EAAG,CAAC;QAC3E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEhF,qBAAqB;AAErB,KAAK,UAAU,UAAU;IACrB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,SAAS,CAAC,MAAkB;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAgB;QACzB,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,oCAAoC;QAC5E,YAAY,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB;QAC/D,aAAa,EAAE,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB;QACvE,GAAG,EAAE,KAAK;KACb,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACd,KAAK,QAAQ;gBACT,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,MAAM;YACV,KAAK,SAAS;gBACV,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjC,MAAM;YACV,KAAK,UAAU;gBACX,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClC,MAAM;YACV,KAAK,OAAO;gBACR,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;gBACnB,MAAM;YACV,KAAK,QAAQ;gBACT,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,+CAA+C,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;gBACnI,OAAO,CAAC,GAAG,CAAC,+CAA+C,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;gBACvI,OAAO,CAAC,GAAG,CAAC,+CAA+C,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;gBAC/I,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC5B,IAAI,CAAC;QACD,MAAM,IAAI,CAAC,gBAAgB,oBAAoB,IAAI,mBAAmB,EAAE,CAAC,CAAC;IAC9E,CAAC;IAAC,WAAM,CAAC;QACL,oCAAoC;IACxC,CAAC;IACD,IAAI,CAAC;QACD,MAAM,IAAI,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,WAAM,CAAC;QACL,SAAS;IACb,CAAC;AACL,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAoB;IACvC,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,WAAW,WAAW,OAAO,CAAC,YAAY,YAAY,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAEpI,IAAI,CAAC;QACD,MAAM,iBAAiB,EAAE,CAAC;QAE1B,oBAAoB;QACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;QAEpD,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC;QAC3D,mFAAmF;QACnF,uBAAuB;QACvB,MAAM,UAAU,GAAG,SAAS,OAAO,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,IAAI,CAAC,wBAAwB,oBAAoB,cAAc,YAAY,IAAI,UAAU,uBAAuB,CAAC,CAAC;QAExH,6BAA6B;QAC7B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,OAAO,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC;gBACD,mCAAmC;gBACnC,MAAM,IAAI,CAAC,eAAe,oBAAoB,mDAAmD,CAAC,CAAC;gBACnG,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACV,CAAC;YAAC,WAAM,CAAC;gBACL,6DAA6D;gBAC7D,IAAI,CAAC;oBACD,MAAM,IAAI,CAAC,eAAe,oBAAoB,iDAAiD,CAAC,CAAC;oBACjG,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACV,CAAC;gBAAC,WAAM,CAAC;oBACL,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClB,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC;QACL,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAE7E,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,gCAAgC;QAChC,IAAI,CAAC;YACD,MAAM,IAAI,CACN,eAAe,oBAAoB,iHAAiH,CACvJ,CAAC;QACN,CAAC;QAAC,WAAM,CAAC;YACL,MAAM,IAAI,CACN,eAAe,oBAAoB,+GAA+G,CACrJ,CAAC;QACN,CAAC;QAED,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;QAE/C,oBAAoB;QACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,WAAW,iBAAiB,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAElD,6BAA6B;QAC7B,8FAA8F;QAC9F,+FAA+F;QAC/F,qDAAqD;QACrD,uJAAuJ;QACvJ,6DAA6D;QAC7D,uDAAuD;QAEvD,iBAAiB;QACjB,MAAM,UAAU,GAAG;YACf,mCAAmC;YACnC,2BAA2B,EAAE,uBAAuB;YACpD,QAAQ;YACR,uBAAuB,OAAO,CAAC,aAAa,EAAE;YAC9C,SAAS,EAAE,0DAA0D;YACrE,wDAAwD;YACxD,0BAA0B;YAC1B,2CAA2C;YAC3C,oFAAoF;YACpF,iCAAiC,oBAAoB,+DAA+D;YACpH,qBAAqB;SACxB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEf,MAAM,KAAK,CAAC,QAAQ,EAAE;YAClB,KAAK;YACL,MAAM;YACN,QAAQ;YACR,mBAAmB;YACnB,WAAW;YACX,YAAY;YACZ,IAAI;YACJ,GAAG,WAAW,OAAO;YACrB,IAAI;YACJ,MAAM;YACN,6BAA6B;YAC7B,QAAQ,OAAO,CAAC,WAAW,EAAE;YAC7B,SAAS;YACT,IAAI;YACJ,UAAU;SACb,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,GAAG,CAAC;IACd,CAAC;YAAS,CAAC;QACP,MAAM,iBAAiB,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI;IACf,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;gBACrC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC;wBAC/C,MAAM,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;oBACrF,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IAAC,WAAM,CAAC;QACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**!
|
|
2
|
+
* mongodash v2.1.0
|
|
3
|
+
* git+https://github.com/VaclavObornik/mongodash.git
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2025 Václav Oborník
|
|
6
|
+
* Released under the MIT license
|
|
7
|
+
*/
|
|
8
|
+
"use strict";
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.getConnectionString = getConnectionString;
|
|
11
|
+
exports.cleanTestingDatabases = cleanTestingDatabases;
|
|
12
|
+
const mongodb_1 = require("mongodb");
|
|
13
|
+
const debug_1 = require("debug");
|
|
14
|
+
const debug = (0, debug_1.default)('mongodash:testingDatabase');
|
|
15
|
+
const baseDatabaseName = 'mongodashTesting';
|
|
16
|
+
function getConnectionString() {
|
|
17
|
+
if (process.env.MONGODB_URI) {
|
|
18
|
+
return process.env.MONGODB_URI;
|
|
19
|
+
}
|
|
20
|
+
const withPostfix = !process.env.KEEP_SINGLE_DATABASE;
|
|
21
|
+
const postfix = `__${process.pid}`;
|
|
22
|
+
return `mongodb://127.0.0.1:27017/${baseDatabaseName}${withPostfix ? postfix : ''}`;
|
|
23
|
+
}
|
|
24
|
+
async function cleanTestingDatabases(all = false) {
|
|
25
|
+
let client;
|
|
26
|
+
try {
|
|
27
|
+
client = new mongodb_1.MongoClient(getConnectionString(), {
|
|
28
|
+
// @ts-expect-error useUnifiedTopology is legacy but might be needed for older drivers or specific testing setups
|
|
29
|
+
useUnifiedTopology: true,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (/MongoParseError: option useunifiedtopology is not supported/i.test(err.toString())) {
|
|
34
|
+
client = new mongodb_1.MongoClient(getConnectionString());
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
await client.connect();
|
|
41
|
+
const db = client.db();
|
|
42
|
+
const postfixMatcher = /__([0-9]+)/;
|
|
43
|
+
const matcher = new RegExp(`^${baseDatabaseName}(${postfixMatcher.source})?$`);
|
|
44
|
+
const adminDb = db.admin();
|
|
45
|
+
const { databases } = await adminDb.listDatabases({ nameOnly: true });
|
|
46
|
+
await Promise.all(databases.map(async ({ name }) => {
|
|
47
|
+
const shouldDelete = !all ? name === db.databaseName : name.match(matcher);
|
|
48
|
+
if (shouldDelete) {
|
|
49
|
+
debug(`DROPPING TESTING database ${name}`);
|
|
50
|
+
await client.db(name).dropDatabase();
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
await client.close();
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=testingDatabase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testingDatabase.js","sourceRoot":"","sources":["../../../tools/testingDatabase.ts"],"names":[],"mappings":";;AAOA,kDAOC;AAED,sDAmCC;AAnDD,qCAAsC;AACtC,iCAA2B;AAE3B,MAAM,KAAK,GAAG,IAAA,eAAM,EAAC,2BAA2B,CAAC,CAAC;AAElD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAE5C,SAAgB,mBAAmB;IAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACnC,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;IACnC,OAAO,6BAA6B,gBAAgB,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxF,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,GAAG,GAAG,KAAK;IACnD,IAAI,MAAmB,CAAC;IACxB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,qBAAW,CAAC,mBAAmB,EAAE,EAAE;YAC5C,iHAAiH;YACjH,kBAAkB,EAAE,IAAI;SAC3B,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,8DAA8D,CAAC,IAAI,CAAE,GAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;YACjG,MAAM,GAAG,IAAI,qBAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;IAED,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;IAEvB,MAAM,cAAc,GAAG,YAAY,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,gBAAgB,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtE,MAAM,OAAO,CAAC,GAAG,CACb,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAoB,EAAE,EAAE;QAC/C,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,YAAY,EAAE,CAAC;YACf,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;QACzC,CAAC;IACL,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OnError } from './OnError';
|
|
2
|
+
export interface ConcurrentRunnerOptions {
|
|
3
|
+
concurrency: number;
|
|
4
|
+
}
|
|
5
|
+
export interface SourceOptions {
|
|
6
|
+
minPollMs: number;
|
|
7
|
+
maxPollMs: number;
|
|
8
|
+
jitterMs: number;
|
|
9
|
+
}
|
|
10
|
+
export type TryRunATaskCallback = (sourceName: string) => Promise<void>;
|
|
11
|
+
export declare class ConcurrentRunner {
|
|
12
|
+
private onError;
|
|
13
|
+
private options;
|
|
14
|
+
private sources;
|
|
15
|
+
private isRunning;
|
|
16
|
+
private workers;
|
|
17
|
+
private wakeUpSignals;
|
|
18
|
+
private tryRunATask;
|
|
19
|
+
constructor(options: ConcurrentRunnerOptions, onError?: OnError);
|
|
20
|
+
registerSource(name: string, options: SourceOptions): void;
|
|
21
|
+
hasSource(name: string): boolean;
|
|
22
|
+
start(tryRunATask: TryRunATaskCallback): void;
|
|
23
|
+
stop(): Promise<void>;
|
|
24
|
+
speedUp(sourceName: string): void;
|
|
25
|
+
private runWorker;
|
|
26
|
+
private prolongNextRun;
|
|
27
|
+
private sleep;
|
|
28
|
+
private wakeUpOneWorker;
|
|
29
|
+
private wakeUpAllWorkers;
|
|
30
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type OnInfo = (info: {
|
|
2
2
|
message: string;
|
|
3
3
|
code: string;
|
|
4
|
-
} & Record<string,
|
|
4
|
+
} & Record<string, unknown>) => void;
|
|
5
5
|
export declare const defaultOnInfo: OnInfo;
|
|
6
6
|
export declare function secureOnInfo(onInfo: OnInfo): OnInfo;
|
|
@@ -11,6 +11,36 @@ export type StaticInterval = ScalarInterval | Date;
|
|
|
11
11
|
export type IntervalFunction = () => StaticInterval | Promise<StaticInterval>;
|
|
12
12
|
export type Interval = ScalarInterval | IntervalFunction;
|
|
13
13
|
export type TaskId = string;
|
|
14
|
+
export type CronTaskStatus = 'locked' | 'running' | 'idle' | 'failed' | 'scheduled';
|
|
15
|
+
export interface CronTaskRecord {
|
|
16
|
+
_id: TaskId;
|
|
17
|
+
status: CronTaskStatus;
|
|
18
|
+
nextRunAt: Date;
|
|
19
|
+
runImmediately: boolean;
|
|
20
|
+
lockedTill: Date | null;
|
|
21
|
+
lastRun: {
|
|
22
|
+
startedAt: Date;
|
|
23
|
+
finishedAt: Date | null;
|
|
24
|
+
error: string | null;
|
|
25
|
+
durationMs?: number;
|
|
26
|
+
} | null;
|
|
27
|
+
isRegistered: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface CronTaskQuery {
|
|
30
|
+
filter?: string;
|
|
31
|
+
limit?: number;
|
|
32
|
+
skip?: number;
|
|
33
|
+
sort?: {
|
|
34
|
+
field: keyof CronTaskRecord;
|
|
35
|
+
direction: 1 | -1;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface CronPagedResult<T> {
|
|
39
|
+
items: T[];
|
|
40
|
+
total: number;
|
|
41
|
+
limit: number;
|
|
42
|
+
offset: number;
|
|
43
|
+
}
|
|
14
44
|
export interface CronTaskCaller {
|
|
15
45
|
<T>(task: () => Promise<T>): Promise<T> | T;
|
|
16
46
|
}
|
|
@@ -28,8 +58,21 @@ export type InitOptions = {
|
|
|
28
58
|
cronTaskCaller: CronTaskCaller;
|
|
29
59
|
cronTaskFilter: CronTaskFilter;
|
|
30
60
|
};
|
|
31
|
-
export declare function init(
|
|
61
|
+
export declare function init(initOptions: InitOptions): void;
|
|
32
62
|
export declare function stopCronTasks(): void;
|
|
33
63
|
export declare function startCronTasks(): void;
|
|
34
64
|
export declare function scheduleCronTaskImmediately(taskId: TaskId): Promise<void>;
|
|
35
65
|
export declare function cronTask(taskId: TaskId, interval: Interval, task: TaskFunction): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Lists cron tasks with pagination and sorting.
|
|
68
|
+
*/
|
|
69
|
+
export declare function getCronTasksList(query?: CronTaskQuery): Promise<CronPagedResult<CronTaskRecord>>;
|
|
70
|
+
/**
|
|
71
|
+
* Triggers a cron task immediately.
|
|
72
|
+
* Alias for scheduleCronTaskImmediately but returns the new state or confirmation.
|
|
73
|
+
*/
|
|
74
|
+
export declare function triggerCronTask(taskId: TaskId): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Returns IDs of all registered cron tasks in this instance.
|
|
77
|
+
*/
|
|
78
|
+
export declare function getRegisteredCronTaskIds(): string[];
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { InitOptions as CronTasksInitOptions } from './cronTasks';
|
|
2
|
+
import { InitOptions as ReactiveTasksInitOptions } from './reactiveTasks';
|
|
3
|
+
import { InitOptions as GetCollectionInitOptions } from './getCollection';
|
|
4
|
+
import { InitOptions as GetMongoClientInitOptions } from './getMongoClient';
|
|
5
|
+
import { OnError } from './OnError';
|
|
6
|
+
import { OnInfo } from './OnInfo';
|
|
7
|
+
import { Collection } from 'mongodb';
|
|
8
|
+
export { cronTask, Interval, runCronTask, scheduleCronTaskImmediately, startCronTasks, stopCronTasks, TaskFunction, TaskId, CODE_CRON_TASK_STARTED, CODE_CRON_TASK_FINISHED, CODE_CRON_TASK_SCHEDULED, CODE_CRON_TASK_FAILED, getCronTasksList, triggerCronTask, CronTaskQuery, CronPagedResult, CronTaskRecord, CronTaskStatus, } from './cronTasks';
|
|
9
|
+
export { getCollection } from './getCollection';
|
|
10
|
+
export { getMongoClient } from './getMongoClient';
|
|
11
|
+
export { OnError } from './OnError';
|
|
12
|
+
export { withLock, isLockAlreadyAcquiredError, WithLockOptions, LockAlreadyAcquiredError } from './withLock';
|
|
13
|
+
export { withTransaction, registerPostCommitHook, PostCommitHook } from './withTransaction';
|
|
14
|
+
export { reactiveTask, ReactiveTask, ReactiveTaskHandler, TaskConditionFailedError, startReactiveTasks, stopReactiveTasks, getPrometheusMetrics, _scheduler, CODE_REACTIVE_TASK_STARTED, CODE_REACTIVE_TASK_FINISHED, CODE_REACTIVE_TASK_FAILED, CODE_REACTIVE_TASK_PLANNER_STARTED, CODE_REACTIVE_TASK_PLANNER_STOPPED, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED, CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED, CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR, CODE_REACTIVE_TASK_LEADER_LOCK_LOST, getReactiveTasks, countReactiveTasks, retryReactiveTasks, } from './reactiveTasks';
|
|
15
|
+
export { processInBatches, ProcessInBatchesOptions, ProcessInBatchesResult } from './processInBatches';
|
|
16
|
+
export { serveDashboard, OperationalTaskController } from './task-management';
|
|
17
|
+
type PackageOptions = {
|
|
18
|
+
onError?: OnError;
|
|
19
|
+
onInfo?: OnInfo;
|
|
20
|
+
taskCaller?: TaskCaller;
|
|
21
|
+
};
|
|
22
|
+
export interface TaskCaller {
|
|
23
|
+
<T>(task: () => Promise<T>): Promise<T> | T;
|
|
24
|
+
}
|
|
25
|
+
export type InitOptions = PackageOptions & GetMongoClientInitOptions & Partial<CronTasksInitOptions> & Partial<GetCollectionInitOptions> & Partial<Omit<ReactiveTasksInitOptions, 'globalsCollection'>> & {
|
|
26
|
+
globalsCollection?: string | Collection;
|
|
27
|
+
};
|
|
28
|
+
export declare function init(options: InitOptions): Promise<void>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Document, FindOneAndUpdateOptions, BulkWriteOptions } from 'mongodb';
|
|
2
|
+
/**
|
|
3
|
+
* Compatible options for findOneAndUpdate across MongoDB drivers v4, v5, v6, v7.
|
|
4
|
+
* v5+ requires 'includeResultMetadata' to return the full result object.
|
|
5
|
+
* v4 ignores this property.
|
|
6
|
+
* Using Omit ensures we don't conflict with existing definition if it exists,
|
|
7
|
+
* and explicitly adding it ensures it's allowed even if the base type lacks it.
|
|
8
|
+
*/
|
|
9
|
+
export interface CompatibleFindOneAndUpdateOptions extends Omit<FindOneAndUpdateOptions, 'includeResultMetadata'> {
|
|
10
|
+
includeResultMetadata?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Compatible result for findOneAndUpdate.
|
|
14
|
+
* Wraps the potential return shapes.
|
|
15
|
+
* v4: { value: T, ok: 1, ... }
|
|
16
|
+
* v7 (with includeResultMetadata): { value: T, ok: 1, ... }
|
|
17
|
+
*
|
|
18
|
+
* Accessing .value on this interface is safe.
|
|
19
|
+
*/
|
|
20
|
+
export interface CompatibleModifyResult<T extends Document = Document> {
|
|
21
|
+
value?: T | null;
|
|
22
|
+
ok?: number;
|
|
23
|
+
lastErrorObject?: Document;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Compatible options for bulkWrite.
|
|
27
|
+
* Ensures strict typing.
|
|
28
|
+
*/
|
|
29
|
+
export type CompatibleBulkWriteOptions = BulkWriteOptions;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CronExpressionOptions } from 'cron-parser';
|
|
2
|
+
/**
|
|
3
|
+
* Create a function that returns the next run Date based on an interval specification.
|
|
4
|
+
*
|
|
5
|
+
* Supports:
|
|
6
|
+
* - Number: returns Date that is `interval` milliseconds from now
|
|
7
|
+
* - Duration string: '1h', '24h', '7d' - returns Date that is duration from now
|
|
8
|
+
* - Cron expression: 'CRON 0 3 * * *' (must start with CRON) - returns next cron occurrence
|
|
9
|
+
*/
|
|
10
|
+
export declare function createIntervalFunction(interval: number | string | ((date?: Date) => Date | number), options?: {
|
|
11
|
+
cronOptions?: CronExpressionOptions;
|
|
12
|
+
}): (referenceDate?: Date) => Date;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Document, Filter } from 'mongodb';
|
|
2
|
+
/**
|
|
3
|
+
* Recursively prefixes all keys in a MongoDB filter object.
|
|
4
|
+
* This is used to apply a filter meant for a document to a field
|
|
5
|
+
* within a larger document, such as 'fullDocument' in a change stream event.
|
|
6
|
+
*
|
|
7
|
+
* @param filter The filter object to process.
|
|
8
|
+
* @param prefix The prefix to add to each key (e.g., 'fullDocument').
|
|
9
|
+
* @returns A new filter object with all keys prefixed.
|
|
10
|
+
*/
|
|
11
|
+
export declare function prefixFilterKeys<T extends Document>(filter: Filter<T>, prefix: string): Filter<T>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Collection, Document, Filter } from 'mongodb';
|
|
2
|
+
export interface ProcessInBatchesOptions {
|
|
3
|
+
batchSize?: number;
|
|
4
|
+
shouldStop?: () => boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface ProcessInBatchesResult {
|
|
7
|
+
processedDocuments: number;
|
|
8
|
+
operationsPerformed: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function processInBatches<TDoc extends Document, TOp>(collection: Collection<TDoc>, queryOrPipeline: Filter<TDoc> | Document[], transform: (doc: TDoc) => TOp | TOp[] | null | undefined | Promise<TOp | TOp[] | null | undefined>, executeBatch: (ops: TOp[]) => Promise<void>, options?: ProcessInBatchesOptions): Promise<ProcessInBatchesResult>;
|