UNPKG

postcss-merge-rules

Version:

Merge CSS rules with PostCSS.

44 lines (39 loc) • 1.01 kB
/** @import {Declaration, Rule} from 'postcss' */ /** * @typedef {Object} RuleMeta * @property {string[]} selectors * @property {Declaration[]} declarations */ /** * @param {import('postcss').ChildNode} node * @return {node is Declaration} */ function isDeclaration(node) { return node.type === 'decl'; } /** * @param {Rule} rule * @param {WeakMap<Rule, RuleMeta>} [ruleMeta] * @return {RuleMeta} */ export function getMeta(rule, ruleMeta) { if (ruleMeta && rule) { let meta = ruleMeta.get(rule); if (!meta && rule.nodes) { meta = { selectors: rule.selectors, declarations: rule.nodes.filter(isDeclaration), }; ruleMeta.set(rule, meta); } return meta ?? { selectors: [], declarations: [] }; } return { selectors: rule?.selectors ?? [], declarations: rule?.nodes?.filter(isDeclaration) ?? [], }; } /** @param {Rule} rule @return {Declaration[]} */ export function getDecls(rule) { return rule.nodes.filter(isDeclaration); }