@mapcss/core
Version:
Tiny, composable Atomic CSS engine
61 lines (60 loc) • 2.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.minifySelector = void 0;
const postcss_selector_parser_js_1 = __importDefault(require("../../deps/esm.sh/postcss-selector-parser.js"));
const postcss_value_parser_js_1 = __importDefault(require("../../deps/esm.sh/postcss-value-parser.js"));
const selectorProcessor = (0, postcss_selector_parser_js_1.default)((selectors) => {
selectors.walk((selector) => {
selector.spaces = { before: "", after: "" };
});
});
function minifySelector(value) {
return selectorProcessor.processSync(value);
}
exports.minifySelector = minifySelector;
function minifyValue(value) {
const parsed = (0, postcss_value_parser_js_1.default)(value.trim());
parsed.walk((node) => {
if (node.type === "div" || node.type === "function") {
node.before = "";
node.after = "";
}
if (node.type === "space")
node.value = " ";
});
return parsed.toString();
}
function plugin() {
return {
postcssPlugin: "postcss-minify",
AtRule: (atrule) => {
atrule.raws = { before: "", after: "", afterName: " " };
atrule.params = minifyValue(atrule.params);
},
Comment: (comment) => {
if (comment.text[0] === "!") {
comment.raws.before = "";
comment.raws.after = "";
}
else {
comment.remove();
}
},
Declaration: (decl) => {
decl.raws = { before: "", between: ":", value: decl.raws.value };
decl.value = minifyValue(decl.value);
},
Rule: (rule) => {
rule.raws = { before: "", between: "", after: "", semicolon: false };
rule.selector = minifySelector(rule.selector);
},
OnceExit: (css) => {
css.raws.after = "";
},
};
}
plugin.postcss = true;
exports.default = plugin;