import { IsomorphicBuffer } from "../helpers.js"; import { SocketAdapter } from "./shared.js"; import { SocketProtocolAdapter } from "./shared.socket-protocol-adapter.js"; // export type SocketProtocolAdapter = SocketAdapter; export interface SocketProtocolTransformer { receive: (data: TSource, self: SocketProtocolAdapter) => TMessage[]; send: (data: TMessage, self: SocketProtocolAdapter) => TSource; close?: (socket: SocketAdapter) => Promise; } export function pipeSocketProtocolTransformer(source: SocketProtocolTransformer, target: SocketProtocolTransformer) { const result: SocketProtocolTransformer = { receive(data, self) { return source.receive(data, self)?.flatMap(inter => target.receive(inter, self)); }, send(data, self) { return source.send(target.send(data, self), self); }, async close(socket) { await source.close?.(socket); await target.close?.(socket); } }; return result; }