2020-11-13 10:54:35 +01:00
|
|
|
import Application from "swaf/Application";
|
|
|
|
import Migration, {MigrationType} from "swaf/db/Migration";
|
|
|
|
import CreateMigrationsTable from "swaf/migrations/CreateMigrationsTable";
|
|
|
|
import ExpressAppComponent from "swaf/components/ExpressAppComponent";
|
|
|
|
import MysqlComponent from "swaf/components/MysqlComponent";
|
|
|
|
import LogRequestsComponent from "swaf/components/LogRequestsComponent";
|
|
|
|
import RedisComponent from "swaf/components/RedisComponent";
|
|
|
|
import ServeStaticDirectoryComponent from "swaf/components/ServeStaticDirectoryComponent";
|
|
|
|
import MaintenanceComponent from "swaf/components/MaintenanceComponent";
|
|
|
|
import MailComponent from "swaf/components/MailComponent";
|
|
|
|
import SessionComponent from "swaf/components/SessionComponent";
|
|
|
|
import FormHelperComponent from "swaf/components/FormHelperComponent";
|
|
|
|
import CsrfProtectionComponent from "swaf/components/CsrfProtectionComponent";
|
|
|
|
import WebSocketServerComponent from "swaf/components/WebSocketServerComponent";
|
2020-04-23 18:07:55 +02:00
|
|
|
import HomeController from "./controllers/HomeController";
|
2020-11-13 10:54:35 +01:00
|
|
|
import AutoUpdateComponent from "swaf/components/AutoUpdateComponent";
|
|
|
|
import DummyMigration from "swaf/migrations/DummyMigration";
|
|
|
|
import DropLegacyLogsTable from "swaf/migrations/DropLegacyLogsTable";
|
2021-01-25 13:17:41 +01:00
|
|
|
import PreviousUrlComponent from "swaf/components/PreviousUrlComponent";
|
2021-11-20 19:54:59 +01:00
|
|
|
import MailViewEngine from "swaf/frontend/MailViewEngine";
|
|
|
|
import AssetCompiler from "swaf/frontend/AssetCompiler";
|
|
|
|
import FrontendToolsComponent from "swaf/components/FrontendToolsComponent";
|
|
|
|
import CopyAssetPreCompiler from "swaf/frontend/CopyAssetPreCompiler";
|
|
|
|
import ScssAssetPreCompiler from "swaf/frontend/ScssAssetPreCompiler";
|
|
|
|
import TypeScriptPreCompiler from "swaf/frontend/TypeScriptPreCompiler";
|
|
|
|
import SvelteViewEngine from "swaf/frontend/SvelteViewEngine";
|
|
|
|
import NunjucksViewEngine from "swaf/frontend/NunjucksViewEngine";
|
2020-04-23 18:07:55 +02:00
|
|
|
|
2020-06-27 17:20:06 +02:00
|
|
|
export default class App extends Application {
|
2020-10-05 13:38:03 +02:00
|
|
|
public constructor(
|
2021-11-20 19:54:59 +01:00
|
|
|
version: string,
|
2020-10-05 13:38:03 +02:00
|
|
|
private readonly addr: string,
|
|
|
|
private readonly port: number,
|
|
|
|
) {
|
2021-11-20 19:54:59 +01:00
|
|
|
super(version);
|
2020-04-23 18:07:55 +02:00
|
|
|
}
|
|
|
|
|
2020-10-05 13:38:03 +02:00
|
|
|
protected getMigrations(): MigrationType<Migration>[] {
|
2020-04-23 18:07:55 +02:00
|
|
|
return [
|
|
|
|
CreateMigrationsTable,
|
2020-11-02 18:17:55 +01:00
|
|
|
DummyMigration,
|
|
|
|
DropLegacyLogsTable,
|
2020-04-23 18:07:55 +02:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
protected async init(): Promise<void> {
|
|
|
|
this.registerComponents();
|
|
|
|
this.registerWebSocketListeners();
|
|
|
|
this.registerControllers();
|
|
|
|
}
|
|
|
|
|
|
|
|
private registerComponents() {
|
2021-01-25 13:17:41 +01:00
|
|
|
// Base
|
|
|
|
this.use(new ExpressAppComponent(this.addr, this.port));
|
2020-04-23 18:07:55 +02:00
|
|
|
this.use(new LogRequestsComponent());
|
|
|
|
|
|
|
|
// Static files
|
|
|
|
this.use(new ServeStaticDirectoryComponent('public'));
|
|
|
|
this.use(new ServeStaticDirectoryComponent('node_modules/feather-icons/dist', '/icons'));
|
|
|
|
|
2021-01-25 13:17:41 +01:00
|
|
|
// Dynamic views and routes
|
2021-11-20 19:54:59 +01:00
|
|
|
const intermediateDirectory = 'intermediates/assets';
|
|
|
|
const assetCompiler = new AssetCompiler(intermediateDirectory, 'public');
|
|
|
|
const additionalViewPaths = ['test/assets'];
|
|
|
|
this.use(new FrontendToolsComponent(
|
|
|
|
assetCompiler,
|
|
|
|
new CopyAssetPreCompiler(intermediateDirectory, '', 'json', additionalViewPaths, false),
|
|
|
|
new ScssAssetPreCompiler(intermediateDirectory, assetCompiler.targetDir, 'scss', additionalViewPaths),
|
|
|
|
new CopyAssetPreCompiler(intermediateDirectory, 'img', 'svg', additionalViewPaths, true),
|
|
|
|
new TypeScriptPreCompiler(intermediateDirectory, additionalViewPaths),
|
|
|
|
new SvelteViewEngine(intermediateDirectory, ...additionalViewPaths),
|
|
|
|
new NunjucksViewEngine(intermediateDirectory, ...additionalViewPaths),
|
|
|
|
));
|
2021-01-25 13:17:41 +01:00
|
|
|
this.use(new PreviousUrlComponent());
|
|
|
|
|
2020-04-23 18:07:55 +02:00
|
|
|
// Maintenance
|
2021-11-20 19:54:59 +01:00
|
|
|
this.use(new MaintenanceComponent());
|
2020-05-05 15:26:28 +02:00
|
|
|
this.use(new AutoUpdateComponent());
|
2020-04-23 18:07:55 +02:00
|
|
|
|
|
|
|
// Services
|
2021-01-25 13:17:41 +01:00
|
|
|
this.use(new MysqlComponent());
|
2021-11-20 19:54:59 +01:00
|
|
|
this.use(new MailComponent(new MailViewEngine(intermediateDirectory, ...additionalViewPaths)));
|
2020-04-23 18:07:55 +02:00
|
|
|
|
|
|
|
// Session
|
2021-01-25 13:17:41 +01:00
|
|
|
this.use(new RedisComponent());
|
|
|
|
this.use(new SessionComponent(this.as(RedisComponent)));
|
2020-04-23 18:07:55 +02:00
|
|
|
|
|
|
|
// Utils
|
|
|
|
this.use(new FormHelperComponent());
|
|
|
|
|
|
|
|
// Middlewares
|
|
|
|
this.use(new CsrfProtectionComponent());
|
|
|
|
|
|
|
|
// WebSocket server
|
2021-11-20 19:54:59 +01:00
|
|
|
this.use(new WebSocketServerComponent());
|
2020-04-23 18:07:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private registerWebSocketListeners() {
|
2020-10-05 13:38:03 +02:00
|
|
|
// WebSocket listeners
|
2020-04-23 18:07:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private registerControllers() {
|
|
|
|
this.use(new HomeController());
|
|
|
|
}
|
2020-10-05 13:38:03 +02:00
|
|
|
}
|