eslint-plugin-compat
Version:
Lint browser compatibility of API used
90 lines (78 loc) • 3.37 kB
JavaScript
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['exports', 'babel-runtime/helpers/slicedToArray', 'babel-runtime/helpers/toConsumableArray', 'babel-runtime/helpers/typeof', 'browserslist'], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require('babel-runtime/helpers/slicedToArray'), require('babel-runtime/helpers/toConsumableArray'), require('babel-runtime/helpers/typeof'), require('browserslist'));
} else {
var mod = {
exports: {}
};
factory(mod.exports, global.slicedToArray, global.toConsumableArray, global._typeof, global.browserslist);
global.Versioning = mod.exports;
}
})(this, function (exports, _slicedToArray2, _toConsumableArray2, _typeof2, _browserslist) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = DetermineTargetsFromConfig;
exports.Versioning = Versioning;
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _typeof3 = _interopRequireDefault(_typeof2);
var _browserslist2 = _interopRequireDefault(_browserslist);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
/**
* Determine the targets based on the browserslist config object
*/
// eslint-disable-line
function DetermineTargetsFromConfig(config) {
if (Array.isArray(config)) {
return (0, _browserslist2.default)(config);
}
if (config && (typeof config === 'undefined' ? 'undefined' : (0, _typeof3.default)(config)) === 'object') {
return (0, _browserslist2.default)([].concat((0, _toConsumableArray3.default)(config.production || []), (0, _toConsumableArray3.default)(config.development || [])));
}
return (0, _browserslist2.default)();
}
/**
* Take a list of targets returned from browserslist api, return the lowest version
* version of each target
*/
function Versioning(targetslist) {
return targetslist
// Sort the targets by target name and then version number in ascending order
.map(function (e) {
var _e$split = e.split(' '),
_e$split2 = (0, _slicedToArray3.default)(_e$split, 2),
target = _e$split2[0],
version = _e$split2[1];
return {
target: target,
version: version,
parsedVersion: version === 'all' ? 0 : version.includes('-') ? parseFloat(version.split('-')[0]) : parseFloat(version, 10)
};
})
// Sort the targets by target name and then version number in descending order
// ex. [a@3, b@3, a@1] => [a@3, a@1, b@3]
.sort(function (a, b) {
if (b.target === a.target) {
// If any version === 'all', return 0. The only version of op_mini is 'all'
// Otherwise, compare the versions
return typeof b.parsedVersion === 'string' || typeof a.parsedVersion === 'string' ? 0 : b.parsedVersion - a.parsedVersion;
}
return b.target > a.target ? 1 : -1;
})
// First last target always has the latest version
.filter(function (e, i, items
// Check if the current target is the last of its kind. If it is, then it
// is most recent version
) {
return i + 1 === items.length || e.target !== items[i + 1].target;
});
}
});