UNPKG

@yyasinaslan/easyform

Version:
134 lines 16.5 kB
import { Validators } from "@angular/forms"; export class EasyFormField { constructor(options) { /** * The type of control to be rendered */ this.controlType = ''; this.validations = {}; Object.assign(this, options); } /** * Add a required validation to the field * @param message */ required(message) { if (this.validations && this.validations["required"]) return this; if (!this.validations) this.validations = {}; this.validations["required"] = { validator: Validators.required, message }; return this; } /** * Add a requiredTrue validation to the field * @param message */ requiredTrue(message) { if (this.validations && this.validations["required"]) return this; if (!this.validations) this.validations = {}; this.validations["required"] = { validator: Validators.requiredTrue, message }; return this; } /** * Add a minLength validation to the field * @param minLength * @param message */ minLength(minLength, message) { if (this.validations && this.validations["minlength"]) return this; if (!this.validations) this.validations = {}; this.validations["minlength"] = { validator: Validators.minLength(minLength), message }; return this; } /** * Add a maxLength validation to the field * @param maxLength * @param message */ maxLength(maxLength, message) { if (this.validations && this.validations["maxlength"]) return this; if (!this.validations) this.validations = {}; this.validations["maxlength"] = { validator: Validators.maxLength(maxLength), message }; return this; } /** * Add an email validation to the field * @param message */ email(message) { if (this.validations && this.validations["email"]) return this; if (!this.validations) this.validations = {}; this.validations["email"] = { validator: Validators.email, message }; return this; } /** * Add a pattern validation to the field * @param pattern * @param message */ pattern(pattern, message) { if (this.validations && this.validations["pattern"]) return this; if (!this.validations) this.validations = {}; this.validations["pattern"] = { validator: Validators.pattern(pattern), message }; return this; } /** * Add a min validation to the field * @param min * @param message */ min(min, message) { if (this.validations && this.validations["min"]) return this; if (!this.validations) this.validations = {}; this.validations["min"] = { validator: Validators.min(min), message }; return this; } /** * Add a max validation to the field * @param max * @param message */ max(max, message) { if (this.validations && this.validations["max"]) return this; if (!this.validations) this.validations = {}; this.validations["max"] = { validator: Validators.max(max), message }; return this; } /** * Add a custom validation to the field * @param validator * @param messages */ customValidator(validator, messages) { if (!this.validations) this.validations = {}; Object.keys(messages).forEach(key => { this.validations[key] = { validator, message: messages[key] }; }); return this; } /** * Set the initial value of the field * @param value */ default(value) { this.initialValue = value; return this; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFzeS1mb3JtLWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZWFzeS1mb3JtL3NyYy9saWIvZWFzeS1mb3JtLWZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBYyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQU12RCxNQUFNLE9BQU8sYUFBYTtJQWlDeEIsWUFBWSxPQUFnQztRQXRCNUM7O1dBRUc7UUFDSCxnQkFBVyxHQUFzRCxFQUFFLENBQUM7UUFFcEUsZ0JBQVcsR0FBK0IsRUFBRSxDQUFDO1FBa0IzQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLE9BQXlCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRWpFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRTdDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUMsQ0FBQztRQUV6RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFHRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsT0FBeUI7UUFDcEMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFakUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFDLFNBQVMsRUFB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SUFBSSxDQUFDO1FBRTdELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRTdDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQztRQUVwRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLFNBQXNCLEVBQUUsUUFBMEM7UUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsS0FBZTtRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0F5QkYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Zvcm1GaWVsZEJhc2V9IGZyb20gXCIuL2ludGVyZmFjZXMvZm9ybS1maWVsZFwiO1xyXG5pbXBvcnQge0Jhc2ljQ29udHJvbFR5cGVzfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Jhc2ljLWNvbnRyb2wtdHlwZXNcIjtcclxuaW1wb3J0IHtBZHZhbmNlZENvbnRyb2xUeXBlc30gZnJvbSBcIi4vaW50ZXJmYWNlcy9hZHZhbmNlZC1jb250cm9sLXR5cGVzXCI7XHJcbmltcG9ydCB7VmFsaWRhdGlvbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy92YWxpZGF0aW9uXCI7XHJcbmltcG9ydCB7VmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge09ic2VydmFibGVTdHJpbmd9IGZyb20gXCIuL2ludGVyZmFjZXMvb2JzZXJ2YWJsZS1zdHJpbmdcIjtcclxuaW1wb3J0IHtTZWxlY3RPcHRpb25zfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3NlbGVjdC1vcHRpb25zXCI7XHJcbmltcG9ydCB7Rm9ybVNjaGVtYX0gZnJvbSBcIi4vaW50ZXJmYWNlcy9mb3JtLXNjaGVtYVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBFYXN5Rm9ybUZpZWxkPEZvcm1UeXBlID0gYW55PiBpbXBsZW1lbnRzIEZvcm1GaWVsZEJhc2U8Rm9ybVR5cGU+IHtcclxuXHJcbiAgLy8gT3B0aW9uYWwgZmllbGQgaWRcclxuICBpZD86IHN0cmluZztcclxuXHJcbiAgLy8gRmllbGQgbGFiZWxcclxuICBsYWJlbD86IE9ic2VydmFibGVTdHJpbmc7XHJcblxyXG4gIC8vIEhpbnRcclxuICBoaW50Pzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdHlwZSBvZiBjb250cm9sIHRvIGJlIHJlbmRlcmVkXHJcbiAgICovXHJcbiAgY29udHJvbFR5cGU6IHN0cmluZyB8IEJhc2ljQ29udHJvbFR5cGVzIHwgQWR2YW5jZWRDb250cm9sVHlwZXMgPSAnJztcclxuXHJcbiAgdmFsaWRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFZhbGlkYXRpb24+ID0ge307XHJcblxyXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PjtcclxuXHJcbiAgaW5pdGlhbFZhbHVlPzogRm9ybVR5cGU7XHJcblxyXG4gIG9wdGlvbnM/OiBTZWxlY3RPcHRpb25zPGFueT47XHJcblxyXG4gIC8vIHRyYW5zZm9ybWVyPzoge1xyXG4gIC8vICAgdG9Gb3JtPzogKHZhbHVlOiBSZW1vdGVUeXBlKSA9PiBGb3JtVHlwZTtcclxuICAvLyAgIGZyb21Gb3JtPzogKHZhbHVlOiBGb3JtVHlwZSkgPT4gUmVtb3RlVHlwZTtcclxuICAvLyB9XHJcblxyXG4gIC8vIENoaWxkIHNjaGVtYSBmb3IgYXJyYXkgb3IgZ3JvdXBcclxuICAvLyBzY2hlbWE/OiBFYXN5Rm9ybUZpZWxkPEZvcm1UeXBlPiB8IFJlY29yZDxrZXlvZiBGb3JtVHlwZSwgRWFzeUZvcm1GaWVsZD47XHJcbiAgc2NoZW1hPzogRWFzeUZvcm1GaWVsZDxGb3JtVHlwZT4gfCBGb3JtU2NoZW1hPEZvcm1UeXBlPjtcclxuXHJcbiAgY29uc3RydWN0b3Iob3B0aW9uczogRm9ybUZpZWxkQmFzZTxGb3JtVHlwZT4pIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIHRoZSBmaWVsZFxyXG4gICAqIEBwYXJhbSBtZXNzYWdlXHJcbiAgICovXHJcbiAgcmVxdWlyZWQobWVzc2FnZTogT2JzZXJ2YWJsZVN0cmluZykge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbnMgJiYgdGhpcy52YWxpZGF0aW9uc1tcInJlcXVpcmVkXCJdKSByZXR1cm4gdGhpc1xyXG5cclxuICAgIGlmICghdGhpcy52YWxpZGF0aW9ucykgdGhpcy52YWxpZGF0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbnNbXCJyZXF1aXJlZFwiXSA9IHt2YWxpZGF0b3I6IFZhbGlkYXRvcnMucmVxdWlyZWQsIG1lc3NhZ2V9O1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIHJlcXVpcmVkVHJ1ZSB2YWxpZGF0aW9uIHRvIHRoZSBmaWVsZFxyXG4gICAqIEBwYXJhbSBtZXNzYWdlXHJcbiAgICovXHJcbiAgcmVxdWlyZWRUcnVlKG1lc3NhZ2U6IE9ic2VydmFibGVTdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRpb25zICYmIHRoaXMudmFsaWRhdGlvbnNbXCJyZXF1aXJlZFwiXSkgcmV0dXJuIHRoaXNcclxuXHJcbiAgICBpZiAoIXRoaXMudmFsaWRhdGlvbnMpIHRoaXMudmFsaWRhdGlvbnMgPSB7fTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25zW1wicmVxdWlyZWRcIl0gPSB7dmFsaWRhdG9yOiBWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZSwgbWVzc2FnZX07XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBtaW5MZW5ndGggdmFsaWRhdGlvbiB0byB0aGUgZmllbGRcclxuICAgKiBAcGFyYW0gbWluTGVuZ3RoXHJcbiAgICogQHBhcmFtIG1lc3NhZ2VcclxuICAgKi9cclxuICBtaW5MZW5ndGgobWluTGVuZ3RoOiBudW1iZXIsIG1lc3NhZ2U6IE9ic2VydmFibGVTdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRpb25zICYmIHRoaXMudmFsaWRhdGlvbnNbXCJtaW5sZW5ndGhcIl0pIHJldHVybiB0aGlzO1xyXG5cclxuICAgIGlmICghdGhpcy52YWxpZGF0aW9ucykgdGhpcy52YWxpZGF0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbnNbXCJtaW5sZW5ndGhcIl0gPSB7dmFsaWRhdG9yOiBWYWxpZGF0b3JzLm1pbkxlbmd0aChtaW5MZW5ndGgpLCBtZXNzYWdlfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG1heExlbmd0aCB2YWxpZGF0aW9uIHRvIHRoZSBmaWVsZFxyXG4gICAqIEBwYXJhbSBtYXhMZW5ndGhcclxuICAgKiBAcGFyYW0gbWVzc2FnZVxyXG4gICAqL1xyXG4gIG1heExlbmd0aChtYXhMZW5ndGg6IG51bWJlciwgbWVzc2FnZTogT2JzZXJ2YWJsZVN0cmluZykge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbnMgJiYgdGhpcy52YWxpZGF0aW9uc1tcIm1heGxlbmd0aFwiXSkgcmV0dXJuIHRoaXM7XHJcblxyXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRpb25zKSB0aGlzLnZhbGlkYXRpb25zID0ge307XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uc1tcIm1heGxlbmd0aFwiXSA9IHt2YWxpZGF0b3I6IFZhbGlkYXRvcnMubWF4TGVuZ3RoKG1heExlbmd0aCksIG1lc3NhZ2V9O1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGFuIGVtYWlsIHZhbGlkYXRpb24gdG8gdGhlIGZpZWxkXHJcbiAgICogQHBhcmFtIG1lc3NhZ2VcclxuICAgKi9cclxuICBlbWFpbChtZXNzYWdlOiBPYnNlcnZhYmxlU3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9ucyAmJiB0aGlzLnZhbGlkYXRpb25zW1wiZW1haWxcIl0pIHJldHVybiB0aGlzO1xyXG5cclxuICAgIGlmICghdGhpcy52YWxpZGF0aW9ucykgdGhpcy52YWxpZGF0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbnNbXCJlbWFpbFwiXSA9IHt2YWxpZGF0b3I6IFZhbGlkYXRvcnMuZW1haWwsIG1lc3NhZ2V9O1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgcGF0dGVybiB2YWxpZGF0aW9uIHRvIHRoZSBmaWVsZFxyXG4gICAqIEBwYXJhbSBwYXR0ZXJuXHJcbiAgICogQHBhcmFtIG1lc3NhZ2VcclxuICAgKi9cclxuICBwYXR0ZXJuKHBhdHRlcm46IHN0cmluZyB8IFJlZ0V4cCwgbWVzc2FnZTogT2JzZXJ2YWJsZVN0cmluZykge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbnMgJiYgdGhpcy52YWxpZGF0aW9uc1tcInBhdHRlcm5cIl0pIHJldHVybiB0aGlzO1xyXG5cclxuICAgIGlmICghdGhpcy52YWxpZGF0aW9ucykgdGhpcy52YWxpZGF0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMudmFsaWRhdGlvbnNbXCJwYXR0ZXJuXCJdID0ge3ZhbGlkYXRvcjogVmFsaWRhdG9ycy5wYXR0ZXJuKHBhdHRlcm4pLCBtZXNzYWdlfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG1pbiB2YWxpZGF0aW9uIHRvIHRoZSBmaWVsZFxyXG4gICAqIEBwYXJhbSBtaW5cclxuICAgKiBAcGFyYW0gbWVzc2FnZVxyXG4gICAqL1xyXG4gIG1pbihtaW46IG51bWJlciwgbWVzc2FnZTogT2JzZXJ2YWJsZVN0cmluZykge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbnMgJiYgdGhpcy52YWxpZGF0aW9uc1tcIm1pblwiXSkgcmV0dXJuIHRoaXM7XHJcblxyXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRpb25zKSB0aGlzLnZhbGlkYXRpb25zID0ge307XHJcblxyXG4gICAgdGhpcy52YWxpZGF0aW9uc1tcIm1pblwiXSA9IHt2YWxpZGF0b3I6IFZhbGlkYXRvcnMubWluKG1pbiksIG1lc3NhZ2V9O1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgbWF4IHZhbGlkYXRpb24gdG8gdGhlIGZpZWxkXHJcbiAgICogQHBhcmFtIG1heFxyXG4gICAqIEBwYXJhbSBtZXNzYWdlXHJcbiAgICovXHJcbiAgbWF4KG1heDogbnVtYmVyLCBtZXNzYWdlOiBPYnNlcnZhYmxlU3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0aW9ucyAmJiB0aGlzLnZhbGlkYXRpb25zW1wibWF4XCJdKSByZXR1cm4gdGhpcztcclxuXHJcbiAgICBpZiAoIXRoaXMudmFsaWRhdGlvbnMpIHRoaXMudmFsaWRhdGlvbnMgPSB7fTtcclxuXHJcbiAgICB0aGlzLnZhbGlkYXRpb25zW1wibWF4XCJdID0ge3ZhbGlkYXRvcjogVmFsaWRhdG9ycy5tYXgobWF4KSwgbWVzc2FnZX07XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBjdXN0b20gdmFsaWRhdGlvbiB0byB0aGUgZmllbGRcclxuICAgKiBAcGFyYW0gdmFsaWRhdG9yXHJcbiAgICogQHBhcmFtIG1lc3NhZ2VzXHJcbiAgICovXHJcbiAgY3VzdG9tVmFsaWRhdG9yKHZhbGlkYXRvcjogVmFsaWRhdG9yRm4sIG1lc3NhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlU3RyaW5nPikge1xyXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRpb25zKSB0aGlzLnZhbGlkYXRpb25zID0ge307XHJcblxyXG4gICAgT2JqZWN0LmtleXMobWVzc2FnZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uc1trZXldID0ge3ZhbGlkYXRvciwgbWVzc2FnZTogbWVzc2FnZXNba2V5XX07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZmllbGRcclxuICAgKiBAcGFyYW0gdmFsdWVcclxuICAgKi9cclxuICBkZWZhdWx0KHZhbHVlOiBGb3JtVHlwZSkge1xyXG4gICAgdGhpcy5pbml0aWFsVmFsdWUgPSB2YWx1ZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhbnNmb3JtIHRoZSB2YWx1ZVxyXG4gICAqICEgTm90IGltcGxlbWVudGVkIHlldFxyXG4gICAqIEBwYXJhbSB0b0Zvcm1cclxuICAgKiBAbm90SW1wbGVtZW50ZWRcclxuICAgKi9cclxuICAvLyB0b0Zvcm0odG9Gb3JtOiAodmFsdWU6IFJlbW90ZVR5cGUpID0+IEZvcm1UeXBlKSB7XHJcbiAgLy8gICBpZiAoIXRoaXMudHJhbnNmb3JtZXIpIHRoaXMudHJhbnNmb3JtZXIgPSB7fTtcclxuICAvLyAgIHRoaXMudHJhbnNmb3JtZXIudG9Gb3JtID0gdG9Gb3JtO1xyXG4gIC8vICAgcmV0dXJuIHRoaXM7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFuc2Zvcm0gdGhlIHZhbHVlXHJcbiAgICogISBOb3QgaW1wbGVtZW50ZWQgeWV0XHJcbiAgICogQHBhcmFtIGZyb21Gb3JtXHJcbiAgICogQG5vdEltcGxlbWVudGVkXHJcbiAgICovXHJcbiAgLy8gZnJvbUZvcm0oZnJvbUZvcm06ICh2YWx1ZTogRm9ybVR5cGUpID0+IFJlbW90ZVR5cGUpIHtcclxuICAvLyAgIGlmICghdGhpcy50cmFuc2Zvcm1lcikgdGhpcy50cmFuc2Zvcm1lciA9IHt9O1xyXG4gIC8vICAgdGhpcy50cmFuc2Zvcm1lci5mcm9tRm9ybSA9IGZyb21Gb3JtO1xyXG4gIC8vICAgcmV0dXJuIHRoaXM7XHJcbiAgLy8gfVxyXG59XHJcbiJdfQ==