import { Helmet } from "inferno-helmet"; import { renderToString } from "inferno-server"; import serialize from "serialize-javascript"; import sharp from "sharp"; import { favIconPngUrl, favIconUrl } from "../../shared/config"; import { ILemmyConfig, IsoDataOptionalSite } from "../../shared/interfaces"; import { buildThemeList } from "./build-themes-list"; import { fetchIconPng } from "./fetch-icon-png"; const customHtmlHeader = process.env["LEMMY_UI_CUSTOM_HTML_HEADER"] || ""; let appleTouchIcon: string | undefined = undefined; export async function createSsrHtml( root: string, isoData: IsoDataOptionalSite ) { const site = isoData.site_res; const fallbackTheme = ``; if (!appleTouchIcon) { appleTouchIcon = site?.site_view.site.icon ? `data:image/png;base64,${sharp( await fetchIconPng(site.site_view.site.icon) ) .resize(180, 180) .extend({ bottom: 20, top: 20, left: 20, right: 20, background: "#222222", }) .png() .toBuffer() .then(buf => buf.toString("base64"))}` : favIconPngUrl; } const erudaStr = process.env["LEMMY_UI_DEBUG"] === "true" ? renderToString( <> ) : ""; const helmet = Helmet.renderStatic(); const config: ILemmyConfig = { wsHost: process.env.LEMMY_UI_LEMMY_WS_HOST }; return ` ${erudaStr} ${customHtmlHeader} ${helmet.title.toString()} ${helmet.meta.toString()} ${helmet.link.toString() || fallbackTheme}
${root}
`; }