-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
/
docsrs.service.js
72 lines (66 loc) · 1.63 KB
/
docsrs.service.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import Joi from 'joi'
import { BaseJsonService, pathParams } from '../index.js'
const schema = Joi.object({
doc_status: Joi.boolean().required(),
}).required()
export default class DocsRs extends BaseJsonService {
static category = 'build'
static route = { base: 'docsrs', pattern: ':crate/:version?' }
static openApi = {
'/docsrs/{crate}/{version}': {
get: {
summary: 'docs.rs (with version)',
parameters: pathParams(
{
name: 'crate',
example: 'regex',
},
{
name: 'version',
example: 'latest',
},
),
},
},
'/docsrs/{crate}': {
get: {
summary: 'docs.rs',
parameters: pathParams({
name: 'crate',
example: 'regex',
}),
},
},
}
static defaultBadgeData = { label: 'docs' }
static render({ docStatus, version }) {
let label = `docs@${version}`
if (version === 'latest') {
label = 'docs'
}
if (docStatus) {
return {
label,
message: 'passing',
color: 'success',
}
} else {
return {
label,
message: 'failing',
color: 'critical',
}
}
}
async fetch({ crate, version }) {
return await this._requestJson({
schema,
url: `https://docs.rs/crate/${crate}/${version}/status.json`,
httpErrors: version ? { 400: 'malformed version' } : {},
})
}
async handle({ crate, version = 'latest' }) {
const { doc_status: docStatus } = await this.fetch({ crate, version })
return this.constructor.render({ version, docStatus })
}
}