Files
shields/services/npm/npm-dependency-version.service.js
Caleb Cartwright 93333509c6 Fix [NpmDependencyVersion] (#3274)
* fix(NpmDependencyVersion): refs #3271

* refactor(NpmDependencyVersion): tweaked route based on PR feedback
2019-04-07 12:28:11 +01:00

157 lines
3.8 KiB
JavaScript

'use strict'
const { getDependencyVersion } = require('../package-json-helpers')
const NpmBase = require('./npm-base')
const { queryParamSchema } = NpmBase
const keywords = ['node']
module.exports = class NpmDependencyVersion extends NpmBase {
static get category() {
return 'platform-support'
}
static get route() {
return {
base: 'npm/dependency-version',
pattern:
':scope(@[^/]+)?/:packageName/:kind(dev|peer)?/:dependencyScope(@[^/]+)?/:dependency',
queryParamSchema,
}
}
static get examples() {
return [
{
title: 'npm peer dependency version',
pattern: ':packageName/peer/:dependency',
namedParams: {
packageName: 'react-boxplot',
dependency: 'prop-types',
},
staticPreview: this.render({
dependency: 'prop-types',
range: '^15.5.4',
}),
keywords,
},
{
title: 'npm peer dependency version (scoped)',
pattern: ':scope?/:packageName/dev/:dependencyScope?/:dependency',
namedParams: {
scope: '@swellaby',
packageName: 'eslint-config',
dependency: 'eslint',
},
staticPreview: this.render({
dependency: 'eslint',
range: '^3.0.0',
}),
keywords,
},
{
title: 'npm dev dependency version',
pattern: ':packageName/dev/:dependency',
namedParams: {
packageName: 'react-boxplot',
dependency: 'eslint-config-standard',
},
staticPreview: this.render({
dependency: 'eslint-config-standard',
range: '^12.0.0',
}),
keywords,
},
{
title: 'npm dev dependency version (scoped)',
pattern: ':scope?/:packageName/dev/:dependencyScope?/:dependency',
namedParams: {
packageName: 'mocha',
dependencyScope: '@mocha',
dependency: 'contributors',
},
staticPreview: this.render({
dependency: '@mocha/contributors',
range: '^1.0.3',
}),
keywords,
},
{
title: 'npm (prod) dependency version',
pattern: ':packageName/:dependency',
namedParams: {
packageName: 'react-boxplot',
dependency: 'simple-statistics',
},
staticPreview: this.render({
dependency: 'simple-statistics',
range: '^6.1.1',
}),
keywords,
},
{
title: 'npm (prod) dependency version (scoped)',
pattern: ':scope?/:packageName/:dependencyScope?/:dependency',
namedParams: {
packageName: 'got',
dependencyScope: '@sindresorhus',
dependency: 'is',
},
staticPreview: this.render({
dependency: '@sindresorhus/is',
range: '^0.15.0',
}),
keywords,
},
]
}
static get defaultBadgeData() {
return {
label: 'dependency',
}
}
static render({ dependency, range }) {
return {
label: dependency,
message: range,
color: 'blue',
}
}
async handle(namedParams, queryParams) {
const { scope, packageName, registryUrl } = this.constructor.unpackParams(
namedParams,
queryParams
)
const { kind, dependency, dependencyScope } = namedParams
const wantedDependency = `${
dependencyScope ? `${dependencyScope}/` : ''
}${dependency}`
const {
dependencies,
devDependencies,
peerDependencies,
} = await this.fetchPackageData({
scope,
packageName,
registryUrl,
})
const { range } = getDependencyVersion({
kind,
wantedDependency,
dependencies,
devDependencies,
peerDependencies,
})
return this.constructor.render({
dependency: wantedDependency,
range,
})
}
}