From cda226a33343d5e25e643e2b786eee04ca769552 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 20 Mar 2018 11:10:05 +0100 Subject: [PATCH] handle reexporting json default export correctly fixes #6700 --- ...armonyExportImportedSpecifierDependency.js | 42 ++++++++++++++----- .../scope-hoisting/json-reexport-6700/a.json | 3 ++ .../scope-hoisting/json-reexport-6700/b.json | 3 ++ .../json-reexport-6700/index.js | 9 ++++ .../scope-hoisting/json-reexport-6700/json.js | 11 +++++ 5 files changed, 57 insertions(+), 11 deletions(-) create mode 100644 test/cases/scope-hoisting/json-reexport-6700/a.json create mode 100644 test/cases/scope-hoisting/json-reexport-6700/b.json create mode 100644 test/cases/scope-hoisting/json-reexport-6700/index.js create mode 100644 test/cases/scope-hoisting/json-reexport-6700/json.js diff --git a/lib/dependencies/HarmonyExportImportedSpecifierDependency.js b/lib/dependencies/HarmonyExportImportedSpecifierDependency.js index 6e9cc68404a..048dd9b2d57 100644 --- a/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +++ b/lib/dependencies/HarmonyExportImportedSpecifierDependency.js @@ -53,25 +53,33 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { }; } - const isNotAHarmonyModule = - importedModule.buildMeta && !importedModule.buildMeta.exportsType; const strictHarmonyModule = this.originModule.buildMeta.strictHarmonyModule; - if (name && id === "default" && isNotAHarmonyModule) { - if (strictHarmonyModule) { - return { - type: "reexport-non-harmony-default-strict", - module: importedModule, - name - }; - } else { + if (name && id === "default" && importedModule.buildMeta) { + if (!importedModule.buildMeta.exportsType) { + if (strictHarmonyModule) { + return { + type: "reexport-non-harmony-default-strict", + module: importedModule, + name + }; + } else { + return { + type: "reexport-non-harmony-default", + module: importedModule, + name + }; + } + } else if (importedModule.buildMeta.exportsType === "named") { return { - type: "reexport-non-harmony-default", + type: "reexport-named-default", module: importedModule, name }; } } + const isNotAHarmonyModule = + importedModule.buildMeta && !importedModule.buildMeta.exportsType; if (name) { // export { name as name } if (id) { @@ -209,6 +217,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency { return null; case "reexport-non-harmony-default": + case "reexport-named-default": return { module: mode.module, importedNames: ["default"] @@ -459,6 +468,17 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS ) ); + case "reexport-named-default": + return ( + "/* harmony reexport (default from named exports) */ " + + this.getReexportStatement( + module, + module.isUsed(mode.name), + importVar, + "" + ) + ); + case "reexport-fake-namespace-object": return ( "/* harmony reexport (fake namespace object from non-harmony) */ " + diff --git a/test/cases/scope-hoisting/json-reexport-6700/a.json b/test/cases/scope-hoisting/json-reexport-6700/a.json new file mode 100644 index 00000000000..19a786f70f7 --- /dev/null +++ b/test/cases/scope-hoisting/json-reexport-6700/a.json @@ -0,0 +1,3 @@ +{ + "a": "A" +} diff --git a/test/cases/scope-hoisting/json-reexport-6700/b.json b/test/cases/scope-hoisting/json-reexport-6700/b.json new file mode 100644 index 00000000000..fde2fb818ff --- /dev/null +++ b/test/cases/scope-hoisting/json-reexport-6700/b.json @@ -0,0 +1,3 @@ +{ + "b": "B" +} diff --git a/test/cases/scope-hoisting/json-reexport-6700/index.js b/test/cases/scope-hoisting/json-reexport-6700/index.js new file mode 100644 index 00000000000..093e287fea2 --- /dev/null +++ b/test/cases/scope-hoisting/json-reexport-6700/index.js @@ -0,0 +1,9 @@ +import { a, b, aa, bb } from './json.js' + +it("should reexport json data correctly", () => { + aa.should.be.eql({ a: "A" }); + bb.should.be.eql({ b: "B" }); + a.should.be.eql("A"); + b.should.be.eql("B"); +}); + diff --git a/test/cases/scope-hoisting/json-reexport-6700/json.js b/test/cases/scope-hoisting/json-reexport-6700/json.js new file mode 100644 index 00000000000..3d3ad35b3a1 --- /dev/null +++ b/test/cases/scope-hoisting/json-reexport-6700/json.js @@ -0,0 +1,11 @@ +import aa from './a.json'; + +export { aa }; + +export { default as bb } from './b.json'; + +import { a } from './a.json'; + +export { a }; + +export { b } from './b.json';