Merge pull request #3409 from babel/sourcempa

Fix sourcemap generation for ES2015 modules
This commit is contained in:
Amjad Masad 2016-03-08 16:42:36 -08:00
commit bbdc308e92
4 changed files with 67 additions and 15 deletions

View File

@ -182,6 +182,12 @@ export default function () {
).expression)
]);
// Copy location from the original import statement for sourcemap
// generation.
if (imports[source]) {
varDecl.loc = imports[source].loc;
}
if (typeof blockHoist === "number" && blockHoist > 0) {
varDecl._blockHoist = blockHoist;
}
@ -215,7 +221,8 @@ export default function () {
let key = path.node.source.value;
let importsEntry = imports[key] || {
specifiers: [],
maxBlockHoist: 0
maxBlockHoist: 0,
loc: path.node.loc,
};
importsEntry.specifiers.push(...path.node.specifiers);
@ -333,9 +340,11 @@ export default function () {
path.replaceWithMultiple(nodes);
}
} else if (path.isExportAllDeclaration()) {
topNodes.push(buildExportAll({
let exportNode = buildExportAll({
OBJECT: addRequire(path.node.source.value, path.node._blockHoist)
}));
});
exportNode.loc = path.node.loc;
topNodes.push(exportNode);
path.remove();
}
}
@ -405,7 +414,9 @@ export default function () {
}
} else {
// bare import
topNodes.push(buildRequire(t.stringLiteral(source)));
let requireNode = buildRequire(t.stringLiteral(source));
requireNode.loc = imports[source].loc;
topNodes.push(requireNode);
}
}

View File

@ -4,26 +4,28 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
exports.test = undefined;
/*after*/
/*before*/require("foo"); /*after*/
require("foo");
/*before*/require("foo-bar"); /*after*/
require("foo-bar");
/*before*/require("./directory/foo-bar"); /*after*/
require("./directory/foo-bar");
var _foo = require("foo2");
var /*before*/_foo = require("foo2") /*after*/;
/*before*/
var _foo2 = babelHelpers.interopRequireDefault(_foo);
var _foo3 = require("foo3");
/*after*/
var /*before*/_foo3 = require("foo3") /*after*/;
var /*after*/foo2 = babelHelpers.interopRequireWildcard(_foo3);
/*before*/
var _foo4 = require("foo4");
/*before*/var /*after*/foo2 = babelHelpers.interopRequireWildcard(_foo3);
var _foo5 = require("foo5");
var /*before*/_foo4 = require("foo4") /*after*/;
exports. /*after*/test = test;
var /*before*/_foo5 = require("foo5") /*after*/;
/*before*/exports. /*after*/test = test;
var test = /*before*/exports. /*after*/test = 5;
/*before*/(0, _foo4.bar) /*after*/( /*before*/_foo2.default /*after*/, /*before*/_foo5.foo /*after*/);

View File

@ -0,0 +1,36 @@
var tests = [
'import "foo";',
'import foo from "foo";',
'import {default as foo2} from "foo";',
'import * as foo from "foo";',
'import {bar} from "foo";',
'import {bar2, baz} from "foo";',
'import {bar as baz2} from "foo";',
'import {bar as baz3, xyz} from "foo";',
'import bar, * as bar2 from "foo";',
'import bar, {bar2, bar3 as bar4} from "foo";',
'export var a;',
'export default function(){};',
'export default function f(){};',
'export default 42;',
'export {foo};',
'export { foo as default };',
'export * from "foo";',
'export {foo} from "foo";',
'export {default as foo} from "foo";',
];
tests.forEach(function (code) {
var res = transform(code, {
sourceMap: true,
plugins: opts.plugins
});
// Should create mapping
assert.notEqual(
res.map.mappings,
'',
'expected to generate sourcemap for: ' + code
);
});

View File

@ -0,0 +1,3 @@
{
"plugins": ["external-helpers", "transform-es2015-modules-commonjs"]
}