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) ).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) { if (typeof blockHoist === "number" && blockHoist > 0) {
varDecl._blockHoist = blockHoist; varDecl._blockHoist = blockHoist;
} }
@ -215,7 +221,8 @@ export default function () {
let key = path.node.source.value; let key = path.node.source.value;
let importsEntry = imports[key] || { let importsEntry = imports[key] || {
specifiers: [], specifiers: [],
maxBlockHoist: 0 maxBlockHoist: 0,
loc: path.node.loc,
}; };
importsEntry.specifiers.push(...path.node.specifiers); importsEntry.specifiers.push(...path.node.specifiers);
@ -333,9 +340,11 @@ export default function () {
path.replaceWithMultiple(nodes); path.replaceWithMultiple(nodes);
} }
} else if (path.isExportAllDeclaration()) { } else if (path.isExportAllDeclaration()) {
topNodes.push(buildExportAll({ let exportNode = buildExportAll({
OBJECT: addRequire(path.node.source.value, path.node._blockHoist) OBJECT: addRequire(path.node.source.value, path.node._blockHoist)
})); });
exportNode.loc = path.node.loc;
topNodes.push(exportNode);
path.remove(); path.remove();
} }
} }
@ -405,7 +414,9 @@ export default function () {
} }
} else { } else {
// bare import // 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 value: true
}); });
exports.test = undefined; 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 /*before*/_foo = require("foo2") /*after*/;
var _foo = require("foo2");
/*before*/
var _foo2 = babelHelpers.interopRequireDefault(_foo); var _foo2 = babelHelpers.interopRequireDefault(_foo);
var _foo3 = require("foo3"); /*after*/
var /*before*/_foo3 = require("foo3") /*after*/;
var /*after*/foo2 = babelHelpers.interopRequireWildcard(_foo3); /*before*/var /*after*/foo2 = babelHelpers.interopRequireWildcard(_foo3);
/*before*/
var _foo4 = require("foo4");
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; var test = /*before*/exports. /*after*/test = 5;
/*before*/(0, _foo4.bar) /*after*/( /*before*/_foo2.default /*after*/, /*before*/_foo5.foo /*after*/); /*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"]
}