You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							75 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							75 lines
						
					
					
						
							1.8 KiB
						
					
					
				module.exports = function postcssPrefixSelector(options) { | 
						|
  const prefix = options.prefix; | 
						|
  const prefixWithSpace = /\s+$/.test(prefix) ? prefix : `${prefix} `; | 
						|
  const ignoreFiles = options.ignoreFiles ? [].concat(options.ignoreFiles) : []; | 
						|
  const includeFiles = options.includeFiles | 
						|
    ? [].concat(options.includeFiles) | 
						|
    : []; | 
						|
 | 
						|
  return function (root) { | 
						|
    if ( | 
						|
      ignoreFiles.length && | 
						|
      root.source.input.file && | 
						|
      isFileInArray(root.source.input.file, ignoreFiles) | 
						|
    ) { | 
						|
      return; | 
						|
    } | 
						|
    if ( | 
						|
      includeFiles.length && | 
						|
      root.source.input.file && | 
						|
      !isFileInArray(root.source.input.file, includeFiles) | 
						|
    ) { | 
						|
      return; | 
						|
    } | 
						|
 | 
						|
    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, | 
						|
            root.source.input.file | 
						|
          ); | 
						|
        } | 
						|
 | 
						|
        return prefixWithSpace + selector; | 
						|
      }); | 
						|
    }); | 
						|
  }; | 
						|
}; | 
						|
 | 
						|
function isFileInArray(file, arr) { | 
						|
  return arr.some((ruleOrString) => { | 
						|
    if (ruleOrString instanceof RegExp) { | 
						|
      return ruleOrString.test(file); | 
						|
    } | 
						|
 | 
						|
    return file.includes(ruleOrString); | 
						|
  }); | 
						|
} | 
						|
 | 
						|
function excludeSelector(selector, excludeArr) { | 
						|
  return excludeArr.some((excludeRule) => { | 
						|
    if (excludeRule instanceof RegExp) { | 
						|
      return excludeRule.test(selector); | 
						|
    } | 
						|
 | 
						|
    return selector === excludeRule; | 
						|
  }); | 
						|
}
 | 
						|
 |