mirror of
https://github.com/titanscouting/tra-analysis.git
synced 2024-11-10 15:04:45 +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)
|
|
})
|
|
}
|