1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const istanbul_lib_coverage_1 = __importDefault(require("istanbul-lib-coverage"));
|
7 | const istanbulize_1 = require("istanbulize");
|
8 | const node_script_url_1 = require("node-script-url");
|
9 | const url_1 = __importDefault(require("url"));
|
10 | const incident_1 = require("incident");
|
11 | const get_text_1 = require("./get-text");
|
12 | const istanbul_merge_1 = require("./istanbul-merge");
|
13 | const merge_1 = require("./merge");
|
14 | const source_map_1 = require("./source-map");
|
15 | const builder_1 = require("./source-map/builder");
|
16 | const source_store_1 = require("./source-map/source-store");
|
17 | async function processCovsToIstanbul(processCovs, getText = get_text_1.getText) {
|
18 | const merged = merge_1.mergeRichProcessCovs(processCovs);
|
19 | return toIstanbul(merged, getText);
|
20 | }
|
21 | exports.processCovsToIstanbul = processCovsToIstanbul;
|
22 | /**
|
23 | * Convert to an istanbul coverage map (applying source maps).
|
24 | *
|
25 | * @param processCov Process coverage to convert.
|
26 | * @param getText Function used to load text from URLs (used to load source maps).
|
27 | */
|
28 | async function toIstanbul(processCov, getText = get_text_1.getText) {
|
29 | const rawCoverageMap = toRawIstanbul(processCov);
|
30 | const generatedCovMap = Object.create(null);
|
31 | const originalBuilder = new builder_1.CoverageMapBuilder();
|
32 | const sourceStore = new source_store_1.MemorySourceStore();
|
33 | for (const scriptCov of processCov.result) {
|
34 | const rawFileCov = rawCoverageMap[scriptCov.url];
|
35 | let useOriginal = false;
|
36 | if (scriptCov.sourceMapUrl !== undefined && node_script_url_1.parseSys(scriptCov.url).isFileUrl) {
|
37 | let sourceMapUrl;
|
38 | try {
|
39 | sourceMapUrl = new url_1.default.URL(scriptCov.sourceMapUrl, scriptCov.url);
|
40 | }
|
41 | catch (err) {
|
42 | throw new incident_1.Incident(err, "SourceMapUrlResolutionError", { url: scriptCov.url, sourceMapUrl: scriptCov.sourceMapUrl });
|
43 | }
|
44 | let sourceMapString;
|
45 | try {
|
46 | sourceMapString = await getText(sourceMapUrl);
|
47 | }
|
48 | catch (err) {
|
49 | throw new incident_1.Incident(err, "SourceMapReadError", { scriptUrl: scriptCov.url, sourceMapUrl: sourceMapUrl.href });
|
50 | }
|
51 | const rawSourceMap = JSON.parse(sourceMapString);
|
52 | useOriginal = await source_map_1.addFromGeneratedFileCov(originalBuilder, sourceStore, rawFileCov, rawSourceMap, scriptCov.sourceMapUrl);
|
53 | }
|
54 | if (!useOriginal) {
|
55 | sourceStore.set(scriptCov.url, scriptCov.sourceText);
|
56 | generatedCovMap[scriptCov.url] = rawFileCov;
|
57 | }
|
58 | }
|
59 | const coverageMap = istanbul_merge_1.mergeCovMaps([generatedCovMap, originalBuilder.build()]);
|
60 | return {
|
61 | coverageMap: istanbul_lib_coverage_1.default.createCoverageMap(coverageMap),
|
62 | sources: new Map(sourceStore),
|
63 | };
|
64 | }
|
65 | /**
|
66 | * Convert to an istanbul coverage map, without applying source maps.
|
67 | *
|
68 | * @param processCov Process coverage to convert.
|
69 | */
|
70 | function toRawIstanbul(processCov) {
|
71 | const coverageMap = Object.create(null);
|
72 | for (const scriptCov of processCov.result) {
|
73 | try {
|
74 | const generatedFileCov = istanbulize_1.istanbulize({
|
75 | sourceType: scriptCov.sourceType,
|
76 | sourceText: scriptCov.sourceText,
|
77 | scriptCov,
|
78 | });
|
79 | coverageMap[scriptCov.url] = istanbul_lib_coverage_1.default.createFileCoverage(generatedFileCov);
|
80 | }
|
81 | catch (err) {
|
82 | const cause = err;
|
83 | const message = `IstanbulizeFailure for the script ${JSON.stringify(scriptCov.url)}\n${err.message}`;
|
84 | const newErr = Object.assign(new Error(message), { cause, scriptCov });
|
85 | throw newErr;
|
86 | }
|
87 | }
|
88 | return coverageMap;
|
89 | }
|
90 | exports.toRawIstanbul = toRawIstanbul;
|
91 |
|
92 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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RUFBRSwrQkFBVyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztRQUN2RCxPQUFPLEVBQUUsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDO0tBQzlCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxVQUEwQjtJQUN0RCxNQUFNLFdBQVcsR0FBZ0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyRSxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7UUFDekMsSUFBSTtZQUNGLE1BQU0sZ0JBQWdCLEdBQWlDLHlCQUFXLENBQUM7Z0JBQ2pFLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVTtnQkFDaEMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVO2dCQUNoQyxTQUFTO2FBQ1YsQ0FBQyxDQUFDO1lBQ0gsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRywrQkFBVyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0U7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE1BQU0sS0FBSyxHQUFVLEdBQUcsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBVyxxQ0FBcUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdHLE1BQU0sTUFBTSxHQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztZQUM1RSxNQUFNLE1BQU0sQ0FBQztTQUNkO0tBQ0Y7SUFFRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBcEJELHNDQW9CQyIsImZpbGUiOiJ0by1pc3RhbmJ1bC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsaWJDb3ZlcmFnZSBmcm9tIFwiaXN0YW5idWwtbGliLWNvdmVyYWdlXCI7XG5pbXBvcnQgeyBpc3RhbmJ1bGl6ZSB9IGZyb20gXCJpc3RhbmJ1bGl6ZVwiO1xuaW1wb3J0IHsgcGFyc2VTeXMgYXMgcGFyc2VOb2RlU2NyaXB0VXJsIH0gZnJvbSBcIm5vZGUtc2NyaXB0LXVybFwiO1xuaW1wb3J0IHNvdXJjZU1hcCBmcm9tIFwic291cmNlLW1hcFwiO1xuaW1wb3J0IHVybE1vZCBmcm9tIFwidXJsXCI7XG5pbXBvcnQgeyBJbmNpZGVudCB9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHsgR2V0VGV4dCwgZ2V0VGV4dCBhcyBkZWZhdWx0R2V0VGV4dCB9IGZyb20gXCIuL2dldC10ZXh0XCI7XG5pbXBvcnQgeyBtZXJnZUNvdk1hcHMgfSBmcm9tIFwiLi9pc3RhbmJ1bC1tZXJnZVwiO1xuaW1wb3J0IHsgbWVyZ2VSaWNoUHJvY2Vzc0NvdnMgfSBmcm9tIFwiLi9tZXJnZVwiO1xuaW1wb3J0IHsgYWRkRnJvbUdlbmVyYXRlZEZpbGVDb3YgfSBmcm9tIFwiLi9zb3VyY2UtbWFwXCI7XG5pbXBvcnQgeyBDb3ZlcmFnZU1hcEJ1aWxkZXIgfSBmcm9tIFwiLi9zb3VyY2UtbWFwL2J1aWxkZXJcIjtcbmltcG9ydCB7IE1lbW9yeVNvdXJjZVN0b3JlLCBOdWxsYWJsZVNvdXJjZVRleHQgfSBmcm9tIFwiLi9zb3VyY2UtbWFwL3NvdXJjZS1zdG9yZVwiO1xuaW1wb3J0IHsgUmljaFByb2Nlc3NDb3YgfSBmcm9tIFwiLi9zcGF3bi1pbnNwZWN0ZWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSaWNoSXN0YW5idWxDb3ZlcmFnZU1hcCB7XG4gIGNvdmVyYWdlTWFwOiBsaWJDb3ZlcmFnZS5Db3ZlcmFnZU1hcDtcbiAgc291cmNlczogTWFwPHN0cmluZywgTnVsbGFibGVTb3VyY2VUZXh0Pjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NDb3ZzVG9Jc3RhbmJ1bChcbiAgcHJvY2Vzc0NvdnM6IFJlYWRvbmx5QXJyYXk8UmljaFByb2Nlc3NDb3Y+LFxuICBnZXRUZXh0OiBHZXRUZXh0ID0gZGVmYXVsdEdldFRleHQsXG4pOiBQcm9taXNlPFJpY2hJc3RhbmJ1bENvdmVyYWdlTWFwPiB7XG4gIGNvbnN0IG1lcmdlZDogUmljaFByb2Nlc3NDb3YgPSBtZXJnZVJpY2hQcm9jZXNzQ292cyhwcm9jZXNzQ292cyk7XG4gIHJldHVybiB0b0lzdGFuYnVsKG1lcmdlZCwgZ2V0VGV4dCk7XG59XG5cbi8qKlxuICogQ29udmVydCB0byBhbiBpc3RhbmJ1bCBjb3ZlcmFnZSBtYXAgKGFwcGx5aW5nIHNvdXJjZSBtYXBzKS5cbiAqXG4gKiBAcGFyYW0gcHJvY2Vzc0NvdiBQcm9jZXNzIGNvdmVyYWdlIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0gZ2V0VGV4dCBGdW5jdGlvbiB1c2VkIHRvIGxvYWQgdGV4dCBmcm9tIFVSTHMgKHVzZWQgdG8gbG9hZCBzb3VyY2UgbWFwcykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvSXN0YW5idWwoXG4gIHByb2Nlc3NDb3Y6IFJpY2hQcm9jZXNzQ292LFxuICBnZXRUZXh0OiBHZXRUZXh0ID0gZGVmYXVsdEdldFRleHQsXG4pOiBQcm9taXNlPFJpY2hJc3RhbmJ1bENvdmVyYWdlTWFwPiB7XG4gIGNvbnN0IHJhd0NvdmVyYWdlTWFwOiBsaWJDb3ZlcmFnZS5Db3ZlcmFnZU1hcERhdGEgPSB0b1Jhd0lzdGFuYnVsKHByb2Nlc3NDb3YpO1xuXG4gIGNvbnN0IGdlbmVyYXRlZENvdk1hcDogbGliQ292ZXJhZ2UuQ292ZXJhZ2VNYXBEYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3Qgb3JpZ2luYWxCdWlsZGVyOiBDb3ZlcmFnZU1hcEJ1aWxkZXIgPSBuZXcgQ292ZXJhZ2VNYXBCdWlsZGVyKCk7XG4gIGNvbnN0IHNvdXJjZVN0b3JlOiBNZW1vcnlTb3VyY2VTdG9yZSA9IG5ldyBNZW1vcnlTb3VyY2VTdG9yZSgpO1xuXG4gIGZvciAoY29uc3Qgc2NyaXB0Q292IG9mIHByb2Nlc3NDb3YucmVzdWx0KSB7XG4gICAgY29uc3QgcmF3RmlsZUNvdjogbGliQ292ZXJhZ2UuRmlsZUNvdmVyYWdlID0gcmF3Q292ZXJhZ2VNYXBbc2NyaXB0Q292LnVybF07XG4gICAgbGV0IHVzZU9yaWdpbmFsOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKHNjcmlwdENvdi5zb3VyY2VNYXBVcmwgIT09IHVuZGVmaW5lZCAmJiBwYXJzZU5vZGVTY3JpcHRVcmwoc2NyaXB0Q292LnVybCkuaXNGaWxlVXJsKSB7XG4gICAgICBsZXQgc291cmNlTWFwVXJsOiB1cmxNb2QuVVJMO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc291cmNlTWFwVXJsID0gbmV3IHVybE1vZC5VUkwoc2NyaXB0Q292LnNvdXJjZU1hcFVybCwgc2NyaXB0Q292LnVybCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFxuICAgICAgICAgIGVycixcbiAgICAgICAgICBcIlNvdXJjZU1hcFVybFJlc29sdXRpb25FcnJvclwiLFxuICAgICAgICAgIHt1cmw6IHNjcmlwdENvdi51cmwsIHNvdXJjZU1hcFVybDogc2NyaXB0Q292LnNvdXJjZU1hcFVybH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBsZXQgc291cmNlTWFwU3RyaW5nOiBzdHJpbmc7XG4gICAgICB0cnkge1xuICAgICAgICBzb3VyY2VNYXBTdHJpbmcgPSBhd2FpdCBnZXRUZXh0KHNvdXJjZU1hcFVybCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFxuICAgICAgICAgIGVycixcbiAgICAgICAgICBcIlNvdXJjZU1hcFJlYWRFcnJvclwiLFxuICAgICAgICAgIHtzY3JpcHRVcmw6IHNjcmlwdENvdi51cmwsIHNvdXJjZU1hcFVybDogc291cmNlTWFwVXJsLmhyZWZ9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF3U291cmNlTWFwOiBzb3VyY2VNYXAuUmF3U291cmNlTWFwID0gSlNPTi5wYXJzZShzb3VyY2VNYXBTdHJpbmcpO1xuICAgICAgdXNlT3JpZ2luYWwgPSBhd2FpdCBhZGRGcm9tR2VuZXJhdGVkRmlsZUNvdihcbiAgICAgICAgb3JpZ2luYWxCdWlsZGVyLFxuICAgICAgICBzb3VyY2VTdG9yZSxcbiAgICAgICAgcmF3RmlsZUNvdixcbiAgICAgICAgcmF3U291cmNlTWFwLFxuICAgICAgICBzY3JpcHRDb3Yuc291cmNlTWFwVXJsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZU9yaWdpbmFsKSB7XG4gICAgICBzb3VyY2VTdG9yZS5zZXQoc2NyaXB0Q292LnVybCwgc2NyaXB0Q292LnNvdXJjZVRleHQpO1xuICAgICAgZ2VuZXJhdGVkQ292TWFwW3NjcmlwdENvdi51cmxdID0gcmF3RmlsZUNvdjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb3ZlcmFnZU1hcDogbGliQ292ZXJhZ2UuQ292ZXJhZ2VNYXBEYXRhID0gbWVyZ2VDb3ZNYXBzKFtnZW5lcmF0ZWRDb3ZNYXAsIG9yaWdpbmFsQnVpbGRlci5idWlsZCgpXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb3ZlcmFnZU1hcDogbGliQ292ZXJhZ2UuY3JlYXRlQ292ZXJhZ2VNYXAoY292ZXJhZ2VNYXApLFxuICAgIHNvdXJjZXM6IG5ldyBNYXAoc291cmNlU3RvcmUpLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgdG8gYW4gaXN0YW5idWwgY292ZXJhZ2UgbWFwLCB3aXRob3V0IGFwcGx5aW5nIHNvdXJjZSBtYXBzLlxuICpcbiAqIEBwYXJhbSBwcm9jZXNzQ292IFByb2Nlc3MgY292ZXJhZ2UgdG8gY29udmVydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUmF3SXN0YW5idWwocHJvY2Vzc0NvdjogUmljaFByb2Nlc3NDb3YpOiBsaWJDb3ZlcmFnZS5Db3ZlcmFnZU1hcERhdGEge1xuICBjb25zdCBjb3ZlcmFnZU1hcDogbGliQ292ZXJhZ2UuQ292ZXJhZ2VNYXBEYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IHNjcmlwdENvdiBvZiBwcm9jZXNzQ292LnJlc3VsdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZW5lcmF0ZWRGaWxlQ292OiBsaWJDb3ZlcmFnZS5GaWxlQ292ZXJhZ2VEYXRhID0gaXN0YW5idWxpemUoe1xuICAgICAgICBzb3VyY2VUeXBlOiBzY3JpcHRDb3Yuc291cmNlVHlwZSxcbiAgICAgICAgc291cmNlVGV4dDogc2NyaXB0Q292LnNvdXJjZVRleHQsXG4gICAgICAgIHNjcmlwdENvdixcbiAgICAgIH0pO1xuICAgICAgY292ZXJhZ2VNYXBbc2NyaXB0Q292LnVybF0gPSBsaWJDb3ZlcmFnZS5jcmVhdGVGaWxlQ292ZXJhZ2UoZ2VuZXJhdGVkRmlsZUNvdik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBjYXVzZTogRXJyb3IgPSBlcnI7XG4gICAgICBjb25zdCBtZXNzYWdlOiBzdHJpbmcgPSBgSXN0YW5idWxpemVGYWlsdXJlIGZvciB0aGUgc2NyaXB0ICR7SlNPTi5zdHJpbmdpZnkoc2NyaXB0Q292LnVybCl9XFxuJHtlcnIubWVzc2FnZX1gO1xuICAgICAgY29uc3QgbmV3RXJyOiBFcnJvciA9IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKG1lc3NhZ2UpLCB7Y2F1c2UsIHNjcmlwdENvdn0pO1xuICAgICAgdGhyb3cgbmV3RXJyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3ZlcmFnZU1hcDtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
|