From 377de3645fc5074a221d2824d5492e6b440dda23 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 13 Apr 2026 00:53:54 +0200 Subject: [PATCH] repo-tools: fix peer-deps check to skip unreferenced dependencies The peer-deps verification was requiring all tracked peer dependencies (including react-router-dom) for every package that references any of them. Now it only requires a peer dependency if the package actually references it or if it belongs to a group containing a referenced dep. Signed-off-by: Patrik Oldsberg Made-with: Cursor --- .changeset/fix-peer-deps-check-optional-deps.md | 5 +++++ .../src/commands/peer-deps/peer-deps.ts | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 .changeset/fix-peer-deps-check-optional-deps.md diff --git a/.changeset/fix-peer-deps-check-optional-deps.md b/.changeset/fix-peer-deps-check-optional-deps.md new file mode 100644 index 0000000000..42f4211bd7 --- /dev/null +++ b/.changeset/fix-peer-deps-check-optional-deps.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Fixed the `peer-deps` command to only require peer dependencies that are actually referenced by each package, rather than requiring all tracked peer dependencies for every package with any React dependency. diff --git a/packages/repo-tools/src/commands/peer-deps/peer-deps.ts b/packages/repo-tools/src/commands/peer-deps/peer-deps.ts index 7fc022a8eb..021e1d3835 100644 --- a/packages/repo-tools/src/commands/peer-deps/peer-deps.ts +++ b/packages/repo-tools/src/commands/peer-deps/peer-deps.ts @@ -143,7 +143,22 @@ export default async ({ fix }: { fix: boolean }) => { for (const pkg of packagesWithRelevantDependencies) { const packageJson = pkg.packageJson as ExtendedPackageJSON; const expectedPeerDeps = getExpectedPeerDependencies(packageJson); + const allDeps = { + ...packageJson.dependencies, + ...packageJson.devDependencies, + ...packageJson.peerDependencies, + }; for (const dep of Object.keys(peerDependencies)) { + const isReferencedInPackage = !!allDeps[dep]; + const isInGroupWithReferencedDep = groupsOfPeerDependencies.some( + group => + group.includes(dep) && group.some(groupDep => !!allDeps[groupDep]), + ); + + if (!isReferencedInPackage && !isInGroupWithReferencedDep) { + continue; + } + // Validate that the peer dependencies are present. if (isPeerDependency(dep, packageJson)) { if (isOptional(dep) && !isMarkedAsOptional(dep, packageJson)) {