diff --git a/.changeset/nice-geese-press.md b/.changeset/nice-geese-press.md new file mode 100644 index 0000000000..5573d8dd36 --- /dev/null +++ b/.changeset/nice-geese-press.md @@ -0,0 +1,5 @@ +--- +"@pnpm/lockfile-utils": patch +--- + +When checking if the lockfile is up-to-date, an empty dependenciesMeta field in the manifest should be satisfied by a not set field in the lockfile. diff --git a/packages/lockfile-utils/src/satisfiesPackageManifest.ts b/packages/lockfile-utils/src/satisfiesPackageManifest.ts index 679eaca7df..b108dafff6 100644 --- a/packages/lockfile-utils/src/satisfiesPackageManifest.ts +++ b/packages/lockfile-utils/src/satisfiesPackageManifest.ts @@ -11,7 +11,7 @@ export default (lockfile: Lockfile, pkg: ProjectManifest, importerId: string) => if (!equals({ ...pkg.devDependencies, ...pkg.dependencies, ...pkg.optionalDependencies }, importer.specifiers)) { return false } - if (!equals(pkg.dependenciesMeta, importer.dependenciesMeta)) return false + if (!equals(pkg.dependenciesMeta ?? {}, importer.dependenciesMeta ?? {})) return false for (const depField of DEPENDENCIES_FIELDS) { const importerDeps = importer[depField] ?? {} const pkgDeps = pkg[depField] ?? {} diff --git a/packages/lockfile-utils/test/satisfiesPackageManifest.ts b/packages/lockfile-utils/test/satisfiesPackageManifest.ts index 3261cf2953..5812a40492 100644 --- a/packages/lockfile-utils/test/satisfiesPackageManifest.ts +++ b/packages/lockfile-utils/test/satisfiesPackageManifest.ts @@ -236,4 +236,27 @@ test('satisfiesPackageManifest()', () => { foo: '1.0.0', }, }, '.')).toBe(true) + + expect(satisfiesPackageManifest({ + ...DEFAULT_LOCKFILE_FIELDS, + importers: { + '.': { + dependencies: { + foo: '1.0.0', + }, + specifiers: { + foo: '1.0.0', + }, + }, + }, + }, { + ...DEFAULT_PKG_FIELDS, + dependencies: { + foo: '1.0.0', + }, + devDependencies: { + foo: '1.0.0', + }, + dependenciesMeta: {}, + }, '.')).toBe(true) })