@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.
55 lines • 2.05 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