UNPKG

@atomist/sdm-pack-fingerprints

Version:

an Atomist SDM Extension Pack for fingerprinting code

89 lines 4.33 kB
"use strict"; /* * Copyright © 2019 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) { 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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const VirtualProjectFinder_1 = require("./VirtualProjectFinder"); const _ = require("lodash"); const AtomicAspect_1 = require("../../machine/AtomicAspect"); const localProjectUnder_1 = require("./support/localProjectUnder"); /** * Make this aspect work with virtual projects as found by the given * VirtualProjectFinder * @param {Aspect} aspect to make virtual project aware * @param {VirtualProjectFinder} virtualProjectFinder. If not supplied, return the * original aspect. * @return {Aspect} */ function makeVirtualProjectAware(aspect, virtualProjectFinder) { return !!virtualProjectFinder && !aspect.baseOnly ? Object.assign({}, aspect, { // Wrap extract. AtomistAspects don't need wrapping as the aspects they build on // should have been wrapped extract: AtomicAspect_1.isAtomicAspect(aspect) ? undefined : makeExtractorVirtualProjectAware(aspect.extract, virtualProjectFinder), apply: aspect.apply ? makeApplyVirtualProjectAware(aspect.apply, virtualProjectFinder) : undefined }) : aspect; } exports.makeVirtualProjectAware = makeVirtualProjectAware; /** * Turn this fingerprint into a multi fingerprint * @param {ExtractFingerprint} ef extractor * @param virtualProjectFinder virtual project finder * @return {ExtractFingerprint} */ function makeExtractorVirtualProjectAware(ef, virtualProjectFinder) { return (p) => __awaiter(this, void 0, void 0, function* () { const virtualProjects = yield virtualProjectsIn(p, virtualProjectFinder); return _.flatten(yield Promise.all(virtualProjects.map(vp => extractFrom(ef, vp) .then(extracted => extracted .filter(raw => !!raw) .map(raw => (Object.assign({}, raw, { path: vp.id.path }))))))); }); } exports.makeExtractorVirtualProjectAware = makeExtractorVirtualProjectAware; function virtualProjectsIn(p, virtualProjectFinder) { return __awaiter(this, void 0, void 0, function* () { const virtualProjectInfo = yield virtualProjectFinder.findVirtualProjectInfo(p); if (virtualProjectInfo.status === VirtualProjectFinder_1.VirtualProjectStatus.IdentifiedPaths) { return Promise.all(virtualProjectInfo.virtualProjects.map(sp => localProjectUnder_1.localProjectUnder(p, sp.path))); } return [p]; }); } function extractFrom(ef, p) { return __awaiter(this, void 0, void 0, function* () { const extracted = yield ef(p); return extracted ? Array.isArray(extracted) ? extracted : [extracted] : []; }); } function makeApplyVirtualProjectAware(af, virtualProjectFinder) { return (p, fp) => __awaiter(this, void 0, void 0, function* () { const virtualProjects = yield virtualProjectsIn(p, virtualProjectFinder); const results = yield Promise.all(virtualProjects.map(vp => af(vp, fp))); return !results.includes(false); }); } exports.makeApplyVirtualProjectAware = makeApplyVirtualProjectAware; //# sourceMappingURL=makeVirtualProjectAware.js.map