@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
53 lines (50 loc) • 2.77 kB
JavaScript
import '../../enum/decorator/api/action.enum.js';
import '../../enum/decorator/api/authentication-type.enum.js';
import '../../enum/decorator/api/controller/load-relations-strategy.enum.js';
import '../../enum/decorator/api/controller/request-transformer-type.enum.js';
import { EApiDtoType } from '../../enum/decorator/api/dto-type.enum.js';
import '../../enum/decorator/api/function/type.enum.js';
import '../../enum/decorator/api/on-type.enum.js';
import '../../enum/decorator/api/property/data-type.enum.js';
import '../../enum/decorator/api/property/date/identifier.enum.js';
import '../../enum/decorator/api/property/date/type.enum.js';
import { EApiPropertyDescribeType } from '../../enum/decorator/api/property/desribe-type.enum.js';
import '../../enum/decorator/api/property/number-type.enum.js';
import '../../enum/decorator/api/property/string-type.enum.js';
import { EApiRouteType } from '../../enum/decorator/api/route-type.enum.js';
import { DtoIsPropertyExposedForGuard } from './is-property-exposed-for-guard.utility.js';
/**
* Determines if a property should be marked for inclusion in a specific DTO type
* @param {EApiRouteType} method - The API route type (GET, POST, etc.)
* @param {EApiDtoType} dtoType - The DTO type (request, response, etc.)
* @param {string} propertyName - The name of the property
* @param {TApiPropertyDescribeProperties} propertyMetadata - The property's metadata
* @param {boolean} isPrimary - Whether the property is a primary key
* @param {Type<IAuthGuard>} currentGuard - The current authentication guard
* @returns {boolean} True if the property should be marked, false otherwise
*/
function DtoIsPropertyShouldBeMarked(method, dtoType, propertyName, propertyMetadata, isPrimary, currentGuard) {
const isDateField = ["createdAt", "receivedAt", "updatedAt"].includes(propertyName);
if (method === EApiRouteType.CREATE && dtoType === EApiDtoType.BODY && isDateField) {
return false;
}
const properties = propertyMetadata.properties?.[method];
if (properties?.[dtoType]?.isEnabled === false) {
return false;
}
if (!DtoIsPropertyExposedForGuard(method, propertyMetadata, dtoType, currentGuard)) {
return false;
}
if (dtoType === EApiDtoType.QUERY && propertyMetadata.type === EApiPropertyDescribeType.OBJECT) {
return false;
}
if (dtoType === EApiDtoType.REQUEST && isPrimary) {
return true;
}
if ((dtoType === EApiDtoType.QUERY || dtoType === EApiDtoType.BODY) && !isPrimary) {
return true;
}
return dtoType !== EApiDtoType.REQUEST && dtoType !== EApiDtoType.QUERY && dtoType !== EApiDtoType.BODY;
}
export { DtoIsPropertyShouldBeMarked };
//# sourceMappingURL=is-property-should-be-marked.utility.js.map