UNPKG

@ts-fluentvalidation/core

Version:

Core library of @ts-fluentvalidation providing validations in a fluent syntax.

76 lines 3.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateKeyAsync = validateKeyAsync; const tslib_1 = require("tslib"); const validation_error_1 = require("../errors/validation-error"); const validations_1 = require("../types/validations"); const validation_context_1 = require("../validation-context"); const utils_1 = require("./utils"); /** * Validates the given key synchronously. * * @param model - The validation context to validate. * @param key - The key to validate. * @param keyValidations - The validations to apply. * @param keyCascadeMode - The cascade mode for the key. * @param throwOnFailures - If true, the function will throw a ValidationError if any failures occur. */ function validateKeyAsync(validationContext, key, validations, keyCascadeMode, throwOnFailures) { return tslib_1.__awaiter(this, void 0, void 0, function* () { for (const validation of validations) { // check conditions if (!validation.invokeCondition(validationContext.modelToValidate, validationContext)) { continue; } if (!(yield validation.invokeAsyncCondition(validationContext.modelToValidate, validationContext))) { continue; } const propertyValue = validationContext.modelToValidate[key]; if (validation.metadata.isEach && Array.isArray(propertyValue)) { yield validateCollectionPropertyAsync(validationContext, key, propertyValue, validation, keyCascadeMode); } else { yield validatePropertyAsync(validationContext, key, propertyValue, validation); } if (validationContext.failures.length > 0 && throwOnFailures) { throw new validation_error_1.ValidationError(validationContext.failures); } if (validationContext.failures.length > 0 && keyCascadeMode === 'Stop') { break; } } }); } function validatePropertyAsync(validationContext, key, propertyValue, validation) { return tslib_1.__awaiter(this, void 0, void 0, function* () { var _a; if ((0, validations_1.isValidatorValidation)(validation) && propertyValue != null && typeof propertyValue === 'object') { const result = yield validation.validator.validateAsync((0, validation_context_1.createValidationContext)(propertyValue, (_a = validation.metadata.propertyNameOverride) !== null && _a !== void 0 ? _a : key)); validationContext.addFailures(...result.failures); return; } if (!(yield validation(propertyValue))) { const failure = (0, utils_1.failureForValidation)(validationContext, key, propertyValue, validation); validationContext.addFailures(failure); } }); } function validateCollectionPropertyAsync(validationContext, key, propertyValue, validation, keyCascadeMode) { return tslib_1.__awaiter(this, void 0, void 0, function* () { for (const [index, item] of propertyValue.entries()) { if ((0, validations_1.isValidatorValidation)(validation) && item != null && typeof item === 'object') { const result = yield validation.validator.validateAsync((0, validation_context_1.createValidationContext)(item, `${key}[${index}]`)); validationContext.addFailures(...result.failures); continue; } if (!(yield validation(item))) { const failure = (0, utils_1.failureForValidation)(validationContext, key, item, validation, index); validationContext.addFailures(failure); } if (validationContext.failures.length > 0 && keyCascadeMode === 'Stop') { break; } } }); } //# sourceMappingURL=validate-key-async.js.map