UNPKG

@seriousme/opifex

Version:

MQTT client & server for Deno & NodeJS

57 lines 1.78 kB
import { Writable } from "node:stream"; /** * Closes a Node.js socket if it is not already closed * @param sock - The Node.js socket to close */ function closer(sock) { if (!sock.closed) { sock.end(); } } /** * Wraps a Node.js socket into a standard web streams-based socket connection * @param socket - The Node.js socket to wrap * @returns A socket connection object with readable/writable streams and close method */ export function wrapNodeSocket(socket) { const readable = new ReadableStream({ type: "bytes", start(controller) { socket.on("data", (data) => { controller.enqueue(data); const desiredSize = controller.desiredSize ?? 0; if (desiredSize <= 0) { // The internal queue is full, so propagate // the backpressure signal to the underlying source. socket.pause(); } }); socket.on("error", (err) => controller.error(err)); socket.on("end", () => { // close the controller controller.close(); // and unlock the last BYOB read request controller.byobRequest?.respond(0); }); }, pull: () => { socket.resume(); }, cancel: () => { socket.end(); }, }); const writable = Writable.toWeb(socket); const remoteAddr = { hostname: socket.remoteAddress || "", port: socket.remotePort || 0, }; const conn = { readable: readable, writable: writable, close: () => closer(socket), remoteAddr, }; return conn; } //# sourceMappingURL=wrapNodeSocket.js.map