diff --git a/lib/stdio.js b/lib/stdio.js index d9f5458b4d..3fcf6272d7 100644 --- a/lib/stdio.js +++ b/lib/stdio.js @@ -42,20 +42,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 a9ccb03256..36dc2fdc86 100644 --- a/test/stdio.js +++ b/test/stdio.js @@ -59,14 +59,17 @@ test(stdioMacro, {stdin: 'inherit', stdio: [undefined, 'pipe']}, new Error('It\' const forkMacro = createMacro(stdio.node); -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`'));