| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | 'use strict';exports.__esModule = true;var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };var _uniqs = require('uniqs');var _uniqs2 = _interopRequireDefault(_uniqs);var _postcss = require('postcss');function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var comma = _postcss.list.comma;var space = _postcss.list.space;var atrule = 'atrule';var decl = 'decl';var rule = 'rule';function addValues(cache, _ref) {    var value = _ref.value;    return comma(value).reduce(function (memo, val) {        return [].concat(memo, space(val));    }, cache);}function filterAtRule(_ref2) {    var atRules = _ref2.atRules;    var values = _ref2.values;    values = (0, _uniqs2.default)(values);    atRules.forEach(function (node) {        var hasAtRule = values.some(function (value) {            return value === node.params;        });        if (!hasAtRule) {            node.remove();        }    });}function filterNamespace(_ref3) {    var atRules = _ref3.atRules;    var rules = _ref3.rules;    rules = (0, _uniqs2.default)(rules);    atRules.forEach(function (atRule) {        var _atRule$params$split$ = atRule.params.split(' ').filter(Boolean);        var param = _atRule$params$split$[0];        var len = _atRule$params$split$.length;        if (len === 1) {            return;        }        var hasRule = rules.some(function (r) {            return r === param || r === '*';        });        if (!hasRule) {            atRule.remove();        }    });}function hasFont(fontFamily, cache) {    return comma(fontFamily).some(function (font) {        return cache.some(function (c) {            return ~c.indexOf(font);        });    });}// fonts have slightly different logicfunction filterFont(_ref4) {    var atRules = _ref4.atRules;    var values = _ref4.values;    values = (0, _uniqs2.default)(values);    atRules.forEach(function (r) {        var families = r.nodes.filter(function (_ref5) {            var prop = _ref5.prop;            return prop === 'font-family';        });        // Discard the @font-face if it has no font-family        if (!families.length) {            return r.remove();        }        families.forEach(function (family) {            if (!hasFont(family.value.toLowerCase(), values)) {                r.remove();            }        });    });}exports.default = (0, _postcss.plugin)('postcss-discard-unused', function (opts) {    var _fontFace$counterStyl = _extends({        fontFace: true,        counterStyle: true,        keyframes: true,        namespace: true    }, opts);    var fontFace = _fontFace$counterStyl.fontFace;    var counterStyle = _fontFace$counterStyl.counterStyle;    var keyframes = _fontFace$counterStyl.keyframes;    var namespace = _fontFace$counterStyl.namespace;    return function (css) {        var counterStyleCache = { atRules: [], values: [] };        var keyframesCache = { atRules: [], values: [] };        var namespaceCache = { atRules: [], rules: [] };        var fontCache = { atRules: [], values: [] };        css.walk(function (node) {            var type = node.type;            var prop = node.prop;            var selector = node.selector;            var name = node.name;            if (type === rule && namespace && ~selector.indexOf('|')) {                namespaceCache.rules = namespaceCache.rules.concat(selector.split('|')[0]);                return;            }            if (type === decl) {                if (counterStyle && /list-style|system/.test(prop)) {                    counterStyleCache.values = addValues(counterStyleCache.values, node);                }                if (fontFace && node.parent.type === rule && /font(|-family)/.test(prop)) {                    fontCache.values = fontCache.values.concat(comma(node.value.toLowerCase()));                }                if (keyframes && /animation/.test(prop)) {                    keyframesCache.values = addValues(keyframesCache.values, node);                }                return;            }            if (type === atrule) {                if (counterStyle && /counter-style/.test(name)) {                    counterStyleCache.atRules.push(node);                }                if (fontFace && name === 'font-face' && node.nodes) {                    fontCache.atRules.push(node);                }                if (keyframes && /keyframes/.test(name)) {                    keyframesCache.atRules.push(node);                }                if (namespace && name === 'namespace') {                    namespaceCache.atRules.push(node);                }                return;            }        });        counterStyle && filterAtRule(counterStyleCache);        fontFace && filterFont(fontCache);        keyframes && filterAtRule(keyframesCache);        namespace && filterNamespace(namespaceCache);    };});module.exports = exports['default'];
 |