UNPKG

danger-plugin-istanbul-coverage

Version:

Danger.js plugin for monitoring istanbul code coverage on changed files.

82 lines (81 loc) 2.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const filesystem_service_1 = require("../filesystem.service"); const lodash_1 = require("lodash"); function isObject(obj) { return obj instanceof Object && obj.constructor === Object; } function isCoverageItem(coverageItem) { if (!isObject(coverageItem)) { return false; } const keys = Object.keys(coverageItem).sort(); if (!lodash_1.isEqual(keys, ["covered", "pct", "skipped", "total"])) { return false; } for (const key of keys) { const numb = coverageItem[key]; if (typeof numb !== "number") { return false; } } return true; } function isCoverageEntry(coverageEntry) { if (!isObject(coverageEntry)) { return false; } const keys = Object.keys(coverageEntry).sort(); if (!lodash_1.isEqual(keys, ["branches", "functions", "lines", "statements"])) { return false; } for (const key of keys) { const entry = coverageEntry[key]; if (!isCoverageItem(entry)) { return false; } } return true; } function isCoverageCollection(collection) { if (!isObject(collection)) { return false; } for (const key of Object.keys(collection)) { const entry = collection[key]; if (!isCoverageEntry(entry)) { return false; } } return true; } /** * Parses a json-summary formatted output from istanbul * @param coveragePath The path of the coverage file * @returns A coverage collection * @throws Throws an error if formatting is invalid. */ function parseJsonSummary(coveragePath) { const filesystem = new filesystem_service_1.default(); if (!filesystem.exists(coveragePath)) { throw Error(`Couldn't find instanbul coverage json file at path '${coveragePath}'.`); } let json = {}; try { json = JSON.parse(filesystem.read(coveragePath)); if (Object.keys(json).length === 0) { // Don't output anything if there is no coverage data. return {}; } } catch (error) { throw Error(`Coverage data had invalid formatting at path '${coveragePath}'`); } if (isCoverageCollection(json)) { return json; } else { throw Error(`Coverage data had invalid formatting at path '${coveragePath}'`); } } exports.parseJsonSummary = parseJsonSummary;