ckn.backend
Version:
CKN Framework for Backend
51 lines (44 loc) • 1.49 kB
JavaScript
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}