import { markHTMLString } from "../../escape.js"; import { isPromise } from "../../util.js"; import { renderChild } from "../any.js"; import { renderToBufferDestination } from "../util.js"; const renderTemplateResultSym = Symbol.for("astro.renderTemplateResult"); class RenderTemplateResult { [renderTemplateResultSym] = true; htmlParts; expressions; error; constructor(htmlParts, expressions) { this.htmlParts = htmlParts; this.error = void 0; this.expressions = expressions.map((expression) => { if (isPromise(expression)) { return Promise.resolve(expression).catch((err) => { if (!this.error) { this.error = err; throw err; } }); } return expression; }); } async render(destination) { const expRenders = this.expressions.map((exp) => { return renderToBufferDestination((bufferDestination) => { if (exp || exp === 0) { return renderChild(bufferDestination, exp); } }); }); for (let i = 0; i < this.htmlParts.length; i++) { const html = this.htmlParts[i]; const expRender = expRenders[i]; destination.write(markHTMLString(html)); if (expRender) { await expRender.renderToFinalDestination(destination); } } } } function isRenderTemplateResult(obj) { return typeof obj === "object" && !!obj[renderTemplateResultSym]; } function renderTemplate(htmlParts, ...expressions) { return new RenderTemplateResult(htmlParts, expressions); } export { RenderTemplateResult, isRenderTemplateResult, renderTemplate };