From bb6bc356dcae5753197a093a99466f043b07b8bd Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 22 Sep 2023 13:31:58 +0200
Subject: [PATCH] feat(bun): support multiple lock files (#24594)

---
 lib/modules/manager/bun/readme.md             |  3 +--
 .../repository/extract/supersedes.spec.ts     | 23 +++++++++++++++++--
 lib/workers/repository/extract/supersedes.ts  |  1 +
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/lib/modules/manager/bun/readme.md b/lib/modules/manager/bun/readme.md
index 0fa2f420f7..807c7f8435 100644
--- a/lib/modules/manager/bun/readme.md
+++ b/lib/modules/manager/bun/readme.md
@@ -1,5 +1,4 @@
 Used for updating bun projects.
 Bun is a tool for JavaScript projects and therefore an alternative to managers like npm, pnpm and Yarn.
 
-If a `package.json` is found to be part of `bun` manager results then the same file will be excluded from the `npm` manager results so that it's not duplicated.
-This means that supporting a `bun.lockb` file in addition to other JS lock files is not supported - Bun will take priority.
+If a `package.json` is found to be part of `bun` manager results then the same file will be excluded from the `npm` manager results unless an npm/pnpm/Yarn lock file is also found.
diff --git a/lib/workers/repository/extract/supersedes.spec.ts b/lib/workers/repository/extract/supersedes.spec.ts
index 247b74e52a..a71e4117ea 100644
--- a/lib/workers/repository/extract/supersedes.spec.ts
+++ b/lib/workers/repository/extract/supersedes.spec.ts
@@ -14,13 +14,21 @@ describe('workers/repository/extract/supersedes', () => {
         { manager: 'ansible' },
         {
           manager: 'bun',
-          packageFiles: [{ packageFile: 'package.json', deps: [] }],
+          packageFiles: [
+            { packageFile: 'package.json', deps: [] },
+            { packageFile: 'frontend/package.json', deps: [] },
+          ],
         },
         {
           manager: 'npm',
           packageFiles: [
             { packageFile: 'package.json', deps: [] },
             { packageFile: 'backend/package.json', deps: [] },
+            {
+              packageFile: 'frontend/package.json',
+              deps: [],
+              lockFiles: ['frontend/yarn.lock'],
+            },
           ],
         },
       ];
@@ -34,11 +42,22 @@ describe('workers/repository/extract/supersedes', () => {
               deps: [],
               packageFile: 'package.json',
             },
+            {
+              deps: [],
+              packageFile: 'frontend/package.json',
+            },
           ],
         },
         {
           manager: 'npm',
-          packageFiles: [{ deps: [], packageFile: 'backend/package.json' }],
+          packageFiles: [
+            { deps: [], packageFile: 'backend/package.json' },
+            {
+              deps: [],
+              lockFiles: ['frontend/yarn.lock'],
+              packageFile: 'frontend/package.json',
+            },
+          ],
         },
       ]);
     });
diff --git a/lib/workers/repository/extract/supersedes.ts b/lib/workers/repository/extract/supersedes.ts
index 560d6bb0c5..a0b322f902 100644
--- a/lib/workers/repository/extract/supersedes.ts
+++ b/lib/workers/repository/extract/supersedes.ts
@@ -22,6 +22,7 @@ export function processSupersedesManagers(
           supercededManagerResults.packageFiles =
             supercededManagerResults.packageFiles.filter((packageFile) => {
               if (
+                !packageFile.lockFiles?.length &&
                 supercedingPackageFileNames.includes(packageFile.packageFile)
               ) {
                 return false;
-- 
GitLab