tods-competition-factory 2.2.41 → 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 +165 -143
- 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,
|
|
@@ -32393,7 +32401,8 @@ function validateSetScore(set, matchUpFormat, isDecidingSet, allowIncomplete) {
|
|
|
32393
32401
|
const loserScore = Math.min(side1Score, side2Score);
|
|
32394
32402
|
const scoreDiff = winnerScore - loserScore;
|
|
32395
32403
|
if (isTiebreakOnlyFormat) {
|
|
32396
|
-
|
|
32404
|
+
const NoAD = setFormat.tiebreakSet?.NoAD ?? false;
|
|
32405
|
+
return validateTiebreakOnlySet(winnerScore, loserScore, scoreDiff, tiebreakSetTo, allowIncomplete ?? false, NoAD);
|
|
32397
32406
|
}
|
|
32398
32407
|
const hasExplicitTiebreak = side1TiebreakScore !== undefined || side2TiebreakScore !== undefined;
|
|
32399
32408
|
const isImplicitTiebreak = setTo && winnerScore === setTo + 1 && loserScore === setTo;
|
|
@@ -32631,94 +32640,115 @@ function getHighTiebreakValue(params) {
|
|
|
32631
32640
|
return tiebreakTo;
|
|
32632
32641
|
}
|
|
32633
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
|
+
}
|
|
32634
32660
|
function parseScoreString({ tiebreakTo = 7, scoreString = '', matchUpFormat }) {
|
|
32635
32661
|
let parsedFormat;
|
|
32636
32662
|
let bestOfSets = 3;
|
|
32637
32663
|
if (matchUpFormat) {
|
|
32638
32664
|
try {
|
|
32639
32665
|
parsedFormat = parse(matchUpFormat);
|
|
32640
|
-
const bestOfMatch =
|
|
32666
|
+
const bestOfMatch = /SET(\d+)/.exec(matchUpFormat)?.[1];
|
|
32641
32667
|
bestOfSets = bestOfMatch ? Number.parseInt(bestOfMatch) : 3;
|
|
32642
32668
|
}
|
|
32643
|
-
catch
|
|
32669
|
+
catch {
|
|
32644
32670
|
}
|
|
32645
32671
|
}
|
|
32646
32672
|
return scoreString
|
|
32647
32673
|
?.split(' ')
|
|
32648
32674
|
.filter(Boolean)
|
|
32649
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
|
+
}
|
|
32650
32731
|
function parseSet({ set, setNumber }) {
|
|
32651
32732
|
const inParentheses = /\(([^)]+)\)/;
|
|
32652
32733
|
const inBrackets = /\[([^\]]+)\]/;
|
|
32653
32734
|
const tiebreak = inParentheses.exec(set);
|
|
32654
32735
|
const bracketed = inBrackets.exec(set);
|
|
32655
32736
|
const isTiebreakOnlySet = set?.startsWith('[') && bracketed;
|
|
32656
|
-
|
|
32657
|
-
|
|
32658
|
-
const isDecidingSet = setNumber === bestOfSets;
|
|
32659
|
-
const setFormat = isDecidingSet && parsedFormat.finalSetFormat ? parsedFormat.finalSetFormat : parsedFormat.setFormat;
|
|
32660
|
-
if (setFormat) {
|
|
32661
|
-
const tiebreakSetTo = setFormat.tiebreakSet?.tiebreakTo;
|
|
32662
|
-
const regularSetTo = setFormat.setTo;
|
|
32663
|
-
isTiebreakOnlyFormat = !!tiebreakSetTo && !regularSetTo;
|
|
32664
|
-
}
|
|
32665
|
-
}
|
|
32666
|
-
let side1Score;
|
|
32667
|
-
let side2Score;
|
|
32668
|
-
let side1TiebreakScore;
|
|
32669
|
-
let side2TiebreakScore;
|
|
32670
|
-
let winningSide;
|
|
32737
|
+
const isTiebreakOnlyFormat = checkIsTiebreakOnlyFormat(setNumber, !!isTiebreakOnlySet);
|
|
32738
|
+
let result;
|
|
32671
32739
|
if (isTiebreakOnlySet) {
|
|
32672
|
-
const bracketedScores = bracketed[1].split('-').map((score) => parseInt(score));
|
|
32673
|
-
|
|
32674
|
-
side1Score = bracketedScores[0];
|
|
32675
|
-
side2Score = bracketedScores[1];
|
|
32676
|
-
winningSide = (side1Score > side2Score && 1) || (side1Score < side2Score && 2) || undefined;
|
|
32677
|
-
}
|
|
32678
|
-
else {
|
|
32679
|
-
side1TiebreakScore = bracketedScores[0];
|
|
32680
|
-
side2TiebreakScore = bracketedScores[1];
|
|
32681
|
-
winningSide =
|
|
32682
|
-
(side1TiebreakScore > side2TiebreakScore && 1) || (side1TiebreakScore < side2TiebreakScore && 2) || undefined;
|
|
32683
|
-
}
|
|
32740
|
+
const bracketedScores = bracketed[1].split('-').map((score) => Number.parseInt(score));
|
|
32741
|
+
result = parseTiebreakOnlySet(bracketedScores, isTiebreakOnlyFormat);
|
|
32684
32742
|
}
|
|
32685
32743
|
else {
|
|
32686
|
-
|
|
32687
|
-
const setScores = setString.split('-').map((score) => Number.parseInt(score));
|
|
32688
|
-
side1Score = setScores[0];
|
|
32689
|
-
side2Score = setScores[1];
|
|
32690
|
-
winningSide = (side1Score > side2Score && 1) || (side1Score < side2Score && 2) || undefined;
|
|
32691
|
-
if (tiebreak) {
|
|
32692
|
-
const setTiebreakLowScore = tiebreak[1];
|
|
32693
|
-
let setSpecificTiebreakTo = tiebreakTo;
|
|
32694
|
-
if (parsedFormat) {
|
|
32695
|
-
const isDecidingSet = setNumber === bestOfSets;
|
|
32696
|
-
const setFormat = isDecidingSet && parsedFormat.finalSetFormat ? parsedFormat.finalSetFormat : parsedFormat.setFormat;
|
|
32697
|
-
if (setFormat?.tiebreakFormat?.tiebreakTo) {
|
|
32698
|
-
setSpecificTiebreakTo = setFormat.tiebreakFormat.tiebreakTo;
|
|
32699
|
-
}
|
|
32700
|
-
}
|
|
32701
|
-
const side1TiebreakPerspective = getTiebreakComplement({
|
|
32702
|
-
lowValue: setTiebreakLowScore,
|
|
32703
|
-
isSide1: winningSide === 2,
|
|
32704
|
-
tiebreakTo: setSpecificTiebreakTo,
|
|
32705
|
-
});
|
|
32706
|
-
if (Array.isArray(side1TiebreakPerspective)) {
|
|
32707
|
-
[side1TiebreakScore, side2TiebreakScore] = side1TiebreakPerspective;
|
|
32708
|
-
}
|
|
32709
|
-
}
|
|
32710
|
-
if (bracketed && !isTiebreakOnlySet) {
|
|
32711
|
-
const matchTiebreakScores = bracketed[1].split('-').map((score) => Number.parseInt(score));
|
|
32712
|
-
side1TiebreakScore = matchTiebreakScores[0];
|
|
32713
|
-
side2TiebreakScore = matchTiebreakScores[1];
|
|
32714
|
-
}
|
|
32744
|
+
result = parseRegularSet(set, tiebreak, bracketed, setNumber);
|
|
32715
32745
|
}
|
|
32716
32746
|
return {
|
|
32717
|
-
side1Score,
|
|
32718
|
-
side2Score,
|
|
32719
|
-
side1TiebreakScore,
|
|
32720
|
-
side2TiebreakScore,
|
|
32721
|
-
winningSide,
|
|
32747
|
+
side1Score: result.side1Score,
|
|
32748
|
+
side2Score: result.side2Score,
|
|
32749
|
+
side1TiebreakScore: result.side1TiebreakScore,
|
|
32750
|
+
side2TiebreakScore: result.side2TiebreakScore,
|
|
32751
|
+
winningSide: result.winningSide,
|
|
32722
32752
|
setNumber,
|
|
32723
32753
|
};
|
|
32724
32754
|
}
|
|
@@ -47239,6 +47269,67 @@ var index$9 = {
|
|
|
47239
47269
|
validMatchUps: validMatchUps
|
|
47240
47270
|
};
|
|
47241
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
|
+
}
|
|
47242
47333
|
function generateOutcomeFromScoreString(params) {
|
|
47243
47334
|
const { matchUpFormat, matchUpStatus, winningSide, scoreString, setTBlast } = params;
|
|
47244
47335
|
if (!scoreString)
|
|
@@ -47253,81 +47344,12 @@ function generateOutcomeFromScoreString(params) {
|
|
|
47253
47344
|
return { error: INVALID_VALUES, winningSide };
|
|
47254
47345
|
const neutralParsedSets = scoreString && parseScoreString({ scoreString, matchUpFormat });
|
|
47255
47346
|
const isBracketNotation = scoreString?.trim().startsWith('[');
|
|
47256
|
-
|
|
47257
|
-
if (!inferredWinningSide && matchUpFormat && neutralParsedSets) {
|
|
47258
|
-
const parsedFormat = parse(matchUpFormat);
|
|
47259
|
-
const isAggregateScoring = parsedFormat?.setFormat?.based === 'A' || parsedFormat?.finalSetFormat?.based === 'A';
|
|
47260
|
-
if (isAggregateScoring) {
|
|
47261
|
-
const aggregateTotals = neutralParsedSets.reduce((totals, set) => {
|
|
47262
|
-
if (set.side1Score !== undefined || set.side2Score !== undefined) {
|
|
47263
|
-
totals.side1 += set.side1Score ?? 0;
|
|
47264
|
-
totals.side2 += set.side2Score ?? 0;
|
|
47265
|
-
}
|
|
47266
|
-
return totals;
|
|
47267
|
-
}, { side1: 0, side2: 0 });
|
|
47268
|
-
if (aggregateTotals.side1 > aggregateTotals.side2)
|
|
47269
|
-
inferredWinningSide = 1;
|
|
47270
|
-
else if (aggregateTotals.side2 > aggregateTotals.side1)
|
|
47271
|
-
inferredWinningSide = 2;
|
|
47272
|
-
else {
|
|
47273
|
-
const tiebreakSet = neutralParsedSets.find((set) => set.side1TiebreakScore !== undefined || set.side2TiebreakScore !== undefined);
|
|
47274
|
-
if (tiebreakSet)
|
|
47275
|
-
inferredWinningSide = tiebreakSet.winningSide;
|
|
47276
|
-
}
|
|
47277
|
-
}
|
|
47278
|
-
else {
|
|
47279
|
-
const setsWon = { side1: 0, side2: 0 };
|
|
47280
|
-
neutralParsedSets.forEach((set) => {
|
|
47281
|
-
if (set.winningSide === 1)
|
|
47282
|
-
setsWon.side1++;
|
|
47283
|
-
else if (set.winningSide === 2)
|
|
47284
|
-
setsWon.side2++;
|
|
47285
|
-
});
|
|
47286
|
-
if (setsWon.side1 > setsWon.side2)
|
|
47287
|
-
inferredWinningSide = 1;
|
|
47288
|
-
else if (setsWon.side2 > setsWon.side1)
|
|
47289
|
-
inferredWinningSide = 2;
|
|
47290
|
-
}
|
|
47291
|
-
}
|
|
47292
|
-
const score = {};
|
|
47347
|
+
const inferredWinningSide = inferWinningSide(winningSide, matchUpFormat, neutralParsedSets);
|
|
47293
47348
|
const parsedFormat = parse(matchUpFormat);
|
|
47294
47349
|
const isAggregateScoring = parsedFormat?.setFormat?.based === 'A' || parsedFormat?.finalSetFormat?.based === 'A';
|
|
47295
|
-
|
|
47296
|
-
|
|
47297
|
-
|
|
47298
|
-
sets: score.sets,
|
|
47299
|
-
matchUpFormat,
|
|
47300
|
-
setTBlast,
|
|
47301
|
-
});
|
|
47302
|
-
score.scoreStringSide2 = generateScoreString({
|
|
47303
|
-
sets: score.sets,
|
|
47304
|
-
reversed: true,
|
|
47305
|
-
matchUpFormat,
|
|
47306
|
-
setTBlast,
|
|
47307
|
-
});
|
|
47308
|
-
}
|
|
47309
|
-
else {
|
|
47310
|
-
const winningScoreString = generateScoreString({
|
|
47311
|
-
sets: neutralParsedSets,
|
|
47312
|
-
matchUpFormat,
|
|
47313
|
-
setTBlast,
|
|
47314
|
-
});
|
|
47315
|
-
const losingScoreString = generateScoreString({
|
|
47316
|
-
sets: neutralParsedSets,
|
|
47317
|
-
reversed: true,
|
|
47318
|
-
matchUpFormat,
|
|
47319
|
-
setTBlast,
|
|
47320
|
-
});
|
|
47321
|
-
if (inferredWinningSide === 2) {
|
|
47322
|
-
score.scoreStringSide1 = losingScoreString;
|
|
47323
|
-
score.scoreStringSide2 = winningScoreString;
|
|
47324
|
-
}
|
|
47325
|
-
else {
|
|
47326
|
-
score.scoreStringSide1 = winningScoreString;
|
|
47327
|
-
score.scoreStringSide2 = losingScoreString;
|
|
47328
|
-
}
|
|
47329
|
-
score.sets = parseScoreString({ scoreString: score.scoreStringSide1, matchUpFormat });
|
|
47330
|
-
}
|
|
47350
|
+
const score = isBracketNotation || isAggregateScoring
|
|
47351
|
+
? generateScoreForSideOrder(scoreString, matchUpFormat, setTBlast)
|
|
47352
|
+
: generateScoreForWinnerOrder(neutralParsedSets, inferredWinningSide, matchUpFormat, setTBlast);
|
|
47331
47353
|
return definedAttributes({
|
|
47332
47354
|
outcome: {
|
|
47333
47355
|
matchUpStatus,
|