code: function filterCss(abstractSyntaxTree, allowedStyles) {
      if (!allowedStyles) {
        return abstractSyntaxTree;
      }
  
      var filteredAST = cloneDeep(abstractSyntaxTree);
      var astRules = abstractSyntaxTree.nodes[0];
      var selectedRule;
  
      // Merge global and tag-specific styles into new AST.
      if (allowedStyles[astRules.selector] && allowedStyles['*']) {
        selectedRule = mergeWith(
          cloneDeep(allowedStyles[astRules.selector]),
          allowedStyles['*'],
          function(objValue, srcValue) {
            if (Array.isArray(objValue)) {
              return objValue.concat(srcValue);
            }
          }
        );
      } else {
        selectedRule = allowedStyles[astRules.selector] || allowedStyles['*'];
      }
  
      if (selectedRule) {
        filteredAST.nodes[0].nodes = astRules.nodes.reduce(filterDeclarations(selectedRule), []);
      }
  
      return filteredAST;
    }
docs: Filters user input css properties by whitelisted regex attributes.
  
  @param {object} abstractSyntaxTree  - Object representation of CSS attributes.
  @property {array[Declaration]} abstractSyntaxTree.nodes[0] - Each object cointains prop and value key, i.e { prop: 'color', value: 'red' }.
  @param {object} allowedStyles       - Keys are properties (i.e color), value is list of permitted regex rules (i.e /green/i).
  @return {object}                    - Abstract Syntax Tree with filtered style attributes.