summaryrefslogtreecommitdiff
path: root/deps/npm/lib/install/report-optional-failure.js
blob: 41c7c535bdd63b24e8b592fc8b4c284811fd9cdd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
'use strict'
var path = require('path')
var moduleName = require('../utils/module-name.js')

module.exports = reportOptionalFailure

function top (tree) {
  if (tree.parent) return top(tree.parent)
  return tree
}

function reportOptionalFailure (tree, what, error) {
  var topTree = top(tree)
  if (!topTree.warnings) topTree.warnings = []
  var id
  if (what) {
    var depVer = tree.package.dependencies && tree.package.dependencies[what]
    var optDepVer = tree.package.optionalDependencies && tree.package.optionalDependencies[what]
    var devDepVer = tree.package.devDependencies && tree.package.devDependencies[what]
    var version = depVer || optDepVer || devDepVer
    id = what + (version ? '@' + version : '')
  } else {
    id = tree._id || moduleName(tree) + (tree.package.version ? '@' + tree.package.version : '')
  }
  var location = path.relative(topTree.path, tree.path)
  if (what) location = path.join(location, 'node_modules', what)

  error.optional = id
  error.location = location
  topTree.warnings.push(error)
}