From dcdbbf1bce56736805fde5e976a3c141a95a20f4 Mon Sep 17 00:00:00 2001 From: atherdon Date: Sun, 4 Oct 2026 00:00:22 +0000 Subject: [PATCH] refactor: call renderTemplate from @llazyemail/render-template Keep the local signature. The package part renderer can return null, so the call is adapted at the boundary. --- src/runtime/renderTemplate.ts | 65 ++++++----------------------------- 1 file changed, 11 insertions(+), 54 deletions(-) diff --git a/src/runtime/renderTemplate.ts b/src/runtime/renderTemplate.ts index be95904..41469c0 100644 --- a/src/runtime/renderTemplate.ts +++ b/src/runtime/renderTemplate.ts @@ -1,15 +1,10 @@ -import type { PartTrace, RenderOptions, RenderResult, Template } from './types'; -import { RenderError } from '@llazyemail/render-template'; import { - assertTemplate, - createContext, - describeError, - finish, - normalizeHtml, - okTrace, - publish, - skippedTrace, -} from './helpers'; + renderTemplate as renderPackageTemplate, + type RenderOptions as PackageRenderOptions, + type RenderResult as PackageRenderResult, + type Template as PackageTemplate, +} from '@llazyemail/render-template'; +import type { RenderOptions, RenderResult, Template } from './types'; /** * Render one template. The same template and props produce the same HTML. @@ -20,47 +15,9 @@ export function renderTemplate( props: TProps, options: RenderOptions = {}, ): RenderResult { - assertTemplate(template); - const onError = options.onError ?? 'throw'; - const ctx = createContext(template.id, props, options.slots); - const trace: PartTrace[] = []; - const rendered: Record = {}; - let ok = true; - - for (const [index, part] of template.parts.entries()) { - const started = Date.now(); - try { - const html = normalizeHtml(part.id, part.render(ctx)); - rendered[part.id] = html; - trace.push(okTrace(part.id, html, Date.now() - started)); - } catch (error) { - ok = false; - const failure = describeError(error); - rendered[part.id] = ''; - trace.push({ - id: part.id, - status: 'error', - html: '', - chars: 0, - ms: Date.now() - started, - error: failure, - }); - if (onError === 'throw') { - for (const later of template.parts.slice(index + 1)) { - trace.push(skippedTrace(later.id)); - } - throw new RenderError( - `template "${template.id}" failed at part "${part.id}": ${failure.message}`, - { - templateId: template.id, - partId: part.id, - trace: publish(trace), - cause: error, - }, - ); - } - } - } - - return finish(template, ctx, rendered, trace, ok, onError); + return renderPackageTemplate( + template as PackageTemplate, + props, + options as PackageRenderOptions, + ) as PackageRenderResult as RenderResult; }