UNPKG

967 BJavaScriptView Raw
1'use strict';
2const selectorParser = require('postcss-selector-parser');
3
4function parseSelectors(selectors, callback) {
5 return selectorParser(callback).processSync(selectors);
6}
7
8function unique(rule) {
9 const selector = [...new Set(rule.selectors)];
10 selector.sort();
11 rule.selector = selector.join();
12}
13
14function pluginCreator() {
15 return {
16 postcssPlugin: 'postcss-unique-selectors',
17 OnceExit(css) {
18 css.walkRules((nodes) => {
19 let comments = [];
20 nodes.selector = parseSelectors(nodes.selector, (selNode) => {
21 selNode.walk((sel) => {
22 if (sel.type === 'comment') {
23 comments.push(sel.value);
24 sel.remove();
25 return;
26 } else {
27 return;
28 }
29 });
30 });
31 unique(nodes);
32 nodes.selectors = nodes.selectors.concat(comments);
33 });
34 },
35 };
36}
37
38pluginCreator.postcss = true;
39module.exports = pluginCreator;