class-validator
Version:
Class-based validation with Typescript / ES6 / ES5 using decorators or validation schemas. Supports both node.js and browser
96 lines (94 loc) • 4.23 kB
JavaScript
var ValidationSchemaToMetadataTransformer_1 = require("../validation-schema/ValidationSchemaToMetadataTransformer");
/**
* Storage all metadatas.
*/
var MetadataStorage = (function () {
function MetadataStorage() {
// -------------------------------------------------------------------------
// Private properties
// -------------------------------------------------------------------------
this.validationMetadatas = [];
this.constraintMetadatas = [];
}
// -------------------------------------------------------------------------
// Public Methods
// -------------------------------------------------------------------------
/**
* Adds a new validation metadata.
*/
MetadataStorage.prototype.addValidationSchema = function (schema) {
var _this = this;
var validationMetadatas = new ValidationSchemaToMetadataTransformer_1.ValidationSchemaToMetadataTransformer().transform(schema);
validationMetadatas.forEach(function (validationMetadata) { return _this.addValidationMetadata(validationMetadata); });
};
/**
* Adds a new validation metadata.
*/
MetadataStorage.prototype.addValidationMetadata = function (metadata) {
this.validationMetadatas.push(metadata);
};
/**
* Adds a new constraint metadata.
*/
MetadataStorage.prototype.addConstraintMetadata = function (metadata) {
this.constraintMetadatas.push(metadata);
};
/**
* Groups metadata by their property names.
*/
MetadataStorage.prototype.groupByPropertyName = function (metadata) {
var grouped = {};
metadata.forEach(function (metadata) {
if (!grouped[metadata.propertyName])
grouped[metadata.propertyName] = [];
grouped[metadata.propertyName].push(metadata);
});
return grouped;
};
/**
* Gets all validation metadatas for the given object with the given groups.
*/
MetadataStorage.prototype.getTargetValidationMetadatas = function (targetConstructor, targetSchema, groups) {
// get directly related to a target metadatas
var originalMetadatas = this.validationMetadatas.filter(function (metadata) {
if (metadata.target !== targetConstructor && metadata.target !== targetSchema)
return false;
if (metadata.always)
return true;
if (groups && groups.length > 0)
return metadata.groups && !!metadata.groups.find(function (group) { return groups.indexOf(group) !== -1; });
return true;
});
// get metadatas for inherited classes
var inheritedMetadatas = this.validationMetadatas.filter(function (metadata) {
if (metadata.target === targetConstructor)
return false;
if (metadata.target instanceof Function &&
!(targetConstructor.prototype instanceof metadata.target))
return false;
if (metadata.always)
return true;
if (groups && groups.length > 0)
return metadata.groups && !!metadata.groups.find(function (group) { return groups.indexOf(group) !== -1; });
return true;
});
// filter out duplicate metadatas, prefer original metadatas instead of inherited metadatas
var uniqueInheritedMetadatas = inheritedMetadatas.filter(function (inheritedMetadata) {
return !originalMetadatas.find(function (originalMetadata) {
return originalMetadata.propertyName === inheritedMetadata.propertyName &&
originalMetadata.type === inheritedMetadata.type;
});
});
return originalMetadatas.concat(uniqueInheritedMetadatas);
};
/**
* Gets all validator constraints for the given object.
*/
MetadataStorage.prototype.getTargetValidatorConstraints = function (target) {
return this.constraintMetadatas.filter(function (metadata) { return metadata.target === target; });
};
return MetadataStorage;
}());
exports.MetadataStorage = MetadataStorage;
//# sourceMappingURL=MetadataStorage.js.map
;