@combeenation/3d-viewer 6.0.0 → 6.1.0-beta2

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 (189) hide show
  1. package/README.md +111 -111
  2. package/dist/lib-cjs/api/classes/animationInterface.d.ts +8 -8
  3. package/dist/lib-cjs/api/classes/animationInterface.js +2 -2
  4. package/dist/lib-cjs/api/classes/dottedPath.d.ts +79 -79
  5. package/dist/lib-cjs/api/classes/dottedPath.js +166 -166
  6. package/dist/lib-cjs/api/classes/element.d.ts +149 -149
  7. package/dist/lib-cjs/api/classes/element.js +669 -669
  8. package/dist/lib-cjs/api/classes/event.d.ts +342 -326
  9. package/dist/lib-cjs/api/classes/event.js +365 -349
  10. package/dist/lib-cjs/api/classes/event.js.map +1 -1
  11. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
  12. package/dist/lib-cjs/api/classes/eventBroadcaster.js +49 -49
  13. package/dist/lib-cjs/api/classes/parameter.d.ts +339 -339
  14. package/dist/lib-cjs/api/classes/parameter.js +464 -464
  15. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
  16. package/dist/lib-cjs/api/classes/parameterObservable.js +97 -97
  17. package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -15
  18. package/dist/lib-cjs/api/classes/parameterizable.js +102 -102
  19. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +45 -45
  20. package/dist/lib-cjs/api/classes/placementAnimation.js +176 -176
  21. package/dist/lib-cjs/api/classes/variant.d.ts +234 -234
  22. package/dist/lib-cjs/api/classes/variant.js +836 -836
  23. package/dist/lib-cjs/api/classes/variantInstance.d.ts +44 -44
  24. package/dist/lib-cjs/api/classes/variantInstance.js +105 -105
  25. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -17
  26. package/dist/lib-cjs/api/classes/variantParameterizable.js +88 -88
  27. package/dist/lib-cjs/api/classes/viewer.d.ts +187 -189
  28. package/dist/lib-cjs/api/classes/viewer.js +594 -594
  29. package/dist/lib-cjs/api/classes/viewer.js.map +1 -1
  30. package/dist/lib-cjs/api/classes/viewerLight.d.ts +66 -66
  31. package/dist/lib-cjs/api/classes/viewerLight.js +348 -348
  32. package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
  33. package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
  34. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +13 -13
  35. package/dist/lib-cjs/api/internal/sceneSetup.js +226 -226
  36. package/dist/lib-cjs/api/manager/animationManager.d.ts +30 -30
  37. package/dist/lib-cjs/api/manager/animationManager.js +126 -126
  38. package/dist/lib-cjs/api/manager/gltfExportManager.d.ts +78 -65
  39. package/dist/lib-cjs/api/manager/gltfExportManager.js +241 -197
  40. package/dist/lib-cjs/api/manager/gltfExportManager.js.map +1 -1
  41. package/dist/lib-cjs/api/manager/sceneManager.d.ts +33 -31
  42. package/dist/lib-cjs/api/manager/sceneManager.js +130 -127
  43. package/dist/lib-cjs/api/manager/sceneManager.js.map +1 -1
  44. package/dist/lib-cjs/api/manager/textureLoadManager.d.ts +22 -0
  45. package/dist/lib-cjs/api/manager/textureLoadManager.js +98 -0
  46. package/dist/lib-cjs/api/manager/textureLoadManager.js.map +1 -0
  47. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +92 -92
  48. package/dist/lib-cjs/api/manager/variantInstanceManager.js +260 -260
  49. package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
  50. package/dist/lib-cjs/api/store/specStorage.js +50 -50
  51. package/dist/lib-cjs/api/util/babylonHelper.d.ts +183 -174
  52. package/dist/lib-cjs/api/util/babylonHelper.js +596 -585
  53. package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
  54. package/dist/lib-cjs/api/util/globalTypes.d.ts +383 -370
  55. package/dist/lib-cjs/api/util/globalTypes.js +1 -1
  56. package/dist/lib-cjs/api/util/resourceHelper.d.ts +58 -58
  57. package/dist/lib-cjs/api/util/resourceHelper.js +203 -203
  58. package/dist/lib-cjs/api/util/sceneLoaderHelper.d.ts +42 -35
  59. package/dist/lib-cjs/api/util/sceneLoaderHelper.js +139 -139
  60. package/dist/lib-cjs/api/util/sceneLoaderHelper.js.map +1 -1
  61. package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -9
  62. package/dist/lib-cjs/api/util/stringHelper.js +25 -25
  63. package/dist/lib-cjs/api/util/structureHelper.d.ts +9 -9
  64. package/dist/lib-cjs/api/util/structureHelper.js +48 -48
  65. package/dist/lib-cjs/buildinfo.json +3 -3
  66. package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
  67. package/dist/lib-cjs/index.d.ts +51 -51
  68. package/dist/lib-cjs/index.js +110 -110
  69. package/dist/webpack-stats.json +0 -0
  70. package/package.json +79 -79
  71. package/src/api/classes/animationInterface.ts +10 -10
  72. package/src/api/classes/dottedPath.ts +181 -181
  73. package/src/api/classes/element.ts +717 -717
  74. package/src/api/classes/event.ts +385 -367
  75. package/src/api/classes/eventBroadcaster.ts +52 -52
  76. package/src/api/classes/parameter.ts +497 -497
  77. package/src/api/classes/parameterObservable.ts +100 -100
  78. package/src/api/classes/parameterizable.ts +87 -87
  79. package/src/api/classes/placementAnimation.ts +162 -162
  80. package/src/api/classes/variant.ts +904 -904
  81. package/src/api/classes/variantInstance.ts +97 -97
  82. package/src/api/classes/variantParameterizable.ts +85 -85
  83. package/src/api/classes/viewer.ts +672 -670
  84. package/src/api/classes/viewerLight.ts +339 -339
  85. package/src/api/internal/debugViewer.ts +90 -90
  86. package/src/api/internal/lensRendering.ts +9 -9
  87. package/src/api/internal/sceneSetup.ts +205 -205
  88. package/src/api/manager/animationManager.ts +143 -143
  89. package/src/api/manager/gltfExportManager.ts +236 -192
  90. package/src/api/manager/sceneManager.ts +132 -127
  91. package/src/api/manager/textureLoadManager.ts +95 -0
  92. package/src/api/manager/variantInstanceManager.ts +265 -265
  93. package/src/api/store/specStorage.ts +51 -51
  94. package/src/api/util/babylonHelper.ts +658 -645
  95. package/src/api/util/globalTypes.ts +432 -417
  96. package/src/api/util/resourceHelper.ts +191 -191
  97. package/src/api/util/sceneLoaderHelper.ts +137 -144
  98. package/src/api/util/stringHelper.ts +23 -23
  99. package/src/api/util/structureHelper.ts +49 -49
  100. package/src/buildinfo.json +3 -3
  101. package/src/dev.ts +61 -61
  102. package/src/index.ts +96 -96
  103. package/src/types.d.ts +28 -28
  104. package/dist/lib-es6/api/classes/animationInterface.d.ts +0 -8
  105. package/dist/lib-es6/api/classes/animationInterface.js +0 -2
  106. package/dist/lib-es6/api/classes/animationInterface.js.map +0 -1
  107. package/dist/lib-es6/api/classes/dottedPath.d.ts +0 -79
  108. package/dist/lib-es6/api/classes/dottedPath.js +0 -163
  109. package/dist/lib-es6/api/classes/dottedPath.js.map +0 -1
  110. package/dist/lib-es6/api/classes/element.d.ts +0 -149
  111. package/dist/lib-es6/api/classes/element.js +0 -666
  112. package/dist/lib-es6/api/classes/element.js.map +0 -1
  113. package/dist/lib-es6/api/classes/event.d.ts +0 -326
  114. package/dist/lib-es6/api/classes/event.js +0 -346
  115. package/dist/lib-es6/api/classes/event.js.map +0 -1
  116. package/dist/lib-es6/api/classes/eventBroadcaster.d.ts +0 -26
  117. package/dist/lib-es6/api/classes/eventBroadcaster.js +0 -43
  118. package/dist/lib-es6/api/classes/eventBroadcaster.js.map +0 -1
  119. package/dist/lib-es6/api/classes/parameter.d.ts +0 -339
  120. package/dist/lib-es6/api/classes/parameter.js +0 -461
  121. package/dist/lib-es6/api/classes/parameter.js.map +0 -1
  122. package/dist/lib-es6/api/classes/parameterObservable.d.ts +0 -36
  123. package/dist/lib-es6/api/classes/parameterObservable.js +0 -94
  124. package/dist/lib-es6/api/classes/parameterObservable.js.map +0 -1
  125. package/dist/lib-es6/api/classes/parameterizable.d.ts +0 -15
  126. package/dist/lib-es6/api/classes/parameterizable.js +0 -99
  127. package/dist/lib-es6/api/classes/parameterizable.js.map +0 -1
  128. package/dist/lib-es6/api/classes/placementAnimation.d.ts +0 -45
  129. package/dist/lib-es6/api/classes/placementAnimation.js +0 -173
  130. package/dist/lib-es6/api/classes/placementAnimation.js.map +0 -1
  131. package/dist/lib-es6/api/classes/variant.d.ts +0 -234
  132. package/dist/lib-es6/api/classes/variant.js +0 -833
  133. package/dist/lib-es6/api/classes/variant.js.map +0 -1
  134. package/dist/lib-es6/api/classes/variantInstance.d.ts +0 -44
  135. package/dist/lib-es6/api/classes/variantInstance.js +0 -102
  136. package/dist/lib-es6/api/classes/variantInstance.js.map +0 -1
  137. package/dist/lib-es6/api/classes/variantParameterizable.d.ts +0 -17
  138. package/dist/lib-es6/api/classes/variantParameterizable.js +0 -85
  139. package/dist/lib-es6/api/classes/variantParameterizable.js.map +0 -1
  140. package/dist/lib-es6/api/classes/viewer.d.ts +0 -189
  141. package/dist/lib-es6/api/classes/viewer.js +0 -588
  142. package/dist/lib-es6/api/classes/viewer.js.map +0 -1
  143. package/dist/lib-es6/api/classes/viewerLight.d.ts +0 -66
  144. package/dist/lib-es6/api/classes/viewerLight.js +0 -322
  145. package/dist/lib-es6/api/classes/viewerLight.js.map +0 -1
  146. package/dist/lib-es6/api/internal/lensRendering.d.ts +0 -8
  147. package/dist/lib-es6/api/internal/lensRendering.js +0 -9
  148. package/dist/lib-es6/api/internal/lensRendering.js.map +0 -1
  149. package/dist/lib-es6/api/internal/sceneSetup.d.ts +0 -13
  150. package/dist/lib-es6/api/internal/sceneSetup.js +0 -199
  151. package/dist/lib-es6/api/internal/sceneSetup.js.map +0 -1
  152. package/dist/lib-es6/api/manager/animationManager.d.ts +0 -30
  153. package/dist/lib-es6/api/manager/animationManager.js +0 -123
  154. package/dist/lib-es6/api/manager/animationManager.js.map +0 -1
  155. package/dist/lib-es6/api/manager/gltfExportManager.d.ts +0 -65
  156. package/dist/lib-es6/api/manager/gltfExportManager.js +0 -194
  157. package/dist/lib-es6/api/manager/gltfExportManager.js.map +0 -1
  158. package/dist/lib-es6/api/manager/sceneManager.d.ts +0 -31
  159. package/dist/lib-es6/api/manager/sceneManager.js +0 -124
  160. package/dist/lib-es6/api/manager/sceneManager.js.map +0 -1
  161. package/dist/lib-es6/api/manager/variantInstanceManager.d.ts +0 -92
  162. package/dist/lib-es6/api/manager/variantInstanceManager.js +0 -257
  163. package/dist/lib-es6/api/manager/variantInstanceManager.js.map +0 -1
  164. package/dist/lib-es6/api/store/specStorage.d.ts +0 -24
  165. package/dist/lib-es6/api/store/specStorage.js +0 -47
  166. package/dist/lib-es6/api/store/specStorage.js.map +0 -1
  167. package/dist/lib-es6/api/util/babylonHelper.d.ts +0 -174
  168. package/dist/lib-es6/api/util/babylonHelper.js +0 -556
  169. package/dist/lib-es6/api/util/babylonHelper.js.map +0 -1
  170. package/dist/lib-es6/api/util/globalTypes.d.ts +0 -370
  171. package/dist/lib-es6/api/util/globalTypes.js +0 -2
  172. package/dist/lib-es6/api/util/globalTypes.js.map +0 -1
  173. package/dist/lib-es6/api/util/resourceHelper.d.ts +0 -58
  174. package/dist/lib-es6/api/util/resourceHelper.js +0 -194
  175. package/dist/lib-es6/api/util/resourceHelper.js.map +0 -1
  176. package/dist/lib-es6/api/util/sceneLoaderHelper.d.ts +0 -35
  177. package/dist/lib-es6/api/util/sceneLoaderHelper.js +0 -130
  178. package/dist/lib-es6/api/util/sceneLoaderHelper.js.map +0 -1
  179. package/dist/lib-es6/api/util/stringHelper.d.ts +0 -9
  180. package/dist/lib-es6/api/util/stringHelper.js +0 -22
  181. package/dist/lib-es6/api/util/stringHelper.js.map +0 -1
  182. package/dist/lib-es6/api/util/structureHelper.d.ts +0 -9
  183. package/dist/lib-es6/api/util/structureHelper.js +0 -46
  184. package/dist/lib-es6/api/util/structureHelper.js.map +0 -1
  185. package/dist/lib-es6/buildinfo.json +0 -3
  186. package/dist/lib-es6/es6.tsconfig.tsbuildinfo +0 -1
  187. package/dist/lib-es6/index.d.ts +0 -51
  188. package/dist/lib-es6/index.js +0 -49
  189. package/dist/lib-es6/index.js.map +0 -1
@@ -1,97 +1,97 @@
1
- import { Element } from './element';
2
- import { EventBroadcaster } from './eventBroadcaster';
3
- import { ParameterObservable } from './parameterObservable';
4
- import { Variant } from './variant';
5
- import { ViewerLight } from './viewerLight';
6
- import { Mesh } from '@babylonjs/core/Meshes/mesh';
7
-
8
- /**
9
- * Class VariantInstance.
10
- */
11
- export class VariantInstance extends EventBroadcaster {
12
- /**
13
- * Constructor
14
- */
15
- public constructor(public variant: Variant, public name: string) {
16
- super();
17
- }
18
-
19
- /**
20
- * WORK IN PROGRESS
21
- */
22
- /*
23
- public translate(
24
- joint: DottedPathArgument,
25
- variantInstance: VariantInstance,
26
- variantInstanceJoint: DottedPathArgument
27
- ): VariantInstance {
28
- joint = DottedPath.create( joint );
29
- variantInstanceJoint = DottedPath.create( variantInstanceJoint );
30
- const jointNode = variantInstance.variant.getNode( joint.path );
31
- const variantInstanceJointNode = variantInstance.variant.getNode( variantInstanceJoint.path );
32
- const differenceVector = variantInstanceJointNode.getAbsolutePosition().subtract( jointNode.getAbsolutePosition() );
33
- const differenceVectorRotation = variantInstanceJointNode.rotation.subtract( jointNode.rotation );
34
-
35
- console.log( variantInstanceJointNode.rotationQuaternion, 'ROTATION' );
36
-
37
- this.variant.nodes.forEach( node => {
38
- node.translate( Axis.X, differenceVector.x, Space.WORLD );
39
- node.translate( Axis.Y, differenceVector.y, Space.WORLD );
40
- node.translate( Axis.Z, differenceVector.z, Space.WORLD );
41
-
42
- node.rotateAround( Axis.Y, differenceVectorRotation, 20 );
43
- // node.rotate(Axis.Y, differenceVectorRotation.y, Space.WORLD );
44
- // node.rotate(Axis.Z, differenceVectorRotation.z, Space.WORLD );
45
- } );
46
- return this;
47
- }
48
- */
49
-
50
- /**
51
- * A proxy for {@link Variant.getElement}.
52
- */
53
- public async getElement(dottedPath: DottedPathArgument): Promise<Element> {
54
- return this.variant.getElement(dottedPath);
55
- }
56
-
57
- /**
58
- * A proxy for {@link Variant.getViewerLight}.
59
- */
60
- public async getViewerLight(dottedPath: DottedPathArgument): Promise<ViewerLight> {
61
- return this.variant.getViewerLight(dottedPath);
62
- }
63
-
64
- /**
65
- * A proxy for {@link Variant.getNode}.
66
- */
67
- public async getNode(
68
- elementDottedPath: DottedPathArgument,
69
- nodeDottedPath: DottedPathArgument
70
- ): Promise<TransformNode> {
71
- return this.variant.getNode(elementDottedPath, nodeDottedPath);
72
- }
73
-
74
- /**
75
- * A proxy for {@link Variant.getMesh}.
76
- */
77
- public async getMesh(
78
- elementDottedPath: DottedPathArgument,
79
- meshDottedPath: DottedPathArgument
80
- ): Promise<Mesh | null> {
81
- return this.variant.getMesh(elementDottedPath, meshDottedPath);
82
- }
83
-
84
- /**
85
- * A proxy for {@link Variant.commitParameters}.
86
- */
87
- public async commitParameters(parameters?: ParameterBag): Promise<Variant> {
88
- return this.variant.commitParameters(parameters);
89
- }
90
-
91
- /**
92
- * A proxy for {@link ParameterObservable.commitParameter}.
93
- */
94
- public async commitParameter(parameter: string, value: ParameterValue): Promise<ParameterObservable> {
95
- return this.variant.commitParameter(parameter, value);
96
- }
97
- }
1
+ import { Element } from './element';
2
+ import { EventBroadcaster } from './eventBroadcaster';
3
+ import { ParameterObservable } from './parameterObservable';
4
+ import { Variant } from './variant';
5
+ import { ViewerLight } from './viewerLight';
6
+ import { Mesh } from '@babylonjs/core/Meshes/mesh';
7
+
8
+ /**
9
+ * Class VariantInstance.
10
+ */
11
+ export class VariantInstance extends EventBroadcaster {
12
+ /**
13
+ * Constructor
14
+ */
15
+ public constructor(public variant: Variant, public name: string) {
16
+ super();
17
+ }
18
+
19
+ /**
20
+ * WORK IN PROGRESS
21
+ */
22
+ /*
23
+ public translate(
24
+ joint: DottedPathArgument,
25
+ variantInstance: VariantInstance,
26
+ variantInstanceJoint: DottedPathArgument
27
+ ): VariantInstance {
28
+ joint = DottedPath.create( joint );
29
+ variantInstanceJoint = DottedPath.create( variantInstanceJoint );
30
+ const jointNode = variantInstance.variant.getNode( joint.path );
31
+ const variantInstanceJointNode = variantInstance.variant.getNode( variantInstanceJoint.path );
32
+ const differenceVector = variantInstanceJointNode.getAbsolutePosition().subtract( jointNode.getAbsolutePosition() );
33
+ const differenceVectorRotation = variantInstanceJointNode.rotation.subtract( jointNode.rotation );
34
+
35
+ console.log( variantInstanceJointNode.rotationQuaternion, 'ROTATION' );
36
+
37
+ this.variant.nodes.forEach( node => {
38
+ node.translate( Axis.X, differenceVector.x, Space.WORLD );
39
+ node.translate( Axis.Y, differenceVector.y, Space.WORLD );
40
+ node.translate( Axis.Z, differenceVector.z, Space.WORLD );
41
+
42
+ node.rotateAround( Axis.Y, differenceVectorRotation, 20 );
43
+ // node.rotate(Axis.Y, differenceVectorRotation.y, Space.WORLD );
44
+ // node.rotate(Axis.Z, differenceVectorRotation.z, Space.WORLD );
45
+ } );
46
+ return this;
47
+ }
48
+ */
49
+
50
+ /**
51
+ * A proxy for {@link Variant.getElement}.
52
+ */
53
+ public async getElement(dottedPath: DottedPathArgument): Promise<Element> {
54
+ return this.variant.getElement(dottedPath);
55
+ }
56
+
57
+ /**
58
+ * A proxy for {@link Variant.getViewerLight}.
59
+ */
60
+ public async getViewerLight(dottedPath: DottedPathArgument): Promise<ViewerLight> {
61
+ return this.variant.getViewerLight(dottedPath);
62
+ }
63
+
64
+ /**
65
+ * A proxy for {@link Variant.getNode}.
66
+ */
67
+ public async getNode(
68
+ elementDottedPath: DottedPathArgument,
69
+ nodeDottedPath: DottedPathArgument
70
+ ): Promise<TransformNode> {
71
+ return this.variant.getNode(elementDottedPath, nodeDottedPath);
72
+ }
73
+
74
+ /**
75
+ * A proxy for {@link Variant.getMesh}.
76
+ */
77
+ public async getMesh(
78
+ elementDottedPath: DottedPathArgument,
79
+ meshDottedPath: DottedPathArgument
80
+ ): Promise<Mesh | null> {
81
+ return this.variant.getMesh(elementDottedPath, meshDottedPath);
82
+ }
83
+
84
+ /**
85
+ * A proxy for {@link Variant.commitParameters}.
86
+ */
87
+ public async commitParameters(parameters?: ParameterBag): Promise<Variant> {
88
+ return this.variant.commitParameters(parameters);
89
+ }
90
+
91
+ /**
92
+ * A proxy for {@link ParameterObservable.commitParameter}.
93
+ */
94
+ public async commitParameter(parameter: string, value: ParameterValue): Promise<ParameterObservable> {
95
+ return this.variant.commitParameter(parameter, value);
96
+ }
97
+ }
@@ -1,85 +1,85 @@
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
- protected readonly _parameterObservers: Map<string, ParameterObserver[]> = new Map();
11
-
12
- protected constructor(public readonly variant: Variant, public readonly name: string) {
13
- super();
14
- }
15
-
16
- /**
17
- * Gets the inherited parameters from the {@link Variant} with cleaned {@link Parameterizable} prefix.
18
- */
19
- get inheritedParameters(): ParameterBag {
20
- const parameterBag: ParameterBag = {};
21
- for (const parameter in this.variant.inheritedParameters) {
22
- const dpp = DottedPath.create(parameter);
23
- if (dpp.parts.length !== 1) {
24
- continue;
25
- }
26
- parameterBag[parameter] = this.variant.inheritedParameters[parameter];
27
- }
28
- for (const parameter in this.variant.inheritedParameters) {
29
- const dpp = DottedPath.create(parameter);
30
- if (dpp.firstPart !== this.name) {
31
- continue;
32
- }
33
- dpp.shiftPart();
34
- parameterBag[dpp.path] = this.variant.inheritedParameters[parameter];
35
- }
36
- return parameterBag;
37
- }
38
-
39
- /**
40
- * Places the given {@link ParameterBag} in the {@link VariantParameterizable}'s parameters, replaces all patterns in
41
- * the {@link StructureJson} and broadcasts all {@link ParameterObserver}s.
42
- */
43
- public async commitParameters(parameters?: ParameterBag): Promise<VariantParameterizable> {
44
- if (!parameters) {
45
- parameters = {};
46
- }
47
- const oldParameters = cloneDeep(this.parameters);
48
- merge(this.parameters, parameters);
49
- // handle parameter observers
50
- let observerPromises: Promise<void | ParameterObserver>[] = [];
51
- for (const parameter in this.parameters) {
52
- const oldParameterValue = oldParameters[parameter];
53
- const newParameterValue = this.parameters[parameter];
54
- this.variant.assertParameter(this.variant.inheritedParameterDeclaration, parameter, newParameterValue);
55
- if (oldParameterValue === newParameterValue) {
56
- continue;
57
- }
58
- // parameter changed
59
- const parameterObservers = mergeMaps(this._parameterObservers, this.parameterObservers);
60
- if (parameterObservers.has(parameter)) {
61
- const observers = parameterObservers.get(parameter)!;
62
- observerPromises = concat(
63
- observerPromises,
64
- observers.map(observer => {
65
- const observerResult = observer(this, oldParameterValue, newParameterValue);
66
- const observerPromise = Promise.resolve(observerResult);
67
- observerPromise.then(() => {
68
- const clsName = camelToSnakeCase(this.constructor.name).toUpperCase();
69
- this.broadcastEvent(
70
- get(Event, clsName + '_PARAMETER_COMMITTED'),
71
- this,
72
- parameter,
73
- oldParameterValue,
74
- newParameterValue
75
- );
76
- });
77
- return observerPromise;
78
- })
79
- );
80
- }
81
- }
82
- await Promise.all(observerPromises);
83
- return this;
84
- }
85
- }
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
+ protected readonly _parameterObservers: Map<string, ParameterObserver[]> = new Map();
11
+
12
+ protected constructor(public readonly variant: Variant, public readonly name: string) {
13
+ super();
14
+ }
15
+
16
+ /**
17
+ * Gets the inherited parameters from the {@link Variant} with cleaned {@link Parameterizable} prefix.
18
+ */
19
+ get inheritedParameters(): ParameterBag {
20
+ const parameterBag: ParameterBag = {};
21
+ for (const parameter in this.variant.inheritedParameters) {
22
+ const dpp = DottedPath.create(parameter);
23
+ if (dpp.parts.length !== 1) {
24
+ continue;
25
+ }
26
+ parameterBag[parameter] = this.variant.inheritedParameters[parameter];
27
+ }
28
+ for (const parameter in this.variant.inheritedParameters) {
29
+ const dpp = DottedPath.create(parameter);
30
+ if (dpp.firstPart !== this.name) {
31
+ continue;
32
+ }
33
+ dpp.shiftPart();
34
+ parameterBag[dpp.path] = this.variant.inheritedParameters[parameter];
35
+ }
36
+ return parameterBag;
37
+ }
38
+
39
+ /**
40
+ * Places the given {@link ParameterBag} in the {@link VariantParameterizable}'s parameters, replaces all patterns in
41
+ * the {@link StructureJson} and broadcasts all {@link ParameterObserver}s.
42
+ */
43
+ public async commitParameters(parameters?: ParameterBag): Promise<VariantParameterizable> {
44
+ if (!parameters) {
45
+ parameters = {};
46
+ }
47
+ const oldParameters = cloneDeep(this.parameters);
48
+ merge(this.parameters, parameters);
49
+ // handle parameter observers
50
+ let observerPromises: Promise<void | ParameterObserver>[] = [];
51
+ for (const parameter in this.parameters) {
52
+ const oldParameterValue = oldParameters[parameter];
53
+ const newParameterValue = this.parameters[parameter];
54
+ this.variant.assertParameter(this.variant.inheritedParameterDeclaration, parameter, newParameterValue);
55
+ if (oldParameterValue === newParameterValue) {
56
+ continue;
57
+ }
58
+ // parameter changed
59
+ const parameterObservers = mergeMaps(this._parameterObservers, this.parameterObservers);
60
+ if (parameterObservers.has(parameter)) {
61
+ const observers = parameterObservers.get(parameter)!;
62
+ observerPromises = concat(
63
+ observerPromises,
64
+ observers.map(observer => {
65
+ const observerResult = observer(this, oldParameterValue, newParameterValue);
66
+ const observerPromise = Promise.resolve(observerResult);
67
+ observerPromise.then(() => {
68
+ const clsName = camelToSnakeCase(this.constructor.name).toUpperCase();
69
+ this.broadcastEvent(
70
+ get(Event, clsName + '_PARAMETER_COMMITTED'),
71
+ this,
72
+ parameter,
73
+ oldParameterValue,
74
+ newParameterValue
75
+ );
76
+ });
77
+ return observerPromise;
78
+ })
79
+ );
80
+ }
81
+ }
82
+ await Promise.all(observerPromises);
83
+ return this;
84
+ }
85
+ }