errname.js
 1  'use strict';
 2  // Older verions of Node.js might not have `util.getSystemErrorName()`.
 3  // In that case, fall back to a deprecated internal.
 4  const util = require('util');
 5  
 6  let uv;
 7  
 8  if (typeof util.getSystemErrorName === 'function') {
 9  	module.exports = util.getSystemErrorName;
10  } else {
11  	try {
12  		uv = process.binding('uv');
13  
14  		if (typeof uv.errname !== 'function') {
15  			throw new TypeError('uv.errname is not a function');
16  		}
17  	} catch (err) {
18  		console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err);
19  		uv = null;
20  	}
21  
22  	module.exports = code => errname(uv, code);
23  }
24  
25  // Used for testing the fallback behavior
26  module.exports.__test__ = errname;
27  
28  function errname(uv, code) {
29  	if (uv) {
30  		return uv.errname(code);
31  	}
32  
33  	if (!(code < 0)) {
34  		throw new Error('err >= 0');
35  	}
36  
37  	return `Unknown system error ${code}`;
38  }
39