/
lostSun
/
project-client-server-apps
Обзор
Документация
Войти
/
lostSun
/
project-client-server-apps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
node_modules/postcss-unique-selectors/src/index.js
59 строк
2 KB
1lostsun
initial commit
05 май 2025, 11:35
05 май 2025, 11:35
fe8f535
Код
Авторство
О чём код?
'use strict'; const selectorParser = require('postcss-selector-parser'); /** * @param {string} selectors * @param {selectorParser.SyncProcessor<void>} callback * @return {string} */ function parseSelectors(selectors, callback) { return selectorParser(callback).processSync(selectors); } /** * @param {import('postcss').Rule} rule * @return {string} */ function unique(rule) { const selector = [...new Set(rule.selectors)]; selector.sort(); return selector.join(); } /** * @type {import('postcss').PluginCreator<void>} * @return {import('postcss').Plugin} */ function pluginCreator() { return { postcssPlugin: 'postcss-unique-selectors', OnceExit(css) { css.walkRules((nodes) => { /** @type {string[]} */ let comments = []; /** @type {selectorParser.SyncProcessor<void>} */ const removeAndSaveComments = (selNode) => { selNode.walk((sel) => { if (sel.type === 'comment') { comments.push(sel.value); sel.remove(); return; } else { return; } }); }; if (nodes.raws.selector && nodes.raws.selector.raw) { parseSelectors(nodes.raws.selector.raw, removeAndSaveComments); nodes.raws.selector.raw = unique(nodes); } nodes.selector = parseSelectors(nodes.selector, removeAndSaveComments); nodes.selector = unique(nodes); nodes.selectors = nodes.selectors.concat(comments); }); }, }; } pluginCreator.postcss = true; module.exports = pluginCreator;