UNPKG

@atomist/sdm-pack-aspect

Version:

an Atomist SDM Extension Pack for visualizing drift across an organization

93 lines 3.8 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) { 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 ScoredAspect_1 = require("../aspect/score/ScoredAspect"); const Score_1 = require("./Score"); function scoreRepos(scorers, repos, weightings, opts) { return __awaiter(this, void 0, void 0, function* () { return Promise.all(repos.map(repo => scoreRepo(scorers, repo, weightings, opts))); }); } exports.scoreRepos = scoreRepos; /** * Score the repo */ function scoreOrg(scorers, od, weightings) { return __awaiter(this, void 0, void 0, function* () { const scores = {}; for (const scorer of scorers) { scores[scorer.name] = Object.assign(Object.assign({}, scorer), yield scorer.score(od)); } return Score_1.weightedCompositeScore({ scores }, weightings); }); } exports.scoreOrg = scoreOrg; function scoreRepo(scorers, repo, weightings, opts) { return __awaiter(this, void 0, void 0, function* () { const scores = yield ScoredAspect_1.fingerprintScoresFor(scorers, repo); // Remove scores that don't match our desired category for (const key of Object.keys(scores)) { const score = scores[key]; if (opts.category && score.category !== opts.category && opts.category !== Score_1.AlwaysIncludeCategory) { delete scores[key]; } } return Object.assign(Object.assign({}, repo), { weightedScore: Score_1.weightedCompositeScore({ scores }, weightings) }); }); } exports.scoreRepo = scoreRepo; /** * Score the given object in the given context * @param scoreFunctions scoring functions. Undefined returns will be ignored * @param {T} toScore what to score * @param {CONTEXT} context * @return {Promise<Scores>} */ function scoresFor(scoreFunctions, toScore, context) { return __awaiter(this, void 0, void 0, function* () { const scores = {}; const runFunctions = scoreFunctions.map(scorer => scorer(toScore, context).then(score => { if (score) { scores[score.name] = score; } })); yield Promise.all(runFunctions); return scores; }); } /** * Adjust a score within FiveStar range. * If merits is negative, reduce * @param {number} merits * @param {FiveStar} startAt * @return {FiveStar} */ function adjustBy(merits, startAt = 5) { const score = startAt + merits; return Math.min(Math.max(score, 1), 5); } exports.adjustBy = adjustBy; //# sourceMappingURL=scoring.js.map