UNPKG

1.49 kBJavaScriptView Raw
1'use strict';
2
3const _ = require('lodash');
4const isAutoprefixable = require('../../utils/isAutoprefixable');
5const optionsMatches = require('../../utils/optionsMatches');
6const postcss = require('postcss');
7const report = require('../../utils/report');
8const ruleMessages = require('../../utils/ruleMessages');
9const validateOptions = require('../../utils/validateOptions');
10
11const ruleName = 'property-no-vendor-prefix';
12
13const messages = ruleMessages(ruleName, {
14 rejected: (property) => `Unexpected vendor-prefix "${property}"`,
15});
16
17function rule(actual, options) {
18 return (root, result) => {
19 const validOptions = validateOptions(
20 result,
21 ruleName,
22 { actual },
23 {
24 optional: true,
25 actual: options,
26 possible: {
27 ignoreProperties: [_.isString, _.isRegExp],
28 },
29 },
30 );
31
32 if (!validOptions) {
33 return;
34 }
35
36 root.walkDecls((decl) => {
37 const prop = decl.prop;
38 const unprefixedProp = postcss.vendor.unprefixed(prop);
39
40 //return early if property is to be ignored
41 if (optionsMatches(options, 'ignoreProperties', unprefixedProp)) {
42 return;
43 }
44
45 // Make sure there's a vendor prefix,
46 // but this isn't a custom property
47
48 if (prop[0] !== '-' || prop[1] === '-') {
49 return;
50 }
51
52 if (!isAutoprefixable.property(prop)) {
53 return;
54 }
55
56 report({
57 message: messages.rejected(prop),
58 node: decl,
59 result,
60 ruleName,
61 });
62 });
63 };
64}
65
66rule.ruleName = ruleName;
67rule.messages = messages;
68module.exports = rule;