Support optionalDependencies in [GithubPackageJson] (#6749)

Closes #6044

Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
This commit is contained in:
Paul Melnikow
2021-08-03 18:25:09 -04:00
committed by GitHub
parent 2e59a7a4cc
commit 37e83641ab
3 changed files with 32 additions and 19 deletions

View File

@@ -75,7 +75,7 @@ class GithubPackageJsonDependencyVersion extends ConditionalGithubAuthV3Service
static route = {
base: 'github/package-json/dependency-version',
pattern:
':user/:repo/:kind(dev|peer)?/:scope(@[^/]+)?/:packageName/:branch*',
':user/:repo/:kind(dev|peer|optional)?/:scope(@[^/]+)?/:packageName/:branch*',
queryParamSchema: dependencyQueryParamSchema,
}
@@ -146,14 +146,18 @@ class GithubPackageJsonDependencyVersion extends ConditionalGithubAuthV3Service
{ user, repo, kind, branch = 'HEAD', scope, packageName },
{ filename = 'package.json' }
) {
const { dependencies, devDependencies, peerDependencies } =
await fetchJsonFromRepo(this, {
schema: isPackageJsonWithDependencies,
user,
repo,
branch,
filename,
})
const {
dependencies,
devDependencies,
peerDependencies,
optionalDependencies,
} = await fetchJsonFromRepo(this, {
schema: isPackageJsonWithDependencies,
user,
repo,
branch,
filename,
})
const wantedDependency = scope ? `${scope}/${packageName}` : packageName
const { range } = getDependencyVersion({
@@ -162,6 +166,7 @@ class GithubPackageJsonDependencyVersion extends ConditionalGithubAuthV3Service
dependencies,
devDependencies,
peerDependencies,
optionalDependencies,
})
return this.constructor.render({

View File

@@ -47,6 +47,13 @@ t.create('Peer dependency version')
message: semverRange,
})
t.create('Optional dependency version')
.get('/dependency-version/IcedFrisby/IcedFrisby/optional/@hapi/joi.json')
.expectBadge({
label: '@hapi/joi',
message: semverRange,
})
t.create('Dev dependency version')
.get(
'/dependency-version/paulmelnikow/react-boxplot/dev/react.json?label=react%20tested'

View File

@@ -13,6 +13,7 @@ const isPackageJsonWithDependencies = Joi.object({
dependencies: isDependencyMap,
devDependencies: isDependencyMap,
peerDependencies: isDependencyMap,
optionalDependencies: isDependencyMap,
}).required()
function getDependencyVersion({
@@ -21,19 +22,19 @@ function getDependencyVersion({
dependencies,
devDependencies,
peerDependencies,
optionalDependencies,
}) {
let dependenciesOfKind
if (kind === 'peer') {
dependenciesOfKind = peerDependencies
} else if (kind === 'dev') {
dependenciesOfKind = devDependencies
} else if (kind === 'prod') {
dependenciesOfKind = dependencies
} else {
throw Error(`Not very kind: ${kind}`)
const dependencyMaps = {
peer: peerDependencies,
optional: optionalDependencies,
dev: devDependencies,
prod: dependencies,
}
const range = dependenciesOfKind[wantedDependency]
if (!(kind in dependencyMaps)) {
throw Error(`Not very kind: ${kind}`)
}
const range = dependencyMaps[kind][wantedDependency]
if (range === undefined) {
throw new InvalidParameter({
prettyMessage: `${kind} dependency not found`,