UNPKG

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