| "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 |