'use strict'; const Promise = require("bluebird"); const bhttp = require("bhttp"); const rfr = require("rfr"); const cacheize = rfr("lib/db/cacheize"); module.exports = function(cache) { return cacheize(cache, function(packageName) { return Promise.try(() => { let encodedPackageName = encodeURIComponent(packageName).replace(/%40/g, "@"); return bhttp.get(`https://registry.npmjs.org/${encodedPackageName}`); }).then((response) => { if (response.statusCode !== 200) { // FIXME: Proper error types throw new Error(`Got non-200 status code from NPM registry: ${response.statusCode}`); } else { return response.body; } }); }); }