UNPKG

@arturwojnar/hermes-postgresql

Version:

Production-Ready TypeScript Outbox Pattern for PostgreSQL

36 lines 1.77 kB
import { assertNever } from '@arturwojnar/hermes'; import { XLogData_WalRecordStartByteNumber } from './consts.js'; import { processBeginMessage } from './processBeginMessage.js'; import { processCommitMessage } from './processCommitMessage.js'; import { processInsertMessage as _processInsertMessage } from './processInsertMessage.js'; import { processPrimaryKeepAliveMessage } from './processPrimaryKeepAliveMessage.js'; import { MessageType, parseMessageType, parseTopLevelType, TopLevelType } from './types.js'; const onData = (columnConfig) => { const processInsertMessage = _processInsertMessage(columnConfig); return (message) => { const topLevelType = parseTopLevelType(String.fromCharCode(message[0])); switch (topLevelType) { case TopLevelType.PrimaryKeepaliveMessage: return processPrimaryKeepAliveMessage(message); case TopLevelType.XLogData: { const data = message.subarray(XLogData_WalRecordStartByteNumber); const symbol = String.fromCharCode(data[0]); const type = parseMessageType(symbol); switch (type) { case MessageType.Begin: return processBeginMessage(data); case MessageType.Insert: return processInsertMessage(data); case MessageType.Commit: return processCommitMessage(data); default: return { topLevelType: TopLevelType.XLogData, messageType: MessageType.Other, symbol }; } } default: assertNever(topLevelType); } }; }; export { onData }; //# sourceMappingURL=onData.js.map