volleyballsimtypes 0.0.188 → 0.0.190

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 (65) hide show
  1. package/dist/cjs/src/data/init-models.js +10 -8
  2. package/dist/cjs/src/data/models/competition.d.ts +6 -6
  3. package/dist/cjs/src/data/models/division-season.d.ts +23 -0
  4. package/dist/cjs/src/data/models/{league-season.js → division-season.js} +9 -9
  5. package/dist/cjs/src/data/models/division.d.ts +35 -0
  6. package/dist/cjs/src/data/models/division.js +47 -0
  7. package/dist/cjs/src/data/models/index.d.ts +2 -1
  8. package/dist/cjs/src/data/models/index.js +2 -1
  9. package/dist/cjs/src/data/models/league.d.ts +13 -24
  10. package/dist/cjs/src/data/models/team.d.ts +1 -8
  11. package/dist/cjs/src/data/models/team.js +0 -8
  12. package/dist/cjs/src/data/transformers/division.d.ts +5 -0
  13. package/dist/cjs/src/data/transformers/division.js +23 -0
  14. package/dist/cjs/src/data/transformers/index.d.ts +1 -0
  15. package/dist/cjs/src/data/transformers/index.js +1 -0
  16. package/dist/cjs/src/data/transformers/league.js +3 -6
  17. package/dist/cjs/src/data/transformers/season.d.ts +1 -1
  18. package/dist/cjs/src/data/transformers/season.js +1 -2
  19. package/dist/cjs/src/data/transformers/team.js +0 -2
  20. package/dist/cjs/src/service/coach/formation.js +13 -13
  21. package/dist/cjs/src/service/competition/division.d.ts +15 -0
  22. package/dist/cjs/src/service/competition/division.js +12 -0
  23. package/dist/cjs/src/service/competition/index.d.ts +1 -0
  24. package/dist/cjs/src/service/competition/index.js +1 -0
  25. package/dist/cjs/src/service/competition/league.d.ts +4 -4
  26. package/dist/cjs/src/service/competition/league.js +2 -2
  27. package/dist/cjs/src/service/match/match-rating.js +13 -19
  28. package/dist/cjs/src/service/team/team.d.ts +1 -4
  29. package/dist/cjs/src/service/team/team.js +1 -2
  30. package/dist/cjs/src/service/utils/number-utils.d.ts +1 -0
  31. package/dist/cjs/src/service/utils/number-utils.js +19 -1
  32. package/dist/esm/src/data/init-models.js +11 -9
  33. package/dist/esm/src/data/models/competition.d.ts +6 -6
  34. package/dist/esm/src/data/models/division-season.d.ts +23 -0
  35. package/dist/esm/src/data/models/{league-season.js → division-season.js} +7 -7
  36. package/dist/esm/src/data/models/division.d.ts +35 -0
  37. package/dist/esm/src/data/models/division.js +43 -0
  38. package/dist/esm/src/data/models/index.d.ts +2 -1
  39. package/dist/esm/src/data/models/index.js +2 -1
  40. package/dist/esm/src/data/models/league.d.ts +13 -24
  41. package/dist/esm/src/data/models/team.d.ts +1 -8
  42. package/dist/esm/src/data/models/team.js +0 -8
  43. package/dist/esm/src/data/transformers/division.d.ts +5 -0
  44. package/dist/esm/src/data/transformers/division.js +19 -0
  45. package/dist/esm/src/data/transformers/index.d.ts +1 -0
  46. package/dist/esm/src/data/transformers/index.js +1 -0
  47. package/dist/esm/src/data/transformers/league.js +4 -7
  48. package/dist/esm/src/data/transformers/season.d.ts +1 -1
  49. package/dist/esm/src/data/transformers/season.js +1 -2
  50. package/dist/esm/src/data/transformers/team.js +1 -3
  51. package/dist/esm/src/service/coach/formation.js +13 -13
  52. package/dist/esm/src/service/competition/division.d.ts +15 -0
  53. package/dist/esm/src/service/competition/division.js +8 -0
  54. package/dist/esm/src/service/competition/index.d.ts +1 -0
  55. package/dist/esm/src/service/competition/index.js +1 -0
  56. package/dist/esm/src/service/competition/league.d.ts +4 -4
  57. package/dist/esm/src/service/competition/league.js +2 -2
  58. package/dist/esm/src/service/match/match-rating.js +14 -20
  59. package/dist/esm/src/service/team/team.d.ts +1 -4
  60. package/dist/esm/src/service/team/team.js +1 -2
  61. package/dist/esm/src/service/utils/number-utils.d.ts +1 -0
  62. package/dist/esm/src/service/utils/number-utils.js +17 -0
  63. package/package.json +1 -1
  64. package/dist/cjs/src/data/models/league-season.d.ts +0 -23
  65. package/dist/esm/src/data/models/league-season.d.ts +0 -23
@@ -28,7 +28,7 @@ Formation['5-1'] = new Formation({
28
28
  3: [RoleEnum.MIDDLE_BLOCKER],
29
29
  4: [RoleEnum.OUTSIDE_HITTER],
30
30
  5: [RoleEnum.OUTSIDE_HITTER],
31
- 6: [RoleEnum.LIBERO]
31
+ 6: [RoleEnum.LIBERO, RoleEnum.MIDDLE_BLOCKER]
32
32
  },
33
33
  draftingPriorities: [
34
34
  [RoleEnum.SETTER, RoleEnum.OPPOSITE_HITTER],
@@ -50,20 +50,20 @@ Formation['5-1'] = new Formation({
50
50
  Formation['4-2'] = new Formation({
51
51
  name: '4-2',
52
52
  initialRotation: {
53
- 1: [RoleEnum.MIDDLE_BLOCKER],
54
- 2: [RoleEnum.SETTER],
55
- 3: [RoleEnum.OUTSIDE_HITTER],
56
- 4: [RoleEnum.MIDDLE_BLOCKER],
57
- 5: [RoleEnum.SETTER],
58
- 6: [RoleEnum.OPPOSITE_HITTER]
53
+ 1: [RoleEnum.SETTER],
54
+ 2: [RoleEnum.OUTSIDE_HITTER],
55
+ 3: [RoleEnum.MIDDLE_BLOCKER],
56
+ 4: [RoleEnum.SETTER],
57
+ 5: [RoleEnum.OUTSIDE_HITTER],
58
+ 6: [RoleEnum.MIDDLE_BLOCKER]
59
59
  },
60
60
  base: {
61
61
  1: [RoleEnum.SETTER],
62
- 2: [RoleEnum.OPPOSITE_HITTER, RoleEnum.SETTER],
62
+ 2: [RoleEnum.SETTER],
63
63
  3: [RoleEnum.MIDDLE_BLOCKER],
64
64
  4: [RoleEnum.OUTSIDE_HITTER],
65
65
  5: [RoleEnum.OUTSIDE_HITTER],
66
- 6: [RoleEnum.LIBERO]
66
+ 6: [RoleEnum.LIBERO, RoleEnum.MIDDLE_BLOCKER]
67
67
  },
68
68
  draftingPriorities: [
69
69
  [RoleEnum.SETTER, RoleEnum.OPPOSITE_HITTER],
@@ -85,20 +85,20 @@ Formation['4-2'] = new Formation({
85
85
  Formation['6-2'] = new Formation({
86
86
  name: '6-2',
87
87
  initialRotation: {
88
- 1: [RoleEnum.OPPOSITE_HITTER, RoleEnum.SETTER],
88
+ 1: [RoleEnum.OPPOSITE_HITTER, RoleEnum.SETTER, RoleEnum.OUTSIDE_HITTER],
89
89
  2: [RoleEnum.OUTSIDE_HITTER],
90
90
  3: [RoleEnum.MIDDLE_BLOCKER],
91
- 4: [RoleEnum.OPPOSITE_HITTER, RoleEnum.SETTER],
91
+ 4: [RoleEnum.OPPOSITE_HITTER, RoleEnum.SETTER, RoleEnum.OUTSIDE_HITTER],
92
92
  5: [RoleEnum.OUTSIDE_HITTER],
93
93
  6: [RoleEnum.MIDDLE_BLOCKER]
94
94
  },
95
95
  base: {
96
- 1: [RoleEnum.SETTER],
96
+ 1: [RoleEnum.SETTER, RoleEnum.OPPOSITE_HITTER],
97
97
  2: [RoleEnum.OPPOSITE_HITTER, RoleEnum.SETTER],
98
98
  3: [RoleEnum.MIDDLE_BLOCKER],
99
99
  4: [RoleEnum.OUTSIDE_HITTER],
100
100
  5: [RoleEnum.OUTSIDE_HITTER],
101
- 6: [RoleEnum.LIBERO]
101
+ 6: [RoleEnum.LIBERO, RoleEnum.MIDDLE_BLOCKER]
102
102
  },
103
103
  draftingPriorities: [
104
104
  [RoleEnum.SETTER, RoleEnum.OPPOSITE_HITTER],
@@ -0,0 +1,15 @@
1
+ import { Season } from './season';
2
+ interface DivisionOpts {
3
+ readonly id: string;
4
+ readonly name: string;
5
+ readonly tier: number;
6
+ readonly seasons: Season[];
7
+ }
8
+ export declare class Division {
9
+ readonly id: string;
10
+ readonly name: string;
11
+ readonly tier: number;
12
+ readonly seasons: Season[];
13
+ constructor({ id, name, tier, seasons }: DivisionOpts);
14
+ }
15
+ export {};
@@ -0,0 +1,8 @@
1
+ export class Division {
2
+ constructor({ id, name, tier, seasons }) {
3
+ this.id = id;
4
+ this.name = name;
5
+ this.tier = tier;
6
+ this.seasons = seasons;
7
+ }
8
+ }
@@ -1,6 +1,7 @@
1
1
  export * from './standing';
2
2
  export * from './season';
3
3
  export * from './league';
4
+ export * from './division';
4
5
  export * from './iteration';
5
6
  export * from './tournament';
6
7
  export * from './tournament-match';
@@ -1,6 +1,7 @@
1
1
  export * from './standing';
2
2
  export * from './season';
3
3
  export * from './league';
4
+ export * from './division';
4
5
  export * from './iteration';
5
6
  export * from './tournament';
6
7
  export * from './tournament-match';
@@ -1,16 +1,16 @@
1
- import { Season } from './season';
2
1
  import { Country } from '../country';
2
+ import { Division } from './division';
3
3
  interface LeagueOpts {
4
4
  readonly id: string;
5
5
  readonly name: string;
6
6
  readonly country: Country;
7
- readonly seasons: Season[];
7
+ readonly division: Division[];
8
8
  }
9
9
  export declare class League {
10
10
  readonly id: string;
11
11
  readonly name: string;
12
- readonly seasons: Season[];
12
+ readonly division: Division[];
13
13
  readonly country: Country;
14
- constructor({ id, name, country, seasons }: LeagueOpts);
14
+ constructor({ id, name, country, division }: LeagueOpts);
15
15
  }
16
16
  export {};
@@ -1,8 +1,8 @@
1
1
  export class League {
2
- constructor({ id, name, country, seasons }) {
2
+ constructor({ id, name, country, division }) {
3
3
  this.id = id;
4
4
  this.name = name;
5
5
  this.country = country;
6
- this.seasons = seasons;
6
+ this.division = division;
7
7
  }
8
8
  }
@@ -1,25 +1,19 @@
1
- import { MatchScore } from '.';
1
+ import { MatchTeam } from '.';
2
+ import { erf } from '../utils';
2
3
  export class MatchRating {
3
4
  constructor({ match, competitionType }) {
4
5
  this.match = match;
5
6
  this.weight = MatchRating.MWF[competitionType];
6
7
  }
7
8
  getPoints(team) {
8
- const rankingValue = MatchRating.SSV[this.match.getScore()] - this.getExpectedResult();
9
- const weighted = rankingValue * this.weight / MatchRating.K;
10
- if (this.match.isWinner(team))
11
- return weighted;
12
- else
13
- return weighted * -1;
9
+ const homeScoreKey = this.match.getScore();
10
+ const emr = this.getExpectedResult();
11
+ const ssv = MatchRating.SSV[homeScoreKey];
12
+ const homeDelta = (ssv - emr) * this.weight / MatchRating.K;
13
+ return team === MatchTeam.HOME ? homeDelta : -homeDelta;
14
14
  }
15
15
  static calculateProbability(z) {
16
- let area = 0.0;
17
- const rectangles = 100000;
18
- const width = (z - (-10)) / rectangles;
19
- for (let i = 0; i < rectangles; i++) {
20
- area += width * Math.exp(-Math.pow((width * i + (-10)), 2) / 2) / Math.sqrt(2 * Math.PI);
21
- }
22
- return area;
16
+ return 0.5 * (1 + erf(z / Math.SQRT2));
23
17
  }
24
18
  getExpectedResult() {
25
19
  const D = MatchRating.K * (this.match.homeTeam.rating - this.match.awayTeam.rating) / 1000; // Strength difference between the teams
@@ -43,12 +37,12 @@ export class MatchRating {
43
37
  }
44
38
  MatchRating.K = 8; // Standard scaling factor
45
39
  MatchRating.SSV = {
46
- [MatchScore['3-0']]: 2,
47
- [MatchScore['3-1']]: 1.5,
48
- [MatchScore['3-2']]: 1,
49
- [MatchScore['2-3']]: -1,
50
- [MatchScore['1-3']]: -1.5,
51
- [MatchScore['0-3']]: -2
40
+ '3-0': 2,
41
+ '3-1': 1.5,
42
+ '3-2': 1,
43
+ '2-3': -1,
44
+ '1-3': -1.5,
45
+ '0-3': -2
52
46
  };
53
47
  MatchRating.C1 = -1.060;
54
48
  MatchRating.C2 = -0.394;
@@ -1,7 +1,6 @@
1
1
  import { Coach } from '../coach';
2
2
  import { Player } from '../player';
3
3
  import { Country } from '../country';
4
- import { League } from '../competition';
5
4
  interface TeamParams {
6
5
  readonly id: string;
7
6
  readonly rating: number;
@@ -9,7 +8,6 @@ interface TeamParams {
9
8
  readonly shortName: string;
10
9
  readonly roster: Player[];
11
10
  readonly country?: Country;
12
- readonly league?: League;
13
11
  readonly coach?: Coach;
14
12
  }
15
13
  export declare class Team {
@@ -18,10 +16,9 @@ export declare class Team {
18
16
  readonly name: string;
19
17
  readonly shortName: string;
20
18
  readonly coach?: Coach;
21
- readonly league?: League;
22
19
  readonly country?: Country;
23
20
  private _rating;
24
- constructor({ id, rating, name, shortName, country, roster, coach, league }: TeamParams);
21
+ constructor({ id, rating, name, shortName, country, roster, coach }: TeamParams);
25
22
  get rating(): number;
26
23
  set rating(value: number);
27
24
  isPlayerInRoster(player: Player): boolean;
@@ -1,6 +1,6 @@
1
1
  import { validateUUID } from '../utils';
2
2
  export class Team {
3
- constructor({ id, rating, name, shortName, country, roster, coach, league }) {
3
+ constructor({ id, rating, name, shortName, country, roster, coach }) {
4
4
  validateUUID(id);
5
5
  this.id = id;
6
6
  this._rating = rating;
@@ -9,7 +9,6 @@ export class Team {
9
9
  this.name = name;
10
10
  this.shortName = shortName;
11
11
  this.country = country;
12
- this.league = league;
13
12
  }
14
13
  get rating() {
15
14
  return this._rating;
@@ -1 +1,2 @@
1
1
  export declare function clamp(min: number, max: number, value: number): number;
2
+ export declare function erf(x: number): number;
@@ -1,3 +1,20 @@
1
1
  export function clamp(min, max, value) {
2
2
  return Math.max(min, Math.min(value, max));
3
3
  }
4
+ // Approximation of the error function
5
+ export function erf(x) {
6
+ // constants
7
+ const a1 = 0.254829592;
8
+ const a2 = -0.284496736;
9
+ const a3 = 1.421413741;
10
+ const a4 = -1.453152027;
11
+ const a5 = 1.061405429;
12
+ const p = 0.3275911;
13
+ // Save the sign of x
14
+ const sign = x < 0 ? -1 : 1;
15
+ x = Math.abs(x);
16
+ // Abramowitz & Stegun 7.1.26
17
+ const t = 1.0 / (1.0 + p * x);
18
+ const y = 1.0 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
19
+ return sign * y;
20
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "volleyballsimtypes",
3
- "version": "0.0.188",
3
+ "version": "0.0.190",
4
4
  "description": "vbsim types",
5
5
  "main": "./dist/cjs/src/index.js",
6
6
  "module": "./dist/esm/src/index.js",
@@ -1,23 +0,0 @@
1
- import * as Sequelize from 'sequelize';
2
- import { Model } from 'sequelize';
3
- import { CompetitionId, CompetitionModel, LeagueId, LeagueModel } from '.';
4
- export interface LeagueSeasonAttributes {
5
- league_id: string;
6
- competition_id: string;
7
- }
8
- export type LeagueSeasonPk = 'competition_id';
9
- export type LeagueSeasonId = LeagueSeasonModel[LeagueSeasonPk];
10
- export type LeagueSeasonCreationAttributes = LeagueSeasonAttributes;
11
- export declare class LeagueSeasonModel extends Model<LeagueSeasonAttributes, LeagueSeasonCreationAttributes> implements LeagueSeasonAttributes {
12
- league_id: string;
13
- competition_id: string;
14
- competition: CompetitionModel;
15
- getCompetition: Sequelize.BelongsToGetAssociationMixin<CompetitionModel>;
16
- setCompetition: Sequelize.BelongsToSetAssociationMixin<CompetitionModel, CompetitionId>;
17
- createCompetition: Sequelize.BelongsToCreateAssociationMixin<CompetitionModel>;
18
- league: LeagueModel;
19
- getLeague: Sequelize.BelongsToGetAssociationMixin<LeagueModel>;
20
- setLeague: Sequelize.BelongsToSetAssociationMixin<LeagueModel, LeagueId>;
21
- createLeague: Sequelize.BelongsToCreateAssociationMixin<LeagueModel>;
22
- static initModel(sequelize: Sequelize.Sequelize): typeof LeagueSeasonModel;
23
- }
@@ -1,23 +0,0 @@
1
- import * as Sequelize from 'sequelize';
2
- import { Model } from 'sequelize';
3
- import { CompetitionId, CompetitionModel, LeagueId, LeagueModel } from '.';
4
- export interface LeagueSeasonAttributes {
5
- league_id: string;
6
- competition_id: string;
7
- }
8
- export type LeagueSeasonPk = 'competition_id';
9
- export type LeagueSeasonId = LeagueSeasonModel[LeagueSeasonPk];
10
- export type LeagueSeasonCreationAttributes = LeagueSeasonAttributes;
11
- export declare class LeagueSeasonModel extends Model<LeagueSeasonAttributes, LeagueSeasonCreationAttributes> implements LeagueSeasonAttributes {
12
- league_id: string;
13
- competition_id: string;
14
- competition: CompetitionModel;
15
- getCompetition: Sequelize.BelongsToGetAssociationMixin<CompetitionModel>;
16
- setCompetition: Sequelize.BelongsToSetAssociationMixin<CompetitionModel, CompetitionId>;
17
- createCompetition: Sequelize.BelongsToCreateAssociationMixin<CompetitionModel>;
18
- league: LeagueModel;
19
- getLeague: Sequelize.BelongsToGetAssociationMixin<LeagueModel>;
20
- setLeague: Sequelize.BelongsToSetAssociationMixin<LeagueModel, LeagueId>;
21
- createLeague: Sequelize.BelongsToCreateAssociationMixin<LeagueModel>;
22
- static initModel(sequelize: Sequelize.Sequelize): typeof LeagueSeasonModel;
23
- }