3 const _ = require("lodash");
4 const matchesStringOrRegExp = require("../../utils/matchesStringOrRegExp");
5 const postcss = require("postcss");
6 const report = require("../../utils/report");
7 const ruleMessages = require("../../utils/ruleMessages");
8 const validateOptions = require("../../utils/validateOptions");
10 const ruleName = "declaration-property-value-whitelist";
12 const messages = ruleMessages(ruleName, {
13 rejected: (property, value) =>
14 `Unexpected value "${value}" for property "${property}"`
17 const rule = function(whitelist) {
18 return (root, result) => {
19 const validOptions = validateOptions(result, ruleName, {
21 possible: [_.isObject]
27 root.walkDecls(decl => {
28 const prop = decl.prop,
31 const unprefixedProp = postcss.vendor.unprefixed(prop);
32 const propWhitelist = _.find(whitelist, (list, propIdentifier) =>
33 matchesStringOrRegExp(unprefixedProp, propIdentifier)
36 if (_.isEmpty(propWhitelist)) {
40 if (matchesStringOrRegExp(value, propWhitelist)) {
45 message: messages.rejected(prop, value),
54 rule.ruleName = ruleName;
55 rule.messages = messages;
56 module.exports = rule;