renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
130 lines (129 loc) • 4.93 kB
JavaScript
import { regEx } from "../../../util/regex.js";
import api from "../../versioning/gradle/index.js";
import upath from "upath";
//#region lib/modules/manager/gradle/utils.ts
const artifactRegex = regEx("^[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*?)*$");
const versionLikeRegex = regEx("^(?<version>[-_.\\[\\](),a-zA-Z0-9+! ]+)");
function versionLikeSubstring(input) {
if (!input) return null;
const version = versionLikeRegex.exec(input)?.groups?.version?.trim();
if (!version || !regEx(/\d/).test(version)) return null;
if (!api.isValid(version)) return null;
return version;
}
function isDependencyString(input) {
const [depNotation, ...extra] = input.split("@");
if (extra.length > 1) return false;
const parts = depNotation.split(":");
if (parts.length !== 3 && parts.length !== 4) return false;
const [groupId, artifactId, version, classifier] = parts;
return !!(groupId && artifactId && version && artifactRegex.test(groupId) && artifactRegex.test(artifactId) && (!classifier || artifactRegex.test(classifier)) && version === versionLikeSubstring(version));
}
function parseDependencyString(input) {
if (!isDependencyString(input)) return null;
const [depNotation, dataType] = input.split("@");
const [groupId, artifactId, currentValue] = depNotation.split(":");
return {
depName: `${groupId}:${artifactId}`,
currentValue,
...dataType && { dataType }
};
}
const gradleVersionsFileRegex = regEx("^versions\\.gradle(?:\\.kts)?$", "i");
const gradleBuildFileRegex = regEx("^build\\.gradle(?:\\.kts)?$", "i");
const gradleSettingsFileRegex = regEx("^settings\\.gradle(?:\\.kts)?$", "i");
function isGradleScriptFile(path) {
const filename = upath.basename(path).toLowerCase();
return filename.endsWith(".gradle.kts") || filename.endsWith(".gradle");
}
function isGradleVersionsFile(path) {
const filename = upath.basename(path);
return gradleVersionsFileRegex.test(filename);
}
function isGradleBuildFile(path) {
const filename = upath.basename(path);
return gradleBuildFileRegex.test(filename);
}
function isGradleSettingsFile(path) {
const filename = upath.basename(path);
return gradleSettingsFileRegex.test(filename);
}
function isGradleDefaultCatalogFile(path) {
return path.endsWith("/gradle/libs.versions.toml");
}
function isPropsFile(path) {
return upath.basename(path).toLowerCase() === "gradle.properties";
}
function isKotlinSourceFile(path) {
return upath.basename(path).toLowerCase().endsWith(".kt");
}
function isTOMLFile(path) {
return upath.basename(path).toLowerCase().endsWith(".toml");
}
function toAbsolutePath(packageFile) {
return upath.join(packageFile.replace(regEx(/^[/\\]*/), "/"));
}
function getFileRank(filename) {
if (isPropsFile(filename)) return 0;
if (isGradleSettingsFile(filename)) return 1;
if (isGradleDefaultCatalogFile(filename)) return 2;
if (isGradleVersionsFile(filename)) return 3;
if (isGradleBuildFile(filename)) return 5;
return 4;
}
function reorderFiles(packageFiles) {
return packageFiles.map((path) => {
const absPath = toAbsolutePath(path);
const currentDir = upath.dirname(absPath);
return {
path,
absPath,
dir: isGradleDefaultCatalogFile(absPath) ? upath.dirname(currentDir) : currentDir,
rank: getFileRank(absPath)
};
}).sort((a, b) => {
if (a.dir !== b.dir) {
if (a.dir.startsWith(`${b.dir}/`)) return 1;
if (b.dir.startsWith(`${a.dir}/`)) return -1;
return a.dir.localeCompare(b.dir);
}
return a.rank - b.rank || a.absPath.localeCompare(b.absPath);
}).map((entry) => entry.path);
}
function getVars(registry, dir, vars = registry[dir] || {}) {
const dirAbs = toAbsolutePath(dir);
const parentDir = upath.dirname(dirAbs);
if (parentDir === dirAbs) return vars;
return getVars(registry, parentDir, {
...registry[parentDir] || {},
...vars
});
}
function updateVars(registry, dir, newVars) {
registry[dir] = {
...registry[dir] ?? {},
...newVars
};
}
function updateVarsFromDefaultCatalog(registry, dir, packageFile, newVars) {
if (!isGradleDefaultCatalogFile(toAbsolutePath(packageFile))) return;
const rootDir = upath.dirname(dir);
const oldVars = registry[rootDir] ?? {};
let defaultLibsExtName = "libs";
if (oldVars.defaultLibrariesExtensionName?.packageFile && isGradleSettingsFile(oldVars.defaultLibrariesExtensionName.packageFile)) defaultLibsExtName = oldVars.defaultLibrariesExtensionName.value;
const newVarsRemapped = {};
for (const [oldKey, variableData] of Object.entries(newVars)) {
const key = `${defaultLibsExtName}.versions.${oldKey}`;
newVarsRemapped[key] = {
...variableData,
key
};
}
registry[rootDir] = {
...oldVars,
...newVarsRemapped
};
}
//#endregion
export { getVars, isDependencyString, isGradleBuildFile, isGradleScriptFile, isKotlinSourceFile, isPropsFile, isTOMLFile, parseDependencyString, reorderFiles, toAbsolutePath, updateVars, updateVarsFromDefaultCatalog, versionLikeSubstring };
//# sourceMappingURL=utils.js.map