UNPKG

@awesomeniko/kafka-trail

Version:

A Node.js library for managing message queue with Kafka

50 lines 1.67 kB
import { v4 } from "uuid"; import { ktEncode, ktDecode } from "../libs/helpers/default-data-parser.js"; import { CreateDlqTopicName } from "../libs/helpers/topic-name.js"; const createTopicEvent = (settings, validatorFn) => { const validatePayload = (payload) => { validatorFn?.validate?.(payload); return true; }; const fn = (payload, { messageKey, meta }) => { validatePayload(payload); let payloadToSend; if (validatorFn) { payloadToSend = validatorFn.encode(payload); } else { payloadToSend = ktEncode(payload); } return { topicName: settings.topic, message: payloadToSend, messageKey: messageKey, meta: { ...meta, traceId: meta?.traceId ?? v4(), }, }; }; fn.topicSettings = settings; fn.decode = ((data) => { const decoded = (validatorFn?.decode ?? (ktDecode))(data); validatePayload(decoded); return decoded; }); return fn; }; export const KTTopic = (_settings, _validatorFn) => { throw new Error("Deprecated. use CreateKTTopic(...)"); }; export const DLQKTTopic = (settings, validatorFn) => { return createTopicEvent({ ...settings, createDLQ: true, topic: CreateDlqTopicName(settings.topic) }, validatorFn); }; export const CreateKTTopic = (settings, validatorFn) => { const BaseTopic = createTopicEvent(settings, validatorFn); let DLQTopic = null; if (settings.createDLQ) { DLQTopic = DLQKTTopic(settings); } return { BaseTopic, DLQTopic }; }; //# sourceMappingURL=topic.js.map