UNPKG

stylelint

Version:

A mighty CSS linter that helps you avoid errors and enforce conventions.

47 lines (35 loc) 1.42 kB
// NOTICE: This file is generated by Rollup. To modify it, // please instead edit the ESM counterpart and rebuild with Rollup (npm run build). 'use strict'; 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;