minista-shared-head
Version:
## About
67 lines (66 loc) • 1.85 kB
JavaScript
;
export function transformAttrs(attrs) {
const attrsArray = Object.entries(attrs);
if (!attrsArray.length) {
return "";
}
return attrsArray.map(([key, value]) => `${key}="${value}"`).join(" ");
}
export function checkTagsCharset(tags) {
if (!tags.length) {
return false;
}
let hasCharset = false;
tags.map((item) => {
if (item.type === "meta" && "charset" in item.props) {
hasCharset = true;
}
});
return hasCharset;
}
export function checkTagsViewport(tags) {
if (!tags.length) {
return false;
}
let hasViewport = false;
tags.map((item) => {
if (item.type === "meta" && item.props?.name === "viewport") {
hasViewport = true;
}
});
return hasViewport;
}
export function filterKeyTags(tags) {
if (!tags.length) {
return [];
}
let count = 0;
let uniqueTags = {};
tags.map((item) => {
if (item.key) {
uniqueTags[item.key] = item;
} else {
count += 1;
uniqueTags[count] = item;
}
});
return Object.values(uniqueTags);
}
export function transformTag(tag) {
const selfClosingTags = ["meta", "link"];
const attr = Object.entries(tag.props).filter(([key]) => key !== "children" && key !== "dangerouslySetInnerHTML").map(([key, value]) => `${key}="${value}"`).join(" ");
if (selfClosingTags.includes(tag.type.toString())) {
return `<${tag.type}${attr && " " + attr} />`;
}
const startTag = `<${tag.type}${attr && " " + attr}>`;
const innerHTML = tag.props.dangerouslySetInnerHTML ? tag.props.dangerouslySetInnerHTML.__html : "";
const children = innerHTML ? innerHTML : tag.props.children;
const endTag = `</${tag.type}>`;
return `${startTag}${children}${endTag}`;
}
export function transformTags(tags) {
if (!tags.length) {
return "";
}
return tags.map((tag) => transformTag(tag)).join("");
}