139 lines
3.8 KiB
JavaScript
139 lines
3.8 KiB
JavaScript
|
"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;
|