UNPKG

zeev-mail

Version:

Non official Zeev BPMS component library and CLI bundler for e-mails (Message Events)

98 lines (82 loc) 2.06 kB
const fs = require('fs') const posthtml = require('posthtml') const { insertAt } = require('posthtml-insert-at') const chokidar = require('chokidar') const { compile } = require('../compiler') const server = require('./server') require('colors') const { BASE_INDEX, BASE_EMAIL, FAVICON, PLAYGROUND_FOLDER, COMPILED_FOLDER } = require('../config') function createOutputDirectory (dir) { if (fs.existsSync(dir)) return fs.mkdirSync(dir) } function createFavicon (origin, dest) { fs.copyFileSync(origin, `${dest}/favicon.ico`) } function createIndex (emails) { const baseIndex = fs.readFileSync(BASE_INDEX) const navItems = emails.map(({ filename }) => `<li class="zeev-mail-list-item"> <a href="${filename}">${filename}</a> </li>` ).join('') return posthtml() .use( insertAt({ selector: '#nav', append: navItems }) ) .process(baseIndex) .then(result => { fs.writeFileSync(`${COMPILED_FOLDER}/index.html`, result.html) }) } function createEmails (emails) { const baseEmail = fs.readFileSync(BASE_EMAIL) return emails.map(email => posthtml() .use( insertAt({ selector: '#mail', append: email.content }) ) .process(baseEmail) .then(result => { fs.writeFileSync(`${COMPILED_FOLDER}/${email.filename}`, result.html) }) ) } async function build () { const emails = await compile({ inputGlob: `${PLAYGROUND_FOLDER}/*.html`, minifyHtml: true, sasspath: './styles/external.scss' }) await Promise.all([ createIndex(emails), ...createEmails(emails) ]) } async function start () { createOutputDirectory(COMPILED_FOLDER) createFavicon(FAVICON, COMPILED_FOLDER) await build() server.start() chokidar .watch(`${PLAYGROUND_FOLDER}/*.html`, { ignoreInitial: true }) .on('all', async (event, path) => { await build() server.refresh() console.log('Emails builded!'.green, 'Browser', 'refreshed'.magenta) }) } start()