| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | 
							- 'use strict';
 
- exports.__esModule = true;
 
- exports.pseudoElements = undefined;
 
- exports.default = ensureCompatibility;
 
- var _caniuseApi = require('caniuse-api');
 
- var _postcssSelectorParser = require('postcss-selector-parser');
 
- var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
 
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
- var simpleSelectorRe = /^#?[-._a-z0-9 ]+$/i;
 
- var cssSel2 = 'css-sel2';
 
- var cssSel3 = 'css-sel3';
 
- var cssGencontent = 'css-gencontent';
 
- var cssFirstLetter = 'css-first-letter';
 
- var cssFirstLine = 'css-first-line';
 
- var cssInOutOfRange = 'css-in-out-of-range';
 
- var pseudoElements = exports.pseudoElements = {
 
-     ':active': cssSel2,
 
-     ':after': cssGencontent,
 
-     ':before': cssGencontent,
 
-     ':checked': cssSel3,
 
-     ':default': 'css-default-pseudo',
 
-     ':dir': 'css-dir-pseudo',
 
-     ':disabled': cssSel3,
 
-     ':empty': cssSel3,
 
-     ':enabled': cssSel3,
 
-     ':first-child': cssSel2,
 
-     ':first-letter': cssFirstLetter,
 
-     ':first-line': cssFirstLine,
 
-     ':first-of-type': cssSel3,
 
-     ':focus': cssSel2,
 
-     ':focus-within': 'css-focus-within',
 
-     ':has': 'css-has',
 
-     ':hover': cssSel2,
 
-     ':in-range': cssInOutOfRange,
 
-     ':indeterminate': 'css-indeterminate-pseudo',
 
-     ':lang': cssSel2,
 
-     ':last-child': cssSel3,
 
-     ':last-of-type': cssSel3,
 
-     ':matches': 'css-matches-pseudo',
 
-     ':not': cssSel3,
 
-     ':nth-child': cssSel3,
 
-     ':nth-last-child': cssSel3,
 
-     ':nth-last-of-type': cssSel3,
 
-     ':nth-of-type': cssSel3,
 
-     ':only-child': cssSel3,
 
-     ':only-of-type': cssSel3,
 
-     ':optional': 'css-optional-pseudo',
 
-     ':out-of-range': cssInOutOfRange,
 
-     ':placeholder-shown': 'css-placeholder-shown',
 
-     ':root': cssSel3,
 
-     ':target': cssSel3,
 
-     '::after': cssGencontent,
 
-     '::backdrop': 'dialog',
 
-     '::before': cssGencontent,
 
-     '::first-letter': cssFirstLetter,
 
-     '::first-line': cssFirstLine,
 
-     '::marker': 'css-marker-pseudo',
 
-     '::placeholder': 'css-placeholder',
 
-     '::selection': 'css-selection'
 
- };
 
- function isCssMixin(selector) {
 
-     return selector[selector.length - 1] === ':';
 
- }
 
- function ensureCompatibility(selectors, browsers, compatibilityCache) {
 
-     // Should not merge mixins
 
-     if (selectors.some(isCssMixin)) {
 
-         return false;
 
-     }
 
-     return selectors.every(function (selector) {
 
-         if (simpleSelectorRe.test(selector)) {
 
-             return true;
 
-         }
 
-         if (compatibilityCache && selector in compatibilityCache) {
 
-             return compatibilityCache[selector];
 
-         }
 
-         var compatible = true;
 
-         (0, _postcssSelectorParser2.default)(function (ast) {
 
-             ast.walk(function (node) {
 
-                 var type = node.type,
 
-                     value = node.value;
 
-                 if (type === 'pseudo') {
 
-                     var entry = pseudoElements[value];
 
-                     if (entry && compatible) {
 
-                         compatible = (0, _caniuseApi.isSupported)(entry, browsers);
 
-                     }
 
-                 }
 
-                 if (type === 'combinator') {
 
-                     if (~value.indexOf('~')) {
 
-                         compatible = (0, _caniuseApi.isSupported)(cssSel3, browsers);
 
-                     }
 
-                     if (~value.indexOf('>') || ~value.indexOf('+')) {
 
-                         compatible = (0, _caniuseApi.isSupported)(cssSel2, browsers);
 
-                     }
 
-                 }
 
-                 if (type === 'attribute' && node.attribute) {
 
-                     // [foo]
 
-                     if (!node.operator) {
 
-                         compatible = (0, _caniuseApi.isSupported)(cssSel2, browsers);
 
-                     }
 
-                     if (value) {
 
-                         // [foo="bar"], [foo~="bar"], [foo|="bar"]
 
-                         if (~['=', '~=', '|='].indexOf(node.operator)) {
 
-                             compatible = (0, _caniuseApi.isSupported)(cssSel2, browsers);
 
-                         }
 
-                         // [foo^="bar"], [foo$="bar"], [foo*="bar"]
 
-                         if (~['^=', '$=', '*='].indexOf(node.operator)) {
 
-                             compatible = (0, _caniuseApi.isSupported)(cssSel3, browsers);
 
-                         }
 
-                     }
 
-                     // [foo="bar" i]
 
-                     if (node.insensitive) {
 
-                         compatible = (0, _caniuseApi.isSupported)('css-case-insensitive', browsers);
 
-                     }
 
-                 }
 
-                 if (!compatible) {
 
-                     // If this node was not compatible,
 
-                     // break out early from walking the rest
 
-                     return false;
 
-                 }
 
-             });
 
-         }).process(selector);
 
-         if (compatibilityCache) {
 
-             compatibilityCache[selector] = compatible;
 
-         }
 
-         return compatible;
 
-     });
 
- }
 
 
  |