volleyballsimtypes 0.0.7 → 0.0.8

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 (132) hide show
  1. package/package.json +5 -5
  2. package/src/data/index.ts +0 -2
  3. package/src/data/models/block.ts +0 -159
  4. package/src/data/models/coach.ts +0 -94
  5. package/src/data/models/country.ts +0 -105
  6. package/src/data/models/event.ts +0 -83
  7. package/src/data/models/index.ts +0 -22
  8. package/src/data/models/league.ts +0 -90
  9. package/src/data/models/libero-replacement.ts +0 -104
  10. package/src/data/models/match-set-stats.ts +0 -204
  11. package/src/data/models/match-set.ts +0 -152
  12. package/src/data/models/match.ts +0 -106
  13. package/src/data/models/performance-stats.ts +0 -136
  14. package/src/data/models/player.ts +0 -370
  15. package/src/data/models/rally-position.ts +0 -79
  16. package/src/data/models/rally.ts +0 -229
  17. package/src/data/models/reception.ts +0 -113
  18. package/src/data/models/score.ts +0 -99
  19. package/src/data/models/season-teams.ts +0 -67
  20. package/src/data/models/season.ts +0 -103
  21. package/src/data/models/serve.ts +0 -113
  22. package/src/data/models/set.ts +0 -113
  23. package/src/data/models/spike.ts +0 -113
  24. package/src/data/models/substitution.ts +0 -98
  25. package/src/data/models/team.ts +0 -193
  26. package/src/data/transformers/block.ts +0 -117
  27. package/src/data/transformers/coach.ts +0 -33
  28. package/src/data/transformers/country.ts +0 -23
  29. package/src/data/transformers/court-position.ts +0 -43
  30. package/src/data/transformers/court-target.ts +0 -58
  31. package/src/data/transformers/event-type.ts +0 -35
  32. package/src/data/transformers/formation.ts +0 -16
  33. package/src/data/transformers/index.ts +0 -27
  34. package/src/data/transformers/league.ts +0 -26
  35. package/src/data/transformers/libero-replacement.ts +0 -62
  36. package/src/data/transformers/match-set-stats.ts +0 -101
  37. package/src/data/transformers/match-set.ts +0 -59
  38. package/src/data/transformers/match.ts +0 -48
  39. package/src/data/transformers/performance-stats.ts +0 -40
  40. package/src/data/transformers/player.ts +0 -109
  41. package/src/data/transformers/rally-position.ts +0 -24
  42. package/src/data/transformers/rally.ts +0 -139
  43. package/src/data/transformers/reception.ts +0 -98
  44. package/src/data/transformers/role.ts +0 -31
  45. package/src/data/transformers/score.ts +0 -43
  46. package/src/data/transformers/season.ts +0 -42
  47. package/src/data/transformers/serve.ts +0 -100
  48. package/src/data/transformers/set.ts +0 -98
  49. package/src/data/transformers/spike.ts +0 -102
  50. package/src/data/transformers/substitution.ts +0 -42
  51. package/src/data/transformers/team.ts +0 -45
  52. package/src/data/transformers/trait.ts +0 -37
  53. package/src/index.ts +0 -7
  54. package/src/routing/events.ts +0 -60
  55. package/src/routing/index.ts +0 -5
  56. package/src/routing/league.ts +0 -15
  57. package/src/routing/match.ts +0 -52
  58. package/src/routing/player.ts +0 -24
  59. package/src/routing/team.ts +0 -14
  60. package/src/service/coach/__stubs__/index.ts +0 -46
  61. package/src/service/coach/coach.test.ts +0 -10
  62. package/src/service/coach/coach.ts +0 -30
  63. package/src/service/coach/formation.test.ts +0 -10
  64. package/src/service/coach/formation.ts +0 -160
  65. package/src/service/coach/index.ts +0 -2
  66. package/src/service/country/__stubs__/index.ts +0 -13
  67. package/src/service/country/country.test.ts +0 -10
  68. package/src/service/country/country.ts +0 -23
  69. package/src/service/country/index.ts +0 -1
  70. package/src/service/event/__stubs__/index.ts +0 -25
  71. package/src/service/event/block.test.ts +0 -100
  72. package/src/service/event/block.ts +0 -69
  73. package/src/service/event/in-play-event.ts +0 -37
  74. package/src/service/event/libero-replacement.test.ts +0 -37
  75. package/src/service/event/libero-replacement.ts +0 -25
  76. package/src/service/event/rally-event.ts +0 -33
  77. package/src/service/event/reception.test.ts +0 -50
  78. package/src/service/event/reception.ts +0 -38
  79. package/src/service/event/score.test.ts +0 -29
  80. package/src/service/event/score.ts +0 -22
  81. package/src/service/event/serve.test.ts +0 -50
  82. package/src/service/event/serve.ts +0 -39
  83. package/src/service/event/set.test.ts +0 -50
  84. package/src/service/event/set.ts +0 -38
  85. package/src/service/event/spike.test.ts +0 -64
  86. package/src/service/event/spike.ts +0 -46
  87. package/src/service/event/substitution.ts +0 -16
  88. package/src/service/index.ts +0 -17
  89. package/src/service/league/index.ts +0 -3
  90. package/src/service/league/league.ts +0 -112
  91. package/src/service/league/season.ts +0 -41
  92. package/src/service/league/standing.ts +0 -82
  93. package/src/service/main.ts +0 -52
  94. package/src/service/match/__stubs__/index.ts +0 -119
  95. package/src/service/match/court-position.test.ts +0 -73
  96. package/src/service/match/court-position.ts +0 -46
  97. package/src/service/match/court-target.test.ts +0 -39
  98. package/src/service/match/court-target.ts +0 -30
  99. package/src/service/match/index.ts +0 -6
  100. package/src/service/match/match-set.test.ts +0 -174
  101. package/src/service/match/match-set.ts +0 -140
  102. package/src/service/match/match-team.test.ts +0 -16
  103. package/src/service/match/match-team.ts +0 -13
  104. package/src/service/match/match.test.ts +0 -80
  105. package/src/service/match/match.ts +0 -63
  106. package/src/service/match/rally.test.ts +0 -94
  107. package/src/service/match/rally.ts +0 -79
  108. package/src/service/player/__stubs__/index.ts +0 -1433
  109. package/src/service/player/index.ts +0 -5
  110. package/src/service/player/performance-stats.test.ts +0 -24
  111. package/src/service/player/performance-stats.ts +0 -47
  112. package/src/service/player/player.test.ts +0 -51
  113. package/src/service/player/player.ts +0 -101
  114. package/src/service/player/role.test.ts +0 -29
  115. package/src/service/player/role.ts +0 -33
  116. package/src/service/player/stats.test.ts +0 -23
  117. package/src/service/player/stats.ts +0 -29
  118. package/src/service/player/trait.test.ts +0 -10
  119. package/src/service/player/trait.ts +0 -124
  120. package/src/service/team/__stubs__/index.ts +0 -290
  121. package/src/service/team/index.ts +0 -1
  122. package/src/service/team/team.test.ts +0 -30
  123. package/src/service/team/team.ts +0 -45
  124. package/src/service/utils/enum-utils.test.ts +0 -10
  125. package/src/service/utils/enum-utils.ts +0 -6
  126. package/src/service/utils/index.ts +0 -4
  127. package/src/service/utils/object-utils.ts +0 -1
  128. package/src/service/utils/rng-utils.test.ts +0 -32
  129. package/src/service/utils/rng-utils.ts +0 -41
  130. package/src/service/utils/string-utils.test.ts +0 -28
  131. package/src/service/utils/string-utils.ts +0 -13
  132. package/src/service/utils/testing-utils.ts +0 -2
@@ -1,80 +0,0 @@
1
- import { describe, expect, test } from '@jest/globals'
2
- import { Match } from './match'
3
- import { noLiberoTeam, team } from '../team/__stubs__'
4
- import { Team } from '../team'
5
- import { finishedSet, inProgressSet, newSet } from './__stubs__'
6
- import { MatchTeam } from './match-team'
7
-
8
- describe('Match Test Module', () => {
9
- let match: Match
10
-
11
- beforeEach(() => {
12
- match = new Match({
13
- id: '1f7f63bc-6bfd-4f3d-bc46-b8c6d210664e',
14
- sets: [],
15
- homeTeam: team,
16
- awayTeam: noLiberoTeam,
17
- scheduledDate: new Date('2020-01-01')
18
- })
19
- })
20
-
21
- test('Should instantiate object properly', () => {
22
- expect(match.id).toBe('1f7f63bc-6bfd-4f3d-bc46-b8c6d210664e')
23
- expect(match.homeTeam.id).toBe(team.id)
24
- expect(match.awayTeam.id).toBe(noLiberoTeam.id)
25
- expect(match.sets.length).toBe(0)
26
- expect(match.scheduledDate.toUTCString()).toBe('Wed, 01 Jan 2020 00:00:00 GMT')
27
- })
28
- // addSet Tests
29
- test('Should add a set to sets array', () => {
30
- expect(match.sets.length).toBe(0)
31
- match.addSet(newSet)
32
- expect(match.sets.length).toBe(1)
33
- })
34
- test('Should throw an Error when trying to add a set after limit was reached', () => {
35
- match.addSet(newSet)
36
- match.addSet(newSet)
37
- match.addSet(newSet)
38
-
39
- function add (): void { match.addSet(newSet) }
40
-
41
- expect(add).toThrow(/^SET_AMOUNT_EXCEEDED$/)
42
- })
43
- // getTeamSets Tests
44
- test('Should return proper amount of sets per team', () => {
45
- expect(match.getTeamSets(MatchTeam.HOME)).toBe(0)
46
- match.addSet(finishedSet)
47
- expect(match.getTeamSets(MatchTeam.HOME)).toBe(1)
48
- expect(match.getTeamSets(MatchTeam.AWAY)).toBe(0)
49
- match.addSet(inProgressSet)
50
- expect(match.getTeamSets(MatchTeam.AWAY)).toBe(0)
51
- })
52
- // isOver Tests
53
- test('Should return false when match is not over', () => {
54
- expect(match.isOver()).toBe(false)
55
- match.addSet(finishedSet)
56
- expect(match.isOver()).toBe(false)
57
- })
58
- test('Should return true when match is over', () => {
59
- match.addSet(finishedSet)
60
- match.addSet(finishedSet)
61
- match.addSet(finishedSet)
62
-
63
- expect(match.isOver()).toBe(true)
64
- })
65
- // getWinner Tests
66
- test('Should throw an Error when getting winner of unfinished match', () => {
67
- function win (): void { match.getWinner() }
68
-
69
- expect(win).toThrow(/^UNFINISHED_MATCH$/)
70
- })
71
- test('Should return winning team', () => {
72
- match.addSet(finishedSet)
73
- match.addSet(finishedSet)
74
- match.addSet(finishedSet)
75
-
76
- const winner: Team = match.getWinner()
77
-
78
- expect(winner.id).toBe('426b5b9b-5be7-4963-92eb-71b7a3b29ffd')
79
- })
80
- })
@@ -1,63 +0,0 @@
1
- import { MatchSet } from './match-set'
2
- import { Team } from '../team'
3
- import { validateUUID } from '../utils'
4
- import { MatchTeam } from './match-team'
5
-
6
- interface MatchOpts {
7
- readonly id: string
8
- readonly homeTeam: Team
9
- readonly awayTeam: Team
10
- readonly scheduledDate: Date
11
- readonly sets: MatchSet[]
12
- }
13
-
14
- export class Match {
15
- static readonly BEST_OF = 5
16
- readonly id: string
17
- readonly homeTeam: Team
18
- readonly awayTeam: Team
19
- readonly sets: MatchSet[]
20
- readonly scheduledDate: Date
21
-
22
- constructor ({ id, homeTeam, awayTeam, scheduledDate, sets }: MatchOpts) {
23
- validateUUID(id)
24
-
25
- this.id = id
26
- this.homeTeam = homeTeam
27
- this.awayTeam = awayTeam
28
- this.scheduledDate = scheduledDate
29
- this.sets = sets
30
- }
31
-
32
- public addSet (set: MatchSet): void {
33
- if (this.sets.length >= Match.BEST_OF) throw new Error('SET_AMOUNT_EXCEEDED')
34
-
35
- this.sets.push(set)
36
- }
37
-
38
- public getTeamSets (team: MatchTeam): number {
39
- return this.sets.reduce((sets, set) => sets + (!set.isOver() ? 0 : set.getWinner() === team ? 1 : 0), 0)
40
- }
41
-
42
- public isOver (): boolean {
43
- const gamesRequired: number = Math.ceil(Match.BEST_OF / 2)
44
- const lastSet: MatchSet | undefined = this.sets.at(-1)
45
-
46
- if (lastSet == null || !lastSet.isOver() || this.sets.length < gamesRequired) return false
47
-
48
- const homeSets: number = this.getTeamSets(MatchTeam.HOME)
49
- const awaySets: number = this.getTeamSets(MatchTeam.AWAY)
50
-
51
- // Check if any of the teams has enough sets to win.
52
- return !(homeSets < gamesRequired && awaySets < gamesRequired)
53
- }
54
-
55
- public getWinner (): Team {
56
- if (!this.isOver()) throw new Error('UNFINISHED_MATCH')
57
-
58
- const homeSets: number = this.getTeamSets(MatchTeam.HOME)
59
- const awaySets: number = this.getTeamSets(MatchTeam.AWAY)
60
-
61
- return homeSets > awaySets ? this.homeTeam : this.awayTeam
62
- }
63
- }
@@ -1,94 +0,0 @@
1
- import { describe, expect, test } from '@jest/globals'
2
- import { Rally, RallyState } from './rally'
3
- import { score, serve } from '../event/__stubs__'
4
- import { EventType } from '../event/rally-event'
5
- import { team } from '../team/__stubs__'
6
-
7
- describe('Rally Test Module', () => {
8
- let rally: Rally
9
-
10
- beforeEach(() => {
11
- rally = new Rally({
12
- events: [],
13
- order: 0,
14
- servingTeam: team,
15
- id: '0ac3ba3a-d710-42dc-a1e7-7066b8df5fd9',
16
- homePlayerPosition: [],
17
- awayPlayerPosition: []
18
- })
19
- })
20
-
21
- test('Should instantiate the object properly', () => {
22
- expect(rally.id).toBe('0ac3ba3a-d710-42dc-a1e7-7066b8df5fd9')
23
- expect(rally.servingTeam.id).toBe('426b5b9b-5be7-4963-92eb-71b7a3b29ffd')
24
- expect(rally.events.length).toBe(0)
25
- expect(rally.state).toBe(0)
26
- })
27
- // nextState Tests
28
- test('Should cycle through states correctly', () => {
29
- expect(rally.state).toBe(0)
30
- rally.nextState()
31
- expect(rally.state).toBe(1)
32
- rally.nextState()
33
- expect(rally.state).toBe(2)
34
- rally.nextState()
35
- expect(rally.state).toBe(3)
36
- })
37
- test('Should throw Error when trying to get next state after FINISHED', () => {
38
- function state (): void {
39
- rally.nextState()
40
- rally.nextState()
41
- rally.nextState()
42
- rally.nextState()
43
- }
44
-
45
- expect(state).toThrow(/^CANT_GET_STATE_AFTER: FINISHED$/)
46
- })
47
- // addEvent Tests
48
- test('Should add event to event array', () => {
49
- expect(rally.events.length).toBe(0)
50
- rally.addEvent(serve)
51
- expect(rally.events.at(-1)?.eventType).toBe(EventType.SERVE)
52
- })
53
- // isOver Tests
54
- test('Should return false if rally state is not FINISHED', () => {
55
- expect(rally.state).toBe(0)
56
- expect(rally.isOver()).toBe(false)
57
- })
58
- test('Should return true if rally state is FINISHED', () => {
59
- rally.nextState()
60
- rally.nextState()
61
- rally.nextState()
62
-
63
- expect(rally.state).toBe(3)
64
- expect(rally.isOver()).toBe(true)
65
- })
66
- // getScore Tests
67
- test('Should return undefined if events array does not contain a Score', () => {
68
- rally.addEvent(serve)
69
- expect(rally.score).toBeUndefined()
70
- })
71
- test('Should return Score if events array contains a Score', () => {
72
- rally.addEvent(score)
73
- expect(rally.score).not.toBeUndefined()
74
- expect(rally.score?.eventType).toBe(EventType.SCORE)
75
- })
76
- // RallyState Tests
77
- test('Should get next state', () => {
78
- expect(RallyState.nextState(0)).toBe(1)
79
- expect(RallyState.nextState(1)).toBe(2)
80
- })
81
- test('Should throw Error for state outside range', () => {
82
- function fn1 (): void { RallyState.nextState(-1) }
83
-
84
- function fn2 (): void { RallyState.nextState(4) }
85
-
86
- expect(fn1).toThrow(/^STATE_INDEX_OUT_OF_BOUNDS$/)
87
- expect(fn2).toThrow(/^STATE_INDEX_OUT_OF_BOUNDS$/)
88
- })
89
- test('Should throw Error for last state', () => {
90
- function fn (): void { RallyState.nextState(3) }
91
-
92
- expect(fn).toThrow(/^CANT_GET_STATE_AFTER: FINISHED$/)
93
- })
94
- })
@@ -1,79 +0,0 @@
1
- import { validateUUID } from '../utils'
2
- import { Team } from '../team'
3
- import { CourtPosition } from './court-position'
4
- import { EventType, RallyEvent } from '../event/rally-event'
5
- import { Score } from '../event/score'
6
-
7
- interface RallyOpts {
8
- readonly id: string
9
- readonly order: number
10
- readonly servingTeam: Team
11
- readonly events: RallyEvent[]
12
- readonly homePlayerPosition: PlayerPosition[]
13
- readonly awayPlayerPosition: PlayerPosition[]
14
- }
15
-
16
- export interface PlayerPosition {
17
- position: CourtPosition
18
- playerId: string
19
- }
20
-
21
- export enum RallyState {
22
- NEW = 0,
23
- MANAGEMENT = 1,
24
- IN_PLAY = 2,
25
- FINISHED = 3
26
- }
27
-
28
- // eslint-disable-next-line @typescript-eslint/no-namespace
29
- export namespace RallyState {
30
- export function nextState (state: number): RallyState {
31
- if (state < 0 || state > 3) throw new Error('STATE_INDEX_OUT_OF_BOUNDS')
32
- if (state === 3) throw new Error(`CANT_GET_STATE_AFTER: ${RallyState[state]}`)
33
-
34
- return state + 1
35
- }
36
- }
37
-
38
- export class Rally {
39
- readonly id: string
40
- readonly servingTeam: Team
41
- readonly events: RallyEvent[]
42
- readonly homePlayerPosition: PlayerPosition[]
43
- readonly awayPlayerPosition: PlayerPosition[]
44
- readonly order: number
45
-
46
- constructor ({ id, order, servingTeam, homePlayerPosition, awayPlayerPosition, events }: RallyOpts) {
47
- validateUUID(id)
48
-
49
- this.id = id
50
- this.order = order
51
- this.servingTeam = servingTeam
52
- this.homePlayerPosition = homePlayerPosition
53
- this.awayPlayerPosition = awayPlayerPosition
54
- this.events = events
55
- this._state = RallyState.NEW
56
- }
57
-
58
- private _state: RallyState
59
-
60
- get state (): RallyState {
61
- return this._state
62
- }
63
-
64
- public get score (): Score | undefined {
65
- return this.events.find(e => e.eventType === EventType.SCORE) as Score
66
- }
67
-
68
- public isOver (): boolean {
69
- return this._state === RallyState.FINISHED
70
- }
71
-
72
- public addEvent (event: RallyEvent): void {
73
- this.events.push(event)
74
- }
75
-
76
- public nextState (): void {
77
- this._state = RallyState.nextState(this._state)
78
- }
79
- }