diff --git a/packages/babel-plugin-polyfill-regenerator/src/index.ts b/packages/babel-plugin-polyfill-regenerator/src/index.ts index 254503c2..ba7e9d4a 100644 --- a/packages/babel-plugin-polyfill-regenerator/src/index.ts +++ b/packages/babel-plugin-polyfill-regenerator/src/index.ts @@ -8,7 +8,16 @@ type Options = { }; }; -export default defineProvider(({ debug }, options) => { +export default defineProvider(({ debug, targets, babel }, options) => { + if (!shallowEqual(targets, babel.targets())) { + throw new Error( + "This plugin does not use the targets option. Only preset-env's targets" + + " or top-level targets need to be configured for this plugin to work." + + " See https://github.com/babel/babel-polyfills/issues/36 for more" + + " details", + ); + } + const { [runtimeCompat]: { useBabelRuntime } = { useBabelRuntime: "" } } = options; @@ -39,3 +48,7 @@ export default defineProvider(({ debug }, options) => { const isRegenerator = meta => meta.kind === "global" && meta.name === "regeneratorRuntime"; + +function shallowEqual(obj1: any, obj2: any) { + return JSON.stringify(obj1) === JSON.stringify(obj2); +} diff --git a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-global/generator-native-support/options.json b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-global/generator-native-support/options.json index ed04746f..59a1e308 100644 --- a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-global/generator-native-support/options.json +++ b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-global/generator-native-support/options.json @@ -3,10 +3,7 @@ [ "@@/polyfill-regenerator", { - "method": "usage-global", - "targets": { - "node": 6 - } + "method": "usage-global" } ] ], @@ -21,4 +18,4 @@ } ] ] -} \ No newline at end of file +} diff --git a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/all/options.json b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/all/options.json index d18728a6..e3c921e3 100644 --- a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/all/options.json +++ b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/all/options.json @@ -7,4 +7,4 @@ } ] ] -} \ No newline at end of file +} diff --git a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/options.json b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/options.json index d18728a6..e3c921e3 100644 --- a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/options.json +++ b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/options.json @@ -7,4 +7,4 @@ } ] ] -} \ No newline at end of file +} diff --git a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/preset-env-supported/options.json b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/preset-env-supported/options.json index 3b57a25a..2bf1816c 100644 --- a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/preset-env-supported/options.json +++ b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/preset-env-supported/options.json @@ -1,12 +1,12 @@ { + "targets": { + "chrome": 70 + }, "plugins": [ [ "@@/polyfill-regenerator", { - "method": "usage-pure", - "targets": { - "chrome": 70 - } + "method": "usage-pure" } ] ], @@ -14,11 +14,8 @@ [ "@babel/preset-env", { - "modules": false, - "targets": { - "chrome": 70 - } + "modules": false } ] ] -} \ No newline at end of file +} diff --git a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/preset-env-unsupported/options.json b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/preset-env-unsupported/options.json index f3a7872c..be0ed5c8 100644 --- a/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/preset-env-unsupported/options.json +++ b/packages/babel-plugin-polyfill-regenerator/test/fixtures/usage-pure/preset-env-unsupported/options.json @@ -1,12 +1,12 @@ { + "targets": { + "chrome": 40 + }, "plugins": [ [ "@@/polyfill-regenerator", { - "method": "usage-pure", - "targets": { - "chrome": 40 - } + "method": "usage-pure" } ] ], @@ -14,11 +14,8 @@ [ "@babel/preset-env", { - "modules": false, - "targets": { - "chrome": 40 - } + "modules": false } ] ] -} \ No newline at end of file +} diff --git a/packages/babel-plugin-polyfill-regenerator/test/options.js b/packages/babel-plugin-polyfill-regenerator/test/options.js new file mode 100644 index 00000000..ffaa0f04 --- /dev/null +++ b/packages/babel-plugin-polyfill-regenerator/test/options.js @@ -0,0 +1,39 @@ +import * as babel from "@babel/core"; +import polyfillRegenerator from "../lib"; + +function transform(code, babelOpts, pluginOpts) { + return babel.transformSync(code, { + configFile: false, + ...babelOpts, + plugins: [[polyfillRegenerator, pluginOpts]], + }); +} + +describe("targets", () => { + it("is not supported", () => { + expect(() => + transform( + "code", + {}, + { + method: "usage-pure", + targets: { chrome: 50 }, + }, + ), + ).toThrow(/targets/); + }); +}); + +describe("top-level targets", () => { + it("is supported", () => { + expect(() => + transform( + "code", + { targets: { chrome: 50 } }, + { + method: "usage-pure", + }, + ), + ).not.toThrow(/targets/); + }); +});