@koalarx/ui
Version:
Koala UI is a Design System developed in Angular whose objective is to facilitate and make your development faster and simpler, making this framework your greatest ally.
148 lines • 19.3 kB
JavaScript
import { DynamicFormTypeFieldEnum } from "../../enums/dynamic-form-type-field.enum";
import { koala } from "@koalarx/utils";
import { DynamicFormBuilder } from "../dynamic-form.builder";
export class FieldBase {
constructor(label, name, type, formConfig, fb, deviceService) {
this.formConfig = formConfig;
this.fb = fb;
this.deviceService = deviceService;
this.fieldConfig = {
label,
name,
type
};
this.appearance().grid();
}
hide(hide = true) {
this.fieldConfig.show = !hide;
return this;
}
focus() {
this.fieldConfig.focus = true;
return this;
}
syncValidator(validators) {
this.fieldConfig.syncValidators = validators;
return this;
}
asyncValidator(validators) {
this.fieldConfig.asyncValidators = validators;
return this;
}
disabled(disabled = true) {
this.fieldConfig.disabled = disabled;
return this;
}
required(required = true) {
this.fieldConfig.required = required;
return this;
}
textHint(hint) {
this.fieldConfig.textHint = hint;
return this;
}
min(min) {
this.fieldConfig.min = min;
return this;
}
max(max) {
this.fieldConfig.max = max;
return this;
}
minLength(min) {
this.fieldConfig.minLength = min;
return this;
}
maxLength(max) {
this.fieldConfig.maxLength = max;
return this;
}
multiple(multiple = true) {
this.fieldConfig.multiple = multiple;
return this;
}
valueChanges(fn) {
this.fieldConfig.valueChanges = fn;
return this;
}
setValue(value) {
this.fieldConfig.value = value;
return this;
}
appearance(type = "outline", floatLabel = "always") {
this.fieldConfig.appearance = type;
this.fieldConfig.floatLabel = floatLabel;
return this;
}
grid(size = 12, width = 100) {
if (this.deviceService.isMobile()) {
size = 12;
}
for (let colSize = 12; colSize >= 1; colSize--) {
this.fieldConfig.class = this.fieldConfig.class?.replace('col-' + colSize, '');
}
this.addClass('col-' + size);
this.addFieldClass('w-' + width);
return this;
}
setOptions(options) {
this.fieldConfig.opcoesSelect = options;
return this;
}
addClass(className) {
if (this.deviceService.isMobile() &&
className.indexOf('col-') >= 0 &&
className.indexOf('col-12') === 0) {
className = className.replace('col-1', 'col-12')
.replace('col-2', 'col-12')
.replace('col-3', 'col-12')
.replace('col-4', 'col-12')
.replace('col-5', 'col-12')
.replace('col-6', 'col-12')
.replace('col-7', 'col-12')
.replace('col-8', 'col-12')
.replace('col-9', 'col-12')
.replace('col-10', 'col-12')
.replace('col-11', 'col-12');
}
this.fieldConfig.class = koala(`${this.fieldConfig?.class ?? ''} ${className}`)
.string()
.split(' ')
.clearEmptyValues()
.toString(' ')
.getValue();
return this;
}
addFieldClass(className) {
this.fieldConfig.fieldClass = koala(`${this.fieldConfig?.fieldClass ?? ''} ${className}`)
.string()
.split(' ')
.clearEmptyValues()
.toString(' ')
.getValue();
return this;
}
setCustomMasc(mask, config) {
this.fieldConfig.customMasc = mask;
this.fieldConfig.customMascThousandSeparator = config?.thousandSeparator;
this.fieldConfig.customMascSuffix = config?.suffix;
this.fieldConfig.customMascPrefix = config?.prefix;
return this;
}
generate() {
let getLastConfig = (this.formConfig.formConfig.length > 0) ?
this.formConfig.formConfig[this.formConfig.formConfig.length - 1] :
null;
if (getLastConfig?.type === DynamicFormTypeFieldEnum.moreItems && getLastConfig?.name !== 'endMoreItems') {
this.formConfig.formConfig[this.formConfig.formConfig.length - 1].moreItemsConfig.formConfig.push(this.fieldConfig);
}
else {
if (getLastConfig?.name === 'endMoreItems') {
this.formConfig.formConfig.splice(this.formConfig.formConfig.length - 1, 1);
}
this.formConfig.formConfig.push(this.fieldConfig);
}
return new DynamicFormBuilder(this.fb, this.deviceService, this.formConfig.formConfig);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0vc3JjL2xpYi9keW5hbWljLWZvcm0vYnVpbGRlci9maWVsZHMvZmllbGQuYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUlwRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsTUFBTSxPQUFnQixTQUFTO0lBRzdCLFlBQ0UsS0FBYSxFQUNiLElBQVksRUFDWixJQUE4QixFQUN0QixVQUEyQyxFQUN6QyxFQUFzQixFQUN0QixhQUFvQztRQUZ0QyxlQUFVLEdBQVYsVUFBVSxDQUFpQztRQUN6QyxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBdUI7UUFFOUMsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixLQUFLO1lBQ0wsSUFBSTtZQUNKLElBQUk7U0FDTCxDQUFBO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxJQUFJLENBQUMsT0FBZ0IsSUFBSTtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLGFBQWEsQ0FBQyxVQUF5QjtRQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lB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QUFDO1NBQ3JIO2FBQU07WUFDTCxJQUFJLGFBQWEsRUFBRSxJQUFJLEtBQUssY0FBYyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM3RTtZQUVELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxPQUFPLElBQUksa0JBQWtCLENBQzNCLElBQUksQ0FBQyxFQUFFLEVBQ1AsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQzNCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLb2FsYUR5bmFtaWNGb3JtRmllbGRJbnRlcmZhY2UgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9rb2FsYS5keW5hbWljLWZvcm0tZmllbGQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEeW5hbWljRm9ybVR5cGVGaWVsZEVudW0gfSBmcm9tIFwiLi4vLi4vZW51bXMvZHluYW1pYy1mb3JtLXR5cGUtZmllbGQuZW51bVwiO1xuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUsIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZFwiO1xuaW1wb3J0IHsgQXN5bmNWYWxpZGF0b3JGbiwgVW50eXBlZEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JGbiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgS29hbGFEeW5hbWljRm9ybUNvbmZpZ0ludGVyZmFjZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2tvYWxhLmR5bmFtaWMtZm9ybS1jb25maWcuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBrb2FsYSB9IGZyb20gXCJAa29hbGFyeC91dGlsc1wiO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSBcIm5neC1kZXZpY2UtZGV0ZWN0b3JcIjtcbmltcG9ydCB7IER5bmFtaWNGb3JtQnVpbGRlciB9IGZyb20gXCIuLi9keW5hbWljLWZvcm0uYnVpbGRlclwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmllbGRCYXNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpZWxkQ29uZmlnOiBLb2FsYUR5bmFtaWNGb3JtRmllbGRJbnRlcmZhY2U7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHR5cGU6IER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bSxcbiAgICBwcml2YXRlIGZvcm1Db25maWc6IEtvYWxhRHluYW1pY0Zvcm1Db25maWdJbnRlcmZhY2UsXG4gICAgcHJvdGVjdGVkIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGRldmljZVNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnID0ge1xuICAgICAgbGFiZWwsXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH1cbiAgICB0aGlzLmFwcGVhcmFuY2UoKS5ncmlkKCk7XG4gIH1cblxuICBwdWJsaWMgaGlkZShoaWRlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuZmllbGRDb25maWcuc2hvdyA9ICFoaWRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCkge1xuICAgIHRoaXMuZmllbGRDb25maWcuZm9jdXMgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHN5bmNWYWxpZGF0b3IodmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSkge1xuICAgIHRoaXMuZmllbGRDb25maWcuc3luY1ZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jVmFsaWRhdG9yKHZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10pIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLmFzeW5jVmFsaWRhdG9ycyA9IHZhbGlkYXRvcnM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5maWVsZENvbmZpZy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuZmllbGRDb25maWcucmVxdWlyZWQgPSByZXF1aXJlZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyB0ZXh0SGludChoaW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLnRleHRIaW50ID0gaGludDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBtaW4obWluOiBudW1iZXIpIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLm1pbiA9IG1pbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBtYXgobWF4OiBudW1iZXIpIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLm1heCA9IG1heDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBtaW5MZW5ndGgobWluOiBudW1iZXIpIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLm1pbkxlbmd0aCA9IG1pbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBtYXhMZW5ndGgobWF4OiBudW1iZXIpIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLm1heExlbmd0aCA9IG1heDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBtdWx0aXBsZShtdWx0aXBsZSA9IHRydWUpIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLm11bHRpcGxlID0gbXVsdGlwbGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgdmFsdWVDaGFuZ2VzPFQ+KGZuOiAodmFsdWU6IFQpID0+IHZvaWQpIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLnZhbHVlQ2hhbmdlcyA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHNldFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLnZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXBwZWFyYW5jZSh0eXBlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gXCJvdXRsaW5lXCIsIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gXCJhbHdheXNcIikge1xuICAgIHRoaXMuZmllbGRDb25maWcuYXBwZWFyYW5jZSA9IHR5cGU7XG4gICAgdGhpcy5maWVsZENvbmZpZy5mbG9hdExhYmVsID0gZmxvYXRMYWJlbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBncmlkKHNpemU6IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOSB8IDEwIHwgMTEgfCAxMiA9IDEyLCB3aWR0aDogbnVtYmVyID0gMTAwKSB7XG4gICAgaWYgKHRoaXMuZGV2aWNlU2VydmljZS5pc01vYmlsZSgpKSB7XG4gICAgICBzaXplID0gMTI7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY29sU2l6ZSA9IDEyOyBjb2xTaXplID49IDE7IGNvbFNpemUtLSkge1xuICAgICAgdGhpcy5maWVsZENvbmZpZy5jbGFzcyA9IHRoaXMuZmllbGRDb25maWcuY2xhc3M/LnJlcGxhY2UoJ2NvbC0nICsgY29sU2l6ZSwgJycpO1xuICAgIH1cbiAgICB0aGlzLmFkZENsYXNzKCdjb2wtJyArIHNpemUpO1xuICAgIHRoaXMuYWRkRmllbGRDbGFzcygndy0nICsgd2lkdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiB7IHZhbHVlOiBhbnk7IG5hbWU6IHN0cmluZzsgfVtdKSB7XG4gICAgdGhpcy5maWVsZENvbmZpZy5vcGNvZXNTZWxlY3QgPSBvcHRpb25zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFkZENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZXZpY2VTZXJ2aWNlLmlzTW9iaWxlKCkgJiZcbiAgICAgIGNsYXNzTmFtZS5pbmRleE9mKCdjb2wtJykgPj0gMCAmJlxuICAgICAgY2xhc3NOYW1lLmluZGV4T2YoJ2NvbC0xMicpID09PSAwXG4gICAgKSB7XG4gICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSgnY29sLTEnLCAnY29sLTEyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdjb2wtMicsICdjb2wtMTInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ2NvbC0zJywgJ2NvbC0xMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnY29sLTQnLCAnY29sLTEyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdjb2wtNScsICdjb2wtMTInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ2NvbC02JywgJ2NvbC0xMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnY29sLTcnLCAnY29sLTEyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdjb2wtOCcsICdjb2wtMTInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ2NvbC05JywgJ2NvbC0xMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnY29sLTEwJywgJ2NvbC0xMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnY29sLTExJywgJ2NvbC0xMicpO1xuICAgIH1cblxuICAgIHRoaXMuZmllbGRDb25maWcuY2xhc3MgPSBrb2FsYShgJHt0aGlzLmZpZWxkQ29uZmlnPy5jbGFzcyA/PyAnJ30gJHtjbGFzc05hbWV9YClcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5jbGVhckVtcHR5VmFsdWVzKClcbiAgICAgIC50b1N0cmluZygnICcpXG4gICAgICAuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhZGRGaWVsZENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5maWVsZENvbmZpZy5maWVsZENsYXNzID0ga29hbGEoYCR7dGhpcy5maWVsZENvbmZpZz8uZmllbGRDbGFzcyA/PyAnJ30gJHtjbGFzc05hbWV9YClcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5jbGVhckVtcHR5VmFsdWVzKClcbiAgICAgIC50b1N0cmluZygnICcpXG4gICAgICAuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRDdXN0b21NYXNjKG1hc2s6IHN0cmluZywgY29uZmlnPzoge1xuICAgIHRob3VzYW5kU2VwYXJhdG9yPzogc3RyaW5nO1xuICAgIHN1ZmZpeD86IHN0cmluZztcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLmN1c3RvbU1hc2MgPSBtYXNrO1xuICAgIHRoaXMuZmllbGRDb25maWcuY3VzdG9tTWFzY1Rob3VzYW5kU2VwYXJhdG9yID0gY29uZmlnPy50aG91c2FuZFNlcGFyYXRvcjtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLmN1c3RvbU1hc2NTdWZmaXggPSBjb25maWc/LnN1ZmZpeDtcbiAgICB0aGlzLmZpZWxkQ29uZmlnLmN1c3RvbU1hc2NQcmVmaXggPSBjb25maWc/LnByZWZpeDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZSgpIHtcbiAgICBsZXQgZ2V0TGFzdENvbmZpZyA9ICh0aGlzLmZvcm1Db25maWcuZm9ybUNvbmZpZy5sZW5ndGggPiAwKSA/XG4gICAgICB0aGlzLmZvcm1Db25maWcuZm9ybUNvbmZpZ1t0aGlzLmZvcm1Db25maWcuZm9ybUNvbmZpZy5sZW5ndGggLSAxXSA6XG4gICAgICBudWxsO1xuXG4gICAgaWYgKGdldExhc3RDb25maWc/LnR5cGUgPT09IER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bS5tb3JlSXRlbXMgJiYgZ2V0TGFzdENvbmZpZz8ubmFtZSAhPT0gJ2VuZE1vcmVJdGVtcycpIHtcbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtQ29uZmlnW3RoaXMuZm9ybUNvbmZpZy5mb3JtQ29uZmlnLmxlbmd0aCAtIDFdLm1vcmVJdGVtc0NvbmZpZy5mb3JtQ29uZmlnLnB1c2godGhpcy5maWVsZENvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChnZXRMYXN0Q29uZmlnPy5uYW1lID09PSAnZW5kTW9yZUl0ZW1zJykge1xuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybUNvbmZpZy5zcGxpY2UodGhpcy5mb3JtQ29uZmlnLmZvcm1Db25maWcubGVuZ3RoIC0gMSwgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtQ29uZmlnLnB1c2godGhpcy5maWVsZENvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRHluYW1pY0Zvcm1CdWlsZGVyKFxuICAgICAgdGhpcy5mYixcbiAgICAgIHRoaXMuZGV2aWNlU2VydmljZSxcbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtQ29uZmlnXG4gICAgKTtcbiAgfVxufVxuIl19