Files
shields/services/jetbrains/jetbrains-downloads.service.js

63 lines
1.5 KiB
JavaScript

'use strict'
const Joi = require('joi')
const JetbrainsBase = require('./jetbrains-base')
const { metric } = require('../../lib/text-formatters')
const {
downloadCount: downloadCountColor,
} = require('../../lib/color-formatters')
const { nonNegativeInteger } = require('../validators')
const schema = Joi.object({
'plugin-repository': Joi.object({
category: Joi.object({
'idea-plugin': Joi.array()
.min(1)
.items(
Joi.object({
'@_downloads': nonNegativeInteger,
})
)
.single()
.required(),
}),
}).required(),
}).required()
module.exports = class JetbrainsDownloads extends JetbrainsBase {
static get category() {
return 'downloads'
}
static get examples() {
return [
{
title: 'JetBrains IntelliJ plugins',
pattern: ':pluginId',
namedParams: {
pluginId: '1347-scala',
},
staticPreview: this.render({ downloads: 10200000 }),
},
]
}
static get route() {
return this.buildUrl('jetbrains/plugin/d')
}
static render({ downloads }) {
return {
message: `${metric(downloads)}`,
color: downloadCountColor(downloads),
}
}
async handle({ pluginId }) {
const pluginData = await this.fetchPackageData({ pluginId, schema })
const downloads =
pluginData['plugin-repository'].category['idea-plugin'][0]['@_downloads']
return this.constructor.render({ downloads })
}
}