function normalizeRules()

in packages/posthtml-transform/lib/utils.js [68:102]


function normalizeRules(rules, options = {}) {
  let normalized = null;

  // Parse query string to rules
  if (typeof rules === 'string') {
    // Append ? to the beginning so parseQuery able to parse
    const query = rules.substr(0, 1) !== '?' ? `?${rules}` : rules;
    const parsedQuery = parseQuery(query);

    normalized = Object.keys(parsedQuery).reduce((rules, attr) => {
      const value = parsedQuery[attr];
      rules.push(new Rule({ attr, value }));
      return rules;
    }, []);
  } else if (Array.isArray(rules)) {
    normalized = cloneDeep(rules).map(r => new Rule(r));
  } else {
    throw new Error(`${packageName}: rules should be \`Array<Object>|string\``);
  }

  // Split rule with multiple value into several single valued rules
  const replacements = normalized
    .filter(rule => rule.isMultiple)
    .map(rule => ({ rule, replaceTo: rule.splitByMultipleValue() }));

  replacements.forEach(({ rule, replaceTo }) => {
    normalized.splice(...[normalized.indexOf(rule), 1].concat(replaceTo));
  });

  if (options.convertAlphaColors) {
    normalized = convertAlphaColorsRules(normalized);
  }

  return normalized;
}