diff options
Diffstat (limited to 'node_modules/execa/lib')
| -rw-r--r-- | node_modules/execa/lib/errname.js | 37 | ||||
| -rw-r--r-- | node_modules/execa/lib/stdio.js | 41 | 
2 files changed, 78 insertions, 0 deletions
diff --git a/node_modules/execa/lib/errname.js b/node_modules/execa/lib/errname.js new file mode 100644 index 0000000..328f3e3 --- /dev/null +++ b/node_modules/execa/lib/errname.js @@ -0,0 +1,37 @@ +'use strict'; +// The Node team wants to deprecate `process.bind(...)`. +//   https://github.com/nodejs/node/pull/2768 +// +// However, we need the 'uv' binding for errname support. +// This is a defensive wrapper around it so `execa` will not fail entirely if it stops working someday. +// +// If this ever stops working. See: https://github.com/sindresorhus/execa/issues/31#issuecomment-215939939 for another possible solution. +let uv; + +try { +	uv = process.binding('uv'); + +	if (typeof uv.errname !== 'function') { +		throw new TypeError('uv.errname is not a function'); +	} +} catch (err) { +	console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err); +	uv = null; +} + +function errname(uv, code) { +	if (uv) { +		return uv.errname(code); +	} + +	if (!(code < 0)) { +		throw new Error('err >= 0'); +	} + +	return `Unknown system error ${code}`; +} + +module.exports = code => errname(uv, code); + +// Used for testing the fallback behavior +module.exports.__test__ = errname; diff --git a/node_modules/execa/lib/stdio.js b/node_modules/execa/lib/stdio.js new file mode 100644 index 0000000..a82d468 --- /dev/null +++ b/node_modules/execa/lib/stdio.js @@ -0,0 +1,41 @@ +'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; +};  | 
