You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							309 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							309 lines
						
					
					
						
							11 KiB
						
					
					
				| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|   value: true
 | |
| });
 | |
| exports.getPolyfillPlugins = exports.getModulesPluginNames = exports.default = void 0;
 | |
| exports.isPluginRequired = isPluginRequired;
 | |
| exports.transformIncludesAndExcludes = void 0;
 | |
| var _semver = require("semver");
 | |
| var _debug = require("./debug");
 | |
| var _getOptionSpecificExcludes = require("./get-option-specific-excludes");
 | |
| var _filterItems = require("./filter-items");
 | |
| var _moduleTransformations = require("./module-transformations");
 | |
| var _normalizeOptions = require("./normalize-options");
 | |
| var _shippedProposals = require("./shipped-proposals");
 | |
| var _pluginsCompatData = require("./plugins-compat-data");
 | |
| var _regenerator = require("./polyfills/regenerator");
 | |
| var _babelPolyfill = require("./polyfills/babel-polyfill");
 | |
| var _babelPluginPolyfillCorejs = require("babel-plugin-polyfill-corejs2");
 | |
| var _babelPluginPolyfillCorejs2 = require("babel-plugin-polyfill-corejs3");
 | |
| var _babelPluginPolyfillRegenerator = require("babel-plugin-polyfill-regenerator");
 | |
| var _helperCompilationTargets = require("@babel/helper-compilation-targets");
 | |
| var _availablePlugins = require("./available-plugins");
 | |
| var _helperPluginUtils = require("@babel/helper-plugin-utils");
 | |
| const pluginCoreJS2 = _babelPluginPolyfillCorejs.default || _babelPluginPolyfillCorejs;
 | |
| const pluginCoreJS3 = _babelPluginPolyfillCorejs2.default || _babelPluginPolyfillCorejs2;
 | |
| const pluginRegenerator = _babelPluginPolyfillRegenerator.default || _babelPluginPolyfillRegenerator;
 | |
| 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 pluginLists = {
 | |
|   withProposals: {
 | |
|     withoutBugfixes: _pluginsCompatData.plugins,
 | |
|     withBugfixes: Object.assign({}, _pluginsCompatData.plugins, _pluginsCompatData.pluginsBugfixes)
 | |
|   },
 | |
|   withoutProposals: {
 | |
|     withoutBugfixes: filterStageFromList(_pluginsCompatData.plugins, _shippedProposals.proposalPlugins),
 | |
|     withBugfixes: filterStageFromList(Object.assign({}, _pluginsCompatData.plugins, _pluginsCompatData.pluginsBugfixes), _shippedProposals.proposalPlugins)
 | |
|   }
 | |
| };
 | |
| function getPluginList(proposals, bugfixes) {
 | |
|   if (proposals) {
 | |
|     if (bugfixes) return pluginLists.withProposals.withBugfixes;else return pluginLists.withProposals.withoutBugfixes;
 | |
|   } else {
 | |
|     if (bugfixes) return pluginLists.withoutProposals.withBugfixes;else return pluginLists.withoutProposals.withoutBugfixes;
 | |
|   }
 | |
| }
 | |
| 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 = opt.match(/^(es|es6|es7|esnext|web)\./) ? "builtIns" : "plugins";
 | |
|     result[target].add(opt);
 | |
|     return result;
 | |
|   }, {
 | |
|     all: opts,
 | |
|     plugins: new Set(),
 | |
|     builtIns: new Set()
 | |
|   });
 | |
| };
 | |
| exports.transformIncludesAndExcludes = transformIncludesAndExcludes;
 | |
| const getModulesPluginNames = ({
 | |
|   modules,
 | |
|   transformations,
 | |
|   shouldTransformESM,
 | |
|   shouldTransformDynamicImport,
 | |
|   shouldTransformExportNamespaceFrom,
 | |
|   shouldParseTopLevelAwait
 | |
| }) => {
 | |
|   const modulesPluginNames = [];
 | |
|   if (modules !== false && transformations[modules]) {
 | |
|     if (shouldTransformESM) {
 | |
|       modulesPluginNames.push(transformations[modules]);
 | |
|     }
 | |
|     if (shouldTransformDynamicImport && shouldTransformESM && modules !== "umd") {
 | |
|       modulesPluginNames.push("transform-dynamic-import");
 | |
|     } else {
 | |
|       if (shouldTransformDynamicImport) {
 | |
|         console.warn("Dynamic import can only be supported when transforming ES modules" + " to AMD, CommonJS or SystemJS. Only the parser plugin will be enabled.");
 | |
|       }
 | |
|       modulesPluginNames.push("syntax-dynamic-import");
 | |
|     }
 | |
|   } else {
 | |
|     modulesPluginNames.push("syntax-dynamic-import");
 | |
|   }
 | |
|   if (shouldTransformExportNamespaceFrom) {
 | |
|     modulesPluginNames.push("transform-export-namespace-from");
 | |
|   } else {
 | |
|     modulesPluginNames.push("syntax-export-namespace-from");
 | |
|   }
 | |
|   if (shouldParseTopLevelAwait) {
 | |
|     modulesPluginNames.push("syntax-top-level-await");
 | |
|   }
 | |
|   return modulesPluginNames;
 | |
| };
 | |
| exports.getModulesPluginNames = getModulesPluginNames;
 | |
| const getPolyfillPlugins = ({
 | |
|   useBuiltIns,
 | |
|   corejs,
 | |
|   polyfillTargets,
 | |
|   include,
 | |
|   exclude,
 | |
|   proposals,
 | |
|   shippedProposals,
 | |
|   regenerator,
 | |
|   debug
 | |
| }) => {
 | |
|   const polyfillPlugins = [];
 | |
|   if (useBuiltIns === "usage" || useBuiltIns === "entry") {
 | |
|     const pluginOptions = {
 | |
|       method: `${useBuiltIns}-global`,
 | |
|       version: corejs ? corejs.toString() : undefined,
 | |
|       targets: polyfillTargets,
 | |
|       include,
 | |
|       exclude,
 | |
|       proposals,
 | |
|       shippedProposals,
 | |
|       debug
 | |
|     };
 | |
|     if (corejs) {
 | |
|       if (useBuiltIns === "usage") {
 | |
|         if (corejs.major === 2) {
 | |
|           polyfillPlugins.push([pluginCoreJS2, pluginOptions], [_babelPolyfill.default, {
 | |
|             usage: true
 | |
|           }]);
 | |
|         } else {
 | |
|           polyfillPlugins.push([pluginCoreJS3, pluginOptions], [_babelPolyfill.default, {
 | |
|             usage: true,
 | |
|             deprecated: true
 | |
|           }]);
 | |
|         }
 | |
|         if (regenerator) {
 | |
|           polyfillPlugins.push([pluginRegenerator, {
 | |
|             method: "usage-global",
 | |
|             debug
 | |
|           }]);
 | |
|         }
 | |
|       } else {
 | |
|         if (corejs.major === 2) {
 | |
|           polyfillPlugins.push([_babelPolyfill.default, {
 | |
|             regenerator
 | |
|           }], [pluginCoreJS2, pluginOptions]);
 | |
|         } else {
 | |
|           polyfillPlugins.push([pluginCoreJS3, pluginOptions], [_babelPolyfill.default, {
 | |
|             deprecated: true
 | |
|           }]);
 | |
|           if (!regenerator) {
 | |
|             polyfillPlugins.push([_regenerator.default, pluginOptions]);
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return polyfillPlugins;
 | |
| };
 | |
| exports.getPolyfillPlugins = getPolyfillPlugins;
 | |
| function getLocalTargets(optionsTargets, ignoreBrowserslistConfig, configPath, browserslistEnv) {
 | |
|   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
 | |
|   });
 | |
| }
 | |
| function supportsStaticESM(caller) {
 | |
|   return !!(caller != null && caller.supportsStaticESM);
 | |
| }
 | |
| function supportsDynamicImport(caller) {
 | |
|   return !!(caller != null && caller.supportsDynamicImport);
 | |
| }
 | |
| function supportsExportNamespaceFrom(caller) {
 | |
|   return !!(caller != null && caller.supportsExportNamespaceFrom);
 | |
| }
 | |
| function supportsTopLevelAwait(caller) {
 | |
|   return !!(caller != null && caller.supportsTopLevelAwait);
 | |
| }
 | |
| var _default = (0, _helperPluginUtils.declarePreset)((api, opts) => {
 | |
|   api.assertVersion(7);
 | |
|   const babelTargets = api.targets();
 | |
|   const {
 | |
|     bugfixes,
 | |
|     configPath,
 | |
|     debug,
 | |
|     exclude: optionsExclude,
 | |
|     forceAllTransforms,
 | |
|     ignoreBrowserslistConfig,
 | |
|     include: optionsInclude,
 | |
|     loose,
 | |
|     modules,
 | |
|     shippedProposals,
 | |
|     spec,
 | |
|     targets: optionsTargets,
 | |
|     useBuiltIns,
 | |
|     corejs: {
 | |
|       version: corejs,
 | |
|       proposals
 | |
|     },
 | |
|     browserslistEnv
 | |
|   } = (0, _normalizeOptions.default)(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);
 | |
|   }
 | |
|   const transformTargets = forceAllTransforms || hasUglifyTarget ? {} : targets;
 | |
|   const include = transformIncludesAndExcludes(optionsInclude);
 | |
|   const exclude = transformIncludesAndExcludes(optionsExclude);
 | |
|   const compatData = getPluginList(shippedProposals, bugfixes);
 | |
|   const shouldSkipExportNamespaceFrom = modules === "auto" && (api.caller == null ? void 0 : api.caller(supportsExportNamespaceFrom)) || modules === false && !(0, _helperCompilationTargets.isRequired)("transform-export-namespace-from", transformTargets, {
 | |
|     compatData,
 | |
|     includes: include.plugins,
 | |
|     excludes: exclude.plugins
 | |
|   });
 | |
|   const modulesPluginNames = getModulesPluginNames({
 | |
|     modules,
 | |
|     transformations: _moduleTransformations.default,
 | |
|     shouldTransformESM: modules !== "auto" || !(api.caller != null && api.caller(supportsStaticESM)),
 | |
|     shouldTransformDynamicImport: modules !== "auto" || !(api.caller != null && api.caller(supportsDynamicImport)),
 | |
|     shouldTransformExportNamespaceFrom: !shouldSkipExportNamespaceFrom,
 | |
|     shouldParseTopLevelAwait: !api.caller || api.caller(supportsTopLevelAwait)
 | |
|   });
 | |
|   const pluginNames = (0, _helperCompilationTargets.filterItems)(compatData, include.plugins, exclude.plugins, transformTargets, modulesPluginNames, (0, _getOptionSpecificExcludes.default)({
 | |
|     loose
 | |
|   }), _shippedProposals.pluginSyntaxMap);
 | |
|   (0, _filterItems.removeUnnecessaryItems)(pluginNames, _pluginsCompatData.overlappingPlugins);
 | |
|   (0, _filterItems.removeUnsupportedItems)(pluginNames, api.version);
 | |
|   if (shippedProposals) {
 | |
|     (0, _filterItems.addProposalSyntaxPlugins)(pluginNames, _shippedProposals.proposalSyntaxPlugins);
 | |
|   }
 | |
|   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"
 | |
|       }];
 | |
|     }
 | |
|     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: ${modules.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.default = _default;
 | |
| 
 | |
| //# sourceMappingURL=index.js.map
 |