@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
34 lines (31 loc) • 1.87 kB
JavaScript
import { ApiRouteValidateDiscriminatedDtoProperties } from './validate-dto-properties.utility.js';
import { ErrorException } from '../../../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) {
ApiRouteValidateDiscriminatedDtoProperties(properties, context);
if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
throw ErrorException(`${context} discriminator payload error: payload must be an object`);
}
const payloadAsRecord = payload;
const discriminatorPropertyName = properties.discriminator.propertyName;
if (!(discriminatorPropertyName in payloadAsRecord)) {
throw ErrorException(`${context} discriminator payload error: missing required discriminator field '${discriminatorPropertyName}'`);
}
const discriminatorValue = payloadAsRecord[discriminatorPropertyName];
if (typeof discriminatorValue !== "string" || discriminatorValue === "") {
throw ErrorException(`${context} discriminator payload error: invalid discriminator value '${String(discriminatorValue)}' for field '${discriminatorPropertyName}'`);
}
const dto = properties.discriminator.mapping[discriminatorValue];
if (!dto) {
throw ErrorException(`${context} discriminator payload error: invalid discriminator value '${discriminatorValue}' for field '${discriminatorPropertyName}'`);
}
return dto;
}
export { ApiRouteResolveDiscriminatedDto };
//# sourceMappingURL=resolve-dto.utility.js.map