diff options
Diffstat (limited to 'deps/node/deps/npm/lib/install/is-extraneous.js')
-rw-r--r-- | deps/node/deps/npm/lib/install/is-extraneous.js | 27 |
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)) + }) + } +} |