fix: satisfiesPackageJson()

This commit is contained in:
Zoltan Kochan
2018-03-22 21:41:23 +02:00
parent d8f6c13b5f
commit 8f14b6dc27
2 changed files with 46 additions and 11 deletions

View File

@@ -5,22 +5,20 @@ import {
} from './types'
export default (shr: Shrinkwrap, pkg: Package) => {
if (!R.equals({...pkg.devDependencies, ...pkg.dependencies, ...pkg.optionalDependencies}, shr.specifiers)) {
return false
}
for (const depType of ['optionalDependencies', 'dependencies', 'devDependencies']) {
const emptyDep = R.isEmpty(R.keys(pkg[depType]))
if (emptyDep !== R.isEmpty(R.keys(shr[depType]))) return false
if (emptyDep) continue
if (depType === 'optionalDependencies') {
const pkgODeps = pkg.optionalDependencies || {}
const shrODeps = shr.optionalDependencies || {}
for (const depName of Object.keys(pkgODeps)) {
if (!shrODeps[depName] || shr.specifiers[depName] !== pkgODeps[depName]) return false
}
} else {
for (const depName of Object.keys(pkg[depType])) {
if (pkg.optionalDependencies && pkg.optionalDependencies[depName]) continue
if (!shr[depType][depName] || shr.specifiers[depName] !== pkg[depType][depName]) return false
}
const pkgDepNames = depType === 'optionalDependencies'
? Object.keys(pkg.optionalDependencies || {})
: Object.keys(pkg[depType]).filter((depName) => !pkg.optionalDependencies || !pkg.optionalDependencies[depName])
if (pkgDepNames.length !== Object.keys(shr[depType]).length) return false
for (const depName of pkgDepNames) {
if (!shr[depType][depName] || shr.specifiers[depName] !== pkg[depType][depName]) return false
}
}
return true

View File

@@ -36,5 +36,42 @@ test('satisfiesPackageJson()', t => {
t.ok(satisfiesPackageJson(shr, pkg))
}
{
const shr = {
dependencies: {
bar: '2.0.0',
qar: '1.0.0',
},
specifiers: {
bar: '2.0.0',
qar: '^1.0.0'
}
}
const pkg = {
dependencies: {
bar: '2.0.0'
},
}
t.notOk(satisfiesPackageJson(shr, pkg))
}
{
const shr = {
dependencies: {
bar: '2.0.0',
qar: '1.0.0',
},
specifiers: {
bar: '2.0.0',
}
}
const pkg = {
dependencies: {
bar: '2.0.0'
},
}
t.notOk(satisfiesPackageJson(shr, pkg))
}
t.end()
})