+34
-21
@@ -1,28 +1,41 @@
|
||||
'use strict'
|
||||
|
||||
var async = require('async')
|
||||
var npmconf = require('npmconf')
|
||||
var request = require('request')
|
||||
|
||||
var efh = require('./error').efh
|
||||
|
||||
module.exports = function (pkgName, cb) {
|
||||
var encodedPkgName = pkgName.replace(/\//g, '%2F')
|
||||
request(process.env.npm_config_registry + encodedPkgName, efh(cb)(function (response, body) {
|
||||
var res = {
|
||||
version: null,
|
||||
gitHead: null,
|
||||
pkg: null
|
||||
var registry = process.env.npm_config_registry
|
||||
async.waterfall([
|
||||
npmconf.load,
|
||||
function (conf, callback) {
|
||||
var cred = conf.getCredentialsByURI(registry)
|
||||
callback(null, {
|
||||
url: registry + pkgName.replace(/\//g, '%2F'),
|
||||
headers: {
|
||||
'Authorization': cred.token ? 'Bearer ' + cred.token : null
|
||||
}
|
||||
})
|
||||
},
|
||||
request,
|
||||
function (response, body, callback) {
|
||||
var res = {
|
||||
version: null,
|
||||
gitHead: null,
|
||||
pkg: null
|
||||
}
|
||||
|
||||
if (response.statusCode === 404 || !body) return callback(null, res)
|
||||
|
||||
var pkg = JSON.parse(body)
|
||||
|
||||
if (pkg.error) return callback(pkg.error)
|
||||
|
||||
res.version = pkg['dist-tags'].latest
|
||||
res.gitHead = pkg.versions[res.version].gitHead
|
||||
res.pkg = pkg
|
||||
|
||||
callback(null, res)
|
||||
}
|
||||
|
||||
if (response.statusCode === 404 || !body) return cb(null, res)
|
||||
|
||||
var pkg = JSON.parse(body)
|
||||
|
||||
if (pkg.error) return cb(pkg.error)
|
||||
|
||||
res.version = pkg['dist-tags'].latest
|
||||
res.gitHead = pkg.versions[res.version].gitHead
|
||||
res.pkg = pkg
|
||||
|
||||
cb(null, res)
|
||||
}))
|
||||
], cb)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user