@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 @@
1
+ {"version":3,"file":"AppObjectEntity.test.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, makeAppObject } from \"./AppObject\";\r\nimport { AppObjectComponentType } from \"./AppObjectComponent\";\r\nimport { AppObjectEntity } from \"./AppObjectEntity\";\r\nimport { makeAppObjectRepo } from \"./AppObjectRepo\";\r\n\r\nclass MockEntity extends AppObjectEntity {\r\n static type = \"mockEntity\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, MockEntity.type);\r\n }\r\n}\r\n\r\nfunction makeTestRig() {\r\n const appObjectRepo = makeAppObjectRepo();\r\n const appObj = makeAppObject(\"appObj\", appObjectRepo);\r\n const appObjectEntity = new MockEntity(appObj);\r\n\r\n const onChangeObserver = jest.fn();\r\n appObjectEntity.addChangeObserver(onChangeObserver);\r\n\r\n return { appObjectEntity, onChangeObserver, appObj, appObjectRepo };\r\n}\r\n\r\ndescribe(\"Abstract Observable Entity\", () => {\r\n it(\"Sets the type\", () => {\r\n const { appObjectEntity } = makeTestRig();\r\n expect(appObjectEntity.type).toEqual(\"mockEntity\");\r\n });\r\n\r\n it(\"Notifies on change\", () => {\r\n const { onChangeObserver, appObjectEntity } = makeTestRig();\r\n appObjectEntity.notifyOnChange();\r\n\r\n expect(onChangeObserver).toBeCalled();\r\n });\r\n\r\n it(\"Removes an on change onChangeObserver\", () => {\r\n const { onChangeObserver, appObjectEntity } = makeTestRig();\r\n appObjectEntity.removeChangeObserver(onChangeObserver);\r\n appObjectEntity.notifyOnChange();\r\n\r\n expect(onChangeObserver).not.toBeCalled();\r\n });\r\n\r\n it(\"Notifies when disposed\", () => {\r\n const { appObjectEntity } = makeTestRig();\r\n const disposeObserver = jest.fn();\r\n appObjectEntity.addOnDisposeObserver(disposeObserver);\r\n\r\n appObjectEntity.dispose();\r\n\r\n expect(disposeObserver).toBeCalled();\r\n });\r\n\r\n it(\"Removes a dispose onChangeObserver\", () => {\r\n const { appObjectEntity } = makeTestRig();\r\n const disposeObserver = jest.fn();\r\n appObjectEntity.addOnDisposeObserver(disposeObserver);\r\n appObjectEntity.removeOnDisposeObserver(disposeObserver);\r\n\r\n appObjectEntity.dispose();\r\n expect(disposeObserver).not.toBeCalled();\r\n });\r\n\r\n it(\"Clears all observers when disposed\", () => {\r\n const { onChangeObserver, appObjectEntity } = makeTestRig();\r\n const disposeObserver = jest.fn();\r\n appObjectEntity.addOnDisposeObserver(disposeObserver);\r\n\r\n appObjectEntity.dispose();\r\n\r\n disposeObserver.mockClear();\r\n onChangeObserver.mockClear();\r\n\r\n appObjectEntity.notifyOnChange();\r\n appObjectEntity.dispose();\r\n\r\n expect(onChangeObserver).not.toBeCalled();\r\n expect(disposeObserver).not.toBeCalled();\r\n });\r\n\r\n it(\"Stores the app object\", () => {\r\n const { appObjectEntity, appObj } = makeTestRig();\r\n expect(appObjectEntity.appObject).toEqual(appObj);\r\n });\r\n\r\n it(\"Adds itself to the app object\", () => {\r\n const { appObjectEntity, appObj } = makeTestRig();\r\n\r\n expect(appObj.hasComponent(appObjectEntity.type)).toEqual(true);\r\n });\r\n\r\n it(\"Removes itself from the app object when disposed\", () => {\r\n const { appObjectEntity, appObj } = makeTestRig();\r\n\r\n appObjectEntity.dispose();\r\n\r\n expect(appObj.hasComponent(appObjectEntity.type)).toEqual(false);\r\n });\r\n\r\n it(\"Forwards notifications to the App Object observers\", () => {\r\n const { appObjectEntity, appObj } = makeTestRig();\r\n\r\n const appObjObserver = jest.fn();\r\n appObj.addObserver(appObjObserver);\r\n\r\n appObjectEntity.notifyOnChange();\r\n\r\n expect(appObjObserver).toBeCalled();\r\n });\r\n\r\n it(\"Stops forwarding notifications to the App Object observers when disposed\", () => {\r\n const { appObjectEntity, appObj } = makeTestRig();\r\n\r\n const appObjObserver = jest.fn();\r\n appObj.addObserver(appObjObserver);\r\n\r\n appObjectEntity.dispose();\r\n appObjObserver.mockClear();\r\n\r\n appObjectEntity.notifyOnChange();\r\n\r\n expect(appObjObserver).not.toBeCalled();\r\n });\r\n\r\n it(\"Returns the repo\", () => {\r\n const { appObjectEntity, appObjectRepo } = makeTestRig();\r\n expect(appObjectEntity.appObjects).toEqual(appObjectRepo);\r\n });\r\n\r\n it(\"Forwards a warn to the App Object Repo warn\", () => {\r\n const { appObjectEntity, appObjectRepo } = makeTestRig();\r\n appObjectRepo.submitWarning = jest.fn();\r\n\r\n appObjectEntity.warn(\"Some warning\");\r\n\r\n expect(appObjectRepo.submitWarning).toBeCalledWith(\r\n `appObj/mockEntity`,\r\n \"Some warning\"\r\n );\r\n });\r\n\r\n it(\"Sets Component type to Entity\", () => {\r\n const { appObjectEntity } = makeTestRig();\r\n\r\n expect(appObjectEntity.componentType).toEqual(\r\n AppObjectComponentType.ENTITY\r\n );\r\n });\r\n});\r\n"]}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppObjectEntityRepo = void 0;
4
+ const Entities_1 = require("../Entities");
5
+ const AppObjectEntity_1 = require("./AppObjectEntity");
6
+ class AppObjectEntityRepo extends AppObjectEntity_1.AppObjectEntity {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.entityLookup = new Map();
10
+ this.onEntityAddedObservers = new Entities_1.ObserverList();
11
+ this.addEntityAddedObserver = (observer) => {
12
+ this.onEntityAddedObservers.add(observer);
13
+ };
14
+ this.removeEntityAddedObserver = (observer) => {
15
+ this.onEntityAddedObservers.remove(observer);
16
+ };
17
+ this.onEntityRemovedObservers = new Entities_1.ObserverList();
18
+ this.addEntityRemovedObserver = (observer) => {
19
+ this.onEntityRemovedObservers.add(observer);
20
+ };
21
+ this.removeEntityRemovedObserver = (observer) => {
22
+ this.onEntityRemovedObservers.remove(observer);
23
+ };
24
+ this.hasForAppObject = (appObjectID) => {
25
+ return this.entityLookup.has(appObjectID);
26
+ };
27
+ this.removeForAppObject = (id) => {
28
+ const existing = this.entityLookup.get(id);
29
+ if (!existing)
30
+ return;
31
+ this.entityLookup.delete(id);
32
+ existing.removeChangeObserver(this.notifyOnChange);
33
+ this.notifyOnChange();
34
+ this.onEntityRemovedObservers.notify(existing);
35
+ };
36
+ this.getForAppObject = (appObjectID) => {
37
+ return this.entityLookup.get(appObjectID);
38
+ };
39
+ this.getAll = () => {
40
+ return Array.from(this.entityLookup.values());
41
+ };
42
+ }
43
+ add(entity) {
44
+ const existing = this.entityLookup.get(entity.appObject.id);
45
+ if (existing) {
46
+ existing.removeChangeObserver(this.notifyOnChange);
47
+ }
48
+ this.entityLookup.set(entity.appObject.id, entity);
49
+ entity.addChangeObserver(this.notifyOnChange);
50
+ this.notifyOnChange();
51
+ this.onEntityAddedObservers.notify(entity);
52
+ }
53
+ ;
54
+ }
55
+ exports.AppObjectEntityRepo = AppObjectEntityRepo;
56
+ //# sourceMappingURL=AppObjectEntityRepo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppObjectEntityRepo.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntityRepo.ts"],"names":[],"mappings":";;;AAAA,0CAA2C;AAC3C,uDAAoD;AAEpD,MAAa,mBAEX,SAAQ,iCAAe;IAFzB;;QAIU,iBAAY,GAAG,IAAI,GAAG,EAAa,CAAC;QAEpC,2BAAsB,GAAG,IAAI,uBAAY,EAAK,CAAC;QACvD,2BAAsB,GAAG,CAAC,QAAkC,EAAE,EAAE;YAC9D,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC;QACF,8BAAyB,GAAG,CAAC,QAAkC,EAAQ,EAAE;YACvE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC,CAAC;QAEM,6BAAwB,GAAG,IAAI,uBAAY,EAAK,CAAC;QACzD,6BAAwB,GAAG,CAAC,QAAoC,EAAE,EAAE;YAClE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,gCAA2B,GAAG,CAC5B,QAAoC,EAC9B,EAAE;YACR,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,oBAAe,GAAG,CAAC,WAAmB,EAAW,EAAE;YACjD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC;QAcF,uBAAkB,GAAG,CAAC,EAAU,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,oBAAe,GAAG,CAAC,WAAmB,EAAiB,EAAE;YACvD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,WAAM,GAAG,GAAQ,EAAE;YACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC;IACJ,CAAC;IA7BC,GAAG,CAAC,MAAS;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAA,CAAC;CAmBH;AAzDD,kDAyDC","sourcesContent":["import { ObserverList } from \"../Entities\";\r\nimport { AppObjectEntity } from \"./AppObjectEntity\";\r\n\r\nexport class AppObjectEntityRepo<\r\n T extends AppObjectEntity\r\n> extends AppObjectEntity {\r\n\r\n private entityLookup = new Map<string, T>();\r\n\r\n private onEntityAddedObservers = new ObserverList<T>();\r\n addEntityAddedObserver = (observer: (addedEntity: T) => void) => {\r\n this.onEntityAddedObservers.add(observer);\r\n };\r\n removeEntityAddedObserver = (observer: (addedEntity: T) => void): void => {\r\n this.onEntityAddedObservers.remove(observer);\r\n };\r\n\r\n private onEntityRemovedObservers = new ObserverList<T>();\r\n addEntityRemovedObserver = (observer: (removedEntity: T) => void) => {\r\n this.onEntityRemovedObservers.add(observer);\r\n };\r\n removeEntityRemovedObserver = (\r\n observer: (removedEntity: T) => void\r\n ): void => {\r\n this.onEntityRemovedObservers.remove(observer);\r\n };\r\n\r\n hasForAppObject = (appObjectID: string): boolean => {\r\n return this.entityLookup.has(appObjectID);\r\n };\r\n\r\n add(entity: T) {\r\n const existing = this.entityLookup.get(entity.appObject.id);\r\n if (existing) {\r\n existing.removeChangeObserver(this.notifyOnChange);\r\n }\r\n\r\n this.entityLookup.set(entity.appObject.id, entity);\r\n entity.addChangeObserver(this.notifyOnChange);\r\n this.notifyOnChange();\r\n this.onEntityAddedObservers.notify(entity);\r\n };\r\n\r\n removeForAppObject = (id: string) => {\r\n const existing = this.entityLookup.get(id);\r\n if (!existing) return;\r\n\r\n this.entityLookup.delete(id);\r\n existing.removeChangeObserver(this.notifyOnChange);\r\n this.notifyOnChange();\r\n this.onEntityRemovedObservers.notify(existing);\r\n };\r\n\r\n getForAppObject = (appObjectID: string): T | undefined => {\r\n return this.entityLookup.get(appObjectID);\r\n };\r\n\r\n getAll = (): T[] => {\r\n return Array.from(this.entityLookup.values());\r\n };\r\n}\r\n"]}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AppObject_1 = require("./AppObject");
4
+ const AppObjectEntity_1 = require("./AppObjectEntity");
5
+ const AppObjectEntityRepo_1 = require("./AppObjectEntityRepo");
6
+ const AppObjectRepo_1 = require("./AppObjectRepo");
7
+ class MockAppEntity extends AppObjectEntity_1.AppObjectEntity {
8
+ constructor(appObject) {
9
+ super(appObject, MockAppEntity.type);
10
+ }
11
+ }
12
+ MockAppEntity.type = "mockEntity";
13
+ class MockEntityRepoImp extends AppObjectEntityRepo_1.AppObjectEntityRepo {
14
+ makeEntity(appObj) {
15
+ return new MockAppEntity(appObj);
16
+ }
17
+ constructor(appObject) {
18
+ super(appObject, MockAppEntity.type);
19
+ }
20
+ }
21
+ MockEntityRepoImp.type = "Mock Repo";
22
+ function makeTestRig() {
23
+ const appObjects = (0, AppObjectRepo_1.makeAppObjectRepo)();
24
+ const repoAppObj = (0, AppObject_1.makeAppObject)("repo", appObjects);
25
+ const repo = new MockEntityRepoImp(repoAppObj);
26
+ const appObj = (0, AppObject_1.makeAppObject)("appObjID", appObjects);
27
+ const observer = jest.fn();
28
+ repo.addChangeObserver(observer);
29
+ return { repo, observer, appObj };
30
+ }
31
+ describe("Observable Entity Repo", () => {
32
+ it("Allows an entity to be added", () => {
33
+ const { repo, appObj } = makeTestRig();
34
+ const entity = new MockAppEntity(appObj);
35
+ expect(repo.hasForAppObject("appObjID")).toEqual(false);
36
+ repo.add(entity);
37
+ expect(repo.hasForAppObject("appObjID")).toEqual(true);
38
+ });
39
+ it("Notifies when an entity is added", () => {
40
+ const { repo, observer, appObj } = makeTestRig();
41
+ const entity = new MockAppEntity(appObj);
42
+ repo.add(entity);
43
+ expect(observer).toBeCalled();
44
+ });
45
+ it("Forwards notification from an added entity", () => {
46
+ const { repo, observer, appObj } = makeTestRig();
47
+ const entity = new MockAppEntity(appObj);
48
+ repo.add(entity);
49
+ observer.mockClear();
50
+ entity.notifyOnChange();
51
+ expect(observer).toBeCalled();
52
+ });
53
+ it("Stops notifying if adding an entity replaces and exisitng entity", () => {
54
+ const { repo, observer, appObj } = makeTestRig();
55
+ console.warn = jest.fn(); // Replacing warns. This keeps the console clean
56
+ const original = new MockAppEntity(appObj);
57
+ repo.add(original);
58
+ const replacement = new MockAppEntity(appObj);
59
+ repo.add(replacement);
60
+ observer.mockClear();
61
+ original.notifyOnChange();
62
+ expect(observer).not.toBeCalled();
63
+ });
64
+ it("Removes an entity", () => {
65
+ const { repo, appObj } = makeTestRig();
66
+ const entity = new MockAppEntity(appObj);
67
+ repo.add(entity);
68
+ expect(repo.hasForAppObject("appObjID")).toEqual(true);
69
+ repo.removeForAppObject("appObjID");
70
+ expect(repo.hasForAppObject("appObjID")).toEqual(false);
71
+ });
72
+ it("Notifies if an entity is removed", () => {
73
+ const { repo, observer, appObj } = makeTestRig();
74
+ const entity = new MockAppEntity(appObj);
75
+ repo.add(entity);
76
+ observer.mockClear();
77
+ repo.removeForAppObject("appObjID");
78
+ expect(observer).toBeCalled();
79
+ });
80
+ it("Does not notifyOnChange if the entity to be removed cannot be found", () => {
81
+ const { repo, observer } = makeTestRig();
82
+ repo.removeForAppObject("someId");
83
+ repo.removeForAppObject("someId");
84
+ repo.removeForAppObject("someId");
85
+ expect(observer).not.toBeCalled();
86
+ });
87
+ it("Stops observing a removed entity", () => {
88
+ const { repo, observer, appObj } = makeTestRig();
89
+ const entity = new MockAppEntity(appObj);
90
+ repo.add(entity);
91
+ repo.removeForAppObject("appObjID");
92
+ observer.mockClear();
93
+ entity.notifyOnChange();
94
+ expect(observer).not.toBeCalled();
95
+ });
96
+ it("Gets an entity", () => {
97
+ const { repo, appObj } = makeTestRig();
98
+ const entity = new MockAppEntity(appObj);
99
+ repo.add(entity);
100
+ expect(repo.getForAppObject("appObjID")).toEqual(entity);
101
+ });
102
+ it("Gets all entities", () => {
103
+ const { repo, appObj } = makeTestRig();
104
+ const entity = new MockAppEntity(appObj);
105
+ repo.add(entity);
106
+ expect(repo.getAll()).toEqual([entity]);
107
+ });
108
+ it("Returns undefined for an unknown entity", () => {
109
+ const { repo } = makeTestRig();
110
+ expect(repo.getForAppObject("unknownID")).toBeUndefined();
111
+ });
112
+ it("Supports notifying an observer when an entity is added", () => {
113
+ const { repo, appObj } = makeTestRig();
114
+ const addEntityObserver = jest.fn();
115
+ repo.addEntityAddedObserver(addEntityObserver);
116
+ const ent = new MockAppEntity(appObj);
117
+ repo.add(ent);
118
+ expect(addEntityObserver).toBeCalledWith(ent);
119
+ });
120
+ it("Add entity observer can be removed", () => {
121
+ const { repo, appObj } = makeTestRig();
122
+ const addEntityObserver = jest.fn();
123
+ repo.addEntityAddedObserver(addEntityObserver);
124
+ repo.removeEntityAddedObserver(addEntityObserver);
125
+ const ent = new MockAppEntity(appObj);
126
+ repo.add(ent);
127
+ expect(addEntityObserver).not.toBeCalled();
128
+ });
129
+ it("Supports notifying an observer when an entity is removed", () => {
130
+ const { repo, appObj } = makeTestRig();
131
+ const removeEntityObserver = jest.fn();
132
+ repo.addEntityRemovedObserver(removeEntityObserver);
133
+ const ent = new MockAppEntity(appObj);
134
+ repo.add(ent);
135
+ repo.removeForAppObject("appObjID");
136
+ expect(removeEntityObserver).toBeCalledWith(ent);
137
+ });
138
+ it("Remove entity observer can be removed", () => {
139
+ const { repo, appObj } = makeTestRig();
140
+ const removeEntityObserver = jest.fn();
141
+ repo.addEntityRemovedObserver(removeEntityObserver);
142
+ repo.removeEntityRemovedObserver(removeEntityObserver);
143
+ const ent = new MockAppEntity(appObj);
144
+ repo.add(ent);
145
+ repo.removeForAppObject("appObjID");
146
+ expect(removeEntityObserver).not.toBeCalled();
147
+ });
148
+ });
149
+ //# sourceMappingURL=AppObjectEntityRepo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppObjectEntityRepo.test.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntityRepo.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, makeAppObject } from \"./AppObject\";\r\nimport { AppObjectEntity } from \"./AppObjectEntity\";\r\nimport { AppObjectEntityRepo } from \"./AppObjectEntityRepo\";\r\nimport { makeAppObjectRepo } from \"./AppObjectRepo\";\r\n\r\nclass MockAppEntity extends AppObjectEntity {\r\n static type: string = \"mockEntity\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, MockAppEntity.type)\r\n }\r\n}\r\n\r\nclass MockEntityRepoImp extends AppObjectEntityRepo<MockAppEntity> {\r\n static type: string = \"Mock Repo\";\r\n\r\n makeEntity(appObj: AppObject): MockAppEntity {\r\n return new MockAppEntity(appObj);\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, MockAppEntity.type)\r\n }\r\n}\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const repoAppObj = makeAppObject(\"repo\", appObjects);\r\n const repo = new MockEntityRepoImp(repoAppObj);\r\n \r\n const appObj = makeAppObject(\"appObjID\", appObjects);\r\n const observer = jest.fn();\r\n repo.addChangeObserver(observer);\r\n\r\n return { repo, observer, appObj };\r\n}\r\n\r\ndescribe(\"Observable Entity Repo\", () => {\r\n it(\"Allows an entity to be added\", () => {\r\n const { repo, appObj } = makeTestRig();\r\n const entity = new MockAppEntity(appObj);\r\n\r\n expect(repo.hasForAppObject(\"appObjID\")).toEqual(false);\r\n\r\n repo.add(entity);\r\n\r\n expect(repo.hasForAppObject(\"appObjID\")).toEqual(true);\r\n });\r\n\r\n it(\"Notifies when an entity is added\", () => {\r\n const { repo, observer, appObj } = makeTestRig();\r\n const entity =new MockAppEntity(appObj);\r\n repo.add(entity);\r\n\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Forwards notification from an added entity\", () => {\r\n const { repo, observer, appObj } = makeTestRig();\r\n const entity =new MockAppEntity(appObj);\r\n repo.add(entity);\r\n\r\n observer.mockClear();\r\n\r\n entity.notifyOnChange();\r\n\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Stops notifying if adding an entity replaces and exisitng entity\", () => {\r\n const { repo, observer, appObj } = makeTestRig();\r\n\r\n console.warn = jest.fn(); // Replacing warns. This keeps the console clean\r\n\r\n const original =new MockAppEntity(appObj);\r\n repo.add(original);\r\n\r\n const replacement =new MockAppEntity(appObj);\r\n repo.add(replacement);\r\n observer.mockClear();\r\n\r\n original.notifyOnChange();\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Removes an entity\", () => {\r\n const { repo, appObj } = makeTestRig();\r\n const entity =new MockAppEntity(appObj);\r\n\r\n repo.add(entity);\r\n\r\n expect(repo.hasForAppObject(\"appObjID\")).toEqual(true);\r\n\r\n repo.removeForAppObject(\"appObjID\");\r\n\r\n expect(repo.hasForAppObject(\"appObjID\")).toEqual(false);\r\n });\r\n\r\n it(\"Notifies if an entity is removed\", () => {\r\n const { repo, observer, appObj } = makeTestRig();\r\n const entity =new MockAppEntity(appObj);\r\n\r\n repo.add(entity);\r\n observer.mockClear();\r\n\r\n repo.removeForAppObject(\"appObjID\");\r\n\r\n expect(observer).toBeCalled();\r\n });\r\n\r\n it(\"Does not notifyOnChange if the entity to be removed cannot be found\", () => {\r\n const { repo, observer } = makeTestRig();\r\n\r\n repo.removeForAppObject(\"someId\");\r\n repo.removeForAppObject(\"someId\");\r\n repo.removeForAppObject(\"someId\");\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Stops observing a removed entity\", () => {\r\n const { repo, observer, appObj } = makeTestRig();\r\n const entity =new MockAppEntity(appObj);\r\n\r\n repo.add(entity);\r\n repo.removeForAppObject(\"appObjID\");\r\n\r\n observer.mockClear();\r\n\r\n entity.notifyOnChange();\r\n\r\n expect(observer).not.toBeCalled();\r\n });\r\n\r\n it(\"Gets an entity\", () => {\r\n const { repo, appObj } = makeTestRig();\r\n const entity =new MockAppEntity(appObj);\r\n repo.add(entity);\r\n\r\n expect(repo.getForAppObject(\"appObjID\")).toEqual(entity);\r\n });\r\n\r\n it(\"Gets all entities\", () => {\r\n const { repo, appObj } = makeTestRig();\r\n const entity =new MockAppEntity(appObj);\r\n repo.add(entity);\r\n\r\n expect(repo.getAll()).toEqual([entity]);\r\n });\r\n\r\n it(\"Returns undefined for an unknown entity\", () => {\r\n const { repo } = makeTestRig();\r\n\r\n expect(repo.getForAppObject(\"unknownID\")).toBeUndefined();\r\n });\r\n\r\n\r\n it(\"Supports notifying an observer when an entity is added\", () => {\r\n const { repo, appObj } = makeTestRig();\r\n\r\n const addEntityObserver = jest.fn();\r\n repo.addEntityAddedObserver(addEntityObserver);\r\n\r\n const ent =new MockAppEntity(appObj);\r\n repo.add(ent);\r\n\r\n expect(addEntityObserver).toBeCalledWith(ent);\r\n });\r\n\r\n it(\"Add entity observer can be removed\", () => {\r\n const { repo, appObj } = makeTestRig();\r\n\r\n const addEntityObserver = jest.fn();\r\n repo.addEntityAddedObserver(addEntityObserver);\r\n repo.removeEntityAddedObserver(addEntityObserver);\r\n\r\n const ent =new MockAppEntity(appObj);\r\n repo.add(ent);\r\n\r\n expect(addEntityObserver).not.toBeCalled();\r\n });\r\n\r\n it(\"Supports notifying an observer when an entity is removed\", () => {\r\n const { repo, appObj } = makeTestRig();\r\n\r\n const removeEntityObserver = jest.fn();\r\n repo.addEntityRemovedObserver(removeEntityObserver);\r\n\r\n const ent =new MockAppEntity(appObj);\r\n repo.add(ent);\r\n\r\n repo.removeForAppObject(\"appObjID\");\r\n\r\n expect(removeEntityObserver).toBeCalledWith(ent);\r\n });\r\n\r\n it(\"Remove entity observer can be removed\", () => {\r\n const { repo, appObj } = makeTestRig();\r\n\r\n const removeEntityObserver = jest.fn();\r\n repo.addEntityRemovedObserver(removeEntityObserver);\r\n repo.removeEntityRemovedObserver(removeEntityObserver);\r\n\r\n const ent =new MockAppEntity(appObj);\r\n repo.add(ent);\r\n repo.removeForAppObject(\"appObjID\");\r\n\r\n expect(removeEntityObserver).not.toBeCalled();\r\n });\r\n});\r\n"]}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppObjectPM = void 0;
4
+ const Entities_1 = require("../Entities");
5
+ const AppObjectComponent_1 = require("./AppObjectComponent");
6
+ class AppObjectPM extends AppObjectComponent_1.AppObjectComponent {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.componentType = AppObjectComponent_1.AppObjectComponentType.PM;
10
+ this.observerList = new Entities_1.ObserverList();
11
+ }
12
+ get lastVM() {
13
+ return this._lastVM;
14
+ }
15
+ addView(updateView) {
16
+ this.observerList.add(updateView);
17
+ if (this._lastVM !== undefined) {
18
+ updateView(this._lastVM);
19
+ }
20
+ }
21
+ removeView(updateView) {
22
+ this.observerList.remove(updateView);
23
+ }
24
+ doUpdateView(vm) {
25
+ if (this._lastVM && this.vmsAreEqual(this._lastVM, vm)) {
26
+ return;
27
+ }
28
+ this._lastVM = vm;
29
+ this.observerList.notify(vm);
30
+ }
31
+ dispose() {
32
+ this.observerList.clear();
33
+ if (this.appObject.getComponent(this.type) === this) {
34
+ this.appObject.removeComponent(this.type);
35
+ }
36
+ super.dispose();
37
+ }
38
+ }
39
+ exports.AppObjectPM = AppObjectPM;
40
+ //# sourceMappingURL=AppObjectPM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppObjectPM.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectPM.ts"],"names":[],"mappings":";;;AAAA,0CAA2C;AAC3C,6DAAkF;AAElF,MAAsB,WAAe,SAAQ,uCAAkB;IAA/D;;QACW,kBAAa,GAAG,2CAAsB,CAAC,EAAE,CAAC;QAQ3C,iBAAY,GAAG,IAAI,uBAAY,EAAK,CAAC;IA8B/C,CAAC;IAlCC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAID,OAAO,CAAC,UAA2B;QACjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,UAAU,CAAC,UAA2B;QACpC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,CAAC,EAAK;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAvCD,kCAuCC","sourcesContent":["import { ObserverList } from \"../Entities\";\r\nimport { AppObjectComponent, AppObjectComponentType } from \"./AppObjectComponent\";\r\n\r\nexport abstract class AppObjectPM<T> extends AppObjectComponent {\r\n readonly componentType = AppObjectComponentType.PM;\r\n abstract vmsAreEqual(a: T, b: T): boolean;\r\n\r\n private _lastVM?: T;\r\n get lastVM(): T | undefined {\r\n return this._lastVM;\r\n }\r\n\r\n private observerList = new ObserverList<T>();\r\n\r\n addView(updateView: (vm: T) => void): void {\r\n this.observerList.add(updateView);\r\n\r\n if (this._lastVM !== undefined) {\r\n updateView(this._lastVM);\r\n }\r\n }\r\n\r\n removeView(updateView: (vm: T) => void): void {\r\n this.observerList.remove(updateView);\r\n }\r\n\r\n doUpdateView(vm: T) {\r\n if (this._lastVM && this.vmsAreEqual(this._lastVM, vm)) {\r\n return;\r\n }\r\n\r\n this._lastVM = vm;\r\n this.observerList.notify(vm);\r\n }\r\n\r\n dispose() {\r\n this.observerList.clear();\r\n if (this.appObject.getComponent(this.type) === this) {\r\n this.appObject.removeComponent(this.type);\r\n }\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AppObjectComponent_1 = require("./AppObjectComponent");
4
+ const AppObjectPM_1 = require("./AppObjectPM");
5
+ const AppObjectRepo_1 = require("./AppObjectRepo");
6
+ class MockPM extends AppObjectPM_1.AppObjectPM {
7
+ get currentVM() {
8
+ return { val: 5 };
9
+ }
10
+ vmsAreEqual(a, b) {
11
+ return a.val === b.val;
12
+ }
13
+ constructor(appObj) {
14
+ super(appObj, MockPM.type);
15
+ this.defaultVM = { val: 0 };
16
+ }
17
+ }
18
+ MockPM.type = "MockPM";
19
+ function makeTestRig() {
20
+ const appObjects = (0, AppObjectRepo_1.makeAppObjectRepo)();
21
+ const appObj = appObjects.getOrCreate("appObj");
22
+ return { appObj, appObjects };
23
+ }
24
+ describe("App Object PM", () => {
25
+ it("Initializes with the last VM if it has been set", () => {
26
+ const { appObj } = makeTestRig();
27
+ const pm = new MockPM(appObj);
28
+ const view = jest.fn();
29
+ pm.doUpdateView({ val: 6 });
30
+ pm.addView(view);
31
+ expect(view).toBeCalledWith({ val: 6 });
32
+ });
33
+ it("Adds a view but does not call it if no VM has been set", () => {
34
+ const { appObj } = makeTestRig();
35
+ const pm = new MockPM(appObj);
36
+ const view = jest.fn();
37
+ pm.addView(view);
38
+ expect(view).not.toBeCalled();
39
+ });
40
+ it("Doesn't notify if the vms are equal", () => {
41
+ const { appObj } = makeTestRig();
42
+ const pm = new MockPM(appObj);
43
+ const view = jest.fn();
44
+ pm.doUpdateView({ val: 6 });
45
+ pm.addView(view);
46
+ view.mockClear();
47
+ pm.doUpdateView({ val: 6 });
48
+ pm.doUpdateView({ val: 6 });
49
+ pm.doUpdateView({ val: 6 });
50
+ expect(view).not.toBeCalled();
51
+ });
52
+ it("Removes a view", () => {
53
+ const { appObj } = makeTestRig();
54
+ const pm = new MockPM(appObj);
55
+ const view = jest.fn();
56
+ pm.addView(view);
57
+ view.mockClear();
58
+ pm.removeView(view);
59
+ pm.doUpdateView({ val: 10 });
60
+ expect(view).not.toBeCalled();
61
+ });
62
+ it("Can be disposed", () => {
63
+ const { appObj } = makeTestRig();
64
+ const pm = new MockPM(appObj);
65
+ const view = jest.fn();
66
+ pm.addView(view);
67
+ view.mockClear();
68
+ pm.dispose();
69
+ pm.doUpdateView({ val: 10 });
70
+ expect(view).not.toBeCalled();
71
+ });
72
+ it("Adds itself to the App Object", () => {
73
+ const { appObj } = makeTestRig();
74
+ expect(appObj.hasComponent(MockPM.type)).toEqual(false);
75
+ const pm = new MockPM(appObj);
76
+ expect(appObj.hasComponent(MockPM.type)).toEqual(true);
77
+ });
78
+ it("Removes itself from the App Object when disposed", () => {
79
+ const { appObj } = makeTestRig();
80
+ const pm = new MockPM(appObj);
81
+ expect(appObj.hasComponent(MockPM.type)).toEqual(true);
82
+ pm.dispose();
83
+ expect(appObj.hasComponent(MockPM.type)).toEqual(false);
84
+ });
85
+ it("Returns the repo", () => {
86
+ const { appObj, appObjects } = makeTestRig();
87
+ const pm = new MockPM(appObj);
88
+ expect(pm.appObjects).toEqual(appObjects);
89
+ });
90
+ it("Forwards a warn to the App Object Repo warn", () => {
91
+ const { appObj, appObjects } = makeTestRig();
92
+ appObjects.submitWarning = jest.fn();
93
+ const pm = new MockPM(appObj);
94
+ pm.warn("Some warning");
95
+ expect(appObjects.submitWarning).toBeCalledWith(`appObj/MockPM`, "Some warning");
96
+ });
97
+ it("Sets Component type to PM", () => {
98
+ const { appObj } = makeTestRig();
99
+ const pm = new MockPM(appObj);
100
+ expect(pm.componentType).toEqual(AppObjectComponent_1.AppObjectComponentType.PM);
101
+ });
102
+ });
103
+ //# sourceMappingURL=AppObjectPM.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppObjectPM.test.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectPM.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject } from \"./AppObject\";\r\nimport { AppObjectComponentType } from \"./AppObjectComponent\";\r\nimport { AppObjectPM } from \"./AppObjectPM\";\r\nimport { makeAppObjectRepo } from \"./AppObjectRepo\";\r\n\r\ninterface MockVM {\r\n val: number;\r\n}\r\n\r\nclass MockPM extends AppObjectPM<MockVM> {\r\n static readonly type = \"MockPM\";\r\n\r\n readonly defaultVM = { val: 0 };\r\n get currentVM(): MockVM {\r\n return { val: 5 };\r\n }\r\n\r\n vmsAreEqual(a: MockVM, b: MockVM): boolean {\r\n return a.val === b.val;\r\n }\r\n\r\n constructor(appObj: AppObject) {\r\n super(appObj, MockPM.type);\r\n }\r\n}\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const appObj = appObjects.getOrCreate(\"appObj\");\r\n\r\n return { appObj, appObjects };\r\n}\r\n\r\ndescribe(\"App Object PM\", () => {\r\n it(\"Initializes with the last VM if it has been set\", () => {\r\n const { appObj } = makeTestRig();\r\n const pm = new MockPM(appObj);\r\n const view = jest.fn();\r\n\r\n pm.doUpdateView({ val: 6 });\r\n\r\n pm.addView(view);\r\n\r\n expect(view).toBeCalledWith({ val: 6 });\r\n });\r\n\r\n it(\"Adds a view but does not call it if no VM has been set\", () => {\r\n const { appObj } = makeTestRig();\r\n const pm = new MockPM(appObj);\r\n const view = jest.fn();\r\n\r\n pm.addView(view);\r\n\r\n expect(view).not.toBeCalled();\r\n });\r\n\r\n it(\"Doesn't notify if the vms are equal\", () => {\r\n const { appObj } = makeTestRig();\r\n const pm = new MockPM(appObj);\r\n const view = jest.fn();\r\n\r\n pm.doUpdateView({ val: 6 });\r\n pm.addView(view);\r\n\r\n view.mockClear();\r\n\r\n pm.doUpdateView({ val: 6 });\r\n pm.doUpdateView({ val: 6 });\r\n pm.doUpdateView({ val: 6 });\r\n\r\n expect(view).not.toBeCalled();\r\n });\r\n\r\n it(\"Removes a view\", () => {\r\n const { appObj } = makeTestRig();\r\n const pm = new MockPM(appObj);\r\n const view = jest.fn();\r\n\r\n pm.addView(view);\r\n\r\n view.mockClear();\r\n\r\n pm.removeView(view);\r\n\r\n pm.doUpdateView({ val: 10 });\r\n\r\n expect(view).not.toBeCalled();\r\n });\r\n\r\n it(\"Can be disposed\", () => {\r\n const { appObj } = makeTestRig();\r\n const pm = new MockPM(appObj);\r\n const view = jest.fn();\r\n\r\n pm.addView(view);\r\n view.mockClear();\r\n\r\n pm.dispose();\r\n\r\n pm.doUpdateView({ val: 10 });\r\n\r\n expect(view).not.toBeCalled();\r\n });\r\n\r\n it(\"Adds itself to the App Object\", () => {\r\n const { appObj } = makeTestRig();\r\n\r\n expect(appObj.hasComponent(MockPM.type)).toEqual(false);\r\n\r\n const pm = new MockPM(appObj);\r\n\r\n expect(appObj.hasComponent(MockPM.type)).toEqual(true);\r\n });\r\n\r\n it(\"Removes itself from the App Object when disposed\", () => {\r\n const { appObj } = makeTestRig();\r\n const pm = new MockPM(appObj);\r\n\r\n expect(appObj.hasComponent(MockPM.type)).toEqual(true);\r\n\r\n pm.dispose();\r\n\r\n expect(appObj.hasComponent(MockPM.type)).toEqual(false);\r\n });\r\n\r\n it(\"Returns the repo\", () => {\r\n const { appObj, appObjects } = makeTestRig();\r\n\r\n const pm = new MockPM(appObj);\r\n expect(pm.appObjects).toEqual(appObjects);\r\n });\r\n\r\n it(\"Forwards a warn to the App Object Repo warn\", () => {\r\n const { appObj, appObjects } = makeTestRig();\r\n appObjects.submitWarning = jest.fn();\r\n\r\n const pm = new MockPM(appObj);\r\n pm.warn(\"Some warning\");\r\n\r\n expect(appObjects.submitWarning).toBeCalledWith(\r\n `appObj/MockPM`,\r\n \"Some warning\"\r\n );\r\n });\r\n\r\n it(\"Sets Component type to PM\", () => {\r\n const { appObj } = makeTestRig();\r\n const pm = new MockPM(appObj);\r\n\r\n expect(pm.componentType).toEqual(AppObjectComponentType.PM);\r\n });\r\n});\r\n"]}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppObjectRepo = void 0;
4
+ exports.makeAppObjectRepo = makeAppObjectRepo;
5
+ const Entities_1 = require("../Entities");
6
+ const AppObject_1 = require("./AppObject");
7
+ class AppObjectRepo extends Entities_1.ObservableEntity {
8
+ }
9
+ exports.AppObjectRepo = AppObjectRepo;
10
+ function makeAppObjectRepo() {
11
+ return new AppObjectRepoImp();
12
+ }
13
+ class AppObjectRepoImp extends AppObjectRepo {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.appObjectLookup = new Map();
17
+ this.singletons = new Map();
18
+ this.onAppObjectAddedObserver = new Entities_1.ObserverList();
19
+ this.addAppObjectAddedObserver = (observer) => {
20
+ this.onAppObjectAddedObserver.add(observer);
21
+ };
22
+ this.removeAppObjectAddedObserver = (observer) => {
23
+ this.onAppObjectAddedObserver.remove(observer);
24
+ };
25
+ this.onAppObjectRemovedObservers = new Entities_1.ObserverList();
26
+ this.addAppObjectRemovedObserver = (observer) => {
27
+ this.onAppObjectRemovedObservers.add(observer);
28
+ };
29
+ this.removedAppObjectRemovedObserver = (observer) => {
30
+ this.onAppObjectRemovedObservers.remove(observer);
31
+ };
32
+ this.has = (id) => {
33
+ return this.appObjectLookup.has(id);
34
+ };
35
+ this.add = (appObject) => {
36
+ const existing = this.appObjectLookup.get(appObject.id);
37
+ if (existing) {
38
+ existing.removeObserver(this.notify);
39
+ }
40
+ this.appObjectLookup.set(appObject.id, appObject);
41
+ appObject.addObserver(this.notify);
42
+ this.notify();
43
+ this.onAppObjectAddedObserver.notify(appObject);
44
+ };
45
+ this.remove = (id) => {
46
+ const existing = this.appObjectLookup.get(id);
47
+ if (!existing)
48
+ return;
49
+ this.appObjectLookup.delete(id);
50
+ existing.removeObserver(this.notify);
51
+ this.notify();
52
+ this.onAppObjectRemovedObservers.notify(existing);
53
+ };
54
+ this.get = (id) => {
55
+ return this.appObjectLookup.get(id);
56
+ };
57
+ this.getOrCreate = (id) => {
58
+ const existing = this.appObjectLookup.get(id);
59
+ if (!existing) {
60
+ return (0, AppObject_1.makeAppObject)(id, this);
61
+ }
62
+ else {
63
+ return existing;
64
+ }
65
+ };
66
+ this.getAll = () => {
67
+ return Array.from(this.appObjectLookup.values());
68
+ };
69
+ }
70
+ getAllAppObjectsWithComponent(componentType) {
71
+ const rArray = [];
72
+ this.appObjectLookup.forEach((appObj) => {
73
+ if (appObj.hasComponent(componentType)) {
74
+ rArray.push(appObj);
75
+ }
76
+ });
77
+ return rArray;
78
+ }
79
+ getAllComponents(type) {
80
+ const rArray = [];
81
+ this.appObjectLookup.forEach((appObj) => {
82
+ const aoEntity = appObj.getComponent(type);
83
+ if (aoEntity) {
84
+ rArray.push(aoEntity);
85
+ }
86
+ });
87
+ return rArray;
88
+ }
89
+ getAppObjectComponent(id, entityType) {
90
+ const ao = this.appObjectLookup.get(id);
91
+ if (!ao) {
92
+ return undefined;
93
+ }
94
+ return ao.getComponent(entityType);
95
+ }
96
+ submitLog(sender, message) {
97
+ console.log(`[${sender}]: ${message}`);
98
+ }
99
+ submitWarning(sender, message) {
100
+ console.warn(`[${sender}]: ${message}`);
101
+ }
102
+ submitError(sender, message) {
103
+ console.error(`[${sender}]: ${message}`);
104
+ }
105
+ submitFatal(sender, message) {
106
+ console.error(`FATAL ERROR - [${sender}]: ${message}`);
107
+ }
108
+ registerSingleton(component) {
109
+ if (this.singletons.has(component.type)) {
110
+ this.submitWarning("AppObjectRepo", `Singleton for type ${component.type} already exists. Relpacing`);
111
+ }
112
+ this.singletons.set(component.type, component);
113
+ }
114
+ getSingleton(type) {
115
+ if (this.singletons.has(type)) {
116
+ return this.singletons.get(type);
117
+ }
118
+ const components = this.getAllComponents(type);
119
+ if (components.length === 1) {
120
+ this.singletons.set(components[0].type, components[0]);
121
+ return components[0];
122
+ }
123
+ else if (components.length === 0) {
124
+ this.submitWarning("AppObjectRepo", `Unable to find a singleton for ${type}`);
125
+ return undefined;
126
+ }
127
+ else if (components.length > 1) {
128
+ this.submitWarning("AppObjectRepo", `Multiple ${type} found. There should only be one if it truly a singleton. Using the first one`);
129
+ return components[0];
130
+ }
131
+ }
132
+ }
133
+ //# sourceMappingURL=AppObjectRepo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppObjectRepo.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectRepo.ts"],"names":[],"mappings":"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","sourcesContent":["import { ObservableEntity, ObserverList } from \"../Entities\";\r\nimport { AppObject, makeAppObject } from \"./AppObject\";\r\nimport { AppObjectComponent } from \"./AppObjectComponent\";\r\n\r\nexport abstract class AppObjectRepo extends ObservableEntity {\r\n abstract has(appObjectID: string): boolean;\r\n abstract add(appObject: AppObject): void;\r\n abstract remove(appObjectID: string): void;\r\n abstract get(appObjectID: string): AppObject | undefined;\r\n abstract getOrCreate(appObjectID: string): AppObject;\r\n abstract getAll(): AppObject[];\r\n\r\n abstract submitLog(sender: string, message: string): void;\r\n abstract submitWarning(sender: string, message: string): void;\r\n abstract submitError(sender: string, message: string): void;\r\n abstract submitFatal(sender: string, message: string): void;\r\n\r\n abstract registerSingleton(component: AppObjectComponent): void;\r\n abstract getSingleton<T extends AppObjectComponent>(\r\n type: string\r\n ): T | undefined;\r\n\r\n abstract getAppObjectComponent<T extends AppObjectComponent>(\r\n appObjectID: string,\r\n type: string\r\n ): T | undefined;\r\n abstract getAllAppObjectsWithComponent(componentType: string): AppObject[];\r\n abstract getAllComponents<T extends AppObjectComponent>(type: string): T[];\r\n\r\n abstract addAppObjectAddedObserver: (\r\n observer: (addedEntity: AppObject) => void\r\n ) => void;\r\n abstract removeAppObjectAddedObserver: (\r\n observer: (addedEntity: AppObject) => void\r\n ) => void;\r\n\r\n abstract addAppObjectRemovedObserver: (\r\n observer: (addedEntity: AppObject) => void\r\n ) => void;\r\n abstract removedAppObjectRemovedObserver: (\r\n observer: (addedEntity: AppObject) => void\r\n ) => void;\r\n}\r\n\r\nexport function makeAppObjectRepo(): AppObjectRepo {\r\n return new AppObjectRepoImp();\r\n}\r\n\r\nclass AppObjectRepoImp extends AppObjectRepo {\r\n private appObjectLookup = new Map<string, AppObject>();\r\n private singletons = new Map<string, AppObjectComponent>();\r\n\r\n private onAppObjectAddedObserver = new ObserverList<AppObject>();\r\n addAppObjectAddedObserver = (observer: (addedEntity: AppObject) => void) => {\r\n this.onAppObjectAddedObserver.add(observer);\r\n };\r\n removeAppObjectAddedObserver = (\r\n observer: (addedEntity: AppObject) => void\r\n ): void => {\r\n this.onAppObjectAddedObserver.remove(observer);\r\n };\r\n\r\n private onAppObjectRemovedObservers = new ObserverList<AppObject>();\r\n addAppObjectRemovedObserver = (\r\n observer: (removedEntity: AppObject) => void\r\n ) => {\r\n this.onAppObjectRemovedObservers.add(observer);\r\n };\r\n removedAppObjectRemovedObserver = (\r\n observer: (removedEntity: AppObject) => void\r\n ): void => {\r\n this.onAppObjectRemovedObservers.remove(observer);\r\n };\r\n\r\n has = (id: string): boolean => {\r\n return this.appObjectLookup.has(id);\r\n };\r\n\r\n add = (appObject: AppObject) => {\r\n const existing = this.appObjectLookup.get(appObject.id);\r\n if (existing) {\r\n existing.removeObserver(this.notify);\r\n }\r\n\r\n this.appObjectLookup.set(appObject.id, appObject);\r\n appObject.addObserver(this.notify);\r\n this.notify();\r\n this.onAppObjectAddedObserver.notify(appObject);\r\n };\r\n\r\n remove = (id: string) => {\r\n const existing = this.appObjectLookup.get(id);\r\n if (!existing) return;\r\n\r\n this.appObjectLookup.delete(id);\r\n existing.removeObserver(this.notify);\r\n this.notify();\r\n this.onAppObjectRemovedObservers.notify(existing);\r\n };\r\n\r\n get = (id: string): AppObject | undefined => {\r\n return this.appObjectLookup.get(id);\r\n };\r\n\r\n getOrCreate = (id: string): AppObject => {\r\n const existing = this.appObjectLookup.get(id);\r\n\r\n if (!existing) {\r\n return makeAppObject(id, this);\r\n } else {\r\n return existing;\r\n }\r\n };\r\n\r\n getAll = (): AppObject[] => {\r\n return Array.from(this.appObjectLookup.values());\r\n };\r\n\r\n getAllAppObjectsWithComponent(componentType: string): AppObject[] {\r\n const rArray: AppObject[] = [];\r\n\r\n this.appObjectLookup.forEach((appObj) => {\r\n if (appObj.hasComponent(componentType)) {\r\n rArray.push(appObj);\r\n }\r\n });\r\n\r\n return rArray;\r\n }\r\n\r\n getAllComponents<T extends AppObjectComponent>(type: string): T[] {\r\n const rArray: T[] = [];\r\n\r\n this.appObjectLookup.forEach((appObj) => {\r\n const aoEntity = appObj.getComponent(type);\r\n if (aoEntity) {\r\n rArray.push(aoEntity as T);\r\n }\r\n });\r\n\r\n return rArray;\r\n }\r\n\r\n getAppObjectComponent<T extends AppObjectComponent>(\r\n id: string,\r\n entityType: string\r\n ): T | undefined {\r\n const ao = this.appObjectLookup.get(id);\r\n if (!ao) {\r\n return undefined;\r\n }\r\n\r\n return ao.getComponent(entityType) as T;\r\n }\r\n\r\n submitLog(sender: string, message: string): void {\r\n console.log(`[${sender}]: ${message}`);\r\n }\r\n submitWarning(sender: string, message: string): void {\r\n console.warn(`[${sender}]: ${message}`);\r\n }\r\n submitError(sender: string, message: string): void {\r\n console.error(`[${sender}]: ${message}`);\r\n }\r\n submitFatal(sender: string, message: string): void {\r\n console.error(`FATAL ERROR - [${sender}]: ${message}`);\r\n }\r\n\r\n registerSingleton(component: AppObjectComponent): void {\r\n if (this.singletons.has(component.type)) {\r\n this.submitWarning(\r\n \"AppObjectRepo\",\r\n `Singleton for type ${component.type} already exists. Relpacing`\r\n );\r\n }\r\n\r\n this.singletons.set(component.type, component);\r\n }\r\n\r\n getSingleton<T extends AppObjectComponent>(type: string): T | undefined {\r\n if (this.singletons.has(type)) {\r\n return this.singletons.get(type) as T;\r\n }\r\n\r\n const components = this.getAllComponents<AppObjectComponent>(type);\r\n if (components.length === 1) {\r\n this.singletons.set(components[0].type, components[0]);\r\n return components[0] as T;\r\n } else if (components.length === 0) {\r\n this.submitWarning(\r\n \"AppObjectRepo\",\r\n `Unable to find a singleton for ${type}`\r\n );\r\n return undefined;\r\n } else if (components.length > 1) {\r\n this.submitWarning(\r\n \"AppObjectRepo\",\r\n `Multiple ${type} found. There should only be one if it truly a singleton. Using the first one`\r\n );\r\n return components[0] as T;\r\n }\r\n }\r\n}\r\n"]}