mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-19 14:20:36 -04:00
fix: satisfiesPackageJson()
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user