diff --git a/api/homebrew.ts b/api/homebrew.ts index 04b4d7d..cf10915 100644 --- a/api/homebrew.ts +++ b/api/homebrew.ts @@ -1,25 +1,52 @@ import got from '../libs/got' -import { version, versionColor } from '../libs/utils' +import { millify, version, versionColor } from '../libs/utils' import { createBadgenHandler, PathArgs } from '../libs/create-badgen-handler' export default createBadgenHandler({ title: 'Homebrew', examples: { '/homebrew/v/fish': 'version', - '/homebrew/v/cake': 'version' + '/homebrew/v/cake': 'version', + '/homebrew/dm/fish': 'monthly downloads', + '/homebrew/dy/fish': 'yearly downloads', + '/homebrew/cask/v/atom': 'version', + '/homebrew/cask/v/whichspace': 'version' + // NOTE: cask analytics are broken + // '/homebrew/cask/dm/atom': 'monthly downloads', + // '/homebrew/cask/dy/atom': 'yearly downloads' }, handlers: { - '/homebrew/v/:pkg': handler + '/homebrew/:topic/:pkg': handler, + '/homebrew/:type/:topic/:pkg': handler } }) -async function handler ({ pkg }: PathArgs) { - const endpoint = `https://formulae.brew.sh/api/formula/${pkg}.json` - const { versions } = await got(endpoint).json() +async function handler ({ type = 'formula', topic, pkg }: PathArgs) { + const endpoint = `https://formulae.brew.sh/api/${type}/${pkg}.json` + const { + analytics, + versions, + version:ver = versions.stable + } = await got(endpoint).json() - return { - subject: 'homebrew', - status: version(versions.stable), - color: versionColor(versions.stable) + switch (topic) { + case 'v': + return { + subject: type === 'cask' ? 'homebrew cask' : 'homebrew', + status: version(ver), + color: versionColor(ver) + } + case 'dm': + return { + subject: 'downloads', + status: millify(analytics.install['30d'][pkg]) + '/month', + color: 'green' + } + case 'dy': + return { + subject: 'downloads', + status: millify(analytics.install['365d'][pkg]) + '/year', + color: 'green' + } } }