diff options
Diffstat (limited to 'deps/node/deps/npm/lib/install/is-only-optional.js')
-rw-r--r-- | deps/node/deps/npm/lib/install/is-only-optional.js | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/deps/node/deps/npm/lib/install/is-only-optional.js b/deps/node/deps/npm/lib/install/is-only-optional.js new file mode 100644 index 00000000..f1b73157 --- /dev/null +++ b/deps/node/deps/npm/lib/install/is-only-optional.js @@ -0,0 +1,20 @@ +'use strict' +module.exports = isOptional + +const isOptDep = require('./is-opt-dep.js') + +function isOptional (node, seen) { + if (!seen) seen = new Set() + // If a node is not required by anything, then we've reached + // the top level package. + if (seen.has(node) || node.requiredBy.length === 0) { + return false + } + seen = new Set(seen) + seen.add(node) + const swOptional = node.fromShrinkwrap && node.package._optional + return node.requiredBy.every(function (req) { + if (req.fakeChild && swOptional) return true + return isOptDep(req, node.package.name) || isOptional(req, seen) + }) +} |