123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- "use strict";
- exports.__esModule = true;
- exports.transformIncludesAndExcludes = exports.isPluginRequired = undefined;
- exports.default = buildPreset;
- var _semver = require("semver");
- var _semver2 = _interopRequireDefault(_semver);
- var _builtIns = require("../data/built-ins.json");
- var _builtIns2 = _interopRequireDefault(_builtIns);
- var _defaultIncludes = require("./default-includes");
- var _moduleTransformations = require("./module-transformations");
- var _moduleTransformations2 = _interopRequireDefault(_moduleTransformations);
- var _normalizeOptions = require("./normalize-options.js");
- var _normalizeOptions2 = _interopRequireDefault(_normalizeOptions);
- var _plugins = require("../data/plugins.json");
- var _plugins2 = _interopRequireDefault(_plugins);
- var _transformPolyfillRequirePlugin = require("./transform-polyfill-require-plugin");
- var _transformPolyfillRequirePlugin2 = _interopRequireDefault(_transformPolyfillRequirePlugin);
- var _targetsParser = require("./targets-parser");
- var _targetsParser2 = _interopRequireDefault(_targetsParser);
- var _utils = require("./utils");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * Determine if a transformation is required
- *
- * NOTE: This assumes `supportedEnvironments` has already been parsed by `getTargets`
- *
- * @param {Object} supportedEnvironments An Object containing environment keys and the lowest
- * supported version as a value
- * @param {Object} plugin An Object containing environment keys and the lowest
- * version the feature was implemented in as a value
- * @return {Boolean} Whether or not the transformation is required
- */
- var isPluginRequired = exports.isPluginRequired = function isPluginRequired(supportedEnvironments, plugin) {
- var targetEnvironments = Object.keys(supportedEnvironments);
- if (targetEnvironments.length === 0) {
- return true;
- }
- var isRequiredForEnvironments = targetEnvironments.filter(function (environment) {
- // Feature is not implemented in that environment
- if (!plugin[environment]) {
- return true;
- }
- var lowestImplementedVersion = plugin[environment];
- var lowestTargetedVersion = supportedEnvironments[environment];
- if (!_semver2.default.valid(lowestTargetedVersion)) {
- throw new Error(
- // eslint-disable-next-line max-len
- "Invalid version passed for target \"" + environment + "\": \"" + lowestTargetedVersion + "\". Versions must be in semver format (major.minor.patch)");
- }
- return _semver2.default.gt((0, _utils.semverify)(lowestImplementedVersion), lowestTargetedVersion);
- });
- return isRequiredForEnvironments.length > 0;
- };
- var hasBeenLogged = false;
- var logPlugin = function logPlugin(plugin, targets, list) {
- var envList = list[plugin] || {};
- var filteredList = Object.keys(targets).reduce(function (a, b) {
- if (!envList[b] || _semver2.default.lt(targets[b], (0, _utils.semverify)(envList[b]))) {
- a[b] = (0, _utils.prettifyVersion)(targets[b]);
- }
- return a;
- }, {});
- var logStr = " " + plugin + " " + JSON.stringify(filteredList);
- console.log(logStr);
- };
- var filterItem = function filterItem(targets, exclusions, list, item) {
- var isDefault = _defaultIncludes.defaultWebIncludes.indexOf(item) >= 0;
- var notExcluded = exclusions.indexOf(item) === -1;
- if (isDefault) return notExcluded;
- var isRequired = isPluginRequired(targets, list[item]);
- return isRequired && notExcluded;
- };
- var getBuiltInTargets = function getBuiltInTargets(targets) {
- var builtInTargets = (0, _utils._extends)({}, targets);
- if (builtInTargets.uglify != null) {
- delete builtInTargets.uglify;
- }
- return builtInTargets;
- };
- var transformIncludesAndExcludes = exports.transformIncludesAndExcludes = function transformIncludesAndExcludes(opts) {
- return {
- all: opts,
- plugins: opts.filter(function (opt) {
- return !opt.match(/^(es\d+|web)\./);
- }),
- builtIns: opts.filter(function (opt) {
- return opt.match(/^(es\d+|web)\./);
- })
- };
- };
- function getPlatformSpecificDefaultFor(targets) {
- var targetNames = Object.keys(targets);
- var isAnyTarget = !targetNames.length;
- var isWebTarget = targetNames.some(function (name) {
- return name !== "node";
- });
- return isAnyTarget || isWebTarget ? _defaultIncludes.defaultWebIncludes : [];
- }
- function buildPreset(context) {
- var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var validatedOptions = (0, _normalizeOptions2.default)(opts);
- var debug = validatedOptions.debug,
- loose = validatedOptions.loose,
- moduleType = validatedOptions.moduleType,
- spec = validatedOptions.spec,
- useBuiltIns = validatedOptions.useBuiltIns;
- var targets = (0, _targetsParser2.default)(validatedOptions.targets);
- var include = transformIncludesAndExcludes(validatedOptions.include);
- var exclude = transformIncludesAndExcludes(validatedOptions.exclude);
- var filterPlugins = filterItem.bind(null, targets, exclude.plugins, _plugins2.default);
- var transformations = Object.keys(_plugins2.default).filter(filterPlugins).concat(include.plugins);
- var polyfills = void 0;
- var polyfillTargets = void 0;
- if (useBuiltIns) {
- polyfillTargets = getBuiltInTargets(targets);
- var filterBuiltIns = filterItem.bind(null, polyfillTargets, exclude.builtIns, _builtIns2.default);
- polyfills = Object.keys(_builtIns2.default).concat(getPlatformSpecificDefaultFor(polyfillTargets)).filter(filterBuiltIns).concat(include.builtIns);
- }
- if (debug && !hasBeenLogged) {
- hasBeenLogged = true;
- console.log("babel-preset-env: `DEBUG` option");
- console.log("\nUsing targets:");
- console.log(JSON.stringify((0, _utils.prettifyTargets)(targets), null, 2));
- console.log("\nModules transform: " + moduleType);
- console.log("\nUsing plugins:");
- transformations.forEach(function (transform) {
- logPlugin(transform, targets, _plugins2.default);
- });
- if (useBuiltIns && polyfills.length) {
- console.log("\nUsing polyfills:");
- polyfills.forEach(function (polyfill) {
- logPlugin(polyfill, polyfillTargets, _builtIns2.default);
- });
- }
- }
- var regenerator = transformations.indexOf("transform-regenerator") >= 0;
- var modulePlugin = moduleType !== false && _moduleTransformations2.default[moduleType];
- var plugins = [];
- // NOTE: not giving spec here yet to avoid compatibility issues when
- // babel-plugin-transform-es2015-modules-commonjs gets its spec mode
- modulePlugin && plugins.push([require("babel-plugin-" + modulePlugin), { loose: loose }]);
- plugins.push.apply(plugins, transformations.map(function (pluginName) {
- return [require("babel-plugin-" + pluginName), { spec: spec, loose: loose }];
- }));
- useBuiltIns && plugins.push([_transformPolyfillRequirePlugin2.default, { polyfills: polyfills, regenerator: regenerator }]);
- return {
- plugins: plugins
- };
- }
|