summaryrefslogtreecommitdiff
path: root/deps/npm/lib/install/is-extraneous.js
diff options
context:
space:
mode:
authorRebecca Turner <me@re-becca.org>2016-06-24 13:43:51 -0700
committerJeremiah Senkpiel <fishrock123@rocketmail.com>2016-06-27 11:46:15 +0200
commitd538811fc8b920f3f36d5f21a4c23e270367ceb0 (patch)
tree11cee6c00aa843f16a71819039396f80bf6abe22 /deps/npm/lib/install/is-extraneous.js
parent1db31a34948eee311abd9881bbf5d906d0cd678b (diff)
downloadnode-new-d538811fc8b920f3f36d5f21a4c23e270367ceb0.tar.gz
deps: upgrade npm to 3.10.2
Contains the following npm releases: - https://github.com/npm/npm/releases/tag/v3.9.6 - https://github.com/npm/npm/releases/tag/v3.10.0 - https://github.com/npm/npm/releases/tag/v3.10.1 - https://github.com/npm/npm/releases/tag/v3.10.2 PR-URL: https://github.com/nodejs/node/pull/7410 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'deps/npm/lib/install/is-extraneous.js')
-rw-r--r--deps/npm/lib/install/is-extraneous.js47
1 files changed, 35 insertions, 12 deletions
diff --git a/deps/npm/lib/install/is-extraneous.js b/deps/npm/lib/install/is-extraneous.js
index cd4d954668..f0d599965f 100644
--- a/deps/npm/lib/install/is-extraneous.js
+++ b/deps/npm/lib/install/is-extraneous.js
@@ -1,14 +1,37 @@
'use strict'
-var path = require('path')
-var isDev = require('./is-dev.js').isDev
-var npm = require('../npm.js')
-
-module.exports = function (tree) {
- var pkg = tree.package
- var requiredBy = pkg._requiredBy.filter(function (req) { return req[0] !== '#' })
- var isTopLevel = tree.parent == null
- var isChildOfTop = !isTopLevel && tree.parent.parent == null
- var isTopGlobal = isChildOfTop && tree.parent.path === path.resolve(npm.globalDir, '..')
- var topHasNoPackageJson = isChildOfTop && tree.parent.error
- return !isTopLevel && (!isChildOfTop || !topHasNoPackageJson) && !isTopGlobal && requiredBy.length === 0 && !isDev(tree)
+module.exports = isExtraneous
+
+function isExtraneous (tree) {
+ var result = !isNotExtraneous(tree)
+ return result
+}
+
+function isNotRequired (tree) {
+ return tree.requiredBy && tree.requiredBy.length === 0
+}
+
+function parentHasNoPjson (tree) {
+ return tree.parent && tree.parent.isTop && tree.parent.error
+}
+
+function topHasNoPjson (tree) {
+ var top = tree
+ while (!top.isTop) top = top.parent
+ return top.error
+}
+
+function isNotExtraneous (tree, isCycle) {
+ if (!isCycle) isCycle = {}
+ if (tree.isTop || tree.userRequired) {
+ return true
+ } else if (isNotRequired(tree) && parentHasNoPjson(tree)) {
+ return true
+ } else if (isCycle[tree.path]) {
+ return topHasNoPjson(tree)
+ } else {
+ isCycle[tree.path] = true
+ return tree.requiredBy && tree.requiredBy.some(function (node) {
+ return isNotExtraneous(node, Object.create(isCycle))
+ })
+ }
}