aboutsummaryrefslogtreecommitdiff
path: root/deps/node/deps/npm/lib/install/node.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/npm/lib/install/node.js')
-rw-r--r--deps/node/deps/npm/lib/install/node.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/deps/node/deps/npm/lib/install/node.js b/deps/node/deps/npm/lib/install/node.js
new file mode 100644
index 00000000..18138078
--- /dev/null
+++ b/deps/node/deps/npm/lib/install/node.js
@@ -0,0 +1,77 @@
+'use strict'
+
+var defaultTemplate = {
+ package: {
+ version: '',
+ dependencies: {},
+ devDependencies: {},
+ optionalDependencies: {}
+ },
+ loaded: false,
+ children: [],
+ requiredBy: [],
+ requires: [],
+ missingDeps: {},
+ missingDevDeps: {},
+ phantomChildren: {},
+ path: null,
+ realpath: null,
+ location: null,
+ userRequired: false,
+ save: false,
+ saveSpec: null,
+ isTop: false,
+ fromBundle: false
+}
+
+function isLink (node) {
+ return node && node.isLink
+}
+function isInLink (node) {
+ return node && (node.isInLink || node.isLink)
+}
+
+var create = exports.create = function (node, template, isNotTop) {
+ if (!template) template = defaultTemplate
+ Object.keys(template).forEach(function (key) {
+ if (template[key] != null && typeof template[key] === 'object' && !(template[key] instanceof Array)) {
+ if (!node[key]) node[key] = {}
+ return create(node[key], template[key], true)
+ }
+ if (node[key] != null) return
+ node[key] = template[key]
+ })
+ if (!isNotTop) {
+ // isLink is true for the symlink and everything inside it.
+ // by contrast, isInLink is true for only the things inside a link
+ if (node.isLink == null) node.isLink = isLink(node.parent)
+ if (node.isInLink == null) node.isInLink = isInLink(node.parent)
+ if (node.fromBundle == null) {
+ node.fromBundle = false
+ }
+ }
+ return node
+}
+
+exports.reset = function (node) {
+ reset(node, new Set())
+}
+
+function reset (node, seen) {
+ if (seen.has(node)) return
+ seen.add(node)
+ var child = create(node)
+
+ // FIXME: cleaning up after read-package-json's mess =(
+ if (child.package._id === '@') delete child.package._id
+
+ child.isTop = false
+ child.requiredBy = []
+ child.requires = []
+ child.missingDeps = {}
+ child.missingDevDeps = {}
+ child.phantomChildren = {}
+ child.location = null
+
+ child.children.forEach(function (child) { reset(child, seen) })
+}