blob: f0d599965fe598b47ccc74ad04fa0319ab7e70eb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
'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))
})
}
}
|