UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

114 lines 4.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getYarnLock = getYarnLock; exports.getZeroInstallPaths = getZeroInstallPaths; exports.isZeroInstall = isZeroInstall; exports.getYarnVersionFromLock = getYarnVersionFromLock; const tslib_1 = require("tslib"); const is_1 = tslib_1.__importDefault(require("@sindresorhus/is")); const core_1 = require("@yarnpkg/core"); const parsers_1 = require("@yarnpkg/parsers"); const logger_1 = require("../../../../logger"); const fs_1 = require("../../../../util/fs"); async function getYarnLock(filePath) { // TODO #22198 const yarnLockRaw = (await (0, fs_1.readLocalFile)(filePath, 'utf8')); try { const parsed = (0, parsers_1.parseSyml)(yarnLockRaw); const lockedVersions = {}; let lockfileVersion; for (const [key, val] of Object.entries(parsed)) { if (key === '__metadata') { // yarn 2 lockfileVersion = parseInt(val.cacheKey); logger_1.logger.once.debug(`yarn.lock ${filePath} has __metadata.cacheKey=${lockfileVersion}`); } else { for (const entry of key.split(', ')) { try { const { scope, name, range } = core_1.structUtils.parseDescriptor(entry); const packageName = scope ? `@${scope}/${name}` : name; const { selector } = core_1.structUtils.parseRange(range); logger_1.logger.trace({ entry, version: val.version }); lockedVersions[packageName + '@' + selector] = parsed[key].version; } catch (err) { logger_1.logger.debug({ entry, err }, 'Invalid descriptor or range found in yarn.lock'); } } } } const isYarn1 = !('__metadata' in parsed); if (isYarn1) { logger_1.logger.once.debug(`yarn.lock ${filePath} is has no __metadata so is yarn 1`); } else { logger_1.logger.once.debug(`yarn.lock ${filePath} is has __metadata so is yarn 2+`); } return { isYarn1, lockfileVersion, lockedVersions, }; } catch (err) { logger_1.logger.debug({ filePath, err }, 'Warning: Exception parsing yarn.lock'); return { isYarn1: true, lockedVersions: {} }; } } function getZeroInstallPaths(yarnrcYml) { let conf; try { conf = (0, parsers_1.parseSyml)(yarnrcYml); /* v8 ignore start -- needs test */ } catch (err) { logger_1.logger.warn({ err }, 'Error parsing .yarnrc.yml'); } /* v8 ignore stop -- needs test */ const paths = [ conf?.cacheFolder ?? './.yarn/cache', '.pnp.cjs', '.pnp.js', '.pnp.loader.mjs', ]; if (conf && core_1.miscUtils.tryParseOptionalBoolean(conf.pnpEnableInlining) === false) { paths.push(conf.pnpDataPath ?? './.pnp.data.json'); } return paths; } async function isZeroInstall(yarnrcYmlPath) { const yarnrcYml = await (0, fs_1.readLocalFile)(yarnrcYmlPath, 'utf8'); if (is_1.default.string(yarnrcYml)) { const paths = getZeroInstallPaths(yarnrcYml); for (const p of paths) { if (await (0, fs_1.localPathExists)((0, fs_1.getSiblingFileName)(yarnrcYmlPath, p))) { logger_1.logger.debug(`Detected Yarn zero-install in ${p}`); return true; } } } return false; } function getYarnVersionFromLock(lockfile) { const { lockfileVersion, isYarn1 } = lockfile; if (isYarn1) { return '^1.22.18'; } if (lockfileVersion && lockfileVersion >= 12) { // This will probably be v5 return '>=4.0.0'; } if (lockfileVersion && lockfileVersion >= 10) { return '^4.0.0'; } if (lockfileVersion && lockfileVersion >= 8) { // https://github.com/yarnpkg/berry/commit/9bcd27ae34aee77a567dd104947407532fa179b3 return '^3.0.0'; } else if (lockfileVersion && lockfileVersion >= 6) { // https://github.com/yarnpkg/berry/commit/f753790380cbda5b55d028ea84b199445129f9ba return '^2.2.0'; } return '^2.0.0'; } //# sourceMappingURL=yarn.js.map