/
TON618OFF
/
FinalPWHTML
Обзор
Документация
Войти
/
TON618OFF
/
FinalPWHTML
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
node_modules/postcss-discard-overridden/src/index.js
94 строки
2 KB
TON618OFF
не ну это ваще
23 июн 2024, 00:30
23 июн 2024, 00:30
e27ae20
Код
Авторство
О чём код?
'use strict'; const OVERRIDABLE_RULES = new Set(['keyframes', 'counter-style']); const SCOPE_RULES = new Set(['media', 'supports']); /** * @param {string} prop * @return {string} */ function vendorUnprefixed(prop) { return prop.replace(/^-\w+-/, ''); } /** * @param {string} name * @return {boolean} */ function isOverridable(name) { return OVERRIDABLE_RULES.has(vendorUnprefixed(name.toLowerCase())); } /** * @param {string} name * @return {boolean} */ function isScope(name) { return SCOPE_RULES.has(vendorUnprefixed(name.toLowerCase())); } /** * @param {import('postcss').AtRule} node * @return {string} */ function getScope(node) { /** @type {import('postcss').Container<import('postcss').ChildNode> | import('postcss').Document | undefined} */ let current = node.parent; const chain = [node.name.toLowerCase(), node.params]; while (current) { if ( current.type === 'atrule' && isScope(/** @type import('postcss').AtRule */ (current).name) ) { chain.unshift( /** @type import('postcss').AtRule */ (current).name + ' ' + /** @type import('postcss').AtRule */ (current).params ); } current = current.parent; } return chain.join('|'); } /** * @type {import('postcss').PluginCreator<void>} * @return {import('postcss').Plugin} */ function pluginCreator() { return { postcssPlugin: 'postcss-discard-overridden', prepare() { const cache = new Map(); /** @type {{node: import('postcss').AtRule, scope: string}[]} */ const rules = []; return { OnceExit(css) { css.walkAtRules((node) => { if (isOverridable(node.name)) { const scope = getScope(node); cache.set(scope, node); rules.push({ node, scope, }); } }); rules.forEach((rule) => { if (cache.get(rule.scope) !== rule.node) { rule.node.remove(); } }); }, }; }, }; } pluginCreator.postcss = true; module.exports = pluginCreator;