From 0c2948dd1d12ba1d1a549920de7943c3d49218a1 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Wed, 19 Jun 2019 10:00:00 +0200 Subject: [PATCH 1/5] Refactor `stdio` option for `execa.node()` --- lib/stdio.js | 20 ++++++++++++-------- test/stdio.js | 2 ++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/stdio.js b/lib/stdio.js index d9f5458b4d..2621997c1d 100644 --- a/lib/stdio.js +++ b/lib/stdio.js @@ -42,20 +42,24 @@ const stdio = opts => { module.exports = stdio; +// Default stdio value is `pipe` instead of `inherit` +// `ipc` is also pushed unless it is already present module.exports.node = opts => { - const defaultOption = 'pipe'; + let stdioOption = stdio(opts) || 'pipe'; - 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); + return [stdioOption, stdioOption, stdioOption, 'ipc']; } - if (!stdioOption.includes('ipc')) { - stdioOption.push('ipc'); + stdioOption = stdioOption.map((channel = 'pipe') => channel); + + if (stdioOption.includes('ipc')) { + return stdioOption; } - return stdioOption; + return [...stdioOption, 'ipc']; }; diff --git a/test/stdio.js b/test/stdio.js index a9ccb03256..75d48c57bc 100644 --- a/test/stdio.js +++ b/test/stdio.js @@ -61,10 +61,12 @@ const forkMacro = createMacro(stdio.node); test(forkMacro, undefined, ['pipe', 'pipe', 'pipe', '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, {stdio: [0, 1, undefined]}, [0, 1, 'pipe', 'ipc']); test(forkMacro, {stdout: 'ignore'}, ['pipe', 'ignore', 'pipe', 'ipc']); test(forkMacro, {stdout: 'ignore', stderr: 'ignore'}, ['pipe', 'ignore', 'ignore', 'ipc']); From ded3b4b38f93cf08ebd5b7ee46d023057a28ca08 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Wed, 19 Jun 2019 10:00:00 +0200 Subject: [PATCH 2/5] Remove logic related to default option for `stdio` --- lib/stdio.js | 5 +---- test/stdio.js | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/stdio.js b/lib/stdio.js index 2621997c1d..4f8411b06c 100644 --- a/lib/stdio.js +++ b/lib/stdio.js @@ -42,10 +42,9 @@ const stdio = opts => { module.exports = stdio; -// Default stdio value is `pipe` instead of `inherit` // `ipc` is also pushed unless it is already present module.exports.node = opts => { - let stdioOption = stdio(opts) || 'pipe'; + const stdioOption = stdio(opts) || 'pipe'; if (stdioOption === 'ipc') { return 'ipc'; @@ -55,8 +54,6 @@ module.exports.node = opts => { return [stdioOption, stdioOption, stdioOption, 'ipc']; } - stdioOption = stdioOption.map((channel = 'pipe') => channel); - if (stdioOption.includes('ipc')) { return stdioOption; } diff --git a/test/stdio.js b/test/stdio.js index 75d48c57bc..679fd90d40 100644 --- a/test/stdio.js +++ b/test/stdio.js @@ -66,9 +66,9 @@ 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, {stdio: [0, 1, undefined]}, [0, 1, 'pipe', '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, {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`')); From cb21067af6e385fc6dc5afb8e739563b4ab5a2d0 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Wed, 19 Jun 2019 10:00:00 +0200 Subject: [PATCH 3/5] Remove more default logic --- lib/stdio.js | 4 ++-- test/stdio.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/stdio.js b/lib/stdio.js index 4f8411b06c..e08751359d 100644 --- a/lib/stdio.js +++ b/lib/stdio.js @@ -44,13 +44,13 @@ module.exports = stdio; // `ipc` is also pushed unless it is already present module.exports.node = opts => { - const stdioOption = stdio(opts) || 'pipe'; + const stdioOption = stdio(opts); if (stdioOption === 'ipc') { return 'ipc'; } - if (typeof stdioOption === 'string') { + if (stdioOption === undefined || typeof stdioOption === 'string') { return [stdioOption, stdioOption, stdioOption, 'ipc']; } diff --git a/test/stdio.js b/test/stdio.js index 679fd90d40..e3519d9027 100644 --- a/test/stdio.js +++ b/test/stdio.js @@ -59,7 +59,7 @@ 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']); From 15a373bb4208516b8a60202c070c2a97ea7bddb9 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Wed, 19 Jun 2019 10:00:00 +0200 Subject: [PATCH 4/5] Add a test --- test/stdio.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/stdio.js b/test/stdio.js index e3519d9027..36dc2fdc86 100644 --- a/test/stdio.js +++ b/test/stdio.js @@ -67,6 +67,7 @@ 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, {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']); From fa7221a74926886023f741f1652b55066912d5ad Mon Sep 17 00:00:00 2001 From: ehmicky Date: Wed, 19 Jun 2019 10:00:00 +0200 Subject: [PATCH 5/5] Fix comment --- lib/stdio.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stdio.js b/lib/stdio.js index e08751359d..3fcf6272d7 100644 --- a/lib/stdio.js +++ b/lib/stdio.js @@ -42,7 +42,7 @@ const stdio = opts => { module.exports = stdio; -// `ipc` is also pushed unless it is already present +// `ipc` is pushed unless it is already present module.exports.node = opts => { const stdioOption = stdio(opts);