"use strict"; exports.__esModule = true; var _browserslist = require("browserslist"); var _browserslist2 = _interopRequireDefault(_browserslist); var _semver = require("semver"); var _semver2 = _interopRequireDefault(_semver); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var browserNameMap = { android: "android", chrome: "chrome", and_chr: "chrome", edge: "edge", firefox: "firefox", ie: "ie", ios_saf: "ios", safari: "safari" }; var isBrowsersQueryValid = function isBrowsersQueryValid(browsers) { return typeof browsers === "string" || Array.isArray(browsers); }; var semverMin = function semverMin(first, second) { return first && _semver2.default.lt(first, second) ? first : second; }; 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]; if (!normalizedBrowserName) { return all; } try { // Browser version can return as "10.0-10.2" var splitVersion = browserVersion.split("-")[0]; var parsedBrowserVersion = (0, _utils.semverify)(splitVersion); all[normalizedBrowserName] = semverMin(all[normalizedBrowserName], parsedBrowserVersion); } catch (e) {} return all; }, {}); }; var outputDecimalWarning = function outputDecimalWarning(decimalTargets) { if (!decimalTargets || !decimalTargets.length) { return; } console.log("Warning, the following targets are using a decimal version:"); console.log(""); decimalTargets.forEach(function (_ref) { var target = _ref.target, value = _ref.value; return console.log(" " + target + ": " + value); }); console.log(""); console.log("We recommend using a string for minor/patch versions to avoid numbers like 6.10"); console.log("getting parsed as 6.1, which can lead to unexpected behavior."); console.log(""); }; var targetParserMap = { __default: function __default(target, value) { return [target, (0, _utils.semverify)(value)]; }, // Parse `node: true` and `node: "current"` to version node: function node(target, value) { var parsed = value === true || value === "current" ? process.versions.node : (0, _utils.semverify)(value); return [target, parsed]; }, // Only valid value for Uglify is `true` uglify: function uglify(target, value) { return [target, value === true]; } }; var getTargets = function getTargets() { var targets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var targetOpts = {}; // Parse browsers target via browserslist if (isBrowsersQueryValid(targets.browsers)) { targetOpts = getLowestVersions((0, _browserslist2.default)(targets.browsers)); } // Parse remaining targets var parsed = Object.keys(targets).reduce(function (results, target) { if (target !== "browsers") { var value = targets[target]; // Warn when specifying minor/patch as a decimal if (typeof value === "number" && value % 1 !== 0) { results.decimalWarnings.push({ target: target, value: value }); } // Check if we have a target parser? var parser = targetParserMap[target] || targetParserMap.__default; var _parser = parser(target, value), parsedTarget = _parser[0], parsedValue = _parser[1]; if (parsedValue) { results.targets[parsedTarget] = parsedValue; } } return results; }, { targets: targetOpts, decimalWarnings: [] }); outputDecimalWarning(parsed.decimalWarnings); return parsed.targets; }; exports.default = getTargets;