All files / helpers generate-classes.js

17.65% Statements 3/17
0% Branches 0/9
0% Functions 0/4
18.75% Lines 3/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 452x             2x                                                                       2x  
const { mapObject, mapObjectValues } = require('../utils/helpers');
const {
  getClass,
  normalizePseudoElements,
  isNestedStyles,
  isAtRule,
  isPseudoSelector
} = require('../utils/styles');
 
function getClassValues(styles, { atRules = [], pseudoSelectors = [] } = {}) {
  return mapObject(styles, ([name, value]) => {
    if (!isNestedStyles(value)) {
      const newValue = getClass({ name, value, atRules, pseudoSelectors });
      return [name, newValue];
    }
 
    if (isAtRule(name)) {
      const newValue = getClassValues(value, {
        atRules: [...atRules, name],
        pseudoSelectors
      });
      return [name, newValue];
    }
 
    if (isPseudoSelector(name)) {
      const normalizedName = normalizePseudoElements(name);
      const newValue = getClassValues(value, {
        pseudoSelectors: [...pseudoSelectors, normalizedName],
        atRules
      });
      return [normalizedName, newValue];
    }
 
    throw new Error(
      `Invalid key ${name}. Object keys must be at-rules or pseudo selectors`
    );
  });
}
 
function generateClasses(obj) {
  return mapObjectValues(obj, value => getClassValues(value));
}
 
module.exports = generateClasses;