* chore: fix lint * fix: constants check:lint command * chore(lint): permit unused vars which begin w/ _ * chore: rm dead code * fix(lint): more lint fixes to constants pkg * fix(lint): lint the live server - fix lint issues * chore: improve clean script * fix(lint): more lint * chore: set live server process title * chore(deps): update to turbo@2.5.5 * chore(live): target node22 * fix(dev): add missing ui pkg dependency * fix(dev): lint decorators * fix(dev): lint space app * fix(dev): address lint issues in types pkg * fix(dev): lint editor pkg * chore(dev): moar lint * fix(dev): live server exit code * chore: address PR feedback * fix(lint): better TPageExtended type * chore: refactor * chore: revert most live server changes * fix: few more lint issues * chore: enable ci checks Ensure we can build + confirm that lint is not getting worse. * chore: address PR feedback * fix: web lint warning added to package.json * fix: ci:lint command --------- Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
import { RequestHandler, Router } from "express";
|
|
import "reflect-metadata";
|
|
|
|
type HttpMethod =
|
|
| "get"
|
|
| "post"
|
|
| "put"
|
|
| "delete"
|
|
| "patch"
|
|
| "options"
|
|
| "head"
|
|
| "ws";
|
|
|
|
interface ControllerInstance {
|
|
[key: string]: unknown;
|
|
}
|
|
|
|
interface ControllerConstructor {
|
|
new (...args: unknown[]): ControllerInstance;
|
|
prototype: ControllerInstance;
|
|
}
|
|
|
|
export function registerControllers(
|
|
router: Router,
|
|
Controller: ControllerConstructor,
|
|
): void {
|
|
const instance = new Controller();
|
|
const baseRoute = Reflect.getMetadata("baseRoute", Controller) as string;
|
|
|
|
Object.getOwnPropertyNames(Controller.prototype).forEach((methodName) => {
|
|
if (methodName === "constructor") return; // Skip the constructor
|
|
|
|
const method = Reflect.getMetadata(
|
|
"method",
|
|
instance,
|
|
methodName,
|
|
) as HttpMethod;
|
|
const route = Reflect.getMetadata("route", instance, methodName) as string;
|
|
const middlewares =
|
|
(Reflect.getMetadata(
|
|
"middlewares",
|
|
instance,
|
|
methodName,
|
|
) as RequestHandler[]) || [];
|
|
|
|
if (method && route) {
|
|
const handler = instance[methodName] as unknown;
|
|
|
|
if (typeof handler === "function") {
|
|
if (method !== "ws") {
|
|
(
|
|
router[method] as (
|
|
path: string,
|
|
...handlers: RequestHandler[]
|
|
) => void
|
|
)(`${baseRoute}${route}`, ...middlewares, handler.bind(instance));
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|