diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js b/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js index bb9ca779f4..d7696cf557 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js @@ -2,7 +2,7 @@ import hoistVariables from "babel-helper-hoist-variables"; import template from "babel-template"; let buildTemplate = template(` - System.register(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER) { + System.register(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) { BEFORE_BODY; return { setters: [SETTERS], @@ -52,9 +52,19 @@ export default function ({ types: t }) { inherits: require("babel-plugin-transform-strict-mode"), visitor: { + ReferencedIdentifier(path, state) { + if (path.node.name == "__moduleName" && !path.scope.hasBinding("__moduleName")) { + path.replaceWith(t.memberExpression(state.contextIdent, t.identifier("id"))); + } + }, + Program: { - exit(path) { + enter(path, state) { + state.contextIdent = path.scope.generateUidIdentifier("context"); + }, + exit(path, state) { let exportIdent = path.scope.generateUidIdentifier("export"); + let contextIdent = state.contextIdent; let exportNames = Object.create(null); let modules = Object.create(null); @@ -241,7 +251,8 @@ export default function ({ types: t }) { SETTERS: setters, SOURCES: sources, BODY: path.node.body, - EXPORT_IDENTIFIER: exportIdent + EXPORT_IDENTIFIER: exportIdent, + CONTEXT_IDENTIFIER: contextIdent }) ]; } diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-default/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-default/expected.js index cce3c60971..f4863a15a9 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-default/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-default/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register([], function (_export) { +System.register([], function (_export, _context) { _export("default", function () {}); _export("default", class {}); diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-from/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-from/expected.js index 45f1c4242a..f5f9929a13 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-from/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-from/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register(["foo"], function (_export) { +System.register(["foo"], function (_export, _context) { return { setters: [function (_foo) { var _exportObj = {}; diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-named/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-named/expected.js index c276f757f9..5cbaf37b55 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-named/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-named/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register([], function (_export) { +System.register([], function (_export, _context) { return { setters: [], execute: function () { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-variable/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-variable/expected.js index 0eabd0cb66..53c351f83d 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-variable/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/exports-variable/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register([], function (_export) { +System.register([], function (_export, _context) { return { setters: [], execute: function () { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/get-module-name-option/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/get-module-name-option/expected.js index bd650c0abc..9c667425c1 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/get-module-name-option/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/get-module-name-option/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register("my custom module name", [], function (_export) { +System.register("my custom module name", [], function (_export, _context) { return { setters: [], execute: function () {} diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/hoist-function-exports/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/hoist-function-exports/expected.js index a3dce2d6f3..795fd910ee 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/hoist-function-exports/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/hoist-function-exports/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register(["./evens"], function (_export) { +System.register(["./evens"], function (_export, _context) { var isEven, p, a, i, j, isOdd; return { setters: [function (_evens) { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-default/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-default/expected.js index c643ce1434..ae6c560d0a 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-default/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-default/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register(["foo"], function (_export) { +System.register(["foo"], function (_export, _context) { var foo, foo2; return { setters: [function (_foo) { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-glob/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-glob/expected.js index acd0e1efcf..884f4282c2 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-glob/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-glob/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register(["foo"], function (_export) { +System.register(["foo"], function (_export, _context) { var foo; return { setters: [function (_foo) { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-mixing/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-mixing/expected.js index 559959c987..5dd20ec349 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-mixing/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-mixing/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register(["foo"], function (_export) { +System.register(["foo"], function (_export, _context) { var foo, xyz; return { setters: [function (_foo) { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-named/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-named/expected.js index 9b8eb605bf..d8200b9d22 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-named/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports-named/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register(["foo"], function (_export) { +System.register(["foo"], function (_export, _context) { var bar, bar2, baz, baz2, baz3, xyz; return { setters: [function (_foo) { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports/expected.js index dcd2757e57..0d1d67cafa 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/imports/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register(["foo", "foo-bar", "./directory/foo-bar"], function (_export) { +System.register(["foo", "foo-bar", "./directory/foo-bar"], function (_export, _context) { return { setters: [function (_foo) {}, function (_fooBar) {}, function (_directoryFooBar) {}], execute: function () {} diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/module-name/actual.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/module-name/actual.js new file mode 100644 index 0000000000..f022135cd8 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/module-name/actual.js @@ -0,0 +1 @@ +export var name = __moduleName; \ No newline at end of file diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/module-name/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/module-name/expected.js new file mode 100644 index 0000000000..d0074c7ccc --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/module-name/expected.js @@ -0,0 +1,13 @@ +"use strict"; + +System.register([], function (_export, _context) { + var name; + return { + setters: [], + execute: function () { + _export("name", name = _context.id); + + _export("name", name); + } + }; +}); diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/overview/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/overview/expected.js index fd866b05fb..46c4de062e 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/overview/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/overview/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register(["foo", "foo-bar", "./directory/foo-bar"], function (_export) { +System.register(["foo", "foo-bar", "./directory/foo-bar"], function (_export, _context) { var foo, foo2, bar, bar2, test2; return { setters: [function (_foo) { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/remap/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/remap/expected.js index 1e4cedb987..e3dc453b03 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/remap/expected.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/remap/expected.js @@ -1,6 +1,6 @@ "use strict"; -System.register([], function (_export) { +System.register([], function (_export, _context) { var test, a, b, d; return { setters: [],