"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.hasDependency = exports.hasDeclaredDependency = exports.IsMaven = void 0;
const PushTest_1 = require("../../../api/mapping/PushTest");
const findDependencies_1 = require("./inspection/findDependencies");
const fromPom_1 = require("./parse/fromPom");
const VersionedArtifact_1 = require("./VersionedArtifact");
/**
 * Is this a Maven project
 */
exports.IsMaven = PushTest_1.predicatePushTest("Is Maven", p => p.hasFile("pom.xml"));
/**
 * Does the project declare the given dependency?
 * @return {PredicatePushTest}
 */
function hasDeclaredDependency(on) {
    return PushTest_1.predicatePushTest(`hasDeclaredDep-${VersionedArtifact_1.coordinates(on)}`, async (p) => {
        const deps = (await fromPom_1.findDeclaredDependencies(p)).dependencies;
        return VersionedArtifact_1.dependencyFound(on, deps);
    });
}
exports.hasDeclaredDependency = hasDeclaredDependency;
/**
 * Does the project depend on the given artifact, even indirectly?
 * @return {PredicatePushTest}
 */
function hasDependency(on) {
    return PushTest_1.predicatePushTest(`hasDeclaredDep-${VersionedArtifact_1.coordinates(on)}`, async (p) => {
        // Attempt an optimization: Look for it in the fast stuff first
        const directDeps = (await fromPom_1.findDeclaredDependencies(p)).dependencies;
        const direct = VersionedArtifact_1.dependencyFound(on, directDeps);
        if (direct) {
            return true;
        }
        // If we're still going, check transient dependencies
        const deps = await findDependencies_1.findDependenciesFromEffectivePom(p);
        return VersionedArtifact_1.dependencyFound(on, deps);
    });
}
exports.hasDependency = hasDependency;
//# sourceMappingURL=pushTests.js.map