@message-queue-toolkit/core 10.1.0 → 11.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
@@ -6,7 +6,7 @@ export { isShallowSubset, objectMatches } from './lib/utils/matchUtils';
6
6
  export { RetryMessageLaterError } from './lib/errors/RetryMessageLaterError';
7
7
  export { DoNotProcessMessageError } from './lib/errors/DoNotProcessError';
8
8
  export { HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, } from './lib/queues/HandlerContainer';
9
- export type { BarrierCallback, BarrierResult, BarrierResultPositive, BarrierResultNegative, HandlerContainerOptions, Handler, Prehandler, PrehandlingOutputs, } from './lib/queues/HandlerContainer';
9
+ export type { BarrierCallback, BarrierResult, BarrierResultPositive, BarrierResultNegative, HandlerContainerOptions, Handler, Prehandler, PreHandlingOutputs, } from './lib/queues/HandlerContainer';
10
10
  export { HandlerSpy } from './lib/queues/HandlerSpy';
11
11
  export type { SpyResult, HandlerSpyParams, PublicHandlerSpy } from './lib/queues/HandlerSpy';
12
12
  export { MessageSchemaContainer } from './lib/queues/MessageSchemaContainer';
@@ -3,7 +3,7 @@ import type { ZodSchema, ZodType } from 'zod';
3
3
  import type { MessageInvalidFormatError, MessageValidationError } from '../errors/Errors';
4
4
  import type { Logger, MessageProcessingResult } from '../types/MessageQueueTypes';
5
5
  import type { DeletionConfig, QueueDependencies, QueueOptions } from '../types/queueOptionsTypes';
6
- import type { BarrierCallback, BarrierResult, Prehandler, PrehandlerResult, PrehandlingOutputs } from './HandlerContainer';
6
+ import type { BarrierCallback, BarrierResult, Prehandler, PrehandlerResult, PreHandlingOutputs } from './HandlerContainer';
7
7
  import type { HandlerSpy, PublicHandlerSpy } from './HandlerSpy';
8
8
  export type Deserializer<MessagePayloadType extends object> = (message: unknown, type: ZodType<MessagePayloadType>, errorProcessor: ErrorResolver) => Either<MessageInvalidFormatError | MessageValidationError, MessagePayloadType>;
9
9
  type CommonQueueLocator = {
@@ -34,13 +34,13 @@ export declare abstract class AbstractQueueService<MessagePayloadSchemas extends
34
34
  protected logProcessedMessage(_message: MessagePayloadSchemas | null, processingResult: MessageProcessingResult, messageId?: string): void;
35
35
  protected handleError(err: unknown, context?: Record<string, unknown>): void;
36
36
  protected handleMessageProcessed(message: MessagePayloadSchemas | null, processingResult: MessageProcessingResult, messageId?: string): void;
37
- protected processPrehandlersInternal(prehandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], message: MessagePayloadSchemas): Promise<PrehandlerOutput>;
38
- protected preHandlerBarrierInternal<BarrierOutput>(barrier: BarrierCallback<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, BarrierOutput> | undefined, message: MessagePayloadSchemas, executionContext: ExecutionContext, prehandlerOutput: PrehandlerOutput): Promise<BarrierResult<BarrierOutput>>;
39
- protected abstract resolveNextFunction(prehandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], message: MessagePayloadSchemas, index: number, prehandlerOutput: PrehandlerOutput, resolve: (value: PrehandlerOutput | PromiseLike<PrehandlerOutput>) => void, reject: (err: Error) => void): (prehandlerResult: PrehandlerResult) => void;
40
- protected resolveNextPreHandlerFunctionInternal(prehandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], executionContext: ExecutionContext, message: MessagePayloadSchemas, index: number, prehandlerOutput: PrehandlerOutput, resolve: (value: PrehandlerOutput | PromiseLike<PrehandlerOutput>) => void, reject: (err: Error) => void): (prehandlerResult: PrehandlerResult) => void;
37
+ protected processPrehandlersInternal(preHandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], message: MessagePayloadSchemas): Promise<PrehandlerOutput>;
38
+ protected preHandlerBarrierInternal<BarrierOutput>(barrier: BarrierCallback<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, BarrierOutput> | undefined, message: MessagePayloadSchemas, executionContext: ExecutionContext, preHandlerOutput: PrehandlerOutput): Promise<BarrierResult<BarrierOutput>>;
39
+ protected abstract resolveNextFunction(preHandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], message: MessagePayloadSchemas, index: number, preHandlerOutput: PrehandlerOutput, resolve: (value: PrehandlerOutput | PromiseLike<PrehandlerOutput>) => void, reject: (err: Error) => void): (preHandlerResult: PrehandlerResult) => void;
40
+ protected resolveNextPreHandlerFunctionInternal(preHandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], executionContext: ExecutionContext, message: MessagePayloadSchemas, index: number, preHandlerOutput: PrehandlerOutput, resolve: (value: PrehandlerOutput | PromiseLike<PrehandlerOutput>) => void, reject: (err: Error) => void): (preHandlerResult: PrehandlerResult) => void;
41
41
  protected abstract processPrehandlers(message: MessagePayloadSchemas, messageType: string): Promise<PrehandlerOutput>;
42
- protected abstract preHandlerBarrier<BarrierOutput>(message: MessagePayloadSchemas, messageType: string, prehandlerOutput: PrehandlerOutput): Promise<BarrierResult<BarrierOutput>>;
43
- protected abstract processMessage(message: MessagePayloadSchemas, messageType: string, prehandlingOutputs: PrehandlingOutputs<PrehandlerOutput, any>): Promise<Either<'retryLater', 'success'>>;
42
+ protected abstract preHandlerBarrier<BarrierOutput>(message: MessagePayloadSchemas, messageType: string, preHandlerOutput: PrehandlerOutput): Promise<BarrierResult<BarrierOutput>>;
43
+ protected abstract processMessage(message: MessagePayloadSchemas, messageType: string, preHandlingOutputs: PreHandlingOutputs<PrehandlerOutput, any>): Promise<Either<'retryLater', 'success'>>;
44
44
  abstract close(): Promise<unknown>;
45
45
  }
46
46
  export {};
@@ -77,14 +77,14 @@ class AbstractQueueService {
77
77
  this.logProcessedMessage(message, processingResult, resolvedMessageId);
78
78
  }
79
79
  }
80
- processPrehandlersInternal(prehandlers, message) {
81
- if (prehandlers.length === 0) {
80
+ processPrehandlersInternal(preHandlers, message) {
81
+ if (preHandlers.length === 0) {
82
82
  return Promise.resolve({});
83
83
  }
84
84
  return new Promise((resolve, reject) => {
85
85
  try {
86
- const prehandlerOutput = {};
87
- const next = this.resolveNextFunction(prehandlers, message, 0, prehandlerOutput, resolve, reject);
86
+ const preHandlerOutput = {};
87
+ const next = this.resolveNextFunction(preHandlers, message, 0, preHandlerOutput, resolve, reject);
88
88
  next({ result: 'success' });
89
89
  }
90
90
  catch (err) {
@@ -92,7 +92,7 @@ class AbstractQueueService {
92
92
  }
93
93
  });
94
94
  }
95
- async preHandlerBarrierInternal(barrier, message, executionContext, prehandlerOutput) {
95
+ async preHandlerBarrierInternal(barrier, message, executionContext, preHandlerOutput) {
96
96
  if (!barrier) {
97
97
  // @ts-ignore
98
98
  return {
@@ -101,22 +101,22 @@ class AbstractQueueService {
101
101
  };
102
102
  }
103
103
  // @ts-ignore
104
- return await barrier(message, executionContext, prehandlerOutput);
104
+ return await barrier(message, executionContext, preHandlerOutput);
105
105
  }
106
106
  // eslint-disable-next-line max-params
107
- resolveNextPreHandlerFunctionInternal(prehandlers, executionContext, message, index, prehandlerOutput, resolve, reject) {
108
- return (prehandlerResult) => {
109
- if (prehandlerResult.error) {
110
- reject(prehandlerResult.error);
107
+ resolveNextPreHandlerFunctionInternal(preHandlers, executionContext, message, index, preHandlerOutput, resolve, reject) {
108
+ return (preHandlerResult) => {
109
+ if (preHandlerResult.error) {
110
+ reject(preHandlerResult.error);
111
111
  }
112
- if (prehandlers.length < index + 1) {
113
- resolve(prehandlerOutput);
112
+ if (preHandlers.length < index + 1) {
113
+ resolve(preHandlerOutput);
114
114
  }
115
115
  else {
116
116
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call
117
- prehandlers[index](message, executionContext,
117
+ preHandlers[index](message, executionContext,
118
118
  // @ts-ignore
119
- prehandlerOutput, this.resolveNextPreHandlerFunctionInternal(prehandlers, executionContext, message, index + 1, prehandlerOutput, resolve, reject));
119
+ preHandlerOutput, this.resolveNextPreHandlerFunctionInternal(preHandlers, executionContext, message, index + 1, preHandlerOutput, resolve, reject));
120
120
  }
121
121
  };
122
122
  }
@@ -2,8 +2,8 @@ import type { Either } from '@lokalise/node-core';
2
2
  import type { ZodSchema } from 'zod';
3
3
  import type { DoNotProcessMessageError } from '../errors/DoNotProcessError';
4
4
  import type { RetryMessageLaterError } from '../errors/RetryMessageLaterError';
5
- export type PrehandlingOutputs<PrehandlerOutput = undefined, BarrierOutput = undefined> = {
6
- prehandlerOutput: PrehandlerOutput;
5
+ export type PreHandlingOutputs<PrehandlerOutput = undefined, BarrierOutput = undefined> = {
6
+ preHandlerOutput: PrehandlerOutput;
7
7
  barrierOutput: BarrierOutput;
8
8
  };
9
9
  export type LogFormatter<MessagePayloadSchema> = (message: MessagePayloadSchema) => unknown;
@@ -17,20 +17,20 @@ export type BarrierResultNegative = {
17
17
  output?: never;
18
18
  };
19
19
  export type PrehandlerResult = Either<DoNotProcessMessageError | RetryMessageLaterError, 'success'>;
20
- export type BarrierCallback<MessagePayloadSchema extends object, ExecutionContext, PrehandlerOutput, BarrierOutput> = (message: MessagePayloadSchema, context: ExecutionContext, prehandlerOutput: PrehandlerOutput) => Promise<BarrierResult<BarrierOutput>>;
21
- export type Prehandler<MessagePayloadSchema extends object, ExecutionContext, PrehandlerOutput> = (message: MessagePayloadSchema, context: ExecutionContext, prehandlerOutput: Partial<PrehandlerOutput>, next: (result: PrehandlerResult) => void) => void;
20
+ export type BarrierCallback<MessagePayloadSchema extends object, ExecutionContext, PrehandlerOutput, BarrierOutput> = (message: MessagePayloadSchema, context: ExecutionContext, preHandlerOutput: PrehandlerOutput) => Promise<BarrierResult<BarrierOutput>>;
21
+ export type Prehandler<MessagePayloadSchema extends object, ExecutionContext, PrehandlerOutput> = (message: MessagePayloadSchema, context: ExecutionContext, preHandlerOutput: Partial<PrehandlerOutput>, next: (result: PrehandlerResult) => void) => void;
22
22
  export declare const defaultLogFormatter: <MessagePayloadSchema>(message: MessagePayloadSchema) => MessagePayloadSchema;
23
23
  export type HandlerConfigOptions<MessagePayloadSchema extends object, ExecutionContext, PrehandlerOutput, BarrierOutput> = {
24
24
  messageLogFormatter?: LogFormatter<MessagePayloadSchema>;
25
25
  preHandlerBarrier?: BarrierCallback<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>;
26
- prehandlers?: Prehandler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput>[];
26
+ preHandlers?: Prehandler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput>[];
27
27
  };
28
28
  export declare class MessageHandlerConfig<const MessagePayloadSchema extends object, const ExecutionContext, const PrehandlerOutput = undefined, const BarrierOutput = unknown> {
29
29
  readonly schema: ZodSchema<MessagePayloadSchema>;
30
30
  readonly handler: Handler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>;
31
31
  readonly messageLogFormatter: LogFormatter<MessagePayloadSchema>;
32
32
  readonly preHandlerBarrier?: BarrierCallback<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>;
33
- readonly prehandlers: Prehandler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput>[];
33
+ readonly preHandlers: Prehandler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput>[];
34
34
  constructor(schema: ZodSchema<MessagePayloadSchema>, handler: Handler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>, options?: HandlerConfigOptions<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>);
35
35
  }
36
36
  export declare class MessageHandlerConfigBuilder<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined> {
@@ -39,7 +39,7 @@ export declare class MessageHandlerConfigBuilder<MessagePayloadSchemas extends o
39
39
  addConfig<MessagePayloadSchema extends MessagePayloadSchemas, const BarrierOutput>(schema: ZodSchema<MessagePayloadSchema>, handler: Handler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>, options?: HandlerConfigOptions<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>): this;
40
40
  build(): MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, any>[];
41
41
  }
42
- export type Handler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput = undefined, BarrierOutput = undefined> = (message: MessagePayloadSchemas, context: ExecutionContext, prehandlingOutputs: PrehandlingOutputs<PrehandlerOutput, BarrierOutput>) => Promise<Either<'retryLater', 'success'>>;
42
+ export type Handler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput = undefined, BarrierOutput = undefined> = (message: MessagePayloadSchemas, context: ExecutionContext, preHandlingOutputs: PreHandlingOutputs<PrehandlerOutput, BarrierOutput>) => Promise<Either<'retryLater', 'success'>>;
43
43
  export type HandlerContainerOptions<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined> = {
44
44
  messageHandlers: MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[];
45
45
  messageTypeField: string;
@@ -8,13 +8,13 @@ class MessageHandlerConfig {
8
8
  handler;
9
9
  messageLogFormatter;
10
10
  preHandlerBarrier;
11
- prehandlers;
11
+ preHandlers;
12
12
  constructor(schema, handler, options) {
13
13
  this.schema = schema;
14
14
  this.handler = handler;
15
15
  this.messageLogFormatter = options?.messageLogFormatter ?? exports.defaultLogFormatter;
16
16
  this.preHandlerBarrier = options?.preHandlerBarrier;
17
- this.prehandlers = options?.prehandlers ?? [];
17
+ this.preHandlers = options?.preHandlers ?? [];
18
18
  }
19
19
  }
20
20
  exports.MessageHandlerConfig = MessageHandlerConfig;
@@ -41,8 +41,8 @@ export type QueuePublisherOptions<CreationConfigType extends CommonCreationConfi
41
41
  export type DeadLetterQueueOptions<CreationConfigType extends object, QueueLocatorType extends object, DeadLetterQueueIntegrationOptions extends object> = {
42
42
  deletionConfig?: DeletionConfig;
43
43
  } & DeadLetterQueueIntegrationOptions & (NewQueueOptions<CreationConfigType> | ExistingQueueOptions<QueueLocatorType>);
44
- export type QueueConsumerOptions<CreationConfigType extends object, QueueLocatorType extends object, DeadLetterQueueIntegrationOptions extends object, MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined> = QueueOptions<CreationConfigType, QueueLocatorType> & {
44
+ export type QueueConsumerOptions<CreationConfigType extends object, QueueLocatorType extends object, DeadLetterQueueIntegrationOptions extends object, MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined, DeadLetterQueueCreationConfigType extends object = CreationConfigType, DeadLetterQueueQueueLocatorType extends object = QueueLocatorType> = QueueOptions<CreationConfigType, QueueLocatorType> & {
45
45
  handlers: MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[];
46
- deadLetterQueue?: DeadLetterQueueOptions<CreationConfigType, QueueLocatorType, DeadLetterQueueIntegrationOptions>;
46
+ deadLetterQueue?: DeadLetterQueueOptions<DeadLetterQueueCreationConfigType, DeadLetterQueueQueueLocatorType, DeadLetterQueueIntegrationOptions>;
47
47
  };
48
48
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@message-queue-toolkit/core",
3
- "version": "10.1.0",
3
+ "version": "11.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",
@@ -25,23 +25,22 @@
25
25
  "prepublishOnly": "npm run build:release"
26
26
  },
27
27
  "dependencies": {
28
- "@lokalise/node-core": "^9.10.1",
28
+ "@lokalise/node-core": "^9.14.0",
29
29
  "fast-equals": "^5.0.1",
30
30
  "toad-cache": "^3.7.0"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^20.11.25",
34
- "@typescript-eslint/eslint-plugin": "^7.1.1",
35
- "@typescript-eslint/parser": "^7.1.1",
36
- "@vitest/coverage-v8": "^1.4.0",
34
+ "@typescript-eslint/eslint-plugin": "^7.7.1",
35
+ "@typescript-eslint/parser": "^7.7.1",
36
+ "@vitest/coverage-v8": "^1.5.0",
37
37
  "del-cli": "^5.1.0",
38
38
  "eslint": "^8.57.0",
39
- "eslint-config-prettier": "^9.1.0",
40
39
  "eslint-plugin-import": "^2.29.1",
41
- "eslint-plugin-prettier": "^5.1.3",
40
+ "eslint-plugin-vitest": "0.4.1",
42
41
  "prettier": "^3.2.5",
43
- "typescript": "^5.4.2",
44
- "vitest": "^1.4.0"
42
+ "typescript": "^5.4.5",
43
+ "vitest": "^1.5.0"
45
44
  },
46
45
  "homepage": "https://github.com/kibertoad/message-queue-toolkit",
47
46
  "repository": {