1'use strict' 2var path = require('path') 3var moduleName = require('../utils/module-name.js') 4 5module.exports = reportOptionalFailure 6 7function top (tree) { 8 if (tree.parent) return top(tree.parent) 9 return tree 10} 11 12function reportOptionalFailure (tree, what, error) { 13 var topTree = top(tree) 14 if (!topTree.warnings) topTree.warnings = [] 15 var id 16 if (what) { 17 var depVer = tree.package.dependencies && tree.package.dependencies[what] 18 var optDepVer = tree.package.optionalDependencies && tree.package.optionalDependencies[what] 19 var devDepVer = tree.package.devDependencies && tree.package.devDependencies[what] 20 var version = depVer || optDepVer || devDepVer 21 id = what + (version ? '@' + version : '') 22 } else { 23 id = tree._id || moduleName(tree) + (tree.package.version ? '@' + tree.package.version : '') 24 } 25 var location = path.relative(topTree.path, tree.path) 26 if (what) location = path.join(location, 'node_modules', what) 27 28 error.optional = id 29 error.location = location 30 topTree.warnings.push(error) 31} 32