.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / lib / rules / declaration-property-value-whitelist / index.js
1 "use strict";
2
3 const _ = require("lodash");
4 const matchesStringOrRegExp = require("../../utils/matchesStringOrRegExp");
5 const postcss = require("postcss");
6 const report = require("../../utils/report");
7 const ruleMessages = require("../../utils/ruleMessages");
8 const validateOptions = require("../../utils/validateOptions");
9
10 const ruleName = "declaration-property-value-whitelist";
11
12 const messages = ruleMessages(ruleName, {
13   rejected: (property, value) =>
14     `Unexpected value "${value}" for property "${property}"`
15 });
16
17 const rule = function(whitelist) {
18   return (root, result) => {
19     const validOptions = validateOptions(result, ruleName, {
20       actual: whitelist,
21       possible: [_.isObject]
22     });
23     if (!validOptions) {
24       return;
25     }
26
27     root.walkDecls(decl => {
28       const prop = decl.prop,
29         value = decl.value;
30
31       const unprefixedProp = postcss.vendor.unprefixed(prop);
32       const propWhitelist = _.find(whitelist, (list, propIdentifier) =>
33         matchesStringOrRegExp(unprefixedProp, propIdentifier)
34       );
35
36       if (_.isEmpty(propWhitelist)) {
37         return;
38       }
39
40       if (matchesStringOrRegExp(value, propWhitelist)) {
41         return;
42       }
43
44       report({
45         message: messages.rejected(prop, value),
46         node: decl,
47         result,
48         ruleName
49       });
50     });
51   };
52 };
53
54 rule.ruleName = ruleName;
55 rule.messages = messages;
56 module.exports = rule;