Add svelte as a view engine to swaf #33

Merged
ashpie merged 97 commits from svelte into develop 2021-11-09 19:31:22 +01:00
2 changed files with 3 additions and 73 deletions
Showing only changes of commit 05d112a3b3 - Show all commits

View File

@ -1,66 +0,0 @@
import nunjucks, {Environment} from "nunjucks";
import config from "config";
import {Express} from "express";
import ApplicationComponent from "../ApplicationComponent";
import Controller, {RouteParams} from "../Controller";
import * as querystring from "querystring";
import {ParsedUrlQueryInput} from "querystring";
import * as util from "util";
import * as path from "path";
/**
* @deprecated
* TODO: turn into a proper ViewEngine
*/
export default class NunjucksComponent extends ApplicationComponent {
private readonly viewsPath: string[];
private environment?: Environment;
public constructor(viewsPath: string[] = ['views']) {
super();
this.viewsPath = viewsPath;
}
public async start(app: Express): Promise<void> {
const opts = {
autoescape: true,
noCache: !config.get('view.cache'),
throwOnUndefined: true,
};
this.environment = new nunjucks.Environment([
...this.viewsPath.map(path => new nunjucks.FileSystemLoader(path, opts)),
new nunjucks.FileSystemLoader(path.join(__dirname, '../../../views'), opts),
new nunjucks.FileSystemLoader(path.join(__dirname, '../views'), opts),
], opts)
.addGlobal('route', (
route: string,
params: RouteParams = [],
query: ParsedUrlQueryInput = {},
absolute: boolean = false,
): string => {
return Controller.route(route, params, query, absolute);
})
.addGlobal('app_version', this.getApp().getVersion())
.addGlobal('core_version', this.getApp().getCoreVersion())
.addGlobal('querystring', querystring)
.addGlobal('app', config.get('app'))
.addFilter('dump', (val) => {
return util.inspect(val);
})
.addFilter('hex', (v: number) => {
return v.toString(16);
});
app.engine('njk', (path, options, callback) => {
this.environment?.render(path, options, (err, res) => {
callback(err, res || undefined);
});
});
}
public getEnvironment(): Environment {
if (!this.environment) throw new Error('Environment not initialized.');
return this.environment;
}
}

View File

@ -9,8 +9,8 @@ import ExpressAppComponent from "./ExpressAppComponent";
import Application from "../Application"; import Application from "../Application";
import RedisComponent from "./RedisComponent"; import RedisComponent from "./RedisComponent";
import WebSocketListener from "../WebSocketListener"; import WebSocketListener from "../WebSocketListener";
import NunjucksComponent from "./NunjucksComponent";
import {Session} from "express-session"; import {Session} from "express-session";
import ViewEngine from "../frontend/ViewEngine";
export default class WebSocketServerComponent extends ApplicationComponent { export default class WebSocketServerComponent extends ApplicationComponent {
private wss?: WebSocket.Server; private wss?: WebSocket.Server;
@ -19,9 +19,10 @@ export default class WebSocketServerComponent extends ApplicationComponent {
private readonly application: Application, private readonly application: Application,
private readonly expressAppComponent: ExpressAppComponent, private readonly expressAppComponent: ExpressAppComponent,
private readonly storeComponent: RedisComponent, private readonly storeComponent: RedisComponent,
private readonly nunjucksComponent?: NunjucksComponent,
) { ) {
super(); super();
ViewEngine.setGlobal('websocketUrl', config.get('public_websocket_url'));
} }
public async start(_app: Express): Promise<void> { public async start(_app: Express): Promise<void> {
@ -71,11 +72,6 @@ export default class WebSocketServerComponent extends ApplicationComponent {
}); });
}); });
}); });
const env = this.nunjucksComponent?.getEnvironment();
if (env) {
env.addGlobal('websocketUrl', config.get('public_websocket_url'));
}
} }
public async stop(): Promise<void> { public async stop(): Promise<void> {