@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
85 lines (81 loc) • 5.54 kB
JavaScript
;
require('../../../../enum/decorator/api/action.enum.js');
require('../../../../enum/decorator/api/authentication-type.enum.js');
require('../../../../enum/decorator/api/controller/get-list/query/filter/missing-behavior.enum.js');
require('../../../../enum/decorator/api/controller/get-list/query/unlisted-fields.enum.js');
require('../../../../enum/decorator/api/controller/relation-reference-shape.enum.js');
require('../../../../enum/decorator/api/controller/request/target.enum.js');
require('../../../../enum/decorator/api/controller/request/transformer-type.enum.js');
require('../../../../enum/decorator/api/controller/response-target.enum.js');
var dtoType_enum = require('../../../../enum/decorator/api/dto-type.enum.js');
require('../../../../enum/decorator/api/function/context-storage-kind.enum.js');
require('../../../../enum/decorator/api/function/subscriber-transaction-expectation.enum.js');
require('../../../../enum/decorator/api/function/transaction/event-status.enum.js');
require('../../../../enum/decorator/api/function/transaction/failure-stage.enum.js');
require('../../../../enum/decorator/api/function/transaction/mode.enum.js');
require('../../../../enum/decorator/api/function/transaction/outcome.enum.js');
require('../../../../enum/decorator/api/function/transaction/owner-kind.enum.js');
require('../../../../enum/decorator/api/function/transaction/trace-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/subscriber-authorization-expectation.enum.js');
require('../../../../enum/decorator/api/route/type.enum.js');
var common = require('@nestjs/common');
var constants_js = require('@nestjs/common/constants.js');
var routeParamtypes_enum_js = require('@nestjs/common/enums/route-paramtypes.enum.js');
var dto_utility = require('../get/dto.utility.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
* @param {IApiControllerGetListQueryPlan} [queryPlan] - Normalized plan used to resolve the route-scoped dynamic QUERY DTO.
* @returns {void}
* @template E - The entity type
*/
function ApiControllerApplyMetadata(target, targetPrototype, entity, properties, method, methodName, routeConfig, queryPlan) {
let parameterIndex = 0;
let routeArgumentsMetadata = {};
const parameterTypes = [];
const requestDto = dto_utility.ApiControllerGetDto(properties, entity, method, dtoType_enum.EApiDtoType.PARAMETERS, routeConfig, queryPlan);
const queryDto = dto_utility.ApiControllerGetDto(properties, entity, method, dtoType_enum.EApiDtoType.QUERY, routeConfig, queryPlan);
const bodyDto = dto_utility.ApiControllerGetDto(properties, entity, method, dtoType_enum.EApiDtoType.BODY, routeConfig, queryPlan);
if (requestDto) {
routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum_js.RouteParamtypes.PARAM, parameterIndex);
parameterTypes.push(requestDto);
parameterIndex++;
}
if (queryDto) {
routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum_js.RouteParamtypes.QUERY, parameterIndex);
parameterTypes.push(queryDto);
parameterIndex++;
}
if (bodyDto) {
routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum_js.RouteParamtypes.BODY, parameterIndex);
parameterTypes.push(bodyDto);
parameterIndex++;
}
routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum_js.RouteParamtypes.HEADERS, parameterIndex);
parameterTypes.push(Object);
parameterIndex++;
routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum_js.RouteParamtypes.IP, parameterIndex);
parameterTypes.push(Object);
parameterIndex++;
routeArgumentsMetadata = common.assignMetadata(routeArgumentsMetadata, routeParamtypes_enum_js.RouteParamtypes.REQUEST, parameterIndex);
parameterTypes.push(Object);
Reflect.defineMetadata(constants_js.ROUTE_ARGS_METADATA, routeArgumentsMetadata, target, methodName);
Reflect.defineMetadata(constants_js.PARAMTYPES_METADATA, parameterTypes, targetPrototype, methodName);
}
exports.ApiControllerApplyMetadata = ApiControllerApplyMetadata;
//# sourceMappingURL=metadata.utility.js.map