UNPKG

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