* update joi + joi-extension-semver * @hapi/joi --> joi Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
53 lines
1.1 KiB
JavaScript
53 lines
1.1 KiB
JavaScript
'use strict'
|
|
|
|
const Joi = require('joi')
|
|
const { InvalidParameter } = require('.')
|
|
|
|
const isDependencyMap = Joi.object()
|
|
.pattern(
|
|
/./,
|
|
// This accepts a semver range, a URL, and many other possible values.
|
|
Joi.string().min(1).required()
|
|
)
|
|
.default({})
|
|
|
|
const isPackageJsonWithDependencies = Joi.object({
|
|
dependencies: isDependencyMap,
|
|
devDependencies: isDependencyMap,
|
|
peerDependencies: isDependencyMap,
|
|
}).required()
|
|
|
|
function getDependencyVersion({
|
|
kind = 'prod',
|
|
wantedDependency,
|
|
dependencies,
|
|
devDependencies,
|
|
peerDependencies,
|
|
}) {
|
|
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 range = dependenciesOfKind[wantedDependency]
|
|
if (range === undefined) {
|
|
throw new InvalidParameter({
|
|
prettyMessage: `${kind} dependency not found`,
|
|
})
|
|
}
|
|
|
|
return { range }
|
|
}
|
|
|
|
module.exports = {
|
|
isDependencyMap,
|
|
isPackageJsonWithDependencies,
|
|
getDependencyVersion,
|
|
}
|