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