Files
shields/services/visual-studio-app-center/visual-studio-app-center-releases-size.service.js
chris48s 151c70dd17 Add ability to format bytes as metric or IEC; affects [bundlejs bundlephobia ChromeWebStoreSize CratesSize DockerSize GithubRepoSize GithubCodeSize GithubSize NpmUnpackedSize SpigetDownloadSize steam VisualStudioAppCenterReleasesSize whatpulse] (#10547)
* add renderSizeBadge helper, use it everywhere

- switch from pretty-bytes to byte-size
- add renderSizeBadge() helper function
- match upstream conventions for metric/IEC units
- add new test helpers and use them in service tests

* unrelated: fix npm unpacked size query param schema

not strictly related to this PR
but I noticed it was broken

* chromewebstore: reformat size string, test against isIecFileSize
2024-12-01 19:53:26 +00:00

55 lines
1.3 KiB
JavaScript

import Joi from 'joi'
import { pathParams } from '../index.js'
import { renderSizeBadge } from '../size.js'
import { nonNegativeInteger } from '../validators.js'
import {
BaseVisualStudioAppCenterService,
description,
} from './visual-studio-app-center-base.js'
const schema = Joi.object({
size: nonNegativeInteger,
}).required()
export default class VisualStudioAppCenterReleasesSize extends BaseVisualStudioAppCenterService {
static category = 'size'
static route = {
base: 'visual-studio-app-center/releases/size',
pattern: ':owner/:app/:token',
}
static openApi = {
'/visual-studio-app-center/releases/size/{owner}/{app}/{token}': {
get: {
summary: 'Visual Studio App Center Size',
description,
parameters: pathParams(
{
name: 'owner',
example: 'jct',
},
{
name: 'app',
example: 'my-amazing-app',
},
{
name: 'token',
example: 'ac70cv...',
},
),
},
},
}
static defaultBadgeData = {
label: 'size',
color: 'blue',
}
async handle({ owner, app, token }) {
const { size } = await this.fetch({ owner, app, token, schema })
return renderSizeBadge(size, 'metric')
}
}