mirror of
https://github.com/badges/shields.git
synced 2025-04-18 19:44:04 +03:00
Add [JSR] version service (#10030)
* feat: add JSR version badge * change the label to lowercase * fix tests
This commit is contained in:
parent
671f4eb2ba
commit
1cf1c0a352
60
services/jsr/jsr-version.service.js
Normal file
60
services/jsr/jsr-version.service.js
Normal file
@ -0,0 +1,60 @@
|
||||
import Joi from 'joi'
|
||||
import { renderVersionBadge } from '../version.js'
|
||||
import { BaseJsonService, pathParams } from '../index.js'
|
||||
|
||||
const schema = Joi.object({
|
||||
latest: Joi.string().required(),
|
||||
}).required()
|
||||
|
||||
export default class JsrVersion extends BaseJsonService {
|
||||
static category = 'version'
|
||||
|
||||
static route = {
|
||||
base: 'jsr/v',
|
||||
pattern: ':scope(@[^/]+)/:packageName',
|
||||
}
|
||||
|
||||
static openApi = {
|
||||
'/jsr/v/{scope}/{packageName}': {
|
||||
get: {
|
||||
summary: 'JSR Version',
|
||||
description:
|
||||
'[JSR](https://jsr.io/) is a modern package registry for JavaScript and TypeScript.',
|
||||
parameters: pathParams(
|
||||
{
|
||||
name: 'scope',
|
||||
example: '@luca',
|
||||
},
|
||||
{
|
||||
name: 'packageName',
|
||||
example: 'flag',
|
||||
},
|
||||
),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
static defaultBadgeData = {
|
||||
label: 'jsr',
|
||||
}
|
||||
|
||||
static render({ version }) {
|
||||
return renderVersionBadge({ version })
|
||||
}
|
||||
|
||||
async fetch({ scope, packageName }) {
|
||||
// see https://jsr.io/docs/api#package-version-metadata
|
||||
return this._requestJson({
|
||||
schema,
|
||||
url: `https://jsr.io/${scope}/${packageName}/meta.json`,
|
||||
httpErrors: {
|
||||
404: 'package not found',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
async handle({ scope, packageName }) {
|
||||
const { latest } = await this.fetch({ scope, packageName })
|
||||
return this.constructor.render({ version: latest })
|
||||
}
|
||||
}
|
15
services/jsr/jsr-version.tester.js
Normal file
15
services/jsr/jsr-version.tester.js
Normal file
@ -0,0 +1,15 @@
|
||||
import { isSemver } from '../test-validators.js'
|
||||
import { createServiceTester } from '../tester.js'
|
||||
export const t = await createServiceTester()
|
||||
|
||||
t.create('gets the version of @luca/flag')
|
||||
.get('/@luca/flag.json')
|
||||
.expectBadge({ label: 'jsr', message: isSemver })
|
||||
|
||||
t.create('gets the version of @std/assert')
|
||||
.get('/@std/assert.json')
|
||||
.expectBadge({ label: 'jsr', message: isSemver })
|
||||
|
||||
t.create('returns an error when getting a non-existent')
|
||||
.get('/@std/this-is-a-non-existent-package-name.json')
|
||||
.expectBadge({ label: 'jsr', message: 'package not found' })
|
Loading…
x
Reference in New Issue
Block a user