@shrub/queue 0.5.71 → 0.5.74
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 +1 -0
- package/dist/index.js +2 -1
- package/dist/manager.d.ts +28 -0
- package/dist/manager.js +46 -0
- package/dist/queue.d.ts +4 -1
- package/dist/queue.js +10 -1
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -10,7 +10,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./manager"), exports);
|
|
13
14
|
__exportStar(require("./module"), exports);
|
|
14
15
|
__exportStar(require("./queue"), exports);
|
|
15
16
|
__exportStar(require("./service"), exports);
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLDJDQUF5QjtBQUN6QiwwQ0FBd0I7QUFDeEIsNENBQTBCIn0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { IJob, IJobRepeatOptions, IWorker, WorkerCallback } from "./queue";
|
|
2
|
+
import { IQueueService } from "./service";
|
|
3
|
+
export declare type JobData<T> = T extends JobType<infer TData> ? TData : never;
|
|
4
|
+
export declare type JobReturnValue<T> = T extends JobType<any, infer TReturnValue> ? TReturnValue : never;
|
|
5
|
+
export declare type JobType<TData = any, TReturnValue = void> = {};
|
|
6
|
+
export declare type JobTypes = {
|
|
7
|
+
[key: string]: JobType<any>;
|
|
8
|
+
};
|
|
9
|
+
/** Defines the contract for the queue manager. */
|
|
10
|
+
export interface IQueueManager<TJobTypes extends JobTypes> {
|
|
11
|
+
add<T extends keyof TJobTypes>(name: T, data: JobData<TJobTypes[T]>, repeat?: IJobRepeatOptions): Promise<IJob<JobData<TJobTypes[T]>, JobReturnValue<TJobTypes[T]>> | undefined>;
|
|
12
|
+
close<T extends keyof TJobTypes>(name?: T): Promise<void>;
|
|
13
|
+
dispose(): Promise<void>;
|
|
14
|
+
process<T extends keyof TJobTypes>(name: T, callback: WorkerCallback<JobData<TJobTypes[T]>, JobReturnValue<TJobTypes[T]>>): IWorker<JobData<TJobTypes[T]>, JobReturnValue<TJobTypes[T]>> | undefined;
|
|
15
|
+
}
|
|
16
|
+
/** A helper class responsible for managing multiple queues. The manager will maintain a single instance of each queue as they are referenced. */
|
|
17
|
+
export declare class QueueManager<TJobTypes extends JobTypes> implements IQueueManager<TJobTypes> {
|
|
18
|
+
private readonly queueService;
|
|
19
|
+
private readonly queuePrefix;
|
|
20
|
+
private readonly queues;
|
|
21
|
+
private isDisposed;
|
|
22
|
+
constructor(queueService: IQueueService, queuePrefix?: string);
|
|
23
|
+
add<T extends keyof TJobTypes>(name: T, data: JobData<TJobTypes[T]>, repeat?: IJobRepeatOptions): Promise<IJob<JobData<TJobTypes[T]>, JobReturnValue<TJobTypes[T]>> | undefined>;
|
|
24
|
+
close<T extends keyof TJobTypes>(name?: T): Promise<void>;
|
|
25
|
+
dispose(): Promise<void>;
|
|
26
|
+
process<T extends keyof TJobTypes>(name: T, callback: WorkerCallback<JobData<TJobTypes[T]>, JobReturnValue<TJobTypes[T]>>): IWorker<JobData<TJobTypes[T]>, JobReturnValue<TJobTypes[T]>> | undefined;
|
|
27
|
+
private getQueue;
|
|
28
|
+
}
|
package/dist/manager.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueueManager = void 0;
|
|
4
|
+
/** A helper class responsible for managing multiple queues. The manager will maintain a single instance of each queue as they are referenced. */
|
|
5
|
+
class QueueManager {
|
|
6
|
+
constructor(queueService, queuePrefix = "") {
|
|
7
|
+
this.queueService = queueService;
|
|
8
|
+
this.queuePrefix = queuePrefix;
|
|
9
|
+
this.queues = new Map();
|
|
10
|
+
this.isDisposed = false;
|
|
11
|
+
}
|
|
12
|
+
add(name, data, repeat) {
|
|
13
|
+
return !this.isDisposed ? this.getQueue(name).add({ name: name.toString(), data, repeat }) : Promise.resolve(undefined);
|
|
14
|
+
}
|
|
15
|
+
async close(name) {
|
|
16
|
+
if (name) {
|
|
17
|
+
const queue = this.queues.get(name);
|
|
18
|
+
this.queues.delete(name);
|
|
19
|
+
return queue ? queue.close() : Promise.resolve();
|
|
20
|
+
}
|
|
21
|
+
const queues = Array.from(this.queues.values());
|
|
22
|
+
this.queues.clear();
|
|
23
|
+
await Promise.all(queues.map(queue => queue.close()));
|
|
24
|
+
}
|
|
25
|
+
dispose() {
|
|
26
|
+
if (!this.isDisposed) {
|
|
27
|
+
this.isDisposed = true;
|
|
28
|
+
return this.close();
|
|
29
|
+
}
|
|
30
|
+
return Promise.resolve();
|
|
31
|
+
}
|
|
32
|
+
process(name, callback) {
|
|
33
|
+
return !this.isDisposed ? this.getQueue(name).createWorker(callback) : undefined;
|
|
34
|
+
}
|
|
35
|
+
getQueue(jobName) {
|
|
36
|
+
const queueName = this.queuePrefix + jobName;
|
|
37
|
+
let queue = this.queues.get(queueName);
|
|
38
|
+
if (!queue) {
|
|
39
|
+
queue = this.queueService.getQueue(queueName);
|
|
40
|
+
this.queues.set(queueName, queue);
|
|
41
|
+
}
|
|
42
|
+
return queue;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.QueueManager = QueueManager;
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdCQSxpSkFBaUo7QUFDakosTUFBYSxZQUFZO0lBSXJCLFlBQ3FCLFlBQTJCLEVBQzNCLGNBQWMsRUFBRTtRQURoQixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQUxwQixXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFDckQsZUFBVSxHQUFHLEtBQUssQ0FBQztJQUszQixDQUFDO0lBRUQsR0FBRyxDQUE0QixJQUFPLEVBQUUsSUFBMkIsRUFBRSxNQUEwQjtRQUMzRixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUE0QixJQUFRO1FBQzNDLElBQUksSUFBSSxFQUFFO1lBQ04sTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3BEO1FBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN2QjtRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxPQUFPLENBQTRCLElBQU8sRUFBRSxRQUE2RTtRQUNySCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRixDQUFDO0lBRU8sUUFBUSxDQUFDLE9BQXdCO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBQzdDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKO0FBakRELG9DQWlEQyJ9
|
package/dist/queue.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IEvent } from "@sprig/event-emitter";
|
|
2
|
-
export declare type WorkerCallback<TData = any, TReturnValue =
|
|
2
|
+
export declare type WorkerCallback<TData = any, TReturnValue = void> = (job: IJob<TData, TReturnValue>) => Promise<TReturnValue>;
|
|
3
3
|
/** Defines the API for a queue. */
|
|
4
4
|
export interface IQueue<TData = any, TReturnValue = any> {
|
|
5
5
|
/** The name of the queue. */
|
|
@@ -15,6 +15,8 @@ export interface IQueue<TData = any, TReturnValue = any> {
|
|
|
15
15
|
}
|
|
16
16
|
/** Responsible for providing access to a queue. */
|
|
17
17
|
export interface IQueueAdapter {
|
|
18
|
+
/** Optional callback to dispose the adapter. */
|
|
19
|
+
readonly dispose?: () => Promise<void>;
|
|
18
20
|
/** Gets a queue with the specified name or undefined if the adapter does not support/recognize the given queue name. */
|
|
19
21
|
getQueue(name: string): IQueue | undefined;
|
|
20
22
|
}
|
|
@@ -101,4 +103,5 @@ export declare class QueueAdapterCollection {
|
|
|
101
103
|
private readonly adapters;
|
|
102
104
|
addQueueAdapter(adapter: IQueueAdapter): void;
|
|
103
105
|
asQueueAdapter(): IQueueAdapter;
|
|
106
|
+
dispose(): Promise<void>;
|
|
104
107
|
}
|
package/dist/queue.js
CHANGED
|
@@ -39,6 +39,15 @@ class QueueAdapterCollection {
|
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
|
+
async dispose() {
|
|
43
|
+
const promises = [];
|
|
44
|
+
for (const adapter of this.adapters.splice(0)) {
|
|
45
|
+
if (adapter.dispose) {
|
|
46
|
+
promises.push(adapter.dispose());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
await Promise.all(promises);
|
|
50
|
+
}
|
|
42
51
|
}
|
|
43
52
|
exports.QueueAdapterCollection = QueueAdapterCollection;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQW9EO0FBd0dwRCxzSEFBc0g7QUFDdEgsTUFBc0IsWUFBWTtJQUc5QixZQUFZLGlCQUEyQjtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksaUNBQXFCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsaUJBQTJCO1FBQzVDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDM0YsQ0FBQztJQUlTLGdCQUFnQixDQUFDLGlCQUFrRDtRQUN6RSxPQUFPLE9BQU8saUJBQWlCLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUN6RyxDQUFDO0NBQ0o7QUFwQkQsb0NBb0JDO0FBRUQseUhBQXlIO0FBQ3pILE1BQWEsc0JBQXNCO0lBQW5DO1FBQ3FCLGFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBZ0NwRCxDQUFDO0lBOUJHLGVBQWUsQ0FBQyxPQUFzQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU87WUFDSCxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2IsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNqQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNyQyxJQUFJLEtBQUssRUFBRTt3QkFDUCxPQUFPLEtBQUssQ0FBQztxQkFDaEI7aUJBQ0o7Z0JBRUQsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDVCxNQUFNLFFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBRXJDLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO2dCQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO1NBQ0o7UUFFRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNKO0FBakNELHdEQWlDQyJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shrub/queue",
|
|
3
3
|
"description": "Provides a basic abstraction and support for job/task queues.",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.74",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"test": "jest"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@shrub/core": "0.5.
|
|
29
|
-
"@shrub/logging": "0.5.
|
|
28
|
+
"@shrub/core": "0.5.74",
|
|
29
|
+
"@shrub/logging": "0.5.74",
|
|
30
30
|
"@sprig/event-emitter": "^0.2.2"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "6fbb76470201c9ff105fc779ff225caae4b190fb"
|
|
33
33
|
}
|