// Pre-compile email templates to avoid unnecessary parsing at run time. See `src/emails`. const compileEmail = (filename) => { fs.readdirSync('src/emails').forEach((file) => { if (file.endsWith('.hbs')) { const partial = fs.readFileSync(`src/emails/${file}`, 'utf8') .replace(/{{/g, '\\{{') .replace(/\\{{(#block|\/block)/g, '{{$1'); handlebars.registerPartial(file.substr(0, file.length - 4), partial); } }); const template = fs.readFileSync(filename, 'utf8') .replace(/{{/g, '\\{{') .replace(/\\{{(#extend|\/extend|#content|\/content)/g, '{{$1'); return handlebars.precompile(juice(handlebars.compile(template)({}))); }
_writeTemplate(template) { return () => //read original template file: template.sourceContent().then(content => { template.setPrecompiled(handlebars.precompile(content)); template.applications.forEach(app => { const basename = template.getBasename(); this.entrypoints[app] = this.entrypoints[app] || {}; this.entrypoints[app][basename] = basename; }); //write final template file: template.logOverrideMessage(); return FileSystem.writeFile( path.join(this.processedTemplatesPath, template.dst), this._wrapTemplate(template) ); }); }
_writeTemplate(template) { return () => //read original template file: template.sourceContent().then(content => { template.setPrecompiled(handlebars.precompile(content)); template.applications.forEach(app => { const basename = template.getBasename(); this.entrypoints[app] = this.entrypoints[app] || {}; this.entrypoints[app][basename] = basename; }); //write final template file: template.logOverrideMessage(); return FileSystem.writeFile( path.join(this.processedTemplatesPath, template.dst), this._wrapTemplate(template) ); }); }