volleyballsimtypes 0.0.174 → 0.0.176

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 (71) hide show
  1. package/dist/cjs/src/data/transformers/events.d.ts +8 -0
  2. package/dist/cjs/src/data/transformers/events.js +75 -0
  3. package/dist/cjs/src/data/transformers/match-set-stats.d.ts +1 -1
  4. package/dist/cjs/src/data/transformers/match-set-stats.js +5 -4
  5. package/dist/cjs/src/data/transformers/player.d.ts +3 -1
  6. package/dist/cjs/src/data/transformers/player.js +50 -2
  7. package/dist/cjs/src/data/transformers/rally.js +31 -1
  8. package/dist/cjs/src/data/transformers/team.d.ts +1 -1
  9. package/dist/cjs/src/data/transformers/team.js +9 -8
  10. package/dist/cjs/src/service/event/block.d.ts +36 -0
  11. package/dist/cjs/src/service/event/block.js +37 -0
  12. package/dist/cjs/src/service/event/in-play-event.d.ts +17 -0
  13. package/dist/cjs/src/service/event/in-play-event.js +21 -0
  14. package/dist/cjs/src/service/event/index.d.ts +8 -1
  15. package/dist/cjs/src/service/event/index.js +8 -1
  16. package/dist/cjs/src/service/event/libero-replacement.d.ts +18 -0
  17. package/dist/cjs/src/service/event/libero-replacement.js +25 -0
  18. package/dist/cjs/src/service/event/rally-event.d.ts +13 -4
  19. package/dist/cjs/src/service/event/rally-event.js +13 -3
  20. package/dist/cjs/src/service/event/reception.d.ts +33 -0
  21. package/dist/cjs/src/service/event/reception.js +34 -0
  22. package/dist/cjs/src/service/event/serve.d.ts +33 -0
  23. package/dist/cjs/src/service/event/serve.js +34 -0
  24. package/dist/cjs/src/service/event/set.d.ts +31 -0
  25. package/dist/cjs/src/service/event/set.js +32 -0
  26. package/dist/cjs/src/service/event/spike.d.ts +35 -0
  27. package/dist/cjs/src/service/event/spike.js +36 -0
  28. package/dist/cjs/src/service/event/substitution.d.ts +11 -0
  29. package/dist/cjs/src/service/event/substitution.js +18 -0
  30. package/dist/cjs/src/service/match/match-set.d.ts +4 -3
  31. package/dist/cjs/src/service/match/match-set.js +1 -1
  32. package/dist/cjs/src/service/player/player.d.ts +4 -1
  33. package/dist/cjs/src/service/player/player.js +2 -1
  34. package/dist/esm/src/data/transformers/events.d.ts +8 -0
  35. package/dist/esm/src/data/transformers/events.js +65 -0
  36. package/dist/esm/src/data/transformers/match-set-stats.d.ts +1 -1
  37. package/dist/esm/src/data/transformers/match-set-stats.js +5 -4
  38. package/dist/esm/src/data/transformers/player.d.ts +3 -1
  39. package/dist/esm/src/data/transformers/player.js +48 -2
  40. package/dist/esm/src/data/transformers/rally.js +31 -1
  41. package/dist/esm/src/data/transformers/team.d.ts +1 -1
  42. package/dist/esm/src/data/transformers/team.js +10 -9
  43. package/dist/esm/src/service/event/block.d.ts +36 -0
  44. package/dist/esm/src/service/event/block.js +33 -0
  45. package/dist/esm/src/service/event/in-play-event.d.ts +17 -0
  46. package/dist/esm/src/service/event/in-play-event.js +17 -0
  47. package/dist/esm/src/service/event/index.d.ts +8 -1
  48. package/dist/esm/src/service/event/index.js +8 -1
  49. package/dist/esm/src/service/event/libero-replacement.d.ts +18 -0
  50. package/dist/esm/src/service/event/libero-replacement.js +21 -0
  51. package/dist/esm/src/service/event/rally-event.d.ts +13 -4
  52. package/dist/esm/src/service/event/rally-event.js +12 -2
  53. package/dist/esm/src/service/event/reception.d.ts +33 -0
  54. package/dist/esm/src/service/event/reception.js +30 -0
  55. package/dist/esm/src/service/event/serve.d.ts +33 -0
  56. package/dist/esm/src/service/event/serve.js +30 -0
  57. package/dist/esm/src/service/event/set.d.ts +31 -0
  58. package/dist/esm/src/service/event/set.js +28 -0
  59. package/dist/esm/src/service/event/spike.d.ts +35 -0
  60. package/dist/esm/src/service/event/spike.js +32 -0
  61. package/dist/esm/src/service/event/substitution.d.ts +11 -0
  62. package/dist/esm/src/service/event/substitution.js +14 -0
  63. package/dist/esm/src/service/match/match-set.d.ts +4 -3
  64. package/dist/esm/src/service/match/match-set.js +1 -1
  65. package/dist/esm/src/service/player/player.d.ts +4 -1
  66. package/dist/esm/src/service/player/player.js +2 -1
  67. package/package.json +1 -1
  68. package/dist/cjs/src/service/event/events.d.ts +0 -93
  69. package/dist/cjs/src/service/event/events.js +0 -94
  70. package/dist/esm/src/service/event/events.d.ts +0 -93
  71. package/dist/esm/src/service/event/events.js +0 -91
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Serve = exports.ServeFailureEnum = exports.ServeTypeEnum = void 0;
4
+ const rally_event_1 = require("./rally-event");
5
+ const in_play_event_1 = require("./in-play-event");
6
+ var ServeTypeEnum;
7
+ (function (ServeTypeEnum) {
8
+ ServeTypeEnum[ServeTypeEnum["OVERHAND_TOPSPIN"] = 0] = "OVERHAND_TOPSPIN";
9
+ ServeTypeEnum[ServeTypeEnum["OVERHAND_FLOAT"] = 1] = "OVERHAND_FLOAT";
10
+ ServeTypeEnum[ServeTypeEnum["JUMP_TOPSPIN"] = 2] = "JUMP_TOPSPIN";
11
+ ServeTypeEnum[ServeTypeEnum["JUMP_FLOAT"] = 3] = "JUMP_FLOAT";
12
+ })(ServeTypeEnum = exports.ServeTypeEnum || (exports.ServeTypeEnum = {}));
13
+ var ServeFailureEnum;
14
+ (function (ServeFailureEnum) {
15
+ ServeFailureEnum[ServeFailureEnum["NO_FAILURE"] = 0] = "NO_FAILURE";
16
+ ServeFailureEnum[ServeFailureEnum["FAULT"] = 1] = "FAULT";
17
+ ServeFailureEnum[ServeFailureEnum["MISS"] = 2] = "MISS";
18
+ ServeFailureEnum[ServeFailureEnum["NET"] = 3] = "NET";
19
+ ServeFailureEnum[ServeFailureEnum["OUT_OF_BOUNDS"] = 4] = "OUT_OF_BOUNDS";
20
+ })(ServeFailureEnum = exports.ServeFailureEnum || (exports.ServeFailureEnum = {}));
21
+ const eventType = rally_event_1.EventTypeEnum.SERVE;
22
+ class Serve extends in_play_event_1.InPlayEvent {
23
+ constructor({ score, playerId, target, failure, type, activeTraits }) {
24
+ super({ score, playerId, target, activeTraits, eventType });
25
+ this.type = type;
26
+ this.failure = failure;
27
+ }
28
+ toString() {
29
+ const failure = `"failure":${this.failure}`;
30
+ const type = `"type":${this.type}`;
31
+ return `{${this._toString()},${failure},${type}}`;
32
+ }
33
+ }
34
+ exports.Serve = Serve;
@@ -0,0 +1,31 @@
1
+ import { CourtTarget } from '../match';
2
+ import { Trait } from '../player';
3
+ import { InPlayEvent } from './in-play-event';
4
+ export declare enum SetTypeEnum {
5
+ OVERHAND = 0,
6
+ DUMP = 1
7
+ }
8
+ export type SetType = SetTypeEnum.OVERHAND | SetTypeEnum.DUMP;
9
+ export declare enum SetFailureEnum {
10
+ NO_FAILURE = 0,
11
+ FAULT = 1,
12
+ MISS = 2,
13
+ BAD_PASS = 3,
14
+ OUT_OF_BOUNDS = 4
15
+ }
16
+ export type SetFailure = SetFailureEnum.NO_FAILURE | SetFailureEnum.FAULT | SetFailureEnum.MISS | SetFailureEnum.BAD_PASS | SetFailureEnum.OUT_OF_BOUNDS;
17
+ interface SetOpts {
18
+ readonly type: SetType;
19
+ readonly failure: SetFailure;
20
+ readonly target: CourtTarget;
21
+ readonly score: number;
22
+ readonly activeTraits: Trait[];
23
+ readonly playerId: string;
24
+ }
25
+ export declare class Set extends InPlayEvent<SetFailure, SetType> {
26
+ readonly failure: SetFailure;
27
+ readonly type: SetType;
28
+ constructor({ score, playerId, target, failure, type, activeTraits }: SetOpts);
29
+ toString(): string;
30
+ }
31
+ export {};
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Set = exports.SetFailureEnum = exports.SetTypeEnum = void 0;
4
+ const rally_event_1 = require("./rally-event");
5
+ const in_play_event_1 = require("./in-play-event");
6
+ var SetTypeEnum;
7
+ (function (SetTypeEnum) {
8
+ SetTypeEnum[SetTypeEnum["OVERHAND"] = 0] = "OVERHAND";
9
+ SetTypeEnum[SetTypeEnum["DUMP"] = 1] = "DUMP";
10
+ })(SetTypeEnum = exports.SetTypeEnum || (exports.SetTypeEnum = {}));
11
+ var SetFailureEnum;
12
+ (function (SetFailureEnum) {
13
+ SetFailureEnum[SetFailureEnum["NO_FAILURE"] = 0] = "NO_FAILURE";
14
+ SetFailureEnum[SetFailureEnum["FAULT"] = 1] = "FAULT";
15
+ SetFailureEnum[SetFailureEnum["MISS"] = 2] = "MISS";
16
+ SetFailureEnum[SetFailureEnum["BAD_PASS"] = 3] = "BAD_PASS";
17
+ SetFailureEnum[SetFailureEnum["OUT_OF_BOUNDS"] = 4] = "OUT_OF_BOUNDS";
18
+ })(SetFailureEnum = exports.SetFailureEnum || (exports.SetFailureEnum = {}));
19
+ const eventType = rally_event_1.EventTypeEnum.SET;
20
+ class Set extends in_play_event_1.InPlayEvent {
21
+ constructor({ score, playerId, target, failure, type, activeTraits }) {
22
+ super({ score, playerId, target, activeTraits, eventType });
23
+ this.type = type;
24
+ this.failure = failure;
25
+ }
26
+ toString() {
27
+ const failure = `"failure":${this.failure}`;
28
+ const type = `"type":${this.type}`;
29
+ return `{${this._toString()},${failure},${type}}`;
30
+ }
31
+ }
32
+ exports.Set = Set;
@@ -0,0 +1,35 @@
1
+ import { CourtTarget } from '../match';
2
+ import { Trait } from '../player';
3
+ import { InPlayEvent } from './in-play-event';
4
+ export declare enum SpikeTypeEnum {
5
+ CROSS_SHOT = 0,
6
+ LINE_SHOT = 1,
7
+ REVERSE_CROSS = 2,
8
+ TIP = 3,
9
+ DOWN_BALL = 4,
10
+ OVERHAND = 5
11
+ }
12
+ export type SpikeType = SpikeTypeEnum.CROSS_SHOT | SpikeTypeEnum.LINE_SHOT | SpikeTypeEnum.REVERSE_CROSS | SpikeTypeEnum.TIP | SpikeTypeEnum.DOWN_BALL | SpikeTypeEnum.OVERHAND;
13
+ export declare enum SpikeFailureEnum {
14
+ NO_FAILURE = 0,
15
+ FAULT = 1,
16
+ MISS = 2,
17
+ OUT_OF_BOUNDS = 3,
18
+ NET = 4
19
+ }
20
+ export type SpikeFailure = SpikeFailureEnum.NO_FAILURE | SpikeFailureEnum.FAULT | SpikeFailureEnum.MISS | SpikeFailureEnum.OUT_OF_BOUNDS | SpikeFailureEnum.NET;
21
+ interface SpikeOpts {
22
+ readonly type: SpikeType;
23
+ readonly failure: SpikeFailure;
24
+ readonly target: CourtTarget;
25
+ readonly score: number;
26
+ readonly activeTraits: Trait[];
27
+ readonly playerId: string;
28
+ }
29
+ export declare class Spike extends InPlayEvent<SpikeFailure, SpikeType> {
30
+ readonly failure: SpikeFailure;
31
+ readonly type: SpikeType;
32
+ constructor({ score, playerId, target, failure, type, activeTraits }: SpikeOpts);
33
+ toString(): string;
34
+ }
35
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Spike = exports.SpikeFailureEnum = exports.SpikeTypeEnum = void 0;
4
+ const rally_event_1 = require("./rally-event");
5
+ const in_play_event_1 = require("./in-play-event");
6
+ var SpikeTypeEnum;
7
+ (function (SpikeTypeEnum) {
8
+ SpikeTypeEnum[SpikeTypeEnum["CROSS_SHOT"] = 0] = "CROSS_SHOT";
9
+ SpikeTypeEnum[SpikeTypeEnum["LINE_SHOT"] = 1] = "LINE_SHOT";
10
+ SpikeTypeEnum[SpikeTypeEnum["REVERSE_CROSS"] = 2] = "REVERSE_CROSS";
11
+ SpikeTypeEnum[SpikeTypeEnum["TIP"] = 3] = "TIP";
12
+ SpikeTypeEnum[SpikeTypeEnum["DOWN_BALL"] = 4] = "DOWN_BALL";
13
+ SpikeTypeEnum[SpikeTypeEnum["OVERHAND"] = 5] = "OVERHAND";
14
+ })(SpikeTypeEnum = exports.SpikeTypeEnum || (exports.SpikeTypeEnum = {}));
15
+ var SpikeFailureEnum;
16
+ (function (SpikeFailureEnum) {
17
+ SpikeFailureEnum[SpikeFailureEnum["NO_FAILURE"] = 0] = "NO_FAILURE";
18
+ SpikeFailureEnum[SpikeFailureEnum["FAULT"] = 1] = "FAULT";
19
+ SpikeFailureEnum[SpikeFailureEnum["MISS"] = 2] = "MISS";
20
+ SpikeFailureEnum[SpikeFailureEnum["OUT_OF_BOUNDS"] = 3] = "OUT_OF_BOUNDS";
21
+ SpikeFailureEnum[SpikeFailureEnum["NET"] = 4] = "NET";
22
+ })(SpikeFailureEnum = exports.SpikeFailureEnum || (exports.SpikeFailureEnum = {}));
23
+ const eventType = rally_event_1.EventTypeEnum.SPIKE;
24
+ class Spike extends in_play_event_1.InPlayEvent {
25
+ constructor({ score, playerId, target, failure, type, activeTraits }) {
26
+ super({ score, playerId, target, activeTraits, eventType });
27
+ this.type = type;
28
+ this.failure = failure;
29
+ }
30
+ toString() {
31
+ const failure = `"failure":${this.failure}`;
32
+ const type = `"type":${this.type}`;
33
+ return `{${this._toString()},${failure},${type}}`;
34
+ }
35
+ }
36
+ exports.Spike = Spike;
@@ -0,0 +1,11 @@
1
+ import { RallyEvent } from './rally-event';
2
+ interface SubstitutionOpts {
3
+ readonly playerOut: string;
4
+ readonly playerId: string;
5
+ }
6
+ export declare class Substitution extends RallyEvent {
7
+ readonly playerOut: string;
8
+ constructor({ playerOut, playerId }: SubstitutionOpts);
9
+ toString(): string;
10
+ }
11
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Substitution = void 0;
4
+ const rally_event_1 = require("./rally-event");
5
+ const eventType = rally_event_1.EventTypeEnum.SUBSTITUTION;
6
+ class Substitution extends rally_event_1.RallyEvent {
7
+ constructor({ playerOut, playerId }) {
8
+ super({ eventType, playerId });
9
+ this.playerOut = playerOut;
10
+ }
11
+ toString() {
12
+ const playerId = `"playerId":"${this.playerId}"`;
13
+ const playerOut = `"playerOut":"${this.playerOut}"`;
14
+ const eventType = `"eventType":${this.eventType}`;
15
+ return `{${playerId},${playerOut},${eventType}}`;
16
+ }
17
+ }
18
+ exports.Substitution = Substitution;
@@ -1,6 +1,5 @@
1
1
  import { PlayerPosition, Rally } from './rally';
2
2
  import { MatchTeam } from './match-team';
3
- import { Player } from '../player';
4
3
  declare enum ScoreThreshold {
5
4
  SET = 25,
6
5
  TIE_BREAK = 15
@@ -21,7 +20,8 @@ export interface EventStat {
21
20
  error: number;
22
21
  }
23
22
  export interface SetStatistics {
24
- player: Player;
23
+ readonly playerId: string;
24
+ order: number;
25
25
  ace: number;
26
26
  attempts: number;
27
27
  contacts: number;
@@ -34,6 +34,7 @@ export interface SetStatistics {
34
34
  kills: number;
35
35
  killBlocks: number;
36
36
  assists: number;
37
+ setsPlayed: number;
37
38
  }
38
39
  export declare class MatchSet {
39
40
  readonly id: string;
@@ -52,7 +53,7 @@ export declare class MatchSet {
52
53
  increaseScore(team: MatchTeam): void;
53
54
  addRally(rally: Rally): void;
54
55
  /**
55
- * Has a team reached at least 25 points and is the score difference between both teams at least 2?
56
+ * Has a team reached at least 25 points, and is the score difference between both teams at least 2?
56
57
  * @returns boolean
57
58
  */
58
59
  isOver(): boolean;
@@ -40,7 +40,7 @@ class MatchSet {
40
40
  this.rallies.push(rally);
41
41
  }
42
42
  /**
43
- * Has a team reached at least 25 points and is the score difference between both teams at least 2?
43
+ * Has a team reached at least 25 points, and is the score difference between both teams at least 2?
44
44
  * @returns boolean
45
45
  */
46
46
  isOver() {
@@ -4,6 +4,7 @@ import { Country } from '../country';
4
4
  import { Rarity } from './rarity';
5
5
  import { Stats } from './stats';
6
6
  import { Role } from './role';
7
+ import { SetStatistics } from '../match';
7
8
  export declare class Stat {
8
9
  readonly name: Stats;
9
10
  readonly value: number;
@@ -21,6 +22,7 @@ interface PlayerParams {
21
22
  readonly roles: Role[];
22
23
  readonly traits: Trait[];
23
24
  readonly rarity: Rarity;
25
+ readonly gameStats?: SetStatistics[];
24
26
  }
25
27
  export declare class Name {
26
28
  readonly first: string;
@@ -40,7 +42,8 @@ export declare class Player {
40
42
  readonly traits: Trait[];
41
43
  readonly generalStats: Stat[];
42
44
  readonly rarity: Rarity;
43
- constructor({ id, name, country, stats, roles, traits, rarity }: PlayerParams);
45
+ readonly gameStats?: SetStatistics[];
46
+ constructor({ id, name, country, stats, roles, traits, rarity, gameStats }: PlayerParams);
44
47
  static sortPlayers(roles: Role[]): (p1: Player, p2: Player) => number;
45
48
  static compareStats(p1: Player, p2: Player): number;
46
49
  toString(): string;
@@ -25,7 +25,7 @@ class Name {
25
25
  }
26
26
  exports.Name = Name;
27
27
  class Player {
28
- constructor({ id, name, country, stats, roles, traits, rarity }) {
28
+ constructor({ id, name, country, stats, roles, traits, rarity, gameStats }) {
29
29
  (0, utils_1.validateUUID)(id);
30
30
  this.id = id;
31
31
  this.name = name;
@@ -34,6 +34,7 @@ class Player {
34
34
  this.roles = roles;
35
35
  this.traits = traits;
36
36
  this.rarity = rarity;
37
+ this.gameStats = gameStats;
37
38
  this.generalStats = Object.values(stats_1.StatsEnum).map((stat) => ({
38
39
  name: stat,
39
40
  value: (0, stats_1.calculateStatScore)(stats, stat)
@@ -0,0 +1,8 @@
1
+ import { Block, LiberoReplacement, Reception, Serve, Set, Spike, Substitution } from '../../service';
2
+ export declare function transformToBlock(event: any): Block;
3
+ export declare function transformToLiberoReplacement(event: any): LiberoReplacement;
4
+ export declare function transformToReception(event: any): Reception;
5
+ export declare function transformToServe(event: any): Serve;
6
+ export declare function transformToSet(event: any): Set;
7
+ export declare function transformToSubstitution(event: any): Substitution;
8
+ export declare function transformToSpike(event: any): Spike;
@@ -0,0 +1,65 @@
1
+ import { Block, LiberoReplacement, Reception, Serve, Set, Spike, Substitution } from '../../service';
2
+ export function transformToBlock(event) {
3
+ return new Block({
4
+ failure: event.failure,
5
+ type: event.type,
6
+ playerId: event.playerId,
7
+ target: event.target,
8
+ blockers: event.blockers,
9
+ score: event.score,
10
+ activeTraits: event.activeTraits
11
+ });
12
+ }
13
+ export function transformToLiberoReplacement(event) {
14
+ return new LiberoReplacement({
15
+ playerId: event.playerId,
16
+ libero: event.libero,
17
+ type: event.type
18
+ });
19
+ }
20
+ export function transformToReception(event) {
21
+ return new Reception({
22
+ failure: event.failure,
23
+ type: event.type,
24
+ playerId: event.playerId,
25
+ target: event.target,
26
+ score: event.score,
27
+ activeTraits: event.activeTraits
28
+ });
29
+ }
30
+ export function transformToServe(event) {
31
+ return new Serve({
32
+ failure: event.failure,
33
+ type: event.type,
34
+ playerId: event.playerId,
35
+ target: event.target,
36
+ score: event.score,
37
+ activeTraits: event.activeTraits
38
+ });
39
+ }
40
+ export function transformToSet(event) {
41
+ return new Set({
42
+ failure: event.failure,
43
+ type: event.type,
44
+ playerId: event.playerId,
45
+ target: event.target,
46
+ score: event.score,
47
+ activeTraits: event.activeTraits
48
+ });
49
+ }
50
+ export function transformToSubstitution(event) {
51
+ return new Substitution({
52
+ playerId: event.playerId,
53
+ playerOut: event.playerIdOut
54
+ });
55
+ }
56
+ export function transformToSpike(event) {
57
+ return new Spike({
58
+ failure: event.failure,
59
+ type: event.type,
60
+ playerId: event.playerId,
61
+ target: event.target,
62
+ score: event.score,
63
+ activeTraits: event.activeTraits
64
+ });
65
+ }
@@ -1,5 +1,5 @@
1
1
  import { MatchSetStatsAttributes, MatchSetStatsModel } from '../models';
2
2
  import { SetStatistics } from '../../service';
3
3
  declare function transformToAttributes(stats: SetStatistics, setId: string): MatchSetStatsAttributes;
4
- declare function transformToObject(model: MatchSetStatsModel): SetStatistics;
4
+ declare function transformToObject(model: MatchSetStatsModel, index: number): SetStatistics;
5
5
  export { transformToObject as transformToMatchSetStats, transformToAttributes as transformFromMatchSetStats };
@@ -1,7 +1,6 @@
1
- import { transformToPlayer } from '.';
2
1
  function transformToAttributes(stats, setId) {
3
2
  return {
4
- player_id: stats.player.id,
3
+ player_id: stats.playerId,
5
4
  match_set_id: setId,
6
5
  aces: stats.ace,
7
6
  assists: stats.assists,
@@ -22,7 +21,7 @@ function transformToAttributes(stats, setId) {
22
21
  kill_blocks: stats.killBlocks
23
22
  };
24
23
  }
25
- function transformToObject(model) {
24
+ function transformToObject(model, index) {
26
25
  return {
27
26
  set: {
28
27
  success: model.set_success,
@@ -51,7 +50,9 @@ function transformToObject(model) {
51
50
  assists: model.assists,
52
51
  ralliesPlayed: model.rallies_played,
53
52
  attempts: model.attempts,
54
- player: transformToPlayer(model.player)
53
+ playerId: model.player_id,
54
+ order: index,
55
+ setsPlayed: 0
55
56
  };
56
57
  }
57
58
  export { transformToObject as transformToMatchSetStats, transformToAttributes as transformFromMatchSetStats };
@@ -1,5 +1,7 @@
1
1
  import { PlayerAttributes, PlayerModel } from '../models';
2
- import { Player } from '../../service';
2
+ import { Player, SetStatistics } from '../../service';
3
3
  declare function transformToAttributes(player: Player): PlayerAttributes;
4
4
  declare function transformToObject(model: PlayerModel): Player;
5
+ export declare function calculateMatchStats(gameStats: SetStatistics[]): SetStatistics;
6
+ export declare function reduceStatsFn(acc: SetStatistics, current: SetStatistics): SetStatistics;
5
7
  export { transformToObject as transformToPlayer, transformToAttributes as transformFromPlayer };
@@ -1,5 +1,5 @@
1
1
  import { Player } from '../../service';
2
- import { transformFromPerformanceStats, transformToCountry, transformToPerformanceStats } from '.';
2
+ import { transformFromPerformanceStats, transformToCountry, transformToMatchSetStats, transformToPerformanceStats } from '.';
3
3
  function transformToAttributes(player) {
4
4
  return {
5
5
  player_id: player.id,
@@ -13,6 +13,10 @@ function transformToAttributes(player) {
13
13
  };
14
14
  }
15
15
  function transformToObject(model) {
16
+ const gameStats = (model.MatchSetStats ?? []).map(transformToMatchSetStats);
17
+ if (gameStats.length > 0) {
18
+ gameStats.push(calculateMatchStats(gameStats));
19
+ }
16
20
  return new Player({
17
21
  id: model.player_id,
18
22
  name: {
@@ -23,7 +27,49 @@ function transformToObject(model) {
23
27
  roles: model.roles,
24
28
  traits: model.traits,
25
29
  stats: transformToPerformanceStats(model.PerformanceStat),
26
- rarity: model.rarity
30
+ rarity: model.rarity,
31
+ gameStats
27
32
  });
28
33
  }
34
+ export function calculateMatchStats(gameStats) {
35
+ const emptyStats = {
36
+ playerId: gameStats[0].playerId,
37
+ attempts: 0,
38
+ contacts: 0,
39
+ ralliesPlayed: 0,
40
+ serve: { success: 0, error: 0 },
41
+ reception: { success: 0, error: 0 },
42
+ set: { success: 0, error: 0 },
43
+ attack: { success: 0, error: 0 },
44
+ block: { success: 0, error: 0 },
45
+ kills: 0,
46
+ killBlocks: 0,
47
+ ace: 0,
48
+ assists: 0,
49
+ order: gameStats.length,
50
+ setsPlayed: 0
51
+ };
52
+ return gameStats.reduce(reduceStatsFn, emptyStats);
53
+ }
54
+ export function reduceStatsFn(acc, current) {
55
+ acc.attempts += current.attempts;
56
+ acc.contacts += current.contacts;
57
+ acc.ralliesPlayed += current.ralliesPlayed;
58
+ acc.kills += current.kills;
59
+ acc.killBlocks += current.killBlocks;
60
+ acc.ace += current.ace;
61
+ acc.assists += current.assists;
62
+ acc.serve.success += current.serve.success;
63
+ acc.serve.error += current.serve.error;
64
+ acc.reception.success += current.reception.success;
65
+ acc.reception.error += current.reception.error;
66
+ acc.set.success += current.set.success;
67
+ acc.set.error += current.set.error;
68
+ acc.attack.success += current.attack.success;
69
+ acc.attack.error += current.attack.error;
70
+ acc.block.success += current.block.success;
71
+ acc.block.error += current.block.error;
72
+ acc.setsPlayed++;
73
+ return acc;
74
+ }
29
75
  export { transformToObject as transformToPlayer, transformToAttributes as transformFromPlayer };
@@ -1,6 +1,7 @@
1
1
  import { Rally } from '../../service';
2
2
  import { compressToBase64, decompressFromBase64 } from 'lz-string';
3
3
  import { transformToTeam } from './team';
4
+ import { transformToBlock, transformToLiberoReplacement, transformToReception, transformToServe, transformToSet, transformToSpike, transformToSubstitution } from './events';
4
5
  function transformToAttributes(rally, setId) {
5
6
  const events = `[${rally.events.map((e) => e.toString()).join(',')}]`;
6
7
  return {
@@ -12,7 +13,36 @@ function transformToAttributes(rally, setId) {
12
13
  };
13
14
  }
14
15
  function transformToObject(model) {
15
- const events = JSON.parse(decompressFromBase64(model.events));
16
+ const decompressed = decompressFromBase64(model.events);
17
+ const parsed = JSON.parse(decompressed);
18
+ const events = [];
19
+ parsed.forEach(event => {
20
+ switch (event.eventType) {
21
+ case 0:
22
+ events.push(transformToLiberoReplacement(event));
23
+ break;
24
+ case 1:
25
+ events.push(transformToSubstitution(event));
26
+ break;
27
+ case 2:
28
+ events.push(transformToServe(event));
29
+ break;
30
+ case 3:
31
+ events.push(transformToReception(event));
32
+ break;
33
+ case 4:
34
+ events.push(transformToSet(event));
35
+ break;
36
+ case 5:
37
+ events.push(transformToSpike(event));
38
+ break;
39
+ case 6:
40
+ events.push(transformToBlock(event));
41
+ break;
42
+ default:
43
+ throw new Error('UNKNOWN_EVENT');
44
+ }
45
+ });
16
46
  return new Rally({
17
47
  id: model.rally_id,
18
48
  order: model.order,
@@ -1,5 +1,5 @@
1
1
  import { Team } from '../../service';
2
2
  import { TeamAttributes, TeamModel } from '../models';
3
3
  declare function transformToAttributes(team: Team): TeamAttributes;
4
- declare function transformToObject(team: TeamModel): Team;
4
+ declare function transformToObject(model: TeamModel): Team;
5
5
  export { transformToObject as transformToTeam, transformToAttributes as transformFromTeam };
@@ -1,5 +1,5 @@
1
1
  import { Team } from '../../service';
2
- import { transformFromCoach, transformToCoach, transformToCountry, transformToPlayer } from '.';
2
+ import { transformFromCoach, transformToCoach, transformToCountry, transformToLeague, transformToPlayer } from '.';
3
3
  function transformToAttributes(team) {
4
4
  return {
5
5
  team_id: team.id,
@@ -12,15 +12,16 @@ function transformToAttributes(team) {
12
12
  rating: team.rating
13
13
  };
14
14
  }
15
- function transformToObject(team) {
15
+ function transformToObject(model) {
16
16
  return new Team({
17
- id: team.team_id,
18
- name: team.name,
19
- shortName: team.short_name,
20
- country: team.country != null ? transformToCountry(team.country) : undefined,
21
- coach: team.coach != null ? transformToCoach(team.coach) : undefined,
22
- roster: (team.PlayerTeams ?? []).map((pt) => transformToPlayer(pt.player)),
23
- rating: team.rating
17
+ id: model.team_id,
18
+ name: model.name,
19
+ shortName: model.short_name,
20
+ country: model.country != null ? transformToCountry(model.country) : undefined,
21
+ coach: model.coach != null ? transformToCoach(model.coach) : undefined,
22
+ roster: (model.PlayerTeams ?? []).map((pt) => transformToPlayer(pt.player)),
23
+ league: model.league != null ? transformToLeague(model.league) : undefined,
24
+ rating: model.rating
24
25
  });
25
26
  }
26
27
  export { transformToObject as transformToTeam, transformToAttributes as transformFromTeam };
@@ -0,0 +1,36 @@
1
+ import { InPlayEvent } from './in-play-event';
2
+ import { CourtTarget } from '../match';
3
+ import { Trait } from '../player';
4
+ export declare enum BlockFailureEnum {
5
+ NO_FAILURE = 0,
6
+ MISS = 1,
7
+ FAULT = 2,
8
+ OUT_OF_BOUNDS = 3,
9
+ WIPE = 4,
10
+ TOOL = 5
11
+ }
12
+ export type BlockFailure = BlockFailureEnum.NO_FAILURE | BlockFailureEnum.MISS | BlockFailureEnum.FAULT | BlockFailureEnum.OUT_OF_BOUNDS | BlockFailureEnum.WIPE | BlockFailureEnum.TOOL;
13
+ export declare enum BlockTypeEnum {
14
+ NO_BLOCKER = 0,
15
+ SINGLE = 1,
16
+ DOUBLE = 2,
17
+ TRIPLE = 3
18
+ }
19
+ export type BlockType = BlockTypeEnum.NO_BLOCKER | BlockTypeEnum.SINGLE | BlockTypeEnum.DOUBLE | BlockTypeEnum.TRIPLE;
20
+ interface BlockOpts {
21
+ readonly type: BlockType;
22
+ readonly failure: BlockFailure;
23
+ readonly blockers: string[];
24
+ readonly target: CourtTarget;
25
+ readonly score: number;
26
+ readonly activeTraits: Trait[];
27
+ readonly playerId: string;
28
+ }
29
+ export declare class Block extends InPlayEvent<BlockFailure, BlockType> {
30
+ readonly failure: BlockFailure;
31
+ readonly type: BlockType;
32
+ readonly blockers: string[];
33
+ constructor({ score, playerId, target, failure, type, blockers, activeTraits }: BlockOpts);
34
+ toString(): string;
35
+ }
36
+ export {};
@@ -0,0 +1,33 @@
1
+ import { InPlayEvent } from './in-play-event';
2
+ import { EventTypeEnum } from './rally-event';
3
+ export var BlockFailureEnum;
4
+ (function (BlockFailureEnum) {
5
+ BlockFailureEnum[BlockFailureEnum["NO_FAILURE"] = 0] = "NO_FAILURE";
6
+ BlockFailureEnum[BlockFailureEnum["MISS"] = 1] = "MISS";
7
+ BlockFailureEnum[BlockFailureEnum["FAULT"] = 2] = "FAULT";
8
+ BlockFailureEnum[BlockFailureEnum["OUT_OF_BOUNDS"] = 3] = "OUT_OF_BOUNDS";
9
+ BlockFailureEnum[BlockFailureEnum["WIPE"] = 4] = "WIPE";
10
+ BlockFailureEnum[BlockFailureEnum["TOOL"] = 5] = "TOOL";
11
+ })(BlockFailureEnum || (BlockFailureEnum = {}));
12
+ export var BlockTypeEnum;
13
+ (function (BlockTypeEnum) {
14
+ BlockTypeEnum[BlockTypeEnum["NO_BLOCKER"] = 0] = "NO_BLOCKER";
15
+ BlockTypeEnum[BlockTypeEnum["SINGLE"] = 1] = "SINGLE";
16
+ BlockTypeEnum[BlockTypeEnum["DOUBLE"] = 2] = "DOUBLE";
17
+ BlockTypeEnum[BlockTypeEnum["TRIPLE"] = 3] = "TRIPLE";
18
+ })(BlockTypeEnum || (BlockTypeEnum = {}));
19
+ const eventType = EventTypeEnum.BLOCK;
20
+ export class Block extends InPlayEvent {
21
+ constructor({ score, playerId, target, failure, type, blockers, activeTraits }) {
22
+ super({ score, playerId, target, activeTraits, eventType });
23
+ this.type = type;
24
+ this.failure = failure;
25
+ this.blockers = blockers;
26
+ }
27
+ toString() {
28
+ const failure = `"failure":${this.failure}`;
29
+ const type = `"type":${this.type}`;
30
+ const blockers = `"blockers":[${this.blockers.map(b => `"${b}"`).join(',')}]`;
31
+ return `{${this._toString()},${failure},${type},${blockers}}`;
32
+ }
33
+ }
@@ -0,0 +1,17 @@
1
+ import { CourtTarget } from '../match';
2
+ import { RallyEvent, RallyEventOpts } from './rally-event';
3
+ import { Trait } from '../player';
4
+ export interface InPlayEventOpts extends RallyEventOpts {
5
+ readonly target: CourtTarget;
6
+ readonly score: number;
7
+ readonly activeTraits: Trait[];
8
+ }
9
+ export declare abstract class InPlayEvent<F, T> extends RallyEvent {
10
+ abstract failure: F;
11
+ abstract type: T;
12
+ readonly target: CourtTarget;
13
+ readonly score: number;
14
+ readonly activeTraits: Trait[];
15
+ protected constructor({ eventType, playerId, target, score, activeTraits }: InPlayEventOpts);
16
+ protected _toString(): string;
17
+ }