index.js
1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
'use strict';
const plugin = 'postcss-discard-empty';
/**
* @param {import('postcss').Root} css
* @param {import('postcss').Result} result
* @return {void}
*/
function discardAndReport(css, result) {
/**
* @param {import('postcss').AnyNode} node
* @return {void}
*/
function discardEmpty(node) {
const { type } = node;
/** @type {(import('postcss').ChildNode | import('postcss').ChildProps)[] | undefined} */
const sub = /** @type {any} */ (node).nodes;
if (sub) {
/** @type {import('postcss').Container} */ (node).each(discardEmpty);
}
if (
(type === 'decl' && !node.value && !node.prop.startsWith('--')) ||
(type === 'rule' && !node.selector) ||
(sub && !sub.length) ||
(type === 'atrule' &&
((!sub && !node.params) ||
(!node.params &&
!(/** @type {import('postcss').ChildNode[]}*/ (sub).length))))
) {
node.remove();
result.messages.push({
type: 'removal',
plugin,
node,
});
}
}
css.each(discardEmpty);
}
/**
* @type {import('postcss').PluginCreator<void>}
* @return {import('postcss').Plugin}
*/
function pluginCreator() {
return {
postcssPlugin: plugin,
OnceExit(css, { result }) {
discardAndReport(css, result);
},
};
}
pluginCreator.postcss = true;
module.exports = pluginCreator;