UNPKG

@message-queue-toolkit/core

Version:

Useful utilities, interfaces and base classes for message queue handling. Supports AMQP and SQS with a common abstraction on top currently

66 lines 2.13 kB
import { isCommonEventDefinition } from '@message-queue-toolkit/schemas'; export const defaultLogFormatter = (message) => message; export class MessageHandlerConfig { schema; definition; handler; messageLogFormatter; preHandlerBarrier; preHandlers; constructor(schema, handler, options, eventDefinition) { this.schema = schema; this.definition = eventDefinition; this.handler = handler; this.messageLogFormatter = options?.messageLogFormatter ?? defaultLogFormatter; this.preHandlerBarrier = options?.preHandlerBarrier; this.preHandlers = options?.preHandlers ?? []; } } export class MessageHandlerConfigBuilder { configs; constructor() { this.configs = []; } addConfig(schema, handler, options) { const resolvedSchema = isCommonEventDefinition(schema) ? // @ts-ignore schema.consumerSchema : schema; const definition = isCommonEventDefinition(schema) ? schema : undefined; this.configs.push( // @ts-ignore new MessageHandlerConfig(resolvedSchema, // @ts-ignore handler, options, definition)); return this; } build() { return this.configs; } } export class HandlerContainer { messageHandlers; messageTypeField; constructor(options) { this.messageTypeField = options.messageTypeField; this.messageHandlers = this.resolveHandlerMap(options.messageHandlers); } resolveHandler(messageType) { const handler = this.messageHandlers[messageType]; if (!handler) { throw new Error(`Unsupported message type: ${messageType}`); } // @ts-ignore return handler; } resolveHandlerMap(supportedHandlers) { return supportedHandlers.reduce((acc, entry) => { // @ts-ignore const messageType = entry.schema.shape[this.messageTypeField].value; // @ts-ignore acc[messageType] = entry; return acc; }, {}); } } //# sourceMappingURL=HandlerContainer.js.map