Files
shields/services/bower/bower-version.service.js
Caleb Cartwright 1027c296ee convert some service classes to static props, run [bower bstats] (#5503)
* refactor(bower): convert to static props

* refactor(bstats): convert to static props

Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2020-09-08 16:45:46 -05:00

63 lines
1.8 KiB
JavaScript

'use strict'
const Joi = require('@hapi/joi')
const { renderVersionBadge } = require('../version')
const { InvalidResponse, redirector } = require('..')
const BaseBowerService = require('./bower-base')
const queryParamSchema = Joi.object({
include_prereleases: Joi.equal(''),
}).required()
class BowerVersion extends BaseBowerService {
static category = 'version'
static route = { base: 'bower/v', pattern: ':packageName', queryParamSchema }
static examples = [
{
title: 'Bower Version',
namedParams: { packageName: 'bootstrap' },
staticPreview: renderVersionBadge({ version: '4.2.1' }),
},
{
title: 'Bower Version (including pre-releases)',
namedParams: { packageName: 'bootstrap' },
queryParams: { include_prereleases: null },
staticPreview: renderVersionBadge({ version: '4.2.1' }),
},
]
static defaultBadgeData = { label: 'bower' }
async handle({ packageName }, queryParams) {
const data = await this.fetch({ packageName })
const includePrereleases = queryParams.include_prereleases !== undefined
if (includePrereleases) {
if (data.latest_release_number) {
return renderVersionBadge({ version: data.latest_release_number })
}
} else {
if (data.latest_stable_release) {
return renderVersionBadge({ version: data.latest_stable_release.name })
}
}
throw new InvalidResponse({ prettyMessage: 'no releases' })
}
}
const BowerVersionRedirect = redirector({
category: 'version',
route: {
base: 'bower/vpre',
pattern: ':packageName',
},
transformPath: ({ packageName }) => `/bower/v/${packageName}`,
transformQueryParams: params => ({
include_prereleases: null,
}),
dateAdded: new Date('2019-12-15'),
})
module.exports = { BowerVersion, BowerVersionRedirect }