java-bean-validation.js
Version:
Java Bean Validation implementation for JavaScript
164 lines • 7.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("./core");
function visitTypeDescriptor(type, value, path, groups, violations, globalViolations, visitor) {
if (type.isBasicType) {
violations = globalViolations;
groups = core_1.DEFAULT_GROUPS;
}
if (visitor.startTypeVisitor) {
var visit = visitor.startTypeVisitor(type, value, path, groups, violations, globalViolations, visitor);
if (!visit) {
return;
}
}
var hasConstraintOrValidatorVisitor = visitor.startConstraintVisitor || visitor.endConstraintVisitor || visitor.startValidatorVisitor || visitor.endValidatorVisitor;
if (hasConstraintOrValidatorVisitor) {
var constraints = type.constraints;
if (constraints) {
for (var i = 0, length_1 = constraints.length; i < length_1; i++) {
var constraint = constraints[i];
visitConstraintDescriptor(constraint, value, path, groups, violations, globalViolations, visitor);
}
}
}
if (!visitor.ignoreValue && (value === null || value === undefined)) {
if (visitor.endTypeVisitor) {
visitor.endTypeVisitor(type, value, path, groups, violations, globalViolations, visitor);
}
return;
}
if (!type.isBasicType && hasConstraintOrValidatorVisitor) {
visitConstraintDescriptor({ constraintName: 'Object' }, value, path, core_1.DEFAULT_GROUPS, violations, globalViolations, visitor);
}
var properties = type.properties;
if (properties) {
for (var propertyName in properties) {
var property = properties[propertyName];
visitPropertyDescriptor(property, propertyName, value, path, groups, violations, globalViolations, visitor);
}
}
if (!type.isCollection) {
if (visitor.endTypeVisitor) {
visitor.endTypeVisitor(type, value, path, groups, violations, globalViolations, visitor);
}
return;
}
var valueDescriptor = type.valueDescriptor;
if (!valueDescriptor) {
if (visitor.endTypeVisitor) {
visitor.endTypeVisitor(type, value, path, groups, violations, globalViolations, visitor);
}
return;
}
if (Array.isArray(value)) {
for (var index = 0, length_2 = value.length; index < length_2; index++) {
visitPropertyDescriptor(valueDescriptor, index, value, path, groups, violations, globalViolations, visitor);
}
}
else {
for (var key in value) {
visitPropertyDescriptor(valueDescriptor, key, value, path, groups, violations, globalViolations, visitor);
}
}
if (visitor.endTypeVisitor) {
visitor.endTypeVisitor(type, value, path, groups, violations, globalViolations, visitor);
}
}
exports.visitTypeDescriptor = visitTypeDescriptor;
function visitPropertyDescriptor(property, propertyName, objectWithProperty, path, groups, violations, globalViolations, visitor) {
if (visitor.startPropertyVisitor) {
var visit = visitor.startPropertyVisitor(property, propertyName, objectWithProperty, path, groups, violations, globalViolations, visitor);
if (!visit) {
return;
}
}
var value;
if (objectWithProperty) {
value = objectWithProperty[propertyName];
}
var propertyPath = path + '.' + propertyName;
var type = core_1.getTypeDescriptor(property.porpertyTypeName, value, propertyPath, globalViolations);
if (!type) {
if (visitor.endPropertyVisitor) {
visitor.endPropertyVisitor(property, propertyName, objectWithProperty, path, groups, violations, globalViolations, visitor);
}
return;
}
if (type.isBasicType || (visitor.recursively && (visitor.recursivelyEvenNotCascade || property.cascade))) {
var cascadeGroups = core_1.convertGroups(groups, property.groupConversions);
visitTypeDescriptor(type, value, propertyPath, cascadeGroups, violations, globalViolations, visitor);
}
if (visitor.startConstraintVisitor || visitor.endConstraintVisitor || visitor.startValidatorVisitor || visitor.endValidatorVisitor) {
var constraints = property.constraints;
if (constraints) {
for (var i = 0, length_3 = constraints.length; i < length_3; i++) {
var constraint = constraints[i];
visitConstraintDescriptor(constraint, value, propertyPath, groups, violations, globalViolations, visitor);
}
}
}
if (visitor.endPropertyVisitor) {
visitor.endPropertyVisitor(property, propertyName, objectWithProperty, path, groups, violations, globalViolations, visitor);
}
}
exports.visitPropertyDescriptor = visitPropertyDescriptor;
function visitConstraintDescriptor(constraint, value, path, groups, violations, globalViolations, visitor) {
if (visitor.startConstraintVisitor) {
var visit = visitor.startConstraintVisitor(constraint, value, path, groups, violations, globalViolations, visitor);
if (!visit) {
return;
}
}
var validator = core_1.VALIDATORS[constraint.constraintName];
if (validator) {
if (validator.isGlobalValidator) {
violations = globalViolations;
}
if (!constraint.defaultValuesLoaded) {
core_1.loadDefaultConstraintValues(constraint, validator);
}
}
else {
if (!constraint.hasNoValidator) {
var violatedConstraint = { constraintName: 'ValidatorNotFound', attributes: { constraintName: constraint.constraintName } };
core_1.addViolation(violatedConstraint, value, path, globalViolations);
}
}
var attributes = constraint.attributes || {};
if (!(core_1.groupAllowed(groups, attributes.groups) || visitor.ignoreGroups)) {
if (visitor.endConstraintVisitor) {
visitor.endConstraintVisitor(constraint, value, path, groups, violations, globalViolations, visitor);
}
return;
}
var composingConstraints = constraint.composingConstraints;
var reportAsSingle = constraint.reportAsSingle;
if (composingConstraints) {
var innerViolations = violations;
if (reportAsSingle) {
innerViolations = [];
}
for (var i = 0, length_4 = composingConstraints.length; i < length_4; i++) {
var composedConstraint = composingConstraints[i];
visitConstraintDescriptor(composedConstraint, value, path, groups, innerViolations, globalViolations, visitor);
}
}
if (visitor.startValidatorVisitor) {
var visit = visitor.startValidatorVisitor(constraint.constraintName, validator, value, attributes, path, groups, violations, globalViolations, visitor);
if (!visit) {
if (visitor.endConstraintVisitor) {
visitor.endConstraintVisitor(constraint, value, path, groups, violations, globalViolations, visitor);
}
return;
}
}
if (visitor.endValidatorVisitor) {
visitor.endValidatorVisitor(constraint.constraintName, validator, value, attributes, path, groups, violations, globalViolations, visitor);
}
if (visitor.endConstraintVisitor) {
visitor.endConstraintVisitor(constraint, value, path, groups, violations, globalViolations, visitor);
}
}
exports.visitConstraintDescriptor = visitConstraintDescriptor;
//# sourceMappingURL=visit.js.map