UNPKG

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