@myrtex-org/form 1.1.26 → 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.
- package/esm2022/lib/modules/object-form/components/elements/base/base-field/base-field.component.mjs +8 -2
- package/esm2022/lib/modules/object-form/components/elements/input/number/input-number.component.mjs +9 -3
- package/esm2022/lib/modules/object-form/components/elements/input/table/components/input-table-modal/input-table-modal.component.mjs +51 -6
- package/esm2022/lib/modules/object-form/components/elements/input/table/input-table.component.mjs +2 -20
- package/esm2022/lib/modules/object-form/factories/component-factory/component-factory.directive.mjs +23 -32
- package/esm2022/lib/modules/object-form/services/formula-calculate.service.mjs +180 -0
- package/esm2022/lib/modules/object-form/services/index.mjs +2 -1
- package/fesm2022/myrtex-org-form.mjs +263 -56
- package/fesm2022/myrtex-org-form.mjs.map +1 -1
- package/lib/modules/object-form/components/elements/input/number/input-number.component.d.ts +2 -0
- package/lib/modules/object-form/components/elements/input/table/components/input-table-modal/input-table-modal.component.d.ts +5 -1
- package/lib/modules/object-form/components/elements/input/table/input-table.component.d.ts +2 -2
- package/lib/modules/object-form/factories/component-factory/component-factory.directive.d.ts +2 -3
- package/lib/modules/object-form/services/formula-calculate.service.d.ts +19 -0
- package/lib/modules/object-form/services/index.d.ts +1 -0
- package/package.json +1 -1
package/esm2022/lib/modules/object-form/factories/component-factory/component-factory.directive.mjs
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
27
|
+
}
|
|
28
|
+
if (this.dynamicComponent) {
|
|
29
|
+
this.viewContainer.clear();
|
|
30
|
+
this.dynamicComponent = undefined;
|
|
31
|
+
}
|
|
36
32
|
this.dynamicComponent = this.viewContainer.createComponent(componentType);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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 }
|
|
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 }
|
|
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,
|
|
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
|
-
|
|
3
|
+
export * from './formula-calculate.service';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29iamVjdC1mb3JtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWZlcmVuY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm11bGEtY2FsY3VsYXRlLnNlcnZpY2UnO1xuIl19
|