Skip to content

Commit 66c5493

Browse files
fix: bundled-source.js - transformed source map is saved to cache. (#1216)
1 parent 97d70ab commit 66c5493

File tree

3 files changed

+102
-4
lines changed

3 files changed

+102
-4
lines changed

lib/build/amodro-trace/read/es.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const transformSync = require('@babel/core').transformSync;
55
* @param {string} fileName
66
* @param {string} fileContents
77
* @param {{} | boolean} inputSourceMap
8-
* @returns {{ code: string, map: string, ast: any }}
8+
* @returns {babel.BabelFileResult}
99
*/
1010
module.exports = function es(fileName, fileContents, inputSourceMap) {
1111
return transformSync(fileContents, {

lib/build/bundled-source.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ exports.BundledSource = class {
1414
this.includedIn = null;
1515
this.includedBy = null;
1616
this._contents = null;
17+
this._transformedSourceMap = undefined;
1718
this.requiresTransform = true;
1819
}
1920

2021
get sourceMap() {
21-
return this.file.sourceMap;
22+
return this._transformedSourceMap || this.file.sourceMap;
2223
}
2324

2425
get path() {
@@ -215,6 +216,7 @@ exports.BundledSource = class {
215216

216217
if (cache) {
217218
this.contents = cache.contents;
219+
this._transformedSourceMap = cache.transformedSourceMap;
218220
deps = cache.deps;
219221
} else {
220222
let contents;
@@ -239,7 +241,7 @@ exports.BundledSource = class {
239241

240242
contents = result.code;
241243
if (result.map) {
242-
this.file.sourceMap = result.map; // save updated source map
244+
this._transformedSourceMap = result.map;
243245
}
244246
} catch (e) {
245247
logger.error('Could not convert to AMD module, skipping ' + modulePath);
@@ -279,7 +281,8 @@ exports.BundledSource = class {
279281
if (useCache && hash) {
280282
Utils.setCache(hash, {
281283
deps: deps,
282-
contents: this.contents
284+
contents: this.contents,
285+
transformedSourceMap: !this._transformedSourceMap ? undefined : this._transformedSourceMap // avoid serializing `null`
283286
});
284287
}
285288
}

spec/lib/build/bundled-source.spec.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -881,5 +881,100 @@ module.exports = require('./bar.js');
881881
expect(Utils.getCache).toHaveBeenCalled();
882882
expect(Utils.setCache).not.toHaveBeenCalled();
883883
});
884+
885+
it('transform saves transformed source map to cache', () => {
886+
let file = {
887+
path: path.resolve(cwd, 'node_modules/foo/bar/lo.js'),
888+
contents: "export {default as t} from './t.js';",
889+
sourceMap: {"version":3,"file":"lo.js","sourceRoot":"","sources":["lo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,CAAC,EAAC,MAAM,QAAQ,CAAA"}
890+
};
891+
892+
Utils.getCache = jasmine.createSpy('getCache').and.returnValue(undefined);
893+
Utils.setCache = jasmine.createSpy('setCache');
894+
895+
let bs = new BundledSource(bundler, file);
896+
bs._getProjectRoot = () => 'src';
897+
bs.includedBy = {
898+
includedBy: {
899+
description: {
900+
name: 'foo',
901+
mainId: 'foo/index',
902+
loaderConfig: {
903+
name: 'foo',
904+
path: '../node_modules/foo',
905+
main: 'index'
906+
},
907+
browserReplacement: () => undefined
908+
}
909+
}
910+
};
911+
bs._getLoaderPlugins = () => [];
912+
bs._getLoaderConfig = () => ({paths: {}});
913+
bs._getUseCache = () => true;
914+
915+
let deps = bs.transform();
916+
let contents = "define('foo/bar/lo',[\"exports\", './t'], function (_exports, _t) { \"use strict\"; _exports.__esModule = true; _exports.t = void 0; _t = _interopRequireDefault(_t); _exports.t = _t.default; function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }});";
917+
let transformedSourceMap = {version:3,file:undefined,names:['_t', '_interopRequireDefault', '_exports', 't', 'default', 'e', '__esModule'],sourceRoot:undefined,sources:['lo.ts'],sourcesContent:[undefined],mappings:";;;;;EAAAA,EAAA,GAAAC,sBAAA,CAAAD,EAAA;EAA2BE,QAAA,CAAAC,CAAA,GAAAH,EAAA,CAAAI,OAAA;EAAA,SAAAH,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAD,OAAA,EAAAC,CAAA;AAAA",ignoreList:[]};
918+
919+
expect(deps).toEqual(['foo/bar/t']);
920+
expect(bs.requiresTransform).toBe(false);
921+
expect(bs.contents.replace(/\r|\n/g, ''))
922+
.toBe(contents);
923+
expect(bs.sourceMap).toEqual(transformedSourceMap)
924+
925+
expect(Utils.getCache).toHaveBeenCalled();
926+
expect(Utils.setCache).toHaveBeenCalled();
927+
expect(Utils.setCache.calls.argsFor(0)[1].deps).toEqual(['./t']);
928+
expect(Utils.setCache.calls.argsFor(0)[1].contents.replace(/\r|\n/g, '')).toBe(contents);
929+
expect(Utils.setCache.calls.argsFor(0)[1].transformedSourceMap).toEqual(transformedSourceMap);
930+
});
931+
932+
it('transform uses cache for transformed source map', () => {
933+
let file = {
934+
path: path.resolve(cwd, 'node_modules/foo/bar/lo.js'),
935+
contents: "export {default as t} from './t.js';",
936+
sourceMap: {"version":3,"file":"lo.js","sourceRoot":"","sources":["lo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,CAAC,EAAC,MAAM,QAAQ,CAAA"}
937+
};
938+
939+
let contents = "define('foo/bar/lo',[\"exports\", './t'], function (_exports, _t) { \"use strict\"; _exports.__esModule = true; _exports.t = void 0; _t = _interopRequireDefault(_t); _exports.t = _t.default; function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }});";
940+
let transformedSourceMap = {version:3,file:undefined,names:['_t', '_interopRequireDefault', '_exports', 't', 'default', 'e', '__esModule'],sourceRoot:undefined,sources:['lo.ts'],sourcesContent:[undefined],mappings:";;;;;EAAAA,EAAA,GAAAC,sBAAA,CAAAD,EAAA;EAA2BE,QAAA,CAAAC,CAAA,GAAAH,EAAA,CAAAI,OAAA;EAAA,SAAAH,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAD,OAAA,EAAAC,CAAA;AAAA",ignoreList:[]};
941+
942+
Utils.getCache = jasmine.createSpy('getCache').and.returnValue({
943+
deps: ['./t'],
944+
contents,
945+
transformedSourceMap
946+
});
947+
Utils.setCache = jasmine.createSpy('setCache');
948+
949+
let bs = new BundledSource(bundler, file);
950+
bs._getProjectRoot = () => 'src';
951+
bs.includedBy = {
952+
includedBy: {
953+
description: {
954+
name: 'foo',
955+
mainId: 'foo/index',
956+
loaderConfig: {
957+
name: 'foo',
958+
path: '../node_modules/foo',
959+
main: 'index'
960+
},
961+
browserReplacement: () => undefined
962+
}
963+
}
964+
};
965+
bs._getLoaderPlugins = () => [];
966+
bs._getLoaderConfig = () => ({paths: {}});
967+
bs._getUseCache = () => true;
968+
969+
let deps = bs.transform();
970+
expect(deps).toEqual(['foo/bar/t']);
971+
expect(bs.requiresTransform).toBe(false);
972+
expect(bs.contents.replace(/\r|\n/g, ''))
973+
.toBe(contents);
974+
expect(bs.sourceMap).toEqual(transformedSourceMap);
975+
976+
expect(Utils.getCache).toHaveBeenCalled();
977+
expect(Utils.setCache).not.toHaveBeenCalled();
978+
});
884979
});
885980
});

0 commit comments

Comments
 (0)