all files / DEV/lib/helpers/ parseCSS.js

80% Statements 44/55
77.42% Branches 24/31
33.33% Functions 1/3
21.43% Lines 3/14
31 statements, 21 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114                                                                                                                                                                                                                               
'use strict';
 
Object.defineProperty(exports, '__esModule', {
    value: true
});
// istanbul ignore next
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 
var _cssValue = require('css-value');
 
var _cssValue2 = _interopRequireDefault(_cssValue);
 
var _rgb2hex = require('rgb2hex');
 
var _rgb2hex2 = _interopRequireDefault(_rgb2hex);
 
var _sanitize = require('./sanitize');
 
var _sanitize2 = _interopRequireDefault(_sanitize);
 
var parse = function parse(cssPropertyValue, cssProperty) {
    if (!cssPropertyValue || !cssPropertyValue.value) {
        return null;
    }

    var parsedValue = {
        property: cssProperty,
        value: cssPropertyValue.value.toLowerCase().trim()
    };
 
    if (parsedValue.value.indexOf('rgb') === 0) {
        /**
         * remove whitespaces in rgb values
         */
        parsedValue.value = parsedValue.value.replace(/\s/g, '');
 
        /**
         * parse color values
         */
        var color = parsedValue.value;
        parsedValue.parsed = (0, _rgb2hex2['default'])(parsedValue.value);
        parsedValue.parsed.type = 'color';
        parsedValue.parsed[/[rgba]+/g.exec(color)[0]] = color;
    } else if (parsedValue.property === 'font-family') {
        var font = (0, _cssValue2['default'])(cssPropertyValue.value);
        var string = parsedValue.value;
        var value = cssPropertyValue.value.split(/,/).map(_sanitize2['default'].css);
 
        parsedValue.value = _sanitize2['default'].css(font[0].value || font[0].string);
        parsedValue.parsed = { value: value, type: 'font', string: string };
    } else {
        /**
         * parse other css properties
         */
        try {
            parsedValue.parsed = (0, _cssValue2['default'])(cssPropertyValue.value);
 
            if (parsedValue.parsed.length === 1) {
                parsedValue.parsed = parsedValue.parsed[0];
            }
 
            if (parsedValue.parsed.type && parsedValue.parsed.type === 'number' && parsedValue.parsed.unit === '') {
                parsedValue.value = parsedValue.parsed.value;
            }
        } catch (e) {
            // TODO improve css-parse lib to handle properties like
            // `-webkit-animation-timing-function :  cubic-bezier(0.25, 0.1, 0.25, 1)
        }
    }
 
    return parsedValue;
};
 
var parseCSS = function parseCSS(response, cssProperty) {
    var parsedCSS = [];
 
    var _iteratorNormalCompletion = true;
    var _didIteratorError = false;
    var _iteratorError = undefined;
 
    try {
        for (var _iterator = response[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
            var res = _step.value;
 
            parsedCSS.push(parse(res, cssProperty));
        }
    } catch (err) {
        _didIteratorError = true;
        _iteratorError = err;
    } finally {
        try {
            if (!_iteratorNormalCompletion && _iterator['return']) {
                _iterator['return']();
            }
        } finally {
            if (_didIteratorError) {
                throw _iteratorError;
            }
        }
    }
 
    if (parsedCSS.length === 1) {
        return parsedCSS[0];
    } else if (parsedCSS.length === 0) {
        return null;
    }
 
    return parsedCSS;
};
 
exports['default'] = parseCSS;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvaGVscGVycy9wYXJzZUNTUy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7d0JBQXFCLFdBQVc7Ozs7dUJBQ1osU0FBUzs7Ozt3QkFFUixZQUFZOzs7O0FBRWpDLElBQUksS0FBSyxHQUFHLFNBQVIsS0FBSyxDQUFhLGdCQUFnQixFQUFFLFdBQVcsRUFBRTtBQUNqRCxRQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7QUFDOUMsZUFBTyxJQUFJLENBQUE7S0FDZDs7QUFFRCxRQUFJLFdBQVcsR0FBRztBQUNkLGdCQUFRLEVBQUUsV0FBVztBQUNyQixhQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRTtLQUNyRCxDQUFBOztBQUVELFFBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFOzs7O0FBSXhDLG1CQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTs7Ozs7QUFLeEQsWUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQTtBQUM3QixtQkFBVyxDQUFDLE1BQU0sR0FBRywwQkFBUSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDL0MsbUJBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtBQUNqQyxtQkFBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBO0tBQ3hELE1BQU0sSUFBSSxXQUFXLENBQUMsUUFBUSxLQUFLLGFBQWEsRUFBRTtBQUMvQyxZQUFJLElBQUksR0FBRywyQkFBUyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMzQyxZQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFBO0FBQzlCLFlBQUksS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLHNCQUFTLEdBQUcsQ0FBQyxDQUFBOztBQUUvRCxtQkFBVyxDQUFDLEtBQUssR0FBRyxzQkFBUyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDakUsbUJBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUwsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFOLE1BQU0sRUFBRSxDQUFBO0tBQ3ZELE1BQU07Ozs7QUFJSCxZQUFJO0FBQ0EsdUJBQVcsQ0FBQyxNQUFNLEdBQUcsMkJBQVMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUE7O0FBRXJELGdCQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNqQywyQkFBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQzdDOztBQUVELGdCQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDbkcsMkJBQVcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUE7YUFDL0M7U0FDSixDQUFDLE9BQU8sQ0FBQyxFQUFFOzs7U0FHWDtLQUNKOztBQUVELFdBQU8sV0FBVyxDQUFBO0NBQ3JCLENBQUE7O0FBRUQsSUFBSSxRQUFRLEdBQUcsU0FBWCxRQUFRLENBQWEsUUFBUSxFQUFFLFdBQVcsRUFBRTtBQUM1QyxRQUFJLFNBQVMsR0FBRyxFQUFFLENBQUE7Ozs7Ozs7QUFFbEIsNkJBQWdCLFFBQVEsOEhBQUU7Z0JBQWpCLEdBQUc7O0FBQ1IscUJBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO1NBQzFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsUUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN4QixlQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUN0QixNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0IsZUFBTyxJQUFJLENBQUE7S0FDZDs7QUFFRCxXQUFPLFNBQVMsQ0FBQTtDQUNuQixDQUFBOztxQkFFYyxRQUFRIiwiZmlsZSI6Ii9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvaGVscGVycy9wYXJzZUNTUy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjc3NWYWx1ZSBmcm9tICdjc3MtdmFsdWUnXG5pbXBvcnQgcmdiMmhleCBmcm9tICdyZ2IyaGV4J1xuXG5pbXBvcnQgc2FuaXRpemUgZnJvbSAnLi9zYW5pdGl6ZSdcblxubGV0IHBhcnNlID0gZnVuY3Rpb24gKGNzc1Byb3BlcnR5VmFsdWUsIGNzc1Byb3BlcnR5KSB7XG4gICAgaWYgKCFjc3NQcm9wZXJ0eVZhbHVlIHx8ICFjc3NQcm9wZXJ0eVZhbHVlLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZFZhbHVlID0ge1xuICAgICAgICBwcm9wZXJ0eTogY3NzUHJvcGVydHksXG4gICAgICAgIHZhbHVlOiBjc3NQcm9wZXJ0eVZhbHVlLnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpXG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFZhbHVlLnZhbHVlLmluZGV4T2YoJ3JnYicpID09PSAwKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZW1vdmUgd2hpdGVzcGFjZXMgaW4gcmdiIHZhbHVlc1xuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2VkVmFsdWUudmFsdWUgPSBwYXJzZWRWYWx1ZS52YWx1ZS5yZXBsYWNlKC9cXHMvZywgJycpXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHBhcnNlIGNvbG9yIHZhbHVlc1xuICAgICAgICAgKi9cbiAgICAgICAgbGV0IGNvbG9yID0gcGFyc2VkVmFsdWUudmFsdWVcbiAgICAgICAgcGFyc2VkVmFsdWUucGFyc2VkID0gcmdiMmhleChwYXJzZWRWYWx1ZS52YWx1ZSlcbiAgICAgICAgcGFyc2VkVmFsdWUucGFyc2VkLnR5cGUgPSAnY29sb3InXG4gICAgICAgIHBhcnNlZFZhbHVlLnBhcnNlZFsvW3JnYmFdKy9nLmV4ZWMoY29sb3IpWzBdXSA9IGNvbG9yXG4gICAgfSBlbHNlIGlmIChwYXJzZWRWYWx1ZS5wcm9wZXJ0eSA9PT0gJ2ZvbnQtZmFtaWx5Jykge1xuICAgICAgICBsZXQgZm9udCA9IGNzc1ZhbHVlKGNzc1Byb3BlcnR5VmFsdWUudmFsdWUpXG4gICAgICAgIGxldCBzdHJpbmcgPSBwYXJzZWRWYWx1ZS52YWx1ZVxuICAgICAgICBsZXQgdmFsdWUgPSBjc3NQcm9wZXJ0eVZhbHVlLnZhbHVlLnNwbGl0KC8sLykubWFwKHNhbml0aXplLmNzcylcblxuICAgICAgICBwYXJzZWRWYWx1ZS52YWx1ZSA9IHNhbml0aXplLmNzcyhmb250WzBdLnZhbHVlIHx8IGZvbnRbMF0uc3RyaW5nKVxuICAgICAgICBwYXJzZWRWYWx1ZS5wYXJzZWQgPSB7IHZhbHVlLCB0eXBlOiAnZm9udCcsIHN0cmluZyB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIHBhcnNlIG90aGVyIGNzcyBwcm9wZXJ0aWVzXG4gICAgICAgICAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGFyc2VkVmFsdWUucGFyc2VkID0gY3NzVmFsdWUoY3NzUHJvcGVydHlWYWx1ZS52YWx1ZSlcblxuICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlLnBhcnNlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZS5wYXJzZWQgPSBwYXJzZWRWYWx1ZS5wYXJzZWRbMF1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlLnBhcnNlZC50eXBlICYmIHBhcnNlZFZhbHVlLnBhcnNlZC50eXBlID09PSAnbnVtYmVyJyAmJiBwYXJzZWRWYWx1ZS5wYXJzZWQudW5pdCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZS52YWx1ZSA9IHBhcnNlZFZhbHVlLnBhcnNlZC52YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGltcHJvdmUgY3NzLXBhcnNlIGxpYiB0byBoYW5kbGUgcHJvcGVydGllcyBsaWtlXG4gICAgICAgICAgICAvLyBgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIDogIGN1YmljLWJlemllcigwLjI1LCAwLjEsIDAuMjUsIDEpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkVmFsdWVcbn1cblxubGV0IHBhcnNlQ1NTID0gZnVuY3Rpb24gKHJlc3BvbnNlLCBjc3NQcm9wZXJ0eSkge1xuICAgIGxldCBwYXJzZWRDU1MgPSBbXVxuXG4gICAgZm9yIChsZXQgcmVzIG9mIHJlc3BvbnNlKSB7XG4gICAgICAgIHBhcnNlZENTUy5wdXNoKHBhcnNlKHJlcywgY3NzUHJvcGVydHkpKVxuICAgIH1cblxuICAgIGlmIChwYXJzZWRDU1MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWRDU1NbMF1cbiAgICB9IGVsc2UgaWYgKHBhcnNlZENTUy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkQ1NTXG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlQ1NTXG4iXX0=