source: node_modules/autoprefixer/lib/browsers.js@ 2058e5c

Last change on this file since 2058e5c was 2058e5c, checked in by istevanoska <ilinastevanoska@…>, 6 months ago

Working / before login

  • Property mode set to 100644
File size: 1.7 KB
Line 
1let browserslist = require('browserslist')
2let { agents } = require('caniuse-lite/dist/unpacker/agents')
3
4let utils = require('./utils')
5
6class Browsers {
7 constructor(data, requirements, options, browserslistOpts) {
8 this.data = data
9 this.options = options || {}
10 this.browserslistOpts = browserslistOpts || {}
11 this.selected = this.parse(requirements)
12 }
13
14 /**
15 * Return all prefixes for default browser data
16 */
17 static prefixes() {
18 if (this.prefixesCache) {
19 return this.prefixesCache
20 }
21
22 this.prefixesCache = []
23 for (let name in agents) {
24 this.prefixesCache.push(`-${agents[name].prefix}-`)
25 }
26
27 this.prefixesCache = utils
28 .uniq(this.prefixesCache)
29 .sort((a, b) => b.length - a.length)
30
31 return this.prefixesCache
32 }
33
34 /**
35 * Check is value contain any possible prefix
36 */
37 static withPrefix(value) {
38 if (!this.prefixesRegexp) {
39 this.prefixesRegexp = new RegExp(this.prefixes().join('|'))
40 }
41
42 return this.prefixesRegexp.test(value)
43 }
44
45 /**
46 * Is browser is selected by requirements
47 */
48 isSelected(browser) {
49 return this.selected.includes(browser)
50 }
51
52 /**
53 * Return browsers selected by requirements
54 */
55 parse(requirements) {
56 let opts = {}
57 for (let i in this.browserslistOpts) {
58 opts[i] = this.browserslistOpts[i]
59 }
60 opts.path = this.options.from
61 return browserslist(requirements, opts)
62 }
63
64 /**
65 * Return prefix for selected browser
66 */
67 prefix(browser) {
68 let [name, version] = browser.split(' ')
69 let data = this.data[name]
70
71 let prefix = data.prefix_exceptions && data.prefix_exceptions[version]
72 if (!prefix) {
73 prefix = data.prefix
74 }
75 return `-${prefix}-`
76 }
77}
78
79module.exports = Browsers
Note: See TracBrowser for help on using the repository browser.