• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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