1
0
mirror of https://github.com/badges/shields.git synced 2025-09-19 16:01:38 +03:00
Files
shields/services/pub/pub.service.js
Sigurd Meldgaard 407fe39e6e [pub] Use official version endpoint for pub-service (#9802)
* Use official version endpoint for pub-service

* run prettier

* Update schema

* make services a required property

---------

Co-authored-by: chris48s <git@chris-shaw.dev>
2023-12-12 19:17:17 +00:00

77 lines
1.9 KiB
JavaScript

import Joi from 'joi'
import { latest, renderVersionBadge } from '../version.js'
import { BaseJsonService, redirector, pathParam, queryParam } from '../index.js'
import { baseDescription } from './pub-common.js'
const schema = Joi.object({
versions: Joi.array()
.items(Joi.object({ version: Joi.string().required() }))
.required(),
}).required()
const queryParamSchema = Joi.object({
include_prereleases: Joi.equal(''),
}).required()
class PubVersion extends BaseJsonService {
static category = 'version'
static route = {
base: 'pub/v',
pattern: ':packageName',
queryParamSchema,
}
static openApi = {
'/pub/v/{packageName}': {
get: {
summary: 'Pub Version',
description: baseDescription,
parameters: [
pathParam({
name: 'packageName',
example: 'box2d',
}),
queryParam({
name: 'include_prereleases',
schema: { type: 'boolean' },
example: null,
}),
],
},
},
}
static defaultBadgeData = { label: 'pub' }
async fetch({ packageName }) {
return this._requestJson({
schema,
url: `https://pub.dev/api/packages/${packageName}`,
})
}
async handle({ packageName }, queryParams) {
const data = await this.fetch({ packageName })
const includePre = queryParams.include_prereleases !== undefined
const versions = data.versions.map(x => x.version)
const version = latest(versions, { pre: includePre })
return renderVersionBadge({ version })
}
}
const PubVersionRedirector = redirector({
category: 'version',
route: {
base: 'pub/vpre',
pattern: ':packageName',
},
transformPath: ({ packageName }) => `/pub/v/${packageName}`,
transformQueryParams: params => ({
include_prereleases: null,
}),
dateAdded: new Date('2019-12-15'),
})
export { PubVersion, PubVersionRedirector }