337 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			337 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
Object.defineProperty(exports, "__esModule", {
 | 
						|
  value: true
 | 
						|
});
 | 
						|
exports.default = void 0;
 | 
						|
exports.isPluginRequired = isPluginRequired;
 | 
						|
exports.transformIncludesAndExcludes = void 0;
 | 
						|
var _semver = require("semver");
 | 
						|
var _debug = require("./debug.js");
 | 
						|
var _filterItems = require("./filter-items.js");
 | 
						|
var _moduleTransformations = require("./module-transformations.js");
 | 
						|
var _normalizeOptions = require("./normalize-options.js");
 | 
						|
var _shippedProposals = require("./shipped-proposals.js");
 | 
						|
var _pluginsCompatData = require("./plugins-compat-data.js");
 | 
						|
var _babelPluginPolyfillCorejs = require("babel-plugin-polyfill-corejs3");
 | 
						|
var _babel7Plugins = require("./polyfills/babel-7-plugins.cjs");
 | 
						|
var _helperCompilationTargets = require("@babel/helper-compilation-targets");
 | 
						|
var _availablePlugins = require("./available-plugins.js");
 | 
						|
var _helperPluginUtils = require("@babel/helper-plugin-utils");
 | 
						|
const pluginCoreJS3 = _babelPluginPolyfillCorejs.default || _babelPluginPolyfillCorejs;
 | 
						|
function isPluginRequired(targets, support) {
 | 
						|
  return (0, _helperCompilationTargets.isRequired)("fake-name", targets, {
 | 
						|
    compatData: {
 | 
						|
      "fake-name": support
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 | 
						|
function filterStageFromList(list, stageList) {
 | 
						|
  return Object.keys(list).reduce((result, item) => {
 | 
						|
    if (!stageList.has(item)) {
 | 
						|
      result[item] = list[item];
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
  }, {});
 | 
						|
}
 | 
						|
const pluginsListWithProposals = Object.assign({}, _pluginsCompatData.plugins, _pluginsCompatData.pluginsBugfixes);
 | 
						|
const pluginsListWithuotProposals = filterStageFromList(pluginsListWithProposals, _shippedProposals.proposalPlugins);
 | 
						|
{
 | 
						|
  var pluginsListNoBugfixesWithProposals = _pluginsCompatData.plugins;
 | 
						|
  var pluginsListNoBugfixesWithoutProposals = filterStageFromList(_pluginsCompatData.plugins, _shippedProposals.proposalPlugins);
 | 
						|
}
 | 
						|
const getPlugin = pluginName => {
 | 
						|
  const plugin = _availablePlugins.default[pluginName]();
 | 
						|
  if (!plugin) {
 | 
						|
    throw new Error(`Could not find plugin "${pluginName}". Ensure there is an entry in ./available-plugins.js for it.`);
 | 
						|
  }
 | 
						|
  return plugin;
 | 
						|
};
 | 
						|
const transformIncludesAndExcludes = opts => {
 | 
						|
  return opts.reduce((result, opt) => {
 | 
						|
    const target = /^(?:es|es6|es7|esnext|web)\./.test(opt) ? "builtIns" : "plugins";
 | 
						|
    result[target].add(opt);
 | 
						|
    return result;
 | 
						|
  }, {
 | 
						|
    all: opts,
 | 
						|
    plugins: new Set(),
 | 
						|
    builtIns: new Set()
 | 
						|
  });
 | 
						|
};
 | 
						|
exports.transformIncludesAndExcludes = transformIncludesAndExcludes;
 | 
						|
function getSpecialModulesPluginNames(modules, shouldTransformDynamicImport, babelVersion) {
 | 
						|
  const modulesPluginNames = [];
 | 
						|
  if (modules) {
 | 
						|
    modulesPluginNames.push(_moduleTransformations.default[modules]);
 | 
						|
  }
 | 
						|
  if (shouldTransformDynamicImport) {
 | 
						|
    if (modules && modules !== "umd") {
 | 
						|
      modulesPluginNames.push("transform-dynamic-import");
 | 
						|
    } else {
 | 
						|
      console.warn("Dynamic import can only be transformed when transforming ES" + " modules to AMD, CommonJS or SystemJS.");
 | 
						|
    }
 | 
						|
  }
 | 
						|
  if (babelVersion[0] !== "8") {
 | 
						|
    if (!shouldTransformDynamicImport) {
 | 
						|
      modulesPluginNames.push("syntax-dynamic-import");
 | 
						|
    }
 | 
						|
    modulesPluginNames.push("syntax-top-level-await");
 | 
						|
    modulesPluginNames.push("syntax-import-meta");
 | 
						|
  }
 | 
						|
  return modulesPluginNames;
 | 
						|
}
 | 
						|
const getCoreJSOptions = ({
 | 
						|
  useBuiltIns,
 | 
						|
  corejs,
 | 
						|
  polyfillTargets,
 | 
						|
  include,
 | 
						|
  exclude,
 | 
						|
  proposals,
 | 
						|
  shippedProposals,
 | 
						|
  debug
 | 
						|
}) => ({
 | 
						|
  method: `${useBuiltIns}-global`,
 | 
						|
  version: corejs ? corejs.toString() : undefined,
 | 
						|
  targets: polyfillTargets,
 | 
						|
  include,
 | 
						|
  exclude,
 | 
						|
  proposals,
 | 
						|
  shippedProposals,
 | 
						|
  debug,
 | 
						|
  "#__secret_key__@babel/preset-env__compatibility": {
 | 
						|
    noRuntimeName: true
 | 
						|
  }
 | 
						|
});
 | 
						|
{
 | 
						|
  var getPolyfillPlugins = ({
 | 
						|
    useBuiltIns,
 | 
						|
    corejs,
 | 
						|
    polyfillTargets,
 | 
						|
    include,
 | 
						|
    exclude,
 | 
						|
    proposals,
 | 
						|
    shippedProposals,
 | 
						|
    regenerator,
 | 
						|
    debug
 | 
						|
  }) => {
 | 
						|
    const polyfillPlugins = [];
 | 
						|
    if (useBuiltIns === "usage" || useBuiltIns === "entry") {
 | 
						|
      const pluginOptions = getCoreJSOptions({
 | 
						|
        useBuiltIns,
 | 
						|
        corejs,
 | 
						|
        polyfillTargets,
 | 
						|
        include,
 | 
						|
        exclude,
 | 
						|
        proposals,
 | 
						|
        shippedProposals,
 | 
						|
        debug
 | 
						|
      });
 | 
						|
      if (corejs) {
 | 
						|
        {
 | 
						|
          if (useBuiltIns === "usage") {
 | 
						|
            if (corejs.major === 2) {
 | 
						|
              polyfillPlugins.push([_babel7Plugins.pluginCoreJS2, pluginOptions], [_babel7Plugins.legacyBabelPolyfillPlugin, {
 | 
						|
                usage: true
 | 
						|
              }]);
 | 
						|
            } else {
 | 
						|
              polyfillPlugins.push([pluginCoreJS3, pluginOptions], [_babel7Plugins.legacyBabelPolyfillPlugin, {
 | 
						|
                usage: true,
 | 
						|
                deprecated: true
 | 
						|
              }]);
 | 
						|
            }
 | 
						|
            if (regenerator) {
 | 
						|
              polyfillPlugins.push([_babel7Plugins.pluginRegenerator, {
 | 
						|
                method: "usage-global",
 | 
						|
                debug
 | 
						|
              }]);
 | 
						|
            }
 | 
						|
          } else {
 | 
						|
            if (corejs.major === 2) {
 | 
						|
              polyfillPlugins.push([_babel7Plugins.legacyBabelPolyfillPlugin, {
 | 
						|
                regenerator
 | 
						|
              }], [_babel7Plugins.pluginCoreJS2, pluginOptions]);
 | 
						|
            } else {
 | 
						|
              polyfillPlugins.push([pluginCoreJS3, pluginOptions], [_babel7Plugins.legacyBabelPolyfillPlugin, {
 | 
						|
                deprecated: true
 | 
						|
              }]);
 | 
						|
              if (!regenerator) {
 | 
						|
                polyfillPlugins.push([_babel7Plugins.removeRegeneratorEntryPlugin, pluginOptions]);
 | 
						|
              }
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return polyfillPlugins;
 | 
						|
  };
 | 
						|
  {
 | 
						|
    exports.getPolyfillPlugins = getPolyfillPlugins;
 | 
						|
  }
 | 
						|
}
 | 
						|
function getLocalTargets(optionsTargets, ignoreBrowserslistConfig, configPath, browserslistEnv, api) {
 | 
						|
  if (optionsTargets != null && optionsTargets.esmodules && optionsTargets.browsers) {
 | 
						|
    console.warn(`
 | 
						|
@babel/preset-env: esmodules and browsers targets have been specified together.
 | 
						|
\`browsers\` target, \`${optionsTargets.browsers.toString()}\` will be ignored.
 | 
						|
`);
 | 
						|
  }
 | 
						|
  return (0, _helperCompilationTargets.default)(optionsTargets, {
 | 
						|
    ignoreBrowserslistConfig,
 | 
						|
    configPath,
 | 
						|
    browserslistEnv,
 | 
						|
    onBrowserslistConfigFound(config) {
 | 
						|
      api.addExternalDependency(config);
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 | 
						|
function supportsStaticESM(caller) {
 | 
						|
  return !!(caller != null && caller.supportsStaticESM);
 | 
						|
}
 | 
						|
function supportsDynamicImport(caller) {
 | 
						|
  return !!(caller != null && caller.supportsDynamicImport);
 | 
						|
}
 | 
						|
function supportsExportNamespaceFrom(caller) {
 | 
						|
  return !!(caller != null && caller.supportsExportNamespaceFrom);
 | 
						|
}
 | 
						|
var _default = exports.default = (0, _helperPluginUtils.declarePreset)((api, opts) => {
 | 
						|
  api.assertVersion(7);
 | 
						|
  const babelTargets = api.targets();
 | 
						|
  ;
 | 
						|
  const {
 | 
						|
    configPath,
 | 
						|
    debug,
 | 
						|
    exclude: optionsExclude,
 | 
						|
    forceAllTransforms,
 | 
						|
    ignoreBrowserslistConfig,
 | 
						|
    include: optionsInclude,
 | 
						|
    modules: optionsModules,
 | 
						|
    shippedProposals,
 | 
						|
    targets: optionsTargets,
 | 
						|
    useBuiltIns,
 | 
						|
    corejs: {
 | 
						|
      version: corejs,
 | 
						|
      proposals
 | 
						|
    },
 | 
						|
    browserslistEnv
 | 
						|
  } = (0, _normalizeOptions.default)(opts);
 | 
						|
  {
 | 
						|
    var {
 | 
						|
      loose,
 | 
						|
      spec = false,
 | 
						|
      bugfixes = false
 | 
						|
    } = opts;
 | 
						|
  }
 | 
						|
  let targets = babelTargets;
 | 
						|
  if (_semver.lt(api.version, "7.13.0") || opts.targets || opts.configPath || opts.browserslistEnv || opts.ignoreBrowserslistConfig) {
 | 
						|
    {
 | 
						|
      var hasUglifyTarget = false;
 | 
						|
      if (optionsTargets != null && optionsTargets.uglify) {
 | 
						|
        hasUglifyTarget = true;
 | 
						|
        delete optionsTargets.uglify;
 | 
						|
        console.warn(`
 | 
						|
The uglify target has been deprecated. Set the top level
 | 
						|
option \`forceAllTransforms: true\` instead.
 | 
						|
`);
 | 
						|
      }
 | 
						|
    }
 | 
						|
    targets = getLocalTargets(optionsTargets, ignoreBrowserslistConfig, configPath, browserslistEnv, api);
 | 
						|
  }
 | 
						|
  const transformTargets = forceAllTransforms || hasUglifyTarget ? {} : targets;
 | 
						|
  const include = transformIncludesAndExcludes(optionsInclude);
 | 
						|
  const exclude = transformIncludesAndExcludes(optionsExclude);
 | 
						|
  const compatData = bugfixes ? shippedProposals ? pluginsListWithProposals : pluginsListWithuotProposals : shippedProposals ? pluginsListNoBugfixesWithProposals : pluginsListNoBugfixesWithoutProposals;
 | 
						|
  const modules = optionsModules === "auto" ? api.caller(supportsStaticESM) ? false : "commonjs" : optionsModules;
 | 
						|
  const shouldTransformDynamicImport = optionsModules === "auto" ? !api.caller(supportsDynamicImport) : !!modules;
 | 
						|
  if (!exclude.plugins.has("transform-export-namespace-from") && (optionsModules === "auto" ? !api.caller(supportsExportNamespaceFrom) : !!modules)) {
 | 
						|
    include.plugins.add("transform-export-namespace-from");
 | 
						|
  }
 | 
						|
  const pluginNames = (0, _helperCompilationTargets.filterItems)(compatData, include.plugins, exclude.plugins, transformTargets, getSpecialModulesPluginNames(modules, shouldTransformDynamicImport, api.version), !loose ? undefined : ["transform-typeof-symbol"], _shippedProposals.pluginSyntaxMap);
 | 
						|
  if (shippedProposals) {
 | 
						|
    (0, _filterItems.addProposalSyntaxPlugins)(pluginNames, _shippedProposals.proposalSyntaxPlugins);
 | 
						|
  }
 | 
						|
  (0, _filterItems.removeUnsupportedItems)(pluginNames, api.version);
 | 
						|
  (0, _filterItems.removeUnnecessaryItems)(pluginNames, _pluginsCompatData.overlappingPlugins);
 | 
						|
  const polyfillPlugins = getPolyfillPlugins({
 | 
						|
    useBuiltIns,
 | 
						|
    corejs,
 | 
						|
    polyfillTargets: targets,
 | 
						|
    include: include.builtIns,
 | 
						|
    exclude: exclude.builtIns,
 | 
						|
    proposals,
 | 
						|
    shippedProposals,
 | 
						|
    regenerator: pluginNames.has("transform-regenerator"),
 | 
						|
    debug
 | 
						|
  });
 | 
						|
  const pluginUseBuiltIns = useBuiltIns !== false;
 | 
						|
  const plugins = Array.from(pluginNames).map(pluginName => {
 | 
						|
    if (pluginName === "transform-class-properties" || pluginName === "transform-private-methods" || pluginName === "transform-private-property-in-object") {
 | 
						|
      return [getPlugin(pluginName), {
 | 
						|
        loose: loose ? "#__internal__@babel/preset-env__prefer-true-but-false-is-ok-if-it-prevents-an-error" : "#__internal__@babel/preset-env__prefer-false-but-true-is-ok-if-it-prevents-an-error"
 | 
						|
      }];
 | 
						|
    }
 | 
						|
    if (pluginName === "syntax-import-attributes") {
 | 
						|
      return [getPlugin(pluginName), {
 | 
						|
        deprecatedAssertSyntax: true
 | 
						|
      }];
 | 
						|
    }
 | 
						|
    return [getPlugin(pluginName), {
 | 
						|
      spec,
 | 
						|
      loose,
 | 
						|
      useBuiltIns: pluginUseBuiltIns
 | 
						|
    }];
 | 
						|
  }).concat(polyfillPlugins);
 | 
						|
  if (debug) {
 | 
						|
    console.log("@babel/preset-env: `DEBUG` option");
 | 
						|
    console.log("\nUsing targets:");
 | 
						|
    console.log(JSON.stringify((0, _helperCompilationTargets.prettifyTargets)(targets), null, 2));
 | 
						|
    console.log(`\nUsing modules transform: ${optionsModules.toString()}`);
 | 
						|
    console.log("\nUsing plugins:");
 | 
						|
    pluginNames.forEach(pluginName => {
 | 
						|
      (0, _debug.logPlugin)(pluginName, targets, compatData);
 | 
						|
    });
 | 
						|
    if (!useBuiltIns) {
 | 
						|
      console.log("\nUsing polyfills: No polyfills were added, since the `useBuiltIns` option was not set.");
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return {
 | 
						|
    plugins
 | 
						|
  };
 | 
						|
});
 | 
						|
{
 | 
						|
  exports.getModulesPluginNames = ({
 | 
						|
    modules,
 | 
						|
    transformations,
 | 
						|
    shouldTransformESM,
 | 
						|
    shouldTransformDynamicImport,
 | 
						|
    shouldTransformExportNamespaceFrom
 | 
						|
  }) => {
 | 
						|
    const modulesPluginNames = [];
 | 
						|
    if (modules !== false && transformations[modules]) {
 | 
						|
      if (shouldTransformESM) {
 | 
						|
        modulesPluginNames.push(transformations[modules]);
 | 
						|
      }
 | 
						|
      if (shouldTransformDynamicImport) {
 | 
						|
        if (shouldTransformESM && modules !== "umd") {
 | 
						|
          modulesPluginNames.push("transform-dynamic-import");
 | 
						|
        } else {
 | 
						|
          console.warn("Dynamic import can only be transformed when transforming ES" + " modules to AMD, CommonJS or SystemJS.");
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    if (shouldTransformExportNamespaceFrom) {
 | 
						|
      modulesPluginNames.push("transform-export-namespace-from");
 | 
						|
    }
 | 
						|
    if (!shouldTransformDynamicImport) {
 | 
						|
      modulesPluginNames.push("syntax-dynamic-import");
 | 
						|
    }
 | 
						|
    if (!shouldTransformExportNamespaceFrom) {
 | 
						|
      modulesPluginNames.push("syntax-export-namespace-from");
 | 
						|
    }
 | 
						|
    modulesPluginNames.push("syntax-top-level-await");
 | 
						|
    modulesPluginNames.push("syntax-import-meta");
 | 
						|
    return modulesPluginNames;
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
//# sourceMappingURL=index.js.map
 |