UNPKG

ckn.backend

Version:

CKN Framework for Backend

61 lines (52 loc) 1.94 kB
import {ckn} from 'ckn.core'; import {Middleware} from "../core/Middleware.js"; import {File} from "ckn.stream"; class ViewEngineMiddleware extends Middleware { static #viewDirectories = []; constructor() { super(); this.priority = 10; this.views = []; this.viewFolder = 'views'; } changeViewFolder(path) { this.viewFolder = path; return this; } async onInitialEngine(backend) { } async onStartingServer(backend, next) { await this.onInitialEngine(backend); if (this.viewFolder != null && this.viewFolder.trim() != "") { ViewEngineMiddleware.#viewDirectories.push(this.viewFolder); } if (backend.modules != null) { for (let application of backend.modules.values()) { ViewEngineMiddleware.#viewDirectories = ViewEngineMiddleware.#viewDirectories.union(application.views); } } if (backend.themes != null) { for (let theme of backend.themes.values()) { let viewDirectory = File.join(theme.path, "views"); ViewEngineMiddleware.#viewDirectories.push(viewDirectory); } } ViewEngineMiddleware.#viewDirectories = ViewEngineMiddleware.#viewDirectories.distinct(); backend.server.set("views", ViewEngineMiddleware.#viewDirectories); this.log.info("[OK]", this.constructor.name + " View Engine has been set."); next(); } async onInitialSession(backend, session, next) { session.render = async (view, data) => { if (view == null) next(); if (typeof view === "string") { session.response.render(view, data); } else if (view.render != null) { let html = await view.render(); session.send(html); } } next(); } } export {ViewEngineMiddleware}