UNPKG

@skireal/form-builder

Version:
161 lines 22.7 kB
import { __assign, __decorate, __read, __spread, __values } from "tslib"; import { Injectable } from '@angular/core'; import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { booleanFields, controlsMap, defaultValuesMap, fieldsByType } from '../constants/ui-constants'; import { BehaviorSubject } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; var UiFormService = /** @class */ (function () { function UiFormService(fb) { this.fb = fb; this.fieldsToCreate = []; this.fieldsToCreateSubject = new BehaviorSubject(this.fieldsToCreate); } UiFormService.prototype.createFormGroup = function (addedFields) { var formGroupConfig = this.generateFormGroupConfig(addedFields); return this.fb.group(formGroupConfig); }; UiFormService.prototype.generateFormGroupConfig = function (addedFields) { var e_1, _a; var formGroupConfig = {}; try { for (var addedFields_1 = __values(addedFields), addedFields_1_1 = addedFields_1.next(); !addedFields_1_1.done; addedFields_1_1 = addedFields_1.next()) { var field = addedFields_1_1.value; formGroupConfig[field.id] = this.createControlForField(field); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (addedFields_1_1 && !addedFields_1_1.done && (_a = addedFields_1.return)) _a.call(addedFields_1); } finally { if (e_1) throw e_1.error; } } return formGroupConfig; }; UiFormService.prototype.createControlForField = function (field) { if (field.isArray) { return this.createFormArray(); } else if (field.isObject && field.objectFields) { return this.createFormGroupForObject(field.objectFields); } else { return this.createControl(field.defaultValue); } }; UiFormService.prototype.createFormGroupForObject = function (objectFields) { var e_2, _a; var formGroupConfig = {}; try { for (var objectFields_1 = __values(objectFields), objectFields_1_1 = objectFields_1.next(); !objectFields_1_1.done; objectFields_1_1 = objectFields_1.next()) { var field = objectFields_1_1.value; formGroupConfig[field.id] = this.createControlForField(field); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (objectFields_1_1 && !objectFields_1_1.done && (_a = objectFields_1.return)) _a.call(objectFields_1); } finally { if (e_2) throw e_2.error; } } return this.fb.group(formGroupConfig); }; UiFormService.prototype.createControl = function (defaultValue) { if (defaultValue === void 0) { defaultValue = ''; } return this.fb.control(defaultValue); }; UiFormService.prototype.createFormArray = function () { return this.fb.array([]); }; UiFormService.prototype.addControlToFormArray = function (formArray, arrayName, nestedArrayConfig) { var newGroup = this.createGroupForArray(arrayName, nestedArrayConfig); formArray.push(newGroup); }; UiFormService.prototype.removeControlFromFormArray = function (formArray, index) { formArray.removeAt(index); }; UiFormService.prototype.createGroupForArray = function (arrayName, nestedArrayConfig) { var _this = this; var group = this.fb.group({}); var controlFields = controlsMap[arrayName] || []; if (controlFields) { controlFields.forEach(function (fieldName) { var _a; if (nestedArrayConfig && fieldName in nestedArrayConfig) { group.addControl(fieldName, nestedArrayConfig[fieldName]); } else { var defaultValue = ((_a = defaultValuesMap[arrayName]) === null || _a === void 0 ? void 0 : _a[fieldName]) || ''; group.addControl(fieldName, _this.createControl(defaultValue)); } }); } else { console.log("Invalid controlName: " + arrayName); } return group; }; UiFormService.prototype.saveFieldProperties = function (form, fieldType) { var _this = this; var _a, _b; var fieldOptions = __assign(__assign({}, form.value), { validators: (_a = form.value.validators) === null || _a === void 0 ? void 0 : _a.filter(function (validator) { return Object.values(validator).some(function (property) { return property !== ''; }); }), type: fieldType, id: this.generateUniqueId().toString(), options: (_b = form.value.options) === null || _b === void 0 ? void 0 : _b.map(function (option) { return (__assign(__assign({}, option), { id: _this.generateUniqueId().toString() })); }) }); booleanFields.forEach(function (field) { if (typeof fieldOptions[field] !== 'boolean') { fieldOptions[field] = false; } }); if (fieldType === 'nps' && form.value.comment) { var isCommentEmpty = Object.values(fieldOptions.comment || {}).every(function (value) { return value === '' || value === null || value === undefined; }); if (!isCommentEmpty) { fieldOptions.comment = __assign(__assign({}, fieldOptions.comment), { commentId: this.generateUniqueId().toString() }); } } if (fieldType === 'qe' && form.value.qeScales) { fieldOptions.qeScales = form.value.qeScales.map(function (scale) { var _a; return (__assign(__assign({}, scale), { id: _this.generateUniqueId().toString(), qeScaleChildren: (_a = scale.qeScaleChildren) === null || _a === void 0 ? void 0 : _a.map(function (child) { return (__assign(__assign({}, child), { id: _this.generateUniqueId().toString() })); }) })); }); } if (fieldType === 'likert' && form.value.rows) { fieldOptions.rows = form.value.rows.map(function (row) { return (__assign(__assign({}, row), { id: _this.generateUniqueId().toString() })); }); } return fieldOptions; }; UiFormService.prototype.generateUniqueId = function () { return Math.floor(Math.random() * 100000000).toString(); }; UiFormService.prototype.setFieldsToCreate = function (fieldType) { this.fieldsToCreate = fieldsByType[fieldType]; this.fieldsToCreateSubject.next(this.fieldsToCreate); }; UiFormService.prototype.getFieldsToCreate = function () { return this.fieldsToCreateSubject.asObservable(); }; UiFormService.prototype.getRequiredFields = function (fieldType) { var baseFields = ['title', 'analyticsTitle']; var typeSpecificFields = { select: ['options'], 'checkbox-group': ['options'], radio: ['options'], likert: ['options', 'rows'], qe: ['qeScales'] }; return __spread(baseFields, (typeSpecificFields[fieldType] || [])); }; UiFormService.ctorParameters = function () { return [ { type: FormBuilder } ]; }; UiFormService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UiFormService_Factory() { return new UiFormService(i0.ɵɵinject(i1.FormBuilder)); }, token: UiFormService, providedIn: "root" }); UiFormService = __decorate([ Injectable({ providedIn: 'root' }) ], UiFormService); return UiFormService; }()); export { UiFormService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNraXJlYWwvZm9ybS1idWlsZGVyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3VpLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFTaEYsT0FBTyxFQUVMLGFBQWEsRUFDYixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDYixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7OztBQUtuRDtJQUlFLHVCQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUgzQixtQkFBYyxHQUFnQixFQUFFLENBQUM7UUFDakMsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRWhELENBQUM7SUFFdkMsdUNBQWUsR0FBZixVQUFnQixXQUF3QjtRQUN0QyxJQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsK0NBQXVCLEdBQXZCLFVBQ0UsV0FBd0I7O1FBRXhCLElBQU0sZUFBZSxHQUF3RCxFQUFFLENBQUM7O1lBRWhGLEtBQW9CLElBQUEsZ0JBQUEsU0FBQSxXQUFXLENBQUEsd0NBQUEsaUVBQUU7Z0JBQTVCLElBQU0sS0FBSyx3QkFBQTtnQkFDZCxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzth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LFNBQXdCO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCx5Q0FBaUIsR0FBakI7UUFDRSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQseUNBQWlCLEdBQWpCLFVBQWtCLFNBQWlCO1FBQ2pDLElBQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDL0MsSUFBTSxrQkFBa0IsR0FBNkI7WUFDbkQsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ25CLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzdCLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNsQixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1lBQzNCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQztTQUNqQixDQUFDO1FBRUYsZ0JBQVcsVUFBVSxFQUFLLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7SUFDbkUsQ0FBQzs7Z0JBbEt1QixXQUFXOzs7SUFKeEIsYUFBYTtRQUh6QixVQUFVLENBQUM7WUFDVixVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDO09BQ1csYUFBYSxDQXVLekI7d0JBN0xEO0NBNkxDLEFBdktELElBdUtDO1NBdktZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgRm9ybUZpZWxkLFxuICBWYWxpZGF0b3IsXG4gIE9wdGlvbixcbiAgUWVTY2FsZSxcbiAgUWVTY2FsZUNoaWxkLFxuICBSb3dcbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tY29uc3RydWN0b3IubW9kZWwnO1xuaW1wb3J0IHtcbiAgRm9ybUZpZWxkVHlwZSxcbiAgYm9vbGVhbkZpZWxkcyxcbiAgY29udHJvbHNNYXAsXG4gIGRlZmF1bHRWYWx1ZXNNYXAsXG4gIGZpZWxkc0J5VHlwZVxufSBmcm9tICcuLi9jb25zdGFudHMvdWktY29uc3RhbnRzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVaUZvcm1TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBmaWVsZHNUb0NyZWF0ZTogRm9ybUZpZWxkW10gPSBbXTtcbiAgcHJpdmF0ZSBmaWVsZHNUb0NyZWF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1GaWVsZFtdPih0aGlzLmZpZWxkc1RvQ3JlYXRlKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge31cblxuICBjcmVhdGVGb3JtR3JvdXAoYWRkZWRGaWVsZHM6IEZvcm1GaWVsZFtdKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmb3JtR3JvdXBDb25maWcgPSB0aGlzLmdlbmVyYXRlRm9ybUdyb3VwQ29uZmlnKGFkZGVkRmllbGRzKTtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBDb25maWcpO1xuICB9XG5cbiAgZ2VuZXJhdGVGb3JtR3JvdXBDb25maWcoXG4gICAgYWRkZWRGaWVsZHM6IEZvcm1GaWVsZFtdXG4gICk6IFJlY29yZDxzdHJpbmcsIEZvcm1Hcm91cCB8IEZvcm1BcnJheSB8IEZvcm1Db250cm9sPiB7XG4gICAgY29uc3QgZm9ybUdyb3VwQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBGb3JtR3JvdXAgfCBGb3JtQXJyYXkgfCBGb3JtQ29udHJvbD4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgYWRkZWRGaWVsZHMpIHtcbiAgICAgIGZvcm1Hcm91cENvbmZpZ1tmaWVsZC5pZF0gPSB0aGlzLmNyZWF0ZUNvbnRyb2xGb3JGaWVsZChmaWVsZCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtR3JvdXBDb25maWc7XG4gIH1cblxuICBjcmVhdGVDb250cm9sRm9yRmllbGQoZmllbGQ6IEZvcm1GaWVsZCk6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSB8IEZvcm1Db250cm9sIHtcbiAgICBpZiAoZmllbGQuaXNBcnJheSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRm9ybUFycmF5KCk7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5pc09iamVjdCAmJiBmaWVsZC5vYmplY3RGaWVsZHMpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZvcm1Hcm91cEZvck9iamVjdChmaWVsZC5vYmplY3RGaWVsZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb250cm9sKGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRm9ybUdyb3VwRm9yT2JqZWN0KG9iamVjdEZpZWxkczogRm9ybUZpZWxkW10pOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZvcm1Hcm91cENvbmZpZzogUmVjb3JkPHN0cmluZywgRm9ybUdyb3VwIHwgRm9ybUFycmF5IHwgRm9ybUNvbnRyb2w+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG9iamVjdEZpZWxkcykge1xuICAgICAgZm9ybUdyb3VwQ29uZmlnW2ZpZWxkLmlkXSA9IHRoaXMuY3JlYXRlQ29udHJvbEZvckZpZWxkKGZpZWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBDb25maWcpO1xuICB9XG5cbiAgY3JlYXRlQ29udHJvbChkZWZhdWx0VmFsdWU6IHN0cmluZyA9ICcnKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2woZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIGNyZWF0ZUZvcm1BcnJheSgpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZiLmFycmF5KFtdKTtcbiAgfVxuXG4gIGFkZENvbnRyb2xUb0Zvcm1BcnJheShcbiAgICBmb3JtQXJyYXk6IEZvcm1BcnJheSxcbiAgICBhcnJheU5hbWU6IHN0cmluZyxcbiAgICBuZXN0ZWRBcnJheUNvbmZpZz86IFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwIHwgRm9ybUFycmF5IHwgc3RyaW5nPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuZXdHcm91cCA9IHRoaXMuY3JlYXRlR3JvdXBGb3JBcnJheShcbiAgICAgIGFycmF5TmFtZSxcbiAgICAgIG5lc3RlZEFycmF5Q29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwIHwgRm9ybUFycmF5IHwgc3RyaW5nPlxuICAgICk7XG4gICAgZm9ybUFycmF5LnB1c2gobmV3R3JvdXApO1xuICB9XG5cbiAgcmVtb3ZlQ29udHJvbEZyb21Gb3JtQXJyYXkoZm9ybUFycmF5OiBGb3JtQXJyYXksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICB9XG5cbiAgY3JlYXRlR3JvdXBGb3JBcnJheShcbiAgICBhcnJheU5hbWU6IHN0cmluZyxcbiAgICBuZXN0ZWRBcnJheUNvbmZpZz86IFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwIHwgRm9ybUFycmF5IHwgc3RyaW5nPlxuICApOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgY29uc3QgY29udHJvbEZpZWxkcyA9IGNvbnRyb2xzTWFwW2FycmF5TmFtZV0gfHwgW107XG4gICAgaWYgKGNvbnRyb2xGaWVsZHMpIHtcbiAgICAgIGNvbnRyb2xGaWVsZHMuZm9yRWFjaCgoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKG5lc3RlZEFycmF5Q29uZmlnICYmIGZpZWxkTmFtZSBpbiBuZXN0ZWRBcnJheUNvbmZpZykge1xuICAgICAgICAgIGdyb3VwLmFkZENvbnRyb2woZmllbGROYW1lLCBuZXN0ZWRBcnJheUNvbmZpZ1tmaWVsZE5hbWVdIGFzIEZvcm1Hcm91cCB8IEZvcm1BcnJheSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlc01hcFthcnJheU5hbWVdPy5bZmllbGROYW1lXSB8fCAnJztcbiAgICAgICAgICBncm91cC5hZGRDb250cm9sKGZpZWxkTmFtZSwgdGhpcy5jcmVhdGVDb250cm9sKGRlZmF1bHRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYEludmFsaWQgY29udHJvbE5hbWU6ICR7YXJyYXlOYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIHNhdmVGaWVsZFByb3BlcnRpZXMoZm9ybTogRm9ybUdyb3VwLCBmaWVsZFR5cGU6IHN0cmluZyk6IEZvcm1GaWVsZCB7XG4gICAgY29uc3QgZmllbGRPcHRpb25zOiBGb3JtRmllbGQgPSB7XG4gICAgICAuLi5mb3JtLnZhbHVlLFxuICAgICAgdmFsaWRhdG9yczogZm9ybS52YWx1ZS52YWxpZGF0b3JzPy5maWx0ZXIoKHZhbGlkYXRvcjogVmFsaWRhdG9yKSA9PlxuICAgICAgICBPYmplY3QudmFsdWVzKHZhbGlkYXRvcikuc29tZSgocHJvcGVydHkpID0+IHByb3BlcnR5ICE9PSAnJylcbiAgICAgICksXG4gICAgICB0eXBlOiBmaWVsZFR5cGUsXG4gICAgICBpZDogdGhpcy5nZW5lcmF0ZVVuaXF1ZUlkKCkudG9TdHJpbmcoKSxcbiAgICAgIG9wdGlvbnM6IGZvcm0udmFsdWUub3B0aW9ucz8ubWFwKChvcHRpb246IE9wdGlvbikgPT4gKHtcbiAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICBpZDogdGhpcy5nZW5lcmF0ZVVuaXF1ZUlkKCkudG9TdHJpbmcoKVxuICAgICAgfSkpXG4gICAgfTtcblxuICAgIGJvb2xlYW5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZmllbGRPcHRpb25zW2ZpZWxkXSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGZpZWxkT3B0aW9uc1tmaWVsZF0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmaWVsZFR5cGUgPT09ICducHMnICYmIGZvcm0udmFsdWUuY29tbWVudCkge1xuICAgICAgY29uc3QgaXNDb21tZW50RW1wdHkgPSBPYmplY3QudmFsdWVzKGZpZWxkT3B0aW9ucy5jb21tZW50IHx8IHt9KS5ldmVyeShcbiAgICAgICAgKHZhbHVlKSA9PiB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFpc0NvbW1lbnRFbXB0eSkge1xuICAgICAgICBmaWVsZE9wdGlvbnMuY29tbWVudCA9IHtcbiAgICAgICAgICAuLi5maWVsZE9wdGlvbnMuY29tbWVudCxcbiAgICAgICAgICBjb21tZW50SWQ6IHRoaXMuZ2VuZXJhdGVVbmlxdWVJZCgpLnRvU3RyaW5nKClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmllbGRUeXBlID09PSAncWUnICYmIGZvcm0udmFsdWUucWVTY2FsZXMpIHtcbiAgICAgIGZpZWxkT3B0aW9ucy5xZVNjYWxlcyA9IGZvcm0udmFsdWUucWVTY2FsZXMubWFwKChzY2FsZTogUWVTY2FsZSkgPT4gKHtcbiAgICAgICAgLi4uc2NhbGUsXG4gICAgICAgIGlkOiB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKS50b1N0cmluZygpLFxuICAgICAgICBxZVNjYWxlQ2hpbGRyZW46IHNjYWxlLnFlU2NhbGVDaGlsZHJlbj8ubWFwKChjaGlsZDogUWVTY2FsZUNoaWxkKSA9PiAoe1xuICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgIGlkOiB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKS50b1N0cmluZygpXG4gICAgICAgIH0pKVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZFR5cGUgPT09ICdsaWtlcnQnICYmIGZvcm0udmFsdWUucm93cykge1xuICAgICAgZmllbGRPcHRpb25zLnJvd3MgPSBmb3JtLnZhbHVlLnJvd3MubWFwKChyb3c6IFJvdykgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICBpZDogdGhpcy5nZW5lcmF0ZVVuaXF1ZUlkKCkudG9TdHJpbmcoKVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZE9wdGlvbnM7XG4gIH1cblxuICBnZW5lcmF0ZVVuaXF1ZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHNldEZpZWxkc1RvQ3JlYXRlKGZpZWxkVHlwZTogRm9ybUZpZWxkVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRzVG9DcmVhdGUgPSBmaWVsZHNCeVR5cGVbZmllbGRUeXBlXTtcbiAgICB0aGlzLmZpZWxkc1RvQ3JlYXRlU3ViamVjdC5uZXh0KHRoaXMuZmllbGRzVG9DcmVhdGUpO1xuICB9XG5cbiAgZ2V0RmllbGRzVG9DcmVhdGUoKTogT2JzZXJ2YWJsZTxGb3JtRmllbGRbXT4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkc1RvQ3JlYXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldFJlcXVpcmVkRmllbGRzKGZpZWxkVHlwZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGJhc2VGaWVsZHMgPSBbJ3RpdGxlJywgJ2FuYWx5dGljc1RpdGxlJ107XG4gICAgY29uc3QgdHlwZVNwZWNpZmljRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgICBzZWxlY3Q6IFsnb3B0aW9ucyddLFxuICAgICAgJ2NoZWNrYm94LWdyb3VwJzogWydvcHRpb25zJ10sXG4gICAgICByYWRpbzogWydvcHRpb25zJ10sXG4gICAgICBsaWtlcnQ6IFsnb3B0aW9ucycsICdyb3dzJ10sXG4gICAgICBxZTogWydxZVNjYWxlcyddXG4gICAgfTtcblxuICAgIHJldHVybiBbLi4uYmFzZUZpZWxkcywgLi4uKHR5cGVTcGVjaWZpY0ZpZWxkc1tmaWVsZFR5cGVdIHx8IFtdKV07XG4gIH1cbn1cbiJdfQ==