UNPKG

@mapcss/config

Version:

Definition of MapCSS config, loader

60 lines (59 loc) 1.94 kB
import valueParser from "../../deps/esm.sh/postcss-value-parser.js"; import { default as parseSelector } from "../../deps/deno.land/x/postcss_selector_parser@v6.0.2/mod.js"; const processor = (selectors) => { selectors.walk((selector) => { selector.spaces = { before: "", after: "" }; }); }; export function minifySelector(value) { const selectorProcessor = parseSelector(processor); return selectorProcessor.processSync(value, {}); } function minifyValue(value) { const parsed = valueParser(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) => { // If custom variable of declaration value is ` `, keep it decl.raws = { before: "", between: decl.variable && !decl.value ? ": " : ":", 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; export default plugin;