@combeenation/3d-viewer 4.0.0-alpha9 → 4.0.0-beta4

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.
Files changed (105) hide show
  1. package/README.md +112 -111
  2. package/dist/lib-cjs/api/classes/animationInterface.d.ts +8 -8
  3. package/dist/lib-cjs/api/classes/animationInterface.js +1 -1
  4. package/dist/lib-cjs/api/classes/dottedPath.d.ts +79 -79
  5. package/dist/lib-cjs/api/classes/dottedPath.js +190 -190
  6. package/dist/lib-cjs/api/classes/element.d.ts +125 -130
  7. package/dist/lib-cjs/api/classes/element.js +682 -739
  8. package/dist/lib-cjs/api/classes/element.js.map +1 -1
  9. package/dist/lib-cjs/api/classes/elementParameterizable.d.ts +14 -14
  10. package/dist/lib-cjs/api/classes/elementParameterizable.js +134 -134
  11. package/dist/lib-cjs/api/classes/event.d.ts +312 -326
  12. package/dist/lib-cjs/api/classes/event.js +357 -371
  13. package/dist/lib-cjs/api/classes/event.js.map +1 -1
  14. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
  15. package/dist/lib-cjs/api/classes/eventBroadcaster.js +53 -53
  16. package/dist/lib-cjs/api/classes/parameter.d.ts +165 -259
  17. package/dist/lib-cjs/api/classes/parameter.js +267 -387
  18. package/dist/lib-cjs/api/classes/parameter.js.map +1 -1
  19. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
  20. package/dist/lib-cjs/api/classes/parameterObservable.js +126 -101
  21. package/dist/lib-cjs/api/classes/parameterObservable.js.map +1 -1
  22. package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -15
  23. package/dist/lib-cjs/api/classes/parameterizable.js +149 -149
  24. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +38 -38
  25. package/dist/lib-cjs/api/classes/placementAnimation.js +138 -138
  26. package/dist/lib-cjs/api/classes/variant.d.ts +190 -224
  27. package/dist/lib-cjs/api/classes/variant.js +873 -1137
  28. package/dist/lib-cjs/api/classes/variant.js.map +1 -1
  29. package/dist/lib-cjs/api/classes/variantInstance.d.ts +41 -45
  30. package/dist/lib-cjs/api/classes/variantInstance.js +98 -108
  31. package/dist/lib-cjs/api/classes/variantInstance.js.map +1 -1
  32. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -17
  33. package/dist/lib-cjs/api/classes/variantParameterizable.js +92 -92
  34. package/dist/lib-cjs/api/classes/viewer.d.ts +128 -131
  35. package/dist/lib-cjs/api/classes/viewer.js +486 -538
  36. package/dist/lib-cjs/api/classes/viewer.js.map +1 -1
  37. package/dist/lib-cjs/api/classes/viewerLight.d.ts +65 -66
  38. package/dist/lib-cjs/api/classes/viewerLight.js +322 -389
  39. package/dist/lib-cjs/api/classes/viewerLight.js.map +1 -1
  40. package/dist/lib-cjs/api/internal/debugViewer.d.ts +13 -13
  41. package/dist/lib-cjs/api/internal/debugViewer.js +87 -87
  42. package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
  43. package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
  44. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +6 -10
  45. package/dist/lib-cjs/api/internal/sceneSetup.js +227 -231
  46. package/dist/lib-cjs/api/internal/sceneSetup.js.map +1 -1
  47. package/dist/lib-cjs/api/manager/animationManager.d.ts +29 -29
  48. package/dist/lib-cjs/api/manager/animationManager.js +121 -121
  49. package/dist/lib-cjs/api/manager/sceneManager.d.ts +32 -32
  50. package/dist/lib-cjs/api/manager/sceneManager.js +132 -132
  51. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +90 -90
  52. package/dist/lib-cjs/api/manager/variantInstanceManager.js +321 -321
  53. package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
  54. package/dist/lib-cjs/api/store/specStorage.js +51 -51
  55. package/dist/lib-cjs/api/util/babylonHelper.d.ts +125 -175
  56. package/dist/lib-cjs/api/util/babylonHelper.js +368 -520
  57. package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
  58. package/dist/lib-cjs/api/util/globalTypes.d.ts +279 -321
  59. package/dist/lib-cjs/api/util/globalTypes.js +1 -1
  60. package/dist/lib-cjs/api/util/resourceHelper.d.ts +51 -26
  61. package/dist/lib-cjs/api/util/resourceHelper.js +243 -237
  62. package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
  63. package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -9
  64. package/dist/lib-cjs/api/util/stringHelper.js +25 -25
  65. package/dist/lib-cjs/buildinfo.json +3 -3
  66. package/dist/lib-cjs/index.d.ts +46 -48
  67. package/dist/lib-cjs/index.js +82 -86
  68. package/dist/lib-cjs/index.js.map +1 -1
  69. package/dist/webpack-stats.json +0 -0
  70. package/package.json +83 -83
  71. package/src/api/classes/animationInterface.ts +11 -11
  72. package/src/api/classes/dottedPath.ts +189 -189
  73. package/src/api/classes/element.ts +617 -635
  74. package/src/api/classes/{parameterizable.ts → elementParameterizable.ts} +78 -89
  75. package/src/api/classes/event.ts +355 -370
  76. package/src/api/classes/eventBroadcaster.ts +54 -54
  77. package/src/api/classes/parameter.ts +277 -408
  78. package/src/api/classes/parameterObservable.ts +121 -99
  79. package/src/api/classes/placementAnimation.ts +133 -133
  80. package/src/api/classes/variant.ts +670 -806
  81. package/src/api/classes/variantInstance.ts +81 -88
  82. package/src/api/classes/viewer.ts +421 -473
  83. package/src/api/internal/debugViewer.ts +81 -81
  84. package/src/api/internal/lensRendering.ts +10 -10
  85. package/src/api/internal/sceneSetup.ts +204 -194
  86. package/src/api/manager/animationManager.ts +116 -116
  87. package/src/api/manager/sceneManager.ts +105 -105
  88. package/src/api/manager/variantInstanceManager.ts +236 -236
  89. package/src/api/store/specStorage.ts +53 -53
  90. package/src/api/util/babylonHelper.ts +392 -553
  91. package/src/api/util/globalTypes.ts +318 -369
  92. package/src/api/util/resourceHelper.ts +187 -157
  93. package/src/buildinfo.json +2 -2
  94. package/src/commonjs.tsconfig.json +13 -13
  95. package/src/declaration.tsconfig.json +10 -10
  96. package/src/dev.ts +46 -44
  97. package/src/es6.tsconfig.json +13 -13
  98. package/src/index.ts +87 -91
  99. package/src/pagesconfig.json +57 -52
  100. package/src/tsconfig.json +43 -43
  101. package/src/tsconfig.types.json +9 -9
  102. package/src/types.d.ts +4 -4
  103. package/src/api/classes/variantParameterizable.ts +0 -73
  104. package/src/api/classes/viewerLight.ts +0 -330
  105. package/src/api/util/stringHelper.ts +0 -26
package/src/index.ts CHANGED
@@ -1,91 +1,87 @@
1
- /// <reference path="api/util/globalTypes.ts" />
2
-
3
- import { Animation as BabylonAnimation } from '@babylonjs/core/Animations/animation';
4
- import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera';
5
- import { Engine } from '@babylonjs/core/Engines/engine';
6
- import { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';
7
- import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight';
8
- import { Material } from '@babylonjs/core/Materials/material';
9
- import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
10
- import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
11
- import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
12
- import { DynamicTexture } from '@babylonjs/core/Materials/Textures/dynamicTexture';
13
- import { Texture } from '@babylonjs/core/Materials/Textures/texture';
14
- import { Color3, Color4 } from '@babylonjs/core/Maths/math.color';
15
- import { Vector3 } from '@babylonjs/core/Maths/math.vector';
16
- import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
17
- import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh';
18
- import { Mesh } from '@babylonjs/core/Meshes/mesh';
19
- import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
20
- import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
21
- import { Node } from '@babylonjs/core/node';
22
-
23
- /**
24
- * Without explicitly importing the "BoundingBoxRenderer", we're getting "scene.getBoundingBoxRenderer is undefined"
25
- * errors when creating HighlightLayer instances. Not sure why but those errors only happen when using the built
26
- * version of the viewer (e.g. when pulling it from NPM etc.)...
27
- */
28
- import '@babylonjs/core/Rendering/boundingBoxRenderer';
29
- import { Scene } from '@babylonjs/core/scene';
30
- import { Parameterizable } from './api/classes/parameterizable';
31
- import { VariantParameterizable } from './api/classes/variantParameterizable';
32
- import { EventEmitter } from 'eventemitter3';
33
- import { Element } from './api/classes/element';
34
- import { emitter, Event } from './api/classes/event';
35
- import { EventBroadcaster } from './api/classes/eventBroadcaster';
36
- import { Parameter } from './api/classes/parameter';
37
- import { ParameterObservable } from './api/classes/parameterObservable';
38
- import { PlacementAnimation } from './api/classes/placementAnimation';
39
- import { Variant } from './api/classes/variant';
40
- import { VariantInstance } from './api/classes/variantInstance';
41
- import { Viewer } from './api/classes/viewer';
42
- import { ViewerLight } from './api/classes/viewerLight';
43
- import { AnimationManager } from './api/manager/animationManager';
44
- import { SceneManager } from './api/manager/sceneManager';
45
- import { VariantInstanceManager } from './api/manager/variantInstanceManager';
46
- import * as BabylonHelper from './api/util/babylonHelper';
47
-
48
- /**
49
- * Expose some frequently used babylon modules by our consumers.
50
- */
51
- export {
52
- AnimationManager,
53
- Variant,
54
- VariantInstanceManager,
55
- Viewer,
56
- ParameterObservable,
57
- Parameterizable,
58
- VariantParameterizable,
59
- ViewerLight,
60
- emitter as Emitter,
61
- EventEmitter,
62
- Event,
63
- Parameter,
64
- VariantInstance,
65
- Color3,
66
- Color4,
67
- Vector3,
68
- AbstractMesh,
69
- InstancedMesh,
70
- Mesh,
71
- TransformNode,
72
- Node,
73
- Material,
74
- PBRMaterial,
75
- StandardMaterial,
76
- Scene,
77
- Engine,
78
- ArcRotateCamera,
79
- DynamicTexture,
80
- CubeTexture,
81
- MeshBuilder,
82
- Texture,
83
- BabylonAnimation,
84
- HemisphericLight,
85
- DirectionalLight,
86
- Element,
87
- EventBroadcaster,
88
- SceneManager,
89
- PlacementAnimation,
90
- BabylonHelper,
91
- };
1
+ /// <reference path="api/util/globalTypes.ts" />
2
+
3
+ import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera';
4
+ import { Engine } from '@babylonjs/core/Engines/engine';
5
+ import { Material } from '@babylonjs/core/Materials/material';
6
+ import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
7
+ import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
8
+ import { DynamicTexture } from '@babylonjs/core/Materials/Textures/dynamicTexture';
9
+ import { Color3, Color4 } from '@babylonjs/core/Maths/math.color';
10
+ import { Vector3 } from '@babylonjs/core/Maths/math.vector';
11
+ import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
12
+ import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh';
13
+ import { Mesh } from '@babylonjs/core/Meshes/mesh';
14
+ import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
15
+ import { Node } from '@babylonjs/core/node';
16
+ import { Scene } from '@babylonjs/core/scene';
17
+ import { VariantInstance } from './api/classes/variantInstance';
18
+ import { Viewer } from './api/classes/viewer';
19
+ import { Event, emitter } from './api/classes/event';
20
+ import { EventEmitter } from 'eventemitter3';
21
+ import { Parameter } from './api/classes/parameter';
22
+ import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
23
+ import { Animation as BabylonAnimation } from '@babylonjs/core/Animations/animation';
24
+ import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
25
+ import { Texture } from '@babylonjs/core/Materials/Textures/texture';
26
+ import { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';
27
+ import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight';
28
+ import { Variant } from './api/classes/variant';
29
+ import { ParameterObservable } from './api/classes/parameterObservable';
30
+ import { ElementParameterizable } from './api/classes/elementParameterizable';
31
+ import { Element } from './api/classes/element';
32
+ import { VariantInstanceManager } from './api/manager/variantInstanceManager';
33
+ import { AnimationManager } from './api/manager/animationManager';
34
+ import { EventBroadcaster } from './api/classes/eventBroadcaster';
35
+ import { SceneManager } from './api/manager/sceneManager';
36
+ import { PlacementAnimation } from './api/classes/placementAnimation';
37
+ import * as BabylonHelper from './api/util/babylonHelper';
38
+
39
+ /**
40
+ * Without explicitly importing the "BoundingBoxRenderer", we're getting "scene.getBoundingBoxRenderer is undefined"
41
+ * errors when creating HighlightLayer instances. Not sure why but those errors only happen when using the built
42
+ * version of the viewer (e.g. when pulling it from NPM etc.)...
43
+ */
44
+ import '@babylonjs/core/Rendering/boundingBoxRenderer';
45
+
46
+ /**
47
+ * Expose some frequently used babylon modules by our consumers.
48
+ */
49
+ export {
50
+ AnimationManager,
51
+ Variant,
52
+ VariantInstanceManager,
53
+ Viewer,
54
+ ParameterObservable,
55
+ ElementParameterizable,
56
+ emitter as Emitter,
57
+ EventEmitter,
58
+ Event,
59
+ Parameter,
60
+ VariantInstance,
61
+ Color3,
62
+ Color4,
63
+ Vector3,
64
+ AbstractMesh,
65
+ InstancedMesh,
66
+ Mesh,
67
+ TransformNode,
68
+ Node,
69
+ Material,
70
+ PBRMaterial,
71
+ StandardMaterial,
72
+ Scene,
73
+ Engine,
74
+ ArcRotateCamera,
75
+ DynamicTexture,
76
+ CubeTexture,
77
+ MeshBuilder,
78
+ Texture,
79
+ BabylonAnimation,
80
+ HemisphericLight,
81
+ DirectionalLight,
82
+ Element,
83
+ EventBroadcaster,
84
+ SceneManager,
85
+ PlacementAnimation,
86
+ BabylonHelper,
87
+ };
@@ -1,52 +1,57 @@
1
- {
2
- "groups": [
3
- {
4
- "title": "Release Notes",
5
- "pages": [
6
- {
7
- "title": "Releases",
8
- "source": "./doc/release-notes/releases.md",
9
- "children": [
10
- {
11
- "title": "Version 1.1.2",
12
- "source": "./doc/release-notes/version-details/1-1-2.md"
13
- },
14
- {
15
- "title": "Version 1.2.0",
16
- "source": "./doc/release-notes/version-details/1-2-0.md"
17
- },
18
- {
19
- "title": "Version 2.0.0",
20
- "source": "./doc/release-notes/version-details/2-0-0.md"
21
- },
22
- {
23
- "title": "Version 2.1.0",
24
- "source": "./doc/release-notes/version-details/2-1-0.md"
25
- }
26
- ]
27
- }
28
- ]
29
- },
30
- {
31
- "title": "Documentation",
32
- "pages": [
33
- {
34
- "title": "Specification",
35
- "source": "./doc/Specification.md"
36
- },
37
- {
38
- "title": "Parameters",
39
- "source": "./doc/Parameters.md"
40
- },
41
- {
42
- "title": "ViewerLights",
43
- "source": "./doc/ViewerLights.md"
44
- },
45
- {
46
- "title": "Paintables",
47
- "source": "./doc/Paintables.md"
48
- }
49
- ]
50
- }
51
- ]
52
- }
1
+ {
2
+ "groups": [
3
+ {
4
+ "title": "Release Notes",
5
+ "pages": [
6
+ {
7
+ "title": "Releases",
8
+ "source": "./doc/release-notes/releases.md",
9
+ "children": [
10
+ {
11
+ "title": "Version 1.1.2",
12
+ "source": "./doc/release-notes/version-details/1-1-2.md"
13
+ },
14
+ {
15
+ "title": "Version 1.2.0",
16
+ "source": "./doc/release-notes/version-details/1-2-0.md"
17
+ },
18
+ {
19
+ "title": "Version 2.0.0",
20
+ "source": "./doc/release-notes/version-details/2-0-0.md"
21
+ },
22
+ {
23
+ "title": "Version 2.1.0",
24
+ "source": "./doc/release-notes/version-details/2-1-0.md"
25
+ }
26
+ ]
27
+ }
28
+ ]
29
+ },
30
+ {
31
+ "title": "Documentation",
32
+ "pages": [
33
+ {
34
+ "title": "Specification",
35
+ "source": "./doc/documentation/Specification.md"
36
+ },
37
+ {
38
+ "title": "Parameters",
39
+ "source": "./doc/documentation/Parameters.md"
40
+ },
41
+ {
42
+ "title": "Paintables",
43
+ "source": "./doc/documentation/Paintables.md"
44
+ }
45
+ ]
46
+ },
47
+ {
48
+ "title": "Best Practice",
49
+ "pages": [
50
+ {
51
+ "title": "How to change custom material properties",
52
+ "source": "./doc/best-practice/Custom-material-properties.md"
53
+ }
54
+ ]
55
+ }
56
+ ]
57
+ }
package/src/tsconfig.json CHANGED
@@ -1,43 +1,43 @@
1
- {
2
- "buildOnSave": false,
3
- "compileOnSave": false,
4
- "exclude": [
5
- "dist"
6
- ],
7
- "compilerOptions": {
8
- "module": "es2015",
9
- "moduleResolution": "node",
10
- "target": "es5",
11
- "removeComments": false,
12
- "preserveConstEnums": true,
13
- "sourceMap": true,
14
- "skipLibCheck": true,
15
- "strict": true,
16
- "noFallthroughCasesInSwitch": true,
17
- "baseUrl": ".",
18
- "importHelpers": true,
19
- "resolveJsonModule": true,
20
- "lib": [
21
- "es6",
22
- "dom"
23
- ]
24
- },
25
- "typedocOptions": {
26
- "name": "Combeenation 3D viewer",
27
- "entryPoints": [
28
- "src/index.ts",
29
- "src/api/util/globalTypes.ts",
30
- ],
31
- "exclude": [
32
- "src/dev.ts",
33
- "assets/"
34
- ],
35
- "excludeInternal": true,
36
- "excludePrivate": true,
37
- "excludeProtected": true,
38
- "listInvalidSymbolLinks": true,
39
- "out": "docs",
40
- "pages": "src/pagesconfig.json",
41
- "theme": "doc/cbn-docs-theme"
42
- }
43
- }
1
+ {
2
+ "buildOnSave": false,
3
+ "compileOnSave": false,
4
+ "exclude": [
5
+ "dist"
6
+ ],
7
+ "compilerOptions": {
8
+ "module": "es2015",
9
+ "moduleResolution": "node",
10
+ "target": "es5",
11
+ "removeComments": false,
12
+ "preserveConstEnums": true,
13
+ "sourceMap": true,
14
+ "skipLibCheck": true,
15
+ "strict": true,
16
+ "noFallthroughCasesInSwitch": true,
17
+ "baseUrl": ".",
18
+ "importHelpers": true,
19
+ "resolveJsonModule": true,
20
+ "lib": [
21
+ "es6",
22
+ "dom"
23
+ ]
24
+ },
25
+ "typedocOptions": {
26
+ "name": "Combeenation 3D viewer",
27
+ "entryPoints": [
28
+ "src/index.ts",
29
+ "src/api/util/globalTypes.ts",
30
+ ],
31
+ "exclude": [
32
+ "src/dev.ts",
33
+ "assets/"
34
+ ],
35
+ "excludeInternal": true,
36
+ "excludePrivate": true,
37
+ "excludeProtected": true,
38
+ "listInvalidSymbolLinks": true,
39
+ "out": "docs",
40
+ "pages": "src/pagesconfig.json",
41
+ "theme": "doc/cbn-docs-theme"
42
+ }
43
+ }
@@ -1,10 +1,10 @@
1
- {
2
- "extends": "./tsconfig",
3
- "exclude": [
4
- ],
5
- "compilerOptions": {
6
- "declaration": true,
7
- "noEmit": false,
8
- "emitDeclarationOnly": true
9
- }
1
+ {
2
+ "extends": "./tsconfig",
3
+ "exclude": [
4
+ ],
5
+ "compilerOptions": {
6
+ "declaration": true,
7
+ "noEmit": false,
8
+ "emitDeclarationOnly": true
9
+ }
10
10
  }
package/src/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- /** @ignore **/
2
- declare let IS_PRODUCTION: boolean;
3
- declare let VERSION_INFORMATION: string;
4
-
1
+ /** @ignore **/
2
+ declare let IS_PRODUCTION: boolean;
3
+ declare let VERSION_INFORMATION: string;
4
+
@@ -1,73 +0,0 @@
1
- import { DottedPath } from './../classes/dottedPath';
2
- import { Event } from './../classes/event';
3
- import { Parameterizable } from './../classes/parameterizable';
4
- import { Variant } from './../classes/variant';
5
- import { mergeMaps } from './../util/resourceHelper';
6
- import { camelToSnakeCase } from './../util/stringHelper';
7
- import { cloneDeep, concat, get, merge } from 'lodash-es';
8
-
9
- export abstract class VariantParameterizable extends Parameterizable {
10
-
11
- protected readonly _parameterObservers: Map<string, ParameterObserver[]> = new Map();
12
-
13
- protected constructor( public readonly variant: Variant,
14
- public readonly name: string ) {
15
- super();
16
- }
17
-
18
- /**
19
- * Gets the inherited parameters from the {@link Variant} with cleaned {@link Parameterizable} prefix.
20
- */
21
- get inheritedParameters(): ParameterBag {
22
- const parameterBag: ParameterBag = {};
23
- for( const parameter in this.variant.inheritedParameters ) {
24
- const dpp = DottedPath.create( parameter );
25
- if( dpp.firstPart !== this.name ) {
26
- continue;
27
- }
28
- dpp.shiftPart();
29
- parameterBag[dpp.path] = this.variant.inheritedParameters[parameter];
30
- }
31
- return parameterBag;
32
- }
33
-
34
- /**
35
- * Places the given {@link ParameterBag} in the {@link VariantParameterizable}'s parameters, replaces all patterns in the
36
- * {@link StructureJson} and broadcasts all {@link ParameterObserver}s.
37
- */
38
- public async commitParameters( parameters?: ParameterBag ): Promise<VariantParameterizable> {
39
- if( !parameters ) {
40
- parameters = {};
41
- }
42
- const oldParameters = cloneDeep( this.parameters );
43
- merge( this.parameters, parameters );
44
- // handle parameter observers
45
- let observerPromises: Promise<void | ParameterObserver>[] = [];
46
- for( const parameter in this.parameters ) {
47
- const oldParameterValue = oldParameters[parameter];
48
- const newParameterValue = this.parameters[parameter];
49
- this.variant.assertParameter( this.variant.inheritedParameterDeclaration, parameter, newParameterValue );
50
- if( oldParameterValue === newParameterValue ) {
51
- continue;
52
- }
53
- // parameter changed
54
- const parameterObservers = mergeMaps( this._parameterObservers, this.parameterObservers );
55
- if( parameterObservers.has( parameter ) ) {
56
- const observers = parameterObservers.get( parameter )!;
57
- observerPromises = concat( observerPromises, observers.map( observer => {
58
- const observerResult = observer( this, oldParameterValue, newParameterValue );
59
- const observerPromise = Promise.resolve( observerResult );
60
- observerPromise.then( () => {
61
- const clsName = camelToSnakeCase( this.constructor.name ).toUpperCase();
62
- this.broadcastEvent( get( Event, clsName + '_PARAMETER_COMMITTED' ),
63
- this, parameter, oldParameterValue, newParameterValue );
64
- } );
65
- return observerPromise;
66
- } ) );
67
- }
68
- }
69
- await Promise.all( observerPromises );
70
- return this;
71
- }
72
-
73
- }