'use strict'; const cssTree = require('css-tree'); const createDeclarationIndexer = require('./createDeclarationIndexer.cjs'); const processSelector = require('./processSelector.cjs'); function prepare(ast, options) { const markDeclaration = createDeclarationIndexer(); cssTree.walk(ast, { visit: 'Rule', enter(node) { node.block.children.forEach(markDeclaration); processSelector(node, options.usage); } }); cssTree.walk(ast, { visit: 'Atrule', enter(node) { if (node.prelude) { node.prelude.id = null; // pre-init property to avoid multiple hidden class for generate node.prelude.id = cssTree.generate(node.prelude); } // compare keyframe selectors by its values // NOTE: still no clarification about problems with keyframes selector grouping (issue #197) if (cssTree.keyword(node.name).basename === 'keyframes') { node.block.avoidRulesMerge = true; /* probably we don't need to prevent those merges for @keyframes TODO: need to be checked */ node.block.children.forEach(function(rule) { rule.prelude.children.forEach(function(simpleselector) { simpleselector.compareMarker = simpleselector.id; }); }); } } }); return { declaration: markDeclaration }; } module.exports = prepare;