@anchan828/nest-cloud-run-queue-worker 2.4.1 → 3.1.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.
@@ -4,5 +4,3 @@ export declare const QUEUE_WORKER_PROCESS_DECORATOR = "QUEUE_WORKER_PROCESS_DECO
4
4
  export declare const ERROR_INVALID_MESSAGE_FORMAT = "Invalid message format.";
5
5
  export declare const ERROR_QUEUE_WORKER_NAME_NOT_FOUND = "QueueWorker name not found.";
6
6
  export declare const ERROR_WORKER_NOT_FOUND: (name: string) => string;
7
- export declare const UNHANDLED_QUEUE_WORKER_NAME = "__unhandled_queue_worker";
8
- export declare const ALL_WORKERS_QUEUE_WORKER_NAME = "__all_queue_workers";
package/dist/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ALL_WORKERS_QUEUE_WORKER_NAME = exports.UNHANDLED_QUEUE_WORKER_NAME = exports.ERROR_WORKER_NOT_FOUND = exports.ERROR_QUEUE_WORKER_NAME_NOT_FOUND = exports.ERROR_INVALID_MESSAGE_FORMAT = exports.QUEUE_WORKER_PROCESS_DECORATOR = exports.QUEUE_WORKER_DECORATOR = exports.QUEUE_WORKER_MODULE_OPTIONS = void 0;
3
+ exports.ERROR_WORKER_NOT_FOUND = exports.ERROR_QUEUE_WORKER_NAME_NOT_FOUND = exports.ERROR_INVALID_MESSAGE_FORMAT = exports.QUEUE_WORKER_PROCESS_DECORATOR = exports.QUEUE_WORKER_DECORATOR = exports.QUEUE_WORKER_MODULE_OPTIONS = void 0;
4
4
  exports.QUEUE_WORKER_MODULE_OPTIONS = "QUEUE_WORKER_MODULE_OPTIONS";
5
5
  exports.QUEUE_WORKER_DECORATOR = "QUEUE_WORKER_DECORATOR";
6
6
  exports.QUEUE_WORKER_PROCESS_DECORATOR = "QUEUE_WORKER_PROCESS_DECORATOR";
@@ -9,5 +9,3 @@ exports.ERROR_INVALID_MESSAGE_FORMAT = "Invalid message format.";
9
9
  exports.ERROR_QUEUE_WORKER_NAME_NOT_FOUND = "QueueWorker name not found.";
10
10
  const ERROR_WORKER_NOT_FOUND = (name) => `QueueWorker '${name}' not found.`;
11
11
  exports.ERROR_WORKER_NOT_FOUND = ERROR_WORKER_NOT_FOUND;
12
- exports.UNHANDLED_QUEUE_WORKER_NAME = "__unhandled_queue_worker";
13
- exports.ALL_WORKERS_QUEUE_WORKER_NAME = "__all_queue_workers";
@@ -14,6 +14,7 @@ const common_1 = require("@nestjs/common");
14
14
  const core_1 = require("@nestjs/core");
15
15
  const metadata_scanner_1 = require("@nestjs/core/metadata-scanner");
16
16
  const constants_1 = require("./constants");
17
+ const util_1 = require("./util");
17
18
  let QueueWorkerExplorerService = class QueueWorkerExplorerService {
18
19
  constructor(discoveryService, metadataScanner) {
19
20
  this.discoveryService = discoveryService;
@@ -22,9 +23,9 @@ let QueueWorkerExplorerService = class QueueWorkerExplorerService {
22
23
  explore() {
23
24
  const workers = this.getWorkers();
24
25
  for (const worker of workers) {
25
- worker.processors = this.getQueueWorkerProcessors(worker);
26
+ worker.processors = (0, util_1.sortByPriority)(this.getQueueWorkerProcessors(worker));
26
27
  }
27
- return workers;
28
+ return (0, util_1.sortByPriority)(workers);
28
29
  }
29
30
  getWorkers() {
30
31
  const metadata = [];
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { ALL_WORKERS_QUEUE_WORKER_NAME as ALL_QUEUE_WORKERS, UNHANDLED_QUEUE_WORKER_NAME as UNHANDLED_QUEUE_WORKER, } from "./constants";
2
1
  export { QueueWorker, QueueWorkerProcess } from "./decorators";
3
- export { QueueWorkerControllerInterface, QueueWorkerControllerMetadata, QueueWorkerDecodedMessage, QueueWorkerExtraConfig, QueueWorkerModuleAsyncOptions, QueueWorkerModuleOptions, QueueWorkerModuleOptionsFactory, QueueWorkerOptions, QueueWorkerProcessFailureResult, QueueWorkerProcessOptions, QueueWorkerProcessResult, QueueWorkerProcessSuccessResult, QueueWorkerProcessor, QueueWorkerProcessorStatus, QueueWorkerRawMessage, QueueWorkerReceivedMessage, } from "./interfaces";
2
+ export { QueueWorkerControllerInterface, QueueWorkerControllerMetadata, QueueWorkerDecodedMessage, QueueWorkerModuleAsyncOptions, QueueWorkerModuleOptions, QueueWorkerModuleOptionsFactory, QueueWorkerOptions, QueueWorkerProcessFailureResult, QueueWorkerProcessOptions, QueueWorkerProcessResult, QueueWorkerProcessSuccessResult, QueueWorkerProcessor, QueueWorkerRawMessage, QueueWorkerReceivedMessage, } from "./interfaces";
4
3
  export { decodeMessage } from "./util";
4
+ export { Processor, Worker } from "./worker";
5
5
  export { QueueWorkerModule } from "./worker.module";
6
6
  export { QueueWorkerService } from "./worker.service";
package/dist/index.js CHANGED
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueueWorkerService = exports.QueueWorkerModule = exports.decodeMessage = exports.QueueWorkerProcessorStatus = exports.QueueWorkerProcess = exports.QueueWorker = exports.UNHANDLED_QUEUE_WORKER = exports.ALL_QUEUE_WORKERS = void 0;
4
- var constants_1 = require("./constants");
5
- Object.defineProperty(exports, "ALL_QUEUE_WORKERS", { enumerable: true, get: function () { return constants_1.ALL_WORKERS_QUEUE_WORKER_NAME; } });
6
- Object.defineProperty(exports, "UNHANDLED_QUEUE_WORKER", { enumerable: true, get: function () { return constants_1.UNHANDLED_QUEUE_WORKER_NAME; } });
3
+ exports.QueueWorkerService = exports.QueueWorkerModule = exports.Worker = exports.Processor = exports.decodeMessage = exports.QueueWorkerProcess = exports.QueueWorker = void 0;
7
4
  var decorators_1 = require("./decorators");
8
5
  Object.defineProperty(exports, "QueueWorker", { enumerable: true, get: function () { return decorators_1.QueueWorker; } });
9
6
  Object.defineProperty(exports, "QueueWorkerProcess", { enumerable: true, get: function () { return decorators_1.QueueWorkerProcess; } });
10
- var interfaces_1 = require("./interfaces");
11
- Object.defineProperty(exports, "QueueWorkerProcessorStatus", { enumerable: true, get: function () { return interfaces_1.QueueWorkerProcessorStatus; } });
12
7
  var util_1 = require("./util");
13
8
  Object.defineProperty(exports, "decodeMessage", { enumerable: true, get: function () { return util_1.decodeMessage; } });
9
+ var worker_1 = require("./worker");
10
+ Object.defineProperty(exports, "Processor", { enumerable: true, get: function () { return worker_1.Processor; } });
11
+ Object.defineProperty(exports, "Worker", { enumerable: true, get: function () { return worker_1.Worker; } });
14
12
  var worker_module_1 = require("./worker.module");
15
13
  Object.defineProperty(exports, "QueueWorkerModule", { enumerable: true, get: function () { return worker_module_1.QueueWorkerModule; } });
16
14
  var worker_service_1 = require("./worker.service");
@@ -16,13 +16,6 @@ export interface QueueWorkerModuleOptions extends ModuleOptions {
16
16
  * @memberof QueueWorkerModuleOptions
17
17
  */
18
18
  maxRetryAttempts?: number;
19
- /**
20
- * extra config
21
- *
22
- * @type {QueueWorkerExtraConfig}
23
- * @memberof QueueWorkerModuleOptions
24
- */
25
- extraConfig?: QueueWorkerExtraConfig;
26
19
  /**
27
20
  * Define a Route for the controller.
28
21
  * Default: POST /
@@ -47,14 +40,6 @@ export interface QueueWorkerProcessorMetadata extends QueueWorkerProcessDecorato
47
40
  processorName: string;
48
41
  processor: QueueWorkerProcessor;
49
42
  }
50
- export declare enum QueueWorkerProcessorStatus {
51
- IN_PROGRESS = 0,
52
- SKIP = 1
53
- }
54
- export type QueueWorkerExtraConfig = {
55
- preProcessor?: (name: string, ...args: Parameters<QueueWorkerProcessor>) => (QueueWorkerProcessorStatus | undefined | void) | Promise<QueueWorkerProcessorStatus | undefined | void>;
56
- postProcessor?: (name: string, ...args: Parameters<QueueWorkerProcessor>) => void | Promise<void>;
57
- };
58
43
  export interface QueueWorkerDecoratorArgs {
59
44
  names: QueueWorkerName[];
60
45
  /**
@@ -84,9 +69,17 @@ export interface QueueWorkerProcessDecoratorArgs {
84
69
  }
85
70
  export type QueueWorkerRawMessage<T = any> = {
86
71
  readonly data?: string | null | Message<T>;
72
+ readonly messageId?: string;
87
73
  readonly headers?: Record<string, string>;
88
74
  } & Record<string, any>;
89
75
  export type QueueWorkerDecodedMessage<T = any> = {
76
+ /**
77
+ * The message ID is a unique identifier.
78
+ * If controller recieve from Pub/Sub, it will be body.message.messageId.
79
+ * If controller recieve from Cloud Tasks, it will be body.message.headers["X-CloudTasks-TaskName"].
80
+ * If nothing is obtained, it will be an empty string.
81
+ */
82
+ readonly id: string;
90
83
  readonly data: Message<T>;
91
84
  readonly headers?: Record<string, string>;
92
85
  readonly raw: QueueWorkerRawMessage;
@@ -102,6 +95,10 @@ export interface QueueWorkerControllerMetadata extends RequestMappingMetadata {
102
95
  * @memberof QueueWorkerControllerMetadata
103
96
  */
104
97
  statusCode?: number;
98
+ /**
99
+ * Whether to throw the error as is when Processor throws an error. Default is true.
100
+ */
101
+ throwError?: boolean;
105
102
  }
106
103
  export interface QueueWorkerControllerInterface {
107
104
  execute(body: QueueWorkerReceivedMessage, headers: Record<string, string>): Promise<void>;
@@ -130,7 +127,7 @@ export interface QueueWorkerProcessOptions {
130
127
  */
131
128
  enabled?: boolean;
132
129
  }
133
- type QueueWorkerProcessResultBase<T = any> = {
130
+ export type QueueWorkerProcessResultBase<T = any> = {
134
131
  workerName: QueueWorkerName;
135
132
  processorName: string;
136
133
  data?: T;
@@ -144,4 +141,3 @@ export type QueueWorkerProcessFailureResult<T = any> = {
144
141
  error: Error;
145
142
  } & QueueWorkerProcessResultBase<T>;
146
143
  export type QueueWorkerProcessResult<T = any> = QueueWorkerProcessSuccessResult<T> | QueueWorkerProcessFailureResult<T>;
147
- export {};
@@ -1,8 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueueWorkerProcessorStatus = void 0;
4
- var QueueWorkerProcessorStatus;
5
- (function (QueueWorkerProcessorStatus) {
6
- QueueWorkerProcessorStatus[QueueWorkerProcessorStatus["IN_PROGRESS"] = 0] = "IN_PROGRESS";
7
- QueueWorkerProcessorStatus[QueueWorkerProcessorStatus["SKIP"] = 1] = "SKIP";
8
- })(QueueWorkerProcessorStatus || (exports.QueueWorkerProcessorStatus = QueueWorkerProcessorStatus = {}));
package/dist/util.js CHANGED
@@ -70,15 +70,16 @@ function decodeMessage(message) {
70
70
  // tasks / http
71
71
  data = message;
72
72
  }
73
- if (!data.name) {
74
- throw new common_1.BadRequestException(constants_1.ERROR_QUEUE_WORKER_NAME_NOT_FOUND);
75
- }
76
73
  return {
77
74
  data,
78
75
  headers: "headers" in message ? message.headers : undefined,
76
+ id: getMessageId(message),
79
77
  raw: message,
80
78
  };
81
79
  }
80
+ function getMessageId(raw) {
81
+ return raw.messageId ?? raw.headers?.["x-cloudtasks-taskname"] ?? "";
82
+ }
82
83
  function decodeData(data) {
83
84
  if (!data) {
84
85
  throw new common_1.BadRequestException(constants_1.ERROR_INVALID_MESSAGE_FORMAT);
@@ -18,13 +18,18 @@ const worker_service_1 = require("./worker.service");
18
18
  function getWorkerController(metadata) {
19
19
  const path = metadata?.path;
20
20
  const method = metadata?.method || common_1.RequestMethod.POST;
21
+ const throwError = metadata?.throwError ?? true;
21
22
  let WorkerController = class WorkerController {
22
23
  constructor(service) {
23
24
  this.service = service;
24
25
  }
25
26
  async execute(body, headers) {
26
- this.service.execute({});
27
- await this.service.execute({ ...body.message, headers });
27
+ const results = await this.service.execute({ ...body.message, headers });
28
+ for (const result of results) {
29
+ if (!result.success && throwError) {
30
+ throw result.error;
31
+ }
32
+ }
28
33
  }
29
34
  };
30
35
  __decorate([
@@ -0,0 +1,31 @@
1
+ import { QueueWorkerDecodedMessage, QueueWorkerMetadata, QueueWorkerModuleOptions, QueueWorkerProcessorMetadata, QueueWorkerProcessResult } from "./interfaces";
2
+ export declare class Worker<T> {
3
+ private readonly message;
4
+ private readonly metadata;
5
+ private readonly options;
6
+ get name(): string;
7
+ get priority(): number;
8
+ get className(): string;
9
+ constructor(message: QueueWorkerDecodedMessage<T>, metadata: QueueWorkerMetadata, options: QueueWorkerModuleOptions);
10
+ /**
11
+ * Execute all processors in the worker. If you want to execute a each processor, use `getProcessors` method.
12
+ */
13
+ execute(): Promise<QueueWorkerProcessResult[]>;
14
+ /**
15
+ * Get all processors in the worker. Use this method to execute manually when you want to execute only on specific conditions using metadata such as class name or processor name.
16
+ */
17
+ getProcessors(): Processor<T>[];
18
+ }
19
+ export declare class Processor<T> {
20
+ private readonly message;
21
+ private readonly metadata;
22
+ private readonly options;
23
+ get name(): string;
24
+ get priority(): number;
25
+ get workerName(): string;
26
+ constructor(message: QueueWorkerDecodedMessage<T>, metadata: QueueWorkerProcessorMetadata, options: QueueWorkerModuleOptions);
27
+ /**
28
+ * Execute the processor.
29
+ */
30
+ execute(): Promise<QueueWorkerProcessResult<T>>;
31
+ }
package/dist/worker.js ADDED
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Processor = exports.Worker = void 0;
4
+ class Worker {
5
+ get name() {
6
+ return this.metadata.name;
7
+ }
8
+ get priority() {
9
+ return this.metadata.priority;
10
+ }
11
+ get className() {
12
+ return this.metadata.className;
13
+ }
14
+ constructor(message, metadata, options) {
15
+ this.message = message;
16
+ this.metadata = metadata;
17
+ this.options = options;
18
+ }
19
+ /**
20
+ * Execute all processors in the worker. If you want to execute a each processor, use `getProcessors` method.
21
+ */
22
+ async execute() {
23
+ const results = [];
24
+ const processors = this.getProcessors();
25
+ for (const processor of processors) {
26
+ results.push(await processor.execute());
27
+ }
28
+ return results;
29
+ }
30
+ /**
31
+ * Get all processors in the worker. Use this method to execute manually when you want to execute only on specific conditions using metadata such as class name or processor name.
32
+ */
33
+ getProcessors() {
34
+ return this.metadata.processors.map((processor) => new Processor(this.message, processor, this.options));
35
+ }
36
+ }
37
+ exports.Worker = Worker;
38
+ class Processor {
39
+ get name() {
40
+ return this.metadata.processorName;
41
+ }
42
+ get priority() {
43
+ return this.metadata.priority;
44
+ }
45
+ get workerName() {
46
+ return this.metadata.workerName;
47
+ }
48
+ constructor(message, metadata, options) {
49
+ this.message = message;
50
+ this.metadata = metadata;
51
+ this.options = options;
52
+ }
53
+ /**
54
+ * Execute the processor.
55
+ */
56
+ async execute() {
57
+ const maxRetryAttempts = this.options.maxRetryAttempts ?? 1;
58
+ const resultBase = {
59
+ data: this.message.data.data,
60
+ processorName: this.metadata.processorName,
61
+ raw: this.message.raw,
62
+ workerName: this.metadata.workerName,
63
+ };
64
+ for (let i = 0; i < maxRetryAttempts; i++) {
65
+ try {
66
+ await this.metadata.processor(this.message.data.data, this.message.raw);
67
+ i = maxRetryAttempts;
68
+ }
69
+ catch (error) {
70
+ if (maxRetryAttempts === i + 1) {
71
+ return {
72
+ error,
73
+ success: false,
74
+ ...resultBase,
75
+ };
76
+ }
77
+ }
78
+ }
79
+ return {
80
+ success: true,
81
+ ...resultBase,
82
+ };
83
+ }
84
+ }
85
+ exports.Processor = Processor;
@@ -1,21 +1,24 @@
1
- import { Logger } from "@nestjs/common";
2
1
  import { Message } from "@anchan828/nest-cloud-run-queue-common";
3
2
  import { QueueWorkerExplorerService } from "./explorer.service";
4
3
  import { QueueWorkerDecodedMessage, QueueWorkerModuleOptions, QueueWorkerProcessResult, QueueWorkerRawMessage } from "./interfaces";
4
+ import { Worker } from "./worker";
5
5
  export declare class QueueWorkerService {
6
6
  #private;
7
7
  private readonly options;
8
- private readonly logger;
9
8
  private readonly explorerService;
10
- constructor(options: QueueWorkerModuleOptions, logger: Logger, explorerService: QueueWorkerExplorerService);
9
+ constructor(options: QueueWorkerModuleOptions, explorerService: QueueWorkerExplorerService);
10
+ /**
11
+ * Execute all workers that match the worker name. If you want to execute a each worker, use `getWorkers` method.
12
+ */
13
+ execute<T = any>(meessage: QueueWorkerRawMessage<T>): Promise<QueueWorkerProcessResult<T>[]>;
11
14
  execute<T = any>(meessage: Message<T>): Promise<QueueWorkerProcessResult<T>[]>;
12
15
  execute<T = any>(meessage: QueueWorkerDecodedMessage<T>): Promise<QueueWorkerProcessResult<T>[]>;
13
- execute<T = any>(meessage: QueueWorkerRawMessage<T>): Promise<QueueWorkerProcessResult<T>[]>;
14
16
  /**
15
- * @deprecated Use `decodeMessage` function instead.
17
+ * Get all workers that match the worker name. Use this method to execute manually when you want to execute only on specific conditions using metadata such as class name or processor name.
18
+ * If you want to execute all workers simply, use `execute` method.
16
19
  */
17
- decodeMessage<T = any>(message: QueueWorkerRawMessage | Message): QueueWorkerDecodedMessage<T>;
18
- private runWorkers;
20
+ getWorkers<T = any>(meessage: QueueWorkerRawMessage<T>): Worker<T>[];
21
+ getWorkers<T = any>(meessage: Message<T>): Worker<T>[];
22
+ getWorkers<T = any>(meessage: QueueWorkerDecodedMessage<T>): Worker<T>[];
19
23
  private isDecodedMessage;
20
- private executeProcessor;
21
24
  }
@@ -22,88 +22,48 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
22
22
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
23
23
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
24
24
  };
25
- var _QueueWorkerService_instances, _QueueWorkerService__allWorkers, _QueueWorkerService_allWorkers_get, _QueueWorkerService_spetialWorkers_get;
25
+ var _QueueWorkerService_instances, _QueueWorkerService__allWorkers, _QueueWorkerService_allWorkers_get;
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.QueueWorkerService = void 0;
28
28
  const common_1 = require("@nestjs/common");
29
29
  const constants_1 = require("./constants");
30
30
  const explorer_service_1 = require("./explorer.service");
31
- const interfaces_1 = require("./interfaces");
32
31
  const util_1 = require("./util");
32
+ const worker_1 = require("./worker");
33
33
  let QueueWorkerService = class QueueWorkerService {
34
- constructor(options, logger, explorerService) {
34
+ constructor(options, explorerService) {
35
35
  _QueueWorkerService_instances.add(this);
36
36
  this.options = options;
37
- this.logger = logger;
38
37
  this.explorerService = explorerService;
39
38
  _QueueWorkerService__allWorkers.set(this, void 0);
40
39
  }
41
40
  async execute(meessage) {
42
- return await this.runWorkers(this.isDecodedMessage(meessage) ? meessage : (0, util_1.decodeMessage)(meessage));
43
- }
44
- /**
45
- * @deprecated Use `decodeMessage` function instead.
46
- */
47
- decodeMessage(message) {
48
- return (0, util_1.decodeMessage)(message);
49
- }
50
- async runWorkers(decodedMessage) {
51
- const maxRetryAttempts = this.options.maxRetryAttempts ?? 1;
52
- const workers = [];
53
- workers.push(...__classPrivateFieldGet(this, _QueueWorkerService_instances, "a", _QueueWorkerService_allWorkers_get).filter((worker) => decodedMessage.data.name === worker.name));
54
- if (this.options?.throwModuleError && workers.length === 0 && __classPrivateFieldGet(this, _QueueWorkerService_instances, "a", _QueueWorkerService_spetialWorkers_get).length === 0) {
41
+ const decodedMessage = this.isDecodedMessage(meessage) ? meessage : (0, util_1.decodeMessage)(meessage);
42
+ if (this.options.throwModuleError && !decodedMessage.data.name) {
43
+ throw new common_1.BadRequestException(constants_1.ERROR_QUEUE_WORKER_NAME_NOT_FOUND);
44
+ }
45
+ const workers = await this.getWorkers(decodedMessage);
46
+ if (this.options.throwModuleError && workers.length === 0) {
55
47
  throw new common_1.BadRequestException((0, constants_1.ERROR_WORKER_NOT_FOUND)(decodedMessage.data.name));
56
48
  }
57
- const processors = (0, util_1.sortByPriority)(workers)
58
- .map((w) => (0, util_1.sortByPriority)(w.processors))
59
- .flat();
60
- const spetialProcessors = (0, util_1.sortByPriority)(__classPrivateFieldGet(this, _QueueWorkerService_instances, "a", _QueueWorkerService_spetialWorkers_get))
61
- .map((w) => (0, util_1.sortByPriority)(w.processors))
62
- .flat();
63
- const QueueWorkerProcessResults = [];
64
- const processorStatus = await this.options.extraConfig?.preProcessor?.(decodedMessage.data.name, decodedMessage.data.data, decodedMessage.raw);
65
- if (processorStatus !== interfaces_1.QueueWorkerProcessorStatus.SKIP) {
66
- for (const processor of processors) {
67
- QueueWorkerProcessResults.push(await this.executeProcessor(processor, maxRetryAttempts, decodedMessage.data.data, decodedMessage.raw));
68
- }
69
- for (const processor of spetialProcessors) {
70
- await this.executeProcessor(processor, maxRetryAttempts, decodedMessage.data, decodedMessage.raw);
71
- }
49
+ const results = [];
50
+ for (const worker of workers) {
51
+ results.push(...(await worker.execute()));
52
+ }
53
+ return results;
54
+ }
55
+ getWorkers(meessage) {
56
+ const decodedMessage = this.isDecodedMessage(meessage) ? meessage : (0, util_1.decodeMessage)(meessage);
57
+ if (!decodedMessage.data.name) {
58
+ return [];
72
59
  }
73
- await this.options.extraConfig?.postProcessor?.(decodedMessage.data.name, decodedMessage.data.data, decodedMessage.raw);
74
- return QueueWorkerProcessResults;
60
+ return __classPrivateFieldGet(this, _QueueWorkerService_instances, "a", _QueueWorkerService_allWorkers_get)
61
+ .filter((worker) => decodedMessage.data.name === worker.name)
62
+ .map((metadata) => new worker_1.Worker(decodedMessage, metadata, this.options));
75
63
  }
76
64
  isDecodedMessage(message) {
77
65
  return "raw" in message;
78
66
  }
79
- async executeProcessor(processorMetadata, maxRetryAttempts, data, raw) {
80
- for (let i = 0; i < maxRetryAttempts; i++) {
81
- try {
82
- await processorMetadata.processor(data, raw);
83
- i = maxRetryAttempts;
84
- }
85
- catch (error) {
86
- this.logger.error(error.message);
87
- if (maxRetryAttempts === i + 1) {
88
- return {
89
- data,
90
- error,
91
- processorName: processorMetadata.processorName,
92
- raw,
93
- success: false,
94
- workerName: processorMetadata.workerName,
95
- };
96
- }
97
- }
98
- }
99
- return {
100
- data,
101
- processorName: processorMetadata.processorName,
102
- raw,
103
- success: true,
104
- workerName: processorMetadata.workerName,
105
- };
106
- }
107
67
  };
108
68
  exports.QueueWorkerService = QueueWorkerService;
109
69
  _QueueWorkerService__allWorkers = new WeakMap();
@@ -114,12 +74,8 @@ _QueueWorkerService_allWorkers_get = function _QueueWorkerService_allWorkers_get
114
74
  }
115
75
  return __classPrivateFieldGet(this, _QueueWorkerService__allWorkers, "f");
116
76
  };
117
- _QueueWorkerService_spetialWorkers_get = function _QueueWorkerService_spetialWorkers_get() {
118
- return (__classPrivateFieldGet(this, _QueueWorkerService__allWorkers, "f") || []).filter((worker) => [constants_1.ALL_WORKERS_QUEUE_WORKER_NAME, constants_1.UNHANDLED_QUEUE_WORKER_NAME].includes(worker.name));
119
- };
120
77
  exports.QueueWorkerService = QueueWorkerService = __decorate([
121
78
  (0, common_1.Injectable)(),
122
79
  __param(0, (0, common_1.Inject)(constants_1.QUEUE_WORKER_MODULE_OPTIONS)),
123
- __metadata("design:paramtypes", [Object, common_1.Logger,
124
- explorer_service_1.QueueWorkerExplorerService])
80
+ __metadata("design:paramtypes", [Object, explorer_service_1.QueueWorkerExplorerService])
125
81
  ], QueueWorkerService);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anchan828/nest-cloud-run-queue-worker",
3
- "version": "2.4.1",
3
+ "version": "3.1.0",
4
4
  "description": "> TODO: description",
5
5
  "homepage": "https://github.com/anchan828/nest-cloud-run-queue/tree/master/packages/worker#readme",
6
6
  "bugs": {
@@ -33,7 +33,7 @@
33
33
  "watch": "tsc -w"
34
34
  },
35
35
  "dependencies": {
36
- "@anchan828/nest-cloud-run-queue-common": "^2.4.1"
36
+ "@anchan828/nest-cloud-run-queue-common": "^3.1.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@nestjs/common": "10.3.10",
@@ -46,5 +46,5 @@
46
46
  "access": "public"
47
47
  },
48
48
  "packageManager": "npm@10.8.1",
49
- "gitHead": "a129feb4af97620af2aeb55d7a89b39c710b0659"
49
+ "gitHead": "2cf06b0266993c6db926ddde524d4341d4d13668"
50
50
  }