nuxt-og-image
Version:
Enlightened OG Image generation for Nuxt.
61 lines (60 loc) • 1.35 kB
JavaScript
import { defineSatoriTransformer } from "../utils.js";
const BLOCK_ELEMENTS = [
"div",
"p",
"ul",
"ol",
"li",
"blockquote",
"pre",
"hr",
"table",
"dl"
];
const INLINE_ELEMENTS = [
"span",
"a",
"b",
"i",
"u",
"em",
"strong",
"code",
"abbr",
"del",
"ins",
"mark",
"sub",
"sup",
"small",
"p",
"h1",
"h2",
"h3",
"h4",
"h5"
];
export default defineSatoriTransformer({
filter: (node) => [...INLINE_ELEMENTS, "div"].includes(node.type) && (Array.isArray(node.props?.children) && node.props?.children.length >= 1) && !node.props?.class?.includes("hidden"),
transform: (node) => {
node.props.style = node.props.style || {};
if (node.props.style?.display && node.props.style?.display !== "flex") {
return;
}
if (node.type === "div") {
node.props.style.display = "flex";
if (!node.props?.class?.includes("flex-") && node.props.children.some((child) => BLOCK_ELEMENTS.includes(child.type))) {
node.props.style.flexDirection = "column";
return;
}
}
let flexWrap = node.props?.class?.includes("flex-wrap");
if (!node.props?.class?.includes("flex-")) {
node.props.style.flexWrap = "wrap";
flexWrap = true;
}
if (flexWrap && !node.props?.class?.includes("gap")) {
node.props.style.gap = "0.2em";
}
}
});