From 8742089ad5aef5ce01ce61fb8fc6de6a22e815c9 Mon Sep 17 00:00:00 2001 From: 4gray Date: Sun, 2 Aug 2026 11:55:33 +0200 Subject: [PATCH] fix(nx): validate peer dependency versions --- tools/dependencies/check-nx-version-sync.mjs | 1 + .../check-nx-version-sync.test.mjs | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/tools/dependencies/check-nx-version-sync.mjs b/tools/dependencies/check-nx-version-sync.mjs index 49adfbad6..975918a80 100644 --- a/tools/dependencies/check-nx-version-sync.mjs +++ b/tools/dependencies/check-nx-version-sync.mjs @@ -26,6 +26,7 @@ export function validateNxVersionSync({ packageJson, lockfile }) { 'dependencies', 'devDependencies', 'optionalDependencies', + 'peerDependencies', ]) { const section = packageJson[sectionName] ?? {}; for (const [packageName, specifier] of Object.entries(section)) { diff --git a/tools/dependencies/check-nx-version-sync.test.mjs b/tools/dependencies/check-nx-version-sync.test.mjs index bd1f446f0..01bd213a6 100644 --- a/tools/dependencies/check-nx-version-sync.test.mjs +++ b/tools/dependencies/check-nx-version-sync.test.mjs @@ -85,6 +85,31 @@ test('rejects a direct official Nx package mismatch', async (t) => { ); }); +test('rejects a direct official Nx peer dependency mismatch', async (t) => { + const rootDir = await createFixture(t, { + packageJson: { + devDependencies: { + nx: '22.7.2', + }, + peerDependencies: { + '@nx/angular': '22.7.1', + }, + }, + packages: { + '@nx/angular@22.7.2': {}, + 'nx@22.7.2': {}, + }, + }); + + const result = runValidator(rootDir); + + assert.equal(result.status, 1); + assert.match( + result.stderr, + /peerDependencies\["@nx\/angular"\] must match nx@22\.7\.2, found "22\.7\.1"/ + ); +}); + test('rejects a non-exact root Nx version', async (t) => { const rootDir = await createFixture(t, { packageJson: {