mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-04 10:49:29 +08:00
59 lines
2 KiB
Text
59 lines
2 KiB
Text
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "default", {
|
|
enumerable: true,
|
|
get: ()=>collapseAdjacentRules
|
|
});
|
|
let comparisonMap = {
|
|
atrule: [
|
|
"name",
|
|
"params"
|
|
],
|
|
rule: [
|
|
"selector"
|
|
]
|
|
};
|
|
let types = new Set(Object.keys(comparisonMap));
|
|
function collapseAdjacentRules() {
|
|
function collapseRulesIn(root) {
|
|
let currentRule = null;
|
|
root.each((node)=>{
|
|
if (!types.has(node.type)) {
|
|
currentRule = null;
|
|
return;
|
|
}
|
|
if (currentRule === null) {
|
|
currentRule = node;
|
|
return;
|
|
}
|
|
let properties = comparisonMap[node.type];
|
|
var _property, _property1;
|
|
if (node.type === "atrule" && node.name === "font-face") {
|
|
currentRule = node;
|
|
} else if (properties.every((property)=>((_property = node[property]) !== null && _property !== void 0 ? _property : "").replace(/\s+/g, " ") === ((_property1 = currentRule[property]) !== null && _property1 !== void 0 ? _property1 : "").replace(/\s+/g, " "))) {
|
|
// An AtRule may not have children (for example if we encounter duplicate @import url(…) rules)
|
|
if (node.nodes) {
|
|
currentRule.append(node.nodes);
|
|
}
|
|
node.remove();
|
|
} else {
|
|
currentRule = node;
|
|
}
|
|
});
|
|
// After we've collapsed adjacent rules & at-rules, we need to collapse
|
|
// adjacent rules & at-rules that are children of at-rules.
|
|
// We do not care about nesting rules because Tailwind CSS
|
|
// explicitly does not handle rule nesting on its own as
|
|
// the user is expected to use a nesting plugin
|
|
root.each((node)=>{
|
|
if (node.type === "atrule") {
|
|
collapseRulesIn(node);
|
|
}
|
|
});
|
|
}
|
|
return (root)=>{
|
|
collapseRulesIn(root);
|
|
};
|
|
}
|