orionsoft-react-scripts
Version:
Orionsoft Configuration and scripts for Create React App.
137 lines (119 loc) • 3.5 kB
JavaScript
var os = require('os');
var lib = {};
function parallel(tasks, done) {
var results = [];
var errs = [];
var length = 0;
var doneLength = 0;
function doneIt(ix, err, result) {
if (err) {
errs[ix] = err;
} else {
results[ix] = result;
}
doneLength += 1;
if (doneLength >= length) {
done(errs.length > 0 ? errs : errs, results);
}
}
Object.keys(tasks).forEach(function (key) {
length += 1;
var task = tasks[key];
(global.setImmediate || global.setTimeout)(function () {
task(doneIt.bind(null, key), 1);
});
});
}
lib.networkInterfaces = function () {
var ifaces = os.networkInterfaces();
var allAddresses = {};
Object.keys(ifaces).forEach(function (iface) {
addresses = {};
var hasAddresses = false;
ifaces[iface].forEach(function (address) {
if (!address.internal) {
addresses[(address.family || "").toLowerCase()] = address.address;
hasAddresses = true;
if (address.mac) {
addresses.mac = address.mac;
}
}
});
if (hasAddresses) {
allAddresses[iface] = addresses;
}
});
return allAddresses;
};
var _getMacAddress;
switch (os.platform()) {
case 'win32':
_getMacAddress = require('./lib/windows.js');
break;
case 'linux':
_getMacAddress = require('./lib/linux.js');
break;
case 'darwin':
case 'sunos':
_getMacAddress = require('./lib/unix.js');
break;
default:
console.warn("node-macaddress: Unkown os.platform(), defaulting to `unix'.");
_getMacAddress = require('./lib/unix.js');
break;
}
lib.one = function (iface, callback) {
if (typeof iface === 'function') {
callback = iface;
var ifaces = lib.networkInterfaces();
var alleged = [ 'eth0', 'eth1', 'en0', 'en1' ];
iface = Object.keys(ifaces)[0];
for (var i = 0; i < alleged.length; i++) {
if (ifaces[alleged[i]]) {
iface = alleged[i];
break;
}
}
if (!ifaces[iface]) {
if (typeof callback === 'function') {
callback("no interfaces found", null);
}
return null;
}
if (ifaces[iface].mac) {
if (typeof callback === 'function') {
callback(null, ifaces[iface].mac);
}
return ifaces[iface].mac;
}
}
if (typeof callback === 'function') {
_getMacAddress(iface, callback);
}
return null;
};
lib.all = function (callback) {
var ifaces = lib.networkInterfaces();
var resolve = {};
Object.keys(ifaces).forEach(function (iface) {
if (!ifaces[iface].mac) {
resolve[iface] = _getMacAddress.bind(null, iface);
}
});
if (Object.keys(resolve).length === 0) {
if (typeof callback === 'function') {
callback(null, ifaces);
}
return ifaces;
}
parallel(resolve, function (err, result) {
Object.keys(result).forEach(function (iface) {
ifaces[iface].mac = result[iface];
});
if (typeof callback === 'function') {
callback(null, ifaces);
}
});
return null;
};
module.exports = lib;