@alanszp/queue 9.0.0 → 9.2.4

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,4 +1,5 @@
1
1
  export * from "./queue/createQueue";
2
+ export * from "./queue/queue";
2
3
  export * from "./connectionManager";
3
4
  export * from "./shutdownQueue";
4
5
  export * from "./types";
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./queue/createQueue"), exports);
14
+ __exportStar(require("./queue/queue"), exports);
14
15
  __exportStar(require("./connectionManager"), exports);
15
16
  __exportStar(require("./shutdownQueue"), exports);
16
17
  __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,sDAAoC;AACpC,kDAAgC;AAChC,0CAAwB;AACxB,2CAAyB;AACzB,kDAAgC;AAChC,4DAA0C"}
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"}
@@ -1,13 +1,14 @@
1
- import { ConnectionOptions, JobData, QueueOptions } from "../types";
2
- import { JobsOptions } from "bullmq";
1
+ import { Job, JobsOptions } from "bullmq";
3
2
  import { SharedContext } from "@alanszp/shared-context";
3
+ import { ConnectionOptions, JobData, QueueOptions } from "../types";
4
4
  export declare class Queue<JobType = JobData> {
5
5
  private _queue;
6
6
  private name;
7
7
  private getSharedContext;
8
8
  constructor(connection: ConnectionOptions, name: string, prefix: string, getSharedContext: () => SharedContext, queueOptions?: QueueOptions);
9
- publishJob(job: JobType, opts?: JobsOptions): Promise<void>;
10
- publishBulkJob(jobDatas: JobType[]): Promise<void>;
9
+ getName(): string;
10
+ publishJob(job: JobType, opts?: JobsOptions): Promise<Job<JobType>>;
11
+ publishBulkJob(jobDatas: JobType[]): Promise<Job<JobType>[]>;
11
12
  publishBulkJobWithOptions(jobDefinitions: {
12
13
  jobData: JobType;
13
14
  opts: JobsOptions;
@@ -34,18 +34,21 @@ class Queue {
34
34
  connection,
35
35
  }, queueOptions || {})), { prefix: `{${prefix}}:${BULL_PREFIX}` }));
36
36
  }
37
+ getName() {
38
+ return this.name;
39
+ }
37
40
  publishJob(job, opts) {
38
41
  return __awaiter(this, void 0, void 0, function* () {
39
42
  const context = this.getSharedContext();
40
43
  const lid = context.getLifecycleId();
41
44
  const lch = context.getLifecycleChain();
42
- yield this.queue.add(this.name, Object.assign(Object.assign({}, job), { lid, lch }), opts);
45
+ return this.queue.add(this.name, Object.assign(Object.assign({}, job), { lid, lch }), opts);
43
46
  });
44
47
  }
45
48
  publishBulkJob(jobDatas) {
46
49
  return __awaiter(this, void 0, void 0, function* () {
47
50
  const jobs = jobDatas.map((data) => ({ name: this.name, data }));
48
- yield this.queue.addBulk(jobs);
51
+ return this.queue.addBulk(jobs);
49
52
  });
50
53
  }
51
54
  publishBulkJobWithOptions(jobDefinitions) {
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;AAC/B,oCAA8E;AAI9E,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,wCAAwC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACnE,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAE5C,MAAa,KAAK;IAOhB,YACE,UAA6B,EAC7B,IAAY,EACZ,MAAc,EACd,gBAAqC,EACrC,YAA2B;QAE3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAEzC,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAQ,CAAU,IAAI,kCACnC,IAAA,cAAK,EACN;YACE,iBAAiB,EAAE;gBACjB,gBAAgB,EAAE;oBAChB,GAAG,EAAE,wCAAwC;oBAC7C,KAAK,EAAE,+BAA+B;iBACvC;gBACD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,IAAI;iBACZ;aACF;YACD,UAAU;SACX,EACD,YAAY,IAAI,EAAE,CACnB,GACE,EAAE,MAAM,EAAE,IAAI,MAAM,KAAK,WAAW,EAAE,EAAE,EAC3C,CAAC;IACL,CAAC;IAEK,UAAU,CAAC,GAAY,EAAE,IAAkB;;YAC/C,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,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,kCAAO,GAAG,KAAE,GAAG,EAAE,GAAG,KAAI,IAAI,CAAC,CAAC;QAC9D,CAAC;KAAA;IAEK,cAAc,CAAC,QAAmB;;YACtC,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,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;KAAA;IAEK,yBAAyB,CAC7B,cAAyD;;YAEzD,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,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;KAAA;IAEK,KAAK;;YACT,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;KAAA;IAED,IAAY,KAAK;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAtED,sBAsEC"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;AAG/B,oCAA8E;AAE9E,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,wCAAwC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACnE,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAE5C,MAAa,KAAK;IAOhB,YACE,UAA6B,EAC7B,IAAY,EACZ,MAAc,EACd,gBAAqC,EACrC,YAA2B;QAE3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAEzC,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAQ,CAAU,IAAI,kCACnC,IAAA,cAAK,EACN;YACE,iBAAiB,EAAE;gBACjB,gBAAgB,EAAE;oBAChB,GAAG,EAAE,wCAAwC;oBAC7C,KAAK,EAAE,+BAA+B;iBACvC;gBACD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,IAAI;iBACZ;aACF;YACD,UAAU;SACX,EACD,YAAY,IAAI,EAAE,CACnB,GACE,EAAE,MAAM,EAAE,IAAI,MAAM,KAAK,WAAW,EAAE,EAAE,EAC3C,CAAC;IACL,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEK,UAAU,CAAC,GAAY,EAAE,IAAkB;;YAC/C,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,QAAmB;;YACtC,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,cAAyD;;YAEzD,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,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;KAAA;IAEK,KAAK;;YACT,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;KAAA;IAED,IAAY,KAAK;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AA1ED,sBA0EC"}
package/dist/types.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { ConnectionOptions, RedisOptions, Job, Worker as RawWorker, WorkerOptions, Queue as RawQueue, QueueOptions, JobsOptions, } from "bullmq";
2
- export declare type JobData = any;
2
+ export declare type JobData = unknown;
3
+ export declare type JobReturnValue = unknown;
@@ -1,5 +1,5 @@
1
1
  import { ILogger } from "@alanszp/logger";
2
- import { JobData, Job, RawWorker, WorkerOptions } from "../types";
2
+ import { JobData, Job, RawWorker, WorkerOptions, JobReturnValue } from "../types";
3
3
  import { SharedContext } from "@alanszp/shared-context";
4
4
  import { Audit } from "@alanszp/audit";
5
5
  export interface WorkerStatus {
@@ -15,25 +15,25 @@ export interface WorkerContext {
15
15
  baseLogger: ILogger;
16
16
  audit: Audit;
17
17
  }
18
- interface Worker<T = JobData> {
19
- handleJobFailed?(job: Job<T>, error: Error): Promise<void> | void;
20
- handleJobCompleted?(job: Job<T>): Promise<void> | void;
18
+ interface Worker<Data = JobData, ReturnValue = JobReturnValue> {
19
+ handleJobFailed?(job: Job<Data, ReturnValue>, error: Error): Promise<void> | void;
20
+ handleJobCompleted?(job: Job<Data, ReturnValue>): Promise<void> | void;
21
21
  handleJobError?(error: Error): Promise<void> | void;
22
22
  }
23
- declare abstract class Worker<T = JobData> {
23
+ declare abstract class Worker<Data = JobData, ReturnValue = unknown> {
24
24
  private _worker;
25
25
  private _queue;
26
26
  private getLogger;
27
27
  constructor();
28
- abstract process(job: Job<T>): Promise<void>;
28
+ abstract process(job: Job<Data, ReturnValue>): Promise<ReturnValue>;
29
29
  abstract setup(): WorkerSetup;
30
30
  abstract getContext(): WorkerContext;
31
31
  close(): Promise<void>;
32
32
  get status(): WorkerStatus;
33
33
  get id(): RawWorker["id"];
34
34
  private processJob;
35
- processFailed(job: Job<T>, error: Error): Promise<void>;
36
- processCompleted(job: Job<T>): Promise<void>;
35
+ processFailed(job: Job<Data, ReturnValue>, error: Error): Promise<void>;
36
+ processCompleted(job: Job<Data, ReturnValue>, returnValue: ReturnValue): Promise<void>;
37
37
  processError(error: Error): Promise<void>;
38
38
  run(): Promise<void>;
39
39
  protected registerHooks(): void;
@@ -40,7 +40,7 @@ class Worker {
40
40
  queue: this.queueFullName,
41
41
  job,
42
42
  });
43
- yield this.process(job);
43
+ return this.process(job);
44
44
  }));
45
45
  }
46
46
  processFailed(job, error) {
@@ -55,11 +55,12 @@ class Worker {
55
55
  }
56
56
  });
57
57
  }
58
- processCompleted(job) {
58
+ processCompleted(job, returnValue) {
59
59
  return __awaiter(this, void 0, void 0, function* () {
60
60
  this.getLogger().info("worker.job.completed", {
61
61
  queue: this.queueFullName,
62
62
  job,
63
+ returnValue,
63
64
  });
64
65
  if (this.handleJobCompleted) {
65
66
  yield this.handleJobCompleted(job);
@@ -101,7 +102,7 @@ class Worker {
101
102
  // on error: handle unhandled exceptions
102
103
  this.worker.on("error", (error) => this.processError(error));
103
104
  // on completed: allow to do something else after a job is completed
104
- this.worker.on("completed", (job) => this.processCompleted(job));
105
+ this.worker.on("completed", (job, result) => this.processCompleted(job, result));
105
106
  // on failed: when the process fails with an exception it is possible to listen for the "failed" event
106
107
  this.worker.on("failed", (job, error) => this.processFailed(job, error));
107
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import { Job, JobData } from "bullmq";
2
2
  import { WorkerContext } from "../worker/worker";
3
- export declare function withContext<T = JobData>(workerContext: WorkerContext, executor: (job: Job<T>) => Promise<void>): (job: Job<T>) => Promise<void>;
3
+ import { JobReturnValue } from "../types";
4
+ export declare function withContext<T = JobData, ReturnValue = JobReturnValue>(workerContext: WorkerContext, executor: (job: Job<T>) => Promise<ReturnValue>): (job: Job<T>) => Promise<ReturnValue>;
@@ -1 +1 @@
1
- {"version":3,"file":"withContext.js","sourceRoot":"","sources":["../../src/wrappers/withContext.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,4DAAyD;AAIzD,SAAgB,WAAW,CACzB,aAA4B,EAC5B,QAAwC;IAExC,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAsC,CAAC;QAChE,OAAO,aAAa,CAAC,aAAa,CAAC,GAAG,CACpC,GAAS,EAAE;YACT,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAA,EACD;YACE,MAAM,EAAE,aAAa,CAAC,UAAU;YAChC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE;YACtC,WAAW,EAAE,GAAG,IAAI,IAAA,cAAI,GAAE;YAC1B,cAAc,EAAE,GAAG,IAAI,IAAA,6BAAa,GAAE;YACtC,SAAS,EAAE,IAAA,cAAI,GAAE;SAClB,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAnBD,kCAmBC"}
1
+ {"version":3,"file":"withContext.js","sourceRoot":"","sources":["../../src/wrappers/withContext.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,4DAAyD;AAKzD,SAAgB,WAAW,CACzB,aAA4B,EAC5B,QAA+C;IAE/C,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAsC,CAAC;QAChE,OAAO,aAAa,CAAC,aAAa,CAAC,GAAG,CACpC,GAAS,EAAE;YACT,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAA,EACD;YACE,MAAM,EAAE,aAAa,CAAC,UAAU;YAChC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE;YACtC,WAAW,EAAE,GAAG,IAAI,IAAA,cAAI,GAAE;YAC1B,cAAc,EAAE,GAAG,IAAI,IAAA,6BAAa,GAAE;YACtC,SAAS,EAAE,IAAA,cAAI,GAAE;SAClB,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAnBD,kCAmBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alanszp/queue",
3
- "version": "9.0.0",
3
+ "version": "9.2.4",
4
4
  "description": "Workers and queues",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -32,5 +32,5 @@
32
32
  "ioredis": "^5.2.3",
33
33
  "lodash": "^4.17.21"
34
34
  },
35
- "gitHead": "8af112076306ffc2fe14b6056aad1f26908a9394"
35
+ "gitHead": "0f35519e3073a3b4aa2b0060303eacf228d321ee"
36
36
  }
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./queue/createQueue";
2
+ export * from "./queue/queue";
2
3
  export * from "./connectionManager";
3
4
  export * from "./shutdownQueue";
4
5
  export * from "./types";
@@ -1,7 +1,7 @@
1
1
  import { merge } from "lodash";
2
- import { ConnectionOptions, JobData, QueueOptions, RawQueue } from "../types";
3
- import { JobsOptions } from "bullmq";
2
+ import { Job, JobsOptions } from "bullmq";
4
3
  import { SharedContext } from "@alanszp/shared-context";
4
+ import { ConnectionOptions, JobData, QueueOptions, RawQueue } from "../types";
5
5
 
6
6
  const BULL_PREFIX = "b";
7
7
 
@@ -48,16 +48,20 @@ export class Queue<JobType = JobData> {
48
48
  });
49
49
  }
50
50
 
51
- async publishJob(job: JobType, opts?: JobsOptions): Promise<void> {
51
+ public getName(): string {
52
+ return this.name;
53
+ }
54
+
55
+ async publishJob(job: JobType, opts?: JobsOptions): Promise<Job<JobType>> {
52
56
  const context = this.getSharedContext();
53
57
  const lid = context.getLifecycleId();
54
58
  const lch = context.getLifecycleChain();
55
- await this.queue.add(this.name, { ...job, lid, lch }, opts);
59
+ return this.queue.add(this.name, { ...job, lid, lch }, opts);
56
60
  }
57
61
 
58
- async publishBulkJob(jobDatas: JobType[]): Promise<void> {
62
+ async publishBulkJob(jobDatas: JobType[]): Promise<Job<JobType>[]> {
59
63
  const jobs = jobDatas.map((data) => ({ name: this.name, data }));
60
- await this.queue.addBulk(jobs);
64
+ return this.queue.addBulk(jobs);
61
65
  }
62
66
 
63
67
  async publishBulkJobWithOptions(
package/src/types.ts CHANGED
@@ -10,6 +10,6 @@ export {
10
10
  JobsOptions,
11
11
  } from "bullmq";
12
12
 
13
- // This may seems odd but actual Job data type from bullmq is any 🤷‍♂️
14
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
- export type JobData = any;
13
+ export type JobData = unknown;
14
+
15
+ export type JobReturnValue = unknown;
@@ -1,6 +1,12 @@
1
1
  import { ILogger } from "@alanszp/logger";
2
2
  import { ConnectionManager } from "../connectionManager";
3
- import { JobData, Job, RawWorker, WorkerOptions } from "../types";
3
+ import {
4
+ JobData,
5
+ Job,
6
+ RawWorker,
7
+ WorkerOptions,
8
+ JobReturnValue,
9
+ } from "../types";
4
10
  import { SharedContext } from "@alanszp/shared-context";
5
11
  import { Audit } from "@alanszp/audit";
6
12
  import { withContext } from "../wrappers/withContext";
@@ -23,9 +29,12 @@ export interface WorkerContext {
23
29
 
24
30
  // optional methods
25
31
 
26
- interface Worker<T = JobData> {
27
- handleJobFailed?(job: Job<T>, error: Error): Promise<void> | void;
28
- handleJobCompleted?(job: Job<T>): Promise<void> | void;
32
+ interface Worker<Data = JobData, ReturnValue = JobReturnValue> {
33
+ handleJobFailed?(
34
+ job: Job<Data, ReturnValue>,
35
+ error: Error
36
+ ): Promise<void> | void;
37
+ handleJobCompleted?(job: Job<Data, ReturnValue>): Promise<void> | void;
29
38
  handleJobError?(error: Error): Promise<void> | void;
30
39
  }
31
40
 
@@ -33,7 +42,7 @@ type QueueName = { name: string; prefix: string; namespace: string };
33
42
 
34
43
  const BULL_PREFIX = "b";
35
44
 
36
- abstract class Worker<T = JobData> {
45
+ abstract class Worker<Data = JobData, ReturnValue = unknown> {
37
46
  private _worker: RawWorker;
38
47
 
39
48
  private _queue: QueueName;
@@ -48,7 +57,7 @@ abstract class Worker<T = JobData> {
48
57
 
49
58
  const prefix = connectionManager.getServiceName();
50
59
  this._queue = { name, prefix, namespace: BULL_PREFIX };
51
- this._worker = new RawWorker<T>(name, this.processJob(), {
60
+ this._worker = new RawWorker<Data, ReturnValue>(name, this.processJob(), {
52
61
  autorun: false,
53
62
  connection: connectionManager.getConnection(),
54
63
  prefix: `{${prefix}}:${BULL_PREFIX}`,
@@ -60,7 +69,7 @@ abstract class Worker<T = JobData> {
60
69
  }
61
70
 
62
71
  // Handle job
63
- abstract process(job: Job<T>): Promise<void>;
72
+ abstract process(job: Job<Data, ReturnValue>): Promise<ReturnValue>;
64
73
 
65
74
  abstract setup(): WorkerSetup;
66
75
 
@@ -78,17 +87,20 @@ abstract class Worker<T = JobData> {
78
87
  return this.worker.id;
79
88
  }
80
89
 
81
- private processJob(): (job: Job<T>) => Promise<void> {
90
+ private processJob(): (job: Job<Data, ReturnValue>) => Promise<ReturnValue> {
82
91
  return withContext(this.getContext(), async (job) => {
83
92
  this.getLogger().info(`worker.process.job_received`, {
84
93
  queue: this.queueFullName,
85
94
  job,
86
95
  });
87
- await this.process(job);
96
+ return this.process(job);
88
97
  });
89
98
  }
90
99
 
91
- async processFailed(job: Job<T>, error: Error): Promise<void> {
100
+ async processFailed(
101
+ job: Job<Data, ReturnValue>,
102
+ error: Error
103
+ ): Promise<void> {
92
104
  this.getLogger().warn("worker.job.failed", {
93
105
  queue: this.queueFullName,
94
106
  job,
@@ -99,10 +111,14 @@ abstract class Worker<T = JobData> {
99
111
  }
100
112
  }
101
113
 
102
- async processCompleted(job: Job<T>): Promise<void> {
114
+ async processCompleted(
115
+ job: Job<Data, ReturnValue>,
116
+ returnValue: ReturnValue
117
+ ): Promise<void> {
103
118
  this.getLogger().info("worker.job.completed", {
104
119
  queue: this.queueFullName,
105
120
  job,
121
+ returnValue,
106
122
  });
107
123
  if (this.handleJobCompleted) {
108
124
  await this.handleJobCompleted(job);
@@ -142,9 +158,13 @@ abstract class Worker<T = JobData> {
142
158
  // on error: handle unhandled exceptions
143
159
  this.worker.on("error", (error: Error) => this.processError(error));
144
160
  // on completed: allow to do something else after a job is completed
145
- this.worker.on("completed", (job: Job<T>) => this.processCompleted(job));
161
+ this.worker.on(
162
+ "completed",
163
+ (job: Job<Data, ReturnValue>, result: ReturnValue) =>
164
+ this.processCompleted(job, result)
165
+ );
146
166
  // on failed: when the process fails with an exception it is possible to listen for the "failed" event
147
- this.worker.on("failed", (job: Job<T>, error: Error) =>
167
+ this.worker.on("failed", (job: Job<Data, ReturnValue>, error: Error) =>
148
168
  this.processFailed(job, error)
149
169
  );
150
170
  }
@@ -2,11 +2,12 @@ import cuid from "cuid";
2
2
  import { appIdentifier } from "../helpers/appIdentifier";
3
3
  import { Job, JobData } from "bullmq";
4
4
  import { WorkerContext } from "../worker/worker";
5
+ import { JobReturnValue } from "../types";
5
6
 
6
- export function withContext<T = JobData>(
7
+ export function withContext<T = JobData, ReturnValue = JobReturnValue>(
7
8
  workerContext: WorkerContext,
8
- executor: (job: Job<T>) => Promise<void>
9
- ): (job: Job<T>) => Promise<void> {
9
+ executor: (job: Job<T>) => Promise<ReturnValue>
10
+ ): (job: Job<T>) => Promise<ReturnValue> {
10
11
  return (job) => {
11
12
  const { lid, lch } = job.data as { lid?: string; lch?: string };
12
13
  return workerContext.sharedContext.run(