Skip to content
Snippets Groups Projects
Unverified Commit a583ca71 authored by Eray Erdin (&mut self)'s avatar Eray Erdin (&mut self) Committed by GitHub
Browse files

[Crates] Implement Dependents Badge (#10438)

* add dependents service

* remove redundant timeout
parent bdf84f9f
No related branches found
No related tags found
No related merge requests found
import Joi from 'joi'
import { pathParams } from '../index.js'
import { metric } from '../text-formatters.js'
import { nonNegativeInteger } from '../validators.js'
import { BaseCratesService, description } from './crates-base.js'
const dependentsResponseSchema = Joi.object({
meta: Joi.object({
total: nonNegativeInteger,
}).required(),
}).required()
export default class CratesDependents extends BaseCratesService {
static category = 'other'
static route = { base: 'crates/dependents', pattern: ':crate' }
static openApi = {
'/crates/dependents/{crate}': {
get: {
summary: 'Crates.io Dependents',
description,
parameters: pathParams({
name: 'crate',
example: 'tokio',
}),
},
},
}
static render({ dependentCount }) {
return {
label: 'dependents',
message: metric(dependentCount),
color: dependentCount === 0 ? 'orange' : 'brightgreen',
}
}
async fetch({ crate }) {
const url = `https://crates.io/api/v1/crates/${crate}/reverse_dependencies`
const schema = dependentsResponseSchema
return this._requestJson({ schema, url })
}
async handle({ crate }) {
const json = await this.fetch({ crate })
const { total: dependentCount } = json.meta
return this.constructor.render({ dependentCount })
}
}
import { isMetric } from '../test-validators.js'
import { createServiceTester } from '../tester.js'
export const t = await createServiceTester()
t.create('dependent count').get('/tokio.json').expectBadge({
label: 'dependents',
message: isMetric,
})
t.create('dependent count (nonexistent package)')
.get('/foobar-is-not-crate.json')
.expectBadge({
label: 'crates.io',
message: 'not found',
})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment