From b9b7e4c3a04f012b5d2e8d4f1393128c25cb0c61 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Mar 2024 11:55:52 -0300 Subject: src/hero.mjs: makePipeReader() now returns a function for closing it --- src/hero.mjs | 46 ++++++++++++++++++++++++++-------------------- tests/js/hero.mjs | 4 ---- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/hero.mjs b/src/hero.mjs index 451198d..ed105cd 100644 --- a/src/hero.mjs +++ b/src/hero.mjs @@ -355,6 +355,9 @@ export const makePipeReaderFn = ({ } = {}) => path => { mkfifo(path); fs.createReadStream(path, "UTF-8").on("data", makeLineEmitter(lineFn)); + return () => + new Promise((resolve, reject) => + fs.createWriteStream(path).end().close(resolve)); }; export const makePipeReader = makePipeReaderFn(); @@ -374,26 +377,29 @@ export const buildRoutes = (routes, globalInterceptors = []) => {} ); -export const promisifyServer = (name, serverHandle, socket, pipe) => ({ - ref: serverHandle, - listen: util.promisify((...args) => { - assert.equal(typeof socket, "string"); - assert.equal(typeof pipe, "string"); - - configLogger({ name }); - - rmIf(pipe); - makePipeReader(pipe); - - rmIf(socket); - return serverHandle.listen(socket, ...args) - }), - close: util.promisify((...args) => { - fs.createWriteStream(pipe).end(); - return serverHandle.close(...args); - }), - events: serverHandle, -}); +export const promisifyServer = (name, serverHandle, socket, pipe) => { + let closePipeFn = null; + return { + ref: serverHandle, + listen: util.promisify((...args) => { + assert.equal(typeof socket, "string"); + assert.equal(typeof pipe, "string"); + + configLogger({ name }); + + rmIf(pipe); + closePipeFn = makePipeReader(pipe); + + rmIf(socket); + return serverHandle.listen(socket, ...args) + }), + close: util.promisify(async (...args) => { + await closePipeFn(); + return serverHandle.close(...args); + }), + events: serverHandle, + }; +}; export const buildServer = ({ name, diff --git a/tests/js/hero.mjs b/tests/js/hero.mjs index 3bed524..f01ced8 100644 --- a/tests/js/hero.mjs +++ b/tests/js/hero.mjs @@ -1426,10 +1426,6 @@ const test_makePipeReaderFn = async t => { "second", "third", ]); - assert.deepEqual(logs, [ - { message: "pipe closed, reopening" }, - { message: "pipe closed, NOT reopening" }, - ]); resolve(); })); }); -- cgit v1.2.3