You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
6 years ago
|
'use strict';
|
||
|
var url = require('url');
|
||
|
var got = require('got');
|
||
|
var registryUrl = require('registry-url');
|
||
|
var registryAuthToken = require('registry-auth-token');
|
||
|
var semver = require('semver');
|
||
|
|
||
|
module.exports = function (name, version) {
|
||
|
var scope = name.split('/')[0];
|
||
|
var regUrl = registryUrl(scope);
|
||
|
var pkgUrl = url.resolve(regUrl, encodeURIComponent(name).replace(/^%40/, '@'));
|
||
|
var authInfo = registryAuthToken(regUrl);
|
||
|
var headers = {};
|
||
|
|
||
|
if (authInfo) {
|
||
|
headers.authorization = authInfo.type + ' ' + authInfo.token;
|
||
|
}
|
||
|
|
||
|
return got(pkgUrl, {
|
||
|
json: true,
|
||
|
headers: headers
|
||
|
})
|
||
|
.then(function (res) {
|
||
|
var data = res.body;
|
||
|
|
||
|
if (version === 'latest') {
|
||
|
data = data.versions[data['dist-tags'].latest];
|
||
|
} else if (version) {
|
||
|
if (!data.versions[version]) {
|
||
|
var versions = Object.keys(data.versions);
|
||
|
version = semver.maxSatisfying(versions, version);
|
||
|
|
||
|
if (!version) {
|
||
|
throw new Error('Version doesn\'t exist');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
data = data.versions[version];
|
||
|
|
||
|
if (!data) {
|
||
|
throw new Error('Version doesn\'t exist');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return data;
|
||
|
})
|
||
|
.catch(function (err) {
|
||
|
if (err.statusCode === 404) {
|
||
|
throw new Error('Package `' + name + '` doesn\'t exist');
|
||
|
}
|
||
|
|
||
|
throw err;
|
||
|
});
|
||
|
};
|