@vived/core 1.4.2 → 1.4.3

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 (378) hide show
  1. package/README.md +118 -20
  2. package/dist/cjs/AppObject/AppObject.js +53 -0
  3. package/dist/cjs/AppObject/AppObject.js.map +1 -1
  4. package/dist/cjs/AppObject/AppObjectComponent.js +78 -0
  5. package/dist/cjs/AppObject/AppObjectComponent.js.map +1 -1
  6. package/dist/cjs/AppObject/AppObjectController.js +22 -0
  7. package/dist/cjs/AppObject/AppObjectController.js.map +1 -1
  8. package/dist/cjs/AppObject/AppObjectEntity.js +52 -0
  9. package/dist/cjs/AppObject/AppObjectEntity.js.map +1 -1
  10. package/dist/cjs/AppObject/AppObjectEntityRepo.js +75 -1
  11. package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +1 -1
  12. package/dist/cjs/AppObject/AppObjectPM.js +46 -0
  13. package/dist/cjs/AppObject/AppObjectPM.js.map +1 -1
  14. package/dist/cjs/AppObject/AppObjectRepo.js +20 -0
  15. package/dist/cjs/AppObject/AppObjectRepo.js.map +1 -1
  16. package/dist/cjs/AppObject/AppObjectUC.js +23 -0
  17. package/dist/cjs/AppObject/AppObjectUC.js.map +1 -1
  18. package/dist/cjs/AppObject/AppObjectView.js +22 -0
  19. package/dist/cjs/AppObject/AppObjectView.js.map +1 -1
  20. package/dist/cjs/AppObject/getSingletonComponent.js +19 -0
  21. package/dist/cjs/AppObject/getSingletonComponent.js.map +1 -1
  22. package/dist/cjs/Entities/MemoizedAngle.js +21 -0
  23. package/dist/cjs/Entities/MemoizedAngle.js.map +1 -1
  24. package/dist/cjs/Entities/MemoizedBoolean.js +21 -0
  25. package/dist/cjs/Entities/MemoizedBoolean.js.map +1 -1
  26. package/dist/cjs/Entities/MemoizedColor.js +21 -0
  27. package/dist/cjs/Entities/MemoizedColor.js.map +1 -1
  28. package/dist/cjs/Entities/MemoizedNumber.js +21 -0
  29. package/dist/cjs/Entities/MemoizedNumber.js.map +1 -1
  30. package/dist/cjs/Entities/MemoizedQuaternion.js +21 -0
  31. package/dist/cjs/Entities/MemoizedQuaternion.js.map +1 -1
  32. package/dist/cjs/Entities/MemoizedString.js +21 -0
  33. package/dist/cjs/Entities/MemoizedString.js.map +1 -1
  34. package/dist/cjs/Entities/MemoizedVector2.js +21 -0
  35. package/dist/cjs/Entities/MemoizedVector2.js.map +1 -1
  36. package/dist/cjs/Entities/MemoizedVector3.js +21 -0
  37. package/dist/cjs/Entities/MemoizedVector3.js.map +1 -1
  38. package/dist/cjs/Entities/ObservableEntity.js +17 -0
  39. package/dist/cjs/Entities/ObservableEntity.js.map +1 -1
  40. package/dist/cjs/Entities/ObserverList.js +21 -0
  41. package/dist/cjs/Entities/ObserverList.js.map +1 -1
  42. package/dist/cjs/Entities/RangedNumber.js +29 -0
  43. package/dist/cjs/Entities/RangedNumber.js.map +1 -1
  44. package/dist/cjs/Types/PmAdapter.js.map +1 -1
  45. package/dist/cjs/Types/SingletonPmAdapter.js.map +1 -1
  46. package/dist/cjs/ValueObjects/Angle.js +1 -1
  47. package/dist/cjs/ValueObjects/Angle.js.map +1 -1
  48. package/dist/cjs/ValueObjects/LineSegment2D.js +6 -6
  49. package/dist/cjs/ValueObjects/LineSegment2D.js.map +1 -1
  50. package/dist/cjs/ValueObjects/Matrix.js +6 -6
  51. package/dist/cjs/ValueObjects/Matrix.js.map +1 -1
  52. package/dist/cjs/ValueObjects/Quaternion.js +17 -17
  53. package/dist/cjs/ValueObjects/Quaternion.js.map +1 -1
  54. package/dist/cjs/ValueObjects/Vector2.js +15 -8
  55. package/dist/cjs/ValueObjects/Vector2.js.map +1 -1
  56. package/dist/esm/AppObject/AppObject.js +53 -0
  57. package/dist/esm/AppObject/AppObject.js.map +1 -1
  58. package/dist/esm/AppObject/AppObjectComponent.js +78 -0
  59. package/dist/esm/AppObject/AppObjectComponent.js.map +1 -1
  60. package/dist/esm/AppObject/AppObjectController.js +22 -0
  61. package/dist/esm/AppObject/AppObjectController.js.map +1 -1
  62. package/dist/esm/AppObject/AppObjectEntity.js +52 -0
  63. package/dist/esm/AppObject/AppObjectEntity.js.map +1 -1
  64. package/dist/esm/AppObject/AppObjectEntityRepo.js +75 -1
  65. package/dist/esm/AppObject/AppObjectEntityRepo.js.map +1 -1
  66. package/dist/esm/AppObject/AppObjectPM.js +46 -0
  67. package/dist/esm/AppObject/AppObjectPM.js.map +1 -1
  68. package/dist/esm/AppObject/AppObjectRepo.js +20 -0
  69. package/dist/esm/AppObject/AppObjectRepo.js.map +1 -1
  70. package/dist/esm/AppObject/AppObjectUC.js +24 -1
  71. package/dist/esm/AppObject/AppObjectUC.js.map +1 -1
  72. package/dist/esm/AppObject/AppObjectView.js +23 -1
  73. package/dist/esm/AppObject/AppObjectView.js.map +1 -1
  74. package/dist/esm/AppObject/getSingletonComponent.js +19 -0
  75. package/dist/esm/AppObject/getSingletonComponent.js.map +1 -1
  76. package/dist/esm/Entities/MemoizedAngle.js +21 -0
  77. package/dist/esm/Entities/MemoizedAngle.js.map +1 -1
  78. package/dist/esm/Entities/MemoizedBoolean.js +21 -0
  79. package/dist/esm/Entities/MemoizedBoolean.js.map +1 -1
  80. package/dist/esm/Entities/MemoizedColor.js +21 -0
  81. package/dist/esm/Entities/MemoizedColor.js.map +1 -1
  82. package/dist/esm/Entities/MemoizedNumber.js +21 -0
  83. package/dist/esm/Entities/MemoizedNumber.js.map +1 -1
  84. package/dist/esm/Entities/MemoizedQuaternion.js +21 -0
  85. package/dist/esm/Entities/MemoizedQuaternion.js.map +1 -1
  86. package/dist/esm/Entities/MemoizedString.js +21 -0
  87. package/dist/esm/Entities/MemoizedString.js.map +1 -1
  88. package/dist/esm/Entities/MemoizedVector2.js +21 -0
  89. package/dist/esm/Entities/MemoizedVector2.js.map +1 -1
  90. package/dist/esm/Entities/MemoizedVector3.js +21 -0
  91. package/dist/esm/Entities/MemoizedVector3.js.map +1 -1
  92. package/dist/esm/Entities/ObservableEntity.js +17 -0
  93. package/dist/esm/Entities/ObservableEntity.js.map +1 -1
  94. package/dist/esm/Entities/ObserverList.js +21 -0
  95. package/dist/esm/Entities/ObserverList.js.map +1 -1
  96. package/dist/esm/Entities/RangedNumber.js +29 -0
  97. package/dist/esm/Entities/RangedNumber.js.map +1 -1
  98. package/dist/esm/Types/PmAdapter.js.map +1 -1
  99. package/dist/esm/Types/SingletonPmAdapter.js.map +1 -1
  100. package/dist/esm/ValueObjects/Angle.js +1 -1
  101. package/dist/esm/ValueObjects/Angle.js.map +1 -1
  102. package/dist/esm/ValueObjects/LineSegment2D.js +6 -6
  103. package/dist/esm/ValueObjects/LineSegment2D.js.map +1 -1
  104. package/dist/esm/ValueObjects/Matrix.js +6 -6
  105. package/dist/esm/ValueObjects/Matrix.js.map +1 -1
  106. package/dist/esm/ValueObjects/Quaternion.js +17 -17
  107. package/dist/esm/ValueObjects/Quaternion.js.map +1 -1
  108. package/dist/esm/ValueObjects/Vector2.js +15 -8
  109. package/dist/esm/ValueObjects/Vector2.js.map +1 -1
  110. package/dist/types/AppObject/AppObject.d.ts +42 -0
  111. package/dist/types/AppObject/AppObject.d.ts.map +1 -1
  112. package/dist/types/AppObject/AppObjectComponent.d.ts +80 -0
  113. package/dist/types/AppObject/AppObjectComponent.d.ts.map +1 -1
  114. package/dist/types/AppObject/AppObjectController.d.ts +22 -0
  115. package/dist/types/AppObject/AppObjectController.d.ts.map +1 -1
  116. package/dist/types/AppObject/AppObjectEntity.d.ts +55 -0
  117. package/dist/types/AppObject/AppObjectEntity.d.ts.map +1 -1
  118. package/dist/types/AppObject/AppObjectEntityRepo.d.ts +75 -0
  119. package/dist/types/AppObject/AppObjectEntityRepo.d.ts.map +1 -1
  120. package/dist/types/AppObject/AppObjectPM.d.ts +53 -0
  121. package/dist/types/AppObject/AppObjectPM.d.ts.map +1 -1
  122. package/dist/types/AppObject/AppObjectRepo.d.ts +124 -0
  123. package/dist/types/AppObject/AppObjectRepo.d.ts.map +1 -1
  124. package/dist/types/AppObject/AppObjectUC.d.ts +23 -0
  125. package/dist/types/AppObject/AppObjectUC.d.ts.map +1 -1
  126. package/dist/types/AppObject/AppObjectView.d.ts +22 -0
  127. package/dist/types/AppObject/AppObjectView.d.ts.map +1 -1
  128. package/dist/types/AppObject/getSingletonComponent.d.ts +19 -0
  129. package/dist/types/AppObject/getSingletonComponent.d.ts.map +1 -1
  130. package/dist/types/Entities/MemoizedAngle.d.ts +21 -0
  131. package/dist/types/Entities/MemoizedAngle.d.ts.map +1 -1
  132. package/dist/types/Entities/MemoizedBoolean.d.ts +21 -0
  133. package/dist/types/Entities/MemoizedBoolean.d.ts.map +1 -1
  134. package/dist/types/Entities/MemoizedColor.d.ts +21 -0
  135. package/dist/types/Entities/MemoizedColor.d.ts.map +1 -1
  136. package/dist/types/Entities/MemoizedNumber.d.ts +21 -0
  137. package/dist/types/Entities/MemoizedNumber.d.ts.map +1 -1
  138. package/dist/types/Entities/MemoizedQuaternion.d.ts +21 -0
  139. package/dist/types/Entities/MemoizedQuaternion.d.ts.map +1 -1
  140. package/dist/types/Entities/MemoizedString.d.ts +21 -0
  141. package/dist/types/Entities/MemoizedString.d.ts.map +1 -1
  142. package/dist/types/Entities/MemoizedVector2.d.ts +21 -0
  143. package/dist/types/Entities/MemoizedVector2.d.ts.map +1 -1
  144. package/dist/types/Entities/MemoizedVector3.d.ts +21 -0
  145. package/dist/types/Entities/MemoizedVector3.d.ts.map +1 -1
  146. package/dist/types/Entities/ObservableEntity.d.ts +20 -0
  147. package/dist/types/Entities/ObservableEntity.d.ts.map +1 -1
  148. package/dist/types/Entities/ObserverList.d.ts +21 -0
  149. package/dist/types/Entities/ObserverList.d.ts.map +1 -1
  150. package/dist/types/Entities/RangedNumber.d.ts +37 -0
  151. package/dist/types/Entities/RangedNumber.d.ts.map +1 -1
  152. package/dist/types/Types/PmAdapter.d.ts +60 -0
  153. package/dist/types/Types/PmAdapter.d.ts.map +1 -1
  154. package/dist/types/Types/SingletonPmAdapter.d.ts +55 -0
  155. package/dist/types/Types/SingletonPmAdapter.d.ts.map +1 -1
  156. package/dist/types/ValueObjects/Angle.d.ts +1 -1
  157. package/dist/types/ValueObjects/Matrix.d.ts +5 -5
  158. package/dist/types/ValueObjects/Matrix.d.ts.map +1 -1
  159. package/dist/types/ValueObjects/Quaternion.d.ts +17 -17
  160. package/dist/types/ValueObjects/Vector2.d.ts +8 -3
  161. package/dist/types/ValueObjects/Vector2.d.ts.map +1 -1
  162. package/package.json +1 -1
  163. package/dist/cjs/AppObject/AppObject.test.js +0 -113
  164. package/dist/cjs/AppObject/AppObject.test.js.map +0 -1
  165. package/dist/cjs/AppObject/AppObjectComponent.test.js +0 -132
  166. package/dist/cjs/AppObject/AppObjectComponent.test.js.map +0 -1
  167. package/dist/cjs/AppObject/AppObjectEntity.test.js +0 -108
  168. package/dist/cjs/AppObject/AppObjectEntity.test.js.map +0 -1
  169. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js +0 -149
  170. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js.map +0 -1
  171. package/dist/cjs/AppObject/AppObjectPM.test.js +0 -103
  172. package/dist/cjs/AppObject/AppObjectPM.test.js.map +0 -1
  173. package/dist/cjs/AppObject/AppObjectRepo.test.js +0 -213
  174. package/dist/cjs/AppObject/AppObjectRepo.test.js.map +0 -1
  175. package/dist/cjs/AppObject/getSingletonComponent.test.js +0 -13
  176. package/dist/cjs/AppObject/getSingletonComponent.test.js.map +0 -1
  177. package/dist/cjs/Entities/MemoizedAngle.test.js +0 -30
  178. package/dist/cjs/Entities/MemoizedAngle.test.js.map +0 -1
  179. package/dist/cjs/Entities/MemoizedBoolean.test.js +0 -34
  180. package/dist/cjs/Entities/MemoizedBoolean.test.js.map +0 -1
  181. package/dist/cjs/Entities/MemoizedColor.test.js +0 -32
  182. package/dist/cjs/Entities/MemoizedColor.test.js.map +0 -1
  183. package/dist/cjs/Entities/MemoizedNumber.test.js +0 -29
  184. package/dist/cjs/Entities/MemoizedNumber.test.js.map +0 -1
  185. package/dist/cjs/Entities/MemoizedQuaternion.test.js +0 -32
  186. package/dist/cjs/Entities/MemoizedQuaternion.test.js.map +0 -1
  187. package/dist/cjs/Entities/MemoizedString.test.js +0 -29
  188. package/dist/cjs/Entities/MemoizedString.test.js.map +0 -1
  189. package/dist/cjs/Entities/MemoizedVector2.test.js +0 -32
  190. package/dist/cjs/Entities/MemoizedVector2.test.js.map +0 -1
  191. package/dist/cjs/Entities/MemoizedVector3.test.js +0 -32
  192. package/dist/cjs/Entities/MemoizedVector3.test.js.map +0 -1
  193. package/dist/cjs/Entities/ObservableEntity.test.js +0 -25
  194. package/dist/cjs/Entities/ObservableEntity.test.js.map +0 -1
  195. package/dist/cjs/Entities/ObserverList.test.js +0 -44
  196. package/dist/cjs/Entities/ObserverList.test.js.map +0 -1
  197. package/dist/cjs/Entities/RangedNumber.test.js +0 -96
  198. package/dist/cjs/Entities/RangedNumber.test.js.map +0 -1
  199. package/dist/cjs/Utilities/LengthConverters.test.js +0 -24
  200. package/dist/cjs/Utilities/LengthConverters.test.js.map +0 -1
  201. package/dist/cjs/Utilities/LerpNumber.test.js +0 -90
  202. package/dist/cjs/Utilities/LerpNumber.test.js.map +0 -1
  203. package/dist/cjs/Utilities/addAlphaToHex.test.js +0 -34
  204. package/dist/cjs/Utilities/addAlphaToHex.test.js.map +0 -1
  205. package/dist/cjs/Utilities/alphaToHex.test.js +0 -75
  206. package/dist/cjs/Utilities/alphaToHex.test.js.map +0 -1
  207. package/dist/cjs/Utilities/degreesToRadians.test.js +0 -9
  208. package/dist/cjs/Utilities/degreesToRadians.test.js.map +0 -1
  209. package/dist/cjs/Utilities/easeFunctions.test.js +0 -209
  210. package/dist/cjs/Utilities/easeFunctions.test.js.map +0 -1
  211. package/dist/cjs/Utilities/interpolateNumber.test.js +0 -26
  212. package/dist/cjs/Utilities/interpolateNumber.test.js.map +0 -1
  213. package/dist/cjs/ValueObjects/Angle.test.js +0 -28
  214. package/dist/cjs/ValueObjects/Angle.test.js.map +0 -1
  215. package/dist/cjs/ValueObjects/Color.test.js +0 -147
  216. package/dist/cjs/ValueObjects/Color.test.js.map +0 -1
  217. package/dist/cjs/ValueObjects/LineSegment2D.test.js +0 -102
  218. package/dist/cjs/ValueObjects/LineSegment2D.test.js.map +0 -1
  219. package/dist/cjs/ValueObjects/Matrix.test.js +0 -385
  220. package/dist/cjs/ValueObjects/Matrix.test.js.map +0 -1
  221. package/dist/cjs/ValueObjects/ParametricLine.test.js +0 -126
  222. package/dist/cjs/ValueObjects/ParametricLine.test.js.map +0 -1
  223. package/dist/cjs/ValueObjects/ParametricPlane.test.js +0 -101
  224. package/dist/cjs/ValueObjects/ParametricPlane.test.js.map +0 -1
  225. package/dist/cjs/ValueObjects/Quaternion.test.js +0 -240
  226. package/dist/cjs/ValueObjects/Quaternion.test.js.map +0 -1
  227. package/dist/cjs/ValueObjects/Rectangle.test.js +0 -32
  228. package/dist/cjs/ValueObjects/Rectangle.test.js.map +0 -1
  229. package/dist/cjs/ValueObjects/Vector2.test.js +0 -136
  230. package/dist/cjs/ValueObjects/Vector2.test.js.map +0 -1
  231. package/dist/cjs/ValueObjects/Vector3.test.js +0 -188
  232. package/dist/cjs/ValueObjects/Vector3.test.js.map +0 -1
  233. package/dist/cjs/ValueObjects/Version.test.js +0 -310
  234. package/dist/cjs/ValueObjects/Version.test.js.map +0 -1
  235. package/dist/esm/AppObject/AppObject.test.js +0 -110
  236. package/dist/esm/AppObject/AppObject.test.js.map +0 -1
  237. package/dist/esm/AppObject/AppObjectComponent.test.js +0 -130
  238. package/dist/esm/AppObject/AppObjectComponent.test.js.map +0 -1
  239. package/dist/esm/AppObject/AppObjectEntity.test.js +0 -106
  240. package/dist/esm/AppObject/AppObjectEntity.test.js.map +0 -1
  241. package/dist/esm/AppObject/AppObjectEntityRepo.test.js +0 -147
  242. package/dist/esm/AppObject/AppObjectEntityRepo.test.js.map +0 -1
  243. package/dist/esm/AppObject/AppObjectPM.test.js +0 -101
  244. package/dist/esm/AppObject/AppObjectPM.test.js.map +0 -1
  245. package/dist/esm/AppObject/AppObjectRepo.test.js +0 -211
  246. package/dist/esm/AppObject/AppObjectRepo.test.js.map +0 -1
  247. package/dist/esm/AppObject/getSingletonComponent.test.js +0 -11
  248. package/dist/esm/AppObject/getSingletonComponent.test.js.map +0 -1
  249. package/dist/esm/Entities/MemoizedAngle.test.js +0 -28
  250. package/dist/esm/Entities/MemoizedAngle.test.js.map +0 -1
  251. package/dist/esm/Entities/MemoizedBoolean.test.js +0 -32
  252. package/dist/esm/Entities/MemoizedBoolean.test.js.map +0 -1
  253. package/dist/esm/Entities/MemoizedColor.test.js +0 -30
  254. package/dist/esm/Entities/MemoizedColor.test.js.map +0 -1
  255. package/dist/esm/Entities/MemoizedNumber.test.js +0 -27
  256. package/dist/esm/Entities/MemoizedNumber.test.js.map +0 -1
  257. package/dist/esm/Entities/MemoizedQuaternion.test.js +0 -30
  258. package/dist/esm/Entities/MemoizedQuaternion.test.js.map +0 -1
  259. package/dist/esm/Entities/MemoizedString.test.js +0 -27
  260. package/dist/esm/Entities/MemoizedString.test.js.map +0 -1
  261. package/dist/esm/Entities/MemoizedVector2.test.js +0 -30
  262. package/dist/esm/Entities/MemoizedVector2.test.js.map +0 -1
  263. package/dist/esm/Entities/MemoizedVector3.test.js +0 -30
  264. package/dist/esm/Entities/MemoizedVector3.test.js.map +0 -1
  265. package/dist/esm/Entities/ObservableEntity.test.js +0 -23
  266. package/dist/esm/Entities/ObservableEntity.test.js.map +0 -1
  267. package/dist/esm/Entities/ObserverList.test.js +0 -42
  268. package/dist/esm/Entities/ObserverList.test.js.map +0 -1
  269. package/dist/esm/Entities/RangedNumber.test.js +0 -94
  270. package/dist/esm/Entities/RangedNumber.test.js.map +0 -1
  271. package/dist/esm/Utilities/LengthConverters.test.js +0 -22
  272. package/dist/esm/Utilities/LengthConverters.test.js.map +0 -1
  273. package/dist/esm/Utilities/LerpNumber.test.js +0 -88
  274. package/dist/esm/Utilities/LerpNumber.test.js.map +0 -1
  275. package/dist/esm/Utilities/addAlphaToHex.test.js +0 -32
  276. package/dist/esm/Utilities/addAlphaToHex.test.js.map +0 -1
  277. package/dist/esm/Utilities/alphaToHex.test.js +0 -73
  278. package/dist/esm/Utilities/alphaToHex.test.js.map +0 -1
  279. package/dist/esm/Utilities/degreesToRadians.test.js +0 -7
  280. package/dist/esm/Utilities/degreesToRadians.test.js.map +0 -1
  281. package/dist/esm/Utilities/easeFunctions.test.js +0 -207
  282. package/dist/esm/Utilities/easeFunctions.test.js.map +0 -1
  283. package/dist/esm/Utilities/interpolateNumber.test.js +0 -24
  284. package/dist/esm/Utilities/interpolateNumber.test.js.map +0 -1
  285. package/dist/esm/ValueObjects/Angle.test.js +0 -26
  286. package/dist/esm/ValueObjects/Angle.test.js.map +0 -1
  287. package/dist/esm/ValueObjects/Color.test.js +0 -145
  288. package/dist/esm/ValueObjects/Color.test.js.map +0 -1
  289. package/dist/esm/ValueObjects/LineSegment2D.test.js +0 -100
  290. package/dist/esm/ValueObjects/LineSegment2D.test.js.map +0 -1
  291. package/dist/esm/ValueObjects/Matrix.test.js +0 -383
  292. package/dist/esm/ValueObjects/Matrix.test.js.map +0 -1
  293. package/dist/esm/ValueObjects/ParametricLine.test.js +0 -124
  294. package/dist/esm/ValueObjects/ParametricLine.test.js.map +0 -1
  295. package/dist/esm/ValueObjects/ParametricPlane.test.js +0 -99
  296. package/dist/esm/ValueObjects/ParametricPlane.test.js.map +0 -1
  297. package/dist/esm/ValueObjects/Quaternion.test.js +0 -238
  298. package/dist/esm/ValueObjects/Quaternion.test.js.map +0 -1
  299. package/dist/esm/ValueObjects/Rectangle.test.js +0 -30
  300. package/dist/esm/ValueObjects/Rectangle.test.js.map +0 -1
  301. package/dist/esm/ValueObjects/Vector2.test.js +0 -134
  302. package/dist/esm/ValueObjects/Vector2.test.js.map +0 -1
  303. package/dist/esm/ValueObjects/Vector3.test.js +0 -186
  304. package/dist/esm/ValueObjects/Vector3.test.js.map +0 -1
  305. package/dist/esm/ValueObjects/Version.test.js +0 -308
  306. package/dist/esm/ValueObjects/Version.test.js.map +0 -1
  307. package/dist/types/AppObject/AppObject.test.d.ts +0 -7
  308. package/dist/types/AppObject/AppObject.test.d.ts.map +0 -1
  309. package/dist/types/AppObject/AppObjectComponent.test.d.ts +0 -2
  310. package/dist/types/AppObject/AppObjectComponent.test.d.ts.map +0 -1
  311. package/dist/types/AppObject/AppObjectEntity.test.d.ts +0 -2
  312. package/dist/types/AppObject/AppObjectEntity.test.d.ts.map +0 -1
  313. package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts +0 -2
  314. package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts.map +0 -1
  315. package/dist/types/AppObject/AppObjectPM.test.d.ts +0 -2
  316. package/dist/types/AppObject/AppObjectPM.test.d.ts.map +0 -1
  317. package/dist/types/AppObject/AppObjectRepo.test.d.ts +0 -2
  318. package/dist/types/AppObject/AppObjectRepo.test.d.ts.map +0 -1
  319. package/dist/types/AppObject/getSingletonComponent.test.d.ts +0 -2
  320. package/dist/types/AppObject/getSingletonComponent.test.d.ts.map +0 -1
  321. package/dist/types/Entities/MemoizedAngle.test.d.ts +0 -2
  322. package/dist/types/Entities/MemoizedAngle.test.d.ts.map +0 -1
  323. package/dist/types/Entities/MemoizedBoolean.test.d.ts +0 -2
  324. package/dist/types/Entities/MemoizedBoolean.test.d.ts.map +0 -1
  325. package/dist/types/Entities/MemoizedColor.test.d.ts +0 -2
  326. package/dist/types/Entities/MemoizedColor.test.d.ts.map +0 -1
  327. package/dist/types/Entities/MemoizedNumber.test.d.ts +0 -2
  328. package/dist/types/Entities/MemoizedNumber.test.d.ts.map +0 -1
  329. package/dist/types/Entities/MemoizedQuaternion.test.d.ts +0 -2
  330. package/dist/types/Entities/MemoizedQuaternion.test.d.ts.map +0 -1
  331. package/dist/types/Entities/MemoizedString.test.d.ts +0 -2
  332. package/dist/types/Entities/MemoizedString.test.d.ts.map +0 -1
  333. package/dist/types/Entities/MemoizedVector2.test.d.ts +0 -2
  334. package/dist/types/Entities/MemoizedVector2.test.d.ts.map +0 -1
  335. package/dist/types/Entities/MemoizedVector3.test.d.ts +0 -2
  336. package/dist/types/Entities/MemoizedVector3.test.d.ts.map +0 -1
  337. package/dist/types/Entities/ObservableEntity.test.d.ts +0 -2
  338. package/dist/types/Entities/ObservableEntity.test.d.ts.map +0 -1
  339. package/dist/types/Entities/ObserverList.test.d.ts +0 -2
  340. package/dist/types/Entities/ObserverList.test.d.ts.map +0 -1
  341. package/dist/types/Entities/RangedNumber.test.d.ts +0 -2
  342. package/dist/types/Entities/RangedNumber.test.d.ts.map +0 -1
  343. package/dist/types/Utilities/LengthConverters.test.d.ts +0 -2
  344. package/dist/types/Utilities/LengthConverters.test.d.ts.map +0 -1
  345. package/dist/types/Utilities/LerpNumber.test.d.ts +0 -2
  346. package/dist/types/Utilities/LerpNumber.test.d.ts.map +0 -1
  347. package/dist/types/Utilities/addAlphaToHex.test.d.ts +0 -2
  348. package/dist/types/Utilities/addAlphaToHex.test.d.ts.map +0 -1
  349. package/dist/types/Utilities/alphaToHex.test.d.ts +0 -2
  350. package/dist/types/Utilities/alphaToHex.test.d.ts.map +0 -1
  351. package/dist/types/Utilities/degreesToRadians.test.d.ts +0 -2
  352. package/dist/types/Utilities/degreesToRadians.test.d.ts.map +0 -1
  353. package/dist/types/Utilities/easeFunctions.test.d.ts +0 -2
  354. package/dist/types/Utilities/easeFunctions.test.d.ts.map +0 -1
  355. package/dist/types/Utilities/interpolateNumber.test.d.ts +0 -2
  356. package/dist/types/Utilities/interpolateNumber.test.d.ts.map +0 -1
  357. package/dist/types/ValueObjects/Angle.test.d.ts +0 -2
  358. package/dist/types/ValueObjects/Angle.test.d.ts.map +0 -1
  359. package/dist/types/ValueObjects/Color.test.d.ts +0 -2
  360. package/dist/types/ValueObjects/Color.test.d.ts.map +0 -1
  361. package/dist/types/ValueObjects/LineSegment2D.test.d.ts +0 -2
  362. package/dist/types/ValueObjects/LineSegment2D.test.d.ts.map +0 -1
  363. package/dist/types/ValueObjects/Matrix.test.d.ts +0 -2
  364. package/dist/types/ValueObjects/Matrix.test.d.ts.map +0 -1
  365. package/dist/types/ValueObjects/ParametricLine.test.d.ts +0 -2
  366. package/dist/types/ValueObjects/ParametricLine.test.d.ts.map +0 -1
  367. package/dist/types/ValueObjects/ParametricPlane.test.d.ts +0 -2
  368. package/dist/types/ValueObjects/ParametricPlane.test.d.ts.map +0 -1
  369. package/dist/types/ValueObjects/Quaternion.test.d.ts +0 -2
  370. package/dist/types/ValueObjects/Quaternion.test.d.ts.map +0 -1
  371. package/dist/types/ValueObjects/Rectangle.test.d.ts +0 -2
  372. package/dist/types/ValueObjects/Rectangle.test.d.ts.map +0 -1
  373. package/dist/types/ValueObjects/Vector2.test.d.ts +0 -2
  374. package/dist/types/ValueObjects/Vector2.test.d.ts.map +0 -1
  375. package/dist/types/ValueObjects/Vector3.test.d.ts +0 -2
  376. package/dist/types/ValueObjects/Vector3.test.d.ts.map +0 -1
  377. package/dist/types/ValueObjects/Version.test.d.ts +0 -2
  378. package/dist/types/ValueObjects/Version.test.d.ts.map +0 -1
@@ -1,16 +1,49 @@
1
+ /**
2
+ * Enumeration of the different types of components in the architecture.
3
+ * Each type serves a specific purpose in the application structure.
4
+ */
1
5
  export var AppObjectComponentType;
2
6
  (function (AppObjectComponentType) {
7
+ /** Stores and manages application state */
3
8
  AppObjectComponentType["ENTITY"] = "Entity";
9
+ /** Transforms application state into view models */
4
10
  AppObjectComponentType["PM"] = "Presentation Manager";
11
+ /** Implements business logic and coordinates between layers */
5
12
  AppObjectComponentType["UC"] = "Use Case";
13
+ /** Handles user inputs and external events */
6
14
  AppObjectComponentType["CONTROLLER"] = "Controller";
15
+ /** Renders UI elements and interacts with the DOM/rendering system */
7
16
  AppObjectComponentType["VIEW"] = "View";
17
+ /** Default type for components that don't fit the standard categories */
8
18
  AppObjectComponentType["UNKNOWN"] = "Unknown";
9
19
  })(AppObjectComponentType || (AppObjectComponentType = {}));
20
+ /**
21
+ * Base class for all components in the AppObject architecture.
22
+ *
23
+ * Components attach to AppObjects and provide specific functionality based on their type.
24
+ * The architecture follows a clean separation of concerns, with each component type
25
+ * having a well-defined responsibility in the application.
26
+ *
27
+ * Components can communicate with each other through various mechanisms:
28
+ * - Direct access via parent AppObject
29
+ * - Repository-level singleton access
30
+ * - Observer patterns for reactive updates
31
+ */
10
32
  export class AppObjectComponent {
33
+ /**
34
+ * Convenience accessor for the repository containing all AppObjects
35
+ * @returns The application's AppObjectRepo
36
+ */
11
37
  get appObjects() {
12
38
  return this.appObject.appObjectRepo;
13
39
  }
40
+ /**
41
+ * Retrieves a singleton component of the specified type from the repository
42
+ * Results are cached for better performance in repeated calls
43
+ *
44
+ * @param type The component type identifier to look up
45
+ * @returns The singleton component cast to type T, or undefined if not found
46
+ */
14
47
  getCachedSingleton(type) {
15
48
  if (!this.cachedComponents.has(type)) {
16
49
  const component = this.appObjects.getSingleton(type);
@@ -23,6 +56,13 @@ export class AppObjectComponent {
23
56
  }
24
57
  return this.cachedComponents.get(type);
25
58
  }
59
+ /**
60
+ * Retrieves a component from the same AppObject as this component
61
+ * Results are cached for better performance in repeated calls
62
+ *
63
+ * @param type The component type identifier to look up
64
+ * @returns The component cast to type T, or undefined if not found
65
+ */
26
66
  getCachedLocalComponent(type) {
27
67
  if (!this.cachedComponents.has(type)) {
28
68
  const component = this.appObject.getComponent(type);
@@ -35,6 +75,14 @@ export class AppObjectComponent {
35
75
  }
36
76
  return this.cachedComponents.get(type);
37
77
  }
78
+ /**
79
+ * Retrieves a singleton component from the repository with customizable logging
80
+ * Unlike getCachedSingleton, results are not cached
81
+ *
82
+ * @param type The component type identifier to look up
83
+ * @param logType The severity level for logging if component isn't found
84
+ * @returns The singleton component cast to type T, or undefined if not found
85
+ */
38
86
  getSingleton(type, logType = "WARN") {
39
87
  const comp = this.appObjects.getSingleton(type);
40
88
  if (!comp) {
@@ -53,22 +101,52 @@ export class AppObjectComponent {
53
101
  }
54
102
  return comp;
55
103
  }
104
+ /**
105
+ * Cleans up resources used by this component
106
+ * Removes itself from the parent AppObject if it's still attached
107
+ */
56
108
  dispose() {
57
109
  if (this.appObject.getComponent(this.type) === this) {
58
110
  this.appObject.removeComponent(this.type);
59
111
  }
60
112
  }
113
+ /**
114
+ * Logs an informational message to the application's logging system
115
+ * Messages are prefixed with the AppObject ID and component type for easier debugging
116
+ *
117
+ * @param message The message to log
118
+ */
61
119
  log(message) {
62
120
  this.appObjects.submitLog(`${this.appObject.id}/${this.type}`, message);
63
121
  }
122
+ /**
123
+ * Logs a warning message to the application's logging system
124
+ * Messages are prefixed with the AppObject ID and component type for easier debugging
125
+ *
126
+ * @param message The warning message to log
127
+ */
64
128
  warn(message) {
65
129
  this.appObjects.submitWarning(`${this.appObject.id}/${this.type}`, message);
66
130
  }
131
+ /**
132
+ * Logs an error message to the application's logging system
133
+ * Messages are prefixed with the AppObject ID and component type for easier debugging
134
+ *
135
+ * @param message The error message to log
136
+ */
67
137
  error(message) {
68
138
  this.appObjects.submitError(`${this.appObject.id}/${this.type}`, message);
69
139
  }
140
+ /**
141
+ * Creates a new component and attaches it to the specified AppObject
142
+ *
143
+ * @param appObject The parent AppObject this component will be attached to
144
+ * @param type The unique type identifier for this component
145
+ */
70
146
  constructor(appObject, type) {
147
+ /** The type category of this component */
71
148
  this.componentType = AppObjectComponentType.UNKNOWN;
149
+ /** Cache for components to avoid repeated lookups */
72
150
  this.cachedComponents = new Map();
73
151
  this.appObject = appObject;
74
152
  this.type = type;
@@ -1 +1 @@
1
- {"version":3,"file":"AppObjectComponent.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject } from \"./AppObject\";\r\nimport { AppObjectRepo } from \"./AppObjectRepo\";\r\n\r\nexport enum AppObjectComponentType {\r\n ENTITY = \"Entity\",\r\n PM = \"Presentation Manager\",\r\n UC = \"Use Case\",\r\n CONTROLLER = \"Controller\",\r\n VIEW = \"View\",\r\n UNKNOWN = \"Unknown\",\r\n}\r\n\r\nexport class AppObjectComponent {\r\n readonly componentType: AppObjectComponentType = AppObjectComponentType.UNKNOWN;\r\n readonly type: string;\r\n readonly appObject: AppObject;\r\n get appObjects(): AppObjectRepo {\r\n return this.appObject.appObjectRepo;\r\n }\r\n\r\n private cachedComponents = new Map<string, AppObjectComponent>();\r\n getCachedSingleton<T extends AppObjectComponent>(\r\n type: string\r\n ): T | undefined {\r\n if (!this.cachedComponents.has(type)) {\r\n const component = this.appObjects.getSingleton(type);\r\n if (!component) {\r\n this.warn(\"Unable to get cached singleton type \" + type);\r\n } else {\r\n this.cachedComponents.set(type, component);\r\n }\r\n }\r\n\r\n return this.cachedComponents.get(type) as T;\r\n }\r\n\r\n getCachedLocalComponent<T extends AppObjectComponent>(\r\n type: string\r\n ): T | undefined {\r\n if (!this.cachedComponents.has(type)) {\r\n const component = this.appObject.getComponent(type);\r\n\r\n if (!component) {\r\n this.warn(\"Unable to get local component of type \" + type);\r\n } else {\r\n this.cachedComponents.set(type, component);\r\n }\r\n }\r\n\r\n return this.cachedComponents.get(type) as T;\r\n }\r\n\r\n getSingleton<T extends AppObjectComponent>(\r\n type: string,\r\n logType: \"LOG\" | \"WARN\" | \"ERROR\" = \"WARN\"\r\n ): T | undefined {\r\n const comp = this.appObjects.getSingleton<T>(type);\r\n\r\n if (!comp) {\r\n const msg = \"Unable to get singleton type \" + type;\r\n switch (logType) {\r\n case \"ERROR\":\r\n this.error(msg);\r\n break;\r\n case \"LOG\":\r\n this.log(msg);\r\n break;\r\n case \"WARN\":\r\n this.warn(msg);\r\n break;\r\n }\r\n }\r\n\r\n return comp;\r\n }\r\n\r\n dispose() {\r\n if (this.appObject.getComponent(this.type) === this) {\r\n this.appObject.removeComponent(this.type);\r\n }\r\n }\r\n\r\n log(message: string) {\r\n this.appObjects.submitLog(`${this.appObject.id}/${this.type}`, message);\r\n }\r\n\r\n warn(message: string) {\r\n this.appObjects.submitWarning(`${this.appObject.id}/${this.type}`, message);\r\n }\r\n\r\n error(message: string) {\r\n this.appObjects.submitError(`${this.appObject.id}/${this.type}`, message);\r\n }\r\n\r\n constructor(appObject: AppObject, type: string) {\r\n this.appObject = appObject;\r\n this.type = type;\r\n appObject.addComponent(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AppObjectComponent.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject } from \"./AppObject\";\r\nimport { AppObjectRepo } from \"./AppObjectRepo\";\r\n\r\n/**\r\n * Enumeration of the different types of components in the architecture.\r\n * Each type serves a specific purpose in the application structure.\r\n */\r\nexport enum AppObjectComponentType {\r\n /** Stores and manages application state */\r\n ENTITY = \"Entity\",\r\n \r\n /** Transforms application state into view models */\r\n PM = \"Presentation Manager\",\r\n \r\n /** Implements business logic and coordinates between layers */\r\n UC = \"Use Case\",\r\n \r\n /** Handles user inputs and external events */\r\n CONTROLLER = \"Controller\",\r\n \r\n /** Renders UI elements and interacts with the DOM/rendering system */\r\n VIEW = \"View\",\r\n \r\n /** Default type for components that don't fit the standard categories */\r\n UNKNOWN = \"Unknown\",\r\n}\r\n\r\n/**\r\n * Base class for all components in the AppObject architecture.\r\n * \r\n * Components attach to AppObjects and provide specific functionality based on their type.\r\n * The architecture follows a clean separation of concerns, with each component type\r\n * having a well-defined responsibility in the application.\r\n * \r\n * Components can communicate with each other through various mechanisms:\r\n * - Direct access via parent AppObject\r\n * - Repository-level singleton access\r\n * - Observer patterns for reactive updates\r\n */\r\nexport class AppObjectComponent {\r\n /** The type category of this component */\r\n readonly componentType: AppObjectComponentType = AppObjectComponentType.UNKNOWN;\r\n \r\n /** Unique type identifier for this specific component */\r\n readonly type: string;\r\n \r\n /** The parent AppObject this component is attached to */\r\n readonly appObject: AppObject;\r\n \r\n /**\r\n * Convenience accessor for the repository containing all AppObjects\r\n * @returns The application's AppObjectRepo\r\n */\r\n get appObjects(): AppObjectRepo {\r\n return this.appObject.appObjectRepo;\r\n }\r\n\r\n /** Cache for components to avoid repeated lookups */\r\n private cachedComponents = new Map<string, AppObjectComponent>();\r\n \r\n /**\r\n * Retrieves a singleton component of the specified type from the repository\r\n * Results are cached for better performance in repeated calls\r\n * \r\n * @param type The component type identifier to look up\r\n * @returns The singleton component cast to type T, or undefined if not found\r\n */\r\n getCachedSingleton<T extends AppObjectComponent>(\r\n type: string\r\n ): T | undefined {\r\n if (!this.cachedComponents.has(type)) {\r\n const component = this.appObjects.getSingleton(type);\r\n if (!component) {\r\n this.warn(\"Unable to get cached singleton type \" + type);\r\n } else {\r\n this.cachedComponents.set(type, component);\r\n }\r\n }\r\n\r\n return this.cachedComponents.get(type) as T;\r\n }\r\n\r\n /**\r\n * Retrieves a component from the same AppObject as this component\r\n * Results are cached for better performance in repeated calls\r\n * \r\n * @param type The component type identifier to look up\r\n * @returns The component cast to type T, or undefined if not found\r\n */\r\n getCachedLocalComponent<T extends AppObjectComponent>(\r\n type: string\r\n ): T | undefined {\r\n if (!this.cachedComponents.has(type)) {\r\n const component = this.appObject.getComponent(type);\r\n\r\n if (!component) {\r\n this.warn(\"Unable to get local component of type \" + type);\r\n } else {\r\n this.cachedComponents.set(type, component);\r\n }\r\n }\r\n\r\n return this.cachedComponents.get(type) as T;\r\n }\r\n\r\n /**\r\n * Retrieves a singleton component from the repository with customizable logging\r\n * Unlike getCachedSingleton, results are not cached\r\n * \r\n * @param type The component type identifier to look up\r\n * @param logType The severity level for logging if component isn't found\r\n * @returns The singleton component cast to type T, or undefined if not found\r\n */\r\n getSingleton<T extends AppObjectComponent>(\r\n type: string,\r\n logType: \"LOG\" | \"WARN\" | \"ERROR\" = \"WARN\"\r\n ): T | undefined {\r\n const comp = this.appObjects.getSingleton<T>(type);\r\n\r\n if (!comp) {\r\n const msg = \"Unable to get singleton type \" + type;\r\n switch (logType) {\r\n case \"ERROR\":\r\n this.error(msg);\r\n break;\r\n case \"LOG\":\r\n this.log(msg);\r\n break;\r\n case \"WARN\":\r\n this.warn(msg);\r\n break;\r\n }\r\n }\r\n\r\n return comp;\r\n }\r\n\r\n /**\r\n * Cleans up resources used by this component\r\n * Removes itself from the parent AppObject if it's still attached\r\n */\r\n dispose() {\r\n if (this.appObject.getComponent(this.type) === this) {\r\n this.appObject.removeComponent(this.type);\r\n }\r\n }\r\n\r\n /**\r\n * Logs an informational message to the application's logging system\r\n * Messages are prefixed with the AppObject ID and component type for easier debugging\r\n * \r\n * @param message The message to log\r\n */\r\n log(message: string) {\r\n this.appObjects.submitLog(`${this.appObject.id}/${this.type}`, message);\r\n }\r\n\r\n /**\r\n * Logs a warning message to the application's logging system\r\n * Messages are prefixed with the AppObject ID and component type for easier debugging\r\n * \r\n * @param message The warning message to log\r\n */\r\n warn(message: string) {\r\n this.appObjects.submitWarning(`${this.appObject.id}/${this.type}`, message);\r\n }\r\n\r\n /**\r\n * Logs an error message to the application's logging system\r\n * Messages are prefixed with the AppObject ID and component type for easier debugging\r\n * \r\n * @param message The error message to log\r\n */\r\n error(message: string) {\r\n this.appObjects.submitError(`${this.appObject.id}/${this.type}`, message);\r\n }\r\n\r\n /**\r\n * Creates a new component and attaches it to the specified AppObject\r\n * \r\n * @param appObject The parent AppObject this component will be attached to\r\n * @param type The unique type identifier for this component\r\n */\r\n constructor(appObject: AppObject, type: string) {\r\n this.appObject = appObject;\r\n this.type = type;\r\n appObject.addComponent(this);\r\n }\r\n}\r\n"]}
@@ -1,7 +1,29 @@
1
1
  import { AppObjectComponent, AppObjectComponentType, } from "./AppObjectComponent";
2
+ /**
3
+ * AppObjectController serves as a base controller class within the application framework.
4
+ *
5
+ * Controllers are components that handle logic-related operations for an AppObject,
6
+ * such as user input processing, state management, or business logic implementation.
7
+ * Extend this class to create specialized controllers for specific application features.
8
+ *
9
+ * @extends AppObjectComponent
10
+ * @example
11
+ * ```typescript
12
+ * class PlayerController extends AppObjectController {
13
+ * handleUserInput(input: UserInput) {
14
+ * // Process user input to control player object
15
+ * }
16
+ * }
17
+ * ```
18
+ */
2
19
  export class AppObjectController extends AppObjectComponent {
3
20
  constructor() {
4
21
  super(...arguments);
22
+ /**
23
+ * The component type identifier used to categorize this component as a controller
24
+ * This property helps the component system identify and manage controller components.
25
+ * @readonly
26
+ */
5
27
  this.componentType = AppObjectComponentType.CONTROLLER;
6
28
  }
7
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AppObjectController.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;IAA3D;;QACW,kBAAa,GAAG,sBAAsB,CAAC,UAAU,CAAC;IAC7D,CAAC;CAAA","sourcesContent":["import {\r\n AppObjectComponent,\r\n AppObjectComponentType,\r\n} from \"./AppObjectComponent\";\r\n\r\nexport class AppObjectController extends AppObjectComponent {\r\n readonly componentType = AppObjectComponentType.CONTROLLER;\r\n}\r\n"]}
1
+ {"version":3,"file":"AppObjectController.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;IAA3D;;QACE;;;;WAIG;QACM,kBAAa,GAAG,sBAAsB,CAAC,UAAU,CAAC;IAC7D,CAAC;CAAA","sourcesContent":["import {\r\n AppObjectComponent,\r\n AppObjectComponentType,\r\n} from \"./AppObjectComponent\";\r\n\r\n/**\r\n * AppObjectController serves as a base controller class within the application framework.\r\n *\r\n * Controllers are components that handle logic-related operations for an AppObject,\r\n * such as user input processing, state management, or business logic implementation.\r\n * Extend this class to create specialized controllers for specific application features.\r\n *\r\n * @extends AppObjectComponent\r\n * @example\r\n * ```typescript\r\n * class PlayerController extends AppObjectController {\r\n * handleUserInput(input: UserInput) {\r\n * // Process user input to control player object\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport class AppObjectController extends AppObjectComponent {\r\n /**\r\n * The component type identifier used to categorize this component as a controller\r\n * This property helps the component system identify and manage controller components.\r\n * @readonly\r\n */\r\n readonly componentType = AppObjectComponentType.CONTROLLER;\r\n}\r\n"]}
@@ -1,6 +1,27 @@
1
1
  import { ObserverList } from "../Entities";
2
2
  import { AppObjectComponent, AppObjectComponentType } from "./AppObjectComponent";
3
+ /**
4
+ * Entity component that manages application state
5
+ *
6
+ * AppObjectEntity is responsible for storing and managing state data within the application.
7
+ * It uses the observer pattern to notify interested parties of changes to its state.
8
+ *
9
+ * In a typical application flow:
10
+ * 1. Controllers modify entity state in response to user actions
11
+ * 2. Entities notify observers (typically PMs) of state changes
12
+ * 3. PMs transform entity state into view models
13
+ * 4. Views render based on the view models
14
+ */
3
15
  export class AppObjectEntity extends AppObjectComponent {
16
+ /**
17
+ * Cleans up resources and notifies dispose observers
18
+ *
19
+ * This method:
20
+ * 1. Removes the change observer from the parent AppObject
21
+ * 2. Notifies all dispose observers
22
+ * 3. Clears all observer lists
23
+ * 4. Calls the parent class dispose method
24
+ */
4
25
  dispose() {
5
26
  this.removeChangeObserver(this.appObject.notify);
6
27
  this.onDisposeObserverList.notify();
@@ -8,26 +29,57 @@ export class AppObjectEntity extends AppObjectComponent {
8
29
  this.onDisposeObserverList.clear();
9
30
  super.dispose();
10
31
  }
32
+ /**
33
+ * Creates a new entity component and attaches it to the specified AppObject
34
+ * Automatically adds the AppObject's notify method as a change observer
35
+ *
36
+ * @param appObject The parent AppObject this component will be attached to
37
+ * @param type The unique type identifier for this component
38
+ */
11
39
  constructor(appObject, type) {
12
40
  super(appObject, type);
41
+ /** Identifies this as an Entity component */
13
42
  this.componentType = AppObjectComponentType.ENTITY;
43
+ /** List of observers to notify when this entity is disposed */
14
44
  this.onDisposeObserverList = new ObserverList();
45
+ /**
46
+ * Adds an observer to be notified when this entity is disposed
47
+ * @param observer Function to call on disposal
48
+ */
15
49
  this.addOnDisposeObserver = (observer) => {
16
50
  this.onDisposeObserverList.add(observer);
17
51
  };
52
+ /**
53
+ * Removes a previously added dispose observer
54
+ * @param observer The observer function to remove
55
+ */
18
56
  this.removeOnDisposeObserver = (observer) => {
19
57
  this.onDisposeObserverList.remove(observer);
20
58
  };
59
+ /** List of observers to notify when this entity's state changes */
21
60
  this.onChangeObserverList = new ObserverList();
61
+ /**
62
+ * Adds an observer to be notified when this entity's state changes
63
+ * @param observer Function to call on state change
64
+ */
22
65
  this.addChangeObserver = (observer) => {
23
66
  this.onChangeObserverList.add(observer);
24
67
  };
68
+ /**
69
+ * Removes a previously added change observer
70
+ * @param observer The observer function to remove
71
+ */
25
72
  this.removeChangeObserver = (observer) => {
26
73
  this.onChangeObserverList.remove(observer);
27
74
  };
75
+ /**
76
+ * Notifies all change observers that this entity's state has changed
77
+ * This should be called by derived classes when their state changes
78
+ */
28
79
  this.notifyOnChange = () => {
29
80
  this.onChangeObserverList.notify();
30
81
  };
82
+ // When this entity changes, notify the parent AppObject
31
83
  this.addChangeObserver(appObject.notify);
32
84
  }
33
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AppObjectEntity.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAIlF,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IAuBrD,OAAO;QACL,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QAEnC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,YAAY,SAAoB,EAAE,IAAY;QAC5C,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAjCf,kBAAa,GAAG,sBAAsB,CAAC,MAAM,CAAC;QAE/C,0BAAqB,GAAG,IAAI,YAAY,EAAQ,CAAC;QACzD,yBAAoB,GAAG,CAAC,QAAiC,EAAE,EAAE;YAC3D,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC,CAAC;QACF,4BAAuB,GAAG,CAAC,QAAiC,EAAQ,EAAE;YACpE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEM,yBAAoB,GAAG,IAAI,YAAY,EAAQ,CAAC;QACxD,sBAAiB,GAAG,CAAC,QAAiC,EAAQ,EAAE;YAC9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC;QACF,yBAAoB,GAAG,CAAC,QAAiC,EAAQ,EAAE;YACjE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,mBAAc,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;QACrC,CAAC,CAAC;QAeA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["import { ObserverList } from \"../Entities\";\r\nimport { AppObject } from \"./AppObject\";\r\nimport { AppObjectComponent, AppObjectComponentType } from \"./AppObjectComponent\";\r\n\r\nexport type AppObjectEntityObserver = () => void;\r\n\r\nexport class AppObjectEntity extends AppObjectComponent {\r\n readonly componentType = AppObjectComponentType.ENTITY;\r\n \r\n private onDisposeObserverList = new ObserverList<void>();\r\n addOnDisposeObserver = (observer: AppObjectEntityObserver) => {\r\n this.onDisposeObserverList.add(observer);\r\n };\r\n removeOnDisposeObserver = (observer: AppObjectEntityObserver): void => {\r\n this.onDisposeObserverList.remove(observer);\r\n };\r\n\r\n private onChangeObserverList = new ObserverList<void>();\r\n addChangeObserver = (observer: AppObjectEntityObserver): void => {\r\n this.onChangeObserverList.add(observer);\r\n };\r\n removeChangeObserver = (observer: AppObjectEntityObserver): void => {\r\n this.onChangeObserverList.remove(observer);\r\n };\r\n\r\n notifyOnChange = () => {\r\n this.onChangeObserverList.notify();\r\n };\r\n\r\n dispose() {\r\n this.removeChangeObserver(this.appObject.notify);\r\n\r\n this.onDisposeObserverList.notify();\r\n this.onChangeObserverList.clear();\r\n this.onDisposeObserverList.clear();\r\n\r\n super.dispose();\r\n }\r\n\r\n constructor(appObject: AppObject, type: string) {\r\n super(appObject, type)\r\n \r\n this.addChangeObserver(appObject.notify);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AppObjectEntity.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAQlF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IAkDrD;;;;;;;;OAQG;IACH,OAAO;QACL,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QAEnC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACH,YAAY,SAAoB,EAAE,IAAY;QAC5C,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QA5ExB,6CAA6C;QACpC,kBAAa,GAAG,sBAAsB,CAAC,MAAM,CAAC;QAEvD,+DAA+D;QACvD,0BAAqB,GAAG,IAAI,YAAY,EAAQ,CAAC;QAEzD;;;WAGG;QACH,yBAAoB,GAAG,CAAC,QAAiC,EAAE,EAAE;YAC3D,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC,CAAC;QAEF;;;WAGG;QACH,4BAAuB,GAAG,CAAC,QAAiC,EAAQ,EAAE;YACpE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,mEAAmE;QAC3D,yBAAoB,GAAG,IAAI,YAAY,EAAQ,CAAC;QAExD;;;WAGG;QACH,sBAAiB,GAAG,CAAC,QAAiC,EAAQ,EAAE;YAC9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF;;;WAGG;QACH,yBAAoB,GAAG,CAAC,QAAiC,EAAQ,EAAE;YACjE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF;;;WAGG;QACH,mBAAc,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;QACrC,CAAC,CAAC;QA+BA,wDAAwD;QACxD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["import { ObserverList } from \"../Entities\";\r\nimport { AppObject } from \"./AppObject\";\r\nimport { AppObjectComponent, AppObjectComponentType } from \"./AppObjectComponent\";\r\n\r\n/**\r\n * Observer function type for entity state changes or disposal\r\n * No parameters are passed to the observer functions\r\n */\r\nexport type AppObjectEntityObserver = () => void;\r\n\r\n/**\r\n * Entity component that manages application state\r\n * \r\n * AppObjectEntity is responsible for storing and managing state data within the application.\r\n * It uses the observer pattern to notify interested parties of changes to its state.\r\n * \r\n * In a typical application flow:\r\n * 1. Controllers modify entity state in response to user actions\r\n * 2. Entities notify observers (typically PMs) of state changes\r\n * 3. PMs transform entity state into view models\r\n * 4. Views render based on the view models\r\n */\r\nexport class AppObjectEntity extends AppObjectComponent {\r\n /** Identifies this as an Entity component */\r\n readonly componentType = AppObjectComponentType.ENTITY;\r\n \r\n /** List of observers to notify when this entity is disposed */\r\n private onDisposeObserverList = new ObserverList<void>();\r\n \r\n /**\r\n * Adds an observer to be notified when this entity is disposed\r\n * @param observer Function to call on disposal\r\n */\r\n addOnDisposeObserver = (observer: AppObjectEntityObserver) => {\r\n this.onDisposeObserverList.add(observer);\r\n };\r\n \r\n /**\r\n * Removes a previously added dispose observer\r\n * @param observer The observer function to remove\r\n */\r\n removeOnDisposeObserver = (observer: AppObjectEntityObserver): void => {\r\n this.onDisposeObserverList.remove(observer);\r\n };\r\n\r\n /** List of observers to notify when this entity's state changes */\r\n private onChangeObserverList = new ObserverList<void>();\r\n \r\n /**\r\n * Adds an observer to be notified when this entity's state changes\r\n * @param observer Function to call on state change\r\n */\r\n addChangeObserver = (observer: AppObjectEntityObserver): void => {\r\n this.onChangeObserverList.add(observer);\r\n };\r\n \r\n /**\r\n * Removes a previously added change observer\r\n * @param observer The observer function to remove\r\n */\r\n removeChangeObserver = (observer: AppObjectEntityObserver): void => {\r\n this.onChangeObserverList.remove(observer);\r\n };\r\n\r\n /**\r\n * Notifies all change observers that this entity's state has changed\r\n * This should be called by derived classes when their state changes\r\n */\r\n notifyOnChange = () => {\r\n this.onChangeObserverList.notify();\r\n };\r\n\r\n /**\r\n * Cleans up resources and notifies dispose observers\r\n * \r\n * This method:\r\n * 1. Removes the change observer from the parent AppObject\r\n * 2. Notifies all dispose observers\r\n * 3. Clears all observer lists\r\n * 4. Calls the parent class dispose method\r\n */\r\n dispose() {\r\n this.removeChangeObserver(this.appObject.notify);\r\n\r\n this.onDisposeObserverList.notify();\r\n this.onChangeObserverList.clear();\r\n this.onDisposeObserverList.clear();\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Creates a new entity component and attaches it to the specified AppObject\r\n * Automatically adds the AppObject's notify method as a change observer\r\n * \r\n * @param appObject The parent AppObject this component will be attached to\r\n * @param type The unique type identifier for this component\r\n */\r\n constructor(appObject: AppObject, type: string) {\r\n super(appObject, type)\r\n \r\n // When this entity changes, notify the parent AppObject\r\n this.addChangeObserver(appObject.notify);\r\n }\r\n}\r\n"]}
@@ -1,26 +1,82 @@
1
1
  import { ObserverList } from "../Entities";
2
2
  import { AppObjectEntity } from "./AppObjectEntity";
3
+ /**
4
+ * A repository for managing collections of AppObjectEntity instances.
5
+ *
6
+ * This generic class provides a centralized way to store, retrieve, and manage
7
+ * entities that are associated with specific AppObjects. It implements the observer
8
+ * pattern to notify listeners when entities are added or removed.
9
+ *
10
+ * @template T - The type of entities managed by this repository, must extend AppObjectEntity
11
+ * @extends AppObjectEntity
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * // Create a repository for player entities
16
+ * const playerRepo = new AppObjectEntityRepo<PlayerEntity>();
17
+ *
18
+ * // Add a new player
19
+ * const player = new PlayerEntity(appObject);
20
+ * playerRepo.add(player);
21
+ *
22
+ * // Get a player by its AppObject ID
23
+ * const retrievedPlayer = playerRepo.getForAppObject("player1");
24
+ * ```
25
+ */
3
26
  export class AppObjectEntityRepo extends AppObjectEntity {
4
27
  constructor() {
5
28
  super(...arguments);
6
29
  this.entityLookup = new Map();
7
30
  this.onEntityAddedObservers = new ObserverList();
31
+ /**
32
+ * Registers an observer to be notified when an entity is added to the repository.
33
+ *
34
+ * @param {(addedEntity: T) => void} observer - The callback function to invoke when an entity is added
35
+ */
8
36
  this.addEntityAddedObserver = (observer) => {
9
37
  this.onEntityAddedObservers.add(observer);
10
38
  };
39
+ /**
40
+ * Removes an observer previously registered for entity addition notifications.
41
+ *
42
+ * @param {(addedEntity: T) => void} observer - The callback function to remove
43
+ */
11
44
  this.removeEntityAddedObserver = (observer) => {
12
45
  this.onEntityAddedObservers.remove(observer);
13
46
  };
14
47
  this.onEntityRemovedObservers = new ObserverList();
48
+ /**
49
+ * Registers an observer to be notified when an entity is removed from the repository.
50
+ *
51
+ * @param {(removedEntity: T) => void} observer - The callback function to invoke when an entity is removed
52
+ */
15
53
  this.addEntityRemovedObserver = (observer) => {
16
54
  this.onEntityRemovedObservers.add(observer);
17
55
  };
56
+ /**
57
+ * Removes an observer previously registered for entity removal notifications.
58
+ *
59
+ * @param {(removedEntity: T) => void} observer - The callback function to remove
60
+ */
18
61
  this.removeEntityRemovedObserver = (observer) => {
19
62
  this.onEntityRemovedObservers.remove(observer);
20
63
  };
64
+ /**
65
+ * Checks if an entity exists for the given AppObject ID.
66
+ *
67
+ * @param {string} appObjectID - The ID of the AppObject
68
+ * @returns {boolean} True if an entity exists for the given AppObject ID, false otherwise
69
+ */
21
70
  this.hasForAppObject = (appObjectID) => {
22
71
  return this.entityLookup.has(appObjectID);
23
72
  };
73
+ /**
74
+ * Removes the entity associated with the specified AppObject ID.
75
+ *
76
+ * Notifies all registered observers after the entity is removed.
77
+ *
78
+ * @param {string} id - The ID of the AppObject whose entity should be removed
79
+ */
24
80
  this.removeForAppObject = (id) => {
25
81
  const existing = this.entityLookup.get(id);
26
82
  if (!existing)
@@ -30,13 +86,32 @@ export class AppObjectEntityRepo extends AppObjectEntity {
30
86
  this.notifyOnChange();
31
87
  this.onEntityRemovedObservers.notify(existing);
32
88
  };
89
+ /**
90
+ * Gets the entity associated with the specified AppObject ID.
91
+ *
92
+ * @param {string} appObjectID - The ID of the AppObject
93
+ * @returns {T | undefined} The entity if found, undefined otherwise
94
+ */
33
95
  this.getForAppObject = (appObjectID) => {
34
96
  return this.entityLookup.get(appObjectID);
35
97
  };
98
+ /**
99
+ * Gets all entities in the repository.
100
+ *
101
+ * @returns {T[]} An array of all entities
102
+ */
36
103
  this.getAll = () => {
37
104
  return Array.from(this.entityLookup.values());
38
105
  };
39
106
  }
107
+ /**
108
+ * Adds an entity to the repository.
109
+ *
110
+ * If an entity with the same AppObject ID already exists, it is replaced.
111
+ * Notifies all registered observers after the entity is added.
112
+ *
113
+ * @param {T} entity - The entity to add
114
+ */
40
115
  add(entity) {
41
116
  const existing = this.entityLookup.get(entity.appObject.id);
42
117
  if (existing) {
@@ -47,6 +122,5 @@ export class AppObjectEntityRepo extends AppObjectEntity {
47
122
  this.notifyOnChange();
48
123
  this.onEntityAddedObservers.notify(entity);
49
124
  }
50
- ;
51
125
  }
52
126
  //# sourceMappingURL=AppObjectEntityRepo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppObjectEntityRepo.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntityRepo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,OAAO,mBAEX,SAAQ,eAAe;IAFzB;;QAIU,iBAAY,GAAG,IAAI,GAAG,EAAa,CAAC;QAEpC,2BAAsB,GAAG,IAAI,YAAY,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,YAAY,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","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"]}
1
+ {"version":3,"file":"AppObjectEntityRepo.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectEntityRepo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,mBAEX,SAAQ,eAAe;IAFzB;;QAGU,iBAAY,GAAG,IAAI,GAAG,EAAa,CAAC;QAEpC,2BAAsB,GAAG,IAAI,YAAY,EAAK,CAAC;QACvD;;;;WAIG;QACH,2BAAsB,GAAG,CAAC,QAAkC,EAAE,EAAE;YAC9D,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF;;;;WAIG;QACH,8BAAyB,GAAG,CAAC,QAAkC,EAAQ,EAAE;YACvE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC,CAAC;QAEM,6BAAwB,GAAG,IAAI,YAAY,EAAK,CAAC;QACzD;;;;WAIG;QACH,6BAAwB,GAAG,CAAC,QAAoC,EAAE,EAAE;YAClE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF;;;;WAIG;QACH,gCAA2B,GAAG,CAC5B,QAAoC,EAC9B,EAAE;YACR,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF;;;;;WAKG;QACH,oBAAe,GAAG,CAAC,WAAmB,EAAW,EAAE;YACjD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC;QAsBF;;;;;;WAMG;QACH,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;;;;;WAKG;QACH,oBAAe,GAAG,CAAC,WAAmB,EAAiB,EAAE;YACvD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF;;;;WAIG;QACH,WAAM,GAAG,GAAQ,EAAE;YACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC;IACJ,CAAC;IAvDC;;;;;;;OAOG;IACH,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;CAqCF","sourcesContent":["import { ObserverList } from \"../Entities\";\r\nimport { AppObjectEntity } from \"./AppObjectEntity\";\r\n\r\n/**\r\n * A repository for managing collections of AppObjectEntity instances.\r\n *\r\n * This generic class provides a centralized way to store, retrieve, and manage\r\n * entities that are associated with specific AppObjects. It implements the observer\r\n * pattern to notify listeners when entities are added or removed.\r\n *\r\n * @template T - The type of entities managed by this repository, must extend AppObjectEntity\r\n * @extends AppObjectEntity\r\n *\r\n * @example\r\n * ```typescript\r\n * // Create a repository for player entities\r\n * const playerRepo = new AppObjectEntityRepo<PlayerEntity>();\r\n *\r\n * // Add a new player\r\n * const player = new PlayerEntity(appObject);\r\n * playerRepo.add(player);\r\n *\r\n * // Get a player by its AppObject ID\r\n * const retrievedPlayer = playerRepo.getForAppObject(\"player1\");\r\n * ```\r\n */\r\nexport class AppObjectEntityRepo<\r\n T extends AppObjectEntity,\r\n> extends AppObjectEntity {\r\n private entityLookup = new Map<string, T>();\r\n\r\n private onEntityAddedObservers = new ObserverList<T>();\r\n /**\r\n * Registers an observer to be notified when an entity is added to the repository.\r\n *\r\n * @param {(addedEntity: T) => void} observer - The callback function to invoke when an entity is added\r\n */\r\n addEntityAddedObserver = (observer: (addedEntity: T) => void) => {\r\n this.onEntityAddedObservers.add(observer);\r\n };\r\n\r\n /**\r\n * Removes an observer previously registered for entity addition notifications.\r\n *\r\n * @param {(addedEntity: T) => void} observer - The callback function to remove\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 /**\r\n * Registers an observer to be notified when an entity is removed from the repository.\r\n *\r\n * @param {(removedEntity: T) => void} observer - The callback function to invoke when an entity is removed\r\n */\r\n addEntityRemovedObserver = (observer: (removedEntity: T) => void) => {\r\n this.onEntityRemovedObservers.add(observer);\r\n };\r\n\r\n /**\r\n * Removes an observer previously registered for entity removal notifications.\r\n *\r\n * @param {(removedEntity: T) => void} observer - The callback function to remove\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 /**\r\n * Checks if an entity exists for the given AppObject ID.\r\n *\r\n * @param {string} appObjectID - The ID of the AppObject\r\n * @returns {boolean} True if an entity exists for the given AppObject ID, false otherwise\r\n */\r\n hasForAppObject = (appObjectID: string): boolean => {\r\n return this.entityLookup.has(appObjectID);\r\n };\r\n\r\n /**\r\n * Adds an entity to the repository.\r\n *\r\n * If an entity with the same AppObject ID already exists, it is replaced.\r\n * Notifies all registered observers after the entity is added.\r\n *\r\n * @param {T} entity - The entity to add\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 /**\r\n * Removes the entity associated with the specified AppObject ID.\r\n *\r\n * Notifies all registered observers after the entity is removed.\r\n *\r\n * @param {string} id - The ID of the AppObject whose entity should be removed\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 /**\r\n * Gets the entity associated with the specified AppObject ID.\r\n *\r\n * @param {string} appObjectID - The ID of the AppObject\r\n * @returns {T | undefined} The entity if found, undefined otherwise\r\n */\r\n getForAppObject = (appObjectID: string): T | undefined => {\r\n return this.entityLookup.get(appObjectID);\r\n };\r\n\r\n /**\r\n * Gets all entities in the repository.\r\n *\r\n * @returns {T[]} An array of all entities\r\n */\r\n getAll = (): T[] => {\r\n return Array.from(this.entityLookup.values());\r\n };\r\n}\r\n"]}
@@ -1,30 +1,76 @@
1
1
  import { ObserverList } from "../Entities";
2
2
  import { AppObjectComponent, AppObjectComponentType } from "./AppObjectComponent";
3
+ /**
4
+ * Presentation Manager (PM) component that transforms application state into view models
5
+ *
6
+ * AppObjectPM acts as a mediator between application state (entities) and views.
7
+ * It transforms raw application data into a format that's optimized for presentation,
8
+ * implementing the presentation model or MVVM pattern.
9
+ *
10
+ * A PM typically:
11
+ * 1. Observes entity changes
12
+ * 2. Transforms entity data into view models
13
+ * 3. Notifies attached views when view models change
14
+ * 4. Handles view model caching and optimization
15
+ *
16
+ * @typeparam T The view model type this PM produces
17
+ */
3
18
  export class AppObjectPM extends AppObjectComponent {
4
19
  constructor() {
5
20
  super(...arguments);
21
+ /** Identifies this as a Presentation Manager component */
6
22
  this.componentType = AppObjectComponentType.PM;
23
+ /** List of view update functions to notify when the view model changes */
7
24
  this.observerList = new ObserverList();
8
25
  }
26
+ /**
27
+ * Gets the most recently generated view model
28
+ * @returns The last view model or undefined if none has been generated
29
+ */
9
30
  get lastVM() {
10
31
  return this._lastVM;
11
32
  }
33
+ /**
34
+ * Registers a view update function to be called when the view model changes
35
+ * If a view model already exists, the provided function is called immediately with that model
36
+ *
37
+ * @param updateView Function to call with updated view models
38
+ */
12
39
  addView(updateView) {
13
40
  this.observerList.add(updateView);
41
+ // Immediately update the view with current view model if one exists
14
42
  if (this._lastVM !== undefined) {
15
43
  updateView(this._lastVM);
16
44
  }
17
45
  }
46
+ /**
47
+ * Unregisters a previously added view update function
48
+ *
49
+ * @param updateView The view update function to remove
50
+ */
18
51
  removeView(updateView) {
19
52
  this.observerList.remove(updateView);
20
53
  }
54
+ /**
55
+ * Updates the view model and notifies all registered views if the model has changed
56
+ * This method should be called by derived classes when the view model needs to be updated
57
+ *
58
+ * The method performs equality checking to prevent unnecessary updates when
59
+ * the new view model is equivalent to the previous one
60
+ *
61
+ * @param vm The new view model
62
+ */
21
63
  doUpdateView(vm) {
64
+ // Skip update if the view model hasn't changed
22
65
  if (this._lastVM && this.vmsAreEqual(this._lastVM, vm)) {
23
66
  return;
24
67
  }
25
68
  this._lastVM = vm;
26
69
  this.observerList.notify(vm);
27
70
  }
71
+ /**
72
+ * Cleans up resources and detaches this PM from its parent AppObject
73
+ */
28
74
  dispose() {
29
75
  this.observerList.clear();
30
76
  if (this.appObject.getComponent(this.type) === this) {
@@ -1 +1 @@
1
- {"version":3,"file":"AppObjectPM.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectPM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAElF,MAAM,OAAgB,WAAe,SAAQ,kBAAkB;IAA/D;;QACW,kBAAa,GAAG,sBAAsB,CAAC,EAAE,CAAC;QAQ3C,iBAAY,GAAG,IAAI,YAAY,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","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"]}
1
+ {"version":3,"file":"AppObjectPM.js","sourceRoot":"","sources":["../../../src/AppObject/AppObjectPM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAElF;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAgB,WAAe,SAAQ,kBAAkB;IAA/D;;QACE,0DAA0D;QACjD,kBAAa,GAAG,sBAAsB,CAAC,EAAE,CAAC;QAuBnD,0EAA0E;QAClE,iBAAY,GAAG,IAAI,YAAY,EAAK,CAAC;IAuD/C,CAAC;IAhEC;;;OAGG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAKD;;;;;OAKG;IACH,OAAO,CAAC,UAA2B;QACjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAElC,oEAAoE;QACpE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,UAA2B;QACpC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAK;QAChB,+CAA+C;QAC/C,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;;OAEG;IACH,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","sourcesContent":["import { ObserverList } from \"../Entities\";\r\nimport { AppObjectComponent, AppObjectComponentType } from \"./AppObjectComponent\";\r\n\r\n/**\r\n * Presentation Manager (PM) component that transforms application state into view models\r\n * \r\n * AppObjectPM acts as a mediator between application state (entities) and views.\r\n * It transforms raw application data into a format that's optimized for presentation,\r\n * implementing the presentation model or MVVM pattern.\r\n * \r\n * A PM typically:\r\n * 1. Observes entity changes\r\n * 2. Transforms entity data into view models\r\n * 3. Notifies attached views when view models change\r\n * 4. Handles view model caching and optimization\r\n * \r\n * @typeparam T The view model type this PM produces\r\n */\r\nexport abstract class AppObjectPM<T> extends AppObjectComponent {\r\n /** Identifies this as a Presentation Manager component */\r\n readonly componentType = AppObjectComponentType.PM;\r\n \r\n /**\r\n * Compares two view models to determine if they're equivalent\r\n * Used to prevent unnecessary view updates when the view model hasn't changed\r\n * \r\n * @param a First view model to compare\r\n * @param b Second view model to compare\r\n * @returns True if the view models are considered equal, false otherwise\r\n */\r\n abstract vmsAreEqual(a: T, b: T): boolean;\r\n\r\n /** The most recently generated view model */\r\n private _lastVM?: T;\r\n \r\n /**\r\n * Gets the most recently generated view model\r\n * @returns The last view model or undefined if none has been generated\r\n */\r\n get lastVM(): T | undefined {\r\n return this._lastVM;\r\n }\r\n\r\n /** List of view update functions to notify when the view model changes */\r\n private observerList = new ObserverList<T>();\r\n\r\n /**\r\n * Registers a view update function to be called when the view model changes\r\n * If a view model already exists, the provided function is called immediately with that model\r\n * \r\n * @param updateView Function to call with updated view models\r\n */\r\n addView(updateView: (vm: T) => void): void {\r\n this.observerList.add(updateView);\r\n\r\n // Immediately update the view with current view model if one exists\r\n if (this._lastVM !== undefined) {\r\n updateView(this._lastVM);\r\n }\r\n }\r\n\r\n /**\r\n * Unregisters a previously added view update function\r\n * \r\n * @param updateView The view update function to remove\r\n */\r\n removeView(updateView: (vm: T) => void): void {\r\n this.observerList.remove(updateView);\r\n }\r\n\r\n /**\r\n * Updates the view model and notifies all registered views if the model has changed\r\n * This method should be called by derived classes when the view model needs to be updated\r\n * \r\n * The method performs equality checking to prevent unnecessary updates when\r\n * the new view model is equivalent to the previous one\r\n * \r\n * @param vm The new view model\r\n */\r\n doUpdateView(vm: T) {\r\n // Skip update if the view model hasn't changed\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 /**\r\n * Cleans up resources and detaches this PM from its parent AppObject\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"]}
@@ -1,10 +1,30 @@
1
1
  import { ObservableEntity, ObserverList } from "../Entities";
2
2
  import { makeAppObject } from "./AppObject";
3
+ /**
4
+ * Abstract repository class for managing AppObjects and their components.
5
+ *
6
+ * This class provides the interface for storing, retrieving, and managing application
7
+ * objects, their components, and singletons. It also includes logging functionality
8
+ * and observer pattern implementation for tracking changes to the repository.
9
+ *
10
+ * @extends ObservableEntity
11
+ */
3
12
  export class AppObjectRepo extends ObservableEntity {
4
13
  }
14
+ /**
15
+ * Creates and returns a new AppObjectRepo instance.
16
+ *
17
+ * @returns {AppObjectRepo} A new AppObjectRepo instance
18
+ */
5
19
  export function makeAppObjectRepo() {
6
20
  return new AppObjectRepoImp();
7
21
  }
22
+ /**
23
+ * Implementation of the AppObjectRepo abstract class.
24
+ *
25
+ * @private
26
+ * @extends AppObjectRepo
27
+ */
8
28
  class AppObjectRepoImp extends AppObjectRepo {
9
29
  constructor() {
10
30
  super(...arguments);