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.
@@ -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.41';
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((f) => f).join('-');
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
- if (scoreDiff < 2) {
32202
+ const requiredWinBy = NoAD ? 1 : 2;
32203
+ if (scoreDiff < requiredWinBy) {
32201
32204
  return {
32202
32205
  isValid: false,
32203
- error: `Tiebreak-only set must be won by at least 2 points, got ${winnerScore}-${loserScore}`,
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
- return validateTiebreakOnlySet(winnerScore, loserScore, scoreDiff, tiebreakSetTo, allowIncomplete ?? false);
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 = matchUpFormat?.match(/SET(\d+)/)?.[1];
32666
+ const bestOfMatch = /SET(\d+)/.exec(matchUpFormat)?.[1];
32641
32667
  bestOfSets = bestOfMatch ? Number.parseInt(bestOfMatch) : 3;
32642
32668
  }
32643
- catch (_e) {
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
- let isTiebreakOnlyFormat = false;
32657
- if (parsedFormat && isTiebreakOnlySet) {
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
- if (isTiebreakOnlyFormat) {
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
- const setString = (tiebreak && set.replace(tiebreak[0], '')) || (bracketed && set.replace(bracketed[0], '')) || set;
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
- let inferredWinningSide = winningSide;
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
- if (isBracketNotation || isAggregateScoring) {
47296
- score.sets = parseScoreString({ scoreString, matchUpFormat });
47297
- score.scoreStringSide1 = generateScoreString({
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,