UNPKG

@elsikora/nestjs-crud-automator

Version:

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

66 lines (62 loc) 4.18 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'); var desribeType_enum = 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'); var routeType_enum = require('../../enum/decorator/api/route-type.enum.js'); var generateDecorator_utility = require('./generate-decorator.utility.js'); var getDecoratorConfig_utility = require('./get-decorator-config.utility.js'); var handleDateProperty_utility = require('./handle-date-property.utility.js'); var isPropertyExposedForGuard_utility = require('./is-property-exposed-for-guard.utility.js'); /** * Creates property decorators for DTOs based on property metadata, entity information, and context. * Handles special cases for date properties and guard-based exposure rules. * @param {M} method - The API route type (CREATE, DELETE, GET, etc.) * @param {TApiPropertyDescribeProperties} propertyMetadata - Metadata describing the property * @param {IApiEntity<E>} entity - The entity metadata * @param {D} dtoType - The type of DTO (REQUEST, RESPONSE, etc.) * @param {string} propertyName - The name of the property * @param {Type<IAuthGuard>} [currentGuard] - Optional authentication guard * @param {Record<string, Type<unknown>>} [generatedDTOs] - Optional record of dynamically generated DTOs * @returns {Array<PropertyDecorator> | undefined} Array of property decorators or undefined if property should not be included * @template E - The entity type * @template M - The API route type * @template D - The DTO type */ // eslint-disable-next-line @elsikora/typescript/no-unnecessary-type-parameters function DtoBuildDecorator(method, propertyMetadata, entity, dtoType, propertyName, currentGuard, generatedDTOs) { const properties = propertyMetadata.properties?.[method]; if (properties?.[dtoType]?.isEnabled === false || (properties?.[dtoType]?.isResponse && properties?.[dtoType]?.isExpose === false)) { return undefined; } if (!isPropertyExposedForGuard_utility.DtoIsPropertyExposedForGuard(method, propertyMetadata, dtoType, currentGuard)) { return undefined; } if (propertyMetadata.type === desribeType_enum.EApiPropertyDescribeType.DATE) { const dateMetadata = propertyMetadata; if ((method === routeType_enum.EApiRouteType.UPDATE || method === routeType_enum.EApiRouteType.PARTIAL_UPDATE) && dtoType === dtoType_enum.EApiDtoType.BODY) { return undefined; } if (method === routeType_enum.EApiRouteType.GET_LIST && dtoType === dtoType_enum.EApiDtoType.QUERY) { const dateProperties = handleDateProperty_utility.DtoHandleDateProperty(propertyName, dateMetadata.identifier); return dateProperties.map((property) => { const newMetadata = { ...dateMetadata, identifier: property.identifier }; const config = getDecoratorConfig_utility.DtoGetDecoratorConfig(method, newMetadata, dtoType, property.name); return generateDecorator_utility.DtoGenerateDecorator(newMetadata, entity, config, method, dtoType, propertyName); }); } } const config = getDecoratorConfig_utility.DtoGetDecoratorConfig(method, propertyMetadata, dtoType); return [generateDecorator_utility.DtoGenerateDecorator(propertyMetadata, entity, config, method, dtoType, propertyName, generatedDTOs)]; } exports.DtoBuildDecorator = DtoBuildDecorator; //# sourceMappingURL=build-decorator.utility.js.map