postcss-merge-rules 2.0.10 → 2.1.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ # 2.1.2
2
+
3
+ * Performance improvements; no compatibility checking for simple selectors,
4
+ cached compatibility lookups, and early exit on compatibility mismatches
5
+ (thanks to @akx).
6
+
7
+ # 2.1.1
8
+
9
+ * Resolves an issue with `2.1.0` where `browserslist` was not being installed
10
+ correctly on older Node versions.
11
+
12
+ # 2.1.0
13
+
14
+ * Rules are now merged based on supported browsers, which uses `browserslist`
15
+ & `caniuse-api`. The browsers should be supplied by the standard means of
16
+ [configuring `browserslist`][browserslist], either using config files or
17
+ via environment variables.
18
+
19
+ [browserslist]: https://github.com/ai/browserslist#config-file
20
+
21
+ # 2.0.11
22
+
23
+ * Resolves an issue where partially identical properties would be removed from
24
+ a rule erroneously; for example `color: #fff` would be removed if the other
25
+ rule contained `background-color: #fff`.
26
+
1
27
  # 2.0.10
2
28
 
3
29
  * Replaces the internal list of vendor prefixes with the `vendors` module
package/dist/index.js CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
5
+ var _browserslist = require('browserslist');
6
+
7
+ var _browserslist2 = _interopRequireDefault(_browserslist);
6
8
 
7
9
  var _postcss = require('postcss');
8
10
 
@@ -16,9 +18,11 @@ var _clone = require('./lib/clone');
16
18
 
17
19
  var _clone2 = _interopRequireDefault(_clone);
18
20
 
19
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+ var _ensureCompatibility = require('./lib/ensureCompatibility');
22
+
23
+ var _ensureCompatibility2 = _interopRequireDefault(_ensureCompatibility);
20
24
 
21
- var list = _postcss2.default.list;
25
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
26
 
23
27
  var prefixes = _vendors2.default.map(function (v) {
24
28
  return '-' + v + '-';
@@ -59,9 +63,15 @@ function sameParent(ruleA, ruleB) {
59
63
  return hasParent ? sameType : true;
60
64
  }
61
65
 
62
- function canMerge(ruleA, ruleB) {
63
- var a = list.comma(ruleA.selector);
64
- var b = list.comma(ruleB.selector);
66
+ function canMerge(ruleA, ruleB, browsers, compatibilityCache) {
67
+ var a = ruleA.selectors;
68
+ var b = ruleB.selectors;
69
+
70
+ var selectors = a.concat(b);
71
+
72
+ if (!(0, _ensureCompatibility2.default)(selectors, browsers, compatibilityCache)) {
73
+ return false;
74
+ }
65
75
 
66
76
  var parent = sameParent(ruleA, ruleB);
67
77
  var name = ruleA.parent.name;
@@ -69,7 +79,7 @@ function canMerge(ruleA, ruleB) {
69
79
  if (parent && name && ~name.indexOf('keyframes')) {
70
80
  return false;
71
81
  }
72
- return parent && (a.concat(b).every(noVendor) || sameVendor(a, b));
82
+ return parent && (selectors.every(noVendor) || sameVendor(a, b));
73
83
  }
74
84
 
75
85
  var getDecls = function getDecls(rule) {
@@ -202,12 +212,12 @@ function partialMerge(first, second) {
202
212
  }
203
213
  }
204
214
 
205
- function selectorMerger() {
215
+ function selectorMerger(browsers, compatibilityCache) {
206
216
  var cache = null;
207
217
  return function (rule) {
208
218
  // Prime the cache with the first rule, or alternately ensure that it is
209
219
  // safe to merge both declarations before continuing
210
- if (!cache || !canMerge(rule, cache)) {
220
+ if (!cache || !canMerge(rule, cache, browsers, compatibilityCache)) {
211
221
  cache = rule;
212
222
  return;
213
223
  }
@@ -228,21 +238,15 @@ function selectorMerger() {
228
238
  // Merge when both selectors are exactly equal
229
239
  // e.g. a { color: blue } a { font-weight: bold }
230
240
  if (cache.selector === rule.selector) {
231
- var _ret = function () {
232
- var toString = String(cache);
233
- rule.walk(function (decl) {
234
- if (~toString.indexOf(String(decl))) {
235
- return decl.remove();
236
- }
237
- decl.moveTo(cache);
238
- });
239
- rule.remove();
240
- return {
241
- v: void 0
242
- };
243
- }();
244
-
245
- if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
241
+ var cached = getDecls(cache);
242
+ rule.walk(function (decl) {
243
+ if (~cached.indexOf(String(decl))) {
244
+ return decl.remove();
245
+ }
246
+ decl.moveTo(cache);
247
+ });
248
+ rule.remove();
249
+ return;
246
250
  }
247
251
  // Partial merge: check if the rule contains a subset of the last; if
248
252
  // so create a joined selector with the subset, if smaller.
@@ -251,9 +255,16 @@ function selectorMerger() {
251
255
  }
252
256
 
253
257
  exports.default = _postcss2.default.plugin('postcss-merge-rules', function () {
254
- return function (css) {
255
- return css.walkRules(selectorMerger());
258
+ return function (css, result) {
259
+ var opts = result.opts;
260
+
261
+ var browsers = (0, _browserslist2.default)(null, {
262
+ stats: opts && opts.stats,
263
+ path: opts && opts.from,
264
+ env: opts && opts.env
265
+ });
266
+ var compatibilityCache = {};
267
+ css.walkRules(selectorMerger(browsers, compatibilityCache));
256
268
  };
257
269
  });
258
- module.exports = exports['default'];
259
- //# sourceMappingURL=data:application/json;base64,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Q0Esb0JBQVEsSUFBUjtBQUNBO0FBQ0g7OztBQUdELFlBQUksTUFBTSxRQUFOLEtBQW1CLEtBQUssUUFBNUIsRUFBc0M7QUFBQTtBQUNsQyxvQkFBTSxXQUFXLE9BQU8sS0FBUCxDQUFqQjtBQUNBLHFCQUFLLElBQUwsQ0FBVSxnQkFBUTtBQUNkLHdCQUFJLENBQUMsU0FBUyxPQUFULENBQWlCLE9BQU8sSUFBUCxDQUFqQixDQUFMLEVBQXFDO0FBQ2pDLCtCQUFPLEtBQUssTUFBTCxFQUFQO0FBQ0g7QUFDRCx5QkFBSyxNQUFMLENBQVksS0FBWjtBQUNILGlCQUxEO0FBTUEscUJBQUssTUFBTDtBQUNBO0FBQUE7QUFBQTtBQVRrQzs7QUFBQTtBQVVyQzs7O0FBR0QsZ0JBQVEsYUFBYSxLQUFiLEVBQW9CLElBQXBCLENBQVI7QUFDSCxLQXJDRDtBQXNDSDs7a0JBRWMsa0JBQVEsTUFBUixDQUFlLHFCQUFmLEVBQXNDLFlBQU07QUFDdkQsV0FBTztBQUFBLGVBQU8sSUFBSSxTQUFKLENBQWMsZ0JBQWQsQ0FBUDtBQUFBLEtBQVA7QUFDSCxDQUZjLEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCB2ZW5kb3JzIGZyb20gJ3ZlbmRvcnMnO1xuaW1wb3J0IGNsb25lIGZyb20gJy4vbGliL2Nsb25lJztcblxuY29uc3Qge2xpc3R9ID0gcG9zdGNzcztcbmNvbnN0IHByZWZpeGVzID0gdmVuZG9ycy5tYXAodiA9PiBgLSR7dn0tYCk7XG5cbmZ1bmN0aW9uIGludGVyc2VjdCAoYSwgYiwgbm90KSB7XG4gICAgcmV0dXJuIGEuZmlsdGVyKGMgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IH5iLmluZGV4T2YoYyk7XG4gICAgICAgIHJldHVybiBub3QgPyAhaW5kZXggOiBpbmRleDtcbiAgICB9KTtcbn1cblxuY29uc3QgZGlmZmVyZW50ID0gKGEsIGIpID0+IGludGVyc2VjdChhLCBiLCB0cnVlKS5jb25jYXQoaW50ZXJzZWN0KGIsIGEsIHRydWUpKTtcbmNvbnN0IGZpbHRlclByZWZpeGVzID0gc2VsZWN0b3IgPT4gaW50ZXJzZWN0KHByZWZpeGVzLCBzZWxlY3Rvcik7XG5cbmZ1bmN0aW9uIHNhbWVWZW5kb3IgKHNlbGVjdG9yc0EsIHNlbGVjdG9yc0IpIHtcbiAgICBsZXQgc2FtZSA9IHNlbGVjdG9ycyA9PiBzZWxlY3RvcnMubWFwKGZpbHRlclByZWZpeGVzKS5qb2luKCk7XG4gICAgcmV0dXJuIHNhbWUoc2VsZWN0b3JzQSkgPT09IHNhbWUoc2VsZWN0b3JzQik7XG59XG5cbmNvbnN0IG5vVmVuZG9yID0gc2VsZWN0b3IgPT4gIWZpbHRlclByZWZpeGVzKHNlbGVjdG9yKS5sZW5ndGg7XG5cbmZ1bmN0aW9uIHNhbWVQYXJlbnQgKHJ1bGVBLCBydWxlQikge1xuICAgIGNvbnN0IGhhc1BhcmVudCA9IHJ1bGVBLnBhcmVudCAmJiBydWxlQi5wYXJlbnQ7XG4gICAgbGV0IHNhbWVUeXBlID0gaGFzUGFyZW50ICYmIHJ1bGVBLnBhcmVudC50eXBlID09PSBydWxlQi5wYXJlbnQudHlwZTtcbiAgICAvLyBJZiBhbiBhdCBydWxlLCBlbnN1cmUgdGhhdCB0aGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWVcbiAgICBpZiAoaGFzUGFyZW50ICYmIHJ1bGVBLnBhcmVudC50eXBlICE9PSAncm9vdCcgJiYgcnVsZUIucGFyZW50LnR5cGUgIT09ICdyb290Jykge1xuICAgICAgICBzYW1lVHlwZSA9IHNhbWVUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgcnVsZUEucGFyZW50LnBhcmFtcyA9PT0gcnVsZUIucGFyZW50LnBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgIHJ1bGVBLnBhcmVudC5uYW1lID09PSBydWxlQi5wYXJlbnQubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc1BhcmVudCA/IHNhbWVUeXBlIDogdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2FuTWVyZ2UgKHJ1bGVBLCBydWxlQikge1xuICAgIGNvbnN0IGEgPSBsaXN0LmNvbW1hKHJ1bGVBLnNlbGVjdG9yKTtcbiAgICBjb25zdCBiID0gbGlzdC5jb21tYShydWxlQi5zZWxlY3Rvcik7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBzYW1lUGFyZW50KHJ1bGVBLCBydWxlQik7XG4gICAgY29uc3Qge25hbWV9ID0gcnVsZUEucGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgbmFtZSAmJiB+bmFtZS5pbmRleE9mKCdrZXlmcmFtZXMnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnQgJiYgKGEuY29uY2F0KGIpLmV2ZXJ5KG5vVmVuZG9yKSB8fCBzYW1lVmVuZG9yKGEsIGIpKTtcbn1cblxuY29uc3QgZ2V0RGVjbHMgPSBydWxlID0+IHJ1bGUubm9kZXMgPyBydWxlLm5vZGVzLm1hcChTdHJpbmcpIDogW107XG5jb25zdCBqb2luU2VsZWN0b3JzID0gKC4uLnJ1bGVzKSA9PiBydWxlcy5tYXAocyA9PiBzLnNlbGVjdG9yKS5qb2luKCk7XG5cbmZ1bmN0aW9uIHJ1bGVMZW5ndGggKC4uLnJ1bGVzKSB7XG4gICAgcmV0dXJuIHJ1bGVzLm1hcChyID0+IHIubm9kZXMubGVuZ3RoID8gU3RyaW5nKHIpIDogJycpLmpvaW4oJycpLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gc3BsaXRQcm9wIChwcm9wKSB7XG4gICAgY29uc3QgcGFydHMgPSBwcm9wLnNwbGl0KCctJyk7XG4gICAgbGV0IGJhc2UsIHJlc3Q7XG4gICAgLy8gVHJlYXQgdmVuZG9yIHByZWZpeGVkIHByb3BlcnRpZXMgYXMgaWYgdGhleSB3ZXJlIHVucHJlZml4ZWQ7XG4gICAgLy8gbW92aW5nIHRoZW0gd2hlbiBjb21iaW5lZCB3aXRoIG5vbi1wcmVmaXhlZCBwcm9wZXJ0aWVzIGNhblxuICAgIC8vIGNhdXNlIGlzc3Vlcy4gZS5nLiBtb3ZpbmcgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXAgd2hlbiB0aGVyZVxuICAgIC8vIGlzIGEgYmFja2dyb3VuZCBzaG9ydGhhbmQgZGVmaW5pdGlvbi5cbiAgICBpZiAocHJvcFswXSA9PT0gJy0nKSB7XG4gICAgICAgIGJhc2UgPSBwYXJ0c1syXTtcbiAgICAgICAgcmVzdCA9IHBhcnRzLnNsaWNlKDMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSBwYXJ0c1swXTtcbiAgICAgICAgcmVzdCA9IHBhcnRzLnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4gW2Jhc2UsIHJlc3RdO1xufVxuXG5mdW5jdGlvbiBpc0NvbmZsaWN0aW5nUHJvcCAocHJvcEEsIHByb3BCKSB7XG4gICAgaWYgKHByb3BBID09PSBwcm9wQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgYSA9IHNwbGl0UHJvcChwcm9wQSk7XG4gICAgY29uc3QgYiA9IHNwbGl0UHJvcChwcm9wQik7XG4gICAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXS5sZW5ndGggIT09IGJbMV0ubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBoYXNDb25mbGljdHMgKGRlY2xQcm9wLCBub3RNb3ZlZCkge1xuICAgIHJldHVybiBub3RNb3ZlZC5zb21lKHByb3AgPT4gaXNDb25mbGljdGluZ1Byb3AocHJvcCwgZGVjbFByb3ApKTtcbn1cblxuZnVuY3Rpb24gcGFydGlhbE1lcmdlIChmaXJzdCwgc2Vjb25kKSB7XG4gICAgbGV0IGludGVyc2VjdGlvbiA9IGludGVyc2VjdChnZXREZWNscyhmaXJzdCksIGdldERlY2xzKHNlY29uZCkpO1xuICAgIGlmICghaW50ZXJzZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc2Vjb25kO1xuICAgIH1cbiAgICBsZXQgbmV4dFJ1bGUgPSBzZWNvbmQubmV4dCgpO1xuICAgIGlmIChuZXh0UnVsZSAmJiBuZXh0UnVsZS50eXBlID09PSAncnVsZScgJiYgY2FuTWVyZ2Uoc2Vjb25kLCBuZXh0UnVsZSkpIHtcbiAgICAgICAgbGV0IG5leHRJbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3QoZ2V0RGVjbHMoc2Vjb25kKSwgZ2V0RGVjbHMobmV4dFJ1bGUpKTtcbiAgICAgICAgaWYgKG5leHRJbnRlcnNlY3Rpb24ubGVuZ3RoID4gaW50ZXJzZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzZWNvbmQ7IHNlY29uZCA9IG5leHRSdWxlOyBpbnRlcnNlY3Rpb24gPSBuZXh0SW50ZXJzZWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlY2lldmluZ0Jsb2NrID0gY2xvbmUoc2Vjb25kKTtcbiAgICByZWNpZXZpbmdCbG9jay5zZWxlY3RvciA9IGpvaW5TZWxlY3RvcnMoZmlyc3QsIHNlY29uZCk7XG4gICAgcmVjaWV2aW5nQmxvY2subm9kZXMgPSBbXTtcbiAgICBzZWNvbmQucGFyZW50Lmluc2VydEJlZm9yZShzZWNvbmQsIHJlY2lldmluZ0Jsb2NrKTtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gZGlmZmVyZW50KGdldERlY2xzKGZpcnN0KSwgZ2V0RGVjbHMoc2Vjb25kKSk7XG4gICAgY29uc3QgZmlsdGVyQ29uZmxpY3RzID0gKGRlY2xzLCBpbnRlcnNlY3RuKSA9PiB7XG4gICAgICAgIGxldCB3aWxsTm90TW92ZSA9IFtdO1xuICAgICAgICByZXR1cm4gZGVjbHMucmVkdWNlKCh3aWxsTW92ZSwgZGVjbCkgPT4ge1xuICAgICAgICAgICAgbGV0IGludGVyc2VjdHMgPSB+aW50ZXJzZWN0bi5pbmRleE9mKGRlY2wpO1xuICAgICAgICAgICAgbGV0IHByb3AgPSBkZWNsLnNwbGl0KCc6JylbMF07XG4gICAgICAgICAgICBsZXQgYmFzZSA9IHByb3Auc3BsaXQoJy0nKVswXTtcbiAgICAgICAgICAgIGxldCBjYW5Nb3ZlID0gZGlmZmVyZW5jZS5ldmVyeShkID0+IGQuc3BsaXQoJzonKVswXSAhPT0gYmFzZSk7XG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0cyAmJiBjYW5Nb3ZlICYmICFoYXNDb25mbGljdHMocHJvcCwgd2lsbE5vdE1vdmUpKSB7XG4gICAgICAgICAgICAgICAgd2lsbE1vdmUucHVzaChkZWNsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2lsbE5vdE1vdmUucHVzaChwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3aWxsTW92ZTtcbiAgICAgICAgfSwgW10pO1xuICAgIH07XG4gICAgaW50ZXJzZWN0aW9uID0gZmlsdGVyQ29uZmxpY3RzKGdldERlY2xzKGZpcnN0KS5yZXZlcnNlKCksIGludGVyc2VjdGlvbik7XG4gICAgaW50ZXJzZWN0aW9uID0gZmlsdGVyQ29uZmxpY3RzKChnZXREZWNscyhzZWNvbmQpKSwgaW50ZXJzZWN0aW9uKTtcbiAgICBjb25zdCBmaXJzdENsb25lID0gY2xvbmUoZmlyc3QpO1xuICAgIGNvbnN0IHNlY29uZENsb25lID0gY2xvbmUoc2Vjb25kKTtcbiAgICBjb25zdCBtb3ZlRGVjbCA9IGNhbGxiYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIGRlY2wgPT4ge1xuICAgICAgICAgICAgaWYgKH5pbnRlcnNlY3Rpb24uaW5kZXhPZihTdHJpbmcoZGVjbCkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBkZWNsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGZpcnN0Q2xvbmUud2Fsa0RlY2xzKG1vdmVEZWNsKGRlY2wgPT4ge1xuICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICByZWNpZXZpbmdCbG9jay5hcHBlbmQoZGVjbCk7XG4gICAgfSkpO1xuICAgIHNlY29uZENsb25lLndhbGtEZWNscyhtb3ZlRGVjbChkZWNsID0+IGRlY2wucmVtb3ZlKCkpKTtcbiAgICBjb25zdCBtZXJnZWQgPSBydWxlTGVuZ3RoKGZpcnN0Q2xvbmUsIHJlY2lldmluZ0Jsb2NrLCBzZWNvbmRDbG9uZSk7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBydWxlTGVuZ3RoKGZpcnN0LCBzZWNvbmQpO1xuICAgIGlmIChtZXJnZWQgPCBvcmlnaW5hbCkge1xuICAgICAgICBmaXJzdC5yZXBsYWNlV2l0aChmaXJzdENsb25lKTtcbiAgICAgICAgc2Vjb25kLnJlcGxhY2VXaXRoKHNlY29uZENsb25lKTtcbiAgICAgICAgW2ZpcnN0Q2xvbmUsIHJlY2lldmluZ0Jsb2NrLCBzZWNvbmRDbG9uZV0uZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgIGlmICghci5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFzZWNvbmRDbG9uZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNpZXZpbmdCbG9jaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2Vjb25kQ2xvbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVjaWV2aW5nQmxvY2sucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybiBzZWNvbmQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3Rvck1lcmdlciAoKSB7XG4gICAgbGV0IGNhY2hlID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgLy8gUHJpbWUgdGhlIGNhY2hlIHdpdGggdGhlIGZpcnN0IHJ1bGUsIG9yIGFsdGVybmF0ZWx5IGVuc3VyZSB0aGF0IGl0IGlzXG4gICAgICAgIC8vIHNhZmUgdG8gbWVyZ2UgYm90aCBkZWNsYXJhdGlvbnMgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgaWYgKCFjYWNoZSB8fCAhY2FuTWVyZ2UocnVsZSwgY2FjaGUpKSB7XG4gICAgICAgICAgICBjYWNoZSA9IHJ1bGU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgZGVkdXBsaWNhdGUgdGhlIHNhbWUgcnVsZTsgdGhpcyBpcyBzb21ldGltZXNcbiAgICAgICAgLy8gY2F1c2VkIGJ5IGEgcGFydGlhbCBtZXJnZVxuICAgICAgICBpZiAoY2FjaGUgPT09IHJ1bGUpIHtcbiAgICAgICAgICAgIGNhY2hlID0gcnVsZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBNZXJnZSB3aGVuIGRlY2xhcmF0aW9ucyBhcmUgZXhhY3RseSBlcXVhbFxuICAgICAgICAvLyBlLmcuIGgxIHsgY29sb3I6IHJlZCB9IGgyIHsgY29sb3I6IHJlZCB9XG4gICAgICAgIGlmIChnZXREZWNscyhydWxlKS5qb2luKCc7JykgPT09IGdldERlY2xzKGNhY2hlKS5qb2luKCc7JykpIHtcbiAgICAgICAgICAgIHJ1bGUuc2VsZWN0b3IgPSBqb2luU2VsZWN0b3JzKGNhY2hlLCBydWxlKTtcbiAgICAgICAgICAgIGNhY2hlLnJlbW92ZSgpO1xuICAgICAgICAgICAgY2FjaGUgPSBydWxlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1lcmdlIHdoZW4gYm90aCBzZWxlY3RvcnMgYXJlIGV4YWN0bHkgZXF1YWxcbiAgICAgICAgLy8gZS5nLiBhIHsgY29sb3I6IGJsdWUgfSBhIHsgZm9udC13ZWlnaHQ6IGJvbGQgfVxuICAgICAgICBpZiAoY2FjaGUuc2VsZWN0b3IgPT09IHJ1bGUuc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvU3RyaW5nID0gU3RyaW5nKGNhY2hlKTtcbiAgICAgICAgICAgIHJ1bGUud2FsayhkZWNsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAofnRvU3RyaW5nLmluZGV4T2YoU3RyaW5nKGRlY2wpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVjbC5tb3ZlVG8oY2FjaGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBydWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhcnRpYWwgbWVyZ2U6IGNoZWNrIGlmIHRoZSBydWxlIGNvbnRhaW5zIGEgc3Vic2V0IG9mIHRoZSBsYXN0OyBpZlxuICAgICAgICAvLyBzbyBjcmVhdGUgYSBqb2luZWQgc2VsZWN0b3Igd2l0aCB0aGUgc3Vic2V0LCBpZiBzbWFsbGVyLlxuICAgICAgICBjYWNoZSA9IHBhcnRpYWxNZXJnZShjYWNoZSwgcnVsZSk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcG9zdGNzcy5wbHVnaW4oJ3Bvc3Rjc3MtbWVyZ2UtcnVsZXMnLCAoKSA9PiB7XG4gICAgcmV0dXJuIGNzcyA9PiBjc3Mud2Fsa1J1bGVzKHNlbGVjdG9yTWVyZ2VyKCkpO1xufSk7XG4iXX0=
270
+ module.exports = exports['default'];
package/dist/lib/clone.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
5
+ 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; };
6
6
 
7
7
  var clone = function clone(obj, parent) {
8
8
  if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' || obj === null) {
@@ -32,5 +32,4 @@ var clone = function clone(obj, parent) {
32
32
  };
33
33
 
34
34
  exports.default = clone;
35
- module.exports = exports['default'];
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xvbmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBTSxRQUFRLFNBQVIsS0FBUSxDQUFDLEdBQUQsRUFBTSxNQUFOLEVBQWlCO0FBQzNCLFFBQUksUUFBTyxHQUFQLHlDQUFPLEdBQVAsT0FBZSxRQUFmLElBQTJCLFFBQVEsSUFBdkMsRUFBNkM7QUFDekMsZUFBTyxHQUFQO0FBQ0g7QUFDRCxRQUFNLFNBQVMsSUFBSSxJQUFJLFdBQVIsRUFBZjtBQUNBLFNBQUssSUFBSSxDQUFULElBQWMsR0FBZCxFQUFtQjtBQUNmLFlBQUksQ0FBRSxHQUFHLGNBQUgsQ0FBa0IsSUFBbEIsQ0FBdUIsR0FBdkIsRUFBNEIsQ0FBNUIsQ0FBTixFQUF1QztBQUNuQztBQUNIO0FBQ0QsWUFBSSxRQUFRLElBQUksQ0FBSixDQUFaO0FBQ0EsWUFBSSxNQUFNLFFBQU4sSUFBa0IsUUFBTyxLQUFQLHlDQUFPLEtBQVAsT0FBaUIsUUFBdkMsRUFBaUQ7QUFDN0MsZ0JBQUksTUFBSixFQUFZO0FBQ1IsdUJBQU8sQ0FBUCxJQUFZLE1BQVo7QUFDSDtBQUNKLFNBSkQsTUFJTyxJQUFJLE1BQU0sUUFBVixFQUFvQjtBQUN2QixtQkFBTyxDQUFQLElBQVksS0FBWjtBQUNILFNBRk0sTUFFQSxJQUFJLGlCQUFpQixLQUFyQixFQUE0QjtBQUMvQixtQkFBTyxDQUFQLElBQVksTUFBTSxHQUFOLENBQVU7QUFBQSx1QkFBSyxNQUFNLENBQU4sRUFBUyxNQUFULENBQUw7QUFBQSxhQUFWLENBQVo7QUFDSCxTQUZNLE1BRUE7QUFDSCxtQkFBTyxDQUFQLElBQVksTUFBTSxLQUFOLEVBQWEsTUFBYixDQUFaO0FBQ0g7QUFDSjtBQUNELFdBQU8sTUFBUDtBQUNILENBdkJEOztrQkF5QmUsSyIsImZpbGUiOiJjbG9uZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNsb25lID0gKG9iaiwgcGFyZW50KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBjb25zdCBjbG9uZWQgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKCk7XG4gICAgZm9yIChsZXQgaSBpbiBvYmopIHtcbiAgICAgICAgaWYgKCEoe30uaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAoaSA9PT0gJ3BhcmVudCcgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNsb25lZFtpXSA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAnc291cmNlJykge1xuICAgICAgICAgICAgY2xvbmVkW2ldID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgY2xvbmVkW2ldID0gdmFsdWUubWFwKGogPT4gY2xvbmUoaiwgY2xvbmVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbG9uZWRbaV0gPSBjbG9uZSh2YWx1ZSwgY2xvbmVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2xvbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xvbmU7XG4iXX0=
35
+ module.exports = exports['default'];
@@ -0,0 +1,140 @@
1
+ 'use strict';
2
+
3
+ exports.__esModule = true;
4
+ exports.pseudoElements = undefined;
5
+ exports.default = ensureCompatibility;
6
+
7
+ var _caniuseApi = require('caniuse-api');
8
+
9
+ var _postcssSelectorParser = require('postcss-selector-parser');
10
+
11
+ var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
+ var simpleSelectorRe = /^#?[-._a-z0-9 ]+$/i;
16
+
17
+ var cssSel2 = 'css-sel2';
18
+ var cssSel3 = 'css-sel3';
19
+ var cssGencontent = 'css-gencontent';
20
+ var cssFirstLetter = 'css-first-letter';
21
+ var cssFirstLine = 'css-first-line';
22
+ var cssInOutOfRange = 'css-in-out-of-range';
23
+
24
+ var pseudoElements = exports.pseudoElements = {
25
+ ':active': cssSel2,
26
+ ':after': cssGencontent,
27
+ ':before': cssGencontent,
28
+ ':checked': cssSel3,
29
+ ':default': 'css-default-pseudo',
30
+ ':dir': 'css-dir-pseudo',
31
+ ':disabled': cssSel3,
32
+ ':empty': cssSel3,
33
+ ':enabled': cssSel3,
34
+ ':first-child': cssSel2,
35
+ ':first-letter': cssFirstLetter,
36
+ ':first-line': cssFirstLine,
37
+ ':first-of-type': cssSel3,
38
+ ':focus': cssSel2,
39
+ ':focus-within': 'css-focus-within',
40
+ ':has': 'css-has',
41
+ ':hover': cssSel2,
42
+ ':in-range': cssInOutOfRange,
43
+ ':indeterminate': 'css-indeterminate-pseudo',
44
+ ':lang': cssSel2,
45
+ ':last-child': cssSel3,
46
+ ':last-of-type': cssSel3,
47
+ ':matches': 'css-matches-pseudo',
48
+ ':not': cssSel3,
49
+ ':nth-child': cssSel3,
50
+ ':nth-last-child': cssSel3,
51
+ ':nth-last-of-type': cssSel3,
52
+ ':nth-of-type': cssSel3,
53
+ ':only-child': cssSel3,
54
+ ':only-of-type': cssSel3,
55
+ ':optional': 'css-optional-pseudo',
56
+ ':out-of-range': cssInOutOfRange,
57
+ ':placeholder-shown': 'css-placeholder-shown',
58
+ ':root': cssSel3,
59
+ ':target': cssSel3,
60
+ '::after': cssGencontent,
61
+ '::backdrop': 'dialog',
62
+ '::before': cssGencontent,
63
+ '::first-letter': cssFirstLetter,
64
+ '::first-line': cssFirstLine,
65
+ '::marker': 'css-marker-pseudo',
66
+ '::placeholder': 'css-placeholder',
67
+ '::selection': 'css-selection'
68
+ };
69
+
70
+ function isCssMixin(selector) {
71
+ return selector[selector.length - 1] === ':';
72
+ }
73
+
74
+ function ensureCompatibility(selectors, browsers, compatibilityCache) {
75
+ // Should not merge mixins
76
+ if (selectors.some(isCssMixin)) {
77
+ return false;
78
+ }
79
+ return selectors.every(function (selector) {
80
+ if (simpleSelectorRe.test(selector)) {
81
+ return true;
82
+ }
83
+ if (compatibilityCache && selector in compatibilityCache) {
84
+ return compatibilityCache[selector];
85
+ }
86
+ var compatible = true;
87
+ (0, _postcssSelectorParser2.default)(function (ast) {
88
+ ast.walk(function (node) {
89
+ var type = node.type,
90
+ value = node.value;
91
+
92
+ if (type === 'pseudo') {
93
+ var entry = pseudoElements[value];
94
+ if (entry && compatible) {
95
+ compatible = (0, _caniuseApi.isSupported)(entry, browsers);
96
+ }
97
+ }
98
+ if (type === 'combinator') {
99
+ if (~value.indexOf('~')) {
100
+ compatible = (0, _caniuseApi.isSupported)(cssSel3, browsers);
101
+ }
102
+ if (~value.indexOf('>') || ~value.indexOf('+')) {
103
+ compatible = (0, _caniuseApi.isSupported)(cssSel2, browsers);
104
+ }
105
+ }
106
+ if (type === 'attribute' && node.attribute) {
107
+ // [foo]
108
+ if (!node.operator) {
109
+ compatible = (0, _caniuseApi.isSupported)(cssSel2, browsers);
110
+ }
111
+
112
+ if (value) {
113
+ // [foo="bar"], [foo~="bar"], [foo|="bar"]
114
+ if (~['=', '~=', '|='].indexOf(node.operator)) {
115
+ compatible = (0, _caniuseApi.isSupported)(cssSel2, browsers);
116
+ }
117
+ // [foo^="bar"], [foo$="bar"], [foo*="bar"]
118
+ if (~['^=', '$=', '*='].indexOf(node.operator)) {
119
+ compatible = (0, _caniuseApi.isSupported)(cssSel3, browsers);
120
+ }
121
+ }
122
+
123
+ // [foo="bar" i]
124
+ if (node.insensitive) {
125
+ compatible = (0, _caniuseApi.isSupported)('css-case-insensitive', browsers);
126
+ }
127
+ }
128
+ if (!compatible) {
129
+ // If this node was not compatible,
130
+ // break out early from walking the rest
131
+ return false;
132
+ }
133
+ });
134
+ }).process(selector);
135
+ if (compatibilityCache) {
136
+ compatibilityCache[selector] = compatible;
137
+ }
138
+ return compatible;
139
+ });
140
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postcss-merge-rules",
3
- "version": "2.0.10",
3
+ "version": "2.1.2",
4
4
  "description": "Merge CSS rules with PostCSS.",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -9,9 +9,10 @@
9
9
  ],
10
10
  "scripts": {
11
11
  "pretest": "eslint src",
12
- "prepublish": "babel src --out-dir dist --ignore /__tests__/",
13
- "test": "ava src/__tests__",
14
- "test-012": "ava src/__tests__"
12
+ "prepublish": "del-cli dist && cross-env BABEL_ENV=publish babel src --out-dir dist --ignore /__tests__/",
13
+ "report": "nyc report --reporter=html",
14
+ "test": "cross-env BABEL_ENV=test nyc ava src/__tests__",
15
+ "test-012": "cross-env BABEL_ENV=test nyc ava src/__tests__"
15
16
  },
16
17
  "keywords": [
17
18
  "css",
@@ -21,19 +22,22 @@
21
22
  ],
22
23
  "license": "MIT",
23
24
  "devDependencies": {
24
- "ava": "^0.15.0",
25
+ "ava": "^0.17.0",
25
26
  "babel-cli": "^6.3.17",
26
27
  "babel-core": "^6.3.26",
27
28
  "babel-plugin-add-module-exports": "^0.2.1",
29
+ "babel-plugin-istanbul": "^2.0.0",
28
30
  "babel-preset-es2015": "^6.3.13",
29
31
  "babel-preset-es2015-loose": "^7.0.0",
30
32
  "babel-preset-stage-0": "^6.3.13",
31
33
  "babel-register": "^6.9.0",
34
+ "cross-env": "^2.0.1",
32
35
  "del-cli": "^0.2.0",
33
36
  "eslint": "^3.0.0",
34
37
  "eslint-config-cssnano": "^3.0.0",
35
38
  "eslint-plugin-babel": "^3.3.0",
36
- "eslint-plugin-import": "^1.10.2",
39
+ "eslint-plugin-import": "^2.0.1",
40
+ "nyc": "^10.0.0",
37
41
  "postcss-discard-comments": "^2.0.4",
38
42
  "postcss-simple-vars": "^3.0.0"
39
43
  },
@@ -45,7 +49,10 @@
45
49
  },
46
50
  "repository": "ben-eb/postcss-merge-rules",
47
51
  "dependencies": {
52
+ "browserslist": "^1.5.2",
53
+ "caniuse-api": "^1.5.2",
48
54
  "postcss": "^5.0.4",
55
+ "postcss-selector-parser": "^2.2.2",
49
56
  "vendors": "^1.0.0"
50
57
  },
51
58
  "eslintConfig": {
@@ -53,5 +60,23 @@
53
60
  },
54
61
  "ava": {
55
62
  "require": "babel-register"
63
+ },
64
+ "nyc": {
65
+ "sourceMap": false,
66
+ "instrument": false
67
+ },
68
+ "browserslist": {
69
+ "chrome58": [
70
+ "Chrome 58"
71
+ ],
72
+ "edge15": [
73
+ "Edge 15"
74
+ ],
75
+ "ie6": [
76
+ "IE 6"
77
+ ],
78
+ "ie7": [
79
+ "IE 7"
80
+ ]
56
81
  }
57
82
  }