@message-queue-toolkit/core 4.1.0 → 5.0.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.
package/dist/index.d.ts CHANGED
@@ -4,6 +4,8 @@ export type { NewQueueOptions, ExistingQueueOptions, NewQueueOptionsMultiSchema,
4
4
  export { isMessageError, MessageValidationError, MessageInvalidFormatError, } from './lib/errors/Errors';
5
5
  export { HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, BarrierCallbackMultiConsumers, BarrierResult, BarrierResultPositive, BarrierResultNegative, } from './lib/queues/HandlerContainer';
6
6
  export type { HandlerContainerOptions, Handler } from './lib/queues/HandlerContainer';
7
+ export { HandlerSpy } from './lib/queues/HandlerSpy';
8
+ export type { SpyResult, HandlerSpyParams, PublicHandlerSpy } from './lib/queues/HandlerSpy';
7
9
  export { MessageSchemaContainer } from './lib/queues/MessageSchemaContainer';
8
10
  export type { MessageSchemaContainerOptions } from './lib/queues/MessageSchemaContainer';
9
11
  export { objectToBuffer } from './lib/utils/queueUtils';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isProduction = exports.reloadConfig = exports.parseMessage = exports.waitAndRetry = exports.objectToBuffer = exports.MessageSchemaContainer = exports.MessageHandlerConfigBuilder = exports.MessageHandlerConfig = exports.HandlerContainer = exports.MessageInvalidFormatError = exports.MessageValidationError = exports.isMessageError = exports.AbstractQueueService = void 0;
3
+ exports.isProduction = exports.reloadConfig = exports.parseMessage = exports.waitAndRetry = exports.objectToBuffer = exports.MessageSchemaContainer = exports.HandlerSpy = exports.MessageHandlerConfigBuilder = exports.MessageHandlerConfig = exports.HandlerContainer = exports.MessageInvalidFormatError = exports.MessageValidationError = exports.isMessageError = exports.AbstractQueueService = void 0;
4
4
  var AbstractQueueService_1 = require("./lib/queues/AbstractQueueService");
5
5
  Object.defineProperty(exports, "AbstractQueueService", { enumerable: true, get: function () { return AbstractQueueService_1.AbstractQueueService; } });
6
6
  var Errors_1 = require("./lib/errors/Errors");
@@ -11,6 +11,8 @@ var HandlerContainer_1 = require("./lib/queues/HandlerContainer");
11
11
  Object.defineProperty(exports, "HandlerContainer", { enumerable: true, get: function () { return HandlerContainer_1.HandlerContainer; } });
12
12
  Object.defineProperty(exports, "MessageHandlerConfig", { enumerable: true, get: function () { return HandlerContainer_1.MessageHandlerConfig; } });
13
13
  Object.defineProperty(exports, "MessageHandlerConfigBuilder", { enumerable: true, get: function () { return HandlerContainer_1.MessageHandlerConfigBuilder; } });
14
+ var HandlerSpy_1 = require("./lib/queues/HandlerSpy");
15
+ Object.defineProperty(exports, "HandlerSpy", { enumerable: true, get: function () { return HandlerSpy_1.HandlerSpy; } });
14
16
  var MessageSchemaContainer_1 = require("./lib/queues/MessageSchemaContainer");
15
17
  Object.defineProperty(exports, "MessageSchemaContainer", { enumerable: true, get: function () { return MessageSchemaContainer_1.MessageSchemaContainer; } });
16
18
  var queueUtils_1 = require("./lib/utils/queueUtils");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAWA,0EAAwE;AAA/D,4HAAA,oBAAoB,OAAA;AAgB7B,8CAI4B;AAH1B,wGAAA,cAAc,OAAA;AACd,gHAAA,sBAAsB,OAAA;AACtB,mHAAA,yBAAyB,OAAA;AAG3B,kEAQsC;AAPpC,oHAAA,gBAAgB,OAAA;AAChB,wHAAA,oBAAoB,OAAA;AACpB,+HAAA,2BAA2B,OAAA;AAQ7B,8EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAG/B,qDAAuD;AAA9C,4GAAA,cAAc,OAAA;AACvB,mDAAoD;AAA3C,yGAAA,YAAY,OAAA;AACrB,qDAAqD;AAA5C,0GAAA,YAAY,OAAA;AAErB,iDAAiE;AAAxD,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAWA,0EAAwE;AAA/D,4HAAA,oBAAoB,OAAA;AAgB7B,8CAI4B;AAH1B,wGAAA,cAAc,OAAA;AACd,gHAAA,sBAAsB,OAAA;AACtB,mHAAA,yBAAyB,OAAA;AAG3B,kEAQsC;AAPpC,oHAAA,gBAAgB,OAAA;AAChB,wHAAA,oBAAoB,OAAA;AACpB,+HAAA,2BAA2B,OAAA;AAO7B,sDAAoD;AAA3C,wGAAA,UAAU,OAAA;AAGnB,8EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAG/B,qDAAuD;AAA9C,4GAAA,cAAc,OAAA;AACvB,mDAAoD;AAA3C,yGAAA,YAAY,OAAA;AACrB,qDAAqD;AAA5C,0GAAA,YAAY,OAAA;AAErB,iDAAiE;AAAxD,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA"}
@@ -1,8 +1,9 @@
1
1
  import type { ErrorReporter, ErrorResolver, Either } from '@lokalise/node-core';
2
2
  import type { ZodSchema, ZodType } from 'zod';
3
3
  import type { MessageInvalidFormatError, MessageValidationError } from '../errors/Errors';
4
- import type { Logger, TransactionObservabilityManager } from '../types/MessageQueueTypes';
4
+ import type { Logger, TransactionObservabilityManager, MessageProcessingResult } from '../types/MessageQueueTypes';
5
5
  import type { MessageHandlerConfig } from './HandlerContainer';
6
+ import type { HandlerSpy, PublicHandlerSpy, HandlerSpyParams } from './HandlerSpy';
6
7
  export type QueueDependencies = {
7
8
  errorReporter: ErrorReporter;
8
9
  logger: Logger;
@@ -20,16 +21,17 @@ export type DeletionConfig = {
20
21
  forceDeleteInProduction?: boolean;
21
22
  };
22
23
  export type CommonQueueOptions = {
24
+ messageTypeField: string;
25
+ messageIdField?: string;
26
+ handlerSpy?: HandlerSpy<object> | HandlerSpyParams | boolean;
23
27
  logMessages?: boolean;
24
28
  };
25
29
  export type NewQueueOptions<CreationConfigType extends object> = {
26
- messageTypeField: string;
27
30
  locatorConfig?: never;
28
31
  deletionConfig?: DeletionConfig;
29
32
  creationConfig: CreationConfigType;
30
33
  } & CommonQueueOptions;
31
34
  export type ExistingQueueOptions<QueueLocatorType extends object> = {
32
- messageTypeField: string;
33
35
  locatorConfig: QueueLocatorType;
34
36
  deletionConfig?: DeletionConfig;
35
37
  creationConfig?: never;
@@ -50,10 +52,13 @@ export declare abstract class AbstractQueueService<MessagePayloadSchemas extends
50
52
  protected readonly errorReporter: ErrorReporter;
51
53
  readonly logger: Logger;
52
54
  protected readonly messageTypeField: string;
55
+ protected readonly messageIdField: string;
53
56
  protected readonly logMessages: boolean;
54
57
  protected readonly creationConfig?: QueueConfiguration;
55
58
  protected readonly locatorConfig?: QueueLocatorType;
56
59
  protected readonly deletionConfig?: DeletionConfig;
60
+ protected readonly _handlerSpy?: HandlerSpy<MessagePayloadSchemas>;
61
+ get handlerSpy(): PublicHandlerSpy<MessagePayloadSchemas>;
57
62
  constructor({ errorReporter, logger }: DependenciesType, options: OptionsType);
58
63
  protected abstract resolveSchema(message: MessagePayloadSchemas): Either<Error, ZodSchema<MessagePayloadSchemas>>;
59
64
  protected abstract resolveMessage(message: MessageEnvelopeType): Either<MessageInvalidFormatError | MessageValidationError, unknown>;
@@ -66,5 +71,6 @@ export declare abstract class AbstractQueueService<MessagePayloadSchemas extends
66
71
  */
67
72
  protected logMessage(messageLogEntry: unknown): void;
68
73
  protected handleError(err: unknown, context?: Record<string, unknown>): void;
74
+ protected handleMessageProcessed(message: MessagePayloadSchemas | null, processingResult: MessageProcessingResult, messageId?: string): void;
69
75
  abstract close(): Promise<unknown>;
70
76
  }
@@ -3,22 +3,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractQueueService = void 0;
4
4
  const node_util_1 = require("node:util");
5
5
  const node_core_1 = require("@lokalise/node-core");
6
+ const HandlerSpy_1 = require("./HandlerSpy");
6
7
  class AbstractQueueService {
7
8
  errorReporter;
8
9
  logger;
9
10
  messageTypeField;
11
+ messageIdField;
10
12
  logMessages;
11
13
  creationConfig;
12
14
  locatorConfig;
13
15
  deletionConfig;
16
+ _handlerSpy;
17
+ get handlerSpy() {
18
+ if (!this._handlerSpy) {
19
+ throw new Error('HandlerSpy was not instantiated, please pass `handlerSpy` parameter during queue service creation.');
20
+ }
21
+ return this._handlerSpy;
22
+ }
14
23
  constructor({ errorReporter, logger }, options) {
15
24
  this.errorReporter = errorReporter;
16
25
  this.logger = logger;
17
26
  this.messageTypeField = options.messageTypeField;
27
+ this.messageIdField = options.messageIdField ?? 'id';
18
28
  this.creationConfig = options.creationConfig;
19
29
  this.locatorConfig = options.locatorConfig;
20
30
  this.deletionConfig = options.deletionConfig;
21
31
  this.logMessages = options.logMessages ?? false;
32
+ this._handlerSpy = (0, HandlerSpy_1.resolveHandlerSpy)(options);
22
33
  }
23
34
  /**
24
35
  * Format message for logging
@@ -47,6 +58,14 @@ class AbstractQueueService {
47
58
  this.errorReporter.report({ error: err, context });
48
59
  }
49
60
  }
61
+ handleMessageProcessed(message, processingResult, messageId) {
62
+ if (this._handlerSpy) {
63
+ this._handlerSpy.addProcessedMessage({
64
+ message,
65
+ processingResult,
66
+ }, messageId);
67
+ }
68
+ }
50
69
  }
51
70
  exports.AbstractQueueService = AbstractQueueService;
52
71
  //# sourceMappingURL=AbstractQueueService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractQueueService.js","sourceRoot":"","sources":["../../../lib/queues/AbstractQueueService.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AAGjC,mDAAiE;AA8EjE,MAAsB,oBAAoB;IAYrB,aAAa,CAAe;IAC/B,MAAM,CAAQ;IACX,gBAAgB,CAAQ;IACxB,WAAW,CAAS;IACpB,cAAc,CAAqB;IACnC,aAAa,CAAmB;IAChC,cAAc,CAAiB;IAElD,YAAY,EAAE,aAAa,EAAE,MAAM,EAAoB,EAAE,OAAoB;QAC3E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAA;QAChD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;QAC5C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;QAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;QAE5C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAA;IACjD,CAAC;IAUD;;OAEG;IACO,iBAAiB,CAAC,OAA8B,EAAE,YAAoB;QAC9E,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,eAAwB;QAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IACpC,CAAC;IAES,WAAW,CAAC,GAAY,EAAE,OAAiC;QACnE,MAAM,SAAS,GAAG,IAAA,uCAA2B,EAAC,GAAG,CAAC,CAAA;QAClD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACvC,CAAC;aAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChB,GAAG,SAAS;gBACZ,GAAG,OAAO;aACX,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,iBAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;CAGF;AAtED,oDAsEC"}
1
+ {"version":3,"file":"AbstractQueueService.js","sourceRoot":"","sources":["../../../lib/queues/AbstractQueueService.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AAGjC,mDAAiE;AAYjE,6CAAgD;AAyEhD,MAAsB,oBAAoB;IAYrB,aAAa,CAAe;IAC/B,MAAM,CAAQ;IACX,gBAAgB,CAAQ;IACxB,cAAc,CAAQ;IACtB,WAAW,CAAS;IACpB,cAAc,CAAqB;IACnC,aAAa,CAAmB;IAChC,cAAc,CAAiB;IAC/B,WAAW,CAAoC;IAElE,IAAI,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,YAAY,EAAE,aAAa,EAAE,MAAM,EAAoB,EAAE,OAAoB;QAC3E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAA;QAChD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAA;QACpD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;QAC5C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;QAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;QAE5C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAA;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAA,8BAAiB,EAAwB,OAAO,CAAC,CAAA;IACtE,CAAC;IAUD;;OAEG;IACO,iBAAiB,CAAC,OAA8B,EAAE,YAAoB;QAC9E,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,eAAwB;QAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IACpC,CAAC;IAES,WAAW,CAAC,GAAY,EAAE,OAAiC;QACnE,MAAM,SAAS,GAAG,IAAA,uCAA2B,EAAC,GAAG,CAAC,CAAA;QAClD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACvC,CAAC;aAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChB,GAAG,SAAS;gBACZ,GAAG,OAAO;aACX,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,iBAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IAES,sBAAsB,CAC9B,OAAqC,EACrC,gBAAyC,EACzC,SAAkB;QAElB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAClC;gBACE,OAAO;gBACP,gBAAgB;aACjB,EACD,SAAS,CACV,CAAA;QACH,CAAC;IACH,CAAC;CAGF;AAnGD,oDAmGC"}
@@ -0,0 +1,25 @@
1
+ import type { MessageProcessingResult } from '../types/MessageQueueTypes';
2
+ import type { CommonQueueOptions } from './AbstractQueueService';
3
+ export type HandlerSpyParams = {
4
+ bufferSize?: number;
5
+ messageIdField?: string;
6
+ };
7
+ export type SpyResult<MessagePayloadSchemas extends object> = {
8
+ message: MessagePayloadSchemas | null;
9
+ processingResult: MessageProcessingResult;
10
+ };
11
+ export declare function isHandlerSpy<T extends object>(value: unknown): value is HandlerSpy<T>;
12
+ export type PublicHandlerSpy<MessagePayloadSchemas extends object> = Omit<HandlerSpy<MessagePayloadSchemas>, 'addProcessedMessage'>;
13
+ export declare class HandlerSpy<MessagePayloadSchemas extends object> {
14
+ name: string;
15
+ private readonly messageBuffer;
16
+ private readonly messageIdField;
17
+ private readonly spyPromises;
18
+ constructor(params?: HandlerSpyParams);
19
+ private messageMatchesFilter;
20
+ waitForMessageWithId(id: string, processingResult?: MessageProcessingResult): Promise<SpyResult<MessagePayloadSchemas>>;
21
+ waitForMessage(fields: Partial<MessagePayloadSchemas>, processingResult?: MessageProcessingResult): Promise<SpyResult<MessagePayloadSchemas>>;
22
+ clear(): void;
23
+ addProcessedMessage(processingResult: SpyResult<MessagePayloadSchemas>, messageId?: string): void;
24
+ }
25
+ export declare function resolveHandlerSpy<T extends object>(queueOptions: CommonQueueOptions): HandlerSpy<T> | undefined;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveHandlerSpy = exports.HandlerSpy = exports.isHandlerSpy = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const node_core_1 = require("@lokalise/node-core");
6
+ const toad_cache_1 = require("toad-cache");
7
+ function isHandlerSpy(value) {
8
+ return ((0, node_core_1.isObject)(value) &&
9
+ (value instanceof HandlerSpy || value.name === 'HandlerSpy'));
10
+ }
11
+ exports.isHandlerSpy = isHandlerSpy;
12
+ class HandlerSpy {
13
+ name = 'HandlerSpy';
14
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ messageBuffer;
16
+ messageIdField;
17
+ spyPromises;
18
+ constructor(params = {}) {
19
+ this.messageBuffer = new toad_cache_1.Fifo(params.bufferSize ?? 100);
20
+ // @ts-ignore
21
+ this.messageIdField = params.messageIdField ?? 'id';
22
+ this.spyPromises = [];
23
+ }
24
+ messageMatchesFilter(spyResult, fields, processingResult) {
25
+ return (Object.entries(fields).every(([key, value]) => {
26
+ // @ts-ignore
27
+ return spyResult.message[key] === value;
28
+ }) &&
29
+ (!processingResult || spyResult.processingResult === processingResult));
30
+ }
31
+ waitForMessageWithId(id, processingResult) {
32
+ return this.waitForMessage(
33
+ // @ts-ignore
34
+ {
35
+ [this.messageIdField]: id,
36
+ }, processingResult);
37
+ }
38
+ waitForMessage(fields, processingResult) {
39
+ const processedMessageEntry = Object.values(this.messageBuffer.items).find(
40
+ // @ts-ignore
41
+ (spyResult) => {
42
+ return this.messageMatchesFilter(spyResult.value, fields, processingResult);
43
+ });
44
+ if (processedMessageEntry) {
45
+ return Promise.resolve(processedMessageEntry.value);
46
+ }
47
+ let resolve;
48
+ const spyPromise = new Promise((_resolve) => {
49
+ resolve = _resolve;
50
+ });
51
+ this.spyPromises.push({
52
+ promise: spyPromise,
53
+ processingResult,
54
+ fields,
55
+ // @ts-ignore
56
+ resolve,
57
+ });
58
+ return spyPromise;
59
+ }
60
+ clear() {
61
+ this.messageBuffer.clear();
62
+ }
63
+ addProcessedMessage(processingResult, messageId) {
64
+ const resolvedMessageId = processingResult.message?.[this.messageIdField] ?? messageId ?? (0, node_crypto_1.randomUUID)();
65
+ // If we failed to parse message, let's store id at least
66
+ const resolvedProcessingResult = processingResult.message
67
+ ? processingResult
68
+ : {
69
+ ...processingResult,
70
+ message: {
71
+ [this.messageIdField]: messageId,
72
+ },
73
+ };
74
+ // @ts-ignore
75
+ const cacheId = `${resolvedMessageId}-${Date.now()}-${(Math.random() + 1)
76
+ .toString(36)
77
+ .substring(7)}`;
78
+ this.messageBuffer.set(cacheId, resolvedProcessingResult);
79
+ const foundPromise = this.spyPromises.find((spyPromise) => {
80
+ return this.messageMatchesFilter(resolvedProcessingResult, spyPromise.fields, spyPromise.processingResult);
81
+ });
82
+ if (foundPromise) {
83
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
84
+ foundPromise.resolve(processingResult);
85
+ const index = this.spyPromises.indexOf(foundPromise);
86
+ if (index > -1) {
87
+ // only splice array when item is found
88
+ this.spyPromises.splice(index, 1); // 2nd parameter means remove one item only
89
+ }
90
+ }
91
+ }
92
+ }
93
+ exports.HandlerSpy = HandlerSpy;
94
+ function resolveHandlerSpy(queueOptions) {
95
+ if (isHandlerSpy(queueOptions.handlerSpy)) {
96
+ return queueOptions.handlerSpy;
97
+ }
98
+ if (!queueOptions.handlerSpy) {
99
+ return undefined;
100
+ }
101
+ if (queueOptions.handlerSpy === true) {
102
+ return new HandlerSpy();
103
+ }
104
+ return new HandlerSpy(queueOptions.handlerSpy);
105
+ }
106
+ exports.resolveHandlerSpy = resolveHandlerSpy;
107
+ //# sourceMappingURL=HandlerSpy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HandlerSpy.js","sourceRoot":"","sources":["../../../lib/queues/HandlerSpy.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export interface QueueConsumer {
3
3
  start(): Promise<unknown>;
4
4
  close(): Promise<unknown>;
5
5
  }
6
+ export type MessageProcessingResult = 'retryLater' | 'consumed' | 'published' | 'error' | 'invalid_message';
6
7
  export interface SyncPublisher<MessagePayloadType> {
7
8
  publish(message: MessagePayloadType): void;
8
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@message-queue-toolkit/core",
3
- "version": "4.1.0",
3
+ "version": "5.0.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "Useful utilities, interfaces and base classes for message queue handling. Supports AMQP and SQS with a common abstraction on top currently",
@@ -17,25 +17,32 @@
17
17
  "build:release": "del-cli dist && del-cli coverage && npm run lint && tsc --project tsconfig.release.json",
18
18
  "lint": "eslint . --ext .ts",
19
19
  "lint:fix": "eslint . --ext .ts --fix",
20
- "test:coverage": "",
20
+ "test": "vitest",
21
+ "test:coverage": "npm test -- --coverage",
21
22
  "test:ci": "npm run docker:start:dev && npm run test:coverage && npm run docker:stop:dev",
22
23
  "docker:start:dev": "",
23
24
  "docker:stop:dev": "",
24
25
  "format": "prettier --write .",
25
26
  "prepublishOnly": "npm run build:release"
26
27
  },
27
- "dependencies": {},
28
+ "dependencies": {
29
+ "@lokalise/node-core": "^8.3.0",
30
+ "toad-cache": "^3.4.1"
31
+ },
28
32
  "devDependencies": {
29
- "@types/node": "^20.9.2",
30
- "@typescript-eslint/eslint-plugin": "^6.11.0",
31
- "@typescript-eslint/parser": "^6.11.0",
33
+ "@types/node": "^20.10.3",
34
+ "@typescript-eslint/eslint-plugin": "^6.13.2",
35
+ "@typescript-eslint/parser": "^6.13.2",
36
+ "@vitest/coverage-v8": "^0.34.6",
32
37
  "del-cli": "^5.1.0",
33
- "eslint": "^8.54.0",
34
- "eslint-config-prettier": "^9.0.0",
38
+ "eslint": "^8.55.0",
39
+ "eslint-config-prettier": "^9.1.0",
35
40
  "eslint-plugin-import": "^2.29.0",
36
41
  "eslint-plugin-prettier": "^5.0.1",
37
42
  "prettier": "^3.1.0",
38
- "typescript": "^5.2.2"
43
+ "typescript": "^5.3.2",
44
+ "vitest": "0.34.6",
45
+ "vite": "4.5.0"
39
46
  },
40
47
  "homepage": "https://github.com/kibertoad/message-queue-toolkit",
41
48
  "repository": {