diff options
Diffstat (limited to 'node_modules/postcss-merge-rules/dist/lib')
| -rw-r--r-- | node_modules/postcss-merge-rules/dist/lib/clone.js | 35 | ||||
| -rw-r--r-- | node_modules/postcss-merge-rules/dist/lib/ensureCompatibility.js | 140 |
2 files changed, 175 insertions, 0 deletions
diff --git a/node_modules/postcss-merge-rules/dist/lib/clone.js b/node_modules/postcss-merge-rules/dist/lib/clone.js new file mode 100644 index 00000000..31f0bdf1 --- /dev/null +++ b/node_modules/postcss-merge-rules/dist/lib/clone.js @@ -0,0 +1,35 @@ +'use strict'; + +exports.__esModule = true; + +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; }; + +var clone = function clone(obj, parent) { + if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' || obj === null) { + return obj; + } + var cloned = new obj.constructor(); + for (var i in obj) { + if (!{}.hasOwnProperty.call(obj, i)) { + continue; + } + var value = obj[i]; + if (i === 'parent' && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { + if (parent) { + cloned[i] = parent; + } + } else if (i === 'source') { + cloned[i] = value; + } else if (value instanceof Array) { + cloned[i] = value.map(function (j) { + return clone(j, cloned); + }); + } else { + cloned[i] = clone(value, cloned); + } + } + return cloned; +}; + +exports.default = clone; +module.exports = exports['default'];
\ No newline at end of file diff --git a/node_modules/postcss-merge-rules/dist/lib/ensureCompatibility.js b/node_modules/postcss-merge-rules/dist/lib/ensureCompatibility.js new file mode 100644 index 00000000..57029e94 --- /dev/null +++ b/node_modules/postcss-merge-rules/dist/lib/ensureCompatibility.js @@ -0,0 +1,140 @@ +'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; + }); +}
\ No newline at end of file |
