summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/hero.mjs46
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,