diff --git a/lib/dependencies/HarmonyExportDependencyParserPlugin.js b/lib/dependencies/HarmonyExportDependencyParserPlugin.js index ff72499d205..cddf6d848cb 100644 --- a/lib/dependencies/HarmonyExportDependencyParserPlugin.js +++ b/lib/dependencies/HarmonyExportDependencyParserPlugin.js @@ -34,9 +34,16 @@ module.exports = AbstractPlugin.create({ }, "export declaration": function() {}, "export specifier": function(statement, id, name) { - var immutable = statement.declaration && isImmutableStatement(statement.declaration); - var hoisted = statement.declaration && isHoistedStatement(statement.declaration); - var dep = new HarmonyExportSpecifierDependency(this.state.module, id, name, hoisted ? 0 : (statement.range[1] + 0.5), immutable); + var rename = this.scope.renames["$" + id]; + var dep; + if(rename === "imported var") { + var settings = this.state.harmonySpecifier["$" + id]; + dep = new HarmonyExportImportedSpecifierDependency(this.state.module, settings[0], settings[1], settings[2], name, statement.range[1]); + } else { + var immutable = statement.declaration && isImmutableStatement(statement.declaration); + var hoisted = statement.declaration && isHoistedStatement(statement.declaration); + dep = new HarmonyExportSpecifierDependency(this.state.module, id, name, hoisted ? 0 : (statement.range[1] + 0.5), immutable); + } dep.loc = statement.loc; this.state.current.addDependency(dep); return true; diff --git a/lib/dependencies/HarmonyExportImportedSpecifierDependency.js b/lib/dependencies/HarmonyExportImportedSpecifierDependency.js index 6e8528ef76c..edac7daafeb 100644 --- a/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +++ b/lib/dependencies/HarmonyExportImportedSpecifierDependency.js @@ -48,13 +48,15 @@ HarmonyExportImportedSpecifierDependency.Template.prototype.apply = function(dep if(outputOptions.pathinfo) comment = "/*! " + requestShortener.shorten(dep.request) + " */ "; var content; if(!used) { - content = "/* unused harmony reexport " + (dep.name || "namespace") + " */;"; + content = "/* unused harmony reexport " + (dep.name || "namespace") + " */"; } else if(!active) { - content = "/* inactive harmony reexport " + (dep.name || "namespace") + " */;"; + content = "/* inactive harmony reexport " + (dep.name || "namespace") + " */"; } else if(dep.name === "default" && !dep.importDependency.module.meta.harmonyModule) { content = "/* harmony reexport */ Object.defineProperty(exports, " + JSON.stringify(dep.name) + ", {configurable: false, enumerable: true, get: function() { return " + comment + name + "_default.a; }});"; - } else if(dep.name) { + } else if(dep.name && dep.id) { content = "/* harmony reexport */ Object.defineProperty(exports, " + JSON.stringify(dep.name) + ", {configurable: false, enumerable: true, get: function() { return " + comment + (name + "[" + JSON.stringify(dep.id) + "]") + "; }});"; + } else if(dep.name) { + content = "/* harmony reexport */ Object.defineProperty(exports, " + JSON.stringify(dep.name) + ", {configurable: false, enumerable: true, get: function() { return " + comment + name + "; }});"; } else { var activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule); content = "/* harmony namespace reexport */ for(var __WEBPACK_IMPORT_KEY__ in " + comment + name + ") "; diff --git a/lib/dependencies/HarmonyExportSpecifierDependency.js b/lib/dependencies/HarmonyExportSpecifierDependency.js index b9ec3347ed4..6995a4d6c3a 100644 --- a/lib/dependencies/HarmonyExportSpecifierDependency.js +++ b/lib/dependencies/HarmonyExportSpecifierDependency.js @@ -33,9 +33,9 @@ HarmonyExportSpecifierDependency.Template.prototype.apply = function(dep, source var active = HarmonyModulesHelpers.isActive(dep.originModule, dep); var content; if(!used) { - content = "/* unused harmony export " + (dep.name || "namespace") + " */;"; + content = "/* unused harmony export " + (dep.name || "namespace") + " */"; } else if(!active) { - content = "/* inactive harmony export " + (dep.name || "namespace") + " */;"; + content = "/* inactive harmony export " + (dep.name || "namespace") + " */"; } else if(dep.immutable) { content = "/* harmony export */ exports[" + JSON.stringify(dep.name) + "] = " + dep.id + ";"; } else { diff --git a/test/cases/parsing/harmony/index.js b/test/cases/parsing/harmony/index.js index b4a47732e0c..de32d5af97c 100644 --- a/test/cases/parsing/harmony/index.js +++ b/test/cases/parsing/harmony/index.js @@ -28,11 +28,13 @@ it("should import a whole module", function() { abc.b.should.be.eql("b"); abc.c.should.be.eql("c"); abc.d.c.should.be.eql("c"); + abc.e.should.be.eql("c"); var copy = (function(a) { return a; }(abc)); copy.a.should.be.eql("a"); copy.b.should.be.eql("b"); copy.c.should.be.eql("c"); copy.d.c.should.be.eql("c"); + copy.e.should.be.eql("c"); (typeof abc).should.be.eql("object"); }); diff --git a/test/cases/parsing/harmony/node_modules/abc.js b/test/cases/parsing/harmony/node_modules/abc.js index 563a37f1441..ed95cb1b9b8 100644 --- a/test/cases/parsing/harmony/node_modules/abc.js +++ b/test/cases/parsing/harmony/node_modules/abc.js @@ -4,3 +4,6 @@ export {c} from "./abc_c"; import * as temp from "./abc_c"; export {temp as d}; + +import {c} from "./abc_c"; +export {c as e};