@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
36 lines (32 loc) • 2.01 kB
JavaScript
;
var validateDtoProperties_utility = require('./validate-dto-properties.utility.js');
var exception_utility = require('../../../error/exception.utility.js');
/**
* Selects the route DTO class for a payload using the configured discriminator mapping.
* @param {TApiRouteDiscriminatedDtoProperties} properties - Route-level discriminated DTO config.
* @param {unknown} payload - Request or response payload.
* @param {string} context - Error message context.
* @returns {Type<unknown>} Selected DTO class.
*/
function ApiRouteResolveDiscriminatedDto(properties, payload, context) {
validateDtoProperties_utility.ApiRouteValidateDiscriminatedDtoProperties(properties, context);
if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
throw exception_utility.ErrorException(`${context} discriminator payload error: payload must be an object`);
}
const payloadAsRecord = payload;
const discriminatorPropertyName = properties.discriminator.propertyName;
if (!(discriminatorPropertyName in payloadAsRecord)) {
throw exception_utility.ErrorException(`${context} discriminator payload error: missing required discriminator field '${discriminatorPropertyName}'`);
}
const discriminatorValue = payloadAsRecord[discriminatorPropertyName];
if (typeof discriminatorValue !== "string" || discriminatorValue === "") {
throw exception_utility.ErrorException(`${context} discriminator payload error: invalid discriminator value '${String(discriminatorValue)}' for field '${discriminatorPropertyName}'`);
}
const dto = properties.discriminator.mapping[discriminatorValue];
if (!dto) {
throw exception_utility.ErrorException(`${context} discriminator payload error: invalid discriminator value '${discriminatorValue}' for field '${discriminatorPropertyName}'`);
}
return dto;
}
exports.ApiRouteResolveDiscriminatedDto = ApiRouteResolveDiscriminatedDto;
//# sourceMappingURL=resolve-dto.utility.js.map