UNPKG

snyk-mvn-plugin

Version:
70 lines 2.48 kB
"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