svelte-ast-print
Version:
Serialize Svelte AST nodes into stringified syntax. A.k.a parse in reverse.
72 lines • 1.98 kB
JavaScript
/**
* Printers related to CSS **rule** related AST nodes only.
* @module svelte-ast-print/css/rule
*/
import * as char from "../_internal/char.js";
import { State } from "../_internal/shared.js";
import { CurlyBrackets } from "../_internal/wrapper.js";
import { printCSSSelectorList } from "./selector.js";
/**
* @since 1.0.0
* @__NO_SIDE_EFFECTS__
*/
export function printCSSBlock(n, opts = {}) {
const st = State.get(n, opts);
const brackets = new CurlyBrackets("mutliline");
for (const ch of n.children) {
switch (ch.type) {
case "Declaration": {
brackets.insert(printCSSDeclaration(ch, opts));
break;
}
case "Rule": {
brackets.insert(printCSSRule(ch, opts));
break;
}
case "Atrule": {
brackets.insert(printCSSAtrule(ch, opts));
break;
}
}
}
st.add(brackets);
return st.result;
}
/**
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/CSS_Declaration}
*
* @since 1.0.0
* @__NO_SIDE_EFFECTS__
*/
export function printCSSDeclaration(n, opts = {}) {
const st = State.get(n, opts);
st.add(
//
n.property, char.COLON, char.SPACE, n.value.split(/[\n|\t]+/g).join(char.SPACE), char.SEMI);
return st.result;
}
/**
* @since 1.0.0
* @__NO_SIDE_EFFECTS__
*/
export function printCSSAtrule(n, opts = {}) {
const st = State.get(n, opts);
st.add(char.AT, n.name, char.SPACE, n.prelude);
if (n.block)
st.add(char.SPACE, printCSSBlock(n.block, opts));
else
st.add(char.SEMI);
return st.result;
}
/**
* @since 1.0.0
* @__NO_SIDE_EFFECTS__
*/
export function printCSSRule(n, opts = {}) {
const st = State.get(n, opts);
st.add(
//
printCSSSelectorList(n.prelude, opts), char.SPACE, printCSSBlock(n.block, opts));
return st.result;
}
//# sourceMappingURL=rule.js.map