From 11a2f076929cac0c0253df368608a6002979c5f3 Mon Sep 17 00:00:00 2001 From: guybedford Date: Thu, 27 Oct 2016 13:02:29 +0200 Subject: [PATCH 1/3] support import() as contextual import in system module format --- .../src/index.js | 14 ++++++++++++++ .../fixtures/systemjs/dynamic-import/actual.js | 6 ++++++ .../fixtures/systemjs/dynamic-import/expected.js | 16 ++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js create mode 100644 packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js 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 ac8a8e2889..242f9e3753 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js @@ -2,6 +2,7 @@ import hoistVariables from "babel-helper-hoist-variables"; import template from "babel-template"; +import syntax from "babel-plugin-syntax-dynamic-import"; let buildTemplate = template(` SYSTEM_REGISTER(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) { @@ -22,6 +23,9 @@ let buildExportAll = template(` } `); + +const TYPE_IMPORT = "Import"; + export default function ({ types: t }) { let IGNORE_REASSIGNMENT_SYMBOL = Symbol(); @@ -68,7 +72,17 @@ export default function ({ types: t }) { }; return { + inherits: syntax, + visitor: { + + CallExpression(path, state) { + if (path.node.callee.type === TYPE_IMPORT) { + let contextIdent = state.contextIdent; + path.replaceWith(t.callExpression(t.memberExpression(contextIdent, t.identifier("import")), path.node.arguments)); + } + }, + ReferencedIdentifier(path, state) { if (path.node.name == "__moduleName" && !path.scope.hasBinding("__moduleName")) { path.replaceWith(t.memberExpression(state.contextIdent, t.identifier("id"))); diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js new file mode 100644 index 0000000000..6e6ea63962 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js @@ -0,0 +1,6 @@ +export function lazyLoadOperation () { + return import('./x') + .then(function (x) { + x.y(); + }); +} diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js new file mode 100644 index 0000000000..de2b2da619 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js @@ -0,0 +1,16 @@ +System.register([], function (_export, _context) { + "use strict"; + + function lazyLoadOperation() { + return _context.import('./x').then(function (x) { + x.y(); + }); + } + + _export('lazyLoadOperation', lazyLoadOperation); + + return { + setters: [], + execute: function () {} + }; +}); From d62403753cc3c7a9b71ce96d2a3256d948a28137 Mon Sep 17 00:00:00 2001 From: guybedford Date: Thu, 27 Oct 2016 13:07:51 +0200 Subject: [PATCH 2/3] babel-plugin-syntax-dynamic-import as a dependency of babel-plugin-transform-es2015-modules-systemjs --- .../babel-plugin-transform-es2015-modules-systemjs/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/package.json b/packages/babel-plugin-transform-es2015-modules-systemjs/package.json index 586893e7a3..dceafaf360 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/package.json +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/package.json @@ -8,6 +8,7 @@ "dependencies": { "babel-template": "^6.14.0", "babel-helper-hoist-variables": "^6.18.0", + "babel-plugin-syntax-dynamic-import": "^6.18.0", "babel-runtime": "^6.11.6" }, "keywords": [ From d8c83bba52dcd228e4a328d06003e26d1d6ad1fa Mon Sep 17 00:00:00 2001 From: guybedford Date: Fri, 11 Nov 2016 10:15:31 +0200 Subject: [PATCH 3/3] make syntax-dynamic-import optional --- .../package.json | 4 ++-- .../src/index.js | 3 --- .../{systemjs => dynamic-import}/dynamic-import/actual.js | 0 .../{systemjs => dynamic-import}/dynamic-import/expected.js | 0 .../test/fixtures/dynamic-import/options.json | 3 +++ 5 files changed, 5 insertions(+), 5 deletions(-) rename packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/{systemjs => dynamic-import}/dynamic-import/actual.js (100%) rename packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/{systemjs => dynamic-import}/dynamic-import/expected.js (100%) create mode 100644 packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/dynamic-import/options.json diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/package.json b/packages/babel-plugin-transform-es2015-modules-systemjs/package.json index dceafaf360..6184ea4433 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/package.json +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/package.json @@ -8,13 +8,13 @@ "dependencies": { "babel-template": "^6.14.0", "babel-helper-hoist-variables": "^6.18.0", - "babel-plugin-syntax-dynamic-import": "^6.18.0", "babel-runtime": "^6.11.6" }, "keywords": [ "babel-plugin" ], "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" + "babel-helper-plugin-test-runner": "^6.18.0", + "babel-plugin-syntax-dynamic-import": "^6.18.0" } } 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 242f9e3753..878a76e8c9 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,6 @@ import hoistVariables from "babel-helper-hoist-variables"; import template from "babel-template"; -import syntax from "babel-plugin-syntax-dynamic-import"; let buildTemplate = template(` SYSTEM_REGISTER(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) { @@ -72,8 +71,6 @@ export default function ({ types: t }) { }; return { - inherits: syntax, - visitor: { CallExpression(path, state) { diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/dynamic-import/dynamic-import/actual.js similarity index 100% rename from packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js rename to packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/dynamic-import/dynamic-import/actual.js diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/dynamic-import/dynamic-import/expected.js similarity index 100% rename from packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js rename to packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/dynamic-import/dynamic-import/expected.js diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/dynamic-import/options.json b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/dynamic-import/options.json new file mode 100644 index 0000000000..20631e3163 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/dynamic-import/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "syntax-dynamic-import", "transform-es2015-modules-systemjs"] +}