@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
JavaScript
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