summaryrefslogtreecommitdiff
path: root/node_modules/autoprefixer/lib/browsers.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/autoprefixer/lib/browsers.js')
-rw-r--r--node_modules/autoprefixer/lib/browsers.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/node_modules/autoprefixer/lib/browsers.js b/node_modules/autoprefixer/lib/browsers.js
new file mode 100644
index 0000000..b268c84
--- /dev/null
+++ b/node_modules/autoprefixer/lib/browsers.js
@@ -0,0 +1,79 @@
+let browserslist = require('browserslist')
+let { agents } = require('caniuse-lite/dist/unpacker/agents')
+
+let utils = require('./utils')
+
+class Browsers {
+ constructor(data, requirements, options, browserslistOpts) {
+ this.data = data
+ this.options = options || {}
+ this.browserslistOpts = browserslistOpts || {}
+ this.selected = this.parse(requirements)
+ }
+
+ /**
+ * Return all prefixes for default browser data
+ */
+ static prefixes() {
+ if (this.prefixesCache) {
+ return this.prefixesCache
+ }
+
+ this.prefixesCache = []
+ for (let name in agents) {
+ this.prefixesCache.push(`-${agents[name].prefix}-`)
+ }
+
+ this.prefixesCache = utils
+ .uniq(this.prefixesCache)
+ .sort((a, b) => b.length - a.length)
+
+ return this.prefixesCache
+ }
+
+ /**
+ * Check is value contain any possible prefix
+ */
+ static withPrefix(value) {
+ if (!this.prefixesRegexp) {
+ this.prefixesRegexp = new RegExp(this.prefixes().join('|'))
+ }
+
+ return this.prefixesRegexp.test(value)
+ }
+
+ /**
+ * Is browser is selected by requirements
+ */
+ isSelected(browser) {
+ return this.selected.includes(browser)
+ }
+
+ /**
+ * Return browsers selected by requirements
+ */
+ parse(requirements) {
+ let opts = {}
+ for (let i in this.browserslistOpts) {
+ opts[i] = this.browserslistOpts[i]
+ }
+ opts.path = this.options.from
+ return browserslist(requirements, opts)
+ }
+
+ /**
+ * Return prefix for selected browser
+ */
+ prefix(browser) {
+ let [name, version] = browser.split(' ')
+ let data = this.data[name]
+
+ let prefix = data.prefix_exceptions && data.prefix_exceptions[version]
+ if (!prefix) {
+ prefix = data.prefix
+ }
+ return `-${prefix}-`
+ }
+}
+
+module.exports = Browsers