diff --git a/server.js b/server.js index 6773e08..37ad4b4 100644 --- a/server.js +++ b/server.js @@ -4347,6 +4347,67 @@ cache(function(data, match, sendBadge, request) { sendBadge(format, badgeData); })); +// Libraries.io integration. +camp.route(/^\/librariesio\/(github|release)\/([\w\-\_]+\/[\w\-\_]+)\/?([\w\-\_\.]+)?\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + + var resource = match[1]; + var project = match[2]; + var version = match[3]; + var format = match[4]; + + var uri; + switch (resource) { + case 'github': + uri = 'https://libraries.io/api/github/' + project + '/dependencies' + break; + case 'release': + var v = version || 'latest'; + uri = 'https://libraries.io/api/' + project + '/' + v + '/dependencies' + break; + } + + var options = {method: 'GET', json: true, uri: uri}; + var badgeData = getBadgeData('dependencies', data); + + request(options, function(err, res, json) { + + if (err || res.statusCode !== 200) { + badgeData.text[1] = 'not available'; + return sendBadge(format, badgeData); + } + + var deprecated = json.dependencies.filter(function(dep) { + return dep.deprecated; + }); + + var outofdate = json.dependencies.filter(function(dep) { + return dep.outdated; + }); + + // Deprecated dependencies are really bad + if (deprecated.length) { + badgeData.colorscheme = 'red'; + badgeData.text[1] = deprecated.length + ' deprecated'; + return sendBadge(format, badgeData); + } + + // Out of date dependencies are pretty bad + if (outofdate.length) { + badgeData.colorscheme = 'orange'; + badgeData.text[1] = outofdate.length + ' out of date'; + return sendBadge(format, badgeData); + } + + // Up to date dependencies are good! + badgeData.colorscheme = 'brightgreen'; + badgeData.text[1] = 'up to date'; + return sendBadge(format, badgeData); + }); +})); + + + // Any badge. camp.route(/^\/(:|badge\/)(([^-]|--)*?)-(([^-]|--)*)-(([^-]|--)+)\.(svg|png|gif|jpg)$/, function(data, match, end, ask) {