From 8e96130bc05baf3fe5a32c9dae3cdf0f8751500d Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Wed, 10 Dec 2014 21:08:54 +1100 Subject: [PATCH] rename common to commonStrict and commonInterop to common --- doc/modules.md | 118 +++++------- .../exports-default-module-override.js | 1 + lib/6to5/transformation/modules/_default.js | 153 +++++++++++++++ lib/6to5/transformation/modules/amd.js | 19 +- .../transformation/modules/common-interop.js | 56 ------ .../transformation/modules/common-strict.js | 46 +++++ lib/6to5/transformation/modules/common.js | 178 ++++-------------- .../exports-default/expected.js | 15 -- .../imports-default/expected.js | 9 - .../imports-mixing/expected.js | 9 - .../es6-modules-common-interop/options.json | 3 - .../exports-default/actual.js | 0 .../exports-default/expected.js | 15 ++ .../exports-from/actual.js | 0 .../exports-from/expected.js | 0 .../exports-named/actual.js | 0 .../exports-named/expected.js | 0 .../exports-variable/actual.js | 0 .../exports-variable/expected.js | 0 .../hoist-function-exports/actual.js | 0 .../hoist-function-exports/expected.js | 0 .../imports-default/actual.js | 0 .../imports-default/expected.js | 4 + .../imports-glob/actual.js | 0 .../imports-glob/expected.js | 0 .../imports-mixing/actual.js | 0 .../imports-mixing/expected.js | 4 + .../imports-named/actual.js | 0 .../imports-named/expected.js | 0 .../imports/actual.js | 0 .../imports/expected.js | 0 .../es6-modules-common-strict/options.json | 3 + .../overview/actual.js | 0 .../overview/expected.js | 7 +- .../exports-default/expected.js | 16 +- .../imports-default/expected.js | 9 +- .../imports-mixing/expected.js | 7 +- .../es6-modules-common/overview/expected.js | 9 +- 38 files changed, 355 insertions(+), 326 deletions(-) create mode 100644 lib/6to5/templates/exports-default-module-override.js create mode 100644 lib/6to5/transformation/modules/_default.js delete mode 100644 lib/6to5/transformation/modules/common-interop.js create mode 100644 lib/6to5/transformation/modules/common-strict.js delete mode 100644 test/fixtures/transformation/es6-modules-common-interop/exports-default/expected.js delete mode 100644 test/fixtures/transformation/es6-modules-common-interop/imports-default/expected.js delete mode 100644 test/fixtures/transformation/es6-modules-common-interop/imports-mixing/expected.js delete mode 100644 test/fixtures/transformation/es6-modules-common-interop/options.json rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/exports-default/actual.js (100%) create mode 100644 test/fixtures/transformation/es6-modules-common-strict/exports-default/expected.js rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/exports-from/actual.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/exports-from/expected.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/exports-named/actual.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/exports-named/expected.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/exports-variable/actual.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/exports-variable/expected.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/hoist-function-exports/actual.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/hoist-function-exports/expected.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/imports-default/actual.js (100%) create mode 100644 test/fixtures/transformation/es6-modules-common-strict/imports-default/expected.js rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/imports-glob/actual.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/imports-glob/expected.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/imports-mixing/actual.js (100%) create mode 100644 test/fixtures/transformation/es6-modules-common-strict/imports-mixing/expected.js rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/imports-named/actual.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/imports-named/expected.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/imports/actual.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/imports/expected.js (100%) create mode 100644 test/fixtures/transformation/es6-modules-common-strict/options.json rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/overview/actual.js (100%) rename test/fixtures/transformation/{es6-modules-common-interop => es6-modules-common-strict}/overview/expected.js (66%) diff --git a/doc/modules.md b/doc/modules.md index 5fcba15868..7ce8b20d07 100644 --- a/doc/modules.md +++ b/doc/modules.md @@ -19,12 +19,12 @@ to5.transform('import "foo";', { modules: "common" }); * [AMD](#amd) * [Common (Default)](#common-default) - * [Common Interop](#common-interop) + * [Common Strict](#common-strict) * [Ignore](#ignore) * [System](#system) * [UMD](#umd) -### Common (Default) +### Common ```sh $ 6to5 --modules common @@ -32,6 +32,53 @@ $ 6to5 --modules common **In** +```javascript +export default test; + +export {test}; +export var test = 5; + +import "foo"; + +import foo from "foo"; +import * as foo from "foo"; + +import {bar} from "foo"; +import {foo as bar} from "foo"; +``` + +**Out** + +```javascript +"use strict"; + +var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); +}; + +exports = module.exports = test; + +exports.test = test; +var test = exports.test = 5; + +require("foo"); + +var foo = _interopRequire(require("foo")); + +var foo = require("foo"); + +var bar = require("foo").bar; +var bar = require("foo").foo; +``` + +### Common Strict + +```sh +$ 6to5 --modules commonStrict +``` + +**In** + ```javascript import "foo"; @@ -64,73 +111,6 @@ var test = 5; exports.test = test; exports.default = test; ``` -### Common interop - -```sh -$ 6to5 --modules commonInterop -``` - -**In** - -```javascript -import "foo"; - -import foo from "foo"; -import * as foo from "foo"; - -import {bar} from "foo"; -import {foo as bar} from "foo"; - -export {test}; -export var test = 5; - -export default test; -``` - -**Out** - -```javascript -var _interopRequire = function (obj) { - return obj && (obj["default"] || obj); -}; - -require("foo"); - -var foo = _interopRequire(require("foo")); -var foo = require("foo"); - -var bar = require("foo").bar; -var bar = require("foo").foo; - -exports.test = test; -var test = exports.test = 5; - -exports["default"] = test; -``` - -#### module.exports behaviour - -If there exist no other non-default `export`s then `default exports` are -exported as `module.exports` instead of `exports.default`. - -**In** - -```javascript -export default function foo() { - -} -``` - -**Out** - -```javascript -module.exports = foo; - -function foo() { - -} -``` - ### AMD ```sh diff --git a/lib/6to5/templates/exports-default-module-override.js b/lib/6to5/templates/exports-default-module-override.js new file mode 100644 index 0000000000..4ce92a4fd1 --- /dev/null +++ b/lib/6to5/templates/exports-default-module-override.js @@ -0,0 +1 @@ +exports = module.exports = VALUE; diff --git a/lib/6to5/transformation/modules/_default.js b/lib/6to5/transformation/modules/_default.js new file mode 100644 index 0000000000..7d3f06c345 --- /dev/null +++ b/lib/6to5/transformation/modules/_default.js @@ -0,0 +1,153 @@ +module.exports = DefaultFormatter; + +var traverse = require("../../traverse"); +var util = require("../../util"); +var t = require("../../types"); +var _ = require("lodash"); + +function DefaultFormatter(file) { + this.exports = []; + this.file = file; + + var localExports = []; + _.each(file.ast.program.body, function (node) { + var declar = node.declaration; + if (t.isExportDeclaration(node) && declar && t.isStatement(declar)) { + localExports = localExports.concat(t.getIds(declar)); + } + }); + this.localExports = localExports; + + this.remapAssignments(); +} + +DefaultFormatter.prototype.remapAssignments = function () { + var localExports = this.localExports; + + traverse(this.file.ast, function (node) { + if (t.isExportDeclaration(node)) return false; + + if (t.isAssignmentExpression(node)) { + var left = node.left; + if (t.isIdentifier(left) && _.contains(localExports, left.name)) { + return t.assignmentExpression( + "=", + left, + t.assignmentExpression( + node.operator, + t.memberExpression(t.identifier("exports"), left), + node.right + ) + ); + } + } + }); +}; + +DefaultFormatter.prototype.getModuleName = function () { + var opts = this.file.opts; + var filenameRelative = opts.filenameRelative; + var moduleName = ""; + + if (opts.moduleRoot) { + moduleName = opts.moduleRoot + "/"; + } + + if (!opts.filenameRelative) { + return moduleName + opts.filename.replace(/^\//, ""); + } + + if (opts.sourceRoot) { + // remove sourceRoot from filename + var sourceRootRegEx = new RegExp("^" + opts.sourceRoot + "\/?"); + filenameRelative = filenameRelative.replace(sourceRootRegEx, ""); + } + + // remove extension + filenameRelative = filenameRelative.replace(/\.(.*?)$/, ""); + + moduleName += filenameRelative; + + return moduleName; +}; + +DefaultFormatter.prototype._pushStatement = function (ref, nodes) { + if (t.isClass(ref) || t.isFunction(ref)) { + if (ref.id) { + nodes.push(t.toStatement(ref)); + ref = ref.id; + } + } + + return ref; +}; + +DefaultFormatter.prototype._hoistExport = function (declar, assign) { + if (t.isFunctionDeclaration(declar)) { + assign._blockHoist = true; + } + + return assign; +}; + +DefaultFormatter.prototype._exportSpecifier = function (getRef, specifier, node, nodes) { + var variableName = t.getSpecifierName(specifier); + + var inherits = false; + if (node.specifiers.length === 1) inherits = node; + + if (node.source) { + if (t.isExportBatchSpecifier(specifier)) { + // export * from "foo"; + nodes.push(util.template("exports-wildcard", { + OBJECT: getRef() + }, true)); + } else { + // export { foo } from "test"; + nodes.push(util.template("exports-assign-key", { + VARIABLE_NAME: variableName.name, + OBJECT: getRef(), + KEY: specifier.id + }, true)); + } + } else { + // export { foo }; + nodes.push(util.template("exports-assign", { + VALUE: specifier.id, + KEY: variableName + }, true)); + } +}; + +DefaultFormatter.prototype.export = function (node, nodes) { + var declar = node.declaration; + + if (node.default) { + nodes.push(util.template("exports-default", { + VALUE: this._pushStatement(declar, nodes) + }, true)); + } else { + var assign; + + if (t.isVariableDeclaration(declar)) { + var decl = declar.declarations[0]; + + decl.init = util.template("exports-assign", { + VALUE: decl.init, + KEY: decl.id + }); + + nodes.push(declar); + } else { + assign = util.template("exports-assign", { + VALUE: declar.id, + KEY: declar.id + }, true); + + nodes.push(t.toStatement(declar)); + nodes.push(assign); + + this._hoistExport(declar, assign); + } + } +}; diff --git a/lib/6to5/transformation/modules/amd.js b/lib/6to5/transformation/modules/amd.js index 3a0469cd7e..23566148a8 100644 --- a/lib/6to5/transformation/modules/amd.js +++ b/lib/6to5/transformation/modules/amd.js @@ -1,16 +1,20 @@ module.exports = AMDFormatter; -var CommonJSFormatter = require("./common"); -var util = require("../../util"); -var t = require("../../types"); -var _ = require("lodash"); +var DefaultFormatter = require("./_default"); +var util = require("../../util"); +var t = require("../../types"); +var _ = require("lodash"); function AMDFormatter(file) { this.file = file; this.ids = {}; } -util.inherits(AMDFormatter, CommonJSFormatter); +util.inherits(AMDFormatter, DefaultFormatter); + +/** + * Wrap the entire body in a `define` wrapper. + */ AMDFormatter.prototype.transform = function (ast) { var program = ast.program; @@ -40,6 +44,11 @@ AMDFormatter.prototype.transform = function (ast) { program.body = [t.expressionStatement(call)]; }; +/** + * Get the AMD module name that we'll prepend to the wrapper + * to define this module + */ + AMDFormatter.prototype.getModuleName = function () { if (this.file.opts.amdModuleIds) { return CommonJSFormatter.prototype.getModuleName.apply(this, arguments); diff --git a/lib/6to5/transformation/modules/common-interop.js b/lib/6to5/transformation/modules/common-interop.js deleted file mode 100644 index 9cc4d4bd37..0000000000 --- a/lib/6to5/transformation/modules/common-interop.js +++ /dev/null @@ -1,56 +0,0 @@ -module.exports = CommonJSInteropFormatter; - -var CommonJSFormatter = require("./common"); -var util = require("../../util"); -var t = require("../../types"); -var _ = require("lodash"); - -function CommonJSInteropFormatter(file) { - CommonJSFormatter.apply(this, arguments); - - var has = false; - _.each(file.ast.program.body, function (node) { - if (t.isExportDeclaration(node) && !node.default) has = true; - }); - this.has = has; -} - -util.inherits(CommonJSInteropFormatter, CommonJSFormatter); - -CommonJSInteropFormatter.prototype.importSpecifier = function (specifier, node, nodes) { - var variableName = t.getSpecifierName(specifier); - - // import foo from "foo"; - if (specifier.default) { - nodes.push(t.variableDeclaration("var", [ - t.variableDeclarator(variableName, - t.callExpression(this.file.addDeclaration("interop-require"), [util.template("require", { - MODULE_NAME: node.source.raw - })]) - ) - ])); - } else { - CommonJSFormatter.prototype.importSpecifier.apply(this, arguments); - } -}; - -CommonJSInteropFormatter.prototype.export = function (node, nodes) { - if (node.default && !this.has) { - var declar = node.declaration; - - // module.exports = VALUE; - var assign = util.template("exports-default-module", { - VALUE: this._pushStatement(declar, nodes) - }, true); - - // hoist to the top if this default is a function - nodes.push(this._hoistExport(declar, assign)); - return; - } - - CommonJSFormatter.prototype.export.apply(this, arguments); -}; - -CommonJSInteropFormatter.prototype.exportSpecifier = function () { - CommonJSFormatter.prototype.exportSpecifier.apply(this, arguments); -}; diff --git a/lib/6to5/transformation/modules/common-strict.js b/lib/6to5/transformation/modules/common-strict.js new file mode 100644 index 0000000000..eb58cb6d75 --- /dev/null +++ b/lib/6to5/transformation/modules/common-strict.js @@ -0,0 +1,46 @@ +module.exports = CommonJSStrictFormatter; + +var DefaultFormatter = require("./_default"); +var util = require("../../util"); +var t = require("../../types"); + +function CommonJSStrictFormatter() { + DefaultFormatter.apply(this, arguments); +} + +util.inherits(CommonJSStrictFormatter, DefaultFormatter); + +CommonJSStrictFormatter.prototype.import = function (node, nodes) { + // import "foo"; + nodes.push(util.template("require", { + //inherits: node, + + MODULE_NAME: node.source.raw + }, true)); +}; + +CommonJSStrictFormatter.prototype.importSpecifier = function (specifier, node, nodes) { + var variableName = t.getSpecifierName(specifier); + + // import foo from "foo"; + if (specifier.default) { + specifier.id = t.identifier("default"); + } + + var templateName = "require-assign"; + + // import * as bar from "foo"; + if (specifier.type !== "ImportBatchSpecifier") templateName += "-key"; + + nodes.push(util.template(templateName, { + VARIABLE_NAME: variableName, + MODULE_NAME: node.source.raw, + KEY: specifier.id + })); +}; + +CommonJSStrictFormatter.prototype.exportSpecifier = function (specifier, node, nodes) { + this._exportSpecifier(function () { + return t.callExpression(t.identifier("require"), [node.source]); + }, specifier, node, nodes); +}; diff --git a/lib/6to5/transformation/modules/common.js b/lib/6to5/transformation/modules/common.js index 8ab054cf5d..1feb646d61 100644 --- a/lib/6to5/transformation/modules/common.js +++ b/lib/6to5/transformation/modules/common.js @@ -1,164 +1,60 @@ module.exports = CommonJSFormatter; -var util = require("../../util"); -var t = require("../../types"); +var CommonJSStrictFormatter = require("./common-strict"); +var util = require("../../util"); +var t = require("../../types"); +var _ = require("lodash"); function CommonJSFormatter(file) { - this.file = file; + CommonJSStrictFormatter.apply(this, arguments); + + var hasNonDefaultExports = false; + _.each(file.ast.program.body, function (node) { + if (t.isExportDeclaration(node) && !node.default) hasNonDefaultExports = true; + }); + this.hasNonDefaultExports = hasNonDefaultExports; } -CommonJSFormatter.prototype.getModuleName = function () { - var opts = this.file.opts; - var filenameRelative = opts.filenameRelative; - var moduleName = ""; - - if (opts.moduleRoot) { - moduleName = opts.moduleRoot + "/"; - } - - if (!opts.filenameRelative) { - return moduleName + opts.filename.replace(/^\//, ""); - } - - if (opts.sourceRoot) { - // remove sourceRoot from filename - var sourceRootRegEx = new RegExp("^" + opts.sourceRoot + "\/?"); - filenameRelative = filenameRelative.replace(sourceRootRegEx, ""); - } - - // remove extension - filenameRelative = filenameRelative.replace(/\.(.*?)$/, ""); - - moduleName += filenameRelative; - - return moduleName; -}; - -CommonJSFormatter.prototype.import = function (node, nodes) { - // import "foo"; - nodes.push(util.template("require", { - //inherits: node, - - MODULE_NAME: node.source.raw - }, true)); -}; +util.inherits(CommonJSFormatter, CommonJSStrictFormatter); CommonJSFormatter.prototype.importSpecifier = function (specifier, node, nodes) { var variableName = t.getSpecifierName(specifier); // import foo from "foo"; - if (specifier.default) { - specifier.id = t.identifier("default"); + if (t.isIdentifier(specifier.id) && specifier.id.name === "default") { + nodes.push(t.variableDeclaration("var", [ + t.variableDeclarator(variableName, + t.callExpression(this.file.addDeclaration("interop-require"), [util.template("require", { + MODULE_NAME: node.source.raw + })]) + ) + ])); + } else { + CommonJSStrictFormatter.prototype.importSpecifier.apply(this, arguments); } - - var templateName = "require-assign"; - - // import * as bar from "foo"; - if (specifier.type !== "ImportBatchSpecifier") templateName += "-key"; - - nodes.push(util.template(templateName, { - //inherits: node.specifiers.length === 1 && node, - - VARIABLE_NAME: variableName, - MODULE_NAME: node.source.raw, - KEY: specifier.id - })); -}; - -CommonJSFormatter.prototype._hoistExport = function (declar, assign) { - if (t.isFunctionDeclaration(declar)) { - assign._blockHoist = true; - } - - return assign; -}; - -CommonJSFormatter.prototype._pushStatement = function (ref, nodes) { - if (t.isClass(ref) || t.isFunction(ref)) { - if (ref.id) { - nodes.push(t.toStatement(ref)); - ref = ref.id; - } - } - return ref; }; CommonJSFormatter.prototype.export = function (node, nodes) { - var declar = node.declaration; - if (node.default) { - nodes.push(util.template("exports-default", { - //inherits: node, + var declar = node.declaration; + // module.exports = VALUE; + var templateName = "exports-default-module"; + + // exports = module.exports = VALUE; + if (this.hasNonDefaultExports) templateName = "exports-default-module-override" + + var assign = util.template(templateName, { VALUE: this._pushStatement(declar, nodes) - }, true)); + }, true); + + // hoist to the top if this default is a function + nodes.push(this._hoistExport(declar, assign)); } else { - var assign; - - if (t.isVariableDeclaration(declar)) { - var decl = declar.declarations[0]; - - decl.init = util.template("exports-assign", { - //inherits: node, - - VALUE: decl.init, - KEY: decl.id - }); - - nodes.push(declar); - } else { - assign = util.template("exports-assign", { - //inherits: node, - - VALUE: declar.id, - KEY: declar.id - }, true); - - nodes.push(t.toStatement(declar)); - nodes.push(assign); - - this._hoistExport(declar, assign); - } + CommonJSStrictFormatter.prototype.export.apply(this, arguments); } }; -CommonJSFormatter.prototype._exportSpecifier = function (getRef, specifier, node, nodes) { - var variableName = t.getSpecifierName(specifier); - - var inherits = false; - if (node.specifiers.length === 1) inherits = node; - - if (node.source) { - if (t.isExportBatchSpecifier(specifier)) { - // export * from "foo"; - nodes.push(util.template("exports-wildcard", { - //inherits: inherits, - - OBJECT: getRef() - }, true)); - } else { - // export { foo } from "test"; - nodes.push(util.template("exports-assign-key", { - //inherits: inherits, - - VARIABLE_NAME: variableName.name, - OBJECT: getRef(), - KEY: specifier.id - }, true)); - } - } else { - // export { foo }; - nodes.push(util.template("exports-assign", { - //inherits: inherits, - - VALUE: specifier.id, - KEY: variableName - }, true)); - } -}; - -CommonJSFormatter.prototype.exportSpecifier = function (specifier, node, nodes) { - this._exportSpecifier(function () { - return t.callExpression(t.identifier("require"), [node.source]); - }, specifier, node, nodes); +CommonJSFormatter.prototype.exportSpecifier = function () { + CommonJSStrictFormatter.prototype.exportSpecifier.apply(this, arguments); }; diff --git a/test/fixtures/transformation/es6-modules-common-interop/exports-default/expected.js b/test/fixtures/transformation/es6-modules-common-interop/exports-default/expected.js deleted file mode 100644 index ef8ba56786..0000000000 --- a/test/fixtures/transformation/es6-modules-common-interop/exports-default/expected.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -module.exports = foo; -module.exports = 42; -module.exports = {}; -module.exports = []; -module.exports = foo; -module.exports = function () {}; - -module.exports = function () {}; - -function foo() {} -var Foo = function Foo() {}; - -module.exports = Foo; diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports-default/expected.js b/test/fixtures/transformation/es6-modules-common-interop/imports-default/expected.js deleted file mode 100644 index a93b2668f9..0000000000 --- a/test/fixtures/transformation/es6-modules-common-interop/imports-default/expected.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -var _interopRequire = function (obj) { - return obj && (obj["default"] || obj); -}; - -var foo = _interopRequire(require("foo")); - -var foo = require("foo")["default"]; diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports-mixing/expected.js b/test/fixtures/transformation/es6-modules-common-interop/imports-mixing/expected.js deleted file mode 100644 index 09ea4cec86..0000000000 --- a/test/fixtures/transformation/es6-modules-common-interop/imports-mixing/expected.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -var _interopRequire = function (obj) { - return obj && (obj["default"] || obj); -}; - -var foo = _interopRequire(require("foo")); - -var xyz = require("foo").baz; diff --git a/test/fixtures/transformation/es6-modules-common-interop/options.json b/test/fixtures/transformation/es6-modules-common-interop/options.json deleted file mode 100644 index d5e2792eed..0000000000 --- a/test/fixtures/transformation/es6-modules-common-interop/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "modules": "commonInterop" -} diff --git a/test/fixtures/transformation/es6-modules-common-interop/exports-default/actual.js b/test/fixtures/transformation/es6-modules-common-strict/exports-default/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/exports-default/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/exports-default/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-strict/exports-default/expected.js b/test/fixtures/transformation/es6-modules-common-strict/exports-default/expected.js new file mode 100644 index 0000000000..8c68ab4224 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-strict/exports-default/expected.js @@ -0,0 +1,15 @@ +"use strict"; + +exports["default"] = 42; +exports["default"] = {}; +exports["default"] = []; +exports["default"] = foo; +exports["default"] = function () {}; + +exports["default"] = function () {}; + +function foo() {} +exports["default"] = foo; +var Foo = function Foo() {}; + +exports["default"] = Foo; diff --git a/test/fixtures/transformation/es6-modules-common-interop/exports-from/actual.js b/test/fixtures/transformation/es6-modules-common-strict/exports-from/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/exports-from/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/exports-from/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/exports-from/expected.js b/test/fixtures/transformation/es6-modules-common-strict/exports-from/expected.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/exports-from/expected.js rename to test/fixtures/transformation/es6-modules-common-strict/exports-from/expected.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/exports-named/actual.js b/test/fixtures/transformation/es6-modules-common-strict/exports-named/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/exports-named/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/exports-named/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/exports-named/expected.js b/test/fixtures/transformation/es6-modules-common-strict/exports-named/expected.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/exports-named/expected.js rename to test/fixtures/transformation/es6-modules-common-strict/exports-named/expected.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/exports-variable/actual.js b/test/fixtures/transformation/es6-modules-common-strict/exports-variable/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/exports-variable/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/exports-variable/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/exports-variable/expected.js b/test/fixtures/transformation/es6-modules-common-strict/exports-variable/expected.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/exports-variable/expected.js rename to test/fixtures/transformation/es6-modules-common-strict/exports-variable/expected.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/hoist-function-exports/actual.js b/test/fixtures/transformation/es6-modules-common-strict/hoist-function-exports/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/hoist-function-exports/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/hoist-function-exports/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/hoist-function-exports/expected.js b/test/fixtures/transformation/es6-modules-common-strict/hoist-function-exports/expected.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/hoist-function-exports/expected.js rename to test/fixtures/transformation/es6-modules-common-strict/hoist-function-exports/expected.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports-default/actual.js b/test/fixtures/transformation/es6-modules-common-strict/imports-default/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/imports-default/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/imports-default/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-strict/imports-default/expected.js b/test/fixtures/transformation/es6-modules-common-strict/imports-default/expected.js new file mode 100644 index 0000000000..32db9b239c --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-strict/imports-default/expected.js @@ -0,0 +1,4 @@ +"use strict"; + +var foo = require("foo")["default"]; +var foo = require("foo")["default"]; diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports-glob/actual.js b/test/fixtures/transformation/es6-modules-common-strict/imports-glob/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/imports-glob/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/imports-glob/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports-glob/expected.js b/test/fixtures/transformation/es6-modules-common-strict/imports-glob/expected.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/imports-glob/expected.js rename to test/fixtures/transformation/es6-modules-common-strict/imports-glob/expected.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports-mixing/actual.js b/test/fixtures/transformation/es6-modules-common-strict/imports-mixing/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/imports-mixing/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/imports-mixing/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-strict/imports-mixing/expected.js b/test/fixtures/transformation/es6-modules-common-strict/imports-mixing/expected.js new file mode 100644 index 0000000000..57bcfd38fc --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-strict/imports-mixing/expected.js @@ -0,0 +1,4 @@ +"use strict"; + +var foo = require("foo")["default"]; +var xyz = require("foo").baz; diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports-named/actual.js b/test/fixtures/transformation/es6-modules-common-strict/imports-named/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/imports-named/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/imports-named/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports-named/expected.js b/test/fixtures/transformation/es6-modules-common-strict/imports-named/expected.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/imports-named/expected.js rename to test/fixtures/transformation/es6-modules-common-strict/imports-named/expected.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports/actual.js b/test/fixtures/transformation/es6-modules-common-strict/imports/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/imports/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/imports/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/imports/expected.js b/test/fixtures/transformation/es6-modules-common-strict/imports/expected.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/imports/expected.js rename to test/fixtures/transformation/es6-modules-common-strict/imports/expected.js diff --git a/test/fixtures/transformation/es6-modules-common-strict/options.json b/test/fixtures/transformation/es6-modules-common-strict/options.json new file mode 100644 index 0000000000..42fca89301 --- /dev/null +++ b/test/fixtures/transformation/es6-modules-common-strict/options.json @@ -0,0 +1,3 @@ +{ + "modules": "commonStrict" +} diff --git a/test/fixtures/transformation/es6-modules-common-interop/overview/actual.js b/test/fixtures/transformation/es6-modules-common-strict/overview/actual.js similarity index 100% rename from test/fixtures/transformation/es6-modules-common-interop/overview/actual.js rename to test/fixtures/transformation/es6-modules-common-strict/overview/actual.js diff --git a/test/fixtures/transformation/es6-modules-common-interop/overview/expected.js b/test/fixtures/transformation/es6-modules-common-strict/overview/expected.js similarity index 66% rename from test/fixtures/transformation/es6-modules-common-interop/overview/expected.js rename to test/fixtures/transformation/es6-modules-common-strict/overview/expected.js index 208d3a3d3b..614b23e905 100644 --- a/test/fixtures/transformation/es6-modules-common-interop/overview/expected.js +++ b/test/fixtures/transformation/es6-modules-common-strict/overview/expected.js @@ -1,17 +1,12 @@ "use strict"; -var _interopRequire = function (obj) { - return obj && (obj["default"] || obj); -}; - require("foo"); require("foo-bar"); require("./directory/foo-bar"); -var foo = _interopRequire(require("foo")); - +var foo = require("foo")["default"]; var foo = require("foo"); var bar = require("foo").bar; diff --git a/test/fixtures/transformation/es6-modules-common/exports-default/expected.js b/test/fixtures/transformation/es6-modules-common/exports-default/expected.js index 8c68ab4224..ef8ba56786 100644 --- a/test/fixtures/transformation/es6-modules-common/exports-default/expected.js +++ b/test/fixtures/transformation/es6-modules-common/exports-default/expected.js @@ -1,15 +1,15 @@ "use strict"; -exports["default"] = 42; -exports["default"] = {}; -exports["default"] = []; -exports["default"] = foo; -exports["default"] = function () {}; +module.exports = foo; +module.exports = 42; +module.exports = {}; +module.exports = []; +module.exports = foo; +module.exports = function () {}; -exports["default"] = function () {}; +module.exports = function () {}; function foo() {} -exports["default"] = foo; var Foo = function Foo() {}; -exports["default"] = Foo; +module.exports = Foo; diff --git a/test/fixtures/transformation/es6-modules-common/imports-default/expected.js b/test/fixtures/transformation/es6-modules-common/imports-default/expected.js index 32db9b239c..2a84fb6d1e 100644 --- a/test/fixtures/transformation/es6-modules-common/imports-default/expected.js +++ b/test/fixtures/transformation/es6-modules-common/imports-default/expected.js @@ -1,4 +1,9 @@ "use strict"; -var foo = require("foo")["default"]; -var foo = require("foo")["default"]; +var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); +}; + +var foo = _interopRequire(require("foo")); + +var foo = _interopRequire(require("foo")); diff --git a/test/fixtures/transformation/es6-modules-common/imports-mixing/expected.js b/test/fixtures/transformation/es6-modules-common/imports-mixing/expected.js index 57bcfd38fc..09ea4cec86 100644 --- a/test/fixtures/transformation/es6-modules-common/imports-mixing/expected.js +++ b/test/fixtures/transformation/es6-modules-common/imports-mixing/expected.js @@ -1,4 +1,9 @@ "use strict"; -var foo = require("foo")["default"]; +var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); +}; + +var foo = _interopRequire(require("foo")); + var xyz = require("foo").baz; diff --git a/test/fixtures/transformation/es6-modules-common/overview/expected.js b/test/fixtures/transformation/es6-modules-common/overview/expected.js index 614b23e905..f0d7868fc9 100644 --- a/test/fixtures/transformation/es6-modules-common/overview/expected.js +++ b/test/fixtures/transformation/es6-modules-common/overview/expected.js @@ -1,12 +1,17 @@ "use strict"; +var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); +}; + require("foo"); require("foo-bar"); require("./directory/foo-bar"); -var foo = require("foo")["default"]; +var foo = _interopRequire(require("foo")); + var foo = require("foo"); var bar = require("foo").bar; @@ -14,4 +19,4 @@ var bar = require("foo").foo; exports.test = test; var test = exports.test = 5; -exports["default"] = test; +exports = module.exports = test;