'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var browserslist = require('browserslist'); var utils = require('./utils'); var Browsers = function () { /** * Return all prefixes for default browser data */ Browsers.prefixes = function prefixes() { if (this.prefixesCache) { return this.prefixesCache; } var data = require('caniuse-lite').agents; this.prefixesCache = []; for (var name in data) { this.prefixesCache.push('-' + data[name].prefix + '-'); } this.prefixesCache = utils.uniq(this.prefixesCache).sort(function (a, b) { return b.length - a.length; }); return this.prefixesCache; }; /** * Check is value contain any possibe prefix */ Browsers.withPrefix = function withPrefix(value) { if (!this.prefixesRegexp) { this.prefixesRegexp = new RegExp(this.prefixes().join('|')); } return this.prefixesRegexp.test(value); }; function Browsers(data, requirements, options, stats) { _classCallCheck(this, Browsers); this.data = data; this.options = options || {}; this.stats = stats; this.selected = this.parse(requirements); } /** * Return browsers selected by requirements */ Browsers.prototype.parse = function parse(requirements) { return browserslist(requirements, { stats: this.stats, path: this.options.from, env: this.options.env }); }; /** * Return prefix for selected browser */ Browsers.prototype.prefix = function prefix(browser) { var _browser$split = browser.split(' '), name = _browser$split[0], version = _browser$split[1]; var data = this.data[name]; var prefix = data.prefix_exceptions && data.prefix_exceptions[version]; if (!prefix) { prefix = data.prefix; } return '-' + prefix + '-'; }; /** * Is browser is selected by requirements */ Browsers.prototype.isSelected = function isSelected(browser) { return this.selected.indexOf(browser) !== -1; }; return Browsers; }(); module.exports = Browsers;