summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/npm-install-checks/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/npm-install-checks/index.js')
-rw-r--r--deps/npm/node_modules/npm-install-checks/index.js174
1 files changed, 54 insertions, 120 deletions
diff --git a/deps/npm/node_modules/npm-install-checks/index.js b/deps/npm/node_modules/npm-install-checks/index.js
index a533c9d360..732888ef57 100644
--- a/deps/npm/node_modules/npm-install-checks/index.js
+++ b/deps/npm/node_modules/npm-install-checks/index.js
@@ -1,145 +1,79 @@
-var fs = require('fs')
-var path = require('path')
-var util = require('util')
-var semver = require('semver')
+const {format} = require('util')
+const semver = require('semver')
-exports.checkEngine = checkEngine
-function checkEngine (target, npmVer, nodeVer, force, strict, cb) {
- var nodev = force ? null : nodeVer
- var eng = target.engines
- var opt = { includePrerelease: true }
- if (!eng) return cb()
- if (nodev && eng.node && !semver.satisfies(nodev, eng.node, opt) ||
- eng.npm && !semver.satisfies(npmVer, eng.npm, opt)) {
- var er = new Error(util.format('Unsupported engine for %s: wanted: %j (current: %j)',
- target._id, eng, {node: nodev, npm: npmVer}))
- er.code = 'ENOTSUP'
- er.required = eng
- er.pkgid = target._id
- if (strict) {
- return cb(er)
- } else {
- return cb(null, er)
- }
+const checkEngine = (target, npmVer, nodeVer, force = false) => {
+ const nodev = force ? null : nodeVer
+ const eng = target.engines
+ const opt = { includePrerelease: true }
+ if (!eng) {
+ return
}
- return cb()
-}
-exports.checkPlatform = checkPlatform
-function checkPlatform (target, force, cb) {
- var platform = process.platform
- var arch = process.arch
- var osOk = true
- var cpuOk = true
+ const nodeFail = nodev && eng.node && !semver.satisfies(nodev, eng.node, opt)
+ const npmFail = npmVer && eng.npm && !semver.satisfies(npmVer, eng.npm, opt)
+ if (nodeFail || npmFail) {
+ throw Object.assign(new Error('Unsupported engine'), {
+ pkgid: target._id,
+ current: { node: nodeVer, npm: npmVer },
+ required: eng,
+ code: 'EBADENGINE'
+ })
+ }
+}
+const checkPlatform = (target, force = false) => {
if (force) {
- return cb()
+ return
}
- if (target.os) {
- osOk = checkList(platform, target.os)
- }
- if (target.cpu) {
- cpuOk = checkList(arch, target.cpu)
- }
+ const platform = process.platform
+ const arch = process.arch
+ const osOk = target.os ? checkList(platform, target.os) : true
+ const cpuOk = target.cpu ? checkList(arch, target.cpu) : true
+
if (!osOk || !cpuOk) {
- var er = new Error(util.format('Unsupported platform for %s: wanted %j (current: %j)',
- target._id, target, {os: platform, cpu: arch}))
- er.code = 'EBADPLATFORM'
- er.os = target.os || ['any']
- er.cpu = target.cpu || ['any']
- er.pkgid = target._id
- return cb(er)
+ throw Object.assign(new Error('Unsupported platform'), {
+ pkgid: target._id,
+ current: {
+ os: platform,
+ cpu: arch
+ },
+ required: {
+ os: target.os,
+ cpu: target.cpu
+ },
+ code: 'EBADPLATFORM'
+ })
}
- return cb()
}
-function checkList (value, list) {
- var tmp
- var match = false
- var blc = 0
+const checkList = (value, list) => {
if (typeof list === 'string') {
list = [list]
}
if (list.length === 1 && list[0] === 'any') {
return true
}
- for (var i = 0; i < list.length; ++i) {
- tmp = list[i]
- if (tmp[0] === '!') {
- tmp = tmp.slice(1)
- if (tmp === value) {
+ // match none of the negated values, and at least one of the
+ // non-negated values, if any are present.
+ let negated = 0
+ let match = false
+ for (const entry of list) {
+ const negate = entry.charAt(0) === '!'
+ const test = negate ? entry.slice(1) : entry
+ if (negate) {
+ negated ++
+ if (value === test) {
return false
}
- ++blc
} else {
- match = match || tmp === value
+ match = match || value === test
}
}
- return match || blc === list.length
+ return match || negated === list.length
}
-exports.checkCycle = checkCycle
-function checkCycle (target, ancestors, cb) {
- // there are some very rare and pathological edge-cases where
- // a cycle can cause npm to try to install a never-ending tree
- // of stuff.
- // Simplest:
- //
- // A -> B -> A' -> B' -> A -> B -> A' -> B' -> A -> ...
- //
- // Solution: Simply flat-out refuse to install any name@version
- // that is already in the prototype tree of the ancestors object.
- // A more correct, but more complex, solution would be to symlink
- // the deeper thing into the new location.
- // Will do that if anyone whines about this irl.
- //
- // Note: `npm install foo` inside of the `foo` package will abort
- // earlier if `--force` is not set. However, if it IS set, then
- // we need to still fail here, but just skip the first level. Of
- // course, it'll still fail eventually if it's a true cycle, and
- // leave things in an undefined state, but that's what is to be
- // expected when `--force` is used. That is why getPrototypeOf
- // is used *twice* here: to skip the first level of repetition.
-
- var p = Object.getPrototypeOf(Object.getPrototypeOf(ancestors))
- var name = target.name
- var version = target.version
- while (p && p !== Object.prototype && p[name] !== version) {
- p = Object.getPrototypeOf(p)
- }
- if (p[name] !== version) return cb()
-
- var er = new Error(target._id + ': Unresolvable cycle detected')
- var tree = [target._id, JSON.parse(JSON.stringify(ancestors))]
- var t = Object.getPrototypeOf(ancestors)
- while (t && t !== Object.prototype) {
- if (t === p) t.THIS_IS_P = true
- tree.push(JSON.parse(JSON.stringify(t)))
- t = Object.getPrototypeOf(t)
- }
- er.pkgid = target._id
- er.code = 'ECYCLE'
- return cb(er)
-}
-
-exports.checkGit = checkGit
-function checkGit (folder, cb) {
- // if it's a git repo then don't touch it!
- fs.lstat(folder, function (er, s) {
- if (er || !s.isDirectory()) return cb()
- else checkGit_(folder, cb)
- })
-}
-
-function checkGit_ (folder, cb) {
- fs.stat(path.resolve(folder, '.git'), function (er, s) {
- if (!er && s.isDirectory()) {
- var e = new Error(folder + ': Appears to be a git repo or submodule.')
- e.path = folder
- e.code = 'EISGIT'
- return cb(e)
- }
- cb()
- })
+module.exports = {
+ checkEngine,
+ checkPlatform
}