@jsbailey/reactive-form-validators
Version:
[](https://badge.fury.io/js/%40rxweb%2Freactive-form-validators) [](https://gitter.im/rxweb-project/rxweb?utm_source=badge
169 lines (168 loc) • 19.1 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 var defaultContainer = new (/** @class */ (function () {
function class_1() {
this.instances = [];
}
/**
* @template T
* @param {?} instanceFunc
* @return {?}
*/
class_1.prototype.get = /**
* @template T
* @param {?} instanceFunc
* @return {?}
*/
function (instanceFunc) {
/** @type {?} */
var instance = this.instances.filter(function (instance) { return instance.instance === instanceFunc; })[0];
return instance;
};
/**
* @param {?} instanceFunc
* @return {?}
*/
class_1.prototype.addInstanceContainer = /**
* @param {?} instanceFunc
* @return {?}
*/
function (instanceFunc) {
/** @type {?} */
var instanceContainer = {
instance: instanceFunc,
propertyAnnotations: [],
properties: []
};
this.instances.push(instanceContainer);
return instanceContainer;
};
/**
* @param {?} instanceFunc
* @param {?} propertyInfo
* @return {?}
*/
class_1.prototype.addProperty = /**
* @param {?} instanceFunc
* @param {?} propertyInfo
* @return {?}
*/
function (instanceFunc, propertyInfo) {
/** @type {?} */
var instance = this.instances.filter(function (instance) { return instance.instance === instanceFunc; })[0];
if (instance) {
this.addPropertyInfo(instance, propertyInfo);
}
else {
instance = this.addInstanceContainer(instanceFunc);
this.addPropertyInfo(instance, propertyInfo);
}
};
/**
* @param {?} instance
* @param {?} propertyInfo
* @return {?}
*/
class_1.prototype.addPropertyInfo = /**
* @param {?} instance
* @param {?} propertyInfo
* @return {?}
*/
function (instance, propertyInfo) {
/** @type {?} */
var property = instance.properties.filter(function (t) { return t.name == propertyInfo.name; })[0];
if (!property)
instance.properties.push(propertyInfo);
};
/**
* @param {?} instanceFunc
* @param {?} decoratorConfiguration
* @return {?}
*/
class_1.prototype.addAnnotation = /**
* @param {?} instanceFunc
* @param {?} decoratorConfiguration
* @return {?}
*/
function (instanceFunc, decoratorConfiguration) {
this.addProperty(instanceFunc, { propertyType: PROPERTY, name: decoratorConfiguration.propertyName });
/** @type {?} */
var instance = this.instances.filter(function (instance) { return 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 {?} */
var 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 {?}
*/
class_1.prototype.setConditionalValueProp = /**
* @param {?} instance
* @param {?} propName
* @param {?} refPropName
* @return {?}
*/
function (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 {?}
*/
class_1.prototype.addChangeValidation = /**
* @param {?} instance
* @param {?} propertyName
* @param {?} columns
* @return {?}
*/
function (instance, propertyName, columns) {
if (instance) {
if (!instance.conditionalValidationProps)
instance.conditionalValidationProps = {};
columns.forEach(function (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);
}
}
});
}
};
return class_1;
}()))();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bqc2JhaWxleS9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvIiwic291cmNlcyI6WyJjb3JlL2RlZmF1bHRDb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRXBDLFdBQWEsZ0JBQWdCLEdBT3JCLElBQUk7SUFBQzt5QkFDb0MsRUFBRTtLQW1GOUM7Ozs7OztJQWpGRyxxQkFBRzs7Ozs7SUFBSCxVQUFPLFlBQWlCOztRQUNwQixJQUFJLFFBQVEsR0FBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBQSxRQUFRLElBQUksT0FBQSxRQUFRLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBbEMsQ0FBa0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNHLE1BQU0sQ0FBQyxRQUFRLENBQUM7S0FDbkI7Ozs7O0lBRUQsc0NBQW9COzs7O0lBQXBCLFVBQXFCLFlBQWlCOztRQUNsQyxJQUFJLGlCQUFpQixHQUFzQjtZQUN2QyxRQUFRLEVBQUUsWUFBWTtZQUN0QixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUE7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztLQUM1Qjs7Ozs7O0lBR0QsNkJBQVc7Ozs7O0lBQVgsVUFBWSxZQUFpQixFQUFFLFlBQTBCOztRQUNyRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFBLFFBQVEsSUFBSSxPQUFBLFFBQVEsQ0FBQyxRQUFRLEtBQUssWUFBWSxFQUFsQyxDQUFrQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLENBQUM7WUFDRixRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2hEO0tBQ0o7Ozs7OztJQUVELGlDQUFlOzs7OztJQUFmLFVBQWdCLFFBQTJCLEVBQUUsWUFBMEI7O1FBQ25FLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxFQUEzQixDQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDOUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDVixRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUM5Qzs7Ozs7O0lBRUQsK0JBQWE7Ozs7O0lBQWIsVUFBYyxZQUFpQixFQUFFLHNCQUE4QztRQUMzRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7O1FBQ3RHLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQUEsUUFBUSxJQUFJLE9BQUEsUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLEVBQWxDLENBQWtDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDVCxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLENBQUM7WUFDRixRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25ELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUM3RDtRQUNELEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDOztZQUN2RixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDcEY7UUFDRCxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksc0JBQXNCLENBQUMsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxJQUFJLGVBQWUsV0FBUSxJQUFJLHNCQUFzQixDQUFDLGNBQWMsSUFBSSxlQUFlLGVBQVksSUFBSSxzQkFBc0IsQ0FBQyxjQUFjLElBQUksZUFBZSxzQkFBbUIsSUFBSSxzQkFBc0IsQ0FBQyxjQUFjLElBQUksZUFBZSxZQUFTLElBQUksc0JBQXNCLENBQUMsY0FBYyxJQUFJLGVBQWUsbUJBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMVosSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFBO1NBQ3ZIO0tBQ0o7Ozs7Ozs7SUFFTyx5Q0FBdUI7Ozs7OztjQUFDLFFBQTJCLEVBQUUsUUFBZ0IsRUFBRSxXQUFtQjtRQUM5RixFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQztZQUNyQyxRQUFRLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO1FBQzdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RSxRQUFRLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzs7Ozs7OztJQUV4RSxxQ0FBbUI7Ozs7OztJQUFuQixVQUFvQixRQUEyQixFQUFFLFlBQW9CLEVBQUUsT0FBYztRQUNqRixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUM7Z0JBQ3JDLFFBQVEsQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7WUFFN0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7Z0JBQ2IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2pELFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN6RCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDNUUsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQzFFO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNKLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDOzRCQUNqQyxRQUFRLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO3dCQUN6QyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxDQUFDO3dCQUNuQyxRQUFRLENBQUMsc0JBQXNCLFNBQU0sQ0FBQyxDQUFDLENBQUM7cUJBQzNDO2lCQUNKO2FBQ0osQ0FBQyxDQUFBO1NBQ0w7S0FDSjtrQkEvRlQ7Q0FnR0ssQUFwRlEsSUFvRlAsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjb3JhdG9yQ29uZmlndXJhdGlvbiwgSW5zdGFuY2VDb250YWluZXIsIFByb3BlcnR5SW5mbyB9IGZyb20gJy4vdmFsaWRhdG9yLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IExpbnEgfSBmcm9tIFwiLi4vdXRpbC9saW5xXCI7XHJcbmltcG9ydCB7IEFubm90YXRpb25UeXBlcyB9IGZyb20gXCIuL3ZhbGlkYXRvci5zdGF0aWNcIjtcclxuaW1wb3J0IHsgUFJPUEVSVFkgfSBmcm9tIFwiLi4vY29uc3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29udGFpbmVyOlxyXG4gICAge1xyXG4gICAgICAgIGdldDxUPihpbnN0YW5jZUZ1bmM6IGFueSk6IEluc3RhbmNlQ29udGFpbmVyLFxyXG4gICAgICAgIGFkZEFubm90YXRpb24oaW5zdGFuY2VGdW5jOiBhbnksIGRlY29yYXRvckNvbmZpZ3VyYXRpb246IERlY29yYXRvckNvbmZpZ3VyYXRpb24pOiB2b2lkLFxyXG4gICAgICAgIGFkZEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYzogYW55KTogdm9pZFxyXG4gICAgICAgIGFkZFByb3BlcnR5KGluc3RhbmNlRnVuYzogYW55LCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyk6IHZvaWRcclxuICAgICAgICBhZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IGFueVtdKTp2b2lkXHJcbiAgICB9ID0gbmV3IChjbGFzcyB7XHJcbiAgICAgICAgcHJpdmF0ZSBpbnN0YW5jZXM6IEluc3RhbmNlQ29udGFpbmVyW10gPSBbXTtcclxuXHJcbiAgICAgICAgZ2V0PFQ+KGluc3RhbmNlRnVuYzogYW55KTogSW5zdGFuY2VDb250YWluZXIge1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2U6IEluc3RhbmNlQ29udGFpbmVyID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmM6IGFueSk6IEluc3RhbmNlQ29udGFpbmVyIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciA9IHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZUZ1bmMsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFubm90YXRpb25zOiBbXSxcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZUNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZUNvbnRhaW5lcjtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBhZGRQcm9wZXJ0eShpbnN0YW5jZUZ1bmM6IGFueSwgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8pOiB2b2lkIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHlJbmZvKGluc3RhbmNlLCBwcm9wZXJ0eUluZm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmFkZEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFByb3BlcnR5SW5mbyhpbnN0YW5jZSwgcHJvcGVydHlJbmZvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkUHJvcGVydHlJbmZvKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8pIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gaW5zdGFuY2UucHJvcGVydGllcy5maWx0ZXIodCA9PiB0Lm5hbWUgPT0gcHJvcGVydHlJbmZvLm5hbWUpWzBdXHJcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkpXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFkZEFubm90YXRpb24oaW5zdGFuY2VGdW5jOiBhbnksIGRlY29yYXRvckNvbmZpZ3VyYXRpb246IERlY29yYXRvckNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShpbnN0YW5jZUZ1bmMsIHsgcHJvcGVydHlUeXBlOiBQUk9QRVJUWSwgbmFtZTogZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5wcm9wZXJ0eU5hbWUgfSk7XHJcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmZpbHRlcihpbnN0YW5jZSA9PiBpbnN0YW5jZS5pbnN0YW5jZSA9PT0gaW5zdGFuY2VGdW5jKVswXTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydHlBbm5vdGF0aW9ucy5wdXNoKGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydHlBbm5vdGF0aW9ucy5wdXNoKGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZyAmJiBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLnByb3BlcnR5TmFtZSwgY29sdW1ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnICYmIChkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5jb21wYXJlIHx8IGRlY29yYXRvckNvbmZpZ3VyYXRpb24uYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmdyZWF0ZXJUaGFuIHx8IGRlY29yYXRvckNvbmZpZ3VyYXRpb24uYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmdyZWF0ZXJUaGFuRXF1YWxUbyB8fCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5sZXNzVGhhbiB8fCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5sZXNzVGhhbkVxdWFsVG8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbmRpdGlvbmFsVmFsdWVQcm9wKGluc3RhbmNlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5maWVsZE5hbWUsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHNldENvbmRpdGlvbmFsVmFsdWVQcm9wKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcE5hbWU6IHN0cmluZywgcmVmUHJvcE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICBpZiAoIWluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKVxyXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXS5pbmRleE9mKHJlZlByb3BOYW1lKSA9PSAtMSlcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXS5wdXNoKHJlZlByb3BOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkQ2hhbmdlVmFsaWRhdGlvbihpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIHByb3BlcnR5TmFtZTogc3RyaW5nLCBjb2x1bW5zOiBhbnlbXSkgOnZvaWQge1xyXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQucHJvcE5hbWUgJiYgIXQub2JqZWN0UHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1t0LnByb3BOYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3QucHJvcE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1t0LnByb3BOYW1lXS5pbmRleE9mKHByb3BlcnR5TmFtZSkgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1t0LnByb3BOYW1lXS5wdXNoKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQucHJvcE5hbWUgJiYgdC5vYmplY3RQcm9wTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQucmVmZXJlbmNlUHJvcE5hbWUgPSBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLnB1c2godCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkoKTtcclxuIl19