blob: bde60ef52715dbb6faefe38d52b86f6a792e7e37 [file] [log] [blame]
"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