Browse Source

fix: (live-fns/packagist) version detection (#80)

* fix(live-fns/packagist): version detection

* Use `semver` to sort versions

* `nodev` => `noDev`

* Make use of `semver.coerce()`
refactor-github
Jacob Müller 6 years ago
committed by Amio /
parent
commit
fc48b9d157
  1. 37
      libs/live-fns/packagist.js
  2. 22
      libs/utils/compare-versions.js
  3. 3
      package-lock.json
  4. 1
      package.json

37
libs/live-fns/packagist.js

@ -1,32 +1,33 @@
const millify = require('millify')
const axios = require('../axios.js')
const compareVersions = require('../utils/compare-versions.js')
const semColor = require('../utils/sem-color.js')
const pre = versions => versions.filter(v => v.includes('-'))
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(version => version !== 'dev-master')
const noDev = versions => versions.filter(v => v.indexOf('dev') === -1)
module.exports = async function (topic, vendor, pkg, channel = 'stable') {
const endpoint = `https://packagist.org/packages/${vendor}/${pkg}.json`
const response = await axios.get(endpoint).then(res => res.data)
const { package: packageMeta } = await axios.get(endpoint).then(res => res.data)
switch (topic) {
case 'v':
const versions = Object.keys(response.package.versions)
const versions = Object.keys(packageMeta.versions).sort(compareVersions)
let version = ''
switch (channel) {
case 'latest':
version = latest(nodev(versions).reverse())
version = latest(noDev(versions))
break
case 'pre':
version = latest(pre(versions))
break
default:
version = latest(stable(versions).reverse())
version = latest(stable(versions))
}
version = version || latest(versions)
@ -39,73 +40,73 @@ module.exports = async function (topic, vendor, pkg, channel = 'stable') {
case 'dt':
return {
subject: 'downloads',
status: millify(response.package.downloads.total),
status: millify(packageMeta.downloads.total),
color: 'green'
}
case 'dd':
return {
subject: 'downloads',
status: millify(response.package.downloads.daily) + '/day',
status: millify(packageMeta.downloads.daily) + '/day',
color: 'green'
}
case 'dm':
return {
subject: 'downloads',
status: millify(response.package.downloads.monthly) + '/month',
status: millify(packageMeta.downloads.monthly) + '/month',
color: 'green'
}
case 'favers':
return {
subject: 'favers',
status: millify(response.package.favers),
status: millify(packageMeta.favers),
color: 'green'
}
case 'dependents':
return {
subject: 'dependents',
status: millify(response.package.dependents),
status: millify(packageMeta.dependents),
color: 'green'
}
case 'suggesters':
return {
subject: 'suggesters',
status: millify(response.package.suggesters),
status: millify(packageMeta.suggesters),
color: 'green'
}
case 'n':
return {
subject: 'packagist',
status: response.package.name,
status: packageMeta.name,
color: 'green'
}
case 'ghs':
return {
subject: 'stars',
status: millify(response.package.github_stars),
status: millify(packageMeta.github_stars),
color: 'green'
}
case 'ghw':
return {
subject: 'watchers',
status: millify(response.package.github_watchers),
status: millify(packageMeta.github_watchers),
color: 'green'
}
case 'ghf':
return {
subject: 'forks',
status: millify(response.package.github_forks),
status: millify(packageMeta.github_forks),
color: 'green'
}
case 'ghi':
return {
subject: 'issues',
status: millify(response.package.github_open_issues),
status: millify(packageMeta.github_open_issues),
color: 'green'
}
case 'lang':
return {
subject: 'language',
status: response.package.language,
status: packageMeta.language,
color: 'green'
}
default:

22
libs/utils/compare-versions.js

@ -0,0 +1,22 @@
const semver = require('semver')
module.exports = (v1, v2) => {
const validV1 = semver.valid(semver.coerce(v1))
const validV2 = semver.valid(semver.coerce(v2))
const isV1Valid = !!validV1
const isV2Valid = !!validV2
if (isV1Valid && isV2Valid) {
return semver.compare(validV1, validV2)
}
if (isV1Valid && !isV2Valid) {
return 1
}
if (!isV1Valid && isV2Valid) {
return -1
}
return v1.localeCompare(v2)
}

3
package-lock.json

@ -6716,8 +6716,7 @@
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"dev": true
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
},
"semver-store": {
"version": "0.3.0",

1
package.json

@ -24,6 +24,7 @@
"micro": "^9.3.2",
"micro-fork": "^0.1.0",
"millify": "^2.0.1",
"semver": "^5.5.0",
"serve-marked": "0.3.0",
"xml2js": "^0.4.19"
},

Loading…
Cancel
Save