UNPKG

1.19 kBJavaScriptView Raw
1'use strict';
2
3const _ = require('lodash');
4const atRuleParamIndex = require('../../utils/atRuleParamIndex');
5const report = require('../../utils/report');
6const ruleMessages = require('../../utils/ruleMessages');
7const validateOptions = require('../../utils/validateOptions');
8
9const ruleName = 'custom-media-pattern';
10
11const messages = ruleMessages(ruleName, {
12 expected: 'Expected custom media query name to match specified pattern',
13});
14
15function rule(pattern) {
16 return (root, result) => {
17 const validOptions = validateOptions(result, ruleName, {
18 actual: pattern,
19 possible: [_.isRegExp, _.isString],
20 });
21
22 if (!validOptions) {
23 return;
24 }
25
26 const regexpPattern = _.isString(pattern) ? new RegExp(pattern) : pattern;
27
28 root.walkAtRules((atRule) => {
29 if (atRule.name.toLowerCase() !== 'custom-media') {
30 return;
31 }
32
33 const customMediaName = atRule.params.match(/^--(\S+)\b/)[1];
34
35 if (regexpPattern.test(customMediaName)) {
36 return;
37 }
38
39 report({
40 message: messages.expected,
41 node: atRule,
42 index: atRuleParamIndex(atRule),
43 result,
44 ruleName,
45 });
46 });
47 };
48}
49
50rule.ruleName = ruleName;
51rule.messages = messages;
52module.exports = rule;