From 825f8a7ddfa7ca4e93bf5b2bd079323805605552 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Wed, 19 Jun 2019 13:21:10 -0700 Subject: [PATCH] Refactor `stdio` option for `execa.node()` (#303) --- lib/stdio.js | 19 ++++++++++--------- test/stdio.js | 9 ++++++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/lib/stdio.js b/lib/stdio.js index fcc3a15128..310d5b485f 100644 --- a/lib/stdio.js +++ b/lib/stdio.js @@ -32,20 +32,21 @@ const stdio = opts => { module.exports = stdio; +// `ipc` is pushed unless it is already present module.exports.node = opts => { - const defaultOption = 'pipe'; + const stdioOption = stdio(opts); - let stdioOption = stdio(opts || {stdio: defaultOption}); + if (stdioOption === 'ipc') { + return 'ipc'; + } - if (typeof stdioOption === 'string') { - stdioOption = [...new Array(3)].fill(stdioOption); - } else if (Array.isArray(stdioOption)) { - stdioOption = stdioOption.map((channel = defaultOption) => channel); + if (stdioOption === undefined || typeof stdioOption === 'string') { + return [stdioOption, stdioOption, stdioOption, 'ipc']; } - if (!stdioOption.includes('ipc')) { - stdioOption.push('ipc'); + if (stdioOption.includes('ipc')) { + return stdioOption; } - return stdioOption; + return [...stdioOption, 'ipc']; }; diff --git a/test/stdio.js b/test/stdio.js index 3aa5d37730..153ca613b8 100644 --- a/test/stdio.js +++ b/test/stdio.js @@ -50,14 +50,17 @@ test(stdioMacro, {stdin: 0, stdio: 'pipe'}, new Error('It\'s not possible to pro const forkMacro = (...args) => macro(...args, stdio.node); forkMacro.title = macroTitle('execa.fork()'); -test(forkMacro, undefined, ['pipe', 'pipe', 'pipe', 'ipc']); +test(forkMacro, undefined, [undefined, undefined, undefined, 'ipc']); test(forkMacro, {stdio: 'ignore'}, ['ignore', 'ignore', 'ignore', 'ipc']); +test(forkMacro, {stdio: 'ipc'}, 'ipc'); test(forkMacro, {stdio: [0, 1, 2]}, [0, 1, 2, 'ipc']); test(forkMacro, {stdio: [0, 1, 2, 3]}, [0, 1, 2, 3, 'ipc']); test(forkMacro, {stdio: [0, 1, 2, 'ipc']}, [0, 1, 2, 'ipc']); -test(forkMacro, {stdout: 'ignore'}, ['pipe', 'ignore', 'pipe', 'ipc']); -test(forkMacro, {stdout: 'ignore', stderr: 'ignore'}, ['pipe', 'ignore', 'ignore', 'ipc']); +test(forkMacro, {stdio: [0, 1, undefined]}, [0, 1, undefined, 'ipc']); +test(forkMacro, {stdio: [0, 1, 2, undefined]}, [0, 1, 2, undefined, 'ipc']); +test(forkMacro, {stdout: 'ignore'}, [undefined, 'ignore', undefined, 'ipc']); +test(forkMacro, {stdout: 'ignore', stderr: 'ignore'}, [undefined, 'ignore', 'ignore', 'ipc']); test(forkMacro, {stdio: {foo: 'bar'}}, new TypeError('Expected `stdio` to be of type `string` or `Array`, got `object`')); test(forkMacro, {stdin: 'inherit', stdio: 'pipe'}, new Error('It\'s not possible to provide `stdio` in combination with one of `stdin`, `stdout`, `stderr`'));