| 'use strict'; | 
| const aliases = ['stdin', 'stdout', 'stderr']; | 
|   | 
| const hasAlias = opts => aliases.some(alias => opts[alias] !== undefined); | 
|   | 
| const normalizeStdio = opts => { | 
|     if (!opts) { | 
|         return; | 
|     } | 
|   | 
|     const {stdio} = opts; | 
|   | 
|     if (stdio === undefined) { | 
|         return aliases.map(alias => opts[alias]); | 
|     } | 
|   | 
|     if (hasAlias(opts)) { | 
|         throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${aliases.map(alias => `\`${alias}\``).join(', ')}`); | 
|     } | 
|   | 
|     if (typeof stdio === 'string') { | 
|         return stdio; | 
|     } | 
|   | 
|     if (!Array.isArray(stdio)) { | 
|         throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``); | 
|     } | 
|   | 
|     const length = Math.max(stdio.length, aliases.length); | 
|     return Array.from({length}, (value, index) => stdio[index]); | 
| }; | 
|   | 
| module.exports = normalizeStdio; | 
|   | 
| // `ipc` is pushed unless it is already present | 
| module.exports.node = opts => { | 
|     const stdio = normalizeStdio(opts); | 
|   | 
|     if (stdio === 'ipc') { | 
|         return 'ipc'; | 
|     } | 
|   | 
|     if (stdio === undefined || typeof stdio === 'string') { | 
|         return [stdio, stdio, stdio, 'ipc']; | 
|     } | 
|   | 
|     if (stdio.includes('ipc')) { | 
|         return stdio; | 
|     } | 
|   | 
|     return [...stdio, 'ipc']; | 
| }; |