UNPKG

@paroicms/server

Version:
65 lines 2.22 kB
import { isObj } from "@paroicms/public-anywhere-lib"; import { minify } from "html-minifier-terser"; import { PLUGIN_HEAD_TAGS_PLACEHOLDER } from "../../rendered-site/liquidjs-filters/head-tags-filter.js"; import RenderTag from "../render-clone/render.js"; export async function renderLiquidTemplate(renderingContext, { templateNames, payload }) { const { siteContext } = renderingContext; let html; let usedTemplate; for (const templateName of templateNames) { try { html = await siteContext.liquidEngine.renderFile(templateName, { ...payload, get page() { siteContext.logger.warn("'page' is deprecated, use 'doc' instead"); return payload.doc; }, [RenderTag.passThroughSymbol]: renderingContext, }); if (html) { html = postProcessHtml(renderingContext, html); } usedTemplate = templateName; break; } catch (err) { if (isObj(err) && err.code === "ENOENT") continue; throw err; } } if (!html) throw new Error(`missing template '${templateNames[0]}'`); try { return await minify(html, { collapseWhitespace: true, removeComments: true, }); } catch { siteContext.logger.warn(`[${siteContext.fqdn}] invalid HTML generated by '${usedTemplate}'`); } return html; } function postProcessHtml(renderingContext, html) { return html.replace(PLUGIN_HEAD_TAGS_PLACEHOLDER, () => { const { siteContext } = renderingContext; const headTags = []; for (const handler of siteContext.headTagsHandlers) { const tags = handler({ state: renderingContext.pluginRenderState, html, }); if (!tags) continue; if (Array.isArray(tags)) { headTags.push(...tags); } else { headTags.push(tags); } } return headTags.join("\n"); }); } //# sourceMappingURL=render-liquidjs.js.map