@ts-fluentvalidation/core
Version:
Core library of @ts-fluentvalidation providing validations in a fluent syntax.
76 lines • 3.89 kB
JavaScript
;
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