4 const autoprefixer = require("autoprefixer");
5 const Browsers = require("autoprefixer/lib/browsers");
6 const Prefixes = require("autoprefixer/lib/prefixes");
9 * Use Autoprefixer's secret powers to determine whether or
10 * not a certain CSS identifier contains a vendor prefix that
11 * Autoprefixer, given the standardized identifier, could add itself.
13 * Used by `*-no-vendor-prefix-*` rules to find superfluous
17 const prefixes = new Prefixes(
18 autoprefixer.data.prefixes,
19 new Browsers(autoprefixer.data.browsers, [])
23 * Most identifier types have to be looked up in a unique way,
24 * so we're exposing special functions for each.
27 atRuleName(identifier /*: string*/) /*: boolean*/ {
28 return prefixes.remove[`@${identifier.toLowerCase()}`];
31 selector(identifier /*: string*/) /*: boolean*/ {
32 return prefixes.remove.selectors.some(selectorObj => {
33 return identifier.toLowerCase() === selectorObj.prefixed;
37 mediaFeatureName(identifier /*: string*/) /*: boolean*/ {
38 return identifier.toLowerCase().indexOf("device-pixel-ratio") !== -1;
41 property(identifier /*: string*/) /*: boolean*/ {
42 return autoprefixer.data.prefixes[
43 prefixes.unprefixed(identifier.toLowerCase())
47 propertyValue(prop /*: string*/, value /*: string*/) /*: boolean*/ {
48 const possiblePrefixableValues =
49 prefixes.remove[prop.toLowerCase()] &&
50 prefixes.remove[prop.toLowerCase()].values;
52 possiblePrefixableValues &&
53 possiblePrefixableValues.some(valueObj => {
54 return value.toLowerCase() === valueObj.prefixed;