Index: node_modules/node-abi/index.js
===================================================================
--- node_modules/node-abi/index.js	(revision 81bc7da776d8cda42939ef4ab350c88d13b4941f)
+++ node_modules/node-abi/index.js	(revision 81bc7da776d8cda42939ef4ab350c88d13b4941f)
@@ -0,0 +1,179 @@
+var semver = require('semver')
+
+function getNextTarget (runtime, targets) {
+  if (targets == null) targets = allTargets
+  var latest = targets.filter(function (t) { return t.runtime === runtime }).slice(-1)[0]
+  var increment = runtime === 'electron' ? 'minor' : 'major'
+  var next = semver.inc(latest.target, increment)
+  // Electron releases appear in the registry in their beta form, sometimes there is
+  // no active beta line.  During this time we need to double bump
+  if (runtime === 'electron' && semver.parse(latest.target).prerelease.length) {
+    next = semver.inc(next, 'major')
+  }
+  return next
+}
+
+function getAbi (target, runtime) {
+  if (target === String(Number(target))) return target
+  if (target) target = target.replace(/^v/, '')
+  if (!runtime) runtime = 'node'
+
+  if (runtime === 'node') {
+    if (!target) return process.versions.modules
+    if (target === process.versions.node) return process.versions.modules
+  }
+
+  var abi
+  var lastTarget
+
+  for (var i = 0; i < allTargets.length; i++) {
+    var t = allTargets[i]
+    if (t.runtime !== runtime) continue
+    if (semver.lte(t.target, target) && (!lastTarget || semver.gte(t.target, lastTarget))) {
+      abi = t.abi
+      lastTarget = t.target
+    }
+  }
+
+  if (abi && semver.lt(target, getNextTarget(runtime))) return abi
+  throw new Error('Could not detect abi for version ' + target + ' and runtime ' + runtime + '.  Updating "node-abi" might help solve this issue if it is a new release of ' + runtime)
+}
+
+function getTarget (abi, runtime) {
+  if (abi && abi !== String(Number(abi))) return abi
+  if (!runtime) runtime = 'node'
+
+  if (runtime === 'node' && !abi) return process.versions.node
+
+  var match = allTargets
+    .filter(function (t) {
+      return t.abi === abi && t.runtime === runtime
+    })
+    .map(function (t) {
+      return t.target
+    })
+  if (match.length) {
+    var betaSeparatorIndex = match[0].indexOf("-")
+    return betaSeparatorIndex > -1
+      ? match[0].substring(0, betaSeparatorIndex)
+      : match[0]
+  }
+
+  throw new Error('Could not detect target for abi ' + abi + ' and runtime ' + runtime)
+}
+
+function sortByTargetFn (a, b) {
+  var abiComp = Number(a.abi) - Number(b.abi)
+  if (abiComp !== 0) return abiComp
+  if (a.target < b.target) return -1
+  if (a.target > b.target) return 1
+  return 0
+}
+
+function loadGeneratedTargets () {
+  var registry = require('./abi_registry.json')
+  var targets = {
+    supported: [],
+    additional: [],
+    future: []
+  }
+
+  registry.forEach(function (item) {
+    var target = {
+      runtime: item.runtime,
+      target: item.target,
+      abi: item.abi
+    }
+    if (item.lts) {
+      var startDate = new Date(Date.parse(item.lts[0]))
+      var endDate = new Date(Date.parse(item.lts[1]))
+      var currentDate = new Date()
+      target.lts = startDate < currentDate && currentDate < endDate
+    } else {
+      target.lts = false
+    }
+
+    if (target.runtime === 'node-webkit') {
+      targets.additional.push(target)
+    } else if (item.future) {
+      targets.future.push(target)
+    } else {
+      targets.supported.push(target)
+    }
+  })
+
+  targets.supported.sort(sortByTargetFn)
+  targets.additional.sort(sortByTargetFn)
+  targets.future.sort(sortByTargetFn)
+
+  return targets
+}
+
+var generatedTargets = loadGeneratedTargets()
+
+var supportedTargets = [
+  {runtime: 'node', target: '5.0.0', abi: '47', lts: false},
+  {runtime: 'node', target: '6.0.0', abi: '48', lts: false},
+  {runtime: 'node', target: '7.0.0', abi: '51', lts: false},
+  {runtime: 'node', target: '8.0.0', abi: '57', lts: false},
+  {runtime: 'node', target: '9.0.0', abi: '59', lts: false},
+  {runtime: 'node', target: '10.0.0', abi: '64', lts: new Date(2018, 10, 1) < new Date() && new Date() < new Date(2020, 4, 31)},
+  {runtime: 'electron', target: '0.36.0', abi: '47', lts: false},
+  {runtime: 'electron', target: '1.1.0', abi: '48', lts: false},
+  {runtime: 'electron', target: '1.3.0', abi: '49', lts: false},
+  {runtime: 'electron', target: '1.4.0', abi: '50', lts: false},
+  {runtime: 'electron', target: '1.5.0', abi: '51', lts: false},
+  {runtime: 'electron', target: '1.6.0', abi: '53', lts: false},
+  {runtime: 'electron', target: '1.7.0', abi: '54', lts: false},
+  {runtime: 'electron', target: '1.8.0', abi: '57', lts: false},
+  {runtime: 'electron', target: '2.0.0', abi: '57', lts: false},
+  {runtime: 'electron', target: '3.0.0', abi: '64', lts: false},
+  {runtime: 'electron', target: '4.0.0', abi: '64', lts: false},
+  {runtime: 'electron', target: '4.0.4', abi: '69', lts: false}
+]
+
+supportedTargets.push.apply(supportedTargets, generatedTargets.supported)
+
+var additionalTargets = [
+  {runtime: 'node-webkit', target: '0.13.0', abi: '47', lts: false},
+  {runtime: 'node-webkit', target: '0.15.0', abi: '48', lts: false},
+  {runtime: 'node-webkit', target: '0.18.3', abi: '51', lts: false},
+  {runtime: 'node-webkit', target: '0.23.0', abi: '57', lts: false},
+  {runtime: 'node-webkit', target: '0.26.5', abi: '59', lts: false}
+]
+
+additionalTargets.push.apply(additionalTargets, generatedTargets.additional)
+
+var deprecatedTargets = [
+  {runtime: 'node', target: '0.2.0', abi: '1', lts: false},
+  {runtime: 'node', target: '0.9.1', abi: '0x000A', lts: false},
+  {runtime: 'node', target: '0.9.9', abi: '0x000B', lts: false},
+  {runtime: 'node', target: '0.10.4', abi: '11', lts: false},
+  {runtime: 'node', target: '0.11.0', abi: '0x000C', lts: false},
+  {runtime: 'node', target: '0.11.8', abi: '13', lts: false},
+  {runtime: 'node', target: '0.11.11', abi: '14', lts: false},
+  {runtime: 'node', target: '1.0.0', abi: '42', lts: false},
+  {runtime: 'node', target: '1.1.0', abi: '43', lts: false},
+  {runtime: 'node', target: '2.0.0', abi: '44', lts: false},
+  {runtime: 'node', target: '3.0.0', abi: '45', lts: false},
+  {runtime: 'node', target: '4.0.0', abi: '46', lts: false},
+  {runtime: 'electron', target: '0.30.0', abi: '44', lts: false},
+  {runtime: 'electron', target: '0.31.0', abi: '45', lts: false},
+  {runtime: 'electron', target: '0.33.0', abi: '46', lts: false}
+]
+
+var futureTargets = generatedTargets.future
+
+var allTargets = deprecatedTargets
+  .concat(supportedTargets)
+  .concat(additionalTargets)
+  .concat(futureTargets)
+
+exports.getAbi = getAbi
+exports.getTarget = getTarget
+exports.deprecatedTargets = deprecatedTargets
+exports.supportedTargets = supportedTargets
+exports.additionalTargets = additionalTargets
+exports.futureTargets = futureTargets
+exports.allTargets = allTargets
+exports._getNextTarget = getNextTarget
