diff options
-rw-r--r-- | src/hero.mjs | 46 | ||||
-rw-r--r-- | 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(); })); }); |