UNPKG

@elsikora/nestjs-crud-automator

Version:

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

47 lines (43 loc) 2.33 kB
'use strict'; var common = require('@nestjs/common'); require('@nestjs/swagger'); require('@nestjs/swagger/dist/constants.js'); var exception_utility = require('../../../error/exception.utility.js'); var preparePayload_utility = require('../discriminator/prepare-payload.utility.js'); var resolveDto_utility = require('../discriminator/resolve-dto.utility.js'); var classTransformer = require('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 === common.HttpStatus.NO_CONTENT) { return response; } if (Array.isArray(metadata.response.type)) { if (!metadata.response.discriminator) { throw exception_utility.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 = resolveDto_utility.ApiRouteResolveDiscriminatedDto(discriminatedResponseProperties, response, "ApiRouteSerializeResponse"); return classTransformer.plainToInstance(selectedDto, preparePayload_utility.ApiRoutePrepareDiscriminatedDtoPayload(discriminatedResponseProperties, response), { // eslint-disable-next-line @elsikora/typescript/naming-convention excludeExtraneousValues: true, strategy: "excludeAll", }); } return classTransformer.plainToInstance(metadata.response.type, response, { // eslint-disable-next-line @elsikora/typescript/naming-convention excludeExtraneousValues: true, strategy: "excludeAll", }); } exports.ApiRouteSerializeResponse = ApiRouteSerializeResponse; //# sourceMappingURL=serialize.utility.js.map