@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.
139 lines • 22.1 kB
JavaScript
import { DynamicFormTypeFieldEnum } from "../enums/dynamic-form-type-field.enum";
import { AutocompleteBuilder } from "./fields/autocomplete.builder";
import { BehaviorSubject } from "rxjs";
import { koala } from "@koalarx/utils";
import { FieldBuilder } from "./fields/field.builder";
import { MoreItemsBuilder } from "./fields/more-items.builder";
export class DynamicFormBuilder {
constructor(fb, deviceService, configInMemory) {
this.fb = fb;
this.deviceService = deviceService;
this.config = {
form: fb.group({}),
formConfig: configInMemory ?? [],
setValues: new BehaviorSubject(null),
showFields: new BehaviorSubject(null)
};
}
field(label, name, type) {
switch (type) {
case "id":
case "text":
case "textarea":
case "number":
case "stringNumber":
case "cnpj":
case "cpf":
case "coin":
case "color":
case "date":
case "datetime":
case "email":
case "float":
case "password":
case "percent":
case "phone":
case "time":
case "hoursAndMinutes":
case "textLogs":
case "valueList":
case "checkbox":
case "radio":
case "select":
case "selectMultipleNative":
case "month":
case "competenceDate":
case "stringWithCustomMasc":
return new FieldBuilder(label, name, DynamicFormTypeFieldEnum[type], this.config, this.fb, this.deviceService);
}
}
autocomplete(label, name) {
return new AutocompleteBuilder(label, name, this.config, this.fb, this.deviceService);
}
simpleMoreItems(label, name, btnAddLabel, min, max) {
return new MoreItemsBuilder(label, name, btnAddLabel, min, max, this.config, this.fb, this.deviceService);
}
autofill(object) {
if (object) {
const setValues = [];
Object.keys(object).forEach(indexName => {
const arrField = koala(this.config.formConfig).array().filter(indexName, 'name', { comparator: "=" }).getValue();
if (arrField.length === 1) {
const field = arrField[0] ?? null;
if (typeof object[indexName] !== "object" ||
field.type === DynamicFormTypeFieldEnum.autocomplete ||
field.type === DynamicFormTypeFieldEnum.selectMultipleNative) {
if (field.type === DynamicFormTypeFieldEnum.textLogs) {
field.textObs = object[indexName];
}
else {
setValues.push({
name: indexName,
value: object[indexName]
});
}
}
else {
if (field.type === DynamicFormTypeFieldEnum.moreItems) {
const setValuesMoreItems = [];
const objectMoreItems = object[indexName];
objectMoreItems.forEach(objectItem => {
const moreItemValues = [];
Object.keys(objectItem).forEach(objectIndexName => {
moreItemValues.push({
name: objectIndexName,
value: objectItem[objectIndexName]
});
});
setValuesMoreItems.push(new BehaviorSubject(moreItemValues));
});
field.moreItemsConfig?.setValues?.next(setValuesMoreItems);
}
else if (field.type === DynamicFormTypeFieldEnum.dynamicForm) {
const dynamicFormObject = object[indexName];
const dynamicFormSetValues = [];
Object.keys(dynamicFormObject).forEach(dynamicFormIndexName => {
const arrDynamicField = koala(field.dynamicFormConfig.formConfig).array().filter(indexName, 'name').getValue();
const dynamicField = arrDynamicField[0] ?? null;
if (dynamicField?.type === DynamicFormTypeFieldEnum.textLogs) {
dynamicField.textObs = object[indexName];
}
else {
dynamicFormSetValues.push({
name: dynamicFormIndexName,
value: dynamicFormObject[dynamicFormIndexName]
});
}
});
field.dynamicFormConfig?.setValues?.next(dynamicFormSetValues);
}
else {
this.autofill(object[indexName]);
}
}
}
});
this.config?.setValues?.next(setValues);
}
return this;
}
literalConfig(config) {
this.config.formConfig.push(config);
if (config.type === DynamicFormTypeFieldEnum.moreItems)
this.generateMoreItems();
return this;
}
generate(tabIndexStart = 0) {
this.config.formConfig = this.config.formConfig.filter(config => config.name !== 'endMoreItems');
this.config.tabIndexStart = tabIndexStart;
return this.config;
}
generateMoreItems() {
this.config.formConfig.push({
name: 'endMoreItems',
type: DynamicFormTypeFieldEnum.moreItems
});
return new DynamicFormBuilder(this.fb, this.deviceService, this.config.formConfig);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtL3NyYy9saWIvZHluYW1pYy1mb3JtL2J1aWxkZXIvZHluYW1pYy1mb3JtLmJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSS9ELE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsWUFDVSxFQUFzQixFQUN0QixhQUFvQyxFQUM1QyxjQUFpRDtRQUZ6QyxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBdUI7UUFFNUMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixVQUFVLEVBQUUsY0FBYyxJQUFJLEVBQUU7WUFDaEMsU0FBUyxFQUFFLElBQUksZUFBZSxDQUFrQyxJQUFJLENBQUM7WUFDckUsVUFBVSxFQUFFLElBQUksZUFBZSxDQUF1QyxJQUFJLENBQUM7U0FDNUUsQ0FBQTtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsS0FBYSxFQUFFLElBQVksRUFBRSxJQUEwQjtRQUNsRSxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssSUFBSSxDQUFDO1lBQ1YsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFVBQVUsQ0FBQztZQUNoQixL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SUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDRSxJQUFJLEVBQUUsY0FBYztZQUNwQixJQUFJLEVBQUUsd0JBQXdCLENBQUMsU0FBUztTQUN6QyxDQUFDLENBQUM7UUFDL0IsT0FBTyxJQUFJLGtCQUFrQixDQUMzQixJQUFJLENBQUMsRUFBRSxFQUNQLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUN2QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBLb2FsYUR5bmFtaWNGb3JtQ29uZmlnSW50ZXJmYWNlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMva29hbGEuZHluYW1pYy1mb3JtLWNvbmZpZy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IEtvYWxhRHluYW1pY0Zvcm1GaWVsZEludGVyZmFjZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2tvYWxhLmR5bmFtaWMtZm9ybS1maWVsZC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bSB9IGZyb20gXCIuLi9lbnVtcy9keW5hbWljLWZvcm0tdHlwZS1maWVsZC5lbnVtXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVCdWlsZGVyIH0gZnJvbSBcIi4vZmllbGRzL2F1dG9jb21wbGV0ZS5idWlsZGVyXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgS29hbGFEeW5hbWljU2V0VmFsdWVJbnRlcmZhY2UgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9rb2FsYS5keW5hbWljLXNldC12YWx1ZS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IEtvYWxhRHluYW1pY0Zvcm1TaG93RmllbGRJbnRlcmZhY2UgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9rb2FsYS5keW5hbWljLWZvcm0tc2hvdy1maWVsZC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGtvYWxhIH0gZnJvbSBcIkBrb2FsYXJ4L3V0aWxzXCI7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tIFwibmd4LWRldmljZS1kZXRlY3RvclwiO1xuaW1wb3J0IHsgRmllbGRCdWlsZGVyIH0gZnJvbSBcIi4vZmllbGRzL2ZpZWxkLmJ1aWxkZXJcIjtcbmltcG9ydCB7IE1vcmVJdGVtc0J1aWxkZXIgfSBmcm9tIFwiLi9maWVsZHMvbW9yZS1pdGVtcy5idWlsZGVyXCI7XG5cbmV4cG9ydCB0eXBlIER5bmFtaWNGb3JtRmllbGRUeXBlID0gJ3RleHQnIHwgJ3Bhc3N3b3JkJyB8ICdjcGYnIHwgJ2NucGonIHwgJ2RhdGV0aW1lJyB8ICdlbWFpbCcgfCAncGhvbmUnIHwgJ251bWJlcicgfCAnc3RyaW5nTnVtYmVyJyB8ICd2YWx1ZUxpc3QnIHwgJ3RleHRhcmVhJyB8ICd0aW1lJyB8ICdob3Vyc0FuZE1pbnV0ZXMnIHwgJ2NoZWNrYm94JyB8ICdzZWxlY3QnIHwgJ3NlbGVjdE11bHRpcGxlTmF0aXZlJyB8ICdjb2luJyB8ICdwZXJjZW50JyB8ICdpZCcgfCAndGV4dExvZ3MnIHwgJ2NvbG9yJyB8ICdkYXRlJyB8ICdyYWRpbycgfCAnZmxvYXQnIHwgJ21vbnRoJyB8ICdjb21wZXRlbmNlRGF0ZScgfCAnc3RyaW5nV2l0aEN1c3RvbU1hc2MnO1xuXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1CdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IEtvYWxhRHluYW1pY0Zvcm1Db25maWdJbnRlcmZhY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgIGNvbmZpZ0luTWVtb3J5PzogS29hbGFEeW5hbWljRm9ybUZpZWxkSW50ZXJmYWNlW10pIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGZvcm06IGZiLmdyb3VwKHt9KSxcbiAgICAgIGZvcm1Db25maWc6IGNvbmZpZ0luTWVtb3J5ID8/IFtdLFxuICAgICAgc2V0VmFsdWVzOiBuZXcgQmVoYXZpb3JTdWJqZWN0PEtvYWxhRHluYW1pY1NldFZhbHVlSW50ZXJmYWNlW10+KG51bGwpLFxuICAgICAgc2hvd0ZpZWxkczogbmV3IEJlaGF2aW9yU3ViamVjdDxLb2FsYUR5bmFtaWNGb3JtU2hvd0ZpZWxkSW50ZXJmYWNlW10+KG51bGwpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpZWxkKGxhYmVsOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdHlwZTogRHluYW1pY0Zvcm1GaWVsZFR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJpZFwiOlxuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgY2FzZSBcInN0cmluZ051bWJlclwiOlxuICAgICAgY2FzZSBcImNucGpcIjpcbiAgICAgIGNhc2UgXCJjcGZcIjpcbiAgICAgIGNhc2UgXCJjb2luXCI6XG4gICAgICBjYXNlIFwiY29sb3JcIjpcbiAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgIGNhc2UgXCJlbWFpbFwiOlxuICAgICAgY2FzZSBcImZsb2F0XCI6XG4gICAgICBjYXNlIFwicGFzc3dvcmRcIjpcbiAgICAgIGNhc2UgXCJwZXJjZW50XCI6XG4gICAgICBjYXNlIFwicGhvbmVcIjpcbiAgICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICBjYXNlIFwiaG91cnNBbmRNaW51dGVzXCI6XG4gICAgICBjYXNlIFwidGV4dExvZ3NcIjpcbiAgICAgIGNhc2UgXCJ2YWx1ZUxpc3RcIjpcbiAgICAgIGNhc2UgXCJjaGVja2JveFwiOlxuICAgICAgY2FzZSBcInJhZGlvXCI6XG4gICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICBjYXNlIFwic2VsZWN0TXVsdGlwbGVOYXRpdmVcIjpcbiAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgY2FzZSBcImNvbXBldGVuY2VEYXRlXCI6XG4gICAgICBjYXNlIFwic3RyaW5nV2l0aEN1c3RvbU1hc2NcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZEJ1aWxkZXIobGFiZWwsIG5hbWUsIER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bVt0eXBlXSwgdGhpcy5jb25maWcsIHRoaXMuZmIsIHRoaXMuZGV2aWNlU2VydmljZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGF1dG9jb21wbGV0ZShsYWJlbDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEF1dG9jb21wbGV0ZUJ1aWxkZXIobGFiZWwsIG5hbWUsIHRoaXMuY29uZmlnLCB0aGlzLmZiLCB0aGlzLmRldmljZVNlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIHNpbXBsZU1vcmVJdGVtcyhsYWJlbDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGJ0bkFkZExhYmVsOiBzdHJpbmcsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgTW9yZUl0ZW1zQnVpbGRlcihcbiAgICAgIGxhYmVsLFxuICAgICAgbmFtZSxcbiAgICAgIGJ0bkFkZExhYmVsLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICAgdGhpcy5jb25maWcsXG4gICAgICB0aGlzLmZiLFxuICAgICAgdGhpcy5kZXZpY2VTZXJ2aWNlXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhdXRvZmlsbChvYmplY3Q6IGFueSkge1xuICAgIGlmIChvYmplY3QpIHtcbiAgICAgIGNvbnN0IHNldFZhbHVlczogS29hbGFEeW5hbWljU2V0VmFsdWVJbnRlcmZhY2VbXSA9IFtdO1xuICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGluZGV4TmFtZSA9PiB7XG5cbiAgICAgICAgY29uc3QgYXJyRmllbGQgPSBrb2FsYSh0aGlzLmNvbmZpZy5mb3JtQ29uZmlnKS5hcnJheTxLb2FsYUR5bmFtaWNGb3JtRmllbGRJbnRlcmZhY2U+KCkuZmlsdGVyKGluZGV4TmFtZSwgJ25hbWUnLCB7Y29tcGFyYXRvcjogXCI9XCJ9KS5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoYXJyRmllbGQubGVuZ3RoID09PSAxKSB7XG5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGFyckZpZWxkWzBdID8/IG51bGw7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2Ygb2JqZWN0W2luZGV4TmFtZV0gIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPT09IER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bS5hdXRvY29tcGxldGUgfHxcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPT09IER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bS5zZWxlY3RNdWx0aXBsZU5hdGl2ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bS50ZXh0TG9ncykge1xuICAgICAgICAgICAgICBmaWVsZC50ZXh0T2JzID0gb2JqZWN0W2luZGV4TmFtZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogaW5kZXhOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBvYmplY3RbaW5kZXhOYW1lXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bS5tb3JlSXRlbXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2V0VmFsdWVzTW9yZUl0ZW1zID0gW107XG4gICAgICAgICAgICAgIGNvbnN0IG9iamVjdE1vcmVJdGVtcyA9IG9iamVjdFtpbmRleE5hbWVdIGFzIGFueVtdO1xuICAgICAgICAgICAgICBvYmplY3RNb3JlSXRlbXMuZm9yRWFjaChvYmplY3RJdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3JlSXRlbVZhbHVlczogS29hbGFEeW5hbWljU2V0VmFsdWVJbnRlcmZhY2VbXSA9IFtdO1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9iamVjdEl0ZW0pLmZvckVhY2gob2JqZWN0SW5kZXhOYW1lID0+IHtcbiAgICAgICAgICAgICAgICAgIG1vcmVJdGVtVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBvYmplY3RJbmRleE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvYmplY3RJdGVtW29iamVjdEluZGV4TmFtZV1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlc01vcmVJdGVtcy5wdXNoKG5ldyBCZWhhdmlvclN1YmplY3Q8S29hbGFEeW5hbWljU2V0VmFsdWVJbnRlcmZhY2VbXT4obW9yZUl0ZW1WYWx1ZXMpKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZmllbGQubW9yZUl0ZW1zQ29uZmlnPy5zZXRWYWx1ZXM/Lm5leHQoc2V0VmFsdWVzTW9yZUl0ZW1zKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRHluYW1pY0Zvcm1UeXBlRmllbGRFbnVtLmR5bmFtaWNGb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNGb3JtT2JqZWN0ID0gb2JqZWN0W2luZGV4TmFtZV07XG4gICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNGb3JtU2V0VmFsdWVzOiBLb2FsYUR5bmFtaWNTZXRWYWx1ZUludGVyZmFjZVtdID0gW107XG5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZHluYW1pY0Zvcm1PYmplY3QpLmZvckVhY2goZHluYW1pY0Zvcm1JbmRleE5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyckR5bmFtaWNGaWVsZCA9IGtvYWxhKGZpZWxkLmR5bmFtaWNGb3JtQ29uZmlnLmZvcm1Db25maWcpLmFycmF5PEtvYWxhRHluYW1pY0Zvcm1GaWVsZEludGVyZmFjZT4oKS5maWx0ZXIoaW5kZXhOYW1lLCAnbmFtZScpLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZHluYW1pY0ZpZWxkID0gYXJyRHluYW1pY0ZpZWxkWzBdID8/IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAoZHluYW1pY0ZpZWxkPy50eXBlID09PSBEeW5hbWljRm9ybVR5cGVGaWVsZEVudW0udGV4dExvZ3MpIHtcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWNGaWVsZC50ZXh0T2JzID0gb2JqZWN0W2luZGV4TmFtZV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWNGb3JtU2V0VmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBkeW5hbWljRm9ybUluZGV4TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGR5bmFtaWNGb3JtT2JqZWN0W2R5bmFtaWNGb3JtSW5kZXhOYW1lXVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBmaWVsZC5keW5hbWljRm9ybUNvbmZpZz8uc2V0VmFsdWVzPy5uZXh0KGR5bmFtaWNGb3JtU2V0VmFsdWVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2ZpbGwob2JqZWN0W2luZGV4TmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbmZpZz8uc2V0VmFsdWVzPy5uZXh0KHNldFZhbHVlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgbGl0ZXJhbENvbmZpZyhjb25maWc6IEtvYWxhRHluYW1pY0Zvcm1GaWVsZEludGVyZmFjZSkge1xuICAgIHRoaXMuY29uZmlnLmZvcm1Db25maWcucHVzaChjb25maWcpO1xuICAgIGlmIChjb25maWcudHlwZSA9PT0gRHluYW1pY0Zvcm1UeXBlRmllbGRFbnVtLm1vcmVJdGVtcykgdGhpcy5nZW5lcmF0ZU1vcmVJdGVtcygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlKHRhYkluZGV4U3RhcnQgPSAwKSB7XG4gICAgdGhpcy5jb25maWcuZm9ybUNvbmZpZyA9IHRoaXMuY29uZmlnLmZvcm1Db25maWcuZmlsdGVyKGNvbmZpZyA9PiBjb25maWcubmFtZSAhPT0gJ2VuZE1vcmVJdGVtcycpO1xuICAgIHRoaXMuY29uZmlnLnRhYkluZGV4U3RhcnQgPSB0YWJJbmRleFN0YXJ0O1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZU1vcmVJdGVtcygpIHtcbiAgICB0aGlzLmNvbmZpZy5mb3JtQ29uZmlnLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdlbmRNb3JlSXRlbXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IER5bmFtaWNGb3JtVHlwZUZpZWxkRW51bS5tb3JlSXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgcmV0dXJuIG5ldyBEeW5hbWljRm9ybUJ1aWxkZXIoXG4gICAgICB0aGlzLmZiLFxuICAgICAgdGhpcy5kZXZpY2VTZXJ2aWNlLFxuICAgICAgdGhpcy5jb25maWcuZm9ybUNvbmZpZ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==