UNPKG

fela-utils

Version:
97 lines (78 loc) 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = clusterCache; var _fastLoops = require("fast-loops"); var _generateCSSRule = _interopRequireDefault(require("./generateCSSRule")); var _objectSortByScore = _interopRequireDefault(require("./objectSortByScore")); var _getRuleScore = _interopRequireDefault(require("./getRuleScore")); var _styleTypes = require("./styleTypes"); var _handlers; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } 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; } var handlers = (_handlers = {}, _defineProperty(_handlers, _styleTypes.RULE_TYPE, function (cluster, _ref) { var selector = _ref.selector, declaration = _ref.declaration, support = _ref.support, media = _ref.media; var cssRule = (0, _generateCSSRule["default"])(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, _styleTypes.FONT_TYPE, function (cluster, _ref2) { var fontFace = _ref2.fontFace; cluster.fontFaces += fontFace; }), _defineProperty(_handlers, _styleTypes.KEYFRAME_TYPE, function (cluster, _ref3) { var keyframe = _ref3.keyframe; cluster.keyframes += keyframe; }), _defineProperty(_handlers, _styleTypes.STATIC_TYPE, function (cluster, _ref4) { var css = _ref4.css, selector = _ref4.selector; if (selector) { cluster.statics += (0, _generateCSSRule["default"])(selector, css); } else { cluster.statics += css; } }), _handlers); function clusterCache(cache) { var ruleOrder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var sortedCache = (0, _objectSortByScore["default"])(cache, function (value) { return (0, _getRuleScore["default"])(ruleOrder, value.pseudo); }); return (0, _fastLoops.objectReduce)(sortedCache, function (cluster, entry) { var handler = handlers[entry.type]; if (handler) { handler(cluster, entry); } return cluster; }, { mediaRules: {}, supportRules: {}, supportMediaRules: {}, fontFaces: '', statics: '', keyframes: '', rules: '' }); }