UNPKG

e-lado

Version:

[![CircleCI](https://circleci.com/gh/sharetribe/sharetribe/tree/master.svg?style=svg)](https://circleci.com/gh/sharetribe/sharetribe/tree/master) [![Dependency Status](https://gemnasium.com/sharetribe/sharetribe.png)](https://gemnasium.com/sharetribe/shar

337 lines (266 loc) 11.8 kB
"use strict"; exports.__esModule = true; exports.validateModulesOption = exports.validateLooseOption = exports.getTargets = exports.electronVersionToChromeVersion = exports.getCurrentNodeVersion = exports.isPluginRequired = exports.validIncludesAndExcludes = exports.MODULE_TRANSFORMATIONS = undefined; exports.validatePluginsOption = validatePluginsOption; exports.checkDuplicateIncludeExcludes = checkDuplicateIncludeExcludes; exports.default = buildPreset; var _plugins = require("../data/plugins.json"); var _plugins2 = _interopRequireDefault(_plugins); var _pluginFeatures = require("../data/plugin-features"); var _pluginFeatures2 = _interopRequireDefault(_pluginFeatures); var _builtIns = require("../data/built-ins.json"); var _builtIns2 = _interopRequireDefault(_builtIns); var _browserslist = require("browserslist"); var _browserslist2 = _interopRequireDefault(_browserslist); var _transformPolyfillRequirePlugin = require("./transform-polyfill-require-plugin"); var _transformPolyfillRequirePlugin2 = _interopRequireDefault(_transformPolyfillRequirePlugin); var _electronToChromium = require("../data/electron-to-chromium"); var _electronToChromium2 = _interopRequireDefault(_electronToChromium); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var MODULE_TRANSFORMATIONS = exports.MODULE_TRANSFORMATIONS = { "amd": "transform-es2015-modules-amd", "commonjs": "transform-es2015-modules-commonjs", "systemjs": "transform-es2015-modules-systemjs", "umd": "transform-es2015-modules-umd" }; var defaultInclude = ["web.timers", "web.immediate", "web.dom.iterable"]; var validIncludesAndExcludes = exports.validIncludesAndExcludes = [].concat(Object.keys(_pluginFeatures2.default), Object.keys(MODULE_TRANSFORMATIONS).map(function (m) { return MODULE_TRANSFORMATIONS[m]; }), Object.keys(_builtIns2.default), defaultInclude); /** * Determine if a transformation is required * @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 implmented in as a value * @return {Boolean} Whether or not the transformation is required */ var isPluginRequired = exports.isPluginRequired = function isPluginRequired(supportedEnvironments, plugin) { if (supportedEnvironments.browsers) { supportedEnvironments = getTargets(supportedEnvironments); } 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 (typeof lowestTargetedVersion === "string") { throw new Error("Target version must be a number, \n '" + lowestTargetedVersion + "' was given for '" + environment + "'"); } return lowestTargetedVersion < lowestImplementedVersion; }); return isRequiredForEnvironments.length > 0 ? true : false; }; var isBrowsersQueryValid = function isBrowsersQueryValid(browsers) { return typeof browsers === "string" || Array.isArray(browsers); }; var browserNameMap = { chrome: "chrome", edge: "edge", firefox: "firefox", ie: "ie", ios_saf: "ios", safari: "safari" }; var getLowestVersions = function getLowestVersions(browsers) { return browsers.reduce(function (all, browser) { var _browser$split = browser.split(" "), browserName = _browser$split[0], browserVersion = _browser$split[1]; var normalizedBrowserName = browserNameMap[browserName]; var parsedBrowserVersion = parseInt(browserVersion); if (normalizedBrowserName && !isNaN(parsedBrowserVersion)) { all[normalizedBrowserName] = Math.min(all[normalizedBrowserName] || Infinity, parsedBrowserVersion); } return all; }, {}); }; var mergeBrowsers = function mergeBrowsers(fromQuery, fromTarget) { return Object.keys(fromTarget).reduce(function (queryObj, targKey) { if (targKey !== "browsers") { queryObj[targKey] = fromTarget[targKey]; } return queryObj; }, fromQuery); }; var getCurrentNodeVersion = exports.getCurrentNodeVersion = function getCurrentNodeVersion() { return parseFloat(process.versions.node); }; var electronVersionToChromeVersion = exports.electronVersionToChromeVersion = function electronVersionToChromeVersion(semverVer) { semverVer = String(semverVer); if (semverVer === "1") { semverVer = "1.0"; } var m = semverVer.match(/^(\d+\.\d+)/); if (!m) { throw new Error("Electron version must be a semver version"); } var result = _electronToChromium2.default[m[1]]; if (!result) { throw new Error("Electron version " + m[1] + " is either too old or too new"); } return result; }; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var getTargets = exports.getTargets = function getTargets() { var targets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var targetOps = _extends({}, targets); if (targetOps.node === true || targetOps.node === "current") { targetOps.node = getCurrentNodeVersion(); } // Rewrite Electron versions to their Chrome equivalents if (targetOps.electron) { targetOps.chrome = electronVersionToChromeVersion(targetOps.electron); delete targetOps.electron; } var browserOpts = targetOps.browsers; if (isBrowsersQueryValid(browserOpts)) { var queryBrowsers = getLowestVersions((0, _browserslist2.default)(browserOpts)); return mergeBrowsers(queryBrowsers, targetOps); } return targetOps; }; // TODO: Allow specifying plugins as either shortened or full name // babel-plugin-transform-es2015-classes // transform-es2015-classes var validateLooseOption = exports.validateLooseOption = function validateLooseOption() { var looseOpt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (typeof looseOpt !== "boolean") { throw new Error("Preset env: 'loose' option must be a boolean."); } return looseOpt; }; var validateModulesOption = exports.validateModulesOption = function validateModulesOption() { var modulesOpt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "commonjs"; if (modulesOpt !== false && Object.keys(MODULE_TRANSFORMATIONS).indexOf(modulesOpt) === -1) { throw new Error("The 'modules' option must be 'false' to indicate no modules\n" + "or a module type which be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'"); } return modulesOpt; }; function validatePluginsOption() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var type = arguments[1]; if (!Array.isArray(opts)) { throw new Error("The '" + type + "' option must be an Array<string> of plugins/built-ins"); } var unknownOpts = []; opts.forEach(function (opt) { if (validIncludesAndExcludes.indexOf(opt) === -1) { unknownOpts.push(opt); } }); if (unknownOpts.length > 0) { throw new Error("Invalid plugins/built-ins '" + unknownOpts + "' passed to '" + type + "' option.\n Check data/[plugin-features|built-in-features].js in babel-preset-env"); } 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)\./); }) }; } var validateIncludeOption = function validateIncludeOption(opts) { return validatePluginsOption(opts, "include"); }; var validateExcludeOption = function validateExcludeOption(opts) { return validatePluginsOption(opts, "exclude"); }; function checkDuplicateIncludeExcludes(include, exclude) { var duplicates = []; include.forEach(function (opt) { if (exclude.indexOf(opt) >= 0) { duplicates.push(opt); } }); if (duplicates.length > 0) { throw new Error("Duplicate plugins/built-ins: '" + duplicates + "' found\n in both the \"include\" and \"exclude\" options."); } } var hasBeenLogged = false; var hasBeenWarned = false; var logPlugin = function logPlugin(plugin, targets, list) { var envList = list[plugin] || {}; var filteredList = Object.keys(targets).reduce(function (a, b) { a[b] = envList[b]; return a; }, {}); var logStr = " " + plugin + " " + JSON.stringify(filteredList); console.log(logStr); }; var filterItem = function filterItem(targets, exclusions, list, item) { var isDefault = defaultInclude.indexOf(item) >= 0; var notExcluded = exclusions.indexOf(item) === -1; if (isDefault) return notExcluded; var isRequired = isPluginRequired(targets, list[item]); return isRequired && notExcluded; }; function buildPreset(context) { var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var loose = validateLooseOption(opts.loose); var moduleType = validateModulesOption(opts.modules); // TODO: remove whitelist in favor of include in next major if (opts.whitelist && !hasBeenWarned) { hasBeenWarned = true; console.warn("The \"whitelist\" option has been deprecated\n in favor of \"include\" to match the newly added \"exclude\" option (instead of \"blacklist\")."); } var include = validateIncludeOption(opts.whitelist || opts.include); var exclude = validateExcludeOption(opts.exclude); checkDuplicateIncludeExcludes(include.all, exclude.all); var targets = getTargets(opts.targets); var debug = opts.debug; var useBuiltIns = opts.useBuiltIns; 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; if (useBuiltIns) { var filterBuiltIns = filterItem.bind(null, targets, exclude.builtIns, _builtIns2.default); polyfills = Object.keys(_builtIns2.default).concat(defaultInclude).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(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, targets, _builtIns2.default); }); } } var regenerator = transformations.indexOf("transform-regenerator") >= 0; var modulePlugin = moduleType !== false && MODULE_TRANSFORMATIONS[moduleType]; var plugins = []; modulePlugin && plugins.push([require("babel-plugin-" + modulePlugin), { loose: loose }]); plugins.push.apply(plugins, transformations.map(function (pluginName) { return [require("babel-plugin-" + pluginName), { loose: loose }]; })); useBuiltIns && plugins.push([_transformPolyfillRequirePlugin2.default, { polyfills: polyfills, regenerator: regenerator }]); return { plugins: plugins }; }