You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
'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))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|