From 8f14b6dc27786ea64ddc4fd2e610b3084cfc38df Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Thu, 22 Mar 2018 21:41:23 +0200 Subject: [PATCH] fix: satisfiesPackageJson() --- src/satisfiesPackageJson.ts | 20 +++++++++---------- test/satisfiesPackageJson.ts | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/satisfiesPackageJson.ts b/src/satisfiesPackageJson.ts index 9be5a779b1..15ec8c29a9 100644 --- a/src/satisfiesPackageJson.ts +++ b/src/satisfiesPackageJson.ts @@ -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 diff --git a/test/satisfiesPackageJson.ts b/test/satisfiesPackageJson.ts index 4eacfe13fd..8a26f6ace4 100644 --- a/test/satisfiesPackageJson.ts +++ b/test/satisfiesPackageJson.ts @@ -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() })