diff --git a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap index 71a9dcc7ceee9bd1e4c7a3f949dbd15868a80214..7fcb294cb7807a28ffef6229934bac8fc86f4de2 100644 --- a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap +++ b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap @@ -1073,6 +1073,29 @@ Object { } `; +exports[`manager/npm/extract .extractPackageFile() finds simple yarn workspaces with lerna.json and useWorkspaces: true 1`] = ` +Object { + "constraints": Object {}, + "deps": Array [], + "ignoreNpmrcFile": undefined, + "lernaClient": undefined, + "lernaDir": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "npmrc": undefined, + "packageFileVersion": "0.0.8", + "packageJsonName": "@a/b", + "packageJsonType": "app", + "pnpmShrinkwrap": undefined, + "skipInstalls": true, + "yarnLock": undefined, + "yarnWorkspacesPackages": Array [ + "packages/*", + ], + "yarnrc": undefined, +} +`; + exports[`manager/npm/extract .extractPackageFile() returns an array of dependencies 1`] = ` Object { "constraints": Object {}, diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts index 46e6e20ab191fd9bb79349e06f9f86ba76d4cc0c..0bb64e0f1ba03c5341d9db3cc2ee626d06b616a3 100644 --- a/lib/manager/npm/extract/index.spec.ts +++ b/lib/manager/npm/extract/index.spec.ts @@ -183,6 +183,20 @@ describe('manager/npm/extract', () => { ); expect(res).toMatchSnapshot(); }); + it('finds simple yarn workspaces with lerna.json and useWorkspaces: true', async () => { + fs.readLocalFile = jest.fn((fileName) => { + if (fileName === 'lerna.json') { + return '{"useWorkspaces": true}'; + } + return null; + }); + const res = await npmExtract.extractPackageFile( + workspacesSimpleContent, + 'package.json', + defaultConfig + ); + expect(res).toMatchSnapshot(); + }); it('finds complex yarn workspaces', async () => { fs.readLocalFile = jest.fn((fileName) => { if (fileName === 'lerna.json') { diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index 1ef0ac0b6e233bcd8e2be4cee757049be0a6e997..578051f2b98d3002ef1de693cfc9a4bd65dd420a 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -127,14 +127,18 @@ export async function extractPackageFile( let lernaPackages: string[]; let lernaClient: 'yarn' | 'npm'; let hasFileRefs = false; - let lernaJson: { packages: string[]; npmClient: string }; + let lernaJson: { + packages: string[]; + npmClient: string; + useWorkspaces?: boolean; + }; try { const lernaJsonFileName = getSiblingFileName(fileName, 'lerna.json'); lernaJson = JSON.parse(await readLocalFile(lernaJsonFileName, 'utf8')); } catch (err) /* istanbul ignore next */ { logger.warn({ err }, 'Could not parse lerna.json'); } - if (lernaJson) { + if (lernaJson && !lernaJson.useWorkspaces) { lernaDir = dirname(fileName); lernaPackages = lernaJson.packages; lernaClient =