@nest-modules/mailer
Version:
NestJS - a mailer module (@mailer)
58 lines (57 loc) • 2.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const path = require("path");
const handlebars = require("handlebars");
const inlineCss = require("inline-css");
const glob = require("glob");
const lodash_1 = require("lodash");
class HandlebarsAdapter {
constructor() {
this.precompiledTemplates = {};
handlebars.registerHelper('concat', (...args) => {
args.pop();
return args.join('');
});
}
compile(mail, callback, mailerOptions) {
const precompile = (template, callback, options) => {
const templateExt = path.extname(template) || '.hbs';
const templateName = path.basename(template, path.extname(template));
const templateDir = path.dirname(template) !== '.'
? path.dirname(template)
: lodash_1.get(options, 'dir', '');
const templatePath = path.join(templateDir, templateName + templateExt);
if (!this.precompiledTemplates[templateName]) {
try {
const template = fs.readFileSync(templatePath, 'UTF-8');
this.precompiledTemplates[templateName] = handlebars.compile(template, lodash_1.get(options, 'options', {}));
}
catch (err) {
return callback(err);
}
}
return {
templateExt,
templateName,
templateDir,
templatePath,
};
};
const { templateName } = precompile(mail.data.template, callback, mailerOptions.template);
const runtimeOptions = lodash_1.get(mailerOptions, 'options', {
partials: false,
data: {},
});
if (runtimeOptions.partials) {
const files = glob.sync(path.join(runtimeOptions.partials.dir, '*.hbs'));
files.forEach((file) => precompile(file, () => { }, runtimeOptions.partials));
}
const rendered = this.precompiledTemplates[templateName](mail.data.context, Object.assign(Object.assign({}, runtimeOptions), { partials: this.precompiledTemplates }));
inlineCss(rendered, { url: ' ' }).then((html) => {
mail.data.html = html;
return callback();
});
}
}
exports.HandlebarsAdapter = HandlebarsAdapter;