UNPKG

@jsbailey/reactive-form-validators

Version:

[![npm version](https://badge.fury.io/js/%40rxweb%2Freactive-form-validators.svg)](https://badge.fury.io/js/%40rxweb%2Freactive-form-validators) [![Gitter](https://badges.gitter.im/rx-web/Lobby.svg)](https://gitter.im/rxweb-project/rxweb?utm_source=badge

132 lines (131 loc) 17.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Linq } from "../util/linq"; import { AnnotationTypes } from "./validator.static"; import { PROPERTY } from "../const"; /** @type {?} */ export const defaultContainer = new (class { constructor() { this.instances = []; } /** * @template T * @param {?} instanceFunc * @return {?} */ get(instanceFunc) { /** @type {?} */ let instance = this.instances.filter(instance => instance.instance === instanceFunc)[0]; return instance; } /** * @param {?} instanceFunc * @return {?} */ addInstanceContainer(instanceFunc) { /** @type {?} */ let instanceContainer = { instance: instanceFunc, propertyAnnotations: [], properties: [] }; this.instances.push(instanceContainer); return instanceContainer; } /** * @param {?} instanceFunc * @param {?} propertyInfo * @return {?} */ addProperty(instanceFunc, propertyInfo) { /** @type {?} */ let instance = this.instances.filter(instance => instance.instance === instanceFunc)[0]; if (instance) { this.addPropertyInfo(instance, propertyInfo); } else { instance = this.addInstanceContainer(instanceFunc); this.addPropertyInfo(instance, propertyInfo); } } /** * @param {?} instance * @param {?} propertyInfo * @return {?} */ addPropertyInfo(instance, propertyInfo) { /** @type {?} */ var property = instance.properties.filter(t => t.name == propertyInfo.name)[0]; if (!property) instance.properties.push(propertyInfo); } /** * @param {?} instanceFunc * @param {?} decoratorConfiguration * @return {?} */ addAnnotation(instanceFunc, decoratorConfiguration) { this.addProperty(instanceFunc, { propertyType: PROPERTY, name: decoratorConfiguration.propertyName }); /** @type {?} */ let instance = this.instances.filter(instance => instance.instance === instanceFunc)[0]; if (instance) instance.propertyAnnotations.push(decoratorConfiguration); else { instance = this.addInstanceContainer(instanceFunc); instance.propertyAnnotations.push(decoratorConfiguration); } if (decoratorConfiguration.config && decoratorConfiguration.config.conditionalExpression) { /** @type {?} */ let columns = Linq.expressionColumns(decoratorConfiguration.config.conditionalExpression); this.addChangeValidation(instance, decoratorConfiguration.propertyName, columns); } if (instance && decoratorConfiguration.config && (decoratorConfiguration.annotationType == AnnotationTypes["compare"] || decoratorConfiguration.annotationType == AnnotationTypes["greaterThan"] || decoratorConfiguration.annotationType == AnnotationTypes["greaterThanEqualTo"] || decoratorConfiguration.annotationType == AnnotationTypes["lessThan"] || decoratorConfiguration.annotationType == AnnotationTypes["lessThanEqualTo"])) { this.setConditionalValueProp(instance, decoratorConfiguration.config.fieldName, decoratorConfiguration.propertyName); } } /** * @param {?} instance * @param {?} propName * @param {?} refPropName * @return {?} */ setConditionalValueProp(instance, propName, refPropName) { if (!instance.conditionalValidationProps) instance.conditionalValidationProps = {}; if (!instance.conditionalValidationProps[propName]) instance.conditionalValidationProps[propName] = []; if (instance.conditionalValidationProps[propName].indexOf(refPropName) == -1) instance.conditionalValidationProps[propName].push(refPropName); } /** * @param {?} instance * @param {?} propertyName * @param {?} columns * @return {?} */ addChangeValidation(instance, propertyName, columns) { if (instance) { if (!instance.conditionalValidationProps) instance.conditionalValidationProps = {}; columns.forEach(t => { if (t.propName && !t.objectPropName) { if (!instance.conditionalValidationProps[t.propName]) instance.conditionalValidationProps[t.propName] = []; if (instance.conditionalValidationProps[t.propName].indexOf(propertyName) == -1) instance.conditionalValidationProps[t.propName].push(propertyName); } else { if (t.propName && t.objectPropName) { if (!instance.conditionalObjectProps) instance.conditionalObjectProps = []; t.referencePropName = propertyName; instance.conditionalObjectProps["push"](t); } } }); } } })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bqc2JhaWxleS9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvIiwic291cmNlcyI6WyJjb3JlL2RlZmF1bHRDb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRXBDLGFBQWEsZ0JBQWdCLEdBT3JCLElBQUksQ0FBQztJQUFBO3lCQUNvQyxFQUFFO0tBbUY5Qzs7Ozs7O0lBakZHLEdBQUcsQ0FBSSxZQUFpQjs7UUFDcEIsSUFBSSxRQUFRLEdBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRyxNQUFNLENBQUMsUUFBUSxDQUFDO0tBQ25COzs7OztJQUVELG9CQUFvQixDQUFDLFlBQWlCOztRQUNsQyxJQUFJLGlCQUFpQixHQUFzQjtZQUN2QyxRQUFRLEVBQUUsWUFBWTtZQUN0QixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUE7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztLQUM1Qjs7Ozs7O0lBR0QsV0FBVyxDQUFDLFlBQWlCLEVBQUUsWUFBMEI7O1FBQ3JELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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LElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDOzRCQUNqQyxRQUFRLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO3dCQUN6QyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO3dCQUNuQyxRQUFRLENBQUMsc0JBQXNCLFNBQU0sQ0FBQyxDQUFDLENBQUM7cUJBQzNDO2lCQUNKO2FBQ0osQ0FBQyxDQUFBO1NBQ0w7S0FDSjtDQUNKLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjb3JhdG9yQ29uZmlndXJhdGlvbiwgSW5zdGFuY2VDb250YWluZXIsIFByb3BlcnR5SW5mbyB9IGZyb20gJy4vdmFsaWRhdG9yLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IExpbnEgfSBmcm9tIFwiLi4vdXRpbC9saW5xXCI7XHJcbmltcG9ydCB7IEFubm90YXRpb25UeXBlcyB9IGZyb20gXCIuL3ZhbGlkYXRvci5zdGF0aWNcIjtcclxuaW1wb3J0IHsgUFJPUEVSVFkgfSBmcm9tIFwiLi4vY29uc3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29udGFpbmVyOlxyXG4gICAge1xyXG4gICAgICAgIGdldDxUPihpbnN0YW5jZUZ1bmM6IGFueSk6IEluc3RhbmNlQ29udGFpbmVyLFxyXG4gICAgICAgIGFkZEFubm90YXRpb24oaW5zdGFuY2VGdW5jOiBhbnksIGRlY29yYXRvckNvbmZpZ3VyYXRpb246IERlY29yYXRvckNvbmZpZ3VyYXRpb24pOiB2b2lkLFxyXG4gICAgICAgIGFkZEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYzogYW55KTogdm9pZFxyXG4gICAgICAgIGFkZFByb3BlcnR5KGluc3RhbmNlRnVuYzogYW55LCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyk6IHZvaWRcclxuICAgICAgICBhZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IGFueVtdKTp2b2lkXHJcbiAgICB9ID0gbmV3IChjbGFzcyB7XHJcbiAgICAgICAgcHJpdmF0ZSBpbnN0YW5jZXM6IEluc3RhbmNlQ29udGFpbmVyW10gPSBbXTtcclxuXHJcbiAgICAgICAgZ2V0PFQ+KGluc3RhbmNlRnVuYzogYW55KTogSW5zdGFuY2VDb250YWluZXIge1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2U6IEluc3RhbmNlQ29udGFpbmVyID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmM6IGFueSk6IEluc3RhbmNlQ29udGFpbmVyIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciA9IHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZUZ1bmMsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFubm90YXRpb25zOiBbXSxcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZUNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZUNvbnRhaW5lcjtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBhZGRQcm9wZXJ0eShpbnN0YW5jZUZ1bmM6IGFueSwgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8pOiB2b2lkIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHlJbmZvKGluc3RhbmNlLCBwcm9wZXJ0eUluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmFkZEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFByb3BlcnR5SW5mbyhpbnN0YW5jZSwgcHJvcGVydHlJbmZvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkUHJvcGVydHlJbmZvKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8pIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gaW5zdGFuY2UucHJvcGVydGllcy5maWx0ZXIodCA9PiB0Lm5hbWUgPT0gcHJvcGVydHlJbmZvLm5hbWUpWzBdXHJcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZEFubm90YXRpb24oaW5zdGFuY2VGdW5jOiBhbnksIGRlY29yYXRvckNvbmZpZ3VyYXRpb246IERlY29yYXRvckNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShpbnN0YW5jZUZ1bmMsIHsgcHJvcGVydHlUeXBlOiBQUk9QRVJUWSwgbmFtZTogZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5wcm9wZXJ0eU5hbWUgfSk7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmZpbHRlcihpbnN0YW5jZSA9PiBpbnN0YW5jZS5pbnN0YW5jZSA9PT0gaW5zdGFuY2VGdW5jKVswXTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydHlBbm5vdGF0aW9ucy5wdXNoKGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydHlBbm5vdGF0aW9ucy5wdXNoKGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZyAmJiBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLnByb3BlcnR5TmFtZSwgY29sdW1ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnICYmIChkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5jb21wYXJlIHx8IGRlY29yYXRvckNvbmZpZ3VyYXRpb24uYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmdyZWF0ZXJUaGFuIHx8IGRlY29yYXRvckNvbmZpZ3VyYXRpb24uYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmdyZWF0ZXJUaGFuRXF1YWxUbyB8fCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5sZXNzVGhhbiB8fCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5sZXNzVGhhbkVxdWFsVG8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbmRpdGlvbmFsVmFsdWVQcm9wKGluc3RhbmNlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5maWVsZE5hbWUsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHNldENvbmRpdGlvbmFsVmFsdWVQcm9wKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcE5hbWU6IHN0cmluZywgcmVmUHJvcE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICBpZiAoIWluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXS5pbmRleE9mKHJlZlByb3BOYW1lKSA9PSAtMSlcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXS5wdXNoKHJlZlByb3BOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkQ2hhbmdlVmFsaWRhdGlvbihpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIHByb3BlcnR5TmFtZTogc3RyaW5nLCBjb2x1bW5zOiBhbnlbXSkgOnZvaWQge1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQucHJvcE5hbWUgJiYgIXQub2JqZWN0UHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1t0LnByb3BOYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3QucHJvcE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1t0LnByb3BOYW1lXS5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1t0LnByb3BOYW1lXS5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQucHJvcE5hbWUgJiYgdC5vYmplY3RQcm9wTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQucmVmZXJlbmNlUHJvcE5hbWUgPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLnB1c2godCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkoKTtcclxuIl19