UNPKG

@atomist/org-visualizer

Version:

Organization Visualizer using Atomist project scanning

134 lines (133 loc) 5.47 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 sdm_1 = require("@atomist/sdm"); const sdm_pack_fingerprints_1 = require("@atomist/sdm-pack-fingerprints"); const slack_messages_1 = require("@atomist/slack-messages"); const _ = require("lodash"); const semver = require("semver"); const SdmPackages = [ "@atomist/automation-client", "@atomist/sdm", "@atomist/sdm-core", ]; function createSdmDepFingerprint(packages) { return { type: SdmDepsName, name: SdmDepsName, abbreviation: "sdmdeps", version: "0.0.1", data: packages, sha: sdm_pack_fingerprints_1.sha256(JSON.stringify(packages)), }; } exports.createSdmDepFingerprint = createSdmDepFingerprint; exports.createSdmDepsFingerprints = (p) => __awaiter(this, void 0, void 0, function* () { const file = yield p.getFile("package.json"); if (!!file) { const pj = JSON.parse(yield file.getContent()); // Don't calculate that fingerprint one of the SDM packages itself as those // iterate at different speeds const name = pj.name; if (SdmPackages.includes(name)) { return undefined; } const sdmPackages = []; const dependencies = pj.dependencies || {}; SdmPackages.filter(pk => !!dependencies[pk]).forEach(pk => sdmPackages.push({ name: pk, version: dependencies[pk], })); const devDependencies = pj.devDependencies || {}; SdmPackages.filter(pk => !!devDependencies[pk]).forEach(pk => sdmPackages.push({ name: pk, version: devDependencies[pk], })); // If we don't have all dependencies, don't calculate the fingerprint if (SdmPackages.some(pk => !sdmPackages.some(fpk => fpk.name === pk))) { return undefined; } return createSdmDepFingerprint(sdmPackages); } else { return undefined; } }); exports.applySdmDepsFingerprint = (p, fp) => __awaiter(this, void 0, void 0, function* () { const file = yield p.getFile("package.json"); if (!!file) { const pj = JSON.parse(yield file.getContent()); const sdmPackages = fp.data; sdmPackages.forEach(pk => { // Set version throughout if (!!_.get(pj.dependencies, pk.name)) { pj.dependencies[pk.name] = pk.version; } if (!!_.get(pj.devDependencies, pk.name)) { pj.devDependencies[pk.name] = pk.version; } // Fix up peerDependency entries if (!!_.get(pj.peerDependencies, pk.name)) { const version = pk.version.replace(/\^/g, ""); const peerVersion = `>=${semver.major(version)}.${semver.minor(version)}.0`; pj.peerDependencies[pk.name] = peerVersion; } }); yield file.setContent(JSON.stringify(pj, undefined, 2)); const log = new sdm_1.LoggingProgressLog("npm install"); const result = yield sdm_1.spawnLog("npm", ["install"], { cwd: p.baseDir, log, logCommand: true, }); return result.code === 0; } else { return false; } }); exports.diffNpmDepsFingerprints = (diff, target) => { return { title: "New SDM Version Target", description: `Target versions for SDM packages are: ${target.data.map(p => slack_messages_1.codeLine(`${p.name}@${p.version}`)).join("\n")} Project ${slack_messages_1.bold(`${diff.owner}/${diff.repo}/${diff.branch}`)} is currently configured to use versions: ${diff.to.data.map(p => slack_messages_1.codeLine(`${p.name}@${p.version}`)).join("\n")}`, }; }; const SdmDepsName = "sdm-deps"; exports.SdmDeps = { name: SdmDepsName, displayName: "SDM packages", extract: exports.createSdmDepsFingerprints, apply: exports.applySdmDepsFingerprint, summary: exports.diffNpmDepsFingerprints, toDisplayableFingerprint: fp => fp.data.map(d => `${d.name.split("/")[1]}@${d.version}`).join(", "), toDisplayableFingerprintName: () => "SDM packages", workflows: [ sdm_pack_fingerprints_1.DefaultTargetDiffHandler, ], }; //# sourceMappingURL=sdmNpmDeps.js.map