@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 CHANGED
@@ -1,3 +1,4 @@
1
+ export * from "./manager";
1
2
  export * from "./module";
2
3
  export * from "./queue";
3
4
  export * from "./service";
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXlCO0FBQ3pCLDBDQUF3QjtBQUN4Qiw0Q0FBMEIifQ==
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
+ }
@@ -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 = any> = (job: IJob<TData, TReturnValue>) => Promise<void | 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQW9EO0FBc0dwRCxzSEFBc0g7QUFDdEgsTUFBc0IsWUFBWTtJQUc5QixZQUFZLGlCQUEyQjtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksaUNBQXFCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsaUJBQTJCO1FBQzVDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDM0YsQ0FBQztJQUlTLGdCQUFnQixDQUFDLGlCQUFrRDtRQUN6RSxPQUFPLE9BQU8saUJBQWlCLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUN6RyxDQUFDO0NBQ0o7QUFwQkQsb0NBb0JDO0FBRUQseUhBQXlIO0FBQ3pILE1BQWEsc0JBQXNCO0lBQW5DO1FBQ3FCLGFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBb0JwRCxDQUFDO0lBbEJHLGVBQWUsQ0FBQyxPQUFzQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU87WUFDSCxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2IsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNqQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNyQyxJQUFJLEtBQUssRUFBRTt3QkFDUCxPQUFPLEtBQUssQ0FBQztxQkFDaEI7aUJBQ0o7Z0JBRUQsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0o7QUFyQkQsd0RBcUJDIn0=
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.71",
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.71",
29
- "@shrub/logging": "0.5.71",
28
+ "@shrub/core": "0.5.74",
29
+ "@shrub/logging": "0.5.74",
30
30
  "@sprig/event-emitter": "^0.2.2"
31
31
  },
32
- "gitHead": "d9539767f177e4f88d1daccb3205c39316056587"
32
+ "gitHead": "6fbb76470201c9ff105fc779ff225caae4b190fb"
33
33
  }