@formql/core
Version:
FormQL - A framework for building dynamic forms
144 lines • 22.9 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Injectable } from '@angular/core';
import { FormBuilder } from '@angular/forms';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { InternalEventType } from '../models/internal-event.model';
import { ComponentResolverService } from '../services/component-resolver.service';
import { FormService } from './form.service';
import { HelperService } from './helper.service';
import * as i0 from "@angular/core";
import * as i1 from "./form.service";
import * as i2 from "./component-resolver.service";
import * as i3 from "@angular/forms";
let StoreService = class StoreService {
constructor(formService, componentResolverService, formBuilder) {
this.formService = formService;
this.componentResolverService = componentResolverService;
this.formBuilder = formBuilder;
this.data$ = new Subject();
this.formState$ = new Subject();
this.serviceDestroyed = new Subject();
}
// private formControls: FormControls;
ngOnDestroy() {
this.data$.complete();
this.data$.unsubscribe();
}
getData() {
return this.data$.asObservable();
}
getFormState() {
return this.formState$.asObservable();
}
updateComponent(component) {
this.formState = this.formService.updateComponent(component, this.formState, false);
this.data$.next(Object.assign({}, this.formState.data));
this.formState$.next(Object.assign({}, this.formState));
}
setComponent(component) {
this.formState = this.formService.updateComponent(component, this.formState, true);
// this.formControls = HelperService.resetValidators(this.formState.components, this.formControls, this.componentResolverService);
this.data$.next(Object.assign({}, this.formState.data));
this.formState$.next(Object.assign({}, this.formState));
}
getAll(formName, ids, mode) {
this.formService.getFormAndData(formName, ids).pipe(takeUntil(this.serviceDestroyed)).subscribe(response => {
this.formState = Object.assign({}, response);
this.formState.ids = ids;
this.formState.mode = mode;
this.data$.next(Object.assign({}, response.data));
this.formState$.next(this.formState);
}, error => {
this.formState$.next({
form: {
error: HelperService.formatError({
title: 'Error loading form or data',
error: error
})
}
});
});
}
saveForm() {
this.formService.saveForm(this.formState.form.formName, this.formState.form);
}
saveData() {
return this.formService.saveData(this.formState.form.dataSource, this.formState.ids, this.formState.data);
}
validateForm() {
HelperService.validateForm(this.formState.reactiveForm);
}
isFormValid() {
return this.formState.reactiveForm.valid;
}
unsubscribeAll() {
this.serviceDestroyed.next();
this.serviceDestroyed.complete();
}
reSetForm(eventType, event) {
switch (eventType) {
case InternalEventType.EditingForm:
this.populateReactiveForm();
break;
case InternalEventType.DndFormChanged:
const pageId = event.pageId;
const indexDnd = this.formState.form.pages.findIndex(p => p.pageId === pageId);
if (indexDnd >= 0)
this.formState.form.pages[indexDnd] = event;
this.populateReactiveForm();
break;
case InternalEventType.RemoveComponent:
const componentId = event.componentId;
let updateSectionId = '';
this.formState.form.pages.forEach(page => {
page.sections.forEach(section => {
const indexComponent = section.components.findIndex(c => c.componentId === componentId);
if (indexComponent >= 0) {
section.components.splice(indexComponent, 1);
updateSectionId = section.sectionId;
}
});
});
this.populateReactiveForm();
break;
case InternalEventType.RemoveSection:
const sectionId = event.sectionId;
let updatePageId = '';
this.formState.form.pages.forEach(page => {
const indexSection = page.sections.findIndex(c => c.sectionId === sectionId);
if (indexSection >= 0) {
page.sections.splice(indexSection, 1);
updatePageId = page.pageId;
}
});
this.populateReactiveForm();
break;
}
this.formState$.next(Object.assign({}, this.formState));
}
populateReactiveForm() {
if (this.formState.form.pages != null && this.formState.form.pages.length > 0) {
// get reactive structure -> formControls, pageGroup and components if it's an update
const reactiveFormStructure = HelperService.createReactiveFormStructure(this.formState.form, true, this.formState.data);
this.formState.formControls = reactiveFormStructure.formControls;
// if it's an update, refresh reactive form, set all form controls, validators
this.formState.form.pages.forEach(page => {
this.formState.reactiveForm.setControl(page.pageId, reactiveFormStructure.pageGroup[page.pageId]);
});
this.formState.form = HelperService.updateTemplates(this.formState.form);
if (reactiveFormStructure.components != null && Object.keys(reactiveFormStructure.components).length > 0)
this.formState.formControls = HelperService.resetValidators(reactiveFormStructure.components, this.formState.formControls, this.componentResolverService);
this.formState = this.formService.resolveConditions(this.formState);
}
}
};
StoreService.ɵprov = i0.ɵɵdefineInjectable({ factory: function StoreService_Factory() { return new StoreService(i0.ɵɵinject(i1.FormService), i0.ɵɵinject(i2.ComponentResolverService), i0.ɵɵinject(i3.FormBuilder)); }, token: StoreService, providedIn: "root" });
StoreService = __decorate([
Injectable({ providedIn: 'root' }),
__metadata("design:paramtypes", [FormService,
ComponentResolverService,
FormBuilder])
], StoreService);
export { StoreService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bmb3JtcWwvY29yZS8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3N0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBSWpELElBQWEsWUFBWSxHQUF6QixNQUFhLFlBQVk7SUFDdkIsWUFDVSxXQUF3QixFQUN4Qix3QkFBa0QsRUFDbEQsV0FBd0I7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUcxQixVQUFLLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUUzQixlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQWEsQ0FBQztRQUU3QixxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBTjlDLENBQUM7SUFVTCxzQ0FBc0M7SUFHdEMsV0FBVztRQUNULElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8s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TSxFQUFFLENBQUM7cUNBR1YsV0FBVztRQUNFLHdCQUF3QjtRQUNyQyxXQUFXO0dBSnZCLFlBQVksQ0F3SnhCO1NBeEpZLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tY29tcG9uZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVBhZ2UgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1wYWdlLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybVNlY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1zZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUVycm9yLCBGb3JtU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS13aW5kb3cubW9kZWwnO1xyXG5pbXBvcnQgeyBJbnRlcm5hbEV2ZW50VHlwZSB9IGZyb20gJy4uL21vZGVscy9pbnRlcm5hbC1ldmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFJlc29sdmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbXBvbmVudC1yZXNvbHZlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL2Zvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICcuL2hlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVFMTW9kZSB9IGZyb20gJy4uL21vZGVscy90eXBlLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBTdG9yZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudFJlc29sdmVyU2VydmljZTogQ29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcclxuICApIHsgfVxyXG5cclxuICBwcml2YXRlIGRhdGEkID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBwcml2YXRlIGZvcm1TdGF0ZSQgPSBuZXcgU3ViamVjdDxGb3JtU3RhdGU+KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZURlc3Ryb3llZCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZm9ybVN0YXRlOiBGb3JtU3RhdGU7XHJcblxyXG4gIC8vIHByaXZhdGUgZm9ybUNvbnRyb2xzOiBGb3JtQ29udHJvbHM7XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMuZGF0YSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldERhdGEoKTogT2JzZXJ2YWJsZTxGb3JtQ29tcG9uZW50PGFueT5bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtU3RhdGUoKTogT2JzZXJ2YWJsZTxGb3JtU3RhdGU+IHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TdGF0ZSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDb21wb25lbnQoY29tcG9uZW50OiBGb3JtQ29tcG9uZW50PGFueT4pIHtcclxuICAgIHRoaXMuZm9ybVN0YXRlID0gdGhpcy5mb3JtU2VydmljZS51cGRhdGVDb21wb25lbnQoY29tcG9uZW50LCB0aGlzLmZvcm1TdGF0ZSwgZmFsc2UpO1xyXG4gICAgdGhpcy5kYXRhJC5uZXh0KHsgLi4udGhpcy5mb3JtU3RhdGUuZGF0YSB9KTtcclxuICAgIHRoaXMuZm9ybVN0YXRlJC5uZXh0KHsgLi4udGhpcy5mb3JtU3RhdGUgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRDb21wb25lbnQoY29tcG9uZW50OiBGb3JtQ29tcG9uZW50PGFueT4pIHtcclxuICAgIHRoaXMuZm9ybVN0YXRlID0gdGhpcy5mb3JtU2VydmljZS51cGRhdGVDb21wb25lbnQoY29tcG9uZW50LCB0aGlzLmZvcm1TdGF0ZSwgdHJ1ZSk7XHJcbiAgICAvLyB0aGlzLmZvcm1Db250cm9scyA9IEhlbHBlclNlcnZpY2UucmVzZXRWYWxpZGF0b3JzKHRoaXMuZm9ybVN0YXRlLmNvbXBvbmVudHMsIHRoaXMuZm9ybUNvbnRyb2xzLCB0aGlzLmNvbXBvbmVudFJlc29sdmVyU2VydmljZSk7XHJcbiAgICB0aGlzLmRhdGEkLm5leHQoeyAuLi50aGlzLmZvcm1TdGF0ZS5kYXRhIH0pO1xyXG4gICAgdGhpcy5mb3JtU3RhdGUkLm5leHQoeyAuLi50aGlzLmZvcm1TdGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIGdldEFsbChmb3JtTmFtZTogc3RyaW5nLCBpZHM6IEFycmF5PHN0cmluZz4sIG1vZGU6IEZvcm1RTE1vZGUpIHtcclxuICAgIHRoaXMuZm9ybVNlcnZpY2UuZ2V0Rm9ybUFuZERhdGEoZm9ybU5hbWUsIGlkcykucGlwZSh0YWtlVW50aWwodGhpcy5zZXJ2aWNlRGVzdHJveWVkKSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgdGhpcy5mb3JtU3RhdGUgPSB7IC4uLnJlc3BvbnNlIH07XHJcbiAgICAgIHRoaXMuZm9ybVN0YXRlLmlkcyA9IGlkcztcclxuICAgICAgdGhpcy5mb3JtU3RhdGUubW9kZSA9IG1vZGU7XHJcbiAgICAgIHRoaXMuZGF0YSQubmV4dCh7IC4uLnJlc3BvbnNlLmRhdGEgfSk7XHJcbiAgICAgIHRoaXMuZm9ybVN0YXRlJC5uZXh0KHRoaXMuZm9ybVN0YXRlKTtcclxuICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1TdGF0ZSQubmV4dCg8Rm9ybVN0YXRlPntcclxuICAgICAgICAgIGZvcm06IHtcclxuICAgICAgICAgICAgZXJyb3I6IEhlbHBlclNlcnZpY2UuZm9ybWF0RXJyb3IoPEZvcm1FcnJvcj57XHJcbiAgICAgICAgICAgICAgdGl0bGU6ICdFcnJvciBsb2FkaW5nIGZvcm0gb3IgZGF0YScsXHJcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLnNhdmVGb3JtKHRoaXMuZm9ybVN0YXRlLmZvcm0uZm9ybU5hbWUsIHRoaXMuZm9ybVN0YXRlLmZvcm0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZURhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtU2VydmljZS5zYXZlRGF0YSh0aGlzLmZvcm1TdGF0ZS5mb3JtLmRhdGFTb3VyY2UsIHRoaXMuZm9ybVN0YXRlLmlkcywgdGhpcy5mb3JtU3RhdGUuZGF0YSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUZvcm0oKSB7XHJcbiAgICBIZWxwZXJTZXJ2aWNlLnZhbGlkYXRlRm9ybSh0aGlzLmZvcm1TdGF0ZS5yZWFjdGl2ZUZvcm0pO1xyXG4gIH1cclxuXHJcbiAgaXNGb3JtVmFsaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RhdGUucmVhY3RpdmVGb3JtLnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgdW5zdWJzY3JpYmVBbGwoKSB7XHJcbiAgICB0aGlzLnNlcnZpY2VEZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5zZXJ2aWNlRGVzdHJveWVkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICByZVNldEZvcm0oZXZlbnRUeXBlOiBJbnRlcm5hbEV2ZW50VHlwZSwgZXZlbnQ6IGFueSkge1xyXG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcclxuICAgICAgY2FzZSBJbnRlcm5hbEV2ZW50VHlwZS5FZGl0aW5nRm9ybTpcclxuICAgICAgICB0aGlzLnBvcHVsYXRlUmVhY3RpdmVGb3JtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsRXZlbnRUeXBlLkRuZEZvcm1DaGFuZ2VkOlxyXG4gICAgICAgIGNvbnN0IHBhZ2VJZCA9ICg8Rm9ybVBhZ2U+ZXZlbnQpLnBhZ2VJZDtcclxuICAgICAgICBjb25zdCBpbmRleERuZCA9IHRoaXMuZm9ybVN0YXRlLmZvcm0ucGFnZXMuZmluZEluZGV4KHAgPT4gcC5wYWdlSWQgPT09IHBhZ2VJZCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleERuZCA+PSAwKVxyXG4gICAgICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybS5wYWdlc1tpbmRleERuZF0gPSBldmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZVJlYWN0aXZlRm9ybSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEV2ZW50VHlwZS5SZW1vdmVDb21wb25lbnQ6XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSAoPEZvcm1Db21wb25lbnQ8YW55Pj5ldmVudCkuY29tcG9uZW50SWQ7XHJcbiAgICAgICAgbGV0IHVwZGF0ZVNlY3Rpb25JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybVN0YXRlLmZvcm0ucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcclxuICAgICAgICAgIHBhZ2Uuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXhDb21wb25lbnQgPSBzZWN0aW9uLmNvbXBvbmVudHMuZmluZEluZGV4KGMgPT4gYy5jb21wb25lbnRJZCA9PT0gY29tcG9uZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhDb21wb25lbnQgPj0gMCkge1xyXG4gICAgICAgICAgICAgIHNlY3Rpb24uY29tcG9uZW50cy5zcGxpY2UoaW5kZXhDb21wb25lbnQsIDEpO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZVNlY3Rpb25JZCA9IHNlY3Rpb24uc2VjdGlvbklkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlUmVhY3RpdmVGb3JtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsRXZlbnRUeXBlLlJlbW92ZVNlY3Rpb246XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbklkID0gKDxGb3JtU2VjdGlvbj5ldmVudCkuc2VjdGlvbklkO1xyXG4gICAgICAgIGxldCB1cGRhdGVQYWdlSWQgPSAnJztcclxuICAgICAgICB0aGlzLmZvcm1TdGF0ZS5mb3JtLnBhZ2VzLmZvckVhY2gocGFnZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleFNlY3Rpb24gPSBwYWdlLnNlY3Rpb25zLmZpbmRJbmRleChjID0+IGMuc2VjdGlvbklkID09PSBzZWN0aW9uSWQpO1xyXG4gICAgICAgICAgaWYgKGluZGV4U2VjdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgICAgIHBhZ2Uuc2VjdGlvbnMuc3BsaWNlKGluZGV4U2VjdGlvbiwgMSk7XHJcbiAgICAgICAgICAgIHVwZGF0ZVBhZ2VJZCA9IHBhZ2UucGFnZUlkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVSZWFjdGl2ZUZvcm0oKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybVN0YXRlJC5uZXh0KHsgLi4udGhpcy5mb3JtU3RhdGUgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvcHVsYXRlUmVhY3RpdmVGb3JtKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybVN0YXRlLmZvcm0ucGFnZXMgIT0gbnVsbCAmJiB0aGlzLmZvcm1TdGF0ZS5mb3JtLnBhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gZ2V0IHJlYWN0aXZlIHN0cnVjdHVyZSAtPiBmb3JtQ29udHJvbHMsIHBhZ2VHcm91cCBhbmQgY29tcG9uZW50cyBpZiBpdCdzIGFuIHVwZGF0ZVxyXG4gICAgICBjb25zdCByZWFjdGl2ZUZvcm1TdHJ1Y3R1cmUgPSBIZWxwZXJTZXJ2aWNlLmNyZWF0ZVJlYWN0aXZlRm9ybVN0cnVjdHVyZSh0aGlzLmZvcm1TdGF0ZS5mb3JtLCB0cnVlLCB0aGlzLmZvcm1TdGF0ZS5kYXRhKTtcclxuICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybUNvbnRyb2xzID0gcmVhY3RpdmVGb3JtU3RydWN0dXJlLmZvcm1Db250cm9scztcclxuXHJcblxyXG4gICAgICAvLyBpZiBpdCdzIGFuIHVwZGF0ZSwgcmVmcmVzaCByZWFjdGl2ZSBmb3JtLCBzZXQgYWxsIGZvcm0gY29udHJvbHMsIHZhbGlkYXRvcnNcclxuICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybS5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybVN0YXRlLnJlYWN0aXZlRm9ybS5zZXRDb250cm9sKHBhZ2UucGFnZUlkLCByZWFjdGl2ZUZvcm1TdHJ1Y3R1cmUucGFnZUdyb3VwW3BhZ2UucGFnZUlkXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZS5mb3JtID0gSGVscGVyU2VydmljZS51cGRhdGVUZW1wbGF0ZXModGhpcy5mb3JtU3RhdGUuZm9ybSk7XHJcbiAgICAgIGlmIChyZWFjdGl2ZUZvcm1TdHJ1Y3R1cmUuY29tcG9uZW50cyAhPSBudWxsICYmIE9iamVjdC5rZXlzKHJlYWN0aXZlRm9ybVN0cnVjdHVyZS5jb21wb25lbnRzKS5sZW5ndGggPiAwKVxyXG4gICAgICAgIHRoaXMuZm9ybVN0YXRlLmZvcm1Db250cm9scyA9IEhlbHBlclNlcnZpY2UucmVzZXRWYWxpZGF0b3JzKHJlYWN0aXZlRm9ybVN0cnVjdHVyZS5jb21wb25lbnRzLFxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybVN0YXRlLmZvcm1Db250cm9scywgdGhpcy5jb21wb25lbnRSZXNvbHZlclNlcnZpY2UpO1xyXG5cclxuICAgICAgdGhpcy5mb3JtU3RhdGUgPSB0aGlzLmZvcm1TZXJ2aWNlLnJlc29sdmVDb25kaXRpb25zKHRoaXMuZm9ybVN0YXRlKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==