UNPKG

@elsikora/nestjs-crud-automator

Version:

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

36 lines (32 loc) 2.01 kB
'use strict'; 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