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:
@@ -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({
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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`,
|
||||
|
||||
Reference in New Issue
Block a user