Files
Mario Romano 07807e7bc3 # add dist
2016-04-21 11:56:31 +01:00

59 lines
1.3 KiB
JavaScript

'use strict';
var url = require('url');
var got = require('got');
var registryUrl = require('registry-url');
var rc = require('rc');
var semver = require('semver');
module.exports = function (name, version) {
var scope = name.split('/')[0];
var pkgUrl = url.resolve(registryUrl(scope), encodeURIComponent(name).replace(/^%40/, '@'));
var npmrc = rc('npm');
var token = npmrc[scope + ':_authToken'] || npmrc['//registry.npmjs.org/:_authToken'];
var headers = {};
if (token) {
if (process.env.NPM_TOKEN) {
token = token.replace('${NPM_TOKEN}', process.env.NPM_TOKEN);
}
headers.authorization = 'Bearer ' + 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;
});
};