UNPKG

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