snyk-mvn-plugin
Version:
Snyk CLI Maven plugin
70 lines • 2.48 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MavenGraphBuilder = void 0;
const version_resolver_1 = require("./version-resolver");
class MavenGraphBuilder {
#graph;
#versionResolver;
#projectId;
constructor(rootId, versionResolver) {
this.#graph = {
rootId,
nodes: {
[rootId]: { dependsOn: [], parents: [], reachesProdDep: false },
},
};
this.#versionResolver = versionResolver ?? version_resolver_1.NO_OP_VERSION_RESOLVER;
this.#projectId = this.extractProjectId(rootId);
}
findOrCreateNode(id) {
return this.findNode(id) || this.createNode(id);
}
findNode(id) {
return this.#graph.nodes[id];
}
createNode(id) {
const node = { dependsOn: [], parents: [], reachesProdDep: false };
this.#graph.nodes[id] = node;
return node;
}
markNodeProdReachable(id) {
const node = this.findNode(id);
if (node && !node.reachesProdDep) {
node.reachesProdDep = true;
for (const parentId of node.parents) {
this.markNodeProdReachable(parentId);
}
}
}
connect(parentId, id) {
// Delegate all version resolution complexity to VersionResolver
const resolvedParentId = this.#versionResolver.resolveDependencyId(parentId, this.#projectId);
const resolvedId = this.#versionResolver.resolveDependencyId(id, this.#projectId);
const parentNode = this.findOrCreateNode(resolvedParentId);
const childNode = this.findOrCreateNode(resolvedId);
if (!childNode.parents.includes(resolvedParentId)) {
childNode.parents.push(resolvedParentId);
}
if (!parentNode.dependsOn.includes(resolvedId)) {
parentNode.dependsOn.push(resolvedId);
}
if (!resolvedId.endsWith(':test')) {
this.markNodeProdReachable(resolvedId);
}
}
get graph() {
return this.#graph;
}
/**
* Extract project ID from Maven rootId
*
* Example: "io.snyk.example:metaversion-simple" from
* "io.snyk.example:metaversion-simple:jar:1.0-SNAPSHOT"
*/
extractProjectId(rootId) {
const parts = rootId.split(':');
return `${parts[0]}:${parts[1]}`; // groupId:artifactId
}
}
exports.MavenGraphBuilder = MavenGraphBuilder;
//# sourceMappingURL=maven-graph-builder.js.map