Files
nest/packages/core/router/route-params-factory.ts
2024-11-26 13:36:33 +01:00

48 lines
1.6 KiB
TypeScript

import { RouteParamtypes } from '@nestjs/common/enums/route-paramtypes.enum';
import { IRouteParamsFactory } from './interfaces/route-params-factory.interface';
export class RouteParamsFactory implements IRouteParamsFactory {
public exchangeKeyForValue<
TRequest extends Record<string, any> = any,
TResponse = any,
TResult = any,
>(
key: RouteParamtypes | string,
data: string,
{ req, res, next }: { req: TRequest; res: TResponse; next: Function },
): TResult | null {
switch (key) {
case RouteParamtypes.NEXT:
return next as any;
case RouteParamtypes.REQUEST:
return req as any;
case RouteParamtypes.RESPONSE:
return res as any;
case RouteParamtypes.BODY:
return data && req.body ? req.body[data] : req.body;
case RouteParamtypes.RAW_BODY:
return req.rawBody;
case RouteParamtypes.PARAM:
return data ? req.params[data] : req.params;
case RouteParamtypes.HOST:
/* eslint-disable-next-line no-case-declarations */
const hosts = req.hosts || {};
return data ? hosts[data] : hosts;
case RouteParamtypes.QUERY:
return data ? req.query[data] : req.query;
case RouteParamtypes.HEADERS:
return data ? req.headers[data.toLowerCase()] : req.headers;
case RouteParamtypes.SESSION:
return req.session;
case RouteParamtypes.FILE:
return req[data || 'file'];
case RouteParamtypes.FILES:
return req.files;
case RouteParamtypes.IP:
return req.ip;
default:
return null;
}
}
}