3 const _ = require("lodash");
4 const isCustomProperty = require("../../utils/isCustomProperty");
5 const isStandardSyntaxProperty = require("../../utils/isStandardSyntaxProperty");
6 const matchesStringOrRegExp = require("../../utils/matchesStringOrRegExp");
7 const postcss = require("postcss");
8 const report = require("../../utils/report");
9 const ruleMessages = require("../../utils/ruleMessages");
10 const validateOptions = require("../../utils/validateOptions");
12 const ruleName = "property-whitelist";
14 const messages = ruleMessages(ruleName, {
15 rejected: property => `Unexpected property "${property}"`
18 const rule = function(whitelist) {
19 return (root, result) => {
20 const validOptions = validateOptions(result, ruleName, {
22 possible: [_.isString]
28 root.walkDecls(decl => {
29 const prop = decl.prop;
31 if (!isStandardSyntaxProperty(prop)) {
34 if (isCustomProperty(prop)) {
37 if (matchesStringOrRegExp(postcss.vendor.unprefixed(prop), whitelist)) {
42 message: messages.rejected(prop),
51 rule.primaryOptionArray = true;
53 rule.ruleName = ruleName;
54 rule.messages = messages;
55 module.exports = rule;