diff --git a/lib/manager/npm/extract/locked-versions.ts b/lib/manager/npm/extract/locked-versions.ts index 99c4c9edb06bed3f0b584cf3a5501f62988665d7..622bd103d19a5eacc329d6b73c978f7c6d263315 100644 --- a/lib/manager/npm/extract/locked-versions.ts +++ b/lib/manager/npm/extract/locked-versions.ts @@ -7,7 +7,7 @@ import { getYarnLock } from './yarn'; export async function getLockedVersions( packageFiles: PackageFile[] ): Promise<void> { - const lockFileCache: Record<string, Record<string, string>> = {}; + const lockFileCache: Record<string, YarnLockCache> = {}; logger.debug('Finding locked versions'); for (const packageFile of packageFiles) { const { yarnLock, npmLock, pnpmShrinkwrap } = packageFile; @@ -15,34 +15,42 @@ export async function getLockedVersions( logger.trace('Found yarnLock'); if (!lockFileCache[yarnLock]) { logger.trace('Retrieving/parsing ' + yarnLock); - const { lockedVersions, cacheVersion, isYarn1 } = await getYarnLock( - yarnLock - ); - lockFileCache[yarnLock] = lockedVersions; - if (!isYarn1) { - if (cacheVersion >= 6) { - // https://github.com/yarnpkg/berry/commit/f753790380cbda5b55d028ea84b199445129f9ba - packageFile.compatibility.yarn = '>= 2.2.0'; - } else { - packageFile.compatibility.yarn = '>= 2.0.0'; - } + lockFileCache[yarnLock] = await getYarnLock(yarnLock); + } + const { cacheVersion, isYarn1 } = lockFileCache[yarnLock]; + if (!isYarn1) { + if (cacheVersion >= 6) { + // https://github.com/yarnpkg/berry/commit/f753790380cbda5b55d028ea84b199445129f9ba + packageFile.compatibility.yarn = '>= 2.2.0'; + } else { + packageFile.compatibility.yarn = '>= 2.0.0'; } } for (const dep of packageFile.deps) { dep.lockedVersion = - lockFileCache[yarnLock][`${dep.depName}@${dep.currentValue}`]; + lockFileCache[yarnLock].lockedVersions[ + `${dep.depName}@${dep.currentValue}` + ]; } } else if (npmLock) { logger.debug('Found ' + npmLock + ' for ' + packageFile.packageFile); if (!lockFileCache[npmLock]) { logger.trace('Retrieving/parsing ' + npmLock); - lockFileCache[npmLock] = await getNpmLock(npmLock); + lockFileCache[npmLock] = { lockedVersions: await getNpmLock(npmLock) }; } for (const dep of packageFile.deps) { - dep.lockedVersion = valid(lockFileCache[npmLock][dep.depName]); + dep.lockedVersion = valid( + lockFileCache[npmLock].lockedVersions[dep.depName] + ); } } else if (pnpmShrinkwrap) { logger.debug('TODO: implement pnpm-lock.yaml parsing of lockVersion'); } } } + +interface YarnLockCache { + lockedVersions: Record<string, string>; + cacheVersion?: number; + isYarn1?: boolean; +}