summaryrefslogtreecommitdiff
path: root/deps/npm/lib/install/realize-shrinkwrap-specifier.js
blob: 0c491a60289b4b0d37da2ff0e20785ab3fc69fcf (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
'use strict'
var realizePackageSpecifier = require('realize-package-specifier')
var isRegistrySpecifier = require('./is-registry-specifier.js')

module.exports = function (name, sw, where, cb) {
  function lookup (ver, cb) {
    realizePackageSpecifier(name + '@' + ver, where, cb)
  }
  if (sw.resolved) {
    return lookup(sw.resolved, cb)
  } else if (sw.from) {
    return lookup(sw.from, function (err, spec) {
      if (err || isRegistrySpecifier(spec)) {
        return thenUseVersion()
      } else {
        return cb(null, spec)
      }
    })
  } else {
    return thenUseVersion()
  }
  function thenUseVersion () {
    lookup(sw.version, cb)
  }
}