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/supports.js CHANGED
@@ -1,346 +1,294 @@
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
- var postcss = require('postcss');
10
-
11
- var data = require('caniuse-lite').feature(require('caniuse-lite/data/features/css-featurequeries.js'));
12
-
13
- var Browsers = require('./browsers');
14
-
15
- var brackets = require('./brackets');
16
-
17
- var Value = require('./value');
18
-
19
- var utils = require('./utils');
20
-
21
- var supported = [];
22
-
23
- for (var browser in data.stats) {
24
- var versions = data.stats[browser];
25
-
26
- for (var version in versions) {
27
- var support = versions[version];
28
-
1
+ let featureQueries = require('caniuse-lite/data/features/css-featurequeries.js')
2
+ let { feature } = require('caniuse-lite')
3
+ let { parse } = require('postcss')
4
+
5
+ let Browsers = require('./browsers')
6
+ let brackets = require('./brackets')
7
+ let Value = require('./value')
8
+ let utils = require('./utils')
9
+
10
+ let data = feature(featureQueries)
11
+
12
+ let supported = []
13
+ for (let browser in data.stats) {
14
+ let versions = data.stats[browser]
15
+ for (let version in versions) {
16
+ let support = versions[version]
29
17
  if (/y/.test(support)) {
30
- supported.push(browser + ' ' + version);
18
+ supported.push(browser + ' ' + version)
31
19
  }
32
20
  }
33
21
  }
34
22
 
35
- var Supports = /*#__PURE__*/function () {
36
- function Supports(Prefixes, all) {
37
- this.Prefixes = Prefixes;
38
- this.all = all;
23
+ class Supports {
24
+ constructor (Prefixes, all) {
25
+ this.Prefixes = Prefixes
26
+ this.all = all
39
27
  }
40
- /**
41
- * Return prefixer only with @supports supported browsers
42
- */
43
-
44
28
 
45
- var _proto = Supports.prototype;
46
-
47
- _proto.prefixer = function prefixer() {
29
+ /**
30
+ * Return prefixer only with @supports supported browsers
31
+ */
32
+ prefixer () {
48
33
  if (this.prefixerCache) {
49
- return this.prefixerCache;
34
+ return this.prefixerCache
50
35
  }
51
36
 
52
- var filtered = this.all.browsers.selected.filter(function (i) {
53
- return supported.includes(i);
54
- });
55
- var browsers = new Browsers(this.all.browsers.data, filtered, this.all.options);
56
- this.prefixerCache = new this.Prefixes(this.all.data, browsers, this.all.options);
57
- return this.prefixerCache;
37
+ let filtered = this.all.browsers.selected.filter(i => {
38
+ return supported.includes(i)
39
+ })
40
+
41
+ let browsers = new Browsers(
42
+ this.all.browsers.data,
43
+ filtered,
44
+ this.all.options
45
+ )
46
+ this.prefixerCache = new this.Prefixes(
47
+ this.all.data,
48
+ browsers,
49
+ this.all.options
50
+ )
51
+ return this.prefixerCache
58
52
  }
53
+
59
54
  /**
60
- * Parse string into declaration property and value
61
- */
62
- ;
63
-
64
- _proto.parse = function parse(str) {
65
- var parts = str.split(':');
66
- var prop = parts[0];
67
- var value = parts[1];
68
- if (!value) value = '';
69
- return [prop.trim(), value.trim()];
55
+ * Parse string into declaration property and value
56
+ */
57
+ parse (str) {
58
+ let parts = str.split(':')
59
+ let prop = parts[0]
60
+ let value = parts[1]
61
+ if (!value) value = ''
62
+ return [prop.trim(), value.trim()]
70
63
  }
64
+
71
65
  /**
72
- * Create virtual rule to process it by prefixer
73
- */
74
- ;
75
-
76
- _proto.virtual = function virtual(str) {
77
- var _this$parse = this.parse(str),
78
- prop = _this$parse[0],
79
- value = _this$parse[1];
80
-
81
- var rule = postcss.parse('a{}').first;
82
- rule.append({
83
- prop: prop,
84
- value: value,
85
- raws: {
86
- before: ''
87
- }
88
- });
89
- return rule;
66
+ * Create virtual rule to process it by prefixer
67
+ */
68
+ virtual (str) {
69
+ let [prop, value] = this.parse(str)
70
+ let rule = parse('a{}').first
71
+ rule.append({ prop, value, raws: { before: '' } })
72
+ return rule
90
73
  }
91
- /**
92
- * Return array of Declaration with all necessary prefixes
93
- */
94
- ;
95
-
96
- _proto.prefixed = function prefixed(str) {
97
- var rule = this.virtual(str);
98
74
 
75
+ /**
76
+ * Return array of Declaration with all necessary prefixes
77
+ */
78
+ prefixed (str) {
79
+ let rule = this.virtual(str)
99
80
  if (this.disabled(rule.first)) {
100
- return rule.nodes;
81
+ return rule.nodes
101
82
  }
102
83
 
103
- var result = {
104
- warn: function warn() {
105
- return null;
106
- }
107
- };
108
- var prefixer = this.prefixer().add[rule.first.prop];
109
- prefixer && prefixer.process && prefixer.process(rule.first, result);
84
+ let result = { warn: () => null }
110
85
 
111
- for (var _iterator = _createForOfIteratorHelperLoose(rule.nodes), _step; !(_step = _iterator()).done;) {
112
- var decl = _step.value;
86
+ let prefixer = this.prefixer().add[rule.first.prop]
87
+ prefixer && prefixer.process && prefixer.process(rule.first, result)
113
88
 
114
- for (var _iterator2 = _createForOfIteratorHelperLoose(this.prefixer().values('add', rule.first.prop)), _step2; !(_step2 = _iterator2()).done;) {
115
- var value = _step2.value;
116
- value.process(decl);
89
+ for (let decl of rule.nodes) {
90
+ for (let value of this.prefixer().values('add', rule.first.prop)) {
91
+ value.process(decl)
117
92
  }
118
-
119
- Value.save(this.all, decl);
93
+ Value.save(this.all, decl)
120
94
  }
121
95
 
122
- return rule.nodes;
96
+ return rule.nodes
123
97
  }
124
- /**
125
- * Return true if brackets node is "not" word
126
- */
127
- ;
128
98
 
129
- _proto.isNot = function isNot(node) {
130
- return typeof node === 'string' && /not\s*/i.test(node);
131
- }
132
99
  /**
133
- * Return true if brackets node is "or" word
134
- */
135
- ;
136
-
137
- _proto.isOr = function isOr(node) {
138
- return typeof node === 'string' && /\s*or\s*/i.test(node);
100
+ * Return true if brackets node is "not" word
101
+ */
102
+ isNot (node) {
103
+ return typeof node === 'string' && /not\s*/i.test(node)
139
104
  }
140
- /**
141
- * Return true if brackets node is (prop: value)
142
- */
143
- ;
144
105
 
145
- _proto.isProp = function isProp(node) {
146
- return typeof node === 'object' && node.length === 1 && typeof node[0] === 'string';
147
- }
148
106
  /**
149
- * Return true if prefixed property has no unprefixed
150
- */
151
- ;
152
-
153
- _proto.isHack = function isHack(all, unprefixed) {
154
- var check = new RegExp("(\\(|\\s)" + utils.escapeRegexp(unprefixed) + ":");
155
- return !check.test(all);
107
+ * Return true if brackets node is "or" word
108
+ */
109
+ isOr (node) {
110
+ return typeof node === 'string' && /\s*or\s*/i.test(node)
156
111
  }
157
- /**
158
- * Return true if we need to remove node
159
- */
160
- ;
161
112
 
162
- _proto.toRemove = function toRemove(str, all) {
163
- var _this$parse2 = this.parse(str),
164
- prop = _this$parse2[0],
165
- value = _this$parse2[1];
113
+ /**
114
+ * Return true if brackets node is (prop: value)
115
+ */
116
+ isProp (node) {
117
+ return (
118
+ typeof node === 'object' &&
119
+ node.length === 1 &&
120
+ typeof node[0] === 'string'
121
+ )
122
+ }
166
123
 
167
- var unprefixed = this.all.unprefixed(prop);
168
- var cleaner = this.all.cleaner();
124
+ /**
125
+ * Return true if prefixed property has no unprefixed
126
+ */
127
+ isHack (all, unprefixed) {
128
+ let check = new RegExp(`(\\(|\\s)${utils.escapeRegexp(unprefixed)}:`)
129
+ return !check.test(all)
130
+ }
169
131
 
170
- if (cleaner.remove[prop] && cleaner.remove[prop].remove && !this.isHack(all, unprefixed)) {
171
- return true;
132
+ /**
133
+ * Return true if we need to remove node
134
+ */
135
+ toRemove (str, all) {
136
+ let [prop, value] = this.parse(str)
137
+ let unprefixed = this.all.unprefixed(prop)
138
+
139
+ let cleaner = this.all.cleaner()
140
+
141
+ if (
142
+ cleaner.remove[prop] &&
143
+ cleaner.remove[prop].remove &&
144
+ !this.isHack(all, unprefixed)
145
+ ) {
146
+ return true
172
147
  }
173
148
 
174
- for (var _iterator3 = _createForOfIteratorHelperLoose(cleaner.values('remove', unprefixed)), _step3; !(_step3 = _iterator3()).done;) {
175
- var checker = _step3.value;
176
-
149
+ for (let checker of cleaner.values('remove', unprefixed)) {
177
150
  if (checker.check(value)) {
178
- return true;
151
+ return true
179
152
  }
180
153
  }
181
154
 
182
- return false;
155
+ return false
183
156
  }
184
- /**
185
- * Remove all unnecessary prefixes
186
- */
187
- ;
188
-
189
- _proto.remove = function remove(nodes, all) {
190
- var i = 0;
191
157
 
158
+ /**
159
+ * Remove all unnecessary prefixes
160
+ */
161
+ remove (nodes, all) {
162
+ let i = 0
192
163
  while (i < nodes.length) {
193
- if (!this.isNot(nodes[i - 1]) && this.isProp(nodes[i]) && this.isOr(nodes[i + 1])) {
164
+ if (
165
+ !this.isNot(nodes[i - 1]) &&
166
+ this.isProp(nodes[i]) &&
167
+ this.isOr(nodes[i + 1])
168
+ ) {
194
169
  if (this.toRemove(nodes[i][0], all)) {
195
- nodes.splice(i, 2);
196
- continue;
170
+ nodes.splice(i, 2)
171
+ continue
197
172
  }
198
173
 
199
- i += 2;
200
- continue;
174
+ i += 2
175
+ continue
201
176
  }
202
177
 
203
178
  if (typeof nodes[i] === 'object') {
204
- nodes[i] = this.remove(nodes[i], all);
179
+ nodes[i] = this.remove(nodes[i], all)
205
180
  }
206
181
 
207
- i += 1;
182
+ i += 1
208
183
  }
209
-
210
- return nodes;
184
+ return nodes
211
185
  }
212
- /**
213
- * Clean brackets with one child
214
- */
215
- ;
216
-
217
- _proto.cleanBrackets = function cleanBrackets(nodes) {
218
- var _this = this;
219
186
 
220
- return nodes.map(function (i) {
187
+ /**
188
+ * Clean brackets with one child
189
+ */
190
+ cleanBrackets (nodes) {
191
+ return nodes.map(i => {
221
192
  if (typeof i !== 'object') {
222
- return i;
193
+ return i
223
194
  }
224
195
 
225
196
  if (i.length === 1 && typeof i[0] === 'object') {
226
- return _this.cleanBrackets(i[0]);
197
+ return this.cleanBrackets(i[0])
227
198
  }
228
199
 
229
- return _this.cleanBrackets(i);
230
- });
200
+ return this.cleanBrackets(i)
201
+ })
231
202
  }
232
- /**
233
- * Add " or " between properties and convert it to brackets format
234
- */
235
- ;
236
203
 
237
- _proto.convert = function convert(progress) {
238
- var result = [''];
239
-
240
- for (var _iterator4 = _createForOfIteratorHelperLoose(progress), _step4; !(_step4 = _iterator4()).done;) {
241
- var i = _step4.value;
242
- result.push([i.prop + ": " + i.value]);
243
- result.push(' or ');
204
+ /**
205
+ * Add " or " between properties and convert it to brackets format
206
+ */
207
+ convert (progress) {
208
+ let result = ['']
209
+ for (let i of progress) {
210
+ result.push([`${i.prop}: ${i.value}`])
211
+ result.push(' or ')
244
212
  }
245
-
246
- result[result.length - 1] = '';
247
- return result;
213
+ result[result.length - 1] = ''
214
+ return result
248
215
  }
249
- /**
250
- * Compress value functions into a string nodes
251
- */
252
- ;
253
-
254
- _proto.normalize = function normalize(nodes) {
255
- var _this2 = this;
256
216
 
217
+ /**
218
+ * Compress value functions into a string nodes
219
+ */
220
+ normalize (nodes) {
257
221
  if (typeof nodes !== 'object') {
258
- return nodes;
222
+ return nodes
259
223
  }
260
224
 
261
- nodes = nodes.filter(function (i) {
262
- return i !== '';
263
- });
264
-
225
+ nodes = nodes.filter(i => i !== '')
265
226
  if (typeof nodes[0] === 'string' && nodes[0].includes(':')) {
266
- return [brackets.stringify(nodes)];
227
+ return [brackets.stringify(nodes)]
267
228
  }
268
229
 
269
- return nodes.map(function (i) {
270
- return _this2.normalize(i);
271
- });
230
+ return nodes.map(i => this.normalize(i))
272
231
  }
273
- /**
274
- * Add prefixes
275
- */
276
- ;
277
-
278
- _proto.add = function add(nodes, all) {
279
- var _this3 = this;
280
-
281
- return nodes.map(function (i) {
282
- if (_this3.isProp(i)) {
283
- var prefixed = _this3.prefixed(i[0]);
284
232
 
233
+ /**
234
+ * Add prefixes
235
+ */
236
+ add (nodes, all) {
237
+ return nodes.map(i => {
238
+ if (this.isProp(i)) {
239
+ let prefixed = this.prefixed(i[0])
285
240
  if (prefixed.length > 1) {
286
- return _this3.convert(prefixed);
241
+ return this.convert(prefixed)
287
242
  }
288
243
 
289
- return i;
244
+ return i
290
245
  }
291
246
 
292
247
  if (typeof i === 'object') {
293
- return _this3.add(i, all);
248
+ return this.add(i, all)
294
249
  }
295
250
 
296
- return i;
297
- });
251
+ return i
252
+ })
298
253
  }
254
+
299
255
  /**
300
- * Add prefixed declaration
301
- */
302
- ;
303
-
304
- _proto.process = function process(rule) {
305
- var ast = brackets.parse(rule.params);
306
- ast = this.normalize(ast);
307
- ast = this.remove(ast, rule.params);
308
- ast = this.add(ast, rule.params);
309
- ast = this.cleanBrackets(ast);
310
- rule.params = brackets.stringify(ast);
256
+ * Add prefixed declaration
257
+ */
258
+ process (rule) {
259
+ let ast = brackets.parse(rule.params)
260
+ ast = this.normalize(ast)
261
+ ast = this.remove(ast, rule.params)
262
+ ast = this.add(ast, rule.params)
263
+ ast = this.cleanBrackets(ast)
264
+ rule.params = brackets.stringify(ast)
311
265
  }
312
- /**
313
- * Check global options
314
- */
315
- ;
316
266
 
317
- _proto.disabled = function disabled(node) {
267
+ /**
268
+ * Check global options
269
+ */
270
+ disabled (node) {
318
271
  if (!this.all.options.grid) {
319
272
  if (node.prop === 'display' && node.value.includes('grid')) {
320
- return true;
273
+ return true
321
274
  }
322
-
323
275
  if (node.prop.includes('grid') || node.prop === 'justify-items') {
324
- return true;
276
+ return true
325
277
  }
326
278
  }
327
279
 
328
280
  if (this.all.options.flexbox === false) {
329
281
  if (node.prop === 'display' && node.value.includes('flex')) {
330
- return true;
282
+ return true
331
283
  }
332
-
333
- var other = ['order', 'justify-content', 'align-items', 'align-content'];
334
-
284
+ let other = ['order', 'justify-content', 'align-items', 'align-content']
335
285
  if (node.prop.includes('flex') || other.includes(node.prop)) {
336
- return true;
286
+ return true
337
287
  }
338
288
  }
339
289
 
340
- return false;
341
- };
342
-
343
- return Supports;
344
- }();
290
+ return false
291
+ }
292
+ }
345
293
 
346
- module.exports = Supports;
294
+ module.exports = Supports