diff --git a/packages/babel-plugin-external-helpers/src/index.js b/packages/babel-plugin-external-helpers/src/index.js index 98ec935adc..ef08966b2c 100644 --- a/packages/babel-plugin-external-helpers/src/index.js +++ b/packages/babel-plugin-external-helpers/src/index.js @@ -1,12 +1,24 @@ import { declare } from "@babel/helper-plugin-utils"; import { types as t } from "@babel/core"; -export default declare(api => { +export default declare((api, options) => { api.assertVersion(7); + const { helperVersion = "7.0.0-beta.0" } = options; + return { pre(file) { file.set("helperGenerator", name => { + // If the helper didn't exist yet at the version given, we bail + // out and let Babel either insert it directly, or throw an error + // so that plugins can handle that case properly. + if ( + file.availableHelper && + !file.availableHelper(name, helperVersion) + ) { + return; + } + return t.memberExpression( t.identifier("babelHelpers"), t.identifier(name), diff --git a/packages/babel-plugin-transform-runtime/src/index.js b/packages/babel-plugin-transform-runtime/src/index.js index dfb5d41306..876fea7641 100644 --- a/packages/babel-plugin-transform-runtime/src/index.js +++ b/packages/babel-plugin-transform-runtime/src/index.js @@ -14,6 +14,7 @@ export default declare((api, options) => { regenerator, useBuiltIns, useESModules, + version: runtimeVersion = "7.0.0-beta.0", } = options; const regeneratorEnabled = regenerator !== false; const notPolyfillOrDoesUseBuiltIns = polyfill === false || useBuiltIns; @@ -31,6 +32,16 @@ export default declare((api, options) => { pre(file) { if (helpers !== false) { file.set("helperGenerator", name => { + // If the helper didn't exist yet at the version given, we bail + // out and let Babel either insert it directly, or throw an error + // so that plugins can handle that case properly. + if ( + file.availableHelper && + !file.availableHelper(name, runtimeVersion) + ) { + return; + } + const isInteropHelper = HEADER_HELPERS.indexOf(name) !== -1; // Explicitly set the CommonJS interop helpers to their reserve