autoprefixer 6.7.7 → 7.1.1

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 (66) hide show
  1. package/AUTHORS +1 -0
  2. package/CHANGELOG.md +23 -0
  3. package/README.md +9 -15
  4. package/data/prefixes.js +551 -517
  5. package/lib/at-rule.js +55 -38
  6. package/lib/autoprefixer.js +89 -63
  7. package/lib/brackets.js +59 -39
  8. package/lib/browsers.js +102 -65
  9. package/lib/declaration.js +212 -121
  10. package/lib/hacks/align-content.js +65 -38
  11. package/lib/hacks/align-items.js +62 -38
  12. package/lib/hacks/align-self.js +63 -36
  13. package/lib/hacks/appearance.js +42 -0
  14. package/lib/hacks/background-size.js +29 -20
  15. package/lib/hacks/block-logical.js +36 -21
  16. package/lib/hacks/border-image.js +26 -16
  17. package/lib/hacks/border-radius.js +60 -39
  18. package/lib/hacks/break-props.js +69 -44
  19. package/lib/hacks/cross-fade.js +40 -37
  20. package/lib/hacks/display-flex.js +81 -31
  21. package/lib/hacks/display-grid.js +29 -19
  22. package/lib/hacks/filter-value.js +66 -45
  23. package/lib/hacks/filter.js +26 -17
  24. package/lib/hacks/flex-basis.js +60 -30
  25. package/lib/hacks/flex-direction.js +85 -53
  26. package/lib/hacks/flex-flow.js +67 -49
  27. package/lib/hacks/flex-grow.js +45 -26
  28. package/lib/hacks/flex-shrink.js +60 -30
  29. package/lib/hacks/flex-spec.js +18 -8
  30. package/lib/hacks/flex-values.js +39 -20
  31. package/lib/hacks/flex-wrap.js +29 -20
  32. package/lib/hacks/flex.js +68 -43
  33. package/lib/hacks/fullscreen.js +31 -21
  34. package/lib/hacks/gradient.js +462 -302
  35. package/lib/hacks/grid-column-align.js +55 -0
  36. package/lib/hacks/grid-end.js +53 -28
  37. package/lib/hacks/grid-row-align.js +39 -19
  38. package/lib/hacks/grid-start.js +80 -48
  39. package/lib/hacks/grid-template.js +91 -55
  40. package/lib/hacks/image-rendering.js +63 -33
  41. package/lib/hacks/image-set.js +28 -20
  42. package/lib/hacks/inline-logical.js +32 -17
  43. package/lib/hacks/intrinsic.js +73 -0
  44. package/lib/hacks/justify-content.js +69 -42
  45. package/lib/hacks/mask-border.js +36 -21
  46. package/lib/hacks/order.js +58 -35
  47. package/lib/hacks/pixelated.js +44 -30
  48. package/lib/hacks/placeholder.js +40 -25
  49. package/lib/hacks/text-emphasis-position.js +27 -20
  50. package/lib/hacks/transform-decl.js +94 -52
  51. package/lib/hacks/writing-mode.js +37 -27
  52. package/lib/info.js +117 -78
  53. package/lib/old-selector.js +84 -58
  54. package/lib/old-value.js +22 -20
  55. package/lib/prefixer.js +164 -95
  56. package/lib/prefixes.js +446 -351
  57. package/lib/processor.js +394 -278
  58. package/lib/resolution.js +135 -75
  59. package/lib/selector.js +145 -84
  60. package/lib/supports.js +330 -210
  61. package/lib/transition.js +396 -243
  62. package/lib/utils.js +84 -48
  63. package/lib/value.js +118 -80
  64. package/package.json +53 -13
  65. package/lib/hacks/justify-items.js +0 -31
  66. package/lib/hacks/stretch.js +0 -45
package/lib/supports.js CHANGED
@@ -1,255 +1,375 @@
1
- (function() {
2
- var Browsers, Supports, Value, brackets, browser, data, postcss, ref, support, supported, utils, version, versions;
1
+ 'use strict';
3
2
 
4
- Browsers = require('./browsers');
3
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
5
4
 
6
- brackets = require('./brackets');
5
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
7
6
 
8
- Value = require('./value');
7
+ var Browsers = require('./browsers');
8
+ var brackets = require('./brackets');
9
+ var Value = require('./value');
10
+ var utils = require('./utils');
9
11
 
10
- utils = require('./utils');
12
+ var postcss = require('postcss');
11
13
 
12
- postcss = require('postcss');
13
-
14
- supported = [];
14
+ var supported = [];
15
+ var data = require('caniuse-lite').feature(require('caniuse-lite/data/features/css-featurequeries.js'));
16
+ for (var browser in data.stats) {
17
+ var versions = data.stats[browser];
18
+ for (var version in versions) {
19
+ var support = versions[version];
20
+ if (/y/.test(support)) {
21
+ supported.push(browser + ' ' + version);
22
+ }
23
+ }
24
+ }
15
25
 
16
- data = require('caniuse-db/features-json/css-featurequeries.json');
26
+ var Supports = function () {
27
+ function Supports(Prefixes, all) {
28
+ _classCallCheck(this, Supports);
17
29
 
18
- ref = data.stats;
19
- for (browser in ref) {
20
- versions = ref[browser];
21
- for (version in versions) {
22
- support = versions[version];
23
- if (/y/.test(support)) {
24
- supported.push(browser + ' ' + version);
25
- }
30
+ this.Prefixes = Prefixes;
31
+ this.all = all;
26
32
  }
27
- }
28
33
 
29
- Supports = (function() {
30
- function Supports(Prefixes, all1) {
31
- this.Prefixes = Prefixes;
32
- this.all = all1;
33
- }
34
+ /**
35
+ * Return prefixer only with @supports supported browsers
36
+ */
34
37
 
35
- Supports.prototype.prefixer = function() {
36
- var browsers, filtered;
37
- if (this.prefixerCache) {
38
- return this.prefixerCache;
39
- }
40
- filtered = this.all.browsers.selected.filter((function(_this) {
41
- return function(i) {
42
- return supported.indexOf(i) !== -1;
43
- };
44
- })(this));
45
- browsers = new Browsers(this.all.browsers.data, filtered, this.all.options);
46
- return this.prefixerCache = new this.Prefixes(this.all.data, browsers, this.all.options);
47
- };
48
-
49
- Supports.prototype.parse = function(str) {
50
- var prop, ref1, value;
51
- ref1 = str.split(':'), prop = ref1[0], value = ref1[1];
52
- value || (value = '');
53
- return [prop.trim(), value.trim()];
54
- };
55
-
56
- Supports.prototype.virtual = function(str) {
57
- var prop, ref1, rule, value;
58
- ref1 = this.parse(str), prop = ref1[0], value = ref1[1];
59
- rule = postcss.parse('a{}').first;
60
- rule.append({
61
- prop: prop,
62
- value: value,
63
- raws: {
64
- before: ''
38
+
39
+ Supports.prototype.prefixer = function prefixer() {
40
+ if (this.prefixerCache) {
41
+ return this.prefixerCache;
65
42
  }
66
- });
67
- return rule;
43
+
44
+ var filtered = this.all.browsers.selected.filter(function (i) {
45
+ return supported.indexOf(i) !== -1;
46
+ });
47
+
48
+ var browsers = new Browsers(this.all.browsers.data, filtered, this.all.options);
49
+ this.prefixerCache = new this.Prefixes(this.all.data, browsers, this.all.options);
50
+ return this.prefixerCache;
68
51
  };
69
52
 
70
- Supports.prototype.prefixed = function(str) {
71
- var decl, j, k, len, len1, prefixer, ref1, ref2, rule, value;
72
- rule = this.virtual(str);
73
- if (this.disabled(rule.first)) {
74
- return rule.nodes;
75
- }
76
- prefixer = this.prefixer().add[rule.first.prop];
77
- if (prefixer != null) {
78
- if (typeof prefixer.process === "function") {
79
- prefixer.process(rule.first);
53
+ /**
54
+ * Parse string into declaration property and value
55
+ */
56
+
57
+
58
+ Supports.prototype.parse = function parse(str) {
59
+ var _str$split = str.split(':'),
60
+ prop = _str$split[0],
61
+ value = _str$split[1];
62
+
63
+ if (!value) value = '';
64
+ return [prop.trim(), value.trim()];
65
+ };
66
+
67
+ /**
68
+ * Create virtual rule to process it by prefixer
69
+ */
70
+
71
+
72
+ Supports.prototype.virtual = function virtual(str) {
73
+ var _parse = this.parse(str),
74
+ prop = _parse[0],
75
+ value = _parse[1];
76
+
77
+ var rule = postcss.parse('a{}').first;
78
+ rule.append({ prop: prop, value: value, raws: { before: '' } });
79
+ return rule;
80
+ };
81
+
82
+ /**
83
+ * Return array of Declaration with all necessary prefixes
84
+ */
85
+
86
+
87
+ Supports.prototype.prefixed = function prefixed(str) {
88
+ var rule = this.virtual(str);
89
+ if (this.disabled(rule.first)) {
90
+ return rule.nodes;
80
91
  }
81
- }
82
- ref1 = rule.nodes;
83
- for (j = 0, len = ref1.length; j < len; j++) {
84
- decl = ref1[j];
85
- ref2 = this.prefixer().values('add', rule.first.prop);
86
- for (k = 0, len1 = ref2.length; k < len1; k++) {
87
- value = ref2[k];
88
- value.process(decl);
92
+
93
+ var prefixer = this.prefixer().add[rule.first.prop];
94
+ prefixer && prefixer.process && prefixer.process(rule.first);
95
+
96
+ for (var _iterator = rule.nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
97
+ var _ref;
98
+
99
+ if (_isArray) {
100
+ if (_i >= _iterator.length) break;
101
+ _ref = _iterator[_i++];
102
+ } else {
103
+ _i = _iterator.next();
104
+ if (_i.done) break;
105
+ _ref = _i.value;
106
+ }
107
+
108
+ var decl = _ref;
109
+
110
+ for (var _iterator2 = this.prefixer().values('add', rule.first.prop), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
111
+ var _ref2;
112
+
113
+ if (_isArray2) {
114
+ if (_i2 >= _iterator2.length) break;
115
+ _ref2 = _iterator2[_i2++];
116
+ } else {
117
+ _i2 = _iterator2.next();
118
+ if (_i2.done) break;
119
+ _ref2 = _i2.value;
120
+ }
121
+
122
+ var value = _ref2;
123
+
124
+ value.process(decl);
125
+ }
126
+ Value.save(this.all, decl);
89
127
  }
90
- Value.save(this.all, decl);
91
- }
92
- return rule.nodes;
128
+
129
+ return rule.nodes;
93
130
  };
94
131
 
95
- Supports.prototype.isNot = function(node) {
96
- return typeof node === 'string' && /not\s*/i.test(node);
132
+ /**
133
+ * Return true if brackets node is "not" word
134
+ */
135
+
136
+
137
+ Supports.prototype.isNot = function isNot(node) {
138
+ return typeof node === 'string' && /not\s*/i.test(node);
97
139
  };
98
140
 
99
- Supports.prototype.isOr = function(node) {
100
- return typeof node === 'string' && /\s*or\s*/i.test(node);
141
+ /**
142
+ * Return true if brackets node is "or" word
143
+ */
144
+
145
+
146
+ Supports.prototype.isOr = function isOr(node) {
147
+ return typeof node === 'string' && /\s*or\s*/i.test(node);
101
148
  };
102
149
 
103
- Supports.prototype.isProp = function(node) {
104
- return typeof node === 'object' && node.length === 1 && typeof node[0] === 'string';
150
+ /**
151
+ * Return true if brackets node is (prop: value)
152
+ */
153
+
154
+
155
+ Supports.prototype.isProp = function isProp(node) {
156
+ return (typeof node === 'undefined' ? 'undefined' : _typeof(node)) === 'object' && node.length === 1 && typeof node[0] === 'string';
105
157
  };
106
158
 
107
- Supports.prototype.isHack = function(all, unprefixed) {
108
- var check;
109
- check = new RegExp('(\\(|\\s)' + utils.escapeRegexp(unprefixed) + ':');
110
- return !check.test(all);
159
+ /**
160
+ * Return true if prefixed property has no unprefixed
161
+ */
162
+
163
+
164
+ Supports.prototype.isHack = function isHack(all, unprefixed) {
165
+ var check = new RegExp('(\\(|\\s)' + utils.escapeRegexp(unprefixed) + ':');
166
+ return !check.test(all);
111
167
  };
112
168
 
113
- Supports.prototype.toRemove = function(str, all) {
114
- var checker, j, len, prop, ref1, ref2, ref3, unprefixed, value;
115
- ref1 = this.parse(str), prop = ref1[0], value = ref1[1];
116
- unprefixed = this.all.unprefixed(prop);
117
- if (((ref2 = this.all.cleaner().remove[prop]) != null ? ref2.remove : void 0) && !this.isHack(all, unprefixed)) {
118
- return true;
119
- }
120
- ref3 = this.all.cleaner().values('remove', unprefixed);
121
- for (j = 0, len = ref3.length; j < len; j++) {
122
- checker = ref3[j];
123
- if (checker.check(value)) {
124
- return true;
169
+ /**
170
+ * Return true if we need to remove node
171
+ */
172
+
173
+
174
+ Supports.prototype.toRemove = function toRemove(str, all) {
175
+ var _parse2 = this.parse(str),
176
+ prop = _parse2[0],
177
+ value = _parse2[1];
178
+
179
+ var unprefixed = this.all.unprefixed(prop);
180
+
181
+ var cleaner = this.all.cleaner();
182
+
183
+ if (cleaner.remove[prop] && cleaner.remove[prop].remove && !this.isHack(all, unprefixed)) {
184
+ return true;
125
185
  }
126
- }
127
- return false;
128
- };
129
-
130
- Supports.prototype.remove = function(nodes, all) {
131
- var i;
132
- i = 0;
133
- while (i < nodes.length) {
134
- if (!this.isNot(nodes[i - 1]) && this.isProp(nodes[i]) && this.isOr(nodes[i + 1])) {
135
- if (this.toRemove(nodes[i][0], all)) {
136
- nodes.splice(i, 2);
137
- } else {
138
- i += 2;
139
- }
140
- } else {
141
- if (typeof nodes[i] === 'object') {
142
- nodes[i] = this.remove(nodes[i], all);
143
- }
144
- i += 1;
186
+
187
+ for (var _iterator3 = cleaner.values('remove', unprefixed), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
188
+ var _ref3;
189
+
190
+ if (_isArray3) {
191
+ if (_i3 >= _iterator3.length) break;
192
+ _ref3 = _iterator3[_i3++];
193
+ } else {
194
+ _i3 = _iterator3.next();
195
+ if (_i3.done) break;
196
+ _ref3 = _i3.value;
197
+ }
198
+
199
+ var checker = _ref3;
200
+
201
+ if (checker.check(value)) {
202
+ return true;
203
+ }
145
204
  }
146
- }
147
- return nodes;
205
+
206
+ return false;
148
207
  };
149
208
 
150
- Supports.prototype.cleanBrackets = function(nodes) {
151
- return nodes.map((function(_this) {
152
- return function(i) {
153
- if (typeof i === 'object') {
154
- if (i.length === 1 && typeof i[0] === 'object') {
155
- return _this.cleanBrackets(i[0]);
209
+ /**
210
+ * Remove all unnecessary prefixes
211
+ */
212
+
213
+
214
+ Supports.prototype.remove = function remove(nodes, all) {
215
+ var i = 0;
216
+ while (i < nodes.length) {
217
+ if (!this.isNot(nodes[i - 1]) && this.isProp(nodes[i]) && this.isOr(nodes[i + 1])) {
218
+ if (this.toRemove(nodes[i][0], all)) {
219
+ nodes.splice(i, 2);
220
+ } else {
221
+ i += 2;
222
+ }
156
223
  } else {
157
- return _this.cleanBrackets(i);
224
+ if (_typeof(nodes[i]) === 'object') {
225
+ nodes[i] = this.remove(nodes[i], all);
226
+ }
227
+ i += 1;
158
228
  }
159
- } else {
160
- return i;
161
- }
162
- };
163
- })(this));
164
- };
165
-
166
- Supports.prototype.convert = function(progress) {
167
- var i, j, len, result;
168
- result = [''];
169
- for (j = 0, len = progress.length; j < len; j++) {
170
- i = progress[j];
171
- result.push([i.prop + ": " + i.value]);
172
- result.push(' or ');
173
- }
174
- result[result.length - 1] = '';
175
- return result;
176
- };
177
-
178
- Supports.prototype.normalize = function(nodes) {
179
- if (typeof nodes === 'object') {
180
- nodes = nodes.filter(function(i) {
181
- return i !== '';
182
- });
183
- if (typeof nodes[0] === 'string' && nodes[0].indexOf(':') !== -1) {
184
- return [brackets.stringify(nodes)];
185
- } else {
186
- return nodes.map((function(_this) {
187
- return function(i) {
188
- return _this.normalize(i);
189
- };
190
- })(this));
191
229
  }
192
- } else {
193
230
  return nodes;
194
- }
195
231
  };
196
232
 
197
- Supports.prototype.add = function(nodes, all) {
198
- return nodes.map((function(_this) {
199
- return function(i) {
200
- var prefixed;
201
- if (_this.isProp(i)) {
202
- prefixed = _this.prefixed(i[0]);
203
- if (prefixed.length > 1) {
204
- return _this.convert(prefixed);
233
+ /**
234
+ * Clean brackets with one child
235
+ */
236
+
237
+
238
+ Supports.prototype.cleanBrackets = function cleanBrackets(nodes) {
239
+ var _this = this;
240
+
241
+ return nodes.map(function (i) {
242
+ if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object') {
243
+ if (i.length === 1 && _typeof(i[0]) === 'object') {
244
+ return _this.cleanBrackets(i[0]);
245
+ } else {
246
+ return _this.cleanBrackets(i);
247
+ }
205
248
  } else {
206
- return i;
249
+ return i;
207
250
  }
208
- } else if (typeof i === 'object') {
209
- return _this.add(i, all);
210
- } else {
211
- return i;
212
- }
213
- };
214
- })(this));
215
- };
216
-
217
- Supports.prototype.process = function(rule) {
218
- var ast;
219
- ast = brackets.parse(rule.params);
220
- ast = this.normalize(ast);
221
- ast = this.remove(ast, rule.params);
222
- ast = this.add(ast, rule.params);
223
- ast = this.cleanBrackets(ast);
224
- return rule.params = brackets.stringify(ast);
225
- };
226
-
227
- Supports.prototype.disabled = function(node) {
228
- var other;
229
- if (this.all.options.grid === false) {
230
- if (node.prop === 'display' && node.value.indexOf('grid') !== -1) {
231
- return true;
251
+ });
252
+ };
253
+
254
+ /**
255
+ * Add " or " between properties and convert it to brackets format
256
+ */
257
+
258
+
259
+ Supports.prototype.convert = function convert(progress) {
260
+ var result = [''];
261
+ for (var _iterator4 = progress, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
262
+ var _ref4;
263
+
264
+ if (_isArray4) {
265
+ if (_i4 >= _iterator4.length) break;
266
+ _ref4 = _iterator4[_i4++];
267
+ } else {
268
+ _i4 = _iterator4.next();
269
+ if (_i4.done) break;
270
+ _ref4 = _i4.value;
271
+ }
272
+
273
+ var i = _ref4;
274
+
275
+ result.push([i.prop + ': ' + i.value]);
276
+ result.push(' or ');
232
277
  }
233
- if (node.prop.indexOf('grid') !== -1 || node.prop === 'justify-items') {
234
- return true;
278
+ result[result.length - 1] = '';
279
+ return result;
280
+ };
281
+
282
+ /**
283
+ * Compress value functions into a string nodes
284
+ */
285
+
286
+
287
+ Supports.prototype.normalize = function normalize(nodes) {
288
+ var _this2 = this;
289
+
290
+ if ((typeof nodes === 'undefined' ? 'undefined' : _typeof(nodes)) === 'object') {
291
+ nodes = nodes.filter(function (i) {
292
+ return i !== '';
293
+ });
294
+ if (typeof nodes[0] === 'string' && nodes[0].indexOf(':') !== -1) {
295
+ return [brackets.stringify(nodes)];
296
+ } else {
297
+ return nodes.map(function (i) {
298
+ return _this2.normalize(i);
299
+ });
300
+ }
301
+ } else {
302
+ return nodes;
235
303
  }
236
- }
237
- if (this.all.options.flexbox === false) {
238
- if (node.prop === 'display' && node.value.indexOf('flex') !== -1) {
239
- return true;
304
+ };
305
+
306
+ /**
307
+ * Add prefixes
308
+ */
309
+
310
+
311
+ Supports.prototype.add = function add(nodes, all) {
312
+ var _this3 = this;
313
+
314
+ return nodes.map(function (i) {
315
+ if (_this3.isProp(i)) {
316
+ var prefixed = _this3.prefixed(i[0]);
317
+ if (prefixed.length > 1) {
318
+ return _this3.convert(prefixed);
319
+ } else {
320
+ return i;
321
+ }
322
+ } else if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object') {
323
+ return _this3.add(i, all);
324
+ } else {
325
+ return i;
326
+ }
327
+ });
328
+ };
329
+
330
+ /**
331
+ * Add prefixed declaration
332
+ */
333
+
334
+
335
+ Supports.prototype.process = function process(rule) {
336
+ var ast = brackets.parse(rule.params);
337
+ ast = this.normalize(ast);
338
+ ast = this.remove(ast, rule.params);
339
+ ast = this.add(ast, rule.params);
340
+ ast = this.cleanBrackets(ast);
341
+ rule.params = brackets.stringify(ast);
342
+ };
343
+
344
+ /**
345
+ * Check global options
346
+ */
347
+
348
+
349
+ Supports.prototype.disabled = function disabled(node) {
350
+ if (this.all.options.grid === false) {
351
+ if (node.prop === 'display' && node.value.indexOf('grid') !== -1) {
352
+ return true;
353
+ }
354
+ if (node.prop.indexOf('grid') !== -1 || node.prop === 'justify-items') {
355
+ return true;
356
+ }
240
357
  }
241
- other = ['order', 'justify-content', 'align-items', 'align-content'];
242
- if (node.prop.indexOf('flex') !== -1 || other.indexOf(node.prop) !== -1) {
243
- return true;
358
+
359
+ if (this.all.options.flexbox === false) {
360
+ if (node.prop === 'display' && node.value.indexOf('flex') !== -1) {
361
+ return true;
362
+ }
363
+ var other = ['order', 'justify-content', 'align-items', 'align-content'];
364
+ if (node.prop.indexOf('flex') !== -1 || other.indexOf(node.prop) !== -1) {
365
+ return true;
366
+ }
244
367
  }
245
- }
246
- return false;
368
+
369
+ return false;
247
370
  };
248
371
 
249
372
  return Supports;
373
+ }();
250
374
 
251
- })();
252
-
253
- module.exports = Supports;
254
-
255
- }).call(this);
375
+ module.exports = Supports;