import { markHTMLString } from "../escape.js"; import { renderElement } from "./util.js"; const uniqueElements = (item, index, all) => { const props = JSON.stringify(item.props); const children = item.children; return index === all.findIndex((i) => JSON.stringify(i.props) === props && i.children == children); }; function renderAllHeadContent(result) { result._metadata.hasRenderedHead = true; const styles = Array.from(result.styles).filter(uniqueElements).map( (style) => style.props.rel === "stylesheet" ? renderElement("link", style) : renderElement("style", style) ); result.styles.clear(); const scripts = Array.from(result.scripts).filter(uniqueElements).map((script) => { return renderElement("script", script, false); }); const links = Array.from(result.links).filter(uniqueElements).map((link) => renderElement("link", link, false)); let content = links.join("\n") + styles.join("\n") + scripts.join("\n"); if (result._metadata.extraHead.length > 0) { for (const part of result._metadata.extraHead) { content += part; } } return markHTMLString(content); } function* renderHead() { yield { type: "head" }; } function* maybeRenderHead() { yield { type: "maybe-head" }; } export { maybeRenderHead, renderAllHeadContent, renderHead };