module.exports = function postcssPrefixSelector(options) { const prefix = options.prefix; const prefixWithSpace = /\s+$/.test(prefix) ? prefix : `${prefix} `; return function(root) { root.walkRules(rule => { const keyframeRules = [ 'keyframes', '-webkit-keyframes', '-moz-keyframes', '-o-keyframes' ]; if (rule.parent && keyframeRules.includes(rule.parent.name)) { return; } rule.selectors = rule.selectors.map(selector => { if (options.exclude && excludeSelector(selector, options.exclude)) { return selector; } if (options.transform) { return options.transform( prefix, selector, prefixWithSpace + selector ); } return prefixWithSpace + selector; }); }); }; }; function excludeSelector(selector, excludeArr) { return excludeArr.some(excludeRule => { if (excludeRule instanceof RegExp) { return excludeRule.test(selector); } return selector === excludeRule; }); }