volleyballsimtypes 0.0.98 → 0.0.100
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.
- package/dist/cjs/src/api/events.d.ts +0 -2
- package/dist/cjs/src/data/init-models.js +0 -13
- package/dist/cjs/src/data/models/block.d.ts +1 -28
- package/dist/cjs/src/data/models/block.js +0 -8
- package/dist/cjs/src/data/models/index.d.ts +0 -1
- package/dist/cjs/src/data/models/index.js +0 -1
- package/dist/cjs/src/data/models/reception.d.ts +1 -28
- package/dist/cjs/src/data/models/reception.js +0 -8
- package/dist/cjs/src/data/models/serve.d.ts +1 -28
- package/dist/cjs/src/data/models/serve.js +0 -8
- package/dist/cjs/src/data/models/set.d.ts +1 -28
- package/dist/cjs/src/data/models/set.js +0 -8
- package/dist/cjs/src/data/models/spike.d.ts +1 -28
- package/dist/cjs/src/data/models/spike.js +0 -8
- package/dist/cjs/src/data/models/trait.d.ts +1 -23
- package/dist/cjs/src/data/models/trait.js +0 -20
- package/dist/cjs/src/data/transformers/block.js +4 -14
- package/dist/cjs/src/data/transformers/reception.js +4 -14
- package/dist/cjs/src/data/transformers/serve.js +4 -14
- package/dist/cjs/src/data/transformers/set.js +5 -15
- package/dist/cjs/src/data/transformers/spike.js +4 -14
- package/dist/cjs/src/data/transformers/trait.js +1 -6
- package/dist/cjs/src/service/match/__stubs__/index.js +0 -3
- package/dist/cjs/src/service/match/match-set.d.ts +0 -11
- package/dist/cjs/src/service/match/match-set.js +1 -30
- package/dist/cjs/src/service/match/match-set.test.js +0 -50
- package/dist/cjs/src/service/match/rally.d.ts +1 -15
- package/dist/cjs/src/service/match/rally.js +3 -31
- package/dist/cjs/src/service/match/rally.test.js +3 -50
- package/dist/esm/src/api/events.d.ts +0 -2
- package/dist/esm/src/data/init-models.js +1 -14
- package/dist/esm/src/data/models/block.d.ts +1 -28
- package/dist/esm/src/data/models/block.js +0 -8
- package/dist/esm/src/data/models/index.d.ts +0 -1
- package/dist/esm/src/data/models/index.js +0 -1
- package/dist/esm/src/data/models/reception.d.ts +1 -28
- package/dist/esm/src/data/models/reception.js +0 -8
- package/dist/esm/src/data/models/serve.d.ts +1 -28
- package/dist/esm/src/data/models/serve.js +0 -8
- package/dist/esm/src/data/models/set.d.ts +1 -28
- package/dist/esm/src/data/models/set.js +0 -8
- package/dist/esm/src/data/models/spike.d.ts +1 -28
- package/dist/esm/src/data/models/spike.js +0 -8
- package/dist/esm/src/data/models/trait.d.ts +1 -23
- package/dist/esm/src/data/models/trait.js +0 -20
- package/dist/esm/src/data/transformers/block.js +5 -15
- package/dist/esm/src/data/transformers/reception.js +5 -15
- package/dist/esm/src/data/transformers/serve.js +5 -15
- package/dist/esm/src/data/transformers/set.js +6 -16
- package/dist/esm/src/data/transformers/spike.js +5 -15
- package/dist/esm/src/data/transformers/trait.js +1 -6
- package/dist/esm/src/service/match/__stubs__/index.js +0 -3
- package/dist/esm/src/service/match/match-set.d.ts +0 -11
- package/dist/esm/src/service/match/match-set.js +0 -29
- package/dist/esm/src/service/match/match-set.test.js +1 -51
- package/dist/esm/src/service/match/rally.d.ts +1 -15
- package/dist/esm/src/service/match/rally.js +1 -29
- package/dist/esm/src/service/match/rally.test.js +2 -49
- package/package.json +1 -1
- package/dist/cjs/src/data/models/event-trait.d.ts +0 -50
- package/dist/cjs/src/data/models/event-trait.js +0 -77
- package/dist/esm/src/data/models/event-trait.d.ts +0 -50
- package/dist/esm/src/data/models/event-trait.js +0 -73
|
@@ -42,23 +42,15 @@ function transformFromServeType(type) {
|
|
|
42
42
|
return service_1.ServeTypeEnum[type];
|
|
43
43
|
}
|
|
44
44
|
function transformToAttributes(event, rallyId) {
|
|
45
|
-
const eventTraits = event.activeTraits.map(trait => ({
|
|
46
|
-
event_id: event.id,
|
|
47
|
-
serve_id: event.id,
|
|
48
|
-
trait_id: trait.id
|
|
49
|
-
}));
|
|
50
45
|
return {
|
|
51
46
|
event_id: event.id,
|
|
52
47
|
player_id: event.player.id,
|
|
53
48
|
rally_id: rallyId,
|
|
54
49
|
order: event.order,
|
|
55
|
-
modifier: event.modifier,
|
|
56
|
-
score: event.score,
|
|
57
50
|
target: (0, _1.transformFromCourtTarget)(event.target),
|
|
58
51
|
failure: transformToServeFailure(event.failure),
|
|
59
52
|
type: transformToServeType(event.type),
|
|
60
53
|
event_type: (0, _1.transformFromEventType)(event.eventType),
|
|
61
|
-
EventTraits: eventTraits
|
|
62
54
|
};
|
|
63
55
|
}
|
|
64
56
|
exports.transformFromServe = transformToAttributes;
|
|
@@ -70,10 +62,10 @@ function transformToObject(serve) {
|
|
|
70
62
|
type: transformFromServeType(serve.type),
|
|
71
63
|
player: (0, _1.transformToPlayer)(serve.player),
|
|
72
64
|
target: (0, _1.transformToCourtTarget)(serve.target),
|
|
73
|
-
modifier: serve.modifier,
|
|
74
65
|
order: serve.order,
|
|
75
|
-
|
|
76
|
-
|
|
66
|
+
modifier: 1,
|
|
67
|
+
score: 1,
|
|
68
|
+
activeTraits: []
|
|
77
69
|
});
|
|
78
70
|
}
|
|
79
71
|
exports.transformToServe = transformToObject;
|
|
@@ -85,9 +77,7 @@ function transformToAPIObject(event) {
|
|
|
85
77
|
type: transformFromServeType(event.type),
|
|
86
78
|
playerId: event.player_id,
|
|
87
79
|
target: (0, _1.transformToCourtTarget)(event.target),
|
|
88
|
-
|
|
89
|
-
order: event.order,
|
|
90
|
-
score: event.score
|
|
80
|
+
order: event.order
|
|
91
81
|
};
|
|
92
82
|
}
|
|
93
83
|
exports.transformToAPIServe = transformToAPIObject;
|
|
@@ -40,23 +40,15 @@ function transformFromSetType(type) {
|
|
|
40
40
|
return service_1.SetTypeEnum[type];
|
|
41
41
|
}
|
|
42
42
|
function transformToAttributes(event, rallyId) {
|
|
43
|
-
const eventTraits = event.activeTraits.map(trait => ({
|
|
44
|
-
event_id: event.id,
|
|
45
|
-
set_id: event.id,
|
|
46
|
-
trait_id: trait.id
|
|
47
|
-
}));
|
|
48
43
|
return {
|
|
49
44
|
event_id: event.id,
|
|
50
45
|
player_id: event.player.id,
|
|
51
46
|
rally_id: rallyId,
|
|
52
47
|
order: event.order,
|
|
53
|
-
modifier: event.modifier,
|
|
54
|
-
score: event.score,
|
|
55
48
|
target: (0, _1.transformFromCourtTarget)(event.target),
|
|
56
49
|
failure: transformToSetFailure(event.failure),
|
|
57
50
|
type: transformToSetType(event.type),
|
|
58
|
-
event_type: (0, _1.transformFromEventType)(event.eventType)
|
|
59
|
-
EventTraits: eventTraits
|
|
51
|
+
event_type: (0, _1.transformFromEventType)(event.eventType)
|
|
60
52
|
};
|
|
61
53
|
}
|
|
62
54
|
exports.transformFromSet = transformToAttributes;
|
|
@@ -68,10 +60,10 @@ function transformToObject(set) {
|
|
|
68
60
|
type: transformFromSetType(set.type),
|
|
69
61
|
player: (0, _1.transformToPlayer)(set.player),
|
|
70
62
|
target: (0, _1.transformToCourtTarget)(set.target),
|
|
71
|
-
modifier: set.modifier,
|
|
72
63
|
order: set.order,
|
|
73
|
-
|
|
74
|
-
|
|
64
|
+
modifier: 1,
|
|
65
|
+
score: 1,
|
|
66
|
+
activeTraits: []
|
|
75
67
|
});
|
|
76
68
|
}
|
|
77
69
|
exports.transformToSet = transformToObject;
|
|
@@ -83,9 +75,7 @@ function transformToAPIObject(event) {
|
|
|
83
75
|
type: transformFromSetType(event.type),
|
|
84
76
|
playerId: event.player_id,
|
|
85
77
|
target: (0, _1.transformToCourtTarget)(event.target),
|
|
86
|
-
|
|
87
|
-
order: event.order,
|
|
88
|
-
score: event.score
|
|
78
|
+
order: event.order
|
|
89
79
|
};
|
|
90
80
|
}
|
|
91
81
|
exports.transformToAPISet = transformToAPIObject;
|
|
@@ -44,23 +44,15 @@ function transformFromSpikeType(type) {
|
|
|
44
44
|
return service_1.SpikeTypeEnum[type];
|
|
45
45
|
}
|
|
46
46
|
function transformToAttributes(event, rallyId) {
|
|
47
|
-
const eventTraits = event.activeTraits.map(trait => ({
|
|
48
|
-
event_id: event.id,
|
|
49
|
-
spike_id: event.id,
|
|
50
|
-
trait_id: trait.id
|
|
51
|
-
}));
|
|
52
47
|
return {
|
|
53
48
|
event_id: event.id,
|
|
54
49
|
player_id: event.player.id,
|
|
55
50
|
rally_id: rallyId,
|
|
56
51
|
order: event.order,
|
|
57
|
-
modifier: event.modifier,
|
|
58
|
-
score: event.score,
|
|
59
52
|
target: (0, _1.transformFromCourtTarget)(event.target),
|
|
60
53
|
failure: transformToSpikeFailure(event.failure),
|
|
61
54
|
type: transformToSpikeType(event.type),
|
|
62
|
-
event_type: (0, _1.transformFromEventType)(event.eventType)
|
|
63
|
-
EventTraits: eventTraits
|
|
55
|
+
event_type: (0, _1.transformFromEventType)(event.eventType)
|
|
64
56
|
};
|
|
65
57
|
}
|
|
66
58
|
exports.transformFromSpike = transformToAttributes;
|
|
@@ -72,10 +64,10 @@ function transformToObject(spike) {
|
|
|
72
64
|
type: transformFromSpikeType(spike.type),
|
|
73
65
|
player: (0, _1.transformToPlayer)(spike.player),
|
|
74
66
|
target: (0, _1.transformToCourtTarget)(spike.target),
|
|
75
|
-
modifier: spike.modifier,
|
|
76
67
|
order: spike.order,
|
|
77
|
-
|
|
78
|
-
|
|
68
|
+
modifier: 1,
|
|
69
|
+
score: 1,
|
|
70
|
+
activeTraits: []
|
|
79
71
|
});
|
|
80
72
|
}
|
|
81
73
|
exports.transformToSpike = transformToObject;
|
|
@@ -87,9 +79,7 @@ function transformToAPIObject(event) {
|
|
|
87
79
|
type: transformFromSpikeType(event.type),
|
|
88
80
|
playerId: event.player_id,
|
|
89
81
|
target: (0, _1.transformToCourtTarget)(event.target),
|
|
90
|
-
modifier: event.modifier,
|
|
91
82
|
order: event.order,
|
|
92
|
-
score: event.score
|
|
93
83
|
};
|
|
94
84
|
}
|
|
95
85
|
exports.transformToAPISpike = transformToAPIObject;
|
|
@@ -6,12 +6,7 @@ const api_1 = require("../../api");
|
|
|
6
6
|
function transformToAttributes(trait) {
|
|
7
7
|
return {
|
|
8
8
|
trait_id: trait.id,
|
|
9
|
-
name: trait.name
|
|
10
|
-
modifier: trait.modifier,
|
|
11
|
-
chance: trait.chance,
|
|
12
|
-
weight: trait.weight,
|
|
13
|
-
threshold: trait.statThreshold,
|
|
14
|
-
general_stat: trait.stat
|
|
9
|
+
name: trait.name
|
|
15
10
|
};
|
|
16
11
|
}
|
|
17
12
|
exports.transformFromTrait = transformToAttributes;
|
|
@@ -41,11 +41,9 @@ exports.finishedSet = (() => {
|
|
|
41
41
|
homeLibero: __stubs__2.libero,
|
|
42
42
|
awayLibero: __stubs__2.libero
|
|
43
43
|
});
|
|
44
|
-
set.nextState();
|
|
45
44
|
for (let i = 0; i < 25; i++) {
|
|
46
45
|
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
47
46
|
}
|
|
48
|
-
set.nextState();
|
|
49
47
|
return set;
|
|
50
48
|
})();
|
|
51
49
|
exports.inProgressSet = (() => {
|
|
@@ -60,7 +58,6 @@ exports.inProgressSet = (() => {
|
|
|
60
58
|
homeLibero: __stubs__2.libero,
|
|
61
59
|
awayLibero: __stubs__2.libero
|
|
62
60
|
});
|
|
63
|
-
set.nextState();
|
|
64
61
|
for (let i = 0; i < 20; i++) {
|
|
65
62
|
set.increaseScore(match_team_1.MatchTeam.AWAY);
|
|
66
63
|
}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { Rally } from './rally';
|
|
2
2
|
import { MatchTeam } from './match-team';
|
|
3
3
|
import { Player } from '../player';
|
|
4
|
-
export declare enum MatchSetState {
|
|
5
|
-
NEW = 0,
|
|
6
|
-
IN_PLAY = 1,
|
|
7
|
-
FINISHED = 2
|
|
8
|
-
}
|
|
9
|
-
export declare namespace MatchSetState {
|
|
10
|
-
function nextState(state: number): MatchSetState;
|
|
11
|
-
}
|
|
12
4
|
interface MatchSetOpts {
|
|
13
5
|
readonly id: string;
|
|
14
6
|
readonly order: number;
|
|
@@ -50,9 +42,7 @@ export declare class MatchSet {
|
|
|
50
42
|
private readonly scoreThreshold;
|
|
51
43
|
private homeScore;
|
|
52
44
|
private awayScore;
|
|
53
|
-
private _state;
|
|
54
45
|
constructor({ id, order, isTieBreak, homeLibero, awayLibero, stats, rallies, homeScore, awayScore }: MatchSetOpts);
|
|
55
|
-
get state(): MatchSetState;
|
|
56
46
|
getHomeScore(): number;
|
|
57
47
|
getAwayScore(): number;
|
|
58
48
|
increaseScore(team: MatchTeam): void;
|
|
@@ -62,7 +52,6 @@ export declare class MatchSet {
|
|
|
62
52
|
* @returns boolean
|
|
63
53
|
*/
|
|
64
54
|
isOver(): boolean;
|
|
65
|
-
nextState(): void;
|
|
66
55
|
/**
|
|
67
56
|
* Get the team that won the Set. Return undefined if set is not over.
|
|
68
57
|
* @returns CourtTeam
|
|
@@ -1,25 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MatchSet =
|
|
3
|
+
exports.MatchSet = void 0;
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
const match_team_1 = require("./match-team");
|
|
6
|
-
var MatchSetState;
|
|
7
|
-
(function (MatchSetState) {
|
|
8
|
-
MatchSetState[MatchSetState["NEW"] = 0] = "NEW";
|
|
9
|
-
MatchSetState[MatchSetState["IN_PLAY"] = 1] = "IN_PLAY";
|
|
10
|
-
MatchSetState[MatchSetState["FINISHED"] = 2] = "FINISHED";
|
|
11
|
-
})(MatchSetState = exports.MatchSetState || (exports.MatchSetState = {}));
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
13
|
-
(function (MatchSetState) {
|
|
14
|
-
function nextState(state) {
|
|
15
|
-
if (state < 0 || state > 2)
|
|
16
|
-
throw new Error('STATE_INDEX_OUT_OF_BOUNDS');
|
|
17
|
-
if (state === 2)
|
|
18
|
-
throw new Error(`CANT_GET_STATE_AFTER: ${MatchSetState[state]}`);
|
|
19
|
-
return state + 1;
|
|
20
|
-
}
|
|
21
|
-
MatchSetState.nextState = nextState;
|
|
22
|
-
})(MatchSetState = exports.MatchSetState || (exports.MatchSetState = {}));
|
|
23
6
|
var ScoreThreshold;
|
|
24
7
|
(function (ScoreThreshold) {
|
|
25
8
|
ScoreThreshold[ScoreThreshold["SET"] = 25] = "SET";
|
|
@@ -38,10 +21,6 @@ class MatchSet {
|
|
|
38
21
|
this.rallies = rallies;
|
|
39
22
|
this.isTieBreak = isTieBreak;
|
|
40
23
|
this.scoreThreshold = isTieBreak ? ScoreThreshold.TIE_BREAK : ScoreThreshold.SET;
|
|
41
|
-
this._state = MatchSetState.NEW;
|
|
42
|
-
}
|
|
43
|
-
get state() {
|
|
44
|
-
return this._state;
|
|
45
24
|
}
|
|
46
25
|
getHomeScore() {
|
|
47
26
|
return this.homeScore;
|
|
@@ -50,8 +29,6 @@ class MatchSet {
|
|
|
50
29
|
return this.awayScore;
|
|
51
30
|
}
|
|
52
31
|
increaseScore(team) {
|
|
53
|
-
if (this._state !== MatchSetState.IN_PLAY || this.isOver())
|
|
54
|
-
throw new Error('CANNOT_INCREASE_SCORE_OF_SET');
|
|
55
32
|
if (team === match_team_1.MatchTeam.HOME)
|
|
56
33
|
this.homeScore++;
|
|
57
34
|
else if (team === match_team_1.MatchTeam.AWAY)
|
|
@@ -70,12 +47,6 @@ class MatchSet {
|
|
|
70
47
|
return Math.abs(this.homeScore - this.awayScore) > 1 &&
|
|
71
48
|
(this.homeScore >= this.scoreThreshold || this.awayScore >= this.scoreThreshold);
|
|
72
49
|
}
|
|
73
|
-
nextState() {
|
|
74
|
-
if (this._state === 1 && !this.isOver()) {
|
|
75
|
-
throw new Error('CANNOT_ADVANCE_SET_STATE');
|
|
76
|
-
}
|
|
77
|
-
this._state = MatchSetState.nextState(this._state);
|
|
78
|
-
}
|
|
79
50
|
/**
|
|
80
51
|
* Get the team that won the Set. Return undefined if set is not over.
|
|
81
52
|
* @returns CourtTeam
|
|
@@ -35,25 +35,21 @@ const __stubs__2 = require("../player/__stubs__");
|
|
|
35
35
|
(0, globals_1.test)('Should instantiate object properly', () => {
|
|
36
36
|
(0, globals_1.expect)(set.id).toBe('4a8d1149-0157-461c-afb4-8a2d9776da5a');
|
|
37
37
|
(0, globals_1.expect)(set.rallies.length).toBe(0);
|
|
38
|
-
(0, globals_1.expect)(set.state).toBe(0);
|
|
39
38
|
(0, globals_1.expect)(set.getHomeScore()).toBe(0);
|
|
40
39
|
(0, globals_1.expect)(set.getAwayScore()).toBe(0);
|
|
41
40
|
});
|
|
42
41
|
// increaseScore Tests
|
|
43
42
|
(0, globals_1.test)('Should increase score of home team', () => {
|
|
44
|
-
set.nextState();
|
|
45
43
|
(0, globals_1.expect)(set.getHomeScore).toBe(0);
|
|
46
44
|
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
47
45
|
(0, globals_1.expect)(set.getHomeScore).toBe(1);
|
|
48
46
|
});
|
|
49
47
|
(0, globals_1.test)('Should increase score of away team', () => {
|
|
50
|
-
set.nextState();
|
|
51
48
|
(0, globals_1.expect)(set.getAwayScore).toBe(0);
|
|
52
49
|
set.increaseScore(match_team_1.MatchTeam.AWAY);
|
|
53
50
|
(0, globals_1.expect)(set.getAwayScore).toBe(1);
|
|
54
51
|
});
|
|
55
52
|
(0, globals_1.test)('Should throw Error when trying to increase score of finished set', () => {
|
|
56
|
-
set.nextState();
|
|
57
53
|
for (let i = 0; i < 25; i++)
|
|
58
54
|
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
59
55
|
function fin1() { set.increaseScore(match_team_1.MatchTeam.HOME); }
|
|
@@ -62,7 +58,6 @@ const __stubs__2 = require("../player/__stubs__");
|
|
|
62
58
|
(0, globals_1.expect)(fin2).toThrow(/^CANNOT_INCREASE_SCORE_OF_SET$/);
|
|
63
59
|
});
|
|
64
60
|
(0, globals_1.test)('Should throw Error when providing invalid team', () => {
|
|
65
|
-
set.nextState();
|
|
66
61
|
// @ts-expect-error
|
|
67
62
|
function fin() { set.increaseScore(match_team_1.MatchTeam.OTHER); }
|
|
68
63
|
(0, globals_1.expect)(fin).toThrow(/^UNKNOWN_TEAM$/);
|
|
@@ -75,14 +70,12 @@ const __stubs__2 = require("../player/__stubs__");
|
|
|
75
70
|
});
|
|
76
71
|
// isOver Tests
|
|
77
72
|
(0, globals_1.test)('Should return true for team reaching point threshold', () => {
|
|
78
|
-
set.nextState();
|
|
79
73
|
(0, globals_1.expect)(set.isOver()).toBe(false);
|
|
80
74
|
for (let i = 0; i < 25; i++)
|
|
81
75
|
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
82
76
|
(0, globals_1.expect)(set.isOver()).toBe(true);
|
|
83
77
|
});
|
|
84
78
|
(0, globals_1.test)('Should return true for both teams reaching point threshold and point difference greater than 1', () => {
|
|
85
|
-
set.nextState();
|
|
86
79
|
for (let i = 0; i < 25; i++) {
|
|
87
80
|
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
88
81
|
set.increaseScore(match_team_1.MatchTeam.AWAY);
|
|
@@ -93,60 +86,17 @@ const __stubs__2 = require("../player/__stubs__");
|
|
|
93
86
|
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
94
87
|
(0, globals_1.expect)(set.isOver()).toBe(true);
|
|
95
88
|
});
|
|
96
|
-
// nextState Tests
|
|
97
|
-
(0, globals_1.test)('Should advance to in play', () => {
|
|
98
|
-
(0, globals_1.expect)(set.state).toBe(0);
|
|
99
|
-
set.nextState();
|
|
100
|
-
(0, globals_1.expect)(set.state).toBe(1);
|
|
101
|
-
});
|
|
102
|
-
(0, globals_1.test)('Should throw Error if in play and set not over', () => {
|
|
103
|
-
set.nextState();
|
|
104
|
-
function fin() { set.nextState(); }
|
|
105
|
-
(0, globals_1.expect)(fin).toThrow(/^CANNOT_ADVANCE_SET_STATE$/);
|
|
106
|
-
});
|
|
107
|
-
(0, globals_1.test)('Should advance to FINISHED if set is over', () => {
|
|
108
|
-
set.nextState();
|
|
109
|
-
for (let i = 0; i < 25; i++)
|
|
110
|
-
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
111
|
-
set.nextState();
|
|
112
|
-
(0, globals_1.expect)(set.state).toBe(2);
|
|
113
|
-
});
|
|
114
|
-
(0, globals_1.test)('Should throw Error when trying to transition from FINISHED state', () => {
|
|
115
|
-
set.nextState();
|
|
116
|
-
for (let i = 0; i < 25; i++)
|
|
117
|
-
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
118
|
-
set.nextState();
|
|
119
|
-
function fin() { set.nextState(); }
|
|
120
|
-
(0, globals_1.expect)(fin).toThrow(/^CANT_GET_STATE_AFTER: FINISHED$/);
|
|
121
|
-
});
|
|
122
89
|
// getWinner Tests
|
|
123
90
|
(0, globals_1.test)('Should throw Error when getting winner of unfinished set', () => {
|
|
124
91
|
function fin() { set.getWinner(); }
|
|
125
92
|
(0, globals_1.expect)(fin).toThrow(/^UNFINISHED_SET$/);
|
|
126
93
|
});
|
|
127
94
|
(0, globals_1.test)('Should get correct set winner', () => {
|
|
128
|
-
set.nextState();
|
|
129
95
|
for (let i = 0; i < 25; i++)
|
|
130
96
|
set.increaseScore(match_team_1.MatchTeam.HOME);
|
|
131
97
|
(0, globals_1.expect)(set.getWinner()).toBe(match_team_1.MatchTeam.HOME);
|
|
132
|
-
tieBreakSet.nextState();
|
|
133
98
|
for (let i = 0; i < 15; i++)
|
|
134
99
|
tieBreakSet.increaseScore(match_team_1.MatchTeam.AWAY);
|
|
135
100
|
(0, globals_1.expect)(tieBreakSet.getWinner()).toBe(match_team_1.MatchTeam.AWAY);
|
|
136
101
|
});
|
|
137
|
-
// MatchSetState Tests
|
|
138
|
-
(0, globals_1.test)('Should get next state', () => {
|
|
139
|
-
(0, globals_1.expect)(match_set_1.MatchSetState.nextState(0)).toBe(1);
|
|
140
|
-
(0, globals_1.expect)(match_set_1.MatchSetState.nextState(1)).toBe(2);
|
|
141
|
-
});
|
|
142
|
-
(0, globals_1.test)('Should throw Error for state outside range', () => {
|
|
143
|
-
function fn1() { match_set_1.MatchSetState.nextState(-1); }
|
|
144
|
-
function fn2() { match_set_1.MatchSetState.nextState(3); }
|
|
145
|
-
(0, globals_1.expect)(fn1).toThrow(/^STATE_INDEX_OUT_OF_BOUNDS$/);
|
|
146
|
-
(0, globals_1.expect)(fn2).toThrow(/^STATE_INDEX_OUT_OF_BOUNDS$/);
|
|
147
|
-
});
|
|
148
|
-
(0, globals_1.test)('Should throw Error for last state', () => {
|
|
149
|
-
function fn() { match_set_1.MatchSetState.nextState(2); }
|
|
150
|
-
(0, globals_1.expect)(fn).toThrow(/^CANT_GET_STATE_AFTER: FINISHED$/);
|
|
151
|
-
});
|
|
152
102
|
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Team } from '../team';
|
|
2
2
|
import { CourtPosition } from './court-position';
|
|
3
|
-
import { RallyEvent } from '../event
|
|
4
|
-
import { Score } from '../event/score';
|
|
3
|
+
import { RallyEvent, Score } from '../event';
|
|
5
4
|
interface RallyOpts {
|
|
6
5
|
readonly id: string;
|
|
7
6
|
readonly order: number;
|
|
@@ -14,15 +13,6 @@ export interface PlayerPosition {
|
|
|
14
13
|
position: CourtPosition;
|
|
15
14
|
playerId: string;
|
|
16
15
|
}
|
|
17
|
-
export declare enum RallyState {
|
|
18
|
-
NEW = 0,
|
|
19
|
-
MANAGEMENT = 1,
|
|
20
|
-
IN_PLAY = 2,
|
|
21
|
-
FINISHED = 3
|
|
22
|
-
}
|
|
23
|
-
export declare namespace RallyState {
|
|
24
|
-
function nextState(state: number): RallyState;
|
|
25
|
-
}
|
|
26
16
|
export declare class Rally {
|
|
27
17
|
readonly id: string;
|
|
28
18
|
readonly servingTeam: Team;
|
|
@@ -30,12 +20,8 @@ export declare class Rally {
|
|
|
30
20
|
readonly homePlayerPosition: PlayerPosition[];
|
|
31
21
|
readonly awayPlayerPosition: PlayerPosition[];
|
|
32
22
|
readonly order: number;
|
|
33
|
-
private _state;
|
|
34
23
|
constructor({ id, order, servingTeam, homePlayerPosition, awayPlayerPosition, events }: RallyOpts);
|
|
35
|
-
get state(): RallyState;
|
|
36
24
|
get score(): Score | undefined;
|
|
37
|
-
isOver(): boolean;
|
|
38
25
|
addEvent(event: RallyEvent): void;
|
|
39
|
-
nextState(): void;
|
|
40
26
|
}
|
|
41
27
|
export {};
|
|
@@ -1,26 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Rally =
|
|
3
|
+
exports.Rally = void 0;
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
|
-
const
|
|
6
|
-
var RallyState;
|
|
7
|
-
(function (RallyState) {
|
|
8
|
-
RallyState[RallyState["NEW"] = 0] = "NEW";
|
|
9
|
-
RallyState[RallyState["MANAGEMENT"] = 1] = "MANAGEMENT";
|
|
10
|
-
RallyState[RallyState["IN_PLAY"] = 2] = "IN_PLAY";
|
|
11
|
-
RallyState[RallyState["FINISHED"] = 3] = "FINISHED";
|
|
12
|
-
})(RallyState = exports.RallyState || (exports.RallyState = {}));
|
|
13
|
-
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
14
|
-
(function (RallyState) {
|
|
15
|
-
function nextState(state) {
|
|
16
|
-
if (state < 0 || state > 3)
|
|
17
|
-
throw new Error('STATE_INDEX_OUT_OF_BOUNDS');
|
|
18
|
-
if (state === 3)
|
|
19
|
-
throw new Error(`CANT_GET_STATE_AFTER: ${RallyState[state]}`);
|
|
20
|
-
return state + 1;
|
|
21
|
-
}
|
|
22
|
-
RallyState.nextState = nextState;
|
|
23
|
-
})(RallyState = exports.RallyState || (exports.RallyState = {}));
|
|
5
|
+
const event_1 = require("../event");
|
|
24
6
|
class Rally {
|
|
25
7
|
constructor({ id, order, servingTeam, homePlayerPosition, awayPlayerPosition, events }) {
|
|
26
8
|
(0, utils_1.validateUUID)(id);
|
|
@@ -30,22 +12,12 @@ class Rally {
|
|
|
30
12
|
this.homePlayerPosition = homePlayerPosition;
|
|
31
13
|
this.awayPlayerPosition = awayPlayerPosition;
|
|
32
14
|
this.events = events;
|
|
33
|
-
this._state = RallyState.NEW;
|
|
34
|
-
}
|
|
35
|
-
get state() {
|
|
36
|
-
return this._state;
|
|
37
15
|
}
|
|
38
16
|
get score() {
|
|
39
|
-
return this.events.find(e => e.eventType ===
|
|
40
|
-
}
|
|
41
|
-
isOver() {
|
|
42
|
-
return this._state === RallyState.FINISHED;
|
|
17
|
+
return this.events.find(e => e.eventType === event_1.EventTypeEnum.SCORE);
|
|
43
18
|
}
|
|
44
19
|
addEvent(event) {
|
|
45
20
|
this.events.push(event);
|
|
46
21
|
}
|
|
47
|
-
nextState() {
|
|
48
|
-
this._state = RallyState.nextState(this._state);
|
|
49
|
-
}
|
|
50
22
|
}
|
|
51
23
|
exports.Rally = Rally;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const globals_1 = require("@jest/globals");
|
|
4
4
|
const rally_1 = require("./rally");
|
|
5
5
|
const __stubs__1 = require("../event/__stubs__");
|
|
6
|
-
const
|
|
6
|
+
const event_1 = require("../event");
|
|
7
7
|
const __stubs__2 = require("../team/__stubs__");
|
|
8
8
|
(0, globals_1.describe)('Rally Test Module', () => {
|
|
9
9
|
let rally;
|
|
@@ -21,44 +21,12 @@ const __stubs__2 = require("../team/__stubs__");
|
|
|
21
21
|
(0, globals_1.expect)(rally.id).toBe('0ac3ba3a-d710-42dc-a1e7-7066b8df5fd9');
|
|
22
22
|
(0, globals_1.expect)(rally.servingTeam.id).toBe('426b5b9b-5be7-4963-92eb-71b7a3b29ffd');
|
|
23
23
|
(0, globals_1.expect)(rally.events.length).toBe(0);
|
|
24
|
-
(0, globals_1.expect)(rally.state).toBe(0);
|
|
25
|
-
});
|
|
26
|
-
// nextState Tests
|
|
27
|
-
(0, globals_1.test)('Should cycle through states correctly', () => {
|
|
28
|
-
(0, globals_1.expect)(rally.state).toBe(0);
|
|
29
|
-
rally.nextState();
|
|
30
|
-
(0, globals_1.expect)(rally.state).toBe(1);
|
|
31
|
-
rally.nextState();
|
|
32
|
-
(0, globals_1.expect)(rally.state).toBe(2);
|
|
33
|
-
rally.nextState();
|
|
34
|
-
(0, globals_1.expect)(rally.state).toBe(3);
|
|
35
|
-
});
|
|
36
|
-
(0, globals_1.test)('Should throw Error when trying to get next state after FINISHED', () => {
|
|
37
|
-
function state() {
|
|
38
|
-
rally.nextState();
|
|
39
|
-
rally.nextState();
|
|
40
|
-
rally.nextState();
|
|
41
|
-
rally.nextState();
|
|
42
|
-
}
|
|
43
|
-
(0, globals_1.expect)(state).toThrow(/^CANT_GET_STATE_AFTER: FINISHED$/);
|
|
44
24
|
});
|
|
45
25
|
// addEvent Tests
|
|
46
26
|
(0, globals_1.test)('Should add event to event array', () => {
|
|
47
27
|
(0, globals_1.expect)(rally.events.length).toBe(0);
|
|
48
28
|
rally.addEvent(__stubs__1.serve);
|
|
49
|
-
(0, globals_1.expect)(rally.events.at(-1)?.eventType).toBe(
|
|
50
|
-
});
|
|
51
|
-
// isOver Tests
|
|
52
|
-
(0, globals_1.test)('Should return false if rally state is not FINISHED', () => {
|
|
53
|
-
(0, globals_1.expect)(rally.state).toBe(0);
|
|
54
|
-
(0, globals_1.expect)(rally.isOver()).toBe(false);
|
|
55
|
-
});
|
|
56
|
-
(0, globals_1.test)('Should return true if rally state is FINISHED', () => {
|
|
57
|
-
rally.nextState();
|
|
58
|
-
rally.nextState();
|
|
59
|
-
rally.nextState();
|
|
60
|
-
(0, globals_1.expect)(rally.state).toBe(3);
|
|
61
|
-
(0, globals_1.expect)(rally.isOver()).toBe(true);
|
|
29
|
+
(0, globals_1.expect)(rally.events.at(-1)?.eventType).toBe(event_1.EventTypeEnum.SERVE);
|
|
62
30
|
});
|
|
63
31
|
// getScore Tests
|
|
64
32
|
(0, globals_1.test)('Should return undefined if events array does not contain a Score', () => {
|
|
@@ -68,21 +36,6 @@ const __stubs__2 = require("../team/__stubs__");
|
|
|
68
36
|
(0, globals_1.test)('Should return Score if events array contains a Score', () => {
|
|
69
37
|
rally.addEvent(__stubs__1.score);
|
|
70
38
|
(0, globals_1.expect)(rally.score).not.toBeUndefined();
|
|
71
|
-
(0, globals_1.expect)(rally.score?.eventType).toBe(
|
|
72
|
-
});
|
|
73
|
-
// RallyState Tests
|
|
74
|
-
(0, globals_1.test)('Should get next state', () => {
|
|
75
|
-
(0, globals_1.expect)(rally_1.RallyState.nextState(0)).toBe(1);
|
|
76
|
-
(0, globals_1.expect)(rally_1.RallyState.nextState(1)).toBe(2);
|
|
77
|
-
});
|
|
78
|
-
(0, globals_1.test)('Should throw Error for state outside range', () => {
|
|
79
|
-
function fn1() { rally_1.RallyState.nextState(-1); }
|
|
80
|
-
function fn2() { rally_1.RallyState.nextState(4); }
|
|
81
|
-
(0, globals_1.expect)(fn1).toThrow(/^STATE_INDEX_OUT_OF_BOUNDS$/);
|
|
82
|
-
(0, globals_1.expect)(fn2).toThrow(/^STATE_INDEX_OUT_OF_BOUNDS$/);
|
|
83
|
-
});
|
|
84
|
-
(0, globals_1.test)('Should throw Error for last state', () => {
|
|
85
|
-
function fn() { rally_1.RallyState.nextState(3); }
|
|
86
|
-
(0, globals_1.expect)(fn).toThrow(/^CANT_GET_STATE_AFTER: FINISHED$/);
|
|
39
|
+
(0, globals_1.expect)(rally.score?.eventType).toBe(event_1.EventTypeEnum.SCORE);
|
|
87
40
|
});
|
|
88
41
|
});
|
|
@@ -14,8 +14,6 @@ export interface APISubstitution extends APIEvent {
|
|
|
14
14
|
}
|
|
15
15
|
export interface APIInPlayEvent extends APIEvent {
|
|
16
16
|
readonly target: CourtTargetEnum;
|
|
17
|
-
readonly modifier: number;
|
|
18
|
-
readonly score: number;
|
|
19
17
|
}
|
|
20
18
|
export interface APIScore extends APIEvent {
|
|
21
19
|
readonly teamId: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BlockModel, CoachModel, CountryModel, DraftModel, DraftPickModel, EventModel,
|
|
1
|
+
import { BlockModel, CoachModel, CountryModel, DraftModel, DraftPickModel, EventModel, IterationModel, LeagueModel, LiberoReplacementModel, MatchModel, MatchRatingModel, MatchSetModel, MatchSetStatsModel, PerformanceStatsModel, PlayerModel, PlayerTeamModel, PlayerTraitModel, RallyModel, RallyPositionModel, ReceptionModel, ScoreModel, SeasonMatchModel, SeasonModel, SeasonTeamsModel, ServeModel, SetModel, SpikeModel, SubstitutionModel, TeamModel, TournamentMatchModel, TournamentModel, TournamentTeamsModel, TraitModel, UserModel } from './models';
|
|
2
2
|
export function initModels(sequelize) {
|
|
3
3
|
const Block = BlockModel.initModel(sequelize);
|
|
4
4
|
const Coach = CoachModel.initModel(sequelize);
|
|
@@ -6,7 +6,6 @@ export function initModels(sequelize) {
|
|
|
6
6
|
const Draft = DraftModel.initModel(sequelize);
|
|
7
7
|
const DraftPick = DraftPickModel.initModel(sequelize);
|
|
8
8
|
const Event = EventModel.initModel(sequelize);
|
|
9
|
-
const EventTrait = EventTraitModel.initModel(sequelize);
|
|
10
9
|
const Iteration = IterationModel.initModel(sequelize);
|
|
11
10
|
const League = LeagueModel.initModel(sequelize);
|
|
12
11
|
const LiberoReplacement = LiberoReplacementModel.initModel(sequelize);
|
|
@@ -44,7 +43,6 @@ export function initModels(sequelize) {
|
|
|
44
43
|
Block.belongsTo(Player, { as: 'Blocker_3', foreignKey: 'blocker_3' });
|
|
45
44
|
Block.belongsTo(Player, { as: 'player', foreignKey: 'player_id' });
|
|
46
45
|
Block.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
47
|
-
Block.hasMany(EventTrait, { as: 'EventTraits', foreignKey: 'block_id' });
|
|
48
46
|
Coach.belongsTo(Country, { as: 'country', foreignKey: 'country_id' });
|
|
49
47
|
Coach.hasMany(Team, { as: 'Teams', foreignKey: 'coach_id' });
|
|
50
48
|
Country.hasMany(Coach, { as: 'Coaches', foreignKey: 'country_id' });
|
|
@@ -53,12 +51,6 @@ export function initModels(sequelize) {
|
|
|
53
51
|
Country.hasMany(Team, { as: 'Teams', foreignKey: 'country_id' });
|
|
54
52
|
Event.belongsTo(Player, { as: 'player', foreignKey: 'player_id' });
|
|
55
53
|
Event.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
56
|
-
EventTrait.belongsTo(Block, { as: 'Block', foreignKey: 'block_id' });
|
|
57
|
-
EventTrait.belongsTo(Reception, { as: 'Reception', foreignKey: 'reception_id' });
|
|
58
|
-
EventTrait.belongsTo(Serve, { as: 'Serve', foreignKey: 'serve_id' });
|
|
59
|
-
EventTrait.belongsTo(Set, { as: 'Set', foreignKey: 'set_id' });
|
|
60
|
-
EventTrait.belongsTo(Spike, { as: 'Spike', foreignKey: 'spike_id' });
|
|
61
|
-
EventTrait.belongsTo(Trait, { as: 'Trait', foreignKey: 'trait_id' });
|
|
62
54
|
Iteration.hasMany(Season, { as: 'Seasons', foreignKey: 'iteration' });
|
|
63
55
|
Iteration.hasOne(Tournament, { as: 'Tournament', foreignKey: 'iteration' });
|
|
64
56
|
League.belongsTo(Country, { as: 'country', foreignKey: 'country_id' });
|
|
@@ -166,7 +158,6 @@ export function initModels(sequelize) {
|
|
|
166
158
|
RallyPosition.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
167
159
|
Reception.belongsTo(Player, { as: 'player', foreignKey: 'player_id' });
|
|
168
160
|
Reception.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
169
|
-
Reception.hasMany(EventTrait, { as: 'EventTraits', foreignKey: 'reception_id' });
|
|
170
161
|
Score.belongsTo(Player, { as: 'player', foreignKey: 'player_id' });
|
|
171
162
|
Score.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
172
163
|
Score.belongsTo(Team, { as: 'team', foreignKey: 'team_id' });
|
|
@@ -187,13 +178,10 @@ export function initModels(sequelize) {
|
|
|
187
178
|
SeasonTeams.belongsTo(Team, { as: 'team', foreignKey: 'team_id' });
|
|
188
179
|
Serve.belongsTo(Player, { as: 'player', foreignKey: 'player_id' });
|
|
189
180
|
Serve.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
190
|
-
Serve.hasMany(EventTrait, { as: 'EventTraits', foreignKey: 'serve_id' });
|
|
191
181
|
Set.belongsTo(Player, { as: 'player', foreignKey: 'player_id' });
|
|
192
182
|
Set.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
193
|
-
Set.hasMany(EventTrait, { as: 'EventTraits', foreignKey: 'set_id' });
|
|
194
183
|
Spike.belongsTo(Player, { as: 'player', foreignKey: 'player_id' });
|
|
195
184
|
Spike.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
196
|
-
Spike.hasMany(EventTrait, { as: 'EventTraits', foreignKey: 'spike_id' });
|
|
197
185
|
Substitution.belongsTo(Player, { as: 'player', foreignKey: 'player_id' });
|
|
198
186
|
Substitution.belongsTo(Player, { as: 'playerOut', foreignKey: 'player_out' });
|
|
199
187
|
Substitution.belongsTo(Rally, { as: 'rally', foreignKey: 'rally_id' });
|
|
@@ -256,7 +244,6 @@ export function initModels(sequelize) {
|
|
|
256
244
|
otherKey: 'player_id'
|
|
257
245
|
});
|
|
258
246
|
Trait.hasMany(PlayerTrait, { as: 'PlayerTraits', foreignKey: 'trait_id' });
|
|
259
|
-
Trait.hasMany(EventTrait, { as: 'EventTraits', foreignKey: 'trait_id' });
|
|
260
247
|
return {
|
|
261
248
|
Block,
|
|
262
249
|
Coach,
|