UNPKG

@elsikora/nestjs-crud-automator

Version:

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

45 lines (42 loc) 2.22 kB
import { HttpStatus } from '@nestjs/common'; import '@nestjs/swagger'; import '@nestjs/swagger/dist/constants.js'; import { ErrorException } from '../../../error/exception.utility.js'; import { ApiRoutePrepareDiscriminatedDtoPayload } from '../discriminator/prepare-payload.utility.js'; import { ApiRouteResolveDiscriminatedDto } from '../discriminator/resolve-dto.utility.js'; import { plainToInstance } from 'class-transformer'; /** * Serializes a route response using the route metadata response DTO configuration. * @template E - Entity type represented by the route metadata. * @template R - Response value type. * @param {Pick<IApiRouteMetadata<E>, "response">} metadata - Route metadata containing response serialization settings. * @param {R} response - Response value to serialize. * @returns {R} Serialized response value. */ function ApiRouteSerializeResponse(metadata, response) { if (!metadata.response?.serialization?.isEnabled || !metadata.response.type || metadata.response.status === HttpStatus.NO_CONTENT) { return response; } if (Array.isArray(metadata.response.type)) { if (!metadata.response.discriminator) { throw ErrorException("ApiRouteSerializeResponse error: response.discriminator is required when response.type is an array"); } const discriminatedResponseProperties = { discriminator: metadata.response.discriminator, type: metadata.response.type, }; const selectedDto = ApiRouteResolveDiscriminatedDto(discriminatedResponseProperties, response, "ApiRouteSerializeResponse"); return plainToInstance(selectedDto, ApiRoutePrepareDiscriminatedDtoPayload(discriminatedResponseProperties, response), { // eslint-disable-next-line @elsikora/typescript/naming-convention excludeExtraneousValues: true, strategy: "excludeAll", }); } return plainToInstance(metadata.response.type, response, { // eslint-disable-next-line @elsikora/typescript/naming-convention excludeExtraneousValues: true, strategy: "excludeAll", }); } export { ApiRouteSerializeResponse }; //# sourceMappingURL=serialize.utility.js.map