UNPKG

@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
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