aboutsummaryrefslogtreecommitdiff
path: root/deps/node/deps/npm/lib/install/is-extraneous.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/npm/lib/install/is-extraneous.js')
-rw-r--r--deps/node/deps/npm/lib/install/is-extraneous.js27
1 files changed, 27 insertions, 0 deletions
diff --git a/deps/node/deps/npm/lib/install/is-extraneous.js b/deps/node/deps/npm/lib/install/is-extraneous.js
new file mode 100644
index 00000000..a6477c23
--- /dev/null
+++ b/deps/node/deps/npm/lib/install/is-extraneous.js
@@ -0,0 +1,27 @@
+'use strict'
+module.exports = isExtraneous
+
+function isExtraneous (tree) {
+ var result = !isNotExtraneous(tree)
+ return result
+}
+
+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 (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))
+ })
+ }
+}