securityos/node_modules/stylelint-order/rules/properties-alphabetical-order/checkNode.js

62 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

2024-09-06 15:32:35 +00:00
let stylelint = require('stylelint');
let checkAlphabeticalOrder = require('../checkAlphabeticalOrder');
let { isStandardSyntaxProperty, isCustomProperty, vendor } = require('../../utils');
// eslint-disable-next-line max-params
module.exports = function checkNode(node, result, ruleName, messages) {
let allPropData = [];
node.each(function processEveryNode(child) {
if (child.type !== 'decl') {
return;
}
let { prop } = child;
if (!isStandardSyntaxProperty(prop)) {
return;
}
if (isCustomProperty(prop)) {
return;
}
let unprefixedPropName = vendor.unprefixed(prop);
// Hack to allow -moz-osx-font-smoothing to be understood
// just like -webkit-font-smoothing
if (unprefixedPropName.startsWith('osx-')) {
unprefixedPropName = unprefixedPropName.slice(4);
}
let propData = {
name: prop,
unprefixedName: unprefixedPropName,
index: allPropData.length,
node: child,
};
let previousPropData = allPropData[allPropData.length - 1]; // eslint-disable-line unicorn/prefer-at -- Need to support older Node.js
allPropData.push(propData);
// Skip first decl
if (!previousPropData) {
return;
}
let isCorrectOrder = checkAlphabeticalOrder(previousPropData, propData);
if (isCorrectOrder) {
return;
}
stylelint.utils.report({
message: messages.expected(propData.name, previousPropData.name),
node: child,
result,
ruleName,
});
});
};