Files
shields/services/npm/npm-version.service.js
dependabot-preview[bot] 294aa1e1df Build(deps-dev): bump eslint-plugin-import from 2.17.3 to 2.18.0; autofixes (#3671)
* Build(deps-dev): bump eslint-plugin-import from 2.17.3 to 2.18.0

Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.17.3 to 2.18.0.
- [Release notes](https://github.com/benmosher/eslint-plugin-import/releases)
- [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.17.3...v2.18.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Autofixes
2019-07-08 12:13:46 -04:00

107 lines
2.7 KiB
JavaScript

'use strict'
const Joi = require('@hapi/joi')
const { renderVersionBadge } = require('../version')
const NpmBase = require('./npm-base')
const { NotFound } = require('..')
const keywords = ['node']
// Joi.string should be a semver.
const schema = Joi.object()
.pattern(/./, Joi.string())
.required()
module.exports = class NpmVersion extends NpmBase {
static get category() {
return 'version'
}
static get route() {
return this.buildRoute('npm/v', { withTag: true })
}
static get examples() {
return [
{
title: 'npm',
pattern: ':packageName',
namedParams: { packageName: 'npm' },
staticPreview: this.render({ version: '6.3.0' }),
keywords,
},
{
title: 'npm (scoped)',
pattern: ':scope/:packageName',
namedParams: { scope: '@cycle', packageName: 'core' },
staticPreview: this.render({ version: '7.0.0' }),
keywords,
},
{
title: 'npm (tag)',
pattern: ':packageName/:tag',
namedParams: { packageName: 'npm', tag: 'next' },
staticPreview: this.render({ tag: 'latest', version: '6.3.0' }),
keywords,
},
{
title: 'npm (custom registry)',
pattern: ':packageName/:tag',
namedParams: { packageName: 'npm', tag: 'next' },
queryParams: { registry_uri: 'https://registry.npmjs.com' },
staticPreview: this.render({ tag: 'latest', version: '7.0.0' }),
keywords,
},
{
title: 'npm (scoped with tag)',
pattern: ':scope/:packageName/:tag',
namedParams: { scope: '@cycle', packageName: 'core', tag: 'canary' },
staticPreview: this.render({ tag: 'latest', version: '6.3.0' }),
keywords,
},
]
}
static get defaultBadgeData() {
return { label: 'npm' }
}
static render({ tag, version }) {
const { label: defaultLabel } = this.defaultBadgeData
return renderVersionBadge({
tag,
version,
defaultLabel,
})
}
async handle(namedParams, queryParams) {
const {
scope,
packageName,
tag,
registryUrl,
} = this.constructor.unpackParams(namedParams, queryParams)
const slug =
scope === undefined
? packageName
: this.constructor.encodeScopedPackage({ scope, packageName })
const packageData = await this._requestJson({
schema,
url: `${registryUrl}/-/package/${slug}/dist-tags`,
errorMessages: { 404: 'package not found' },
})
if (tag && !(tag in packageData)) {
throw new NotFound({ prettyMessage: 'tag not found' })
}
return this.constructor.render({
tag,
version: packageData[tag || 'latest'],
})
}
}