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.
Files changed (165) hide show
  1. package/README.md +107 -23
  2. package/dist/dashboard/index.html +40 -0
  3. package/dist/lib/playground/server.js +124 -0
  4. package/dist/lib/playground/server.js.map +1 -0
  5. package/dist/lib/src/ConcurrentRunner.js +141 -0
  6. package/dist/lib/src/ConcurrentRunner.js.map +1 -0
  7. package/dist/lib/{OnError.js → src/OnError.js} +2 -9
  8. package/dist/lib/src/OnError.js.map +1 -0
  9. package/dist/lib/{OnInfo.js → src/OnInfo.js} +5 -9
  10. package/dist/lib/src/OnInfo.js.map +1 -0
  11. package/dist/lib/{createContinuousLock.js → src/createContinuousLock.js} +4 -9
  12. package/dist/lib/src/createContinuousLock.js.map +1 -0
  13. package/dist/lib/{cronTasks.js → src/cronTasks.js} +128 -79
  14. package/dist/lib/src/cronTasks.js.map +1 -0
  15. package/dist/lib/{getCollection.js → src/getCollection.js} +1 -8
  16. package/dist/lib/src/getCollection.js.map +1 -0
  17. package/dist/lib/{getMongoClient.js → src/getMongoClient.js} +1 -8
  18. package/dist/lib/src/getMongoClient.js.map +1 -0
  19. package/dist/lib/src/globalsCollection.js +3 -0
  20. package/dist/lib/src/globalsCollection.js.map +1 -0
  21. package/dist/lib/src/index.js +94 -0
  22. package/dist/lib/src/index.js.map +1 -0
  23. package/dist/lib/src/initPromise.js +9 -0
  24. package/dist/lib/src/initPromise.js.map +1 -0
  25. package/dist/lib/src/mongoCompatibility.js +3 -0
  26. package/dist/lib/src/mongoCompatibility.js.map +1 -0
  27. package/dist/lib/src/parseInterval.js +53 -0
  28. package/dist/lib/src/parseInterval.js.map +1 -0
  29. package/dist/lib/src/prefixFilterKeys.js +62 -0
  30. package/dist/lib/src/prefixFilterKeys.js.map +1 -0
  31. package/dist/lib/src/processInBatches.js +39 -0
  32. package/dist/lib/src/processInBatches.js.map +1 -0
  33. package/dist/lib/src/reactiveTasks/LeaderElector.js +148 -0
  34. package/dist/lib/src/reactiveTasks/LeaderElector.js.map +1 -0
  35. package/dist/lib/src/reactiveTasks/MetricsCollector.js +403 -0
  36. package/dist/lib/src/reactiveTasks/MetricsCollector.js.map +1 -0
  37. package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js +281 -0
  38. package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js.map +1 -0
  39. package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js +178 -0
  40. package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js.map +1 -0
  41. package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js +436 -0
  42. package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js.map +1 -0
  43. package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js +211 -0
  44. package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js.map +1 -0
  45. package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js +177 -0
  46. package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js.map +1 -0
  47. package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js +348 -0
  48. package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js.map +1 -0
  49. package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js +146 -0
  50. package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js.map +1 -0
  51. package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js +27 -0
  52. package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js.map +1 -0
  53. package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js +179 -0
  54. package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js.map +1 -0
  55. package/dist/lib/src/reactiveTasks/compileWatchProjection.js +58 -0
  56. package/dist/lib/src/reactiveTasks/compileWatchProjection.js.map +1 -0
  57. package/dist/lib/src/reactiveTasks/index.js +291 -0
  58. package/dist/lib/src/reactiveTasks/index.js.map +1 -0
  59. package/dist/lib/src/reactiveTasks/queryToExpression.js +153 -0
  60. package/dist/lib/src/reactiveTasks/queryToExpression.js.map +1 -0
  61. package/dist/lib/src/reactiveTasks/validateTaskFilter.js +81 -0
  62. package/dist/lib/src/reactiveTasks/validateTaskFilter.js.map +1 -0
  63. package/dist/lib/src/task-management/OperationalTaskController.js +155 -0
  64. package/dist/lib/src/task-management/OperationalTaskController.js.map +1 -0
  65. package/dist/lib/src/task-management/index.js +20 -0
  66. package/dist/lib/src/task-management/index.js.map +1 -0
  67. package/dist/lib/src/task-management/serveDashboard.js +142 -0
  68. package/dist/lib/src/task-management/serveDashboard.js.map +1 -0
  69. package/dist/lib/src/task-management/types.js +3 -0
  70. package/dist/lib/src/task-management/types.js.map +1 -0
  71. package/dist/lib/{withLock.js → src/withLock.js} +2 -10
  72. package/dist/lib/src/withLock.js.map +1 -0
  73. package/dist/lib/{withTransaction.js → src/withTransaction.js} +3 -10
  74. package/dist/lib/src/withTransaction.js.map +1 -0
  75. package/dist/lib/tools/check-db-connection.js +21 -0
  76. package/dist/lib/tools/check-db-connection.js.map +1 -0
  77. package/dist/lib/tools/clean-testing-databases.js +5 -0
  78. package/dist/lib/tools/clean-testing-databases.js.map +1 -0
  79. package/dist/lib/tools/prepare-republish.js +20 -0
  80. package/dist/lib/tools/prepare-republish.js.map +1 -0
  81. package/dist/lib/tools/test-matrix-local.js +205 -0
  82. package/dist/lib/tools/test-matrix-local.js.map +1 -0
  83. package/dist/lib/tools/testingDatabase.js +48 -0
  84. package/dist/lib/tools/testingDatabase.js.map +1 -0
  85. package/dist/types/playground/server.d.ts +1 -0
  86. package/dist/types/src/ConcurrentRunner.d.ts +30 -0
  87. package/dist/types/{OnInfo.d.ts → src/OnInfo.d.ts} +1 -1
  88. package/dist/types/{cronTasks.d.ts → src/cronTasks.d.ts} +44 -1
  89. package/dist/types/src/globalsCollection.d.ts +4 -0
  90. package/dist/types/src/index.d.ts +28 -0
  91. package/dist/types/src/mongoCompatibility.d.ts +29 -0
  92. package/dist/types/src/parseInterval.d.ts +12 -0
  93. package/dist/types/src/prefixFilterKeys.d.ts +11 -0
  94. package/dist/types/src/processInBatches.d.ts +10 -0
  95. package/dist/types/src/reactiveTasks/LeaderElector.d.ts +42 -0
  96. package/dist/types/src/reactiveTasks/MetricsCollector.d.ts +73 -0
  97. package/dist/types/src/reactiveTasks/ReactiveTaskManager.d.ts +18 -0
  98. package/dist/types/src/reactiveTasks/ReactiveTaskOps.d.ts +17 -0
  99. package/dist/types/src/reactiveTasks/ReactiveTaskPlanner.d.ts +62 -0
  100. package/dist/types/src/reactiveTasks/ReactiveTaskReconciler.d.ts +29 -0
  101. package/dist/types/src/reactiveTasks/ReactiveTaskRegistry.d.ts +34 -0
  102. package/dist/types/src/reactiveTasks/ReactiveTaskRepository.d.ts +59 -0
  103. package/dist/types/src/reactiveTasks/ReactiveTaskRetryStrategy.d.ts +21 -0
  104. package/dist/types/src/reactiveTasks/ReactiveTaskTypes.d.ts +389 -0
  105. package/dist/types/src/reactiveTasks/ReactiveTaskWorker.d.ts +36 -0
  106. package/dist/types/src/reactiveTasks/compileWatchProjection.d.ts +12 -0
  107. package/dist/types/src/reactiveTasks/index.d.ts +82 -0
  108. package/dist/types/src/reactiveTasks/queryToExpression.d.ts +13 -0
  109. package/dist/types/src/reactiveTasks/validateTaskFilter.d.ts +10 -0
  110. package/dist/types/src/task-management/OperationalTaskController.d.ts +59 -0
  111. package/dist/types/src/task-management/index.d.ts +3 -0
  112. package/dist/types/src/task-management/serveDashboard.d.ts +12 -0
  113. package/dist/types/src/task-management/types.d.ts +95 -0
  114. package/dist/types/tools/check-db-connection.d.ts +2 -0
  115. package/dist/types/tools/clean-testing-databases.d.ts +1 -0
  116. package/dist/types/tools/prepare-republish.d.ts +2 -0
  117. package/dist/types/tools/test-matrix-local.d.ts +1 -0
  118. package/dist/types/tools/testingDatabase.d.ts +2 -0
  119. package/docs/.vitepress/cache/deps/_metadata.json +31 -0
  120. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +12824 -0
  121. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +7 -0
  122. package/docs/.vitepress/cache/deps/package.json +3 -0
  123. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
  124. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  125. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +9731 -0
  126. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  127. package/docs/.vitepress/cache/deps/vue.js +347 -0
  128. package/docs/.vitepress/cache/deps/vue.js.map +7 -0
  129. package/docs/.vitepress/config.mts +50 -0
  130. package/docs/.vitepress/theme/index.ts +4 -0
  131. package/docs/.vitepress/theme/style.css +21 -0
  132. package/docs/assets/dashboard.png +0 -0
  133. package/docs/cron-tasks.md +172 -0
  134. package/docs/dashboard.md +117 -0
  135. package/docs/getters.md +31 -0
  136. package/docs/getting-started.md +186 -0
  137. package/docs/index.md +32 -0
  138. package/docs/initialization.md +59 -0
  139. package/docs/process-in-batches.md +73 -0
  140. package/docs/public/logo.png +0 -0
  141. package/docs/reactive-tasks.md +913 -0
  142. package/docs/with-lock.md +45 -0
  143. package/docs/with-transaction.md +65 -0
  144. package/grafana/reactive_tasks.json +765 -0
  145. package/package.json +131 -116
  146. package/dist/lib/OnError.js.map +0 -1
  147. package/dist/lib/OnInfo.js.map +0 -1
  148. package/dist/lib/createContinuousLock.js.map +0 -1
  149. package/dist/lib/cronTasks.js.map +0 -1
  150. package/dist/lib/getCollection.js.map +0 -1
  151. package/dist/lib/getMongoClient.js.map +0 -1
  152. package/dist/lib/index.js +0 -64
  153. package/dist/lib/index.js.map +0 -1
  154. package/dist/lib/initPromise.js +0 -17
  155. package/dist/lib/initPromise.js.map +0 -1
  156. package/dist/lib/withLock.js.map +0 -1
  157. package/dist/lib/withTransaction.js.map +0 -1
  158. package/dist/types/index.d.ts +0 -17
  159. /package/dist/types/{OnError.d.ts → src/OnError.d.ts} +0 -0
  160. /package/dist/types/{createContinuousLock.d.ts → src/createContinuousLock.d.ts} +0 -0
  161. /package/dist/types/{getCollection.d.ts → src/getCollection.d.ts} +0 -0
  162. /package/dist/types/{getMongoClient.d.ts → src/getMongoClient.d.ts} +0 -0
  163. /package/dist/types/{initPromise.d.ts → src/initPromise.d.ts} +0 -0
  164. /package/dist/types/{withLock.d.ts → src/withLock.d.ts} +0 -0
  165. /package/dist/types/{withTransaction.d.ts → src/withTransaction.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../../src/reactiveTasks/MetricsCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReactiveTaskManager = void 0;
4
+ const mongodb_1 = require("mongodb");
5
+ const processInBatches_1 = require("../processInBatches");
6
+ class ReactiveTaskManager {
7
+ constructor(registry) {
8
+ this.registry = registry;
9
+ }
10
+ async getTasks(query, pagination = {}) {
11
+ var _a, _b, _c, _d, _e, _f;
12
+ const groups = await this.resolveCollectionsAndQueries(query, 'getTasks');
13
+ const limit = (_a = pagination.limit) !== null && _a !== void 0 ? _a : 50;
14
+ const offset = (_b = pagination.skip) !== null && _b !== void 0 ? _b : 0;
15
+ const sortField = (_d = (_c = pagination.sort) === null || _c === void 0 ? void 0 : _c.field) !== null && _d !== void 0 ? _d : 'scheduledAt';
16
+ const sortDirection = (_f = (_e = pagination.sort) === null || _e === void 0 ? void 0 : _e.direction) !== null && _f !== void 0 ? _f : 1;
17
+ const sort = { [sortField]: sortDirection };
18
+ // Optimization: If only 1 group, use direct DB query (efficient)
19
+ if (groups.length === 1) {
20
+ const { collection, mongoQuery } = groups[0];
21
+ const [items, total] = await Promise.all([
22
+ collection.repository.findTasks(mongoQuery, { limit, skip: offset, sort }),
23
+ collection.repository.countTasks(mongoQuery),
24
+ ]);
25
+ return { items, total, limit, offset };
26
+ }
27
+ // Scatter-Gather for multiple collections
28
+ // 1. Fetch (limit + offset) from ALL collections (sorted)
29
+ // 2. Merge, Sort in Memory, Apply Limit/Offset
30
+ // NOTE: This is expensive for deep pagination (offset > 1000).
31
+ // For admin dashboard, this is acceptable.
32
+ const fetchLimit = limit + offset;
33
+ const results = await Promise.all(groups.map(async ({ collection, mongoQuery }) => {
34
+ const [items, total] = await Promise.all([
35
+ collection.repository.findTasks(mongoQuery, { limit: fetchLimit, sort }),
36
+ collection.repository.countTasks(mongoQuery),
37
+ ]);
38
+ return { items, total };
39
+ }));
40
+ const allItems = results.flatMap((r) => r.items);
41
+ const total = results.reduce((sum, r) => sum + r.total, 0);
42
+ // Sort in memory
43
+ allItems.sort((a, b) => {
44
+ const fieldA = a[sortField];
45
+ const fieldB = b[sortField];
46
+ // Normalize for comparison
47
+ const valA = fieldA instanceof Date ? fieldA.getTime() : fieldA;
48
+ const valB = fieldB instanceof Date ? fieldB.getTime() : fieldB;
49
+ if (valA === valB)
50
+ return 0;
51
+ if (valA === undefined || valA === null)
52
+ return 1;
53
+ if (valB === undefined || valB === null)
54
+ return -1;
55
+ // Use 'any' cast for comparison to handle potentially mixed but logically comparable types (e.g. string vs string, number vs number)
56
+ // without TypeScript complaining about disjoint union types.
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ if (valA < valB)
59
+ return sortDirection === 1 ? -1 : 1;
60
+ return sortDirection === 1 ? 1 : -1;
61
+ });
62
+ // Slice
63
+ const slicedItems = allItems.slice(offset, offset + limit);
64
+ return {
65
+ items: slicedItems,
66
+ total,
67
+ limit,
68
+ offset,
69
+ };
70
+ }
71
+ async countTasks(query) {
72
+ const groups = await this.resolveCollectionsAndQueries(query, 'countTasks');
73
+ const counts = await Promise.all(groups.map((g) => g.collection.repository.countTasks(g.mongoQuery)));
74
+ return counts.reduce((sum, c) => sum + c, 0);
75
+ }
76
+ async getAllTaskStats() {
77
+ const groups = await this.resolveCollectionsAndQueries({}, 'getAllTaskStats');
78
+ const results = await Promise.all(groups.map((g) => g.collection.repository.getStatistics(g.mongoQuery, {
79
+ includeStatusCounts: true,
80
+ includeErrorCount: true,
81
+ groupByTask: true,
82
+ })));
83
+ const taskStats = {};
84
+ for (const res of results) {
85
+ for (const s of res.statuses) {
86
+ const { task, status } = s._id;
87
+ if (!taskStats[task]) {
88
+ taskStats[task] = { statuses: [], errorCount: 0 };
89
+ }
90
+ taskStats[task].statuses.push({ _id: status, count: s.count });
91
+ }
92
+ // Extract per-task error counts from errorCounts array
93
+ if (res.errorCounts) {
94
+ for (const ec of res.errorCounts) {
95
+ const task = ec._id;
96
+ if (!taskStats[task]) {
97
+ taskStats[task] = { statuses: [], errorCount: 0 };
98
+ }
99
+ taskStats[task].errorCount = (taskStats[task].errorCount || 0) + ec.count;
100
+ }
101
+ }
102
+ }
103
+ return taskStats;
104
+ }
105
+ async getTaskStats(query) {
106
+ const groups = await this.resolveCollectionsAndQueries(query, 'getTaskStats');
107
+ const results = await Promise.all(groups.map((g) => g.collection.repository.getStatistics(g.mongoQuery, {
108
+ includeStatusCounts: true,
109
+ includeErrorCount: true,
110
+ groupByTask: false,
111
+ })));
112
+ const statusMap = new Map();
113
+ let errorCount = 0;
114
+ for (const res of results) {
115
+ errorCount += res.errorCount || 0;
116
+ for (const s of res.statuses) {
117
+ // When groupByTask is false, _id is string (status)
118
+ const status = s._id;
119
+ const current = statusMap.get(status) || 0;
120
+ statusMap.set(status, current + s.count);
121
+ }
122
+ }
123
+ const statuses = Array.from(statusMap.entries()).map(([id, count]) => ({ _id: id, count }));
124
+ return { statuses, errorCount };
125
+ }
126
+ async retryTasks(query) {
127
+ // Validation: Task name is required for retry if sourceDocFilter is complex
128
+ // to identify the source collection.
129
+ // If task name is NOT provided, we can only support simple status/id filters across ALL tasks?
130
+ // Actually, the registry stores tasks by name.
131
+ // If 'query.task' is missing, we might need to iterate ALL registered tasks?
132
+ // Let's support 'task' being optional:
133
+ // 1. If 'task' is provided: target that task's collection.
134
+ // 2. If 'task' is NOT provided: iterate all registered tasks and apply logic.
135
+ const taskNames = this.resolveTaskNames(query.task);
136
+ let totalModified = 0;
137
+ for (const taskName of taskNames) {
138
+ const entry = this.registry.getEntry(this.registry.getTask(taskName).sourceCollection.collectionName);
139
+ const taskQuery = Object.assign(Object.assign({}, query), { task: taskName }); // Ensure we filter by task name in the collection
140
+ // Handle Source Doc Filter
141
+ // If complex filter, use batching
142
+ if (this.isComplexSourceFilter(query.sourceDocFilter)) {
143
+ const sourceCollection = entry.sourceCollection;
144
+ await (0, processInBatches_1.processInBatches)(sourceCollection, [{ $match: query.sourceDocFilter }, { $project: { _id: 1 } }], (doc) => doc._id, async (batchIds) => {
145
+ const batchQuery = this.buildDirectQuery(Object.assign(Object.assign({}, taskQuery), { sourceDocFilter: undefined }));
146
+ batchQuery.sourceDocId = { $in: batchIds };
147
+ // Safety: ensure we are targeting the right task
148
+ batchQuery.task = taskName;
149
+ const res = await entry.repository.resetTasks(batchQuery);
150
+ totalModified += res.modifiedCount;
151
+ }, { batchSize: 1000 });
152
+ }
153
+ else {
154
+ // Direct Update
155
+ const mongoQuery = this.buildDirectQuery(taskQuery);
156
+ const res = await entry.repository.resetTasks(mongoQuery);
157
+ totalModified += res.modifiedCount;
158
+ }
159
+ }
160
+ return { modifiedCount: totalModified };
161
+ }
162
+ resolveTaskNames(taskInput) {
163
+ if (taskInput) {
164
+ const inputs = Array.isArray(taskInput) ? taskInput : [taskInput];
165
+ // Validate exist
166
+ for (const t of inputs) {
167
+ if (!this.registry.getTask(t)) {
168
+ throw new Error(`Task '${t}' not found in registry.`);
169
+ }
170
+ }
171
+ return inputs;
172
+ }
173
+ // If no task specified, target ALL tasks
174
+ return this.registry.getAllTasks().map((t) => t.task);
175
+ }
176
+ async resolveCollectionsAndQueries(query, operation) {
177
+ // Listing/Counting does NOT support complex sourceDocFilter currently
178
+ if (this.isComplexSourceFilter(query.sourceDocFilter)) {
179
+ throw new Error(`Operation '${operation}' does not support complex 'sourceDocFilter'. Use simple ID filter or 'retryTasks'.`);
180
+ }
181
+ const taskNames = this.resolveTaskNames(query.task);
182
+ if (taskNames.length === 0) {
183
+ return [];
184
+ }
185
+ // Group tasks by collection
186
+ const groups = new Map(); // collectionName -> taskNames[]
187
+ for (const tName of taskNames) {
188
+ const t = this.registry.getTask(tName);
189
+ const entry = this.registry.getEntry(t.sourceCollection.collectionName);
190
+ const colName = entry.tasksCollection.collectionName;
191
+ if (!groups.has(colName)) {
192
+ groups.set(colName, []);
193
+ }
194
+ groups.get(colName).push(tName);
195
+ }
196
+ const result = [];
197
+ for (const [, groupTaskNames] of groups) {
198
+ // We need to find the entry associated with this collection.
199
+ // Since we grouped by tasksCollection name, any task in the group points to the same entry (collection-wise).
200
+ const firstTaskInGroup = groupTaskNames[0];
201
+ const t = this.registry.getTask(firstTaskInGroup);
202
+ const entry = this.registry.getEntry(t.sourceCollection.collectionName);
203
+ // Build query for this group
204
+ // We must filter by the tasks in this group
205
+ const mongoQuery = this.buildDirectQuery(Object.assign(Object.assign({}, query), { task: groupTaskNames }));
206
+ result.push({ collection: entry, mongoQuery });
207
+ }
208
+ return result;
209
+ }
210
+ buildDirectQuery(query) {
211
+ const mongoQuery = {};
212
+ if (query.task) {
213
+ if (Array.isArray(query.task)) {
214
+ mongoQuery.task = { $in: query.task };
215
+ }
216
+ else {
217
+ mongoQuery.task = query.task;
218
+ }
219
+ }
220
+ if (query.status) {
221
+ if (Array.isArray(query.status)) {
222
+ mongoQuery.status = { $in: query.status };
223
+ }
224
+ else {
225
+ mongoQuery.status = query.status;
226
+ }
227
+ }
228
+ if (query.errorMessage) {
229
+ if (query.errorMessage instanceof RegExp) {
230
+ mongoQuery.lastError = query.errorMessage;
231
+ }
232
+ else {
233
+ mongoQuery.lastError = { $regex: query.errorMessage, $options: 'i' };
234
+ }
235
+ }
236
+ if (query.sourceDocFilter) {
237
+ // Should be simple filter here
238
+ if (query.sourceDocFilter._id) {
239
+ mongoQuery.sourceDocId = query.sourceDocFilter._id;
240
+ }
241
+ }
242
+ if (query._id) {
243
+ // Convert string _id to ObjectId if it's a valid 24-char hex string
244
+ const id = query._id;
245
+ if (typeof id === 'string' && /^[a-fA-F0-9]{24}$/.test(id)) {
246
+ mongoQuery._id = new mongodb_1.ObjectId(id);
247
+ }
248
+ else if (Array.isArray(id)) {
249
+ mongoQuery._id = {
250
+ $in: id.map((i) => (typeof i === 'string' && /^[a-fA-F0-9]{24}$/.test(i) ? new mongodb_1.ObjectId(i) : i)),
251
+ };
252
+ }
253
+ else {
254
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
255
+ mongoQuery._id = id;
256
+ }
257
+ }
258
+ if (query.hasError !== undefined) {
259
+ if (query.hasError) {
260
+ mongoQuery.lastError = { $exists: true, $ne: null };
261
+ }
262
+ else {
263
+ mongoQuery.lastError = { $exists: false };
264
+ }
265
+ }
266
+ return mongoQuery;
267
+ }
268
+ isComplexSourceFilter(filter) {
269
+ if (!filter)
270
+ return false;
271
+ // Simple if ONLY _id is present
272
+ const keys = Object.keys(filter);
273
+ if (keys.length === 0)
274
+ return false;
275
+ if (keys.length === 1 && keys[0] === '_id')
276
+ return false;
277
+ return true;
278
+ }
279
+ }
280
+ exports.ReactiveTaskManager = ReactiveTaskManager;
281
+ //# sourceMappingURL=ReactiveTaskManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactiveTaskManager.js","sourceRoot":"","sources":["../../../../src/reactiveTasks/ReactiveTaskManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReactiveTaskOps = void 0;
4
+ const _debug = require("debug");
5
+ const compileWatchProjection_1 = require("./compileWatchProjection");
6
+ const debug = _debug('mongodash:reactiveTasks:ops');
7
+ /**
8
+ * Helper class for generating and executing reactive task operations.
9
+ *
10
+ * Responsibilities:
11
+ * - Generates upsert operations for tasks based on source documents and task definitions.
12
+ * - Executes bulk write operations to the task collections.
13
+ * - Handles duplicate key errors gracefully (which can occur during reconciliation).
14
+ * - Manages debouncing logic by tracking the minimum debounce time for planned tasks.
15
+ */
16
+ class ReactiveTaskOps {
17
+ constructor(registry, onTaskPlanned) {
18
+ this.registry = registry;
19
+ this.onTaskPlanned = onTaskPlanned;
20
+ }
21
+ async executePlanningPipeline(collectionName, sourceDocIds, allowedTaskNames) {
22
+ debug(`executePlanningPipeline called for ${collectionName} with ${sourceDocIds.length} ids`);
23
+ const entry = this.registry.getEntry(collectionName);
24
+ if (!entry) {
25
+ debug(`No entry found for collection ${collectionName}`);
26
+ return;
27
+ }
28
+ const matchFilter = { _id: { $in: sourceDocIds } };
29
+ const pipeline = this.generatePlanningPipeline(entry, matchFilter, allowedTaskNames);
30
+ if (pipeline.length === 0) {
31
+ debug(`Pipeline empty for ${collectionName} (allowedTasks: ${allowedTaskNames ? Array.from(allowedTaskNames).join(',') : 'all'})`);
32
+ return;
33
+ }
34
+ debug(`Executing pipeline for ${collectionName} handling ${sourceDocIds.length} docs`);
35
+ try {
36
+ await entry.sourceCollection.aggregate(pipeline).toArray();
37
+ debug(`Pipeline executed successfully for ${collectionName}`);
38
+ // Notify that tasks have been planned
39
+ for (const task of entry.tasks.values()) {
40
+ if (allowedTaskNames && !allowedTaskNames.has(task.task))
41
+ continue;
42
+ this.onTaskPlanned(task.tasksCollection.collectionName, task.debounceMs);
43
+ }
44
+ }
45
+ catch (error) {
46
+ debug(`Error executing pipeline for ${collectionName}:`, error);
47
+ throw error;
48
+ }
49
+ }
50
+ generatePlanningPipeline(entry, matchFilter, allowedTaskNames) {
51
+ let tasks = Array.from(entry.tasks.values());
52
+ if (allowedTaskNames) {
53
+ tasks = tasks.filter((t) => allowedTaskNames.has(t.task));
54
+ }
55
+ if (tasks.length === 0) {
56
+ return [];
57
+ }
58
+ const pipeline = [
59
+ { $match: matchFilter || {} },
60
+ {
61
+ $project: {
62
+ _id: 0,
63
+ sourceDocId: '$_id',
64
+ tasks: {
65
+ $filter: {
66
+ input: tasks.map((task) => ({
67
+ task: task.task,
68
+ matches: task.filter || true,
69
+ watchedValues: (0, compileWatchProjection_1.compileWatchProjection)(task.watchProjection),
70
+ debounceMs: task.debounceMs,
71
+ resetRetriesOnDataChange: task.retryStrategy.policy.resetRetriesOnDataChange,
72
+ })),
73
+ as: 't',
74
+ cond: '$$t.matches',
75
+ },
76
+ },
77
+ },
78
+ },
79
+ { $unwind: '$tasks' },
80
+ {
81
+ $project: {
82
+ sourceDocId: 1,
83
+ task: '$tasks.task',
84
+ lastObservedValues: '$tasks.watchedValues',
85
+ status: { $literal: 'pending' },
86
+ attempts: { $literal: 0 },
87
+ createdAt: '$$NOW',
88
+ updatedAt: '$$NOW',
89
+ scheduledAt: { $add: ['$$NOW', '$tasks.debounceMs'] },
90
+ resetRetriesOnDataChange: { $ifNull: ['$tasks.resetRetriesOnDataChange', true] },
91
+ },
92
+ },
93
+ {
94
+ $merge: {
95
+ into: entry.tasksCollection.collectionName,
96
+ on: ['task', 'sourceDocId'],
97
+ whenNotMatched: 'insert',
98
+ whenMatched: [
99
+ {
100
+ $set: {
101
+ hasChanged: { $ne: ['$lastObservedValues', '$$new.lastObservedValues'] },
102
+ },
103
+ },
104
+ {
105
+ $set: {
106
+ sourceDocId: '$$new.sourceDocId',
107
+ task: '$$new.task',
108
+ lastObservedValues: '$$new.lastObservedValues',
109
+ updatedAt: {
110
+ $cond: { if: '$hasChanged', then: '$$new.updatedAt', else: '$updatedAt' },
111
+ },
112
+ firstErrorAt: {
113
+ $cond: {
114
+ if: '$hasChanged',
115
+ then: {
116
+ $cond: {
117
+ if: '$$new.resetRetriesOnDataChange',
118
+ then: null,
119
+ else: '$firstErrorAt',
120
+ },
121
+ },
122
+ else: '$firstErrorAt',
123
+ },
124
+ },
125
+ lastError: {
126
+ $cond: {
127
+ if: '$hasChanged',
128
+ then: {
129
+ $cond: {
130
+ if: '$$new.resetRetriesOnDataChange',
131
+ then: null,
132
+ else: '$lastError',
133
+ },
134
+ },
135
+ else: '$lastError',
136
+ },
137
+ },
138
+ status: {
139
+ $cond: {
140
+ if: '$hasChanged',
141
+ then: {
142
+ $cond: {
143
+ if: { $in: ['$status', ['processing', 'processing_dirty']] },
144
+ then: 'processing_dirty',
145
+ else: 'pending',
146
+ },
147
+ },
148
+ else: '$status',
149
+ },
150
+ },
151
+ scheduledAt: {
152
+ $cond: {
153
+ if: '$hasChanged',
154
+ then: {
155
+ $cond: {
156
+ if: { $in: ['$status', ['processing', 'processing_dirty']] },
157
+ then: '$scheduledAt',
158
+ else: '$$new.scheduledAt',
159
+ },
160
+ },
161
+ else: '$scheduledAt',
162
+ },
163
+ },
164
+ attempts: {
165
+ $cond: { if: '$hasChanged', then: 0, else: '$attempts' },
166
+ },
167
+ },
168
+ },
169
+ { $unset: 'hasChanged' },
170
+ ],
171
+ },
172
+ },
173
+ ];
174
+ return pipeline;
175
+ }
176
+ }
177
+ exports.ReactiveTaskOps = ReactiveTaskOps;
178
+ //# sourceMappingURL=ReactiveTaskOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactiveTaskOps.js","sourceRoot":"","sources":["../../../../src/reactiveTasks/ReactiveTaskOps.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAEhC,qEAAkE;AAGlE,MAAM,KAAK,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAa,eAAe;IACxB,YACY,QAA8B,EAC9B,aAAwE;QADxE,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,kBAAa,GAAb,aAAa,CAA2D;IACjF,CAAC;IAEG,KAAK,CAAC,uBAAuB,CAAC,cAAsB,EAAE,YAAuB,EAAE,gBAA8B;QAChH,KAAK,CAAC,sCAAsC,cAAc,SAAS,YAAY,CAAC,MAAM,MAAM,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,CAAC,iCAAiC,cAAc,EAAE,CAAC,CAAC;YACzD,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACrF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,sBAAsB,cAAc,mBAAmB,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YACnI,OAAO;QACX,CAAC;QAED,KAAK,CAAC,0BAA0B,cAAc,aAAa,YAAY,CAAC,MAAM,OAAO,CAAC,CAAC;QACvF,IAAI,CAAC;YACD,MAAM,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YAE3D,KAAK,CAAC,sCAAsC,cAAc,EAAE,CAAC,CAAC;YAE9D,sCAAsC;YACtC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtC,IAAI,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACnE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,KAAK,CAAC,gCAAgC,cAAc,GAAG,EAAE,KAAK,CAAC,CAAC;YAChE,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,wBAAwB,CAAC,KAAmD,EAAE,WAAsB,EAAE,gBAA8B;QACxI,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAE7C,IAAI,gBAAgB,EAAE,CAAC;YACnB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAe;YACzB,EAAE,MAAM,EAAE,WAAW,IAAI,EAAE,EAAE;YAC7B;gBACI,QAAQ,EAAE;oBACN,GAAG,EAAE,CAAC;oBACN,WAAW,EAAE,MAAM;oBACnB,KAAK,EAAE;wBACH,OAAO,EAAE;4BACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gCACxB,IAAI,EAAE,IAAI,CAAC,IAAI;gCACf,OAAO,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;gCAC5B,aAAa,EAAE,IAAA,+CAAsB,EAAC,IAAI,CAAC,eAAe,CAAC;gCAC3D,UAAU,EAAE,IAAI,CAAC,UAAU;gCAC3B,wBAAwB,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,wBAAwB;6BAC/E,CAAC,CAAC;4BACH,EAAE,EAAE,GAAG;4BACP,IAAI,EAAE,aAAa;yBACtB;qBACJ;iBACJ;aACJ;YACD,EAAE,OAAO,EAAE,QAAQ,EAAE;YACrB;gBACI,QAAQ,EAAE;oBACN,WAAW,EAAE,CAAC;oBACd,IAAI,EAAE,aAAa;oBACnB,kBAAkB,EAAE,sBAAsB;oBAC1C,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;oBAC/B,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;oBACzB,SAAS,EAAE,OAAO;oBAClB,SAAS,EAAE,OAAO;oBAClB,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE;oBACrD,wBAAwB,EAAE,EAAE,OAAO,EAAE,CAAC,iCAAiC,EAAE,IAAI,CAAC,EAAE;iBACnF;aACJ;YACD;gBACI,MAAM,EAAE;oBACJ,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,cAAc;oBAC1C,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;oBAC3B,cAAc,EAAE,QAAQ;oBACxB,WAAW,EAAE;wBACT;4BACI,IAAI,EAAE;gCACF,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,EAAE;6BAC3E;yBACJ;wBACD;4BACI,IAAI,EAAE;gCACF,WAAW,EAAE,mBAAmB;gCAChC,IAAI,EAAE,YAAY;gCAClB,kBAAkB,EAAE,0BAA0B;gCAC9C,SAAS,EAAE;oCACP,KAAK,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE;iCAC5E;gCACD,YAAY,EAAE;oCACV,KAAK,EAAE;wCACH,EAAE,EAAE,aAAa;wCACjB,IAAI,EAAE;4CACF,KAAK,EAAE;gDACH,EAAE,EAAE,gCAAgC;gDACpC,IAAI,EAAE,IAAI;gDACV,IAAI,EAAE,eAAe;6CACxB;yCACJ;wCACD,IAAI,EAAE,eAAe;qCACxB;iCACJ;gCACD,SAAS,EAAE;oCACP,KAAK,EAAE;wCACH,EAAE,EAAE,aAAa;wCACjB,IAAI,EAAE;4CACF,KAAK,EAAE;gDACH,EAAE,EAAE,gCAAgC;gDACpC,IAAI,EAAE,IAAI;gDACV,IAAI,EAAE,YAAY;6CACrB;yCACJ;wCACD,IAAI,EAAE,YAAY;qCACrB;iCACJ;gCACD,MAAM,EAAE;oCACJ,KAAK,EAAE;wCACH,EAAE,EAAE,aAAa;wCACjB,IAAI,EAAE;4CACF,KAAK,EAAE;gDACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,EAAE;gDAC5D,IAAI,EAAE,kBAAkB;gDACxB,IAAI,EAAE,SAAS;6CAClB;yCACJ;wCACD,IAAI,EAAE,SAAS;qCAClB;iCACJ;gCACD,WAAW,EAAE;oCACT,KAAK,EAAE;wCACH,EAAE,EAAE,aAAa;wCACjB,IAAI,EAAE;4CACF,KAAK,EAAE;gDACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,EAAE;gDAC5D,IAAI,EAAE,cAAc;gDACpB,IAAI,EAAE,mBAAmB;6CAC5B;yCACJ;wCACD,IAAI,EAAE,cAAc;qCACvB;iCACJ;gCACD,QAAQ,EAAE;oCACN,KAAK,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;iCAC3D;6BACJ;yBACJ;wBACD,EAAE,MAAM,EAAE,YAAY,EAAE;qBAC3B;iBACJ;aACJ;SACJ,CAAC;QAEF,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAxKD,0CAwKC"}