stylelint
Version:
A mighty CSS linter that helps you avoid errors and enforce conventions.
47 lines (35 loc) • 1.42 kB
JavaScript
// NOTICE: This file is generated by Rollup. To modify it,
// please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
;
const resolveNestedSelector = require('postcss-resolve-nested-selector');
const getRuleSelector = require('./getRuleSelector.cjs');
const isStandardSyntaxSelector = require('./isStandardSyntaxSelector.cjs');
const parseSelectorAST = require('./parseSelectorAST.cjs');
/**
* @typedef {import('postcss-selector-parser').Selector} Selector
*
* @param {import('postcss').Rule} rule
* @param {import('stylelint').PostcssResult} result
* @returns {Array<{selector: Selector, resolvedSelectors: Array<Selector>}>}
*/
function flattenNestedSelectorsForRule(rule, result) {
const ownAST = parseSelectorAST(getRuleSelector(rule), result, rule);
if (!ownAST) return [];
const flattenedSelectors = [];
for (const selectorAST of ownAST.nodes) {
const resolvedSelectors = resolveNestedSelector(selectorAST.toString(), rule);
for (const resolvedSelector of resolvedSelectors) {
if (!isStandardSyntaxSelector(resolvedSelector)) return [];
const resolvedRoot = parseSelectorAST(resolvedSelector, result, rule);
if (!resolvedRoot) {
continue;
}
flattenedSelectors.push({
selector: selectorAST,
resolvedSelectors: resolvedRoot.nodes,
});
}
}
return flattenedSelectors;
}
module.exports = flattenNestedSelectorsForRule;