UNPKG

fela-utils

Version:
82 lines (72 loc) 2.59 kB
var _handlers; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } import { arrayReduce, objectReduce } from 'fast-loops'; import generateCSSRule from './generateCSSRule'; import objectSortByScore from './objectSortByScore'; import getRuleScore from './getRuleScore'; import { RULE_TYPE, KEYFRAME_TYPE, FONT_TYPE, STATIC_TYPE } from './styleTypes'; var handlers = (_handlers = {}, _defineProperty(_handlers, RULE_TYPE, function (cluster, _ref) { var selector = _ref.selector, declaration = _ref.declaration, support = _ref.support, media = _ref.media; var cssRule = generateCSSRule(selector, declaration); if (support) { if (media) { if (!cluster.supportMediaRules[media]) { cluster.supportMediaRules[media] = {}; } if (!cluster.supportMediaRules[media][support]) { cluster.supportMediaRules[media][support] = ''; } cluster.supportMediaRules[media][support] += cssRule; } else { if (!cluster.supportRules[support]) { cluster.supportRules[support] = ''; } cluster.supportRules[support] += cssRule; } } else if (media) { if (!cluster.mediaRules[media]) { cluster.mediaRules[media] = ''; } cluster.mediaRules[media] += cssRule; } else { cluster.rules += cssRule; } }), _defineProperty(_handlers, FONT_TYPE, function (cluster, _ref2) { var fontFace = _ref2.fontFace; cluster.fontFaces += fontFace; }), _defineProperty(_handlers, KEYFRAME_TYPE, function (cluster, _ref3) { var keyframe = _ref3.keyframe; cluster.keyframes += keyframe; }), _defineProperty(_handlers, STATIC_TYPE, function (cluster, _ref4) { var css = _ref4.css, selector = _ref4.selector; if (selector) { cluster.statics += generateCSSRule(selector, css); } else { cluster.statics += css; } }), _handlers); export default function clusterCache(cache) { var ruleOrder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var sortedCache = objectSortByScore(cache, function (value) { return getRuleScore(ruleOrder, value.pseudo); }); return objectReduce(sortedCache, function (cluster, entry) { var handler = handlers[entry.type]; if (handler) { handler(cluster, entry); } return cluster; }, { mediaRules: {}, supportRules: {}, supportMediaRules: {}, fontFaces: '', statics: '', keyframes: '', rules: '' }); }