1'use strict' 2module.exports = pickManifestFromRegistryMetadata 3 4var log = require('npmlog') 5var semver = require('semver') 6 7function pickManifestFromRegistryMetadata (spec, tag, versions, metadata) { 8 log.silly('pickManifestFromRegistryMetadata', 'spec', spec, 'tag', tag, 'versions', versions) 9 10 // if the tagged version satisfies, then use that. 11 var tagged = metadata['dist-tags'][tag] 12 if (tagged && 13 metadata.versions[tagged] && 14 semver.satisfies(tagged, spec, true)) { 15 return {resolvedTo: tag, manifest: metadata.versions[tagged]} 16 } 17 // find the max satisfying version. 18 var ms = semver.maxSatisfying(versions, spec, true) 19 if (ms) { 20 return {resolvedTo: ms, manifest: metadata.versions[ms]} 21 } else if (spec === '*' && versions.length && tagged && metadata.versions[tagged]) { 22 return {resolvedTo: tag, manifest: metadata.versions[tagged]} 23 } else { 24 25 } 26} 27