light-async-queue 1.0.1 → 2.0.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.
Files changed (60) hide show
  1. package/README.md +334 -40
  2. package/dist/src/constants.d.ts +68 -0
  3. package/dist/src/constants.d.ts.map +1 -0
  4. package/dist/src/constants.js +75 -0
  5. package/dist/src/constants.js.map +1 -0
  6. package/dist/src/dashboard/Dashboard.d.ts +70 -0
  7. package/dist/src/dashboard/Dashboard.d.ts.map +1 -0
  8. package/dist/src/dashboard/Dashboard.js +308 -0
  9. package/dist/src/dashboard/Dashboard.js.map +1 -0
  10. package/dist/src/dashboard/index.d.ts +3 -0
  11. package/dist/src/dashboard/index.d.ts.map +1 -0
  12. package/dist/src/dashboard/index.js +2 -0
  13. package/dist/src/dashboard/index.js.map +1 -0
  14. package/dist/src/index.d.ts +13 -1
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +11 -0
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/queue/Backoff.d.ts.map +1 -1
  19. package/dist/src/queue/Backoff.js +2 -1
  20. package/dist/src/queue/Backoff.js.map +1 -1
  21. package/dist/src/queue/Job.d.ts +35 -4
  22. package/dist/src/queue/Job.d.ts.map +1 -1
  23. package/dist/src/queue/Job.js +97 -12
  24. package/dist/src/queue/Job.js.map +1 -1
  25. package/dist/src/queue/Queue.d.ts +73 -3
  26. package/dist/src/queue/Queue.d.ts.map +1 -1
  27. package/dist/src/queue/Queue.js +359 -36
  28. package/dist/src/queue/Queue.js.map +1 -1
  29. package/dist/src/queue/Scheduler.d.ts.map +1 -1
  30. package/dist/src/queue/Scheduler.js +8 -1
  31. package/dist/src/queue/Scheduler.js.map +1 -1
  32. package/dist/src/storage/FileStore.d.ts.map +1 -1
  33. package/dist/src/storage/FileStore.js +4 -3
  34. package/dist/src/storage/FileStore.js.map +1 -1
  35. package/dist/src/storage/MemoryStore.d.ts.map +1 -1
  36. package/dist/src/storage/MemoryStore.js +2 -1
  37. package/dist/src/storage/MemoryStore.js.map +1 -1
  38. package/dist/src/types.d.ts +85 -10
  39. package/dist/src/types.d.ts.map +1 -1
  40. package/dist/src/types.js +4 -1
  41. package/dist/src/types.js.map +1 -1
  42. package/dist/src/utils/CronParser.d.ts +12 -0
  43. package/dist/src/utils/CronParser.d.ts.map +1 -0
  44. package/dist/src/utils/CronParser.js +28 -0
  45. package/dist/src/utils/CronParser.js.map +1 -0
  46. package/dist/src/utils/RateLimiter.d.ts +37 -0
  47. package/dist/src/utils/RateLimiter.d.ts.map +1 -0
  48. package/dist/src/utils/RateLimiter.js +68 -0
  49. package/dist/src/utils/RateLimiter.js.map +1 -0
  50. package/dist/src/utils/WebhookManager.d.ts +29 -0
  51. package/dist/src/utils/WebhookManager.d.ts.map +1 -0
  52. package/dist/src/utils/WebhookManager.js +82 -0
  53. package/dist/src/utils/WebhookManager.js.map +1 -0
  54. package/dist/src/worker/Worker.d.ts +2 -2
  55. package/dist/src/worker/Worker.d.ts.map +1 -1
  56. package/dist/src/worker/Worker.js +60 -38
  57. package/dist/src/worker/Worker.js.map +1 -1
  58. package/dist/src/worker/childProcessor.js +23 -7
  59. package/dist/src/worker/childProcessor.js.map +1 -1
  60. package/package.json +27 -5
@@ -1,14 +1,19 @@
1
- import { Job } from './Job.js';
2
- import { Backoff } from './Backoff.js';
3
- import { Scheduler } from './Scheduler.js';
4
- import { Worker } from '../worker/Worker.js';
5
- import { DeadLetterQueue } from '../dlq/DeadLetterQueue.js';
6
- import { MemoryStore } from '../storage/MemoryStore.js';
7
- import { FileStore } from '../storage/FileStore.js';
1
+ import { StorageType, JobStatus, QueueEventType, } from "../types.js";
2
+ import { Job } from "./Job.js";
3
+ import { Backoff } from "./Backoff.js";
4
+ import { Scheduler } from "./Scheduler.js";
5
+ import { Worker } from "../worker/Worker.js";
6
+ import { DeadLetterQueue } from "../dlq/DeadLetterQueue.js";
7
+ import { MemoryStore } from "../storage/MemoryStore.js";
8
+ import { FileStore } from "../storage/FileStore.js";
9
+ import { RateLimiter } from "../utils/RateLimiter.js";
10
+ import { WebhookManager } from "../utils/WebhookManager.js";
11
+ import { CronParser } from "../utils/CronParser.js";
12
+ import { EventEmitter } from "node:events";
8
13
  /**
9
14
  * Main Queue class - orchestrates job processing
10
15
  */
11
- export class Queue {
16
+ export class Queue extends EventEmitter {
12
17
  config;
13
18
  storage;
14
19
  scheduler;
@@ -16,20 +21,30 @@ export class Queue {
16
21
  backoff;
17
22
  processor;
18
23
  workers;
24
+ reservedWorkers;
19
25
  activeJobs;
26
+ completedJobIds;
27
+ repeatingJobs;
20
28
  isShuttingDown;
21
29
  isInitialized;
30
+ rateLimiter;
31
+ webhookManager;
32
+ stalledCheckInterval;
22
33
  constructor(config) {
34
+ super();
23
35
  this.config = config;
24
36
  this.processor = null;
25
37
  this.workers = [];
38
+ this.reservedWorkers = new Set();
26
39
  this.activeJobs = new Map();
40
+ this.completedJobIds = new Set();
41
+ this.repeatingJobs = new Map();
27
42
  this.isShuttingDown = false;
28
43
  this.isInitialized = false;
29
44
  // Initialize storage based on config
30
- if (config.storage === 'file') {
45
+ if (config.storage === StorageType.FILE) {
31
46
  if (!config.filePath) {
32
- throw new Error('filePath is required when storage is "file"');
47
+ throw new Error(`filePath is required when storage is "${StorageType.FILE}"`);
33
48
  }
34
49
  this.storage = new FileStore(config.filePath);
35
50
  }
@@ -40,10 +55,19 @@ export class Queue {
40
55
  this.scheduler = new Scheduler(this.storage);
41
56
  this.dlq = new DeadLetterQueue(this.storage);
42
57
  this.backoff = new Backoff(config.retry.backoff);
58
+ // Initialize rate limiter if configured
59
+ if (config.rateLimiter) {
60
+ this.rateLimiter = new RateLimiter(config.rateLimiter);
61
+ }
62
+ // Initialize webhook manager if configured
63
+ if (config.webhooks && config.webhooks.length > 0) {
64
+ this.webhookManager = new WebhookManager(config.webhooks);
65
+ }
43
66
  // Set up scheduler event handler
44
- this.scheduler.on('job-ready', (jobData) => {
45
- this.handleJobReady(jobData).catch(error => {
46
- console.error('[Queue] Error handling job:', error);
67
+ this.scheduler.on("job-ready", (jobData) => {
68
+ this.handleJobReady(jobData).catch((error) => {
69
+ console.error("[Queue] Error handling job:", error);
70
+ this.emit(QueueEventType.ERROR, error);
47
71
  });
48
72
  });
49
73
  // Set up graceful shutdown
@@ -58,6 +82,10 @@ export class Queue {
58
82
  }
59
83
  await this.storage.initialize();
60
84
  this.isInitialized = true;
85
+ // Start stalled job checker
86
+ this.startStalledChecker();
87
+ // Load completed job IDs for dependency tracking
88
+ await this.loadCompletedJobIds();
61
89
  }
62
90
  /**
63
91
  * Set the job processor function
@@ -68,15 +96,28 @@ export class Queue {
68
96
  /**
69
97
  * Add a job to the queue
70
98
  */
71
- async add(payload) {
99
+ async add(payload, options = {}) {
72
100
  if (!this.isInitialized) {
73
101
  await this.initialize();
74
102
  }
75
103
  if (this.isShuttingDown) {
76
- throw new Error('Queue is shutting down, cannot accept new jobs');
104
+ throw new Error("Queue is shutting down, cannot accept new jobs");
77
105
  }
78
- const job = new Job(payload, this.config.retry.maxAttempts);
106
+ const job = new Job(payload, this.config.retry.maxAttempts, options);
79
107
  await this.storage.addJob(job.toData());
108
+ // Emit event based on job status
109
+ if (job.status === JobStatus.DELAYED) {
110
+ this.emit(QueueEventType.DELAYED, job.toData());
111
+ await this.sendWebhook(QueueEventType.DELAYED, { job: job.toData() });
112
+ }
113
+ else if (job.status === JobStatus.WAITING) {
114
+ this.emit(QueueEventType.WAITING, job.toData());
115
+ await this.sendWebhook(QueueEventType.WAITING, { job: job.toData() });
116
+ }
117
+ // Set up repeating job if configured
118
+ if (options.repeat) {
119
+ await this.scheduleRepeat(job);
120
+ }
80
121
  // Start scheduler if not already running
81
122
  if (!this.scheduler.getIsRunning()) {
82
123
  this.scheduler.start();
@@ -99,50 +140,85 @@ export class Queue {
99
140
  return;
100
141
  }
101
142
  if (!this.processor) {
102
- console.error('[Queue] No processor function set');
143
+ console.error("[Queue] No processor function set");
103
144
  return;
104
145
  }
105
146
  const job = Job.fromData(jobData);
147
+ // Check if dependencies are satisfied
148
+ if (!job.areDependenciesSatisfied(this.completedJobIds)) {
149
+ return; // Job is still waiting for dependencies
150
+ }
151
+ // Apply rate limiting if configured
152
+ if (this.rateLimiter) {
153
+ const allowed = await this.rateLimiter.consume();
154
+ if (!allowed) {
155
+ return; // Rate limit reached, will retry on next tick
156
+ }
157
+ }
106
158
  // Mark job as processing
107
159
  job.markProcessing();
108
160
  this.activeJobs.set(job.id, job);
109
161
  await this.storage.updateJob(job.toData());
162
+ // Emit active event
163
+ this.emit(QueueEventType.ACTIVE, job.toData());
164
+ await this.sendWebhook(QueueEventType.ACTIVE, { job: job.toData() });
110
165
  // Get or create a worker
111
166
  const worker = await this.getAvailableWorker();
112
167
  try {
168
+ // Create job with methods for processor
169
+ const jobWithMethods = this.createJobWithMethods(job);
113
170
  // Execute job in worker
114
- const result = await worker.execute(job.toData());
171
+ const result = await worker.execute(job.toData(), jobWithMethods);
115
172
  if (result.success) {
116
173
  // Job succeeded
117
- job.markCompleted();
174
+ job.markCompleted(result.result);
118
175
  await this.storage.updateJob(job.toData());
176
+ // Track completed job for dependency resolution
177
+ this.completedJobIds.add(job.id);
178
+ // Check for dependent jobs
179
+ await this.checkDependentJobs(job.id);
180
+ // Emit completed event
181
+ this.emit(QueueEventType.COMPLETED, job.toData(), result.result);
182
+ await this.sendWebhook(QueueEventType.COMPLETED, {
183
+ job: job.toData(),
184
+ result: result.result,
185
+ });
119
186
  }
120
187
  else {
121
188
  // Job failed
122
- await this.handleJobFailure(job, result.error || 'Unknown error');
189
+ const error = new Error(result.error || "Unknown error");
190
+ await this.handleJobFailure(job, error);
123
191
  }
124
192
  }
125
193
  catch (error) {
126
194
  // Worker execution error
127
- await this.handleJobFailure(job, error instanceof Error ? error.message : String(error));
195
+ const err = error instanceof Error ? error : new Error(String(error));
196
+ await this.handleJobFailure(job, err);
128
197
  }
129
198
  finally {
130
199
  // Remove from active jobs
131
200
  this.activeJobs.delete(job.id);
201
+ this.reservedWorkers.delete(worker);
132
202
  }
133
203
  }
134
204
  /**
135
205
  * Handle job failure with retry logic
136
206
  */
137
207
  async handleJobFailure(job, error) {
138
- console.error(`[Queue] Job ${job.id} failed:`, error);
208
+ console.error(`[Queue] Job ${job.id} failed:`, error.message);
139
209
  // Calculate next run time with backoff
140
210
  const nextRunAt = this.backoff.getNextRunAt(job.attempts + 1);
141
- job.markFailed(nextRunAt);
211
+ job.markFailed(error.message, nextRunAt);
142
212
  if (job.hasExceededMaxAttempts()) {
143
213
  // Move to dead letter queue
144
214
  console.log(`[Queue] Job ${job.id} exceeded max attempts, moving to DLQ`);
145
215
  await this.dlq.add(job);
216
+ // Emit failed event
217
+ this.emit(QueueEventType.FAILED, job.toData(), error);
218
+ await this.sendWebhook(QueueEventType.FAILED, {
219
+ job: job.toData(),
220
+ error,
221
+ });
146
222
  }
147
223
  else {
148
224
  // Update job for retry
@@ -155,26 +231,29 @@ export class Queue {
155
231
  async getAvailableWorker() {
156
232
  // Find an idle worker
157
233
  for (const worker of this.workers) {
158
- if (!worker.isBusy()) {
234
+ if (!worker.isBusy() && !this.reservedWorkers.has(worker)) {
235
+ this.reservedWorkers.add(worker);
159
236
  return worker;
160
237
  }
161
238
  }
162
239
  // Create a new worker if under concurrency limit
163
240
  if (this.workers.length < this.config.concurrency) {
164
241
  if (!this.processor) {
165
- throw new Error('Processor function not set');
242
+ throw new Error("Processor function not set");
166
243
  }
167
244
  const worker = new Worker(this.processor);
168
245
  await worker.initialize();
169
246
  this.workers.push(worker);
247
+ this.reservedWorkers.add(worker);
170
248
  return worker;
171
249
  }
172
250
  // Wait for a worker to become available
173
251
  return new Promise((resolve) => {
174
252
  const checkInterval = setInterval(() => {
175
253
  for (const worker of this.workers) {
176
- if (!worker.isBusy()) {
254
+ if (!worker.isBusy() && !this.reservedWorkers.has(worker)) {
177
255
  clearInterval(checkInterval);
256
+ this.reservedWorkers.add(worker);
178
257
  resolve(worker);
179
258
  return;
180
259
  }
@@ -182,6 +261,232 @@ export class Queue {
182
261
  }, 100);
183
262
  });
184
263
  }
264
+ /**
265
+ * Create a job with methods for use in processor
266
+ */
267
+ createJobWithMethods(job) {
268
+ return {
269
+ ...job.toData(),
270
+ updateProgress: async (progress) => {
271
+ job.updateProgress(progress);
272
+ await this.storage.updateJob(job.toData());
273
+ this.emit(QueueEventType.PROGRESS, job.toData(), progress);
274
+ await this.sendWebhook(QueueEventType.PROGRESS, { job: job.toData() });
275
+ },
276
+ log: (message) => {
277
+ console.log(`[Job ${job.id}] ${message}`);
278
+ },
279
+ };
280
+ }
281
+ /**
282
+ * Load completed job IDs for dependency tracking
283
+ */
284
+ async loadCompletedJobIds() {
285
+ const allJobs = await this.storage.getAllJobs();
286
+ this.completedJobIds.clear();
287
+ for (const job of allJobs) {
288
+ if (job.status === JobStatus.COMPLETED) {
289
+ this.completedJobIds.add(job.id);
290
+ }
291
+ }
292
+ }
293
+ /**
294
+ * Check and update waiting jobs whose dependencies are now satisfied
295
+ */
296
+ async checkDependentJobs(completedJobId) {
297
+ const allJobs = await this.storage.getAllJobs();
298
+ for (const jobData of allJobs) {
299
+ if (jobData.status === JobStatus.WAITING &&
300
+ jobData.dependsOn?.includes(completedJobId)) {
301
+ const job = Job.fromData(jobData);
302
+ if (job.areDependenciesSatisfied(this.completedJobIds)) {
303
+ // All dependencies satisfied, move to pending
304
+ job.status = JobStatus.PENDING;
305
+ await this.storage.updateJob(job.toData());
306
+ }
307
+ }
308
+ }
309
+ }
310
+ /**
311
+ * Schedule a repeating job
312
+ */
313
+ async scheduleRepeat(job) {
314
+ if (!job.repeatConfig) {
315
+ return;
316
+ }
317
+ const repeatConfig = job.repeatConfig;
318
+ // Check if we've hit the repeat limit
319
+ if (repeatConfig.limit && job.repeatCount >= repeatConfig.limit) {
320
+ return;
321
+ }
322
+ // Calculate next run time
323
+ let nextRunAt;
324
+ if (repeatConfig.pattern) {
325
+ // Cron pattern
326
+ const cronParser = new CronParser(repeatConfig.pattern);
327
+ nextRunAt = cronParser.getNextRunTime(Date.now());
328
+ }
329
+ else if (repeatConfig.every) {
330
+ // Repeat every X ms
331
+ nextRunAt = Date.now() + repeatConfig.every;
332
+ }
333
+ else {
334
+ return;
335
+ }
336
+ // Check date constraints
337
+ if (repeatConfig.startDate &&
338
+ nextRunAt < repeatConfig.startDate.getTime()) {
339
+ nextRunAt = repeatConfig.startDate.getTime();
340
+ }
341
+ if (repeatConfig.endDate && nextRunAt > repeatConfig.endDate.getTime()) {
342
+ return;
343
+ }
344
+ // Schedule the next instance
345
+ const delay = nextRunAt - Date.now();
346
+ const timeout = setTimeout(async () => {
347
+ const nextJob = job.createRepeatInstance();
348
+ nextJob.nextRunAt = nextRunAt;
349
+ await this.storage.addJob(nextJob.toData());
350
+ // Schedule the next repeat
351
+ await this.scheduleRepeat(nextJob);
352
+ }, delay);
353
+ this.repeatingJobs.set(job.id, timeout);
354
+ }
355
+ /**
356
+ * Start stalled job checker
357
+ */
358
+ startStalledChecker() {
359
+ const interval = this.config.stalledInterval || 30000;
360
+ this.stalledCheckInterval = setInterval(async () => {
361
+ await this.checkStalledJobs();
362
+ }, interval);
363
+ }
364
+ /**
365
+ * Check for stalled jobs and mark them
366
+ */
367
+ async checkStalledJobs() {
368
+ const stalledThreshold = this.config.stalledInterval || 30000;
369
+ const allJobs = await this.storage.getAllJobs();
370
+ for (const jobData of allJobs) {
371
+ if (jobData.status === JobStatus.PROCESSING) {
372
+ const job = Job.fromData(jobData);
373
+ if (job.isStalled(stalledThreshold)) {
374
+ console.warn(`[Queue] Job ${job.id} appears stalled`);
375
+ job.markStalled();
376
+ await this.storage.updateJob(job.toData());
377
+ // Emit stalled event
378
+ this.emit(QueueEventType.STALLED, job.toData());
379
+ await this.sendWebhook(QueueEventType.STALLED, { job: job.toData() });
380
+ }
381
+ }
382
+ }
383
+ }
384
+ /**
385
+ * Send webhook notification
386
+ */
387
+ async sendWebhook(event, data) {
388
+ if (this.webhookManager) {
389
+ try {
390
+ await this.webhookManager.sendEvent(event, data);
391
+ }
392
+ catch (error) {
393
+ console.error("[Queue] Webhook error:", error);
394
+ }
395
+ }
396
+ }
397
+ /**
398
+ * Get a specific job by ID
399
+ */
400
+ async getJob(jobId) {
401
+ if (!this.isInitialized) {
402
+ await this.initialize();
403
+ }
404
+ return this.storage.getJob(jobId);
405
+ }
406
+ /**
407
+ * Get all jobs from the queue
408
+ */
409
+ async getAllJobs() {
410
+ if (!this.isInitialized) {
411
+ await this.initialize();
412
+ }
413
+ return this.storage.getAllJobs();
414
+ }
415
+ /**
416
+ * Remove a specific job
417
+ */
418
+ async removeJob(jobId) {
419
+ if (!this.isInitialized) {
420
+ await this.initialize();
421
+ }
422
+ // Check if job is active
423
+ if (this.activeJobs.has(jobId)) {
424
+ return false; // Cannot remove active job
425
+ }
426
+ const job = await this.storage.getJob(jobId);
427
+ if (!job) {
428
+ return false;
429
+ }
430
+ // Remove from storage by updating status
431
+ job.status = JobStatus.FAILED;
432
+ await this.storage.updateJob(job);
433
+ return true;
434
+ }
435
+ /**
436
+ * Pause the queue (stop processing new jobs)
437
+ */
438
+ pause() {
439
+ this.scheduler.stop();
440
+ }
441
+ /**
442
+ * Resume the queue
443
+ */
444
+ resume() {
445
+ if (!this.isShuttingDown) {
446
+ this.scheduler.start();
447
+ }
448
+ }
449
+ /**
450
+ * Drain the queue - process all pending jobs
451
+ */
452
+ async drain() {
453
+ if (!this.isInitialized) {
454
+ await this.initialize();
455
+ }
456
+ // Wait for all pending jobs to be processed
457
+ while (true) {
458
+ const allJobs = await this.storage.getAllJobs();
459
+ const pendingJobs = allJobs.filter((j) => j.status === JobStatus.PENDING ||
460
+ j.status === JobStatus.WAITING ||
461
+ j.status === JobStatus.DELAYED);
462
+ if (pendingJobs.length === 0 && this.activeJobs.size === 0) {
463
+ break;
464
+ }
465
+ await new Promise((resolve) => setTimeout(resolve, 100));
466
+ }
467
+ this.emit(QueueEventType.DRAINED);
468
+ await this.sendWebhook(QueueEventType.DRAINED, {});
469
+ }
470
+ /**
471
+ * Clean completed jobs older than a certain age
472
+ */
473
+ async clean(maxAge = 24 * 60 * 60 * 1000) {
474
+ if (!this.isInitialized) {
475
+ await this.initialize();
476
+ }
477
+ const allJobs = await this.storage.getAllJobs();
478
+ const now = Date.now();
479
+ let cleaned = 0;
480
+ for (const job of allJobs) {
481
+ if (job.status === JobStatus.COMPLETED && now - job.updatedAt > maxAge) {
482
+ job.status = JobStatus.FAILED; // Mark for removal
483
+ await this.storage.updateJob(job);
484
+ this.completedJobIds.delete(job.id);
485
+ cleaned++;
486
+ }
487
+ }
488
+ return cleaned;
489
+ }
185
490
  /**
186
491
  * Get all failed jobs from DLQ
187
492
  */
@@ -206,6 +511,12 @@ export class Queue {
206
511
  await this.storage.addJob(job.toData());
207
512
  return true;
208
513
  }
514
+ /**
515
+ * Get queue statistics
516
+ */
517
+ getConcurrency() {
518
+ return this.config.concurrency;
519
+ }
209
520
  /**
210
521
  * Get queue statistics
211
522
  */
@@ -217,9 +528,12 @@ export class Queue {
217
528
  const failedJobs = await this.dlq.getAll();
218
529
  return {
219
530
  active: this.activeJobs.size,
220
- pending: allJobs.filter(j => j.status === 'pending').length,
531
+ waiting: allJobs.filter((j) => j.status === JobStatus.WAITING).length,
532
+ delayed: allJobs.filter((j) => j.status === JobStatus.DELAYED).length,
533
+ pending: allJobs.filter((j) => j.status === JobStatus.PENDING).length,
221
534
  failed: failedJobs.length,
222
- completed: allJobs.filter(j => j.status === 'completed').length,
535
+ completed: allJobs.filter((j) => j.status === JobStatus.COMPLETED).length,
536
+ stalled: allJobs.filter((j) => j.status === JobStatus.STALLED).length,
223
537
  };
224
538
  }
225
539
  /**
@@ -227,12 +541,12 @@ export class Queue {
227
541
  */
228
542
  setupGracefulShutdown() {
229
543
  const shutdown = async () => {
230
- console.log('[Queue] Graceful shutdown initiated...');
544
+ console.log("[Queue] Graceful shutdown initiated...");
231
545
  await this.shutdown();
232
546
  process.exit(0);
233
547
  };
234
- process.on('SIGINT', shutdown);
235
- process.on('SIGTERM', shutdown);
548
+ process.on("SIGINT", shutdown);
549
+ process.on("SIGTERM", shutdown);
236
550
  }
237
551
  /**
238
552
  * Gracefully shutdown the queue
@@ -244,18 +558,27 @@ export class Queue {
244
558
  this.isShuttingDown = true;
245
559
  // Stop accepting new jobs
246
560
  this.scheduler.stop();
561
+ // Stop stalled checker
562
+ if (this.stalledCheckInterval) {
563
+ clearInterval(this.stalledCheckInterval);
564
+ }
565
+ // Cancel all repeating jobs
566
+ for (const timeout of this.repeatingJobs.values()) {
567
+ clearTimeout(timeout);
568
+ }
569
+ this.repeatingJobs.clear();
247
570
  // Wait for active jobs to complete
248
571
  console.log(`[Queue] Waiting for ${this.activeJobs.size} active jobs to complete...`);
249
572
  while (this.activeJobs.size > 0) {
250
- await new Promise(resolve => setTimeout(resolve, 100));
573
+ await new Promise((resolve) => setTimeout(resolve, 100));
251
574
  }
252
575
  // Terminate all workers
253
- console.log('[Queue] Terminating workers...');
254
- await Promise.all(this.workers.map(worker => worker.terminate()));
576
+ console.log("[Queue] Terminating workers...");
577
+ await Promise.all(this.workers.map((worker) => worker.terminate()));
255
578
  // Close storage
256
- console.log('[Queue] Closing storage...');
579
+ console.log("[Queue] Closing storage...");
257
580
  await this.storage.close();
258
- console.log('[Queue] Shutdown complete');
581
+ console.log("[Queue] Shutdown complete");
259
582
  }
260
583
  }
261
584
  //# sourceMappingURL=Queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../src/queue/Queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,KAAK;IACR,MAAM,CAAc;IACpB,OAAO,CAAmB;IAC1B,SAAS,CAAY;IACrB,GAAG,CAAkB;IACrB,OAAO,CAAU;IACjB,SAAS,CAAsB;IAC/B,OAAO,CAAW;IAClB,UAAU,CAAmB;IAC7B,cAAc,CAAU;IACxB,aAAa,CAAU;IAE/B,YAAY,MAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAE3B,qCAAqC;QACrC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QACnC,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEjD,iCAAiC;QACjC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAgB,EAAE,EAAE;YAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACzC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,SAAuB;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,OAAgB;QACxB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAExC,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,OAAgB;QAC3C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,0CAA0C;QAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAElC,yBAAyB;QACzB,GAAG,CAAC,cAAc,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3C,yBAAyB;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE/C,IAAI,CAAC;YACH,wBAAwB;YACxB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAElD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,gBAAgB;gBAChB,GAAG,CAAC,aAAa,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,aAAa;gBACb,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yBAAyB;YACzB,MAAM,IAAI,CAAC,gBAAgB,CACzB,GAAG,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,0BAA0B;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,GAAQ,EAAE,KAAa;QACpD,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAEtD,uCAAuC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC9D,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE1B,IAAI,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC;YACjC,4BAA4B;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,EAAE,uCAAuC,CAAC,CAAC;YAC1E,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,sBAAsB;QACtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBACrB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,wCAAwC;QACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBACrC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;wBACrB,aAAa,CAAC,aAAa,CAAC,CAAC;wBAC7B,OAAO,CAAC,MAAM,CAAC,CAAC;wBAChB,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QAMZ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAE3C,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;YAC5B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;YAC3D,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;SAChE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,0BAA0B;QAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAEtB,mCAAmC;QACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,UAAU,CAAC,IAAI,6BAA6B,CAAC,CAAC;QAEtF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,wBAAwB;QACxB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAElE,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAE3B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../src/queue/Queue.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../../src/queue/Scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,OAAO,EAAE,gBAAgB;IAOrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAab;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;YACW,IAAI;IAclB;;OAEG;IACH,YAAY,IAAI,OAAO;CAGxB"}
1
+ {"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../../src/queue/Scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,OAAO,EAAE,gBAAgB;IAOrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAab;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;YACW,IAAI;IAsBlB;;OAEG;IACH,YAAY,IAAI,OAAO;CAGxB"}
@@ -47,7 +47,14 @@ export class Scheduler extends EventEmitter {
47
47
  }
48
48
  const now = Date.now();
49
49
  const pendingJobs = await this.storage.getPendingJobs(now);
50
- for (const job of pendingJobs) {
50
+ // Sort by priority (higher first) then by nextRunAt (earlier first)
51
+ const sortedJobs = pendingJobs.sort((a, b) => {
52
+ if (b.priority !== a.priority) {
53
+ return b.priority - a.priority;
54
+ }
55
+ return a.nextRunAt - b.nextRunAt;
56
+ });
57
+ for (const job of sortedJobs) {
51
58
  // Emit job-ready event for each pending job
52
59
  this.emit('job-ready', job);
53
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../../src/queue/Scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,YAAY;IACjC,OAAO,CAAmB;IAC1B,QAAQ,CAAwB;IAChC,SAAS,CAAU;IACV,YAAY,GAAW,GAAG,CAAC,CAAC,QAAQ;IAErD,YAAY,OAAyB;QACnC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE3D,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,4CAA4C;YAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"Scheduler.js","sourceRoot":"","sources":["../../../src/queue/Scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,YAAY;IACjC,OAAO,CAAmB;IAC1B,QAAQ,CAAwB;IAChC,SAAS,CAAU;IACV,YAAY,GAAW,GAAG,CAAC,CAAC,QAAQ;IAErD,YAAY,OAAyB;QACnC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE3D,oEAAoE;QACpE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;YACjC,CAAC;YACD,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,4CAA4C;YAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"FileStore.d.ts","sourceRoot":"","sources":["../../../src/storage/FileStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKxD;;;GAGG;AACH,qBAAa,SAAU,YAAW,gBAAgB;IAChD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAAqB;gBAE/B,QAAQ,EAAE,MAAM;IAS5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;YACW,eAAe;IAS7B;;OAEG;YACW,gBAAgB;IAyC9B;;;;;OAKG;YACW,oBAAoB;IAwBlC;;OAEG;YACW,cAAc;IAU5B;;OAEG;YACW,WAAW;IAkBzB;;OAEG;YACW,WAAW;IAkBnB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAa/C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAK3C,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIhC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C,aAAa,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAInC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB7B"}
1
+ {"version":3,"file":"FileStore.d.ts","sourceRoot":"","sources":["../../../src/storage/FileStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAa,MAAM,aAAa,CAAC;AAKnE;;;GAGG;AACH,qBAAa,SAAU,YAAW,gBAAgB;IAChD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAAqB;gBAE/B,QAAQ,EAAE,MAAM;IAS5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;YACW,eAAe;IAS7B;;OAEG;YACW,gBAAgB;IAyC9B;;;;;OAKG;YACW,oBAAoB;IAwBlC;;OAEG;YACW,cAAc;IAU5B;;OAEG;YACW,WAAW;IAkBzB;;OAEG;YACW,WAAW;IAkBnB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAa/C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAK3C,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIhC,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C,aAAa,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAInC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB7B"}