UNPKG

@atomist/sdm

Version:

Atomist Software Delivery Machine SDK

158 lines (156 loc) 6.23 kB
"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