UNPKG

@formql/core

Version:

FormQL - A framework for building dynamic forms

144 lines 22.9 kB
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==