@atomist/sdm
Version:
Atomist Software Delivery Machine SDK
158 lines (156 loc) • 6.23 kB
JavaScript
"use strict";
/*
* Copyright © 2020 Atomist, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractVersionedArtifact = exports.findDeclaredManagedPlugins = exports.findDeclaredPlugins = exports.findDeclaredDependencies = void 0;
const astUtils_1 = require("@atomist/automation-client/lib/tree/ast/astUtils");
const XmldocFileParser_1 = require("../../xml/XmldocFileParser");
/**
* Return dependencies under dependencies section
*/
async function findDeclaredDependencies(p, glob = "pom.xml") {
return findDeclaredDependenciesWith(p, "//project/dependencies/dependency", glob, {});
}
exports.findDeclaredDependencies = findDeclaredDependencies;
/**
* Return plugins under plugins section
*/
async function findDeclaredPlugins(p, glob = "pom.xml") {
return findDeclaredPluginsWith(p, "//project/build/plugins/plugin", glob, {});
}
exports.findDeclaredPlugins = findDeclaredPlugins;
/**
* Return plugins under plugin management section
*/
async function findDeclaredManagedPlugins(p, glob = "pom.xml") {
return findDeclaredPluginsWith(p, "//project/build/pluginManagement/plugins/plugin", glob, {});
}
exports.findDeclaredManagedPlugins = findDeclaredManagedPlugins;
/**
* Find declared dependencies using the given path expression.
* Control over the path expression allows us to look under dependencyManagement,
* or directly in dependencies section under project
* @param {Project} p
* @param {string} pathExpression
* @param {string} glob
* @param {FunctionRegistry} functionRegistry
* @return {Promise<Dependencies>}
*/
async function findDeclaredDependenciesWith(p, pathExpression, glob = "pom.xml", functionRegistry) {
const dependencies = await astUtils_1.gather(p, {
parseWith: new XmldocFileParser_1.XmldocFileParser(),
globPatterns: glob,
pathExpression,
mapper: m => {
return extractVersionedArtifact(m);
},
functionRegistry,
});
return { dependencies };
}
/**
* Find declared plugins using the given path expression.
* Control over the path expression allows us to look under pluginManagement,
* or directly in plugin section under project/build
* @param {Project} p
* @param {string} pathExpression
* @param {string} glob
* @param {FunctionRegistry} functionRegistry
* @return {Promise<Dependencies>}
*/
async function findDeclaredPluginsWith(p, pathExpression, glob = "pom.xml", functionRegistry) {
const plugins = await astUtils_1.gather(p, {
parseWith: new XmldocFileParser_1.XmldocFileParser(),
globPatterns: glob,
pathExpression,
mapper: m => {
return extractPlugin(m);
},
functionRegistry,
});
return plugins;
}
/*
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
*/
function extractVersionedArtifact(n) {
const groupId = n.$children.find(c => c.$value.startsWith("<groupId>"));
const artifactId = n.$children.find(c => c.$value.startsWith("<artifactId>"));
const version = n.$children.find(c => c.$value.startsWith("<version>"));
const scope = n.$children.find(c => c.$value.startsWith("<scope>"));
if (!(!!groupId && !!artifactId)) {
throw new Error(`groupId and artifactId are required in [${n.$value}]`);
}
return {
group: groupId.innerValue,
artifact: artifactId.innerValue,
name: artifactId.innerValue,
version: !!version ? version.innerValue : undefined,
scope: !!scope ? scope.innerValue : undefined,
};
}
exports.extractVersionedArtifact = extractVersionedArtifact;
function extractPlugin(n) {
const groupId = n.$children.find(c => c.$value.startsWith("<groupId>"));
const artifactId = n.$children.find(c => c.$value.startsWith("<artifactId>"));
const version = n.$children.find(c => c.$value.startsWith("<version>"));
const configuration = n.$children.find(c => c.$value.startsWith("<configuration>"));
const inherited = n.$children.find(c => c.$value.startsWith("<inherited>"));
const extensions = n.$children.find(c => c.$value.startsWith("<extensions>"));
// TODO we have cases, like Zipkin, where group is missing
if (!artifactId) {
throw new Error(`artifactId is required in [${n.$value}]`);
}
return {
group: groupId ? groupId.innerValue : undefined,
artifact: artifactId.innerValue,
version: !!version ? version.innerValue : undefined,
configuration: !!configuration ? parseConfiguration(configuration.$children) : undefined,
inherited: !!inherited ? !!inherited.innerValue : undefined,
extensions: !!extensions ? !!extensions.innerValue : undefined,
};
}
function parseConfigurationNode(n) {
const configurations = {};
const configurationName = n.$name;
if (n.$children.length === 0) {
configurations[configurationName] = n.innerValue;
}
else {
// TODO need to handle this case
// const configurationValue = parseConfigurationNode(n);
// configurations[configurationName] = configurationValue;
}
return configurations;
}
function parseConfiguration(nodes) {
const configurations = {};
for (const n of nodes) {
const configurationName = n.$name;
if (n.$children.length === 0) {
configurations[configurationName] = n.innerValue;
}
else {
const configurationValue = parseConfigurationNode(n);
configurations[configurationName] = configurationValue;
}
}
return configurations;
}
//# sourceMappingURL=fromPom.js.map