From 108838c66ce463c2325e7d61bf42624ff938bf99 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 8 Mar 2016 13:38:24 -0800 Subject: [PATCH 1/4] Copy source location to require statement for sourcemap generation --- .../src/index.js | 11 +++++++-- .../test/fixtures/source-map/exec.js | 24 +++++++++++++++++++ .../test/fixtures/source-map/options.json | 3 +++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js create mode 100644 packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/options.json diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js index 38043cc872..a2345bc881 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js @@ -182,6 +182,10 @@ export default function () { ).expression) ]); + // Copy location from the original import statement for sourcemap + // generation. + varDecl.loc = imports[source].loc; + if (typeof blockHoist === "number" && blockHoist > 0) { varDecl._blockHoist = blockHoist; } @@ -215,7 +219,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); @@ -405,7 +410,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); } } diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js new file mode 100644 index 0000000000..fe86fd0b0f --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js @@ -0,0 +1,24 @@ +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";', +]; + +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 + ); +}); diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/options.json b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/options.json new file mode 100644 index 0000000000..7ccaf471d1 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "transform-es2015-modules-commonjs"] +} From 46ebd90acbf0c7d1881be61b14c5829f9c60c8fe Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 8 Mar 2016 13:47:02 -0800 Subject: [PATCH 2/4] Test and fix export statement sourcemap --- .../src/index.js | 10 +++++++--- .../test/fixtures/source-map/exec.js | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js index a2345bc881..9a5e1744af 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js @@ -184,7 +184,9 @@ export default function () { // Copy location from the original import statement for sourcemap // generation. - varDecl.loc = imports[source].loc; + if (imports[source]) { + varDecl.loc = imports[source].loc; + } if (typeof blockHoist === "number" && blockHoist > 0) { varDecl._blockHoist = blockHoist; @@ -338,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(); } } diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js index fe86fd0b0f..9df7ef1ac9 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js @@ -7,6 +7,13 @@ var tests = [ 'import {bar2, baz} from "foo";', 'import {bar as baz2} from "foo";', 'import {bar as baz3, xyz} from "foo";', + + '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) { From 13dc2423f0832d218d7642f0a0b8e6cd399a1638 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 8 Mar 2016 13:59:34 -0800 Subject: [PATCH 3/4] Fix auxiliary comment test --- .../auxiliary-comment/overview/expected.js | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/auxiliary-comment/overview/expected.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/auxiliary-comment/overview/expected.js index f821389ada..10c5029307 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/auxiliary-comment/overview/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/auxiliary-comment/overview/expected.js @@ -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*/); From ad3d5bea44c6488fca9c6044ee53f6e678c8249f Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 8 Mar 2016 15:28:29 -0800 Subject: [PATCH 4/4] Add more test cases --- .../test/fixtures/source-map/exec.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js index 9df7ef1ac9..76c054a7b2 100644 --- a/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js +++ b/packages/babel-plugin-transform-es2015-modules-commonjs/test/fixtures/source-map/exec.js @@ -7,7 +7,12 @@ var tests = [ '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 };',