@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
47 lines (43 loc) • 2.33 kB
JavaScript
;
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