UNPKG

better-abstractsocket

Version:

A Node.js module for abstract Unix domain sockets on Linux and macOS.

110 lines (107 loc) 3.69 kB
//#region rolldown:runtime var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { key = keys[i]; if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: ((k) => from[k]).bind(null, key), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); //#endregion const node_net = __toESM(require("node:net")); const node_module = __toESM(require("node:module")); //#region src/index.ts const require$1 = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href); let binding = { socket: () => -1, bind: () => -1, connect: () => -1, close: () => {} }; let supported = false; try { binding = require$1("../build/Release/abstract-socket.node"); supported = true; } catch (error) { console.error("Failed to load abstract-socket bindings:", error); } var AbstractSocketErrnoException = class extends Error { code; errno; syscall; constructor(errno, syscall, extra) { super(`Abstract socket error: ${syscall} failed with code ${errno}`); this.code = "ERR_SOCKET"; this.errno = errno; this.syscall = syscall; if (extra) Object.assign(this, extra); } }; var AbstractSocketServer = class extends node_net.Server { listen(path, listeningListener) { let err = binding.socket(); if (err < 0) { const error = new AbstractSocketErrnoException(err, "socket"); this.emit("error", error); console.error(error); } const handle = { fd: err }; err = binding.bind(err, path); if (err < 0) { binding.close(handle.fd); const error = new AbstractSocketErrnoException(err, "bind"); this.emit("error", error); console.error(error); } console.debug("AbstractSocketServer listen:", handle, err); super.listen(handle, listeningListener); } }; function createConnection(name, connectListener) { const defaultOptions = { readable: true, writable: true }; let err = binding.socket(); if (err < 0) { const sock$1 = new node_net.Socket(defaultOptions); setImmediate(() => sock$1.emit("error", new AbstractSocketErrnoException(err, "socket"))); connectListener === null || connectListener === void 0 || connectListener(sock$1); return sock$1; } const options = Object.assign({ fd: err }, defaultOptions); console.debug("AbstractSocket connect:", options); err = binding.connect(err, name); if (err < 0) { binding.close(options.fd); const sock$1 = new node_net.Socket(defaultOptions); setImmediate(() => sock$1.emit("error", new AbstractSocketErrnoException(err, "connect"))); connectListener === null || connectListener === void 0 || connectListener(sock$1); console.error("AbstractSocket connect error:", err); return sock$1; } const sock = new node_net.Socket(options); connectListener === null || connectListener === void 0 || connectListener(sock); return sock; } const AbstractSocket = { Server: AbstractSocketServer, createConnection, supported }; //#endregion exports.AbstractSocket = AbstractSocket; exports.Server = AbstractSocketServer; exports.createConnection = createConnection;