20 lines
738 B
TypeScript
20 lines
738 B
TypeScript
import { CONTROLLER_ROUTES } from './constants';
|
|
import type { Method, RouteMetadata } from './types';
|
|
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
const RouteFactory =
|
|
(method: Method) =>
|
|
(path: `/${string}`): MethodDecorator =>
|
|
(target, handlerName) => {
|
|
const controllerClass = target.constructor;
|
|
const routes = (Reflect.getMetadata(CONTROLLER_ROUTES, controllerClass) ??
|
|
[]) as RouteMetadata[];
|
|
routes.push({ method, path, handlerName: String(handlerName) });
|
|
Reflect.defineMetadata(CONTROLLER_ROUTES, routes, controllerClass);
|
|
};
|
|
|
|
export const Get = RouteFactory('get');
|
|
export const Post = RouteFactory('post');
|
|
export const Patch = RouteFactory('patch');
|
|
export const Delete = RouteFactory('delete');
|