@vived/core 1.4.1 → 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 (356) hide show
  1. package/README.md +118 -20
  2. package/dist/cjs/AppObject/AppObject.js +112 -0
  3. package/dist/cjs/AppObject/AppObject.js.map +1 -0
  4. package/dist/cjs/AppObject/AppObjectComponent.js +160 -0
  5. package/dist/cjs/AppObject/AppObjectComponent.js.map +1 -0
  6. package/dist/cjs/AppObject/AppObjectController.js +34 -0
  7. package/dist/cjs/AppObject/AppObjectController.js.map +1 -0
  8. package/dist/cjs/AppObject/AppObjectEntity.js +90 -0
  9. package/dist/cjs/AppObject/AppObjectEntity.js.map +1 -0
  10. package/dist/cjs/AppObject/AppObjectEntityRepo.js +130 -0
  11. package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +1 -0
  12. package/dist/cjs/AppObject/AppObjectPM.js +86 -0
  13. package/dist/cjs/AppObject/AppObjectPM.js.map +1 -0
  14. package/dist/cjs/AppObject/AppObjectRepo.js +153 -0
  15. package/dist/cjs/AppObject/AppObjectRepo.js.map +1 -0
  16. package/dist/cjs/AppObject/AppObjectUC.js +35 -0
  17. package/dist/cjs/AppObject/AppObjectUC.js.map +1 -0
  18. package/dist/cjs/AppObject/AppObjectView.js +34 -0
  19. package/dist/cjs/AppObject/AppObjectView.js.map +1 -0
  20. package/dist/cjs/AppObject/getSingletonComponent.js +26 -0
  21. package/dist/cjs/AppObject/getSingletonComponent.js.map +1 -0
  22. package/dist/cjs/AppObject/index.js +27 -0
  23. package/dist/cjs/AppObject/index.js.map +1 -0
  24. package/dist/cjs/AppObject/printAppObjectDetails.js +18 -0
  25. package/dist/cjs/AppObject/printAppObjectDetails.js.map +1 -0
  26. package/dist/cjs/Entities/MemoizedAngle.js +44 -0
  27. package/dist/cjs/Entities/MemoizedAngle.js.map +1 -0
  28. package/dist/cjs/Entities/MemoizedBoolean.js +44 -0
  29. package/dist/cjs/Entities/MemoizedBoolean.js.map +1 -0
  30. package/dist/cjs/Entities/MemoizedColor.js +45 -0
  31. package/dist/cjs/Entities/MemoizedColor.js.map +1 -0
  32. package/dist/cjs/Entities/MemoizedNumber.js +44 -0
  33. package/dist/cjs/Entities/MemoizedNumber.js.map +1 -0
  34. package/dist/cjs/Entities/MemoizedQuaternion.js +45 -0
  35. package/dist/cjs/Entities/MemoizedQuaternion.js.map +1 -0
  36. package/dist/cjs/Entities/MemoizedString.js +44 -0
  37. package/dist/cjs/Entities/MemoizedString.js.map +1 -0
  38. package/dist/cjs/Entities/MemoizedVector2.js +45 -0
  39. package/dist/cjs/Entities/MemoizedVector2.js.map +1 -0
  40. package/dist/cjs/Entities/MemoizedVector3.js +45 -0
  41. package/dist/cjs/Entities/MemoizedVector3.js.map +1 -0
  42. package/dist/cjs/Entities/ObservableEntity.js +37 -0
  43. package/dist/cjs/Entities/ObservableEntity.js.map +1 -0
  44. package/dist/cjs/Entities/ObserverList.js +48 -0
  45. package/dist/cjs/Entities/ObserverList.js.map +1 -0
  46. package/dist/cjs/Entities/RangedNumber.js +65 -0
  47. package/dist/cjs/Entities/RangedNumber.js.map +1 -0
  48. package/dist/cjs/Entities/index.js +28 -0
  49. package/dist/cjs/Entities/index.js.map +1 -0
  50. package/dist/cjs/Types/AppBoundary.js +3 -0
  51. package/dist/cjs/Types/AppBoundary.js.map +1 -0
  52. package/dist/cjs/Types/EaseFn.js +3 -0
  53. package/dist/cjs/Types/EaseFn.js.map +1 -0
  54. package/dist/cjs/Types/PmAdapter.js +3 -0
  55. package/dist/cjs/Types/PmAdapter.js.map +1 -0
  56. package/dist/cjs/Types/SingletonPmAdapter.js +3 -0
  57. package/dist/cjs/Types/SingletonPmAdapter.js.map +1 -0
  58. package/dist/cjs/Types/index.js +21 -0
  59. package/dist/cjs/Types/index.js.map +1 -0
  60. package/dist/cjs/Utilities/LengthConverters.js +21 -0
  61. package/dist/cjs/Utilities/LengthConverters.js.map +1 -0
  62. package/dist/cjs/Utilities/LerpNumber.js +85 -0
  63. package/dist/cjs/Utilities/LerpNumber.js.map +1 -0
  64. package/dist/cjs/Utilities/addAlphaToHex.js +16 -0
  65. package/dist/cjs/Utilities/addAlphaToHex.js.map +1 -0
  66. package/dist/cjs/Utilities/alphaToHex.js +21 -0
  67. package/dist/cjs/Utilities/alphaToHex.js.map +1 -0
  68. package/dist/cjs/Utilities/degreesToRadians.js +7 -0
  69. package/dist/cjs/Utilities/degreesToRadians.js.map +1 -0
  70. package/dist/cjs/Utilities/downloadFile.js +14 -0
  71. package/dist/cjs/Utilities/downloadFile.js.map +1 -0
  72. package/dist/cjs/Utilities/easeFunctions.js +208 -0
  73. package/dist/cjs/Utilities/easeFunctions.js.map +1 -0
  74. package/dist/cjs/Utilities/generateUniqueID.js +8 -0
  75. package/dist/cjs/Utilities/generateUniqueID.js.map +1 -0
  76. package/dist/cjs/Utilities/index.js +25 -0
  77. package/dist/cjs/Utilities/index.js.map +1 -0
  78. package/dist/cjs/Utilities/interpolateNumber.js +18 -0
  79. package/dist/cjs/Utilities/interpolateNumber.js.map +1 -0
  80. package/dist/cjs/ValueObjects/Angle.js +47 -0
  81. package/dist/cjs/ValueObjects/Angle.js.map +1 -0
  82. package/dist/cjs/ValueObjects/Color.js +859 -0
  83. package/dist/cjs/ValueObjects/Color.js.map +1 -0
  84. package/dist/cjs/ValueObjects/LineSegment2D.js +72 -0
  85. package/dist/cjs/ValueObjects/LineSegment2D.js.map +1 -0
  86. package/dist/cjs/ValueObjects/Matrix.js +466 -0
  87. package/dist/cjs/ValueObjects/Matrix.js.map +1 -0
  88. package/dist/cjs/ValueObjects/ParametricLine.js +77 -0
  89. package/dist/cjs/ValueObjects/ParametricLine.js.map +1 -0
  90. package/dist/cjs/ValueObjects/ParametricPlane.js +65 -0
  91. package/dist/cjs/ValueObjects/ParametricPlane.js.map +1 -0
  92. package/dist/cjs/ValueObjects/Quaternion.js +290 -0
  93. package/dist/cjs/ValueObjects/Quaternion.js.map +1 -0
  94. package/dist/cjs/ValueObjects/Rectangle.js +24 -0
  95. package/dist/cjs/ValueObjects/Rectangle.js.map +1 -0
  96. package/dist/cjs/ValueObjects/Vector2.js +191 -0
  97. package/dist/cjs/ValueObjects/Vector2.js.map +1 -0
  98. package/dist/cjs/ValueObjects/Vector3.js +231 -0
  99. package/dist/cjs/ValueObjects/Vector3.js.map +1 -0
  100. package/dist/cjs/ValueObjects/Version.js +171 -0
  101. package/dist/cjs/ValueObjects/Version.js.map +1 -0
  102. package/dist/cjs/ValueObjects/index.js +28 -0
  103. package/dist/cjs/ValueObjects/index.js.map +1 -0
  104. package/dist/cjs/index.js +22 -0
  105. package/dist/cjs/index.js.map +1 -0
  106. package/dist/esm/AppObject/AppObject.js +53 -0
  107. package/dist/esm/AppObject/AppObject.js.map +1 -1
  108. package/dist/esm/AppObject/AppObjectComponent.js +78 -0
  109. package/dist/esm/AppObject/AppObjectComponent.js.map +1 -1
  110. package/dist/esm/AppObject/AppObjectController.js +22 -0
  111. package/dist/esm/AppObject/AppObjectController.js.map +1 -1
  112. package/dist/esm/AppObject/AppObjectEntity.js +52 -0
  113. package/dist/esm/AppObject/AppObjectEntity.js.map +1 -1
  114. package/dist/esm/AppObject/AppObjectEntityRepo.js +75 -1
  115. package/dist/esm/AppObject/AppObjectEntityRepo.js.map +1 -1
  116. package/dist/esm/AppObject/AppObjectPM.js +46 -0
  117. package/dist/esm/AppObject/AppObjectPM.js.map +1 -1
  118. package/dist/esm/AppObject/AppObjectRepo.js +20 -0
  119. package/dist/esm/AppObject/AppObjectRepo.js.map +1 -1
  120. package/dist/esm/AppObject/AppObjectUC.js +24 -1
  121. package/dist/esm/AppObject/AppObjectUC.js.map +1 -1
  122. package/dist/esm/AppObject/AppObjectView.js +23 -1
  123. package/dist/esm/AppObject/AppObjectView.js.map +1 -1
  124. package/dist/esm/AppObject/getSingletonComponent.js +19 -0
  125. package/dist/esm/AppObject/getSingletonComponent.js.map +1 -1
  126. package/dist/esm/Entities/MemoizedAngle.js +21 -0
  127. package/dist/esm/Entities/MemoizedAngle.js.map +1 -1
  128. package/dist/esm/Entities/MemoizedBoolean.js +21 -0
  129. package/dist/esm/Entities/MemoizedBoolean.js.map +1 -1
  130. package/dist/esm/Entities/MemoizedColor.js +21 -0
  131. package/dist/esm/Entities/MemoizedColor.js.map +1 -1
  132. package/dist/esm/Entities/MemoizedNumber.js +21 -0
  133. package/dist/esm/Entities/MemoizedNumber.js.map +1 -1
  134. package/dist/esm/Entities/MemoizedQuaternion.js +21 -0
  135. package/dist/esm/Entities/MemoizedQuaternion.js.map +1 -1
  136. package/dist/esm/Entities/MemoizedString.js +21 -0
  137. package/dist/esm/Entities/MemoizedString.js.map +1 -1
  138. package/dist/esm/Entities/MemoizedVector2.js +21 -0
  139. package/dist/esm/Entities/MemoizedVector2.js.map +1 -1
  140. package/dist/esm/Entities/MemoizedVector3.js +21 -0
  141. package/dist/esm/Entities/MemoizedVector3.js.map +1 -1
  142. package/dist/esm/Entities/ObservableEntity.js +17 -0
  143. package/dist/esm/Entities/ObservableEntity.js.map +1 -1
  144. package/dist/esm/Entities/ObserverList.js +21 -0
  145. package/dist/esm/Entities/ObserverList.js.map +1 -1
  146. package/dist/esm/Entities/RangedNumber.js +29 -0
  147. package/dist/esm/Entities/RangedNumber.js.map +1 -1
  148. package/dist/esm/Types/PmAdapter.js.map +1 -1
  149. package/dist/esm/Types/SingletonPmAdapter.js.map +1 -1
  150. package/dist/esm/ValueObjects/Angle.js +1 -1
  151. package/dist/esm/ValueObjects/Angle.js.map +1 -1
  152. package/dist/esm/ValueObjects/LineSegment2D.js +6 -6
  153. package/dist/esm/ValueObjects/LineSegment2D.js.map +1 -1
  154. package/dist/esm/ValueObjects/Matrix.js +6 -6
  155. package/dist/esm/ValueObjects/Matrix.js.map +1 -1
  156. package/dist/esm/ValueObjects/Quaternion.js +17 -17
  157. package/dist/esm/ValueObjects/Quaternion.js.map +1 -1
  158. package/dist/esm/ValueObjects/Vector2.js +15 -8
  159. package/dist/esm/ValueObjects/Vector2.js.map +1 -1
  160. package/dist/types/AppObject/AppObject.d.ts +42 -0
  161. package/dist/types/AppObject/AppObject.d.ts.map +1 -1
  162. package/dist/types/AppObject/AppObjectComponent.d.ts +80 -0
  163. package/dist/types/AppObject/AppObjectComponent.d.ts.map +1 -1
  164. package/dist/types/AppObject/AppObjectController.d.ts +22 -0
  165. package/dist/types/AppObject/AppObjectController.d.ts.map +1 -1
  166. package/dist/types/AppObject/AppObjectEntity.d.ts +55 -0
  167. package/dist/types/AppObject/AppObjectEntity.d.ts.map +1 -1
  168. package/dist/types/AppObject/AppObjectEntityRepo.d.ts +75 -0
  169. package/dist/types/AppObject/AppObjectEntityRepo.d.ts.map +1 -1
  170. package/dist/types/AppObject/AppObjectPM.d.ts +53 -0
  171. package/dist/types/AppObject/AppObjectPM.d.ts.map +1 -1
  172. package/dist/types/AppObject/AppObjectRepo.d.ts +124 -0
  173. package/dist/types/AppObject/AppObjectRepo.d.ts.map +1 -1
  174. package/dist/types/AppObject/AppObjectUC.d.ts +23 -0
  175. package/dist/types/AppObject/AppObjectUC.d.ts.map +1 -1
  176. package/dist/types/AppObject/AppObjectView.d.ts +22 -0
  177. package/dist/types/AppObject/AppObjectView.d.ts.map +1 -1
  178. package/dist/types/AppObject/getSingletonComponent.d.ts +19 -0
  179. package/dist/types/AppObject/getSingletonComponent.d.ts.map +1 -1
  180. package/dist/types/Entities/MemoizedAngle.d.ts +21 -0
  181. package/dist/types/Entities/MemoizedAngle.d.ts.map +1 -1
  182. package/dist/types/Entities/MemoizedBoolean.d.ts +21 -0
  183. package/dist/types/Entities/MemoizedBoolean.d.ts.map +1 -1
  184. package/dist/types/Entities/MemoizedColor.d.ts +21 -0
  185. package/dist/types/Entities/MemoizedColor.d.ts.map +1 -1
  186. package/dist/types/Entities/MemoizedNumber.d.ts +21 -0
  187. package/dist/types/Entities/MemoizedNumber.d.ts.map +1 -1
  188. package/dist/types/Entities/MemoizedQuaternion.d.ts +21 -0
  189. package/dist/types/Entities/MemoizedQuaternion.d.ts.map +1 -1
  190. package/dist/types/Entities/MemoizedString.d.ts +21 -0
  191. package/dist/types/Entities/MemoizedString.d.ts.map +1 -1
  192. package/dist/types/Entities/MemoizedVector2.d.ts +21 -0
  193. package/dist/types/Entities/MemoizedVector2.d.ts.map +1 -1
  194. package/dist/types/Entities/MemoizedVector3.d.ts +21 -0
  195. package/dist/types/Entities/MemoizedVector3.d.ts.map +1 -1
  196. package/dist/types/Entities/ObservableEntity.d.ts +20 -0
  197. package/dist/types/Entities/ObservableEntity.d.ts.map +1 -1
  198. package/dist/types/Entities/ObserverList.d.ts +21 -0
  199. package/dist/types/Entities/ObserverList.d.ts.map +1 -1
  200. package/dist/types/Entities/RangedNumber.d.ts +37 -0
  201. package/dist/types/Entities/RangedNumber.d.ts.map +1 -1
  202. package/dist/types/Types/PmAdapter.d.ts +60 -0
  203. package/dist/types/Types/PmAdapter.d.ts.map +1 -1
  204. package/dist/types/Types/SingletonPmAdapter.d.ts +55 -0
  205. package/dist/types/Types/SingletonPmAdapter.d.ts.map +1 -1
  206. package/dist/types/ValueObjects/Angle.d.ts +1 -1
  207. package/dist/types/ValueObjects/Matrix.d.ts +5 -5
  208. package/dist/types/ValueObjects/Matrix.d.ts.map +1 -1
  209. package/dist/types/ValueObjects/Quaternion.d.ts +17 -17
  210. package/dist/types/ValueObjects/Vector2.d.ts +8 -3
  211. package/dist/types/ValueObjects/Vector2.d.ts.map +1 -1
  212. package/package.json +58 -55
  213. package/dist/esm/AppObject/AppObject.test.js +0 -110
  214. package/dist/esm/AppObject/AppObject.test.js.map +0 -1
  215. package/dist/esm/AppObject/AppObjectComponent.test.js +0 -130
  216. package/dist/esm/AppObject/AppObjectComponent.test.js.map +0 -1
  217. package/dist/esm/AppObject/AppObjectEntity.test.js +0 -106
  218. package/dist/esm/AppObject/AppObjectEntity.test.js.map +0 -1
  219. package/dist/esm/AppObject/AppObjectEntityRepo.test.js +0 -147
  220. package/dist/esm/AppObject/AppObjectEntityRepo.test.js.map +0 -1
  221. package/dist/esm/AppObject/AppObjectPM.test.js +0 -101
  222. package/dist/esm/AppObject/AppObjectPM.test.js.map +0 -1
  223. package/dist/esm/AppObject/AppObjectRepo.test.js +0 -211
  224. package/dist/esm/AppObject/AppObjectRepo.test.js.map +0 -1
  225. package/dist/esm/AppObject/getSingletonComponent.test.js +0 -11
  226. package/dist/esm/AppObject/getSingletonComponent.test.js.map +0 -1
  227. package/dist/esm/Entities/MemoizedAngle.test.js +0 -28
  228. package/dist/esm/Entities/MemoizedAngle.test.js.map +0 -1
  229. package/dist/esm/Entities/MemoizedBoolean.test.js +0 -32
  230. package/dist/esm/Entities/MemoizedBoolean.test.js.map +0 -1
  231. package/dist/esm/Entities/MemoizedColor.test.js +0 -30
  232. package/dist/esm/Entities/MemoizedColor.test.js.map +0 -1
  233. package/dist/esm/Entities/MemoizedNumber.test.js +0 -27
  234. package/dist/esm/Entities/MemoizedNumber.test.js.map +0 -1
  235. package/dist/esm/Entities/MemoizedQuaternion.test.js +0 -30
  236. package/dist/esm/Entities/MemoizedQuaternion.test.js.map +0 -1
  237. package/dist/esm/Entities/MemoizedString.test.js +0 -27
  238. package/dist/esm/Entities/MemoizedString.test.js.map +0 -1
  239. package/dist/esm/Entities/MemoizedVector2.test.js +0 -30
  240. package/dist/esm/Entities/MemoizedVector2.test.js.map +0 -1
  241. package/dist/esm/Entities/MemoizedVector3.test.js +0 -30
  242. package/dist/esm/Entities/MemoizedVector3.test.js.map +0 -1
  243. package/dist/esm/Entities/ObservableEntity.test.js +0 -23
  244. package/dist/esm/Entities/ObservableEntity.test.js.map +0 -1
  245. package/dist/esm/Entities/ObserverList.test.js +0 -42
  246. package/dist/esm/Entities/ObserverList.test.js.map +0 -1
  247. package/dist/esm/Entities/RangedNumber.test.js +0 -94
  248. package/dist/esm/Entities/RangedNumber.test.js.map +0 -1
  249. package/dist/esm/Utilities/LengthConverters.test.js +0 -22
  250. package/dist/esm/Utilities/LengthConverters.test.js.map +0 -1
  251. package/dist/esm/Utilities/LerpNumber.test.js +0 -88
  252. package/dist/esm/Utilities/LerpNumber.test.js.map +0 -1
  253. package/dist/esm/Utilities/addAlphaToHex.test.js +0 -32
  254. package/dist/esm/Utilities/addAlphaToHex.test.js.map +0 -1
  255. package/dist/esm/Utilities/alphaToHex.test.js +0 -73
  256. package/dist/esm/Utilities/alphaToHex.test.js.map +0 -1
  257. package/dist/esm/Utilities/degreesToRadians.test.js +0 -7
  258. package/dist/esm/Utilities/degreesToRadians.test.js.map +0 -1
  259. package/dist/esm/Utilities/easeFunctions.test.js +0 -207
  260. package/dist/esm/Utilities/easeFunctions.test.js.map +0 -1
  261. package/dist/esm/Utilities/interpolateNumber.test.js +0 -24
  262. package/dist/esm/Utilities/interpolateNumber.test.js.map +0 -1
  263. package/dist/esm/ValueObjects/Angle.test.js +0 -26
  264. package/dist/esm/ValueObjects/Angle.test.js.map +0 -1
  265. package/dist/esm/ValueObjects/Color.test.js +0 -145
  266. package/dist/esm/ValueObjects/Color.test.js.map +0 -1
  267. package/dist/esm/ValueObjects/LineSegment2D.test.js +0 -100
  268. package/dist/esm/ValueObjects/LineSegment2D.test.js.map +0 -1
  269. package/dist/esm/ValueObjects/Matrix.test.js +0 -383
  270. package/dist/esm/ValueObjects/Matrix.test.js.map +0 -1
  271. package/dist/esm/ValueObjects/ParametricLine.test.js +0 -124
  272. package/dist/esm/ValueObjects/ParametricLine.test.js.map +0 -1
  273. package/dist/esm/ValueObjects/ParametricPlane.test.js +0 -99
  274. package/dist/esm/ValueObjects/ParametricPlane.test.js.map +0 -1
  275. package/dist/esm/ValueObjects/Quaternion.test.js +0 -238
  276. package/dist/esm/ValueObjects/Quaternion.test.js.map +0 -1
  277. package/dist/esm/ValueObjects/Rectangle.test.js +0 -30
  278. package/dist/esm/ValueObjects/Rectangle.test.js.map +0 -1
  279. package/dist/esm/ValueObjects/Vector2.test.js +0 -134
  280. package/dist/esm/ValueObjects/Vector2.test.js.map +0 -1
  281. package/dist/esm/ValueObjects/Vector3.test.js +0 -186
  282. package/dist/esm/ValueObjects/Vector3.test.js.map +0 -1
  283. package/dist/esm/ValueObjects/Version.test.js +0 -308
  284. package/dist/esm/ValueObjects/Version.test.js.map +0 -1
  285. package/dist/types/AppObject/AppObject.test.d.ts +0 -7
  286. package/dist/types/AppObject/AppObject.test.d.ts.map +0 -1
  287. package/dist/types/AppObject/AppObjectComponent.test.d.ts +0 -2
  288. package/dist/types/AppObject/AppObjectComponent.test.d.ts.map +0 -1
  289. package/dist/types/AppObject/AppObjectEntity.test.d.ts +0 -2
  290. package/dist/types/AppObject/AppObjectEntity.test.d.ts.map +0 -1
  291. package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts +0 -2
  292. package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts.map +0 -1
  293. package/dist/types/AppObject/AppObjectPM.test.d.ts +0 -2
  294. package/dist/types/AppObject/AppObjectPM.test.d.ts.map +0 -1
  295. package/dist/types/AppObject/AppObjectRepo.test.d.ts +0 -2
  296. package/dist/types/AppObject/AppObjectRepo.test.d.ts.map +0 -1
  297. package/dist/types/AppObject/getSingletonComponent.test.d.ts +0 -2
  298. package/dist/types/AppObject/getSingletonComponent.test.d.ts.map +0 -1
  299. package/dist/types/Entities/MemoizedAngle.test.d.ts +0 -2
  300. package/dist/types/Entities/MemoizedAngle.test.d.ts.map +0 -1
  301. package/dist/types/Entities/MemoizedBoolean.test.d.ts +0 -2
  302. package/dist/types/Entities/MemoizedBoolean.test.d.ts.map +0 -1
  303. package/dist/types/Entities/MemoizedColor.test.d.ts +0 -2
  304. package/dist/types/Entities/MemoizedColor.test.d.ts.map +0 -1
  305. package/dist/types/Entities/MemoizedNumber.test.d.ts +0 -2
  306. package/dist/types/Entities/MemoizedNumber.test.d.ts.map +0 -1
  307. package/dist/types/Entities/MemoizedQuaternion.test.d.ts +0 -2
  308. package/dist/types/Entities/MemoizedQuaternion.test.d.ts.map +0 -1
  309. package/dist/types/Entities/MemoizedString.test.d.ts +0 -2
  310. package/dist/types/Entities/MemoizedString.test.d.ts.map +0 -1
  311. package/dist/types/Entities/MemoizedVector2.test.d.ts +0 -2
  312. package/dist/types/Entities/MemoizedVector2.test.d.ts.map +0 -1
  313. package/dist/types/Entities/MemoizedVector3.test.d.ts +0 -2
  314. package/dist/types/Entities/MemoizedVector3.test.d.ts.map +0 -1
  315. package/dist/types/Entities/ObservableEntity.test.d.ts +0 -2
  316. package/dist/types/Entities/ObservableEntity.test.d.ts.map +0 -1
  317. package/dist/types/Entities/ObserverList.test.d.ts +0 -2
  318. package/dist/types/Entities/ObserverList.test.d.ts.map +0 -1
  319. package/dist/types/Entities/RangedNumber.test.d.ts +0 -2
  320. package/dist/types/Entities/RangedNumber.test.d.ts.map +0 -1
  321. package/dist/types/Utilities/LengthConverters.test.d.ts +0 -2
  322. package/dist/types/Utilities/LengthConverters.test.d.ts.map +0 -1
  323. package/dist/types/Utilities/LerpNumber.test.d.ts +0 -2
  324. package/dist/types/Utilities/LerpNumber.test.d.ts.map +0 -1
  325. package/dist/types/Utilities/addAlphaToHex.test.d.ts +0 -2
  326. package/dist/types/Utilities/addAlphaToHex.test.d.ts.map +0 -1
  327. package/dist/types/Utilities/alphaToHex.test.d.ts +0 -2
  328. package/dist/types/Utilities/alphaToHex.test.d.ts.map +0 -1
  329. package/dist/types/Utilities/degreesToRadians.test.d.ts +0 -2
  330. package/dist/types/Utilities/degreesToRadians.test.d.ts.map +0 -1
  331. package/dist/types/Utilities/easeFunctions.test.d.ts +0 -2
  332. package/dist/types/Utilities/easeFunctions.test.d.ts.map +0 -1
  333. package/dist/types/Utilities/interpolateNumber.test.d.ts +0 -2
  334. package/dist/types/Utilities/interpolateNumber.test.d.ts.map +0 -1
  335. package/dist/types/ValueObjects/Angle.test.d.ts +0 -2
  336. package/dist/types/ValueObjects/Angle.test.d.ts.map +0 -1
  337. package/dist/types/ValueObjects/Color.test.d.ts +0 -2
  338. package/dist/types/ValueObjects/Color.test.d.ts.map +0 -1
  339. package/dist/types/ValueObjects/LineSegment2D.test.d.ts +0 -2
  340. package/dist/types/ValueObjects/LineSegment2D.test.d.ts.map +0 -1
  341. package/dist/types/ValueObjects/Matrix.test.d.ts +0 -2
  342. package/dist/types/ValueObjects/Matrix.test.d.ts.map +0 -1
  343. package/dist/types/ValueObjects/ParametricLine.test.d.ts +0 -2
  344. package/dist/types/ValueObjects/ParametricLine.test.d.ts.map +0 -1
  345. package/dist/types/ValueObjects/ParametricPlane.test.d.ts +0 -2
  346. package/dist/types/ValueObjects/ParametricPlane.test.d.ts.map +0 -1
  347. package/dist/types/ValueObjects/Quaternion.test.d.ts +0 -2
  348. package/dist/types/ValueObjects/Quaternion.test.d.ts.map +0 -1
  349. package/dist/types/ValueObjects/Rectangle.test.d.ts +0 -2
  350. package/dist/types/ValueObjects/Rectangle.test.d.ts.map +0 -1
  351. package/dist/types/ValueObjects/Vector2.test.d.ts +0 -2
  352. package/dist/types/ValueObjects/Vector2.test.d.ts.map +0 -1
  353. package/dist/types/ValueObjects/Vector3.test.d.ts +0 -2
  354. package/dist/types/ValueObjects/Vector3.test.d.ts.map +0 -1
  355. package/dist/types/ValueObjects/Version.test.d.ts +0 -2
  356. package/dist/types/ValueObjects/Version.test.d.ts.map +0 -1
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Vector2 = void 0;
4
+ const _1 = require(".");
5
+ class Vector2 {
6
+ /**
7
+ * Creates a zero vector
8
+ * @returns Vector [0,0]
9
+ */
10
+ static Zero() {
11
+ return new Vector2(0, 0);
12
+ }
13
+ /**
14
+ * Creates a one vector
15
+ * @returns Vector [1,1]
16
+ */
17
+ static One() {
18
+ return new Vector2(1, 1);
19
+ }
20
+ /**
21
+ * Checks to see if Vector A equals Vector B
22
+ * @param a Vector A
23
+ * @param b Vector B
24
+ * @returns True if Vector A === Vector B
25
+ */
26
+ static Equal(a, b) {
27
+ if (a.x !== b.x)
28
+ return false;
29
+ if (a.y !== b.y)
30
+ return false;
31
+ return true;
32
+ }
33
+ /**
34
+ * Creates a Vector from a Data Transfer Object
35
+ * @param dto The Data Transfer Object
36
+ * @returns The Vector
37
+ */
38
+ static FromDTO(dto) {
39
+ return new Vector2(dto.x, dto.y);
40
+ }
41
+ /**
42
+ * Adds Vector B to Vector A
43
+ * @param a Vector A
44
+ * @param b Vector B
45
+ * @returns A + B
46
+ */
47
+ static Add(a, b) {
48
+ return new Vector2(a.x + b.x, a.y + b.y);
49
+ }
50
+ /**
51
+ * Subtracts Vector B from Vector A
52
+ * @param a Vector A
53
+ * @param b Vector B
54
+ * @returns A - B
55
+ */
56
+ static Subtract(a, b) {
57
+ return new Vector2(a.x - b.x, a.y - b.y);
58
+ }
59
+ /**
60
+ * Get the magnitude (length) of the vector
61
+ */
62
+ get magnitude() {
63
+ const xSqr = this.x * this.x;
64
+ const ySqr = this.y * this.y;
65
+ const magnitude = Math.sqrt(xSqr + ySqr);
66
+ return magnitude;
67
+ }
68
+ /**
69
+ * @deprecated Use magnitude instead - this property is kept for backward compatibility
70
+ * Get the magnitude (length) of the vector
71
+ */
72
+ get magnitued() {
73
+ return this.magnitude;
74
+ }
75
+ /**
76
+ * Get the unit vector
77
+ */
78
+ get unit() {
79
+ const mag = this.magnitude;
80
+ if (mag === 0) {
81
+ return Vector2.Zero();
82
+ }
83
+ const unitX = this.x / mag;
84
+ const unitY = this.y / mag;
85
+ return new Vector2(unitX, unitY);
86
+ }
87
+ /**
88
+ * Returns the angle of the direction of this vector in degrees.
89
+ * A right vector [1,0] will return 0, a left vector [-1,0] will return 180, an up vector [0,1] will return 90 and a down vector [0,-1] will return -90
90
+ */
91
+ get theta() {
92
+ return (Math.atan2(this.y, this.x) * 180) / Math.PI;
93
+ }
94
+ /**
95
+ * Returns the vector as an array of numbers [x,y]
96
+ */
97
+ get array() {
98
+ return [this.x, this.y];
99
+ }
100
+ /**
101
+ * Get the vector as a Data Transfer Object
102
+ */
103
+ get dto() {
104
+ return { x: this.x, y: this.y };
105
+ }
106
+ constructor(x, y) {
107
+ this.x = x;
108
+ this.y = y;
109
+ }
110
+ }
111
+ exports.Vector2 = Vector2;
112
+ /**
113
+ * Checks to see if Vector A is close to Vector B
114
+ * @param a Vector A
115
+ * @param b Vector B
116
+ * @param threshold Tolerance to define "close". Defaults to 0.01
117
+ * @returns True if A and B are close enough
118
+ */
119
+ Vector2.Close = (a, b, threshold = 0.01) => {
120
+ const diff = Vector2.Subtract(a, b);
121
+ const diffMag = diff.magnitude;
122
+ if (diffMag < threshold)
123
+ return true;
124
+ else
125
+ return false;
126
+ };
127
+ /**
128
+ * Rotates a vector by an angle
129
+ * @param vec The original vector
130
+ * @param angle The angle
131
+ * @returns A new Vector that has been rotated from the original by an angle
132
+ */
133
+ Vector2.Rotate = (vec, angle) => {
134
+ const x = vec.x * Math.cos(angle.radians) - vec.y * Math.sin(angle.radians);
135
+ const y = vec.x * Math.sin(angle.radians) + vec.y * Math.cos(angle.radians);
136
+ return new Vector2(x, y);
137
+ };
138
+ /**
139
+ * Scales a vector uniformly
140
+ * @param vector The original vector
141
+ * @param scale Scale factor
142
+ * @returns A new, scaled vector
143
+ */
144
+ Vector2.Scale = (vector, scale) => {
145
+ const x = scale * vector.x;
146
+ const y = scale * vector.y;
147
+ return new Vector2(x, y);
148
+ };
149
+ /**
150
+ * Creates a new vector of a given length and a unit that is equal to the original vector
151
+ * @param vector The original vector. This determines the unit of the final vector
152
+ * @param length The desired length of the final vector
153
+ * @returns The final vector
154
+ */
155
+ Vector2.NewVectorOfLength = (vector, length) => {
156
+ const unit = vector.unit;
157
+ const x = length * unit.x;
158
+ const y = length * unit.y;
159
+ return new Vector2(x, y);
160
+ };
161
+ /**
162
+ * Calculate the dot product between Vectors A and B
163
+ * @param a Vector A
164
+ * @param b Vector B
165
+ * @returns The Dot product between A and B
166
+ */
167
+ Vector2.Dot = (a, b) => {
168
+ return a.x * b.x + a.y * b.y;
169
+ };
170
+ /**
171
+ * Calculates the dot product between Vectors A and B
172
+ * @param a Vector A
173
+ * @param b Vector B
174
+ * @returns A . B
175
+ */
176
+ Vector2.AngleBetween = (a, b) => {
177
+ const dot = Vector2.Dot(a, b);
178
+ const magnitudes = a.magnitude * b.magnitude;
179
+ const angRadians = Math.acos(dot / magnitudes);
180
+ return _1.Angle.FromRadians(angRadians);
181
+ };
182
+ /**
183
+ * Calculates the Cross product between Vectors A and B
184
+ * @param a Vector A
185
+ * @param b Vector B
186
+ * @returns A X B
187
+ */
188
+ Vector2.Cross = (a, b) => {
189
+ return a.x * b.y - a.y * b.x;
190
+ };
191
+ //# sourceMappingURL=Vector2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../../../src/ValueObjects/Vector2.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle } from \".\";\r\n\r\nexport class Vector2 {\r\n /**\r\n * Creates a zero vector\r\n * @returns Vector [0,0]\r\n */\r\n public static Zero(): Vector2 {\r\n return new Vector2(0, 0);\r\n }\r\n\r\n /**\r\n * Creates a one vector\r\n * @returns Vector [1,1]\r\n */\r\n public static One(): Vector2 {\r\n return new Vector2(1, 1);\r\n }\r\n\r\n /**\r\n * Checks to see if Vector A equals Vector B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns True if Vector A === Vector B\r\n */\r\n public static Equal(a: Vector2, b: Vector2): boolean {\r\n if (a.x !== b.x) return false;\r\n if (a.y !== b.y) return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a Vector from a Data Transfer Object\r\n * @param dto The Data Transfer Object\r\n * @returns The Vector\r\n */\r\n public static FromDTO(dto: { x: number; y: number }): Vector2 {\r\n return new Vector2(dto.x, dto.y);\r\n }\r\n\r\n /**\r\n * Adds Vector B to Vector A\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A + B\r\n */\r\n public static Add(a: Vector2, b: Vector2): Vector2 {\r\n return new Vector2(a.x + b.x, a.y + b.y);\r\n }\r\n\r\n /**\r\n * Subtracts Vector B from Vector A\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A - B\r\n */\r\n public static Subtract(a: Vector2, b: Vector2): Vector2 {\r\n return new Vector2(a.x - b.x, a.y - b.y);\r\n }\r\n\r\n /**\r\n * Checks to see if Vector A is close to Vector B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @param threshold Tolerance to define \"close\". Defaults to 0.01\r\n * @returns True if A and B are close enough\r\n */\r\n public static Close = (\r\n a: Vector2,\r\n b: Vector2,\r\n threshold: number = 0.01\r\n ): boolean => {\r\n const diff = Vector2.Subtract(a, b);\r\n const diffMag = diff.magnitude;\r\n\r\n if (diffMag < threshold) return true;\r\n else return false;\r\n };\r\n\r\n /**\r\n * Rotates a vector by an angle\r\n * @param vec The original vector\r\n * @param angle The angle\r\n * @returns A new Vector that has been rotated from the original by an angle\r\n */\r\n public static Rotate = (vec: Vector2, angle: Angle): Vector2 => {\r\n const x = vec.x * Math.cos(angle.radians) - vec.y * Math.sin(angle.radians);\r\n const y = vec.x * Math.sin(angle.radians) + vec.y * Math.cos(angle.radians);\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Scales a vector uniformly\r\n * @param vector The original vector\r\n * @param scale Scale factor\r\n * @returns A new, scaled vector\r\n */\r\n public static Scale = (vector: Vector2, scale: number): Vector2 => {\r\n const x = scale * vector.x;\r\n const y = scale * vector.y;\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Creates a new vector of a given length and a unit that is equal to the original vector\r\n * @param vector The original vector. This determines the unit of the final vector\r\n * @param length The desired length of the final vector\r\n * @returns The final vector\r\n */\r\n public static NewVectorOfLength = (\r\n vector: Vector2,\r\n length: number\r\n ): Vector2 => {\r\n const unit = vector.unit;\r\n const x = length * unit.x;\r\n const y = length * unit.y;\r\n return new Vector2(x, y);\r\n };\r\n\r\n /**\r\n * Calculate the dot product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns The Dot product between A and B\r\n */\r\n public static Dot = (a: Vector2, b: Vector2): number => {\r\n return a.x * b.x + a.y * b.y;\r\n };\r\n\r\n /**\r\n * Calculates the dot product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A . B\r\n */\r\n public static AngleBetween = (a: Vector2, b: Vector2): Angle => {\r\n const dot = Vector2.Dot(a, b);\r\n const magnitudes = a.magnitude * b.magnitude;\r\n\r\n const angRadians = Math.acos(dot / magnitudes);\r\n\r\n return Angle.FromRadians(angRadians);\r\n };\r\n\r\n /**\r\n * Calculates the Cross product between Vectors A and B\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @returns A X B\r\n */\r\n public static Cross = (a: Vector2, b: Vector2): number => {\r\n return a.x * b.y - a.y * b.x;\r\n };\r\n\r\n readonly x: number;\r\n readonly y: number;\r\n\r\n /**\r\n * Get the magnitude (length) of the vector\r\n */\r\n get magnitude(): number {\r\n const xSqr = this.x * this.x;\r\n const ySqr = this.y * this.y;\r\n\r\n const magnitude = Math.sqrt(xSqr + ySqr);\r\n return magnitude;\r\n }\r\n \r\n /**\r\n * @deprecated Use magnitude instead - this property is kept for backward compatibility\r\n * Get the magnitude (length) of the vector\r\n */\r\n get magnitued(): number {\r\n return this.magnitude;\r\n }\r\n\r\n /**\r\n * Get the unit vector\r\n */\r\n get unit(): Vector2 {\r\n const mag = this.magnitude;\r\n if (mag === 0) {\r\n return Vector2.Zero();\r\n }\r\n\r\n const unitX = this.x / mag;\r\n const unitY = this.y / mag;\r\n return new Vector2(unitX, unitY);\r\n }\r\n\r\n /**\r\n * Returns the angle of the direction of this vector in degrees.\r\n * A right vector [1,0] will return 0, a left vector [-1,0] will return 180, an up vector [0,1] will return 90 and a down vector [0,-1] will return -90\r\n */\r\n get theta(): number {\r\n return (Math.atan2(this.y, this.x) * 180) / Math.PI;\r\n }\r\n\r\n /**\r\n * Returns the vector as an array of numbers [x,y]\r\n */\r\n get array(): [number, number] {\r\n return [this.x, this.y];\r\n }\r\n\r\n /**\r\n * Get the vector as a Data Transfer Object\r\n */\r\n get dto(): { x: number; y: number } {\r\n return { x: this.x, y: this.y };\r\n }\r\n\r\n constructor(x: number, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Vector3 = void 0;
4
+ class Vector3 {
5
+ /**
6
+ * Creates a zero vector
7
+ * @returns Vector [0,0,0]
8
+ */
9
+ static Zero() {
10
+ return new Vector3(0, 0, 0);
11
+ }
12
+ /**
13
+ * Creates a vector of ones
14
+ * @returns Vector [1,1,1]
15
+ */
16
+ static One() {
17
+ return new Vector3(1, 1, 1);
18
+ }
19
+ /**
20
+ * Creates a Right vector (positive X)
21
+ * @param length optional length of the right unit. Default is 1
22
+ * @returns Vector [length, 0,0]
23
+ */
24
+ static Right(length = 1) {
25
+ return new Vector3(length, 0, 0);
26
+ }
27
+ /**
28
+ * Creates a Left vector (negative X)
29
+ * @param length optional length of the left unit. Default is 1
30
+ * @returns Vector [-length, 0, 0]
31
+ */
32
+ static Left(length = 1) {
33
+ return new Vector3(-length, 0, 0);
34
+ }
35
+ /**
36
+ * Creates an Up vector (positive Y)
37
+ * @param length optional length of the vector. Default is 1
38
+ * @returns Vector [0, length, 0]
39
+ */
40
+ static Up(length = 1) {
41
+ return new Vector3(0, length, 0);
42
+ }
43
+ /**
44
+ * Creates a Down vector (negative Y)
45
+ * @param length optional length of the vector. Default is 1
46
+ * @returns Vector [0, -length, 0]
47
+ */
48
+ static Down(length = 1) {
49
+ return new Vector3(0, -length, 0);
50
+ }
51
+ /**
52
+ * Creates a Forward vector (positive Z)
53
+ * @param length optional length of the vector. Default is 1
54
+ * @returns Vector [0, 0, length]
55
+ */
56
+ static Forward(length = 1) {
57
+ return new Vector3(0, 0, length);
58
+ }
59
+ /**
60
+ * Creates a Backward vector (negative Z)
61
+ * @param length optional length of the vector. Default is 1
62
+ * @returns Vector [0, 0, -length]
63
+ */
64
+ static Backward(length = 1) {
65
+ return new Vector3(0, 0, -length);
66
+ }
67
+ /**
68
+ * Creates a Vector from an array of components
69
+ * @param values The x, y, z components as an array
70
+ * @returns The Vector
71
+ */
72
+ static FromArray(values) {
73
+ return new Vector3(values[0], values[1], values[2]);
74
+ }
75
+ /**
76
+ * Creates a Vector from a Data Transfer Object
77
+ * @param dto The Data Transfer Object
78
+ * @returns The Vector
79
+ */
80
+ static FromDTO(dto) {
81
+ return new Vector3(dto.x, dto.y, dto.z);
82
+ }
83
+ static interpolateNumber(a, b, percent) {
84
+ return a + (b - a) * percent;
85
+ }
86
+ /**
87
+ * Gets the magnitude of the Vector3
88
+ * @returns the magnitude of the Vector3
89
+ */
90
+ get magnitude() {
91
+ const xSqr = this.x * this.x;
92
+ const ySqr = this.y * this.y;
93
+ const zSqr = this.z * this.z;
94
+ const magnitude = Math.sqrt(xSqr + ySqr + zSqr);
95
+ return magnitude;
96
+ }
97
+ /**
98
+ * Gets the unit vector for this Vector3
99
+ * @returns the unit vector
100
+ */
101
+ get unit() {
102
+ const mag = this.magnitude;
103
+ if (mag === 0) {
104
+ return Vector3.Zero();
105
+ }
106
+ const unitX = this.x / mag;
107
+ const unitY = this.y / mag;
108
+ const unitZ = this.z / mag;
109
+ return new Vector3(unitX, unitY, unitZ);
110
+ }
111
+ /**
112
+ * Gets the vector as an array
113
+ * @returns an array representing the vector
114
+ */
115
+ get array() {
116
+ return [this.x, this.y, this.z];
117
+ }
118
+ /**
119
+ * Get the vector as a Data Transfer Object
120
+ */
121
+ get dto() {
122
+ return { x: this.x, y: this.y, z: this.z };
123
+ }
124
+ constructor(x, y, z) {
125
+ this.x = x;
126
+ this.y = y;
127
+ this.z = z;
128
+ }
129
+ }
130
+ exports.Vector3 = Vector3;
131
+ /**
132
+ * Adds Vector B to Vector A
133
+ * @param a Vector A
134
+ * @param b Vector B
135
+ * @return Result of A + B
136
+ */
137
+ Vector3.Add = (a, b) => {
138
+ return new Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
139
+ };
140
+ /**
141
+ * Subtracts Vector B from Vector A
142
+ * @param a Vector A
143
+ * @param b Vector B
144
+ * @return Result of A - B
145
+ */
146
+ Vector3.Subtract = (a, b) => {
147
+ return new Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
148
+ };
149
+ /**
150
+ * Checks to see if the two vectors are equal
151
+ * @param a Vector A
152
+ * @param b Vector B
153
+ * @return True if the two vectors are equal, otherwise false
154
+ */
155
+ Vector3.Equal = (a, b) => {
156
+ if (a.x === b.x && a.y === b.y && a.z === b.z)
157
+ return true;
158
+ else
159
+ return false;
160
+ };
161
+ /**
162
+ * Checks to see if the two vectors are close
163
+ * @param a Vector A
164
+ * @param b Vector B
165
+ * @param tolerance Tolerance for checking. Defaulted to 0.01
166
+ * @return True if the distance between the two vectors is less than the tolerance, otherwise false
167
+ */
168
+ Vector3.Close = (a, b, tolerance = 0.01) => {
169
+ const diff = Vector3.Subtract(a, b);
170
+ const diffMag = diff.magnitude;
171
+ if (diffMag < tolerance)
172
+ return true;
173
+ else
174
+ return false;
175
+ };
176
+ /**
177
+ * Calculates the Cross Product between two vectors
178
+ * @param a Vector A
179
+ * @param b Vector B
180
+ * @return the cross product between the two vectors
181
+ */
182
+ Vector3.Cross = (a, b) => {
183
+ const x = a.y * b.z - a.z * b.y;
184
+ const y = a.z * b.x - a.x * b.z;
185
+ const z = a.x * b.y - a.y * b.x;
186
+ return new Vector3(x, y, z);
187
+ };
188
+ /**
189
+ * Calculates the Dot Product between two vectors
190
+ * @param a Vector A
191
+ * @param b Vector B
192
+ * @return the dot product between the two vectors
193
+ */
194
+ Vector3.Dot = (a, b) => {
195
+ return a.x * b.x + a.y * b.y + a.z * b.z;
196
+ };
197
+ /**
198
+ * Create a new vector that will have the same unit as the original vector but set to the desired length
199
+ * @param vec The original vector
200
+ * @param length Desired length of the final vector
201
+ * @return The resulting vector
202
+ */
203
+ Vector3.NewVectorOfLength = (vec, length) => {
204
+ const unit = vec.unit;
205
+ return new Vector3(length * unit.x, length * unit.y, length * unit.z);
206
+ };
207
+ Vector3.Transform = (vector, matrix) => {
208
+ const m = matrix.m;
209
+ const rx = vector.x * m[0] + vector.y * m[4] + vector.z * m[8] + m[12];
210
+ const ry = vector.x * m[1] + vector.y * m[5] + vector.z * m[9] + m[13];
211
+ const rz = vector.x * m[2] + vector.y * m[6] + vector.z * m[10] + m[14];
212
+ const rw = 1 / (vector.x * m[3] + vector.y * m[7] + vector.z * m[11] + m[15]);
213
+ const x = rx * rw;
214
+ const y = ry * rw;
215
+ const z = rz * rw;
216
+ return new Vector3(x, y, z);
217
+ };
218
+ /**
219
+ * Linearly interpolates between two vectors
220
+ * @param initial The starting point
221
+ * @param final The end point
222
+ * @param percent Percent of the lerp. 0 will return initial and 1 will return final
223
+ * @return the LERP result Vector3
224
+ */
225
+ Vector3.Lerp = (initial, final, percent) => {
226
+ const x = Vector3.interpolateNumber(initial.x, final.x, percent);
227
+ const y = Vector3.interpolateNumber(initial.y, final.y, percent);
228
+ const z = Vector3.interpolateNumber(initial.z, final.z, percent);
229
+ return new Vector3(x, y, z);
230
+ };
231
+ //# sourceMappingURL=Vector3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Vector3.js","sourceRoot":"","sources":["../../../src/ValueObjects/Vector3.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"./Matrix\";\r\n\r\nexport interface Vector3DTO {\r\n x: number;\r\n y: number;\r\n z: number;\r\n}\r\n\r\nexport class Vector3 {\r\n /**\r\n * Creates a zero vector\r\n * @returns Vector [0,0,0]\r\n */\r\n public static Zero() {\r\n return new Vector3(0, 0, 0);\r\n }\r\n\r\n /**\r\n * Creates a vector of ones\r\n * @returns Vector [1,1,1]\r\n */\r\n public static One() {\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n /**\r\n * Creates a Right vector (positive X)\r\n * @param length optional length of the right unit. Default is 1\r\n * @returns Vector [length, 0,0]\r\n */\r\n public static Right(length = 1) {\r\n return new Vector3(length, 0, 0);\r\n }\r\n\r\n /**\r\n * Creates a Left vector (negative X)\r\n * @param length optional length of the left unit. Default is 1\r\n * @returns Vector [-length, 0, 0]\r\n */\r\n public static Left(length = 1) {\r\n return new Vector3(-length, 0, 0);\r\n }\r\n\r\n /**\r\n * Creates an Up vector (positive Y)\r\n * @param length optional length of the vector. Default is 1\r\n * @returns Vector [0, length, 0]\r\n */\r\n public static Up(length = 1) {\r\n return new Vector3(0, length, 0);\r\n }\r\n\r\n /**\r\n * Creates a Down vector (negative Y)\r\n * @param length optional length of the vector. Default is 1\r\n * @returns Vector [0, -length, 0]\r\n */\r\n public static Down(length = 1) {\r\n return new Vector3(0, -length, 0);\r\n }\r\n\r\n /**\r\n * Creates a Forward vector (positive Z)\r\n * @param length optional length of the vector. Default is 1\r\n * @returns Vector [0, 0, length]\r\n */\r\n public static Forward(length = 1) {\r\n return new Vector3(0, 0, length);\r\n }\r\n\r\n /**\r\n * Creates a Backward vector (negative Z)\r\n * @param length optional length of the vector. Default is 1\r\n * @returns Vector [0, 0, -length]\r\n */\r\n public static Backward(length = 1) {\r\n return new Vector3(0, 0, -length);\r\n }\r\n\r\n /**\r\n * Creates a Vector from an array of components\r\n * @param values The x, y, z components as an array\r\n * @returns The Vector\r\n */\r\n public static FromArray(values: [number, number, number]): Vector3 {\r\n return new Vector3(values[0], values[1], values[2]);\r\n }\r\n\r\n /**\r\n * Creates a Vector from a Data Transfer Object\r\n * @param dto The Data Transfer Object\r\n * @returns The Vector\r\n */\r\n public static FromDTO(dto: Vector3DTO): Vector3 {\r\n return new Vector3(dto.x, dto.y, dto.z);\r\n }\r\n\r\n /**\r\n * Adds Vector B to Vector A\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @return Result of A + B\r\n */\r\n static Add = (a: Vector3, b: Vector3): Vector3 => {\r\n return new Vector3(a.x + b.x, a.y + b.y, a.z + b.z);\r\n };\r\n\r\n /**\r\n * Subtracts Vector B from Vector A\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @return Result of A - B\r\n */\r\n static Subtract = (a: Vector3, b: Vector3): Vector3 => {\r\n return new Vector3(a.x - b.x, a.y - b.y, a.z - b.z);\r\n };\r\n\r\n /**\r\n * Checks to see if the two vectors are equal\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @return True if the two vectors are equal, otherwise false\r\n */\r\n static Equal = (a: Vector3, b: Vector3): boolean => {\r\n if (a.x === b.x && a.y === b.y && a.z === b.z) return true;\r\n else return false;\r\n };\r\n\r\n /**\r\n * Checks to see if the two vectors are close\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @param tolerance Tolerance for checking. Defaulted to 0.01\r\n * @return True if the distance between the two vectors is less than the tolerance, otherwise false\r\n */\r\n static Close = (a: Vector3, b: Vector3, tolerance = 0.01): boolean => {\r\n const diff = Vector3.Subtract(a, b);\r\n const diffMag = diff.magnitude;\r\n\r\n if (diffMag < tolerance) return true;\r\n else return false;\r\n };\r\n\r\n /**\r\n * Calculates the Cross Product between two vectors\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @return the cross product between the two vectors\r\n */\r\n static Cross = (a: Vector3, b: Vector3): Vector3 => {\r\n const x = a.y * b.z - a.z * b.y;\r\n const y = a.z * b.x - a.x * b.z;\r\n const z = a.x * b.y - a.y * b.x;\r\n return new Vector3(x, y, z);\r\n };\r\n\r\n /**\r\n * Calculates the Dot Product between two vectors\r\n * @param a Vector A\r\n * @param b Vector B\r\n * @return the dot product between the two vectors\r\n */\r\n static Dot = (a: Vector3, b: Vector3): number => {\r\n return a.x * b.x + a.y * b.y + a.z * b.z;\r\n };\r\n\r\n /**\r\n * Create a new vector that will have the same unit as the original vector but set to the desired length\r\n * @param vec The original vector\r\n * @param length Desired length of the final vector\r\n * @return The resulting vector\r\n */\r\n static NewVectorOfLength = (vec: Vector3, length: number): Vector3 => {\r\n const unit = vec.unit;\r\n return new Vector3(length * unit.x, length * unit.y, length * unit.z);\r\n };\r\n\r\n static Transform = (vector: Vector3, matrix: Matrix): Vector3 => {\r\n const m = matrix.m;\r\n const rx = vector.x * m[0] + vector.y * m[4] + vector.z * m[8] + m[12];\r\n const ry = vector.x * m[1] + vector.y * m[5] + vector.z * m[9] + m[13];\r\n const rz = vector.x * m[2] + vector.y * m[6] + vector.z * m[10] + m[14];\r\n const rw =\r\n 1 / (vector.x * m[3] + vector.y * m[7] + vector.z * m[11] + m[15]);\r\n\r\n const x = rx * rw;\r\n const y = ry * rw;\r\n const z = rz * rw;\r\n\r\n return new Vector3(x, y, z);\r\n };\r\n\r\n /**\r\n * Linearly interpolates between two vectors\r\n * @param initial The starting point\r\n * @param final The end point\r\n * @param percent Percent of the lerp. 0 will return initial and 1 will return final\r\n * @return the LERP result Vector3\r\n */\r\n static Lerp = (\r\n initial: Vector3,\r\n final: Vector3,\r\n percent: number\r\n ): Vector3 => {\r\n const x = Vector3.interpolateNumber(initial.x, final.x, percent);\r\n const y = Vector3.interpolateNumber(initial.y, final.y, percent);\r\n const z = Vector3.interpolateNumber(initial.z, final.z, percent);\r\n\r\n return new Vector3(x, y, z);\r\n };\r\n\r\n private static interpolateNumber(a: number, b: number, percent: number) {\r\n return a + (b - a) * percent;\r\n }\r\n\r\n readonly x: number;\r\n readonly y: number;\r\n readonly z: number;\r\n\r\n /**\r\n * Gets the magnitude of the Vector3\r\n * @returns the magnitude of the Vector3\r\n */\r\n get magnitude(): number {\r\n const xSqr = this.x * this.x;\r\n const ySqr = this.y * this.y;\r\n const zSqr = this.z * this.z;\r\n\r\n const magnitude = Math.sqrt(xSqr + ySqr + zSqr);\r\n return magnitude;\r\n }\r\n\r\n /**\r\n * Gets the unit vector for this Vector3\r\n * @returns the unit vector\r\n */\r\n get unit(): Vector3 {\r\n const mag = this.magnitude;\r\n if (mag === 0) {\r\n return Vector3.Zero();\r\n }\r\n\r\n const unitX = this.x / mag;\r\n const unitY = this.y / mag;\r\n const unitZ = this.z / mag;\r\n return new Vector3(unitX, unitY, unitZ);\r\n }\r\n\r\n /**\r\n * Gets the vector as an array\r\n * @returns an array representing the vector\r\n */\r\n get array(): [number, number, number] {\r\n return [this.x, this.y, this.z];\r\n }\r\n\r\n /**\r\n * Get the vector as a Data Transfer Object\r\n */\r\n get dto(): Vector3DTO {\r\n return { x: this.x, y: this.y, z: this.z };\r\n }\r\n\r\n constructor(x: number, y: number, z: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Version = exports.VersionStage = void 0;
4
+ var VersionStage;
5
+ (function (VersionStage) {
6
+ VersionStage["RELEASED"] = "released";
7
+ VersionStage["BETA"] = "beta";
8
+ VersionStage["ALPHA"] = "alpha";
9
+ })(VersionStage || (exports.VersionStage = VersionStage = {}));
10
+ class Version {
11
+ static GetLatest(versions) {
12
+ let latest;
13
+ for (const v of versions) {
14
+ if (latest === undefined) {
15
+ latest = v;
16
+ continue;
17
+ }
18
+ if (v.major > latest.major) {
19
+ latest = v;
20
+ }
21
+ else if (v.major === latest.major) {
22
+ if (v.minor > latest.minor) {
23
+ latest = v;
24
+ }
25
+ else if (v.minor === latest.minor) {
26
+ if (v.patch > latest.patch) {
27
+ latest = v;
28
+ }
29
+ }
30
+ }
31
+ }
32
+ return latest;
33
+ }
34
+ static GetLatestWithMajor(versions, major) {
35
+ let latest;
36
+ for (const v of versions) {
37
+ if (v.major !== major)
38
+ continue;
39
+ if (latest === undefined) {
40
+ latest = v;
41
+ continue;
42
+ }
43
+ if (v.minor > latest.minor) {
44
+ latest = v;
45
+ }
46
+ else if (v.minor === latest.minor) {
47
+ if (v.patch > latest.patch) {
48
+ latest = v;
49
+ }
50
+ }
51
+ }
52
+ return latest;
53
+ }
54
+ static GetLatestWithMajorMinor(versions, major, minor) {
55
+ let latest;
56
+ for (const v of versions) {
57
+ if (v.major !== major)
58
+ continue;
59
+ if (v.minor !== minor)
60
+ continue;
61
+ if (latest === undefined) {
62
+ latest = v;
63
+ continue;
64
+ }
65
+ if (v.patch > latest.patch) {
66
+ latest = v;
67
+ }
68
+ }
69
+ return latest;
70
+ }
71
+ static FromString(versionString) {
72
+ const stringSplit = versionString.split('.');
73
+ if (stringSplit.length !== 3) {
74
+ throw new Error(`Unable to parse version string: ${versionString} because it could not be split into 3 parts`);
75
+ }
76
+ const major = parseInt(stringSplit[0], 10);
77
+ const minor = parseInt(stringSplit[1], 10);
78
+ const patchStageLabel = stringSplit[2];
79
+ let patch = NaN;
80
+ let stageLabel;
81
+ const indexOfDash = patchStageLabel.indexOf('-');
82
+ if (indexOfDash > 0) {
83
+ const patchStr = patchStageLabel.substring(0, indexOfDash);
84
+ patch = parseInt(patchStr, 10);
85
+ stageLabel = patchStageLabel.substring(indexOfDash + 1);
86
+ }
87
+ else {
88
+ patch = parseInt(patchStageLabel, 10);
89
+ }
90
+ if (isNaN(major)) {
91
+ throw new Error(`Unable to parse version string: ${versionString} because Major is not a number`);
92
+ }
93
+ if (isNaN(minor)) {
94
+ throw new Error(`Unable to parse version string: ${versionString} because Minor is not a number`);
95
+ }
96
+ if (isNaN(patch)) {
97
+ throw new Error(`Unable to parse version string: ${versionString} because Patch is not a number`);
98
+ }
99
+ let stage = VersionStage.RELEASED;
100
+ let label;
101
+ if (stageLabel) {
102
+ const stageLabelSplit = stageLabel.split('-');
103
+ if (stageLabelSplit.length > 0) {
104
+ const stringAsStage = this.stringToStage(stageLabelSplit[0]);
105
+ if (stringAsStage === undefined) {
106
+ label = stageLabel;
107
+ }
108
+ else {
109
+ stage = stringAsStage;
110
+ if (stageLabelSplit.length > 1) {
111
+ label = stageLabel.replace(`${stageLabelSplit[0]}-`, '');
112
+ }
113
+ }
114
+ }
115
+ }
116
+ const version = new Version(major, minor, patch, stage, label);
117
+ return version;
118
+ }
119
+ static stringToStage(str) {
120
+ if (str === VersionStage.ALPHA) {
121
+ return VersionStage.ALPHA;
122
+ }
123
+ else if (str === VersionStage.BETA) {
124
+ return VersionStage.BETA;
125
+ }
126
+ return undefined;
127
+ }
128
+ static AreEqual(v1, v2) {
129
+ if (v1.major !== v2.major)
130
+ return false;
131
+ if (v1.minor !== v2.minor)
132
+ return false;
133
+ if (v1.patch !== v2.patch)
134
+ return false;
135
+ if (v1.stage !== v2.stage)
136
+ return false;
137
+ if (v1.label !== v2.label)
138
+ return false;
139
+ return true;
140
+ }
141
+ static IsNewerVersion(a, b) {
142
+ if (a.major < b.major)
143
+ return true;
144
+ if (a.minor < b.minor)
145
+ return true;
146
+ if (a.patch < b.patch)
147
+ return true;
148
+ return false;
149
+ }
150
+ constructor(major, minor, patch, stage, label) {
151
+ this.major = major;
152
+ this.minor = minor;
153
+ this.patch = patch;
154
+ this.stage = stage;
155
+ this.label = label;
156
+ this.baseVersionString = `${major}.${minor}.${patch}`;
157
+ let displayString = this.baseVersionString;
158
+ if (stage === VersionStage.ALPHA) {
159
+ displayString = displayString + '-alpha';
160
+ }
161
+ else if (this.stage === VersionStage.BETA) {
162
+ displayString = displayString + '-beta';
163
+ }
164
+ if (this.label) {
165
+ displayString = displayString + `-${label}`;
166
+ }
167
+ this.displayString = displayString;
168
+ }
169
+ }
170
+ exports.Version = Version;
171
+ //# sourceMappingURL=Version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Version.js","sourceRoot":"","sources":["../../../src/ValueObjects/Version.ts"],"names":[],"mappings":";;;AAAA,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,qCAAqB,CAAA;IACrB,6BAAa,CAAA;IACb,+BAAe,CAAA;AACjB,CAAC,EAJW,YAAY,4BAAZ,YAAY,QAIvB;AAED,MAAa,OAAO;IAClB,MAAM,CAAC,SAAS,CACd,QAAmB;QAEnB,IAAI,MAA2B,CAAC;QAEhC,KAAI,MAAM,CAAC,IAAI,QAAQ,EAAC,CAAC;YACvB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,CAAC,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC3B,MAAM,GAAG,CAAC,CAAC;YACb,CAAC;iBAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC3B,MAAM,GAAG,CAAC,CAAC;gBACb,CAAC;qBAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;oBACpC,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC3B,MAAM,GAAG,CAAC,CAAC;oBACb,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,kBAAkB,CACvB,QAAmB,EACnB,KAAa;QAEb,IAAI,MAA2B,CAAC;QAEhC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK;gBAAE,SAAS;YAEhC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,CAAC,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC3B,MAAM,GAAG,CAAC,CAAC;YACb,CAAC;iBAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC3B,MAAM,GAAG,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,uBAAuB,CAC5B,QAAmB,EACnB,KAAa,EACb,KAAa;QAEb,IAAI,MAA2B,CAAC;QAEhC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK;gBAAE,SAAS;YAChC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK;gBAAE,SAAS;YAEhC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,CAAC,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC3B,MAAM,GAAG,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,aAAqB;QACrC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,aAAa,6CAA6C,CAAC,CAAC;QACjH,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,IAAI,UAA8B,CAAC;QAEnC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEjD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC3D,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC/B,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,aAAa,gCAAgC,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,aAAa,gCAAgC,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,aAAa,gCAAgC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC;QAClC,IAAI,KAAyB,CAAC;QAE9B,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE9C,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE7D,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;oBAChC,KAAK,GAAG,UAAU,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,KAAK,GAAG,aAAa,CAAC;oBACtB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC/B,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,GAAW;QACtC,IAAI,GAAG,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAC,KAAK,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,YAAY,CAAC,IAAI,CAAC;QAC3B,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,EAAW,EAAE,EAAW;QACtC,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,CAAU,EAAE,CAAU;QAC1C,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAEnC,OAAO,KAAK,CAAC;IACf,CAAC;IAUD,YAAY,KAAa,EAAE,KAAa,EAAE,KAAa,EAAE,KAAmB,EAAE,KAAc;QAC1F,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,iBAAiB,GAAE,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QAErD,IAAI,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC3C,IAAI,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;YACjC,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;QAC3C,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;YAC5C,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;QAC1C,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,GAAG,aAAa,GAAG,IAAI,KAAK,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAhMD,0BAgMC","sourcesContent":["export enum VersionStage {\r\n RELEASED = 'released',\r\n BETA = 'beta',\r\n ALPHA = 'alpha',\r\n}\r\n\r\nexport class Version {\r\n static GetLatest(\r\n versions: Version[],\r\n ): Version | undefined {\r\n let latest: Version | undefined;\r\n\r\n for(const v of versions){\r\n if (latest === undefined) {\r\n latest = v;\r\n continue;\r\n }\r\n\r\n if (v.major > latest.major) {\r\n latest = v;\r\n } else if (v.major === latest.major) {\r\n if (v.minor > latest.minor) {\r\n latest = v;\r\n } else if (v.minor === latest.minor) {\r\n if (v.patch > latest.patch) {\r\n latest = v;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return latest;\r\n }\r\n\r\n static GetLatestWithMajor(\r\n versions: Version[],\r\n major: number,\r\n ): Version | undefined {\r\n let latest: Version | undefined;\r\n\r\n for (const v of versions) {\r\n if (v.major !== major) continue;\r\n\r\n if (latest === undefined) {\r\n latest = v;\r\n continue;\r\n }\r\n\r\n if (v.minor > latest.minor) {\r\n latest = v;\r\n } else if (v.minor === latest.minor) {\r\n if (v.patch > latest.patch) {\r\n latest = v;\r\n }\r\n }\r\n }\r\n\r\n return latest;\r\n }\r\n\r\n static GetLatestWithMajorMinor(\r\n versions: Version[],\r\n major: number,\r\n minor: number,\r\n ): Version | undefined {\r\n let latest: Version | undefined;\r\n\r\n for (const v of versions) {\r\n if (v.major !== major) continue;\r\n if (v.minor !== minor) continue;\r\n\r\n if (latest === undefined) {\r\n latest = v;\r\n continue;\r\n }\r\n\r\n if (v.patch > latest.patch) {\r\n latest = v;\r\n }\r\n }\r\n\r\n return latest;\r\n }\r\n\r\n static FromString(versionString: string): Version {\r\n const stringSplit = versionString.split('.');\r\n\r\n if (stringSplit.length !== 3) {\r\n throw new Error(`Unable to parse version string: ${versionString} because it could not be split into 3 parts`);\r\n }\r\n\r\n const major = parseInt(stringSplit[0], 10);\r\n const minor = parseInt(stringSplit[1], 10);\r\n const patchStageLabel = stringSplit[2];\r\n let patch = NaN;\r\n let stageLabel: string | undefined;\r\n\r\n const indexOfDash = patchStageLabel.indexOf('-');\r\n\r\n if (indexOfDash > 0) {\r\n const patchStr = patchStageLabel.substring(0, indexOfDash);\r\n patch = parseInt(patchStr, 10);\r\n stageLabel = patchStageLabel.substring(indexOfDash + 1);\r\n } else {\r\n patch = parseInt(patchStageLabel, 10);\r\n }\r\n\r\n if (isNaN(major)) {\r\n throw new Error(`Unable to parse version string: ${versionString} because Major is not a number`);\r\n }\r\n if (isNaN(minor)) {\r\n throw new Error(`Unable to parse version string: ${versionString} because Minor is not a number`);\r\n }\r\n if (isNaN(patch)) {\r\n throw new Error(`Unable to parse version string: ${versionString} because Patch is not a number`);\r\n }\r\n\r\n let stage = VersionStage.RELEASED;\r\n let label: string | undefined;\r\n\r\n if (stageLabel) {\r\n const stageLabelSplit = stageLabel.split('-');\r\n\r\n if (stageLabelSplit.length > 0) {\r\n const stringAsStage = this.stringToStage(stageLabelSplit[0]);\r\n\r\n if (stringAsStage === undefined) {\r\n label = stageLabel;\r\n } else {\r\n stage = stringAsStage;\r\n if (stageLabelSplit.length > 1) {\r\n label = stageLabel.replace(`${stageLabelSplit[0]}-`, '');\r\n }\r\n }\r\n }\r\n }\r\n\r\n const version = new Version(major, minor, patch, stage, label);\r\n return version;\r\n }\r\n\r\n private static stringToStage(str: string): VersionStage | undefined {\r\n if (str === VersionStage.ALPHA) {\r\n return VersionStage.ALPHA;\r\n } else if (str === VersionStage.BETA) {\r\n return VersionStage.BETA;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n static AreEqual(v1: Version, v2: Version): boolean {\r\n if (v1.major !== v2.major) return false;\r\n if (v1.minor !== v2.minor) return false;\r\n if (v1.patch !== v2.patch) return false;\r\n if (v1.stage !== v2.stage) return false;\r\n if (v1.label !== v2.label) return false;\r\n return true;\r\n }\r\n\r\n static IsNewerVersion(a: Version, b: Version): boolean {\r\n if (a.major < b.major) return true;\r\n if (a.minor < b.minor) return true;\r\n if (a.patch < b.patch) return true;\r\n\r\n return false;\r\n }\r\n\r\n readonly major: number;\r\n readonly minor: number;\r\n readonly patch: number;\r\n readonly stage: VersionStage;\r\n readonly label?: string;\r\n readonly displayString: string;\r\n readonly baseVersionString: string;\r\n\r\n constructor(major: number, minor: number, patch: number, stage: VersionStage, label?: string) {\r\n this.major = major;\r\n this.minor = minor;\r\n this.patch = patch;\r\n this.stage = stage;\r\n this.label = label;\r\n\r\n this.baseVersionString= `${major}.${minor}.${patch}`;\r\n\r\n let displayString = this.baseVersionString;\r\n if (stage === VersionStage.ALPHA) {\r\n displayString = displayString + '-alpha';\r\n } else if (this.stage === VersionStage.BETA) {\r\n displayString = displayString + '-beta';\r\n }\r\n\r\n if (this.label) {\r\n displayString = displayString + `-${label}`;\r\n }\r\n\r\n this.displayString = displayString;\r\n }\r\n}\r\n"]}