From f8fe8eaab1e3e5121b83b1e2145d09f354a2742e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 29 Jan 2021 13:14:13 -0500 Subject: [PATCH] breaking: throw on missing dynamic import when `import()` is seen in systemjs (#12700) --- .../systemjs/missing-plugin-babel-7/input.mjs | 3 +++ .../systemjs/missing-plugin-babel-7/options.json | 8 ++++++++ .../output.mjs | 1 - .../stderr.txt | 0 .../test/fixtures/systemjs/missing-plugin/input.mjs | 2 -- .../fixtures/systemjs/missing-plugin/options.json | 5 +++-- .../src/index.js | 12 +++++++++++- 7 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/input.mjs create mode 100644 packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/options.json rename packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/{missing-plugin => missing-plugin-babel-7}/output.mjs (80%) rename packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/{missing-plugin => missing-plugin-babel-7}/stderr.txt (100%) diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/input.mjs b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/input.mjs new file mode 100644 index 0000000000..968ad7d801 --- /dev/null +++ b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/input.mjs @@ -0,0 +1,3 @@ +import "a"; + +import("b"); diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/options.json b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/options.json new file mode 100644 index 0000000000..1ab6800bf0 --- /dev/null +++ b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/options.json @@ -0,0 +1,8 @@ +{ + "validateLogs": true, + "plugins": [ + "transform-modules-systemjs", + "external-helpers" + ], + "BABEL_8_BREAKING": false +} diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/output.mjs b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/output.mjs similarity index 80% rename from packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/output.mjs rename to packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/output.mjs index c15bc82fb8..03d6d7cdde 100644 --- a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/output.mjs +++ b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/output.mjs @@ -4,7 +4,6 @@ System.register(["a"], function (_export, _context) { return { setters: [function (_a) {}], execute: function () { - // TODO: This should throw in Babel 8 _context.import("b"); } }; diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/stderr.txt b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/stderr.txt similarity index 100% rename from packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/stderr.txt rename to packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin-babel-7/stderr.txt diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/input.mjs b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/input.mjs index 646314cdde..968ad7d801 100644 --- a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/input.mjs +++ b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/input.mjs @@ -1,5 +1,3 @@ -// TODO: This should throw in Babel 8 - import "a"; import("b"); diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/options.json b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/options.json index 28922079e5..a32b8cee58 100644 --- a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/options.json +++ b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/options.json @@ -1,7 +1,8 @@ { - "validateLogs": true, "plugins": [ "transform-modules-systemjs", "external-helpers" - ] + ], + "BABEL_8_BREAKING": true, + "throws": "ERROR: Dynamic import() transformation must be enabled using the\n @babel/plugin-proposal-dynamic-import plugin. Babel 8\n no longer transforms import() without using that plugin." } diff --git a/packages/babel-plugin-transform-modules-systemjs/src/index.js b/packages/babel-plugin-transform-modules-systemjs/src/index.js index 5dae63d7b5..4dd75d8146 100644 --- a/packages/babel-plugin-transform-modules-systemjs/src/index.js +++ b/packages/babel-plugin-transform-modules-systemjs/src/index.js @@ -28,6 +28,12 @@ WARNING: Dynamic import() transformation must be enabled using the no longer transform import() without using that plugin. `; +const MISSING_PLUGIN_ERROR = `\ +ERROR: Dynamic import() transformation must be enabled using the + @babel/plugin-proposal-dynamic-import plugin. Babel 8 + no longer transforms import() without using that plugin. +`; + //todo: use getExportSpecifierName in `helper-module-transforms` when this library is refactored to NodePath usage. export function getExportSpecifierName( @@ -226,7 +232,11 @@ export default declare((api, options) => { CallExpression(path, state: PluginState) { if (t.isImport(path.node.callee)) { if (!this.file.has("@babel/plugin-proposal-dynamic-import")) { - console.warn(MISSING_PLUGIN_WARNING); + if (process.env.BABEL_8_BREAKING) { + throw new Error(MISSING_PLUGIN_ERROR); + } else { + console.warn(MISSING_PLUGIN_WARNING); + } } path.replaceWith(