| 'use strict'; |
| const alias = ['stdin', 'stdout', 'stderr']; |
| |
| const hasAlias = opts => alias.some(x => Boolean(opts[x])); |
| |
| module.exports = opts => { |
| if (!opts) { |
| return null; |
| } |
| |
| if (opts.stdio && hasAlias(opts)) { |
| throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`); |
| } |
| |
| if (typeof opts.stdio === 'string') { |
| return opts.stdio; |
| } |
| |
| const stdio = opts.stdio || []; |
| |
| if (!Array.isArray(stdio)) { |
| throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``); |
| } |
| |
| const result = []; |
| const len = Math.max(stdio.length, alias.length); |
| |
| for (let i = 0; i < len; i++) { |
| let value = null; |
| |
| if (stdio[i] !== undefined) { |
| value = stdio[i]; |
| } else if (opts[alias[i]] !== undefined) { |
| value = opts[alias[i]]; |
| } |
| |
| result[i] = value; |
| } |
| |
| return result; |
| }; |