@alanszp/queue 14.0.4 → 15.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.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,11 @@
1
1
  export * from "./queue/createQueue";
2
2
  export * from "./queue/queue";
3
+ export * from "./queue/repeatableQueue";
4
+ export * from "./queue/baseQueue";
5
+ export * from "./queue/MockBaseQueue";
6
+ export * from "./queue/MockQueue";
7
+ export * from "./queue/MockRepeatableQueue";
8
+ export * from "./queue/QueueManager";
3
9
  export * from "./connectionManager";
4
10
  export * from "./shutdownQueue";
5
11
  export * from "./types";
package/dist/index.js CHANGED
@@ -12,6 +12,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./queue/createQueue"), exports);
14
14
  __exportStar(require("./queue/queue"), exports);
15
+ __exportStar(require("./queue/repeatableQueue"), exports);
16
+ __exportStar(require("./queue/baseQueue"), exports);
17
+ __exportStar(require("./queue/MockBaseQueue"), exports);
18
+ __exportStar(require("./queue/MockQueue"), exports);
19
+ __exportStar(require("./queue/MockRepeatableQueue"), exports);
20
+ __exportStar(require("./queue/QueueManager"), exports);
15
21
  __exportStar(require("./connectionManager"), exports);
16
22
  __exportStar(require("./shutdownQueue"), exports);
17
23
  __exportStar(require("./types"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,gDAA8B;AAC9B,sDAAoC;AACpC,kDAAgC;AAChC,0CAAwB;AACxB,2CAAyB;AACzB,kDAAgC;AAChC,4DAA0C;AAC1C,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,gDAA8B;AAC9B,0DAAwC;AACxC,oDAAkC;AAClC,wDAAsC;AACtC,oDAAkC;AAClC,8DAA4C;AAC5C,uDAAqC;AACrC,sDAAoC;AACpC,kDAAgC;AAChC,0CAAwB;AACxB,2CAAyB;AACzB,kDAAgC;AAChC,4DAA0C;AAC1C,mDAAiC"}
@@ -0,0 +1,16 @@
1
+ import { Job, JobData } from "bullmq";
2
+ import { ListResult } from "@alanszp/core";
3
+ import { JobReturnValue, JobTypeEnum, RawQueue } from "../types";
4
+ import { BaseQueue } from "./baseQueue";
5
+ export declare class MockBaseQueue<Data = JobData, ReturnValue = JobReturnValue> implements Omit<BaseQueue<Data, ReturnValue>, "_queue"> {
6
+ getName(): string;
7
+ getJobsAndCountByStatus(statuses: JobTypeEnum[], page?: number, pageSize?: number, ascending?: boolean): Promise<ListResult<Job<Data, ReturnValue, string>>>;
8
+ getJobCountByStatus(statuses: JobTypeEnum[]): Promise<number>;
9
+ getJobsByStatus(statuses: JobTypeEnum[], page?: number, pageSize?: number, ascending?: boolean): Promise<Job<Data, ReturnValue, string>[]>;
10
+ deleteJob(jobId: string): Promise<void>;
11
+ getJob(jobId: string): Promise<Job<Data, ReturnValue, string> | undefined>;
12
+ getJobOrFail(jobId: string): Promise<Job<Data, ReturnValue, string>>;
13
+ changeDelayToJob(jobId: string, delayMs: number): Promise<void>;
14
+ close(): Promise<void>;
15
+ protected get queue(): RawQueue<Data, ReturnValue, string>;
16
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockBaseQueue = void 0;
4
+ class MockBaseQueue {
5
+ getName() {
6
+ return "Mocked queue";
7
+ }
8
+ getJobsAndCountByStatus(statuses, page, pageSize, ascending) {
9
+ return Promise.resolve({
10
+ elements: [],
11
+ total: 0,
12
+ page: page !== null && page !== void 0 ? page : 1,
13
+ pageSize: pageSize !== null && pageSize !== void 0 ? pageSize : 50,
14
+ });
15
+ }
16
+ getJobCountByStatus(statuses) {
17
+ return Promise.resolve(0);
18
+ }
19
+ getJobsByStatus(statuses, page, pageSize, ascending) {
20
+ return Promise.resolve([]);
21
+ }
22
+ deleteJob(jobId) {
23
+ return Promise.resolve();
24
+ }
25
+ getJob(jobId) {
26
+ return Promise.resolve({});
27
+ }
28
+ getJobOrFail(jobId) {
29
+ return Promise.resolve({});
30
+ }
31
+ changeDelayToJob(jobId, delayMs) {
32
+ return Promise.resolve();
33
+ }
34
+ close() {
35
+ return Promise.resolve();
36
+ }
37
+ get queue() {
38
+ throw new Error("Method not implemented.");
39
+ }
40
+ }
41
+ exports.MockBaseQueue = MockBaseQueue;
42
+ //# sourceMappingURL=MockBaseQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockBaseQueue.js","sourceRoot":"","sources":["../../src/queue/MockBaseQueue.ts"],"names":[],"mappings":";;;AAKA,MAAa,aAAa;IAGjB,OAAO;QACZ,OAAO,cAAc,CAAC;IACxB,CAAC;IAEM,uBAAuB,CAC5B,QAAuB,EACvB,IAAa,EACb,QAAiB,EACjB,SAAmB;QAEnB,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,CAAC;YACf,QAAQ,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE;SACzB,CAAC,CAAC;IACL,CAAC;IAEM,mBAAmB,CAAC,QAAuB;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEM,eAAe,CACpB,QAAuB,EACvB,IAAa,EACb,QAAiB,EACjB,SAAmB;QAEnB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAEM,SAAS,CAAC,KAAa;QAC5B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEM,MAAM,CACX,KAAa;QAEb,OAAO,OAAO,CAAC,OAAO,CAAC,EAAoC,CAAC,CAAC;IAC/D,CAAC;IAEM,YAAY,CAAC,KAAa;QAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAoC,CAAC,CAAC;IAC/D,CAAC;IAEM,gBAAgB,CAAC,KAAa,EAAE,OAAe;QACpD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEM,KAAK;QACV,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,IAAc,KAAK;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF;AA3DD,sCA2DC"}
@@ -0,0 +1,13 @@
1
+ import { Job, JobData, JobsOptions } from "bullmq";
2
+ import { JobReturnValue } from "../types";
3
+ import { Queue } from "./queue";
4
+ import { MockBaseQueue } from "./MockBaseQueue";
5
+ export declare class MockQueue<Data = JobData, ReturnValue = JobReturnValue> extends MockBaseQueue<Data, ReturnValue> implements Omit<Queue<Data, ReturnValue>, "_queue"> {
6
+ publishJob(job: Data, opts?: JobsOptions | undefined): Promise<Job<Data, ReturnValue, string>>;
7
+ publishBulkJob(jobDatas: Data[]): Promise<Job<Data, ReturnValue, string>[]>;
8
+ publishBulkJobWithOptions(jobDefinitions: {
9
+ jobData: Data;
10
+ opts: JobsOptions;
11
+ }[]): Promise<Job<Data, ReturnValue, string>[]>;
12
+ debouncePublishJob(debounceMs: number, job: Data, opts?: JobsOptions | undefined): Promise<Job<Data, ReturnValue, string>>;
13
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockQueue = void 0;
4
+ const MockBaseQueue_1 = require("./MockBaseQueue");
5
+ class MockQueue extends MockBaseQueue_1.MockBaseQueue {
6
+ publishJob(job, opts) {
7
+ return Promise.resolve({});
8
+ }
9
+ publishBulkJob(jobDatas) {
10
+ return Promise.resolve(jobDatas.map(() => ({})));
11
+ }
12
+ publishBulkJobWithOptions(jobDefinitions) {
13
+ return Promise.resolve(jobDefinitions.map(() => ({})));
14
+ }
15
+ debouncePublishJob(debounceMs, job, opts) {
16
+ return Promise.resolve({});
17
+ }
18
+ }
19
+ exports.MockQueue = MockQueue;
20
+ //# sourceMappingURL=MockQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockQueue.js","sourceRoot":"","sources":["../../src/queue/MockQueue.ts"],"names":[],"mappings":";;;AAGA,mDAAgD;AAEhD,MAAa,SACX,SAAQ,6BAAgC;IAGjC,UAAU,CACf,GAAS,EACT,IAA8B;QAE9B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAoC,CAAC,CAAC;IAC/D,CAAC;IAEM,cAAc,CACnB,QAAgB;QAEhB,OAAO,OAAO,CAAC,OAAO,CACpB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAqC,CAAA,CAAC,CAC3D,CAAC;IACJ,CAAC;IAEM,yBAAyB,CAC9B,cAAsD;QAEtD,OAAO,OAAO,CAAC,OAAO,CACpB,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAqC,CAAA,CAAC,CACjE,CAAC;IACJ,CAAC;IAEM,kBAAkB,CACvB,UAAkB,EAClB,GAAS,EACT,IAA8B;QAE9B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAoC,CAAC,CAAC;IAC/D,CAAC;CACF;AAlCD,8BAkCC"}
@@ -0,0 +1,9 @@
1
+ import { Job, JobData, JobsOptions, RepeatOptions } from "bullmq";
2
+ import { JobReturnValue } from "../types";
3
+ import { MockBaseQueue } from "./MockBaseQueue";
4
+ import { RepeatableQueue } from "./repeatableQueue";
5
+ export declare class MockRepeatableQueue<Data = JobData, ReturnValue = JobReturnValue> extends MockBaseQueue<Data, ReturnValue> implements Omit<RepeatableQueue<Data, ReturnValue>, "_queue"> {
6
+ publishRepeatableJob(job: Data, repeatOptions: RepeatOptions, jobId: string, opts?: JobsOptions | undefined): Promise<Job<Data, ReturnValue, string>>;
7
+ removeRepeatableJobByKey(repeatJobKey: string): Promise<boolean>;
8
+ removeRepeatableJobByConfig(repeatOptions: RepeatOptions, jobId: string): Promise<boolean>;
9
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockRepeatableQueue = void 0;
4
+ const MockBaseQueue_1 = require("./MockBaseQueue");
5
+ class MockRepeatableQueue extends MockBaseQueue_1.MockBaseQueue {
6
+ publishRepeatableJob(job, repeatOptions, jobId, opts) {
7
+ return Promise.resolve({});
8
+ }
9
+ removeRepeatableJobByKey(repeatJobKey) {
10
+ return Promise.resolve(true);
11
+ }
12
+ removeRepeatableJobByConfig(repeatOptions, jobId) {
13
+ return Promise.resolve(true);
14
+ }
15
+ }
16
+ exports.MockRepeatableQueue = MockRepeatableQueue;
17
+ //# sourceMappingURL=MockRepeatableQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockRepeatableQueue.js","sourceRoot":"","sources":["../../src/queue/MockRepeatableQueue.ts"],"names":[],"mappings":";;;AAEA,mDAAgD;AAGhD,MAAa,mBACX,SAAQ,6BAAgC;IAGjC,oBAAoB,CACzB,GAAS,EACT,aAA4B,EAC5B,KAAa,EACb,IAA8B;QAE9B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAoC,CAAC,CAAC;IAC/D,CAAC;IAEM,wBAAwB,CAAC,YAAoB;QAClD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,2BAA2B,CACzB,aAA4B,EAC5B,KAAa;QAEb,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF;AAvBD,kDAuBC"}
@@ -0,0 +1,21 @@
1
+ import { ILogger } from "@alanszp/logger";
2
+ import { SharedContext } from "@alanszp/shared-context";
3
+ import { RedisOptions } from "ioredis";
4
+ import { BaseQueue } from "./baseQueue";
5
+ export declare class QueueManager<EnumKey extends string | number | symbol, EnumValue extends string, QueueType extends BaseQueue> {
6
+ private serviceNameAsPrefix;
7
+ private redisConfig;
8
+ private getLogger;
9
+ private getContext;
10
+ private queueCreator;
11
+ private instancedQueues;
12
+ private queueNames;
13
+ constructor(serviceNameAsPrefix: string, redisConfig: RedisOptions, getLogger: () => ILogger, getContext: () => SharedContext, queueCreator: (queueName: EnumValue, getContext: () => SharedContext) => QueueType, queueNamesEnum: {
14
+ [key in EnumKey]: EnumValue;
15
+ });
16
+ connectAll(): Promise<void>;
17
+ disconnectAll(): Promise<void[]>;
18
+ get(queueName: EnumValue): QueueType;
19
+ overrideQueue(queueName: EnumValue, queue: QueueType | Omit<QueueType, "_queue">): void;
20
+ clearQueues(): void;
21
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueueManager = void 0;
4
+ const connectionManager_1 = require("../connectionManager");
5
+ class QueueManager {
6
+ constructor(serviceNameAsPrefix, redisConfig, getLogger, getContext, queueCreator, queueNamesEnum) {
7
+ this.serviceNameAsPrefix = serviceNameAsPrefix;
8
+ this.redisConfig = redisConfig;
9
+ this.getLogger = getLogger;
10
+ this.getContext = getContext;
11
+ this.queueCreator = queueCreator;
12
+ this.instancedQueues = new Map();
13
+ this.queueNames = Object.values(queueNamesEnum);
14
+ }
15
+ connectAll() {
16
+ const connManager = connectionManager_1.ConnectionManager.getInstance();
17
+ connManager.setConfiguration(this.redisConfig, this.serviceNameAsPrefix, this.getLogger);
18
+ const connectionReady = new Promise((resolve) => {
19
+ connManager.getConnection().on("ready", () => {
20
+ resolve();
21
+ });
22
+ });
23
+ this.queueNames.forEach((queueName) => {
24
+ if (this.instancedQueues.has(queueName))
25
+ return;
26
+ this.instancedQueues.set(queueName, this.queueCreator(queueName, this.getContext));
27
+ });
28
+ return connectionReady;
29
+ }
30
+ disconnectAll() {
31
+ return Promise.all([...this.instancedQueues.values()].map((q) => q.close()));
32
+ }
33
+ get(queueName) {
34
+ const q = this.instancedQueues.get(queueName);
35
+ if (!q)
36
+ throw new Error("Queue not initialized");
37
+ return q;
38
+ }
39
+ overrideQueue(queueName, queue) {
40
+ this.instancedQueues.set(queueName, queue);
41
+ }
42
+ clearQueues() {
43
+ this.instancedQueues.clear();
44
+ }
45
+ }
46
+ exports.QueueManager = QueueManager;
47
+ //# sourceMappingURL=QueueManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../src/queue/QueueManager.ts"],"names":[],"mappings":";;;AAGA,4DAAyD;AAGzD,MAAa,YAAY;IASvB,YACU,mBAA2B,EAC3B,WAAyB,EACzB,SAAwB,EACxB,UAA+B,EAC/B,YAGM,EACd,cAA+C;QARvC,wBAAmB,GAAnB,mBAAmB,CAAQ;QAC3B,gBAAW,GAAX,WAAW,CAAc;QACzB,cAAS,GAAT,SAAS,CAAe;QACxB,eAAU,GAAV,UAAU,CAAqB;QAC/B,iBAAY,GAAZ,YAAY,CAGN;QAGd,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAClD,CAAC;IAED,UAAU;QACR,MAAM,WAAW,GAAG,qCAAiB,CAAC,WAAW,EAAE,CAAC;QACpD,WAAW,CAAC,gBAAgB,CAC1B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,SAAS,CACf,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACpD,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3C,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,OAAO;YAEhD,IAAI,CAAC,eAAe,CAAC,GAAG,CACtB,SAAS,EACT,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAC9C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,aAAa;QACX,OAAO,OAAO,CAAC,GAAG,CAChB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CACzD,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,SAAoB;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,aAAa,CACX,SAAoB,EACpB,KAA4C;QAE5C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,KAAkB,CAAC,CAAC;IAC1D,CAAC;IAED,WAAW;QACT,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF;AAxED,oCAwEC"}
@@ -1,6 +1,6 @@
1
1
  import { Queue } from "./queue";
2
2
  import { JobData, QueueOptions } from "../types";
3
3
  import { SharedContext } from "@alanszp/shared-context";
4
- import { RepeatableQueue } from "./repetableQueue";
4
+ import { RepeatableQueue } from "./repeatableQueue";
5
5
  export declare function createQueue<Data = JobData>(name: string, getContext: () => SharedContext, queueOptions?: QueueOptions): Queue<Data>;
6
6
  export declare function createRepeatableQueue<Data = JobData>(name: string, getContext: () => SharedContext, queueOptions?: QueueOptions): RepeatableQueue<Data>;
@@ -2,20 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createRepeatableQueue = exports.createQueue = void 0;
4
4
  const queue_1 = require("./queue");
5
- const queueRepository_1 = require("./queueRepository");
6
5
  const connectionManager_1 = require("../connectionManager");
7
- const repetableQueue_1 = require("./repetableQueue");
6
+ const repeatableQueue_1 = require("./repeatableQueue");
8
7
  function createQueue(name, getContext, queueOptions) {
9
8
  const connection = connectionManager_1.ConnectionManager.getInstance().getConnection();
10
9
  const queue = new queue_1.Queue(connection, name, connectionManager_1.ConnectionManager.getInstance().getServiceName(), getContext, queueOptions);
11
- queueRepository_1.QueueRepository.Instance.registerQueue(queue);
12
10
  return queue;
13
11
  }
14
12
  exports.createQueue = createQueue;
15
13
  function createRepeatableQueue(name, getContext, queueOptions) {
16
14
  const connection = connectionManager_1.ConnectionManager.getInstance().getConnection();
17
- const queue = new repetableQueue_1.RepeatableQueue(connection, name, connectionManager_1.ConnectionManager.getInstance().getServiceName(), getContext, queueOptions);
18
- queueRepository_1.QueueRepository.Instance.registerQueue(queue);
15
+ const queue = new repeatableQueue_1.RepeatableQueue(connection, name, connectionManager_1.ConnectionManager.getInstance().getServiceName(), getContext, queueOptions);
19
16
  return queue;
20
17
  }
21
18
  exports.createRepeatableQueue = createRepeatableQueue;
@@ -1 +1 @@
1
- {"version":3,"file":"createQueue.js","sourceRoot":"","sources":["../../src/queue/createQueue.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAChC,uDAAoD;AACpD,4DAAyD;AAGzD,qDAAmD;AAEnD,SAAgB,WAAW,CACzB,IAAY,EACZ,UAA+B,EAC/B,YAA2B;IAE3B,MAAM,UAAU,GAAG,qCAAiB,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,aAAK,CACrB,UAAU,EACV,IAAI,EACJ,qCAAiB,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,EAChD,UAAU,EACV,YAAY,CACb,CAAC;IACF,iCAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,kCAeC;AAED,SAAgB,qBAAqB,CACnC,IAAY,EACZ,UAA+B,EAC/B,YAA2B;IAE3B,MAAM,UAAU,GAAG,qCAAiB,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,gCAAe,CAC/B,UAAU,EACV,IAAI,EACJ,qCAAiB,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,EAChD,UAAU,EACV,YAAY,CACb,CAAC;IACF,iCAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,sDAeC"}
1
+ {"version":3,"file":"createQueue.js","sourceRoot":"","sources":["../../src/queue/createQueue.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAChC,4DAAyD;AAGzD,uDAAoD;AAEpD,SAAgB,WAAW,CACzB,IAAY,EACZ,UAA+B,EAC/B,YAA2B;IAE3B,MAAM,UAAU,GAAG,qCAAiB,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,aAAK,CACrB,UAAU,EACV,IAAI,EACJ,qCAAiB,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,EAChD,UAAU,EACV,YAAY,CACb,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAdD,kCAcC;AAED,SAAgB,qBAAqB,CACnC,IAAY,EACZ,UAA+B,EAC/B,YAA2B;IAE3B,MAAM,UAAU,GAAG,qCAAiB,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,iCAAe,CAC/B,UAAU,EACV,IAAI,EACJ,qCAAiB,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,EAChD,UAAU,EACV,YAAY,CACb,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAdD,sDAcC"}
@@ -10,4 +10,17 @@ export declare class Queue<Data = JobData, ReturnValue = JobReturnValue> extends
10
10
  jobData: Data;
11
11
  opts: JobsOptions;
12
12
  }[]): Promise<Job<Data, ReturnValue>[]>;
13
+ /**
14
+ * This method is used to debounce a job.
15
+ * It will check if there are any jobs waiting to be processed, if there are it
16
+ * will not schedule the job and let finish the current scheduled one.
17
+ *
18
+ * This type of publishing will have a max of 1 job waiting to be processed.
19
+ *
20
+ * @param debounceMs Time in MS to debounce the job
21
+ * @param job Job data
22
+ * @param opts Job options
23
+ * @returns Returns undefined if the job was already scheduled, else returns the job published
24
+ */
25
+ debouncePublishJob(debounceMs: number, job: Data, opts?: JobsOptions): Promise<Job<Data, ReturnValue> | undefined>;
13
26
  }
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.Queue = void 0;
13
13
  const lodash_1 = require("lodash");
14
+ const types_1 = require("../types");
14
15
  const baseQueue_1 = require("./baseQueue");
15
16
  const DEFAULT_COMPLETED_JOB_MAX_AGE_IN_SECONDS = 60 * 60 * 24 * 30;
16
17
  const DEFAULT_COMPLETED_JOB_MAX_COUNT = 500;
@@ -59,6 +60,26 @@ class Queue extends baseQueue_1.BaseQueue {
59
60
  return this.queue.addBulk(jobs);
60
61
  });
61
62
  }
63
+ /**
64
+ * This method is used to debounce a job.
65
+ * It will check if there are any jobs waiting to be processed, if there are it
66
+ * will not schedule the job and let finish the current scheduled one.
67
+ *
68
+ * This type of publishing will have a max of 1 job waiting to be processed.
69
+ *
70
+ * @param debounceMs Time in MS to debounce the job
71
+ * @param job Job data
72
+ * @param opts Job options
73
+ * @returns Returns undefined if the job was already scheduled, else returns the job published
74
+ */
75
+ debouncePublishJob(debounceMs, job, opts) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ const countWaiting = yield this.getJobCountByStatus([types_1.JobTypeEnum.DELAYED]);
78
+ if (countWaiting !== 0)
79
+ return;
80
+ yield this.publishJob(job, Object.assign(Object.assign({}, opts), { delay: debounceMs }));
81
+ });
82
+ }
62
83
  }
63
84
  exports.Queue = Queue;
64
85
  //# sourceMappingURL=queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;AAS/B,2CAAwC;AAExC,MAAM,wCAAwC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACnE,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAC5C,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAC1C,MAAM,eAAe,GAAG;IACtB,iBAAiB,EAAE;QACjB,gBAAgB,EAAE;YAChB,GAAG,EAAE,wCAAwC;YAC7C,KAAK,EAAE,+BAA+B;SACvC;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,4BAA4B;SACpC;QACD,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE;YACP,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,IAAI;SACZ;KACF;CACF,CAAC;AAEF,MAAa,KAGX,SAAQ,qBAA4B;IACpC,YACE,UAA6B,EAC7B,IAAY,EACZ,MAAc,EACd,gBAAqC,EACrC,eAA6B,EAAE;QAE/B,KAAK,CACH,UAAU,EACV,IAAI,EACJ,MAAM,EACN,gBAAgB,EAChB,IAAA,cAAK,EAAC,eAAe,EAAE,YAAY,CAAC,CACrC,CAAC;IACJ,CAAC;IAEK,UAAU,CACd,GAAS,EACT,IAAkB;;YAElB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,kCAAO,GAAG,KAAE,GAAG,EAAE,GAAG,KAAI,IAAI,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEK,cAAc,CAAC,QAAgB;;YACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;KAAA;IAEK,yBAAyB,CAC7B,cAAsD;;YAEtD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;KAAA;CACF;AA7CD,sBA6CC"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;AAG/B,oCAMkB;AAClB,2CAAwC;AAExC,MAAM,wCAAwC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACnE,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAC5C,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAC1C,MAAM,eAAe,GAAG;IACtB,iBAAiB,EAAE;QACjB,gBAAgB,EAAE;YAChB,GAAG,EAAE,wCAAwC;YAC7C,KAAK,EAAE,+BAA+B;SACvC;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,4BAA4B;SACpC;QACD,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE;YACP,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,IAAI;SACZ;KACF;CACF,CAAC;AAEF,MAAa,KAGX,SAAQ,qBAA4B;IACpC,YACE,UAA6B,EAC7B,IAAY,EACZ,MAAc,EACd,gBAAqC,EACrC,eAA6B,EAAE;QAE/B,KAAK,CACH,UAAU,EACV,IAAI,EACJ,MAAM,EACN,gBAAgB,EAChB,IAAA,cAAK,EAAC,eAAe,EAAE,YAAY,CAAC,CACrC,CAAC;IACJ,CAAC;IAEK,UAAU,CACd,GAAS,EACT,IAAkB;;YAElB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,kCAAO,GAAG,KAAE,GAAG,EAAE,GAAG,KAAI,IAAI,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEK,cAAc,CAAC,QAAgB;;YACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;KAAA;IAEK,yBAAyB,CAC7B,cAAsD;;YAEtD,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;KAAA;IAED;;;;;;;;;;;OAWG;IACG,kBAAkB,CACtB,UAAkB,EAClB,GAAS,EACT,IAAkB;;YAElB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,CAAC,mBAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,IAAI,YAAY,KAAK,CAAC;gBAAE,OAAO;YAE/B,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,kCACpB,IAAI,KACP,KAAK,EAAE,UAAU,IACjB,CAAC;QACL,CAAC;KAAA;CACF;AAvED,sBAuEC"}
@@ -29,4 +29,4 @@ class RepeatableQueue extends baseQueue_1.BaseQueue {
29
29
  }
30
30
  }
31
31
  exports.RepeatableQueue = RepeatableQueue;
32
- //# sourceMappingURL=repetableQueue.js.map
32
+ //# sourceMappingURL=repeatableQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repeatableQueue.js","sourceRoot":"","sources":["../../src/queue/repeatableQueue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,2CAAwC;AAExC,MAAa,eAGX,SAAQ,qBAA4B;IAC9B,oBAAoB,CACxB,GAAS,EACT,aAA4B,EAC5B,KAAa,EACb,IAAkB;;YAElB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,kCAC/B,IAAI,KACP,MAAM,oBAAO,aAAa,GAC1B,KAAK,IACL,CAAC;QACL,CAAC;KAAA;IAEK,wBAAwB,CAAC,YAAoB;;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;KAAA;IAEK,2BAA2B,CAC/B,aAA4B,EAC5B,KAAa;;YAEb,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;KAAA;CACF;AA3BD,0CA2BC"}
@@ -1 +1,3 @@
1
- export declare function shutdownQueue(): Promise<void>;
1
+ import { QueueManager } from "./queue/QueueManager";
2
+ import { BaseQueue } from "./queue/baseQueue";
3
+ export declare function shutdownQueue<EnumKey extends string | number | symbol, EnumValue extends string, QueueType extends BaseQueue>(queueManagers: QueueManager<EnumKey, EnumValue, QueueType> | QueueManager<EnumKey, EnumValue, QueueType>[]): Promise<void>;
@@ -10,14 +10,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.shutdownQueue = void 0;
13
- const queueRepository_1 = require("./queue/queueRepository");
13
+ const lodash_1 = require("lodash");
14
14
  const connectionManager_1 = require("./connectionManager");
15
15
  const workerRepository_1 = require("./worker/workerRepository");
16
- function shutdownQueue() {
16
+ function shutdownQueue(queueManagers) {
17
17
  return __awaiter(this, void 0, void 0, function* () {
18
+ const queueManagersArray = (0, lodash_1.isArray)(queueManagers)
19
+ ? queueManagers
20
+ : [queueManagers];
18
21
  yield Promise.all([
19
22
  ...workerRepository_1.WorkerRepository.Instance.getCloseConnections(),
20
- ...queueRepository_1.QueueRepository.Instance.getCloseConnections(),
23
+ ...queueManagersArray.map((q) => q.disconnectAll()),
21
24
  ]);
22
25
  connectionManager_1.ConnectionManager.getInstance().close();
23
26
  });
@@ -1 +1 @@
1
- {"version":3,"file":"shutdownQueue.js","sourceRoot":"","sources":["../src/shutdownQueue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6DAA0D;AAC1D,2DAAwD;AACxD,gEAA6D;AAE7D,SAAsB,aAAa;;QACjC,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,GAAG,mCAAgB,CAAC,QAAQ,CAAC,mBAAmB,EAAE;YAClD,GAAG,iCAAe,CAAC,QAAQ,CAAC,mBAAmB,EAAE;SAClD,CAAC,CAAC;QAEH,qCAAiB,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;CAAA;AAPD,sCAOC"}
1
+ {"version":3,"file":"shutdownQueue.js","sourceRoot":"","sources":["../src/shutdownQueue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAiC;AACjC,2DAAwD;AAGxD,gEAA6D;AAE7D,SAAsB,aAAa,CAKjC,aAEiD;;QAEjD,MAAM,kBAAkB,GAAG,IAAA,gBAAO,EAAC,aAAa,CAAC;YAC/C,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAEpB,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,GAAG,mCAAgB,CAAC,QAAQ,CAAC,mBAAmB,EAAE;YAClD,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;SACpD,CAAC,CAAC;QAEH,qCAAiB,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;CAAA;AAnBD,sCAmBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alanszp/queue",
3
- "version": "14.0.4",
3
+ "version": "15.0.0",
4
4
  "description": "Workers and queues",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -23,15 +23,15 @@
23
23
  "typescript": "^4.3.4"
24
24
  },
25
25
  "dependencies": {
26
- "@alanszp/audit": "^14.0.4",
27
- "@alanszp/core": "^14.0.0",
28
- "@alanszp/logger": "^14.0.4",
29
- "@alanszp/shared-context": "^14.0.4",
30
- "@alanszp/validations": "^14.0.0",
26
+ "@alanszp/audit": "^15.0.0",
27
+ "@alanszp/core": "^15.0.0",
28
+ "@alanszp/logger": "^15.0.0",
29
+ "@alanszp/shared-context": "^15.0.0",
30
+ "@alanszp/validations": "^15.0.0",
31
31
  "@paralleldrive/cuid2": "^2.2.2",
32
32
  "bullmq": "^5.4.4",
33
33
  "ioredis": "^5.3.2",
34
34
  "lodash": "^4.17.21"
35
35
  },
36
- "gitHead": "a4960c01380f17b628402d7d01b3a1cea6bce749"
36
+ "gitHead": "d234963ab6a9cf53a1a9602f1a0c8052eb68d2c4"
37
37
  }
@@ -1,9 +0,0 @@
1
- import { BaseQueue } from "./baseQueue";
2
- export declare class QueueRepository {
3
- private _queues;
4
- private static _instance;
5
- private constructor();
6
- static get Instance(): QueueRepository;
7
- registerQueue(queue: BaseQueue): void;
8
- getCloseConnections(): Promise<void>[];
9
- }
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueueRepository = void 0;
4
- class QueueRepository {
5
- constructor() {
6
- this._queues = [];
7
- }
8
- static get Instance() {
9
- if (this._instance) {
10
- return this._instance;
11
- }
12
- this._instance = new this();
13
- return this._instance;
14
- }
15
- registerQueue(queue) {
16
- this._queues.push(queue);
17
- }
18
- getCloseConnections() {
19
- return this._queues.map((q) => q.close());
20
- }
21
- }
22
- exports.QueueRepository = QueueRepository;
23
- //# sourceMappingURL=queueRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queueRepository.js","sourceRoot":"","sources":["../../src/queue/queueRepository.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAK1B;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAEM,MAAM,KAAK,QAAQ;QACxB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,aAAa,CAAC,KAAgB;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAEM,mBAAmB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF;AAxBD,0CAwBC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"repetableQueue.js","sourceRoot":"","sources":["../../src/queue/repetableQueue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,2CAAwC;AAExC,MAAa,eAGX,SAAQ,qBAA4B;IAC9B,oBAAoB,CACxB,GAAS,EACT,aAA4B,EAC5B,KAAa,EACb,IAAkB;;YAElB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,kCAC/B,IAAI,KACP,MAAM,oBAAO,aAAa,GAC1B,KAAK,IACL,CAAC;QACL,CAAC;KAAA;IAEK,wBAAwB,CAAC,YAAoB;;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;KAAA;IAEK,2BAA2B,CAC/B,aAA4B,EAC5B,KAAa;;YAEb,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;KAAA;CACF;AA3BD,0CA2BC"}