kopia lustrzana https://github.com/badgen/badgen.net
Migrate packagist badge to v2
rodzic
ff9e400117
commit
2d3e9dd97a
|
@ -0,0 +1,156 @@
|
|||
import millify from 'millify'
|
||||
import got from '../libs/got'
|
||||
import { version as v, versionColor, versionCompare } from '../libs/utils'
|
||||
import {
|
||||
badgenServe,
|
||||
BadgenServeMeta as Meta,
|
||||
BadgenServeHandlers as Handlers,
|
||||
BadgenServeHandlerArgs as Args
|
||||
} from '../libs/badgen-serve'
|
||||
|
||||
export const meta: Meta = {
|
||||
title: 'Packagist',
|
||||
examples: {
|
||||
'/packagist/v/monolog/monolog': 'version',
|
||||
'/packagist/v/monolog/monolog/pre': 'version (pre)',
|
||||
'/packagist/v/monolog/monolog/latest': 'version (latest)',
|
||||
'/packagist/dt/monolog/monolog': 'total downloads',
|
||||
'/packagist/dd/monolog/monolog': 'daily downloads',
|
||||
'/packagist/dm/monolog/monolog': 'monthly downloads',
|
||||
'/packagist/favers/monolog/monolog': 'favers',
|
||||
'/packagist/dependents/monolog/monolog': 'dependents',
|
||||
'/packagist/suggesters/monolog/monolog': 'suggesters',
|
||||
'/packagist/name/monolog/monolog': 'name',
|
||||
'/packagist/ghs/monolog/monolog': 'github stars',
|
||||
'/packagist/ghw/monolog/monolog': 'github watchers',
|
||||
'/packagist/ghf/monolog/monolog': 'github followers',
|
||||
'/packagist/ghi/monolog/monolog': 'github issues',
|
||||
'/packagist/lang/monolog/monolog': 'language',
|
||||
'/packagist/license/monolog/monolog': 'license',
|
||||
}
|
||||
}
|
||||
|
||||
export const handlers: Handlers = {
|
||||
'/packagist/:topic<v>/:vendor/:pkg/:channel?': handler,
|
||||
'/packagist/:topic<dt|dd|dm|favers|dependents|suggesters|n|name>/:vendor/:pkg': handler,
|
||||
'/packagist/:topic<ghs|ghw|ghf|ghi|lang|license>/:vendor/:pkg': handler
|
||||
}
|
||||
|
||||
export default badgenServe(handlers)
|
||||
|
||||
const pre = versions => versions.filter(v => v.includes('-') && v.indexOf('dev') !== 0)
|
||||
const stable = versions => versions.filter(v => !v.includes('-'))
|
||||
const latest = versions => versions.length > 0 && versions.slice(-1)[0]
|
||||
const noDev = versions => versions.filter(v => v.indexOf('dev') === -1)
|
||||
// @ts-ignore
|
||||
const license = versions => Object.values(versions).find(v => v.license.length).license[0]
|
||||
|
||||
async function handler ({ topic, vendor, pkg, channel = 'latest' }: Args) {
|
||||
const endpoint = `https://packagist.org/packages/${vendor}/${pkg}.json`
|
||||
const { package: packageMeta } = await got(endpoint).then(res => res.body)
|
||||
|
||||
switch (topic) {
|
||||
case 'v':
|
||||
const versions = Object.keys(packageMeta.versions).sort(versionCompare)
|
||||
|
||||
let version = ''
|
||||
|
||||
switch (channel) {
|
||||
case 'latest':
|
||||
version = latest(noDev(versions))
|
||||
break
|
||||
case 'pre':
|
||||
version = latest(pre(versions))
|
||||
break
|
||||
default:
|
||||
version = latest(stable(versions))
|
||||
}
|
||||
|
||||
version = version || latest(versions)
|
||||
|
||||
return {
|
||||
subject: 'packagist',
|
||||
status: v(version),
|
||||
color: versionColor(version)
|
||||
}
|
||||
case 'dt':
|
||||
return {
|
||||
subject: 'downloads',
|
||||
status: millify(packageMeta.downloads.total),
|
||||
color: 'green'
|
||||
}
|
||||
case 'dd':
|
||||
return {
|
||||
subject: 'downloads',
|
||||
status: millify(packageMeta.downloads.daily) + '/day',
|
||||
color: 'green'
|
||||
}
|
||||
case 'dm':
|
||||
return {
|
||||
subject: 'downloads',
|
||||
status: millify(packageMeta.downloads.monthly) + '/month',
|
||||
color: 'green'
|
||||
}
|
||||
case 'favers':
|
||||
return {
|
||||
subject: 'favers',
|
||||
status: millify(packageMeta.favers),
|
||||
color: 'green'
|
||||
}
|
||||
case 'dependents':
|
||||
return {
|
||||
subject: 'dependents',
|
||||
status: millify(packageMeta.dependents),
|
||||
color: 'green'
|
||||
}
|
||||
case 'suggesters':
|
||||
return {
|
||||
subject: 'suggesters',
|
||||
status: millify(packageMeta.suggesters),
|
||||
color: 'green'
|
||||
}
|
||||
case 'n':
|
||||
case 'name':
|
||||
return {
|
||||
subject: 'packagist',
|
||||
status: packageMeta.name,
|
||||
color: 'green'
|
||||
}
|
||||
case 'ghs':
|
||||
return {
|
||||
subject: 'stars',
|
||||
status: millify(packageMeta.github_stars),
|
||||
color: 'green'
|
||||
}
|
||||
case 'ghw':
|
||||
return {
|
||||
subject: 'watchers',
|
||||
status: millify(packageMeta.github_watchers),
|
||||
color: 'green'
|
||||
}
|
||||
case 'ghf':
|
||||
return {
|
||||
subject: 'forks',
|
||||
status: millify(packageMeta.github_forks),
|
||||
color: 'green'
|
||||
}
|
||||
case 'ghi':
|
||||
return {
|
||||
subject: 'issues',
|
||||
status: millify(packageMeta.github_open_issues),
|
||||
color: 'green'
|
||||
}
|
||||
case 'license':
|
||||
return {
|
||||
subject: 'license',
|
||||
status: license(packageMeta.versions) || 'unknown',
|
||||
color: 'blue'
|
||||
}
|
||||
case 'lang':
|
||||
return {
|
||||
subject: 'language',
|
||||
status: packageMeta.language,
|
||||
color: 'green'
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@ const liveBadgeExampleList = [
|
|||
'amo',
|
||||
'pypi',
|
||||
'nuget',
|
||||
'packagist',
|
||||
'apm',
|
||||
// CI
|
||||
'appveyor',
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
import millify from 'millify'
|
||||
|
||||
import compareVersions from './compare-versions'
|
||||
import coverage from './cov-format'
|
||||
import coverageColor from './cov-color'
|
||||
import scale from './scale'
|
||||
import stars from './stars.js'
|
||||
import version from './version-formatter'
|
||||
import versionCompare from './compare-versions'
|
||||
import versionColor from './sem-color'
|
||||
|
||||
export {
|
||||
millify,
|
||||
compareVersions,
|
||||
coverage,
|
||||
coverageColor,
|
||||
scale,
|
||||
stars,
|
||||
version,
|
||||
versionColor
|
||||
versionCompare,
|
||||
versionColor,
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue