import { SyncItem } from 'src/dtos/sync.dto'; import { SyncEntityType } from 'src/enum'; import { SyncAck } from 'src/types'; type Impossible = { [P in K]: never; }; type Exact = U & Impossible>; export const fromAck = (ack: string): SyncAck => { const [type, updateId] = ack.split('|'); return { type: type as SyncEntityType, updateId }; }; export const toAck = ({ type, updateId }: SyncAck) => [type, updateId].join('|'); export const mapJsonLine = (object: unknown) => JSON.stringify(object) + '\n'; export const serialize = ({ type, updateId, data, }: { type: T; updateId: string; data: Exact; }) => mapJsonLine({ type, data, ack: toAck({ type, updateId }) });