UNPKG

snyk-mvn-plugin

Version:
65 lines 3.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeMavenPipeline = executeMavenPipeline; const dependency_resolve_1 = require("./dependency-resolve"); const dependency_tree_1 = require("./dependency-tree"); const version_1 = require("./version"); const version_resolver_1 = require("../parse/version-resolver"); const index_1 = require("../index"); /** * Detect if Maven dependency tree output contains metaversions that require resolution * * @param dependencyTreeStdout Raw stdout from mvn dependency:tree * @returns true if metaversions (RELEASE, LATEST) are detected */ function detectMetaversions(dependencyTreeStdout) { // Fast string search with precise colon boundaries to avoid false positives return (dependencyTreeStdout.includes(':RELEASE:') || dependencyTreeStdout.includes(':LATEST:')); } /** * Execute the optimal Maven pipeline: dependency:tree (required) + dependency:resolve (conditional) * * Performance optimization: Only runs dependency:resolve if metaversions are detected, * avoiding ~2x execution time penalty when metaversions are absent (95%+ of cases). */ async function executeMavenPipeline(context, mavenAggregateProject = false, verboseEnabled, args) { // Get Maven version to select appropriate maven-dependency-plugin version // This is used for verbose mode (dependency:tree) and dependency:resolve const { javaVersion, mavenVersion } = await (0, version_1.getMavenVersion)(context); const explicitPluginVersion = (0, version_1.selectPluginVersion)(mavenVersion); (0, index_1.debug)(`Maven version: ${mavenVersion}, explicit plugin version: ${explicitPluginVersion}`); const treeResult = await (0, dependency_tree_1.executeMavenDependencyTree)(context, mavenAggregateProject, verboseEnabled, args, explicitPluginVersion); const hasMetaversions = detectMetaversions(treeResult.dependencyTreeResult); (0, index_1.debug)(`Metaversions detected: ${hasMetaversions}`); // Conditionally run dependency:resolve only if metaversions are present let versionResolver; if (hasMetaversions) { try { (0, index_1.debug)('Running dependency:resolve for metaversion resolution'); const resolveResult = await (0, dependency_resolve_1.executeMavenDependencyResolve)(context, mavenAggregateProject, args, explicitPluginVersion); (0, index_1.debug)(`Resolve result: ${resolveResult}`); // Parse immediately and fail fast if there's an issue versionResolver = (0, version_resolver_1.createVersionResolver)(resolveResult); } catch (err) { (0, index_1.debug)(`Version resolution failed: ${err}`); // Graceful degradation using no-op version resolver versionResolver = version_resolver_1.NO_OP_VERSION_RESOLVER; } } else { (0, index_1.debug)('No metaversions detected - using no-op resolver for optimal performance'); versionResolver = version_resolver_1.NO_OP_VERSION_RESOLVER; } return { versionResolver, dependencyTreeResult: treeResult.dependencyTreeResult, javaVersion, mavenVersion, mavenPluginVersion: treeResult.mavenPluginVersion, command: treeResult.command, args: treeResult.args, }; } //# sourceMappingURL=executor.js.map