diff --git a/lib/child_process.js b/lib/child_process.js index 829e5fe5b9ff66..a7ef8ba1e4af1a 100644 --- a/lib/child_process.js +++ b/lib/child_process.js @@ -111,28 +111,27 @@ const MAX_BUFFER = 1024 * 1024; * }} [options] * @returns {ChildProcess} */ -function fork(modulePath /* , args, options */) { +function fork(modulePath, args = [], options) { modulePath = getValidatedPath(modulePath, 'modulePath'); // Get options and args arguments. let execArgv; - let options = {}; - let args = []; - let pos = 1; - if (pos < arguments.length && ArrayIsArray(arguments[pos])) { - args = arguments[pos++]; - } - if (pos < arguments.length && arguments[pos] == null) { - pos++; + if (args == null) { + args = []; + } else if (typeof args !== 'object') { + throw new ERR_INVALID_ARG_VALUE('args', args); + } else if (!ArrayIsArray(args)) { + options = args; + args = []; } - if (pos < arguments.length && arguments[pos] != null) { - if (typeof arguments[pos] !== 'object') { - throw new ERR_INVALID_ARG_VALUE(`arguments[${pos}]`, arguments[pos]); - } - - options = { ...arguments[pos++] }; + if (options == null) { + options = {}; + } else if (typeof options !== 'object') { + throw new ERR_INVALID_ARG_VALUE('options', options); + } else { + options = { ...options }; } // Prepare arguments for fork: @@ -276,31 +275,34 @@ ObjectDefineProperty(exec, promisify.custom, { * ) => any} [callback] * @returns {ChildProcess} */ -function execFile(file /* , args, options, callback */) { - let args = []; - let callback; - let options; - - // Parse the optional positional parameters. - let pos = 1; - if (pos < arguments.length && ArrayIsArray(arguments[pos])) { - args = arguments[pos++]; - } else if (pos < arguments.length && arguments[pos] == null) { - pos++; - } - - if (pos < arguments.length && typeof arguments[pos] === 'object') { - options = arguments[pos++]; - } else if (pos < arguments.length && arguments[pos] == null) { - pos++; +function execFile(file, args = [], options, callback) { + if (args == null) { + args = []; + } else if (typeof args === 'object') { + if (!ArrayIsArray(args)) { + callback = options; + options = args; + args = []; + } + } else if (typeof args === 'function') { + callback = args; + options = {}; + args = []; + } else { + throw new ERR_INVALID_ARG_VALUE('args', args); } - if (pos < arguments.length && typeof arguments[pos] === 'function') { - callback = arguments[pos++]; + if (options == null) { + options = {}; + } else if (typeof options === 'function') { + callback = options; + options = {}; + } else if (typeof options !== 'object') { + throw new ERR_INVALID_ARG_VALUE('options', options); } - if (!callback && pos < arguments.length && arguments[pos] != null) { - throw new ERR_INVALID_ARG_VALUE('args', arguments[pos]); + if (callback && typeof callback !== 'function') { + throw new ERR_INVALID_ARG_VALUE('callback', callback); } options = {