Skip to content

Commit a81a8c4

Browse files
larsgwisaacs
authored andcommittedJul 3, 2019
install: improve isOnly(Dev,Optional)
Instead of creating a new set each time a new node gets visited, so that its siblings do not have it in `seen`, just remove the node from the original set right after all child nodes are visited. See #76 Credit: @larsgw PR-URL: #206 Close: #206 Reviewed-by: @isaacs
1 parent 8dfbe86 commit a81a8c4

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed
 

‎lib/install/is-only-dev.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ function andIsOnlyDev (name, seen) {
2828
return isDev && !isProd
2929
} else {
3030
if (seen.has(req)) return true
31-
seen = new Set(seen)
3231
seen.add(req)
33-
return isOnlyDev(req, seen)
32+
const result = isOnlyDev(req, seen)
33+
seen.delete(req)
34+
return result
3435
}
3536
}
3637
}

‎lib/install/is-only-optional.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ function isOptional (node, seen) {
1111
if (seen.has(node) || node.requiredBy.length === 0) {
1212
return false
1313
}
14-
seen = new Set(seen)
1514
seen.add(node)
1615
const swOptional = node.fromShrinkwrap && node.package._optional
17-
return node.requiredBy.every(function (req) {
16+
const result = node.requiredBy.every(function (req) {
1817
if (req.fakeChild && swOptional) return true
1918
return isOptDep(req, moduleName(node)) || isOptional(req, seen)
2019
})
20+
seen.delete(node)
21+
return result
2122
}

0 commit comments

Comments
 (0)
Please sign in to comment.