diff --git a/lib/6to5/transformation/modules/_default.js b/lib/6to5/transformation/modules/_default.js index ad36cbeed7..908180f1c3 100644 --- a/lib/6to5/transformation/modules/_default.js +++ b/lib/6to5/transformation/modules/_default.js @@ -27,7 +27,7 @@ function DefaultFormatter(file) { } DefaultFormatter.prototype.doDefaultExportInterop = function (node) { - return node.default && !this.noInteropRequire && !this.hasNonDefaultExports; + return node.default && !this.noInteropRequireExport && !this.hasNonDefaultExports; }; DefaultFormatter.prototype.bumpImportOccurences = function (node) { @@ -228,7 +228,7 @@ DefaultFormatter.prototype.exportSpecifier = function (specifier, node, nodes) { // export * from "foo"; nodes.push(this.buildExportsWildcard(ref, node)); } else { - if (t.isSpecifierDefault(specifier) && !this.noInteropRequire) { + if (t.isSpecifierDefault(specifier) && !this.noInteropRequireExport) { // importing a default so we need to normalize it ref = t.callExpression(this.file.addHelper("interop-require"), [ref]); } else { diff --git a/lib/6to5/transformation/modules/amd.js b/lib/6to5/transformation/modules/amd.js index 4ee4b44268..3e85f202d6 100644 --- a/lib/6to5/transformation/modules/amd.js +++ b/lib/6to5/transformation/modules/amd.js @@ -86,7 +86,7 @@ AMDFormatter.prototype.importSpecifier = function (specifier, node, nodes) { this.ids[node.source.value] = ref; } else if (t.isImportBatchSpecifier(specifier)) { // import * as bar from "foo"; - } else if (t.isSpecifierDefault(specifier) && !this.noInteropRequire) { + } else if (t.isSpecifierDefault(specifier) && !this.noInteropRequireImport) { // import foo from "foo"; ref = t.callExpression(this.file.addHelper("interop-require"), [ref]); } else { diff --git a/lib/6to5/transformation/modules/common-standard.js b/lib/6to5/transformation/modules/common-standard.js new file mode 100644 index 0000000000..41888a8293 --- /dev/null +++ b/lib/6to5/transformation/modules/common-standard.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = CommonStandardFormatter; + +var CommonStrictFormatter = require("./common-strict"); +var util = require("../../util"); + +function CommonStandardFormatter() { + this.noInteropRequireImport = true; + CommonStrictFormatter.apply(this, arguments); +} + +util.inherits(CommonStandardFormatter, CommonStrictFormatter); diff --git a/lib/6to5/transformation/modules/common.js b/lib/6to5/transformation/modules/common.js index fc74ce1aa9..dcc00d6654 100644 --- a/lib/6to5/transformation/modules/common.js +++ b/lib/6to5/transformation/modules/common.js @@ -14,7 +14,7 @@ function CommonJSFormatter() { util.inherits(CommonJSFormatter, DefaultFormatter); CommonJSFormatter.prototype.init = function () { - if (this.hasNonDefaultExports) { + if (!this.noInteropRequireImport && this.hasNonDefaultExports) { this.file.ast.program.body.push(util.template("exports-module-declaration", true)); } }; @@ -27,19 +27,23 @@ CommonJSFormatter.prototype.importSpecifier = function (specifier, node, nodes) // import foo from "foo"; if (t.isSpecifierDefault(specifier)) { if (!contains(this.file.dynamicImported, node)) { - ref = t.callExpression(this.file.addHelper("interop-require"), [ref]); + if (this.noInteropRequireImport) { + ref = t.memberExpression(ref, t.identifier("default")); + } else { + ref = t.callExpression(this.file.addHelper("interop-require"), [ref]); + } } nodes.push(t.variableDeclaration("var", [t.variableDeclarator(variableName, ref)])); } else { if (specifier.type === "ImportBatchSpecifier") { + + if (!this.noInteropRequireImport) { + ref = t.callExpression(this.file.addHelper("interop-require-wildcard"), [ref]); + } + // import * as bar from "foo"; nodes.push(t.variableDeclaration("var", [ - t.variableDeclarator( - variableName, - t.callExpression(this.file.addHelper("interop-require-wildcard"), [ - ref - ]) - ) + t.variableDeclarator(variableName, ref) ])); } else { // import { foo } from "foo"; diff --git a/lib/6to5/transformation/modules/index.js b/lib/6to5/transformation/modules/index.js index 8202dff6ad..f383755ab5 100644 --- a/lib/6to5/transformation/modules/index.js +++ b/lib/6to5/transformation/modules/index.js @@ -1,10 +1,11 @@ module.exports = { - commonStrict: require("./common-strict"), - amdStrict: require("./amd-strict"), - umdStrict: require("./umd-strict"), - common: require("./common"), - system: require("./system"), - ignore: require("./ignore"), - amd: require("./amd"), - umd: require("./umd") + commonStandard: require("./common-standard"), + commonStrict: require("./common-strict"), + amdStrict: require("./amd-strict"), + umdStrict: require("./umd-strict"), + common: require("./common"), + system: require("./system"), + ignore: require("./ignore"), + amd: require("./amd"), + umd: require("./umd") }; diff --git a/lib/6to5/transformation/modules/system.js b/lib/6to5/transformation/modules/system.js index 0d333037d5..0c5db72d55 100644 --- a/lib/6to5/transformation/modules/system.js +++ b/lib/6to5/transformation/modules/system.js @@ -13,7 +13,8 @@ var map = require("lodash/collection/map"); function SystemFormatter(file) { this.exportIdentifier = file.generateUidIdentifier("export"); - this.noInteropRequire = true; + this.noInteropRequireExport = true; + this.noInteropRequireImport = true; DefaultFormatter.apply(this, arguments); } diff --git a/test/fixtures/transformation/es6-modules-common-standard/export/actual.js b/test/fixtures/transformation/es6-modules-common-standard/export/actual.js new file mode 100644 index 0000000000..093270a9e9 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-standard/export/actual.js @@ -0,0 +1,3 @@ +export function foo() {} +export default foo; +export { foo as default, foo }; diff --git a/test/fixtures/transformation/es6-modules-common-standard/export/expected.js b/test/fixtures/transformation/es6-modules-common-standard/export/expected.js new file mode 100644 index 0000000000..17638c0e34 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-standard/export/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +exports.foo = foo; +function foo() {} +exports["default"] = foo; +exports["default"] = foo; +exports.foo = foo; diff --git a/test/fixtures/transformation/es6-modules-common-standard/import/actual.js b/test/fixtures/transformation/es6-modules-common-standard/import/actual.js new file mode 100644 index 0000000000..abe38382a9 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-standard/import/actual.js @@ -0,0 +1,4 @@ +import foo from "foo"; +import { default as foo } from "foo"; +import { foo } from "foo"; +import * as foo from "foo"; diff --git a/test/fixtures/transformation/es6-modules-common-standard/import/expected.js b/test/fixtures/transformation/es6-modules-common-standard/import/expected.js new file mode 100644 index 0000000000..1a3ef804c1 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-standard/import/expected.js @@ -0,0 +1,8 @@ +"use strict"; + +var _foo = require("foo"); + +var foo = _foo["default"]; +var foo = _foo["default"]; +var foo = _foo.foo; +var foo = _foo; diff --git a/test/fixtures/transformation/es6-modules-common-standard/options.json b/test/fixtures/transformation/es6-modules-common-standard/options.json new file mode 100644 index 0000000000..10df83745e --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-standard/options.json @@ -0,0 +1,3 @@ +{ + "modules": "commonStandard" +}