volleyballsimtypes 0.0.1

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 (528) hide show
  1. package/dist/data/formula/event.formula.json +124 -0
  2. package/dist/data/formula/role.formula.json +98 -0
  3. package/dist/data/formula/stat.formula.json +66 -0
  4. package/dist/src/data/index.d.ts +2 -0
  5. package/dist/src/data/index.js +19 -0
  6. package/dist/src/data/index.js.map +1 -0
  7. package/dist/src/data/models/block.d.ts +59 -0
  8. package/dist/src/data/models/block.js +99 -0
  9. package/dist/src/data/models/block.js.map +1 -0
  10. package/dist/src/data/models/coach.d.ts +40 -0
  11. package/dist/src/data/models/coach.js +56 -0
  12. package/dist/src/data/models/coach.js.map +1 -0
  13. package/dist/src/data/models/country.d.ts +64 -0
  14. package/dist/src/data/models/country.js +41 -0
  15. package/dist/src/data/models/country.js.map +1 -0
  16. package/dist/src/data/models/event.d.ts +30 -0
  17. package/dist/src/data/models/event.js +55 -0
  18. package/dist/src/data/models/event.js.map +1 -0
  19. package/dist/src/data/models/index.d.ts +22 -0
  20. package/dist/src/data/models/index.js +39 -0
  21. package/dist/src/data/models/index.js.map +1 -0
  22. package/dist/src/data/models/league.d.ts +48 -0
  23. package/dist/src/data/models/league.js +43 -0
  24. package/dist/src/data/models/league.js.map +1 -0
  25. package/dist/src/data/models/libero-replacement.d.ts +38 -0
  26. package/dist/src/data/models/libero-replacement.js +67 -0
  27. package/dist/src/data/models/libero-replacement.js.map +1 -0
  28. package/dist/src/data/models/match-set-stats.d.ts +59 -0
  29. package/dist/src/data/models/match-set-stats.js +130 -0
  30. package/dist/src/data/models/match-set-stats.js.map +1 -0
  31. package/dist/src/data/models/match-set.d.ts +78 -0
  32. package/dist/src/data/models/match-set.js +72 -0
  33. package/dist/src/data/models/match-set.js.map +1 -0
  34. package/dist/src/data/models/match.d.ts +47 -0
  35. package/dist/src/data/models/match.js +59 -0
  36. package/dist/src/data/models/match.js.map +1 -0
  37. package/dist/src/data/models/performance-stats.d.ts +40 -0
  38. package/dist/src/data/models/performance-stats.js +89 -0
  39. package/dist/src/data/models/performance-stats.js.map +1 -0
  40. package/dist/src/data/models/player.d.ts +278 -0
  41. package/dist/src/data/models/player.js +67 -0
  42. package/dist/src/data/models/player.js.map +1 -0
  43. package/dist/src/data/models/rally-position.d.ts +28 -0
  44. package/dist/src/data/models/rally-position.js +53 -0
  45. package/dist/src/data/models/rally-position.js.map +1 -0
  46. package/dist/src/data/models/rally.d.ts +169 -0
  47. package/dist/src/data/models/rally.js +51 -0
  48. package/dist/src/data/models/rally.js.map +1 -0
  49. package/dist/src/data/models/reception.d.ts +40 -0
  50. package/dist/src/data/models/reception.js +75 -0
  51. package/dist/src/data/models/reception.js.map +1 -0
  52. package/dist/src/data/models/score.d.ts +37 -0
  53. package/dist/src/data/models/score.js +63 -0
  54. package/dist/src/data/models/score.js.map +1 -0
  55. package/dist/src/data/models/season-teams.d.ts +24 -0
  56. package/dist/src/data/models/season-teams.js +45 -0
  57. package/dist/src/data/models/season-teams.js.map +1 -0
  58. package/dist/src/data/models/season.d.ts +60 -0
  59. package/dist/src/data/models/season.js +43 -0
  60. package/dist/src/data/models/season.js.map +1 -0
  61. package/dist/src/data/models/serve.d.ts +40 -0
  62. package/dist/src/data/models/serve.js +75 -0
  63. package/dist/src/data/models/serve.js.map +1 -0
  64. package/dist/src/data/models/set.d.ts +40 -0
  65. package/dist/src/data/models/set.js +75 -0
  66. package/dist/src/data/models/set.js.map +1 -0
  67. package/dist/src/data/models/spike.d.ts +40 -0
  68. package/dist/src/data/models/spike.js +75 -0
  69. package/dist/src/data/models/spike.js.map +1 -0
  70. package/dist/src/data/models/substitution.d.ts +36 -0
  71. package/dist/src/data/models/substitution.js +63 -0
  72. package/dist/src/data/models/substitution.js.map +1 -0
  73. package/dist/src/data/models/team.d.ts +122 -0
  74. package/dist/src/data/models/team.js +65 -0
  75. package/dist/src/data/models/team.js.map +1 -0
  76. package/dist/src/data/transformers/block.d.ts +7 -0
  77. package/dist/src/data/transformers/block.js +109 -0
  78. package/dist/src/data/transformers/block.js.map +1 -0
  79. package/dist/src/data/transformers/coach.d.ts +5 -0
  80. package/dist/src/data/transformers/coach.js +31 -0
  81. package/dist/src/data/transformers/coach.js.map +1 -0
  82. package/dist/src/data/transformers/country.d.ts +5 -0
  83. package/dist/src/data/transformers/country.js +21 -0
  84. package/dist/src/data/transformers/country.js.map +1 -0
  85. package/dist/src/data/transformers/court-position.d.ts +5 -0
  86. package/dist/src/data/transformers/court-position.js +32 -0
  87. package/dist/src/data/transformers/court-position.js.map +1 -0
  88. package/dist/src/data/transformers/court-target.d.ts +5 -0
  89. package/dist/src/data/transformers/court-target.js +42 -0
  90. package/dist/src/data/transformers/court-target.js.map +1 -0
  91. package/dist/src/data/transformers/event-type.d.ts +5 -0
  92. package/dist/src/data/transformers/event-type.js +32 -0
  93. package/dist/src/data/transformers/event-type.js.map +1 -0
  94. package/dist/src/data/transformers/formation.d.ts +5 -0
  95. package/dist/src/data/transformers/formation.js +13 -0
  96. package/dist/src/data/transformers/formation.js.map +1 -0
  97. package/dist/src/data/transformers/index.d.ts +26 -0
  98. package/dist/src/data/transformers/index.js +43 -0
  99. package/dist/src/data/transformers/index.js.map +1 -0
  100. package/dist/src/data/transformers/league.d.ts +5 -0
  101. package/dist/src/data/transformers/league.js +24 -0
  102. package/dist/src/data/transformers/league.js.map +1 -0
  103. package/dist/src/data/transformers/libero-replacement.d.ts +7 -0
  104. package/dist/src/data/transformers/libero-replacement.js +54 -0
  105. package/dist/src/data/transformers/libero-replacement.js.map +1 -0
  106. package/dist/src/data/transformers/match-set-stats.d.ts +7 -0
  107. package/dist/src/data/transformers/match-set-stats.js +96 -0
  108. package/dist/src/data/transformers/match-set-stats.js.map +1 -0
  109. package/dist/src/data/transformers/match-set.d.ts +7 -0
  110. package/dist/src/data/transformers/match-set.js +54 -0
  111. package/dist/src/data/transformers/match-set.js.map +1 -0
  112. package/dist/src/data/transformers/match.d.ts +8 -0
  113. package/dist/src/data/transformers/match.js +41 -0
  114. package/dist/src/data/transformers/match.js.map +1 -0
  115. package/dist/src/data/transformers/performance-stats.d.ts +5 -0
  116. package/dist/src/data/transformers/performance-stats.js +38 -0
  117. package/dist/src/data/transformers/performance-stats.js.map +1 -0
  118. package/dist/src/data/transformers/player.d.ts +7 -0
  119. package/dist/src/data/transformers/player.js +101 -0
  120. package/dist/src/data/transformers/player.js.map +1 -0
  121. package/dist/src/data/transformers/rally-position.d.ts +5 -0
  122. package/dist/src/data/transformers/rally-position.js +21 -0
  123. package/dist/src/data/transformers/rally-position.js.map +1 -0
  124. package/dist/src/data/transformers/rally.d.ts +7 -0
  125. package/dist/src/data/transformers/rally.js +102 -0
  126. package/dist/src/data/transformers/rally.js.map +1 -0
  127. package/dist/src/data/transformers/reception.d.ts +7 -0
  128. package/dist/src/data/transformers/reception.js +87 -0
  129. package/dist/src/data/transformers/reception.js.map +1 -0
  130. package/dist/src/data/transformers/role.d.ts +5 -0
  131. package/dist/src/data/transformers/role.js +28 -0
  132. package/dist/src/data/transformers/role.js.map +1 -0
  133. package/dist/src/data/transformers/score.d.ts +7 -0
  134. package/dist/src/data/transformers/score.js +39 -0
  135. package/dist/src/data/transformers/score.js.map +1 -0
  136. package/dist/src/data/transformers/season.d.ts +7 -0
  137. package/dist/src/data/transformers/season.js +37 -0
  138. package/dist/src/data/transformers/season.js.map +1 -0
  139. package/dist/src/data/transformers/serve.d.ts +7 -0
  140. package/dist/src/data/transformers/serve.js +89 -0
  141. package/dist/src/data/transformers/serve.js.map +1 -0
  142. package/dist/src/data/transformers/set.d.ts +7 -0
  143. package/dist/src/data/transformers/set.js +87 -0
  144. package/dist/src/data/transformers/set.js.map +1 -0
  145. package/dist/src/data/transformers/spike.d.ts +7 -0
  146. package/dist/src/data/transformers/spike.js +91 -0
  147. package/dist/src/data/transformers/spike.js.map +1 -0
  148. package/dist/src/data/transformers/substitution.d.ts +7 -0
  149. package/dist/src/data/transformers/substitution.js +38 -0
  150. package/dist/src/data/transformers/substitution.js.map +1 -0
  151. package/dist/src/data/transformers/team.d.ts +7 -0
  152. package/dist/src/data/transformers/team.js +41 -0
  153. package/dist/src/data/transformers/team.js.map +1 -0
  154. package/dist/src/data/transformers/trait.d.ts +7 -0
  155. package/dist/src/data/transformers/trait.js +33 -0
  156. package/dist/src/data/transformers/trait.js.map +1 -0
  157. package/dist/src/index.d.ts +3 -0
  158. package/dist/src/index.js +22 -0
  159. package/dist/src/index.js.map +1 -0
  160. package/dist/src/routing/events.d.ts +50 -0
  161. package/dist/src/routing/events.js +3 -0
  162. package/dist/src/routing/events.js.map +1 -0
  163. package/dist/src/routing/index.d.ts +5 -0
  164. package/dist/src/routing/index.js +22 -0
  165. package/dist/src/routing/index.js.map +1 -0
  166. package/dist/src/routing/league.d.ts +13 -0
  167. package/dist/src/routing/league.js +3 -0
  168. package/dist/src/routing/league.js.map +1 -0
  169. package/dist/src/routing/match.d.ts +46 -0
  170. package/dist/src/routing/match.js +3 -0
  171. package/dist/src/routing/match.js.map +1 -0
  172. package/dist/src/routing/player.d.ts +22 -0
  173. package/dist/src/routing/player.js +13 -0
  174. package/dist/src/routing/player.js.map +1 -0
  175. package/dist/src/routing/team.d.ts +12 -0
  176. package/dist/src/routing/team.js +3 -0
  177. package/dist/src/routing/team.js.map +1 -0
  178. package/dist/src/service/coach/__stubs__/index.d.ts +3 -0
  179. package/dist/src/service/coach/__stubs__/index.js +47 -0
  180. package/dist/src/service/coach/__stubs__/index.js.map +1 -0
  181. package/dist/src/service/coach/coach.d.ts +18 -0
  182. package/dist/src/service/coach/coach.js +16 -0
  183. package/dist/src/service/coach/coach.js.map +1 -0
  184. package/dist/src/service/coach/coach.test.d.ts +1 -0
  185. package/dist/src/service/coach/coach.test.js +12 -0
  186. package/dist/src/service/coach/coach.test.js.map +1 -0
  187. package/dist/src/service/coach/formation.d.ts +31 -0
  188. package/dist/src/service/coach/formation.js +127 -0
  189. package/dist/src/service/coach/formation.js.map +1 -0
  190. package/dist/src/service/coach/formation.test.d.ts +1 -0
  191. package/dist/src/service/coach/formation.test.js +11 -0
  192. package/dist/src/service/coach/formation.test.js.map +1 -0
  193. package/dist/src/service/coach/index.d.ts +2 -0
  194. package/dist/src/service/coach/index.js +19 -0
  195. package/dist/src/service/coach/index.js.map +1 -0
  196. package/dist/src/service/country/__stubs__/index.d.ts +3 -0
  197. package/dist/src/service/country/__stubs__/index.js +16 -0
  198. package/dist/src/service/country/__stubs__/index.js.map +1 -0
  199. package/dist/src/service/country/country.d.ts +15 -0
  200. package/dist/src/service/country/country.js +14 -0
  201. package/dist/src/service/country/country.js.map +1 -0
  202. package/dist/src/service/country/country.test.d.ts +1 -0
  203. package/dist/src/service/country/country.test.js +12 -0
  204. package/dist/src/service/country/country.test.js.map +1 -0
  205. package/dist/src/service/country/index.d.ts +1 -0
  206. package/dist/src/service/country/index.js +18 -0
  207. package/dist/src/service/country/index.js.map +1 -0
  208. package/dist/src/service/event/__stubs__/index.d.ts +4 -0
  209. package/dist/src/service/event/__stubs__/index.js +28 -0
  210. package/dist/src/service/event/__stubs__/index.js.map +1 -0
  211. package/dist/src/service/event/block.d.ts +29 -0
  212. package/dist/src/service/event/block.js +56 -0
  213. package/dist/src/service/event/block.js.map +1 -0
  214. package/dist/src/service/event/block.test.d.ts +1 -0
  215. package/dist/src/service/event/block.test.js +99 -0
  216. package/dist/src/service/event/block.test.js.map +1 -0
  217. package/dist/src/service/event/in-play-event.d.ts +17 -0
  218. package/dist/src/service/event/in-play-event.js +28 -0
  219. package/dist/src/service/event/in-play-event.js.map +1 -0
  220. package/dist/src/service/event/libero-replacement.d.ts +16 -0
  221. package/dist/src/service/event/libero-replacement.js +18 -0
  222. package/dist/src/service/event/libero-replacement.js.map +1 -0
  223. package/dist/src/service/event/libero-replacement.test.d.ts +1 -0
  224. package/dist/src/service/event/libero-replacement.test.js +37 -0
  225. package/dist/src/service/event/libero-replacement.test.js.map +1 -0
  226. package/dist/src/service/event/rally-event.d.ts +24 -0
  227. package/dist/src/service/event/rally-event.js +24 -0
  228. package/dist/src/service/event/rally-event.js.map +1 -0
  229. package/dist/src/service/event/reception.d.ts +26 -0
  230. package/dist/src/service/event/reception.js +31 -0
  231. package/dist/src/service/event/reception.js.map +1 -0
  232. package/dist/src/service/event/reception.test.d.ts +1 -0
  233. package/dist/src/service/event/reception.test.js +50 -0
  234. package/dist/src/service/event/reception.test.js.map +1 -0
  235. package/dist/src/service/event/score.d.ts +13 -0
  236. package/dist/src/service/event/score.js +15 -0
  237. package/dist/src/service/event/score.js.map +1 -0
  238. package/dist/src/service/event/score.test.d.ts +1 -0
  239. package/dist/src/service/event/score.test.js +29 -0
  240. package/dist/src/service/event/score.test.js.map +1 -0
  241. package/dist/src/service/event/serve.d.ts +27 -0
  242. package/dist/src/service/event/serve.js +32 -0
  243. package/dist/src/service/event/serve.js.map +1 -0
  244. package/dist/src/service/event/serve.test.d.ts +1 -0
  245. package/dist/src/service/event/serve.test.js +50 -0
  246. package/dist/src/service/event/serve.test.js.map +1 -0
  247. package/dist/src/service/event/set.d.ts +26 -0
  248. package/dist/src/service/event/set.js +31 -0
  249. package/dist/src/service/event/set.js.map +1 -0
  250. package/dist/src/service/event/set.test.d.ts +1 -0
  251. package/dist/src/service/event/set.test.js +50 -0
  252. package/dist/src/service/event/set.test.js.map +1 -0
  253. package/dist/src/service/event/spike.d.ts +28 -0
  254. package/dist/src/service/event/spike.js +37 -0
  255. package/dist/src/service/event/spike.js.map +1 -0
  256. package/dist/src/service/event/spike.test.d.ts +1 -0
  257. package/dist/src/service/event/spike.test.js +64 -0
  258. package/dist/src/service/event/spike.test.js.map +1 -0
  259. package/dist/src/service/event/substitution.d.ts +9 -0
  260. package/dist/src/service/event/substitution.js +12 -0
  261. package/dist/src/service/event/substitution.js.map +1 -0
  262. package/dist/src/service/index.d.ts +17 -0
  263. package/dist/src/service/index.js +34 -0
  264. package/dist/src/service/index.js.map +1 -0
  265. package/dist/src/service/league/index.d.ts +3 -0
  266. package/dist/src/service/league/index.js +20 -0
  267. package/dist/src/service/league/index.js.map +1 -0
  268. package/dist/src/service/league/league.d.ts +19 -0
  269. package/dist/src/service/league/league.js +88 -0
  270. package/dist/src/service/league/league.js.map +1 -0
  271. package/dist/src/service/league/season.d.ts +19 -0
  272. package/dist/src/service/league/season.js +27 -0
  273. package/dist/src/service/league/season.js.map +1 -0
  274. package/dist/src/service/league/standing.d.ts +26 -0
  275. package/dist/src/service/league/standing.js +81 -0
  276. package/dist/src/service/league/standing.js.map +1 -0
  277. package/dist/src/service/main.d.ts +1 -0
  278. package/dist/src/service/main.js +56 -0
  279. package/dist/src/service/main.js.map +1 -0
  280. package/dist/src/service/match/__stubs__/index.d.ts +11 -0
  281. package/dist/src/service/match/__stubs__/index.js +117 -0
  282. package/dist/src/service/match/__stubs__/index.js.map +1 -0
  283. package/dist/src/service/match/court-position.d.ts +21 -0
  284. package/dist/src/service/match/court-position.js +57 -0
  285. package/dist/src/service/match/court-position.js.map +1 -0
  286. package/dist/src/service/match/court-position.test.d.ts +1 -0
  287. package/dist/src/service/match/court-position.test.js +70 -0
  288. package/dist/src/service/match/court-position.test.js.map +1 -0
  289. package/dist/src/service/match/court-target.d.ts +21 -0
  290. package/dist/src/service/match/court-target.js +43 -0
  291. package/dist/src/service/match/court-target.js.map +1 -0
  292. package/dist/src/service/match/court-target.test.d.ts +1 -0
  293. package/dist/src/service/match/court-target.test.js +38 -0
  294. package/dist/src/service/match/court-target.test.js.map +1 -0
  295. package/dist/src/service/match/index.d.ts +6 -0
  296. package/dist/src/service/match/index.js +23 -0
  297. package/dist/src/service/match/index.js.map +1 -0
  298. package/dist/src/service/match/match-set.d.ts +71 -0
  299. package/dist/src/service/match/match-set.js +90 -0
  300. package/dist/src/service/match/match-set.js.map +1 -0
  301. package/dist/src/service/match/match-set.test.d.ts +1 -0
  302. package/dist/src/service/match/match-set.test.js +153 -0
  303. package/dist/src/service/match/match-set.test.js.map +1 -0
  304. package/dist/src/service/match/match-team.d.ts +7 -0
  305. package/dist/src/service/match/match-team.js +21 -0
  306. package/dist/src/service/match/match-team.js.map +1 -0
  307. package/dist/src/service/match/match-team.test.d.ts +1 -0
  308. package/dist/src/service/match/match-team.test.js +17 -0
  309. package/dist/src/service/match/match-team.test.js.map +1 -0
  310. package/dist/src/service/match/match.d.ts +24 -0
  311. package/dist/src/service/match/match.js +43 -0
  312. package/dist/src/service/match/match.js.map +1 -0
  313. package/dist/src/service/match/match.test.d.ts +1 -0
  314. package/dist/src/service/match/match.test.js +73 -0
  315. package/dist/src/service/match/match.test.js.map +1 -0
  316. package/dist/src/service/match/rally.d.ts +41 -0
  317. package/dist/src/service/match/rally.js +52 -0
  318. package/dist/src/service/match/rally.js.map +1 -0
  319. package/dist/src/service/match/rally.test.d.ts +1 -0
  320. package/dist/src/service/match/rally.test.js +91 -0
  321. package/dist/src/service/match/rally.test.js.map +1 -0
  322. package/dist/src/service/player/__stubs__/index.d.ts +28 -0
  323. package/dist/src/service/player/__stubs__/index.js +1426 -0
  324. package/dist/src/service/player/__stubs__/index.js.map +1 -0
  325. package/dist/src/service/player/index.d.ts +3 -0
  326. package/dist/src/service/player/index.js +20 -0
  327. package/dist/src/service/player/index.js.map +1 -0
  328. package/dist/src/service/player/performance-stats.d.ts +28 -0
  329. package/dist/src/service/player/performance-stats.js +24 -0
  330. package/dist/src/service/player/performance-stats.js.map +1 -0
  331. package/dist/src/service/player/performance-stats.test.d.ts +1 -0
  332. package/dist/src/service/player/performance-stats.test.js +24 -0
  333. package/dist/src/service/player/performance-stats.test.js.map +1 -0
  334. package/dist/src/service/player/player.d.ts +38 -0
  335. package/dist/src/service/player/player.js +62 -0
  336. package/dist/src/service/player/player.js.map +1 -0
  337. package/dist/src/service/player/player.test.d.ts +1 -0
  338. package/dist/src/service/player/player.test.js +50 -0
  339. package/dist/src/service/player/player.test.js.map +1 -0
  340. package/dist/src/service/player/role.d.ts +13 -0
  341. package/dist/src/service/player/role.js +35 -0
  342. package/dist/src/service/player/role.js.map +1 -0
  343. package/dist/src/service/player/role.test.d.ts +1 -0
  344. package/dist/src/service/player/role.test.js +31 -0
  345. package/dist/src/service/player/role.test.js.map +1 -0
  346. package/dist/src/service/player/stats.d.ts +11 -0
  347. package/dist/src/service/player/stats.js +32 -0
  348. package/dist/src/service/player/stats.js.map +1 -0
  349. package/dist/src/service/player/stats.test.d.ts +1 -0
  350. package/dist/src/service/player/stats.test.js +25 -0
  351. package/dist/src/service/player/stats.test.js.map +1 -0
  352. package/dist/src/service/player/trait.d.ts +21 -0
  353. package/dist/src/service/player/trait.js +98 -0
  354. package/dist/src/service/player/trait.js.map +1 -0
  355. package/dist/src/service/player/trait.test.d.ts +1 -0
  356. package/dist/src/service/player/trait.test.js +12 -0
  357. package/dist/src/service/player/trait.test.js.map +1 -0
  358. package/dist/src/service/team/__stubs__/index.d.ts +6 -0
  359. package/dist/src/service/team/__stubs__/index.js +290 -0
  360. package/dist/src/service/team/__stubs__/index.js.map +1 -0
  361. package/dist/src/service/team/index.d.ts +1 -0
  362. package/dist/src/service/team/index.js +18 -0
  363. package/dist/src/service/team/index.js.map +1 -0
  364. package/dist/src/service/team/team.d.ts +25 -0
  365. package/dist/src/service/team/team.js +25 -0
  366. package/dist/src/service/team/team.js.map +1 -0
  367. package/dist/src/service/team/team.test.d.ts +1 -0
  368. package/dist/src/service/team/team.test.js +29 -0
  369. package/dist/src/service/team/team.test.js.map +1 -0
  370. package/dist/src/service/utils/enum-utils.d.ts +1 -0
  371. package/dist/src/service/utils/enum-utils.js +10 -0
  372. package/dist/src/service/utils/enum-utils.js.map +1 -0
  373. package/dist/src/service/utils/enum-utils.test.d.ts +1 -0
  374. package/dist/src/service/utils/enum-utils.test.js +14 -0
  375. package/dist/src/service/utils/enum-utils.test.js.map +1 -0
  376. package/dist/src/service/utils/index.d.ts +4 -0
  377. package/dist/src/service/utils/index.js +21 -0
  378. package/dist/src/service/utils/index.js.map +1 -0
  379. package/dist/src/service/utils/object-utils.d.ts +1 -0
  380. package/dist/src/service/utils/object-utils.js +5 -0
  381. package/dist/src/service/utils/object-utils.js.map +1 -0
  382. package/dist/src/service/utils/rng-utils.d.ts +8 -0
  383. package/dist/src/service/utils/rng-utils.js +42 -0
  384. package/dist/src/service/utils/rng-utils.js.map +1 -0
  385. package/dist/src/service/utils/rng-utils.test.d.ts +1 -0
  386. package/dist/src/service/utils/rng-utils.test.js +32 -0
  387. package/dist/src/service/utils/rng-utils.test.js.map +1 -0
  388. package/dist/src/service/utils/string-utils.d.ts +2 -0
  389. package/dist/src/service/utils/string-utils.js +17 -0
  390. package/dist/src/service/utils/string-utils.js.map +1 -0
  391. package/dist/src/service/utils/string-utils.test.d.ts +1 -0
  392. package/dist/src/service/utils/string-utils.test.js +28 -0
  393. package/dist/src/service/utils/string-utils.test.js.map +1 -0
  394. package/dist/src/service/utils/testing-utils.d.ts +1 -0
  395. package/dist/src/service/utils/testing-utils.js +3 -0
  396. package/dist/src/service/utils/testing-utils.js.map +1 -0
  397. package/package.json +40 -0
  398. package/src/data/index.ts +2 -0
  399. package/src/data/models/block.ts +159 -0
  400. package/src/data/models/coach.ts +94 -0
  401. package/src/data/models/country.ts +105 -0
  402. package/src/data/models/event.ts +83 -0
  403. package/src/data/models/index.ts +22 -0
  404. package/src/data/models/league.ts +90 -0
  405. package/src/data/models/libero-replacement.ts +104 -0
  406. package/src/data/models/match-set-stats.ts +204 -0
  407. package/src/data/models/match-set.ts +152 -0
  408. package/src/data/models/match.ts +106 -0
  409. package/src/data/models/performance-stats.ts +136 -0
  410. package/src/data/models/player.ts +370 -0
  411. package/src/data/models/rally-position.ts +79 -0
  412. package/src/data/models/rally.ts +229 -0
  413. package/src/data/models/reception.ts +113 -0
  414. package/src/data/models/score.ts +99 -0
  415. package/src/data/models/season-teams.ts +67 -0
  416. package/src/data/models/season.ts +103 -0
  417. package/src/data/models/serve.ts +113 -0
  418. package/src/data/models/set.ts +113 -0
  419. package/src/data/models/spike.ts +113 -0
  420. package/src/data/models/substitution.ts +98 -0
  421. package/src/data/models/team.ts +193 -0
  422. package/src/data/transformers/block.ts +117 -0
  423. package/src/data/transformers/coach.ts +33 -0
  424. package/src/data/transformers/country.ts +23 -0
  425. package/src/data/transformers/court-position.ts +43 -0
  426. package/src/data/transformers/court-target.ts +58 -0
  427. package/src/data/transformers/event-type.ts +35 -0
  428. package/src/data/transformers/formation.ts +16 -0
  429. package/src/data/transformers/index.ts +27 -0
  430. package/src/data/transformers/league.ts +26 -0
  431. package/src/data/transformers/libero-replacement.ts +62 -0
  432. package/src/data/transformers/match-set-stats.ts +101 -0
  433. package/src/data/transformers/match-set.ts +59 -0
  434. package/src/data/transformers/match.ts +48 -0
  435. package/src/data/transformers/performance-stats.ts +40 -0
  436. package/src/data/transformers/player.ts +109 -0
  437. package/src/data/transformers/rally-position.ts +24 -0
  438. package/src/data/transformers/rally.ts +139 -0
  439. package/src/data/transformers/reception.ts +98 -0
  440. package/src/data/transformers/role.ts +31 -0
  441. package/src/data/transformers/score.ts +43 -0
  442. package/src/data/transformers/season.ts +42 -0
  443. package/src/data/transformers/serve.ts +100 -0
  444. package/src/data/transformers/set.ts +98 -0
  445. package/src/data/transformers/spike.ts +102 -0
  446. package/src/data/transformers/substitution.ts +42 -0
  447. package/src/data/transformers/team.ts +45 -0
  448. package/src/data/transformers/trait.ts +37 -0
  449. package/src/index.ts +7 -0
  450. package/src/routing/events.ts +60 -0
  451. package/src/routing/index.ts +5 -0
  452. package/src/routing/league.ts +15 -0
  453. package/src/routing/match.ts +52 -0
  454. package/src/routing/player.ts +24 -0
  455. package/src/routing/team.ts +14 -0
  456. package/src/service/coach/__stubs__/index.ts +46 -0
  457. package/src/service/coach/coach.test.ts +10 -0
  458. package/src/service/coach/coach.ts +30 -0
  459. package/src/service/coach/formation.test.ts +10 -0
  460. package/src/service/coach/formation.ts +160 -0
  461. package/src/service/coach/index.ts +2 -0
  462. package/src/service/country/__stubs__/index.ts +13 -0
  463. package/src/service/country/country.test.ts +10 -0
  464. package/src/service/country/country.ts +23 -0
  465. package/src/service/country/index.ts +1 -0
  466. package/src/service/event/__stubs__/index.ts +25 -0
  467. package/src/service/event/block.test.ts +100 -0
  468. package/src/service/event/block.ts +69 -0
  469. package/src/service/event/in-play-event.ts +37 -0
  470. package/src/service/event/libero-replacement.test.ts +37 -0
  471. package/src/service/event/libero-replacement.ts +25 -0
  472. package/src/service/event/rally-event.ts +33 -0
  473. package/src/service/event/reception.test.ts +50 -0
  474. package/src/service/event/reception.ts +38 -0
  475. package/src/service/event/score.test.ts +29 -0
  476. package/src/service/event/score.ts +22 -0
  477. package/src/service/event/serve.test.ts +50 -0
  478. package/src/service/event/serve.ts +39 -0
  479. package/src/service/event/set.test.ts +50 -0
  480. package/src/service/event/set.ts +38 -0
  481. package/src/service/event/spike.test.ts +64 -0
  482. package/src/service/event/spike.ts +46 -0
  483. package/src/service/event/substitution.ts +16 -0
  484. package/src/service/index.ts +17 -0
  485. package/src/service/league/index.ts +3 -0
  486. package/src/service/league/league.ts +112 -0
  487. package/src/service/league/season.ts +41 -0
  488. package/src/service/league/standing.ts +82 -0
  489. package/src/service/main.ts +52 -0
  490. package/src/service/match/__stubs__/index.ts +119 -0
  491. package/src/service/match/court-position.test.ts +73 -0
  492. package/src/service/match/court-position.ts +46 -0
  493. package/src/service/match/court-target.test.ts +39 -0
  494. package/src/service/match/court-target.ts +30 -0
  495. package/src/service/match/index.ts +6 -0
  496. package/src/service/match/match-set.test.ts +174 -0
  497. package/src/service/match/match-set.ts +140 -0
  498. package/src/service/match/match-team.test.ts +16 -0
  499. package/src/service/match/match-team.ts +13 -0
  500. package/src/service/match/match.test.ts +80 -0
  501. package/src/service/match/match.ts +63 -0
  502. package/src/service/match/rally.test.ts +94 -0
  503. package/src/service/match/rally.ts +79 -0
  504. package/src/service/player/__stubs__/index.ts +1433 -0
  505. package/src/service/player/index.ts +3 -0
  506. package/src/service/player/performance-stats.test.ts +24 -0
  507. package/src/service/player/performance-stats.ts +47 -0
  508. package/src/service/player/player.test.ts +51 -0
  509. package/src/service/player/player.ts +101 -0
  510. package/src/service/player/role.test.ts +29 -0
  511. package/src/service/player/role.ts +33 -0
  512. package/src/service/player/stats.test.ts +23 -0
  513. package/src/service/player/stats.ts +29 -0
  514. package/src/service/player/trait.test.ts +10 -0
  515. package/src/service/player/trait.ts +124 -0
  516. package/src/service/team/__stubs__/index.ts +290 -0
  517. package/src/service/team/index.ts +1 -0
  518. package/src/service/team/team.test.ts +30 -0
  519. package/src/service/team/team.ts +45 -0
  520. package/src/service/utils/enum-utils.test.ts +10 -0
  521. package/src/service/utils/enum-utils.ts +6 -0
  522. package/src/service/utils/index.ts +4 -0
  523. package/src/service/utils/object-utils.ts +1 -0
  524. package/src/service/utils/rng-utils.test.ts +32 -0
  525. package/src/service/utils/rng-utils.ts +41 -0
  526. package/src/service/utils/string-utils.test.ts +28 -0
  527. package/src/service/utils/string-utils.ts +13 -0
  528. package/src/service/utils/testing-utils.ts +2 -0
@@ -0,0 +1,119 @@
1
+ import { Rally } from '../rally'
2
+ import { MatchSet } from '../match-set'
3
+ import { MatchTeam } from '../match-team'
4
+ import { team } from '../../team/__stubs__'
5
+ import { libero, rosters } from '../../player/__stubs__'
6
+ import { Match } from '../match'
7
+ import { Team } from '../../team'
8
+ import { coaches } from '../../coach/__stubs__'
9
+ import { country } from '../../country/__stubs__'
10
+
11
+ export const newRally: Rally = new Rally({
12
+ servingTeam: team,
13
+ events: [],
14
+ order: 1,
15
+ id: '0ac3ba3a-d710-42dc-a1e7-7066b8df5fd9',
16
+ homePlayerPosition: [],
17
+ awayPlayerPosition: []
18
+ })
19
+
20
+ export const newSet: MatchSet = new MatchSet({
21
+ id: 'bf337ec2-9fee-495e-8d5a-d834b307d537',
22
+ stats: [],
23
+ rallies: [],
24
+ order: 0,
25
+ homeScore: 0,
26
+ awayScore: 0,
27
+ isTieBreak: false,
28
+ homeLibero: libero,
29
+ awayLibero: libero
30
+ })
31
+
32
+ export const finishedSet: MatchSet = (() => {
33
+ const set = new MatchSet({
34
+ id: 'c959fcf6-873f-4eae-80aa-a820e25329c4',
35
+ stats: [],
36
+ rallies: [],
37
+ order: 0,
38
+ homeScore: 0,
39
+ awayScore: 0,
40
+ isTieBreak: false,
41
+ homeLibero: libero,
42
+ awayLibero: libero
43
+ })
44
+ set.nextState()
45
+ for (let i = 0; i < 25; i++) {
46
+ set.increaseScore(MatchTeam.HOME)
47
+ }
48
+ set.nextState()
49
+ return set
50
+ })()
51
+ export const inProgressSet: MatchSet = (() => {
52
+ const set = new MatchSet({
53
+ id: 'c1095b6c-9e70-4f9d-9942-d54aaa8655d0',
54
+ stats: [],
55
+ rallies: [],
56
+ order: 0,
57
+ homeScore: 0,
58
+ awayScore: 0,
59
+ isTieBreak: false,
60
+ homeLibero: libero,
61
+ awayLibero: libero
62
+ })
63
+ set.nextState()
64
+ for (let i = 0; i < 20; i++) {
65
+ set.increaseScore(MatchTeam.AWAY)
66
+ }
67
+ return set
68
+ })()
69
+
70
+ export const teams: Team[] = [
71
+ new Team({
72
+ id: '334ca929-6e71-4011-a2f0-5ca4fa83dbe5',
73
+ name: 'Jaloo',
74
+ shortName: 'JAL',
75
+ country,
76
+ roster: rosters[0],
77
+ coach: coaches[0]
78
+ }),
79
+ new Team({
80
+ id: 'f244d62d-f0ec-4005-8eb2-d955b0b8b191',
81
+ name: 'Fatz',
82
+ shortName: 'FAT',
83
+ country,
84
+ roster: rosters[1],
85
+ coach: coaches[1]
86
+ }),
87
+ new Team({
88
+ id: '749a5755-5c8b-4b07-aca9-1365a26c9a2e',
89
+ name: 'Tagtune',
90
+ shortName: 'TAG',
91
+ country,
92
+ roster: rosters[2],
93
+ coach: coaches[2]
94
+ }),
95
+ new Team({
96
+ id: 'd3dd532d-4898-44a3-853f-25f6fbdb3534',
97
+ name: 'Gigabox',
98
+ shortName: 'GIG',
99
+ country,
100
+ roster: rosters[3],
101
+ coach: coaches[3]
102
+ })
103
+ ]
104
+
105
+ export const match: Match = new Match({
106
+ id: '59aa2ea0-cf71-4081-b817-48dfdd454841',
107
+ homeTeam: teams[0],
108
+ awayTeam: teams[1],
109
+ sets: [],
110
+ scheduledDate: new Date('2023-07-26T21:48:12.273Z')
111
+ })
112
+
113
+ export const match2: Match = new Match({
114
+ id: 'dfd87bdc-20c2-4383-92ea-b5c36a8ba7aa',
115
+ homeTeam: teams[2],
116
+ awayTeam: teams[3],
117
+ sets: [],
118
+ scheduledDate: new Date('2023-07-26T21:48:12.273Z')
119
+ })
@@ -0,0 +1,73 @@
1
+ import { describe, expect, test } from '@jest/globals'
2
+ import { CourtPosition, CourtRow } from './court-position'
3
+
4
+ describe('CourtPosition Test Module', () => {
5
+ const positions: CourtPosition[] = [CourtPosition.LEFT_BACK, CourtPosition.MIDDLE_BACK, CourtPosition.RIGHT_BACK,
6
+ CourtPosition.LEFT_FRONT, CourtPosition.MIDDLE_FRONT, CourtPosition.RIGHT_FRONT]
7
+
8
+ // getPositions Tests
9
+ test('Should get all positions', () => {
10
+ expect(CourtPosition.getPositions()).toEqual(positions)
11
+ })
12
+ // rotatePosition Tests
13
+ test('Should return correct positions for rotation', () => {
14
+ expect(CourtPosition.rotatePosition(1)).toEqual(CourtPosition.MIDDLE_BACK)
15
+ expect(CourtPosition.rotatePosition(2)).toEqual(CourtPosition.RIGHT_BACK)
16
+ expect(CourtPosition.rotatePosition(3)).toEqual(CourtPosition.RIGHT_FRONT)
17
+ expect(CourtPosition.rotatePosition(4)).toEqual(CourtPosition.MIDDLE_FRONT)
18
+ expect(CourtPosition.rotatePosition(5)).toEqual(CourtPosition.LEFT_FRONT)
19
+ expect(CourtPosition.rotatePosition(6)).toEqual(CourtPosition.LEFT_BACK)
20
+ })
21
+ test('Should throw Error when rotating an invalid position', () => {
22
+ function rotate (): void { CourtPosition.rotatePosition(0) }
23
+
24
+ expect(rotate).toThrow(/^POSITION_INDEX_OUT_OF_BOUNDS$/)
25
+ })
26
+ // isFrontRow Tests
27
+ test('Should return true for front-row positions', () => {
28
+ expect(CourtPosition.isFrontRow(CourtPosition.LEFT_FRONT)).toEqual(true)
29
+ expect(CourtPosition.isFrontRow(CourtPosition.MIDDLE_FRONT)).toEqual(true)
30
+ expect(CourtPosition.isFrontRow(CourtPosition.RIGHT_FRONT)).toEqual(true)
31
+ })
32
+ test('Should return false for back-row positions', () => {
33
+ expect(CourtPosition.isFrontRow(CourtPosition.LEFT_BACK)).toEqual(false)
34
+ expect(CourtPosition.isFrontRow(CourtPosition.MIDDLE_BACK)).toEqual(false)
35
+ expect(CourtPosition.isFrontRow(CourtPosition.RIGHT_BACK)).toEqual(false)
36
+ })
37
+ test('Should throw Error providing an invalid position', () => {
38
+ function front (): void { CourtPosition.isFrontRow(0) }
39
+
40
+ expect(front).toThrow(/^POSITION_INDEX_OUT_OF_BOUNDS$/)
41
+ })
42
+ // isBackRow Tests
43
+ test('Should return true for back-row positions', () => {
44
+ expect(CourtPosition.isBackRow(CourtPosition.LEFT_BACK)).toEqual(true)
45
+ expect(CourtPosition.isBackRow(CourtPosition.MIDDLE_BACK)).toEqual(true)
46
+ expect(CourtPosition.isBackRow(CourtPosition.RIGHT_BACK)).toEqual(true)
47
+ })
48
+ test('Should return false for front-row positions', () => {
49
+ expect(CourtPosition.isBackRow(CourtPosition.LEFT_FRONT)).toEqual(false)
50
+ expect(CourtPosition.isBackRow(CourtPosition.MIDDLE_FRONT)).toEqual(false)
51
+ expect(CourtPosition.isBackRow(CourtPosition.RIGHT_FRONT)).toEqual(false)
52
+ })
53
+ test('Should throw Error providing an invalid position', () => {
54
+ function back (): void { CourtPosition.isBackRow(0) }
55
+
56
+ expect(back).toThrow(/^POSITION_INDEX_OUT_OF_BOUNDS: 0$/)
57
+ })
58
+ // getRow Tests
59
+ test('Should get all front-row positions', () => {
60
+ expect(CourtPosition.getRow(CourtRow.FRONT))
61
+ .toEqual([CourtPosition.LEFT_FRONT, CourtPosition.MIDDLE_FRONT, CourtPosition.RIGHT_FRONT])
62
+ })
63
+ test('Should get all back-row positions', () => {
64
+ expect(CourtPosition.getRow(CourtRow.BACK))
65
+ .toEqual([CourtPosition.LEFT_BACK, CourtPosition.MIDDLE_BACK, CourtPosition.RIGHT_BACK])
66
+ })
67
+ test('Should throw Error providing an invalid row', () => {
68
+ // @ts-expect-error
69
+ function row (): void { CourtPosition.getRow(CourtRow.FAKE) }
70
+
71
+ expect(row).toThrow(/^INVALID_ROW: undefined$/)
72
+ })
73
+ })
@@ -0,0 +1,46 @@
1
+ export enum CourtRow {
2
+ BACK = 'BACK_ROW',
3
+ FRONT = 'FRONT_ROW'
4
+ }
5
+
6
+ export enum CourtPosition {
7
+ NOT_IN_COURT = -1, LIBERO_ZONE = 0,
8
+ // -----------------------------------------------------
9
+ LEFT_FRONT = 4, MIDDLE_FRONT = 3, RIGHT_FRONT = 2,
10
+ LEFT_BACK = 5, MIDDLE_BACK = 6, RIGHT_BACK = 1
11
+ }
12
+
13
+ // eslint-disable-next-line @typescript-eslint/no-namespace
14
+ export namespace CourtPosition {
15
+ const FRONT_ROW = [CourtPosition.LEFT_FRONT, CourtPosition.MIDDLE_FRONT, CourtPosition.RIGHT_FRONT]
16
+ const BACK_ROW = [CourtPosition.LEFT_BACK, CourtPosition.MIDDLE_BACK, CourtPosition.RIGHT_BACK]
17
+
18
+ export function getPositions (): CourtPosition[] {
19
+ return [...BACK_ROW, ...FRONT_ROW]
20
+ }
21
+
22
+ export function rotatePosition (position: number): CourtPosition {
23
+ if (position < 1 || position > 6) throw new Error('POSITION_INDEX_OUT_OF_BOUNDS')
24
+
25
+ if (position > CourtPosition.RIGHT_BACK) return position - 1
26
+ else return CourtPosition.MIDDLE_BACK
27
+ }
28
+
29
+ export function isFrontRow (position: number): boolean {
30
+ if (position < 1 || position > 6) throw new Error('POSITION_INDEX_OUT_OF_BOUNDS')
31
+
32
+ return FRONT_ROW.includes(position)
33
+ }
34
+
35
+ export function isBackRow (position: number): boolean {
36
+ if (position < 1 || position > 6) throw new Error(`POSITION_INDEX_OUT_OF_BOUNDS: ${position}`)
37
+
38
+ return BACK_ROW.includes(position)
39
+ }
40
+
41
+ export function getRow (row: CourtRow): CourtPosition[] {
42
+ if (![CourtRow.BACK, CourtRow.FRONT].includes(row)) throw new Error(`INVALID_ROW: ${row}`)
43
+
44
+ return CourtRow.BACK === row ? [...BACK_ROW] : [...FRONT_ROW]
45
+ }
46
+ }
@@ -0,0 +1,39 @@
1
+ import { describe, expect, test } from '@jest/globals'
2
+ import { CourtTarget } from './court-target'
3
+
4
+ describe('CourtTarget Test Module', () => {
5
+ // getSidePosition Tests
6
+ test('Should get correct court position', () => {
7
+ for (let i = 1; i < 7; i++) {
8
+ expect(CourtTarget.getSidePosition(i)).toBe(i)
9
+ expect(CourtTarget.getSidePosition(i + 6)).toBe(i)
10
+ }
11
+ })
12
+ test('Should throw Error when position is out of bounds', () => {
13
+ function position (): void { CourtTarget.getSidePosition(0) }
14
+
15
+ expect(position).toThrow(/^POSITION_INDEX_OUT_OF_BOUNDS$/)
16
+ })
17
+ // getTeamSide Tests
18
+ test('Should return team positions', () => {
19
+ const positions: CourtTarget[] = CourtTarget.getTeamSide()
20
+
21
+ expect(positions[0]).toBe(CourtTarget.TEAM_RIGHT_BACK)
22
+ expect(positions[1]).toBe(CourtTarget.TEAM_RIGHT_FRONT)
23
+ expect(positions[2]).toBe(CourtTarget.TEAM_MIDDLE_FRONT)
24
+ expect(positions[3]).toBe(CourtTarget.TEAM_LEFT_FRONT)
25
+ expect(positions[4]).toBe(CourtTarget.TEAM_LEFT_BACK)
26
+ expect(positions[5]).toBe(CourtTarget.TEAM_MIDDLE_BACK)
27
+ })
28
+ // getOpponentSide Tests
29
+ test('Should return opponent team positions', () => {
30
+ const positions: CourtTarget[] = CourtTarget.getOpponentSide()
31
+
32
+ expect(positions[0]).toBe(CourtTarget.OPPONENT_RIGHT_BACK)
33
+ expect(positions[1]).toBe(CourtTarget.OPPONENT_RIGHT_FRONT)
34
+ expect(positions[2]).toBe(CourtTarget.OPPONENT_MIDDLE_FRONT)
35
+ expect(positions[3]).toBe(CourtTarget.OPPONENT_LEFT_FRONT)
36
+ expect(positions[4]).toBe(CourtTarget.OPPONENT_LEFT_BACK)
37
+ expect(positions[5]).toBe(CourtTarget.OPPONENT_MIDDLE_BACK)
38
+ })
39
+ })
@@ -0,0 +1,30 @@
1
+ import { CourtPosition } from './court-position'
2
+
3
+ export enum CourtTarget {
4
+ NO_TARGET = 0,
5
+ OPPONENT_RIGHT_BACK = 7, OPPONENT_MIDDLE_BACK = 12, OPPONENT_LEFT_BACK = 11,
6
+ OPPONENT_RIGHT_FRONT = 8, OPPONENT_MIDDLE_FRONT = 9, OPPONENT_LEFT_FRONT = 10,
7
+ // --------------------------------------------------------------------------------
8
+ TEAM_LEFT_FRONT = 4, TEAM_MIDDLE_FRONT = 3, TEAM_RIGHT_FRONT = 2,
9
+ TEAM_LEFT_BACK = 5, TEAM_MIDDLE_BACK = 6, TEAM_RIGHT_BACK = 1,
10
+ }
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-namespace
13
+ export namespace CourtTarget {
14
+ export function getTeamSide (): CourtTarget[] {
15
+ return [CourtTarget.TEAM_RIGHT_BACK, CourtTarget.TEAM_RIGHT_FRONT, CourtTarget.TEAM_MIDDLE_FRONT,
16
+ CourtTarget.TEAM_LEFT_FRONT, CourtTarget.TEAM_LEFT_BACK, CourtTarget.TEAM_MIDDLE_BACK]
17
+ }
18
+
19
+ export function getOpponentSide (): CourtTarget[] {
20
+ return [CourtTarget.OPPONENT_RIGHT_BACK, CourtTarget.OPPONENT_RIGHT_FRONT, CourtTarget.OPPONENT_MIDDLE_FRONT,
21
+ CourtTarget.OPPONENT_LEFT_FRONT, CourtTarget.OPPONENT_LEFT_BACK, CourtTarget.OPPONENT_MIDDLE_BACK]
22
+ }
23
+
24
+ export function getSidePosition (position: number): CourtPosition {
25
+ if (position < 1 || position > 12) throw new Error('POSITION_INDEX_OUT_OF_BOUNDS')
26
+
27
+ if (position > 6) return position - 6
28
+ else return position
29
+ }
30
+ }
@@ -0,0 +1,6 @@
1
+ export * from './match'
2
+ export * from './match-set'
3
+ export * from './rally'
4
+ export * from './court-position'
5
+ export * from './court-target'
6
+ export * from './match-team'
@@ -0,0 +1,174 @@
1
+ import { describe, expect, test } from '@jest/globals'
2
+ import { MatchSet, MatchSetState } from './match-set'
3
+ import { MatchTeam } from './match-team'
4
+ import { newRally } from './__stubs__'
5
+ import { libero } from '../player/__stubs__'
6
+
7
+ describe('MatchSet Test Module', () => {
8
+ let set: MatchSet
9
+ let tieBreakSet: MatchSet
10
+
11
+ beforeEach(() => {
12
+ set = new MatchSet({
13
+ id: '4a8d1149-0157-461c-afb4-8a2d9776da5a',
14
+ rallies: [],
15
+ stats: [],
16
+ awayScore: 0,
17
+ homeScore: 0,
18
+ order: 0,
19
+ isTieBreak: false,
20
+ homeLibero: libero,
21
+ awayLibero: libero
22
+ })
23
+ tieBreakSet = new MatchSet({
24
+ id: '5fed79c1-1146-45fb-acdd-acd4eb99bda3',
25
+ rallies: [],
26
+ stats: [],
27
+ awayScore: 0,
28
+ homeScore: 0,
29
+ order: 0,
30
+ isTieBreak: true,
31
+ homeLibero: libero,
32
+ awayLibero: libero
33
+ })
34
+ })
35
+
36
+ test('Should instantiate object properly', () => {
37
+ expect(set.id).toBe('4a8d1149-0157-461c-afb4-8a2d9776da5a')
38
+ expect(set.rallies.length).toBe(0)
39
+ expect(set.state).toBe(0)
40
+ expect(set.getHomeScore()).toBe(0)
41
+ expect(set.getAwayScore()).toBe(0)
42
+ })
43
+ // increaseScore Tests
44
+ test('Should increase score of home team', () => {
45
+ set.nextState()
46
+ expect(set.getHomeScore).toBe(0)
47
+ set.increaseScore(MatchTeam.HOME)
48
+ expect(set.getHomeScore).toBe(1)
49
+ })
50
+ test('Should increase score of away team', () => {
51
+ set.nextState()
52
+ expect(set.getAwayScore).toBe(0)
53
+ set.increaseScore(MatchTeam.AWAY)
54
+ expect(set.getAwayScore).toBe(1)
55
+ })
56
+ test('Should throw Error when trying to increase score of finished set', () => {
57
+ set.nextState()
58
+ for (let i = 0; i < 25; i++) set.increaseScore(MatchTeam.HOME)
59
+
60
+ function fin1 (): void { set.increaseScore(MatchTeam.HOME) }
61
+
62
+ function fin2 (): void { tieBreakSet.increaseScore(MatchTeam.HOME) }
63
+
64
+ expect(fin1).toThrow(/^CANNOT_INCREASE_SCORE_OF_SET$/)
65
+ expect(fin2).toThrow(/^CANNOT_INCREASE_SCORE_OF_SET$/)
66
+ })
67
+ test('Should throw Error when providing invalid team', () => {
68
+ set.nextState()
69
+
70
+ // @ts-expect-error
71
+ function fin (): void { set.increaseScore(MatchTeam.OTHER) }
72
+
73
+ expect(fin).toThrow(/^UNKNOWN_TEAM$/)
74
+ })
75
+ // addRally Tests
76
+ test('Should rally to rally array', () => {
77
+ expect(set.rallies.length).toBe(0)
78
+ set.addRally(newRally)
79
+ expect(set.rallies.length).toBe(1)
80
+ })
81
+ // isOver Tests
82
+ test('Should return true for team reaching point threshold', () => {
83
+ set.nextState()
84
+ expect(set.isOver()).toBe(false)
85
+
86
+ for (let i = 0; i < 25; i++) set.increaseScore(MatchTeam.HOME)
87
+
88
+ expect(set.isOver()).toBe(true)
89
+ })
90
+ test('Should return true for both teams reaching point threshold and point difference greater than 1',
91
+ () => {
92
+ set.nextState()
93
+
94
+ for (let i = 0; i < 25; i++) {
95
+ set.increaseScore(MatchTeam.HOME)
96
+ set.increaseScore(MatchTeam.AWAY)
97
+ }
98
+
99
+ expect(set.isOver()).toBe(false)
100
+ set.increaseScore(MatchTeam.HOME)
101
+ expect(set.isOver()).toBe(false)
102
+ set.increaseScore(MatchTeam.HOME)
103
+ expect(set.isOver()).toBe(true)
104
+ })
105
+ // nextState Tests
106
+ test('Should advance to in play', () => {
107
+ expect(set.state).toBe(0)
108
+ set.nextState()
109
+ expect(set.state).toBe(1)
110
+ })
111
+ test('Should throw Error if in play and set not over', () => {
112
+ set.nextState()
113
+
114
+ function fin (): void { set.nextState() }
115
+
116
+ expect(fin).toThrow(/^CANNOT_ADVANCE_SET_STATE$/)
117
+ })
118
+ test('Should advance to FINISHED if set is over', () => {
119
+ set.nextState()
120
+
121
+ for (let i = 0; i < 25; i++) set.increaseScore(MatchTeam.HOME)
122
+
123
+ set.nextState()
124
+ expect(set.state).toBe(2)
125
+ })
126
+ test('Should throw Error when trying to transition from FINISHED state', () => {
127
+ set.nextState()
128
+
129
+ for (let i = 0; i < 25; i++) set.increaseScore(MatchTeam.HOME)
130
+
131
+ set.nextState()
132
+
133
+ function fin (): void { set.nextState() }
134
+
135
+ expect(fin).toThrow(/^CANT_GET_STATE_AFTER: FINISHED$/)
136
+ })
137
+ // getWinner Tests
138
+ test('Should throw Error when getting winner of unfinished set', () => {
139
+ function fin (): void { set.getWinner() }
140
+
141
+ expect(fin).toThrow(/^UNFINISHED_SET$/)
142
+ })
143
+ test('Should get correct set winner', () => {
144
+ set.nextState()
145
+
146
+ for (let i = 0; i < 25; i++) set.increaseScore(MatchTeam.HOME)
147
+
148
+ expect(set.getWinner()).toBe(MatchTeam.HOME)
149
+
150
+ tieBreakSet.nextState()
151
+
152
+ for (let i = 0; i < 15; i++) tieBreakSet.increaseScore(MatchTeam.AWAY)
153
+
154
+ expect(tieBreakSet.getWinner()).toBe(MatchTeam.AWAY)
155
+ })
156
+ // MatchSetState Tests
157
+ test('Should get next state', () => {
158
+ expect(MatchSetState.nextState(0)).toBe(1)
159
+ expect(MatchSetState.nextState(1)).toBe(2)
160
+ })
161
+ test('Should throw Error for state outside range', () => {
162
+ function fn1 (): void { MatchSetState.nextState(-1) }
163
+
164
+ function fn2 (): void { MatchSetState.nextState(3) }
165
+
166
+ expect(fn1).toThrow(/^STATE_INDEX_OUT_OF_BOUNDS$/)
167
+ expect(fn2).toThrow(/^STATE_INDEX_OUT_OF_BOUNDS$/)
168
+ })
169
+ test('Should throw Error for last state', () => {
170
+ function fn (): void { MatchSetState.nextState(2) }
171
+
172
+ expect(fn).toThrow(/^CANT_GET_STATE_AFTER: FINISHED$/)
173
+ })
174
+ })
@@ -0,0 +1,140 @@
1
+ import { Rally } from './rally'
2
+ import { validateUUID } from '../utils'
3
+ import { MatchTeam } from './match-team'
4
+ import { Player } from '../player'
5
+
6
+ export enum MatchSetState {
7
+ NEW = 0,
8
+ IN_PLAY = 1,
9
+ FINISHED = 2
10
+ }
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-namespace
13
+ export namespace MatchSetState {
14
+ export function nextState (state: number): MatchSetState {
15
+ if (state < 0 || state > 2) throw new Error('STATE_INDEX_OUT_OF_BOUNDS')
16
+ if (state === 2) throw new Error(`CANT_GET_STATE_AFTER: ${MatchSetState[state]}`)
17
+
18
+ return state + 1
19
+ }
20
+ }
21
+
22
+ enum ScoreThreshold {
23
+ SET = 25,
24
+ TIE_BREAK = 15
25
+ }
26
+
27
+ export interface MatchSetOpts {
28
+ readonly id: string
29
+ readonly order: number
30
+ readonly isTieBreak: boolean
31
+ readonly homeLibero: Player | undefined
32
+ readonly awayLibero: Player | undefined
33
+ readonly homeScore: number
34
+ readonly awayScore: number
35
+ readonly stats: SetStatistics[]
36
+ readonly rallies: Rally[]
37
+ }
38
+
39
+ export interface EventStat {
40
+ success: number
41
+ error: number
42
+ }
43
+
44
+ export interface SetStatistics {
45
+ player: Player
46
+ ace: number
47
+ attempts: number
48
+ contacts: number
49
+ ralliesPlayed: number
50
+ serve: EventStat
51
+ reception: EventStat
52
+ set: EventStat
53
+ attack: EventStat
54
+ block: EventStat
55
+ kills: number
56
+ killBlocks: number
57
+ assists: number
58
+ }
59
+
60
+ export class MatchSet {
61
+ readonly id: string
62
+ readonly order: number
63
+ readonly isTieBreak: boolean
64
+ readonly homeLibero: Player | undefined
65
+ readonly awayLibero: Player | undefined
66
+ private readonly scoreThreshold: ScoreThreshold
67
+ private homeScore: number
68
+ private awayScore: number
69
+ readonly stats: SetStatistics[]
70
+ readonly rallies: Rally[]
71
+
72
+ constructor ({ id, order, isTieBreak, homeLibero, awayLibero, stats, rallies, homeScore, awayScore }: MatchSetOpts) {
73
+ validateUUID(id)
74
+
75
+ this.id = id
76
+ this.order = order
77
+ this.homeScore = homeScore
78
+ this.awayScore = awayScore
79
+ this.homeLibero = homeLibero
80
+ this.awayLibero = awayLibero
81
+ this.stats = stats
82
+ this.rallies = rallies
83
+ this.isTieBreak = isTieBreak
84
+ this.scoreThreshold = isTieBreak ? ScoreThreshold.TIE_BREAK : ScoreThreshold.SET
85
+ this._state = MatchSetState.NEW
86
+ }
87
+
88
+ public getHomeScore (): number {
89
+ return this.homeScore
90
+ }
91
+
92
+ public getAwayScore (): number {
93
+ return this.awayScore
94
+ }
95
+
96
+ private _state: MatchSetState
97
+
98
+ get state (): MatchSetState {
99
+ return this._state
100
+ }
101
+
102
+ public increaseScore (team: MatchTeam): void {
103
+ if (this._state !== MatchSetState.IN_PLAY || this.isOver()) throw new Error('CANNOT_INCREASE_SCORE_OF_SET')
104
+
105
+ if (team === MatchTeam.HOME) this.homeScore++
106
+ else if (team === MatchTeam.AWAY) this.awayScore++
107
+ else throw new Error('UNKNOWN_TEAM')
108
+ }
109
+
110
+ public addRally (rally: Rally): void {
111
+ this.rallies.push(rally)
112
+ }
113
+
114
+ /**
115
+ * Has a team reached at least 25 points and is the score difference between both teams at least 2?
116
+ * @returns boolean
117
+ */
118
+ public isOver (): boolean {
119
+ return Math.abs(this.homeScore - this.awayScore) > 1 &&
120
+ (this.homeScore >= this.scoreThreshold || this.awayScore >= this.scoreThreshold)
121
+ }
122
+
123
+ public nextState (): void {
124
+ if (this._state === 1 && !this.isOver()) {
125
+ throw new Error('CANNOT_ADVANCE_SET_STATE')
126
+ }
127
+
128
+ this._state = MatchSetState.nextState(this._state)
129
+ }
130
+
131
+ /**
132
+ * Get the team that won the Set. Return undefined if set is not over.
133
+ * @returns CourtTeam
134
+ */
135
+ public getWinner (): MatchTeam {
136
+ if (!this.isOver()) throw new Error('UNFINISHED_SET')
137
+
138
+ return this.homeScore > this.awayScore ? MatchTeam.HOME : MatchTeam.AWAY
139
+ }
140
+ }
@@ -0,0 +1,16 @@
1
+ import { describe, expect, test } from '@jest/globals'
2
+ import { MatchTeam } from './match-team'
3
+
4
+ describe('MatchTeam Test Module', () => {
5
+ // otherTeam Tests
6
+ test('Should return correct team string', () => {
7
+ expect(MatchTeam.otherTeam(MatchTeam.AWAY)).toBe(MatchTeam.HOME)
8
+ expect(MatchTeam.otherTeam(MatchTeam.HOME)).toBe(MatchTeam.AWAY)
9
+ })
10
+ test('Should throw Error when providing invalid MatchTeam', () => {
11
+ // @ts-expect-error
12
+ function team (): void { MatchTeam.otherTeam(MatchTeam.OTHER) }
13
+
14
+ expect(team).toThrow(/^UNKNOWN_MATCH_TEAM$/)
15
+ })
16
+ })
@@ -0,0 +1,13 @@
1
+ export enum MatchTeam {
2
+ HOME = 'homeTeam',
3
+ AWAY = 'awayTeam'
4
+ }
5
+
6
+ // eslint-disable-next-line @typescript-eslint/no-namespace
7
+ export namespace MatchTeam {
8
+ export function otherTeam (team: MatchTeam): MatchTeam {
9
+ if (team === MatchTeam.HOME) return MatchTeam.AWAY
10
+ else if (team === MatchTeam.AWAY) return MatchTeam.HOME
11
+ else throw new Error('UNKNOWN_MATCH_TEAM')
12
+ }
13
+ }