diff options
Diffstat (limited to 'src/node_modules/class-validator/esm2015/metadata/MetadataStorage.js')
-rw-r--r-- | src/node_modules/class-validator/esm2015/metadata/MetadataStorage.js | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/node_modules/class-validator/esm2015/metadata/MetadataStorage.js b/src/node_modules/class-validator/esm2015/metadata/MetadataStorage.js new file mode 100644 index 0000000..ef1387e --- /dev/null +++ b/src/node_modules/class-validator/esm2015/metadata/MetadataStorage.js @@ -0,0 +1,109 @@ +import { ValidationSchemaToMetadataTransformer } from "../validation-schema/ValidationSchemaToMetadataTransformer"; +/** + * Gets metadata storage. + * Metadata storage follows the best practices and stores metadata in a global variable. + */ +export function getMetadataStorage() { + if (typeof window !== "undefined") { + window.global = window; + } + if (!global.classValidatorMetadataStorage) + global.classValidatorMetadataStorage = new MetadataStorage(); + return global.classValidatorMetadataStorage; +} +/** + * Storage all metadatas. + */ +export class MetadataStorage { + constructor() { + // ------------------------------------------------------------------------- + // Private properties + // ------------------------------------------------------------------------- + this.validationMetadatas = []; + this.constraintMetadatas = []; + } + get hasValidationMetaData() { + return !!this.validationMetadatas.length; + } + // ------------------------------------------------------------------------- + // Public Methods + // ------------------------------------------------------------------------- + /** + * Adds a new validation metadata. + */ + addValidationSchema(schema) { + const validationMetadatas = new ValidationSchemaToMetadataTransformer().transform(schema); + validationMetadatas.forEach(validationMetadata => this.addValidationMetadata(validationMetadata)); + } + /** + * Adds a new validation metadata. + */ + addValidationMetadata(metadata) { + this.validationMetadatas.push(metadata); + } + /** + * Adds a new constraint metadata. + */ + addConstraintMetadata(metadata) { + this.constraintMetadatas.push(metadata); + } + /** + * Groups metadata by their property names. + */ + groupByPropertyName(metadata) { + const grouped = {}; + metadata.forEach(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. + */ + getTargetValidationMetadatas(targetConstructor, targetSchema, groups) { + // get directly related to a target metadatas + const originalMetadatas = this.validationMetadatas.filter(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(group => groups.indexOf(group) !== -1); + return true; + }); + // get metadatas for inherited classes + const inheritedMetadatas = this.validationMetadatas.filter(metadata => { + // if target is a string it's means we validate agains a schema, and there is no inheritance support for schemas + if (typeof metadata.target === "string") + return false; + 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(group => groups.indexOf(group) !== -1); + return true; + }); + // filter out duplicate metadatas, prefer original metadatas instead of inherited metadatas + const uniqueInheritedMetadatas = inheritedMetadatas.filter(inheritedMetadata => { + return !originalMetadatas.find(originalMetadata => { + return originalMetadata.propertyName === inheritedMetadata.propertyName && + originalMetadata.type === inheritedMetadata.type; + }); + }); + return originalMetadatas.concat(uniqueInheritedMetadatas); + } + /** + * Gets all validator constraints for the given object. + */ + getTargetValidatorConstraints(target) { + return this.constraintMetadatas.filter(metadata => metadata.target === target); + } +} + +//# sourceMappingURL=MetadataStorage.js.map |