UNPKG

jss-cache

Version:

JSS plugin that caches the rules and delivers insane performance.

67 lines (51 loc) 2.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Tiny WeakMap like cache using arrays. * Required because we have frozen style objects in dev, which are not extensible, * so we can't put some key into that object. * Relies on [].indexOf(Object). */ var Cache = function () { function Cache() { _classCallCheck(this, Cache); this.keys = []; this.data = []; } _createClass(Cache, [{ key: "get", value: function get(key) { var index = this.keys.indexOf(key); return index === -1 ? null : this.data[index]; } }, { key: "set", value: function set(key, value) { this.keys.push(key); this.data.push(value); } }]); return Cache; }(); exports["default"] = function () { var cache = new Cache(); function onCreateRule(name, decl, _ref) { var parent = _ref.parent; return parent ? cache.get(parent.rules.raw[name]) : null; } function onProcessRule(rule) { var _rule$options = rule.options, sheet = _rule$options.sheet, parent = _rule$options.parent; if (!parent || sheet && sheet.options.link) { return; } var originalStyle = parent.rules.raw[rule.key]; if (!cache.get(originalStyle)) cache.set(originalStyle, rule); } return { onCreateRule: onCreateRule, onProcessRule: onProcessRule }; };