UNPKG

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