@ydbjs/topic
Version:
YDB Topics client for publish-subscribe messaging. Provides at-least-once delivery, exactly-once publishing, FIFO guarantees, and scalable message processing for unstructured data.
49 lines • 1.94 kB
JavaScript
import { create, protoInt64 } from "@bufbuild/protobuf";
import { DurationSchema, timestampFromDate } from "@bufbuild/protobuf/wkt";
import { StreamReadMessage_InitRequest_TopicReadSettingsSchema } from "@ydbjs/api/topic";
import ms from "ms";
export let _parse_topics_read_settings = function parse_topics_read_settings(topic) {
let settings = [];
let parseDuration = function parseDuration(duration) {
if (typeof duration === 'string') {
duration = ms(duration);
}
if (typeof duration === 'number') {
let seconds = Math.floor(duration / 1000);
return create(DurationSchema, {
seconds: protoInt64.parse(seconds),
nanos: (duration - seconds * 1000) * 1_000_000,
});
}
return duration;
};
let parseTimestamp = function parseTimestamp(timestamp) {
if (typeof timestamp === 'number') {
timestamp = new Date(timestamp);
}
if (timestamp instanceof Date) {
timestamp = timestampFromDate(timestamp);
}
return timestamp;
};
if (typeof topic === "string") {
settings.push(create(StreamReadMessage_InitRequest_TopicReadSettingsSchema, {
path: topic
}));
}
else if (!Array.isArray(topic)) {
topic = [topic];
}
if (Array.isArray(topic)) {
for (let topicSource of topic) {
settings.push(create(StreamReadMessage_InitRequest_TopicReadSettingsSchema, {
path: topicSource.path,
...(topicSource.maxLag && { maxLag: parseDuration(topicSource.maxLag) }),
...(topicSource.readFrom && { readFrom: parseTimestamp(topicSource.readFrom) }),
...(topicSource.partitionIds && { partitionIds: topicSource.partitionIds }),
}));
}
}
return settings;
};
//# sourceMappingURL=_topics_config.js.map