ckn.backend
Version:
CKN Framework for Backend
53 lines (49 loc) • 1.8 kB
JavaScript
import {ckn} from "ckn.core";
import {Middleware} from "../core/Middleware.js";
import {File} from "ckn.stream";
import path from "path";
class ThemeMiddleware extends Middleware {
constructor() {
super();
this.priority = 5;
this.themeFolder = "themes";
}
async onStartingServer(backend, next) {
backend.themes = [];
let themePath = File.join(this.themeFolder);
let themeDirectory = themePath.toDirectory();
if (themeDirectory.isExist) {
for (let directory of themeDirectory.directories) {
let name = directory.name;
backend.themes[name] = {
name: name,
path: directory.path,
subthemes: []
};
for (let themFile of directory.path.toDirectory().files) {
let subThemeName = themFile.name.replace(".js", "");
if (themFile.isExist) {
let themeClass = Object.values(await import("file://"+path.resolve(themFile.fullPath)))[0];
backend.themes[name].subthemes[subThemeName] = {
name: subThemeName,
themeClass: themeClass
}
}
}
}
}
next();
}
async onInitialSession(backend, session, next) {
session.loadTheme = (themeName, subThemeName) => {
if (backend.themes[themeName] != null) {
let theme = new backend.themes[themeName].subthemes[subThemeName].themeClass();
theme.self = theme;
return theme;
}
return null;
};
next();
}
}
export {ThemeMiddleware}