Files
worklenz/worklenz-backend/src/shared/file-constants.ts

96 lines
4.1 KiB
TypeScript

/* eslint-disable security/detect-object-injection */
import fs from "node:fs";
import path from "node:path";
import pug from "pug";
import {IEmailTemplateType} from "../interfaces/email-template-type";
class FileConstants {
private static release: string | null = null;
private static readonly EMAIL_TEMPLATES_MAP: { [x: string]: string } = {};
private static readonly PUG_EMAIL_TEMPLATES_MAP: { [x: string]: pug.compileTemplate } = {};
private static readonly EMAIL_TEMPLATES_BASE = "../../worklenz-email-templates";
static init() {
FileConstants.getRelease();
FileConstants.initEmailTemplates();
}
private static readHtmlEmailTemplate(fileName: string) {
const key = fileName.toString();
if (!FileConstants.EMAIL_TEMPLATES_MAP[key]) {
const url = path.join(__dirname, FileConstants.EMAIL_TEMPLATES_BASE, `${fileName}.html`);
FileConstants.EMAIL_TEMPLATES_MAP[key] = fs.readFileSync(url, "utf8");
}
return FileConstants.EMAIL_TEMPLATES_MAP[key];
}
private static readPugEmailTemplate(fileName: string) {
const key = fileName.toString();
if (!FileConstants.PUG_EMAIL_TEMPLATES_MAP[key]) {
const filePath = path.join(__dirname, FileConstants.EMAIL_TEMPLATES_BASE, "email-notifications", `${fileName}.pug`);
const template = pug.compileFile(filePath);
FileConstants.PUG_EMAIL_TEMPLATES_MAP[key] = template;
}
return FileConstants.PUG_EMAIL_TEMPLATES_MAP[key];
}
private static initEmailTemplates() {
FileConstants.getEmailTemplate(IEmailTemplateType.NewSubscriber);
FileConstants.getEmailTemplate(IEmailTemplateType.TeamMemberInvitation);
FileConstants.getEmailTemplate(IEmailTemplateType.UnregisteredTeamMemberInvitation);
FileConstants.getEmailTemplate(IEmailTemplateType.PasswordChange);
FileConstants.getEmailTemplate(IEmailTemplateType.Welcome);
FileConstants.getEmailTemplate(IEmailTemplateType.OTPVerification);
FileConstants.getEmailTemplate(IEmailTemplateType.ResetPassword);
FileConstants.getEmailTemplate(IEmailTemplateType.TaskAssigneeChange);
FileConstants.getEmailTemplate(IEmailTemplateType.DailyDigest);
FileConstants.getEmailTemplate(IEmailTemplateType.TaskDone);
FileConstants.getEmailTemplate(IEmailTemplateType.ProjectDailyDigest);
FileConstants.getEmailTemplate(IEmailTemplateType.TaskComment);
}
static getEmailTemplate(type: IEmailTemplateType) {
switch (type) {
case IEmailTemplateType.NewSubscriber:
return FileConstants.readHtmlEmailTemplate("admin-new-subscriber-notification");
case IEmailTemplateType.TeamMemberInvitation:
return FileConstants.readHtmlEmailTemplate("team-invitation");
case IEmailTemplateType.UnregisteredTeamMemberInvitation:
return FileConstants.readHtmlEmailTemplate("unregistered-team-invitation-notification");
case IEmailTemplateType.PasswordChange:
return FileConstants.readHtmlEmailTemplate("password-changed-notification");
case IEmailTemplateType.Welcome:
return FileConstants.readHtmlEmailTemplate("welcome");
case IEmailTemplateType.OTPVerification:
return FileConstants.readHtmlEmailTemplate("otp-verfication-code");
case IEmailTemplateType.ResetPassword:
return FileConstants.readHtmlEmailTemplate("reset-password");
case IEmailTemplateType.TaskAssigneeChange:
return FileConstants.readPugEmailTemplate("task-assignee-change");
case IEmailTemplateType.DailyDigest:
return FileConstants.readPugEmailTemplate("daily-digest");
case IEmailTemplateType.TaskDone:
return FileConstants.readPugEmailTemplate("task-moved-to-done");
case IEmailTemplateType.ProjectDailyDigest:
return FileConstants.readPugEmailTemplate("project-daily-digest");
case IEmailTemplateType.TaskComment:
return FileConstants.readPugEmailTemplate("task-comment");
default:
return null;
}
}
static getRelease() {
if (FileConstants.release === null) {
FileConstants.release = fs.readFileSync(path.join(__dirname, "../../release"), "utf8").trim();
}
return FileConstants.release;
}
}
export default FileConstants;