diff options
Diffstat (limited to 'node_modules/csso/lib/restructure/prepare/index.js')
| -rw-r--r-- | node_modules/csso/lib/restructure/prepare/index.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/node_modules/csso/lib/restructure/prepare/index.js b/node_modules/csso/lib/restructure/prepare/index.js new file mode 100644 index 00000000..fc08082e --- /dev/null +++ b/node_modules/csso/lib/restructure/prepare/index.js @@ -0,0 +1,41 @@ +import { walk, generate, keyword as resolveKeyword } from 'css-tree'; +import createDeclarationIndexer from './createDeclarationIndexer.js'; +import processSelector from './processSelector.js'; + +export default function prepare(ast, options) { + const markDeclaration = createDeclarationIndexer(); + + walk(ast, { + visit: 'Rule', + enter(node) { + node.block.children.forEach(markDeclaration); + processSelector(node, options.usage); + } + }); + + 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 = generate(node.prelude); + } + + // compare keyframe selectors by its values + // NOTE: still no clarification about problems with keyframes selector grouping (issue #197) + if (resolveKeyword(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 + }; +}; |
