better-abstractsocket
Version:
A Node.js module for abstract Unix domain sockets on Linux and macOS.
1 lines • 4.86 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","names":["binding: AbstractSocketBinding","errno: number","syscall: string","extra?: any","path: string","listeningListener?: () => void","name: string","connectListener?: (socket: net.Socket) => void","sock"],"sources":["../src/index.ts"],"sourcesContent":["import * as net from 'node:net'\nimport { createRequire } from 'node:module' \n\nconst require = createRequire(import.meta.url) \n\n\n// https://github.com/saghul/node-abstractsocket\n\ninterface AbstractSocketBinding {\n socket: () => number\n bind: (fd: number, name: string) => number\n connect: (fd: number, name: string) => number\n close: (fd: number) => void\n}\n\nlet binding: AbstractSocketBinding = {\n socket: () => -1,\n bind: () => -1,\n connect: () => -1,\n close: () => { },\n}\nlet supported = false\ntry {\n binding = require('../build/Release/abstract-socket.node')\n supported = true;\n} catch (error) {\n console.error('Failed to load abstract-socket bindings:', error)\n}\n\n\nclass AbstractSocketErrnoException extends Error implements NodeJS.ErrnoException {\n code: string\n errno: number\n syscall: string\n constructor(errno: number, syscall: string, extra?: any) {\n super(`Abstract socket error: ${syscall} failed with code ${errno}`)\n this.code = 'ERR_SOCKET'\n this.errno = errno\n this.syscall = syscall\n if (extra) {\n Object.assign(this, extra)\n }\n }\n}\n\nclass AbstractSocketServer extends net.Server {\n // @ts-ignore \n listen(path: string, listeningListener?: () => void) {\n let err = binding.socket()\n if (err < 0) {\n const error = new AbstractSocketErrnoException(err, 'socket')\n this.emit('error', error)\n console.error(error)\n }\n\n const handle = { fd: err }\n\n err = binding.bind(err, path)\n if (err < 0) {\n binding.close(handle.fd)\n const error = new AbstractSocketErrnoException(err, 'bind')\n this.emit('error', error)\n console.error(error)\n }\n console.debug('AbstractSocketServer listen:', handle, err)\n super.listen(handle, listeningListener)\n }\n}\n\nfunction createConnection(name: string, connectListener?: (socket: net.Socket) => void) {\n const defaultOptions = {\n readable: true,\n writable: true,\n }\n\n let err = binding.socket()\n if (err < 0) {\n const sock = new net.Socket(defaultOptions)\n setImmediate(() => sock.emit('error', new AbstractSocketErrnoException(err, 'socket')))\n connectListener?.(sock)\n return sock\n }\n\n const options = Object.assign({ fd: err }, defaultOptions)\n\n console.debug('AbstractSocket connect:', options)\n\n\n // yes, connect is synchronous, so sue me\n err = binding.connect(err, name)\n if (err < 0) {\n binding.close(options.fd)\n const sock = new net.Socket(defaultOptions)\n setImmediate(() => sock.emit('error', new AbstractSocketErrnoException(err, 'connect')))\n connectListener?.(sock)\n console.error('AbstractSocket connect error:', err)\n return sock\n }\n\n const sock = new net.Socket(options)\n connectListener?.(sock)\n return sock\n};\n\nexport const AbstractSocket = {\n Server: AbstractSocketServer,\n createConnection,\n supported\n}\n\nexport { AbstractSocketServer as Server, createConnection };"],"mappings":";;;;AAGA,MAAM,UAAU,cAAc,OAAO,KAAK,IAAI;AAY9C,IAAIA,UAAiC;CACnC,QAAQ,MAAM;CACd,MAAM,MAAM;CACZ,SAAS,MAAM;CACf,OAAO,MAAM,CAAG;AACjB;AACD,IAAI,YAAY;AAChB,IAAI;AACF,WAAU,QAAQ,wCAAwC;AAC1D,aAAY;AACb,SAAQ,OAAO;AACd,SAAQ,MAAM,4CAA4C,MAAM;AACjE;AAGD,IAAM,+BAAN,cAA2C,MAAuC;CAChF;CACA;CACA;CACA,YAAYC,OAAeC,SAAiBC,OAAa;AACvD,SAAO,yBAAyB,QAAQ,oBAAoB,QAAQ;AACpE,OAAK,OAAO;AACZ,OAAK,QAAQ;AACb,OAAK,UAAU;AACf,MAAI,MACF,QAAO,OAAO,MAAM,MAAM;CAE7B;AACF;AAED,IAAM,uBAAN,cAAmC,IAAI,OAAO;CAE5C,OAAOC,MAAcC,mBAAgC;EACnD,IAAI,MAAM,QAAQ,QAAQ;AAC1B,MAAI,MAAM,GAAG;GACX,MAAM,QAAQ,IAAI,6BAA6B,KAAK;AACpD,QAAK,KAAK,SAAS,MAAM;AACzB,WAAQ,MAAM,MAAM;EACrB;EAED,MAAM,SAAS,EAAE,IAAI,IAAK;AAE1B,QAAM,QAAQ,KAAK,KAAK,KAAK;AAC7B,MAAI,MAAM,GAAG;AACX,WAAQ,MAAM,OAAO,GAAG;GACxB,MAAM,QAAQ,IAAI,6BAA6B,KAAK;AACpD,QAAK,KAAK,SAAS,MAAM;AACzB,WAAQ,MAAM,MAAM;EACrB;AACD,UAAQ,MAAM,gCAAgC,QAAQ,IAAI;AAC1D,QAAM,OAAO,QAAQ,kBAAkB;CACxC;AACF;AAED,SAAS,iBAAiBC,MAAcC,iBAAgD;CACtF,MAAM,iBAAiB;EACrB,UAAU;EACV,UAAU;CACX;CAED,IAAI,MAAM,QAAQ,QAAQ;AAC1B,KAAI,MAAM,GAAG;EACX,MAAMC,SAAO,IAAI,IAAI,OAAO;AAC5B,eAAa,MAAM,OAAK,KAAK,SAAS,IAAI,6BAA6B,KAAK,UAAU,CAAC;AACvF,4EAAkBA,OAAK;AACvB,SAAOA;CACR;CAED,MAAM,UAAU,OAAO,OAAO,EAAE,IAAI,IAAK,GAAE,eAAe;AAE1D,SAAQ,MAAM,2BAA2B,QAAQ;AAIjD,OAAM,QAAQ,QAAQ,KAAK,KAAK;AAChC,KAAI,MAAM,GAAG;AACX,UAAQ,MAAM,QAAQ,GAAG;EACzB,MAAMA,SAAO,IAAI,IAAI,OAAO;AAC5B,eAAa,MAAM,OAAK,KAAK,SAAS,IAAI,6BAA6B,KAAK,WAAW,CAAC;AACxF,4EAAkBA,OAAK;AACvB,UAAQ,MAAM,iCAAiC,IAAI;AACnD,SAAOA;CACR;CAED,MAAM,OAAO,IAAI,IAAI,OAAO;AAC5B,2EAAkB,KAAK;AACvB,QAAO;AACR;AAED,MAAa,iBAAiB;CAC1B,QAAQ;CACR;CACA;AACH"}