diff --git a/AGENTS.md b/AGENTS.md index f2e7d06..550cef6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -32,9 +32,8 @@ ESLint and Prettier both run in CI. Tests are Vitest, not Jest. `markup-generato ``` src/index.ts public exports only — consumers import the package root src/runtime/types.ts template, context, and trace types -src/runtime/render.ts public re-exports -src/runtime/renderTemplate.ts renderTemplate from @llazyemail/render-template -src/runtime/api.ts defineTemplate, slot, hasSlot +src/runtime/render.ts defineTemplate, renderTemplate, renderMany +src/runtime/api.ts slot, hasSlot src/runtime/errors.ts DisplayError, codes, and message catalog src/runtime/explain.ts explain() src/templates/email/email.ts defineEmailTemplate, renderEmail diff --git a/package-lock.json b/package-lock.json index 71227ab..f2d54f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@llazyemail/template-runtime-display", - "version": "0.8.5", + "version": "0.9.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@llazyemail/template-runtime-display", - "version": "0.8.5", + "version": "0.9.1", "license": "MIT", "dependencies": { "@llazyemail/render-template": "github:LLazyEmail/render-template#0.3.0" diff --git a/package.json b/package.json index 81bb30d..a480604 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@llazyemail/template-runtime-display", - "version": "0.9.0", + "version": "0.9.1", "description": "Standalone runtime that renders a whole HTML email from named parts and records which part broke.", "type": "module", "license": "MIT", diff --git a/src/index.ts b/src/index.ts index 9103242..6e9882f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,12 +2,12 @@ export { defineTemplate, displayErrors, hasSlot, + renderMany, renderTemplate, slot, DisplayError, DisplayErrorCode, } from './runtime/render'; -export { renderMany, RenderError } from '@llazyemail/render-template'; export type { PartFailure, PartStatus, @@ -19,6 +19,7 @@ export type { TemplatePart, } from './runtime/types'; export type { RenderJob, RenderOptions } from '@llazyemail/render-template'; +export { RenderError } from '@llazyemail/render-template'; export { explain } from './runtime/explain'; export { defineEmailTemplate, renderEmail } from './templates/email/email'; diff --git a/src/runtime/api.ts b/src/runtime/api.ts index 897f2c4..0b016bf 100644 --- a/src/runtime/api.ts +++ b/src/runtime/api.ts @@ -1,24 +1,8 @@ -import { assertTemplate, type Template as PackageTemplate } from '@llazyemail/render-template'; -import type { RenderContext, Template } from './types'; +import type { RenderContext } from './types'; import { displayErrors } from './errors'; export { DisplayError, DisplayErrorCode, displayErrors } from './errors'; -/** - * Validate, copy, and freeze a template. Later edits to the caller's part - * array do not change a template that has already been defined. - */ -export function defineTemplate(template: Template): Template { - assertTemplate(template as PackageTemplate); - return Object.freeze({ - id: template.id, - parts: Object.freeze( - template.parts.map((part) => Object.freeze({ id: part.id, render: part.render })), - ), - compose: template.compose, - }); -} - /** Read a slot. A missing slot is `''`. A function slot is called with the same context. */ export function slot(ctx: RenderContext, id: string): string { if (!hasSlot(ctx, id)) return ''; diff --git a/src/runtime/render.ts b/src/runtime/render.ts index ef215e4..2928d5e 100644 --- a/src/runtime/render.ts +++ b/src/runtime/render.ts @@ -1,9 +1,44 @@ -export { renderTemplate } from './renderTemplate'; -export { - defineTemplate, - hasSlot, - slot, - DisplayError, - DisplayErrorCode, - displayErrors, -} from './api'; +import { + assertTemplate, + renderMany, + renderTemplate as renderPackageTemplate, + type RenderOptions, + type RenderResult as PackageRenderResult, + type Template as PackageTemplate, +} from '@llazyemail/render-template'; +import type { RenderResult, Template } from './types'; + +export { renderMany }; + +export { hasSlot, slot, DisplayError, DisplayErrorCode, displayErrors } from './api'; + +/** + * Validate, copy, and freeze a template. Later edits to the caller's part + * array do not change a template that has already been defined. + */ +export function defineTemplate(template: Template): Template { + assertTemplate(template as PackageTemplate); + return Object.freeze({ + id: template.id, + parts: Object.freeze( + template.parts.map((part) => Object.freeze({ id: part.id, render: part.render })), + ), + compose: template.compose, + }); +} + +/** + * Render one template. The same template and props produce the same HTML. + * The runtime keeps no state between calls. + */ +export function renderTemplate( + template: Template, + props: TProps, + options: RenderOptions = {}, +): RenderResult { + return renderPackageTemplate( + template as PackageTemplate, + props, + options, + ) as PackageRenderResult as RenderResult; +} diff --git a/src/runtime/renderTemplate.ts b/src/runtime/renderTemplate.ts deleted file mode 100644 index 2e0b7b4..0000000 --- a/src/runtime/renderTemplate.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { - renderTemplate as renderPackageTemplate, - type RenderOptions, - type RenderResult as PackageRenderResult, - type Template as PackageTemplate, -} from '@llazyemail/render-template'; -import type { RenderResult, Template } from './types'; - -/** - * Render one template. The same template and props produce the same HTML. - * The runtime keeps no state between calls. - */ -export function renderTemplate( - template: Template, - props: TProps, - options: RenderOptions = {}, -): RenderResult { - return renderPackageTemplate( - template as PackageTemplate, - props, - options, - ) as PackageRenderResult as RenderResult; -}