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.
99 lines
2.4 KiB
99 lines
2.4 KiB
'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; |