UNPKG

1.86 kBJavaScriptView Raw
1// @ts-nocheck
2
3'use strict';
4
5const _ = require('lodash');
6const functionArgumentsSearch = require('../../utils/functionArgumentsSearch');
7const getSchemeFromUrl = require('../../utils/getSchemeFromUrl');
8const isStandardSyntaxUrl = require('../../utils/isStandardSyntaxUrl');
9const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp');
10const report = require('../../utils/report');
11const ruleMessages = require('../../utils/ruleMessages');
12const validateOptions = require('../../utils/validateOptions');
13
14const ruleName = 'function-url-scheme-blacklist';
15
16const messages = ruleMessages(ruleName, {
17 rejected: (scheme) => `Unexpected URL scheme "${scheme}:"`,
18});
19
20function rule(list) {
21 return (root, result) => {
22 const validOptions = validateOptions(result, ruleName, {
23 actual: list,
24 possible: [_.isString, _.isRegExp],
25 });
26
27 if (!validOptions) {
28 return;
29 }
30
31 result.warn(
32 `'${ruleName}' has been deprecated. Instead use 'function-url-scheme-disallowed-list'.`,
33 {
34 stylelintType: 'deprecation',
35 stylelintReference: `https://github.com/stylelint/stylelint/blob/13.7.0/lib/rules/${ruleName}/README.md`,
36 },
37 );
38
39 root.walkDecls((decl) => {
40 functionArgumentsSearch(decl.toString().toLowerCase(), 'url', (args, index) => {
41 const unspacedUrlString = _.trim(args, ' ');
42
43 if (!isStandardSyntaxUrl(unspacedUrlString)) {
44 return;
45 }
46
47 const urlString = _.trim(unspacedUrlString, '\'"');
48 const scheme = getSchemeFromUrl(urlString);
49
50 if (scheme === null) {
51 return;
52 }
53
54 if (!matchesStringOrRegExp(scheme, list)) {
55 return;
56 }
57
58 report({
59 message: messages.rejected(scheme),
60 node: decl,
61 index,
62 result,
63 ruleName,
64 });
65 });
66 });
67 };
68}
69
70rule.primaryOptionArray = true;
71
72rule.ruleName = ruleName;
73rule.messages = messages;
74module.exports = rule;