@anchan828/nest-cloud-run-queue-worker 2.3.1 → 2.4.1

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.
@@ -38,6 +38,7 @@ let QueueWorkerExplorerService = class QueueWorkerExplorerService {
38
38
  }
39
39
  for (const name of args.names) {
40
40
  metadata.push({
41
+ className: classInstanceWrapper.metatype.name,
41
42
  instance: classInstanceWrapper.instance,
42
43
  name,
43
44
  priority: args.priority || 0,
@@ -61,6 +62,8 @@ let QueueWorkerExplorerService = class QueueWorkerExplorerService {
61
62
  metadata.push({
62
63
  priority: args.priority || 0,
63
64
  processor: prototype[methodName].bind(instance),
65
+ processorName: `${worker.className}.${methodName}`,
66
+ workerName: worker.name,
64
67
  });
65
68
  }
66
69
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { ALL_WORKERS_QUEUE_WORKER_NAME as ALL_QUEUE_WORKERS, UNHANDLED_QUEUE_WORKER_NAME as UNHANDLED_QUEUE_WORKER, } from "./constants";
2
2
  export { QueueWorker, QueueWorkerProcess } from "./decorators";
3
- export { QueueWorkerControllerInterface, QueueWorkerControllerMetadata, QueueWorkerDecodedMessage, QueueWorkerExtraConfig, QueueWorkerModuleAsyncOptions, QueueWorkerModuleOptions, QueueWorkerModuleOptionsFactory, QueueWorkerOptions, QueueWorkerProcessOptions, QueueWorkerProcessor, QueueWorkerProcessorStatus, QueueWorkerRawMessage, QueueWorkerReceivedMessage, } from "./interfaces";
3
+ export { QueueWorkerControllerInterface, QueueWorkerControllerMetadata, QueueWorkerDecodedMessage, QueueWorkerExtraConfig, QueueWorkerModuleAsyncOptions, QueueWorkerModuleOptions, QueueWorkerModuleOptionsFactory, QueueWorkerOptions, QueueWorkerProcessFailureResult, QueueWorkerProcessOptions, QueueWorkerProcessResult, QueueWorkerProcessSuccessResult, QueueWorkerProcessor, QueueWorkerProcessorStatus, QueueWorkerRawMessage, QueueWorkerReceivedMessage, } from "./interfaces";
4
+ export { decodeMessage } from "./util";
4
5
  export { QueueWorkerModule } from "./worker.module";
5
6
  export { QueueWorkerService } from "./worker.service";
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QueueWorkerService = exports.QueueWorkerModule = exports.QueueWorkerProcessorStatus = exports.QueueWorkerProcess = exports.QueueWorker = exports.UNHANDLED_QUEUE_WORKER = exports.ALL_QUEUE_WORKERS = void 0;
3
+ exports.QueueWorkerService = exports.QueueWorkerModule = exports.decodeMessage = exports.QueueWorkerProcessorStatus = exports.QueueWorkerProcess = exports.QueueWorker = exports.UNHANDLED_QUEUE_WORKER = exports.ALL_QUEUE_WORKERS = void 0;
4
4
  var constants_1 = require("./constants");
5
5
  Object.defineProperty(exports, "ALL_QUEUE_WORKERS", { enumerable: true, get: function () { return constants_1.ALL_WORKERS_QUEUE_WORKER_NAME; } });
6
6
  Object.defineProperty(exports, "UNHANDLED_QUEUE_WORKER", { enumerable: true, get: function () { return constants_1.UNHANDLED_QUEUE_WORKER_NAME; } });
@@ -9,6 +9,8 @@ Object.defineProperty(exports, "QueueWorker", { enumerable: true, get: function
9
9
  Object.defineProperty(exports, "QueueWorkerProcess", { enumerable: true, get: function () { return decorators_1.QueueWorkerProcess; } });
10
10
  var interfaces_1 = require("./interfaces");
11
11
  Object.defineProperty(exports, "QueueWorkerProcessorStatus", { enumerable: true, get: function () { return interfaces_1.QueueWorkerProcessorStatus; } });
12
+ var util_1 = require("./util");
13
+ Object.defineProperty(exports, "decodeMessage", { enumerable: true, get: function () { return util_1.decodeMessage; } });
12
14
  var worker_module_1 = require("./worker.module");
13
15
  Object.defineProperty(exports, "QueueWorkerModule", { enumerable: true, get: function () { return worker_module_1.QueueWorkerModule; } });
14
16
  var worker_service_1 = require("./worker.service");
@@ -36,12 +36,15 @@ export type QueueWorkerModuleAsyncOptions = ModuleAsyncOptions<Omit<QueueWorkerM
36
36
  export type QueueWorkerModuleOptionsFactory = ModuleOptionsFactory<Omit<QueueWorkerModuleOptions, "workerController">> & Pick<QueueWorkerModuleOptions, "workerController">;
37
37
  export type QueueWorkerProcessor = <T>(message: T, raw: QueueWorkerRawMessage) => Promise<void> | void;
38
38
  export interface QueueWorkerMetadata {
39
+ className: string;
39
40
  instance: Injectable;
40
41
  processors: QueueWorkerProcessorMetadata[];
41
42
  name: QueueWorkerName;
42
43
  priority: number;
43
44
  }
44
45
  export interface QueueWorkerProcessorMetadata extends QueueWorkerProcessDecoratorArgs {
46
+ workerName: QueueWorkerName;
47
+ processorName: string;
45
48
  processor: QueueWorkerProcessor;
46
49
  }
47
50
  export declare enum QueueWorkerProcessorStatus {
@@ -51,24 +54,6 @@ export declare enum QueueWorkerProcessorStatus {
51
54
  export type QueueWorkerExtraConfig = {
52
55
  preProcessor?: (name: string, ...args: Parameters<QueueWorkerProcessor>) => (QueueWorkerProcessorStatus | undefined | void) | Promise<QueueWorkerProcessorStatus | undefined | void>;
53
56
  postProcessor?: (name: string, ...args: Parameters<QueueWorkerProcessor>) => void | Promise<void>;
54
- /**
55
- * Exceptions thrown in the processor do not reach the top level and are not detected by the application. If you want to do something with processor exceptions, use this property.
56
- * @example
57
- * ```ts
58
- * catchProcessorException: (error: Error) => {
59
- * captureException(error); // Sentry
60
- * }
61
- * ```
62
- *
63
- * @example
64
- * ```ts
65
- * catchProcessorException: async (error: Error) => {
66
- * // You can throw errors and let them reach the top level. Use an ExceptionFilter or similar to handle them appropriately.
67
- * throw error;
68
- * }
69
- * ```
70
- */
71
- catchProcessorException?: <T extends Error = Error>(error: T, raw: QueueWorkerRawMessage) => void | Promise<void>;
72
57
  };
73
58
  export interface QueueWorkerDecoratorArgs {
74
59
  names: QueueWorkerName[];
@@ -145,3 +130,18 @@ export interface QueueWorkerProcessOptions {
145
130
  */
146
131
  enabled?: boolean;
147
132
  }
133
+ type QueueWorkerProcessResultBase<T = any> = {
134
+ workerName: QueueWorkerName;
135
+ processorName: string;
136
+ data?: T;
137
+ raw: QueueWorkerRawMessage<T>;
138
+ };
139
+ export type QueueWorkerProcessSuccessResult<T = any> = {
140
+ success: true;
141
+ } & QueueWorkerProcessResultBase<T>;
142
+ export type QueueWorkerProcessFailureResult<T = any> = {
143
+ success: false;
144
+ error: Error;
145
+ } & QueueWorkerProcessResultBase<T>;
146
+ export type QueueWorkerProcessResult<T = any> = QueueWorkerProcessSuccessResult<T> | QueueWorkerProcessFailureResult<T>;
147
+ export {};
@@ -1,21 +1,21 @@
1
1
  import { Logger } from "@nestjs/common";
2
2
  import { Message } from "@anchan828/nest-cloud-run-queue-common";
3
3
  import { QueueWorkerExplorerService } from "./explorer.service";
4
- import { QueueWorkerDecodedMessage, QueueWorkerModuleOptions, QueueWorkerRawMessage } from "./interfaces";
4
+ import { QueueWorkerDecodedMessage, QueueWorkerModuleOptions, QueueWorkerProcessResult, QueueWorkerRawMessage } from "./interfaces";
5
5
  export declare class QueueWorkerService {
6
6
  #private;
7
7
  private readonly options;
8
8
  private readonly logger;
9
9
  private readonly explorerService;
10
10
  constructor(options: QueueWorkerModuleOptions, logger: Logger, explorerService: QueueWorkerExplorerService);
11
- execute<T = any>(meessage: Message<T>): Promise<void>;
12
- execute<T = any>(meessage: QueueWorkerDecodedMessage<T>): Promise<void>;
13
- execute<T = any>(meessage: QueueWorkerRawMessage<T>): Promise<void>;
11
+ execute<T = any>(meessage: Message<T>): Promise<QueueWorkerProcessResult<T>[]>;
12
+ execute<T = any>(meessage: QueueWorkerDecodedMessage<T>): Promise<QueueWorkerProcessResult<T>[]>;
13
+ execute<T = any>(meessage: QueueWorkerRawMessage<T>): Promise<QueueWorkerProcessResult<T>[]>;
14
14
  /**
15
15
  * @deprecated Use `decodeMessage` function instead.
16
16
  */
17
17
  decodeMessage<T = any>(message: QueueWorkerRawMessage | Message): QueueWorkerDecodedMessage<T>;
18
18
  private runWorkers;
19
19
  private isDecodedMessage;
20
- private execProcessor;
20
+ private executeProcessor;
21
21
  }
@@ -39,7 +39,7 @@ let QueueWorkerService = class QueueWorkerService {
39
39
  _QueueWorkerService__allWorkers.set(this, void 0);
40
40
  }
41
41
  async execute(meessage) {
42
- await this.runWorkers(this.isDecodedMessage(meessage) ? meessage : (0, util_1.decodeMessage)(meessage));
42
+ return await this.runWorkers(this.isDecodedMessage(meessage) ? meessage : (0, util_1.decodeMessage)(meessage));
43
43
  }
44
44
  /**
45
45
  * @deprecated Use `decodeMessage` function instead.
@@ -60,31 +60,49 @@ let QueueWorkerService = class QueueWorkerService {
60
60
  const spetialProcessors = (0, util_1.sortByPriority)(__classPrivateFieldGet(this, _QueueWorkerService_instances, "a", _QueueWorkerService_spetialWorkers_get))
61
61
  .map((w) => (0, util_1.sortByPriority)(w.processors))
62
62
  .flat();
63
+ const QueueWorkerProcessResults = [];
63
64
  const processorStatus = await this.options.extraConfig?.preProcessor?.(decodedMessage.data.name, decodedMessage.data.data, decodedMessage.raw);
64
65
  if (processorStatus !== interfaces_1.QueueWorkerProcessorStatus.SKIP) {
65
66
  for (const processor of processors) {
66
- await this.execProcessor(processor.processor, maxRetryAttempts, decodedMessage.data.data, decodedMessage.raw);
67
+ QueueWorkerProcessResults.push(await this.executeProcessor(processor, maxRetryAttempts, decodedMessage.data.data, decodedMessage.raw));
67
68
  }
68
69
  for (const processor of spetialProcessors) {
69
- await this.execProcessor(processor.processor, maxRetryAttempts, decodedMessage.data, decodedMessage.raw);
70
+ await this.executeProcessor(processor, maxRetryAttempts, decodedMessage.data, decodedMessage.raw);
70
71
  }
71
72
  }
72
73
  await this.options.extraConfig?.postProcessor?.(decodedMessage.data.name, decodedMessage.data.data, decodedMessage.raw);
74
+ return QueueWorkerProcessResults;
73
75
  }
74
76
  isDecodedMessage(message) {
75
77
  return "raw" in message;
76
78
  }
77
- async execProcessor(processor, maxRetryAttempts, data, raw) {
79
+ async executeProcessor(processorMetadata, maxRetryAttempts, data, raw) {
78
80
  for (let i = 0; i < maxRetryAttempts; i++) {
79
81
  try {
80
- await processor(data, raw);
82
+ await processorMetadata.processor(data, raw);
81
83
  i = maxRetryAttempts;
82
84
  }
83
85
  catch (error) {
84
86
  this.logger.error(error.message);
85
- await this.options.extraConfig?.catchProcessorException?.(error, raw);
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
+ }
86
97
  }
87
98
  }
99
+ return {
100
+ data,
101
+ processorName: processorMetadata.processorName,
102
+ raw,
103
+ success: true,
104
+ workerName: processorMetadata.workerName,
105
+ };
88
106
  }
89
107
  };
90
108
  exports.QueueWorkerService = QueueWorkerService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anchan828/nest-cloud-run-queue-worker",
3
- "version": "2.3.1",
3
+ "version": "2.4.1",
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.3.1"
36
+ "@anchan828/nest-cloud-run-queue-common": "^2.4.1"
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": "b6dedf4cb4eb303f706f1db38fe8f94d419a67c0"
49
+ "gitHead": "a129feb4af97620af2aeb55d7a89b39c710b0659"
50
50
  }