All files filter-selector.ts

6.25% Statements 1/16
0% Branches 0/17
0% Functions 0/3
6.25% Lines 1/16
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  1x                                                                                
import { IFilterOptions } from '../interfaces/IFilterOptions';

/**
 * Check if a selector should be whitelisted and / or replaced.
 */
export = function filterSelector({
  ruleSelector,
  ruleParentSelectors,
  filters,
}: IFilterOptions) {
  let newSelector = ``;
 
  filters.some((selectorFilter) => {
    const selector = selectorFilter.selector || selectorFilter;
    const replacementSelector = selectorFilter.replacement;
    const parentComparisonSelector = replacementSelector || selector;
 
    const selectorsAreEqual = selector === ruleSelector;
    const parentSelectorIsEqual = ruleParentSelectors.reduce((bool: boolean, ruleParentSelector: string) => {
      return parentComparisonSelector instanceof RegExp ?
        parentComparisonSelector.test(ruleParentSelector) :
        ruleParentSelector === parentComparisonSelector;
    }, false);
    const selectorsMatch = selector instanceof RegExp && selector.test(ruleSelector);

    if (selectorsAreEqual || parentSelectorIsEqual || selectorsMatch) {
      newSelector = replacementSelector ?
        ruleSelector.replace(selector, replacementSelector) :
        ruleSelector;
 
      // Do not stop iterating over the selector filters if the parent selector was matched
      // because child selectors may get replaced in a further iteration.
      if (!parentSelectorIsEqual) {
        return true;
      }
    }
    return false;
  });
 
  return newSelector;
};