UNPKG

vtex-email-framework

Version:
62 lines (51 loc) 1.87 kB
const { existsSync, readdirSync } = require('node:fs'); const { resolve } = require('node:path'); const app = require('express')(); const hbs = require('hbs'); const cors = require('cors'); const root = (folders)=> { return resolve(process.cwd(), ...folders.split('/')); } const helper = readdirSync(root('emails/helpers'))[0].replace('.js', ''); require(resolve(process.cwd(),'emails', 'helpers', helper)); hbs.registerHelper('clearText', (value) => value.replace(/\W+/g, ' ')); hbs.registerPartials(root('emails/templates/custom/partials'), function (err) { }); function findModel(templateName) { if (existsSync(root('emails/templates/default'))) { if (readdirSync(root('emails/templates/default')).includes(templateName)) return templateName } return null } const viewFiles = readdirSync(root('emails/templates/custom')); const fileNames = viewFiles .filter(folder => /.hbs$/gi.test(folder)) .map(template => { return { file: template.split('.')[0], model: findModel(template) } }); app.use(cors()) app.set('views', root('emails/templates/custom')); app.set('view engine', 'hbs'); app.get('/', (req, res) => { res.render(resolve(__dirname, 'view'), { files: fileNames }) }); app.get('/sse', (req, res) => { res.statusCode = 200; res.setHeader("cache-control", "no-cache") res.setHeader("connection", "keep-alive") res.setHeader("content-type", "text/event-stream") res.write('retry: 200\n'); }); fileNames.forEach(({ file }) => { app.get(`/${file}`, (req, res) => { res .render(file, require(root(`emails/json/${file}.json`))) }) app.get(`/templates/default/${file}`, (req, res) => { res .render(root(`emails/templates/default/${file}`), require(root(`emails/json/${file}.json`))) }) }); module.exports = app