@alanszp/queue 12.0.3 → 14.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/queue/baseQueue.d.ts +24 -0
- package/dist/queue/baseQueue.js +100 -0
- package/dist/queue/baseQueue.js.map +1 -0
- package/dist/queue/createQueue.d.ts +2 -0
- package/dist/queue/createQueue.js +9 -1
- package/dist/queue/createQueue.js.map +1 -1
- package/dist/queue/queue.d.ts +4 -21
- package/dist/queue/queue.js +20 -111
- package/dist/queue/queue.js.map +1 -1
- package/dist/queue/queueRepository.d.ts +2 -2
- package/dist/queue/queueRepository.js.map +1 -1
- package/dist/queue/repetableQueue.d.ts +8 -0
- package/dist/queue/repetableQueue.js +32 -0
- package/dist/queue/repetableQueue.js.map +1 -0
- package/dist/types.d.ts +4 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Job } from "bullmq";
|
|
2
|
+
import { ListResult } from "@alanszp/core";
|
|
3
|
+
import { SharedContext } from "@alanszp/shared-context";
|
|
4
|
+
import { ConnectionOptions, JobData, JobReturnValue, JobTypeEnum, QueueOptions, RawQueue } from "../types";
|
|
5
|
+
export declare class BaseQueue<Data = JobData, ReturnValue = JobReturnValue> {
|
|
6
|
+
protected _queue: RawQueue;
|
|
7
|
+
protected name: string;
|
|
8
|
+
protected getSharedContext: () => SharedContext;
|
|
9
|
+
constructor(connection: ConnectionOptions, name: string, prefix: string, getSharedContext: () => SharedContext, queueOptions?: QueueOptions);
|
|
10
|
+
getName(): string;
|
|
11
|
+
protected pageToStartEnd(pageNumber: number, pageSize: number): {
|
|
12
|
+
start: number;
|
|
13
|
+
end: number;
|
|
14
|
+
};
|
|
15
|
+
getJobsAndCountByStatus(statuses: JobTypeEnum[], page?: number, pageSize?: number, ascending?: boolean): Promise<ListResult<Job<Data, ReturnValue>>>;
|
|
16
|
+
getJobCountByStatus(statuses: JobTypeEnum[]): Promise<number>;
|
|
17
|
+
getJobsByStatus(statuses: JobTypeEnum[], page?: number, pageSize?: number, ascending?: boolean): Promise<Job<Data, ReturnValue>[]>;
|
|
18
|
+
deleteJob(jobId: string): Promise<void>;
|
|
19
|
+
getJob(jobId: string): Promise<Job<Data, ReturnValue> | undefined>;
|
|
20
|
+
getJobOrFail(jobId: string): Promise<Job<Data, ReturnValue>>;
|
|
21
|
+
changeDelayToJob(jobId: string, delayMs: number): Promise<void>;
|
|
22
|
+
close(): Promise<void>;
|
|
23
|
+
protected get queue(): RawQueue<Data, ReturnValue>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BaseQueue = void 0;
|
|
13
|
+
const lodash_1 = require("lodash");
|
|
14
|
+
const types_1 = require("../types");
|
|
15
|
+
const JobNotFoundError_1 = require("../errors/JobNotFoundError");
|
|
16
|
+
const JobCannotBePromotedError_1 = require("../errors/JobCannotBePromotedError");
|
|
17
|
+
const BULL_PREFIX = "b";
|
|
18
|
+
function buildOptions(connection, prefix, queueOptions = {}) {
|
|
19
|
+
return Object.assign(Object.assign({}, (0, lodash_1.merge)(Object.assign(Object.assign({}, queueOptions), { connection }), queueOptions)), { prefix: `{${prefix}}:${BULL_PREFIX}` });
|
|
20
|
+
}
|
|
21
|
+
class BaseQueue {
|
|
22
|
+
constructor(connection, name, prefix, getSharedContext, queueOptions) {
|
|
23
|
+
this.name = name;
|
|
24
|
+
this.getSharedContext = getSharedContext;
|
|
25
|
+
this._queue = new types_1.RawQueue(name, buildOptions(connection, prefix, queueOptions));
|
|
26
|
+
}
|
|
27
|
+
getName() {
|
|
28
|
+
return this.name;
|
|
29
|
+
}
|
|
30
|
+
pageToStartEnd(pageNumber, pageSize) {
|
|
31
|
+
return {
|
|
32
|
+
start: (pageNumber - 1) * pageSize,
|
|
33
|
+
end: pageNumber * pageSize - 1,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
getJobsAndCountByStatus(statuses, page = 1, pageSize = 50, ascending = false) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const { start, end } = this.pageToStartEnd(page, pageSize);
|
|
39
|
+
const [total, elements] = yield Promise.all([
|
|
40
|
+
this.queue.getJobCountByTypes(...statuses),
|
|
41
|
+
this.queue.getJobs(statuses, start, end, ascending),
|
|
42
|
+
]);
|
|
43
|
+
return {
|
|
44
|
+
total,
|
|
45
|
+
elements,
|
|
46
|
+
page,
|
|
47
|
+
pageSize,
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
getJobCountByStatus(statuses) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
return this.queue.getJobCountByTypes(...statuses);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
getJobsByStatus(statuses, page = 1, pageSize = 50, ascending = false) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
const { start, end } = this.pageToStartEnd(page, pageSize);
|
|
59
|
+
return this.queue.getJobs(statuses, start, end, ascending);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
deleteJob(jobId) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
this.queue.remove(jobId);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
getJob(jobId) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
return this.queue.getJob(jobId);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
getJobOrFail(jobId) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
const job = yield this.queue.getJob(jobId);
|
|
75
|
+
if (!job)
|
|
76
|
+
throw new JobNotFoundError_1.JobNotFoundError(jobId);
|
|
77
|
+
return job;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
changeDelayToJob(jobId, delayMs) {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
const job = yield this.getJobOrFail(jobId);
|
|
83
|
+
const state = yield job.getState();
|
|
84
|
+
if (state !== types_1.JobStateEnum.DELAYED) {
|
|
85
|
+
throw new JobCannotBePromotedError_1.JobCannotBePromotedError(jobId, state);
|
|
86
|
+
}
|
|
87
|
+
job.changeDelay(delayMs);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
close() {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
yield this.queue.close();
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
get queue() {
|
|
96
|
+
return this._queue;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.BaseQueue = BaseQueue;
|
|
100
|
+
//# sourceMappingURL=baseQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseQueue.js","sourceRoot":"","sources":["../../src/queue/baseQueue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +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
5
|
export declare function createQueue<Data = JobData>(name: string, getContext: () => SharedContext, queueOptions?: QueueOptions): Queue<Data>;
|
|
6
|
+
export declare function createRepeatableQueue<Data = JobData>(name: string, getContext: () => SharedContext, queueOptions?: QueueOptions): RepeatableQueue<Data>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createQueue = void 0;
|
|
3
|
+
exports.createRepeatableQueue = exports.createQueue = void 0;
|
|
4
4
|
const queue_1 = require("./queue");
|
|
5
5
|
const queueRepository_1 = require("./queueRepository");
|
|
6
6
|
const connectionManager_1 = require("../connectionManager");
|
|
7
|
+
const repetableQueue_1 = require("./repetableQueue");
|
|
7
8
|
function createQueue(name, getContext, queueOptions) {
|
|
8
9
|
const connection = connectionManager_1.ConnectionManager.getInstance().getConnection();
|
|
9
10
|
const queue = new queue_1.Queue(connection, name, connectionManager_1.ConnectionManager.getInstance().getServiceName(), getContext, queueOptions);
|
|
@@ -11,4 +12,11 @@ function createQueue(name, getContext, queueOptions) {
|
|
|
11
12
|
return queue;
|
|
12
13
|
}
|
|
13
14
|
exports.createQueue = createQueue;
|
|
15
|
+
function createRepeatableQueue(name, getContext, queueOptions) {
|
|
16
|
+
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);
|
|
19
|
+
return queue;
|
|
20
|
+
}
|
|
21
|
+
exports.createRepeatableQueue = createRepeatableQueue;
|
|
14
22
|
//# sourceMappingURL=createQueue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createQueue.js","sourceRoot":"","sources":["../../src/queue/createQueue.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAChC,uDAAoD;AACpD,4DAAyD;
|
|
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"}
|
package/dist/queue/queue.d.ts
CHANGED
|
@@ -1,30 +1,13 @@
|
|
|
1
|
-
import { Job, JobsOptions
|
|
2
|
-
import { ListResult } from "@alanszp/core";
|
|
1
|
+
import { Job, JobsOptions } from "bullmq";
|
|
3
2
|
import { SharedContext } from "@alanszp/shared-context";
|
|
4
|
-
import { ConnectionOptions, JobData, JobReturnValue,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
private name;
|
|
8
|
-
private getSharedContext;
|
|
3
|
+
import { ConnectionOptions, JobData, JobReturnValue, QueueOptions } from "../types";
|
|
4
|
+
import { BaseQueue } from "./baseQueue";
|
|
5
|
+
export declare class Queue<Data = JobData, ReturnValue = JobReturnValue> extends BaseQueue<Data, ReturnValue> {
|
|
9
6
|
constructor(connection: ConnectionOptions, name: string, prefix: string, getSharedContext: () => SharedContext, queueOptions?: QueueOptions);
|
|
10
|
-
getName(): string;
|
|
11
7
|
publishJob(job: Data, opts?: JobsOptions): Promise<Job<Data, ReturnValue>>;
|
|
12
|
-
publishRepeatableJob(job: Data, repeatOptions: RepeatOptions, jobId: string): Promise<Job<Data, ReturnValue>>;
|
|
13
|
-
removeRepeatableJobByKey(repeatJobKey: string): Promise<boolean>;
|
|
14
|
-
removeRepeatableJobByConfig(repeatOptions: RepeatOptions, jobId: string): Promise<boolean>;
|
|
15
8
|
publishBulkJob(jobDatas: Data[]): Promise<Job<Data, ReturnValue>[]>;
|
|
16
9
|
publishBulkJobWithOptions(jobDefinitions: {
|
|
17
10
|
jobData: Data;
|
|
18
11
|
opts: JobsOptions;
|
|
19
12
|
}[]): Promise<Job<Data, ReturnValue>[]>;
|
|
20
|
-
private pageToStartEnd;
|
|
21
|
-
getJobsAndCountByStatus(statuses: JobTypeEnum[], page?: number, pageSize?: number, ascending?: boolean): Promise<ListResult<Job<Data, ReturnValue>>>;
|
|
22
|
-
getJobCountByStatus(statuses: JobTypeEnum[], page?: number, pageSize?: number): Promise<number>;
|
|
23
|
-
getJobsByStatus(statuses: JobTypeEnum[], page?: number, pageSize?: number, ascending?: boolean): Promise<Job<Data, ReturnValue>[]>;
|
|
24
|
-
deleteJob(jobId: string): Promise<void>;
|
|
25
|
-
getJob(jobId: string): Promise<Job<Data, ReturnValue> | undefined>;
|
|
26
|
-
getJobOrFail(jobId: string): Promise<Job<Data, ReturnValue>>;
|
|
27
|
-
changeDelayToJob(jobId: string, delayMs: number): Promise<void>;
|
|
28
|
-
close(): Promise<void>;
|
|
29
|
-
private get queue();
|
|
30
13
|
}
|
package/dist/queue/queue.js
CHANGED
|
@@ -11,37 +11,29 @@ 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
|
|
15
|
-
const JobNotFoundError_1 = require("../errors/JobNotFoundError");
|
|
16
|
-
const JobCannotBePromotedError_1 = require("../errors/JobCannotBePromotedError");
|
|
17
|
-
const BULL_PREFIX = "b";
|
|
14
|
+
const baseQueue_1 = require("./baseQueue");
|
|
18
15
|
const DEFAULT_COMPLETED_JOB_MAX_AGE_IN_SECONDS = 60 * 60 * 24 * 30;
|
|
19
16
|
const DEFAULT_COMPLETED_JOB_MAX_COUNT = 500;
|
|
20
17
|
const DEFAULT_FAILED_JOB_MAX_COUNT = 1000;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
connection,
|
|
41
|
-
}, queueOptions || {})), { prefix: `{${prefix}}:${BULL_PREFIX}` }));
|
|
42
|
-
}
|
|
43
|
-
getName() {
|
|
44
|
-
return this.name;
|
|
18
|
+
const DEFAULT_OPTIONS = {
|
|
19
|
+
defaultJobOptions: {
|
|
20
|
+
removeOnComplete: {
|
|
21
|
+
age: DEFAULT_COMPLETED_JOB_MAX_AGE_IN_SECONDS,
|
|
22
|
+
count: DEFAULT_COMPLETED_JOB_MAX_COUNT,
|
|
23
|
+
},
|
|
24
|
+
removeOnFail: {
|
|
25
|
+
count: DEFAULT_FAILED_JOB_MAX_COUNT,
|
|
26
|
+
},
|
|
27
|
+
attempts: 3,
|
|
28
|
+
backoff: {
|
|
29
|
+
type: "exponential",
|
|
30
|
+
delay: 3000,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
class Queue extends baseQueue_1.BaseQueue {
|
|
35
|
+
constructor(connection, name, prefix, getSharedContext, queueOptions = {}) {
|
|
36
|
+
super(connection, name, prefix, getSharedContext, (0, lodash_1.merge)(DEFAULT_OPTIONS, queueOptions));
|
|
45
37
|
}
|
|
46
38
|
publishJob(job, opts) {
|
|
47
39
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -51,21 +43,6 @@ class Queue {
|
|
|
51
43
|
return this.queue.add(this.name, Object.assign(Object.assign({}, job), { lid, lch }), opts);
|
|
52
44
|
});
|
|
53
45
|
}
|
|
54
|
-
publishRepeatableJob(job, repeatOptions, jobId) {
|
|
55
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
-
return this.queue.add(this.name, job, Object.assign(Object.assign({}, repeatOptions), { jobId }));
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
removeRepeatableJobByKey(repeatJobKey) {
|
|
60
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
return this.queue.removeRepeatableByKey(repeatJobKey);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
removeRepeatableJobByConfig(repeatOptions, jobId) {
|
|
65
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
-
return this.queue.removeRepeatable(this.name, repeatOptions, jobId);
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
46
|
publishBulkJob(jobDatas) {
|
|
70
47
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
48
|
const jobs = jobDatas.map((data) => ({ name: this.name, data }));
|
|
@@ -82,74 +59,6 @@ class Queue {
|
|
|
82
59
|
return this.queue.addBulk(jobs);
|
|
83
60
|
});
|
|
84
61
|
}
|
|
85
|
-
pageToStartEnd(pageNumber, pageSize) {
|
|
86
|
-
return {
|
|
87
|
-
start: (pageNumber - 1) * pageSize,
|
|
88
|
-
end: pageNumber * pageSize - 1,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
getJobsAndCountByStatus(statuses, page = 1, pageSize = 50, ascending = false) {
|
|
92
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
const { start, end } = this.pageToStartEnd(page, pageSize);
|
|
94
|
-
const [total, elements] = yield Promise.all([
|
|
95
|
-
this.queue.getJobCountByTypes(...statuses),
|
|
96
|
-
this.queue.getJobs(statuses, start, end, ascending),
|
|
97
|
-
]);
|
|
98
|
-
return {
|
|
99
|
-
total,
|
|
100
|
-
elements,
|
|
101
|
-
page,
|
|
102
|
-
pageSize,
|
|
103
|
-
};
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
getJobCountByStatus(statuses, page = 1, pageSize = 50) {
|
|
107
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
108
|
-
return this.queue.getJobCountByTypes(...statuses);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
getJobsByStatus(statuses, page = 1, pageSize = 50, ascending = false) {
|
|
112
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
-
const { start, end } = this.pageToStartEnd(page, pageSize);
|
|
114
|
-
return this.queue.getJobs(statuses, start, end, ascending);
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
deleteJob(jobId) {
|
|
118
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
-
this.queue.remove(jobId);
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
getJob(jobId) {
|
|
123
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
-
return this.queue.getJob(jobId);
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
getJobOrFail(jobId) {
|
|
128
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
const job = yield this.queue.getJob(jobId);
|
|
130
|
-
if (!job)
|
|
131
|
-
throw new JobNotFoundError_1.JobNotFoundError(jobId);
|
|
132
|
-
return job;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
changeDelayToJob(jobId, delayMs) {
|
|
136
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
-
const job = yield this.getJobOrFail(jobId);
|
|
138
|
-
const state = yield job.getState();
|
|
139
|
-
if (state !== types_1.JobStateEnum.DELAYED) {
|
|
140
|
-
throw new JobCannotBePromotedError_1.JobCannotBePromotedError(jobId, state);
|
|
141
|
-
}
|
|
142
|
-
job.changeDelay(delayMs);
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
close() {
|
|
146
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
-
yield this.queue.close();
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
get queue() {
|
|
151
|
-
return this._queue;
|
|
152
|
-
}
|
|
153
62
|
}
|
|
154
63
|
exports.Queue = Queue;
|
|
155
64
|
//# sourceMappingURL=queue.js.map
|
package/dist/queue/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
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,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BaseQueue } from "./baseQueue";
|
|
2
2
|
export declare class QueueRepository {
|
|
3
3
|
private _queues;
|
|
4
4
|
private static _instance;
|
|
5
5
|
private constructor();
|
|
6
6
|
static get Instance(): QueueRepository;
|
|
7
|
-
registerQueue(queue:
|
|
7
|
+
registerQueue(queue: BaseQueue): void;
|
|
8
8
|
getCloseConnections(): Promise<void>[];
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Job, JobsOptions, RepeatOptions } from "bullmq";
|
|
2
|
+
import { JobData, JobReturnValue } from "../types";
|
|
3
|
+
import { BaseQueue } from "./baseQueue";
|
|
4
|
+
export declare class RepeatableQueue<Data = JobData, ReturnValue = JobReturnValue> extends BaseQueue<Data, ReturnValue> {
|
|
5
|
+
publishRepeatableJob(job: Data, repeatOptions: RepeatOptions, jobId: string, opts?: JobsOptions): Promise<Job<Data, ReturnValue>>;
|
|
6
|
+
removeRepeatableJobByKey(repeatJobKey: string): Promise<boolean>;
|
|
7
|
+
removeRepeatableJobByConfig(repeatOptions: RepeatOptions, jobId: string): Promise<boolean>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RepeatableQueue = void 0;
|
|
13
|
+
const baseQueue_1 = require("./baseQueue");
|
|
14
|
+
class RepeatableQueue extends baseQueue_1.BaseQueue {
|
|
15
|
+
publishRepeatableJob(job, repeatOptions, jobId, opts) {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
return this.queue.add(this.name, job, Object.assign(Object.assign({}, opts), { repeat: Object.assign({}, repeatOptions), jobId }));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
removeRepeatableJobByKey(repeatJobKey) {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
return this.queue.removeRepeatableByKey(repeatJobKey);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
removeRepeatableJobByConfig(repeatOptions, jobId) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
return this.queue.removeRepeatable(this.name, repeatOptions, jobId);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.RepeatableQueue = RepeatableQueue;
|
|
32
|
+
//# sourceMappingURL=repetableQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { QueueOptions as RawQueueOptions, WorkerOptions as RawWorkerOptions } from "bullmq";
|
|
2
|
+
export { ConnectionOptions, RedisOptions, Job, Worker as RawWorker, Queue as RawQueue, JobState, JobType, JobsOptions, } from "bullmq";
|
|
2
3
|
export declare type JobData = unknown;
|
|
3
4
|
export declare type JobReturnValue = unknown;
|
|
4
5
|
export declare enum JobStateEnum {
|
|
@@ -20,3 +21,5 @@ export declare enum JobTypeEnum {
|
|
|
20
21
|
REPEAT = "repeat",
|
|
21
22
|
WAIT = "wait"
|
|
22
23
|
}
|
|
24
|
+
export declare type QueueOptions = Omit<RawQueueOptions, "connection">;
|
|
25
|
+
export declare type WorkerOptions = Omit<RawWorkerOptions, "connection">;
|
package/dist/types.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.JobTypeEnum = exports.JobStateEnum = exports.RawQueue = exports.RawWorker = exports.Job = void 0;
|
|
4
|
-
// decoupling from bullmq
|
|
5
4
|
var bullmq_1 = require("bullmq");
|
|
6
5
|
Object.defineProperty(exports, "Job", { enumerable: true, get: function () { return bullmq_1.Job; } });
|
|
7
6
|
Object.defineProperty(exports, "RawWorker", { enumerable: true, get: function () { return bullmq_1.Worker; } });
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAMA,iCASgB;AANd,6FAAA,GAAG,OAAA;AACH,mGAAA,MAAM,OAAa;AACnB,kGAAA,KAAK,OAAY;AAUnB,IAAY,YAOX;AAPD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,mCAAmB,CAAA;IACnB,uCAAuB,CAAA;IACvB,iCAAiB,CAAA;IACjB,qDAAqC,CAAA;AACvC,CAAC,EAPW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAOvB;AAED,IAAY,WAUX;AAVD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;IACnB,kCAAmB,CAAA;IACnB,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;IACjB,oDAAqC,CAAA;IACrC,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;AACf,CAAC,EAVW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAUtB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alanszp/queue",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "14.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": "^
|
|
27
|
-
"@alanszp/core": "^
|
|
28
|
-
"@alanszp/logger": "^
|
|
29
|
-
"@alanszp/shared-context": "^
|
|
30
|
-
"@alanszp/validations": "^
|
|
26
|
+
"@alanszp/audit": "^14.0.0",
|
|
27
|
+
"@alanszp/core": "^14.0.0",
|
|
28
|
+
"@alanszp/logger": "^14.0.0",
|
|
29
|
+
"@alanszp/shared-context": "^14.0.0",
|
|
30
|
+
"@alanszp/validations": "^14.0.0",
|
|
31
31
|
"@paralleldrive/cuid2": "^2.2.2",
|
|
32
|
-
"bullmq": "^
|
|
33
|
-
"ioredis": "^5.2
|
|
32
|
+
"bullmq": "^5.4.4",
|
|
33
|
+
"ioredis": "^5.3.2",
|
|
34
34
|
"lodash": "^4.17.21"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "da5adb213c30d9509ccdc0c182d6c7a130a38612"
|
|
37
37
|
}
|