summaryrefslogtreecommitdiff
path: root/node_modules/csso/lib/restructure/prepare/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/csso/lib/restructure/prepare/index.js')
-rw-r--r--node_modules/csso/lib/restructure/prepare/index.js41
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
+ };
+};