@sentzunhat/zacatl
Version:
A modular, high-performance TypeScript microservice framework for Node.js, featuring layered architecture, dependency injection, and robust validation for building scalable APIs and distributed systems.
60 lines (47 loc) • 1.49 kB
text/typescript
import i18n from "i18n";
import path from "path";
import { AbstractArchitecture } from "../architecture";
import { HookHandler, RouteHandler } from "./entry-points/rest";
export type ApplicationHookHandlers = Array<new () => HookHandler>;
export type ApplicationRouteHandlers = Array<new () => RouteHandler>;
export type ApplicationEntryPoints = {
rest: {
// Middleware for pre-/post-processing
hookHandlers: ApplicationHookHandlers;
// Endpoints (or routes) as the request targets; expect an array of class constructors
routeHandlers: ApplicationRouteHandlers;
};
};
export type ConfigApplication = {
entryPoints: ApplicationEntryPoints;
};
export class Application extends AbstractArchitecture {
private config: ConfigApplication;
public hookHandlers: HookHandler[] = [];
public routeHandlers: RouteHandler[] = [];
constructor(config: ConfigApplication) {
super();
i18n.configure({
locales: ["en", "fr"],
objectNotation: true,
directory: path.join(process.cwd(), "src/locales"),
});
this.config = config;
}
/**
* Register and store dependencies for REST entry points
*/
private registerRest(): void {
this.registerAndStoreDependencies(
this.config.entryPoints.rest.hookHandlers,
this.hookHandlers
);
this.registerAndStoreDependencies(
this.config.entryPoints.rest.routeHandlers,
this.routeHandlers
);
}
public start(): void {
this.registerRest();
}
}