UNPKG

karma-typescript

Version:

Simplifying running unit tests with coverage for Typescript projects.

80 lines 3.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var lodash = require("lodash"); var path = require("path"); var istanbul_1 = require("istanbul"); var Reporter = /** @class */ (function () { function Reporter(config, sharedProcessedFiles, threshold) { this.remap = require("remap-istanbul/lib/remap"); this.writeReport = require("remap-istanbul/lib/writeReport"); var self = this; // tslint:disable-next-line:only-arrow-functions this.create = function (logger) { var coverageMap; self.log = logger.create("reporter.karma-typescript"); this.adapters = []; this.onRunStart = function () { coverageMap = new WeakMap(); }; this.onBrowserComplete = function (browser, result) { if (!result || !result.coverage) { return; } coverageMap.set(browser, result.coverage); }; this.onRunComplete = function (browsers, results) { browsers.forEach(function (browser) { var coverage = coverageMap.get(browser); var unmappedCollector = new istanbul_1.Collector(); if (!coverage) { return; } unmappedCollector.add(coverage); var sourceStore = istanbul_1.Store.create("memory"); config.remapOptions.sources = sourceStore; config.remapOptions.readFile = function (filepath) { return sharedProcessedFiles[filepath]; }; var collector = self.remap(unmappedCollector.getFinalCoverage(), config.remapOptions); if (results && config.hasCoverageThreshold && !threshold.check(browser, collector)) { results.exitCode = 1; } Promise .all(Object.keys(config.reports) .map(function (reportType) { var destination = self.getReportDestination(browser, config.reports, reportType); if (destination) { self.log.debug("Writing coverage to %s", destination); } return self.writeReport(collector, reportType, {}, destination, sourceStore); })) .catch(function (error) { self.log.error(error); }) .then(function () { collector.dispose(); coverageMap = null; }); }); }; }; this.create.$inject = ["logger"]; } Reporter.prototype.getReportDestination = function (browser, reports, reportType) { var reportConfig = reports[reportType]; if (lodash.isPlainObject(reportConfig)) { var subdirectory = reportConfig.subdirectory || browser.name; if (typeof subdirectory === "function") { subdirectory = subdirectory(browser); } return path.join(reportConfig.directory || "coverage", subdirectory, reportConfig.filename || reportType); } if (lodash.isString(reportConfig) && reportConfig.length > 0) { return path.join(reportConfig, browser.name, reportType); } return null; }; return Reporter; }()); exports.Reporter = Reporter; //# sourceMappingURL=reporter.js.map