badgen.net/libs/live-fns/npm.js

59 wiersze
1.6 KiB
JavaScript
Czysty Zwykły widok Historia

2018-07-15 13:50:45 +00:00
const axios = require('../axios.js')
2018-07-10 08:17:58 +00:00
const millify = require('millify')
2018-06-30 17:52:50 +00:00
2018-07-10 03:09:38 +00:00
module.exports = async function (method, ...args) {
switch (method) {
case 'v':
return v(args)
2018-07-10 08:17:58 +00:00
case 'dd':
return d('last-day', args)
case 'dw':
return d('last-week', args)
case 'dm':
return d('last-month', args)
2018-07-10 03:09:38 +00:00
default:
return {
subject: 'npm',
status: 'unknown',
color: 'grey'
}
}
}
// npm download
async function d (period, args) {
const endpoint = `https://api.npmjs.org/downloads/point/${period}/${args.join('/')}`
2018-07-15 13:50:45 +00:00
const stats = await axios.get(endpoint).then(res => res.data)
return {
subject: 'downloads',
status: millify(stats.downloads) + period.replace('last-', '/'),
color: 'green'
}
}
2018-07-10 08:17:58 +00:00
// npm version
2018-07-10 03:09:38 +00:00
async function v (args) {
const version = await fetchLatestVersion(args)
2018-06-30 17:52:50 +00:00
return {
subject: 'npm',
status: `v${version}`,
color: version.split('.')[0] === '0' ? 'orange' : 'blue'
}
}
async function fetchLatestVersion (args) {
const scoped = args.length === 2 && args[0][0] === '@'
let endpoint
2018-06-30 17:52:50 +00:00
// Due to an bug of npm registry api, scoped package need to be handled
// separately: https://github.com/npm/registry/issues/34
// A workaround is using version range("*" for "latest") by Andrew Goode:
// https://github.com/npm/registry/issues/34#issuecomment-228349870
2018-06-30 17:52:50 +00:00
if (scoped) {
endpoint = `https://registry.npmjs.org/${args.join('%2F')}/*`
2018-06-30 17:52:50 +00:00
} else {
endpoint = `https://registry.npmjs.org/${args}/latest`
2018-07-10 08:17:58 +00:00
}
2018-07-15 13:50:45 +00:00
return (await axios.get(endpoint).then(res => res.data)).version
2018-07-10 08:17:58 +00:00
}