/* @flow */ "use strict" const Browsers = require("autoprefixer/lib/browsers") const Prefixes = require("autoprefixer/lib/prefixes") const autoprefixer = require("autoprefixer") /** * Use Autoprefixer's secret powers to determine whether or * not a certain CSS identifier contains a vendor prefix that * Autoprefixer, given the standardized identifier, could add itself. * * Used by `*-no-vendor-prefix-*` rules to find superfluous * vendor prefixes. */ const prefixes = new Prefixes(autoprefixer.data.prefixes, new Browsers(autoprefixer.data.browsers, [])) /** * Most identifier types have to be looked up in a unique way, * so we're exposing special functions for each. */ module.exports = { atRuleName(identifier/*: string*/)/*: boolean*/ { return prefixes.remove[`@${identifier.toLowerCase()}`] }, selector(identifier/*: string*/)/*: boolean*/ { return prefixes.remove.selectors.some(selectorObj => { return identifier.toLowerCase() === selectorObj.prefixed }) }, mediaFeatureName(identifier/*: string*/)/*: boolean*/ { return identifier.toLowerCase().indexOf("device-pixel-ratio") !== -1 }, property(identifier/*: string*/)/*: boolean*/ { return autoprefixer.data.prefixes[prefixes.unprefixed(identifier.toLowerCase())] }, propertyValue(prop/*: string*/, value/*: string*/)/*: boolean*/ { const possiblePrefixableValues = prefixes.remove[prop.toLowerCase()] && prefixes.remove[prop.toLowerCase()].values return possiblePrefixableValues && possiblePrefixableValues.some(valueObj => { return value.toLowerCase() === valueObj.prefixed }) }, }