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