mirror of
https://github.com/nodejs/node.git
synced 2025-05-14 20:02:04 +00:00

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>
38 lines
889 B
JavaScript
38 lines
889 B
JavaScript
'use strict'
|
|
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))
|
|
})
|
|
}
|
|
}
|