targets-parser.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. "use strict";
  2. exports.__esModule = true;
  3. var _browserslist = require("browserslist");
  4. var _browserslist2 = _interopRequireDefault(_browserslist);
  5. var _semver = require("semver");
  6. var _semver2 = _interopRequireDefault(_semver);
  7. var _utils = require("./utils");
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. var browserNameMap = {
  10. android: "android",
  11. chrome: "chrome",
  12. and_chr: "chrome",
  13. edge: "edge",
  14. firefox: "firefox",
  15. ie: "ie",
  16. ios_saf: "ios",
  17. safari: "safari"
  18. };
  19. var isBrowsersQueryValid = function isBrowsersQueryValid(browsers) {
  20. return typeof browsers === "string" || Array.isArray(browsers);
  21. };
  22. var semverMin = function semverMin(first, second) {
  23. return first && _semver2.default.lt(first, second) ? first : second;
  24. };
  25. var getLowestVersions = function getLowestVersions(browsers) {
  26. return browsers.reduce(function (all, browser) {
  27. var _browser$split = browser.split(" "),
  28. browserName = _browser$split[0],
  29. browserVersion = _browser$split[1];
  30. var normalizedBrowserName = browserNameMap[browserName];
  31. if (!normalizedBrowserName) {
  32. return all;
  33. }
  34. try {
  35. // Browser version can return as "10.0-10.2"
  36. var splitVersion = browserVersion.split("-")[0];
  37. var parsedBrowserVersion = (0, _utils.semverify)(splitVersion);
  38. all[normalizedBrowserName] = semverMin(all[normalizedBrowserName], parsedBrowserVersion);
  39. } catch (e) {}
  40. return all;
  41. }, {});
  42. };
  43. var outputDecimalWarning = function outputDecimalWarning(decimalTargets) {
  44. if (!decimalTargets || !decimalTargets.length) {
  45. return;
  46. }
  47. console.log("Warning, the following targets are using a decimal version:");
  48. console.log("");
  49. decimalTargets.forEach(function (_ref) {
  50. var target = _ref.target,
  51. value = _ref.value;
  52. return console.log(" " + target + ": " + value);
  53. });
  54. console.log("");
  55. console.log("We recommend using a string for minor/patch versions to avoid numbers like 6.10");
  56. console.log("getting parsed as 6.1, which can lead to unexpected behavior.");
  57. console.log("");
  58. };
  59. var targetParserMap = {
  60. __default: function __default(target, value) {
  61. return [target, (0, _utils.semverify)(value)];
  62. },
  63. // Parse `node: true` and `node: "current"` to version
  64. node: function node(target, value) {
  65. var parsed = value === true || value === "current" ? process.versions.node : (0, _utils.semverify)(value);
  66. return [target, parsed];
  67. },
  68. // Only valid value for Uglify is `true`
  69. uglify: function uglify(target, value) {
  70. return [target, value === true];
  71. }
  72. };
  73. var getTargets = function getTargets() {
  74. var targets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  75. var targetOpts = {};
  76. // Parse browsers target via browserslist
  77. if (isBrowsersQueryValid(targets.browsers)) {
  78. targetOpts = getLowestVersions((0, _browserslist2.default)(targets.browsers));
  79. }
  80. // Parse remaining targets
  81. var parsed = Object.keys(targets).reduce(function (results, target) {
  82. if (target !== "browsers") {
  83. var value = targets[target];
  84. // Warn when specifying minor/patch as a decimal
  85. if (typeof value === "number" && value % 1 !== 0) {
  86. results.decimalWarnings.push({ target: target, value: value });
  87. }
  88. // Check if we have a target parser?
  89. var parser = targetParserMap[target] || targetParserMap.__default;
  90. var _parser = parser(target, value),
  91. parsedTarget = _parser[0],
  92. parsedValue = _parser[1];
  93. if (parsedValue) {
  94. results.targets[parsedTarget] = parsedValue;
  95. }
  96. }
  97. return results;
  98. }, {
  99. targets: targetOpts,
  100. decimalWarnings: []
  101. });
  102. outputDecimalWarning(parsed.decimalWarnings);
  103. return parsed.targets;
  104. };
  105. exports.default = getTargets;