diff options
author | EuAndreh <eu@euandre.org> | 2024-03-07 11:55:52 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-03-07 11:55:52 -0300 |
commit | b9b7e4c3a04f012b5d2e8d4f1393128c25cb0c61 (patch) | |
tree | bcf00983d5760a2d97539b807a348b886ec63349 /src/hero.mjs | |
parent | tests/js/hero.mjs: Better names for pipes and sockets created by tests (diff) | |
download | papod-b9b7e4c3a04f012b5d2e8d4f1393128c25cb0c61.tar.gz papod-b9b7e4c3a04f012b5d2e8d4f1393128c25cb0c61.tar.xz |
src/hero.mjs: makePipeReader() now returns a function for closing it
Diffstat (limited to 'src/hero.mjs')
-rw-r--r-- | src/hero.mjs | 46 |
1 files changed, 26 insertions, 20 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, |