summaryrefslogtreecommitdiff
path: root/deps/node/deps/npm/lib/install/copy-tree.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/npm/lib/install/copy-tree.js')
-rw-r--r--deps/node/deps/npm/lib/install/copy-tree.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/deps/node/deps/npm/lib/install/copy-tree.js b/deps/node/deps/npm/lib/install/copy-tree.js
new file mode 100644
index 00000000..2bf7064f
--- /dev/null
+++ b/deps/node/deps/npm/lib/install/copy-tree.js
@@ -0,0 +1,30 @@
+'use strict'
+var createNode = require('./node.js').create
+module.exports = function (tree) {
+ return copyTree(tree, {})
+}
+
+function copyTree (tree, cache) {
+ if (cache[tree.path]) { return cache[tree.path] }
+ var newTree = cache[tree.path] = createNode(Object.assign({}, tree))
+ copyModuleList(newTree, 'children', cache)
+ newTree.children.forEach(function (child) {
+ child.parent = newTree
+ })
+ copyModuleList(newTree, 'requires', cache)
+ copyModuleList(newTree, 'requiredBy', cache)
+ return newTree
+}
+
+function copyModuleList (tree, key, cache) {
+ var newList = []
+ if (tree[key]) {
+ tree[key].forEach(function (child) {
+ const copy = copyTree(child, cache)
+ if (copy) {
+ newList.push(copy)
+ }
+ })
+ }
+ tree[key] = newList
+}