UNPKG

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