mirror of
https://github.com/titanscouting/tra-analysis.git
synced 2024-11-13 06:36:17 +00:00
20 lines
577 B
JavaScript
20 lines
577 B
JavaScript
|
'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.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)
|
||
|
})
|
||
|
}
|