@awesomeniko/kafka-trail
Version:
A Node.js library for managing message queue with Kafka
50 lines • 1.67 kB
JavaScript
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