@jsbailey/reactive-form-validators
Version:
[](https://badge.fury.io/js/%40rxweb%2Freactive-form-validators) [](https://gitter.im/rxweb-project/rxweb?utm_source=badge
132 lines (131 loc) • 17.9 kB
JavaScript
/**
* @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