aboutsummaryrefslogtreecommitdiff
path: root/deps/npm/lib/install/copy-tree.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/lib/install/copy-tree.js')
-rw-r--r--deps/npm/lib/install/copy-tree.js32
1 files changed, 19 insertions, 13 deletions
diff --git a/deps/npm/lib/install/copy-tree.js b/deps/npm/lib/install/copy-tree.js
index 67a9c687a2..a5b558cf59 100644
--- a/deps/npm/lib/install/copy-tree.js
+++ b/deps/npm/lib/install/copy-tree.js
@@ -1,25 +1,31 @@
'use strict'
-
-module.exports = function (tree) {
- return copyTree(tree, {})
+var createNode = require('./node.js').create
+module.exports = function (tree, filter) {
+ return copyTree(tree, {}, filter)
}
-function copyTree (tree, cache) {
- if (cache[tree.path]) return cache[tree.path]
- var newTree = cache[tree.path] = Object.create(tree)
- copyModuleList(newTree, 'children', cache)
+function copyTree (tree, cache, filter) {
+ if (filter && !filter(tree)) { return null }
+ if (cache[tree.path]) { return cache[tree.path] }
+ var newTree = cache[tree.path] = createNode(Object.assign({}, tree))
+ copyModuleList(newTree, 'children', cache, filter)
newTree.children.forEach(function (child) {
child.parent = newTree
})
- copyModuleList(newTree, 'requires', cache)
- copyModuleList(newTree, 'requiredBy', cache)
+ copyModuleList(newTree, 'requires', cache, filter)
+ copyModuleList(newTree, 'requiredBy', cache, filter)
return newTree
}
-function copyModuleList (tree, key, cache) {
+function copyModuleList (tree, key, cache, filter) {
var newList = []
- tree[key].forEach(function (child) {
- newList.push(copyTree(child, cache))
- })
+ if (tree[key]) {
+ tree[key].forEach(function (child) {
+ const copy = copyTree(child, cache, filter)
+ if (copy) {
+ newList.push(copy)
+ }
+ })
+ }
tree[key] = newList
}