@formql/core
Version:
FormQL - A framework for building dynamic forms
147 lines • 23.7 kB
JavaScript
import { __assign, __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";
var StoreService = /** @class */ (function () {
function StoreService(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;
StoreService.prototype.ngOnDestroy = function () {
this.data$.complete();
this.data$.unsubscribe();
};
StoreService.prototype.getData = function () {
return this.data$.asObservable();
};
StoreService.prototype.getFormState = function () {
return this.formState$.asObservable();
};
StoreService.prototype.updateComponent = function (component) {
this.formState = this.formService.updateComponent(component, this.formState, false);
this.data$.next(__assign({}, this.formState.data));
this.formState$.next(__assign({}, this.formState));
};
StoreService.prototype.setComponent = function (component) {
this.formState = this.formService.updateComponent(component, this.formState, true);
// this.formControls = HelperService.resetValidators(this.formState.components, this.formControls, this.componentResolverService);
this.data$.next(__assign({}, this.formState.data));
this.formState$.next(__assign({}, this.formState));
};
StoreService.prototype.getAll = function (formName, ids, mode) {
var _this = this;
this.formService.getFormAndData(formName, ids).pipe(takeUntil(this.serviceDestroyed)).subscribe(function (response) {
_this.formState = __assign({}, response);
_this.formState.ids = ids;
_this.formState.mode = mode;
_this.data$.next(__assign({}, response.data));
_this.formState$.next(_this.formState);
}, function (error) {
_this.formState$.next({
form: {
error: HelperService.formatError({
title: 'Error loading form or data',
error: error
})
}
});
});
};
StoreService.prototype.saveForm = function () {
this.formService.saveForm(this.formState.form.formName, this.formState.form);
};
StoreService.prototype.saveData = function () {
return this.formService.saveData(this.formState.form.dataSource, this.formState.ids, this.formState.data);
};
StoreService.prototype.validateForm = function () {
HelperService.validateForm(this.formState.reactiveForm);
};
StoreService.prototype.isFormValid = function () {
return this.formState.reactiveForm.valid;
};
StoreService.prototype.unsubscribeAll = function () {
this.serviceDestroyed.next();
this.serviceDestroyed.complete();
};
StoreService.prototype.reSetForm = function (eventType, event) {
switch (eventType) {
case InternalEventType.EditingForm:
this.populateReactiveForm();
break;
case InternalEventType.DndFormChanged:
var pageId_1 = event.pageId;
var indexDnd = this.formState.form.pages.findIndex(function (p) { return p.pageId === pageId_1; });
if (indexDnd >= 0)
this.formState.form.pages[indexDnd] = event;
this.populateReactiveForm();
break;
case InternalEventType.RemoveComponent:
var componentId_1 = event.componentId;
var updateSectionId_1 = '';
this.formState.form.pages.forEach(function (page) {
page.sections.forEach(function (section) {
var indexComponent = section.components.findIndex(function (c) { return c.componentId === componentId_1; });
if (indexComponent >= 0) {
section.components.splice(indexComponent, 1);
updateSectionId_1 = section.sectionId;
}
});
});
this.populateReactiveForm();
break;
case InternalEventType.RemoveSection:
var sectionId_1 = event.sectionId;
var updatePageId_1 = '';
this.formState.form.pages.forEach(function (page) {
var indexSection = page.sections.findIndex(function (c) { return c.sectionId === sectionId_1; });
if (indexSection >= 0) {
page.sections.splice(indexSection, 1);
updatePageId_1 = page.pageId;
}
});
this.populateReactiveForm();
break;
}
this.formState$.next(__assign({}, this.formState));
};
StoreService.prototype.populateReactiveForm = function () {
var _this = this;
if (this.formState.form.pages != null && this.formState.form.pages.length > 0) {
// get reactive structure -> formControls, pageGroup and components if it's an update
var reactiveFormStructure_1 = HelperService.createReactiveFormStructure(this.formState.form, true, this.formState.data);
this.formState.formControls = reactiveFormStructure_1.formControls;
// if it's an update, refresh reactive form, set all form controls, validators
this.formState.form.pages.forEach(function (page) {
_this.formState.reactiveForm.setControl(page.pageId, reactiveFormStructure_1.pageGroup[page.pageId]);
});
this.formState.form = HelperService.updateTemplates(this.formState.form);
if (reactiveFormStructure_1.components != null && Object.keys(reactiveFormStructure_1.components).length > 0)
this.formState.formControls = HelperService.resetValidators(reactiveFormStructure_1.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);
return StoreService;
}());
export { StoreService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bmb3JtcWwvY29yZS8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3N0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBSWpEO0lBQ0Usc0JBQ1UsV0FBd0IsRUFDeEIsd0JBQWtELEVBQ2xELFdBQXdCO1FBRnhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFHMUIsVUFBSyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFFM0IsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7UUFFN0IscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQU45QyxDQUFDO0lBVUwsc0NBQXNDO0lBR3RDLGtDQUFXLEdBQVg7UUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELDhCQUFPLEdBQVA7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELG1DQUFZLEdBQVo7UUFDRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELHNDQUFlLEdBQWYsVUFBZ0IsU0FBNkI7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksY0FBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRyxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxjQUFNLElBQUksQ0FBQyxTQUFTLEVBQUcsQ0FBQztJQUM5QyxDQUFDO0lBRUQsbUNBQVksR0FBWixVQUFhLFNBQTZCO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkYsa0lBQWtJO1FBQ2xJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFHLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLGNBQU0sSUFBSSxDQUFDLFNBQVMsRUFBRyxDQUFDO0lBQzlDLENBQUM7SUFFRCw2QkFBTSxHQUFOLFVBQU8sUUFBZ0IsRUFBRSxHQUFrQixFQUFFLElBQWdCO1FBQTdELGlCQWtCQztRQWpCQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFBLFFBQVE7WUFDdEcsS0FBSSxDQUFDLFNBQVMsZ0JBQVEsUUFBUSxDQUFFLENBQUM7WUFDakMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUMzQixLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksY0FBTSxRQUFRLENBQUMsSUFBSSxFQUFHLENBQUM7WUFDdEMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsRUFDQyxVQUFBLEtBQUs7WUFDSCxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBWTtnQkFDOUIsSUFBSSxFQUFFO29CQUNKLEtBQUssRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFZO3dCQUMxQyxLQUFLLEVBQUUsNEJBQTRCO3dCQUNuQyxLQUFLLEVBQUUsS0FBSztxQkFDYixDQUFDO2lCQUNIO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsK0JBQVEsR0FBUjtRQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCwrQkFBUSxHQUFSO1FBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsbUNBQVksR0FBWjtRQUNFLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsa0NBQVcsR0FBWDtRQUNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFRCxxQ0FBYyxHQUFkO1FBQ0UsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsZ0NBQVMsR0FBVCxVQUFVLFNBQTRCLEVBQUUsS0FBVTtRQUNoRCxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLGlCQUFpQixDQUFDLFdBQVc7Z0JBQ2hDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNuQyxJQUFNLFFBQU0sR0FBYyxLQUFNLENBQUMsTUFBTSxDQUFDO2dCQUN4QyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFNLEVBQW5CLENBQW1CLENBQUMsQ0FBQztnQkFFL0UsSUFBSSxRQUFRLElBQUksQ0FBQztvQkFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUU5QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZUFBZTtnQkFDcEMsSUFBTSxhQUFXLEdBQXdCLEtBQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQzVELElBQUksaUJBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJO29CQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFBLE9BQU87d0JBQzNCLElBQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFdBQVcsS0FBSyxhQUFXLEVBQTdCLENBQTZCLENBQUMsQ0FBQzt3QkFDeEYsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFOzRCQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzdDLGlCQUFlLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzt5QkFDckM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGFBQWE7Z0JBQ2xDLElBQU0sV0FBUyxHQUFpQixLQUFNLENBQUMsU0FBUyxDQUFDO2dCQUNqRCxJQUFJLGNBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJO29CQUNwQyxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxTQUFTLEtBQUssV0FBUyxFQUF6QixDQUF5QixDQUFDLENBQUM7b0JBQzdFLElBQUksWUFBWSxJQUFJLENBQUMsRUFBRTt3QkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxjQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztxQkFDNUI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLE1BQU07U0FDVDtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxjQUFNLElBQUksQ0FBQyxTQUFTLEVBQUcsQ0FBQztJQUM5QyxDQUFDO0lBRU8sMkNBQW9CLEdBQTVCO1FBQUEsaUJBbUJDO1FBbEJDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3RSxxRkFBcUY7WUFDckYsSUFBTSx1QkFBcUIsR0FBRyxhQUFhLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsdUJBQXFCLENBQUMsWUFBWSxDQUFDO1lBR2pFLDhFQUE4RTtZQUM5RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUEsSUFBSTtnQkFDcEMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsdUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3BHLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pFLElBQUksdUJBQXFCLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUN0RyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLHVCQUFxQixDQUFDLFVBQVUsRUFDdEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFFcEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUVyRTtJQUNILENBQUM7O0lBdkpVLFlBQVk7UUFEeEIsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO3lDQUdWLFdBQVc7WUFDRSx3QkFBd0I7WUFDckMsV0FBVztPQUp2QixZQUFZLENBd0p4Qjt1QkF2S0Q7Q0F1S0MsQUF4SkQsSUF3SkM7U0F4SlksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtUGFnZSB9IGZyb20gJy4uL21vZGVscy9mb3JtLXBhZ2UubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtU2VjdGlvbiB9IGZyb20gJy4uL21vZGVscy9mb3JtLXNlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtRXJyb3IsIEZvcm1TdGF0ZSB9IGZyb20gJy4uL21vZGVscy9mb3JtLXdpbmRvdy5tb2RlbCc7XHJcbmltcG9ydCB7IEludGVybmFsRXZlbnRUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ludGVybmFsLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcG9uZW50LXJlc29sdmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJy4vaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtUUxNb2RlIH0gZnJvbSAnLi4vbW9kZWxzL3R5cGUubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFN0b3JlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlOiBDb21wb25lbnRSZXNvbHZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlclxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgZGF0YSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgZm9ybVN0YXRlJCA9IG5ldyBTdWJqZWN0PEZvcm1TdGF0ZT4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlRGVzdHJveWVkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBmb3JtU3RhdGU6IEZvcm1TdGF0ZTtcclxuXHJcbiAgLy8gcHJpdmF0ZSBmb3JtQ29udHJvbHM6IEZvcm1Db250cm9scztcclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhJC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5kYXRhJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YSgpOiBPYnNlcnZhYmxlPEZvcm1Db21wb25lbnQ8YW55PltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1TdGF0ZSgpOiBPYnNlcnZhYmxlPEZvcm1TdGF0ZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0YXRlJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNvbXBvbmVudChjb21wb25lbnQ6IEZvcm1Db21wb25lbnQ8YW55Pikge1xyXG4gICAgdGhpcy5mb3JtU3RhdGUgPSB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudChjb21wb25lbnQsIHRoaXMuZm9ybVN0YXRlLCBmYWxzZSk7XHJcbiAgICB0aGlzLmRhdGEkLm5leHQoeyAuLi50aGlzLmZvcm1TdGF0ZS5kYXRhIH0pO1xyXG4gICAgdGhpcy5mb3JtU3RhdGUkLm5leHQoeyAuLi50aGlzLmZvcm1TdGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIHNldENvbXBvbmVudChjb21wb25lbnQ6IEZvcm1Db21wb25lbnQ8YW55Pikge1xyXG4gICAgdGhpcy5mb3JtU3RhdGUgPSB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudChjb21wb25lbnQsIHRoaXMuZm9ybVN0YXRlLCB0cnVlKTtcclxuICAgIC8vIHRoaXMuZm9ybUNvbnRyb2xzID0gSGVscGVyU2VydmljZS5yZXNldFZhbGlkYXRvcnModGhpcy5mb3JtU3RhdGUuY29tcG9uZW50cywgdGhpcy5mb3JtQ29udHJvbHMsIHRoaXMuY29tcG9uZW50UmVzb2x2ZXJTZXJ2aWNlKTtcclxuICAgIHRoaXMuZGF0YSQubmV4dCh7IC4uLnRoaXMuZm9ybVN0YXRlLmRhdGEgfSk7XHJcbiAgICB0aGlzLmZvcm1TdGF0ZSQubmV4dCh7IC4uLnRoaXMuZm9ybVN0YXRlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsKGZvcm1OYW1lOiBzdHJpbmcsIGlkczogQXJyYXk8c3RyaW5nPiwgbW9kZTogRm9ybVFMTW9kZSkge1xyXG4gICAgdGhpcy5mb3JtU2VydmljZS5nZXRGb3JtQW5kRGF0YShmb3JtTmFtZSwgaWRzKS5waXBlKHRha2VVbnRpbCh0aGlzLnNlcnZpY2VEZXN0cm95ZWQpKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZSA9IHsgLi4ucmVzcG9uc2UgfTtcclxuICAgICAgdGhpcy5mb3JtU3RhdGUuaWRzID0gaWRzO1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZS5tb2RlID0gbW9kZTtcclxuICAgICAgdGhpcy5kYXRhJC5uZXh0KHsgLi4ucmVzcG9uc2UuZGF0YSB9KTtcclxuICAgICAgdGhpcy5mb3JtU3RhdGUkLm5leHQodGhpcy5mb3JtU3RhdGUpO1xyXG4gICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybVN0YXRlJC5uZXh0KDxGb3JtU3RhdGU+e1xyXG4gICAgICAgICAgZm9ybToge1xyXG4gICAgICAgICAgICBlcnJvcjogSGVscGVyU2VydmljZS5mb3JtYXRFcnJvcig8Rm9ybUVycm9yPntcclxuICAgICAgICAgICAgICB0aXRsZTogJ0Vycm9yIGxvYWRpbmcgZm9ybSBvciBkYXRhJyxcclxuICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybVNlcnZpY2Uuc2F2ZUZvcm0odGhpcy5mb3JtU3RhdGUuZm9ybS5mb3JtTmFtZSwgdGhpcy5mb3JtU3RhdGUuZm9ybSk7XHJcbiAgfVxyXG5cclxuICBzYXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLnNhdmVEYXRhKHRoaXMuZm9ybVN0YXRlLmZvcm0uZGF0YVNvdXJjZSwgdGhpcy5mb3JtU3RhdGUuaWRzLCB0aGlzLmZvcm1TdGF0ZS5kYXRhKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRm9ybSgpIHtcclxuICAgIEhlbHBlclNlcnZpY2UudmFsaWRhdGVGb3JtKHRoaXMuZm9ybVN0YXRlLnJlYWN0aXZlRm9ybSk7XHJcbiAgfVxyXG5cclxuICBpc0Zvcm1WYWxpZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TdGF0ZS5yZWFjdGl2ZUZvcm0udmFsaWQ7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZUFsbCgpIHtcclxuICAgIHRoaXMuc2VydmljZURlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLnNlcnZpY2VEZXN0cm95ZWQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHJlU2V0Rm9ybShldmVudFR5cGU6IEludGVybmFsRXZlbnRUeXBlLCBldmVudDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xyXG4gICAgICBjYXNlIEludGVybmFsRXZlbnRUeXBlLkVkaXRpbmdGb3JtOlxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVSZWFjdGl2ZUZvcm0oKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxFdmVudFR5cGUuRG5kRm9ybUNoYW5nZWQ6XHJcbiAgICAgICAgY29uc3QgcGFnZUlkID0gKDxGb3JtUGFnZT5ldmVudCkucGFnZUlkO1xyXG4gICAgICAgIGNvbnN0IGluZGV4RG5kID0gdGhpcy5mb3JtU3RhdGUuZm9ybS5wYWdlcy5maW5kSW5kZXgocCA9PiBwLnBhZ2VJZCA9PT0gcGFnZUlkKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4RG5kID49IDApXHJcbiAgICAgICAgICB0aGlzLmZvcm1TdGF0ZS5mb3JtLnBhZ2VzW2luZGV4RG5kXSA9IGV2ZW50O1xyXG5cclxuICAgICAgICB0aGlzLnBvcHVsYXRlUmVhY3RpdmVGb3JtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsRXZlbnRUeXBlLlJlbW92ZUNvbXBvbmVudDpcclxuICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9ICg8Rm9ybUNvbXBvbmVudDxhbnk+PmV2ZW50KS5jb21wb25lbnRJZDtcclxuICAgICAgICBsZXQgdXBkYXRlU2VjdGlvbklkID0gJyc7XHJcbiAgICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybS5wYWdlcy5mb3JFYWNoKHBhZ2UgPT4ge1xyXG4gICAgICAgICAgcGFnZS5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleENvbXBvbmVudCA9IHNlY3Rpb24uY29tcG9uZW50cy5maW5kSW5kZXgoYyA9PiBjLmNvbXBvbmVudElkID09PSBjb21wb25lbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleENvbXBvbmVudCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgc2VjdGlvbi5jb21wb25lbnRzLnNwbGljZShpbmRleENvbXBvbmVudCwgMSk7XHJcbiAgICAgICAgICAgICAgdXBkYXRlU2VjdGlvbklkID0gc2VjdGlvbi5zZWN0aW9uSWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVSZWFjdGl2ZUZvcm0oKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxFdmVudFR5cGUuUmVtb3ZlU2VjdGlvbjpcclxuICAgICAgICBjb25zdCBzZWN0aW9uSWQgPSAoPEZvcm1TZWN0aW9uPmV2ZW50KS5zZWN0aW9uSWQ7XHJcbiAgICAgICAgbGV0IHVwZGF0ZVBhZ2VJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuZm9ybVN0YXRlLmZvcm0ucGFnZXMuZm9yRWFjaChwYWdlID0+IHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4U2VjdGlvbiA9IHBhZ2Uuc2VjdGlvbnMuZmluZEluZGV4KGMgPT4gYy5zZWN0aW9uSWQgPT09IHNlY3Rpb25JZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXhTZWN0aW9uID49IDApIHtcclxuICAgICAgICAgICAgcGFnZS5zZWN0aW9ucy5zcGxpY2UoaW5kZXhTZWN0aW9uLCAxKTtcclxuICAgICAgICAgICAgdXBkYXRlUGFnZUlkID0gcGFnZS5wYWdlSWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZVJlYWN0aXZlRm9ybSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtU3RhdGUkLm5leHQoeyAuLi50aGlzLmZvcm1TdGF0ZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9wdWxhdGVSZWFjdGl2ZUZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtU3RhdGUuZm9ybS5wYWdlcyAhPSBudWxsICYmIHRoaXMuZm9ybVN0YXRlLmZvcm0ucGFnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBnZXQgcmVhY3RpdmUgc3RydWN0dXJlIC0+IGZvcm1Db250cm9scywgcGFnZUdyb3VwIGFuZCBjb21wb25lbnRzIGlmIGl0J3MgYW4gdXBkYXRlXHJcbiAgICAgIGNvbnN0IHJlYWN0aXZlRm9ybVN0cnVjdHVyZSA9IEhlbHBlclNlcnZpY2UuY3JlYXRlUmVhY3RpdmVGb3JtU3RydWN0dXJlKHRoaXMuZm9ybVN0YXRlLmZvcm0sIHRydWUsIHRoaXMuZm9ybVN0YXRlLmRhdGEpO1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZS5mb3JtQ29udHJvbHMgPSByZWFjdGl2ZUZvcm1TdHJ1Y3R1cmUuZm9ybUNvbnRyb2xzO1xyXG5cclxuXHJcbiAgICAgIC8vIGlmIGl0J3MgYW4gdXBkYXRlLCByZWZyZXNoIHJlYWN0aXZlIGZvcm0sIHNldCBhbGwgZm9ybSBjb250cm9scywgdmFsaWRhdG9yc1xyXG4gICAgICB0aGlzLmZvcm1TdGF0ZS5mb3JtLnBhZ2VzLmZvckVhY2gocGFnZSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtU3RhdGUucmVhY3RpdmVGb3JtLnNldENvbnRyb2wocGFnZS5wYWdlSWQsIHJlYWN0aXZlRm9ybVN0cnVjdHVyZS5wYWdlR3JvdXBbcGFnZS5wYWdlSWRdKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybVN0YXRlLmZvcm0gPSBIZWxwZXJTZXJ2aWNlLnVwZGF0ZVRlbXBsYXRlcyh0aGlzLmZvcm1TdGF0ZS5mb3JtKTtcclxuICAgICAgaWYgKHJlYWN0aXZlRm9ybVN0cnVjdHVyZS5jb21wb25lbnRzICE9IG51bGwgJiYgT2JqZWN0LmtleXMocmVhY3RpdmVGb3JtU3RydWN0dXJlLmNvbXBvbmVudHMpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybUNvbnRyb2xzID0gSGVscGVyU2VydmljZS5yZXNldFZhbGlkYXRvcnMocmVhY3RpdmVGb3JtU3RydWN0dXJlLmNvbXBvbmVudHMsXHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtU3RhdGUuZm9ybUNvbnRyb2xzLCB0aGlzLmNvbXBvbmVudFJlc29sdmVyU2VydmljZSk7XHJcblxyXG4gICAgICB0aGlzLmZvcm1TdGF0ZSA9IHRoaXMuZm9ybVNlcnZpY2UucmVzb2x2ZUNvbmRpdGlvbnModGhpcy5mb3JtU3RhdGUpO1xyXG5cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19