mongodash 2.0.0 → 2.1.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/README.md +107 -23
- package/dist/dashboard/index.html +40 -0
- package/dist/lib/playground/server.js +124 -0
- package/dist/lib/playground/server.js.map +1 -0
- package/dist/lib/src/ConcurrentRunner.js +141 -0
- package/dist/lib/src/ConcurrentRunner.js.map +1 -0
- package/dist/lib/{OnError.js → src/OnError.js} +2 -9
- package/dist/lib/src/OnError.js.map +1 -0
- package/dist/lib/{OnInfo.js → src/OnInfo.js} +5 -9
- package/dist/lib/src/OnInfo.js.map +1 -0
- package/dist/lib/{createContinuousLock.js → src/createContinuousLock.js} +4 -9
- package/dist/lib/src/createContinuousLock.js.map +1 -0
- package/dist/lib/{cronTasks.js → src/cronTasks.js} +128 -79
- package/dist/lib/src/cronTasks.js.map +1 -0
- package/dist/lib/{getCollection.js → src/getCollection.js} +1 -8
- package/dist/lib/src/getCollection.js.map +1 -0
- package/dist/lib/{getMongoClient.js → src/getMongoClient.js} +1 -8
- package/dist/lib/src/getMongoClient.js.map +1 -0
- package/dist/lib/src/globalsCollection.js +3 -0
- package/dist/lib/src/globalsCollection.js.map +1 -0
- package/dist/lib/src/index.js +94 -0
- package/dist/lib/src/index.js.map +1 -0
- package/dist/lib/src/initPromise.js +9 -0
- package/dist/lib/src/initPromise.js.map +1 -0
- package/dist/lib/src/mongoCompatibility.js +3 -0
- package/dist/lib/src/mongoCompatibility.js.map +1 -0
- package/dist/lib/src/parseInterval.js +53 -0
- package/dist/lib/src/parseInterval.js.map +1 -0
- package/dist/lib/src/prefixFilterKeys.js +62 -0
- package/dist/lib/src/prefixFilterKeys.js.map +1 -0
- package/dist/lib/src/processInBatches.js +39 -0
- package/dist/lib/src/processInBatches.js.map +1 -0
- package/dist/lib/src/reactiveTasks/LeaderElector.js +148 -0
- package/dist/lib/src/reactiveTasks/LeaderElector.js.map +1 -0
- package/dist/lib/src/reactiveTasks/MetricsCollector.js +403 -0
- package/dist/lib/src/reactiveTasks/MetricsCollector.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js +281 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js +178 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js +436 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js +211 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js +177 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js +348 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js +146 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js +27 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js.map +1 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js +179 -0
- package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js.map +1 -0
- package/dist/lib/src/reactiveTasks/compileWatchProjection.js +58 -0
- package/dist/lib/src/reactiveTasks/compileWatchProjection.js.map +1 -0
- package/dist/lib/src/reactiveTasks/index.js +291 -0
- package/dist/lib/src/reactiveTasks/index.js.map +1 -0
- package/dist/lib/src/reactiveTasks/queryToExpression.js +153 -0
- package/dist/lib/src/reactiveTasks/queryToExpression.js.map +1 -0
- package/dist/lib/src/reactiveTasks/validateTaskFilter.js +81 -0
- package/dist/lib/src/reactiveTasks/validateTaskFilter.js.map +1 -0
- package/dist/lib/src/task-management/OperationalTaskController.js +155 -0
- package/dist/lib/src/task-management/OperationalTaskController.js.map +1 -0
- package/dist/lib/src/task-management/index.js +20 -0
- package/dist/lib/src/task-management/index.js.map +1 -0
- package/dist/lib/src/task-management/serveDashboard.js +142 -0
- package/dist/lib/src/task-management/serveDashboard.js.map +1 -0
- package/dist/lib/src/task-management/types.js +3 -0
- package/dist/lib/src/task-management/types.js.map +1 -0
- package/dist/lib/{withLock.js → src/withLock.js} +2 -10
- package/dist/lib/src/withLock.js.map +1 -0
- package/dist/lib/{withTransaction.js → src/withTransaction.js} +3 -10
- package/dist/lib/src/withTransaction.js.map +1 -0
- package/dist/lib/tools/check-db-connection.js +21 -0
- package/dist/lib/tools/check-db-connection.js.map +1 -0
- package/dist/lib/tools/clean-testing-databases.js +5 -0
- package/dist/lib/tools/clean-testing-databases.js.map +1 -0
- package/dist/lib/tools/prepare-republish.js +20 -0
- package/dist/lib/tools/prepare-republish.js.map +1 -0
- package/dist/lib/tools/test-matrix-local.js +205 -0
- package/dist/lib/tools/test-matrix-local.js.map +1 -0
- package/dist/lib/tools/testingDatabase.js +48 -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 +50 -0
- package/docs/.vitepress/theme/index.ts +4 -0
- package/docs/.vitepress/theme/style.css +21 -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 +186 -0
- package/docs/index.md +32 -0
- package/docs/initialization.md +59 -0
- package/docs/process-in-batches.md +73 -0
- package/docs/public/logo.png +0 -0
- package/docs/reactive-tasks.md +913 -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 +131 -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 +0 -17
- 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,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* mongodash v2.0.0
|
|
3
|
-
* 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";
|
|
1
|
+
"use strict";
|
|
9
2
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
10
3
|
var t = {};
|
|
11
4
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -25,16 +18,19 @@ exports.stopCronTasks = stopCronTasks;
|
|
|
25
18
|
exports.startCronTasks = startCronTasks;
|
|
26
19
|
exports.scheduleCronTaskImmediately = scheduleCronTaskImmediately;
|
|
27
20
|
exports.cronTask = cronTask;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
exports.getCronTasksList = getCronTasksList;
|
|
22
|
+
exports.triggerCronTask = triggerCronTask;
|
|
23
|
+
exports.getRegisteredCronTaskIds = getRegisteredCronTaskIds;
|
|
31
24
|
const createContinuousLock_1 = require("./createContinuousLock");
|
|
32
25
|
const getCollection_1 = require("./getCollection");
|
|
33
26
|
const initPromise_1 = require("./initPromise");
|
|
27
|
+
const parseInterval_1 = require("./parseInterval");
|
|
34
28
|
exports.CODE_CRON_TASK_STARTED = 'cronTaskStarted';
|
|
35
29
|
exports.CODE_CRON_TASK_FINISHED = 'cronTaskFinished';
|
|
36
30
|
exports.CODE_CRON_TASK_SCHEDULED = 'cronTaskScheduled';
|
|
37
31
|
exports.CODE_CRON_TASK_FAILED = 'cronTaskFailed';
|
|
32
|
+
// const debug = _debug('mongodash:cronTasks');
|
|
33
|
+
const debug = (..._args) => { };
|
|
38
34
|
class TaskDocument {
|
|
39
35
|
constructor(_id, runSince) {
|
|
40
36
|
this._id = _id;
|
|
@@ -61,40 +57,12 @@ const state = {
|
|
|
61
57
|
ensureIndexPromise: null,
|
|
62
58
|
cronExpressionParserOptions: {},
|
|
63
59
|
};
|
|
64
|
-
let
|
|
65
|
-
let
|
|
66
|
-
let
|
|
67
|
-
let
|
|
68
|
-
function dateInMillis(milliseconds) {
|
|
69
|
-
return new Date(Date.now() + milliseconds);
|
|
70
|
-
}
|
|
71
|
-
const invalidIntervalMessage = `Invalid interval.`;
|
|
60
|
+
let taskCaller;
|
|
61
|
+
let taskFilter;
|
|
62
|
+
let onError;
|
|
63
|
+
let onInfo;
|
|
72
64
|
function createIntervalFunctionFromScalar(interval) {
|
|
73
|
-
|
|
74
|
-
if (!Number.isFinite(interval)) {
|
|
75
|
-
throw new Error('Interval number has to be finite.');
|
|
76
|
-
}
|
|
77
|
-
return () => dateInMillis(interval);
|
|
78
|
-
}
|
|
79
|
-
else if (typeof interval !== 'string') {
|
|
80
|
-
throw new Error(invalidIntervalMessage);
|
|
81
|
-
}
|
|
82
|
-
if (/^CRON /i.test(interval)) {
|
|
83
|
-
try {
|
|
84
|
-
const expression = interval.slice(5);
|
|
85
|
-
const parsedExpression = cron_parser_1.default.parse(expression, state.cronExpressionParserOptions);
|
|
86
|
-
return () => parsedExpression.next().toDate();
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
throw new Error(`${invalidIntervalMessage} ${err.message}.`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
const duration = (0, parse_duration_1.default)(interval);
|
|
93
|
-
// debug('parsed duration: ', duration);
|
|
94
|
-
if (typeof duration !== 'number') {
|
|
95
|
-
throw new Error(invalidIntervalMessage);
|
|
96
|
-
}
|
|
97
|
-
return () => dateInMillis(duration);
|
|
65
|
+
return (0, parseInterval_1.createIntervalFunction)(interval, { cronOptions: state.cronExpressionParserOptions });
|
|
98
66
|
}
|
|
99
67
|
async function getNextRunDate(intervalFunction) {
|
|
100
68
|
const maybeDate = await intervalFunction();
|
|
@@ -108,7 +76,7 @@ async function runCronTask(taskId) {
|
|
|
108
76
|
if ((_a = new Error().stack) === null || _a === void 0 ? void 0 : _a.includes('mongoDashRunTaskNotCyclic')) {
|
|
109
77
|
throw new Error('It is not possible to call runCronTask inside another running task. Use the scheduleCronTaskImmediately() function instead.');
|
|
110
78
|
}
|
|
111
|
-
|
|
79
|
+
debug(`runCronTask called for ${taskId}`);
|
|
112
80
|
if (!state.tasks.has(taskId)) {
|
|
113
81
|
throw new Error(`Cannot run unknown task '${taskId}'.`);
|
|
114
82
|
}
|
|
@@ -135,7 +103,7 @@ function getUnlockedFilter() {
|
|
|
135
103
|
}
|
|
136
104
|
function getTasksToProcessFilter() {
|
|
137
105
|
return {
|
|
138
|
-
$and: [{ _id: { $in: Array.from(state.tasks.keys()).filter((taskId) =>
|
|
106
|
+
$and: [{ _id: { $in: Array.from(state.tasks.keys()).filter((taskId) => taskFilter({ taskId })) } }, getUnlockedFilter()],
|
|
139
107
|
};
|
|
140
108
|
}
|
|
141
109
|
async function findATaskToRun(enforcedTask) {
|
|
@@ -148,8 +116,8 @@ async function findATaskToRun(enforcedTask) {
|
|
|
148
116
|
$and: [{ $or: [{ runSince: { $lte: new Date() } }, { runImmediately: true }] }, getTasksToProcessFilter()],
|
|
149
117
|
};
|
|
150
118
|
}
|
|
151
|
-
|
|
152
|
-
const
|
|
119
|
+
debug('finding a task', JSON.stringify(filter, null, 2));
|
|
120
|
+
const result = await state.collection.findOneAndUpdate(filter, {
|
|
153
121
|
$set: {
|
|
154
122
|
lockedTill: getLockDate(),
|
|
155
123
|
runImmediately: false,
|
|
@@ -170,6 +138,8 @@ async function findATaskToRun(enforcedTask) {
|
|
|
170
138
|
projection: { _id: true, runImmediately: true },
|
|
171
139
|
includeResultMetadata: true,
|
|
172
140
|
});
|
|
141
|
+
// Handle v4/v5+ compatibility
|
|
142
|
+
const document = result.value;
|
|
173
143
|
if (!document) {
|
|
174
144
|
if (enforcedTask) {
|
|
175
145
|
enforcedTask.reject(new Error('The task document not found or is locked right now.'));
|
|
@@ -186,41 +156,40 @@ async function findATaskToRun(enforcedTask) {
|
|
|
186
156
|
});
|
|
187
157
|
return null;
|
|
188
158
|
}
|
|
189
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
190
159
|
return state.tasks.get(document._id);
|
|
191
160
|
}
|
|
192
161
|
async function processTask(task, enforcedTask) {
|
|
193
|
-
const stopContinuousLock = (0, createContinuousLock_1.createContinuousLock)(state.collection, task.taskId, 'lockedTill', lockTime,
|
|
162
|
+
const stopContinuousLock = (0, createContinuousLock_1.createContinuousLock)(state.collection, task.taskId, 'lockedTill', lockTime, onError);
|
|
194
163
|
const processTheTask = async () => {
|
|
195
|
-
|
|
164
|
+
debug(`processing task ${task.taskId} `);
|
|
196
165
|
let taskError = null;
|
|
197
166
|
let nextRunDate;
|
|
198
167
|
let nextRunScheduled = false;
|
|
199
168
|
const start = new Date();
|
|
200
169
|
try {
|
|
201
170
|
function mongoDashRunTaskNotCyclic() {
|
|
202
|
-
|
|
171
|
+
onInfo({ message: `Cron task '${task.taskId}' started.`, taskId: task.taskId, code: exports.CODE_CRON_TASK_STARTED });
|
|
203
172
|
return task.task();
|
|
204
173
|
}
|
|
205
174
|
await mongoDashRunTaskNotCyclic();
|
|
206
175
|
const duration = Date.now() - start.getTime();
|
|
207
|
-
|
|
176
|
+
onInfo({ message: `Cron task '${task.taskId}' finished in ${duration} ms.`, taskId: task.taskId, code: exports.CODE_CRON_TASK_FINISHED, duration });
|
|
208
177
|
}
|
|
209
178
|
catch (err) {
|
|
210
179
|
const duration = Date.now() - start.getTime();
|
|
211
|
-
const reason = err instanceof Error ? err.message : `${err}`;
|
|
212
|
-
|
|
180
|
+
const reason = err instanceof Error ? err.message : `${err} `;
|
|
181
|
+
onInfo({ message: `Cron task '${task.taskId}' failed in ${duration} ms.`, taskId: task.taskId, code: exports.CODE_CRON_TASK_FAILED, reason, duration });
|
|
213
182
|
taskError = err;
|
|
214
183
|
}
|
|
215
184
|
try {
|
|
216
185
|
await stopContinuousLock(); // to avoid possibility of lock after the following document update
|
|
217
186
|
nextRunDate = await getNextRunDate(task.intervalFunction);
|
|
218
|
-
|
|
187
|
+
debug(`scheduling task ${task.taskId} to run in ${nextRunDate.getTime() - Date.now()} ms`);
|
|
219
188
|
await state.collection.updateOne({ _id: task.taskId }, {
|
|
220
189
|
$set: {
|
|
221
190
|
runSince: nextRunDate,
|
|
222
191
|
lockedTill: null,
|
|
223
|
-
'runLog.0.error': taskError ? `${taskError}` : null,
|
|
192
|
+
'runLog.0.error': taskError ? `${taskError} ` : null,
|
|
224
193
|
'runLog.0.finishedAt': new Date(),
|
|
225
194
|
},
|
|
226
195
|
});
|
|
@@ -236,11 +205,11 @@ async function processTask(task, enforcedTask) {
|
|
|
236
205
|
}
|
|
237
206
|
}
|
|
238
207
|
else if (taskError) {
|
|
239
|
-
|
|
208
|
+
onError(taskError);
|
|
240
209
|
}
|
|
241
210
|
// we want to inform about the scheduling after the
|
|
242
211
|
if (nextRunScheduled) {
|
|
243
|
-
|
|
212
|
+
onInfo({
|
|
244
213
|
message: `Cron task '${task.taskId}' scheduled to ${nextRunDate.toISOString()}.`,
|
|
245
214
|
taskId: task.taskId,
|
|
246
215
|
code: exports.CODE_CRON_TASK_SCHEDULED,
|
|
@@ -250,13 +219,13 @@ async function processTask(task, enforcedTask) {
|
|
|
250
219
|
}
|
|
251
220
|
};
|
|
252
221
|
try {
|
|
253
|
-
await
|
|
222
|
+
await taskCaller(processTheTask);
|
|
254
223
|
}
|
|
255
224
|
catch (err) {
|
|
256
225
|
// todo revise why we need to do this
|
|
257
226
|
// this should fix situations when the _taskCaller has a problem
|
|
258
227
|
await stopContinuousLock();
|
|
259
|
-
|
|
228
|
+
onError(err);
|
|
260
229
|
}
|
|
261
230
|
}
|
|
262
231
|
/** can never throw */
|
|
@@ -273,12 +242,12 @@ async function getWaitTimeByNextTask() {
|
|
|
273
242
|
return Math.min(Math.max(timeToNext, 0), noTaskWaitTime);
|
|
274
243
|
}
|
|
275
244
|
catch (error) {
|
|
276
|
-
|
|
245
|
+
onError(error);
|
|
277
246
|
return noTaskWaitTime;
|
|
278
247
|
}
|
|
279
248
|
}
|
|
280
249
|
function runATask() {
|
|
281
|
-
|
|
250
|
+
debug('runATask called');
|
|
282
251
|
state.working = true;
|
|
283
252
|
(async () => {
|
|
284
253
|
await initPromise_1.initPromise;
|
|
@@ -288,18 +257,18 @@ function runATask() {
|
|
|
288
257
|
try {
|
|
289
258
|
task = await findATaskToRun(enforcedTask);
|
|
290
259
|
if (!task) {
|
|
291
|
-
|
|
260
|
+
debug('no pending task found');
|
|
292
261
|
return; // the finally statement will be called anyway
|
|
293
262
|
}
|
|
294
263
|
await processTask(task, enforcedTask);
|
|
295
264
|
}
|
|
296
265
|
catch (error) {
|
|
297
|
-
|
|
266
|
+
debug(`Catch error ${error} `);
|
|
298
267
|
if (enforcedTask) {
|
|
299
268
|
enforcedTask.reject(error);
|
|
300
269
|
}
|
|
301
270
|
else {
|
|
302
|
-
|
|
271
|
+
onError(error);
|
|
303
272
|
}
|
|
304
273
|
}
|
|
305
274
|
finally {
|
|
@@ -319,9 +288,9 @@ function runATask() {
|
|
|
319
288
|
}
|
|
320
289
|
// should we still trigger next?
|
|
321
290
|
if (shouldTriggerNext()) {
|
|
322
|
-
|
|
291
|
+
debug(`SCHEDULING NEXT CHECK AFTER ${waitTime} ms`);
|
|
323
292
|
state.nextTaskTimeoutId = setTimeout(() => {
|
|
324
|
-
|
|
293
|
+
debug("it's time!");
|
|
325
294
|
state.nextTaskTimeoutId = null;
|
|
326
295
|
runATask();
|
|
327
296
|
}, waitTime);
|
|
@@ -331,16 +300,16 @@ function runATask() {
|
|
|
331
300
|
}
|
|
332
301
|
})();
|
|
333
302
|
}
|
|
334
|
-
function init(
|
|
335
|
-
if (cronExpressionParserOptions.endDate) {
|
|
303
|
+
function init(initOptions) {
|
|
304
|
+
if (initOptions.cronExpressionParserOptions.endDate) {
|
|
336
305
|
throw new Error("The 'endDate' parameter of the cron-parser package is not supported yet.");
|
|
337
306
|
}
|
|
338
|
-
state.shouldRun = runCronTasks;
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
state.cronExpressionParserOptions = cronExpressionParserOptions;
|
|
307
|
+
state.shouldRun = initOptions.runCronTasks;
|
|
308
|
+
onError = initOptions.onError;
|
|
309
|
+
onInfo = initOptions.onInfo;
|
|
310
|
+
taskCaller = initOptions.cronTaskCaller;
|
|
311
|
+
taskFilter = initOptions.cronTaskFilter;
|
|
312
|
+
state.cronExpressionParserOptions = initOptions.cronExpressionParserOptions;
|
|
344
313
|
}
|
|
345
314
|
function ensureStarted() {
|
|
346
315
|
// terminate waiting if there is any
|
|
@@ -349,13 +318,13 @@ function ensureStarted() {
|
|
|
349
318
|
state.nextTaskTimeoutId = null;
|
|
350
319
|
}
|
|
351
320
|
if (!state.working) {
|
|
352
|
-
|
|
321
|
+
debug('STARTING LOOP');
|
|
353
322
|
runATask();
|
|
354
323
|
}
|
|
355
324
|
// else the loop is already set
|
|
356
325
|
}
|
|
357
326
|
function stopCronTasks() {
|
|
358
|
-
|
|
327
|
+
debug('STOPPING CRON TASKS');
|
|
359
328
|
state.shouldRun = false;
|
|
360
329
|
if (state.nextTaskTimeoutId) {
|
|
361
330
|
clearTimeout(state.nextTaskTimeoutId);
|
|
@@ -391,10 +360,90 @@ async function cronTask(taskId, interval, task) {
|
|
|
391
360
|
task,
|
|
392
361
|
intervalFunction,
|
|
393
362
|
});
|
|
394
|
-
|
|
363
|
+
debug(`task ${taskId} has been registered`);
|
|
395
364
|
await ensureIndex();
|
|
396
365
|
if (state.shouldRun) {
|
|
397
366
|
ensureStarted();
|
|
398
367
|
}
|
|
399
368
|
}
|
|
369
|
+
/**
|
|
370
|
+
* Lists cron tasks with pagination and sorting.
|
|
371
|
+
*/
|
|
372
|
+
async function getCronTasksList(query = {}) {
|
|
373
|
+
var _a, _b, _c, _d, _e;
|
|
374
|
+
const limit = (_a = query.limit) !== null && _a !== void 0 ? _a : 50;
|
|
375
|
+
const skip = (_b = query.skip) !== null && _b !== void 0 ? _b : 0;
|
|
376
|
+
let sortField = ((_c = query.sort) === null || _c === void 0 ? void 0 : _c.field) || 'runSince';
|
|
377
|
+
if (sortField === 'nextRunAt')
|
|
378
|
+
sortField = 'runSince';
|
|
379
|
+
const sort = { [sortField]: (_e = (_d = query.sort) === null || _d === void 0 ? void 0 : _d.direction) !== null && _e !== void 0 ? _e : 1 };
|
|
380
|
+
let localTaskIds = Array.from(state.tasks.keys());
|
|
381
|
+
if (query.filter) {
|
|
382
|
+
const regex = new RegExp(query.filter, 'i');
|
|
383
|
+
localTaskIds = localTaskIds.filter((id) => regex.test(id));
|
|
384
|
+
}
|
|
385
|
+
const filter = {
|
|
386
|
+
_id: { $in: localTaskIds },
|
|
387
|
+
};
|
|
388
|
+
const [docs, total] = await Promise.all([
|
|
389
|
+
state.collection.find(filter).sort(sort).skip(skip).limit(limit).toArray(),
|
|
390
|
+
state.collection.countDocuments(filter),
|
|
391
|
+
]);
|
|
392
|
+
const items = docs.map((doc) => {
|
|
393
|
+
const lastRun = doc.runLog[0] || null;
|
|
394
|
+
let lastRunData = null;
|
|
395
|
+
if (lastRun) {
|
|
396
|
+
lastRunData = {
|
|
397
|
+
startedAt: lastRun.startedAt,
|
|
398
|
+
finishedAt: lastRun.finishedAt,
|
|
399
|
+
error: lastRun.error,
|
|
400
|
+
durationMs: lastRun.finishedAt ? lastRun.finishedAt.getTime() - lastRun.startedAt.getTime() : undefined,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
let status = 'idle';
|
|
404
|
+
if (doc.lockedTill && doc.lockedTill > new Date()) {
|
|
405
|
+
status = 'locked';
|
|
406
|
+
// We can assume 'running' if locked, unless just failed/finished and lock not released yet?
|
|
407
|
+
// Actually 'lockedTill' is set during processing.
|
|
408
|
+
// If we want to distinguish 'running' from just 'locked', it's hard without another field.
|
|
409
|
+
// But 'locked' usually means running or zombie.
|
|
410
|
+
status = 'running';
|
|
411
|
+
}
|
|
412
|
+
else if (doc.runImmediately) {
|
|
413
|
+
status = 'scheduled';
|
|
414
|
+
}
|
|
415
|
+
else if (lastRun === null || lastRun === void 0 ? void 0 : lastRun.error) {
|
|
416
|
+
// Only if the LATEST run failed and we are not currently running
|
|
417
|
+
status = 'failed';
|
|
418
|
+
}
|
|
419
|
+
return {
|
|
420
|
+
_id: doc._id,
|
|
421
|
+
status,
|
|
422
|
+
nextRunAt: doc.runSince,
|
|
423
|
+
runImmediately: doc.runImmediately,
|
|
424
|
+
lockedTill: doc.lockedTill,
|
|
425
|
+
lastRun: lastRunData,
|
|
426
|
+
isRegistered: state.tasks.has(doc._id),
|
|
427
|
+
};
|
|
428
|
+
});
|
|
429
|
+
return {
|
|
430
|
+
items,
|
|
431
|
+
total,
|
|
432
|
+
limit,
|
|
433
|
+
offset: skip,
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Triggers a cron task immediately.
|
|
438
|
+
* Alias for scheduleCronTaskImmediately but returns the new state or confirmation.
|
|
439
|
+
*/
|
|
440
|
+
async function triggerCronTask(taskId) {
|
|
441
|
+
return scheduleCronTaskImmediately(taskId);
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Returns IDs of all registered cron tasks in this instance.
|
|
445
|
+
*/
|
|
446
|
+
function getRegisteredCronTaskIds() {
|
|
447
|
+
return Array.from(state.tasks.keys()).sort();
|
|
448
|
+
}
|
|
400
449
|
//# sourceMappingURL=cronTasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cronTasks.js","sourceRoot":"","sources":["../../../src/cronTasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* mongodash v2.0.0
|
|
3
|
-
* 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';
|
|
1
|
+
'use strict';
|
|
9
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
3
|
exports.init = init;
|
|
11
4
|
exports.getCollection = getCollection;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCollection.js","sourceRoot":"","sources":["../../../src/getCollection.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAoBb,oBAEC;AAID,sCAaC;AApCD,qDAAkD;AAIlD,IAAI,iBAA2C,CAAC;AAahD,SAAgB,IAAI,CAAC,OAAoB;IACrC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAClD,CAAC;AAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,SAAgB,aAAa,CAAqB,IAAY;IAC1D,IAAI,CAAC;QACD,gBAAgB,EAAE,CAAC;QACnB,IAAI,iBAAiB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAyB,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACjE,IAAI,UAAU,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC;YACtB,CAAC;QACL,CAAC;QACD,OAAO,IAAA,+BAAc,GAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAI,IAAI,CAAC,CAAC;IACrD,CAAC;YAAS,CAAC;QACP,gBAAgB,EAAE,CAAC;IACvB,CAAC;AACL,CAAC"}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* mongodash v2.0.0
|
|
3
|
-
* 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';
|
|
1
|
+
'use strict';
|
|
9
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
3
|
exports.getMongoClient = getMongoClient;
|
|
11
4
|
exports.init = init;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMongoClient.js","sourceRoot":"","sources":["../../../src/getMongoClient.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAKb,wCAKC;AAMD,oBAeC;AA9BD,qCAA0D;AAE1D,IAAI,mBAAgC,CAAC;AAErC,SAAgB,cAAc;IAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvB,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAMM,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC3C,IAAI,aAAa,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,eAAe,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACnF,CAAC;QACD,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAC9C,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,mBAAmB,GAAG,IAAI,qBAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1E,MAAM,mBAAmB,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAChG,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalsCollection.js","sourceRoot":"","sources":["../../../src/globalsCollection.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OperationalTaskController = exports.serveDashboard = exports.processInBatches = exports.retryReactiveTasks = exports.countReactiveTasks = exports.getReactiveTasks = exports.CODE_REACTIVE_TASK_LEADER_LOCK_LOST = exports.CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR = exports.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED = exports.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED = exports.CODE_REACTIVE_TASK_PLANNER_STOPPED = exports.CODE_REACTIVE_TASK_PLANNER_STARTED = exports.CODE_REACTIVE_TASK_FAILED = exports.CODE_REACTIVE_TASK_FINISHED = exports.CODE_REACTIVE_TASK_STARTED = exports._scheduler = exports.getPrometheusMetrics = exports.stopReactiveTasks = exports.startReactiveTasks = exports.TaskConditionFailedError = exports.reactiveTask = exports.registerPostCommitHook = exports.withTransaction = exports.LockAlreadyAcquiredError = exports.isLockAlreadyAcquiredError = exports.withLock = exports.getMongoClient = exports.getCollection = exports.triggerCronTask = exports.getCronTasksList = exports.CODE_CRON_TASK_FAILED = exports.CODE_CRON_TASK_SCHEDULED = exports.CODE_CRON_TASK_FINISHED = exports.CODE_CRON_TASK_STARTED = exports.stopCronTasks = exports.startCronTasks = exports.scheduleCronTaskImmediately = exports.runCronTask = exports.cronTask = void 0;
|
|
4
|
+
exports.init = init;
|
|
5
|
+
const cronTasks_1 = require("./cronTasks");
|
|
6
|
+
const reactiveTasks_1 = require("./reactiveTasks");
|
|
7
|
+
const getCollection_1 = require("./getCollection");
|
|
8
|
+
const getMongoClient_1 = require("./getMongoClient");
|
|
9
|
+
const OnError_1 = require("./OnError");
|
|
10
|
+
const OnInfo_1 = require("./OnInfo");
|
|
11
|
+
const withLock_1 = require("./withLock");
|
|
12
|
+
const withTransaction_1 = require("./withTransaction");
|
|
13
|
+
const initPromise_1 = require("./initPromise");
|
|
14
|
+
var cronTasks_2 = require("./cronTasks");
|
|
15
|
+
Object.defineProperty(exports, "cronTask", { enumerable: true, get: function () { return cronTasks_2.cronTask; } });
|
|
16
|
+
Object.defineProperty(exports, "runCronTask", { enumerable: true, get: function () { return cronTasks_2.runCronTask; } });
|
|
17
|
+
Object.defineProperty(exports, "scheduleCronTaskImmediately", { enumerable: true, get: function () { return cronTasks_2.scheduleCronTaskImmediately; } });
|
|
18
|
+
Object.defineProperty(exports, "startCronTasks", { enumerable: true, get: function () { return cronTasks_2.startCronTasks; } });
|
|
19
|
+
Object.defineProperty(exports, "stopCronTasks", { enumerable: true, get: function () { return cronTasks_2.stopCronTasks; } });
|
|
20
|
+
Object.defineProperty(exports, "CODE_CRON_TASK_STARTED", { enumerable: true, get: function () { return cronTasks_2.CODE_CRON_TASK_STARTED; } });
|
|
21
|
+
Object.defineProperty(exports, "CODE_CRON_TASK_FINISHED", { enumerable: true, get: function () { return cronTasks_2.CODE_CRON_TASK_FINISHED; } });
|
|
22
|
+
Object.defineProperty(exports, "CODE_CRON_TASK_SCHEDULED", { enumerable: true, get: function () { return cronTasks_2.CODE_CRON_TASK_SCHEDULED; } });
|
|
23
|
+
Object.defineProperty(exports, "CODE_CRON_TASK_FAILED", { enumerable: true, get: function () { return cronTasks_2.CODE_CRON_TASK_FAILED; } });
|
|
24
|
+
Object.defineProperty(exports, "getCronTasksList", { enumerable: true, get: function () { return cronTasks_2.getCronTasksList; } });
|
|
25
|
+
Object.defineProperty(exports, "triggerCronTask", { enumerable: true, get: function () { return cronTasks_2.triggerCronTask; } });
|
|
26
|
+
var getCollection_2 = require("./getCollection");
|
|
27
|
+
Object.defineProperty(exports, "getCollection", { enumerable: true, get: function () { return getCollection_2.getCollection; } });
|
|
28
|
+
var getMongoClient_2 = require("./getMongoClient");
|
|
29
|
+
Object.defineProperty(exports, "getMongoClient", { enumerable: true, get: function () { return getMongoClient_2.getMongoClient; } });
|
|
30
|
+
var withLock_2 = require("./withLock");
|
|
31
|
+
Object.defineProperty(exports, "withLock", { enumerable: true, get: function () { return withLock_2.withLock; } });
|
|
32
|
+
Object.defineProperty(exports, "isLockAlreadyAcquiredError", { enumerable: true, get: function () { return withLock_2.isLockAlreadyAcquiredError; } });
|
|
33
|
+
Object.defineProperty(exports, "LockAlreadyAcquiredError", { enumerable: true, get: function () { return withLock_2.LockAlreadyAcquiredError; } });
|
|
34
|
+
var withTransaction_2 = require("./withTransaction");
|
|
35
|
+
Object.defineProperty(exports, "withTransaction", { enumerable: true, get: function () { return withTransaction_2.withTransaction; } });
|
|
36
|
+
Object.defineProperty(exports, "registerPostCommitHook", { enumerable: true, get: function () { return withTransaction_2.registerPostCommitHook; } });
|
|
37
|
+
var reactiveTasks_2 = require("./reactiveTasks");
|
|
38
|
+
Object.defineProperty(exports, "reactiveTask", { enumerable: true, get: function () { return reactiveTasks_2.reactiveTask; } });
|
|
39
|
+
Object.defineProperty(exports, "TaskConditionFailedError", { enumerable: true, get: function () { return reactiveTasks_2.TaskConditionFailedError; } });
|
|
40
|
+
Object.defineProperty(exports, "startReactiveTasks", { enumerable: true, get: function () { return reactiveTasks_2.startReactiveTasks; } });
|
|
41
|
+
Object.defineProperty(exports, "stopReactiveTasks", { enumerable: true, get: function () { return reactiveTasks_2.stopReactiveTasks; } });
|
|
42
|
+
Object.defineProperty(exports, "getPrometheusMetrics", { enumerable: true, get: function () { return reactiveTasks_2.getPrometheusMetrics; } });
|
|
43
|
+
Object.defineProperty(exports, "_scheduler", { enumerable: true, get: function () { return reactiveTasks_2._scheduler; } });
|
|
44
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_STARTED", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_STARTED; } });
|
|
45
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_FINISHED", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_FINISHED; } });
|
|
46
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_FAILED", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_FAILED; } });
|
|
47
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_PLANNER_STARTED", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_PLANNER_STARTED; } });
|
|
48
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_PLANNER_STOPPED", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_PLANNER_STOPPED; } });
|
|
49
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED; } });
|
|
50
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED; } });
|
|
51
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR; } });
|
|
52
|
+
Object.defineProperty(exports, "CODE_REACTIVE_TASK_LEADER_LOCK_LOST", { enumerable: true, get: function () { return reactiveTasks_2.CODE_REACTIVE_TASK_LEADER_LOCK_LOST; } });
|
|
53
|
+
Object.defineProperty(exports, "getReactiveTasks", { enumerable: true, get: function () { return reactiveTasks_2.getReactiveTasks; } });
|
|
54
|
+
Object.defineProperty(exports, "countReactiveTasks", { enumerable: true, get: function () { return reactiveTasks_2.countReactiveTasks; } });
|
|
55
|
+
Object.defineProperty(exports, "retryReactiveTasks", { enumerable: true, get: function () { return reactiveTasks_2.retryReactiveTasks; } });
|
|
56
|
+
var processInBatches_1 = require("./processInBatches");
|
|
57
|
+
Object.defineProperty(exports, "processInBatches", { enumerable: true, get: function () { return processInBatches_1.processInBatches; } });
|
|
58
|
+
var task_management_1 = require("./task-management");
|
|
59
|
+
Object.defineProperty(exports, "serveDashboard", { enumerable: true, get: function () { return task_management_1.serveDashboard; } });
|
|
60
|
+
Object.defineProperty(exports, "OperationalTaskController", { enumerable: true, get: function () { return task_management_1.OperationalTaskController; } });
|
|
61
|
+
let initCalled = false;
|
|
62
|
+
async function init(options) {
|
|
63
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
64
|
+
if (initCalled) {
|
|
65
|
+
throw new Error('init method can be called only once.');
|
|
66
|
+
}
|
|
67
|
+
initCalled = true;
|
|
68
|
+
const onError = options.onError ? (0, OnError_1.secureOnError)(options.onError) : OnError_1.defaultOnError;
|
|
69
|
+
const onInfo = options.onInfo ? (0, OnInfo_1.secureOnInfo)(options.onInfo) : OnInfo_1.defaultOnInfo;
|
|
70
|
+
const taskCaller = options.taskCaller || ((task) => task());
|
|
71
|
+
await (0, getMongoClient_1.init)(options);
|
|
72
|
+
(0, getCollection_1.init)({ collectionFactory: (_a = options.collectionFactory) !== null && _a !== void 0 ? _a : null });
|
|
73
|
+
let globalsCollection;
|
|
74
|
+
if (!options.globalsCollection || typeof options.globalsCollection === 'string') {
|
|
75
|
+
globalsCollection = (0, getCollection_1.getCollection)((_b = options.globalsCollection) !== null && _b !== void 0 ? _b : '_mongodash_globals');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
globalsCollection = options.globalsCollection;
|
|
79
|
+
}
|
|
80
|
+
(0, withLock_1.init)({ onError });
|
|
81
|
+
(0, withTransaction_1.init)({ onError, onInfo });
|
|
82
|
+
(0, cronTasks_1.init)({
|
|
83
|
+
runCronTasks: (_c = options.runCronTasks) !== null && _c !== void 0 ? _c : true,
|
|
84
|
+
cronExpressionParserOptions: (_d = options.cronExpressionParserOptions) !== null && _d !== void 0 ? _d : {},
|
|
85
|
+
onError,
|
|
86
|
+
onInfo,
|
|
87
|
+
cronTaskCaller: (_e = options.cronTaskCaller) !== null && _e !== void 0 ? _e : taskCaller,
|
|
88
|
+
cronTaskFilter: (_f = options.cronTaskFilter) !== null && _f !== void 0 ? _f : (() => true),
|
|
89
|
+
});
|
|
90
|
+
(0, reactiveTasks_1.init)(Object.assign(Object.assign({}, options), { globalsCollection: globalsCollection, onError,
|
|
91
|
+
onInfo, reactiveTaskCaller: (_g = options.reactiveTaskCaller) !== null && _g !== void 0 ? _g : taskCaller }));
|
|
92
|
+
(0, initPromise_1.resolveInitPromise)();
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveInitPromise = exports.initPromise = void 0;
|
|
4
|
+
let _resolve;
|
|
5
|
+
exports.initPromise = new Promise((resolve) => {
|
|
6
|
+
_resolve = resolve;
|
|
7
|
+
});
|
|
8
|
+
exports.resolveInitPromise = _resolve;
|
|
9
|
+
//# sourceMappingURL=initPromise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initPromise.js","sourceRoot":"","sources":["../../../src/initPromise.ts"],"names":[],"mappings":";;;AAAA,IAAI,QAAoB,CAAC;AACZ,QAAA,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;IACrD,QAAQ,GAAG,OAAO,CAAC;AACvB,CAAC,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,QAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoCompatibility.js","sourceRoot":"","sources":["../../../src/mongoCompatibility.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIntervalFunction = createIntervalFunction;
|
|
4
|
+
const CronParser = require('cron-parser');
|
|
5
|
+
const { Duration } = require('@sapphire/duration');
|
|
6
|
+
/**
|
|
7
|
+
* Create a function that returns the next run Date based on an interval specification.
|
|
8
|
+
*
|
|
9
|
+
* Supports:
|
|
10
|
+
* - Number: returns Date that is `interval` milliseconds from now
|
|
11
|
+
* - Duration string: '1h', '24h', '7d' - returns Date that is duration from now
|
|
12
|
+
* - Cron expression: 'CRON 0 3 * * *' (must start with CRON) - returns next cron occurrence
|
|
13
|
+
*/
|
|
14
|
+
function createIntervalFunction(interval, options = {}) {
|
|
15
|
+
const { cronOptions = {} } = options;
|
|
16
|
+
if (typeof interval === 'number') {
|
|
17
|
+
if (!Number.isFinite(interval)) {
|
|
18
|
+
throw new Error(`Error: Interval number has to be finite.`);
|
|
19
|
+
}
|
|
20
|
+
return (referenceDate) => { var _a; return new Date(((_a = referenceDate === null || referenceDate === void 0 ? void 0 : referenceDate.getTime()) !== null && _a !== void 0 ? _a : Date.now()) + interval); };
|
|
21
|
+
}
|
|
22
|
+
if (typeof interval !== 'string') {
|
|
23
|
+
throw new Error('Error: Invalid interval.');
|
|
24
|
+
}
|
|
25
|
+
// Check for CRON prefix (case insensitive)
|
|
26
|
+
if (/^CRON /i.test(interval)) {
|
|
27
|
+
try {
|
|
28
|
+
const expression = interval.slice(5); // Remove "CRON " prefix
|
|
29
|
+
// Validate immediately
|
|
30
|
+
CronParser.CronExpressionParser.parse(expression, cronOptions);
|
|
31
|
+
// We use parse to handle the options correctly, specifically currentDate
|
|
32
|
+
return (referenceDate) => {
|
|
33
|
+
const opts = Object.assign(Object.assign({}, cronOptions), { currentDate: referenceDate !== null && referenceDate !== void 0 ? referenceDate : new Date() });
|
|
34
|
+
const parsed = CronParser.CronExpressionParser.parse(expression, opts);
|
|
35
|
+
return parsed.next().toDate();
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
throw new Error(`Error: Invalid interval. ${err.message}.`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Safety check: if it looks like a cron expression but missing prefix, throw
|
|
43
|
+
if (interval.includes('*') && interval.split(' ').length >= 5) {
|
|
44
|
+
throw new Error("Error: Invalid interval. Cron expressions must start with 'CRON '.");
|
|
45
|
+
}
|
|
46
|
+
// Parse as duration string
|
|
47
|
+
const duration = new Duration(interval).offset;
|
|
48
|
+
if (typeof duration !== 'number' || Number.isNaN(duration)) {
|
|
49
|
+
throw new Error('Error: Invalid interval.');
|
|
50
|
+
}
|
|
51
|
+
return (referenceDate) => { var _a; return new Date(((_a = referenceDate === null || referenceDate === void 0 ? void 0 : referenceDate.getTime()) !== null && _a !== void 0 ? _a : Date.now()) + duration); };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=parseInterval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseInterval.js","sourceRoot":"","sources":["../../../src/parseInterval.ts"],"names":[],"mappings":";;AAaA,wDA+CC;AA5DD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAE1C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAGnD;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CAClC,QAA4D,EAC5D,UAAmD,EAAE;IAErD,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAErC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,aAAoB,EAAE,EAAE,WAAC,OAAA,IAAI,IAAI,CAAC,CAAC,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,EAAE,mCAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAA,EAAA,CAAC;IACnG,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;IAED,2CAA2C;IAC3C,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;YAE9D,uBAAuB;YACvB,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAE/D,yEAAyE;YACzE,OAAO,CAAC,aAAoB,EAAE,EAAE;gBAC5B,MAAM,IAAI,mCAAQ,WAAW,KAAE,WAAW,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,IAAI,IAAI,EAAE,GAAE,CAAC;gBAC1E,MAAM,MAAM,GAAG,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACvE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YAClC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,4BAA6B,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAC1F,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,aAAoB,EAAE,EAAE,WAAC,OAAA,IAAI,IAAI,CAAC,CAAC,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,EAAE,mCAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAA,EAAA,CAAC;AACnG,CAAC"}
|