const { createNamedPipe } = require('@kldzj/named-pipes');
// You may also name the pipe yourself,
// or even pass a writable absolute path.
const pipe = createNamedPipe(/* '/var/cool.sock', 0o640 */);
console.log('Path to socket:', pipe.path);
const sender = pipe.createSender();
const receiver = pipe.createReceiver();
// sender.connect() will create the pipe
await sender.connect();
// receiver.connect() will fail if the pipe does not exist
await receiver.connect();
// handle data
receiver.on('data', (c) => console.log(c.toString()));
// or pipe it somewhere
// receiver.getReadableStream().pipe(someDestinationStream);
// Sender might not be ready yet,
// wait for socket to be connected
await new Promise(resolve => {
sender.once('connected', () => {
// use the convenience write method
sender.write('hello world', resolve);
// or create a writable stream and pipe to it
// someSourceStream.pipe(sender.getWritableStream());
});
});
// destroy sender first to force write buffered chunks
// you might not need to do this if you're
// only using either a sender or reader
await sender.destroy();
// once you're done, destroy the pipe
await pipe.destroy();