-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgradle.js
More file actions
97 lines (87 loc) · 3.54 KB
/
gradle.js
File metadata and controls
97 lines (87 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import g2js from 'gradle-to-js/lib/parser.js';
import { getDefaultSpringBootVersions, Package, resolveFilePaths } from './shared.js';
export const getJSFromFile = async (filename) => {
try {
const parsedGradleFiles = [];
const files = resolveFilePaths(filename);
for (const file of files) {
parsedGradleFiles.push(await g2js.parseFile(file));
}
let dependencies = [];
let subprojects = [];
let plugins = [];
let buildscript = [];
let x = [];
let allprojects = [];
for (const f of parsedGradleFiles) {
dependencies = dependencies.concat(f.dependencies ?? []);
subprojects = subprojects.concat(f.subprojects ?? []);
plugins = plugins.concat(f.plugins ?? []);
buildscript = buildscript.concat(f.buildscript ?? []);
x = x.concat(f.x ?? []);
allprojects = allprojects.concat(f.allprojects ?? []);
}
return {
dependencies: dependencies,
subprojects: subprojects,
plugins: plugins,
buildscript: buildscript,
x: x,
allprojects: allprojects,
};
} catch {
return [];
}
};
export const getGradleDependenciesWithVersions = async (parsedGradle) => {
let allDependencies = [];
// if it's not an array, a single dependency has been declared and it doesn't apply
if (Array.isArray(parsedGradle.dependencies)) {
allDependencies = allDependencies.concat(parsedGradle.dependencies.filter((dep) => dep.version));
}
if (Array.isArray(parsedGradle?.subprojects?.[0]?.dependencies)) {
allDependencies = allDependencies.concat(parsedGradle.subprojects[0].dependencies.filter((dep) => dep.version));
}
return allDependencies;
};
export const getGradleSpringBootVersion = async (parsedGradle) => {
const springBootPlugin = parsedGradle?.plugins?.filter((plugin) => plugin.id === 'org.springframework.boot');
if (Array.isArray(springBootPlugin) && springBootPlugin.length && springBootPlugin[0].version) {
// Handle build.gradle, which allows 3.2.+ format
return springBootPlugin[0].version.replace('+', 'x');
}
// there are likely more places we could search for this variable, but we'll start here
if (parsedGradle?.buildscript?.[0]?.ext?.springBootVersion) {
return String(parsedGradle?.buildscript?.[0]?.ext?.springBootVersion).replace('+', 'x');
}
if (parsedGradle.buildscript?.[0]?.["ext['springBootVersion']"]) {
return parsedGradle.buildscript[0]["ext['springBootVersion']"];
}
return '';
};
export const retrieveSimilarGradlePackages = async (parsedGradle, springBootVersion) => {
const gradleDependenciesWithVersions = await getGradleDependenciesWithVersions(parsedGradle);
if (springBootVersion) {
const defaultVersions = await getDefaultSpringBootVersions(springBootVersion);
if (defaultVersions.length) {
const declaredPackages = [];
for (const gradleDependency of gradleDependenciesWithVersions) {
for (const bootPackage of defaultVersions) {
if (gradleDependency.group === bootPackage.group && gradleDependency.name === bootPackage.name) {
const existingMatches = declaredPackages.find(
(declaredPackage) => declaredPackage.group === gradleDependency.group && declaredPackage.name === gradleDependency.name,
);
if (!existingMatches) {
declaredPackages.push(
new Package(gradleDependency.group, gradleDependency.name, gradleDependency.version, bootPackage.version),
);
break;
}
}
}
}
return declaredPackages;
}
}
return [];
};