diff --git a/server.js b/server.js index 1474ad7..8af7326 100644 --- a/server.js +++ b/server.js @@ -1629,12 +1629,23 @@ cache(function (data, match, sendBadge, request) { })); // npm version integration. -camp.route(/^\/npm\/v\/(.*)\.(svg|png|gif|jpg|json)$/, +camp.route(/^\/npm\/v\/(@[^\/]*)?\/?([^\/]*)\/?([^\/]*)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { - var repo = encodeURIComponent(match[1]); // eg, "express" or "@user/express" - var format = match[2]; - var apiUrl = 'https://registry.npmjs.org/-/package/' + repo + '/dist-tags'; - var badgeData = getBadgeData('npm', data); + var scope = match[1]; // "@user" + var repo = match[2]; // "express" + var tag = match[3]; // "next" + var format = match[4]; // "svg" + var pkg = encodeURIComponent(scope + ? scope + '/' + repo + : repo); + var name = 'npm'; + if (tag) { + name += '@' + tag; + } else { + tag = 'latest'; + } + var apiUrl = 'https://registry.npmjs.org/-/package/' + pkg + '/dist-tags'; + var badgeData = getBadgeData(name, data); // Using the Accept header because of this bug: // request(apiUrl, { headers: { 'Accept': '*/*' } }, function(err, res, buffer) { @@ -1645,7 +1656,7 @@ cache(function(data, match, sendBadge, request) { } try { var data = JSON.parse(buffer); - var version = data.latest; + var version = data[tag]; var vdata = versionColor(version); badgeData.text[1] = vdata.version; badgeData.colorscheme = vdata.color; diff --git a/try.html b/try.html index b1799ee..11f1989 100644 --- a/try.html +++ b/try.html @@ -427,6 +427,14 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/npm/v/@cycle/core.svg + npm (tag): + + https://img.shields.io/npm/v/npm/next.svg + + npm (scoped with tag): + + https://img.shields.io/npm/v/@cycle/core/canary.svg + node: https://img.shields.io/node/v/gh-badges.svg