/** * 模板注册表:name → render(data) => { subject, html, text }(纯函数)。 * 加新模板 = 加 `templates/.js` + 这里登记一行,不改 provider、不改调用方。 */ import * as verifyCode from './verify-code.js' import * as videoReady from './video-ready.js' import * as waitlistInvite from './waitlist-invite.js' import * as orderNotice from './order-notice.js' import * as vokoNotice from './voko-notice.js' import { EmailError } from '../map-error.js' const REGISTRY = { 'verify-code': verifyCode.render, 'video-ready': videoReady.render, 'waitlist-invite': waitlistInvite.render, 'order-notice': orderNotice.render, 'voko-notice': vokoNotice.render, } /** * 渲染指定模板。未知模板名抛 badTemplate;render 自身的缺字段错误透传。 * @param {string} name * @param {object} data * @returns {{ subject: string, html: string, text: string }} */ export function renderTemplate(name, data) { const render = REGISTRY[name] if (!render) { const known = Object.keys(REGISTRY).join(', ') throw new EmailError({ provider: 'template', reason: 'badTemplate', retryable: false, message: `unknown template "${name}". known: ${known}`, }) } return render(data) } /** @returns {string[]} 已注册模板名 */ export function knownTemplates() { return Object.keys(REGISTRY) }