jl-sprt-core 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/A_Team.d.ts +35 -0
- package/dist/A_Team.js +28 -0
- package/dist/A_Team.js.map +1 -0
- package/dist/A_TeamRoster.d.ts +9 -0
- package/dist/A_TeamRoster.js +16 -0
- package/dist/A_TeamRoster.js.map +1 -0
- package/dist/Match/A_Match.d.ts +41 -0
- package/dist/Match/A_Match.js +57 -0
- package/dist/Match/A_Match.js.map +1 -0
- package/dist/Match/A_MatchPlay.d.ts +21 -0
- package/dist/Match/A_MatchPlay.js +20 -0
- package/dist/Match/A_MatchPlay.js.map +1 -0
- package/dist/Match/A_Result.d.ts +24 -0
- package/dist/Match/A_Result.js +19 -0
- package/dist/Match/A_Result.js.map +1 -0
- package/dist/Match/A_ResultSerie.d.ts +28 -0
- package/dist/Match/A_ResultSerie.js +21 -0
- package/dist/Match/A_ResultSerie.js.map +1 -0
- package/dist/Match/A_Serie.d.ts +33 -0
- package/dist/Match/A_Serie.js +30 -0
- package/dist/Match/A_Serie.js.map +1 -0
- package/dist/Match/scores.d.ts +21 -0
- package/dist/Match/scores.js +3 -0
- package/dist/Match/scores.js.map +1 -0
- package/dist/Person.d.ts +13 -0
- package/dist/Person.js +16 -0
- package/dist/Person.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/profiles/A_TeamTableItem.d.ts +57 -0
- package/dist/profiles/A_TeamTableItem.js +69 -0
- package/dist/profiles/A_TeamTableItem.js.map +1 -0
- package/dist/profiles/ISportProfile.d.ts +77 -0
- package/dist/profiles/ISportProfile.js +3 -0
- package/dist/profiles/ISportProfile.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/package.json +31 -0
package/dist/A_Team.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { A_Match } from './Match/A_Match';
|
|
2
|
+
import { A_TeamRoster } from './A_TeamRoster';
|
|
3
|
+
import { TypeCategory } from './types';
|
|
4
|
+
export interface ITeamOwner {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly name: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ITeamCreator {
|
|
9
|
+
id: string;
|
|
10
|
+
category: TypeCategory;
|
|
11
|
+
owner: ITeamOwner;
|
|
12
|
+
matches?: A_Match<any, any>[];
|
|
13
|
+
}
|
|
14
|
+
export declare abstract class A_Team<TR extends A_TeamRoster> {
|
|
15
|
+
private _id;
|
|
16
|
+
private _owner;
|
|
17
|
+
private _matches;
|
|
18
|
+
private _category;
|
|
19
|
+
private _stages;
|
|
20
|
+
constructor(itc: ITeamCreator);
|
|
21
|
+
get id(): string;
|
|
22
|
+
/** Nombre legible del team (nombre de su entidad). Para mostrar en UI/labels. */
|
|
23
|
+
get name(): string;
|
|
24
|
+
get entity(): ITeamOwner;
|
|
25
|
+
get category(): TypeCategory;
|
|
26
|
+
get matches(): A_Match<any, TR>[];
|
|
27
|
+
addStage(stage: {
|
|
28
|
+
config: {
|
|
29
|
+
idConfig: string;
|
|
30
|
+
};
|
|
31
|
+
}): void;
|
|
32
|
+
addNewMatch(match: A_Match<any, TR>): void;
|
|
33
|
+
abstract getTeamMatch(): TR;
|
|
34
|
+
}
|
|
35
|
+
export type AnyTeam = A_Team<any>;
|
package/dist/A_Team.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A_Team = void 0;
|
|
4
|
+
class A_Team {
|
|
5
|
+
constructor(itc) {
|
|
6
|
+
this._matches = [];
|
|
7
|
+
this._stages = new Map();
|
|
8
|
+
this._id = itc.id;
|
|
9
|
+
// this._name = itc.name;
|
|
10
|
+
this._owner = itc.owner;
|
|
11
|
+
this._category = itc.category;
|
|
12
|
+
this._matches = itc.matches ?? [];
|
|
13
|
+
}
|
|
14
|
+
get id() { return this._id; }
|
|
15
|
+
/** Nombre legible del team (nombre de su entidad). Para mostrar en UI/labels. */
|
|
16
|
+
get name() { return this._owner.name; } // más categoria?
|
|
17
|
+
get entity() { return this._owner; }
|
|
18
|
+
get category() { return this._category; }
|
|
19
|
+
get matches() { return this._matches; }
|
|
20
|
+
addStage(stage) {
|
|
21
|
+
this._stages.set(stage.config.idConfig, stage);
|
|
22
|
+
}
|
|
23
|
+
addNewMatch(match) {
|
|
24
|
+
this._matches.push(match);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.A_Team = A_Team;
|
|
28
|
+
//# sourceMappingURL=A_Team.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A_Team.js","sourceRoot":"","sources":["../src/A_Team.ts"],"names":[],"mappings":";;;AAiBA,MAAsB,MAAM;IAO3B,YAAY,GAAiB;QAHrB,aAAQ,GAAuB,EAAE,CAAC;QAElC,YAAO,GAAyB,IAAI,GAAG,EAAmB,CAAC;QAElE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;QAClB,yBAAyB;QACzB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,EAAE,KAAa,OAAO,IAAI,CAAC,GAAG,CAAA,CAAC,CAAC;IACnC,iFAAiF;IAClF,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA,CAAC,CAAC,CAAC,iBAAiB;IAChE,IAAI,MAAM,KAAiB,OAAO,IAAI,CAAC,MAAM,CAAA,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAmB,OAAO,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;IACtD,IAAI,OAAO,KAAyB,OAAO,IAAI,CAAC,QAAQ,CAAA,CAAC,CAAC;IAE1D,QAAQ,CAAC,KAAuC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAEF,WAAW,CAAC,KAAuB;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CAGD;AA/BD,wBA+BC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Player = exports.A_TeamRoster = void 0;
|
|
4
|
+
class A_TeamRoster {
|
|
5
|
+
constructor(id) {
|
|
6
|
+
this._starters = [];
|
|
7
|
+
this._subs = [];
|
|
8
|
+
this._id = id;
|
|
9
|
+
}
|
|
10
|
+
get id() { return this._id; }
|
|
11
|
+
}
|
|
12
|
+
exports.A_TeamRoster = A_TeamRoster;
|
|
13
|
+
class Player {
|
|
14
|
+
}
|
|
15
|
+
exports.Player = Player;
|
|
16
|
+
//# sourceMappingURL=A_TeamRoster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A_TeamRoster.js","sourceRoot":"","sources":["../src/A_TeamRoster.ts"],"names":[],"mappings":";;;AAAA,MAAsB,YAAY;IAIjC,YAAY,EAAU;QAFd,cAAS,GAAa,EAAE,CAAC;QACzB,UAAK,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IACf,CAAC;IAED,IAAI,EAAE,KAAY,OAAO,IAAI,CAAC,GAAG,CAAA,CAAA,CAAC;CAClC;AATD,oCASC;AAED,MAAa,MAAM;CAElB;AAFD,wBAEC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { IA_ResultInfo } from './A_Result';
|
|
2
|
+
import { A_ResultSerie } from './A_ResultSerie';
|
|
3
|
+
import { A_MatchPlay } from './A_MatchPlay';
|
|
4
|
+
import { TMatchScore } from './scores';
|
|
5
|
+
import { A_Team } from '../A_Team';
|
|
6
|
+
import { A_TeamRoster } from '../A_TeamRoster';
|
|
7
|
+
import { JDateTime, TypeHalfWeekOfYear } from 'jl-calendar';
|
|
8
|
+
export type TypeMatchState = 'created' | 'scheduled' | 'postponed' | 'reschuduled' | 'prev' | 'playing' | 'finished';
|
|
9
|
+
/**
|
|
10
|
+
* Clase abstracta que representa un partido genérico.
|
|
11
|
+
* La lógica de start/advance/finish es común a todos los deportes.
|
|
12
|
+
* Cada deporte extiende esta clase y provee su propio A_MatchPlay.
|
|
13
|
+
*/
|
|
14
|
+
export declare abstract class A_Match<ScoreType extends TMatchScore, TR extends A_TeamRoster> {
|
|
15
|
+
protected _state: TypeMatchState;
|
|
16
|
+
protected _id: string;
|
|
17
|
+
protected _homeTeam: A_Team<TR>;
|
|
18
|
+
protected _awayTeam: A_Team<TR>;
|
|
19
|
+
protected _date: JDateTime;
|
|
20
|
+
protected _allowedDraw: boolean;
|
|
21
|
+
protected _playing: A_MatchPlay<ScoreType, TR>;
|
|
22
|
+
protected _serieResult?: A_ResultSerie<unknown>;
|
|
23
|
+
protected _serieFirstMatchState?: () => TypeMatchState;
|
|
24
|
+
constructor(id: string, homeTeam: A_Team<TR>, awayTeam: A_Team<TR>, hw: TypeHalfWeekOfYear, season: number, allowedDraw: boolean, playing: A_MatchPlay<ScoreType, TR>);
|
|
25
|
+
get id(): string;
|
|
26
|
+
get homeTeam(): A_Team<TR>;
|
|
27
|
+
get awayTeam(): A_Team<TR>;
|
|
28
|
+
get date(): JDateTime;
|
|
29
|
+
get state(): TypeMatchState;
|
|
30
|
+
get isFinished(): boolean;
|
|
31
|
+
get result(): IA_ResultInfo<ScoreType> | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Configura la referencia a la serie (resultado de serie y estado del primer match).
|
|
34
|
+
* Llamado por la serie concreta al crear los matches.
|
|
35
|
+
*/
|
|
36
|
+
setSerieContext(serieResult: A_ResultSerie<unknown>, firstMatchState: () => TypeMatchState): void;
|
|
37
|
+
schedule(dt: JDateTime): void;
|
|
38
|
+
finish(): void;
|
|
39
|
+
start(): void;
|
|
40
|
+
abstract advance(): void;
|
|
41
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A_Match = void 0;
|
|
4
|
+
const jl_calendar_1 = require("jl-calendar");
|
|
5
|
+
/**
|
|
6
|
+
* Clase abstracta que representa un partido genérico.
|
|
7
|
+
* La lógica de start/advance/finish es común a todos los deportes.
|
|
8
|
+
* Cada deporte extiende esta clase y provee su propio A_MatchPlay.
|
|
9
|
+
*/
|
|
10
|
+
class A_Match {
|
|
11
|
+
constructor(id, homeTeam, awayTeam, hw, season, allowedDraw, playing) {
|
|
12
|
+
this._state = 'created';
|
|
13
|
+
this._id = id;
|
|
14
|
+
this._homeTeam = homeTeam;
|
|
15
|
+
this._awayTeam = awayTeam;
|
|
16
|
+
this._date = jl_calendar_1.JDateTime.createFromHalfWeekOfYearAndYear(hw, season, 'middle');
|
|
17
|
+
this._allowedDraw = allowedDraw;
|
|
18
|
+
this._playing = playing;
|
|
19
|
+
this._homeTeam.addNewMatch(this);
|
|
20
|
+
this._awayTeam.addNewMatch(this);
|
|
21
|
+
}
|
|
22
|
+
get id() { return this._id; }
|
|
23
|
+
get homeTeam() { return this._homeTeam; }
|
|
24
|
+
get awayTeam() { return this._awayTeam; }
|
|
25
|
+
get date() { return this._date; }
|
|
26
|
+
get state() { return this._state; }
|
|
27
|
+
get isFinished() { return this._state === 'finished'; }
|
|
28
|
+
get result() {
|
|
29
|
+
return this._playing.result?.getResultInfo();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Configura la referencia a la serie (resultado de serie y estado del primer match).
|
|
33
|
+
* Llamado por la serie concreta al crear los matches.
|
|
34
|
+
*/
|
|
35
|
+
setSerieContext(serieResult, firstMatchState) {
|
|
36
|
+
this._serieResult = serieResult;
|
|
37
|
+
this._serieFirstMatchState = firstMatchState;
|
|
38
|
+
}
|
|
39
|
+
schedule(dt) {
|
|
40
|
+
this._state =
|
|
41
|
+
this._state == 'postponed' || this._state == 'scheduled'
|
|
42
|
+
? 'reschuduled'
|
|
43
|
+
: 'scheduled';
|
|
44
|
+
this._date = dt.copy();
|
|
45
|
+
}
|
|
46
|
+
finish() {
|
|
47
|
+
this._state = 'finished';
|
|
48
|
+
}
|
|
49
|
+
start() {
|
|
50
|
+
if (!(this._state === 'scheduled' || this._state === 'reschuduled'))
|
|
51
|
+
throw new Error('Match is none scheduled');
|
|
52
|
+
this._state = 'playing';
|
|
53
|
+
this._playing.init(this._homeTeam.getTeamMatch(), this._awayTeam.getTeamMatch());
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.A_Match = A_Match;
|
|
57
|
+
//# sourceMappingURL=A_Match.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A_Match.js","sourceRoot":"","sources":["../../src/Match/A_Match.ts"],"names":[],"mappings":";;;AAMA,6CAA4D;AAW5D;;;;GAIG;AACH,MAAsB,OAAO;IAY5B,YACC,EAAU,EACV,QAAoB,EACpB,QAAoB,EACpB,EAAsB,EACtB,MAAc,EACd,WAAoB,EACpB,OAAmC;QAjB1B,WAAM,GAAmB,SAAS,CAAC;QAmB5C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,uBAAS,CAAC,+BAA+B,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7E,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,EAAE,KAAa,OAAO,IAAI,CAAC,GAAG,CAAA,CAAC,CAAC;IACpC,IAAI,QAAQ,KAAiB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAiB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACrD,IAAI,IAAI,KAAgB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,IAAI,KAAK,KAAqB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,IAAI,UAAU,KAAc,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC;IAEhE,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,WAAmC,EAAE,eAAqC;QACzF,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,qBAAqB,GAAG,eAAe,CAAC;IAC9C,CAAC;IAED,QAAQ,CAAC,EAAa;QACrB,IAAI,CAAC,MAAM;YACV,IAAI,CAAC,MAAM,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW;gBACvD,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,WAAW,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,MAAM;QACL,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;IAC1B,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CACjB,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAC7B,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAC7B,CAAC;IACH,CAAC;CAGD;AA3ED,0BA2EC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { A_Result } from './A_Result';
|
|
2
|
+
import { A_TeamRoster } from '../A_TeamRoster';
|
|
3
|
+
/**
|
|
4
|
+
* Clase abstracta que define el contrato de la simulación de un partido.
|
|
5
|
+
* Cada deporte debe implementar su propia lógica de simulación.
|
|
6
|
+
*
|
|
7
|
+
* ScoreType: number para futbol/basketball, IVolleyScore para volleyball, etc.
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class A_MatchPlay<ScoreType, TR extends A_TeamRoster> {
|
|
10
|
+
protected _time: number;
|
|
11
|
+
protected _result: A_Result<ScoreType> | undefined;
|
|
12
|
+
protected _globalResult: A_Result<ScoreType> | undefined;
|
|
13
|
+
protected _teamOne: TR | undefined;
|
|
14
|
+
protected _teamTwo: TR | undefined;
|
|
15
|
+
constructor(globalResult?: A_Result<ScoreType>);
|
|
16
|
+
get time(): number;
|
|
17
|
+
get result(): A_Result<ScoreType> | undefined;
|
|
18
|
+
get globalResult(): A_Result<ScoreType> | undefined;
|
|
19
|
+
abstract init(one: TR, two: TR): void;
|
|
20
|
+
abstract advance(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A_MatchPlay = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Clase abstracta que define el contrato de la simulación de un partido.
|
|
6
|
+
* Cada deporte debe implementar su propia lógica de simulación.
|
|
7
|
+
*
|
|
8
|
+
* ScoreType: number para futbol/basketball, IVolleyScore para volleyball, etc.
|
|
9
|
+
*/
|
|
10
|
+
class A_MatchPlay {
|
|
11
|
+
constructor(globalResult) {
|
|
12
|
+
this._time = -1;
|
|
13
|
+
this._globalResult = globalResult;
|
|
14
|
+
}
|
|
15
|
+
get time() { return this._time; }
|
|
16
|
+
get result() { return this._result; }
|
|
17
|
+
get globalResult() { return this._globalResult; }
|
|
18
|
+
}
|
|
19
|
+
exports.A_MatchPlay = A_MatchPlay;
|
|
20
|
+
//# sourceMappingURL=A_MatchPlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A_MatchPlay.js","sourceRoot":"","sources":["../../src/Match/A_MatchPlay.ts"],"names":[],"mappings":";;;AAGA;;;;;GAKG;AACH,MAAsB,WAAW;IAOhC,YAAY,YAAkC;QAC7C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,IAAI,MAAM,KAAsC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,IAAI,YAAY,KAAsC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;CAIlF;AAlBD,kCAkBC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type TypeTotalScore<ScoreType> = {
|
|
2
|
+
team: string;
|
|
3
|
+
score: ScoreType;
|
|
4
|
+
};
|
|
5
|
+
export interface IA_ResultInfo<ScoreType> {
|
|
6
|
+
teamOneScore: TypeTotalScore<ScoreType>;
|
|
7
|
+
teamTwoScore: TypeTotalScore<ScoreType>;
|
|
8
|
+
teamWinner: string | 'none';
|
|
9
|
+
teamLoser: string | 'none';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Clase abstracta que define el contrato de un resultado de partido.
|
|
13
|
+
* Cada deporte debe implementar su propia lógica de score y determinación de ganador.
|
|
14
|
+
*
|
|
15
|
+
* ScoreType: number para futbol/basketball, IVolleyScore para volleyball, etc.
|
|
16
|
+
*/
|
|
17
|
+
export declare abstract class A_Result<ScoreType> {
|
|
18
|
+
protected _teamOneId: string;
|
|
19
|
+
protected _teamTwoId: string;
|
|
20
|
+
constructor(teamOneId: string, teamTwoId: string);
|
|
21
|
+
get teamOneId(): string;
|
|
22
|
+
get teamTwoId(): string;
|
|
23
|
+
abstract getResultInfo(): IA_ResultInfo<ScoreType>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A_Result = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Clase abstracta que define el contrato de un resultado de partido.
|
|
6
|
+
* Cada deporte debe implementar su propia lógica de score y determinación de ganador.
|
|
7
|
+
*
|
|
8
|
+
* ScoreType: number para futbol/basketball, IVolleyScore para volleyball, etc.
|
|
9
|
+
*/
|
|
10
|
+
class A_Result {
|
|
11
|
+
constructor(teamOneId, teamTwoId) {
|
|
12
|
+
this._teamOneId = teamOneId;
|
|
13
|
+
this._teamTwoId = teamTwoId;
|
|
14
|
+
}
|
|
15
|
+
get teamOneId() { return this._teamOneId; }
|
|
16
|
+
get teamTwoId() { return this._teamTwoId; }
|
|
17
|
+
}
|
|
18
|
+
exports.A_Result = A_Result;
|
|
19
|
+
//# sourceMappingURL=A_Result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A_Result.js","sourceRoot":"","sources":["../../src/Match/A_Result.ts"],"names":[],"mappings":";;;AAYA;;;;;GAKG;AACH,MAAsB,QAAQ;IAK7B,YAAY,SAAiB,EAAE,SAAiB;QAC/C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,SAAS,KAAa,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;IAClD,IAAI,SAAS,KAAa,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;CAGlD;AAdD,4BAcC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface IA_ResultSerieInfo<SerieScoreType> {
|
|
2
|
+
teamOneScore: {
|
|
3
|
+
team: string;
|
|
4
|
+
score: SerieScoreType;
|
|
5
|
+
};
|
|
6
|
+
teamTwoScore: {
|
|
7
|
+
team: string;
|
|
8
|
+
score: SerieScoreType;
|
|
9
|
+
};
|
|
10
|
+
teamWinner: string | 'none';
|
|
11
|
+
teamLoser: string | 'none';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Clase abstracta que define el contrato del resultado de una serie.
|
|
15
|
+
*
|
|
16
|
+
* SerieScoreType: el tipo de score de la serie, que no necesariamente
|
|
17
|
+
* coincide con el ScoreType del match individual.
|
|
18
|
+
* Ej: en volleyball, el match score es IVolleyScore (sets + puntos por set),
|
|
19
|
+
* pero el serie score podría ser number (puntos de partido: 3 por 3-0, 2 por 3-1, etc.).
|
|
20
|
+
*/
|
|
21
|
+
export declare abstract class A_ResultSerie<SerieScoreType> {
|
|
22
|
+
protected _teamOneId: string;
|
|
23
|
+
protected _teamTwoId: string;
|
|
24
|
+
constructor(teamOneId: string, teamTwoId: string);
|
|
25
|
+
get teamOneId(): string;
|
|
26
|
+
get teamTwoId(): string;
|
|
27
|
+
abstract getResultSerieInfo(): IA_ResultSerieInfo<SerieScoreType>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A_ResultSerie = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Clase abstracta que define el contrato del resultado de una serie.
|
|
6
|
+
*
|
|
7
|
+
* SerieScoreType: el tipo de score de la serie, que no necesariamente
|
|
8
|
+
* coincide con el ScoreType del match individual.
|
|
9
|
+
* Ej: en volleyball, el match score es IVolleyScore (sets + puntos por set),
|
|
10
|
+
* pero el serie score podría ser number (puntos de partido: 3 por 3-0, 2 por 3-1, etc.).
|
|
11
|
+
*/
|
|
12
|
+
class A_ResultSerie {
|
|
13
|
+
constructor(teamOneId, teamTwoId) {
|
|
14
|
+
this._teamOneId = teamOneId;
|
|
15
|
+
this._teamTwoId = teamTwoId;
|
|
16
|
+
}
|
|
17
|
+
get teamOneId() { return this._teamOneId; }
|
|
18
|
+
get teamTwoId() { return this._teamTwoId; }
|
|
19
|
+
}
|
|
20
|
+
exports.A_ResultSerie = A_ResultSerie;
|
|
21
|
+
//# sourceMappingURL=A_ResultSerie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A_ResultSerie.js","sourceRoot":"","sources":["../../src/Match/A_ResultSerie.ts"],"names":[],"mappings":";;;AAOA;;;;;;;GAOG;AACH,MAAsB,aAAa;IAKlC,YAAY,SAAiB,EAAE,SAAiB;QAC/C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,SAAS,KAAa,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;IAClD,IAAI,SAAS,KAAa,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;CAGlD;AAdD,sCAcC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { A_ResultSerie } from './A_ResultSerie';
|
|
2
|
+
import { A_Match } from './A_Match';
|
|
3
|
+
import { TMatchScore, TSerieScore } from './scores';
|
|
4
|
+
import { A_Team } from '../A_Team';
|
|
5
|
+
import { A_TeamRoster } from '../A_TeamRoster';
|
|
6
|
+
import { TypeBaseStageOption } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* Clase abstracta que representa una serie genérica (ida y vuelta o partido único).
|
|
9
|
+
*
|
|
10
|
+
* MS: tipo del score de cada match individual.
|
|
11
|
+
* SS: tipo del score de la serie (puede diferir del match).
|
|
12
|
+
*
|
|
13
|
+
* Cada deporte extiende esta clase y define:
|
|
14
|
+
* - Cómo se crea el resultado de serie y los matches (en el constructor)
|
|
15
|
+
* - Cómo se determina el ganador/perdedor (winner/loser abstractos)
|
|
16
|
+
* - Cuándo la serie está terminada (isFinished abstracto)
|
|
17
|
+
*/
|
|
18
|
+
export declare abstract class A_Serie<MS extends TMatchScore, SS extends TSerieScore, TR extends A_TeamRoster> {
|
|
19
|
+
protected _id: string;
|
|
20
|
+
protected _teamOne: A_Team<TR>;
|
|
21
|
+
protected _teamTwo: A_Team<TR>;
|
|
22
|
+
protected _opt: TypeBaseStageOption;
|
|
23
|
+
protected _resultSerie: A_ResultSerie<SS>;
|
|
24
|
+
protected _matches: A_Match<MS, TR>[];
|
|
25
|
+
constructor(id: string, teamOne: A_Team<TR>, teamTwo: A_Team<TR>, opt: TypeBaseStageOption, resultSerie: A_ResultSerie<SS>, matches: A_Match<MS, TR>[]);
|
|
26
|
+
get id(): string;
|
|
27
|
+
get opt(): TypeBaseStageOption;
|
|
28
|
+
get resultSerie(): A_ResultSerie<SS>;
|
|
29
|
+
get matches(): A_Match<MS, TR>[];
|
|
30
|
+
abstract get isFinished(): boolean;
|
|
31
|
+
abstract get winner(): A_Team<TR>;
|
|
32
|
+
abstract get loser(): A_Team<TR>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A_Serie = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Clase abstracta que representa una serie genérica (ida y vuelta o partido único).
|
|
6
|
+
*
|
|
7
|
+
* MS: tipo del score de cada match individual.
|
|
8
|
+
* SS: tipo del score de la serie (puede diferir del match).
|
|
9
|
+
*
|
|
10
|
+
* Cada deporte extiende esta clase y define:
|
|
11
|
+
* - Cómo se crea el resultado de serie y los matches (en el constructor)
|
|
12
|
+
* - Cómo se determina el ganador/perdedor (winner/loser abstractos)
|
|
13
|
+
* - Cuándo la serie está terminada (isFinished abstracto)
|
|
14
|
+
*/
|
|
15
|
+
class A_Serie {
|
|
16
|
+
constructor(id, teamOne, teamTwo, opt, resultSerie, matches) {
|
|
17
|
+
this._id = id;
|
|
18
|
+
this._teamOne = teamOne;
|
|
19
|
+
this._teamTwo = teamTwo;
|
|
20
|
+
this._opt = opt;
|
|
21
|
+
this._resultSerie = resultSerie;
|
|
22
|
+
this._matches = matches;
|
|
23
|
+
}
|
|
24
|
+
get id() { return this._id; }
|
|
25
|
+
get opt() { return this._opt; }
|
|
26
|
+
get resultSerie() { return this._resultSerie; }
|
|
27
|
+
get matches() { return this._matches; }
|
|
28
|
+
}
|
|
29
|
+
exports.A_Serie = A_Serie;
|
|
30
|
+
//# sourceMappingURL=A_Serie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A_Serie.js","sourceRoot":"","sources":["../../src/Match/A_Serie.ts"],"names":[],"mappings":";;;AAOA;;;;;;;;;;GAUG;AACH,MAAsB,OAAO;IAS5B,YACC,EAAU,EACV,OAAmB,EACnB,OAAmB,EACnB,GAAwB,EACxB,WAA8B,EAC9B,OAA0B;QAE1B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,EAAE,KAAa,OAAO,IAAI,CAAC,GAAG,CAAA,CAAC,CAAC;IACpC,IAAI,GAAG,KAA0B,OAAO,IAAI,CAAC,IAAI,CAAA,CAAC,CAAC;IACnD,IAAI,WAAW,KAAwB,OAAO,IAAI,CAAC,YAAY,CAAA,CAAC,CAAC;IACjE,IAAI,OAAO,KAAwB,OAAO,IAAI,CAAC,QAAQ,CAAA,CAAC,CAAC;CAKzD;AAjCD,0BAiCC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Score de un partido de volleyball.
|
|
3
|
+
* Cada equipo tiene sets ganados y los puntos de cada set.
|
|
4
|
+
*/
|
|
5
|
+
export interface IVolleyScore {
|
|
6
|
+
setsWon: number;
|
|
7
|
+
setPoints: number[];
|
|
8
|
+
}
|
|
9
|
+
export interface IFootablScore {
|
|
10
|
+
goals: number;
|
|
11
|
+
}
|
|
12
|
+
export interface IAmericanFootballScore {
|
|
13
|
+
totalPoints: number;
|
|
14
|
+
touchdowns: number;
|
|
15
|
+
fieldGoals: number;
|
|
16
|
+
extraPoints: number;
|
|
17
|
+
twoPointConversions: number;
|
|
18
|
+
safeties: number;
|
|
19
|
+
}
|
|
20
|
+
export type TMatchScore = number | IVolleyScore | IFootablScore | IAmericanFootballScore;
|
|
21
|
+
export type TSerieScore = number | IVolleyScore | IFootablScore | IAmericanFootballScore;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scores.js","sourceRoot":"","sources":["../../src/Match/scores.ts"],"names":[],"mappings":""}
|
package/dist/Person.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface IPersonData {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly name: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Identidad humana reutilizable por jugadores, entrenadores, árbitros,
|
|
7
|
+
* instituciones y funciones administrativas.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Person {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
constructor(data: IPersonData);
|
|
13
|
+
}
|
package/dist/Person.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Person = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Identidad humana reutilizable por jugadores, entrenadores, árbitros,
|
|
6
|
+
* instituciones y funciones administrativas.
|
|
7
|
+
*/
|
|
8
|
+
// ES NECESARIO QUE SEA UNA CLASE?
|
|
9
|
+
class Person {
|
|
10
|
+
constructor(data) {
|
|
11
|
+
this.id = data.id;
|
|
12
|
+
this.name = data.name;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Person = Person;
|
|
16
|
+
//# sourceMappingURL=Person.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Person.js","sourceRoot":"","sources":["../src/Person.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACH,kCAAkC;AAClC,MAAa,MAAM;IAIjB,YAAY,IAAiB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AARD,wBAQC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { A_Match } from './Match/A_Match';
|
|
2
|
+
export { A_MatchPlay } from './Match/A_MatchPlay';
|
|
3
|
+
export { A_Result } from './Match/A_Result';
|
|
4
|
+
export { A_ResultSerie } from './Match/A_ResultSerie';
|
|
5
|
+
export { A_Serie } from './Match/A_Serie';
|
|
6
|
+
export { Person } from './Person';
|
|
7
|
+
export type { IPersonData } from './Person';
|
|
8
|
+
export { A_Team, AnyTeam } from './A_Team';
|
|
9
|
+
export { A_TeamRoster } from './A_TeamRoster';
|
|
10
|
+
export type { ITeamCreator, ITeamOwner } from './A_Team';
|
|
11
|
+
export { CATEGORIES, getCategoryList } from './types';
|
|
12
|
+
export type { TypeMatchState } from './Match/A_Match';
|
|
13
|
+
export type { IA_ResultInfo, TypeTotalScore } from './Match/A_Result';
|
|
14
|
+
export type { IA_ResultSerieInfo } from './Match/A_ResultSerie';
|
|
15
|
+
export type { TMatchScore, TSerieScore } from './Match/scores';
|
|
16
|
+
export type { ISportProfile, AnySportProfile, IMatchCreationInfo, ISerieCreationInfo } from './profiles/ISportProfile';
|
|
17
|
+
export { A_TeamTableItem, type AnyTeamTableItem } from './profiles/A_TeamTableItem';
|
|
18
|
+
export type { arr2, TypeBaseStageOption, TypeCategory, TypeCategoryList } from './types';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A_TeamTableItem = exports.getCategoryList = exports.CATEGORIES = exports.A_TeamRoster = exports.A_Team = exports.Person = exports.A_Serie = exports.A_ResultSerie = exports.A_Result = exports.A_MatchPlay = exports.A_Match = void 0;
|
|
4
|
+
var A_Match_1 = require("./Match/A_Match");
|
|
5
|
+
Object.defineProperty(exports, "A_Match", { enumerable: true, get: function () { return A_Match_1.A_Match; } });
|
|
6
|
+
var A_MatchPlay_1 = require("./Match/A_MatchPlay");
|
|
7
|
+
Object.defineProperty(exports, "A_MatchPlay", { enumerable: true, get: function () { return A_MatchPlay_1.A_MatchPlay; } });
|
|
8
|
+
var A_Result_1 = require("./Match/A_Result");
|
|
9
|
+
Object.defineProperty(exports, "A_Result", { enumerable: true, get: function () { return A_Result_1.A_Result; } });
|
|
10
|
+
var A_ResultSerie_1 = require("./Match/A_ResultSerie");
|
|
11
|
+
Object.defineProperty(exports, "A_ResultSerie", { enumerable: true, get: function () { return A_ResultSerie_1.A_ResultSerie; } });
|
|
12
|
+
var A_Serie_1 = require("./Match/A_Serie");
|
|
13
|
+
Object.defineProperty(exports, "A_Serie", { enumerable: true, get: function () { return A_Serie_1.A_Serie; } });
|
|
14
|
+
var Person_1 = require("./Person");
|
|
15
|
+
Object.defineProperty(exports, "Person", { enumerable: true, get: function () { return Person_1.Person; } });
|
|
16
|
+
var A_Team_1 = require("./A_Team");
|
|
17
|
+
Object.defineProperty(exports, "A_Team", { enumerable: true, get: function () { return A_Team_1.A_Team; } });
|
|
18
|
+
var A_TeamRoster_1 = require("./A_TeamRoster");
|
|
19
|
+
Object.defineProperty(exports, "A_TeamRoster", { enumerable: true, get: function () { return A_TeamRoster_1.A_TeamRoster; } });
|
|
20
|
+
var types_1 = require("./types");
|
|
21
|
+
Object.defineProperty(exports, "CATEGORIES", { enumerable: true, get: function () { return types_1.CATEGORIES; } });
|
|
22
|
+
Object.defineProperty(exports, "getCategoryList", { enumerable: true, get: function () { return types_1.getCategoryList; } });
|
|
23
|
+
var A_TeamTableItem_1 = require("./profiles/A_TeamTableItem");
|
|
24
|
+
Object.defineProperty(exports, "A_TeamTableItem", { enumerable: true, get: function () { return A_TeamTableItem_1.A_TeamTableItem; } });
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA0C;AAAjC,kGAAA,OAAO,OAAA;AAChB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AACpB,6CAA4C;AAAnC,oGAAA,QAAQ,OAAA;AACjB,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AACtB,2CAA0C;AAAjC,kGAAA,OAAO,OAAA;AAChB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AAEf,mCAA2C;AAAlC,gGAAA,MAAM,OAAA;AACf,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AAErB,iCAAsD;AAA7C,mGAAA,UAAU,OAAA;AAAE,wGAAA,eAAe,OAAA;AAMpC,8DAAoF;AAA3E,kHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { AnyTeam } from "../A_Team";
|
|
2
|
+
export type IA_TeamTableItemBase = {
|
|
3
|
+
pos: number;
|
|
4
|
+
P: number;
|
|
5
|
+
ps: number;
|
|
6
|
+
pm: number;
|
|
7
|
+
team: string;
|
|
8
|
+
};
|
|
9
|
+
export type IA_TeamTableItem<Res extends string, Punt extends string> = IA_TeamTableItemBase & {
|
|
10
|
+
[k in Res]: number;
|
|
11
|
+
} & {
|
|
12
|
+
[k in Punt]: number;
|
|
13
|
+
};
|
|
14
|
+
export declare abstract class A_TeamTableItem<Res extends string, Punt extends string> {
|
|
15
|
+
private _team;
|
|
16
|
+
private _pos;
|
|
17
|
+
private _matchResults;
|
|
18
|
+
private _matchPuntuations;
|
|
19
|
+
private _bsId;
|
|
20
|
+
constructor(t: AnyTeam, bsId: string);
|
|
21
|
+
/**
|
|
22
|
+
* Generar los valores iniciales de MatchTeamResults
|
|
23
|
+
*/
|
|
24
|
+
abstract getInitialCountOfMathResults(): {
|
|
25
|
+
[k in Res]: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* generar los valores iniciales de MatchTeamPuntuation
|
|
29
|
+
*/
|
|
30
|
+
abstract getInitialCountOfMathPuntuations(): {
|
|
31
|
+
[k in Punt]: number;
|
|
32
|
+
};
|
|
33
|
+
get bsId(): string;
|
|
34
|
+
set pos(pos: number);
|
|
35
|
+
get pos(): number;
|
|
36
|
+
get P(): number;
|
|
37
|
+
get pm(): number;
|
|
38
|
+
get matchResults(): { [k in Res]: number; };
|
|
39
|
+
get matchPuntuations(): { [k in Punt]: number; };
|
|
40
|
+
/**
|
|
41
|
+
* calculo de puntos
|
|
42
|
+
*/
|
|
43
|
+
abstract get ps(): number;
|
|
44
|
+
addMatchResult(r: Res): void;
|
|
45
|
+
addMatchPuntuation(p: Punt): void;
|
|
46
|
+
get team(): AnyTeam;
|
|
47
|
+
abstract getSortFunc(): SortFunc;
|
|
48
|
+
getInterface(): IA_TeamTableItemBase;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Type alias para usar A_TeamTableItem de forma genérica sin conocer Res/Punt concretos.
|
|
52
|
+
*/
|
|
53
|
+
export type AnyTeamTableItem = A_TeamTableItem<string, string>;
|
|
54
|
+
/**
|
|
55
|
+
* Type alias para la función de ordenamiento genérica.
|
|
56
|
+
*/
|
|
57
|
+
export type SortFunc = (a: AnyTeamTableItem, b: AnyTeamTableItem, isSE: boolean) => number;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A_TeamTableItem = void 0;
|
|
4
|
+
class A_TeamTableItem {
|
|
5
|
+
constructor(t, bsId) {
|
|
6
|
+
this._pos = 1;
|
|
7
|
+
this._team = t;
|
|
8
|
+
this._bsId = bsId;
|
|
9
|
+
this._matchResults = this.getInitialCountOfMathResults();
|
|
10
|
+
this._matchPuntuations = this.getInitialCountOfMathPuntuations();
|
|
11
|
+
}
|
|
12
|
+
get bsId() { return this._bsId; }
|
|
13
|
+
set pos(pos) { this._pos = pos; }
|
|
14
|
+
;
|
|
15
|
+
get pos() { return this._pos; }
|
|
16
|
+
;
|
|
17
|
+
get P() {
|
|
18
|
+
let out = 0;
|
|
19
|
+
for (let k in this._matchResults) {
|
|
20
|
+
out += this._matchResults[k];
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
get pm() {
|
|
25
|
+
return this.P == 0 ? 0 : Math.round(this.ps / this.P * 1000) / 1000;
|
|
26
|
+
}
|
|
27
|
+
get matchResults() { return this._matchResults; }
|
|
28
|
+
get matchPuntuations() { return this._matchPuntuations; }
|
|
29
|
+
addMatchResult(r) { this._matchResults[r]++; }
|
|
30
|
+
addMatchPuntuation(p) { this._matchPuntuations[p]++; }
|
|
31
|
+
get team() {
|
|
32
|
+
return this._team;
|
|
33
|
+
}
|
|
34
|
+
getInterface() {
|
|
35
|
+
return {
|
|
36
|
+
pos: this.pos,
|
|
37
|
+
P: this.P,
|
|
38
|
+
...this._matchResults,
|
|
39
|
+
...this._matchPuntuations,
|
|
40
|
+
ps: this.ps,
|
|
41
|
+
pm: this.pm,
|
|
42
|
+
team: this.team.id,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.A_TeamTableItem = A_TeamTableItem;
|
|
47
|
+
const A_simpleSortFunc = (a, b, isSE) => {
|
|
48
|
+
if (isSE) {
|
|
49
|
+
if (a.P - b.P !== 0) {
|
|
50
|
+
return b.P - a.P;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (b.pos - a.pos !== 0) {
|
|
54
|
+
return a.pos - b.pos;
|
|
55
|
+
}
|
|
56
|
+
if (!isSE) {
|
|
57
|
+
if (a.pm - b.pm !== 0) {
|
|
58
|
+
return b.pm - a.pm;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// if (a.ps - b.ps !== 0) {
|
|
62
|
+
return b.ps - a.ps;
|
|
63
|
+
// }
|
|
64
|
+
// if (a.sg - b.sg !== 0) {
|
|
65
|
+
// return b.sg - a.sg;
|
|
66
|
+
// }
|
|
67
|
+
// return b.gf - a.gf;
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=A_TeamTableItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"A_TeamTableItem.js","sourceRoot":"","sources":["../../src/profiles/A_TeamTableItem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { TypeHalfWeekOfYear } from "jl-calendar";
|
|
2
|
+
import { A_Team } from "../A_Team";
|
|
3
|
+
import { A_TeamRoster } from "../A_TeamRoster";
|
|
4
|
+
import { A_TeamTableItem } from "./A_TeamTableItem";
|
|
5
|
+
import { A_Result, IA_ResultInfo } from "../Match/A_Result";
|
|
6
|
+
import { A_MatchPlay } from "../Match/A_MatchPlay";
|
|
7
|
+
import { A_Match } from "../Match/A_Match";
|
|
8
|
+
import { A_Serie } from "../Match/A_Serie";
|
|
9
|
+
import { TMatchScore, TSerieScore } from "../Match/scores";
|
|
10
|
+
import { arr2, TypeBaseStageOption } from '../types';
|
|
11
|
+
/**
|
|
12
|
+
* Info genérica para crear un Match desde el profile.
|
|
13
|
+
* Contiene solo datos estructurales/de scheduling, no lógica de deporte.
|
|
14
|
+
* Para matches dentro de una serie, A_Serie los crea internamente.
|
|
15
|
+
*/
|
|
16
|
+
export interface IMatchCreationInfo<TR extends A_TeamRoster> {
|
|
17
|
+
id: string;
|
|
18
|
+
hw: TypeHalfWeekOfYear;
|
|
19
|
+
season: number;
|
|
20
|
+
homeTeam: A_Team<TR>;
|
|
21
|
+
awayTeam: A_Team<TR>;
|
|
22
|
+
allowedDraw: boolean;
|
|
23
|
+
isNeutral: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Info genérica para crear una Serie desde el profile.
|
|
27
|
+
*/
|
|
28
|
+
export interface ISerieCreationInfo<TR extends A_TeamRoster> {
|
|
29
|
+
teamOne: A_Team<TR>;
|
|
30
|
+
teamTwo: A_Team<TR>;
|
|
31
|
+
hws: arr2<TypeHalfWeekOfYear>;
|
|
32
|
+
season: number;
|
|
33
|
+
id: string;
|
|
34
|
+
opt: TypeBaseStageOption;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Interfaz que encapsula todo lo específico de un deporte.
|
|
38
|
+
* Cada deporte implementa su propio profile.
|
|
39
|
+
* El profile es la fábrica completa: crea Match, Serie, Result, MatchPlay, TableItem.
|
|
40
|
+
* Agregar un nuevo deporte = crear un nuevo profile + sus clases concretas.
|
|
41
|
+
*
|
|
42
|
+
* MS: tipo del score del partido (number para futbol/basketball, IVolleyScore para volleyball, etc.)
|
|
43
|
+
* Res: tipos de resultado posibles ('W' | 'D' | 'L' para futbol, 'W' | 'L' para basketball, etc.)
|
|
44
|
+
* Punt: tipos de puntuación ('gf' | 'ga' para futbol, 'pf' | 'pa' para basketball, etc.)
|
|
45
|
+
*/
|
|
46
|
+
export interface ISportProfile<MS extends TMatchScore, SS extends TSerieScore, Res extends string, Punt extends string, TR extends A_TeamRoster> {
|
|
47
|
+
/**
|
|
48
|
+
* Crea un partido completo con toda la lógica específica del deporte.
|
|
49
|
+
*/
|
|
50
|
+
createMatch(info: IMatchCreationInfo<TR>): A_Match<MS, TR>;
|
|
51
|
+
/**
|
|
52
|
+
* Crea una serie (ida/vuelta o partido único) con la lógica específica del deporte.
|
|
53
|
+
* Cada deporte define cómo se resuelve el desempate de una serie.
|
|
54
|
+
*/
|
|
55
|
+
createSerie(info: ISerieCreationInfo<TR>): A_Serie<MS, SS, TR>;
|
|
56
|
+
/**
|
|
57
|
+
* Crea un resultado vacío para un partido entre dos equipos.
|
|
58
|
+
*/
|
|
59
|
+
createResult(teamOneId: string, teamTwoId: string): A_Result<MS>;
|
|
60
|
+
/**
|
|
61
|
+
* Crea la simulación de un partido.
|
|
62
|
+
* @param globalResult resultado global de la serie (para ida y vuelta)
|
|
63
|
+
*/
|
|
64
|
+
createMatchPlay(globalResult?: A_Result<MS>): A_MatchPlay<MS, TR>;
|
|
65
|
+
/**
|
|
66
|
+
* Crea un item de tabla para un equipo en un BaseStage.
|
|
67
|
+
*/
|
|
68
|
+
createTableItem(team: A_Team<TR>, bsId: string): A_TeamTableItem<Res, Punt>;
|
|
69
|
+
/**
|
|
70
|
+
* Actualiza un item de tabla a partir del resultado de un partido.
|
|
71
|
+
*/
|
|
72
|
+
updateTableFromResult(tti: A_TeamTableItem<Res, Punt>, resultInfo: IA_ResultInfo<MS>, teamId: string): void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Tipo para usar ISportProfile de forma genérica sin propagar los tipos Res/Punt.
|
|
76
|
+
*/
|
|
77
|
+
export type AnySportProfile = ISportProfile<any, any, string, string, any>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISportProfile.js","sourceRoot":"","sources":["../../src/profiles/ISportProfile.ts"],"names":[],"mappings":""}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface arr2<T> {
|
|
2
|
+
0: T;
|
|
3
|
+
1: T;
|
|
4
|
+
}
|
|
5
|
+
export type TypeCategory = 'S' | 'S23' | 'S21' | 'S19' | 'S17' | 'S15' | 'S13';
|
|
6
|
+
export declare const CATEGORIES: TypeCategory[];
|
|
7
|
+
export type TypeCategoryList<T> = {
|
|
8
|
+
[K in TypeCategory]?: T;
|
|
9
|
+
};
|
|
10
|
+
export declare const getCategoryList: <T>(generic: T) => TypeCategoryList<T>;
|
|
11
|
+
export type TypeBaseStageOption = 'home' | 'h&a' | 'neutral';
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCategoryList = exports.CATEGORIES = void 0;
|
|
4
|
+
exports.CATEGORIES = ['S', 'S23', 'S21', 'S19', 'S17', 'S15', 'S13'];
|
|
5
|
+
const getCategoryList = (generic) => {
|
|
6
|
+
return {
|
|
7
|
+
'S': generic, 'S23': generic, 'S21': generic, 'S19': generic, 'S17': generic, 'S15': generic, 'S13': generic
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
exports.getCategoryList = getCategoryList;
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAOa,QAAA,UAAU,GAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAGnF,MAAM,eAAe,GAAG,CAAI,OAAU,EAAuB,EAAE;IACpE,OAAO;QACL,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;KAC7G,CAAA;AACH,CAAC,CAAA;AAJY,QAAA,eAAe,mBAI3B"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jl-sprt-core",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "npm run clean && tsc",
|
|
12
|
+
"clean": "node ./scripts/clean.js",
|
|
13
|
+
"clean:all": "node ./scripts/clean.js --all",
|
|
14
|
+
"dev:tsc": "tsc --watch",
|
|
15
|
+
"dev:nodemon": "nodemon ./dist/index.js ",
|
|
16
|
+
"test": "vitest",
|
|
17
|
+
"start": "node ./dist/index.js",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"author": "JELimaR",
|
|
21
|
+
"license": "ISC",
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^22.10.0",
|
|
24
|
+
"nodemon": "^3.1.14",
|
|
25
|
+
"typescript": "~5.4.5",
|
|
26
|
+
"vitest": "^5.0.0"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"jl-calendar": "^2.1.1"
|
|
30
|
+
}
|
|
31
|
+
}
|