// import {CacheProvider } from "@emotion/react"
import { renderToString } from "react-dom/server";
import type { FC } from "react";
// const WithCache: FC<{children: ReactNode, cache: EmotionCache}> = ({children, cache}) => {children}
export const renderFromString = (App: FC) => {
// const myCache = createCache({
// prepend: true,
// key: 'css',
// stylisPlugins: [
// ]
// });
const html = renderToString();
return {
html,
css: extractCritical(html),
};
};
const extractCritical = (html: string) => {
const rules: { [key: string]: string } = {};
for (let i in document.styleSheets) {
const styleSheet = document.styleSheets[i];
for (let r in styleSheet.cssRules) {
const rule = styleSheet.cssRules[r];
if (rule && rule.cssText && rule.cssText.slice(0, 5) === ".css-") {
const selector = rule.cssText.slice(1, 11);
if (
!rules[selector] && html.includes(selector) &&
!rule.cssText.slice(10).includes(".css-")
) {
rules[selector] = rule.cssText;
}
}
}
}
return Object.keys(rules).map((r) => rules[r]).join(" ");
};