UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

89 lines (85 loc) 5.27 kB
'use strict'; require('../../../enum/decorator/api/action.enum.js'); require('../../../enum/decorator/api/authentication-type.enum.js'); require('../../../enum/decorator/api/controller/load-relations-strategy.enum.js'); require('../../../enum/decorator/api/controller/request-transformer-type.enum.js'); var dtoType_enum = require('../../../enum/decorator/api/dto-type.enum.js'); require('../../../enum/decorator/api/function/type.enum.js'); require('../../../enum/decorator/api/on-type.enum.js'); require('../../../enum/decorator/api/property/data-type.enum.js'); require('../../../enum/decorator/api/property/date/identifier.enum.js'); require('../../../enum/decorator/api/property/date/type.enum.js'); require('../../../enum/decorator/api/property/desribe-type.enum.js'); require('../../../enum/decorator/api/property/number-type.enum.js'); require('../../../enum/decorator/api/property/string-type.enum.js'); require('../../../enum/decorator/api/route-type.enum.js'); var common = require('@nestjs/common'); var constants = require('@nestjs/common/constants'); var routeParamtypes_enum = require('@nestjs/common/enums/route-paramtypes.enum'); require('../../../constant/decorator/api/function.constant.js'); require('../../../constant/utility/dto/constant.js'); require('@nestjs/swagger'); require('../../../external/tslib/tslib.es6.js'); require('class-transformer'); require('class-validator'); require('lodash/random'); require('../../../validator/is-regular-expression.validator.js'); require('node:crypto'); require('../../../enum/filter-operation.enum.js'); require('../../../validator/must-match-one-of-schemas.validator.js'); var generate_utility = require('../../dto/generate.utility.js'); require('../../../enum/filter-order-direction.enum.js'); require('typeorm'); require('reflect-metadata'); require('../../../validator/all-or-none-of-listed-properties.validator.js'); /** * Applies metadata for NestJS controller methods to enable proper dependency injection. * Sets up parameter metadata for route arguments including DTOs, headers, IP, and authentication requests. * @param {object} target - The target controller class * @param {object} targetPrototype - The prototype of the target controller class * @param {IApiEntity<E>} entity - The entity metadata for the controller * @param {IApiControllerProperties<E>} properties - Controller configuration properties * @param {EApiRouteType} method - The type of route (CREATE, DELETE, GET, etc.) * @param {string} methodName - The name of the method being configured * @param {TApiControllerPropertiesRoute<E, typeof method>} routeConfig - Route-specific configuration * @returns {void} * @template E - The entity type */ function ApiControllerApplyMetadata(target, targetPrototype, entity, properties, method, methodName, routeConfig) { let parameterIndex = 0; let routeArgumentsMetadata = {}; const parameterTypes = []; const requestDto = routeConfig.dto?.request ?? generate_utility.DtoGenerate(properties.entity, entity, method, dtoType_enum.EApiDtoType.REQUEST, routeConfig.autoDto?.[dtoType_enum.EApiDtoType.REQUEST], routeConfig.authentication?.guard); const queryDto = routeConfig.dto?.query ?? generate_utility.DtoGenerate(properties.entity, entity, method, dtoType_enum.EApiDtoType.QUERY, routeConfig.autoDto?.[dtoType_enum.EApiDtoType.QUERY], routeConfig.authentication?.guard); const bodyDto = routeConfig.dto?.body ?? generate_utility.DtoGenerate(properties.entity, entity, method, dtoType_enum.EApiDtoType.BODY, routeConfig.autoDto?.[dtoType_enum.EApiDtoType.BODY], routeConfig.authentication?.guard); if (requestDto) { routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum.RouteParamtypes.PARAM, parameterIndex); parameterTypes.push(requestDto); parameterIndex++; } if (queryDto) { routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum.RouteParamtypes.QUERY, parameterIndex); parameterTypes.push(queryDto); parameterIndex++; } if (bodyDto) { routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum.RouteParamtypes.BODY, parameterIndex); parameterTypes.push(bodyDto); parameterIndex++; } routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum.RouteParamtypes.HEADERS, parameterIndex); parameterTypes.push(Object); parameterIndex++; routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum.RouteParamtypes.IP, parameterIndex); parameterTypes.push(Object); parameterIndex++; if (routeConfig.authentication) { routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum.RouteParamtypes.REQUEST, parameterIndex); parameterTypes.push(Object); parameterIndex++; } Reflect.defineMetadata(constants.ROUTE_ARGS_METADATA, routeArgumentsMetadata, target, methodName); Reflect.defineMetadata(constants.PARAMTYPES_METADATA, parameterTypes, targetPrototype, methodName); } exports.ApiControllerApplyMetadata = ApiControllerApplyMetadata; //# sourceMappingURL=apply-metadata.utility.js.map