better-abstractsocket
Version:
A Node.js module for abstract Unix domain sockets on Linux and macOS.
110 lines (107 loc) • 3.69 kB
JavaScript
//#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;