diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js index abbcb449a1245d8767e6cd7079ff50b4ce8d88fb..2a80716a56260aa1be05c61cb73d32c7ee93c253 100644 --- a/lib/manager/npm/extract/index.js +++ b/lib/manager/npm/extract/index.js @@ -131,7 +131,8 @@ async function extractPackageFile(content, fileName, config) { if (lernaJson) { lernaDir = path.dirname(fileName); lernaPackages = lernaJson.packages; - lernaClient = lernaJson.npmClient || lockFiles.yarnLock ? 'yarn' : 'npm'; + lernaClient = + lernaJson.npmClient === 'yarn' || lockFiles.yarnLock ? 'yarn' : 'npm'; } const depTypes = { diff --git a/test/manager/npm/extract/__snapshots__/index.spec.js.snap b/test/manager/npm/extract/__snapshots__/index.spec.js.snap index af8d3a841b1356ecaec28f0c0f21ddf2c41ee647..0029c6f67ff3f435203addc017a759ba41be65a1 100644 --- a/test/manager/npm/extract/__snapshots__/index.spec.js.snap +++ b/test/manager/npm/extract/__snapshots__/index.spec.js.snap @@ -337,6 +337,200 @@ Object { } `; +exports[`manager/npm/extract .extractPackageFile() finds "npmClient":"npm" in lerna.json 1`] = ` +Object { + "deps": Array [ + Object { + "currentValue": "6.5.0", + "datasource": "npm", + "depName": "autoprefixer", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "~1.6.0", + "datasource": "npm", + "depName": "bower", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "13.1.0", + "datasource": "npm", + "depName": "browserify", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "0.9.2", + "datasource": "npm", + "depName": "browserify-css", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "=0.22.0", + "datasource": "npm", + "depName": "cheerio", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "1.21.0", + "datasource": "npm", + "depName": "config", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "depName": "enabled", + "depType": "devDependencies", + "prettyDepType": "devDependency", + "skipReason": "invalid-value", + }, + Object { + "currentValue": "^1.5.8", + "datasource": "npm", + "depName": "angular", + "depType": "devDependencies", + "prettyDepType": "devDependency", + }, + Object { + "currentValue": "1.5.8", + "datasource": "npm", + "depName": "angular-touch", + "depType": "devDependencies", + "prettyDepType": "devDependency", + }, + Object { + "currentValue": "1.5.8", + "datasource": "npm", + "depName": "angular-sanitize", + "depType": "devDependencies", + "prettyDepType": "devDependency", + }, + Object { + "currentValue": "4.0.0-beta.1", + "datasource": "npm", + "depName": "@angular/core", + "depType": "devDependencies", + "prettyDepType": "devDependency", + }, + ], + "ignoreNpmrcFile": undefined, + "lernaClient": "npm", + "lernaDir": ".", + "lernaPackages": undefined, + "npmLock": undefined, + "npmrc": undefined, + "packageJsonName": "renovate", + "packageJsonType": "app", + "packageJsonVersion": "1.0.0", + "pnpmShrinkwrap": undefined, + "skipInstalls": true, + "yarnLock": undefined, + "yarnWorkspacesPackages": undefined, + "yarnrc": undefined, +} +`; + +exports[`manager/npm/extract .extractPackageFile() finds "npmClient":"yarn" in lerna.json 1`] = ` +Object { + "deps": Array [ + Object { + "currentValue": "6.5.0", + "datasource": "npm", + "depName": "autoprefixer", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "~1.6.0", + "datasource": "npm", + "depName": "bower", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "13.1.0", + "datasource": "npm", + "depName": "browserify", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "0.9.2", + "datasource": "npm", + "depName": "browserify-css", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "=0.22.0", + "datasource": "npm", + "depName": "cheerio", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "currentValue": "1.21.0", + "datasource": "npm", + "depName": "config", + "depType": "dependencies", + "prettyDepType": "dependency", + }, + Object { + "depName": "enabled", + "depType": "devDependencies", + "prettyDepType": "devDependency", + "skipReason": "invalid-value", + }, + Object { + "currentValue": "^1.5.8", + "datasource": "npm", + "depName": "angular", + "depType": "devDependencies", + "prettyDepType": "devDependency", + }, + Object { + "currentValue": "1.5.8", + "datasource": "npm", + "depName": "angular-touch", + "depType": "devDependencies", + "prettyDepType": "devDependency", + }, + Object { + "currentValue": "1.5.8", + "datasource": "npm", + "depName": "angular-sanitize", + "depType": "devDependencies", + "prettyDepType": "devDependency", + }, + Object { + "currentValue": "4.0.0-beta.1", + "datasource": "npm", + "depName": "@angular/core", + "depType": "devDependencies", + "prettyDepType": "devDependency", + }, + ], + "ignoreNpmrcFile": undefined, + "lernaClient": "yarn", + "lernaDir": ".", + "lernaPackages": undefined, + "npmLock": undefined, + "npmrc": undefined, + "packageJsonName": "renovate", + "packageJsonType": "app", + "packageJsonVersion": "1.0.0", + "pnpmShrinkwrap": undefined, + "skipInstalls": true, + "yarnLock": undefined, + "yarnWorkspacesPackages": undefined, + "yarnrc": undefined, +} +`; + exports[`manager/npm/extract .extractPackageFile() finds a lock file 1`] = ` Object { "deps": Array [ diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js index 8957543bb418fb9801cab48c185d2c08008f68a0..0fa99863b7144088fe44872240fc618fd93ba65a 100644 --- a/test/manager/npm/extract/index.spec.js +++ b/test/manager/npm/extract/index.spec.js @@ -137,6 +137,34 @@ describe('manager/npm/extract', () => { ); expect(res).toMatchSnapshot(); }); + it('finds "npmClient":"npm" in lerna.json', async () => { + platform.getFile = jest.fn(fileName => { + if (fileName === 'lerna.json') { + return '{ "npmClient": "npm" }'; + } + return null; + }); + const res = await npmExtract.extractPackageFile( + input01Content, + 'package.json', + defaultConfig + ); + expect(res).toMatchSnapshot(); + }); + it('finds "npmClient":"yarn" in lerna.json', async () => { + platform.getFile = jest.fn(fileName => { + if (fileName === 'lerna.json') { + return '{ "npmClient": "yarn" }'; + } + return null; + }); + const res = await npmExtract.extractPackageFile( + input01Content, + 'package.json', + defaultConfig + ); + expect(res).toMatchSnapshot(); + }); it('finds complex yarn workspaces', async () => { platform.getFile = jest.fn(fileName => { if (fileName === 'lerna.json') {