UNPKG

1.24 kBJavaScriptView Raw
1'use strict';
2
3const _ = require('lodash');
4const isStandardSyntaxAtRule = require('../../utils/isStandardSyntaxAtRule');
5const postcss = require('postcss');
6const report = require('../../utils/report');
7const ruleMessages = require('../../utils/ruleMessages');
8const validateOptions = require('../../utils/validateOptions');
9
10const ruleName = 'at-rule-whitelist';
11
12const messages = ruleMessages(ruleName, {
13 rejected: (name) => `Unexpected at-rule "${name}"`,
14});
15
16function rule(whitelistInput) {
17 // To allow for just a string as a parameter (not only arrays of strings)
18 const whitelist = [].concat(whitelistInput);
19
20 return (root, result) => {
21 const validOptions = validateOptions(result, ruleName, {
22 actual: whitelist,
23 possible: [_.isString],
24 });
25
26 if (!validOptions) {
27 return;
28 }
29
30 root.walkAtRules((atRule) => {
31 const name = atRule.name;
32
33 if (!isStandardSyntaxAtRule(atRule)) {
34 return;
35 }
36
37 if (whitelist.includes(postcss.vendor.unprefixed(name).toLowerCase())) {
38 return;
39 }
40
41 report({
42 message: messages.rejected(name),
43 node: atRule,
44 result,
45 ruleName,
46 });
47 });
48 };
49}
50
51rule.primaryOptionArray = true;
52
53rule.ruleName = ruleName;
54rule.messages = messages;
55module.exports = rule;