bullmq 2.3.2 → 3.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 (97) hide show
  1. package/dist/cjs/classes/backoffs.d.ts +3 -6
  2. package/dist/cjs/classes/backoffs.js +8 -8
  3. package/dist/cjs/classes/backoffs.js.map +1 -1
  4. package/dist/cjs/classes/flow-producer.js +18 -2
  5. package/dist/cjs/classes/flow-producer.js.map +1 -1
  6. package/dist/cjs/classes/job.d.ts +3 -3
  7. package/dist/cjs/classes/job.js +1 -1
  8. package/dist/cjs/classes/job.js.map +1 -1
  9. package/dist/cjs/classes/queue-base.js +1 -1
  10. package/dist/cjs/classes/queue-base.js.map +1 -1
  11. package/dist/cjs/classes/queue.d.ts +8 -6
  12. package/dist/cjs/classes/queue.js +10 -9
  13. package/dist/cjs/classes/queue.js.map +1 -1
  14. package/dist/cjs/classes/repeat.d.ts +0 -1
  15. package/dist/cjs/classes/repeat.js +4 -5
  16. package/dist/cjs/classes/repeat.js.map +1 -1
  17. package/dist/cjs/classes/scripts.d.ts +4 -4
  18. package/dist/cjs/classes/scripts.js +9 -16
  19. package/dist/cjs/classes/scripts.js.map +1 -1
  20. package/dist/cjs/classes/worker.d.ts +12 -3
  21. package/dist/cjs/classes/worker.js +50 -34
  22. package/dist/cjs/classes/worker.js.map +1 -1
  23. package/dist/cjs/commands/includes/getRateLimitTTL.lua +13 -0
  24. package/dist/cjs/commands/includes/moveJobFromWaitToActive.lua +15 -34
  25. package/dist/cjs/commands/includes/promoteDelayedJobs.lua +0 -6
  26. package/dist/cjs/commands/moveToActive-9.lua +11 -2
  27. package/dist/cjs/commands/moveToFinished-12.lua +8 -1
  28. package/dist/cjs/commands/promote-6.lua +2 -10
  29. package/dist/cjs/interfaces/advanced-options.d.ts +4 -4
  30. package/dist/cjs/interfaces/base-job-options.d.ts +0 -6
  31. package/dist/cjs/interfaces/queue-options.d.ts +0 -10
  32. package/dist/cjs/interfaces/rate-limiter-options.d.ts +0 -18
  33. package/dist/cjs/interfaces/repeat-options.d.ts +1 -6
  34. package/dist/cjs/scripts/moveToActive-9.js +35 -36
  35. package/dist/cjs/scripts/moveToActive-9.js.map +1 -1
  36. package/dist/cjs/scripts/moveToFinished-12.js +33 -36
  37. package/dist/cjs/scripts/moveToFinished-12.js.map +1 -1
  38. package/dist/cjs/scripts/promote-6.js +15 -9
  39. package/dist/cjs/scripts/promote-6.js.map +1 -1
  40. package/dist/cjs/types/backoff-strategy.d.ts +2 -0
  41. package/dist/cjs/types/backoff-strategy.js +3 -0
  42. package/dist/cjs/types/backoff-strategy.js.map +1 -0
  43. package/dist/cjs/types/index.d.ts +2 -1
  44. package/dist/cjs/types/index.js +2 -1
  45. package/dist/cjs/types/index.js.map +1 -1
  46. package/dist/cjs/utils.d.ts +1 -3
  47. package/dist/cjs/utils.js +1 -13
  48. package/dist/cjs/utils.js.map +1 -1
  49. package/dist/esm/classes/backoffs.d.ts +3 -6
  50. package/dist/esm/classes/backoffs.js +8 -8
  51. package/dist/esm/classes/backoffs.js.map +1 -1
  52. package/dist/esm/classes/flow-producer.js +19 -3
  53. package/dist/esm/classes/flow-producer.js.map +1 -1
  54. package/dist/esm/classes/job.d.ts +3 -3
  55. package/dist/esm/classes/job.js +1 -1
  56. package/dist/esm/classes/job.js.map +1 -1
  57. package/dist/esm/classes/queue-base.js +1 -1
  58. package/dist/esm/classes/queue-base.js.map +1 -1
  59. package/dist/esm/classes/queue.d.ts +8 -6
  60. package/dist/esm/classes/queue.js +11 -10
  61. package/dist/esm/classes/queue.js.map +1 -1
  62. package/dist/esm/classes/repeat.d.ts +0 -1
  63. package/dist/esm/classes/repeat.js +4 -5
  64. package/dist/esm/classes/repeat.js.map +1 -1
  65. package/dist/esm/classes/scripts.d.ts +4 -4
  66. package/dist/esm/classes/scripts.js +7 -14
  67. package/dist/esm/classes/scripts.js.map +1 -1
  68. package/dist/esm/classes/worker.d.ts +12 -3
  69. package/dist/esm/classes/worker.js +50 -34
  70. package/dist/esm/classes/worker.js.map +1 -1
  71. package/dist/esm/commands/includes/getRateLimitTTL.lua +13 -0
  72. package/dist/esm/commands/includes/moveJobFromWaitToActive.lua +15 -34
  73. package/dist/esm/commands/includes/promoteDelayedJobs.lua +0 -6
  74. package/dist/esm/commands/moveToActive-9.lua +11 -2
  75. package/dist/esm/commands/moveToFinished-12.lua +8 -1
  76. package/dist/esm/commands/promote-6.lua +2 -10
  77. package/dist/esm/interfaces/advanced-options.d.ts +4 -4
  78. package/dist/esm/interfaces/base-job-options.d.ts +0 -6
  79. package/dist/esm/interfaces/queue-options.d.ts +0 -10
  80. package/dist/esm/interfaces/rate-limiter-options.d.ts +0 -18
  81. package/dist/esm/interfaces/repeat-options.d.ts +1 -6
  82. package/dist/esm/scripts/moveToActive-9.js +35 -36
  83. package/dist/esm/scripts/moveToActive-9.js.map +1 -1
  84. package/dist/esm/scripts/moveToFinished-12.js +33 -36
  85. package/dist/esm/scripts/moveToFinished-12.js.map +1 -1
  86. package/dist/esm/scripts/promote-6.js +15 -9
  87. package/dist/esm/scripts/promote-6.js.map +1 -1
  88. package/dist/esm/types/backoff-strategy.d.ts +2 -0
  89. package/dist/esm/types/backoff-strategy.js +2 -0
  90. package/dist/esm/types/backoff-strategy.js.map +1 -0
  91. package/dist/esm/types/index.d.ts +2 -1
  92. package/dist/esm/types/index.js +2 -1
  93. package/dist/esm/types/index.js.map +1 -1
  94. package/dist/esm/utils.d.ts +1 -3
  95. package/dist/esm/utils.js +0 -11
  96. package/dist/esm/utils.js.map +1 -1
  97. package/package.json +1 -1
@@ -9,6 +9,7 @@ import { Job } from './job';
9
9
  import { RedisConnection } from './redis-connection';
10
10
  import sandbox from './sandbox';
11
11
  import { TimerManager } from './timer-manager';
12
+ const RATE_LIMIT_ERROR = 'bullmq:rateLimitExceeded';
12
13
  /**
13
14
  *
14
15
  * This class represents a worker that is able to process jobs from the queue.
@@ -19,9 +20,11 @@ import { TimerManager } from './timer-manager';
19
20
  export class Worker extends QueueBase {
20
21
  constructor(name, processor, opts = {}, Connection) {
21
22
  super(name, Object.assign(Object.assign({}, opts), { sharedConnection: isRedisInstance(opts.connection), blockingConnection: true }), Connection);
23
+ this.drained = false;
22
24
  this.waiting = false;
23
25
  this.running = false;
24
26
  this.blockTimeout = 0;
27
+ this.limitUntil = 0;
25
28
  if (this.opts.stalledInterval <= 0) {
26
29
  throw new Error('stalledInterval must be greater than 0');
27
30
  }
@@ -62,6 +65,9 @@ export class Worker extends QueueBase {
62
65
  }
63
66
  }
64
67
  }
68
+ static RateLimitError() {
69
+ return new Error(RATE_LIMIT_ERROR);
70
+ }
65
71
  emit(event, ...args) {
66
72
  return super.emit(event, ...args);
67
73
  }
@@ -124,11 +130,12 @@ export class Worker extends QueueBase {
124
130
  }
125
131
  }
126
132
  this.runStalledJobsCheck();
127
- const processing = (this.processing = new Map());
133
+ const processing = (this.processing = new Set());
134
+ const token = v4();
128
135
  while (!this.closing) {
129
- if (processing.size < this.opts.concurrency) {
130
- const token = v4();
131
- processing.set(this.retryIfFailed(() => this.getNextJob(token), this.opts.runRetryDelay), token);
136
+ if (processing.size < this.opts.concurrency &&
137
+ (!this.limitUntil || processing.size == 0)) {
138
+ processing.add(this.retryIfFailed(() => this.getNextJob(token), this.opts.runRetryDelay));
132
139
  }
133
140
  /*
134
141
  * Get the first promise that completes
@@ -136,12 +143,10 @@ export class Worker extends QueueBase {
136
143
  const promises = [...processing.keys()];
137
144
  const completedIdx = await Promise.race(promises.map((p, idx) => p.then(() => idx)));
138
145
  const completed = promises[completedIdx];
139
- const token = processing.get(completed);
140
146
  processing.delete(completed);
141
147
  const job = await completed;
142
148
  if (job) {
143
- // reuse same token if next job is available to process
144
- processing.set(this.retryIfFailed(() => this.processJob(job, token, () => processing.size <= this.opts.concurrency), this.opts.runRetryDelay), token);
149
+ processing.add(this.retryIfFailed(() => this.processJob(job, token), this.opts.runRetryDelay));
145
150
  }
146
151
  }
147
152
  this.running = false;
@@ -177,7 +182,7 @@ export class Worker extends QueueBase {
177
182
  if (this.closing) {
178
183
  return;
179
184
  }
180
- if (this.drained && block) {
185
+ if (this.drained && block && !this.limitUntil) {
181
186
  try {
182
187
  const jobId = await this.waitForJob();
183
188
  return this.moveToActive(token, jobId);
@@ -191,12 +196,24 @@ export class Worker extends QueueBase {
191
196
  }
192
197
  }
193
198
  else {
199
+ if (this.limitUntil) {
200
+ // TODO: We need to be able to break this delay when we are closing the worker.
201
+ await delay(this.limitUntil);
202
+ }
194
203
  return this.moveToActive(token);
195
204
  }
196
205
  }
206
+ /**
207
+ * Overrides the rate limit to be active for the next jobs.
208
+ *
209
+ * @param expireTimeMs expire time in ms of this rate limit.
210
+ */
211
+ async rateLimit(expireTimeMs) {
212
+ await this.client.then(client => client.set(this.keys.limiter, Number.MAX_SAFE_INTEGER, 'PX', expireTimeMs));
213
+ }
197
214
  async moveToActive(token, jobId) {
198
- const [jobData, id] = await this.scripts.moveToActive(token, jobId);
199
- return this.nextJobFromJobData(jobData, id);
215
+ const [jobData, id, limitUntil, delayUntil] = await this.scripts.moveToActive(token, jobId);
216
+ return this.nextJobFromJobData(jobData, id, limitUntil, delayUntil);
200
217
  }
201
218
  async waitForJob() {
202
219
  const client = await this.blockingConnection.client;
@@ -235,26 +252,17 @@ export class Worker extends QueueBase {
235
252
  async delay() {
236
253
  await delay(DELAY_TIME_1);
237
254
  }
238
- async nextJobFromJobData(jobData, jobId) {
239
- var _a, _b;
240
- // NOTE: This is not really optimal in all cases since a new job would could arrive at the wait
241
- // list and this worker will not start processing it directly.
242
- // Best would be to emit drain and block for rateKeyExpirationTime
243
- if (typeof jobData === 'number') {
255
+ async nextJobFromJobData(jobData, jobId, limitUntil, delayUntil) {
256
+ if (!jobData) {
244
257
  if (!this.drained) {
245
258
  this.emit('drained');
246
259
  this.drained = true;
247
- }
248
- // workerDelay left for backwards compatibility although not recommended to use.
249
- if ((_b = (_a = this.opts) === null || _a === void 0 ? void 0 : _a.limiter) === null || _b === void 0 ? void 0 : _b.workerDelay) {
250
- const rateKeyExpirationTime = jobData;
251
- await delay(rateKeyExpirationTime);
252
- }
253
- else {
254
- this.blockTimeout = jobData;
260
+ this.blockTimeout = 0;
255
261
  }
256
262
  }
257
- else if (jobData) {
263
+ this.limitUntil = Math.max(limitUntil, 0) || 0;
264
+ this.blockTimeout = delayUntil;
265
+ if (jobData) {
258
266
  this.drained = false;
259
267
  const job = this.createJob(jobData, jobId);
260
268
  if (job.opts.repeat) {
@@ -263,13 +271,8 @@ export class Worker extends QueueBase {
263
271
  }
264
272
  return job;
265
273
  }
266
- else if (!this.drained) {
267
- this.blockTimeout = 0;
268
- this.emit('drained');
269
- this.drained = true;
270
- }
271
274
  }
272
- async processJob(job, token, fetchNextCallback = () => true) {
275
+ async processJob(job, token) {
273
276
  if (!job || this.closing || this.paused) {
274
277
  return;
275
278
  }
@@ -307,15 +310,19 @@ export class Worker extends QueueBase {
307
310
  // end copy-paste from Bull3
308
311
  const handleCompleted = async (result) => {
309
312
  if (!this.connection.closing) {
310
- const completed = await job.moveToCompleted(result, token, fetchNextCallback() && !(this.closing || this.paused));
313
+ const completed = await job.moveToCompleted(result, token, !(this.closing || this.paused));
311
314
  this.emit('completed', job, result, 'active');
312
- const [jobData, jobId] = completed || [];
313
- return this.nextJobFromJobData(jobData, jobId);
315
+ const [jobData, jobId, limitUntil, delayUntil] = completed || [];
316
+ return this.nextJobFromJobData(jobData, jobId, limitUntil, delayUntil);
314
317
  }
315
318
  };
316
319
  const handleFailed = async (err) => {
317
320
  if (!this.connection.closing) {
318
321
  try {
322
+ if (err.message == RATE_LIMIT_ERROR) {
323
+ this.limitUntil = await this.moveLimitedBackToWait(job);
324
+ return;
325
+ }
319
326
  await job.moveToFailed(err, token);
320
327
  this.emit('failed', job, err, 'active');
321
328
  }
@@ -493,5 +500,14 @@ export class Worker extends QueueBase {
493
500
  notifyFailedJobs(failedJobs) {
494
501
  failedJobs.forEach((job) => this.emit('failed', job, new Error('job stalled more than allowable limit'), 'active'));
495
502
  }
503
+ async moveLimitedBackToWait(job) {
504
+ const multi = (await this.client).multi();
505
+ multi.pttl(this.keys.limiter);
506
+ multi.lrem(this.keys.active, 1, job.id);
507
+ multi.rpush(this.keys.wait, job.id);
508
+ multi.del(`${this.toKey(job.id)}:lock`);
509
+ const [[err, limitUntil]] = await multi.exec();
510
+ return limitUntil;
511
+ }
496
512
  }
497
513
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/classes/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAS1B,OAAO,EACL,uBAAuB,EACvB,KAAK,EACL,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAyG/C;;;;;;GAMG;AACH,MAAM,OAAO,MAIX,SAAQ,SAAS;IAuBjB,YACE,IAAY,EACZ,SAA8D,EAC9D,OAAsB,EAAE,EACxB,UAAmC;QAEnC,KAAK,CACH,IAAI,kCAEC,IAAI,KACP,gBAAgB,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAClD,kBAAkB,EAAE,IAAI,KAE1B,UAAU,CACX,CAAC;QAhCI,YAAO,GAAG,KAAK,CAAC;QAChB,YAAO,GAAG,KAAK,CAAC;QAChB,iBAAY,GAAG,CAAC,CAAC;QAgCvB,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC3D;QAED,IAAI,CAAC,IAAI,mBACP,UAAU,EAAE,CAAC,EACb,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,KAAK,EACnB,eAAe,EAAE,CAAC,EAClB,eAAe,EAAE,KAAK,EACtB,OAAO,EAAE,IAAI,EACb,aAAa,EAAE,KAAK,IACjB,IAAI,CAAC,IAAI,CACb,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,aAAa;YACrB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAExD,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QAEf,IAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,CAC3C,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B,CAAC,CAAS,IAAI,CAAC,UAAW,CAAC,SAAS,EAAE;YACtC,CAAC,CAAC,IAAI,CAAC,UAAU,CACpB,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAExE,IAAI,SAAS,EAAE;YACb,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;gBACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;aAC5B;iBAAM;gBACL,YAAY;gBACZ,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC3D,MAAM,aAAa,GACjB,SAAS;oBACT,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAEtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;oBACjC,MAAM,IAAI,KAAK,CAAC,QAAQ,aAAa,iBAAiB,CAAC,CAAC;iBACzD;gBAED,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBACrD,IAAI;oBACF,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,iCAAiC;iBAC3D;gBAAC,OAAO,CAAC,EAAE;oBACV,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;oBACpE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;iBACzB;gBAED,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;gBAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CACtB,SAAS,EACT,IAAI,CAAC,SAAS,CACf,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACd;YACD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;YAEvC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACrB,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;aACtD;SACF;IACH,CAAC;IAED,IAAI,CACF,KAAQ,EACR,GAAG,IAAmE;QAEtE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CACD,SAAY,EACZ,QAA2D;QAE3D,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CACA,KAAQ,EACR,QAA2D;QAE3D,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,KAAQ,EACR,QAA2D;QAE3D,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAES,cAAc,CACtB,GAAwC,EACxC,KAAa;QAEb,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAES,SAAS,CACjB,IAAgB,EAChB,KAAa;QAEb,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAIzC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,IAAI,WAAW,CAAC,WAAmB;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACtC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,OAAO,CAAS,KAAK,EAAC,OAAO,EAAC,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;gBACrC,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,kCAC9B,IAAI,CAAC,IAAI,KACZ,UAAU,IACV,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;aACxD;YACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG;QACP,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI;oBACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;oBAEpD,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,OAAO;qBACR;oBAED,IAAI;wBACF,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;qBAChE;oBAAC,OAAO,GAAG,EAAE;wBACZ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAS,GAAI,CAAC,OAAO,CAAC,EAAE;4BACvD,MAAM,GAAG,CAAC;yBACX;qBACF;oBAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAE3B,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;oBAEjD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;wBACpB,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;4BAC3C,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;4BAEnB,UAAU,CAAC,GAAG,CACZ,IAAI,CAAC,aAAa,CAChB,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,CACxB,EACD,KAAK,CACN,CAAC;yBACH;wBAED;;2BAEG;wBACH,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;wBACxC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,CACrC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAC5C,CAAC;wBAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;wBAEzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBACxC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;wBAE7B,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;wBAC5B,IAAI,GAAG,EAAE;4BACP,uDAAuD;4BACvD,UAAU,CAAC,GAAG,CACZ,IAAI,CAAC,aAAa,CAChB,GAAG,EAAE,CACH,IAAI,CAAC,UAAU,CACb,GAAG,EACH,KAAK,EACL,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAC/C,EACH,IAAI,CAAC,IAAI,CAAC,aAAa,CACxB,EACD,KAAK,CACN,CAAC;yBACH;qBACF;oBACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBACrB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;iBAC5C;gBAAC,OAAO,KAAK,EAAE;oBACd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBAErB,MAAM,KAAK,CAAC;iBACb;aACF;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;aAC/C;SACF;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;SACpD;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CACd,KAAa,EACb,EAAE,KAAK,GAAG,IAAI,KAAwB,EAAE;QAExC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,MAAM,CAAC;aACnB;iBAAM;gBACL,OAAO;aACR;SACF;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE;YACzB,IAAI;gBACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACtC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACxC;YAAC,OAAO,GAAG,EAAE;gBACZ,gFAAgF;gBAChF,IACE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;oBAC9B,oBAAoB,CAAQ,GAAG,CAAC,EAChC;oBACA,MAAM,GAAG,CAAC;iBACX;aACF;SACF;aAAM;YACL,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACjC;IACH,CAAC;IAES,KAAK,CAAC,YAAY,CAC1B,KAAa,EACb,KAAc;QAEd,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAEpD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO;SACR;QAED,IAAI,KAAK,CAAC;QACV,MAAM,IAAI,GAAiC,IAAI,CAAC,IAAI,CAAC;QAErD,IAAI;YACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CACzB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAC9D,IAAI,CACL,CAAC;YAEF,6DAA6D;YAC7D,YAAY;gBACV,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,OAAO;oBAC5C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;oBACzB,CAAC,CAAC,YAAY,CAAC;YAEnB,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,YAAY,CACb,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,oBAAoB,CAAQ,KAAK,CAAC,EAAE;gBACtC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAS,KAAK,CAAC,CAAC;aAClC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;aACpB;SACF;gBAAS;YACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACtB;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAES,KAAK,CAAC,kBAAkB,CAChC,OAA6B,EAC7B,KAAc;;QAEd,+FAA+F;QAC/F,8DAA8D;QAC9D,kEAAkE;QAClE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACrB;YAED,gFAAgF;YAChF,IAAI,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,OAAO,0CAAE,WAAW,EAAE;gBACnC,MAAM,qBAAqB,GAAG,OAAO,CAAC;gBACtC,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC;aACpC;iBAAM;gBACL,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;aAC7B;SACF;aAAM,IAAI,OAAO,EAAE;YAClB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3C,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;gBACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;gBACjC,MAAM,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;aACjE;YACD,OAAO,GAAG,CAAC;SACZ;aAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACxB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YAEtB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAAwC,EACxC,KAAa,EACb,iBAAiB,GAAG,GAAG,EAAE,CAAC,IAAI;QAE9B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;YACvC,OAAO;SACR;QAED,EAAE;QACF,kEAAkE;QAClE,uEAAuE;QACvE,qEAAqE;QACrE,uEAAuE;QACvE,iFAAiF;QACjF,wEAAwE;QACxE,EAAE;QACF,0EAA0E;QAC1E,2BAA2B;QAC3B,IAAI,WAAmB,CAAC;QACxB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CACtC,cAAc,EACd,IAAI,CAAC,IAAI,CAAC,aAAa,EACvB,KAAK,IAAI,EAAE;gBACT,IAAI;oBACF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACnE,IAAI,MAAM,IAAI,CAAC,YAAY,EAAE;wBAC3B,YAAY,EAAE,CAAC;qBAChB;oBACD,iFAAiF;iBAClF;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;oBAC9C,6DAA6D;iBAC9D;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,4BAA4B;QAE5B,MAAM,eAAe,GAAG,KAAK,EAAE,MAAkB,EAAE,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;gBAC5B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,eAAe,CACzC,MAAM,EACN,KAAK,EACL,iBAAiB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CACtD,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC9C,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,SAAS,IAAI,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAChD;QACH,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,KAAK,EAAE,GAAU,EAAE,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;gBAC5B,IAAI;oBACF,MAAM,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;iBACzC;gBAAC,OAAO,GAAG,EAAE;oBACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAS,GAAG,CAAC,CAAC;oBAC/B,qEAAqE;oBACrE,8DAA8D;oBAC9D,mCAAmC;iBACpC;aACF;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAEpC,YAAY,EAAE,CAAC;QACf,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;SACtC;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,YAAY,CAAQ,GAAG,CAAC,CAAC;SACjC;gBAAS;YACR,SAAS,EAAE,CAAC;SACb;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,eAAyB;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBAClC,IAAI,CAAC,YAAY,GAAG;oBAClB,OAAO,EAAE,CAAC;oBACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,yDAAyD;oBAC7E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC3B,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACrB;IACH,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACtB;IACH,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACN,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,KAAK,GAAG,KAAK;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB;QACD,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAEtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;YAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,OAAO,CAAC,OAAO,EAAE;iBACpB,OAAO,CAAC,GAAG,EAAE;gBACZ,OAAO,KAAK,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;;gBACZ,MAAM,gBAAgB,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,EAAE,CAAC;gBAEjD,IAAI,KAAK,EAAE;oBACT,oDAAoD;oBACpD,uDAAuD;oBACvD,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK,CAAC,GAAG,CAAC,EAAE;wBAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,mDAAmD;oBACzE,CAAC,CAAC,CAAC;oBACH,OAAO;iBACR;gBACD,OAAO,gBAAgB,CAAC;YAC1B,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;iBAClC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;iBACtE,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;iBACtC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,uBAAuB,CAAC,SAAS,GAAG,IAAI;QACpD,EAAE;QACF,sFAAsF;QACtF,EAAE;QACF,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;SAC5C;aAAM;YACL,SAAS,GAAG,KAAK,CAAC;SACnB;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;SAC3C;QAED,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,aAAa,CAAI,EAAoB,EAAE,SAAiB;QACpE,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,GAAG;YACD,IAAI;gBACF,OAAO,MAAM,EAAE,EAAE,CAAC;aACnB;YAAC,OAAO,GAAG,EAAE;gBACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAS,GAAG,CAAC,CAAC;gBAC/B,IAAI,SAAS,EAAE;oBACb,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;iBACxB;qBAAM;oBACL,OAAO;iBACR;aACF;SACF,QAAQ,KAAK,EAAE;IAClB,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,YAAY,CAAC,QAAQ,CACxB,kBAAkB,EAClB,IAAI,CAAC,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CACjC,CAAC;aACH;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAS,GAAG,CAAC,CAAC;SAChC;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAErE,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE1E,MAAM,WAAW,GAAmD,EAAE,CAAC;QACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,WAAW,CAAC,IAAI,CACd,GAAG,CAAC,MAAM,CAAiC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;YAEF,IAAI,CAAC,GAAG,SAAS,KAAK,CAAC,EAAE;gBACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;gBACtD,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;aACxB;SACF;QACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,CAAC;IAEO,gBAAgB,CAAC,UAAiD;QACxE,UAAU,CAAC,OAAO,CAAC,CAAC,GAAwC,EAAE,EAAE,CAC9D,IAAI,CAAC,IAAI,CACP,QAAQ,EACR,GAAG,EACH,IAAI,KAAK,CAAC,uCAAuC,CAAC,EAClD,QAAQ,CACT,CACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/classes/worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ local function getRateLimitTTL(opts, limiterKey)
2
+ local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
3
+ if maxJobs then
4
+ local jobCounter = tonumber(rcall("GET", limiterKey))
5
+ if jobCounter ~= nil and jobCounter >= maxJobs then
6
+ local pttl = rcall("PTTL", KEYS[6])
7
+ if pttl > 0 then
8
+ return pttl
9
+ end
10
+ end
11
+ end
12
+ return 0
13
+ end
@@ -20,49 +20,30 @@
20
20
  local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts)
21
21
  -- Check if we need to perform rate limiting.
22
22
  local maxJobs = tonumber(opts['limiter'] and opts['limiter']['max'])
23
+ local expireTime
23
24
 
24
25
  if(maxJobs) then
25
26
  local rateLimiterKey = keys[6];
27
+ local jobCounter = tonumber(rcall("INCR", rateLimiterKey))
26
28
 
27
- local groupKey
28
- local groupKeyOpt = opts['limiter'] and opts['limiter']['groupKey'] or ""
29
- if groupKeyOpt ~= "" then
30
- groupKey = string.match(jobId, "[^:]+$")
31
- if groupKey ~= jobId then
32
- rateLimiterKey = rateLimiterKey .. ":" .. groupKey
33
- end
29
+ if jobCounter == 1 then
30
+ local limiterDuration = opts['limiter'] and opts['limiter']['duration']
31
+ rcall("PEXPIRE", rateLimiterKey, limiterDuration)
34
32
  end
35
33
 
36
- local jobCounter
37
-
38
- if groupKey ~= nil then
39
- if rateLimiterKey ~= keys[6] then
40
- jobCounter = tonumber(rcall("INCR", rateLimiterKey))
41
- end
42
- else
43
- jobCounter = tonumber(rcall("INCR", rateLimiterKey))
44
- end
45
-
46
- local limiterDuration = opts['limiter'] and opts['limiter']['duration']
47
- -- check if rate limit hit
48
- if jobCounter ~= nil and jobCounter > maxJobs then
49
- local exceedingJobs = jobCounter - maxJobs
50
- local expireTime = tonumber(rcall("PTTL", rateLimiterKey))
51
- local delay = expireTime + ((exceedingJobs - 1) * limiterDuration) / maxJobs;
52
- local timestamp = delay + tonumber(processedOn)
53
-
54
- -- put job into delayed queue
55
- rcall("ZADD", keys[7], timestamp * 0x1000 + bit.band(jobCounter, 0xfff), jobId);
56
- rcall("XADD", keys[4], "*", "event", "delayed", "jobId", jobId, "delay", timestamp);
57
-
58
- -- remove from active queue
34
+ -- check if we passed rate limit, we need to remove the job and return expireTime
35
+ if jobCounter > maxJobs then
36
+ expireTime = rcall("PTTL", rateLimiterKey)
37
+
38
+ -- remove from active queue and add back to the wait list
59
39
  rcall("LREM", keys[2], 1, jobId)
40
+ rcall("RPUSH", keys[1], jobId)
60
41
 
61
42
  -- Return when we can process more jobs
62
- return expireTime
43
+ return {0, 0, expireTime}
63
44
  else
64
- if jobCounter == 1 then
65
- rcall("PEXPIRE", rateLimiterKey, limiterDuration)
45
+ if jobCounter == maxJobs then
46
+ expireTime = rcall("PTTL", rateLimiterKey)
66
47
  end
67
48
  end
68
49
  end
@@ -80,5 +61,5 @@ local function moveJobFromWaitToActive(keys, keyPrefix, jobId, processedOn, opts
80
61
  rcall("HSET", jobKey, "processedOn", processedOn)
81
62
  rcall("HINCRBY", jobKey, "attemptsMade", 1)
82
63
 
83
- return {rcall("HGETALL", jobKey), jobId} -- get job data
64
+ return {rcall("HGETALL", jobKey), jobId, expireTime} -- get job data
84
65
  end
@@ -40,10 +40,4 @@ local function promoteDelayedJobs(delayedKey, waitKey, priorityKey, pausedKey,
40
40
  rcall("HSET", prefix .. jobId, "delay", 0)
41
41
  end
42
42
  end
43
-
44
- local nextTimestamp = rcall("ZRANGE", delayedKey, 0, 0, "WITHSCORES")[2]
45
- if (nextTimestamp ~= nil) then
46
- nextTimestamp = nextTimestamp / 0x1000
47
- end
48
- return nextTimestamp
49
43
  end
@@ -38,15 +38,24 @@ local rcall = redis.call
38
38
  --- @include "includes/moveJobFromWaitToActive"
39
39
  --- @include "includes/getNextDelayedTimestamp"
40
40
  --- @include "includes/promoteDelayedJobs"
41
+ --- @include "includes/getRateLimitTTL"
41
42
 
42
43
  -- Check if there are delayed jobs that we can move to wait.
43
44
  promoteDelayedJobs(KEYS[7], KEYS[1], KEYS[3], KEYS[8], KEYS[9], KEYS[4], ARGV[1], ARGV[2])
44
45
 
46
+ local opts
45
47
  if (ARGV[3] ~= "") then
46
48
  jobId = ARGV[3]
47
49
  -- clean stalled key
48
50
  rcall("SREM", KEYS[5], jobId)
49
51
  else
52
+ -- Check if we are rate limited first.
53
+ opts = cmsgpack.unpack(ARGV[4])
54
+ local pttl = getRateLimitTTL(opts, KEYS[6])
55
+ if pttl > 0 then
56
+ return { 0, 0, pttl }
57
+ end
58
+
50
59
  -- no job ID, try non-blocking move from wait to active
51
60
  jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2])
52
61
  end
@@ -55,7 +64,7 @@ end
55
64
  if jobId == "0" then
56
65
  rcall("LREM", KEYS[2], 1, 0)
57
66
  elseif jobId then
58
- local opts = cmsgpack.unpack(ARGV[4])
67
+ opts = opts or cmsgpack.unpack(ARGV[4])
59
68
  -- this script is not really moving, it is preparing the job for processing
60
69
  return moveJobFromWaitToActive(KEYS, ARGV[1], jobId, ARGV[2], opts)
61
70
  end
@@ -63,5 +72,5 @@ end
63
72
  -- Return the timestamp for the next delayed job if any.
64
73
  local nextTimestamp = getNextDelayedTimestamp(KEYS[7])
65
74
  if (nextTimestamp ~= nil) then
66
- return nextTimestamp - tonumber(ARGV[2])
75
+ return { 0, 0, 0, nextTimestamp - tonumber(ARGV[2])}
67
76
  end
@@ -64,6 +64,7 @@ local rcall = redis.call
64
64
  --- @include "includes/removeJobsByMaxCount"
65
65
  --- @include "includes/trimEvents"
66
66
  --- @include "includes/updateParentDepsIfNeeded"
67
+ --- @include "includes/getRateLimitTTL"
67
68
 
68
69
  local jobIdKey = KEYS[10]
69
70
  if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
@@ -169,6 +170,12 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
169
170
  -- Check if there are delayed jobs that can be promoted
170
171
  promoteDelayedJobs(KEYS[7], KEYS[1], KEYS[3], KEYS[8], KEYS[11], KEYS[4], ARGV[8], timestamp)
171
172
 
173
+ -- Check if we are rate limited first.
174
+ local pttl = getRateLimitTTL(opts, KEYS[6])
175
+ if pttl > 0 then
176
+ return { 0, 0, pttl }
177
+ end
178
+
172
179
  jobId = rcall("RPOPLPUSH", KEYS[1], KEYS[2])
173
180
 
174
181
  if jobId == "0" then
@@ -182,7 +189,7 @@ if rcall("EXISTS", jobIdKey) == 1 then -- // Make sure job exists
182
189
  if (nextTimestamp ~= nil) then
183
190
  -- The result is guaranteed to be positive, since the
184
191
  -- ZRANGEBYSCORE command would have return a job otherwise.
185
- return nextTimestamp - timestamp
192
+ return {0, 0, 0, nextTimestamp - timestamp}
186
193
  end
187
194
  end
188
195
 
@@ -19,6 +19,7 @@ local rcall = redis.call;
19
19
  local jobId = ARGV[2]
20
20
 
21
21
  -- Includes
22
+ --- @include "includes/addJobWithPriority"
22
23
  --- @include "includes/getTargetQueueList"
23
24
 
24
25
  if rcall("ZREM", KEYS[1], jobId) == 1 then
@@ -36,16 +37,7 @@ if rcall("ZREM", KEYS[1], jobId) == 1 then
36
37
  rcall("LPUSH", target, jobId)
37
38
  else
38
39
  -- Priority add
39
- rcall("ZADD", KEYS[5], priority, jobId)
40
- local count = rcall("ZCOUNT", KEYS[5], 0, priority)
41
-
42
- local len = rcall("LLEN", target)
43
- local id = rcall("LINDEX", target, len - (count - 1))
44
- if id then
45
- rcall("LINSERT", target, "BEFORE", id, jobId)
46
- else
47
- rcall("RPUSH", target, jobId)
48
- end
40
+ addJobWithPriority(KEYS[5], priority, target, jobId)
49
41
  end
50
42
 
51
43
  -- Emit waiting event (wait..ing@token)
@@ -1,13 +1,13 @@
1
- import { RepeatStrategy } from '../types';
1
+ import { BackoffStrategy, RepeatStrategy } from '../types';
2
2
  export interface AdvancedRepeatOptions {
3
3
  /**
4
- * A set of custom cron strategies keyed by name.
4
+ * A custom cron strategy.
5
5
  */
6
6
  repeatStrategy?: RepeatStrategy;
7
7
  }
8
8
  export interface AdvancedOptions extends AdvancedRepeatOptions {
9
9
  /**
10
- * A set of custom backoff strategies keyed by name.
10
+ * A custom backoff strategy.
11
11
  */
12
- backoffStrategies?: {};
12
+ backoffStrategy?: BackoffStrategy;
13
13
  }
@@ -23,12 +23,6 @@ export interface DefaultJobOptions {
23
23
  * @defaultValue 0
24
24
  */
25
25
  attempts?: number;
26
- /**
27
- * Rate limiter key to use if rate limiter enabled.
28
- *
29
- * @see {@link https://docs.bullmq.io/guide/rate-limiting}
30
- */
31
- rateLimiterKey?: string;
32
26
  /**
33
27
  * Backoff setting for automatic retries if the job fails
34
28
  */
@@ -31,16 +31,6 @@ export interface QueueBaseOptions {
31
31
  */
32
32
  export interface QueueOptions extends QueueBaseOptions {
33
33
  defaultJobOptions?: DefaultJobOptions;
34
- /**
35
- * Options for the rate limiter.
36
- */
37
- limiter?: {
38
- /**
39
- * Group key to be used by the limiter when
40
- * limiting by group keys.
41
- */
42
- groupKey: string;
43
- };
44
34
  /**
45
35
  * Options for the streams used internally in BullMQ.
46
36
  */
@@ -9,22 +9,4 @@ export interface RateLimiterOptions {
9
9
  * of `max` jobs will be processed.
10
10
  */
11
11
  duration: number;
12
- /**
13
- * It is possible to define a rate limiter based on group keys,
14
- * for example you may want to have a rate limiter per customer
15
- * instead of a global rate limiter for all customers
16
- *
17
- * @see {@link https://docs.bullmq.io/guide/rate-limiting}
18
- */
19
- groupKey?: string;
20
- /**
21
- * This option enables a heuristic so that when a queue is heavily
22
- * rete limited, it delays the workers so that they do not try
23
- * to pick jobs when there is no point in doing so.
24
- * Note: It is not recommended to use this option when using
25
- * groupKeys unless you have a big amount of workers since
26
- * you may be delaying workers that could pick jobs in groups that
27
- * have not been rate limited.
28
- */
29
- workerDelay?: boolean;
30
12
  }
@@ -5,11 +5,6 @@ import { ParserOptions } from 'cron-parser';
5
5
  * @see {@link https://docs.bullmq.io/guide/jobs/repeatable}
6
6
  */
7
7
  export interface RepeatOptions extends Omit<ParserOptions, 'iterator'> {
8
- /**
9
- * @deprecated Use pattern option instead.
10
- * A cron pattern
11
- */
12
- cron?: string;
13
8
  /**
14
9
  * A repeat pattern
15
10
  */
@@ -20,7 +15,7 @@ export interface RepeatOptions extends Omit<ParserOptions, 'iterator'> {
20
15
  limit?: number;
21
16
  /**
22
17
  * Repeat after this amount of milliseconds
23
- * (`cron` setting cannot be used together with this setting.)
18
+ * (`pattern` setting cannot be used together with this setting.)
24
19
  */
25
20
  every?: number;
26
21
  /**