@vived/core 1.4.1 → 1.4.2

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 (177) hide show
  1. package/dist/cjs/AppObject/AppObject.js +59 -0
  2. package/dist/cjs/AppObject/AppObject.js.map +1 -0
  3. package/dist/cjs/AppObject/AppObject.test.js +113 -0
  4. package/dist/cjs/AppObject/AppObject.test.js.map +1 -0
  5. package/dist/cjs/AppObject/AppObjectComponent.js +82 -0
  6. package/dist/cjs/AppObject/AppObjectComponent.js.map +1 -0
  7. package/dist/cjs/AppObject/AppObjectComponent.test.js +132 -0
  8. package/dist/cjs/AppObject/AppObjectComponent.test.js.map +1 -0
  9. package/dist/cjs/AppObject/AppObjectController.js +12 -0
  10. package/dist/cjs/AppObject/AppObjectController.js.map +1 -0
  11. package/dist/cjs/AppObject/AppObjectEntity.js +38 -0
  12. package/dist/cjs/AppObject/AppObjectEntity.js.map +1 -0
  13. package/dist/cjs/AppObject/AppObjectEntity.test.js +108 -0
  14. package/dist/cjs/AppObject/AppObjectEntity.test.js.map +1 -0
  15. package/dist/cjs/AppObject/AppObjectEntityRepo.js +56 -0
  16. package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +1 -0
  17. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js +149 -0
  18. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js.map +1 -0
  19. package/dist/cjs/AppObject/AppObjectPM.js +40 -0
  20. package/dist/cjs/AppObject/AppObjectPM.js.map +1 -0
  21. package/dist/cjs/AppObject/AppObjectPM.test.js +103 -0
  22. package/dist/cjs/AppObject/AppObjectPM.test.js.map +1 -0
  23. package/dist/cjs/AppObject/AppObjectRepo.js +133 -0
  24. package/dist/cjs/AppObject/AppObjectRepo.js.map +1 -0
  25. package/dist/cjs/AppObject/AppObjectRepo.test.js +213 -0
  26. package/dist/cjs/AppObject/AppObjectRepo.test.js.map +1 -0
  27. package/dist/cjs/AppObject/AppObjectUC.js +12 -0
  28. package/dist/cjs/AppObject/AppObjectUC.js.map +1 -0
  29. package/dist/cjs/AppObject/AppObjectView.js +12 -0
  30. package/dist/cjs/AppObject/AppObjectView.js.map +1 -0
  31. package/dist/cjs/AppObject/getSingletonComponent.js +7 -0
  32. package/dist/cjs/AppObject/getSingletonComponent.js.map +1 -0
  33. package/dist/cjs/AppObject/getSingletonComponent.test.js +13 -0
  34. package/dist/cjs/AppObject/getSingletonComponent.test.js.map +1 -0
  35. package/dist/cjs/AppObject/index.js +27 -0
  36. package/dist/cjs/AppObject/index.js.map +1 -0
  37. package/dist/cjs/AppObject/printAppObjectDetails.js +18 -0
  38. package/dist/cjs/AppObject/printAppObjectDetails.js.map +1 -0
  39. package/dist/cjs/Entities/MemoizedAngle.js +23 -0
  40. package/dist/cjs/Entities/MemoizedAngle.js.map +1 -0
  41. package/dist/cjs/Entities/MemoizedAngle.test.js +30 -0
  42. package/dist/cjs/Entities/MemoizedAngle.test.js.map +1 -0
  43. package/dist/cjs/Entities/MemoizedBoolean.js +23 -0
  44. package/dist/cjs/Entities/MemoizedBoolean.js.map +1 -0
  45. package/dist/cjs/Entities/MemoizedBoolean.test.js +34 -0
  46. package/dist/cjs/Entities/MemoizedBoolean.test.js.map +1 -0
  47. package/dist/cjs/Entities/MemoizedColor.js +24 -0
  48. package/dist/cjs/Entities/MemoizedColor.js.map +1 -0
  49. package/dist/cjs/Entities/MemoizedColor.test.js +32 -0
  50. package/dist/cjs/Entities/MemoizedColor.test.js.map +1 -0
  51. package/dist/cjs/Entities/MemoizedNumber.js +23 -0
  52. package/dist/cjs/Entities/MemoizedNumber.js.map +1 -0
  53. package/dist/cjs/Entities/MemoizedNumber.test.js +29 -0
  54. package/dist/cjs/Entities/MemoizedNumber.test.js.map +1 -0
  55. package/dist/cjs/Entities/MemoizedQuaternion.js +24 -0
  56. package/dist/cjs/Entities/MemoizedQuaternion.js.map +1 -0
  57. package/dist/cjs/Entities/MemoizedQuaternion.test.js +32 -0
  58. package/dist/cjs/Entities/MemoizedQuaternion.test.js.map +1 -0
  59. package/dist/cjs/Entities/MemoizedString.js +23 -0
  60. package/dist/cjs/Entities/MemoizedString.js.map +1 -0
  61. package/dist/cjs/Entities/MemoizedString.test.js +29 -0
  62. package/dist/cjs/Entities/MemoizedString.test.js.map +1 -0
  63. package/dist/cjs/Entities/MemoizedVector2.js +24 -0
  64. package/dist/cjs/Entities/MemoizedVector2.js.map +1 -0
  65. package/dist/cjs/Entities/MemoizedVector2.test.js +32 -0
  66. package/dist/cjs/Entities/MemoizedVector2.test.js.map +1 -0
  67. package/dist/cjs/Entities/MemoizedVector3.js +24 -0
  68. package/dist/cjs/Entities/MemoizedVector3.js.map +1 -0
  69. package/dist/cjs/Entities/MemoizedVector3.test.js +32 -0
  70. package/dist/cjs/Entities/MemoizedVector3.test.js.map +1 -0
  71. package/dist/cjs/Entities/ObservableEntity.js +20 -0
  72. package/dist/cjs/Entities/ObservableEntity.js.map +1 -0
  73. package/dist/cjs/Entities/ObservableEntity.test.js +25 -0
  74. package/dist/cjs/Entities/ObservableEntity.test.js.map +1 -0
  75. package/dist/cjs/Entities/ObserverList.js +27 -0
  76. package/dist/cjs/Entities/ObserverList.js.map +1 -0
  77. package/dist/cjs/Entities/ObserverList.test.js +44 -0
  78. package/dist/cjs/Entities/ObserverList.test.js.map +1 -0
  79. package/dist/cjs/Entities/RangedNumber.js +36 -0
  80. package/dist/cjs/Entities/RangedNumber.js.map +1 -0
  81. package/dist/cjs/Entities/RangedNumber.test.js +96 -0
  82. package/dist/cjs/Entities/RangedNumber.test.js.map +1 -0
  83. package/dist/cjs/Entities/index.js +28 -0
  84. package/dist/cjs/Entities/index.js.map +1 -0
  85. package/dist/cjs/Types/AppBoundary.js +3 -0
  86. package/dist/cjs/Types/AppBoundary.js.map +1 -0
  87. package/dist/cjs/Types/EaseFn.js +3 -0
  88. package/dist/cjs/Types/EaseFn.js.map +1 -0
  89. package/dist/cjs/Types/PmAdapter.js +3 -0
  90. package/dist/cjs/Types/PmAdapter.js.map +1 -0
  91. package/dist/cjs/Types/SingletonPmAdapter.js +3 -0
  92. package/dist/cjs/Types/SingletonPmAdapter.js.map +1 -0
  93. package/dist/cjs/Types/index.js +21 -0
  94. package/dist/cjs/Types/index.js.map +1 -0
  95. package/dist/cjs/Utilities/LengthConverters.js +21 -0
  96. package/dist/cjs/Utilities/LengthConverters.js.map +1 -0
  97. package/dist/cjs/Utilities/LengthConverters.test.js +24 -0
  98. package/dist/cjs/Utilities/LengthConverters.test.js.map +1 -0
  99. package/dist/cjs/Utilities/LerpNumber.js +85 -0
  100. package/dist/cjs/Utilities/LerpNumber.js.map +1 -0
  101. package/dist/cjs/Utilities/LerpNumber.test.js +90 -0
  102. package/dist/cjs/Utilities/LerpNumber.test.js.map +1 -0
  103. package/dist/cjs/Utilities/addAlphaToHex.js +16 -0
  104. package/dist/cjs/Utilities/addAlphaToHex.js.map +1 -0
  105. package/dist/cjs/Utilities/addAlphaToHex.test.js +34 -0
  106. package/dist/cjs/Utilities/addAlphaToHex.test.js.map +1 -0
  107. package/dist/cjs/Utilities/alphaToHex.js +21 -0
  108. package/dist/cjs/Utilities/alphaToHex.js.map +1 -0
  109. package/dist/cjs/Utilities/alphaToHex.test.js +75 -0
  110. package/dist/cjs/Utilities/alphaToHex.test.js.map +1 -0
  111. package/dist/cjs/Utilities/degreesToRadians.js +7 -0
  112. package/dist/cjs/Utilities/degreesToRadians.js.map +1 -0
  113. package/dist/cjs/Utilities/degreesToRadians.test.js +9 -0
  114. package/dist/cjs/Utilities/degreesToRadians.test.js.map +1 -0
  115. package/dist/cjs/Utilities/downloadFile.js +14 -0
  116. package/dist/cjs/Utilities/downloadFile.js.map +1 -0
  117. package/dist/cjs/Utilities/easeFunctions.js +208 -0
  118. package/dist/cjs/Utilities/easeFunctions.js.map +1 -0
  119. package/dist/cjs/Utilities/easeFunctions.test.js +209 -0
  120. package/dist/cjs/Utilities/easeFunctions.test.js.map +1 -0
  121. package/dist/cjs/Utilities/generateUniqueID.js +8 -0
  122. package/dist/cjs/Utilities/generateUniqueID.js.map +1 -0
  123. package/dist/cjs/Utilities/index.js +25 -0
  124. package/dist/cjs/Utilities/index.js.map +1 -0
  125. package/dist/cjs/Utilities/interpolateNumber.js +18 -0
  126. package/dist/cjs/Utilities/interpolateNumber.js.map +1 -0
  127. package/dist/cjs/Utilities/interpolateNumber.test.js +26 -0
  128. package/dist/cjs/Utilities/interpolateNumber.test.js.map +1 -0
  129. package/dist/cjs/ValueObjects/Angle.js +47 -0
  130. package/dist/cjs/ValueObjects/Angle.js.map +1 -0
  131. package/dist/cjs/ValueObjects/Angle.test.js +28 -0
  132. package/dist/cjs/ValueObjects/Angle.test.js.map +1 -0
  133. package/dist/cjs/ValueObjects/Color.js +859 -0
  134. package/dist/cjs/ValueObjects/Color.js.map +1 -0
  135. package/dist/cjs/ValueObjects/Color.test.js +147 -0
  136. package/dist/cjs/ValueObjects/Color.test.js.map +1 -0
  137. package/dist/cjs/ValueObjects/LineSegment2D.js +72 -0
  138. package/dist/cjs/ValueObjects/LineSegment2D.js.map +1 -0
  139. package/dist/cjs/ValueObjects/LineSegment2D.test.js +102 -0
  140. package/dist/cjs/ValueObjects/LineSegment2D.test.js.map +1 -0
  141. package/dist/cjs/ValueObjects/Matrix.js +466 -0
  142. package/dist/cjs/ValueObjects/Matrix.js.map +1 -0
  143. package/dist/cjs/ValueObjects/Matrix.test.js +385 -0
  144. package/dist/cjs/ValueObjects/Matrix.test.js.map +1 -0
  145. package/dist/cjs/ValueObjects/ParametricLine.js +77 -0
  146. package/dist/cjs/ValueObjects/ParametricLine.js.map +1 -0
  147. package/dist/cjs/ValueObjects/ParametricLine.test.js +126 -0
  148. package/dist/cjs/ValueObjects/ParametricLine.test.js.map +1 -0
  149. package/dist/cjs/ValueObjects/ParametricPlane.js +65 -0
  150. package/dist/cjs/ValueObjects/ParametricPlane.js.map +1 -0
  151. package/dist/cjs/ValueObjects/ParametricPlane.test.js +101 -0
  152. package/dist/cjs/ValueObjects/ParametricPlane.test.js.map +1 -0
  153. package/dist/cjs/ValueObjects/Quaternion.js +290 -0
  154. package/dist/cjs/ValueObjects/Quaternion.js.map +1 -0
  155. package/dist/cjs/ValueObjects/Quaternion.test.js +240 -0
  156. package/dist/cjs/ValueObjects/Quaternion.test.js.map +1 -0
  157. package/dist/cjs/ValueObjects/Rectangle.js +24 -0
  158. package/dist/cjs/ValueObjects/Rectangle.js.map +1 -0
  159. package/dist/cjs/ValueObjects/Rectangle.test.js +32 -0
  160. package/dist/cjs/ValueObjects/Rectangle.test.js.map +1 -0
  161. package/dist/cjs/ValueObjects/Vector2.js +184 -0
  162. package/dist/cjs/ValueObjects/Vector2.js.map +1 -0
  163. package/dist/cjs/ValueObjects/Vector2.test.js +136 -0
  164. package/dist/cjs/ValueObjects/Vector2.test.js.map +1 -0
  165. package/dist/cjs/ValueObjects/Vector3.js +231 -0
  166. package/dist/cjs/ValueObjects/Vector3.js.map +1 -0
  167. package/dist/cjs/ValueObjects/Vector3.test.js +188 -0
  168. package/dist/cjs/ValueObjects/Vector3.test.js.map +1 -0
  169. package/dist/cjs/ValueObjects/Version.js +171 -0
  170. package/dist/cjs/ValueObjects/Version.js.map +1 -0
  171. package/dist/cjs/ValueObjects/Version.test.js +310 -0
  172. package/dist/cjs/ValueObjects/Version.test.js.map +1 -0
  173. package/dist/cjs/ValueObjects/index.js +28 -0
  174. package/dist/cjs/ValueObjects/index.js.map +1 -0
  175. package/dist/cjs/index.js +22 -0
  176. package/dist/cjs/index.js.map +1 -0
  177. package/package.json +58 -55
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AppObject_1 = require("./AppObject");
4
+ const AppObjectComponent_1 = require("./AppObjectComponent");
5
+ const AppObjectRepo_1 = require("./AppObjectRepo");
6
+ function makeTestRig() {
7
+ const repo = (0, AppObjectRepo_1.makeAppObjectRepo)();
8
+ const observer = jest.fn();
9
+ repo.addObserver(observer);
10
+ return { repo, observer };
11
+ }
12
+ describe("Observable appObject Repo", () => {
13
+ it("Allows an App Object to be added", () => {
14
+ const { repo } = makeTestRig();
15
+ const appObject = (0, AppObject_1.makeAppObject)("appObj", repo);
16
+ expect(repo.has(appObject.id)).toEqual(true);
17
+ });
18
+ it("Notifies when an appObject is added", () => {
19
+ const { repo, observer } = makeTestRig();
20
+ (0, AppObject_1.makeAppObject)("appObj", repo);
21
+ expect(observer).toBeCalled();
22
+ });
23
+ it("Forwards notification from an added App Object", () => {
24
+ const { repo, observer } = makeTestRig();
25
+ const appObject = (0, AppObject_1.makeAppObject)("appObj", repo);
26
+ observer.mockClear();
27
+ appObject.notify();
28
+ expect(observer).toBeCalled();
29
+ });
30
+ it("Stops notifying if adding an App Object replaces and existing appObject", () => {
31
+ const { repo, observer } = makeTestRig();
32
+ const original = (0, AppObject_1.makeAppObject)("appObj", repo);
33
+ (0, AppObject_1.makeAppObject)("appObj", repo);
34
+ observer.mockClear();
35
+ original.notify();
36
+ expect(observer).not.toBeCalled();
37
+ });
38
+ it("Removes an App Object", () => {
39
+ const { repo } = makeTestRig();
40
+ const appObject = (0, AppObject_1.makeAppObject)("appObj", repo);
41
+ expect(repo.has(appObject.id)).toEqual(true);
42
+ repo.remove(appObject.id);
43
+ expect(repo.has(appObject.id)).toEqual(false);
44
+ });
45
+ it("Notifies if an App Object is removed", () => {
46
+ const { repo, observer } = makeTestRig();
47
+ const appObject = (0, AppObject_1.makeAppObject)("appObj", repo);
48
+ observer.mockClear();
49
+ repo.remove(appObject.id);
50
+ expect(observer).toBeCalled();
51
+ });
52
+ it("Does not notify if the App Object to be removed cannot be found", () => {
53
+ const { repo, observer } = makeTestRig();
54
+ repo.remove("someId");
55
+ expect(observer).not.toBeCalled();
56
+ });
57
+ it("Stops observing a removed App Object", () => {
58
+ const { repo, observer } = makeTestRig();
59
+ const appObject = (0, AppObject_1.makeAppObject)("appObj", repo);
60
+ repo.remove(appObject.id);
61
+ observer.mockClear();
62
+ appObject.notify();
63
+ expect(observer).not.toBeCalled();
64
+ });
65
+ it("Gets an App Object", () => {
66
+ const { repo } = makeTestRig();
67
+ const appObject = (0, AppObject_1.makeAppObject)("appObj", repo);
68
+ expect(repo.get("appObj")).toEqual(appObject);
69
+ });
70
+ it("Gets all App Objects", () => {
71
+ const { repo } = makeTestRig();
72
+ const appObject = (0, AppObject_1.makeAppObject)("appObj", repo);
73
+ expect(repo.getAll()).toEqual([appObject]);
74
+ });
75
+ it("Returns undefined for an unknown App Object", () => {
76
+ const { repo } = makeTestRig();
77
+ expect(repo.get("unknownID")).toBeUndefined();
78
+ });
79
+ it("Supports notifying an observer when an App Object is added", () => {
80
+ const { repo } = makeTestRig();
81
+ const addEntityObserver = jest.fn();
82
+ repo.addAppObjectAddedObserver(addEntityObserver);
83
+ const ent = (0, AppObject_1.makeAppObject)("appObj", repo);
84
+ expect(addEntityObserver).toBeCalledWith(ent);
85
+ });
86
+ it("Add App Object observer can be removed", () => {
87
+ const { repo } = makeTestRig();
88
+ const addEntityObserver = jest.fn();
89
+ repo.addAppObjectAddedObserver(addEntityObserver);
90
+ repo.removeAppObjectAddedObserver(addEntityObserver);
91
+ (0, AppObject_1.makeAppObject)("appObj", repo);
92
+ expect(addEntityObserver).not.toBeCalled();
93
+ });
94
+ it("Supports notifying an observer when an App Object is removed", () => {
95
+ const { repo } = makeTestRig();
96
+ const removeEntityObserver = jest.fn();
97
+ repo.addAppObjectRemovedObserver(removeEntityObserver);
98
+ const ent = (0, AppObject_1.makeAppObject)("appObj", repo);
99
+ repo.remove("appObj");
100
+ expect(removeEntityObserver).toBeCalledWith(ent);
101
+ });
102
+ it("Remove App Object observer can be removed", () => {
103
+ const { repo } = makeTestRig();
104
+ const removeEntityObserver = jest.fn();
105
+ repo.addAppObjectRemovedObserver(removeEntityObserver);
106
+ repo.removedAppObjectRemovedObserver(removeEntityObserver);
107
+ (0, AppObject_1.makeAppObject)("appObj", repo);
108
+ repo.remove("appObj");
109
+ expect(removeEntityObserver).not.toBeCalled();
110
+ });
111
+ it("Creats a new App Object when getOrCreate is called but the AO does not exist", () => {
112
+ const { repo } = makeTestRig();
113
+ expect(repo.has("ao1")).toEqual(false);
114
+ const ao = repo.getOrCreate("ao1");
115
+ expect(ao.id).toEqual("ao1");
116
+ expect(repo.has("ao1")).toEqual(true);
117
+ });
118
+ it("Gets the existing App Object when getOrCreate is called and the AO exists", () => {
119
+ const { repo } = makeTestRig();
120
+ const appObject = (0, AppObject_1.makeAppObject)("appObj", repo);
121
+ const ao = repo.getOrCreate("appObj");
122
+ expect(ao).toEqual(appObject);
123
+ });
124
+ it("Get all App Objects with component type", () => {
125
+ const { repo } = makeTestRig();
126
+ expect(repo.getAllAppObjectsWithComponent(MockComponent.type)).toEqual([]);
127
+ (0, AppObject_1.makeAppObject)("appObj1", repo);
128
+ const appObj2 = (0, AppObject_1.makeAppObject)("appObj2", repo);
129
+ const appObj3 = (0, AppObject_1.makeAppObject)("appObj3", repo);
130
+ new MockComponent(appObj2);
131
+ new MockComponent(appObj3);
132
+ expect(repo.getAllAppObjectsWithComponent(MockComponent.type)).toEqual([
133
+ appObj2,
134
+ appObj3,
135
+ ]);
136
+ });
137
+ it("Get a component on an object", () => {
138
+ const { repo } = makeTestRig();
139
+ const appObj = repo.getOrCreate("appObj");
140
+ const comp = new MockComponent(appObj);
141
+ expect(repo.getAppObjectComponent("appObj", MockComponent.type)).toEqual(comp);
142
+ });
143
+ it("Returns undefined if the App Object does not have an entity when calling get entity on object", () => {
144
+ const { repo } = makeTestRig();
145
+ repo.getOrCreate("appObj");
146
+ expect(repo.getAppObjectComponent("appObj", MockComponent.type)).toEqual(undefined);
147
+ });
148
+ it("Returns undefined if the App Object does not exist when calling get entity on object", () => {
149
+ const { repo } = makeTestRig();
150
+ expect(repo.getAppObjectComponent("appObj", MockComponent.type)).toEqual(undefined);
151
+ });
152
+ it("Get all Components", () => {
153
+ const { repo } = makeTestRig();
154
+ expect(repo.getAllComponents(MockComponent.type)).toEqual([]);
155
+ const appObj1 = (0, AppObject_1.makeAppObject)("appObj2", repo);
156
+ const comp1 = new MockComponent(appObj1);
157
+ const appObj2 = (0, AppObject_1.makeAppObject)("appObj3", repo);
158
+ const comp2 = new MockComponent(appObj2);
159
+ expect(repo.getAllComponents(MockComponent.type)).toEqual([
160
+ comp1,
161
+ comp2,
162
+ ]);
163
+ });
164
+ it("Registers a singleton", () => {
165
+ const { repo } = makeTestRig();
166
+ const appObj1 = (0, AppObject_1.makeAppObject)("appObj2", repo);
167
+ const comp1 = new MockComponent(appObj1);
168
+ repo.registerSingleton(comp1);
169
+ expect(repo.getSingleton(MockComponent.type)).toEqual(comp1);
170
+ });
171
+ it("Warns and replaces if multiple singleton are registered", () => {
172
+ const { repo } = makeTestRig();
173
+ const appObj1 = (0, AppObject_1.makeAppObject)("appObj1", repo);
174
+ const comp1 = new MockComponent(appObj1);
175
+ repo.registerSingleton(comp1);
176
+ const appObj2 = (0, AppObject_1.makeAppObject)("appObj2", repo);
177
+ const comp2 = new MockComponent(appObj2);
178
+ repo.submitWarning = jest.fn();
179
+ repo.registerSingleton(comp2);
180
+ expect(repo.getSingleton(MockComponent.type)).toEqual(comp2);
181
+ expect(repo.submitWarning).toBeCalled();
182
+ });
183
+ it("Searches for a singleton that has not been registered", () => {
184
+ const { repo } = makeTestRig();
185
+ const appObj1 = (0, AppObject_1.makeAppObject)("appObj2", repo);
186
+ const comp1 = new MockComponent(appObj1);
187
+ repo.registerSingleton(comp1);
188
+ expect(repo.getSingleton(MockComponent.type)).toEqual(comp1);
189
+ });
190
+ it("Warns if it cannot find a singleton", () => {
191
+ const { repo } = makeTestRig();
192
+ repo.submitWarning = jest.fn();
193
+ repo.getSingleton(MockComponent.type);
194
+ expect(repo.submitWarning).toBeCalled();
195
+ });
196
+ it("Warns if it finds multiple singletons and returns the first one", () => {
197
+ const { repo } = makeTestRig();
198
+ const appObj1 = (0, AppObject_1.makeAppObject)("appObj1", repo);
199
+ const comp1 = new MockComponent(appObj1);
200
+ const appObj2 = (0, AppObject_1.makeAppObject)("appObj2", repo);
201
+ new MockComponent(appObj2);
202
+ repo.submitWarning = jest.fn();
203
+ expect(repo.getSingleton(MockComponent.type)).toEqual(comp1);
204
+ expect(repo.submitWarning).toBeCalled();
205
+ });
206
+ });
207
+ class MockComponent extends AppObjectComponent_1.AppObjectComponent {
208
+ constructor(appObject) {
209
+ super(appObject, MockComponent.type);
210
+ }
211
+ }
212
+ MockComponent.type = "mockComponent";
213
+ //# sourceMappingURL=AppObjectRepo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppObjectRepo.test.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectRepo.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, makeAppObject } from \"./AppObject\";\r\nimport { AppObjectComponent } from \"./AppObjectComponent\";\r\nimport { makeAppObjectRepo } from \"./AppObjectRepo\";\r\n\r\nfunction makeTestRig() {\r\n const repo = makeAppObjectRepo();\r\n\r\n const observer = jest.fn();\r\n repo.addObserver(observer);\r\n\r\n return { repo, observer };\r\n}\r\n\r\ndescribe(\"Observable appObject Repo\", () => {\r\n it(\"Allows an App Object to be added\", () => {\r\n const { repo } = makeTestRig();\r\n const appObject = makeAppObject(\"appObj\", repo);\r\n\r\n expect(repo.has(appObject.id)).toEqual(true);\r\n });\r\n\r\n it(\"Notifies when an appObject is added\", () => {\r\n const { repo, observer } = makeTestRig();\r\n makeAppObject(\"appObj\", repo);\r\n\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Forwards notification from an added App Object\", () => {\r\n const { repo, observer } = makeTestRig();\r\n const appObject = makeAppObject(\"appObj\", repo);\r\n\r\n observer.mockClear();\r\n\r\n appObject.notify();\r\n\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Stops notifying if adding an App Object replaces and existing appObject\", () => {\r\n const { repo, observer } = makeTestRig();\r\n\r\n const original = makeAppObject(\"appObj\", repo);\r\n makeAppObject(\"appObj\", repo);\r\n observer.mockClear();\r\n\r\n original.notify();\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Removes an App Object\", () => {\r\n const { repo } = makeTestRig();\r\n const appObject = makeAppObject(\"appObj\", repo);\r\n\r\n expect(repo.has(appObject.id)).toEqual(true);\r\n\r\n repo.remove(appObject.id);\r\n\r\n expect(repo.has(appObject.id)).toEqual(false);\r\n });\r\n\r\n it(\"Notifies if an App Object is removed\", () => {\r\n const { repo, observer } = makeTestRig();\r\n const appObject = makeAppObject(\"appObj\", repo);\r\n observer.mockClear();\r\n\r\n repo.remove(appObject.id);\r\n\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does not notify if the App Object to be removed cannot be found\", () => {\r\n const { repo, observer } = makeTestRig();\r\n\r\n repo.remove(\"someId\");\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Stops observing a removed App Object\", () => {\r\n const { repo, observer } = makeTestRig();\r\n const appObject = makeAppObject(\"appObj\", repo);\r\n\r\n repo.remove(appObject.id);\r\n\r\n observer.mockClear();\r\n\r\n appObject.notify();\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Gets an App Object\", () => {\r\n const { repo } = makeTestRig();\r\n const appObject = makeAppObject(\"appObj\", repo);\r\n\r\n expect(repo.get(\"appObj\")).toEqual(appObject);\r\n });\r\n\r\n it(\"Gets all App Objects\", () => {\r\n const { repo } = makeTestRig();\r\n const appObject = makeAppObject(\"appObj\", repo);\r\n\r\n expect(repo.getAll()).toEqual([appObject]);\r\n });\r\n\r\n it(\"Returns undefined for an unknown App Object\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n expect(repo.get(\"unknownID\")).toBeUndefined();\r\n });\r\n\r\n it(\"Supports notifying an observer when an App Object is added\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n const addEntityObserver = jest.fn();\r\n repo.addAppObjectAddedObserver(addEntityObserver);\r\n\r\n const ent = makeAppObject(\"appObj\", repo);\r\n\r\n expect(addEntityObserver).toBeCalledWith(ent);\r\n });\r\n\r\n it(\"Add App Object observer can be removed\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n const addEntityObserver = jest.fn();\r\n repo.addAppObjectAddedObserver(addEntityObserver);\r\n repo.removeAppObjectAddedObserver(addEntityObserver);\r\n\r\n makeAppObject(\"appObj\", repo);\r\n\r\n expect(addEntityObserver).not.toBeCalled();\r\n });\r\n\r\n it(\"Supports notifying an observer when an App Object is removed\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n const removeEntityObserver = jest.fn();\r\n repo.addAppObjectRemovedObserver(removeEntityObserver);\r\n\r\n const ent = makeAppObject(\"appObj\", repo);\r\n\r\n repo.remove(\"appObj\");\r\n\r\n expect(removeEntityObserver).toBeCalledWith(ent);\r\n });\r\n\r\n it(\"Remove App Object observer can be removed\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n const removeEntityObserver = jest.fn();\r\n repo.addAppObjectRemovedObserver(removeEntityObserver);\r\n repo.removedAppObjectRemovedObserver(removeEntityObserver);\r\n\r\n makeAppObject(\"appObj\", repo);\r\n repo.remove(\"appObj\");\r\n\r\n expect(removeEntityObserver).not.toBeCalled();\r\n });\r\n\r\n it(\"Creats a new App Object when getOrCreate is called but the AO does not exist\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n expect(repo.has(\"ao1\")).toEqual(false);\r\n\r\n const ao = repo.getOrCreate(\"ao1\");\r\n\r\n expect(ao.id).toEqual(\"ao1\");\r\n expect(repo.has(\"ao1\")).toEqual(true);\r\n });\r\n\r\n it(\"Gets the existing App Object when getOrCreate is called and the AO exists\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n const appObject = makeAppObject(\"appObj\", repo);\r\n const ao = repo.getOrCreate(\"appObj\");\r\n\r\n expect(ao).toEqual(appObject);\r\n });\r\n\r\n it(\"Get all App Objects with component type\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n expect(repo.getAllAppObjectsWithComponent(MockComponent.type)).toEqual([]);\r\n\r\n makeAppObject(\"appObj1\", repo);\r\n const appObj2 = makeAppObject(\"appObj2\", repo);\r\n const appObj3 = makeAppObject(\"appObj3\", repo);\r\n\r\n new MockComponent(appObj2);\r\n new MockComponent(appObj3);\r\n\r\n expect(repo.getAllAppObjectsWithComponent(MockComponent.type)).toEqual([\r\n appObj2,\r\n appObj3,\r\n ]);\r\n });\r\n\r\n it(\"Get a component on an object\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n const appObj = repo.getOrCreate(\"appObj\");\r\n\r\n const comp = new MockComponent(appObj);\r\n\r\n expect(repo.getAppObjectComponent(\"appObj\", MockComponent.type)).toEqual(\r\n comp\r\n );\r\n });\r\n\r\n it(\"Returns undefined if the App Object does not have an entity when calling get entity on object\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n repo.getOrCreate(\"appObj\");\r\n\r\n expect(repo.getAppObjectComponent(\"appObj\", MockComponent.type)).toEqual(\r\n undefined\r\n );\r\n });\r\n\r\n it(\"Returns undefined if the App Object does not exist when calling get entity on object\", () => {\r\n const { repo } = makeTestRig();\r\n expect(repo.getAppObjectComponent(\"appObj\", MockComponent.type)).toEqual(\r\n undefined\r\n );\r\n });\r\n\r\n it(\"Get all Components\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n expect(repo.getAllComponents<MockComponent>(MockComponent.type)).toEqual(\r\n []\r\n );\r\n\r\n const appObj1 = makeAppObject(\"appObj2\", repo);\r\n const comp1 = new MockComponent(appObj1);\r\n\r\n const appObj2 = makeAppObject(\"appObj3\", repo);\r\n const comp2 = new MockComponent(appObj2);\r\n\r\n expect(repo.getAllComponents<MockComponent>(MockComponent.type)).toEqual([\r\n comp1,\r\n comp2,\r\n ]);\r\n });\r\n\r\n it(\"Registers a singleton\", () => {\r\n const { repo } = makeTestRig();\r\n const appObj1 = makeAppObject(\"appObj2\", repo);\r\n const comp1 = new MockComponent(appObj1);\r\n\r\n repo.registerSingleton(comp1);\r\n\r\n expect(repo.getSingleton(MockComponent.type)).toEqual(comp1);\r\n });\r\n\r\n it(\"Warns and replaces if multiple singleton are registered\", () => {\r\n const { repo } = makeTestRig();\r\n const appObj1 = makeAppObject(\"appObj1\", repo);\r\n const comp1 = new MockComponent(appObj1);\r\n\r\n repo.registerSingleton(comp1);\r\n\r\n const appObj2 = makeAppObject(\"appObj2\", repo);\r\n const comp2 = new MockComponent(appObj2);\r\n\r\n repo.submitWarning = jest.fn();\r\n\r\n repo.registerSingleton(comp2);\r\n expect(repo.getSingleton(MockComponent.type)).toEqual(comp2);\r\n expect(repo.submitWarning).toBeCalled();\r\n });\r\n\r\n it(\"Searches for a singleton that has not been registered\", () => {\r\n const { repo } = makeTestRig();\r\n const appObj1 = makeAppObject(\"appObj2\", repo);\r\n const comp1 = new MockComponent(appObj1);\r\n\r\n repo.registerSingleton(comp1);\r\n\r\n expect(repo.getSingleton(MockComponent.type)).toEqual(comp1);\r\n });\r\n\r\n it(\"Warns if it cannot find a singleton\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n repo.submitWarning = jest.fn();\r\n\r\n repo.getSingleton(MockComponent.type);\r\n\r\n expect(repo.submitWarning).toBeCalled();\r\n });\r\n\r\n \r\n it(\"Warns if it finds multiple singletons and returns the first one\", () => {\r\n const { repo } = makeTestRig();\r\n const appObj1 = makeAppObject(\"appObj1\", repo);\r\n const comp1 = new MockComponent(appObj1);\r\n \r\n const appObj2 = makeAppObject(\"appObj2\", repo);\r\n new MockComponent(appObj2);\r\n\r\n repo.submitWarning = jest.fn();\r\n\r\n expect(repo.getSingleton(MockComponent.type)).toEqual(comp1);\r\n expect(repo.submitWarning).toBeCalled();\r\n });\r\n});\r\n\r\nclass MockComponent extends AppObjectComponent {\r\n static readonly type: string = \"mockComponent\";\r\n constructor(appObject: AppObject) {\r\n super(appObject, MockComponent.type);\r\n }\r\n}\r\n"]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppObjectUC = void 0;
4
+ const AppObjectComponent_1 = require("./AppObjectComponent");
5
+ class AppObjectUC extends AppObjectComponent_1.AppObjectComponent {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.componentType = AppObjectComponent_1.AppObjectComponentType.UC;
9
+ }
10
+ }
11
+ exports.AppObjectUC = AppObjectUC;
12
+ //# sourceMappingURL=AppObjectUC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppObjectUC.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectUC.ts"],"names":[],"mappings":";;;AAAA,6DAAkF;AAElF,MAAa,WAAY,SAAQ,uCAAkB;IAAnD;;QACU,kBAAa,GAAG,2CAAsB,CAAC,EAAE,CAAC;IACpD,CAAC;CAAA;AAFD,kCAEC","sourcesContent":["import { AppObjectComponent, AppObjectComponentType } from \"./AppObjectComponent\";\r\n\r\nexport class AppObjectUC extends AppObjectComponent {\r\n\treadonly componentType = AppObjectComponentType.UC;\r\n}\r\n"]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppObjectView = void 0;
4
+ const AppObjectComponent_1 = require("./AppObjectComponent");
5
+ class AppObjectView extends AppObjectComponent_1.AppObjectComponent {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.componentType = AppObjectComponent_1.AppObjectComponentType.VIEW;
9
+ }
10
+ }
11
+ exports.AppObjectView = AppObjectView;
12
+ //# sourceMappingURL=AppObjectView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppObjectView.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectView.ts"],"names":[],"mappings":";;;AAAA,6DAAkF;AAElF,MAAa,aAAc,SAAQ,uCAAkB;IAArD;;QACU,kBAAa,GAAG,2CAAsB,CAAC,IAAI,CAAC;IACtD,CAAC;CAAA;AAFD,sCAEC","sourcesContent":["import { AppObjectComponent, AppObjectComponentType } from \"./AppObjectComponent\";\r\n\r\nexport class AppObjectView extends AppObjectComponent {\r\n\treadonly componentType = AppObjectComponentType.VIEW;\r\n}"]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSingletonComponent = getSingletonComponent;
4
+ function getSingletonComponent(type, appObjects) {
5
+ return appObjects.getSingleton(type);
6
+ }
7
+ //# sourceMappingURL=getSingletonComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSingletonComponent.js","sourceRoot":"","sources":["../../../src/AppObject/getSingletonComponent.ts"],"names":[],"mappings":";;AAGA,sDAKC;AALD,SAAgB,qBAAqB,CACnC,IAAY,EACZ,UAAyB;IAEzB,OAAO,UAAU,CAAC,YAAY,CAAI,IAAI,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["import { AppObjectComponent } from \"./AppObjectComponent\";\r\nimport { AppObjectRepo } from \"./AppObjectRepo\";\r\n\r\nexport function getSingletonComponent<T extends AppObjectComponent>(\r\n type: string,\r\n appObjects: AppObjectRepo\r\n): T | undefined {\r\n return appObjects.getSingleton<T>(type);\r\n}\r\n"]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AppObjectRepo_1 = require("./AppObjectRepo");
4
+ const getSingletonComponent_1 = require("./getSingletonComponent");
5
+ describe("Get Singleton Component", () => {
6
+ it("Calls the get singleton on the app object repo", () => {
7
+ const appObjects = (0, AppObjectRepo_1.makeAppObjectRepo)();
8
+ appObjects.getSingleton = jest.fn();
9
+ (0, getSingletonComponent_1.getSingletonComponent)("Mock Component", appObjects);
10
+ expect(appObjects.getSingleton).toBeCalledWith("Mock Component");
11
+ });
12
+ });
13
+ //# sourceMappingURL=getSingletonComponent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSingletonComponent.test.js","sourceRoot":"","sources":["../../../src/AppObject/getSingletonComponent.test.ts"],"names":[],"mappings":";;AAAA,mDAAoD;AACpD,mEAAgE;AAEhE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,UAAU,GAAG,IAAA,iCAAiB,GAAE,CAAC;QAEvC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEpC,IAAA,6CAAqB,EACnB,gBAAgB,EAChB,UAAU,CACX,CAAC;QAEF,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { makeAppObjectRepo } from \"./AppObjectRepo\";\r\nimport { getSingletonComponent } from \"./getSingletonComponent\";\r\n\r\ndescribe(\"Get Singleton Component\", () => {\r\n it(\"Calls the get singleton on the app object repo\", () => {\r\n const appObjects = makeAppObjectRepo();\r\n\r\n appObjects.getSingleton = jest.fn();\r\n\r\n getSingletonComponent(\r\n \"Mock Component\",\r\n appObjects\r\n );\r\n\r\n expect(appObjects.getSingleton).toBeCalledWith(\"Mock Component\")\r\n });\r\n});\r\n"]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./AppObject"), exports);
18
+ __exportStar(require("./AppObjectEntity"), exports);
19
+ __exportStar(require("./AppObjectEntityRepo"), exports);
20
+ __exportStar(require("./AppObjectPM"), exports);
21
+ __exportStar(require("./AppObjectRepo"), exports);
22
+ __exportStar(require("./AppObjectUC"), exports);
23
+ __exportStar(require("./AppObjectController"), exports);
24
+ __exportStar(require("./AppObjectView"), exports);
25
+ __exportStar(require("./getSingletonComponent"), exports);
26
+ __exportStar(require("./printAppObjectDetails"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/AppObject/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,oDAAiC;AACjC,wDAAqC;AACrC,gDAA6B;AAC7B,kDAA+B;AAC/B,gDAA6B;AAC7B,wDAAqC;AACrC,kDAA+B;AAC/B,0DAAwC;AACxC,0DAAwC","sourcesContent":["export * from \"./AppObject\"\r\nexport * from \"./AppObjectEntity\"\r\nexport * from \"./AppObjectEntityRepo\"\r\nexport * from \"./AppObjectPM\"\r\nexport * from \"./AppObjectRepo\"\r\nexport * from \"./AppObjectUC\"\r\nexport * from \"./AppObjectController\"\r\nexport * from \"./AppObjectView\"\r\nexport * from \"./getSingletonComponent\";\r\nexport * from \"./printAppObjectDetails\";"]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printAppObjectDetails = printAppObjectDetails;
4
+ function printAppObjectDetails(id, appObjects) {
5
+ const appObject = appObjects.get(id);
6
+ if (!appObject) {
7
+ console.warn("[printAppObjectDetails] Unable to find App Object by ID");
8
+ return;
9
+ }
10
+ console.log("[printAppObjectDetails] Start App Object Details ---");
11
+ console.log(`id: ${appObject.id}`);
12
+ const components = appObject.allComponents();
13
+ components.forEach((component) => {
14
+ console.log(`Has Component: ${component.type}`);
15
+ });
16
+ console.log("[printAppObjectDetails] End App Object Details ---");
17
+ }
18
+ //# sourceMappingURL=printAppObjectDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printAppObjectDetails.js","sourceRoot":"","sources":["../../../src/AppObject/printAppObjectDetails.ts"],"names":[],"mappings":";;AAEA,sDAcC;AAdD,SAAgB,qBAAqB,CAAC,EAAU,EAAE,UAAyB;IACzE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,OAAO,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IAC7C,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/B,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC","sourcesContent":["import { AppObjectRepo } from \"./AppObjectRepo\";\r\n\r\nexport function printAppObjectDetails(id: string, appObjects: AppObjectRepo) {\r\n const appObject = appObjects.get(id);\r\n if (!appObject) {\r\n console.warn(\"[printAppObjectDetails] Unable to find App Object by ID\");\r\n return;\r\n }\r\n\r\n console.log(\"[printAppObjectDetails] Start App Object Details ---\");\r\n console.log(`id: ${appObject.id}`);\r\n const components = appObject.allComponents();\r\n components.forEach((component) => {\r\n console.log(`Has Component: ${component.type}`);\r\n });\r\n console.log(\"[printAppObjectDetails] End App Object Details ---\");\r\n}\r\n"]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoizedAngle = void 0;
4
+ class MemoizedAngle {
5
+ get val() {
6
+ return this._val;
7
+ }
8
+ set val(b) {
9
+ if (this._val.degrees === b.degrees)
10
+ return;
11
+ this._val = b;
12
+ this.onChangeCallback();
13
+ }
14
+ setValQuietly(val) {
15
+ this._val = val;
16
+ }
17
+ constructor(initialValue, onChangeCallback) {
18
+ this._val = initialValue;
19
+ this.onChangeCallback = onChangeCallback;
20
+ }
21
+ }
22
+ exports.MemoizedAngle = MemoizedAngle;
23
+ //# sourceMappingURL=MemoizedAngle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizedAngle.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedAngle.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IAExB,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,CAAQ;QACd,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;YAAE,OAAO;QAE5C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAU;QAC7B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,YAAY,YAAmB,EAAE,gBAA4B;QAC3D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAtBD,sCAsBC","sourcesContent":["import { Angle } from \"../ValueObjects\";\r\n\r\nexport class MemoizedAngle {\r\n private _val: Angle;\r\n get val(): Angle {\r\n return this._val;\r\n }\r\n set val(b: Angle) {\r\n if (this._val.degrees === b.degrees) return;\r\n\r\n this._val = b;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: Angle) {\r\n this._val = val;\r\n }\r\n\r\n private onChangeCallback: () => void;\r\n\r\n constructor(initialValue: Angle, onChangeCallback: () => void) {\r\n this._val = initialValue;\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ValueObjects_1 = require("../ValueObjects");
4
+ const MemoizedAngle_1 = require("./MemoizedAngle");
5
+ test("Initial value is stored", () => {
6
+ const memoizedNumber = new MemoizedAngle_1.MemoizedAngle(ValueObjects_1.Angle.FromDegrees(55), jest.fn());
7
+ expect(memoizedNumber.val.degrees).toEqual(55);
8
+ });
9
+ test("Callback is called when something changes", () => {
10
+ const cb = jest.fn();
11
+ const memoizedNumber = new MemoizedAngle_1.MemoizedAngle(ValueObjects_1.Angle.FromDegrees(33), cb);
12
+ expect(cb).not.toBeCalled();
13
+ memoizedNumber.val = ValueObjects_1.Angle.FromDegrees(55);
14
+ expect(cb).toBeCalled();
15
+ });
16
+ test("CB is only called when something has changed", () => {
17
+ const cb = jest.fn();
18
+ const memoizedNumber = new MemoizedAngle_1.MemoizedAngle(ValueObjects_1.Angle.FromDegrees(33), cb);
19
+ memoizedNumber.val = ValueObjects_1.Angle.FromDegrees(33);
20
+ memoizedNumber.val = ValueObjects_1.Angle.FromDegrees(33);
21
+ memoizedNumber.val = ValueObjects_1.Angle.FromDegrees(33);
22
+ expect(cb).not.toBeCalled();
23
+ });
24
+ test("Setting the value quietly should not notify", () => {
25
+ const cb = jest.fn();
26
+ const memoizedBoolean = new MemoizedAngle_1.MemoizedAngle(ValueObjects_1.Angle.FromDegrees(33), cb);
27
+ memoizedBoolean.setValQuietly(ValueObjects_1.Angle.FromDegrees(55));
28
+ expect(cb).not.toBeCalled();
29
+ });
30
+ //# sourceMappingURL=MemoizedAngle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizedAngle.test.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedAngle.test.ts"],"names":[],"mappings":";;AAAA,kDAAwC;AACxC,mDAAgD;AAEhD,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACnC,MAAM,cAAc,GAAG,IAAI,6BAAa,CAAC,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,6BAAa,CAAC,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IAE5B,cAAc,CAAC,GAAG,GAAG,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE3C,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,6BAAa,CAAC,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,cAAc,CAAC,GAAG,GAAG,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC3C,cAAc,CAAC,GAAG,GAAG,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC3C,cAAc,CAAC,GAAG,GAAG,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE3C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,6BAAa,CAAC,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAErE,eAAe,CAAC,aAAa,CAAC,oBAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAErD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC","sourcesContent":["import { Angle } from \"../ValueObjects\";\r\nimport { MemoizedAngle } from \"./MemoizedAngle\";\r\n\r\ntest(\"Initial value is stored\", () => {\r\n const memoizedNumber = new MemoizedAngle(Angle.FromDegrees(55), jest.fn());\r\n expect(memoizedNumber.val.degrees).toEqual(55);\r\n});\r\n\r\ntest(\"Callback is called when something changes\", () => {\r\n const cb = jest.fn();\r\n const memoizedNumber = new MemoizedAngle(Angle.FromDegrees(33), cb);\r\n\r\n expect(cb).not.toBeCalled();\r\n\r\n memoizedNumber.val = Angle.FromDegrees(55);\r\n\r\n expect(cb).toBeCalled();\r\n});\r\n\r\ntest(\"CB is only called when something has changed\", () => {\r\n const cb = jest.fn();\r\n const memoizedNumber = new MemoizedAngle(Angle.FromDegrees(33), cb);\r\n\r\n memoizedNumber.val = Angle.FromDegrees(33);\r\n memoizedNumber.val = Angle.FromDegrees(33);\r\n memoizedNumber.val = Angle.FromDegrees(33);\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\ntest(\"Setting the value quietly should not notify\", () => {\r\n const cb = jest.fn();\r\n const memoizedBoolean = new MemoizedAngle(Angle.FromDegrees(33), cb);\r\n\r\n memoizedBoolean.setValQuietly(Angle.FromDegrees(55));\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n"]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoizedBoolean = void 0;
4
+ class MemoizedBoolean {
5
+ get val() {
6
+ return this._val;
7
+ }
8
+ set val(b) {
9
+ if (this._val === b)
10
+ return;
11
+ this._val = b;
12
+ this.onChangeCallback();
13
+ }
14
+ setValQuietly(val) {
15
+ this._val = val;
16
+ }
17
+ constructor(initialValue, onChangeCallback) {
18
+ this._val = initialValue;
19
+ this.onChangeCallback = onChangeCallback;
20
+ }
21
+ }
22
+ exports.MemoizedBoolean = MemoizedBoolean;
23
+ //# sourceMappingURL=MemoizedBoolean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizedBoolean.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedBoolean.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAe;IAE1B,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,CAAU;QAChB,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAY;QAC/B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,YAAY,YAAqB,EAAE,gBAA4B;QAC7D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAtBD,0CAsBC","sourcesContent":["export class MemoizedBoolean {\r\n private _val: boolean;\r\n get val(): boolean {\r\n return this._val;\r\n }\r\n set val(b: boolean) {\r\n if (this._val === b) return;\r\n\r\n this._val = b;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: boolean) {\r\n this._val = val;\r\n }\r\n\r\n private onChangeCallback: () => void;\r\n\r\n constructor(initialValue: boolean, onChangeCallback: () => void) {\r\n this._val = initialValue;\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const MemoizedBoolean_1 = require("./MemoizedBoolean");
4
+ test("Initial value is stored", () => {
5
+ const memoizedTrue = new MemoizedBoolean_1.MemoizedBoolean(true, jest.fn());
6
+ expect(memoizedTrue.val).toEqual(true);
7
+ const memoizedFalse = new MemoizedBoolean_1.MemoizedBoolean(false, jest.fn());
8
+ expect(memoizedFalse.val).toEqual(false);
9
+ });
10
+ test("Callback is called when something changes", () => {
11
+ const cb = jest.fn();
12
+ const memoizedBoolean = new MemoizedBoolean_1.MemoizedBoolean(true, cb);
13
+ expect(cb).not.toBeCalled();
14
+ memoizedBoolean.val = false;
15
+ expect(cb).toBeCalled();
16
+ cb.mockClear();
17
+ memoizedBoolean.val = true;
18
+ expect(cb).toBeCalled();
19
+ });
20
+ test("CB is only called when something has changed", () => {
21
+ const cb = jest.fn();
22
+ const memoizedBoolean = new MemoizedBoolean_1.MemoizedBoolean(true, cb);
23
+ memoizedBoolean.val = true;
24
+ memoizedBoolean.val = true;
25
+ memoizedBoolean.val = true;
26
+ expect(cb).not.toBeCalled();
27
+ });
28
+ test("Setting the value quietly should not notify", () => {
29
+ const cb = jest.fn();
30
+ const memoizedBoolean = new MemoizedBoolean_1.MemoizedBoolean(true, cb);
31
+ memoizedBoolean.setValQuietly(false);
32
+ expect(cb).not.toBeCalled();
33
+ });
34
+ //# sourceMappingURL=MemoizedBoolean.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizedBoolean.test.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedBoolean.test.ts"],"names":[],"mappings":";;AAAA,uDAAoD;AAEpD,IAAI,CAAC,yBAAyB,EAAE,GAAE,EAAE;IAClC,MAAM,YAAY,GAAG,IAAI,iCAAe,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,aAAa,GAAG,IAAI,iCAAe,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2CAA2C,EAAE,GAAE,EAAE;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEtD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IAE5B,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC;IAE5B,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACxB,EAAE,CAAC,SAAS,EAAE,CAAC;IAEf,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC;IAE3B,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,8CAA8C,EAAE,GAAE,EAAE;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEtD,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC;IAE3B,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6CAA6C,EAAE,GAAE,EAAE;IACtD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEtD,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAA","sourcesContent":["import { MemoizedBoolean } from \"./MemoizedBoolean\";\r\n\r\ntest(\"Initial value is stored\", ()=>{\r\n const memoizedTrue = new MemoizedBoolean(true, jest.fn());\r\n expect(memoizedTrue.val).toEqual(true);\r\n\r\n const memoizedFalse = new MemoizedBoolean(false, jest.fn());\r\n expect(memoizedFalse.val).toEqual(false);\r\n})\r\n\r\ntest(\"Callback is called when something changes\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedBoolean = new MemoizedBoolean(true, cb);\r\n\r\n expect(cb).not.toBeCalled();\r\n\r\n memoizedBoolean.val = false;\r\n\r\n expect(cb).toBeCalled();\r\n cb.mockClear();\r\n\r\n memoizedBoolean.val = true;\r\n\r\n expect(cb).toBeCalled();\r\n})\r\n\r\ntest(\"CB is only called when something has changed\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedBoolean = new MemoizedBoolean(true, cb);\r\n\r\n memoizedBoolean.val = true;\r\n memoizedBoolean.val = true;\r\n memoizedBoolean.val = true;\r\n\r\n expect(cb).not.toBeCalled();\r\n})\r\n\r\ntest(\"Setting the value quietly should not notify\", ()=>{\r\n const cb = jest.fn();\r\n const memoizedBoolean = new MemoizedBoolean(true, cb);\r\n\r\n memoizedBoolean.setValQuietly(false);\r\n\r\n expect(cb).not.toBeCalled();\r\n})"]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoizedColor = void 0;
4
+ const ValueObjects_1 = require("../ValueObjects");
5
+ class MemoizedColor {
6
+ get val() {
7
+ return this._val;
8
+ }
9
+ set val(v) {
10
+ if (ValueObjects_1.Color.Equal(v, this._val))
11
+ return;
12
+ this._val = v;
13
+ this.onChangeCallback();
14
+ }
15
+ setValQuietly(val) {
16
+ this._val = val;
17
+ }
18
+ constructor(initialValue, onChangeCallback) {
19
+ this._val = initialValue;
20
+ this.onChangeCallback = onChangeCallback;
21
+ }
22
+ }
23
+ exports.MemoizedColor = MemoizedColor;
24
+ //# sourceMappingURL=MemoizedColor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizedColor.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedColor.ts"],"names":[],"mappings":";;;AAAA,kDAAwC;AAExC,MAAa,aAAa;IAGxB,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,CAAQ;QACd,IAAI,oBAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAEtC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAU;QAC7B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,YAAY,YAAmB,EAAE,gBAA4B;QAC3D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAxBD,sCAwBC","sourcesContent":["import { Color } from \"../ValueObjects\";\r\n\r\nexport class MemoizedColor {\r\n private _val: Color;\r\n\r\n get val(): Color {\r\n return this._val;\r\n }\r\n\r\n set val(v: Color) {\r\n if (Color.Equal(v, this._val)) return;\r\n\r\n this._val = v;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: Color) {\r\n this._val = val;\r\n }\r\n\r\n private onChangeCallback: () => void;\r\n\r\n constructor(initialValue: Color, onChangeCallback: () => void) {\r\n this._val = initialValue;\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ValueObjects_1 = require("../ValueObjects");
4
+ const MemoizedColor_1 = require("./MemoizedColor");
5
+ test("Initial value is stored", () => {
6
+ const initialColor = ValueObjects_1.Color.RGBA(5, 6, 7, 8);
7
+ const memoizedVector = new MemoizedColor_1.MemoizedColor(initialColor, jest.fn());
8
+ expect(memoizedVector.val).toEqual(ValueObjects_1.Color.RGBA(5, 6, 7, 8));
9
+ });
10
+ test("Callback is called when the val changes", () => {
11
+ const cb = jest.fn();
12
+ const initialColor = ValueObjects_1.Color.RGBA(5, 6, 7, 8);
13
+ const memoizedQuat = new MemoizedColor_1.MemoizedColor(initialColor, cb);
14
+ memoizedQuat.val = ValueObjects_1.Color.RGBA(8, 9, 10, 11);
15
+ expect(cb).toBeCalled();
16
+ });
17
+ test("Callback is called only when the val changes", () => {
18
+ const cb = jest.fn();
19
+ const initialColor = ValueObjects_1.Color.RGBA(5, 6, 7, 8);
20
+ const memoizedQuat = new MemoizedColor_1.MemoizedColor(initialColor, cb);
21
+ memoizedQuat.val = ValueObjects_1.Color.RGBA(5, 6, 7, 8);
22
+ memoizedQuat.val = ValueObjects_1.Color.RGBA(5, 6, 7, 8);
23
+ memoizedQuat.val = ValueObjects_1.Color.RGBA(5, 6, 7, 8);
24
+ expect(cb).not.toBeCalled();
25
+ });
26
+ test("Setting the value quietly should not notify", () => {
27
+ const cb = jest.fn();
28
+ const memoizedQuat = new MemoizedColor_1.MemoizedColor(ValueObjects_1.Color.RGBA(5, 6, 7, 8), cb);
29
+ memoizedQuat.setValQuietly(ValueObjects_1.Color.RGBA(0, 0, 0, 0));
30
+ expect(cb).not.toBeCalled();
31
+ });
32
+ //# sourceMappingURL=MemoizedColor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizedColor.test.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedColor.test.ts"],"names":[],"mappings":";;AAAA,kDAAwC;AACxC,mDAAgD;AAEhD,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACnC,MAAM,YAAY,GAAG,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,6BAAa,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,YAAY,GAAG,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,6BAAa,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAEzD,YAAY,CAAC,GAAG,GAAG,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE5C,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,YAAY,GAAG,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,6BAAa,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAEzD,YAAY,CAAC,GAAG,GAAG,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,YAAY,CAAC,GAAG,GAAG,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,YAAY,CAAC,GAAG,GAAG,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACrB,MAAM,YAAY,GAAG,IAAI,6BAAa,CAAC,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnE,YAAY,CAAC,aAAa,CAAC,oBAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC","sourcesContent":["import { Color } from \"../ValueObjects\";\r\nimport { MemoizedColor } from \"./MemoizedColor\";\r\n\r\ntest(\"Initial value is stored\", () => {\r\n const initialColor = Color.RGBA(5, 6, 7, 8);\r\n const memoizedVector = new MemoizedColor(initialColor, jest.fn());\r\n expect(memoizedVector.val).toEqual(Color.RGBA(5, 6, 7, 8));\r\n});\r\n\r\ntest(\"Callback is called when the val changes\", () => {\r\n const cb = jest.fn();\r\n const initialColor = Color.RGBA(5, 6, 7, 8);\r\n const memoizedQuat = new MemoizedColor(initialColor, cb);\r\n\r\n memoizedQuat.val = Color.RGBA(8, 9, 10, 11);\r\n\r\n expect(cb).toBeCalled();\r\n});\r\n\r\ntest(\"Callback is called only when the val changes\", () => {\r\n const cb = jest.fn();\r\n const initialColor = Color.RGBA(5, 6, 7, 8);\r\n const memoizedQuat = new MemoizedColor(initialColor, cb);\r\n\r\n memoizedQuat.val = Color.RGBA(5, 6, 7, 8);\r\n memoizedQuat.val = Color.RGBA(5, 6, 7, 8);\r\n memoizedQuat.val = Color.RGBA(5, 6, 7, 8);\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\ntest(\"Setting the value quietly should not notify\", () => {\r\n const cb = jest.fn();\r\n const memoizedQuat = new MemoizedColor(Color.RGBA(5, 6, 7, 8), cb);\r\n\r\n memoizedQuat.setValQuietly(Color.RGBA(0, 0, 0, 0));\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n"]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemoizedNumber = void 0;
4
+ class MemoizedNumber {
5
+ get val() {
6
+ return this._val;
7
+ }
8
+ set val(b) {
9
+ if (this._val === b)
10
+ return;
11
+ this._val = b;
12
+ this.onChangeCallback();
13
+ }
14
+ setValQuietly(val) {
15
+ this._val = val;
16
+ }
17
+ constructor(initialValue, onChangeCallback) {
18
+ this._val = initialValue;
19
+ this.onChangeCallback = onChangeCallback;
20
+ }
21
+ }
22
+ exports.MemoizedNumber = MemoizedNumber;
23
+ //# sourceMappingURL=MemoizedNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoizedNumber.js","sourceRoot":"","sources":["../../../src/Entities/MemoizedNumber.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IAEzB,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,CAAS;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAW;QAC9B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,YAAY,YAAoB,EAAE,gBAA4B;QAC5D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAtBD,wCAsBC","sourcesContent":["export class MemoizedNumber {\r\n private _val: number;\r\n get val(): number {\r\n return this._val;\r\n }\r\n set val(b: number) {\r\n if (this._val === b) return;\r\n\r\n this._val = b;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: number) {\r\n this._val = val;\r\n }\r\n \r\n private onChangeCallback: () => void;\r\n\r\n constructor(initialValue: number, onChangeCallback: () => void) {\r\n this._val = initialValue;\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}