tods-competition-factory 2.2.40 → 2.2.42
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/index.mjs +8 -8
- package/dist/tods-competition-factory.d.ts +5 -5
- package/dist/tods-competition-factory.development.cjs.js +185 -109
- package/dist/tods-competition-factory.development.cjs.js.map +1 -1
- package/dist/tods-competition-factory.production.cjs.min.js +1 -1
- package/dist/tods-competition-factory.production.cjs.min.js.map +1 -1
- package/package.json +2 -2
|
@@ -4626,11 +4626,11 @@ declare function deleteFlightProfileAndFlightDraws({ autoPublish, tournamentReco
|
|
|
4626
4626
|
event: any;
|
|
4627
4627
|
force: any;
|
|
4628
4628
|
}): {
|
|
4629
|
-
error: any;
|
|
4630
|
-
} | {
|
|
4631
4629
|
success?: boolean;
|
|
4632
4630
|
error?: ErrorType;
|
|
4633
4631
|
info?: any;
|
|
4632
|
+
} | {
|
|
4633
|
+
error: any;
|
|
4634
4634
|
};
|
|
4635
4635
|
|
|
4636
4636
|
type ModifyEventMatchUpFormatTimingArgs = {
|
|
@@ -4644,13 +4644,13 @@ type ModifyEventMatchUpFormatTimingArgs = {
|
|
|
4644
4644
|
event?: Event$1;
|
|
4645
4645
|
};
|
|
4646
4646
|
declare function modifyEventMatchUpFormatTiming(params: ModifyEventMatchUpFormatTimingArgs): {
|
|
4647
|
-
success: boolean;
|
|
4648
|
-
error?: undefined;
|
|
4649
|
-
} | {
|
|
4650
4647
|
error: {
|
|
4651
4648
|
message: string;
|
|
4652
4649
|
code: string;
|
|
4653
4650
|
};
|
|
4651
|
+
} | {
|
|
4652
|
+
success: boolean;
|
|
4653
|
+
error?: undefined;
|
|
4654
4654
|
};
|
|
4655
4655
|
|
|
4656
4656
|
type RemoveEventMatchUpFormatTimingArgs = {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
function factoryVersion() {
|
|
6
|
-
return '2.2.
|
|
6
|
+
return '2.2.42';
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
const SINGLES_MATCHUP = 'SINGLES';
|
|
@@ -1982,13 +1982,15 @@ const setTypes$1 = {
|
|
|
1982
1982
|
};
|
|
1983
1983
|
|
|
1984
1984
|
function stringify(matchUpFormatObject, preserveRedundant) {
|
|
1985
|
+
if (!isObject(matchUpFormatObject))
|
|
1986
|
+
return undefined;
|
|
1985
1987
|
if ((matchUpFormatObject?.bestOf || matchUpFormatObject?.exactly) && matchUpFormatObject?.setFormat) {
|
|
1986
1988
|
return getSetFormat(matchUpFormatObject, preserveRedundant);
|
|
1987
1989
|
}
|
|
1988
1990
|
return undefined;
|
|
1989
1991
|
}
|
|
1990
1992
|
function getNumber$1(formatstring) {
|
|
1991
|
-
return !isNaN(Number(formatstring)) && Number(formatstring);
|
|
1993
|
+
return !Number.isNaN(Number(formatstring)) && Number(formatstring);
|
|
1992
1994
|
}
|
|
1993
1995
|
function timedSetFormat(matchUpFormatObject) {
|
|
1994
1996
|
let value = `T${matchUpFormatObject.minutes}`;
|
|
@@ -2025,7 +2027,7 @@ function getSetFormat(matchUpFormatObject, preserveRedundant) {
|
|
|
2025
2027
|
'';
|
|
2026
2028
|
const valid = setLimitCode && setCountValue;
|
|
2027
2029
|
if (valid) {
|
|
2028
|
-
return [setLimitCode, setCode, finalSetCode].filter(
|
|
2030
|
+
return [setLimitCode, setCode, finalSetCode].filter(Boolean).join('-');
|
|
2029
2031
|
}
|
|
2030
2032
|
return undefined;
|
|
2031
2033
|
}
|
|
@@ -32184,7 +32186,7 @@ var help = {
|
|
|
32184
32186
|
tidyScore: tidyScore
|
|
32185
32187
|
};
|
|
32186
32188
|
|
|
32187
|
-
function validateTiebreakOnlySet(winnerScore, loserScore, scoreDiff, tiebreakSetTo, allowIncomplete) {
|
|
32189
|
+
function validateTiebreakOnlySet(winnerScore, loserScore, scoreDiff, tiebreakSetTo, allowIncomplete, NoAD = false) {
|
|
32188
32190
|
if (allowIncomplete) {
|
|
32189
32191
|
return { isValid: true };
|
|
32190
32192
|
}
|
|
@@ -32197,12 +32199,18 @@ function validateTiebreakOnlySet(winnerScore, loserScore, scoreDiff, tiebreakSet
|
|
|
32197
32199
|
error: `Tiebreak-only set winner must reach at least ${tiebreakSetTo}, got ${winnerScore}`,
|
|
32198
32200
|
};
|
|
32199
32201
|
}
|
|
32200
|
-
|
|
32202
|
+
const requiredWinBy = NoAD ? 1 : 2;
|
|
32203
|
+
if (scoreDiff < requiredWinBy) {
|
|
32201
32204
|
return {
|
|
32202
32205
|
isValid: false,
|
|
32203
|
-
error:
|
|
32206
|
+
error: NoAD
|
|
32207
|
+
? `Tiebreak-only set (NoAD) must be won by at least 1 point, got ${winnerScore}-${loserScore}`
|
|
32208
|
+
: `Tiebreak-only set must be won by at least 2 points, got ${winnerScore}-${loserScore}`,
|
|
32204
32209
|
};
|
|
32205
32210
|
}
|
|
32211
|
+
if (NoAD) {
|
|
32212
|
+
return { isValid: true };
|
|
32213
|
+
}
|
|
32206
32214
|
if (winnerScore === tiebreakSetTo && loserScore > tiebreakSetTo - 2) {
|
|
32207
32215
|
return {
|
|
32208
32216
|
isValid: false,
|
|
@@ -32366,6 +32374,24 @@ function validateSetScore(set, matchUpFormat, isDecidingSet, allowIncomplete) {
|
|
|
32366
32374
|
const setFormat = isDecidingSet && parsed.finalSetFormat ? parsed.finalSetFormat : parsed.setFormat;
|
|
32367
32375
|
if (!setFormat)
|
|
32368
32376
|
return { isValid: true };
|
|
32377
|
+
if (setFormat.timed) {
|
|
32378
|
+
if (!allowIncomplete) {
|
|
32379
|
+
const side1Score = set.side1Score ?? 0;
|
|
32380
|
+
const side2Score = set.side2Score ?? 0;
|
|
32381
|
+
if (side1Score === 0 && side2Score === 0) {
|
|
32382
|
+
return { isValid: false, error: 'Timed set requires at least one side to have scored' };
|
|
32383
|
+
}
|
|
32384
|
+
if (setFormat.based === 'P') {
|
|
32385
|
+
if (side1Score === side2Score && side1Score > 0 && setFormat.tiebreakFormat) {
|
|
32386
|
+
const hasTiebreak = set.side1TiebreakScore !== undefined || set.side2TiebreakScore !== undefined;
|
|
32387
|
+
if (!hasTiebreak) {
|
|
32388
|
+
return { isValid: false, error: 'Tied timed set requires tiebreak' };
|
|
32389
|
+
}
|
|
32390
|
+
}
|
|
32391
|
+
}
|
|
32392
|
+
}
|
|
32393
|
+
return { isValid: true };
|
|
32394
|
+
}
|
|
32369
32395
|
const { setTo, tiebreakAt, tiebreakFormat, tiebreakSet } = setFormat;
|
|
32370
32396
|
const tiebreakSetTo = tiebreakSet?.tiebreakTo;
|
|
32371
32397
|
const isTiebreakOnlyFormat = !!tiebreakSetTo && !setTo;
|
|
@@ -32375,7 +32401,8 @@ function validateSetScore(set, matchUpFormat, isDecidingSet, allowIncomplete) {
|
|
|
32375
32401
|
const loserScore = Math.min(side1Score, side2Score);
|
|
32376
32402
|
const scoreDiff = winnerScore - loserScore;
|
|
32377
32403
|
if (isTiebreakOnlyFormat) {
|
|
32378
|
-
|
|
32404
|
+
const NoAD = setFormat.tiebreakSet?.NoAD ?? false;
|
|
32405
|
+
return validateTiebreakOnlySet(winnerScore, loserScore, scoreDiff, tiebreakSetTo, allowIncomplete ?? false, NoAD);
|
|
32379
32406
|
}
|
|
32380
32407
|
const hasExplicitTiebreak = side1TiebreakScore !== undefined || side2TiebreakScore !== undefined;
|
|
32381
32408
|
const isImplicitTiebreak = setTo && winnerScore === setTo + 1 && loserScore === setTo;
|
|
@@ -32613,94 +32640,115 @@ function getHighTiebreakValue(params) {
|
|
|
32613
32640
|
return tiebreakTo;
|
|
32614
32641
|
}
|
|
32615
32642
|
|
|
32643
|
+
function determineWinningSide(score1, score2) {
|
|
32644
|
+
return (score1 > score2 && 1) || (score1 < score2 && 2) || undefined;
|
|
32645
|
+
}
|
|
32646
|
+
function parseTiebreakOnlySet(bracketedScores, isTiebreakOnlyFormat) {
|
|
32647
|
+
if (isTiebreakOnlyFormat) {
|
|
32648
|
+
return {
|
|
32649
|
+
side1Score: bracketedScores[0],
|
|
32650
|
+
side2Score: bracketedScores[1],
|
|
32651
|
+
winningSide: determineWinningSide(bracketedScores[0], bracketedScores[1]),
|
|
32652
|
+
};
|
|
32653
|
+
}
|
|
32654
|
+
return {
|
|
32655
|
+
side1TiebreakScore: bracketedScores[0],
|
|
32656
|
+
side2TiebreakScore: bracketedScores[1],
|
|
32657
|
+
winningSide: determineWinningSide(bracketedScores[0], bracketedScores[1]),
|
|
32658
|
+
};
|
|
32659
|
+
}
|
|
32616
32660
|
function parseScoreString({ tiebreakTo = 7, scoreString = '', matchUpFormat }) {
|
|
32617
32661
|
let parsedFormat;
|
|
32618
32662
|
let bestOfSets = 3;
|
|
32619
32663
|
if (matchUpFormat) {
|
|
32620
32664
|
try {
|
|
32621
32665
|
parsedFormat = parse(matchUpFormat);
|
|
32622
|
-
const bestOfMatch =
|
|
32666
|
+
const bestOfMatch = /SET(\d+)/.exec(matchUpFormat)?.[1];
|
|
32623
32667
|
bestOfSets = bestOfMatch ? Number.parseInt(bestOfMatch) : 3;
|
|
32624
32668
|
}
|
|
32625
|
-
catch
|
|
32669
|
+
catch {
|
|
32626
32670
|
}
|
|
32627
32671
|
}
|
|
32628
32672
|
return scoreString
|
|
32629
32673
|
?.split(' ')
|
|
32630
32674
|
.filter(Boolean)
|
|
32631
32675
|
.map((set, index) => parseSet({ set, setNumber: index + 1 }));
|
|
32676
|
+
function checkIsTiebreakOnlyFormat(setNumber, isTiebreakOnlySet) {
|
|
32677
|
+
if (!parsedFormat || !isTiebreakOnlySet)
|
|
32678
|
+
return false;
|
|
32679
|
+
const isDecidingSet = setNumber === bestOfSets;
|
|
32680
|
+
const setFormat = isDecidingSet && parsedFormat.finalSetFormat ? parsedFormat.finalSetFormat : parsedFormat.setFormat;
|
|
32681
|
+
if (!setFormat)
|
|
32682
|
+
return false;
|
|
32683
|
+
const tiebreakSetTo = setFormat.tiebreakSet?.tiebreakTo;
|
|
32684
|
+
const regularSetTo = setFormat.setTo;
|
|
32685
|
+
return !!tiebreakSetTo && !regularSetTo;
|
|
32686
|
+
}
|
|
32687
|
+
function getTiebreakToForSet(setNumber) {
|
|
32688
|
+
if (!parsedFormat)
|
|
32689
|
+
return tiebreakTo;
|
|
32690
|
+
const isDecidingSet = setNumber === bestOfSets;
|
|
32691
|
+
const setFormat = isDecidingSet && parsedFormat.finalSetFormat ? parsedFormat.finalSetFormat : parsedFormat.setFormat;
|
|
32692
|
+
return setFormat?.tiebreakFormat?.tiebreakTo ?? tiebreakTo;
|
|
32693
|
+
}
|
|
32694
|
+
function parseTiebreakGame(tiebreakMatch, winningSide, setNumber) {
|
|
32695
|
+
const setTiebreakLowScore = tiebreakMatch[1];
|
|
32696
|
+
const setSpecificTiebreakTo = getTiebreakToForSet(setNumber);
|
|
32697
|
+
const side1TiebreakPerspective = getTiebreakComplement({
|
|
32698
|
+
lowValue: setTiebreakLowScore,
|
|
32699
|
+
isSide1: winningSide === 2,
|
|
32700
|
+
tiebreakTo: setSpecificTiebreakTo,
|
|
32701
|
+
});
|
|
32702
|
+
if (Array.isArray(side1TiebreakPerspective)) {
|
|
32703
|
+
return [side1TiebreakPerspective[0], side1TiebreakPerspective[1]];
|
|
32704
|
+
}
|
|
32705
|
+
return [undefined, undefined];
|
|
32706
|
+
}
|
|
32707
|
+
function parseRegularSet(set, tiebreak, bracketed, setNumber) {
|
|
32708
|
+
const setString = (tiebreak && set.replace(tiebreak[0], '')) || (bracketed && set.replace(bracketed[0], '')) || set;
|
|
32709
|
+
const setScores = setString.split('-').map((score) => Number.parseInt(score));
|
|
32710
|
+
const side1Score = setScores[0];
|
|
32711
|
+
const side2Score = setScores[1];
|
|
32712
|
+
const winningSide = determineWinningSide(side1Score, side2Score);
|
|
32713
|
+
let side1TiebreakScore;
|
|
32714
|
+
let side2TiebreakScore;
|
|
32715
|
+
if (tiebreak) {
|
|
32716
|
+
[side1TiebreakScore, side2TiebreakScore] = parseTiebreakGame(tiebreak, winningSide, setNumber);
|
|
32717
|
+
}
|
|
32718
|
+
if (bracketed) {
|
|
32719
|
+
const matchTiebreakScores = bracketed[1].split('-').map((score) => Number.parseInt(score));
|
|
32720
|
+
side1TiebreakScore = matchTiebreakScores[0];
|
|
32721
|
+
side2TiebreakScore = matchTiebreakScores[1];
|
|
32722
|
+
}
|
|
32723
|
+
return {
|
|
32724
|
+
side1Score,
|
|
32725
|
+
side2Score,
|
|
32726
|
+
side1TiebreakScore,
|
|
32727
|
+
side2TiebreakScore,
|
|
32728
|
+
winningSide,
|
|
32729
|
+
};
|
|
32730
|
+
}
|
|
32632
32731
|
function parseSet({ set, setNumber }) {
|
|
32633
32732
|
const inParentheses = /\(([^)]+)\)/;
|
|
32634
32733
|
const inBrackets = /\[([^\]]+)\]/;
|
|
32635
32734
|
const tiebreak = inParentheses.exec(set);
|
|
32636
32735
|
const bracketed = inBrackets.exec(set);
|
|
32637
32736
|
const isTiebreakOnlySet = set?.startsWith('[') && bracketed;
|
|
32638
|
-
|
|
32639
|
-
|
|
32640
|
-
const isDecidingSet = setNumber === bestOfSets;
|
|
32641
|
-
const setFormat = isDecidingSet && parsedFormat.finalSetFormat ? parsedFormat.finalSetFormat : parsedFormat.setFormat;
|
|
32642
|
-
if (setFormat) {
|
|
32643
|
-
const tiebreakSetTo = setFormat.tiebreakSet?.tiebreakTo;
|
|
32644
|
-
const regularSetTo = setFormat.setTo;
|
|
32645
|
-
isTiebreakOnlyFormat = !!tiebreakSetTo && !regularSetTo;
|
|
32646
|
-
}
|
|
32647
|
-
}
|
|
32648
|
-
let side1Score;
|
|
32649
|
-
let side2Score;
|
|
32650
|
-
let side1TiebreakScore;
|
|
32651
|
-
let side2TiebreakScore;
|
|
32652
|
-
let winningSide;
|
|
32737
|
+
const isTiebreakOnlyFormat = checkIsTiebreakOnlyFormat(setNumber, !!isTiebreakOnlySet);
|
|
32738
|
+
let result;
|
|
32653
32739
|
if (isTiebreakOnlySet) {
|
|
32654
|
-
const bracketedScores = bracketed[1].split('-').map((score) => parseInt(score));
|
|
32655
|
-
|
|
32656
|
-
side1Score = bracketedScores[0];
|
|
32657
|
-
side2Score = bracketedScores[1];
|
|
32658
|
-
winningSide = (side1Score > side2Score && 1) || (side1Score < side2Score && 2) || undefined;
|
|
32659
|
-
}
|
|
32660
|
-
else {
|
|
32661
|
-
side1TiebreakScore = bracketedScores[0];
|
|
32662
|
-
side2TiebreakScore = bracketedScores[1];
|
|
32663
|
-
winningSide =
|
|
32664
|
-
(side1TiebreakScore > side2TiebreakScore && 1) || (side1TiebreakScore < side2TiebreakScore && 2) || undefined;
|
|
32665
|
-
}
|
|
32740
|
+
const bracketedScores = bracketed[1].split('-').map((score) => Number.parseInt(score));
|
|
32741
|
+
result = parseTiebreakOnlySet(bracketedScores, isTiebreakOnlyFormat);
|
|
32666
32742
|
}
|
|
32667
32743
|
else {
|
|
32668
|
-
|
|
32669
|
-
const setScores = setString.split('-').map((score) => Number.parseInt(score));
|
|
32670
|
-
side1Score = setScores[0];
|
|
32671
|
-
side2Score = setScores[1];
|
|
32672
|
-
winningSide = (side1Score > side2Score && 1) || (side1Score < side2Score && 2) || undefined;
|
|
32673
|
-
if (tiebreak) {
|
|
32674
|
-
const setTiebreakLowScore = tiebreak[1];
|
|
32675
|
-
let setSpecificTiebreakTo = tiebreakTo;
|
|
32676
|
-
if (parsedFormat) {
|
|
32677
|
-
const isDecidingSet = setNumber === bestOfSets;
|
|
32678
|
-
const setFormat = isDecidingSet && parsedFormat.finalSetFormat ? parsedFormat.finalSetFormat : parsedFormat.setFormat;
|
|
32679
|
-
if (setFormat?.tiebreakFormat?.tiebreakTo) {
|
|
32680
|
-
setSpecificTiebreakTo = setFormat.tiebreakFormat.tiebreakTo;
|
|
32681
|
-
}
|
|
32682
|
-
}
|
|
32683
|
-
const side1TiebreakPerspective = getTiebreakComplement({
|
|
32684
|
-
lowValue: setTiebreakLowScore,
|
|
32685
|
-
isSide1: winningSide === 2,
|
|
32686
|
-
tiebreakTo: setSpecificTiebreakTo,
|
|
32687
|
-
});
|
|
32688
|
-
if (Array.isArray(side1TiebreakPerspective)) {
|
|
32689
|
-
[side1TiebreakScore, side2TiebreakScore] = side1TiebreakPerspective;
|
|
32690
|
-
}
|
|
32691
|
-
}
|
|
32692
|
-
if (bracketed && !isTiebreakOnlySet) {
|
|
32693
|
-
const matchTiebreakScores = bracketed[1].split('-').map((score) => Number.parseInt(score));
|
|
32694
|
-
side1TiebreakScore = matchTiebreakScores[0];
|
|
32695
|
-
side2TiebreakScore = matchTiebreakScores[1];
|
|
32696
|
-
}
|
|
32744
|
+
result = parseRegularSet(set, tiebreak, bracketed, setNumber);
|
|
32697
32745
|
}
|
|
32698
32746
|
return {
|
|
32699
|
-
side1Score,
|
|
32700
|
-
side2Score,
|
|
32701
|
-
side1TiebreakScore,
|
|
32702
|
-
side2TiebreakScore,
|
|
32703
|
-
winningSide,
|
|
32747
|
+
side1Score: result.side1Score,
|
|
32748
|
+
side2Score: result.side2Score,
|
|
32749
|
+
side1TiebreakScore: result.side1TiebreakScore,
|
|
32750
|
+
side2TiebreakScore: result.side2TiebreakScore,
|
|
32751
|
+
winningSide: result.winningSide,
|
|
32704
32752
|
setNumber,
|
|
32705
32753
|
};
|
|
32706
32754
|
}
|
|
@@ -47221,6 +47269,67 @@ var index$9 = {
|
|
|
47221
47269
|
validMatchUps: validMatchUps
|
|
47222
47270
|
};
|
|
47223
47271
|
|
|
47272
|
+
function inferWinningSideFromAggregate(neutralParsedSets) {
|
|
47273
|
+
const aggregateTotals = neutralParsedSets.reduce((totals, set) => {
|
|
47274
|
+
if (set.side1Score !== undefined || set.side2Score !== undefined) {
|
|
47275
|
+
totals.side1 += set.side1Score ?? 0;
|
|
47276
|
+
totals.side2 += set.side2Score ?? 0;
|
|
47277
|
+
}
|
|
47278
|
+
return totals;
|
|
47279
|
+
}, { side1: 0, side2: 0 });
|
|
47280
|
+
if (aggregateTotals.side1 > aggregateTotals.side2)
|
|
47281
|
+
return 1;
|
|
47282
|
+
if (aggregateTotals.side2 > aggregateTotals.side1)
|
|
47283
|
+
return 2;
|
|
47284
|
+
const tiebreakSet = neutralParsedSets.find((set) => set.side1TiebreakScore !== undefined || set.side2TiebreakScore !== undefined);
|
|
47285
|
+
return tiebreakSet?.winningSide;
|
|
47286
|
+
}
|
|
47287
|
+
function inferWinningSideFromSets(neutralParsedSets) {
|
|
47288
|
+
const setsWon = { side1: 0, side2: 0 };
|
|
47289
|
+
neutralParsedSets.forEach((set) => {
|
|
47290
|
+
if (set.winningSide === 1)
|
|
47291
|
+
setsWon.side1++;
|
|
47292
|
+
else if (set.winningSide === 2)
|
|
47293
|
+
setsWon.side2++;
|
|
47294
|
+
});
|
|
47295
|
+
if (setsWon.side1 > setsWon.side2)
|
|
47296
|
+
return 1;
|
|
47297
|
+
if (setsWon.side2 > setsWon.side1)
|
|
47298
|
+
return 2;
|
|
47299
|
+
return undefined;
|
|
47300
|
+
}
|
|
47301
|
+
function inferWinningSide(winningSide, matchUpFormat, neutralParsedSets) {
|
|
47302
|
+
if (winningSide || !matchUpFormat || !neutralParsedSets)
|
|
47303
|
+
return winningSide;
|
|
47304
|
+
const parsedFormat = parse(matchUpFormat);
|
|
47305
|
+
const isAggregateScoring = parsedFormat?.setFormat?.based === 'A' || parsedFormat?.finalSetFormat?.based === 'A';
|
|
47306
|
+
return isAggregateScoring
|
|
47307
|
+
? inferWinningSideFromAggregate(neutralParsedSets)
|
|
47308
|
+
: inferWinningSideFromSets(neutralParsedSets);
|
|
47309
|
+
}
|
|
47310
|
+
function generateScoreForSideOrder(scoreString, matchUpFormat, setTBlast) {
|
|
47311
|
+
const sets = parseScoreString({ scoreString, matchUpFormat });
|
|
47312
|
+
return {
|
|
47313
|
+
sets,
|
|
47314
|
+
scoreStringSide1: generateScoreString({ sets, matchUpFormat, setTBlast }),
|
|
47315
|
+
scoreStringSide2: generateScoreString({ sets, reversed: true, matchUpFormat, setTBlast }),
|
|
47316
|
+
};
|
|
47317
|
+
}
|
|
47318
|
+
function generateScoreForWinnerOrder(neutralParsedSets, inferredWinningSide, matchUpFormat, setTBlast) {
|
|
47319
|
+
const winningScoreString = generateScoreString({ sets: neutralParsedSets, matchUpFormat, setTBlast });
|
|
47320
|
+
const losingScoreString = generateScoreString({ sets: neutralParsedSets, reversed: true, matchUpFormat, setTBlast });
|
|
47321
|
+
if (typeof winningScoreString !== 'string')
|
|
47322
|
+
return winningScoreString;
|
|
47323
|
+
if (typeof losingScoreString !== 'string')
|
|
47324
|
+
return losingScoreString;
|
|
47325
|
+
const scoreStringSide1 = inferredWinningSide === 2 ? losingScoreString : winningScoreString;
|
|
47326
|
+
const scoreStringSide2 = inferredWinningSide === 2 ? winningScoreString : losingScoreString;
|
|
47327
|
+
return {
|
|
47328
|
+
sets: parseScoreString({ scoreString: scoreStringSide1, matchUpFormat }),
|
|
47329
|
+
scoreStringSide1,
|
|
47330
|
+
scoreStringSide2,
|
|
47331
|
+
};
|
|
47332
|
+
}
|
|
47224
47333
|
function generateOutcomeFromScoreString(params) {
|
|
47225
47334
|
const { matchUpFormat, matchUpStatus, winningSide, scoreString, setTBlast } = params;
|
|
47226
47335
|
if (!scoreString)
|
|
@@ -47235,45 +47344,12 @@ function generateOutcomeFromScoreString(params) {
|
|
|
47235
47344
|
return { error: INVALID_VALUES, winningSide };
|
|
47236
47345
|
const neutralParsedSets = scoreString && parseScoreString({ scoreString, matchUpFormat });
|
|
47237
47346
|
const isBracketNotation = scoreString?.trim().startsWith('[');
|
|
47238
|
-
|
|
47239
|
-
|
|
47240
|
-
|
|
47241
|
-
|
|
47242
|
-
|
|
47243
|
-
|
|
47244
|
-
else if (set.winningSide === 2)
|
|
47245
|
-
setsWon.side2++;
|
|
47246
|
-
});
|
|
47247
|
-
if (setsWon.side1 > setsWon.side2)
|
|
47248
|
-
inferredWinningSide = 1;
|
|
47249
|
-
else if (setsWon.side2 > setsWon.side1)
|
|
47250
|
-
inferredWinningSide = 2;
|
|
47251
|
-
}
|
|
47252
|
-
const score = {};
|
|
47253
|
-
const winningScoreString = generateScoreString({
|
|
47254
|
-
sets: neutralParsedSets,
|
|
47255
|
-
matchUpFormat,
|
|
47256
|
-
setTBlast,
|
|
47257
|
-
});
|
|
47258
|
-
const losingScoreString = generateScoreString({
|
|
47259
|
-
sets: neutralParsedSets,
|
|
47260
|
-
reversed: true,
|
|
47261
|
-
matchUpFormat,
|
|
47262
|
-
setTBlast,
|
|
47263
|
-
});
|
|
47264
|
-
if (isBracketNotation) {
|
|
47265
|
-
score.scoreStringSide1 = winningScoreString;
|
|
47266
|
-
score.scoreStringSide2 = losingScoreString;
|
|
47267
|
-
}
|
|
47268
|
-
else if (inferredWinningSide === 2) {
|
|
47269
|
-
score.scoreStringSide1 = losingScoreString;
|
|
47270
|
-
score.scoreStringSide2 = winningScoreString;
|
|
47271
|
-
}
|
|
47272
|
-
else {
|
|
47273
|
-
score.scoreStringSide1 = winningScoreString;
|
|
47274
|
-
score.scoreStringSide2 = losingScoreString;
|
|
47275
|
-
}
|
|
47276
|
-
score.sets = parseScoreString({ scoreString: score.scoreStringSide1, matchUpFormat });
|
|
47347
|
+
const inferredWinningSide = inferWinningSide(winningSide, matchUpFormat, neutralParsedSets);
|
|
47348
|
+
const parsedFormat = parse(matchUpFormat);
|
|
47349
|
+
const isAggregateScoring = parsedFormat?.setFormat?.based === 'A' || parsedFormat?.finalSetFormat?.based === 'A';
|
|
47350
|
+
const score = isBracketNotation || isAggregateScoring
|
|
47351
|
+
? generateScoreForSideOrder(scoreString, matchUpFormat, setTBlast)
|
|
47352
|
+
: generateScoreForWinnerOrder(neutralParsedSets, inferredWinningSide, matchUpFormat, setTBlast);
|
|
47277
47353
|
return definedAttributes({
|
|
47278
47354
|
outcome: {
|
|
47279
47355
|
matchUpStatus,
|