autoprefixer 9.8.7 → 10.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +999 -0
  2. package/README.md +0 -3
  3. package/bin/autoprefixer +11 -11
  4. package/data/prefixes.js +799 -545
  5. package/lib/at-rule.js +23 -50
  6. package/lib/autoprefixer.js +108 -97
  7. package/lib/brackets.js +31 -44
  8. package/lib/browsers.js +54 -71
  9. package/lib/declaration.js +122 -178
  10. package/lib/hacks/align-content.js +24 -54
  11. package/lib/hacks/align-items.js +23 -53
  12. package/lib/hacks/align-self.js +32 -60
  13. package/lib/hacks/animation.js +11 -29
  14. package/lib/hacks/appearance.js +19 -35
  15. package/lib/hacks/backdrop-filter.js +16 -31
  16. package/lib/hacks/background-clip.js +19 -36
  17. package/lib/hacks/background-size.js +16 -31
  18. package/lib/hacks/block-logical.js +28 -36
  19. package/lib/hacks/border-image.js +9 -27
  20. package/lib/hacks/border-radius.js +22 -44
  21. package/lib/hacks/break-props.js +38 -51
  22. package/lib/hacks/color-adjust.js +11 -30
  23. package/lib/hacks/cross-fade.js +29 -48
  24. package/lib/hacks/display-flex.js +32 -61
  25. package/lib/hacks/display-grid.js +12 -32
  26. package/lib/hacks/filter-value.js +8 -25
  27. package/lib/hacks/filter.js +13 -27
  28. package/lib/hacks/flex-basis.js +21 -54
  29. package/lib/hacks/flex-direction.js +41 -77
  30. package/lib/hacks/flex-flow.js +33 -61
  31. package/lib/hacks/flex-grow.js +16 -43
  32. package/lib/hacks/flex-shrink.js +21 -54
  33. package/lib/hacks/flex-spec.js +7 -10
  34. package/lib/hacks/flex-wrap.js +11 -32
  35. package/lib/hacks/flex.js +27 -58
  36. package/lib/hacks/fullscreen.js +10 -30
  37. package/lib/hacks/gradient.js +240 -330
  38. package/lib/hacks/grid-area.js +25 -43
  39. package/lib/hacks/grid-column-align.js +14 -34
  40. package/lib/hacks/grid-end.js +30 -45
  41. package/lib/hacks/grid-row-align.js +14 -34
  42. package/lib/hacks/grid-row-column.js +20 -39
  43. package/lib/hacks/grid-rows-columns.js +75 -99
  44. package/lib/hacks/grid-start.js +17 -39
  45. package/lib/hacks/grid-template-areas.js +59 -76
  46. package/lib/hacks/grid-template.js +40 -61
  47. package/lib/hacks/grid-utils.js +686 -716
  48. package/lib/hacks/image-rendering.js +24 -47
  49. package/lib/hacks/image-set.js +10 -30
  50. package/lib/hacks/inline-logical.js +26 -32
  51. package/lib/hacks/intrinsic.js +40 -53
  52. package/lib/hacks/justify-content.js +26 -57
  53. package/lib/hacks/mask-border.js +28 -36
  54. package/lib/hacks/mask-composite.js +41 -57
  55. package/lib/hacks/order.js +22 -52
  56. package/lib/hacks/overscroll-behavior.js +16 -37
  57. package/lib/hacks/pixelated.js +16 -40
  58. package/lib/hacks/place-self.js +18 -41
  59. package/lib/hacks/placeholder-shown.js +9 -28
  60. package/lib/hacks/placeholder.js +15 -38
  61. package/lib/hacks/text-decoration-skip-ink.js +14 -29
  62. package/lib/hacks/text-decoration.js +20 -31
  63. package/lib/hacks/text-emphasis-position.js +9 -28
  64. package/lib/hacks/transform-decl.js +43 -69
  65. package/lib/hacks/user-select.js +19 -27
  66. package/lib/hacks/writing-mode.js +19 -36
  67. package/lib/info.js +63 -93
  68. package/lib/old-selector.js +39 -60
  69. package/lib/old-value.js +17 -25
  70. package/lib/prefixer.js +83 -110
  71. package/lib/prefixes.js +233 -336
  72. package/lib/processor.js +420 -416
  73. package/lib/resolution.js +62 -98
  74. package/lib/selector.js +91 -139
  75. package/lib/supports.js +194 -246
  76. package/lib/transition.js +170 -265
  77. package/lib/utils.js +49 -72
  78. package/lib/value.js +77 -116
  79. package/lib/vendor.js +14 -0
  80. package/package.json +23 -12
package/lib/at-rule.js CHANGED
@@ -1,62 +1,35 @@
1
- "use strict";
2
-
3
- function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
4
-
5
- function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
6
-
7
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
8
-
9
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
10
-
11
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _defaults(subClass, superClass); }
12
-
13
- var Prefixer = require('./prefixer');
14
-
15
- var AtRule = /*#__PURE__*/function (_Prefixer) {
16
- _inheritsLoose(AtRule, _Prefixer);
17
-
18
- function AtRule() {
19
- return _Prefixer.apply(this, arguments) || this;
20
- }
21
-
22
- var _proto = AtRule.prototype;
1
+ let Prefixer = require('./prefixer')
23
2
 
3
+ class AtRule extends Prefixer {
24
4
  /**
25
- * Clone and add prefixes for at-rule
26
- */
27
- _proto.add = function add(rule, prefix) {
28
- var prefixed = prefix + rule.name;
29
- var already = rule.parent.some(function (i) {
30
- return i.name === prefixed && i.params === rule.params;
31
- });
32
-
5
+ * Clone and add prefixes for at-rule
6
+ */
7
+ add (rule, prefix) {
8
+ let prefixed = prefix + rule.name
9
+
10
+ let already = rule.parent.some(
11
+ i => i.name === prefixed && i.params === rule.params
12
+ )
33
13
  if (already) {
34
- return undefined;
14
+ return undefined
35
15
  }
36
16
 
37
- var cloned = this.clone(rule, {
38
- name: prefixed
39
- });
40
- return rule.parent.insertBefore(rule, cloned);
17
+ let cloned = this.clone(rule, { name: prefixed })
18
+ return rule.parent.insertBefore(rule, cloned)
41
19
  }
42
- /**
43
- * Clone node with prefixes
44
- */
45
- ;
46
20
 
47
- _proto.process = function process(node) {
48
- var parent = this.parentPrefix(node);
49
-
50
- for (var _iterator = _createForOfIteratorHelperLoose(this.prefixes), _step; !(_step = _iterator()).done;) {
51
- var prefix = _step.value;
21
+ /**
22
+ * Clone node with prefixes
23
+ */
24
+ process (node) {
25
+ let parent = this.parentPrefix(node)
52
26
 
27
+ for (let prefix of this.prefixes) {
53
28
  if (!parent || parent === prefix) {
54
- this.add(node, prefix);
29
+ this.add(node, prefix)
55
30
  }
56
31
  }
57
- };
58
-
59
- return AtRule;
60
- }(Prefixer);
32
+ }
33
+ }
61
34
 
62
- module.exports = AtRule;
35
+ module.exports = AtRule
@@ -1,150 +1,161 @@
1
- "use strict";
2
-
3
- var browserslist = require('browserslist');
4
-
5
- var nanocolors = require('nanocolors');
6
-
7
- var postcss = require('postcss');
8
-
9
- var agents = require('caniuse-lite').agents;
10
-
11
- var Browsers = require('./browsers');
12
-
13
- var Prefixes = require('./prefixes');
14
-
15
- var data = require('../data/prefixes');
16
-
17
- var info = require('./info');
18
-
19
- var WARNING = '\n' + ' Replace Autoprefixer `browsers` option to Browserslist config.\n' + ' Use `browserslist` key in `package.json` or `.browserslistrc` file.\n' + '\n' + ' Using `browsers` option can cause errors. Browserslist config \n' + ' can be used for Babel, Autoprefixer, postcss-normalize and other tools.\n' + '\n' + ' If you really need to use option, rename it to `overrideBrowserslist`.\n' + '\n' + ' Learn more at:\n' + ' https://github.com/browserslist/browserslist#readme\n' + ' https://twitter.com/browserslist\n' + '\n';
20
-
21
- function isPlainObject(obj) {
22
- return Object.prototype.toString.apply(obj) === '[object Object]';
1
+ let browserslist = require('browserslist')
2
+ let { agents } = require('caniuse-lite')
3
+ let colorette = require('colorette')
4
+
5
+ let Browsers = require('./browsers')
6
+ let Prefixes = require('./prefixes')
7
+ let data = require('../data/prefixes')
8
+ let info = require('./info')
9
+
10
+ const WARNING =
11
+ '\n' +
12
+ ' Replace Autoprefixer `browsers` option to Browserslist config.\n' +
13
+ ' Use `browserslist` key in `package.json` or `.browserslistrc` file.\n' +
14
+ '\n' +
15
+ ' Using `browsers` option can cause errors. Browserslist config can\n' +
16
+ ' be used for Babel, Autoprefixer, postcss-normalize and other tools.\n' +
17
+ '\n' +
18
+ ' If you really need to use option, rename it to `overrideBrowserslist`.\n' +
19
+ '\n' +
20
+ ' Learn more at:\n' +
21
+ ' https://github.com/browserslist/browserslist#readme\n' +
22
+ ' https://twitter.com/browserslist\n' +
23
+ '\n'
24
+
25
+ function isPlainObject (obj) {
26
+ return Object.prototype.toString.apply(obj) === '[object Object]'
23
27
  }
24
28
 
25
- var cache = {};
29
+ let cache = new Map()
26
30
 
27
- function timeCapsule(result, prefixes) {
31
+ function timeCapsule (result, prefixes) {
28
32
  if (prefixes.browsers.selected.length === 0) {
29
- return;
33
+ return
30
34
  }
31
-
32
35
  if (prefixes.add.selectors.length > 0) {
33
- return;
36
+ return
34
37
  }
35
-
36
38
  if (Object.keys(prefixes.add).length > 2) {
37
- return;
39
+ return
38
40
  }
39
- /* istanbul ignore next */
40
-
41
41
 
42
- result.warn('Greetings, time traveller. ' + 'We are in the golden age of prefix-less CSS, ' + 'where Autoprefixer is no longer needed for your stylesheet.');
42
+ /* istanbul ignore next */
43
+ result.warn(
44
+ 'Greetings, time traveller. ' +
45
+ 'We are in the golden age of prefix-less CSS, ' +
46
+ 'where Autoprefixer is no longer needed for your stylesheet.'
47
+ )
43
48
  }
44
49
 
45
- module.exports = postcss.plugin('autoprefixer', function () {
46
- for (var _len = arguments.length, reqs = new Array(_len), _key = 0; _key < _len; _key++) {
47
- reqs[_key] = arguments[_key];
48
- }
49
-
50
- var options;
51
-
50
+ module.exports = (...reqs) => {
51
+ let options
52
52
  if (reqs.length === 1 && isPlainObject(reqs[0])) {
53
- options = reqs[0];
54
- reqs = undefined;
55
- } else if (reqs.length === 0 || reqs.length === 1 && !reqs[0]) {
56
- reqs = undefined;
53
+ options = reqs[0]
54
+ reqs = undefined
55
+ } else if (reqs.length === 0 || (reqs.length === 1 && !reqs[0])) {
56
+ reqs = undefined
57
57
  } else if (reqs.length <= 2 && (Array.isArray(reqs[0]) || !reqs[0])) {
58
- options = reqs[1];
59
- reqs = reqs[0];
58
+ options = reqs[1]
59
+ reqs = reqs[0]
60
60
  } else if (typeof reqs[reqs.length - 1] === 'object') {
61
- options = reqs.pop();
61
+ options = reqs.pop()
62
62
  }
63
63
 
64
64
  if (!options) {
65
- options = {};
65
+ options = {}
66
66
  }
67
67
 
68
68
  if (options.browser) {
69
- throw new Error('Change `browser` option to `overrideBrowserslist` in Autoprefixer');
69
+ throw new Error(
70
+ 'Change `browser` option to `overrideBrowserslist` in Autoprefixer'
71
+ )
70
72
  } else if (options.browserslist) {
71
- throw new Error('Change `browserslist` option to `overrideBrowserslist` in Autoprefixer');
73
+ throw new Error(
74
+ 'Change `browserslist` option to `overrideBrowserslist` in Autoprefixer'
75
+ )
72
76
  }
73
77
 
74
78
  if (options.overrideBrowserslist) {
75
- reqs = options.overrideBrowserslist;
79
+ reqs = options.overrideBrowserslist
76
80
  } else if (options.browsers) {
77
81
  if (typeof console !== 'undefined' && console.warn) {
78
- console.warn(nanocolors.red(WARNING.replace(/`[^`]+`/g, function (i) {
79
- return nanocolors.yellow(i.slice(1, -1));
80
- })));
82
+ if (colorette.red) {
83
+ console.warn(
84
+ colorette.red(
85
+ WARNING.replace(/`[^`]+`/g, i => colorette.yellow(i.slice(1, -1)))
86
+ )
87
+ )
88
+ } else {
89
+ console.warn(WARNING)
90
+ }
81
91
  }
82
-
83
- reqs = options.browsers;
92
+ reqs = options.browsers
84
93
  }
85
94
 
86
- var brwlstOpts = {
95
+ let brwlstOpts = {
87
96
  ignoreUnknownVersions: options.ignoreUnknownVersions,
88
97
  stats: options.stats,
89
98
  env: options.env
90
- };
91
-
92
- function loadPrefixes(opts) {
93
- var d = module.exports.data;
94
- var browsers = new Browsers(d.browsers, reqs, opts, brwlstOpts);
95
- var key = browsers.selected.join(', ') + JSON.stringify(options);
96
-
97
- if (!cache[key]) {
98
- cache[key] = new Prefixes(d.prefixes, browsers, options);
99
- }
100
-
101
- return cache[key];
102
99
  }
103
100
 
104
- function plugin(css, result) {
105
- var prefixes = loadPrefixes({
106
- from: css.source && css.source.input.file,
107
- env: options.env
108
- });
109
- timeCapsule(result, prefixes);
101
+ function loadPrefixes (opts) {
102
+ let d = module.exports.data
103
+ let browsers = new Browsers(d.browsers, reqs, opts, brwlstOpts)
104
+ let key = browsers.selected.join(', ') + JSON.stringify(options)
110
105
 
111
- if (options.remove !== false) {
112
- prefixes.processor.remove(css, result);
106
+ if (!cache.has(key)) {
107
+ cache.set(key, new Prefixes(d.prefixes, browsers, options))
113
108
  }
114
109
 
115
- if (options.add !== false) {
116
- prefixes.processor.add(css, result);
117
- }
110
+ return cache.get(key)
118
111
  }
119
112
 
120
- plugin.options = options;
121
- plugin.browsers = reqs;
113
+ return {
114
+ postcssPlugin: 'autoprefixer',
115
+
116
+ prepare (result) {
117
+ let prefixes = loadPrefixes({
118
+ from: result.opts.from,
119
+ env: options.env
120
+ })
121
+
122
+ return {
123
+ Once (root) {
124
+ timeCapsule(result, prefixes)
125
+ if (options.remove !== false) {
126
+ prefixes.processor.remove(root, result)
127
+ }
128
+ if (options.add !== false) {
129
+ prefixes.processor.add(root, result)
130
+ }
131
+ }
132
+ }
133
+ },
134
+
135
+ info (opts) {
136
+ opts = opts || {}
137
+ opts.from = opts.from || process.cwd()
138
+ return info(loadPrefixes(opts))
139
+ },
140
+
141
+ options,
142
+ browsers: reqs
143
+ }
144
+ }
122
145
 
123
- plugin.info = function (opts) {
124
- opts = opts || {};
125
- opts.from = opts.from || process.cwd();
126
- return info(loadPrefixes(opts));
127
- };
146
+ module.exports.postcss = true
128
147
 
129
- return plugin;
130
- });
131
148
  /**
132
149
  * Autoprefixer data
133
150
  */
151
+ module.exports.data = { browsers: agents, prefixes: data }
134
152
 
135
- module.exports.data = {
136
- browsers: agents,
137
- prefixes: data
138
- };
139
153
  /**
140
154
  * Autoprefixer default browsers
141
155
  */
156
+ module.exports.defaults = browserslist.defaults
142
157
 
143
- module.exports.defaults = browserslist.defaults;
144
158
  /**
145
159
  * Inspect with default Autoprefixer
146
160
  */
147
-
148
- module.exports.info = function () {
149
- return module.exports().info();
150
- };
161
+ module.exports.info = () => module.exports().info()
package/lib/brackets.js CHANGED
@@ -1,64 +1,51 @@
1
- "use strict";
2
-
3
- function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
4
-
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
-
7
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
-
9
- function last(array) {
10
- return array[array.length - 1];
1
+ function last (array) {
2
+ return array[array.length - 1]
11
3
  }
12
4
 
13
- var brackets = {
5
+ let brackets = {
14
6
  /**
15
- * Parse string to nodes tree
16
- */
17
- parse: function parse(str) {
18
- var current = [''];
19
- var stack = [current];
20
-
21
- for (var _iterator = _createForOfIteratorHelperLoose(str), _step; !(_step = _iterator()).done;) {
22
- var sym = _step.value;
7
+ * Parse string to nodes tree
8
+ */
9
+ parse (str) {
10
+ let current = ['']
11
+ let stack = [current]
23
12
 
13
+ for (let sym of str) {
24
14
  if (sym === '(') {
25
- current = [''];
26
- last(stack).push(current);
27
- stack.push(current);
28
- continue;
15
+ current = ['']
16
+ last(stack).push(current)
17
+ stack.push(current)
18
+ continue
29
19
  }
30
20
 
31
21
  if (sym === ')') {
32
- stack.pop();
33
- current = last(stack);
34
- current.push('');
35
- continue;
22
+ stack.pop()
23
+ current = last(stack)
24
+ current.push('')
25
+ continue
36
26
  }
37
27
 
38
- current[current.length - 1] += sym;
28
+ current[current.length - 1] += sym
39
29
  }
40
30
 
41
- return stack[0];
31
+ return stack[0]
42
32
  },
43
33
 
44
34
  /**
45
- * Generate output string by nodes tree
46
- */
47
- stringify: function stringify(ast) {
48
- var result = '';
49
-
50
- for (var _iterator2 = _createForOfIteratorHelperLoose(ast), _step2; !(_step2 = _iterator2()).done;) {
51
- var i = _step2.value;
52
-
35
+ * Generate output string by nodes tree
36
+ */
37
+ stringify (ast) {
38
+ let result = ''
39
+ for (let i of ast) {
53
40
  if (typeof i === 'object') {
54
- result += "(" + brackets.stringify(i) + ")";
55
- continue;
41
+ result += `(${brackets.stringify(i)})`
42
+ continue
56
43
  }
57
44
 
58
- result += i;
45
+ result += i
59
46
  }
60
-
61
- return result;
47
+ return result
62
48
  }
63
- };
64
- module.exports = brackets;
49
+ }
50
+
51
+ module.exports = brackets
package/lib/browsers.js CHANGED
@@ -1,96 +1,79 @@
1
- "use strict";
1
+ let browserslist = require('browserslist')
2
+ let agents = require('caniuse-lite').agents
2
3
 
3
- var browserslist = require('browserslist');
4
+ let utils = require('./utils')
4
5
 
5
- var agents = require('caniuse-lite').agents;
6
-
7
- var utils = require('./utils');
8
-
9
- var Browsers = /*#__PURE__*/function () {
6
+ class Browsers {
10
7
  /**
11
- * Return all prefixes for default browser data
12
- */
13
- Browsers.prefixes = function prefixes() {
8
+ * Return all prefixes for default browser data
9
+ */
10
+ static prefixes () {
14
11
  if (this.prefixesCache) {
15
- return this.prefixesCache;
12
+ return this.prefixesCache
16
13
  }
17
14
 
18
- this.prefixesCache = [];
19
-
20
- for (var name in agents) {
21
- this.prefixesCache.push("-" + agents[name].prefix + "-");
15
+ this.prefixesCache = []
16
+ for (let name in agents) {
17
+ this.prefixesCache.push(`-${agents[name].prefix}-`)
22
18
  }
23
19
 
24
- this.prefixesCache = utils.uniq(this.prefixesCache).sort(function (a, b) {
25
- return b.length - a.length;
26
- });
27
- return this.prefixesCache;
20
+ this.prefixesCache = utils
21
+ .uniq(this.prefixesCache)
22
+ .sort((a, b) => b.length - a.length)
23
+
24
+ return this.prefixesCache
28
25
  }
29
- /**
30
- * Check is value contain any possible prefix
31
- */
32
- ;
33
26
 
34
- Browsers.withPrefix = function withPrefix(value) {
27
+ /**
28
+ * Check is value contain any possible prefix
29
+ */
30
+ static withPrefix (value) {
35
31
  if (!this.prefixesRegexp) {
36
- this.prefixesRegexp = new RegExp(this.prefixes().join('|'));
32
+ this.prefixesRegexp = new RegExp(this.prefixes().join('|'))
37
33
  }
38
34
 
39
- return this.prefixesRegexp.test(value);
40
- };
41
-
42
- function Browsers(data, requirements, options, browserslistOpts) {
43
- this.data = data;
44
- this.options = options || {};
45
- this.browserslistOpts = browserslistOpts || {};
46
- this.selected = this.parse(requirements);
35
+ return this.prefixesRegexp.test(value)
47
36
  }
48
- /**
49
- * Return browsers selected by requirements
50
- */
51
-
52
37
 
53
- var _proto = Browsers.prototype;
54
-
55
- _proto.parse = function parse(requirements) {
56
- var opts = {};
38
+ constructor (data, requirements, options, browserslistOpts) {
39
+ this.data = data
40
+ this.options = options || {}
41
+ this.browserslistOpts = browserslistOpts || {}
42
+ this.selected = this.parse(requirements)
43
+ }
57
44
 
58
- for (var i in this.browserslistOpts) {
59
- opts[i] = this.browserslistOpts[i];
45
+ /**
46
+ * Return browsers selected by requirements
47
+ */
48
+ parse (requirements) {
49
+ let opts = {}
50
+ for (let i in this.browserslistOpts) {
51
+ opts[i] = this.browserslistOpts[i]
60
52
  }
61
-
62
- opts.path = this.options.from;
63
- return browserslist(requirements, opts);
53
+ opts.path = this.options.from
54
+ return browserslist(requirements, opts)
64
55
  }
65
- /**
66
- * Return prefix for selected browser
67
- */
68
- ;
69
56
 
70
- _proto.prefix = function prefix(browser) {
71
- var _browser$split = browser.split(' '),
72
- name = _browser$split[0],
73
- version = _browser$split[1];
74
-
75
- var data = this.data[name];
76
- var prefix = data.prefix_exceptions && data.prefix_exceptions[version];
57
+ /**
58
+ * Return prefix for selected browser
59
+ */
60
+ prefix (browser) {
61
+ let [name, version] = browser.split(' ')
62
+ let data = this.data[name]
77
63
 
64
+ let prefix = data.prefix_exceptions && data.prefix_exceptions[version]
78
65
  if (!prefix) {
79
- prefix = data.prefix;
66
+ prefix = data.prefix
80
67
  }
81
-
82
- return "-" + prefix + "-";
68
+ return `-${prefix}-`
83
69
  }
84
- /**
85
- * Is browser is selected by requirements
86
- */
87
- ;
88
-
89
- _proto.isSelected = function isSelected(browser) {
90
- return this.selected.includes(browser);
91
- };
92
70
 
93
- return Browsers;
94
- }();
71
+ /**
72
+ * Is browser is selected by requirements
73
+ */
74
+ isSelected (browser) {
75
+ return this.selected.includes(browser)
76
+ }
77
+ }
95
78
 
96
- module.exports = Browsers;
79
+ module.exports = Browsers