You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.5 KiB
70 lines
1.5 KiB
const millify = require('millify')
|
|
const axios = require('../axios.js')
|
|
const semColor = require('../utils/sem-color.js')
|
|
const v = require('../utils/version-formatter.js')
|
|
|
|
// https://atom.io/api/packages/*
|
|
|
|
module.exports = async (topic, ...args) => {
|
|
switch (topic) {
|
|
case 'v':
|
|
return pkg('version', args)
|
|
case 'dl':
|
|
return pkg('downloads', args)
|
|
case 'license':
|
|
return pkg('license', args)
|
|
case 'stars':
|
|
return pkg('stars', args)
|
|
default:
|
|
return {
|
|
subject: 'apm',
|
|
status: 'unknown',
|
|
color: 'grey'
|
|
}
|
|
}
|
|
}
|
|
|
|
const pkg = async (topic, args) => {
|
|
let pkg = args[0]
|
|
|
|
const endpoint = `https://atom.io/api/packages/${pkg}`
|
|
const meta = await axios.get(endpoint).then(res => res.data)
|
|
|
|
switch (topic) {
|
|
case 'version': {
|
|
return {
|
|
subject: `apm`,
|
|
status: v(meta.releases.latest),
|
|
color: semColor(meta.releases.latest)
|
|
}
|
|
}
|
|
case 'license': {
|
|
return {
|
|
subject: 'license',
|
|
status: meta.versions[meta.releases.latest].license || 'unknown',
|
|
color: 'blue'
|
|
}
|
|
}
|
|
case 'downloads': {
|
|
return {
|
|
subject: 'downloads',
|
|
status: millify(meta.downloads),
|
|
color: 'green'
|
|
}
|
|
}
|
|
case 'stars': {
|
|
return {
|
|
subject: 'stars',
|
|
status: millify(meta.stargazers_count),
|
|
color: 'green'
|
|
}
|
|
}
|
|
default: {
|
|
return {
|
|
subject: 'apm',
|
|
status: 'unknown',
|
|
color: 'grey'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|