@atomist/sdm-pack-spring
Version:
Atomist software delivery machine extension pack for Spring and Spring Boot applications
162 lines (160 loc) • 6.88 kB
JavaScript
;
/*
* Copyright © 2018 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.
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const automation_client_1 = require("@atomist/automation-client");
const XmldocFileParser_1 = require("../../xml/XmldocFileParser");
/**
* Return dependencies under dependencies section
*/
function findDeclaredDependencies(p, glob = "pom.xml") {
return __awaiter(this, void 0, void 0, function* () {
return findDeclaredDependenciesWith(p, "//project/dependencies/dependency", glob, {});
});
}
exports.findDeclaredDependencies = findDeclaredDependencies;
/**
* Return plugins under plugins section
*/
function findDeclaredPlugins(p, glob = "pom.xml") {
return __awaiter(this, void 0, void 0, function* () {
return findDeclaredPluginsWith(p, "//project/build/plugins/plugin", glob, {});
});
}
exports.findDeclaredPlugins = findDeclaredPlugins;
/**
* Return plugins under plugin management section
*/
function findDeclaredManagedPlugins(p, glob = "pom.xml") {
return __awaiter(this, void 0, void 0, function* () {
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>}
*/
function findDeclaredDependenciesWith(p, pathExpression, glob = "pom.xml", functionRegistry) {
return __awaiter(this, void 0, void 0, function* () {
const dependencies = yield automation_client_1.astUtils.gatherFromMatches(p, new XmldocFileParser_1.XmldocFileParser(), glob, pathExpression, 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>}
*/
function findDeclaredPluginsWith(p, pathExpression, glob = "pom.xml", functionRegistry) {
return __awaiter(this, void 0, void 0, function* () {
const plugins = yield automation_client_1.astUtils.gatherFromMatches(p, new XmldocFileParser_1.XmldocFileParser(), glob, pathExpression, 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>"));
if (!(!!groupId && !!artifactId)) {
throw new Error(`groupId and artifactId are required in [${n.$value}]`);
}
return {
group: groupId.innerValue,
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 {
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