blob: 537501e5c0904d0bba67c80e1d78b70b55d9004e [file]
/* THIS FILE GENERATED FROM .ts; see BUILD.bazel */ /* clang-format off */"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const crypto = require("crypto");
const fs = require("fs");
const path = require("path");
const readline = require("readline");
function _getArg(argv, key) {
return argv.find(a => a.startsWith(key)).split('=')[1];
}
function main() {
return __awaiter(this, void 0, void 0, function* () {
const argv = process.argv;
const coverageDir = _getArg(argv, '--coverage_dir=');
const outputFile = _getArg(argv, '--output_file=');
const sourceFileManifest = _getArg(argv, '--source_file_manifest=');
const tmpdir = process.env.TEST_TMPDIR;
if (!sourceFileManifest || !tmpdir || !outputFile) {
throw new Error();
}
const instrumentedSourceFiles = fs.readFileSync(sourceFileManifest).toString('utf8').split('\n');
const c8OutputDir = path.join(tmpdir, crypto.randomBytes(4).toString('hex'));
fs.mkdirSync(c8OutputDir);
const includes = instrumentedSourceFiles
.filter(f => ['.js', '.jsx', '.cjs', '.ts', '.tsx', '.mjs'].includes(path.extname(f)))
.map(f => {
const p = path.parse(f);
let targetExt;
switch (p.ext) {
case '.mjs':
targetExt = '.mjs';
default:
targetExt = '.js';
}
return path.format(Object.assign(Object.assign({}, p), { base: undefined, ext: targetExt }));
});
let c8;
try {
c8 = require('c8');
}
catch (e) {
if (e.code == 'MODULE_NOT_FOUND') {
console.error('ERROR: c8 npm package is required for bazel coverage');
process.exit(1);
}
throw e;
}
yield new c8
.Report({
include: includes,
exclude: includes.length === 0 ? ['**'] : [],
reportsDirectory: c8OutputDir,
tempDirectory: coverageDir,
resolve: '',
all: true,
reporter: ['lcovonly']
})
.run();
const inputFile = path.join(c8OutputDir, 'lcov.info');
const input = readline.createInterface({
input: fs.createReadStream(inputFile),
});
const output = fs.createWriteStream(outputFile);
input.on('line', line => {
const patched = line.replace('SF:../../../', 'SF:');
output.write(patched + '\n');
});
});
}
if (require.main === module) {
main();
}