@myrtex-org/form 1.1.27 → 1.1.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,48 +1,39 @@
1
1
  import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class ComponentFactoryDirective {
4
- constructor(viewContainer, cdr) {
4
+ constructor(viewContainer) {
5
5
  this.viewContainer = viewContainer;
6
- this.cdr = cdr;
7
6
  this.values = [];
8
7
  this.changed = new EventEmitter();
9
8
  }
10
9
  ngOnChanges(changes) {
11
- // 1. Сначала инициализируем виджет, если сменился тип
12
- if ('type' in changes && this.type) {
10
+ if ('type' in changes && this.type && changes['type'].previousValue !== changes['type'].currentValue) {
13
11
  this.initWidget(this.type);
14
12
  }
15
- // 2. Если компонент уже есть (или только что создался), обновляем все свойства
16
- if (this.dynamicComponent) {
17
- if ('data' in changes && this.data) {
18
- this.dynamicComponent.instance.data = this.data;
19
- }
20
- if ('valueMode' in changes && this.valueMode) {
21
- this.dynamicComponent.instance.valueMode = this.valueMode;
22
- }
23
- // Используем currentValue из changes, чтобы быть уверенными в свежести данных
24
- if ('values' in changes) {
25
- this.dynamicComponent.instance.values = changes['values'].currentValue;
26
- }
27
- // КРИТИЧНО: уведомляем Angular, что в динамическом компоненте обновились данные
28
- this.dynamicComponent.changeDetectorRef.detectChanges();
13
+ if ('data' in changes && this.data) {
14
+ this.applyData(this.data);
15
+ }
16
+ if ('valueMode' in changes && this.data && this.valueMode) {
17
+ this.applyValueMode(this.valueMode);
18
+ }
19
+ if ('values' in changes && this.data) {
20
+ this.applyValues(this.values);
29
21
  }
30
22
  }
31
23
  initWidget(type) {
32
24
  const componentType = this.map[type];
33
- if (!componentType)
25
+ if (!componentType) {
34
26
  return;
35
- this.viewContainer.clear();
27
+ }
28
+ if (this.dynamicComponent) {
29
+ this.viewContainer.clear();
30
+ this.dynamicComponent = undefined;
31
+ }
36
32
  this.dynamicComponent = this.viewContainer.createComponent(componentType);
37
- // Сразу передаем всё, что есть на момент создания
38
- const instance = this.dynamicComponent.instance;
39
- if (this.data)
40
- instance.data = this.data;
41
- if (this.values)
42
- instance.values = this.values;
43
- if (this.valueMode)
44
- instance.valueMode = this.valueMode;
45
- if (this.dynamicComponent && this.dynamicComponent.instance.changed) {
33
+ if (this.data) {
34
+ this.dynamicComponent.instance.data = this.data;
35
+ }
36
+ if (this.dynamicComponent.instance.changed) {
46
37
  this.dynamicComponent.instance.changed.subscribe((res) => {
47
38
  this.changed.emit(res);
48
39
  });
@@ -63,7 +54,7 @@ export class ComponentFactoryDirective {
63
54
  this.dynamicComponent.instance.valueMode = valueMode;
64
55
  }
65
56
  }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComponentFactoryDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComponentFactoryDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
67
58
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: ComponentFactoryDirective, isStandalone: true, selector: "[appComponentFactory]", inputs: { type: "type", data: "data", values: "values", valueMode: "valueMode", map: "map" }, outputs: { changed: "changed" }, usesOnChanges: true, ngImport: i0 }); }
68
59
  }
69
60
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ComponentFactoryDirective, decorators: [{
@@ -72,7 +63,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
72
63
  selector: '[appComponentFactory]',
73
64
  standalone: true
74
65
  }]
75
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { type: [{
66
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { type: [{
76
67
  type: Input
77
68
  }], data: [{
78
69
  type: Input
@@ -85,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
85
76
  }], changed: [{
86
77
  type: Output
87
78
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWZhY3RvcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2ZhY3Rvcmllcy9jb21wb25lbnQtZmFjdG9yeS9jb21wb25lbnQtZmFjdG9yeS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLEtBQUssRUFFTCxNQUFNLEVBSVAsTUFBTSxlQUFlLENBQUM7O0FBV3ZCLE1BQU0sT0FBTyx5QkFBeUI7SUFXcEMsWUFDVSxhQUErQixFQUMvQixHQUFzQjtRQUR0QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFWdkIsV0FBTSxHQUFpQixFQUFFLENBQUM7UUFJbEIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUErQyxDQUFDO0lBUTNGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsc0RBQXNEO1FBQ3RELElBQUksTUFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELCtFQUErRTtRQUMvRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksTUFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEQsQ0FBQztZQUVELElBQUksV0FBVyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDNUQsQ0FBQztZQUVELDhFQUE4RTtZQUM5RSxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUN6RSxDQUFDO1lBRUQsZ0ZBQWdGO1lBQ2hGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFtQjtRQUM1QixNQUFNLGFBQWEsR0FBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFMUUsa0RBQWtEO1FBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUFFLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFeEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFnRCxFQUFFLEVBQUU7Z0JBQ3BHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsSUFBd0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBb0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsU0FBNEI7UUFDekMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7K0dBL0VVLHlCQUF5QjttR0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjtxSEFFVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFFVyxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFR5cGUsXHJcbiAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkLWZvcm0vZW51bXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbEJhc2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQtZm9ybS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRzTWFwVHlwZSB9IGZyb20gJy4vZW51bXMvY29tcG9uZW50LmVudW0nO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJy4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFZhbHVlTW9kZWwsIFZhbHVlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwQ29tcG9uZW50RmFjdG9yeV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEZhY3RvcnlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHR5cGU/OiBDb21wb25lbnRUeXBlO1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBDb21wb25lbnRNb2RlbEJhc2U7XHJcbiAgQElucHV0KCkgdmFsdWVzOiBWYWx1ZU1vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSB2YWx1ZU1vZGU/OiAnYXV0bycgfCAnbWFudWFsJztcclxuICBASW5wdXQoKSBtYXAhOiBDb21wb25lbnRzTWFwVHlwZTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdPigpO1xyXG5cclxuICBkeW5hbWljQ29tcG9uZW50PzogQ29tcG9uZW50UmVmPEFic3RyYWN0Q29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIDEuINCh0L3QsNGH0LDQu9CwINC40L3QuNGG0LjQsNC70LjQt9C40YDRg9C10Lwg0LLQuNC00LbQtdGCLCDQtdGB0LvQuCDRgdC80LXQvdC40LvRgdGPINGC0LjQv1xyXG4gICAgaWYgKCd0eXBlJyBpbiBjaGFuZ2VzICYmIHRoaXMudHlwZSkge1xyXG4gICAgICB0aGlzLmluaXRXaWRnZXQodGhpcy50eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAyLiDQldGB0LvQuCDQutC+0LzQv9C+0L3QtdC90YIg0YPQttC1INC10YHRgtGMICjQuNC70Lgg0YLQvtC70YzQutC+INGH0YLQviDRgdC+0LfQtNCw0LvRgdGPKSwg0L7QsdC90L7QstC70Y/QtdC8INCy0YHQtSDRgdCy0L7QudGB0YLQstCwXHJcbiAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50KSB7XHJcbiAgICAgIGlmICgnZGF0YScgaW4gY2hhbmdlcyAmJiB0aGlzLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuaW5zdGFuY2UuZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKCd2YWx1ZU1vZGUnIGluIGNoYW5nZXMgJiYgdGhpcy52YWx1ZU1vZGUpIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuaW5zdGFuY2UudmFsdWVNb2RlID0gdGhpcy52YWx1ZU1vZGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vINCY0YHQv9C+0LvRjNC30YPQtdC8IGN1cnJlbnRWYWx1ZSDQuNC3IGNoYW5nZXMsINGH0YLQvtCx0Ysg0LHRi9GC0Ywg0YPQstC10YDQtdC90L3Ri9C80Lgg0LIg0YHQstC10LbQtdGB0YLQuCDQtNCw0L3QvdGL0YVcclxuICAgICAgaWYgKCd2YWx1ZXMnIGluIGNoYW5nZXMpIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuaW5zdGFuY2UudmFsdWVzID0gY2hhbmdlc1sndmFsdWVzJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDQmtCg0JjQotCY0KfQndCeOiDRg9Cy0LXQtNC+0LzQu9GP0LXQvCBBbmd1bGFyLCDRh9GC0L4g0LIg0LTQuNC90LDQvNC40YfQtdGB0LrQvtC8INC60L7QvNC/0L7QvdC10L3RgtC1INC+0LHQvdC+0LLQuNC70LjRgdGMINC00LDQvdC90YvQtVxyXG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdFdpZGdldCh0eXBlOiBDb21wb25lbnRUeXBlKSB7XHJcbiAgICBjb25zdCBjb21wb25lbnRUeXBlOiBUeXBlPEFic3RyYWN0Q29tcG9uZW50PiA9IHRoaXMubWFwW3R5cGVdO1xyXG4gICAgaWYgKCFjb21wb25lbnRUeXBlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xyXG5cclxuICAgIC8vINCh0YDQsNC30YMg0L/QtdGA0LXQtNCw0LXQvCDQstGB0ZEsINGH0YLQviDQtdGB0YLRjCDQvdCwINC80L7QvNC10L3RgiDRgdC+0LfQtNCw0L3QuNGPXHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuZHluYW1pY0NvbXBvbmVudC5pbnN0YW5jZTtcclxuICAgIGlmICh0aGlzLmRhdGEpIGluc3RhbmNlLmRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICBpZiAodGhpcy52YWx1ZXMpIGluc3RhbmNlLnZhbHVlcyA9IHRoaXMudmFsdWVzO1xyXG4gICAgaWYgKHRoaXMudmFsdWVNb2RlKSBpbnN0YW5jZS52YWx1ZU1vZGUgPSB0aGlzLnZhbHVlTW9kZTtcclxuXHJcbiAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50ICYmIHRoaXMuZHluYW1pY0NvbXBvbmVudC5pbnN0YW5jZS5jaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudC5pbnN0YW5jZS5jaGFuZ2VkLnN1YnNjcmliZSgocmVzOiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkLmVtaXQocmVzKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseURhdGEoZGF0YTogQ29tcG9uZW50TW9kZWxCYXNlKSB7XHJcbiAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudC5pbnN0YW5jZS5kYXRhID0gZGF0YTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5VmFsdWVzKHZhbHVlczogVmFsdWVNb2RlbFtdKSB7XHJcbiAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudC5pbnN0YW5jZS52YWx1ZXMgPSB2YWx1ZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseVZhbHVlTW9kZSh2YWx1ZU1vZGU6ICdhdXRvJyB8ICdtYW51YWwnKSB7XHJcbiAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudC5pbnN0YW5jZS52YWx1ZU1vZGUgPSB2YWx1ZU1vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWZhY3RvcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2ZhY3Rvcmllcy9jb21wb25lbnQtZmFjdG9yeS9jb21wb25lbnQtZmFjdG9yeS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLEtBQUssRUFFTCxNQUFNLEVBSVAsTUFBTSxlQUFlLENBQUM7O0FBV3ZCLE1BQU0sT0FBTyx5QkFBeUI7SUFXcEMsWUFBb0IsYUFBK0I7UUFBL0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBUjFDLFdBQU0sR0FBaUIsRUFBRSxDQUFDO1FBSWxCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztJQUszRixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksTUFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLE1BQU0sSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLFdBQVcsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBbUI7UUFDNUIsTUFBTSxhQUFhLEdBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFrRCxFQUFFLEVBQUU7Z0JBQ3RHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsSUFBd0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBb0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsU0FBNEI7UUFDekMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7K0dBeEVVLHlCQUF5QjttR0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjtxRkFFVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFFVyxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFR5cGUsXHJcbiAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkLWZvcm0vZW51bXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRNb2RlbEJhc2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQtZm9ybS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRzTWFwVHlwZSB9IGZyb20gJy4vZW51bXMvY29tcG9uZW50LmVudW0nO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJy4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IENvbXBvbmVudFZhbHVlTW9kZWwsIFZhbHVlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwQ29tcG9uZW50RmFjdG9yeV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEZhY3RvcnlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHR5cGU/OiBDb21wb25lbnRUeXBlO1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBDb21wb25lbnRNb2RlbEJhc2U7XHJcbiAgQElucHV0KCkgdmFsdWVzOiBWYWx1ZU1vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSB2YWx1ZU1vZGU/OiAnYXV0bycgfCAnbWFudWFsJztcclxuICBASW5wdXQoKSBtYXAhOiBDb21wb25lbnRzTWFwVHlwZTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wb25lbnRWYWx1ZU1vZGVsIHwgQ29tcG9uZW50VmFsdWVNb2RlbFtdPigpO1xyXG5cclxuICBkeW5hbWljQ29tcG9uZW50PzogQ29tcG9uZW50UmVmPEFic3RyYWN0Q29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLCkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKCd0eXBlJyBpbiBjaGFuZ2VzICYmIHRoaXMudHlwZSAmJiBjaGFuZ2VzWyd0eXBlJ10ucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlc1sndHlwZSddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmluaXRXaWRnZXQodGhpcy50eXBlKTtcclxuICAgIH1cclxuICAgIGlmICgnZGF0YScgaW4gY2hhbmdlcyAmJiB0aGlzLmRhdGEpIHtcclxuICAgICAgdGhpcy5hcHBseURhdGEodGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoJ3ZhbHVlTW9kZScgaW4gY2hhbmdlcyAmJiB0aGlzLmRhdGEgJiYgdGhpcy52YWx1ZU1vZGUpIHtcclxuICAgICAgdGhpcy5hcHBseVZhbHVlTW9kZSh0aGlzLnZhbHVlTW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCd2YWx1ZXMnIGluIGNoYW5nZXMgJiYgdGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlWYWx1ZXModGhpcy52YWx1ZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdFdpZGdldCh0eXBlOiBDb21wb25lbnRUeXBlKSB7XHJcbiAgICBjb25zdCBjb21wb25lbnRUeXBlOiBUeXBlPEFic3RyYWN0Q29tcG9uZW50PiA9IHRoaXMubWFwW3R5cGVdO1xyXG5cclxuICAgIGlmICghY29tcG9uZW50VHlwZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZHluYW1pY0NvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudCA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuaW5zdGFuY2UuZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50Lmluc3RhbmNlLmNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50Lmluc3RhbmNlLmNoYW5nZWQuc3Vic2NyaWJlKChyZXM6IHwgQ29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZC5lbWl0KHJlcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlEYXRhKGRhdGE6IENvbXBvbmVudE1vZGVsQmFzZSkge1xyXG4gICAgaWYgKHRoaXMuZHluYW1pY0NvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuaW5zdGFuY2UuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseVZhbHVlcyh2YWx1ZXM6IFZhbHVlTW9kZWxbXSkge1xyXG4gICAgaWYgKHRoaXMuZHluYW1pY0NvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuaW5zdGFuY2UudmFsdWVzID0gdmFsdWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlWYWx1ZU1vZGUodmFsdWVNb2RlOiAnYXV0bycgfCAnbWFudWFsJykge1xyXG4gICAgaWYgKHRoaXMuZHluYW1pY0NvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnQuaW5zdGFuY2UudmFsdWVNb2RlID0gdmFsdWVNb2RlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,180 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FormulaCalculateService {
4
+ constructor() {
5
+ this._operatorPrecedence = {
6
+ '+': 1,
7
+ '-': 1,
8
+ '*': 2,
9
+ '/': 2,
10
+ };
11
+ this._operators = ['+', '-', '*', '/'];
12
+ }
13
+ calculateMathExpression(expression, values) {
14
+ try {
15
+ return this._calculateMathExpression(expression, values);
16
+ }
17
+ catch {
18
+ return 0;
19
+ }
20
+ }
21
+ calculateStringConcatenation(expression, values) {
22
+ return expression.replace(/{(?<systemName>\w+)(?::(?<format>[^}]+))?}/g, (_match, systemName) => {
23
+ const value = values.find(x => x.sysName === systemName);
24
+ return value?.value?.toString?.() ?? '';
25
+ });
26
+ }
27
+ _calculateMathExpression(expression, values) {
28
+ const operatorStack = [];
29
+ const operandStack = [];
30
+ for (let i = 0; i < expression.length; i++) {
31
+ const charValue = expression[i];
32
+ if (/\s/.test(charValue)) {
33
+ continue;
34
+ }
35
+ if (charValue === '{') {
36
+ let sysNameOperand = '';
37
+ while (i < expression.length && expression[i] !== '}') {
38
+ sysNameOperand += expression[i];
39
+ i++;
40
+ }
41
+ sysNameOperand += expression[i] ?? '';
42
+ const value = this._getNumberValue(values, sysNameOperand);
43
+ if (value === null) {
44
+ return 0;
45
+ }
46
+ operandStack.push(value);
47
+ continue;
48
+ }
49
+ if (charValue === '(') {
50
+ const nestedExpression = this._getExpressionBetweenParentheses(expression, i);
51
+ operandStack.push(this._calculateMathExpression(nestedExpression, values));
52
+ i += nestedExpression.length + 1;
53
+ continue;
54
+ }
55
+ if (this._isOperator(charValue)) {
56
+ this._addOperator(operatorStack, operandStack, charValue);
57
+ continue;
58
+ }
59
+ if (/\d/.test(charValue)) {
60
+ let number = '';
61
+ while (i < expression.length && (/[\d.]/.test(expression[i]))) {
62
+ number += expression[i];
63
+ i++;
64
+ }
65
+ i--;
66
+ const value = this._getNumberValue(values, number);
67
+ if (value === null) {
68
+ return 0;
69
+ }
70
+ operandStack.push(value);
71
+ continue;
72
+ }
73
+ if (/[a-zA-Z]/.test(charValue)) {
74
+ i += this._addFunctionResult(operandStack, values, expression, i);
75
+ }
76
+ }
77
+ this._calculateAll(operandStack, operatorStack);
78
+ return operandStack.pop() ?? 0;
79
+ }
80
+ _addFunctionResult(operandStack, values, expression, startIndex) {
81
+ const idxEof = expression.indexOf(')', startIndex);
82
+ const operand = expression.substring(startIndex, idxEof - startIndex + 1);
83
+ const lowerOperand = operand.toLowerCase();
84
+ if (lowerOperand.startsWith('pow(') && lowerOperand.endsWith(')')) {
85
+ const innerExpression = operand.substring(4, operand.length - 1);
86
+ const innerOperands = innerExpression.split(',').map(x => x.trim());
87
+ const baseValue = this._getNumberValue(values, innerOperands[0]);
88
+ const exponent = this._getNumberValue(values, innerOperands[1]);
89
+ if (baseValue === null || exponent === null) {
90
+ operandStack.push(0);
91
+ }
92
+ else {
93
+ operandStack.push(Math.pow(baseValue, exponent));
94
+ }
95
+ return operand.length - 1;
96
+ }
97
+ if (lowerOperand.startsWith('sqrt(') && lowerOperand.endsWith(')')) {
98
+ const innerExpression = operand.substring(5, operand.length - 1);
99
+ const value = this._getNumberValue(values, innerExpression);
100
+ operandStack.push(value === null ? 0 : Math.sqrt(value));
101
+ return operand.length - 1;
102
+ }
103
+ throw new Error('Invalid function operand');
104
+ }
105
+ _addOperator(operatorStack, operandStack, operatorToken) {
106
+ while (operatorStack.length > 0 &&
107
+ this._getOperatorPrecedence(operatorToken) <= this._getOperatorPrecedence(operatorStack[operatorStack.length - 1])) {
108
+ const operand2 = operandStack.pop() ?? 0;
109
+ const operand1 = operandStack.pop() ?? 0;
110
+ const operatorTokenToApply = operatorStack.pop();
111
+ operandStack.push(this._calculate(operand1, operand2, operatorTokenToApply));
112
+ }
113
+ operatorStack.push(operatorToken);
114
+ }
115
+ _calculateAll(operandStack, operatorStack) {
116
+ while (operatorStack.length > 0) {
117
+ const operatorToken = operatorStack.pop();
118
+ const operand2 = operandStack.pop() ?? 0;
119
+ const operand1 = operandStack.pop() ?? 0;
120
+ operandStack.push(this._calculate(operand1, operand2, operatorToken));
121
+ }
122
+ }
123
+ _getOperatorPrecedence(operatorToken) {
124
+ return this._operatorPrecedence[operatorToken];
125
+ }
126
+ _getExpressionBetweenParentheses(expression, startIndex) {
127
+ let level = 0;
128
+ for (let i = startIndex; i < expression.length; i++) {
129
+ if (expression[i] === '(') {
130
+ level++;
131
+ }
132
+ else if (expression[i] === ')') {
133
+ level--;
134
+ if (level === 0) {
135
+ return expression.substring(startIndex + 1, i);
136
+ }
137
+ }
138
+ }
139
+ throw new Error('Unbalanced parentheses');
140
+ }
141
+ _getNumberValue(values, operand) {
142
+ const cleanOperand = operand.trim().replace(',', '.').replace(/^\{|\}$/g, '');
143
+ const val = values.find(x => x.sysName === cleanOperand);
144
+ if (val) {
145
+ if (val.value === null || val.value === undefined || val.value === '') {
146
+ return null;
147
+ }
148
+ const parsed = Number(String(val.value).replace(',', '.'));
149
+ return Number.isFinite(parsed) ? parsed : null;
150
+ }
151
+ const asNumber = Number(cleanOperand);
152
+ if (Number.isFinite(asNumber)) {
153
+ return asNumber;
154
+ }
155
+ throw new Error(`Invalid operand ${operand}`);
156
+ }
157
+ _calculate(operand1, operand2, operatorToken) {
158
+ switch (operatorToken) {
159
+ case '+':
160
+ return operand1 + operand2;
161
+ case '-':
162
+ return operand1 - operand2;
163
+ case '*':
164
+ return operand1 * operand2;
165
+ case '/':
166
+ return operand1 / operand2;
167
+ default:
168
+ throw new Error(`Invalid operator ${operatorToken}`);
169
+ }
170
+ }
171
+ _isOperator(token) {
172
+ return this._operators.includes(token);
173
+ }
174
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormulaCalculateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
175
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormulaCalculateService }); }
176
+ }
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormulaCalculateService, decorators: [{
178
+ type: Injectable
179
+ }] });
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXVsYS1jYWxjdWxhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1mb3JtL3NyYy9saWIvbW9kdWxlcy9vYmplY3QtZm9ybS9zZXJ2aWNlcy9mb3JtdWxhLWNhbGN1bGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTTNDLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFFbUIsd0JBQW1CLEdBQWtDO1lBQ3BFLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxDQUFDO1NBQ1AsQ0FBQztRQUVlLGVBQVUsR0FBb0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQW9NckU7SUFsTVEsdUJBQXVCLENBQUMsVUFBa0IsRUFBRSxNQUE2QjtRQUM5RSxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFTSw0QkFBNEIsQ0FBQyxVQUFrQixFQUFFLE1BQTZCO1FBQ25GLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFrQixFQUFFLEVBQUU7WUFDdEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDekQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxD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O1FBQ2pELENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsYUFBNEI7UUFDakYsUUFBUSxhQUFhLEVBQUUsQ0FBQztZQUN0QixLQUFLLEdBQUc7Z0JBQ04sT0FBTyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQzdCLEtBQUssR0FBRztnQkFDTixPQUFPLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDN0IsS0FBSyxHQUFHO2dCQUNOLE9BQU8sUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUM3QixLQUFLLEdBQUc7Z0JBQ04sT0FBTyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQzdCO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsS0FBYTtRQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQXNCLENBQUMsQ0FBQztJQUMxRCxDQUFDOytHQTNNVSx1QkFBdUI7bUhBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFZhbHVlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG50eXBlIE9wZXJhdG9yVG9rZW4gPSAnKycgfCAnLScgfCAnKicgfCAnLyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtdWxhQ2FsY3VsYXRlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wZXJhdG9yUHJlY2VkZW5jZTogUmVjb3JkPE9wZXJhdG9yVG9rZW4sIG51bWJlcj4gPSB7XG4gICAgJysnOiAxLFxuICAgICctJzogMSxcbiAgICAnKic6IDIsXG4gICAgJy8nOiAyLFxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wZXJhdG9yczogT3BlcmF0b3JUb2tlbltdID0gWycrJywgJy0nLCAnKicsICcvJ107XG5cbiAgcHVibGljIGNhbGN1bGF0ZU1hdGhFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZywgdmFsdWVzOiBDb21wb25lbnRWYWx1ZU1vZGVsW10pOiBudW1iZXIge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlTWF0aEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGVTdHJpbmdDb25jYXRlbmF0aW9uKGV4cHJlc3Npb246IHN0cmluZywgdmFsdWVzOiBDb21wb25lbnRWYWx1ZU1vZGVsW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBleHByZXNzaW9uLnJlcGxhY2UoL3soPzxzeXN0ZW1OYW1lPlxcdyspKD86Oig/PGZvcm1hdD5bXn1dKykpP30vZywgKF9tYXRjaCwgc3lzdGVtTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlcy5maW5kKHggPT4geC5zeXNOYW1lID09PSBzeXN0ZW1OYW1lKTtcbiAgICAgIHJldHVybiB2YWx1ZT8udmFsdWU/LnRvU3RyaW5nPy4oKSA/PyAnJztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZU1hdGhFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZywgdmFsdWVzOiBDb21wb25lbnRWYWx1ZU1vZGVsW10pOiBudW1iZXIge1xuICAgIGNvbnN0IG9wZXJhdG9yU3RhY2s6IE9wZXJhdG9yVG9rZW5bXSA9IFtdO1xuICAgIGNvbnN0IG9wZXJhbmRTdGFjazogbnVtYmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hhclZhbHVlID0gZXhwcmVzc2lvbltpXTtcblxuICAgICAgaWYgKC9cXHMvLnRlc3QoY2hhclZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXJWYWx1ZSA9PT0gJ3snKSB7XG4gICAgICAgIGxldCBzeXNOYW1lT3BlcmFuZCA9ICcnO1xuICAgICAgICB3aGlsZSAoaSA8IGV4cHJlc3Npb24ubGVuZ3RoICYmIGV4cHJlc3Npb25baV0gIT09ICd9Jykge1xuICAgICAgICAgIHN5c05hbWVPcGVyYW5kICs9IGV4cHJlc3Npb25baV07XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHN5c05hbWVPcGVyYW5kICs9IGV4cHJlc3Npb25baV0gPz8gJyc7XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXROdW1iZXJWYWx1ZSh2YWx1ZXMsIHN5c05hbWVPcGVyYW5kKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgb3BlcmFuZFN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXJWYWx1ZSA9PT0gJygnKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZEV4cHJlc3Npb24gPSB0aGlzLl9nZXRFeHByZXNzaW9uQmV0d2VlblBhcmVudGhlc2VzKGV4cHJlc3Npb24sIGkpO1xuICAgICAgICBvcGVyYW5kU3RhY2sucHVzaCh0aGlzLl9jYWxjdWxhdGVNYXRoRXhwcmVzc2lvbihuZXN0ZWRFeHByZXNzaW9uLCB2YWx1ZXMpKTtcbiAgICAgICAgaSArPSBuZXN0ZWRFeHByZXNzaW9uLmxlbmd0aCArIDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNPcGVyYXRvcihjaGFyVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuX2FkZE9wZXJhdG9yKG9wZXJhdG9yU3RhY2ssIG9wZXJhbmRTdGFjaywgY2hhclZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgvXFxkLy50ZXN0KGNoYXJWYWx1ZSkpIHtcbiAgICAgICAgbGV0IG51bWJlciA9ICcnO1xuICAgICAgICB3aGlsZSAoaSA8IGV4cHJlc3Npb24ubGVuZ3RoICYmICgvW1xcZC5dLy50ZXN0KGV4cHJlc3Npb25baV0pKSkge1xuICAgICAgICAgIG51bWJlciArPSBleHByZXNzaW9uW2ldO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBpLS07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0TnVtYmVyVmFsdWUodmFsdWVzLCBudW1iZXIpO1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBvcGVyYW5kU3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoL1thLXpBLVpdLy50ZXN0KGNoYXJWYWx1ZSkpIHtcbiAgICAgICAgaSArPSB0aGlzLl9hZGRGdW5jdGlvblJlc3VsdChvcGVyYW5kU3RhY2ssIHZhbHVlcywgZXhwcmVzc2lvbiwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fY2FsY3VsYXRlQWxsKG9wZXJhbmRTdGFjaywgb3BlcmF0b3JTdGFjayk7XG5cbiAgICByZXR1cm4gb3BlcmFuZFN0YWNrLnBvcCgpID8/IDA7XG4gIH1cblxuICBwcml2YXRlIF9hZGRGdW5jdGlvblJlc3VsdChcbiAgICBvcGVyYW5kU3RhY2s6IG51bWJlcltdLFxuICAgIHZhbHVlczogQ29tcG9uZW50VmFsdWVNb2RlbFtdLFxuICAgIGV4cHJlc3Npb246IHN0cmluZyxcbiAgICBzdGFydEluZGV4OiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBpZHhFb2YgPSBleHByZXNzaW9uLmluZGV4T2YoJyknLCBzdGFydEluZGV4KTtcbiAgICBjb25zdCBvcGVyYW5kID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoc3RhcnRJbmRleCwgaWR4RW9mIC0gc3RhcnRJbmRleCArIDEpO1xuICAgIGNvbnN0IGxvd2VyT3BlcmFuZCA9IG9wZXJhbmQudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsb3dlck9wZXJhbmQuc3RhcnRzV2l0aCgncG93KCcpICYmIGxvd2VyT3BlcmFuZC5lbmRzV2l0aCgnKScpKSB7XG4gICAgICBjb25zdCBpbm5lckV4cHJlc3Npb24gPSBvcGVyYW5kLnN1YnN0cmluZyg0LCBvcGVyYW5kLmxlbmd0aCAtIDEpO1xuICAgICAgY29uc3QgaW5uZXJPcGVyYW5kcyA9IGlubmVyRXhwcmVzc2lvbi5zcGxpdCgnLCcpLm1hcCh4ID0+IHgudHJpbSgpKTtcbiAgICAgIGNvbnN0IGJhc2VWYWx1ZSA9IHRoaXMuX2dldE51bWJlclZhbHVlKHZhbHVlcywgaW5uZXJPcGVyYW5kc1swXSk7XG4gICAgICBjb25zdCBleHBvbmVudCA9IHRoaXMuX2dldE51bWJlclZhbHVlKHZhbHVlcywgaW5uZXJPcGVyYW5kc1sxXSk7XG5cbiAgICAgIGlmIChiYXNlVmFsdWUgPT09IG51bGwgfHwgZXhwb25lbnQgPT09IG51bGwpIHtcbiAgICAgICAgb3BlcmFuZFN0YWNrLnB1c2goMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcGVyYW5kU3RhY2sucHVzaChNYXRoLnBvdyhiYXNlVmFsdWUsIGV4cG9uZW50KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3BlcmFuZC5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIGlmIChsb3dlck9wZXJhbmQuc3RhcnRzV2l0aCgnc3FydCgnKSAmJiBsb3dlck9wZXJhbmQuZW5kc1dpdGgoJyknKSkge1xuICAgICAgY29uc3QgaW5uZXJFeHByZXNzaW9uID0gb3BlcmFuZC5zdWJzdHJpbmcoNSwgb3BlcmFuZC5sZW5ndGggLSAxKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0TnVtYmVyVmFsdWUodmFsdWVzLCBpbm5lckV4cHJlc3Npb24pO1xuICAgICAgb3BlcmFuZFN0YWNrLnB1c2godmFsdWUgPT09IG51bGwgPyAwIDogTWF0aC5zcXJ0KHZhbHVlKSk7XG4gICAgICByZXR1cm4gb3BlcmFuZC5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmdW5jdGlvbiBvcGVyYW5kJyk7XG4gIH1cblxuICBwcml2YXRlIF9hZGRPcGVyYXRvcihvcGVyYXRvclN0YWNrOiBPcGVyYXRvclRva2VuW10sIG9wZXJhbmRTdGFjazogbnVtYmVyW10sIG9wZXJhdG9yVG9rZW46IE9wZXJhdG9yVG9rZW4pIHtcbiAgICB3aGlsZSAoXG4gICAgICBvcGVyYXRvclN0YWNrLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuX2dldE9wZXJhdG9yUHJlY2VkZW5jZShvcGVyYXRvclRva2VuKSA8PSB0aGlzLl9nZXRPcGVyYXRvclByZWNlZGVuY2Uob3BlcmF0b3JTdGFja1tvcGVyYXRvclN0YWNrLmxlbmd0aCAtIDFdKVxuICAgICkge1xuICAgICAgY29uc3Qgb3BlcmFuZDIgPSBvcGVyYW5kU3RhY2sucG9wKCkgPz8gMDtcbiAgICAgIGNvbnN0IG9wZXJhbmQxID0gb3BlcmFuZFN0YWNrLnBvcCgpID8/IDA7XG4gICAgICBjb25zdCBvcGVyYXRvclRva2VuVG9BcHBseSA9IG9wZXJhdG9yU3RhY2sucG9wKCkgYXMgT3BlcmF0b3JUb2tlbjtcbiAgICAgIG9wZXJhbmRTdGFjay5wdXNoKHRoaXMuX2NhbGN1bGF0ZShvcGVyYW5kMSwgb3BlcmFuZDIsIG9wZXJhdG9yVG9rZW5Ub0FwcGx5KSk7XG4gICAgfVxuXG4gICAgb3BlcmF0b3JTdGFjay5wdXNoKG9wZXJhdG9yVG9rZW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlQWxsKG9wZXJhbmRTdGFjazogbnVtYmVyW10sIG9wZXJhdG9yU3RhY2s6IE9wZXJhdG9yVG9rZW5bXSkge1xuICAgIHdoaWxlIChvcGVyYXRvclN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG9wZXJhdG9yVG9rZW4gPSBvcGVyYXRvclN0YWNrLnBvcCgpIGFzIE9wZXJhdG9yVG9rZW47XG4gICAgICBjb25zdCBvcGVyYW5kMiA9IG9wZXJhbmRTdGFjay5wb3AoKSA/PyAwO1xuICAgICAgY29uc3Qgb3BlcmFuZDEgPSBvcGVyYW5kU3RhY2sucG9wKCkgPz8gMDtcbiAgICAgIG9wZXJhbmRTdGFjay5wdXNoKHRoaXMuX2NhbGN1bGF0ZShvcGVyYW5kMSwgb3BlcmFuZDIsIG9wZXJhdG9yVG9rZW4pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRPcGVyYXRvclByZWNlZGVuY2Uob3BlcmF0b3JUb2tlbjogT3BlcmF0b3JUb2tlbik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yUHJlY2VkZW5jZVtvcGVyYXRvclRva2VuXTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEV4cHJlc3Npb25CZXR3ZWVuUGFyZW50aGVzZXMoZXhwcmVzc2lvbjogc3RyaW5nLCBzdGFydEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCBsZXZlbCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBleHByZXNzaW9uLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbltpXSA9PT0gJygnKSB7XG4gICAgICAgIGxldmVsKys7XG4gICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb25baV0gPT09ICcpJykge1xuICAgICAgICBsZXZlbC0tO1xuICAgICAgICBpZiAobGV2ZWwgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5zdWJzdHJpbmcoc3RhcnRJbmRleCArIDEsIGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmJhbGFuY2VkIHBhcmVudGhlc2VzJyk7XG4gIH1cblxuICBwcml2YXRlIF9nZXROdW1iZXJWYWx1ZSh2YWx1ZXM6IENvbXBvbmVudFZhbHVlTW9kZWxbXSwgb3BlcmFuZDogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgY2xlYW5PcGVyYW5kID0gb3BlcmFuZC50cmltKCkucmVwbGFjZSgnLCcsICcuJykucmVwbGFjZSgvXlxce3xcXH0kL2csICcnKTtcbiAgICBjb25zdCB2YWwgPSB2YWx1ZXMuZmluZCh4ID0+IHguc3lzTmFtZSA9PT0gY2xlYW5PcGVyYW5kKTtcblxuICAgIGlmICh2YWwpIHtcbiAgICAgIGlmICh2YWwudmFsdWUgPT09IG51bGwgfHwgdmFsLnZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsLnZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihTdHJpbmcodmFsLnZhbHVlKS5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGFzTnVtYmVyID0gTnVtYmVyKGNsZWFuT3BlcmFuZCk7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShhc051bWJlcikpIHtcbiAgICAgIHJldHVybiBhc051bWJlcjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3BlcmFuZCAke29wZXJhbmR9YCk7XG4gIH1cblxuICBwcml2YXRlIF9jYWxjdWxhdGUob3BlcmFuZDE6IG51bWJlciwgb3BlcmFuZDI6IG51bWJlciwgb3BlcmF0b3JUb2tlbjogT3BlcmF0b3JUb2tlbik6IG51bWJlciB7XG4gICAgc3dpdGNoIChvcGVyYXRvclRva2VuKSB7XG4gICAgICBjYXNlICcrJzpcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQxICsgb3BlcmFuZDI7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQxIC0gb3BlcmFuZDI7XG4gICAgICBjYXNlICcqJzpcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQxICogb3BlcmFuZDI7XG4gICAgICBjYXNlICcvJzpcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQxIC8gb3BlcmFuZDI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3BlcmF0b3IgJHtvcGVyYXRvclRva2VufWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzT3BlcmF0b3IodG9rZW46IHN0cmluZyk6IHRva2VuIGlzIE9wZXJhdG9yVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcnMuaW5jbHVkZXModG9rZW4gYXMgT3BlcmF0b3JUb2tlbik7XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
1
  export * from './object-form.service';
2
2
  export * from './reference.service';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9vYmplY3QtZm9ybS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9yZWZlcmVuY2Uuc2VydmljZSc7Il19
3
+ export * from './formula-calculate.service';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29iamVjdC1mb3JtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWZlcmVuY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm11bGEtY2FsY3VsYXRlLnNlcnZpY2UnO1xuIl19