UNPKG

ckn.backend

Version:

CKN Framework for Backend

51 lines (44 loc) 1.49 kB
import {ckn} from 'ckn.core'; import fs from 'fs'; import {ViewEngineMiddleware} from "./ViewEngineMiddleware.js"; class CknHtmlViewEngine { constructor() { } #cleanPage(page) { page = page.replaceAll("\n", ""); page = page.replace(/ +/g, ' '); return page; } async render(page, model) { page = this.#cleanPage(page); let commands = []; let output = ""; let print = str => { output += str; } for (let item of page.matchAll(/(((?!<%|%>).)*)(<%[^%]*%>)*/g)) { commands.push('output += `' + item[1] + '`;'); if (item[3] != null) { commands.push(item[3].replaceAll("<%", "").replaceAll("%>", "")); } } try { return eval(commands.toText("") + "output;"); } catch (err) { return err.message; } } } class CknHtmlViewEngineMiddleware extends ViewEngineMiddleware { async onInitialEngine(backend) { backend.server.engine('cknhtml', (filePath, options, callback) => { // define the template engine fs.readFile(filePath, async (err, content) => { if (err) return callback(err); let engine = new CknHtmlViewEngine(); let rendered = await engine.render(content.toString(), options); return callback(null, rendered) }) }); } } export {CknHtmlViewEngineMiddleware}