3 const _ = require("lodash");
4 const functionArgumentsSearch = require("../../utils/functionArgumentsSearch");
5 const getSchemeFromUrl = require("../../utils/getSchemeFromUrl");
6 const isStandardSyntaxUrl = require("../../utils/isStandardSyntaxUrl");
7 const matchesStringOrRegExp = require("../../utils/matchesStringOrRegExp");
8 const report = require("../../utils/report");
9 const ruleMessages = require("../../utils/ruleMessages");
10 const validateOptions = require("../../utils/validateOptions");
12 const ruleName = "function-url-scheme-blacklist";
14 const messages = ruleMessages(ruleName, {
15 rejected: scheme => `Unexpected URL scheme "${scheme}:"`
18 const rule = function(blacklist) {
19 return (root, result) => {
20 const validOptions = validateOptions(result, ruleName, {
22 possible: [_.isString]
28 root.walkDecls(function(decl) {
29 functionArgumentsSearch(
30 decl.toString().toLowerCase(),
33 const unspacedUrlString = _.trim(args, " ");
34 if (!isStandardSyntaxUrl(unspacedUrlString)) {
37 const urlString = _.trim(unspacedUrlString, "'\"");
38 const scheme = getSchemeFromUrl(urlString);
40 if (scheme === null) {
44 if (!matchesStringOrRegExp(scheme, blacklist)) {
49 message: messages.rejected(scheme),
61 rule.primaryOptionArray = true;
63 rule.ruleName = ruleName;
64 rule.messages = messages;
65 module.exports = rule;