renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
49 lines (48 loc) • 1.93 kB
JavaScript
import { newlineRegex, regEx } from "../../../util/regex.js";
import { logger } from "../../../logger/index.js";
import { isVersion } from "../../versioning/ruby/index.js";
//#region lib/modules/manager/bundler/locked-version.ts
const DEP_REGEX = regEx(/\((?<version>.*)\)/);
function stripPlatformSuffix(version, platforms) {
for (const platform of platforms) if (version.endsWith(`-${platform}`)) return version.slice(0, -platform.length - 1);
return version;
}
function extractPlatforms(content) {
const platforms = [];
let inPlatformsSection = false;
for (const line of content.split(newlineRegex)) {
const trimmed = line.trim();
const indent = line.indexOf(trimmed);
if (indent === 0 && trimmed === "PLATFORMS") inPlatformsSection = true;
else if (indent === 0 && trimmed && inPlatformsSection) break;
else if (indent === 2 && inPlatformsSection && trimmed) platforms.push(trimmed);
}
return platforms;
}
function extractLockFileEntries(lockFileContent) {
const gemLock = /* @__PURE__ */ new Map();
try {
const platforms = extractPlatforms(lockFileContent);
let inGemSection = false;
for (const line of lockFileContent.split(newlineRegex)) {
const trimmed = line.trim();
const indent = line.indexOf(trimmed);
if (indent === 0 && trimmed === "GEM") inGemSection = true;
else if (indent === 0 && trimmed && inGemSection) inGemSection = false;
else if (indent === 4 && inGemSection) {
const version = line.match(DEP_REGEX)?.groups?.version;
if (version) {
const name = line.replace(`(${version})`, "").trim();
const cleanedVersion = stripPlatformSuffix(version, platforms);
if (!gemLock.has(name) && isVersion(cleanedVersion)) gemLock.set(name, cleanedVersion);
}
}
}
} catch (err) {
logger.warn({ err }, `Failed to parse Bundler lockfile`);
}
return gemLock;
}
//#endregion
export { extractLockFileEntries };
//# sourceMappingURL=locked-version.js.map