@anchan828/nest-cloud-run-queue-worker 3.1.2 → 3.1.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.
@@ -16,6 +16,13 @@ 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;
19
26
  /**
20
27
  * Define a Route for the controller.
21
28
  * Default: POST /
@@ -40,6 +47,9 @@ export interface QueueWorkerProcessorMetadata extends QueueWorkerProcessDecorato
40
47
  processorName: string;
41
48
  processor: QueueWorkerProcessor;
42
49
  }
50
+ export type QueueWorkerExtraConfig = {
51
+ parseReviver?: (key: string, value: any) => any;
52
+ };
43
53
  export interface QueueWorkerDecoratorArgs {
44
54
  names: QueueWorkerName[];
45
55
  /**
package/dist/util.d.ts CHANGED
@@ -5,7 +5,7 @@ import { QueueWorkerDecodedMessage, QueueWorkerRawMessage } from "./interfaces";
5
5
  * JSON.parse has receiver for Date.parse.
6
6
  * @param json
7
7
  */
8
- export declare const parseJSON: <T>(json: string) => T;
8
+ export declare const parseJSON: <T>(json: string, reviver?: (key: string, value: any) => any) => T;
9
9
  /**
10
10
  * sort array by priority prop
11
11
  *
@@ -25,6 +25,9 @@ export declare function sortByPriority<T extends {
25
25
  * @return {*} {boolean}
26
26
  */
27
27
  export declare function isBase64<T = any>(value?: string | null | Message<T>): value is string;
28
- export declare function decodeMessage<T = any>(message: QueueWorkerRawMessage<T> | Message): QueueWorkerDecodedMessage<T>;
28
+ export declare function decodeMessage<T = any>(message: QueueWorkerRawMessage<T> | Message, reviver?: (key: string, value: any) => any): QueueWorkerDecodedMessage<T>;
29
29
  export declare function isDecodedMessage<T = any>(message: QueueWorkerRawMessage<T> | QueueWorkerDecodedMessage<T> | Message<T>): message is QueueWorkerDecodedMessage<T>;
30
+ export declare function isTaskMessage<T>(message?: QueueWorkerRawMessage<T> | Message<T> | null): message is Message<T> & {
31
+ headers?: Record<string, string>;
32
+ };
30
33
  export declare function isMessage<T>(message?: QueueWorkerRawMessage<T> | Message<T> | null): message is Message<T>;
package/dist/util.js CHANGED
@@ -5,6 +5,7 @@ exports.sortByPriority = sortByPriority;
5
5
  exports.isBase64 = isBase64;
6
6
  exports.decodeMessage = decodeMessage;
7
7
  exports.isDecodedMessage = isDecodedMessage;
8
+ exports.isTaskMessage = isTaskMessage;
8
9
  exports.isMessage = isMessage;
9
10
  const common_1 = require("@nestjs/common");
10
11
  const constants_1 = require("./constants");
@@ -14,18 +15,19 @@ const dateRegExp = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
14
15
  * JSON.parse has receiver for Date.parse.
15
16
  * @param json
16
17
  */
17
- const parseJSON = (json) => {
18
- return JSON.parse(json, (_, value) => {
19
- if (typeof value === "string" && value.length === 24 && dateRegExp.test(value)) {
20
- const date = new Date(value);
21
- if (+date === +date) {
22
- return date;
23
- }
24
- }
25
- return value;
26
- });
18
+ const parseJSON = (json, reviver) => {
19
+ return JSON.parse(json, (key, value) => reviver ? reviver(key, parseDate(key, value)) : parseDate(key, value));
27
20
  };
28
21
  exports.parseJSON = parseJSON;
22
+ function parseDate(key, value) {
23
+ if (typeof value === "string" && value.length === 24 && dateRegExp.test(value)) {
24
+ const date = new Date(value);
25
+ if (+date === +date) {
26
+ return date;
27
+ }
28
+ }
29
+ return value;
30
+ }
29
31
  /**
30
32
  * sort array by priority prop
31
33
  *
@@ -62,14 +64,18 @@ function isBase64(value) {
62
64
  const firstPaddingChar = value.indexOf("=");
63
65
  return (firstPaddingChar === -1 || firstPaddingChar === len - 1 || (firstPaddingChar === len - 2 && value[len - 1] === "="));
64
66
  }
65
- function decodeMessage(message) {
67
+ function decodeMessage(message, reviver) {
66
68
  let data;
67
69
  if (isBase64(message.data)) {
68
70
  // pubsub
69
- data = decodeData(message.data);
71
+ data = decodeData(message.data, reviver);
72
+ }
73
+ else if (isTaskMessage(message)) {
74
+ // tasks
75
+ data = { data: JSON.parse(JSON.stringify(message.data), reviver), name: message.name };
70
76
  }
71
77
  else {
72
- // tasks / http / raw
78
+ // http / raw
73
79
  const _message = isMessage(message) ? message : isMessage(message.data) ? message.data : undefined;
74
80
  if (!_message) {
75
81
  throw new common_1.BadRequestException(constants_1.ERROR_INVALID_MESSAGE_FORMAT);
@@ -89,12 +95,19 @@ function decodeMessage(message) {
89
95
  function isDecodedMessage(message) {
90
96
  return "raw" in message;
91
97
  }
98
+ function isTaskMessage(message) {
99
+ if (!message) {
100
+ return false;
101
+ }
102
+ const keys = Object.keys(message);
103
+ return keys.length <= 3 && keys.includes("name") && keys.includes("headers");
104
+ }
92
105
  function isMessage(message) {
93
106
  if (!message) {
94
107
  return false;
95
108
  }
96
109
  const keys = Object.keys(message);
97
- return keys.length <= 2 && keys.includes("name");
110
+ return keys.length <= 3 && keys.includes("name");
98
111
  }
99
112
  function getMessageId(raw) {
100
113
  if (!raw) {
@@ -108,7 +121,7 @@ function getMessageId(raw) {
108
121
  }
109
122
  return "";
110
123
  }
111
- function decodeData(data) {
124
+ function decodeData(data, reviver) {
112
125
  if (!data) {
113
126
  throw new common_1.BadRequestException(constants_1.ERROR_INVALID_MESSAGE_FORMAT);
114
127
  }
@@ -123,7 +136,7 @@ function decodeData(data) {
123
136
  }
124
137
  try {
125
138
  if (typeof data === "string") {
126
- return (0, exports.parseJSON)(data);
139
+ return (0, exports.parseJSON)(data, reviver);
127
140
  }
128
141
  return data;
129
142
  }
@@ -38,7 +38,9 @@ let QueueWorkerService = class QueueWorkerService {
38
38
  _QueueWorkerService__allWorkers.set(this, void 0);
39
39
  }
40
40
  async execute(meessage) {
41
- const decodedMessage = (0, util_1.isDecodedMessage)(meessage) ? meessage : (0, util_1.decodeMessage)(meessage);
41
+ const decodedMessage = (0, util_1.isDecodedMessage)(meessage)
42
+ ? meessage
43
+ : (0, util_1.decodeMessage)(meessage, this.options.extraConfig?.parseReviver);
42
44
  if (this.options.throwModuleError && !decodedMessage.data.name) {
43
45
  throw new common_1.BadRequestException(constants_1.ERROR_QUEUE_WORKER_NAME_NOT_FOUND);
44
46
  }
@@ -53,7 +55,9 @@ let QueueWorkerService = class QueueWorkerService {
53
55
  return results;
54
56
  }
55
57
  getWorkers(meessage) {
56
- const decodedMessage = (0, util_1.isDecodedMessage)(meessage) ? meessage : (0, util_1.decodeMessage)(meessage);
58
+ const decodedMessage = (0, util_1.isDecodedMessage)(meessage)
59
+ ? meessage
60
+ : (0, util_1.decodeMessage)(meessage, this.options.extraConfig?.parseReviver);
57
61
  if (!decodedMessage.data.name) {
58
62
  return [];
59
63
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anchan828/nest-cloud-run-queue-worker",
3
- "version": "3.1.2",
3
+ "version": "3.1.4",
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": "^3.1.2"
36
+ "@anchan828/nest-cloud-run-queue-common": "^3.1.4"
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.2",
49
- "gitHead": "4977a74e6b471b9d83ea385ade570bf48c27b666"
49
+ "gitHead": "59b149b8f18577d466b94e4a7ac979bbc6ed7d7b"
50
50
  }