From 18e04ba2b9e92961399de5f015380ae6e3c745d3 Mon Sep 17 00:00:00 2001 From: "Benjamin E. Coe" Date: Wed, 3 Apr 2019 11:47:28 -0700 Subject: [PATCH] fix: make --all work for transpiled code (#1047) * cache source maps globally --- lib/source-maps.js | 23 +++++++++++------------ test/source-maps.js | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 test/source-maps.js diff --git a/lib/source-maps.js b/lib/source-maps.js index c3238544c..c4840fc01 100644 --- a/lib/source-maps.js +++ b/lib/source-maps.js @@ -4,12 +4,12 @@ const libSourceMaps = require('istanbul-lib-source-maps') const fs = require('fs') const path = require('path') -// TODO: write some unit tests for this class. +const sourceMapCache = libSourceMaps.createSourceMapStore() function SourceMaps (opts) { this.cache = opts.cache this.cacheDirectory = opts.cacheDirectory - this.sourceMapCache = libSourceMaps.createSourceMapStore() this.loadedMaps = {} + this._sourceMapCache = sourceMapCache } SourceMaps.prototype.extractAndRegister = function (code, filename, hash) { @@ -19,36 +19,35 @@ SourceMaps.prototype.extractAndRegister = function (code, filename, hash) { var mapPath = path.join(this.cacheDirectory, hash + '.map') fs.writeFileSync(mapPath, sourceMap.toJSON()) } else { - this.sourceMapCache.registerMap(filename, sourceMap.sourcemap) + this._sourceMapCache.registerMap(filename, sourceMap.sourcemap) } } return sourceMap } SourceMaps.prototype.remapCoverage = function (obj) { - var transformed = this.sourceMapCache.transformCoverage( + var transformed = this._sourceMapCache.transformCoverage( libCoverage.createCoverageMap(obj) ) return transformed.map.data } SourceMaps.prototype.reloadCachedSourceMaps = function (report) { - var _this = this - Object.keys(report).forEach(function (absFile) { + Object.keys(report).forEach((absFile) => { var fileReport = report[absFile] if (fileReport && fileReport.contentHash) { var hash = fileReport.contentHash - if (!(hash in _this.loadedMaps)) { + if (!(hash in this.loadedMaps)) { try { - var mapPath = path.join(_this.cacheDirectory, hash + '.map') - _this.loadedMaps[hash] = JSON.parse(fs.readFileSync(mapPath, 'utf8')) + var mapPath = path.join(this.cacheDirectory, hash + '.map') + this.loadedMaps[hash] = JSON.parse(fs.readFileSync(mapPath, 'utf8')) } catch (e) { // set to false to avoid repeatedly trying to load the map - _this.loadedMaps[hash] = false + this.loadedMaps[hash] = false } } - if (_this.loadedMaps[hash]) { - _this.sourceMapCache.registerMap(absFile, _this.loadedMaps[hash]) + if (this.loadedMaps[hash]) { + this._sourceMapCache.registerMap(absFile, this.loadedMaps[hash]) } } }) diff --git a/test/source-maps.js b/test/source-maps.js new file mode 100644 index 000000000..c95334832 --- /dev/null +++ b/test/source-maps.js @@ -0,0 +1,20 @@ +/* global describe, it */ + +require('chai').should() +require('tap').mochaGlobals() + +const { readFileSync } = require('fs') +const SourceMaps = require('../self-coverage/lib/source-maps') + +describe('source-maps', function () { + it('caches source maps globally', function () { + const sm = new SourceMaps({}) + // load a source map into cache. + const sourceFile = require.resolve('./fixtures/source-maps/instrumented/s1.min.js') + sm.extractAndRegister(readFileSync(sourceFile, 'utf8'), sourceFile, 'abc123') + // create a new SourceMaps instance. + const sm2 = new SourceMaps({}) + // the two instances of SourceMaps should share a cache. + sm._sourceMapCache.should.deep.equal(sm2._sourceMapCache) + }) +})