@yimingliao/cms 0.0.47 → 0.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -213,8 +213,8 @@ declare function createSendEmail({ transporter, config, }: {
213
213
  };
214
214
  }): (options: SendEmailOptions) => Promise<any>;
215
215
 
216
- declare function createRenderEmailTemplate({ storageUrl, logger, }: {
217
- storageUrl: string;
216
+ declare function createRenderEmailTemplate({ logoUrl, logger, }: {
217
+ logoUrl: string;
218
218
  logger: Logger;
219
219
  }): (templateKey: string, replacements?: Record<string, string>) => Promise<string>;
220
220
 
@@ -658,36 +658,37 @@ async function readTemplate(filePath) {
658
658
  }
659
659
  }
660
660
  function applyReplacements(html, replacements, logger) {
661
- return html.replace(/\{\{\{(.*?)\}\}\}/g, (_, key) => {
661
+ return html.replace(/\{\{\{(.*?)\}\}\}/g, (_, raw) => {
662
+ const key = raw.trim();
662
663
  const value = replacements[key];
663
664
  if (value == null) {
664
- logger?.warn({ msg: "Email template variable missing", variable: key });
665
+ logger.warn({ msg: "Email template variable missing", variable: key });
665
666
  return "";
666
667
  }
667
668
  return value;
668
669
  });
669
670
  }
670
671
  function createRenderEmailTemplate({
671
- storageUrl,
672
+ logoUrl,
672
673
  logger
673
674
  }) {
674
675
  return async function renderEmailTemplate(templateKey, replacements = {}) {
675
676
  try {
676
677
  const contentPath = path.join(TEMPLATE_DIR, `${templateKey}.html`);
678
+ const vars = {
679
+ LOGO_URL: logoUrl,
680
+ ...replacements
681
+ };
677
682
  const layoutHtml = await readTemplate(LAYOUT_PATH);
678
683
  let contentHtml = await readTemplate(contentPath);
679
- contentHtml = applyReplacements(
680
- contentHtml,
681
- { STORAGE_URL: storageUrl, ...replacements },
682
- logger
683
- );
684
- return layoutHtml.replaceAll("{{{content}}}", contentHtml);
684
+ const merged = layoutHtml.replaceAll("{{{content}}}", contentHtml);
685
+ return applyReplacements(merged, vars, logger);
685
686
  } catch (error) {
686
687
  logger.error({
687
688
  msg: "Email template render failed",
688
689
  templateKey,
689
690
  templateDir: TEMPLATE_DIR,
690
- error: error instanceof Error ? error.stack : error
691
+ error
691
692
  });
692
693
  throw new Error(`Email template error: ${templateKey}`);
693
694
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimingliao/cms",
3
- "version": "0.0.47",
3
+ "version": "0.0.49",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",