snyk-mvn-plugin
Version:
Snyk CLI Maven plugin
65 lines • 3.37 kB
JavaScript
;
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