UNPKG

1.34 kBJavaScriptView Raw
1// @ts-nocheck
2
3'use strict';
4
5const _ = require('lodash');
6const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp');
7const postcss = require('postcss');
8const report = require('../../utils/report');
9const ruleMessages = require('../../utils/ruleMessages');
10const validateOptions = require('../../utils/validateOptions');
11
12const ruleName = 'declaration-property-value-whitelist';
13
14const messages = ruleMessages(ruleName, {
15 rejected: (property, value) => `Unexpected value "${value}" for property "${property}"`,
16});
17
18function rule(whitelist) {
19 return (root, result) => {
20 const validOptions = validateOptions(result, ruleName, {
21 actual: whitelist,
22 possible: [_.isObject],
23 });
24
25 if (!validOptions) {
26 return;
27 }
28
29 root.walkDecls((decl) => {
30 const prop = decl.prop;
31 const value = decl.value;
32
33 const unprefixedProp = postcss.vendor.unprefixed(prop);
34 const propWhitelist = _.find(whitelist, (list, propIdentifier) =>
35 matchesStringOrRegExp(unprefixedProp, propIdentifier),
36 );
37
38 if (_.isEmpty(propWhitelist)) {
39 return;
40 }
41
42 if (matchesStringOrRegExp(value, propWhitelist)) {
43 return;
44 }
45
46 report({
47 message: messages.rejected(prop, value),
48 node: decl,
49 result,
50 ruleName,
51 });
52 });
53 };
54}
55
56rule.ruleName = ruleName;
57rule.messages = messages;
58module.exports = rule;