Skip to content

Commit

Permalink
child_process: refactor stdioStringToArray function
Browse files Browse the repository at this point in the history
reduce the function in both files to one.

PR-URL: #27657
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Rich Trott <rtrott@gmail.com>
  • Loading branch information
zero1five authored and targos committed May 17, 2019
1 parent d2dad0b commit b380c0f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 23 deletions.
22 changes: 6 additions & 16 deletions lib/child_process.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ const {
ERR_CHILD_PROCESS_IPC_REQUIRED,
ERR_CHILD_PROCESS_STDIO_MAXBUFFER,
ERR_INVALID_ARG_TYPE,
ERR_INVALID_OPT_VALUE,
ERR_OUT_OF_RANGE
} = require('internal/errors').codes;
const { clearTimeout, setTimeout } = require('timers');
Expand All @@ -46,24 +45,14 @@ const child_process = require('internal/child_process');
const {
getValidStdio,
setupChannel,
ChildProcess
ChildProcess,
stdioStringToArray
} = child_process;

const MAX_BUFFER = 1024 * 1024;

exports.ChildProcess = ChildProcess;

function stdioStringToArray(option) {
switch (option) {
case 'ignore':
case 'pipe':
case 'inherit':
return [option, option, option, 'ipc'];
default:
throw new ERR_INVALID_OPT_VALUE('stdio', option);
}
}

exports.fork = function fork(modulePath /* , args, options */) {
validateString(modulePath, 'modulePath');

Expand Down Expand Up @@ -104,12 +93,13 @@ exports.fork = function fork(modulePath /* , args, options */) {
args = execArgv.concat([modulePath], args);

if (typeof options.stdio === 'string') {
options.stdio = stdioStringToArray(options.stdio);
options.stdio = stdioStringToArray(options.stdio, 'ipc');
} else if (!Array.isArray(options.stdio)) {
// Use a separate fd=3 for the IPC channel. Inherit stdin, stdout,
// and stderr from the parent if silent isn't set.
options.stdio = options.silent ? stdioStringToArray('pipe') :
stdioStringToArray('inherit');
options.stdio = stdioStringToArray(
options.silent ? 'pipe' : 'inherit',
'ipc');
} else if (!options.stdio.includes('ipc')) {
throw new ERR_CHILD_PROCESS_IPC_REQUIRED('options.stdio');
}
Expand Down
24 changes: 17 additions & 7 deletions lib/internal/child_process.js
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,21 @@ const handleConversion = {
}
};

function stdioStringToArray(stdio, channel) {
const options = [];

switch (stdio) {
case 'ignore':
case 'pipe': options.push(stdio, stdio, stdio); break;
case 'inherit': options.push(0, 1, 2); break;
default:
throw new ERR_INVALID_OPT_VALUE('stdio', stdio);
}

if (channel) options.push(channel);

return options;
}

function ChildProcess() {
EventEmitter.call(this);
Expand Down Expand Up @@ -892,13 +907,7 @@ function getValidStdio(stdio, sync) {

// Replace shortcut with an array
if (typeof stdio === 'string') {
switch (stdio) {
case 'ignore': stdio = ['ignore', 'ignore', 'ignore']; break;
case 'pipe': stdio = ['pipe', 'pipe', 'pipe']; break;
case 'inherit': stdio = [0, 1, 2]; break;
default:
throw new ERR_INVALID_OPT_VALUE('stdio', stdio);
}
stdio = stdioStringToArray(stdio);
} else if (!Array.isArray(stdio)) {
throw new ERR_INVALID_OPT_VALUE('stdio', inspect(stdio));
}
Expand Down Expand Up @@ -1042,5 +1051,6 @@ module.exports = {
ChildProcess,
setupChannel,
getValidStdio,
stdioStringToArray,
spawnSync
};

0 comments on commit b380c0f

Please sign in to comment.